ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 21/06/2002 - C++
1.
Dato
un file testo.txt composto da almeno N righe di testo non vuote, si scriva una funzione stringa_da_file() che crea una stringa di N caratteri composta dall’ultimo carattere di ciascuna delle prime N righe di testo.txt.
2. Siano dati un array v1 di dimensione N composto da valori interi positivi diversi
fra loro. Si scriva una funzione array_ordinato(v) che riceve in ingresso
l’array v1 e che crea un nuovo array v2 composto dagli stessi elementi di v1 ma ordinati in senso
crescente.
3. Data una lista circolare doppia a valori interi l, si scriva una funzione elimina_doppi(l) che riceve in ingresso la lista l e la modifica eliminandone gli elementi con campo informativo già presente. In altre parole, la lista viene modificata in modo tale che, alla fine, degli elementi con campo informativo uguale ne esisterà un solo nella lista.
4. a) si
rappresenti il numero –298 in complemento a 2 dopo
aver spiegato quanti bit sono necessari per la sua corretta rappresentazione.
b) dato il numero 10130123103 in base 4, se ne dia la rappresentazione in base 2.
c) dato il numero 27468 in base 9 lo si converta in base 3.
Punteggio:
Es.1 |
Es.2 |
Es.3 |
Es.4 |
10 |
10 |
10 |
3 |
1.
#include <fstream.h>
const int N=7;
void stringa_da_file()
{
char a, b;
fstream f;
char stringa[N+1],
f.open(“testo.txt”, ios::in);
for(int i=0; i<N; i++)
{
f.get(a);
f.get(b);
while(b!=’\n’)
{
a=b;
f.get(b);
}
stringa[i]=a;
}
stringa[i+1]=’\0’;
f.close();
}
2.
#include <limits.h>
const int N=10;
void array_ordinato(int
v[N])
{
int v2[N];
int
b=0;
int
a ;
for(int
i=0 ; i<N ; i++)
{
a=MAX_INT;
for(int j=0; j<N; j++) {
if((v[j]>b) && (v[j]<a))
a=
v[j];
}
b=a;
v2[i]=a;
}
}
3.
struct elem {
int info;
elem *next;
elem* prec;
}
void elimina_doppi( elem *lc)
{
elem *q, *p, *s;
int a;
if (lc==0) return;
q=lc;
p=q->next;
while(q->next !=lc)
{
a=q->info;
while(p!=lc)
{
if(p->info
== a)
{
p->prec->next=p->next;
p->next->prec=p->prec;
s=p;
p=p->next;
delete
s;
}
else
p=p->next;
}
q=q->next;
p=q->next;
}
}