ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 13/01/2004 - C++
1.
Sia
dato un file città.dat contenente, in ogni riga, una stringa di lunghezza massima 36 caratteri
che contiene il nome di una città e un valore intero che ne rappresenta il
numero di abitanti. Si scriva una funzione estrai() che crea un nuovo file chiamato città2.dat che contiene il nome della
città più popolosa e il nome di quella meno popolosa fra quelle contenute nel
file città.dat.
2.
Si
scriva una funzione rendi_pari(l) che riceve in ingresso il
puntatore ad una lista semplice a valori di tipo carattere l. La funzione conta il numero n di elementi di cui è composta l e, se n è dispari, allora viene
eliminato l’ultimo elemento di l, altrimenti l rimane invariata.
3.
Si
scriva una funzione ok = stringhe(s1, s2, s3) che riceve in ingresso tre
stringhe s1, s2 e s3 di lunghezza qualsiasi e
restituisce true se ogni carattere di s3 é presente in s1 o in s2, false altrimenti.
4.
Dati
i numeri decimali A=107, B=49 e C=-66, 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=B-C 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>
#include <string.h>
void ordina() {
int n, n_g, n_p;
fstream leggi, scrivi;
char città[37], città_g[37],
città_p[37];
leggi.open(“città.dat”, ios::in);
scrivi.open(“città2.dat”,
ios::out);
if (leggi>>città>>n)
{ n_g=n;
n_p=n;
strcpy(città_g,
città);
strcpy(città_p,
città);
}
else return;
while(leggi>>città>>n)
{
if(n>n_g) {
n_g=n;
strcpy(città_g,
città);
}
if(n<n_p) {
n_p=n;
strcpy(città_p,
città);
}
}
scrivi<<città_g<<”\n”<<città_p;
leggi.close( );
scrivi.close();
}
2.
void rendi_pari(elem *&l)
{
elem *aux, *aux1;
if(l==0) return;
if(l->next==0)
{
delete l;
l=0;
return;
}
int n=0;
aux=l;
while(aux != 0)
{
n++ ;
aux=aux->next ;
}
if(n%2 !=0)
{
for(aux
= l; aux->next != 0; aux->aux->next)
aux1=aux ;
aux1->next=0 ;
delete aux ;
}
}
3.
boolean
controlla_3_stringhe (char *s1, char *s2, char *s3)
{
for(int i=0; s3[i]!=’\0’; i++)
{
for(int j=0; s1[j]!=’\0’; j++)
{
if(s1[j]==s3[i])
break;
}
if (s1[j]==’\0’)
{
for(int k=0; s2[k]!=’\0’; k++)
{
if(s2[k]==s3[i])
break;
}
if(s2[k]==’\0’)
return false;
}
}
return true;
}