ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 18/09/2003 - C++
1.
Sia dato il file numeri.txt che contiene un insieme di numeri
naturali ordinati in senso crescente (non necessariamente consecutivi). Si
scriva una funzione trasforma() che modifica il file in modo che
alla fine esso contenga la serie completa di tutti i numeri consecutivi
compresi fra il valore più basso e il valore più alto contenuti nel file
originale ordinati in senso crescente
2. Siano date due liste semplici non vuote a valori interi l1 e l2, sia l1 che l2 non contengono elementi
ripetuti. Si scriva una funzione unisci(l1, l2) che modifica la lista l1 in modo tale che alla fine contenga anche gli elementi
di l2. La lista l1 non dovrà alla fine
contenere elementi ripetuti.
3. Siano date due stringhe s1 e s2 di lunghezza qualsiasi e senza caratteri ripetuti al loro interno. Si scriva una funzione ok=diverse(s1, s2) che restituisce true se s1 e s2 hanno un numero di caratteri in comune non superiore a 5, false altrimenti.
4. Dati i numeri decimali A=98, B=-70 e C=118, 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=A-B 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>
void trasforma()
{
int min;
int max=0;
fstream f;
f.open(“numeri.txt,
ios::in);
if(f>>min);
else return;
while(f>>max)
;
f.close();
f.open(“numeri.txt”,
ios::out);
if(max!=0)
{
for (int i=min; i<=max; i++)
f<<i<<” “;
}
else
f<<min;
f.close();
}
2.
void unisci(elem*& l1,
elem *l2)
{
elem *aux1, *aux2, *aux3;
aux1=l1;
aux2=l2;
boolean doppione = false
for(;aux2!=0; aux2=aux2->next)
{
aux1=l1;
while(aux1!=0
&& doppione==false)
{
if(aux1->info ==aux2->info)
doppione=true;
aux1=aux1->next;
}
if(!doppione) //inserisci aux2 in l1
{
aux3 = new elem;
aux3->info
= aux2->info;
aux3->next=
aux1 ;
l1=aux3 ;
}
else
doppione=false;
}
}
3.
boolean diverse(char *s1,
char *s2)
{
int cont=0;
for(int i=0; s1[i]!=0; i++)
{
for(int j=0; s2[j]; j++)
{
if(s1[i] == s2[j])
{
cont++;
if(cont >5)
return false;
break;
}
}
}
return true;
}