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!!