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

C, 4c, proposta di correzione compito n.1 del 25/10/2016.
  • 1) Definire una struct che permetta di gestire i dati di un articolo di giornale, le informazioni di cui tener conto sono: data di pubblicazione (nel formato YYYYMMDD), autore (nome e cognome), lunghezza (numero caratteri), numero pagina di pubblicazione, tipo (editoriale, terza pagina, di fondo, corsivo, ecc.). [1 punti]

    2) Scrivere un metodo in linguaggio C che dato un elenco (array) di articoli conti quanti sono stati pubblicati dopo una determinata data (passata come parametro). [2 punti]

    3) Scrivere un metodo in linguaggio C che riceve in ingresso una sequenza (array) di articoli e restituisca una copia della sequenza ordinata per data. [2 punti]

    4) Scrivere un metodo in linguaggio C che riceve in ingresso una sequenza (array) di articoli e restituisca una sequenza (array) con i soli articoli del tipo inserito come parametro e pubblicati in una certa data (passata come parametro). [2 punti]

    5) Scrivere un metodo in linguaggio C che riceve in ingresso una sequenza (array) di articoli e un singolo articolo (passato come puntatore) da aggiungere all’elenco (sempre che l’elenco non abbia superato il limite massimo). [2 punti]


  • 1) Definizione della struct.

    typedef struct articolo {
      char data[9]; // formato YYYYMMDD  tipo 20161104 per il 04/11/2016
      char nome [30];
      char cognome[30];
      int  lunghezza;
      int  numero_pagine;
      int tipo; // 1=editoriale, 2=terzapagina, 3=di fondo, 4=corsivo, ecc... 
    } t_articolo;
            
  • 2) Funzione che conta il numero di articoli.

    int contaArticoli(t_articolo elenco[], const int n, 
                      const char *data) {
        int ret = 0;
        int i = 0;
        for(i=0; i<n; i++) {
            if (strcmp(elenco[i].data, data) > 0) {
                ret++;
            }
        }
        
        return ret;
    }
            
  • 3) Procedura che restituisce una copia ordinata dell'array.

    void copiaOrdinata(t_articolo elenco[], const int n, 
                       t_articolo ordinato[]) {
        int i,j;
        
        for(i=0; i<n; i++) {
            ordinato[i] = elenco[i];
        }
        
        for(i=0; i<n-1; i++) {
            for(j=i+1; j<n; j++) {
                if (strcmp(ordinato[i].data, ordinato[j].data) > 0) {
                    // scambio
                    t_articolo app = ordinato[i];
                    ordinato[i] = ordinato[j];
                    ordinato[j] = app;
                }
            }
        }
    }
            
  • 4) Procedura che restituisce un array con i soli elementi selezionati.

    void seleziona(t_articolo elenco[], const int n, 
                   t_articolo lista[], int *nlista,
                   const char *data, const int tipo) {
        int i = 0;
        int k = 0;
        for(i=0; i<n; i++) {
            if ((strcmp(elenco[i].data, data) == 0) && (elenco[i].tipo == tipo)) {
                lista[k] = elenco[i];
                k++;
            }
        }
        *nlista = k;
    }
            
  • 5) Procedura per l'inserimento nuovo elemento nell'array.

    void aggiungi(t_articolo elenco[], int *n, 
                  const int max, t_articolo *art) {
        if (*n < max) {
            elenco[*n] = *art;
            (*n)++;
        }
    }
            

© Emanuele Scapin 2009-2016

 

Valid HTML 4.01! Valid CSS!