Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    24

    [C] esercizio su Matrice

    salve non riesco a risolvere questo esercizio in C. l esercizio mi chiede di creare una matrice, e fino a qui ci siamo, e poi di rilevare il numero che si presenta il maggior numero di volte. mi potreste aiutare? Mi sono bloccato. grazie.

  2. #2
    prova almeno a buttar giù due righe di codice

    ciao
    sergio

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    24
    ciao sergio io ho scritto solo il riempimento della matrice e la visualizzazione, ho cercato di comparare cn un ciclo for a[i][j] con a[i+1][j+1] ed assegnarlo ad una variabile

    for(i=0; i<3; i++)
    for(j=0; j<3; j++)
    {
    if(a[i][j]==a[i+1][j+1])
    temp=a[i][j];
    }

    ma c è qualkosa che nn va.

    #include <stdio.h>
    #include <stdlib.h>


    int main()
    {
    int i, j;
    int a[3][3];

    // Riempimento matrice
    for(i=0; i<3; i++)
    for(j=0; j<3; j++)
    {
    printf("inserisci num. riga %d colonna %d: ", i,j);
    scanf(" %d", &a[i][j]);
    }

    //Visualizzazione matrice
    for(i=0; i<3; i++)
    {
    printf("\n");
    for(j=0; j<3; j++)
    printf("%5d ",a[i][j]);
    printf("\n");
    }

    system("PAUSE");
    return 0;
    }

  4. #4
    studiati questa, tra le soluzioni possibili

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main()
    {
    
    	unsigned int i, j;
    	unsigned int a[][3] = {
    		{11, 2, 3},
    		{4, 2, 6},
    		{4, 2, 5}
    	};
    	size_t dim_a =sizeof ( a ) / sizeof (a[0][0]);
    
    
    	//Visualizzazione matrice
    	for( i = 0; i < 3; i++) {
    
    		printf("\n");
    
    		for(j=0; j<3; j++)
    			printf("%5d ",a[i][j]);
    
    		printf("\n");
    
    	}
    
    	/*
    	normalmente un contatore come quello che vuoi
    	realizzare utilizza gli alberi binari.
    	Qui utilizziamo un metodo un po' meno efficiente
    	che va bene solo per piccole matrici
    	*/
    
    	/*
    	definiamo una seconda matrice che un numero di righe uguale
    	alla dimensione della prima matrice e due colonne.
    	Nella prima colonna mettiamo gli elementi della prima matrice
    	nella seconda il numero di occorrenze.
    	-1 rappresenta la fine matrice
    	*/
    
    	/*
    	legge tutta la matrice e per ogni elemento scorre la
    	matrice dei confronti per verificare se l'elemento 
    	già esiste
    	*/
    
    	unsigned int matrice_confronti[ dim_a ][2] ;
    	size_t dim_mat_confr = sizeof (matrice_confronti) / sizeof (matrice_confronti[0][0]) / 2 ;
    
    	// inizializzazione
    	for( i = 0; i < dim_mat_confr; i++) {
    			matrice_confronti[i][0] = -1;
    			matrice_confronti[i][1] = 0 ;
    	}
    	
    	for( i = 0; i < 3; i++ ) {
    
    		for( j = 0; j < 3; j++ ) {
    
    			unsigned int el = a[i][j];
    			unsigned int k = 0;
    			while ( matrice_confronti[k][0] != -1 )
    				if ( matrice_confronti[k][0] == el ) break;
    				else k++;
    			if ( matrice_confronti[k][0] == -1 ) 
    				matrice_confronti[k][0] = el  ;
    			matrice_confronti[k][1] += 1 ;
    					
    		}
    
    	}
    
    	//Visualizzazione la matrice dei confronti
    	unsigned int k = 0;
    	while ( matrice_confronti[k][0] != -1 ) {
    		printf("%d %d \n",matrice_confronti[k][0], matrice_confronti[k][1]);
    		k++;
    	}
    
    	return ( 0 ) ;
    
    }

  5. #5
    anch'io cerco di postarti una soluzione applicabile con piccole matrici (usa le strutture non so se le hai studiate):

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define Y 3
    #define X 4
    
    struct contatore
    {
    int valore;
    int presenze;
    };
    
    int main()
    {
      int matrice[Y][X]={3, 6, 2, 6, 5, 2, 2, 4, 7, 3, 5, 1};
      struct contatore[Y*X];
      int limite=0, migliore=0, i, j, k;
    
      /*Qui puoi mettere una funzione che visualizzi la matrice*/
    
      for(i=0; i<Y; i++)
      {
        for(j=0; j<X; j++)
        {
          for(k=0; k<=limite; k++)
          {
            if(k==limite)
            {
              contatore[limite].valore=matrice[i][j];
              contatore[limite].presenze=1;
              limite++;
              break;
            }
            if(contatore[k].valore==matrice[i][j])
            {
              contatore[k].presenze++;
              break;
            }
          }
        }
      }
      /* Questa funzione ha uno svantaggio:
      nel caso di valori con le stesse presenze  se ne visualizza solo uno, ma la si può migliorare */
      for(i=0; i<limite; i++);
      {
        if(contatore[migliore].valore<contatore[i].valore)
        {
          migliore=i;
        }
      }
      printf("Il numero con il maggio numero di presenze e': %d\n", contatore[migliore].valore);
      system("PAUSE");
      return 0;
      }
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  6. #6
    ritiro la mia, non volevo confonderti ho frainteso le tue consegno
    ciao
    sergio

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    24
    grazir di tutto. proverò a vedere se riesco. ancora grazie.

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.