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)++;
}
}