PROGRAMMAZIONE AD OGGETTI 2001-2002

6-12-2001 (ESERCITAZIONE)

 

Numero esercizio

Descrizione
ESERCIZIO 1
stampa l'indirizzo di una variabile intera e di una double in esadecimale
ESERCIZIO 2
esercizio inerente ai puntatori a double
ESERCIZIO 3
 calcola la media dei voti con l'utilizzo di vettori
ESERCIZIO 4
implementa una rubrica creando un vettore di puntatori a stringhe
ESERCIZIO 5 Calcola la distanza tra due punti consecutivi

 

ESERCIZIO 1

// Gli indirizzi di memoria vengono rappresentati attraverso una  codifica del tipo 0x(numero esadecimale).

// Il numero esadecimale visualizzato, dipende dal compilato e dalla memoria della macchina

     
 

#include <iostream.h>

void main ()

{

 
 

int n=19;

int *p_a=&n;

double x=2.14;

cout << &n << endl;

cout << &x << endl;

cout << *p_a << endl;

cout << p_a << endl;

 
  }  
   

Home


 

ESERCIZIO 2

     
 

#include <iostream.h>

void main ()

{

 
 

int n=19;

int *p_a=&n;

double x=2.14;

cout << &n << endl;

cout << &x << endl;

cout << *p_a << endl;

cout << p_a << endl;

 
  }  
   

 

Home


 

ESERCIZIO 3

Le funzioni possono passare argomenti: per valore, per indirizzo, per riferimento. Il primo di essi inizializza la variabile locale alla funzione chiamata, con il valore della variabile della funzione chiamante; si tratta in definitiva di una copia. Un array potrebbe anche essere molto grande, in termini di memoria occupata, e farne una copia ogni volta che una funzione viene chiamata potrebbe essere un'operazione del tutto inefficiente. Per questo motivo, il C++ consente per il passaggio di array un solo metodo: per indirizzo. La sintassi è molto semplice, in quanto rispecchia quella del passaggio per valore delle variabili.

 

Il programma contiene esempi di passaggio per indirizzo di vettori e l'istruzione per creare un vettore dinamicamente:

     
 

double *array;

array= new double[n];

 
     

 

In questo modo si dichiara un puntatore ad un tipo double e successivamente si riserva lo spazio per un vettore di "n" elemanti.

Il resto del programma è banale.

     
 

#include <iostream.h>

double *crea_vettore(int nelem) {

int n=1;

double *array;

if(nelem>=1) n=nelem;

array=new double[n];

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

array[i]=0;

return array;

}

 

double media_vettore(double *array, int nelem) {

double somma = 0;

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

somma+= array[i];

return somma/(double) nelem;

}

 

void stampa_vettore(double *array, int n, int ncolonne) {

int nc=0;

if(ncolonne==0) nc=n+1;

else nc=ncolonne;

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

if(i%nc==nc-1)

cout << array[i] << endl;

else cout << array[i] << "\t";

cout << endl;

}

 

void input_vettore(double *array, int n) {

for(int i=0; i<n; i++) {

cout << "elemento " << i << " : "; cin >> array[i];

}

}

 

void main () {

int nesami;

double *voti;

cout << "dammi il numero di termini: ";

cin >> nesami;

voti=crea_vettore(nesami);

stampa_vettore(voti, nesami, 2);

input_vettore(voti, nesami);

stampa_vettore(voti, nesami, 2);

cout << "la media e': " << media_vettore(voti, nesami) << endl;

}

 
     

 

Home


 

ESERCIZIO 4

Trattare stringhe nella stesso modo come si tratta per esempio un vettore di interi non è possibile. Infatti la stringa è di per sé un vettore. Ecco per generare un vettore di stringhe è necessario procedere all'allocazione di un vettore di puntatori a stringa, e successivamente per ciascun puntatore allocare la memoria sufficiente ad immagazzinare la stringa.

#include <iostream.h>

char **crea_vettores(int nelem) {

int n=1;

char **array;

if(nelem>=1) n=nelem;

array=new char *[n];

return array;

}

 

void stampa_vettores(char *array[], int n) {

for(int i=0; i<n; i++) cout << array[i] << endl;

}

 

void input_vettores(char *array[], int n) {

char riga[80];

for(int i=0; i<n; i++) {

cout << "elemento " << i << " : ";

cin >> riga;

int len=strlen(riga);

array[i]=new char[len+1];

strcpy(array[i], riga);

}

}

 

void main () {

int nragazze;

char **nomi; cout << "dammi il numero di ragazze: ";

cin >> nragazze;

nomi=crea_vettores(nragazze);

input_vettores(nomi, nragazze);

stampa_vettores(nomi, nragazze);

}

 

     

 

Home


ESERCIZIO 5

 

Il programma legge in input una serie di punti geometrici con rispettive coordinate ed etichetta; il numero di punti non è noto a priori nemmeno la lunghezza delle etichette. In output è fornita la distanza tra un punto ed il suo successivo (o precedente).

Realizzato da noi, è costituito da una struttura dati ad allocazione dinamica (pila) attraverso strutture e puntatori a strutture.

     
 

#include <iostream.h>
#include <math.h>

struct punto
{

double x,y;
char *nome;
punto *next;

};

punto *elem=0;

void crea_list(double x, double y, char *buffer)
{

punto *lptr, *lptr2;
lptr=new punto;
lptr2=elem;
elem=lptr;

elem->x=x;
elem->y=y;

int len=strlen(buffer);

elem->nome=new char[len+1];
strcpy(elem->nome,buffer);

elem->next=lptr2;

}


void main ()
{

char ch;
char buffer[128];
double x, y, dist;

do
{

cout << "inserisci la coordinata x: ";
cin >> x;

cout << "inserisci la coordinata y: ";
cin >>y;

cout << "inserisci l'etichetta: ";
cin >> buffer;

crea_list(x,y,buffer);

cout << "preme esc per uscire";
cin >> ch;

}
while(ch!='x');

while(elem->next!=0)
{

dist=sqrt(((elem->x - elem->next->x)*(elem->x - elem->next->x))+((elem->y - elem->next->y)*(elem->y - elem->next->y)));
cout << dist << endl;
elem=elem->next;

}

}

 
     

 

Home