ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 03/06/99 - C++

 

1.      Un campionato di calcio a N squadre può essere rappresentato mediante una matrice camp quadrata di interi di dimensione (N+1)x(N+1).  Le squadre partecipanti al campionato sono numerate da 1 ad N e sono identificabili attraverso il corrispondente numero.
Ogni elemento
Camp[i][j] della matrice contiene i punti acquisiti dalla squadra i quando ha incontrato la squadra j:

Camp[i][j]= 3 se la partita fra la squadra i e la squadra j si é conclusa con la vittoria di i;

Camp[i][j]=0 se la partita fra la squadra i e la squadra j si é conclusa con la vittoria di j;

Camp[i][j] =1 se la partita fra la squadra i e la squadra j si é conclusa in pareggio;

Camp[i][j] =-1 altrimenti.

Si definisca una classe  campionato ogni oggetto della quale rappresenta un campionato. Sugli oggetti della suddetta classe é possibile compiere le seguenti operazioni:

·         Campionato c;

costruttore che inizializza un campionato (ogni elemento = -1);

·         match ();

inserisce nella matrice  il risultato di una partita leggendo i dati da tastiera (squadra i, squadra j e risultato).

·         Primo ();

Stampa sul monitor il numero della squadra prima in classifica (che ha totalizzato il maggior numero di punti), nel caso vi siano più di una squadra in testa alla classifica viene visualizzata la squadra a più bassa numerazione;

 

 

1.       Si scriva una funzione elimina_minori(l) che riceve come parametro il puntatore ad un lista semplice. La funzione legge da tastiera un vzlore intero n, e calcola la media aritmetica m fra n ed il vaolre massimo degli elmementi della lista.

Infine elimina dalla lista tutti gli elementi che hanno valore minore di m, restituendo la lista così modificata.

 

2.      Un file dati.txt contiene, per ciascuna riga, le informazioni relative all’esito di un esame. Ogni riga é composta dal numero di matricola e  il cognome  di uno studente e il voto conseguito (compreso fra 0 e 30). Si scriva un programma che visualizza sul monitor il numero di matricola degli studenti che hanno conseguito un punteggio superiore a 15 e visualizza la media aritmetica dei voti. Si consideri che ogni cognome non supera i 15 caratteri.

 

3.      Data la seguente mappa di Karnaugh si determini il vaolre delle uscite “non specificate” in modo da ottenere la forma minima ottimale e se ne disegni il circuito.

 

AB              00             01            11                10

   C

         0

 

1

-

 

         1

1

 

-

1

 

10

10

10

3

 

1)

//camp.h

const int N=18;

 

 

class campionato {

            int partite[N+1][N+1];

 

public:

 

            void primo ();

            void match ();

            campionato();

}

 

 

//camp.cc

 

#include <iostream.h>

#include "camp.h"

 

campionato::campionato() {

            for (int i=0; i<N+1; i++)

                        for (int j=0; j<N+1; j++)

                                   partite[i][j]=-1;

}

 

 

 

 

void campionato::match() {

            char risu;

            int s1, s2;

 

            cout << "Inserisci numero della squadra di casa: ";

            cin >> s1;

            cout << "Inserisci numero della squadra ospite: ";

            cin >> s2;

            cout<<  "Inserisci il risultato:\n"

                                   "i - vittoria interna; \n"

                                   "e - vittoria esterna; \n"

                                   "p - pareggio; \n";

            cin >> risu;

            switch (risu) {

            case 'i': {

                        partite[s1][s2] = 3;

                        partite[s2][s1] = 0;

                        break;}

            case 'e': {

                        partite[s1][s2]=0;

                        partite[s2][s1]=3;

                        break;}

            case 'p': {

                        partite[s1][s2]=partite[s2][s1]=1;

                        break;}

            default: {

                        cout << "valore errato";

                        break;

                        };

            }

}

 

 

 

void campionato::primo () {

            int p_max=0;

            int p=0;

            int primo=0;

            for (int i=1; i<N+1; i++) {

                        for (int j=1; j<N+1; j++)

if(partite[i][j]>=0)
p+=partite[i][j];

                        if (p>p_max) {

                                   primo=i;

                                   p_max=p;}

            }

            cout << "La squadra numero " << primo <<" è prima in classifica\n";

}

 


2)

#include <iostream.h>

 

struct elem {

                int info;

                elem * succ;

};

 

void elimina_minori (elem *&l) {

                elem * l1;

                elem *aux;

                int i=0;

                int n, h;

                int max = 0;

 

                if (l==0) {

                               cout<<"lista vuota!";

                               return;

                }

 

                cout << "Inserisci un valore:\n";

                cin >> n;

                aux = l;

                while (aux !=0) {

                               i++;

                               if (aux->info>max) max = aux->info;

                               aux = aux->succ;

                }

                cout << "max =" << max << "\n";

               

                h=(max+n)/2;

                cout << "h ="<<h<<"\n";

 

                l1 = l;

                while ((l1->info <h)&&(l1!=0)) {

                                               aux=l1;
                                               l1 = l1->next;

                                               l = l1 ;

                                               delete aux ;

                                               }

                aux =l ;

                l1 = l->next ;

                while(l1=!0) {

                                               if (l1->info <h) {

                                                               aux->next = l1 ->next;

                                                               delete l1;

                                                               l1 = aux ->next; }

                                               else {

                                                               aux = aux ->next ;

                                                               l1 =l1->next ;

                                                               }

                                               }

}


3)

 

# include <fstream.h>

 

void main () {

                        const int N=31;

                        int v1=0;

                        int j, matr, voto, media, somma;

                        char nome[15];

                        char cognome [15];

                        fstream f;

 

            f.open("esame.txt", ios::in);

            j=0;

            somma=0;

            while (!f.eof()) {

                        f >> matr>>nome>>cognome>>voto;

                        v1+=voto;

                        if (voto>15)

                        cout << matr << "\n";

                        j++;

            }

 

            media = v1/j;

            cout << "Media voti: " << media <<"\n";

}


4)

 

 

 

 

1

-

 

1

 

-

1

 

 

1

1

 

1

 

 

1

 

 

   _    _

BC + BC