Dato un vettore chiamato cognomi(N) contentente i cognomi degli studenti di una classe e una matrice voti(N x C) che riporta i voti degli studenti in C materie, caricare casualmente la matrice voti con valori interi compresi tra 1 e 10 e quindi visualizzare,:
1- per ogni studente, il voto più alto, quello più basso e la media dei voti conseguiti.
2-per ogni studente il numero di voti negativi e il numero di voti positivi.
3- visualizzae gli studenti promossi senza alcun debito, quelli promossi con 1,2,3 debiti formativi e quelli respinti.
4- Visualizzare per ogni studente la materia (o le materie) in cui ha il voto migliore e il voto peggiore. supporre di avere un ulterirore vettore materie(C) contenente le materie oggetto di valutazione.
5-Visualizzare la materia (o le materie) con il più alto numeri di insufficienze riportato dagli alunni e quella con il più alto numero di valutazioni positive
6- calcolare per ogni materia la media dei voti riportati, visualizzando il risultato in ordine decrescente di media
7-visualizzare i voti riportati da uno studente di cui è fornito in ingresso il cognome, calcolandone inoltre la media e visualizzando la materia (o le materie) in cui va meglio
8- visualizzare i voti riportati dagli studenti in una materia fornita in ingresso, calcolandone inoltre la media e visualizzando i cognomi degli studenti che hanno riportato la valutazione peggiore.
/*
CLAUDIO CARIDNALE 3AI
Dato un vettore chiamato cognomi(N) contentente i cognomi degli studenti di una classe e una matrice voti(N x C) che riporta i voti degli studenti in C materie, caricare casualmente la matrice voti con valori interi compresi tra 1 e 10 e quindi visualizzare,:
1- per ogni studente, il voto più alto, quello più basso e la media dei voti conseguiti.
2-per ogni studente il numero di voti negativi e il numero di voti positivi.
3- visualizzae gli studenti promossi senza alcun debito, quelli promossi con 1,2,3 debiti formativi e quelli respinti.
4- Visualizzare per ogni studente la materia (o le materie) in cui ha il voto migliore e il voto peggiore. supporre di avere un ulterirore vettore materie(C) contenente le materie oggetto di valutazione.
5-Visualizzare la materia (o le materie) con il più alto numeri di insufficienze riportato dagli alunni e quella con il più alto numero di valutazioni positive
6- calcolare per ogni materia la media dei voti riportati, visualizzando il risultato in ordine decrescente di media
7-visualizzare i voti riportati da uno studente di cui è fornito in ingresso il cognome, calcolandone inoltre la media e visualizzando la materia (o le materie) in cui va meglio
8- visualizzare i voti riportati dagli studenti in una materia fornita in ingresso, calcolandone inoltre la media e visualizzando i cognomi degli studenti che hanno riportato la valutazione peggiore.
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define MAX 1000
#define LEN 100
void menu(void);
int casuale(void);
void azzera(int vet[], int n);
void carica(int mat[MAX][MAX], int *n, int *c);
void acquisisci(char vet[MAX][MAX], int n);
int max(int vet[], int n);
int min(int vet[], int n);
float media(int vet[], int n);
int voti_negativi(int vet[], int n);
int voti_positivi(int vet[], int n);
void migliori(int vet[], int n, int results[]);
void peggiori(int vet[], int n, int results[]);
void materia_migliore(int mat[MAX][MAX], int n, int c, int results[]);
void materia_peggiore(int mat[MAX][MAX], int n, int c, int results[]);
void ordina(int vet[], int n);
void ordina_f(float vet[], int n);
int cerca(char vet[MAX][MAX], int n, char *ele);
int main(){
srand(time(NULL));
menu();
}
void menu(void){
//dichiarazioni
int mat[MAX][MAX], n, c, scelta, i, j, debiti[5][MAX],indici_debiti[5],aux,vet_aux[MAX+1],vet_aux2[MAX+1], pos;
char cognomi[MAX][MAX], materie[MAX][MAX], stringa[MAX];
float vet_aux_f[MAX+1];
//inizializzazione
carica(mat, &n, &c);
printf("caricamento cognimi :\n");
getchar();
acquisisci(cognomi,n);
printf("caricamento materie :\n");
acquisisci(materie,c);
azzera(indici_debiti,5);
do{
do{
printf("1- per ogni studente, il voto più alto, quello più basso e la media dei voti conseguiti. \n2-per ogni studente il numero di voti negativi e il numero di voti positivi.\n3- visualizzare gli studenti promossi senza alcun debito, quelli promossi con 1,2,3 debiti formativi e quelli respinti.\n4- Visualizzare per ogni studente la materia (o le materie) in cui ha il voto migliore e il voto peggiore. supporre di avere un ulterirore vettore materie(C) contenente le materie oggetto di valutazione.\n5-Visualizzare la materia (o le materie) con il più alto numeri di insufficienze riportato dagli alunni e quella con il più alto numero di valutazioni positive\n6- calcolare per ogni materia la media dei voti riportati, visualizzando il risultato in ordine decrescente di media\n7-visualizzare i voti riportati da uno studente di cui è fornito in ingresso il cognome, calcolandone inoltre la media e visualizzando la materia (o le materie) in cui va meglio\n8- visualizzare i voti riportati dagli studenti in una materia fornita in ingresso, calcolandone inoltre la media e visualizzando i cognomi degli studenti che hanno riportato la valutazione peggiore.\n0- uscita\nscelta : ");
scanf("%d",&scelta);
}while(scelta < 0 || scelta > 8);
//controllo
switch(scelta){
case 1:
//stampa
for(i=0;i<n;i++)
printf("studente : %s : voto piu` alto = %d, voto piu` basso = %d, media voti = %f\n",cognomi[i],mat[i][max(mat[i],c)],mat[i][min(mat[i],c)],media(mat[i],c));
break;
case 2:
//stampa
for(i=0;i<n;i++)
printf("studente : %s : numero voti negativi = %d, numero voti positivi = %d\n",cognomi[i],voti_negativi(mat[i],c),voti_positivi(mat[i],c));
break;
case 3:
//calcolo debiti
for(i=0;i<n;i++)
if((aux = voti_negativi(mat[i],c))>=4)
debiti[4][indici_debiti[4]++] = i;
else
debiti[aux][indici_debiti[aux]++] = i;
//stampa
printf("studenti senza debito :\n");
for(i=0;i<indici_debiti[0];i++)
printf("%s\n",cognomi[debiti[0][i]]);
printf("studenti con un debiti :\n");
for(i=0;i<indici_debiti[1];i++)
printf("%s\n",cognomi[debiti[1][i]]);
printf("studenti con due debiti :\n");
for(i=0;i<indici_debiti[2];i++)
printf("%s\n",cognomi[debiti[2][i]]);
printf("studenti con tre debiti :\n");
for(i=0;i<indici_debiti[3];i++)
printf("%s\n",cognomi[debiti[3][i]]);
printf("studenti bocciati :\n");
for(i=0;i<indici_debiti[4];i++)
printf("%s\n",cognomi[debiti[4][i]]);
break;
case 4:
//stampa
for(i=0;i<n;i++){
printf("studente : %s\nmigliori:\n",cognomi[i]);
migliori(mat[i],c,vet_aux);
for(j=0;vet_aux[j]>=0;j++)
printf("%s\n",materie[vet_aux[j]]);
printf("peggiori:\n");
peggiori(mat[i],c,vet_aux);
for(j=0;vet_aux[j]>=0;j++)
printf("%s\n",materie[vet_aux[j]]);
}
break;
case 5:
//stampa
//for(i=0;i<n;i++){
printf("materie migliori :\n");
materia_migliore(mat,n,c,vet_aux);
for(j=0;vet_aux[j]>=0;j++)
printf("%s\n",materie[vet_aux[j]]);
printf("materie peggiori :\n");
materia_peggiore(mat,n,c,vet_aux);
for(j=0;vet_aux[j]>=0;j++)
printf("%s\n",materie[vet_aux[j]]);
//}
break;
case 6:
//calcolo medie
for(j=0;j<c;j++){
for(i=0;i<n;i++)
vet_aux2[i]=mat[i][j];
vet_aux_f[j] = media(vet_aux2,n);
}
//ordinamento
ordina_f(vet_aux_f,c);
//stampa
printf("medie :\n");
for(i=0;i<c;i++)
printf("%f\n",vet_aux_f[i]);
break;
case 7:
//acquisizione
getchar();
printf("inserire un cognome : ");
gets(stringa);
//stampa
if((pos = cerca(cognomi, n,stringa))>=0){
printf("voti :\n");
for(i=0;i<c;i++)
printf("%s -> %d\n",materie[i],mat[pos][i]);
printf("media : %f le materie in cui va meglio sono :\n",media(mat[pos],c));
migliori(mat[pos],n,vet_aux);
for(i=0;vet_aux[i]>=0;i++)
printf("%s\n",materie[vet_aux[i]]);
}else
printf("il cognome inserito non è valido");
break;
case 8:
//acquisizione
getchar();
printf("inserire una materia : ");
gets(stringa);
//stampa
if((pos = cerca(materie, n,stringa))>=0){
printf("voti :\n");
for(i=0;i<n;i++)
printf("%s -> %d\n",cognomi[i],mat[i][pos]);
//media
for(i=0;i<n;i++)
vet_aux2[i]=mat[i][pos];
printf("media : %f gli studenti peggiori sono :\n",media(vet_aux2,n));
peggiori(vet_aux2,n,vet_aux);
for(i=0;vet_aux[i]>=0;i++)
printf("%s\n",cognomi[vet_aux[i]]);
}else
printf("la materia inserita non è valida");
break;
}
}while(scelta >= 1 && scelta <= 8);
}
int casuale(void){
return 1+rand() % 10;
}
void azzera(int vet[], int n){
//dichiarazioni
int i;
//calcoli
for(i=0;i<n;i++)
vet[i] = 0;
}
void carica(int mat[MAX][MAX], int *n, int *c){
//dichiarazioni
int i,j;
//acquisizione lunghezze
do{
printf("inserisci il numero di studenti : ");
scanf("%d",n);
printf("inserisci il numero di materie : ");
scanf("%d",c);
}while(*n<1 || *n>=MAX || *c<1 || *c>=MAX);
//inizializzazione
for(i=0;i<*n;i++)
for(j=0;j<*c;j++)
mat[i][j]=casuale();
}
void acquisisci(char vet[MAX][MAX], int n){
//dichiarazioni
int i;
//acquisizione
for(i=0;i<n;i++){
printf("inserire la stringa numero %d : ",i+1);
gets(vet[i]);
}
}
int max(int vet[], int n){
//dichiarazioni
int i,pos=0;
//calcoli
for(i=0;i<n;i++)
if(vet[i]>vet[pos])
pos = i;
//ritorno
return pos;
}
int min(int vet[], int n){
//dichiarazioni
int i,pos=0;
//calcoli
for(i=0;i<n;i++)
if(vet[i]<vet[pos])
pos = i;
//ritorno
return pos;
}
float media(int vet[], int n){
//dichiarazioni
int i,somma=0;
//calcoli
for(i=0;i<n;i++)
somma += vet[i];
//ritorno
return ((float)somma/n);
}
int voti_negativi(int vet[], int n){
//dichiarazioni
int i,neg=0;
//calcoli
for(i=0;i<n;i++)
if(vet[i]<6)
neg++;
//ritorno
return neg;
}
int voti_positivi(int vet[], int n){
//dichiarazioni
int i,pos=0;
//calcoli
for(i=0;i<n;i++)
if(vet[i]>=6)
pos++;
//ritorno
return pos;
}
void migliori(int vet[], int n, int results[]){
//dichiarazioni
int i,j;
//calcoli
azzera(results,n);
for(i=1,j=0;i<n;i++)
if(vet[i] > vet[results[j]]){
j = 0;
results[j] = i;
}else if(vet[i] == vet[results[j]])
results[++j] = i;
results[++j] = -1;
}
void peggiori(int vet[], int n, int results[]){
//dichiarazioni
int i,j;
//calcoli
azzera(results,n);
for(i=1,j=0;i<n;i++)
if(vet[i] < vet[results[j]]){
j = 0;
results[j] = i;
}else if(vet[i] == vet[results[j]])
results[++j] = i;
results[++j] = -1;
}
void materia_migliore(int mat[MAX][MAX], int n, int c, int results[]){
//dichiarazioni
int i,j,risultati[MAX];
//calcoli
azzera(results,n);
for(i=0;i<n;i++){
migliori(mat[i],c,results);
for(j=0;results[j]>=0;j++)
risultati[results[j]]++;
}
azzera(results,n);
for(i=0,j=0;i<n;i++)
if(risultati[i] > risultati[results[j]]){
j = 0;
results[j++] = i;
}else if(risultati[i] == risultati[results[j]])
results[j++] = i;
results[j] = -1;
}
void materia_peggiore(int mat[MAX][MAX], int n, int c, int results[]){
//dichiarazioni
int i,j,risultati[MAX];
//calcoli
azzera(results,n);
for(i=0;i<n;i++){
peggiori(mat[i],c,results);
for(j=0;results[j]>=0;j++)
risultati[results[j]]++;
}
azzera(results,n);
for(i=0,j=0;i<n;i++)
if(risultati[i] > risultati[results[j]]){
j = 0;
results[j++] = i;
}else if(risultati[i] == risultati[results[j]])
results[j++] = i;
results[j] = -1;
}
void ordina(int vet[], int n){
//dichiarazioni
int i,k,aux;
//calcoli
do{
k = 0;
for(i=0;i<n-1;i++)
if(vet[i]<vet[i+1]){
aux = vet[i];
vet[i] = vet[i+1];
vet[i+1] = aux;
k = i+1;
}
n=k;
}while(k);
}
void ordina_f(float vet[], int n){
//dichiarazioni
int i,k;
float aux;
//calcoli
do{
k = 0;
for(i=0;i<n-1;i++)
if(vet[i]<vet[i+1]){
aux = vet[i];
vet[i] = vet[i+1];
vet[i+1] = aux;
k = i+1;
}
n=k;
}while(k);
}
int cerca(char vet[MAX][MAX], int n, char *ele){
//dichiarazioni
int i;
//calcoli
for(i=0;i<n;i++)
if(!strcmp(vet[i],ele))
return i;
return -1;
}