· Web viewPoiché occorre confrontare delle stringhe (nella funzione in cui si seleziona il corso...

5
Esercizio per la prova in itinere Si vuole scrivere un programma C per la gestione di informazioni relative a studenti neolaureati in ingegneria. Tali informazioni sono contenute in un vettore in cui ogni elemento contiene i seguenti dati così strutturati: - Cognome stringa contenuta in campo di esattamente 25 caratteri, può contenere spazi - Nome stringa contenuta in campo di esattamente 25 caratteri, può contenere spazi - corso di laurea può assumere i seguenti valori: Informatica, Elettronica, Civile, Meccanica, Elettrica, Gestionale - voto di laurea intero, indica il voto di laurea - lode intero, 1 indica la presenza di lode, 0 indica l’assenza - numero anni di iscrizione intero, indica in quanti anni lo studente ha conseguito la laurea Dopo aver definito una struttura dati (struct studente) e il vettore di struct studente, definire le seguenti funzioni: 1) RiempiVettore procedura che ha come parametri il vettore di struct studente e la sua dimensione: essa deve leggere le informazioni dalla tastiera inserendole all’interno del vettore di studenti 2) StudentiMigliori funzione che accetta in ingresso un vettore di studenti, un voto soglia vsoglia ed un numero anni soglia annisoglia: essa deve visualizzare cognome, nome e voto di laurea degli studenti aventi un voto maggiore o uguale a vsoglia ed un numero di anni di iscrizione inferiore ad annisoglia. La funzione inoltre deve restituire il numero di studenti visualizzati. 3) VisualizzaPerCdL funzione che accetta in ingresso un vettore di studenti e che per ogni corso di laurea previsto (Informatica, Elettronica, Civile, Meccanica, Elettrica, Gestionale) visualizzi il numero di studenti aventi un voto pari a 110 o 110 e lode. 4) MediaCdL funzione che accetta in ingresso un vettore di studenti ed un corso di laurea: essa deve calcolare la media del voto di laurea degli studenti appartenenti a quel corso, restituendola al main (nota: ai fini del calcolo della media il 110 e lode si consideri pari a 110). 5) main All’interno del main predisporre un opportuno menu che permetta di scegliere e far eseguire le diverse funzioni implementate. Note per lo svolgimento: Prima di andare avanti elaborate autonomamente la struttura dati, le dichiarazioni delle varie funzioni (con i parametri che servono

Transcript of  · Web viewPoiché occorre confrontare delle stringhe (nella funzione in cui si seleziona il corso...

Page 1:  · Web viewPoiché occorre confrontare delle stringhe (nella funzione in cui si seleziona il corso di laurea fra i 6 disponibili) occorre includere la libreria < string.h >

Esercizio per la prova in itinereSi vuole scrivere un programma C per la gestione di informazioni relative a studenti neolaureati in ingegneria. Tali informazioni sono contenute in un vettore in cui ogni elemento contiene i seguenti dati così strutturati:

- Cognome stringa contenuta in campo di esattamente 25 caratteri, può contenere spazi- Nome stringa contenuta in campo di esattamente 25 caratteri, può contenere spazi- corso di laurea può assumere i seguenti valori: Informatica, Elettronica, Civile, Meccanica, Elettrica,

Gestionale- voto di laurea intero, indica il voto di laurea- lode intero, 1 indica la presenza di lode, 0 indica l’assenza- numero anni di iscrizione intero, indica in quanti anni lo studente ha conseguito la laurea

Dopo aver definito una struttura dati (struct studente) e il vettore di struct studente, definire le seguenti funzioni:1) RiempiVettoreprocedura che ha come parametri il vettore di struct studente e la sua dimensione: essa deve leggere le informazioni dalla tastiera inserendole all’interno del vettore di studenti2) StudentiMigliorifunzione che accetta in ingresso un vettore di studenti, un voto soglia vsoglia ed un numero anni soglia annisoglia: essa deve visualizzare cognome, nome e voto di laurea degli studenti aventi un voto maggiore o uguale a vsoglia ed un numero di anni di iscrizione inferiore ad annisoglia. La funzione inoltre deve restituire il numero di studenti visualizzati.3) VisualizzaPerCdLfunzione che accetta in ingresso un vettore di studenti e che per ogni corso di laurea previsto (Informatica, Elettronica, Civile, Meccanica, Elettrica, Gestionale) visualizzi il numero di studenti aventi un voto pari a 110 o 110 e lode.4) MediaCdLfunzione che accetta in ingresso un vettore di studenti ed un corso di laurea: essa deve calcolare la media del voto di laurea degli studenti appartenenti a quel corso, restituendola al main (nota: ai fini del calcolo della media il 110 e lode si consideri pari a 110).5) mainAll’interno del main predisporre un opportuno menu che permetta di scegliere e far eseguire le diverse funzioni implementate.

Note per lo svolgimento:Prima di andare avanti elaborate autonomamente la struttura dati, le dichiarazioni delle varie funzioni (con i parametri che servono alle singole funzioni) ed il main che contiene il menù che permette di chiamare ordinatamente le varie funzioni.

Page 2:  · Web viewPoiché occorre confrontare delle stringhe (nella funzione in cui si seleziona il corso di laurea fra i 6 disponibili) occorre includere la libreria < string.h >

Ora confrontate il vostro lavoro con la seguente bozza . Modificate i nomi che avete dato alle funzioni in modo da renderli uguali a quelli usati

nell’esempio. Controllate i parametri che avete passato e verificate che siano gli stessi dell’esempio.

Notate che per i valori numerici, nell’esempio vengono usati unsigned short o unsigned.Se volete potete sostituirli con degli int oppure usate quelli dell’esempio.

Cominciate col definire il main e dentro il main inserite il menù usando lo switch-case. Per provare il funzionamento, man mano che andate avanti, ricordatevi di eliminare la

chiamata delle varie funzioni, prima di averle scritte per intero, altrimenti vi darà errore nella compilazione.

Nell’esempio, le varie chiamate di funzione (tranne la prima che serve per inserire i dati) sono state commentate (con le //) invece di cancellarle, così poi non avete bisogno di riscriverle.

Poiché occorre confrontare delle stringhe (nella funzione in cui si seleziona il corso di laurea fra i 6 disponibili) occorre includere la libreria <string.h> per usare la funzione strcmp che confronta due stringhe (per confrontare il cdl inserito con quello indicato in fase di ricerca nel caso 3)

#include<stdio.h>#include<string.h>

#define N 10 //nelle prove del programma mettete il valore 2 per evitare //di dover inserire 10 studenti ogni volta che provate ad eseguire

struct studente {char cognome[26], nome[26], cdl[10];

unsigned short voto,lode,anni;};

struct studente archivio[N]; //è un vettore di struct

void RiempiVettore(struct studente v[], unsigned dim){unsigned i;

for (i=0; i<dim;i++) { printf("\nElemento %u ",i); printf("\nCognome "); scanf("%s", v[i].cognome); printf("\nnome "); scanf("%s", v[i].nome); printf("\nCdL "); scanf("%s", v[i].cdl); printf("\nVoto di Laurea "); //completare la lettura………………….. printf("\nLode (1-si, 0-no) ");………………….. printf("\nAnni di Studio "); scanf("%u",&v[i].anni);

Page 3:  · Web viewPoiché occorre confrontare delle stringhe (nella funzione in cui si seleziona il corso di laurea fra i 6 disponibili) occorre includere la libreria < string.h >

// fflush(stdin); //la funzione fflush(stdin) è stata commentate perchè non è indispensabile }}/*unsigned StudentiMigliori (struct studente v[], unsigned dim, unsigned vsoglia, unsigned asoglia){ unsigned i,count=0;

…………………… return count;}

void VisualizzaPerCdL(struct studente v[], unsigned dim, struct studente x){ unsigned i, count1=0, count2=0;………………………………….. printf("\nIl numero di studenti con 110 e' %u ",count1); printf("\nIl numero di studenti con 110 e lode e' %u ",count2);

}//fine funzione

double MediaCdL(struct studente v[], unsigned dim, struct studente x){ unsigned i,count=0; double m=0.0;

…………………. } return m/count;}*/int main(){

unsigned short scelta, count1, count2; struct studente elem;

//inizio menù do { printf("\n1 Riempi Vettore "); printf("\n2 Visualizza Studenti Migliori "); printf("\n3 Visualizza Studenti per CdL "); printf("\n4 Calcolo Media "); printf("\n5 Fine "); printf("\nInserisci la tua scelta ---> "); scanf("%u",&scelta); fflush(stdin); switch (scelta) { case 1: RiempiVettore(archivio,N); break; case 2: printf("\nInserisci il voto minimo ");

Page 4:  · Web viewPoiché occorre confrontare delle stringhe (nella funzione in cui si seleziona il corso di laurea fra i 6 disponibili) occorre includere la libreria < string.h >

scanf("%u",&elem.voto); // fflush(stdin); printf("\nInserisci il numero di anni "); scanf("%u",&elem.anni); // fflush(stdin); // StudentiMigliori(archivio,N,elem.voto,elem.anni); break; case 3: printf("\nInserisci il cdl "); gets(elem.cdl); // VisualizzaPerCdL(archivio,N,elem); break;

case 4: printf("\nInserisci il cdl "); gets(elem.cdl); // printf("\nLa Media e' %f",MediaCdL(archivio,N,elem)); } } while (scelta < 5);}

Come vedete, nel menù le chiamate di funzioni sono state commentate (tranne la funzione riempiVettore , così inizialmente potete non metterle del tutto e potete provare a svolgere l’esercizio col solo main e a compilarlo. Superata questa fase potete scrivere le altre funzioni.

Attenzione: anche se in questa bozza le funzioni sono accennate tutte, ma incomplete, cominciate con lo scrivere la funzione riempiVettore e cancellate completamente le altre (sono già commentate).Poi, quando l’inserimento funziona, provate a scrivere le varie funzioni.

Il testo dell’esercizio e lo svolgimento è in word così se volete, potete fare un copia-incolla dei pezzi presenti.