Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    programma con matrice (urgentissimo: scadenza domani sera!)aiuto!!!

    l'esercizio che devo fare è il seguente:

    si consideri un file che contiene una matrice (massimo 50 * 50) di valori reali.La prima riga del file contiene il numero di righe e il numero di colonne della matrice. Le righe successive del file contengono le righe della matrice con i valori separati da uno o più spazi.
    Come esempio si consideri il seguente file che contiene una matrice di 5 righe e 6 colonne.

    5 6
    1.2 2.33 1.4 0.34 0.032 0.02
    1.2 4.55 1.1 1 0 0
    0 0 0.3 0.3 0.4 -10.3
    0 1 0 0.3 -0.4 5.5
    0 0 1.4 0.32 0.41 -1.31

    Si scriva una funzione C che prenda come parametro il nome di un file contenente una matrice e restituisca, in un'opportuna struttura dati, i 4 valori corrispondenti a:
    -indice della colonna di somma minima
    -somma minima
    - indice della colonna di somma massima
    - somma massima
    (gli indici partono da 0)

    Quello che ho fatto io ma che purtroppo non funziona è il seguente:

    #include<stdio.h>
    #define MAX_DIM 50

    struct Dati
    {
    int colonna_min;
    float somma_min;
    int colonna_max;
    float somma_max;
    };

    struct Dati Somma(char nome_file[]);
    int main()
    {
    char nome_file[] = "matrice.txt";
    struct Dati risultato;
    risultato= Somma(nome_file);
    printf("La colonna della somma minima è %d\nla somma minima è %f\nla colonna della somma massima è %d\nla somma massima è %f",&risultato.colonna_min,&risultato.somma_min,&r isultato.colonna_max,&risultato.somma_max);
    return 0;
    }
    struct Dati Somma(char nome_file[])
    {
    FILE*fp;
    int i,j,righe,colonne;
    float M[MAX_DIM][MAX_DIM];
    struct Dati ris={0,0,0,0};
    float somma=0;

    fp=fopen(nome_file,"r");
    fscanf(fp,"%d%d",&righe, &colonne);
    for (i=0;i<righe;i++)
    for(j=0;j<colonne;j++)
    fscanf (fp,"%f", &M[i][j]);
    for(i=0;i<righe;i++)
    {
    ris.colonna_min = 0;
    ris.somma_min += M[i][0];
    ris.colonna_max = 0;
    ris.somma_max += M[i][0];
    }
    for (j=1;j<colonne;j++)
    {
    for (i=0;i<righe;i++)
    somma += M[i][j];
    if(somma<ris.somma_min)
    {
    ris.somma_min = somma;
    ris.colonna_min = j;
    }
    else if(somma>ris.somma_max)
    {
    ris.somma_max = somma;
    ris.colonna_max = j;
    }
    }
    return ris;
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,306

    Moderazione

    Leggere il regolamento (link in rilievo), prima di postare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.