Novità
Home / Informatica / Assaggi di coding {art 2} : Risoluzione di equazioni di secondo grado Completa di casi speciali.

Assaggi di coding {art 2} : Risoluzione di equazioni di secondo grado Completa di casi speciali.

Il programma di oggi serve a risolvere le equazioni di secondo grado. Ecco la definizione di risolvere un equazione:

In matematica, per risolvere un’equazione si intende la ricerca degli elementi  che soddisfino la rispettiva equazione. Una soluzione dell’equazione è un’assegnazione di espressioni alle incognite che soddisfi l’equazione, in altre parole, quando questi risultati vengono sostituiti alle incognite, l’equazione diventa una tautologia (un’affermazione vera per definizione).

[fonte wikipedia se vuoi saperne di più cliccami]

Il programma che vado ad esaminare serve a trovare le soluzioni di un eq. di 2° grado.

Quando ho progettato lo script ho preferito una codifica che permetta di risolvere più equazioni una dopo l’altra, per far ciò  ho “scompattato” il problema in un main e varie funzioni ad esso correlate./*L’algoritmo l’ho trascritto solo in C++  */

Andiamo a vedere le librerie che ho utilizzato nel programma:

equaz1

come potete vedere per questo programma non è necessaria nessuna libreria in particolare conio.h serve per customizzare l’output mentre windows.h  serve per utilizzare comandi come sleep(x) che arrestano l’esecuzione dello script per un tot x di millisecondi.

eq2

 

Qui sopra abbiamo l’elenco di tutte le funzioni utilizzate nel programma (le dichiariamo in anticipo per poterle inserire nello script anche se non sono state ancora implementate).

Le variabili scelta, criterio e sscelta le creiamo fuori dal main in modo che abbiano visibilità globale(ciò comporta che possono essere modificate in qualsiasi funzione dichiarata nel programma cosa che può ritornare molto utile per usare meno memoria possibile).

Ora diamo invece un occhiata al nostro main che serve a gestire tutte le varie funzioni.

eq3

 

Come si può notare dall’immagine la struttura del main è relativamente semplice: consiste infatti in una fase dichiarativa dove inizializziamo le varie variabili e queste vengono modificate nel ciclo do{}-while finché la variabile criterio ha valore true. Questo ciclo serve sia per interagire con l’utente sia per gestire le sue richieste: la richiesta viene depositata nella variabile scelta(la stessa che abbiamo dichiarato prima)  utilizzando un costrutto switch(scelta)  che funziona esattamente come una serie di if -else if- ed un else.Ma vediamo le cose con calma in primis sveliamo cosa fa la funzione mostraMenu().

 

eq4

La funzione mostraMenu() come si può intuire dal nome mostra un menu creato da una serie di cout<< che equivalgono ai  printf () del C. Subito dopo settiamo la variabile scelta con un nuovo valore che ritorniamo al main e che va ad essere processato nello switch.

eq5

Ora siamo ritornati nel costrutto switch(). Quest’ultimo controlla il valore della variabile selezionata utilizzando una sequenza di case a cui seguono i valori che si vogliono controllare, ogni gruppo di istruzione e seguito da un break altrimenti il programma non si fermerebbe. Se nessuno dei casi individuati dai case  corrisponde si attivano le istruzioni che seguono default.

In questo caso se il valore di scelta è uguale a:

  1. Il programma richiama la funzione leggiCoeff()  che va a settare le variabili che simulano i coefficienti di una vera equazione di 2° grado.
  2. Il programma va a calcolare il determinante dell’equazione con la funzione calcolaDet()
  3. Il programma trova le soluzioni richiamando la  funzione calcoSol()
  4. Resetta tutti i valori precedentemente trovati/calcolati per poter ricevere una nuova equazione in ingresso
  5. La variabile criterio, responsabile dell’iterazione del ciclo, viene settata col valore che la funzione exit() ritorna(se riguardate le dichiarazioni infatti exit() restituisce un valore booleano)

Visto come lavora il main ora dobbiamo analizzare le singole funzioni :

Visto che abbiamo già controllato mostraMenu()  andiamo subito ad analizzare la prossima che è leggiCoeff() (La risoluzione dell’equazione è svolta nelle prime tre funzioni mentre nuovaEq() serve per resettare i valori e l’ultima ci permette di chiudere il programma).

eq6

 

La funzione prende in ingresso tre puntatori che permettono di settare le variabili senza usare return in quanto puntano l’indirizzo di memoria e non ricopiano i valori i nuove variabili

//per maggiori informazioni sui puntatori cliccami

Dopo controlliamo che l’utente non li abbia settati pari a zero o almeno che non l’abbia fatto per errore.I system(color codice ) servono per cambiare il colore sulla console che ci fa da interfaccia grafica. La funzione è ricorsiva infatti se l’utente ha inserito per sbaglio tutti i coefficienti pari a zero può reinserirli richiamando la funzione.

eq7 Ora abbiamo invece la funzione calcolaDet() che ritorna il  Δ/4 se è pari altrimenti ritorna il  Δ classico. Dopo aver calcolato il Δ cerchiamo le soluzioni. Lo schema logico di calcoSol()  è il seguente:

eq8

Possiamo quindi avere così una visuale d’insieme delle condizioni principali:

  1. Se le due soluzioni sono diverse da 0 significa che l’utente ha sottoposto volte la stessa equazione senza pulire i dati quindi le soluzioni sono le stesse.
  2. Altrimenti:
    1. If (a==0)

      If (a==0)

      eq9
    2. Else If (b==0)

      Else If (b==0)

      eq10
    3. Else If(c==0)

      Else If(c==0)

      eq11
    4. Else If(*det > 0)

      Else If(*det > 0)

      eq12
    5. Else if(*det==0)

      Else if(*det==0)

      eq13part1eq13part2
    6. Else if(*det<0)

      Else if(*det<0)

      eq14
    7. Else{

      Else{

      eq15

La funzione calcoSol() ha molti output sia per poter facilitare la sua riscrittura mentre vi lavoravo sia per spiegare all’utente tutti i passaggi che il computer compie aiutandolo anche a ripassare l’argomento. Volendo il programma potrebbe anche finire qui infatti lo scopo dello stesso è stato raggiunto le soluzioni dell’equazione le abbiamo. Però aver fatto tutta questa fatica per progettare l’algoritmo e ottenere un solo risultato alla volta è frustrante. Per poter riutilizzare le funzioni già scritte e quindi calcolare il risultato di un altra equazione basta annullare tutti i valori che abbiamo ottenuto e reinserire i dati per poi ottenere il risultato. La funzione che “pulisce” le variabili è nuovaEq():eq16

Come funziona:

Effettuiamo prima un controllo per rettificare se l’utente voglia realmente caricare una nuova equazione se il controllo passa allora si avvia un count-down formato da un ciclo for che iteraper cinque volte l’istruzione sleep(). Fatto ciò segue l’annullamento di tutti i valori calcolati/inseriti settandoli a zero. Se la scelta risulta negativa allora viene invocata la funzione di exit(). Infine se l’output non corrisponde ai casi sopracitati viene reinserito il valore richiamando la funzione.

L’ultima parte del programma consiste nella funzione che permette l’uscita dal programma stesso.

eq17

Ovviamente come qualsiasi funzione di uscita che si rispetti chiede la conferma prima di agire se viene concessa ritorna il valore false  altrimenti true (Questi valori ci permettono di uscire dal ciclo do-while()).

Per provare l’articolo online Push

Per scaricare Il programma(in formato .cpp) clicca QUI!

Per votare il prossimo articolo cliccami

/*Ricordatevi che se volete tutte le funzionalità del programma come illustrato dovete scaricarlo mentre sull’ide potete provare il funzionamento dell’algoritmo nudo e crudo (L’ide non accetta le librerie conio.h e windows.h)*/

L’articolo finisce qui se vi sono errori di battitura/volete consigli/ o volete proporre programmi da veder postati sulla piattaforma contattatemi sul mio account facebook  Here

Cool video here to put out the stress