Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C] matrici

    salve di nuovo
    devo realizzare un programma che data una matrice di massimo 100 righe e 100 colonne restituisca un valore max e un vettore.
    nelle righe della matrice sono scritte le vittorie del giocatore, nelle colonne le sue sconfitte.
    ad esempio se questa è la matrice
    -1 3 4 5 2 1
    4 -1 2 1 2 3
    3 4 -1 4 5 4
    1 2 2 -1 3 3
    2 2 3 4 -1 1
    0 0 0 0 1 -1

    le vittorie del giocatore 0 (prima riga) sono 3+4+5+2+1=15 e le sue sconfitte(colonna 0) sono 4+3+1+2+0=10.
    N.B. -1 lungo la diagonale principale che devono essere ignorati

    scopo del programma è restituire l'indice della riga del giocatore che ha il massimo rapporto tra partite vinte e (partite vinte + partite perse) ed inoltre un array in cui in ogni locazione è salvata la differenza tra partite vinte e partite perse.
    ad esempio nel caso del giocatore 0 nella locazione [0] dell'array c'è 5 cioè 15-10.

    questo è il codice che ho creato

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXRIGHE 100
    #define MAXCOLONNE 100
    
    int Matrice(int partite[MAXRIGHE][MAXCOLONNE],int d[],int n)
    {
    int i,j,max=0;
    int partite_vinte=0,partite_perse=0;
    for(j=0;j<MAXRIGHE;j++)
    	{
    		for(j=0;j<MAXCOLONNE;j++)
    		{
    		if(partite[i][j]==partite[j][i])
    		;
    		else
    			{
    			partite_vinte+=partite[i][j];
    			partite_perse+=partite[j][i];
    			}
    		}
    	if((partite_vinte/(partite_vinte + partite_perse))>max)
    	max=i;
    	d[i]=partite_vinte - partite_perse;
    	}
    return max;
    }
    
    int main()
    {
    int partite[MAXRIGHE][MAXCOLONNE]={{-1,3,4,5,2,1},{4,-1,2,1,2,3},{3,4,-1,4,5,4},{1,2,2,-1,3,3},{2,2,3,4,-1,1},{0,0,0,0,1,-1}};
    int d[6]={0};
    int n=6;
    printf("%d",Matrice(partite,d,n));
    return 0;
    }
    ci sono alcuni problemi:
    prima cosa non so come una funzione(nel mio caso 'Matrice' possa restituire sia un intero(max) che un array di int e quindi come possa restituire 2 cose.
    per secondo così compilando non da errori ma nell'esecuzione mi compare segmentation fault :/

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La funzione può restituire il valore intero richiesto mentre uno dei parametri può essere il puntatore all'array di int passato dall'esterno e modificato all'interno della funzione.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    quindi se ho capito bene modifico


    printf("%d",Matrice(partite,d,n)); in printf("%d",Matrice(partite,&d,n));

    e

    int Matrice(int partite[MAXRIGHE][MAXCOLONNE],int d[],int n)

    in

    int Matrice(int partite[MAXRIGHE][MAXCOLONNE],int *d[],int n)

    e

    d[i]=partite_vinte - partite_perse;

    in

    *d[i]=partite_vinte - partite_perse;


    ?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... nulla di tutto ciò ... già il codice che hai scritto passa i valori correttamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    ah ottimo allora...per il segmentation fault cosa si può fare?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh .... controlla il codice ...

    Come fai ad usare due cicli for innestati con la stessa variabile j ?

    E la i? Quando la inizializzi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    sembra che oggi io tenda a mettere j al posto di i -.-

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Può capitare ma i programmi (di poche righe) vanno letti e riletti con attenzione ... come faresti se il programma fosse di migliaia di righe ...?

    Probabilmente rivolgersi ad un forum risulta più facile che fare prove, leggere e debuggare il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    hai ragione.
    con un po' di debug sono riuscito a far funzionare il codice

    eccolo
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXRIGHE 100
    #define MAXCOLONNE 100
    
    int Matrice(int partite[MAXRIGHE][MAXCOLONNE],int d[],int n)
    {
    int i,j;
    double max=0,max_indice=0;
    double partite_vinte=0,partite_perse=0;
    for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    		//printf("%d\n",partite[i][j]);
    		if(partite[i][j]!=-1)
    			{
    			partite_vinte+=partite[i][j];
    			partite_perse+=partite[j][i];
    			}
    		}
    		printf("%lf\t%lf",partite_vinte,partite_perse);
    	if((partite_vinte/(partite_vinte + partite_perse)) > max)
    		{
    		max=(partite_vinte/(partite_vinte + partite_perse));
    		max_indice=i;
    		}
    	d[i]=partite_vinte - partite_perse;
    	partite_vinte=0;
    	partite_perse=0;
    	}
    return max_indice;
    }
    
    int main()
    {
    int partite[MAXRIGHE][MAXCOLONNE]={{-1,3,4,5,2,1},{4,-1,2,1,2,3},{3,4,-1,4,5,4},{1,2,2,-1,3,3},{2,2,3,4,-1,1},{0,0,0,0,1,-1}};
    int d[6]={0};
    int n=6;
    int i;
    printf("\n%d",Matrice(partite,d,n));
    for(i=0;i<6;i++)
    printf("\n%d\n",d);
    return 0;
    }
    l'unica cose che manca sono i dati nel vettore...con un semplice for nel main mi stampa solo il primo indice del vettore ripetuto(5 in questo caso)..qualche aiuto?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma nel main dov'è la chiamata alla funzione?
    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.