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.