Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    16

    [c++] Matrice di numeri reali negativi/positivi (media)

    Salve ragazzi il problema è semplice ma mi sta bloccando
    il punto e' questo, siprogettino queste due funzioni:
    - leggi_mat, che riceve in ingresso il nome di un file, e legge da quel file i riempimenti di riga e colonna ed i valori di una matrice di numeri reali;
    - med_pos_mat, che riceve in ingresso una matrice M di numeri reali e restituisce come parametro di di uscita la media dei soli elementi positivi di M. La funzione dovrà anche restituire come valore di ritorno un valore booleano, che deve essere pari a false qualora non vi siano in M elementi strettamente maggiori di 0 (zero), e pari a true altrimenti;
    Ecco la matrice:
    3 4
    2.5 -17.1 19.3 22.5
    -3.2 20.0 7.4 -9.4
    -2.8 -23.2 32.7 40.1

    Fin qua tutto bene.. poi mi viene chiesto di fare la media sei soli elementi positivi.
    Io l'ho scritto il codice e penso sia fatto anche bene...
    Però poichè non mi trovo col risultato ho pensato di far fare al mio programma la stampa di tale matrice e mi dà un output diverso ovvero:

    codice:
     
    Inserire il nome del file di testo: mat.txt
    Matrice letta dal file "mat.txt":
    2.8026e-045 3.58164e-039 3.76531e-039 3.94899e-039
    8.90818e-039 9.09185e-039 9.27553e-039 9.4592e-039
    1.44186e-038 4.55515e-038 1.47857e-038 1.49694e-038
    
    La media e' questa: 1.14797e-038
    
    Premere un tasto per continuare . . .
    Il codice che ho fatto tramite le funzioni,librerie ecc... è questo :
    codice:
    //    main.cpp
    #include <cstdlib>
    #include <iostream>
    #include "lib.h"
    
    using namespace std;
    
    int main()
    {
        int rig, col;
        matrice mat;
        stringa nomefile;
        float media;
        
        
        cout<<"\nInserire il nome del file di testo: ";
        cin>>nomefile;
        leggi_mat(mat, rig, col, nomefile);
        cout<<"\n Matrice letta dal file "<<nomefile<<": \n";
        stampa_mat(mat,rig,col);
        
        med_pos_mat(mat, rig, col, media);
        cout<<"La media e' questa: ";
        cout<<media<<'\n'<<'\n';
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    codice:
    //lib. h
    
    const int maxdim=30;
    typedef float vettore [maxdim];
    typedef float matrice [maxdim][maxdim];
    typedef char stringa [maxdim+1];
    
    
    void leggi_mat( matrice, int& , int&, stringa);
    bool med_pos_mat(matrice, int, int, float& );
    void stampa_mat(const matrice, int, int);
    codice:
    //lib.cpp
    #include <cstdlib>
    #include <iostream>
    #include "lib.h"
    using namespace std;
    
    void leggi_mat(matrice mat, int&rig, int&col, stringa nomefile){
         int i,j;
         FILE*fp=fopen(nomefile, "r");
         
         if(fp==0){
           cout<<" Il file non e' stato trovato...\n Controllare la directory del file.txt";
           system("PAUSE");
           exit(1);
           }
           
         fscanf(fp,"%d %d", &rig, &col);
         for(i=0;i<rig;i++)
            for(j=0;j<col;j++){
                fscanf(fp, "%d", &mat[i][j]);
                }
         fclose(fp);
    }
    
    void stampa_mat(const matrice mat, int rig, int col){
         int i,j;
         
         for(i=0;i<rig;i++){
            for(j=0;j<col;j++)
               cout<<mat[i][j]<<' ';
               cout<<'\n';
         }
    }
    
    
    bool med_pos_mat(matrice mat, int rig, int col, float&media){
         int i,j,contatore;
         float somma;
         float val=0.0;
         somma=0.0;
         contatore=0;
         for(i=0;i<rig;i++){
            for(j=0;j<col;j++)
                if(mat[i][j]>val){
                   somma=somma+mat[i][j];
                   contatore++;
                   } 
         }     
    
           if(contatore>0){
        media=somma/contatore;
        return true;
        }
        return false;
     
         
    }
    Perchè mi esce quel mammone in output?
    Ultima modifica di Wimmo; 13-02-2015 a 00:31 Motivo: Sbagliato ad inserire il codice

  2. #2
    Per leggere in modo corretto i valori float usa la fscanf() in questo modo
    codice:
    fscanf( fp, "%G", &mat[i][j] );
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    16
    Diame hai ragione!
    Ecco cosa mi era sfuggito!
    Vabbè grazie mille!!

Tag per questa discussione

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.