SOLUZIONE 10-01-00 (C)
Questionario cartaceo
-
Il dischetto in questione contiene
C = 512 * 1024 * 8 bit.
Per rappresentare un numero compreso tra 0 e 1000 occorrono almeno 10
bit
(infatti 210 - 1 = 1023 e 29 - 1 = 511),
pertanto
il dischetto può contenere
C / 10
numeri.
- Occorrerà munirsi di un CD o di un dischetto o di un altro
dispositivo di input, che possa essere riconosciuto dal computer come
quello di partenza, che contenga il sistema operativo, l'editor ed il compilatore
per il linguaggio scelto (Pascal o C) per svolgere l'esercitazione.
- Il programma stamperà
i = 4, j = 4, K = 4
-
#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;
}
}}
Parte laboratorio
#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);
}