logo Thecsea.it



Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License



scolastica » esercizi » terza superiore » linguaggio c

Testo dell'esercizio

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.

mostra soluzione

/*
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;
}

Testi Consigliati:

Il linguaggio C. Principi di programmazione e manuale di riferimento. Ediz. MyLab. Con Contenuto digitale per download e accesso on line
C guida alla programmazione: Conoscere lo standard C11 dalle basi del linguaggio alle direttive del preprocessore (Programmare con C Vol. 1)
Programmazione in C

torna



Copyright © 2004-2024 thecsea.it (Claudio Cardinale - [email protected])! Tutti i diritti riservati. - contattaci