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”;
}