Aiuto: Strutture e separazione vettori

di il
1 risposte

Aiuto: Strutture e separazione vettori

Salve ragazzi in pratica ho svolto questo esercizio:

Siano assegnati da tastiera il riempimento riemp e gli elementi di un vettore VS di strutture. Ciascuna struttura ha due campi, che rappresentano rispettivamente l’età ed il sesso di una persona (si supponga di codificare il sesso con un campo di tipo carattere che può assumere come valore ‘M’ oppure ‘F’).

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.
· Il programma dovrà essere suddiviso in moduli, uno contenente prototipi e dichiarazioni, uno contenente le funzioni LEGGI, SEPARA e STAMPA ed un terzo contenente il main.

-----------------------------------------------------------------------------------------------------------
Esempi

INPUT:
riemp = 5
VS = 20 M
25 M
23 F
18 M
33 F

OUTPUT:
VM = 20 25 18
VF = 23 33
-----------------------------------------------------------------------------------------------------------
Ho diviso in 3 moduli come chiede il testo:
questo è il main, poi la lib.h e la lib.cpp:

#include <cstdlib>
#include <iostream>
#include <cstring>
#include "lib.h"

using namespace std;

int main()
{
    VS s1;
    int riemp, riempVM, riempVF;
    vett VM, VF;
    leggi(riemp,s1);
    separa(s1,riemp, VM, VF, riempVM, riempVF);
    stampa (VM, riempVM, VF, riempVF);
    
  
    system("PAUSE");
    return EXIT_SUCCESS;
}

//          poi la libreria.h

const int Mdim=50;

struct dati{
       int eta;
       char sesso;
};

typedef dati VS[Mdim];
typedef int vett[Mdim];

void leggi(int& ,VS);
void separa(VS, int&, vett, vett, int&, int&);
void stampa(const vett, int, const vett, int);


//                 e poi la librerira.cpp

#include "lib.h"
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
// definizione dele funzioni

void leggi(int&riemp,VS s1){
     int i;
     cout<<"\nInserire il riempimento del vettore strutture: ";
     cin>>riemp;
     cout<<"\nInserire eta' e sesso(M,F) del soggetto: \n";
     for(i=0;i<riemp;i++){
       cout<<"\n Eta' : ";
       cin>>s1[i].eta;
       cout<<"\n Sesso: ";
       cin>>s1[i].sesso;  
     };      
}

void separa(VS s1, int& riemp, vett VM, vett VF, int&riempVM, int&riempVF){
     int i;
     
     for(i=0;i<riemp;i++){
            if(s1[i].sesso=='m' || s1[i].sesso=='M'){
                VM[riempVM]=s1[i].eta;
                riempVM++;
            }
            else{
                VF[riempVF]=s1[i].eta;
                riempVF++;
                }
     }
                            
                            
     
}

void stampa(const vett VM, int riempVM, const vett VF, int riempVF){
     int i,j;
     cout<<"\nVettore VM: ";
     for(i=0;i<riempVM;i++)
        cout<<VM[riempVM]<< ' ';
        cout<<'\n';
     cout<<"\nVettore VF: ";
     for(j=0;j<riempVF; j++)
        cout<<VF[riempVF]<<' ';
        cout<<'\n';
        

}
//fine
in pratica il problema è che quando vado a mettere i dati da tastiera, "riempo" la struttura ma poi si interrompe ed infatti è come se nell'eseguire la funzione separa, qualcosa andasse storto ma sinceramente non so cosa!
Vi prego ragazzi è da stamattica che cerco l'errore!
Grazie mille spero di non aver sbagliato nulla nell'inviarvi questo messaggio.

1 Risposte

  • Re: Aiuto: Strutture e separazione vettori

    Credo che ormai tu il problema lo abbia risolto, ma volevo esercitarmi un pò con i puntatori e le strutture quindi ho deciso di fare l'esercizio (in C però non in C++). Lo propongo nel caso in cui qualcuno fosse interessato
    
    /* Siano assegnati da tastiera il riempimento riempe gli elementi di un 
     * vettore VS di strutture. Ciascuna struttura ha due campi, che 
     * rappresentano rispettivamente l’età ed il sesso di una persona (si 
     * supponga di codificare il sesso con un campo di tipo carattere che può 
     * assumere come valore ‘M’ oppure ‘F’).
    
    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.
    *·	Il programma dovrà essere suddiviso in moduli, uno contenente prototipi 
    * e dichiarazioni, uno contenente le funzioni LEGGI, SEPARA e STAMPA ed un 
    * terzo contenente il main.  */
    
     #include <stdio.h>
     #include <stdlib.h>
     #define MAX_PERSONE 6
    typedef struct persona_s{
    	int eta;
    	char sesso;
    	}persona_t;
    void leggi(persona_t *vettore);
    void separa(persona_t *vettore, int *vm, int *vf, int *i_vf, int *i_vm);
    void stampa(int *vm, int *vf, int *i_vf, int *i_vm);
    
    int main(int argc, char * argv []){
    	persona_t persona[MAX_PERSONE];
    	int vettore_maschi[MAX_PERSONE], vettore_femmine[MAX_PERSONE];
    	int indice_VettoreMaschi, indice_VettoreFemmine; /* Per controllare se i vettore sono vuoti */
    	leggi(&persona[MAX_PERSONE]);
    	indice_VettoreFemmine=0; indice_VettoreMaschi=0;
    	separa(&persona[MAX_PERSONE], &vettore_maschi[MAX_PERSONE], &vettore_femmine[MAX_PERSONE], &indice_VettoreFemmine, &indice_VettoreMaschi);
    	stampa(&vettore_maschi[MAX_PERSONE], &vettore_femmine[MAX_PERSONE], &indice_VettoreFemmine, &indice_VettoreMaschi);
    	return 0;
    }
    void leggi(persona_t vettore[]){
    	int i;
    	for(i=0; i<MAX_PERSONE; i++){
    		printf("Inserire età e sesso (M o F) della persona separati da uno spazio\n");
    		scanf("%d %c", &vettore[i].eta, &vettore[i].sesso);
    	}
    	for(i=0; i<MAX_PERSONE; i++){
    	}
    }
    void separa(persona_t *vettore, int *vm, int *vf, int *i_vf, int *i_vm){
    	int i, itemp_vf, itemp_vm;
    	itemp_vf=*i_vf;
    	itemp_vm=*i_vm;
    	for(i=0; i<MAX_PERSONE; i++){
    		if(vettore[i].sesso=='M'){
    			vm[itemp_vm]=vettore[i].eta;
    			itemp_vm++;
    		}
    		else{
    			vf[itemp_vf]=vettore[i].eta;
    			itemp_vf++;
    		}
    	}
    	*i_vf=itemp_vf;
    	*i_vm=itemp_vm;
    }
    void stampa(int *vm, int *vf, int *i_vf, int *i_vm){
    	int i, itemp_vf, itemp_vm;
    	itemp_vf=*i_vf;
    	itemp_vm=*i_vm;
    	if(itemp_vm){
    		printf("Età dei Maschi:\n");
    		for(i=0; i<itemp_vm; i++)
    			printf ("%d \n", vm[i]);
    	}
    	else
    		printf("Non sono presenti Maschi (vettore maschi vuoto)\n");
    	if(itemp_vf){
    		printf("Età delle Femmine:\n");
    		for(i=0; i<itemp_vf; i++)
    			printf ("%d \n", vf[i]);
    	}
    	else
    		printf("Non sono presenti Femmine (vettore femmine vuoto)\n");
    }
    
Devi accedere o registrarti per scrivere nel forum
1 risposte