Richiesta per Casa:
Dato il seguente programma presentato a lezione, svolgere i seguenti compiti:
Questa funzione riceve in input un numero intero e restituisce il valore TRUE o FALSE.
TRUE=1 e FALSE=0.
- Creare con AlgoBuild i Diagrammi di Flusso delle singole funzioni trasformandole in main singoli
- Modificare il costrutto switch case con i necessari costrutti if
- Pubblicare sul proprio Blog Algoritmi delle Funzioni e Diagrammi di flusso
- Comunicare l'avvenuta pubblicazione al docente con eMail ed aggiungere il link del post
- Aprire un progetto in DevCpp
- Creare l'Header con tutti i prototipi delle funzioni separati da virgola e chiamatelo FattPotPriMenu.h
- Creare il File FattPotPriMenu.cpp con tutte le definizioni delle Funzioni
- Create un file per il main chiamato mainFattPotPriMenu.cpp includendo l'Header FattPotPriMenu.h
- Salvate l'intero Progetto
- Compilate l'intero Progetto
- Acquisire le schermate DOS del Menu e dei risultati delle singole chiamate e pubblicatele sul Blog e ripetete il punto 4)
Presenta ciclicamente un menù, fino a quando non si digita x, per scegliere
una delle seguenti opzioni:
a) Fattoriale di un numero
(<=12)
b) Numeri primi fino a N
c) Potenza N-esima (N>=0
intero) di un numero reale A (!=0)
x) Fine
Vediamo ora il Codice su cui lavorare:
Inziamo ora a scomporre il programma in sottoprogrammi e rappresentando le singole funzioni con il diagramma di flusso fatto con Algobuild:
FUNZIONE MENU:
char menu()
{char s; do {system ("cls"); cout<<"\n MENU\n"<<endl; cout<<" a) Fattoriale di un numero (<=12)"<<endl; cout<<" b) Numeri primi fino a N"<<endl; cout<<" c) Potenza N-esima (N>=0 intero) di un numero reale A (!=0)"<<endl; cout<<" x) Fine"<<endl; cout<<"\nScegli: "; cin>>s; }while (s!='a' && s!='b' && s!='c' && s!='x'); return s; }
Questa funzione restituisce un carattere A o B o C o X.
FUNZIONE FATTORIALE:
unsigned int Fattoriale(int N)
{ unsigned int F = 1;
for (int i = 2; i <= N; i++)
F = F * i;
return F;
}
Questa funzione riceve in ingresso un numero intero e restituisce un numero intero senza segno.
FUNZIONE NUMERI PRIMI FINO A N:
void NumeriPrimi(int N)
{
for (int i = 2; i <= N; i++)
if (ControlloNumeroPrimo(i)==true) // richiama la funzione ControlloNumeroPrimo
cout << i << "; ";
cout << endl;
return;
}
Questa funzione riceve in input un numero intero e non restituisce nulla. Al suo interno viene effettuata una chiamata alla funzione ControlloNumeroPrimo.
FUNZIONE CONTROLLONUMEROPRIMO:
bool ControlloNumeroPrimo(int N)
{// Controllo se il numero e' minore o uguale a 1:
// numero non primo, uscita immediata e restituisce false.
if (N <= 1) return false;
// Sfrutta direttamente la definizione di numero primo:
// provo a dividere N per tutti i numeri da 2 a N/2;
// se almeno una divisione ha resto nullo (divisibilità)
// allora il numero NON E' PRIMO, uscita immediata e restituisce FALSE.
// se nessuna divisione ha resto nullo allora il numero E' PRIMO e restituisce TRUE.
for (int i = 2; i <= N/2; i++)
if (N % i == 0) return false;
return true;
}
TRUE=1 e FALSE=0.
FUNZIONE POTENZA:
float Potenza(float base, int esponente)
{ // Funzione che calcola base elevata a esponente
float Pot = 1; // Inizializza la variabile accumulatore
for(int i = 1; i <=esponente; i++)
Pot = Pot * base;
return Pot;
}
Questa Funzione riceve in input un numero con la virgola di tipo float per la base e un numero intero per l'esponente e restituisce un numero con la virgola di tipo float.
Infine ecco le immagini catturate di ciò che farà il programma:
Menu:
Programma per il calcolo del Fattoriale:
Programma che visualizza i numeri primi fino al numero scelto:
Programma che calcola la potenza N-esima di un numero reale:
Uscita premendo la X:
Fine esercizio.