/*
* File: sol-m7u4es2.c
*
* Data: 04/10/2016
*
* Descrizione: Progetta un programma di gestione delle schedine del Totocalcio
* che, partendo da un array di dimensione prefissata che contiene
* in ogni cella il codice della giocata, la data della giocata e
* la colonna con i tredici segni, effettui la copia in un altro
* vettore solo delle giocate relative all'anno e al mese richiesto
* dall'utente.
*/
#include <stdio.h>
#include <string.h>
#define MAX_TABELLA 4
struct data {
int giorno;
int mese;
int anno;
};
struct schedina {
int cod_giocata;
struct data data_giocata;
char colonna[14]; // Stringa contenente i tredici segni piu' \0
};
int inizializza_tabella(struct schedina vett[]) {
// Inserisce quattro giocate di prova.
// Restituisce il numero di giocate inserite nel vettore.
vett[0].cod_giocata = 100;
vett[0].data_giocata.giorno = 12;
vett[0].data_giocata.mese = 5;
vett[0].data_giocata.anno = 2005;
strcpy(vett[0].colonna, "1XX22X1X11XX2");
vett[1].cod_giocata = 200;
vett[1].data_giocata.giorno = 19;
vett[1].data_giocata.mese = 11;
vett[1].data_giocata.anno = 2005;
strcpy(vett[1].colonna, "XX21XX1X2XX12");
vett[2].cod_giocata = 250;
vett[2].data_giocata.giorno = 24;
vett[2].data_giocata.mese = 11;
vett[2].data_giocata.anno = 2005;
strcpy(vett[2].colonna, "11X12XX1XX112");
vett[3].cod_giocata = 300;
vett[3].data_giocata.giorno = 21;
vett[3].data_giocata.mese = 2;
vett[3].data_giocata.anno = 2006;
strcpy(vett[3].colonna, "21XX1X12XX1X1");
return 4;
}
void stampa(struct schedina vett[], int dim) {
printf("Codice Data Colonna\n");
printf("---------------------------------\n");
for (int i = 0; i < dim; i++)
printf("%6d %02d/%02d/%04d %13s\n",
vett[i].cod_giocata,
vett[i].data_giocata.giorno,
vett[i].data_giocata.mese,
vett[i].data_giocata.anno,
vett[i].colonna);
}
int copia_selettiva(struct schedina dvett[], struct schedina svett[], int dim_s,
int ric_mese, int ric_anno) {
// Copia in dvett i soli elementi di svett che hanno mese e anno di giocata
// uguali ai parametri di ricerca.
// Restituisce il numero di elementi copiati.
int i_d = 0;
for(int i_s = 0; i_s < dim_s; i_s++)
if (svett[i_s].data_giocata.mese == ric_mese && svett[i_s].data_giocata.anno == ric_anno)
dvett[i_d++] = svett[i_s];
return i_d;
}
int main( void ) {
struct schedina tabella1[MAX_TABELLA], tabella2[MAX_TABELLA];
int dim_tabella1, dim_tabella2;
int mese, anno;
// Inizializzazione statica della prima tabella
dim_tabella1 = inizializza_tabella(tabella1);
printf("Inserire il mese e l'anno da ricercare: ");
// Per semplicita' si omette il controllo di validita'
scanf("%d%d", &mese, &anno);
dim_tabella2 = copia_selettiva(tabella2, tabella1, dim_tabella1, mese, anno);
printf("\nContenuto della prima tabella:\n\n");
stampa(tabella1, dim_tabella1);
printf("\n\nContenuto della seconda tabella:\n\n");
stampa(tabella2, dim_tabella2);
return 0;
}