SOLUZIONE 10-01-00 (C)

Questionario cartaceo

  1. 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.

  2. 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.

  3. Il programma stamperà
    i = 4, j = 4, K = 4

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

}