Appunti sul C++

I miei appunti collezzionati durante lo studio di questo linguaggio

Booleani

Oltre ai tipi intero e a virgola mobile, introduciamo un altro tipo di dato che è il booleano (bool). Tale dato ha solo due possibili valori: vero (true) o falso (false). Dichiarare una variabile booleana si fa sempre allo stesso modo
bool variabile;
Idem per dare un valore alla variabile (in questo caso vero):
variabile = true;

Bisogna ricordare che C++ interpreta come vero qualsiasi valore diverso da 0, e come falso lo 0; per cui se scriviamo
int a = 2;
bool
b = a;

Il valore di b sarà true. Possiamo inoltre definire il valore di un booleano utilizzando un operatore relazionale, se ciò che viene scritto è vero allora la variabile avrà valore true, se è falso avrà valore false. Nell'esempio seguente il valore della variabile verita è false:
bool verita = (12 < 4);
Esercizio guidato.
Proviamo adesso a scrivere un ciclo un pò più complicatino, sfruttando anche l'if. Vogliamo un programma che ci stampi a video tutti i numeri primi fino a 200. Ricordiamo che si possono utilizzare le istruzioni annidate, quindi posso mettere un if dentro un for ecc.

Come farebbe un buon programmatore cerchiamo di analizzare il problema:

1. Dobbiamo creare un ciclo for che ci dia tutti i numeri fino al valore massimo richiesto

2. Dobbiamo creare un ciclo che verifichi che il numero attuale non sia divisibile per i precedenti (caratteristica necessaria perchè un numero sia primo)

3. Ci servono un paio di funzioni if che, nel caso in cui il numero risulti non divisibile per nessun numero precedente tranne 1 lo stampi a schermo (Un numero a non è divisibile b se il resto della loro divisione è diverso da 0, quindi tiriamo di nuovo fuori “%”).

Provate a risolvere da soli il problema: sfruttate tutto quello studiato fin ora, non sperate in una soluzione immediata, ragionateci sopra. Potete verificare che il vostro programma dia i risultati giusti confrontandolo con questa tabella.
La soluzione al "problema" è la seguente:
#include <iostream>
#include <stdlib.h>
using namespace std;

int
main()
{

for
(int num = 1; num <= 200; num++)
{


bool
primo = true;
for
(int divisore = 2; divisore < num; divisore++)
{


if
(num%divisore == 0) primo = false;
}


if
(primo) cout << num << endl;
}

cin.get();

return
0;
}
Questa volta non analizzerò il codice dividendolo ma preferirò un analisi lineare del codice, che a mio avviso può in questo caso spiegare meglio cosa accade.

C'è un ciclo for che mi crea tutti i numeri da 1 a 200.
All'interno di questo ho inizializzato una variabile primo a true: l'ho fatto fuori dal secondo ciclo for poichè in questo modo non scompaia una volta completato quest'ultimo, questa variabile inoltre viene inizializzata ad ogni ciclo, quindi anche se precedentemente (a causa di un numero non primo) era impostata su false, tornerà ad essere true.
Successivamente apro un ciclo for che ha come condizione l'elencarmi (nella variabile divisore) tutti i numeri precedenti num fino al valore 2.
All'interno del ciclo ho un if che, nel caso in cui il resto della divisione tra num e divisore sia 0 (quindi num è divisibile per divisore, ovvero per un numero precedente!) mi imposta il valore primo su false.
Infine l'ultimo if mi stampa il numero num solo se questi è primo, ovvero quando la variabile primo è vera (true).

Naturalmente questo è uno dei metodi con cui si può risolvere il problema, ce ne saranno sicuramente di migliori: se ne avete trovato qualcuno scrivetelo nei commenti, provvederò a pubblicarlo :)

Esercizi.

1. Scrivere un programma che crei un loop, ovvero un ciclo infinito, che come risultato stampa infinitamente numeri diversi sullo schermo (effetto Matrix :D)

2. Scrivere un programma che, dato un numero da tastiera, chieda all'utente (tramite un menù come quello visto precedentemente nella sezione Double e float, esercizio 3) se vuole conoscere i numeri precedenti, i successivi 20, i suoi divisori (e se non ce ne sono compaia la scritta “non ha divisori”) o il suo cubo, e agisca di conseguenza.

3. Richiamo sull'if. Scrivere un programma che legga da tastiera i coefficienti a, b e c di un polinomio del tipo e ne calcola il discriminante e a seconda dei casi informa l'utente che ci sono due radici reali distinte (quando ), due radici reali coincidenti () o nessuna radice reale (minore di 0)

4. Un pò difficile. Implementare un programma che trasformi i numeri in base 10 in numeri in base binaria. Suggerimento: http://www.itg-rondani.it/dida/Matem/ipermonica/numeri/sist_num/dauna.htm

Ti è piaciuto questo articolo? Collegati ai feed RSS per restare sempre aggiornato sugli ultimi articoli pubblicati. Se hai suggerimenti o idee lascia un commento

Stampa il post

0 commenti:

Posta un commento

Blog Widget by LinkWithin

Lettori fissi