lunedì 8 dicembre 2014

ESERCIZIO PER CASA

Esercitazione

Richiesta per Casa:

Dato il seguente programma presentato a lezione, svolgere i seguenti compiti:
  1. Creare con AlgoBuild i Diagrammi di Flusso delle singole funzioni trasformandole in main singoli
  2. Modificare il costrutto switch case con i necessari costrutti if
  3. Pubblicare sul proprio Blog Algoritmi delle Funzioni e Diagrammi di flusso
  4. Comunicare l'avvenuta pubblicazione al docente con eMail ed aggiungere il link del post
  5. Aprire un progetto in DevCpp
  6. Creare l'Header con tutti i prototipi delle funzioni separati da virgola e chiamatelo FattPotPriMenu.h
  7. Creare il File FattPotPriMenu.cpp con tutte le definizioni delle Funzioni
  8. Create un file per il main chiamato mainFattPotPriMenu.cpp includendo l'Header FattPotPriMenu.h
  9. Salvate l'intero Progetto
  10. Compilate l'intero Progetto
  11. 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;
}




Questa funzione riceve in input un numero intero e restituisce il valore TRUE o FALSE.
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.