PDA

Visualizza la versione completa : [C++] Riempimento e separazione di vettori


ciro_90
09-01-2010, 18:01
Ragazzi ho bisogno di una mano con questo programma da svolgere:

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.

Il codice da me steso è il seguente

LIB.H
<const int max=50;


struct persona
{
int eta;
char sesso;
};

typedef persona vettore_strut[max];
typedef int vettore[max];
//prototitpi

void leggi (vettore_strut,int &);
void separa (vettore_strut,int,vettore,vettore);
void stampa(vettore,vettore,int,int);
>

MAIN.CPP
<#include <iostream>
#include "lib.h"

using namespace std;

int main()
{
vettore vm,vf;
int riemp,riemp_vm,riemp_vf;
vettore_strut vs;

leggi(vs,riemp);
separa(vs,riemp,vm,vf);
stampa(vm,vf,riemp_vm,riemp_vf);

system("PAUSE");
return 0;

}>

LIB.CPP
<#include <iostream>
#include "lib.h"

using namespace std;

void leggi(vettore_strut vs, int &riemp)
{
int i;
cout<<"inserire riempimento del vettore"<<endl;
cin>>riemp;
for(i=0;i<riemp;i++)
{
cout<<"inserire età della persona"<<endl;
cin>>vs[i].eta;
cout<<"inserire sesso della persona"<<endl;
cin>>vs[i].sesso;
}
}

void separa (vettore_strut vs,int riemp,int &riemp_vm,int &riemp_vf,vettore vm,vettore vf)
{
int i;
riemp_vm=0;
riemp_vf=0;

for(i=0;i<riemp;i++)
{
if(vs[i].sesso=='m' || vs[i].sesso=='M')
{

vm[riemp_vm]=vs[i].eta;

riemp_vm++;
}
else
{
vf[riemp_vf]=vs[i].eta;
riemp_vf++;
}
}


}


void stampa(vettore vm, vettore vf, int riemp_vm, int riemp_vf)
{
int i,j;
if(riemp_vm==0 && riemp_vf==0)
cout<<"non ci sono elementi"<<endl;

cout<<"gli elementi del vettore_vm sono :"<<endl;
for(i=0;i<riemp_vm;i++)
cout<<vm[riemp_vm];

cout<<"gli elementi del vettore_vf sono :"<<endl;
for(j=0;j<riemp_vf;j++)
cout<<vf[riemp_vf];
} >

L'errore è il seguente :< [Linker error] undefined reference to `separa(persona*, int, int*, int*)' >

PS: sono alle prime armi quindi mi scuso per eventuali errori stupidi
Le parentesi angolari le ho inseritè affinchè si evidenzi il blocco di codice per ogni modulo. Se serve metterò in allegato la cartella dove c'è il codice sorgente

ignaziodeblasi
09-01-2010, 18:13
Controlla il numero di argomenti che prende in input la funzione separa(guarda in "lib.h").. Poi usa i tag code in modo tale che il codice risulta più leggibile :D :D

xnavigator
09-01-2010, 19:56
e poi scrivi dei titoli per le discussioni civili

ciro_90
10-01-2010, 00:57
grazie ignazio che errore stupido che ho fatto...però ho svolto questo esercizio dopo ore di studio magari avevo la mente annebbiata xD...comunque la prossima volta userò il tag code mi scuso con tutti non sono tanto pratico di forum :(

ignaziodeblasi
10-01-2010, 01:10
Tranquillo non ti preoccupare..lo studio a volte fa brutti scherzi :D :D :D ..L'importante è risolvere i problemi :D Ciao :zizi:

alka
10-01-2010, 15:29
Invito alla lettura del Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887) per conoscere tutte le norme da rispettare nella partecipazione a quest'area del forum.

Il titolo di questa discussione l'ho corretto io.

Loading