ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 31/5/2001 - C++
1. Sia dato un file chiamato f1.dat composto da due colonne di numeri interi. Si scriva una funzione seleziona() che calcola la media aritmetica m degli elementi della prima colonna e quindi costruisce un nuovo file chiamato f2.dat composto dalle sole righe di f1.dat aventi il valore della prima colonna minore di m.
2. Sia data una lista circolare semplice lc i cui elementi sono stringhe lunghe al più 20 caratteri. Gli elementi della lista sono ordinati alfabeticamente in senso crescente. Si scriva una finzione elimina(s, lc) che riceve in ingresso una stringa s (di al più 20 caratteri) e il puntatore alla lista lc e cerca nella lista l’elemento con campo informativo uguale a s. Se lo trova, modifica la lista circolare deallocando tutti gli elementi che lo seguono fino alla testa della lista.
n n-1 n-2
……… 3 2 1 n-1 n-2 n-3 ……. 2 1 1 n-2 n-3 n-4 …….. 1 2 2 n-3 n-4 n-5 ….. 1 3 3 3 : : : : : : 3 2 1 2 1 n-2 ……. n-2 n-2 n-2 1 n-1 n-1 ……. n-1 n-1 n-1
3. Si
scriva una funzione matrice(M)
che costruisce una matrice M
di dimensione nxn
a valori interi secondo lo schema illustrato in figura.
4.
Dati i numeri decimali A=64, B=-51 e C=71, 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 dica se il
risultato ottenuto è o no significativo.
10 |
10 |
10 |
3 |
1.
#include <fstream.h>
void
seleziona () {
int
m, primo, secondo;
int somma=0;
int cont=0
fstream s, z;
s.open(f1.dat, ios::in);
while
(s>>primo>>secondo)
{
cont++;
somma+=
primo;
}
if
(cnt>0)
m=somma/(cont-1);
s.close();
s.open(f1.dat,
ios::in);
z.open(f2.dat,
ios::out);
while
(s>>primo>>secondo)
{
if(primo<m)
z<<primo<<”\t”<<secondo<<”\n”;
}
z.close();
s.close();
}
2.
#include <string.h>
struct elem {
char nome[21];
elem* next;
}
void elimina (char s[21], elem*& lc)
{
elem *l;
elem *aux;
if (lc==0) return;
l=lc;
// int strcmp (string str1, string str2)
//Returns
< 0 if str1 is less
than str2; > 0 if str1
is greater than str2,
and 0 if they are equal.
while (strcmp(s, l->nome)<0 &&
l->next !=lc)
{
l=l->next;
}
if ((l->next==lc) || strcmp(s,
l->nome)>0)
{
cout<<”nessun
elemento da eliminare\n”;
return;
}
while (l->next != lc)
{
aux =l->next;
l->next = aux->next;
delete aux;
}
}
3.
const int n=8;
void matrice (int M[n][n])
{
for (int i=0; i<n; i++)
for
(int j=0; j<n; j++)
if
(i<=n-j-1) M[i][j] = n-j-i;
else
M[I][j] = i;
}