Programma in C urgente

di il
44 risposte

44 Risposte - Pagina 2

  • Re: Programma in C urgente

    
    #include <stdio.h>
    
       const int V = 10;
       const int F = 10;
       int A[V][F];
    
    void leggielementi(); // prototipo
    void stampaelementi(); // prototipo 
    
    void main() 
    {
    
      // lettura elementi matrice
      leggielementi();
    
       //visualizzazione elementi matrice
     stampaelementi();
    
    }
    
    void leggielementi()
    {
     int i,j,temp;
     for(i=0; i < V; i++) 
       {
          for(j=0; j < F; j++)
          {
             scanf("%d", &temp );
             A[i][j] = temp;
          }
       }
    }
    
    void stampaelementi()
    {
      int i,j;
      for(i=0; i<V; i++) 
       {
          for(j=0; j<F; j++)   
          {
             printf("%d",A[i][j]);
          }
       }
    }
    spero sia giusto ; ho una domanda il professore usa #define per le costanti è giusto ugualmente vero ?
  • Re: Programma in C urgente

    Facciamo come dice il prof e usiamo la define, attenzione che io sono abituato a scrivere in C++ per cui mi potrebbe scappare qualcosa. Il tuo programma deve essere in C o possiamo usare il C++?

    In questa versione ho messo le define e siccome non voglio stare a inserire tutte le volte la matrice la inizializzo nel codice.
    
    #include <stdio.h>
    
    #define V 3
    #define F 3
    int A[V][F] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9} };
    
    void LeggiElementi()
    {
    	int i, j, temp;
    	for(i = 0; i < V; i++) 
    	{
    		for(j = 0; j < F; j++)
    		{
    			scanf("%d", &temp );
    			A[i][j] = temp;
    		}
    	}
    }
    
    void StampaElementi()
    {
    	int i, j;
    	for(i = 0; i < V; i++) 
    	{
    		for(j = 0; j < F; j++)	
    		{
    			printf("%d ",A[i][j]);
    		}
    		printf("\n");
    	}
    }
    
    void main() 
    {
    	// LeggiElementi();
    	StampaElementi();
    
    }
    
    Sapresti ora scrivere una funzione che cerca il massimo valore nella matrice? Poi la useremo come base per risolvere il problema.
  • Re: Programma in C urgente

    No in C il C++ non l'abbiamo fatto comunque mi è chiara l'inizializzazione della matrice mi ritrovo in tutto
  • Re: Programma in C urgente

    Stai scrivendo la funzione che cerca il massimo?
  • Re: Programma in C urgente

    Ci sto ragionando ma non riesco ad andare avanti , io ragiono così devo partire dall'elemento A 00 e devo sommargli ad esso necessariamente l'elemento A 11 che è l'elemento della seconda riga scalato di un posto in avanti rispetto ad A 00 poi da A 11 devo arrivare a A F F e completare la prima iterazione di somme poi riprocedere da A00 a A F-1 F-1 e sommare stavolta A F F+1 il concetto di ciò che devo fare mi è chiaro ma non riesco a tradurlo in C , cioè come passo da A 00 a A 11 se il doppio ciclio mi manda a A 01 dopo A 00 è come se anzichè attraversare la matrice linermente riga per riga devo attraversarla a scala
  • Re: Programma in C urgente

    Aspetta facciamo prima una cosa semplice! Cerca solo la massima somma tra due elementi della matrice, senza tenere conto del vincolo sulle righe e sulle colonne che è stato imposto nel problema.

    Per fare questo occurre scandire tutti gli elementi delle matrice e per ogni elemento sommarlo con 'tutti' gli altri e vedere quale è il valore massimo che si trova.

    (In realtà ogni elemento non andrebbe sommato con 'tutti gli altri' ma solo con quelli che vengono dopo (perche la somma con i precedenti è gia stata calcolata), ma di questo per adesso non ne teniamo conto, ok?)

    Ho visto che col C in fondo te la cavi e pure con i doppi cicli, per cui ti scrivo subito un modo per fare questo:
    
    #include <stdio.h>
    
    #define V 3
    #define F 3
    int A[V][F] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9} };
    
    void LeggiElementi()
    {
    	int i, j, temp;
    	for(i = 0; i < V; i++) 
    	{
    		for(j = 0; j < F; j++)
    		{
    			scanf("%d", &temp );
    			A[i][j] = temp;
    		}
    	}
    }
    
    void StampaElementi()
    {
    	int i, j;
    	for(i = 0; i < V; i++) 
    	{
    		for(j = 0; j < F; j++)	
    		{
    			printf("%d ",A[i][j]);
    		}
    		printf("\n");
    	}
    }
    
    int MassimaSommaConCella(int ci, int cj)
    {
    	int i, j, somma, sommaMassima;
    	sommaMassima = 0;
    
    	int valore = A[ci][cj];
    	for(i = 0; i < V; i++) 
    	{
    		for(j = 0; j < F; j++)	
    		{
    			if ((i == ci) && (j == cj))
    				continue;
    
    			somma = valore + A[i][j];
    			if (somma > sommaMassima)
    				sommaMassima = somma;
    		}
    	}
    
    	return sommaMassima;
    }
    
    void CercaSommaMassima()
    {
    	int i, j, max, somma;
    	max = 0;
    	for(i = 0; i < V; i++) 
    	{
    		for(j = 0; j < F; j++)	
    		{
    			somma =  MassimaSommaConCella(i , j);
    			if (somma > max)
    				max = somma;
    		}
    	}
    
     	printf("Somma Max: %d", max);
    }
    
    void main() 
    {
    	// LeggiElementi();
    	StampaElementi();
    
    	CercaSommaMassima();
    
    }
    
    Se tu eseguissi questo programma stamperebbe 17 ( somma tra 9 e 8 ).
    Guardalo con calma e dimmi se tutto è chiaro. Poi usiamo questo per arrivare alla soluzione giusta.
  • Re: Programma in C urgente

    Allora se ho capito bene con questo algoritmo parto da un elemento e di volta in volta sommo gli elementi ad esso vicini al fine di individuare la somma massima che riesco a ottenere nel percorso della matrice . L'istruzione che non riesco a capire è l'if che prosegue con l'istruzione continue ...
    Inoltre adesso dovrei ragionare in questo modo :
    la somma massima viene 17 perchè ho sommato 3 con 5 e 9 giusto ?cin realtà bisogna imporre che le somme avvengano a scala quindi se parto dall' elemento 3 devo sommarlo con elementi che si trovano a destra rispetto ad esso , in questo caso non sarebbe possibile perchè la matrice è 3x3 ;se fosse 3x5 dovrei fare 3 che è in posizione A 02 lo potrei sommare con l'elemento A 13 e A 24 per rispettare il vincolo dell'esercizio che impone un percorso a scala da sinistra verso destra
  • Re: Programma in C urgente

    federica ha scritto:


    viene chiesto di scrivere un programma che calcoli la somma massima tra gli elementi di una matrice A[j] , se considero uno specifico elemento della matrice , esso deve essere sommato ad un altro elemento che ...

    Ho un dubbio, da questo testo io capisco che bisogna sommare coppie di elementi e poi trovare quella coppia di elementi che danno la somma massima. O non è cosi?
  • Re: Programma in C urgente

    No magari quello era molto più semplice ti faccio un esempio con una matrice cosi ti spiego bene cosa vuole l'esercizio
    Sia data la matrice A :

    2 3 5 6 7
    1 -4 1 7 8
    5 3 2 1 8 6

    devo massimizzare le somme tra gli elementi di A procedendo a scala senza tornare indietro cioè tipo fare
    prima somma 2+(-4)+2 = 0
    seconda somma 2+(-4)+1=-1
    terza somma 2+(-4)+8=6
    quarta somma 2 +(-4)+6= 4
    quinta somma 3+1+8=12
    sesta somma 3+1+6=10
    settima somma 5+7+6=18

    la somma massima è 18 ed è relativa agli elementi 5 7 6 in posizione 02 13 24
    questo è quello che deve fare il programma scusami se non sono stata chiara
  • Re: Programma in C urgente

    E se la matrice fosse cosi?

    1 2 3
    2 3 4
    3 4 5
    5 6 7
    7 8 9
  • Re: Programma in C urgente

    È imposizione dell'esercizio che il numero di righe sia minore di quello delle colonne pertanto una matrice del genere dovrebbe essere non accettata in input
  • Re: Programma in C urgente

    Hai il testo originale dell' esercizio?
  • Re: Programma in C urgente

    No ha usato quell'esempio alla lavagna per farci capire il senso dell'esercizio
    quell'esempio l'ha fatto proprio il professore dicendoci che dobbiamo calcolare in generale tutte quelle possibili somme prestando attenzione al fatto che la matrice può essere scalata solo in avanti quindi partendo da A 00 posso andare su A 11 A 12 ecc
    e fermarmi quando arrivo al punto che non posso più ottenere una terna di valori (terna perchè lui considera una matrice di 3 righe quindi posso scalare la matrice fino a 3 livelli sostanzialmente)
  • Re: Programma in C urgente

    Ok, qui però c' è un errore:

    federica ha scritto:


    2 3 5 6 7
    1 -4 1 7 8
    5 3 2 1 8 6
    L' ultima riga ha 6 elementi invece di 5
  • Re: Programma in C urgente

    Scusami è di piu il 6 l'ho trascritto io per errore ci ha scritto la matrice e ha calcolato velocemente le somme per farci capire l'esercizio
Devi accedere o registrarti per scrivere nel forum
44 risposte