ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 13/02/2004 - C++
1.
Sia dato un file
chiamato dati.dat ciascuna riga del quale
contiene un nome (stringa di lunghezza massima 24 caratteri) e due valori
interi v1 e v2. Si scriva una funzione trova() che legge il file dati.dat e stampa sul monitor il
nome corrispondente al valore massimo di v1 fra quelli contenuti nel file. Se esiste più di un nome corrispondente
al valore massimo di v1 si sceglie quello che ha il valore di v2 più
piccolo.
3. Si scriva una funzione in_coda(l) che riceve in ingresso il
puntatore l a una lista semplice a valori interi. La funzione
legge il valore n del campo informativo della
testa della lista e inserisce in coda a l un numero di elementi pari a n leggendo i dati da tastiera.
4. Dati i numeri decimali A=64, B=-64 e C=52, si
determini il minimo numero di bit necessario per rappresentare
contemporaneamente i suddetti numeri in complemento a due e se ne dia la
rappresentazione. Utilizzando poi lo stesso numero di bit, si esegua
l’operazione D=B-A-1 e si dica se il risultato è o no significativo
10 |
10 |
10 |
3 |
#include <fstream.h>
void
trova()
{
fstream f;
char
nome[25], nome_m[25];
int v1, v2, v1m, v2m;
f.open (“dati.dat”, ios::in);
if(f >> nome_m<<v1m<<v2m);
else return;
while (f>> nome >>v1>>v2) {
if
(v1 > v1m)
{ strcpy(nome_m, nome);
v1m=v1 ;
v2m=v2 ;
}
else
if(v1==v1m)
if(v2<v2m)
{ v2m=v2;
strcpy(nome_m, nome);
}
}
cout<<nome_m;}
const int N=10;
boolean verify_matrix (int M[N][N])
{
for(int i=0; i<N; i++)
for(int
j=0; j<N; j++)
{
if(i>=j
&& M[i][j]==i-j+1 || i<j && M[i][j]==0);
else
return false;
}
return true;}
void
in_coda (elem *l)
{
int
n ;
elem *aux, *aux1;
if(l==0)
return ;
n=l->info;
aux=l;
while(aux->next !=
0)
aux=aux->next ;
for(int
i=0; i<n; i++)
{
aux1=new
elem;
aux1->next=0;
cout<<”inserisci
dato:”;
cin>>aux1->info ;
aux->next=aux1 ;
aux=aux1 ;
}}