04.06.2008 | 22:12:22
immagine
Ing. Emanuele Scapin

C, dato un elenco di alunni dire chi è stato bocciato (lo studente è ripetente).
  • Dato un elenco di studenti (caratterizzati da nome, cognome, classe e data di nascita) dire quali sono stati bocciati.


  • Proposta di soluzione con main di inserimento dati e invocazione del metodo di analisi che esegue il controllo richiesto.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX 10
    
    struct alunno {
        char nome[30];
        char cognome[30];
        char classe[5];
        char data[10];
    };
    
    void analisi(const struct alunno lista[], const int n, const int annorif);
    
    int main(int argc, char** argv) {
        setvbuf(stdout, 0, _IONBF, 0);
        
        struct alunno elenco[MAX];
    
        int n=0;
        printf("introdurre numero studenti < %d\n", MAX);
        scanf("%d", &n);
        
        // inserimento
        int i=0;
        for(i=0;i<n; i++) {
            printf("introdurre nome studente %d-esimo\n", i);
            scanf("%s", elenco[i].nome);   
            printf("introdurre cognome studente %d-esimo\n", i);
            scanf("%s", elenco[i].cognome); 
            printf("introdurre classe studente %d-esimo\n", i);
            scanf("%s", elenco[i].classe);  
            printf("introdurre data nascita dd.mm.yyyy studente %d-esimo\n", i);
            scanf("%s", elenco[i].data);         
        }
        
        // controllo su data di nascita
        analisi(elenco, n, 2004);
    
        return (EXIT_SUCCESS);
    }
    
    void analisi(const struct alunno lista[], const int n, const int annorif) {
        int i;
        for(i=0; i<n; i++) {
            char classe[2];
            // prendo la classe
            strncpy(classe, lista[i].classe, 1);
            classe[1] = '\0';
            int iclasse = atoi(classe);
            printf("classe %d-esimo : %s, %d\n", i, classe, iclasse);
            char anno[5];
            //prendo l'anno
            strncpy(anno, lista[i].data+6, 4);
            anno[5] = '\0';
            int ianno = atoi(anno);
            printf("anno %d-esimo : %s, %d\n", i, anno, ianno);
            
            // controllo se bocciato
            if (annorif-ianno > iclasse) {
                printf("%s %s %s %s bocciato\n", lista[i].nome, lista[i].cognome, 
                        lista[i].classe, lista[i].data);
            }
        }
    }
            

© Emanuele Scapin 2009-2018

 

Valid HTML 4.01! Valid CSS!