codice:
#include <stdio.h>
#include <stdlib.h>
struct indirizzo {
char strada[20];
char CAP[5];
char civico[3]; };
struct data {
short giorno;
char mese[10];
char anno[4];};
typedef struct indirizzo ind;
typedef struct data Data;
struct studente {
char nome[10];
char cognome[15];
char matricola[10];
char luognasc[25];
ind indirizzo;
Data datanascita;
short presenze[20];
};
typedef struct studente stud;
stud student[30];
stud max_I(stud a, stud b);
int max_(int a,int b);
stud massimo_a_ricDI(stud a[],int n);
void stampa(stud *);
void inserimento(stud *);
void ricerca(stud *);
void stampa(stud *student)
{short i;
//stampa dei dati e presenze totali
printf("dati degli studenti");
for (i=0;i<3;i++)
{fflush(stdin);
printf("%s %s %s %s \n %s %s %s \n %d %s %s\n",student[i].cognome,student[i].nome,student[i].matricola,
student[i].luognasc,student[i].indirizzo.strada,student[i].indirizzo.civico,student[i].indirizzo.CAP,
student[i].datanascita.giorno,student[i].datanascita.mese,student[i].datanascita.anno);
printf(" presenze totali su 20 giorni %d \n",3-student[i].presenze[0]);
}
}
void ricerca(stud *student)
{short j;char nome[10],cognome[15];
//ricercadi uno studente dato nome e cognome
printf("inserisci cognome e nome dello studente da ricercare");
scanf("%s" "%s",&cognome,&nome);
while ((student[j].cognome!=cognome || student[j].nome!=nome)&&(j<3))//controollare la condizione
{j=j+1;}
//if cognome e nome trovati
printf("%s %s %s %s \n %s %s %s \n %d %s %s\n",student[j].cognome,student[j].nome,student[j].matricola,
student[j].luognasc,student[j].indirizzo.strada,student[j].indirizzo.civico,student[j].indirizzo.CAP,
student[j].datanascita.giorno,student[j].datanascita.mese,student[j].datanascita.anno);
printf(" assenze 20 giorni %d \n",student[j].presenze[0]);
}
stud max_I(stud a, stud b) {
if (a.presenze[0] > b.presenze[0])
return a;
else
return b;
}
stud massimo_a_ricDI(stud a[],int n)
{
int mediano;
/* soluzione del caso base */
if(n == 1)
return a[0];
else
{
/* autoattivazioni */
mediano = (n-1)/2;
return max_I(massimo_a_ricDI(a,mediano+1),massimo_a_ricDI(a+mediano+1,n-mediano-1));
}
}
void inserimento(stud *student)
{short i,j,h;
for (i=0;i<2;i++)
{fflush(stdin);
printf("inserisci nome studente n %d\n ",i+1);
scanf("%s",&student[i].nome);fflush(stdin);
printf("inserisci cognome studente %s\n ",student[i].nome);
scanf ("%s",&student[i].cognome);fflush(stdin);
/*printf("inserisci matricola studente %s\n ",student[i].cognome);
scanf("%s",&student[i].matricola);fflush(stdin);
printf("inserisci luogo di nascita studente %s\n ",student[i].cognome);
scanf("%s",&student[i].luognasc);fflush(stdin);
printf("inserisci indirizzo(strada,civico,CAP) lasciando uno spazio, studente %s\n",student[i].cognome);
scanf("%s" "%s" "%s",&student[i].indirizzo.strada,&student[i].indirizzo.civico,&student[i].indirizzo.CAP);
printf("inserisci data nascita (gg mese(parola) anno) lasciando uno spazio, studente %s\n",student [i].cognome);
scanf("%d" "%s" "%s",&student[i].datanascita.giorno,&student[i].datanascita.mese,&student[i].datanascita.anno);
//finora carichiamo i dati degli studenti*/
}
for (h=1;h<3;h++)
{student[h].presenze[0]=0;
for (j=0;j<2;j++)
{fflush(stdin);
printf("lo studente %s %s e \npresente nel %d giorno\n",student[j].cognome,student[j].nome,h);
printf("\nimmettere 0 per presente e 1 per assente\n");
do{
fflush(stdin);printf("ripeti ");
scanf("%d",&student[j].presenze[h]);
}while ((student[j].presenze[h]!=0) && (student[j].presenze[h]!=1));
student[j].presenze[0]=student[j].presenze[0]+student[j].presenze[h];//conta il numero di assenze
}
}
}
void main()
{short i=0,j=3;stud h;
inserimento(student);
printf("premi 1 per Stampare i dati e le presenze totali di tutti gli studenti\n");
printf("premi 2 per Dato un nome e un cognome stampare i dati e le assenze totali dello studente\n");
printf("premi 3 per Stampare il nome e il cognome dello studente che ha fatto più assenze\n");
scanf("%d",i);
switch(i){
case 1:
stampa(student);break;
case 2:
ricerca(student);break;
case 3:
h=massimo_a_ricDI(student,j);
default:
printf("errore");break;
}
}