oregon ha scritto:
Anche così non si può determinare il problema...
Posta tutto il codice da copiare-incollare e compilare senza errori.
Eccolo:
#include <iostream>
#define MAXNUM 1000
#include <cstring>
using namespace std;
struct Laureando {
char cognome[32];
char nome[32];
char cds[4];
char matricola[10];
double media;
};
struct Terna{
char m[10];
char c[32];
char n[32];
}terna;
void read(Laureando listain[],int n);
void sortbymatricola(Laureando listain[],int n);
void readterna(Terna terna);
int ricerca(Laureando listain[], Terna terna,int n);
void copia(Laureando listain[], Laureando listaout[],int pos, int n);
void elimina(Laureando listain[],int pos,int n);
void stampa(Laureando listain[], Laureando listaout[],int n, int k);
int main(){
int n;
int k,pos;
Laureando listain[MAXNUM],listaout[MAXNUM];
do{
cout<<"inserisci numero di studenti:"<<endl;
cin>>n;
} while(n<0 || n>MAXNUM);
read(listain,n);
sortbymatricola(listain,n);
cout<<"inserisci k:"<<endl;
cin>>k;
for(int i=0; i<k; i++){
readterna(terna);
pos=ricerca(listain,terna,n);
if(pos>=0){
cout<<"trovato uno studente con matricola m"<<pos<<endl;
if((strcmp(listain[pos].cognome,terna.c)==0) && (strcmp(listain[pos].nome,terna.n)==0)){
cout<<"il nome e il cognome dello studente trovato sono uguali a C e N"<<endl;
copia(listain,listaout,pos,n);
elimina(listain,pos,n);
n--;
stampa(listain,listaout,n,k);
}
else{
cout<<"il nome e il cognome dello studente trovato sono diversi da C e N"<<endl;
}
}
else{
cout<<"nessuno studente con matricola m"<<endl;
}
}
return 0;
}
void read(Laureando listain[],int n){
bool corretto;
for(int i=0; i<n; i++){
cin.ignore(1000,'\n');
cout<<"Laureando numero"<<" "<<i<<endl;
cout<<"inserisci cognome:"<<endl;
cin.getline(listain[i].cognome,32);
cout<<"inserisci nome:"<<endl;
cin.getline(listain[i].nome,32);
cout<<"inserisci corso di studi (INF,IND,CIV):"<<endl;
do{
cin.getline(listain[i].cds,4);
if((strcmp(listain[i].cds,"INF")==0) || (strcmp(listain[i].cds,"CIV")==0) ||
(strcmp(listain[i].cds,"IND")==0)){
corretto=true;
}
else {
corretto=false;
}
}while(!corretto);
cout<<"inserisci matricola:"<<endl;
cin>>listain[i].matricola;
cout<<"inserisci media dei voti:"<<endl;
cin>>listain[i].media;
}
}
void sortbymatricola(Laureando listain[],int n){
bool fattoswap;
int last=0;
int end;
do{
end=last;
fattoswap=false;
for(int i=n-1; i>end; i--){
if(listain[i].matricola<listain[i-1].matricola){
Laureando appo=listain[i];
listain[i]=listain[i-1];
listain[i-1]=appo;
last=i;
fattoswap=true;
}
}
}while(fattoswap);
}
void readterna(Terna terna){
cin.ignore(80,'\n');
cout<<"inserisci m:"<<endl;
cin.getline(terna.m,10);
cout<<"inserisci c:"<<endl;
cin.getline(terna.c,32);
cout<<"inserisci n:"<<endl;
cin.getline(terna.n,32);
}
int ricerca(Laureando listain[], Terna terna, int n){
int pos=-1;
int i=0;
while(i<n && pos<0){
if(strcmp(terna.m,listain[i].matricola)==0){
pos=i;
}
else{
i++;
}
}
return(pos);
}
void copia(Laureando listain[], Laureando listaout[],int pos,int n){
int j=0;
for(int i=0; i<n; i++){
listaout[j]=listain[pos];
j++;
}
}
void elimina(Laureando listain[],int pos,int n){
for(int i=pos; i<n-1; i++){
listain[i]=listain[i+1];
}
}
void stampa(Laureando listain[], Laureando listaout[],int n, int k){
cout<<"elenco iniziale:"<<endl;
for(int i=0; i<n; i++){
cout<<listain[i].cognome<<endl;
cout<<listain[i].nome<<endl;
cout<<listain[i].cds<<endl;
cout<<listain[i].matricola<<endl;
cout<<listain[i].media<<endl;
}
cout<<"elenco finale:"<<endl;
for(int i=0; i<k; i++){
cout<<listaout[i].cognome<<endl;
cout<<listaout[i].nome<<endl;
cout<<listaout[i].cds<<endl;
cout<<listaout[i].matricola<<endl;
cout<<listaout[i].media<<endl;
}
}