Idem per dare un valore alla variabile (in questo caso vero):bool variabile;
Bisogna ricordare che C++ interpreta come vero qualsiasi valore diverso da 0, e come falso lo 0; per cui se scriviamovariabile = true;
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:
Esercizio guidato.bool verita = (12 < 4);
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 richiesto2.
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:
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.#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;
}
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.htmTi è piaciuto questo articolo? Collegati ai feed RSS per restare sempre aggiornato sugli ultimi articoli pubblicati. Se hai suggerimenti o idee lascia un commento
0 commenti:
Posta un commento