Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-11-2012, 19:12   #1
Tioz90
Senior Member
 
L'Avatar di Tioz90
 
Iscritto dal: Feb 2007
Città: Como
Messaggi: 2551
[MIPS] Aiuto nel realizzare un programma

Ciao ragazzi, vi posto il codice C che ho scritto come guida per aiutarmi a realizzare lo stesso programma in Assembly MIPS.

In pratica voglio fare in modo che l'utente possa inserire un numero N e che venga creata una matrice di dimensione (N,N), che successivamente gli venga richiesto che valore inserire in ogni cella della matrice e infine che venga visualizzato il determinante.

In C funziona perfettamente ma sto avendo problemi a capire come allocare runtime la memoria per memorizzare l'array in Assembly.
Grazie mille a chi ha voglia di darci un'occhiata

Codice:
#include <stdio.h> 

void matrix(int d); 
int determinante(int dim,int matrix[dim][dim]); 
int indice(int ind); 

int main(void) 
{
   int d; //dimensione matrice
   printf("Dimensione matrice?: "); 
   scanf("%d",&d); //memorizza la dimensione in d
   matrix(d); //chiama la funz matrix
   system("pause");
   return 0;
} 

void matrix(int dim) //funz matrix
{ 
   int i,j; 
   int m[dim][dim]; //crea matrice d*d (dim*dim)
   
   //creazione matrice
   printf("Inserire gli elementi della matrice %dx%d :\n",dim,dim); //inserisce i dati nella matrice uno per uno
   for(i=0;i<dim;++i) //scorre la linea
   { 
      for(j=0;j<dim;++j) //scorre la colonna
      { 
         printf("Inserire l'elemento della posizione (%d,%d): ", i+1,j+1);
         scanf("%d",&m[i][j]); //inserisce il dato nella matrice
      } 
   } 
   
   printf("\n\nMatrice creata:\n\n");
   
   for(i=0;i<dim;++i) //scorre la linea
   { 
      for(j=0;j<dim;++j) //scorre la colonna
      { 
                         printf("%d\t", m[i][j]);
      }
                         printf("\n");
   }                   
   
   
   //stampa determinante
   printf("\n\nIl determinante della matrice e': %d\n",determinante(dim,m)); 
} 

int determinante(int dim,int matrix[dim][dim]) 
{ 
   int i,j,k; 
   int D=0;

	//se la matrice e' una 1x1
   if(dim==1)
		D=matrix[0][0]; 
		
		
   for(i=0;i<dim&&dim>1;++i) //scorre righe
   { 
      int mattemp[dim-1][dim-1]; //crea una matrice delle stesse dimensioni di prima (dim-1 perchè se creo una matrice d=3 se comincio a contare da i=0 ne creerebbe una 4x4)
      for(j=0;j<dim;++j) //scorre colonne 
      { 
         for(k=1;k<dim&&j!=i;++k) //controllo sugli indici, controlla se il contatore è minore della dimensione della matrice e controlla che non sia sulla diagonale
         { 
            if(j<i) //se l'indice j delle colonne è minore dell'indice i delle righe mette nella matrice temporanea mattemp il valore che si torva in quella posizione
                   mattemp[j][k-1]=matrix[j][k]; 
            if(j>i) 
                   mattemp[j-1][k-1]=matrix[j][k]; 
         } 
      } 
      D=D+indice(i)/*passa i alla funz indice che ritorna 1,-1*/*matrix[i][0]/*considera una matrice di un elemento*/*determinante(dim-1,mattemp)/*passa alla funz determinante la dimensione della sottomatrice e la matrice stessa e ne restituisce il determinante*/
      ; //calcola il determinante
   } 
   return D; 
} 
	//indice 1,-1 a seconda della posizione considerata
int indice(int ind) //funzione indice
{ 
   if(ind%2==0)
               return 1; //controlla se la divisione tra indice colonna e indice riga è pari o dispari
   else 
        return -1; 
}
__________________
DFI Blood Iron; Intel E6400 (FSB wall>600Mhz); 2x1GB Corsair XMS2 800MHz; POV 9800GX2; Seagate Cheetah 15K.3 36GB;
Tagan Piperock Series 600W, Acer AL2216W

Ultima modifica di Tioz90 : 23-11-2012 alle 19:33.
Tioz90 è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2012, 21:11   #2
Tioz90
Senior Member
 
L'Avatar di Tioz90
 
Iscritto dal: Feb 2007
Città: Como
Messaggi: 2551
Credo di esserci riuscito
Posto qui per referenza futura

Codice:
######## Questa sezione legge i dati da mettere nella cella della matrice ########	
						
					move	$s1,$s0
					li		$t1,0				
	forriga:										#ciclo for per visualizzare l'indice di riga
					li		$t2,0
	forcolonna:										#ciclo for per visualizzare l'indice di colonna
					li		$v0,4					#stampa messaggio inserisci
					la		$a0,inserisci
					syscall
					li		$v0,1					#stampa l'indice di riga
					move	$a0,$t1
					syscall
					li		$v0,4					#stampa separatore
					la		$a0,virgola
					syscall
					li		$v0,1					#stampa l'indice di colonna
					move	$a0,$t2
					syscall
					li		$v0,4					#stampa la parentesi di chiusura
					la		$a0,parentesi
					syscall
					
					li		$v0,5					#legge il dato da mettere nella cella
					syscall
					sw		$v0,0($s0)				#salva il dato letto nell'array
					addi	$s0,4					#punta al prossimo elemento dell'array
					
					li		$v0,4					#va a capo
					la		$a0,capo
					syscall
					
					addi	$t2,1					#incrementa il contatore di colonna
					blt		$t2,$t0,forcolonna		#controllo del for interno (colonna)
					addi 	$t1,1					#incrementa il contatore di riga
					blt		$t1,$t0,forriga			#controllo del for esterno (riga)
					
##################################################################################
__________________
DFI Blood Iron; Intel E6400 (FSB wall>600Mhz); 2x1GB Corsair XMS2 800MHz; POV 9800GX2; Seagate Cheetah 15K.3 36GB;
Tagan Piperock Series 600W, Acer AL2216W
Tioz90 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
Apple annuncia i nuovi MacBook Pro con s...
Warhorse Studios colpita da un grave att...
MX Master 4, arriva l'edizione speciale ...
Kali Linux 2026.3 porta la caccia alle r...
Oracle si affida a OpenAI: ChatGPT e Cod...
Kaspersky punta su IA e servizi gestiti ...
Già sfruttata la falla Brotli che...
Potrebbe essere stato scoperto un nuovo ...
Claude Code, il prompt per scovare telec...
Palit e GALAX smentiscono le voci sulla ...
Fujifilm annuncia la Instax Mini Evo 2, ...
Tailscale chiude le falle SSH verso root...
Il tuo Galaxy laggava nei giochi? Samsun...
Arrivano i nuovi Amazon Echo: prezzi da ...
Il nuovo pickup elettrico Ford può alime...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:48.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v