#include <stdio.h> #include <stdlib.h> typedef struct LL *LISTA; struct LL { int NUMERO; LISTA SEGUITO; } ; LISTA Inserisci(LISTA L, int x) /* supponendo che gli elementi di L siano ordinati in ordine debolmente crescente, questa funzione inserisce x in L nella posizione opportuna. L non sara' modificata */ { LISTA Laux; if(L == NULL) { Laux = (LISTA)malloc(sizeof(struct LL)); Laux -> NUMERO = x; Laux -> SEGUITO = NULL; return Laux; } else{ if(L -> NUMERO < x){ Laux = (LISTA)malloc(sizeof(struct LL)); Laux -> NUMERO = L -> NUMERO; Laux -> SEGUITO = Inserisci(L -> SEGUITO,x); return Laux; } else{ Laux = (LISTA)malloc(sizeof(struct LL)); Laux -> NUMERO = x; Laux -> SEGUITO = L; return Laux; } }}
#include <stdio.h> typedef int BOOL; #define TRUE 1 #define FALSE 0 #define UNO 1 #define DUE 2 #define X 3 #define TREDICI 5 /*gli elementi del tipo COLONNA rappresentano un possibile risultato delle 13 partite considerate dal tototcalcio e consistono di 13 elementi ordinati dell'insieme {1,2,X} ( 1 : vince prima squadra 2 : vince seconda squadra X : pareggio )*/ typedef int COLONNA[TREDICI]; /*gli elementi del tipo SCHEDINA rappresentano le schedine del gioco del totocalcio su ogni schedina vengono indicati i possibili risultati delle 13 partite e ' possibile indicare uno oppure due oppure tre risultati in gergo mettere una doppia , mettere una tripla) peratanto una schedina puo' determinare una o piu' colonne*/ typedef BOOL SCHEDINA[TREDICI][3]; /*sottoprogramma che ritorna cosa ha vinto una schedina rispetto ad una data colonna i possibili risultati sono 13: una colonna della schedina coincide con quella data 12: una colonna della schedina coincide con quella data in 12 punti 11: una colonna della schedina coincide con quella data in 11 punti niente in tutti gli altri casi*/ int CONTROLLA (COLONNA C, SCHEDINA S) { int R = 0, I; for(I = 0; I < TREDICI; I++) if(((C[I] == UNO) && S[I][0]) || ((C[I] == DUE) && S[I][1]) || ((C[I] == X) && S[I][2])) R++; return R; } /*sottoprogramma che stampa una colonna*/ void STAMPAC (COLONNA C) { int I; for(I = 0; I < TREDICI; I++) if( C[I] == UNO) printf("1\n"); else if( C[I] == DUE) printf("2\n"); else if( C[I] == X) printf("X\n"); else printf("errore\n"); } /*sottoprogramma che stampa tutte le colonne determinate da una schedina*/ void COLON (SCHEDINA S, int IND, COLONNA C) { if(IND < TREDICI){ if(S[IND][0]){ C[IND] = UNO; COLON(S, IND + 1, C); }; if(S[IND][1]){ C[IND] = DUE; COLON(S, IND + 1, C); }; if(S[IND][2]){ C[IND] = X; COLON(S, IND + 1, C); }; } else { printf("***********\n"); STAMPAC(C); } } void COLONNE (SCHEDINA S) { COLONNA C; COLON(S, 0, C); } main(){ int R; /* assegnare una qualunque colonna alla variabile OGGI 1 2 2 X X */ COLONNA OGGI = { UNO, DUE, DUE, X, X }; /*assegnare una qualunque schedina alla variabile GIOCATA 1 2 2 1 X 1 X */ SCHEDINA GIOCATA = { { TRUE, TRUE, FALSE }, { FALSE, TRUE, FALSE }, { TRUE, FALSE, FALSE }, { FALSE, FALSE, TRUE }, { FALSE, FALSE, TRUE } }; printf("colonna OGGI\n"); STAMPAC(OGGI); /* stampare i risultati fatti da GIOCATA rispetto ad OGGI */ R = CONTROLLA(OGGI, GIOCATA); if (R == TREDICI) printf("Hai fatto 13\n"); else if (R == TREDICI - 1) printf("Hai fatto 12\n"); else if (R == TREDICI - 2) printf("Hai fatto 11\n"); else printf("non hai vinto\n"); /* stampare tutte le colonne determinate da GIOCATA */ COLONNE(GIOCATA); }