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

    [c++] strutture e vettori

    Salve ragazzi, confesso che questa discussione già l'ho trovata nel vostro forum, mi è stata d'aiuto ma non so perchè non mi trovo!

    In pratica il punto è questo:
    Si progetti un programma composto da tre funzioni:
    -una funzione LEGGI che deve leggere il riempimento e gli elementi del vettore di strutture VS

    -una funzione SEPARA che riceve in ingresso VS e riemp e restituisce come parametri di uscita due vettori di interi, VM e VF:il primo vettore dovrà contenere le età delle persone di sesso maschile ed il secondo le età delle persone di sesso femminile.

    -una funzione STAMPA che serve a stampare i vettori VM e VF. Quest'ultima funzione dovrà anche stampare un opportuno messaggio nel caso in cui uno dei due vettori sia vuoto.
    ES.
    INPUT:
    riemp = 5
    VS = 20 M
    25 M
    23 F
    18 M
    33 F

    OUTPUT:
    VM = 20 25 18
    VF = 23 33
    ---------------
    Io ho scritto questo:
    codice:
    //    lib.h
    const int maxdim=20;
    typedef int vettore [maxdim];
    struct persona{
           int eta;
           char sesso;
    };
    
    typedef persona info[maxdim];
    
    void leggi_struct(info, int&);
    void stampa_struct(const info, int);
    void separa( info, int, vettore, vettore, int&, int&);
    void stampa_vett(vettore, int, vettore, int);
    codice:
    //     lib.cpp
    
    #include <cstdlib>
    #include <iostream>
    #include "lib.h"
    using namespace std;
    
    void leggi_struct(info vs, int&r_vs){
         int i;
    
         for(i=0;i<r_vs; i++){
            cout<<"Inserire l'eta' : ";
            cin>>vs[i].eta;
            cout<<"Ora inserire il sesso: ";
            cin>>vs[i].sesso;
            }
         
         
    }    
    
    void stampa_struct(const info vs, int r_vs){
         int i;
         cout<<"\nStampa della struttura inserita: \n";
         for(i=0;i<r_vs;i++){
                             cout<<vs[i].eta<<' '<<vs[i].sesso<<'\n';
                             cout<<"\n";
         }
    }   
    
    void separa(info vs, int r_vs, vettore vm, vettore vf, int&r_vm, int&r_vf){
         int i,j;
         r_vm=0;
         r_vf=0;
         for(i=0;i<r_vs;i++){
             if(vs[i].sesso =='m' || vs[i].sesso=='M'){
                     vm[r_vm]=vs[i].eta;
                     r_vm++;
                     }
                     else{
                          if(vs[i].sesso =='f' || vs[i].sesso=='F'){
                             vm[r_vf]=vs[i].eta;
                             r_vf++;
                             }
                          }            
         }     
    }
    
    void stampa_vett(vettore vm, int r_vm, vettore vf, int r_vf){
         int i,j;
         if(r_vm==0 || r_vf==0)
            cout<<"\nUno dei due vettori e' vuoto, non ha elementi...\n";
         
         cout<<"\nGli elementi del vettore vm sono: \n";
         for(i=0;i<r_vm;i++)
         cout<<vm[r_vm]<<' ';
         
         cout<<"\nGli elementi del vettore vf sono: \n";
         for(j=0;j<r_vf;j++)
         cout<<vf[r_vf]<<' ';
         cout<<"\n\n";
    }
    codice:
    //      main.cpp
    #include <cstdlib>
    #include <iostream>
    #include "lib.h"
    using namespace std;
    
    int main()
    {
        info vs;
        int r_vs;
        vettore vm;
        vettore vf;
        int r_vm;
        int r_vf;
        
        cout<<"Inserire il numero di elementi da caratterizzare: ";
        cin>>r_vs;
        leggi_struct(vs, r_vs);
        stampa_struct(vs, r_vs);
        
        separa(vs, r_vs, vm, vf, r_vm, r_vf);
        stampa_vett(vm, r_vm, vf, r_vf);
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Ecco invece l'output dopo aver digitato i vari valori:
    codice:
    Inserire il numero di elementi da caratterizzare: 3
    Inserire l'eta' : 13
    Ora inserire il sesso: m
    Inserire l'eta' : 35
    Ora inserire il sesso: f
    Inserire l'eta' : 39
    Ora inserire il sesso: m
    
    Stampa della struttura inserita:
    13 m
    
    35 f
    
    39 m
    
    
    Gli elementi del vettore vm sono:
    4072592 4072592
    Gli elementi del vettore vf sono:
    -2142260006
    
    Premere un tasto per continuare . . .
    Penso che il problema risiedi nella funzione separa, perchè alla funzione stampa_struct i valori arrivano bene, per questo l'ho scritta
    Potete aiutarmi a capire perchè escono quei valori?

    Grazie in anticipo!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Gli errori sono in queste due righe

    cout<<vm[r_vm]<<' ';

    cout<<vf[r_vf]<<' ';
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    16
    Si, infatti ho intrapreso una soluzione diversa (che si avvicina un pò di più)...
    In pratica ho scritto una sola funzione che stampa un vettore e l'ho chiamata due volte, una per vf e una per vm;
    Ma il risultato seppur migliorato comunque non è quello sperato...
    Ho modificato la stampa:
    codice:
    void stampa_vett(vettore v, int riemp){
         int i;
         if(riemp==0)
            cout<<"\nIl vettore "<<v<<" non contiene elementi...\n";
    
         cout<<"\nGli elementi del vettore "<<v<<" sono: \n";
         for(i=0;i<riemp;i++)
         cout<<v[i]<<' ';
         
    }
    Quindi ora nel main ci saranno due chiamate ovvero:
    codice:
    #include <cstdlib>
    #include <iostream>
    #include "lib.h"
    using namespace std;
    
    int main()
    {
        info vs;
        int r_vs;
        vettore vm;
        vettore vf;
        int r_vm;
        int r_vf;
        
        cout<<"Inserire il numero di elementi da caratterizzare: ";
        cin>>r_vs;
        leggi_struct(vs, r_vs);
        stampa_struct(vs, r_vs);
        
        separa(vs, r_vs, vm, vf, r_vm, r_vf);
            stampa_vett(vf, r_vf);
        stampa_vett(vm, r_vm);
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    Mentre in output ho qualcosa di questo tipo:
    codice:
    Inserire il numero di elementi da caratterizzare: 3
    Inserire l'eta' : 45
    Ora inserire il sesso: f
    Inserire l'eta' : 32
    Ora inserire il sesso: m
    Inserire l'eta' : 12
    Ora inserire il sesso: f
    
    Stampa della struttura inserita:
    45 f
    
    32 m
    
    12 f
    
    
    Gli elementi del vettore 0x22fe20 sono:
    32 2
    Gli elementi del vettore 0x22fe70 sono:
    32 Premere un tasto per continuare . . .

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    16
    Ragazzi ho risolto in questo modo!
    Grazie lo stesso
    codice:
    void separa(info vs, int r_vs, vettore vm, vettore vf, int&r_vm, int&r_vf){
         int i,j;
         r_vm=0;
         r_vf=0;
         int valm=0;
         int valf=0;
         for(i=0;i<r_vs;i++){
             if(vs[i].sesso =='m' || vs[i].sesso=='M'){
                     valm=vs[i].eta;
                     vm[r_vm]=valm;
                     r_vm++;
                     }
                     else{
                          if(vs[i].sesso =='f' || vs[i].sesso=='F'){
                             valf=vs[i].eta;
                             vf[r_vf]=valf;
                             r_vf++;
                             }
                          }            
         }     
    }
    
    void stampa_vett(vettore v, int riemp){
         int i;
         if(riemp==0)
            cout<<"\nIl vettore non contiene elementi...\n";
    
         cout<<"\nGli elementi del vettore sono: \n";
         for(i=0;i<riemp;i++)
         cout<<v[i]<<' ';
         
    }

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.