Array in C++

Moreno Marzolla

moreno.marzolla@pd.infn.it

Copyright © 2006 Moreno Marzolla

This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 2.5 Italy License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/it/ or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Esercizio “di riscaldamento”

Chiedere all'utente un intero N>0

Se l'utente inserisce N<=0, richiederlo finché la condizione sopra non viene soddisfatta

Stampare a video un “triangolo” fatto in questo modo (es. con N=5)

*

**

***

****

*****

Soluzione

#include <iostream>

using namespace std;

int main( void )

{

int N;

int i;

int j;

// Richiesta valore di N

do {

cout << “Inserisci N >= 0” << endl;

cin >> N;

} while ( N <= 0 );

// Stampa triangolo

for ( i=0; i<N; i=i+1 ) {

// Stampa (N-i-1) spazi

for ( j=0; j<N-i-1; j=j+1 ) {

cout << ' '; // virgolette singole, no endl

}

// Stampa (i+1) asterischi

for ( j=0; j<i+1; j=j+1 ) {

cout << '*'; // virgolette singole, no endl

}

// vai a capo

cout << endl;

}

return 0;

}

Esercizio per domani

Chiedere all'utente un intero N>0

Se l'utente inserisce N<=0, richiederlo finché la condizione sopra non viene soddisfatta

Stampare a video un “albero di natale” fatto in questo modo (es. con N=5)

*

***

*****

*******

*********

Esercizio: DNA

Consideriamo un array vet[] di 10 caratteri (char)

E' necessario richiedere all'utente i valori dei 10 caratteri; tali valori devono essere tassativamente una delle lettere seguenti:

'A', 'C', 'T', 'G' (maiuscole)

Il programma deve stampare il numero di lettere 'A', 'C', 'T', 'G', presenti nell'array

Il programma deve utilizzare due fasi separate per la lettura dei caratteri e la conta degli stessi.

Soluzione

#include <iostream>

using namespace std;

int main( void )

{

char vet[10];

int i;

char c;

int contaA = 0, contaC = 0, contaG = 0, contaT = 0;

// Lettura dei caratteri in input

for ( i=0; i<10; i = i+1 ) {

do {

cout << “Inserire elemento i=” << i << endl;

cin >> c;

} while ( c != 'A' && c != 'C' && c != 'T' && c != 'G' );

vet[i] = c;

}

// Conta dei caratteri

for ( i=0; i<10; i = i+1 ) {

if ( vet[i] == 'A' ) contaA = contaA+1;

if ( vet[i] == 'C' ) contaC = contaC+1;

if ( vet[i] == 'T' ) contaT = contaT+1;

if ( vet[i] == 'G' ) contaG = contaG+1;

}

// Stampa risultati

cout << “Num caratteri A=” << contaA << endl;

cout << “Num caratteri C=” << contaC << endl;

cout << “Num caratteri T=” << contaT << endl;

cout << “Num caratteri G=” << contaG << endl;

return 0;

}

Esercizio 2: Prima occorrenza

Riconsiderare l'esercizio precedente; inizializzare l'array vet[] allo stesso modo

Questa volta vogliamo stampare la posizione della prima occorrenza della lettera 'A'

Cioè, l'indice i del primo elemento vet[i] tale che vet[i] == 'A'

Se non esiste un tale elemento, cioè se tutti gli elementi di vet[] sono diversi da 'A', allora il programma deve stampare -1;

Soluzione 1

#include <iostream>

using namespace std;

int main( void )

{

char vet[10];

int i;

char c;

int primo = -1;

// Lettura dei caratteri in input

for ( i=0; i<10; i++ ) {

do {

cout << “Inserire elemento i=” << i << endl;

cin >> c;

} while ( c != 'A' && c != 'C' && c != 'T' && c != 'G' );

vet[i] = c;

}

// Trova la prima occorrenza del carattere 'A'

i=0;

while ( i<10 && primo == -1 ) {

if ( vet[i] == 'A' )

primo = i;

i = i+1;

}

// Stampa risultato

cout << “Prima occorrenza in posizione ” << primo << endl;

return 0;

}

Soluzione 2

#include <iostream>

using namespace std;

int main( void )

{

char vet[10];

int i;

char c;

int primo = -1;

// Lettura dei caratteri in input

for ( i=0; i<10; i++ ) {

do {

cout << “Inserire elemento i=” << i << endl;

cin >> c;

} while ( c != 'A' && c != 'C' && c != 'T' && c != 'G' );

vet[i] = c;

}

// Trova la prima occorrenza del carattere 'A'

for ( i=0; i<10 && primo == -1; i = i+1 ) {

if ( vet[i] == 'A' )

primo = i;

}

// Stampa risultato

cout << “Prima occorrenza in posizione ” << primo << endl;

return 0;

}

Soluzione 3

#include <iostream>

using namespace std;

int main( void )

{

char vet[10];

int i;

char c;

int primo = -1;

// Lettura dei caratteri in input

for ( i=0; i<10; i++ ) {

do {

cout << “Inserire elemento i=” << i << endl;

cin >> c;

} while ( c != 'A' && c != 'C' && c != 'T' && c != 'G' );

vet[i] = c;

}

// Trova la prima occorrenza del carattere 'A'

for ( i=0; i<10; i = i+1 ) {

if ( vet[i] == 'A' && primo == -1 )

primo = i;

}

// Stampa risultato

cout << “Prima occorrenza in posizione ” << primo << endl;

return 0;

}

Esercizi per domani

Definire un array vet[10] di 10 interi

Inizializzare tutti gli elementi di vet[] con un intero >=0;

se l'utente inserisce un intero negativo, richiederlo finché la condizione precedente non è soddisfatta

Stampare, una sotto l'altra, una fila di barre di asterischi, tali che la lunghezza della barra i-esima sia uguale al valore di vet[i]

Esercizio per domani / Esempio

Ad esempio, se
vet == { 1, 3, 2, 4, 4, 1, 0, 1, 8, 5 }

Il programma stamperà

*

***

**

****

****

*

*

********

*****

Esercizio per domani
(un po' piu' difficile)

Definire un vettore vet[10] di 10 interi; inizializzare questo array in modo qualsiasi

Invertire il vettore vet[]; in altre parole, occorre scambiare il valore del primo elemento di vet[] con l'ultimo elemento, il secondo con il penultimo e così via

Stampare i valori del vettore vet[] invertito

Moreno Mazolla

2005-09-25T15:46:34