ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 27/9/2001 - C++

 

1.   Dato un file di testo parole.txt si scriva una funzione scrivi_random() che costruisce il file recipiente.txt secondo il seguente criterio:

a.      si legge una parola dal file parole.txt

b.     si calcola la lunghezza n della parola letta;

c.      si scrive questa parola in recipiente.txt;

d.     si leggono n parole dal file parole.txt senza scriverle in recipiente.txt

e.      si riparte dal punto a. fino alla fine del file.


     


2.    Si scriva una funzione ok=verifica_formato(M) che riceve in ingresso una matrice M a valori interi.         La funzione verifica che M abbia il formato illustrato in figura e restituisce T in caso affermativo, restituisce F altrimenti.            

 


3.  Sia data una lista circolare semplice a valori interi l ordinata in senso decrescente.    Si scriva una funzione inserisci (l) che legge da tastiera un valore intero e, se non esiste alcun elemento in l con campo informativo uguale a n, inserisce un nuovo elemento nella lista l con campo informativo uguale a n mantenendo l’ordinamento. Altrimenti non modifica la lista e stampa sul monitor un messaggio congruente.            

4.  Dati i numeri decimali A=65, B=-102 e C=109, 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 dica se il risultato ottenuto è o no significativo.

 

 

 

10

10

10

3

 

#include <fstream.h>

#include <string.h>

 

void scrivi_random ()

{

char *s1; *s2;

fstream f,g;

int salti;

 

f.open(“parole.txt”, ios::in);

g.open(“recipiente.txt”, ios::out);

 

while(f>>s1)

{

salti=strlen(s1);

g<<s1;

while(salti>0)

{

salti--;

if(f>>s1);

else return;

}

}

f.close();

g.close();

}

 

 

2.

enum bool{F;T};

const nit N=12;

 

bool verifica_formato(int M[N][N])

{

for(int i=0; i<N; i++)

     for(int j=0; j<N; j++)

     {

            if ((A[i][j]==0) &&(j>i));

            else      if (A[i][j]== i-j+1);

                        else return F;

     }

return T;

}

 

 


3.

#include <iostream.h>

 

struct elem {     int info;

                        elem* next;

                        }

 

void inserisci( elem*& l)

{

int val;

elem* aux, *aux1, *aux3;

 

cout<<”inserisci un valore\n”;

cin>>val;

 //caso lista vuota

if(l==0)  {           aux2=new elem;

                        aux2->info = val;

                        l=aux2 ;

                        aux2->next =l ;

                        return; }

//inserimento in testa

if (l->info<val)

{    for(aux3=l; (aux3->next!=l); aux3=aux3->next) ;

     aux2=new elem;

     aux2->info = val;

     aux2->next =l ;

     l=aux2,

     aux3->next=l ;

}

 

//caso generale

aux1=l ;

for(aux3=l->next; (aux3!=l)&&(aux3->info>val); aux3=aux3->next)

     aux1=aux3;

if (aux3->info != val)  //se si deve inserire

{    aux2=new elem;

     aux2->info=val;

     aux1->next=aux2;

}

else

cout<<”elemento già presente!!!\n”;

}