23 gennaio 2004



    1. Si consideri la definizione della funzione indovina riportata qui di seguito:

      void indovina (int x, int c) {
      int y;
      scanf(“%d”,&y);
      if (y == x) {
      printf(“%d”,c);
      return;
      } else {
      indovina(x,c+1);
      }
      }
      • Descrivere in modo preciso l’effetto prodotto, in un ipotetico main, dalla seguente invocazione di funzione: indovina(18,1)
      • Scrivere un’implementazione della funzione che sia iterativa invece che ricorsiva

    2. Si definiscano le strutture dati Calciatore e Squadra che permettano di rappresentare i seguenti tipi di dato:

        • Un Calciatore deve avere il Nome, il Cognome, lo Stipendio annuo e la Nazionalità (Europeo oppure non Europeo).

        • Una Squadra deve avere il Nome, i calciatori appartenenti alla squadra (al massimo 30) ed il Capitale Sociale, cioè i soldi che la squadra può permettersi di spendere per pagare ogni calciatore in un anno.

      Si scriva il prototipo e poi si implementi una funzione con le seguenti caratteristiche:

        • Il nome della funzione è ControllaSquadra.

        • Essa riceve in ingresso un parametro di tipo squadra ed effettua i seguenti controlli:

          1. Controlla che la squadra abbia un capitale sociale sufficiente per pagare tutti i calciatori che ne fanno parte.

          2. Controlla che il numero di calciatori non europei non sia superiore ad 1/3 di tutti i calciatori che fanno parte della squadra.

          3. Nel caso fallisca il controllo a) la funzione restituisce un codice di errore numerico pari a -1, nel caso fallisca il controllo b) la funzione restituisce un codice di errore numerico pari a -2 e nel caso falliscano entrambi i controlli la funzione restituisce un codice di errore numerico pari a 0. Se invece i controlli vanno a buon fine la funzione restituisce un codice numerico pari a 1, indicante il buon esito della verifica.


    3. Si scriva una funzione in C che ricevendo come parametro un puntatore al primo elemento della lista cancelli dalla lista tutti gli elementi che hanno nel campo dato un numero dispari.
      Si utilizzi la seguente struttura:

      typedef struct elem_lista {
          int dato;
          struct elem_lista* next;
      } elem_lista;