RISOLUZIONE DI EQUAZIONI EQUAZIONI DI I E II GRADO ALGORITMI RISOLUTIVI ED IMPLEMENTAZIONE IN LINGUAGGIO PASCAL Inizio DESCRIZIONE DEL PROGRAMMA Cancella lo schermo EQUAZIONI DI I GRADO Stampa versione ed istruzioni Fare clic sulla parte di algoritmo per visualizzarne il corrispondente codice Acquisisce termini equazione NO x = - b/a SI a=0 SI b=0 NO Stampa risultati visualizza disequazioni Stampa equazione impossibile Fine Stampa equazione indeterminata Nella codifica in liguaggio "Pascal" (LISTATO N 1) utilizziamo stringhe costanti allo scopo di condensare tutta la messagistica nella "testata" del programma: questa metodologia, norma di buona programmazione, consente una più semplice modifca del codice separando la parte testuale relativa all'ingresso/uscita a video da quella più propriamente algoritmica, ove viene "risolto" il problema. La prima operazione eseguita dal programma é la cancellazione dello schermo : nel linguaggio Pascal non essendo definita una istruzione specifica, si é pensato di realizzare la cancellazione da programma, al fine di non introdurre in questa fase propedeutica deviazioni dallo standard del linguaggio che possano risultare fuorvianti per l'allievo; la cancellazione dello schermo viene realizzata tramite un ciclo che stampa una serie di righe vuote per tutta la lunghezza dello schermo codificata nella costante SCRLEN. Successivamente viene stampato il numero di versione e le istruzioni del programma che si configura per ricevere i dati di ingresso dall'utente. E' possibile introdurre qualsiasi valore reale per i coefficienti dell'equazione, ivi inclusi quelli che rendono impossibile o indeterminata l'equazione. Il calcolo della soluzione si riassume nell'assegnazione X := -B/A che viene eseguita condizionalmente, se non sono stati introdotti termini nulli nei coefficienti, diversamene viene stampato un messaggio di equazione impossibile o indeterminata. L'ultima serie di istruzioni visualizza i risultati dell'equazione e traccia i diagrammi delle disequazioni associate utilizzando i caratteri stampabili a video codificati nelle costanti UNKNOWN e DASHLINE. I risultati numerici vengono visualizzati nella precisione specificata tramite la costante DIGITS. LISTATO N 1 PARTE I PROGRAM EQNE1(INPUT, OUTPUT); CONST VERSION1='Risoluzione equazioni e disequazioni di 1o grado'; DESCR1='Questo programma risolve equazioni di primo grado'; DESCR2='nella forma:'; DESCR3=' ax + b = 0'; DESCR4=''; DESCR5='e le disequazioni:'; DESCR6=' ax + b > 0'; DESCR7=' ax + b <= 0'; QUESTION1='Inserire il coefficiente della x:'; QUESTION2='Inserire il valore del termine noto:'; ANSWER1='La soluzione della equazione Ë:'; ANSWER2='Le soluzioni delle disequazioni sono:'; ANSWER3=' intervallo aperto a sx'; ANSWER4=' intervallo semi-aperto a dx'; SCRLEN = 24; (* Lunghezza dell'area stampabile in righe *) DIGITS = 4; (* Numero di cifre significative da stampare *) (* Simboli vari stampabili a video *) UNKNOWN= 'x'; STAR='*'; DASHLINE='-----'; BLANKLINE=' '; LISTATO N 1 PARTE II VAR I: A: B: X: INTEGER; (* Variabile indice usata nei loop *) REAL; (* Coefficiente incognita *) REAL; (* Termine noto *) REAL; (* Soluzione equazione *) BEGIN (* Prima pulisce lo schermo stampando una serie di linee *) (* vuote per la dimensione dell'area stampabile. *) FOR I:=1 TO SCRLEN DO WRITELN; (* Stampa numeri di versione ed istruzioni per l'uso *) WRITELN(VERSION1); WRITELN(VERSION2); WRITELN(DESCR1); WRITELN(DESCR2); WRITELN(DESCR3); WRITELN(DESCR4); WRITELN(DESCR5); WRITELN(DESCR6); WRITELN(DESCR7); LISTATO N 1 PARTE II VAR I: A: B: X: INTEGER; (* Variabile indice usata nei loop *) REAL; (* Coefficiente incognita *) REAL; (* Termine noto *) REAL; (* Soluzione equazione *) BEGIN (* Prima pulisce lo schermo stampando una serie di linee *) (* vuote per la dimensione dell'area stampabile. *) FOR I:=1 TO SCRLEN DO WRITELN; (* Stampa numeri di versione ed istruzioni per l'uso *) WRITELN(VERSION1); WRITELN(VERSION2); WRITELN(DESCR1); WRITELN(DESCR2); WRITELN(DESCR3); WRITELN(DESCR4); WRITELN(DESCR5); WRITELN(DESCR6); WRITELN(DESCR7); LISTATO N 1 PARTE II VAR I: A: B: X: INTEGER; (* Variabile indice usata nei loop *) REAL; (* Coefficiente incognita *) REAL; (* Termine noto *) REAL; (* Soluzione equazione *) BEGIN (* Prima pulisce lo schermo stampando una serie di linee *) (* vuote per la dimensione dell'area stampabile. *) FOR I:=1 TO SCRLEN DO WRITELN; (* Stampa numeri di versione ed istruzioni per l'uso *) WRITELN(VERSION1); WRITELN(VERSION2); WRITELN(DESCR1); WRITELN(DESCR2); WRITELN(DESCR3); WRITELN(DESCR4); WRITELN(DESCR5); WRITELN(DESCR6); WRITELN(DESCR7); LISTATO N 1 PARTE III (* Acquisisce i termini dell'eqne *) WRITELN; WRITE(QUESTION1); READ(A); WRITE(QUESTION2); READ(B); (* Calcola la soluzione dell'equazione *) X := -B/A; (* Stampa dei risultati *) WRITELN(ANSWER1); (* Risultato equazione *) WRITE(UNKNOWN,' = -b/a = ',X:DIGITS); WRITELN; WRITELN(ANSWER2); (* Prima disequazione *) WRITE(UNKNOWN,' > -b/a = ',X:DIGITS,' <',DASHLINE,UNKNOWN,')'); WRITELN(ANSWER3); (* Seconda disequazione *) WRITE(UNKNOWN,' <= -b/a = ',X:DIGITS,' [',UNKNOWN,DASHLINE,'>'); WRITELN(ANSWER4); END. LISTATO N 1 PARTE III (* Acquisisce i termini dell'eqne *) WRITELN; WRITE(QUESTION1); READ(A); WRITE(QUESTION2); READ(B); (* Calcola la soluzione dell'equazione *) X := -B/A; (* Stampa dei risultati *) WRITELN(ANSWER1); (* Risultato equazione *) WRITE(UNKNOWN,' = -b/a = ',X:DIGITS); WRITELN; WRITELN(ANSWER2); (* Prima disequazione *) WRITE(UNKNOWN,' > -b/a = ',X:DIGITS,' <',DASHLINE,UNKNOWN,')'); WRITELN(ANSWER3); (* Seconda disequazione *) WRITE(UNKNOWN,' <= -b/a = ',X:DIGITS,' [',UNKNOWN,DASHLINE,'>'); WRITELN(ANSWER4); END. ESEMPI DI ESECUZIONE ESEMPIO N.1 Risoluzione equazioni e disequazioni di 1o grado Questo programma risolve equazioni di primo grado nella forma: ax + b = 0 e le disequazioni: ax + b > 0 ax + b <= 0 Inserire il coefficiente della x:5 Inserire il valore del termine noto:15 La soluzione della equazione fi: x = -b/a = -3.0E+000 Le soluzioni delle disequazioni sono: x > -b/a = -3.0E+000 <-----x) intervallo aperto a sx x <= -b/a = -3.0E+000 [x-----> intervallo semi-aperto a dx ESEMPI DI ESECUZIONE ESEMPIO N.2 Risoluzione equazioni e disequazioni di 1o grado Questo programma risolve equazioni di primo grado nella forma: ax + b = 0 e le disequazioni: ax + b > 0 ax + b <= 0 Inserire il coefficiente della x:5 Inserire il valore del termine noto:0 La soluzione della equazione fi: x = -b/a = -0.0E+000 Le soluzioni delle disequazioni sono: x > -b/a = -0.0E+000 <-----x) intervallo aperto a sx x <= -b/a = -0.0E+000 [x-----> intervallo semi-aperto a dx ESEMPI DI ESECUZIONE ESEMPIO N.3 Risoluzione equazioni e disequazioni di 1o grado Questo programma risolve equazioni di primo grado nella forma: ax + b = 0 e le disequazioni: ax + b > 0 ax + b <= 0 Inserire il coefficiente della x:1.5 Inserire il valore del termine noto:-6 La soluzione della equazione fi: x = -b/a = 4.0E+000 Le soluzioni delle disequazioni sono: x > -b/a = 4.0E+000 <-----x) intervallo aperto a sx x <= -b/a = 4.0E+000 [x-----> intervallo semi-aperto a dx DESCRIZIONE DEL PROGRAMMA EQUAZIONI DI II GRADO L'algoritmo indicato determina le incognite per le equazioni di secondo grado utilizzando la formula risolutiva in forma chiusa basata sull'analisi del discriminante. Fare clic sulla parte di algoritmo per visualizzarne il corrispondente codice La strutturazione del programma (LISTATO N 2) segue le linee guida già indicate nel caso delle equazioni di primo grado, con una parte iniziale costituita da stringhe costanti, e una stampa di messaggio di chiusura; il calcolo delle soluzioni invece è collocato nel corpo di una struttura selettiva dove si analizza il discriminante dell'equazione in esame, allo scopo di distinguere i vari casi: - soluzioni reali e distinte; - soluzioni reali e coincidenti; - soluzioni complesse coniugate. LISTATO N 2 PARTE I PROGRAM EQNE1(INPUT, OUTPUT); CONST VERSION1='Risoluzione equazioni e disequazioni di 2o grado'; VERSION2='Version 1.0 by Lucia Sglavo as 19/03/2000'; DESCR1='Questo programma risolve equazioni di secondo grado'; DESCR2='nella forma:'; DESCR3=' ax^2 + bx + c = 0'; DESCR4=''; QUESTION1='Inserire il coefficiente della x^2:'; QUESTION2='Inserire il coefficiente della x:'; QUESTION3='Inserire il valore del termine noto:'; ANSWER1='Il discriminante (b^2 - 4ac) vale:'; ANSWER2='Calcolo la soluzione della equazione.'; ANSWER3=' DELTA > 0 => due soluzioni reali distinte:'; ANSWER4=' DELTA = 0 => due soluzioni reali coincidenti:'; ANSWER5=' DELTA < 0 => due soluzioni complesse coniugate:'; ANSWER6=' FINE PROGRAMMA.'; SCRLEN = 24; (* Lunghezza dell'area stampabile in righe *) DIGITS = 4; (* Numero di cifre significative da stampare *) (* Simboli vari stampabili a video *) UNKNOWN= 'x'; STAR='*'; DASHLINE='-----'; LISTATO N 2 PARTE II VAR I: INTEGER; (* *) A: REAL; incognita *) B: REAL; incognita *) C: REAL; X1,X2: REAL;(* C1,C2: REAL;(* *) DELTA: REAL;(* Variabile indice usata nei loop (* Coefficiente quadratico (* Coefficiente lineare (* Termine noto *) Soluzioni reali dell'equazione *) Coefficienti immaginari soluzioni Discriminante dell'equazione *) BEGIN (* Prima pulisce lo schermo stampando una serie di linee *) (* vuote per la dimensione dell'area stampabile. *) FOR I:=1 TO SCRLEN DO WRITELN; (* Stampa numeri di versione ed istruzioni per l'uso *) WRITELN(VERSION1); WRITELN(VERSION2); WRITELN(DESCR1); WRITELN(DESCR2); WRITELN(DESCR3); WRITELN(DESCR4); LISTATO N 2 PARTE III (* Acquisisce i termini dell'eqne *) WRITELN; WRITE(QUESTION1); READ(A); WRITE(QUESTION2); READ(B); WRITE(QUESTION3); READ(C); (* Calcola il DISCRIMINANTE dell'equazione *) DELTA:= SQR(B) - 4 * A * C; WRITELN(ANSWER1); WRITELN; WRITELN(' DELTA = ',DELTA:DIGITS); WRITELN; LISTATO N 2 PARTE IV (* Calcola la soluzione dell'equazione *) WRITELN(ANSWER2); WRITELN; IF (DELTA > 0) (* Due soluzioni reali *) THEN BEGIN WRITELN(ANSWER3); X1 := (-B + SQRT(DELTA))/(2*A); X2 := (-B - SQRT(DELTA))/(2*A); WRITELN; WRITE(UNKNOWN,'1 = ', X1:DIGITS,' ; WRITE(UNKNOWN,'2 = ', X2:DIGITS); '); END ELSE IF (DELTA = 0) (* Soluzioni reali coincidenti *) THEN BEGIN WRITELN(ANSWER4); X1 := -B/(2*A); WRITELN; WRITE(UNKNOWN,'1,2 = ', X1:DIGITS); END ELSE (* DELTA < 0 => Due soluzioni complesse coniugate *) BEGIN WRITELN(ANSWER5); (* Calcolo parte REALE del risultato *) X1 := -B/(2*A); (* Calcolo coefficienti della parte immaginaria *) C1 := SQRT(ABS(DELTA))/(2*A); C2 := -SQRT(ABS(DELTA))/(2*A); (* Stampa del risultato complesso *) i ; WRITELN; WRITE(UNKNOWN,'1 = ', X1:DIGITS,' + ',C1:DIGITS,' '); WRITE(UNKNOWN,'2 = ', X1:DIGITS,' + ',C2:DIGITS,' LISTATO N 2 PARTE V (* Stampa dei messaggio di chiusura *) WRITELN; WRITELN; WRITELN(ANSWER6); (* Risultato equazione *) END. ESEMPI DI ESECUZIONE ESEMPIO N 1 CASO1 Sia dato (ax - b)2 = a2x2 - 2 abx + b2 con a = 2 e b = 3: Risoluzione equazioni e disequazioni di 1o grado Questo programma risolve equazioni di secondo grado nella forma: ax^2 + bx + c = 0 Inserire il coefficiente della x^2:Inserire il coefficiente della x:Inserire il valore del termine noto:Il discriminante (b^2 - 4ac) vale: DELTA = 0.0E+000 Calcolo la soluzione della equazione. DELTA = 0 => due soluzioni reali coincidenti: x1,2 = 1.5E+000 FINE PROGRAMMA. ESEMPI DI ESECUZIONE ESEMPIO N 2 CASO2 Sia dato il prodotto di monomi (x - 6) (x + 5) = x2 - x - 30: Risoluzione equazioni e disequazioni di 1o grado Questo programma risolve equazioni di secondo grado nella forma: ax^2 + bx + c = 0 Inserire il coefficiente della x^2:Inserire il coefficiente della x:Inserire il valore del termine noto:Il discriminante (b^2 - 4ac) vale: DELTA = 1.2E+002 Calcolo la soluzione della equazione. DELTA > 0 => due soluzioni reali distinte: x1 = 6.0E+000 ; FINE PROGRAMMA. x2 = -5.0E+000 ESEMPI DI ESECUZIONE ESEMPIO N 3 CASO 3 Discriminante negativo. Risoluzione equazioni e disequazioni di 1o grado Questo programma risolve equazioni di secondo grado nella forma: ax^2 + bx + c = 0 Inserire il coefficiente della x^2:2 Inserire il coefficiente della x:5 Inserire il valore del termine noto:7 Il discriminante (b^2 - 4ac) vale: DELTA = -3.1E+001 Calcolo la soluzione della equazione. DELTA < 0 => due soluzioni complesse coniugate: x1 = -1.3E+000 + FINE PROGRAMMA. 1.4E+000 i ; x2 = -1.3E+000 + -1.4E+000 i . Proposte di sviluppo - migliorare la diagnostica del programma risolutore delle equazioni di primo grado prevedendo i casi di equazioni impossibile (quando il coefficiente dell'incognita e' nullo) ed indeterminata (quando sono nulli entrambi i coefficienti); - migliorare l'input del programma dando la possibilità di correggere i dati in ingresso durante la fase di introduzione, senza dover rilanciare il programma; - migliorare la formattazione dell'output, in particolare per il programma relativo alle equazioni di secondo grado migliorare la visualizzazione delle soluzioni complesse coniugate; - visualizzare, per il programma risolutore delle equazioni di secondo grado, anche le disequazioni associate con i relativi intervalli di soluzione.