Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [C] Indice matrice

  1. #1

    [C] Indice matrice

    Ciao a tutti! Ho sviluppato un programma che data in input una matrice quadrata restituisce l'indice di riga e di colonna dell'elemento massimo e dell'elemento minimo.
    Solo che non funziona sempre, mi aiutate a capire dov'è l'errore logico?
    codice:
    #include<stdio.h>
    
    int main()
    {
        int M[10][10],i,j,r,c;
    	
    	printf("Quante righe e quante colonne vuoi?\n");
    	scanf("%d",&r);
    	
    	c=r;
    	
    	for(i=0;i<r;i++){
    	for(j=0;j<c;j++){
    	printf("Inserisci l'elemento di riga %d e di colonna %d: \n",i,j);
    	scanf("%d",&M[i][j]);
    	}
    	}
    
    	printf("L'elemento massimo della matrice si trova in riga %d e colonna %d\n",IndMaxR(r,c,M),IndMaxC(r,c,M));
    	printf("L'elemento minimo della matrice si trova in riga %d e colonna %d\n",IndMinR(r,c,M),IndMinC(r,c,M));
    	return 0;
    }
    
    int IndMaxR(int righe, int colonne, int Matrice[][10])
    {
    int i,j,massimo,max;
    
    massimo = Matrice[0][0];
    max=0;
    
    for(i=0;i<righe;i++){
    	for(j=0;j<colonne;j++){
    	if(Matrice[i][j] > massimo)
    	max = i;
    }
    }
    return max;
    }
    
    int IndMaxC(int righe, int colonne, int Matrice[][10])
    {
    int i,j,massimo,max;
    
    massimo = Matrice[0][0];
    max=0;
    
    for(i=0;i<righe;i++){
    	for(j=0;j<colonne;j++){
    	if(Matrice[i][j] > massimo)
    	max = j;
    }
    }
    return max;
    }
    
    int IndMinR(int righe, int colonne, int Matrice[][10])
    {
    int i,j,minimo,min;
    
    minimo = Matrice[0][0];
    min=0;
    
    for(i=0;i<righe;i++){
    	for(j=0;j<colonne;j++){
    	if(Matrice[i][j] < minimo)
    	min = i;
    }
    }
    return min;
    }
    
    
    int IndMinC(int righe, int colonne, int Matrice[][10])
    {
    int i,j,minimo,min;
    
    minimo = Matrice[0][0];
    min=0;
    
    for(i=0;i<righe;i++){
    	for(j=0;j<colonne;j++){
    	if(Matrice[i][j] < minimo)
    	min = j;
    }
    }
    return min;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In primo luogo, il programma che hai mostrato presenta degli errori in compilazione. Dovresti presentare un codice corretto.

    Inoltre sarebbe meglio che ci fornissi un esempio in cui hai dei risultati sbagliati, così da arrivare prima al problema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il programma non presenta nessun errore, a me lo compila tranquillamente...
    Il problema è questo, vi posto l'output del programma:
    codice:
    Quante righe e quante colonne vuoi?
    2
    Inserisci l'elemento di riga 0 e di colonna 0:
    1
    Inserisci l'elemento di riga 0 e di colonna 1:
    2
    Inserisci l'elemento di riga 1 e di colonna 0:
    3
    Inserisci l'elemento di riga 1 e di colonna 1:
    4
    L'elemento massimo della matrice si trova in riga 1 e colonna 1
    L'elemento minimo della matrice si trova in riga 0 e colonna 0
    E fin qua tt bene... Ma se inserisco:
    codice:
    Quante righe e quante colonne vuoi?
    2
    Inserisci l'elemento di riga 0 e di colonna 0:
    4
    Inserisci l'elemento di riga 0 e di colonna 1:
    9
    Inserisci l'elemento di riga 1 e di colonna 0:
    6
    Inserisci l'elemento di riga 1 e di colonna 1:
    5
    L'elemento massimo della matrice si trova in riga 1 e colonna 1
    L'elemento minimo della matrice si trova in riga 0 e colonna 0
    Non va bene... Ancora un altro output:
    codice:
    Quante righe e quante colonne vuoi?
    2
    Inserisci l'elemento di riga 0 e di colonna 0:
    6
    Inserisci l'elemento di riga 0 e di colonna 1:
    9
    Inserisci l'elemento di riga 1 e di colonna 0:
    1
    Inserisci l'elemento di riga 1 e di colonna 1:
    3
    L'elemento massimo della matrice si trova in riga 0 e colonna 1
    L'elemento minimo della matrice si trova in riga 1 e colonna 1

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da .arkSkull:.
    Il programma non presenta nessun errore
    (line 32): error C3861: 'IndMaxR': identifier not found
    (line 32): error C3861: 'IndMaxC': identifier not found
    (line 33): error C3861: 'IndMinR': identifier not found
    (line 33): error C3861: 'IndMinC': identifier not found

    Gli errori sono dovuti al fatto che le funzioni che seguono il main non sono dichiarate in precedenza con

    int IndMaxR(int righe, int colonne, int Matrice[][10]);
    int IndMaxC(int righe, int colonne, int Matrice[][10]);
    int IndMinR(int righe, int colonne, int Matrice[][10]);
    int IndMinC(int righe, int colonne, int Matrice[][10]);

    Probabilmente al tuo compilatore non importa, ma sono errori.

    Per il problema, dai un'occhiata alle correzioni in rosso

    codice:
    int IndMaxR(int righe, int colonne, int Matrice[][10])
    {
    	int i,j,massimo,max;
    
    	massimo = Matrice[0][0];
    	max=0;
    
    	for(i=0;i<righe;i++)
    	{
    		for(j=0;j<colonne;j++)
    		{
    			if(Matrice[i][j] > massimo)
    			{
    				max = i;
    				massimo = Matrice[i][j];
    			}
    		}
    	}
    
    	return max;
    }
    
    int IndMaxC(int righe, int colonne, int Matrice[][10])
    {
    	int i,j,massimo,max;
    
    	massimo = Matrice[0][0];
    	max=0;
    
    	for(i=0;i<righe;i++)
    	{
    		for(j=0;j<colonne;j++)
    		{
    			if(Matrice[i][j] > massimo)
    			{
    				max = j;
    				massimo = Matrice[i][j];
    			}
    		}
    	}
    
    	return max;
    }
    
    int IndMinR(int righe, int colonne, int Matrice[][10])
    {
    	int i,j,minimo,min;
    
    	minimo = Matrice[0][0];
    	min=0;
    
    	for(i=0;i<righe;i++)
    	{
    		for(j=0;j<colonne;j++)
    		{
    			if(Matrice[i][j] < minimo)
    			{
    				min = i;
    				minimo = Matrice[i][j];
    			}
    		}
    	}
    
    	return min;
    }
    
    
    int IndMinC(int righe, int colonne, int Matrice[][10])
    {
    	int i,j,minimo,min;
    
    	minimo = Matrice[0][0];
    	min=0;
    
    	for(i=0;i<righe;i++)
    	{
    		for(j=0;j<colonne;j++)
    		{
    			if(Matrice[i][j] < minimo)
    			{
    				min = j;
    				minimo = Matrice[i][j];
    			}
    		}
    	}
    
    	return min;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Grazie adesso funziona correttamente ... anche se non capisco perchè funziona semplicemente mettendo quell'istruzione di assegnamento dopo!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da .arkSkull:.
    anche se non capisco perchè funziona semplicemente mettendo quell'istruzione di assegnamento dopo!
    Cosa fa quell'istruzione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Lo so cosa fa, non capisco però perchè il programma non funzioni senza
    codice:
    minimo = Matrice[i][j];

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da .arkSkull:.
    Lo so cosa fa, non capisco però perchè il programma non funzioni senza
    codice:
    minimo = Matrice[i][j];
    Quello che intendo è che se sai cosa fa (ovvero a cosa serve) devi capire anche perché senza il programma non funziona.

    Quindi, a cosa serve scrivere in quel punto del programma

    minimo = Matrice[i][j];

    massimo = Matrice[i][j];

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Penso che non servi a nulla perchè io voglio che ritorni l'indice i e j e non il valore in i e j; quello che fa questa istruzione minimo = Matrice[i][j] è assegnare a minimo il valore della matrice in posizione i e j, ma dal momento che a me serve solo l indice pensavo che un'istruzione del tipo max = i bastasse... Evidentemente no!!

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da .arkSkull:.
    Penso che non servi a nulla perchè io voglio che ritorni l'indice i e j e non il valore in i e j
    Ma per ritornare l'indice devi sapere se il valore è il minimo/massimo, o no?

    Quando hai scritto

    massimo = Matrice[0][0];

    pensavi che il massimo fosse sempre e comunque il primo elemento o che potesse essere un altro?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.