ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 31/01/2005 - C++

           

1.      Un file esterno non vuoto sale.txt contiene in ogni riga le seguenti informazioni:
- una stringa di lunghezza massima 20 caratteri che rappresenta il nome di una sala convegni;     
-  un valore intero che rappresenta il numero di persone che la sala può contenere;
- un valore intero che rappresenta il prezzo per l’affitto della sala.
Si scriva una funzione booleana scegli_sala(int n, int p) che cerca nel file la sala che contenga almeno n persone e il cui costo di affitto sia minimo (comunque inferiore a p). Se tale sala viene trovata la funzione ne stampa il nome sul monitor e restituisce true, altrimenti restituisce false.

2.      Sia data una lista semplice l a valori interi non vuota, si scriva una funzione elimina_ultimi2(l) che riceve in ingresso la lista l e ne dealloca gli ultimi due elementi.     

3.      Si scriva una funzione inverti_stringa(s) che riceve in ingresso una stringa s di lunghezza massima 24 caratteri e crea una nuova stringa s_inv tale che il suo contenuto sia la stringa s invertita e infine la stampa sul monitor.         [es. se s=”abcdefg” allora s_inv=”gfedcba”]     

4.      Dati i numeri decimali A=-37, B=-92 e C=-163, si determini il minimo numero di bit necessari per rappresentare contemporaneamente i suddetti numeri in complemento a 2 e se ne dia la rappresentazione. Utilizzando poi lo stesso numero di bit, si esegua l’operazione D= C-A e si discuta se il risultato ottenuto è o no significativo.

 

 

 

 

Punteggio:

Es.1

Es.2

Es.3

Es.4

10

10

10

3

 


1.

#include <fstream.h>

boolean scegli_sala (int n, int p) {

int p_min, n_letto, p_letto, p, n;

boolean trovato=false;

char s_letta[21], s_ok[21];

fstream f,

f.open(“sale.txt”, ios::in);

p_min=p;

while(f>>s_letta>>n_letto>>p_letto)

{

if(p_letto<p_min && nletto>=n)

{

pmin=p_letto;

strcpy(s_ok, s_letto);

trovato=true;

}

}

if(!trovato) {        cout<<”nessuna sala va bene\n”;

                        return trovato;

            }

cout<<s_ok<<”\n”;

return true,

}

 

 

 

2.

 

void elimina_ultimi2 (elem *&l) {

elem *aux, *aux1, *aux2;

if(l->next==0)

{           delete l;

            l=0;

}

aux1=l->next;

if(aux1->next==0)

{           delete l;

            delete aux1;

            l=0;

}

aux=l;

aux2=aux1->next ;

 

while(aux2->next !=0)

{           aux2=aux2->next;

            aux1=aux1->next;

            aux=aux->next;

}

delete aux2 ;

delete aux1 ;

aux->next=0 ;

}

 

 

 

 

3.

#include <string.h>

 

void inverti_stringa( char s[25]) {

char s_inv[25];

int len;

len=strlen(s);     // len può essere ricavato anche con un ciclo:

                        // len=0;

                        // for(int i=0; s[i]!=0; i++) len++;

s_inv[len]=0;

for(int i=0; i<len; i++)

s_inv[i]=s[len-i-1];

cout<<s_inv<<”\n”;

}