• Non ci sono risultati.

Definizione del problema: calcolare la soluzione di un’equazione di I grado ax+b=0, con i coefficienti a e b numeri reali

N/A
N/A
Protected

Academic year: 2021

Condividi "Definizione del problema: calcolare la soluzione di un’equazione di I grado ax+b=0, con i coefficienti a e b numeri reali "

Copied!
63
0
0

Testo completo

(1)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 1

Esempio

Problema: risolvere l’equazione di I grado ax+b=0, con i coefficienti a e b numeri reali

Esempio

Analisi e Specifica

Definizione del problema: calcolare la soluzione di un’equazione di I grado ax+b=0, con i coefficienti a e b numeri reali

Definizione dei dati del problema:

I: A, B coefficienti dell’equazione, di tipo reale Pi:

U: X, soluzione dell’equazione, di tipo reale

Pu: per A=0, B <> 0 , x è indefinito, equazione impossibile

per A=0, B=0, equazione indeterminata

(2)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 3

Esempio

Nome variabile Descrizione Tipo

A, B Coefficienti dell’equazione FLOAT

Nome variabile Descrizione Tipo

X Risultato dell’equazione FLOAT

Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Esempio

Progettazione

Descrizione del metodo di elaborazione:

1. sono letti i valori dei coefficienti A e B;

2. se A = 0 e se B< >0 stampare ‘equazione impossibile’

3. se A = 0 e se B=0 stampare ‘equazione indeterminata’

4. se A< >0 si calcola il risultato dell’equazione X= -B/A e lo

si visualizza;

(3)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 5

Esempio

Codifica (LDP)

1. sono letti i valori dei coefficienti A e B;

write (“immetti coefficiente A “);

read (“%f” A);

write (“immetti coefficiente B “);

read (“%f” B);

Esempio

Codifica

2. se A = 0 e se B< >0 stampare ‘equazione impossibile’

3. se A = 0 e se B=0 stampare ‘equazione indeterminata’

if (A=0) then

if (B<>0) then

write (“Equazione Impossibile”) endif

if (B=0) then

write (“Equazione indeterminata”) endif

endif …..

(4)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 7

Esempio

Codifica

2. se A = 0 e se B< >0 stampare ‘equazione impossibile’

3. se A = 0 e se B=0 stampare ‘equazione indeterminata’

... un modo alternativo ...

if ((A=0) and (B<>0)) then

write (“Equazione Impossibile”) endif

if ((A=0) and (B=0)) then

write (“Equazione indeterminata”) endif

…..

Esempio

if (A=0) then

if (B<>0) then

write (“Equazione Impossibile”) endif

if (B=0) then

write (“Equazione indeterminata”) endif

endif …..

if ((A=0) and (B<>0)) then

write (“Equazione Impossibile”) endif

if ((A=0) and (B=0)) then

write (“Equazione indeterminata”) endif

…..

È equivalente a:

(5)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 9

Esempio Codifica

4. se A< >0 si calcola il risultato dell’equazione X:= -B/A e lo si visualizza;

if (A=0) then ……..

endif

if (A< >0) then begin

X = -B/A;

write (“X = “, “%f” X);

end endif

Risoluzione Equazione I grado - LDP

Program equazioneIgrado;

FLOAT A, B, X;

begin

write (“immetti coefficiente A “);

read (“%f” A);

write (“immetti coefficiente B “);

read (“%f” B);

if (A=0) then

if (B< >0) then

write (“Equazione Impossibile’”

endif

if (B=0) then

write (“Equazione indeterminata”) endif

endif

if (A< >0) then begin X = -B/A;

write (“X = “, “%f” X);

end endif end.

(6)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 11

Risoluzione Equazione I grado - C

#include<stdio.h>

main()

{// questo programma risolve un’equazione di I grado float A, B, X;

printf ("immetti coefficiente A \n");

scanf ("%f", &A);

printf("immetti coefficiente B \n");

scanf ("%f", &B);

if (A==0)

{ if (B!=0)

printf ("Equazione Impossibile \n");

if (B==0)

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X=-B/A;

printf("X = %f \n", X);

} }

Risoluzione Equazione I grado - C

#include<stdio.h>

main()

{// questo programma risolve un’equazione di I grado float A, B, X;

printf ("immetti coefficiente A \n");

scanf ("%f", &A);

printf("immetti coefficiente B \n");

scanf ("%f", &B);

if (A==0)

{ if (B!=0)

printf ("Equazione Impossibile \n");

else

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X=-B/A;

printf("X = %f \n", X);

} }

… usando if () … else …

(7)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 13

Risoluzione Equazione I grado - C

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

printf ("immetti coefficiente A \n");

scanf ("%f", &A);

printf("immetti coefficiente B \n");

scanf ("%f", &B);

if (A==0) { if (B!=0)

printf ("Equazione Impossibile \n");

if (B==0)

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X = -B/A;

printf("X = %f \n", X);

} }

... bisogna verificare se ci sono errori (specie di tipo logico) nel programma ...

... Bisogna fare il testing ....

Sviluppo di programmi Analisi e

Specifica

Progettazione

Codifica

Testing

Rilascio

… mediante una serie di fasi …

Definire cosa fa il programma; Individuare e specificare

• dati di ingresso e di uscita

• Precondizioni e postcondizioni Definizione di un dizionario dei dati

Definire come il programma effettuerà l’elaborazione specificata;

Progettazione dell’algoritmo per raffinamenti successivi (stepwise refinement) ... Decomposizione funzionale …

Redazione del programma con il linguaggio di programmazione scelto

(8)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 15

Sviluppo di programmi Testing

Una volta effettuata la codifica e la compilazione del programma bisogna

‘testarlo’ per verificare la eventuale presenza di malfunzionamenti nell’esecuzione del programma dovuti a difetti presenti nel codice - Definizione dei casi di prova (casi di test – testcases):

• Definizione/selezione di valori delle variabili di input con cui

‘testare’ (provare) il programma

• Esecuzione del programma

• Verifica dei risultati ottenuti rispetto ai risultati attesi (corretti)

…. Se risultati ottenuti sono diversi da quelli attesi, il test è positivo in quanto ha rilevato un malfunzionamento …

…. Il testing ha lo scopo di rivelare e rilevare i malfunzionamenti …

… rimozione difetti che li causano (Debugging) …

Sviluppo di programmi Scelta dei casi di prova e verifica

I casi di prova non vanno scelti “a casaccio”

… definire casi di prova che hanno una maggiore probabilità di individuare malfunzionamenti …

l’obiettivo è quello di una verifica il più possibile esaustiva … (NB: in generale però è impossibile effetture un testing esaustivo ...)

… cercare di evitare i casi di prova ridondanti ...

… i casi di prova e i risultati del testing vanno documentati ...

(9)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 17

Sviluppo di programmi

I malfunzionamenti sono dovuti a difetti (errori) presenti nel codice del programma

Tipologie di difetti in programmi - Difetti di tipo lessicale/sintattico

• individuati dal compilatore

• dovuti ad errata scrittura o a mancanza di conoscenza delle regole del linguaggio (ad es. mancanza del “;” alla fine di una istruzione)

Difetti di tipo Logico

Possono essere dovuti ad errori di diverso tipo, commessi durante lo sviluppo del programma:

- Errori nella definizione del problema (fasi di analisi e specifica) - Errori di progettazione (es. nella definizione/scelta dell’algoritmo) - Errori nella stesura (codifica) dei programmi

errata definizione del programma (o sua trascrizione durante la codifica, ad es. scrittura dell’operatore + invece del *)

provocano malfunzionamenti durante l’esecuzione del programma

possono essere difficili da individuare e correggere

Più ‘alta’ è la fase di sviluppo in cui è commesso l’errore generante il difetto più è difficile individuarlo e correggerlo:

correzione degli errori => eliminazione dei difetti => debugging

Sviluppo di programmi

(10)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 19

Risoluzione Equazione I grado - C

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

printf ("immetti coefficiente A \n");

scanf ("%f", &A);

printf("immetti coefficiente B \n");

scanf ("%f", &B);

if (A==0) { if (B!=0)

printf ("Equazione Impossibile \n");

if (B==0)

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X = -B/A;

printf("X = %f \n", X);

} }

... bisogna verificare se ci sono errori (specialmente di tipo logico) nel programma ...

... definiamo i casi di prova ....

Esempio

Testing

criteri per la scelta dei casi di prova:

• almeno un caso di test (prova) con valori di A e B entrambi < > 0

• un caso di test (prova) con A = 0 e B < > 0

• un caso di test (prova) con A = 0 e B = 0

(11)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 21

Risoluzione Equazione I grado - LDP

Supponendo che l’equazione sia:

3x + 9 = 0

Primo caso di prova:

A=3 B=9

Esecuzione ‘carta e penna’

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

printf ("immetti coefficiente A \n");

scanf ("%f", &A);

printf("immetti coefficiente B \n");

scanf ("%f", &B);

if (A==0) { if (B!=0)

printf ("Equazione Impossibile \n");

if (B==0)

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X = -B/A;

printf("X = %f \n", X);

} }

A= 0 ? A=3 => FALSO

Risoluzione Equazione I grado - C

Esecuzione ‘carta e penna’

A<>0 A=3 => VERO X = - B/A = - 9/3 = -3

X= - 3 if (A==0)

{ if (B!=0)

printf ("Equazione Impossibile \n");

if (B==0)

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X = -B/A;

printf("X = %f \n", X);

} }

(12)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 23

Risoluzione Equazione I grado - LDP

Primo caso di prova:

3x + 9 = 0 => A=3 - B=9

Esecuzione ‘carta e penna’

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

1. printf ("immetti coefficiente A \n");

2. scanf ("%f", &A);

3. printf("immetti coefficiente B \n");

4. scanf ("%f", &B);

5. if (A==0) 6. { if (B!=0)

7. printf ("Equazione Impossibile \n");

8. if (B==0)

9. printf ("Equazione indeterminata \n");

10. } 11. if (A!=0)

12. { X = -B/A;

13. printf("X = %f \n", X);

14. }

}

# A B X operazione

1 2 3 4 5 6 7 8 9 10 11 12 13 14

Risoluzione Equazione I grado - LDP

Primo caso di prova:

3x + 9 = 0 => A=3 - B=9

Esecuzione ‘carta e penna’

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

1. printf ("immetti coefficiente A \n");

2. scanf ("%f", &A);

3. printf("immetti coefficiente B \n");

4. scanf ("%f", &B);

5. if (A==0) 6. { if (B!=0)

7. printf ("Equazione Impossibile \n");

8. if (B==0)

9. printf ("Equazione indeterminata \n");

10. } 11. if (A!=0)

12. { X = -B/A;

13. printf("X = %f \n", X);

14. }

}

# A B X operazione

1 immetti coefficiente A

2 3 A=3

3 immetti coefficiente B

4 9 B=9

5 A=0 ? Falso

6 7 8 9 10

11 A <> 0? Vero

12  -3 X = -9/3;

13  X=-3

14 

(13)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 25

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

printf ("immetti coefficiente A \n");

scanf ("%f", &A);

printf("immetti coefficiente B \n");

scanf ("%f", &B);

Secondo caso di prova:

A=0 B=9

Risoluzione Equazione I grado - LDP

Esecuzione ‘carta e penna’

A= 0 ? VERO

Risoluzione Equazione I grado - LDP

Esecuzione ‘carta e penna’

if (A==0) { if (B!=0)

printf ("Equazione Impossibile \n");

if (B==0)

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X = -B/A;

printf("X = %f \n", X);

} }

A!=0 ?

A=0 => FALSO B<> 0 ?

B = 9 => VERO Equazione Impossibile B==0?

B = 9 => FALSO

(14)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 27

Risoluzione Equazione I grado - LDP

Secondo caso di prova:

A=0 - B=9

Esecuzione ‘carta e penna’

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

1. printf ("immetti coefficiente A \n");

2. scanf ("%f", &A);

3. printf("immetti coefficiente B \n");

4. scanf ("%f", &B);

5. if (A==0) 6. { if (B!=0)

7. printf ("Equazione Impossibile \n");

8. if (B==0)

9. printf ("Equazione indeterminata \n");

10. } 11. if (A!=0)

12. { X = -B/A;

13. printf("X = %f \n", X);

14. }

}

# A B X operazione

1 immetti coefficiente A

2 0 A=0

3 immetti coefficiente B

4 9 B=9

5 A=0 ? Vero

6 B<>0? Vero

7 Equazione Impossibile

8 B=0 ? Falso

9 10 

11  A<>0 ? Falso 12

13 14 

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

printf ("immetti coefficiente A \n");

scanf ("%f", &A);

printf("immetti coefficiente B \n");

scanf ("%f", &B);

Terzo caso di prova:

A = 0 B = 0

Risoluzione Equazione I grado - LDP

Esecuzione ‘carta e penna’

(15)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 29

Risoluzione Equazione I grado - LDP

A= 0 ? VERO

B<> 0 ?

B = 0 => FALSO

Esecuzione ‘carta e penna’

if (A==0) { if (B!=0)

printf ("Equazione Impossibile \n");

if (B==0)

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X = -B/A;

printf("X = %f \n", X);

} }

A <> 0 ? FALSO B= 0 ? VERO Equazione indeterminata

Risoluzione Equazione I grado - LDP

Terzo caso di prova:

A=0 - B=0

Esecuzione ‘carta e penna’

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

1. printf ("immetti coefficiente A \n");

2. scanf ("%f", &A);

3. printf("immetti coefficiente B \n");

4. scanf ("%f", &B);

5. if (A==0) 6. { if (B!=0)

7. printf ("Equazione Impossibile \n");

8. if (B==0)

9. printf ("Equazione indeterminata \n");

10. } 11. if (A!=0)

12. { X = -B/A;

13. printf("X = %f \n", X);

14. }

}

# A B X operazione

1 immetti coefficiente A

2 0 A=0

3 immetti coefficiente B

4 0 B=0

5 A=0? Vero

6 B<>0 Falso

7

8 B=0? Vero

9 Equazione Indeterminata

10 

11  A<>0 Falso 12

13 14 

(16)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 31

Risoluzione Equazione I grado - LDP C1 Primo caso di prova: A=3 - B=9 C2 Primo caso di prova: A=0 - B=9 C3 Primo caso di prova: A=0 - B=0

# C1 C2 C3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include<stdio.h>

main()

{ // il programma risolve un’equazione di I grado float A, B, X;

1. printf ("immetti coefficiente A \n");

2. scanf ("%f", &A);

3. printf("immetti coefficiente B \n");

4. scanf ("%f", &B);

5. if (A==0) 6. { if (B!=0)

7. printf ("Equazione Impossibile \n");

8. if (B==0)

9. printf ("Equazione indeterminata \n");

10. } 11. if (A!=0)

12. { X = -B/A;

13. printf("X = %f \n", X);

14. }

} Tutte le istruzioni eseguite almeno 1 volta !!

Risoluzione Equazione I grado - LDP

if (A=0) then if (B<>0) then

write (“Equazione Impossibile”) else

write (“Equazione indeterminata”) endif

else begin X = -B/A;

write (“X = “, X);

end endif end.

… usando strutture if … then … else

Program equazioneIgrado;

FLOAT A, B, X;

begin

write (“immetti coefficiente A”);

read (A);

write (“immetti coefficiente B”);

read (B);

(17)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 33

Risoluzione Equazione I grado - LDP

if (A=0)

then

if (B<>0) then

write (“Equazione Impossibile”)

else

write (“Equazione indeterminata”) endif

else

begin X = -B/A;

write (“X = “, X);

end endif end.

if (A=0)

then

if (B<>0) then

write (“Equazione Impossibile”) endif

if (B=0) then

write (“Equazione indeterminata”) endif

endif

if (A<>0)

begin X = -B/A;

write (“X = “, X);

end endif end.

… differenze tra uso di if … then ed if … then … else

Risoluzione Equazione I grado - il programma in C

#include <stdio.h>

main ()

{ // risoluzione di un’equazione di I grado float A, B, X;

printf (“immetti coefficiente A \n“);

scanf (“%f”, &A);

printf(“immetti coefficiente B \n”);

scanf (“%f”, &B);

if (A==0) { if (B!=0)

printf (“Equazione Impossibile \n”);

else

printf (“Equazione indeterminata \n”);

} else

{ X= -B/A;

printf(“X = %f \n”, X);

} }

#include<stdio.h>

main()

{ // risoluzione di un’equazione di I grado float A, B, X;

printf ("immetti coefficiente A \n");

scanf ("%f", &A);

printf("immetti coefficiente B \n");

scanf ("%f", &B);

if (A==0) { if (B!=0)

printf ("Equazione Impossibile \n");

if (B==0)

printf ("Equazione indeterminata \n");

} if (A!=0)

{ X = -B/A;

printf("X = %f \n", X);

} }

… differenze tra uso di if … then ed if … then … else

(18)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 35

Esempio Testing

criteri per la scelta dei casi di prova:

almeno un caso di test (prova) con valori di A e B entrambi <> 0 un caso di test (prova) con A = 0 e B <> 0

un caso di test (prova) con A = 0 e B = 0

... lo studente ripeta l’esecuzione ‘carta e penna’ dei casi di test per il programma con if () ... else ....

Esempio Analisi e Specifica

Definizione del problema: Calcolare le soluzioni del sistema di due equazioni lineari

ax+by=e cx+dy=f

Definizione dei dati del problema:

I: a,b,c,d,e,f, coefficienti del sistema di tipo reale Pi: determinante dei coefficienti diverso da zero U: x, y soluzioni del sistema, di tipo reale

Pu: se il determinante dei coefficienti è uguale a zero, x e y

sono indefiniti ed il sistema impossibile

(19)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 37

Esempio

Nome variabile Descrizione Tipo

A, B,C, D, E, F I coefficienti del sistema REAL

Nome variabile Descrizione Tipo

X, Y Soluzioni del sistema REAL

Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

G Determinante dei coefficienti x e y REAL Tabella delle variabili di algoritmo

Esempio Progettazione

Descrizione del metodo di elaborazione:

• sono letti i valori dei coefficienti;

• si calcola il determinante dei coefficienti (g=(a*d)-(b*c))

• se g è diverso da zero si calcolano le soluzioni x=((e*d)-(f*b))/g

y=((a*f)-(c*e))/g

• se g=0 stampare ‘Sistema impossibile’

(20)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 39

Esempio Codifica

• sono letti i valori dei coefficienti;

write (‘immetti i coefficienti ‘);

read (A, B, C, D, E, F);

• si calcola il determinante dei coefficienti …...

G=(A*D)-(B*C);

Esempio Codifica

• se g è diverso da zero si calcolano le soluzioni …...

if G<>0 then begin

X=(E*D)-(F*B))/G ; Y=((A*F)-(C*E))/G;

write (‘le soluzioni sono X=‘, X, ‘ Y = ‘, Y);

end

(21)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 41

Esempio Codifica

• se g=0 stampare ‘Sistema impossibile’

if G<>0 then ………

else

write (‘Sistema Impossibile’);

endif

Esempio -

il programma in LDP

Program sistema_2_equazioni;

REAL A, B, C, D, E, F,G;

REAL X, Y;

begin

write (‘immetti il coefficiente A ‘);

read (“%f” A);

….

write (‘immetti il coefficiente F ‘);

read (“%f” F);

G=(A*D)-(B*C);

if G<>0 then begin

X=((E*D)-(F*B))/G ; Y=((A*F)-(C*E))/G;

write (‘le soluzioni sono X=‘, X, ‘ Y = ‘, Y);

end else

write (‘Sistema Impossibile’);

endif end.

(22)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 43

Risoluzione sistema_2_equazioni - il programma in C

#include <stdio.h>

main ()

{ // sistema_2_equazioni float A, B, C, D, E, F, G;

float X, Y;

printf (“immetti il coefficiente A \n“);

scanf (“%f”, &A);

printf (“immetti il coefficiente B \n“);

scanf (“%f”, &B);

printf (“immetti il termine noto E \n“);

scanf (“%f”, &E);

printf (“immetti il coefficiente C \n“);

scanf (“%f”, &C);

printf (“immetti il coefficiente D \n“);

scanf (“%f”, &D);

printf (“immetti il termine noto F \n“);

scanf (“%f”, &F);

G=(A*D)-(B*C);

if (G!=0)

{ X=((E*D)-(F*B))/G ; Y=((A*F)- (C*E))/G;

printf (“le soluzioni sono X= %f Y= %f \n“, X, Y);

} else

printf(“Sistema Impossibile \n”);

}

Ax + By = E Cx + Dy = F

{

Esempio Testing

criteri per la scelta dei casi di prova:

…. Lo studente definisca, quale esercizio, i casi di prova ...

(23)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 45

Esempio a=2 b=3 c=2 d=3 e=6 f=9 g=(2*3)-(3*2) = 0

Risultato atteso => “Sistema impossibile”

a=4 b=-9 c=2 d=3 e=6 f=9 g=(4*3) - (-9*2) = 30

x=((e*d)-(f*b))/g = ((3*6) - (9*-9))/30 = (18 + 81)/30 = 3,3 y=((a*f)-(c*e))/g = ((4*9) - (2*6))/30 = (36 - 12)/30 = 0,80 Risultato atteso => x = 3,3 y = 0,80

Testing (I caso prova) 2x+3y=6

2x+3y=9

{

Testing (II caso prova) 4x - 9y = 6

2x + 3y = 9

{

…. Lo studente definisca ed esegua ulteriori casi di prova ...

(24)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 47

Esercizio

Analisi e Specifica

Definizione del problema: Scrivere un programma che ricevuti in input tre numeri interi trova quello con valore massimo Definizione dei dati del problema:

I: i tre numeri di tipo intero Pi: nessuna

U: il numero con il valore massimo, di tipo intero

Pu: il massimo deve corrispondere ad uno dei tre numeri dati in input

Problema: Dati tre numeri interi trovare quello con valore massimo

Esempio

Nome variabile Descrizione Tipo

A, B,C I tre numeri interi tra cui INT trovare il massimo

Nome variabile Descrizione Tipo

MAX Il numero con valore massimo INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

(25)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 49

Esempio

Progettazione

Descrizione del metodo di elaborazione:

MAX = ? 5 MAX = 5 7 > MAX = 5 ?

3 > MAX = 7 ? 9 > MAX = 7 ?

… se il terzo valore invece di 3 fosse stato:

Vero MAX = 9 Vero MAX = 7 Falso MAX = 7

Esempio

Progettazione

Descrizione del metodo di elaborazione:

• sono letti i valori dei tre numeri interi assegnandoli rispettivamente alle variabili A, B, C;

• inizialmente si considera il primo numero (variabile A) come quello

massimo, ovvero si assegna alla variabile MAX il valore del primo numero;

• si confronta il valore di MAX con quello del secondo numero (variabile B) e se questo è maggiore di MAX si aggiorna il valore di MAX con il valore del secondo numero;

• si confronta il valore di MAX con quello del terzo numero (variabile C) e se questo è maggiore di MAX si aggiorna il valore di MAX con il valore del terzo numero

• si stampa il valore della variabile MAX così calcolato

(26)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 51

Esempio Codifica

• sono letti i valori dei tre numeri interi;

write (“immetti il primo numero A “);

read (“%d” A);

write (“immetti il secondo numero B “);

read (“%d” B);

write (“immetti il terzo numero C “);

read (“%d” C);

Esempio Codifica

• inizialmente si considera il primo numero (variabile A) come quello massimo, ovvero si assegna alla variabile MAX il valore del primo numero;:

MAX=A;

• si confronta il valore di MAX con quello del secondo numero (variabile B) e se questo è maggiore di MAX si aggiorna il valore di MAX con il valore del secondo numero:

if (B>MAX) then MAX=B endif

(27)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 53

Esempio Codifica

• si confronta il valore di MAX con quello del terzo numero (variabile C) e se questo è maggiore di MAX si aggiorna il valore di MAX con il valore del terzo numero :

if (C>MAX) then MAX=C endif

• si stampa il valore della variabile MAX così calcolato:

write (“Valore massimo = “, “%d” MAX);

Max fra tre - il programma in LDP e C

#include <stdio.h>

main () {

// massimo_tra_tre numeri interi int A, B, C, MAX;

printf (“immetti il primo numero A \n“);

scanf (“%d”, &A);

printf(“immetti il secondo numero B \n“);

scanf (“%d”, &B);

printf (“immetti il terzo numero C \n“);

scanf (“%d”, &C);

MAX=A;

if (B>MAX) MAX=B;

if (C>MAX) MAX=C;

printf(“Valore massimo = %d \n”, MAX);

} Program massimo_tra_tre;

INT A, B, C, MAX;

begin

write (“immetti il primo numero A “);

read (“%d” A);

write (“immetti il secondo numero B“);

read (“%d” B);

write (“immetti il terzo numero C “);

read (“%d” C);

MAX=A;

if (B>MAX) then MAX=B endif

if (C>MAX) then MAX=C endif

write (“Valore massimo= “, ”%d%”MAX);

end.

(28)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 55

Esempio Testing

criteri per la scelta dei casi di prova:

almeno un caso di test (prova) con valori di A e B e C tutti diversi tra loro

un caso di test (prova) con due numeri uguali ed il terzo diverso un caso di test (prova) con tutti e tre i numeri uguali

Esempio Analisi e Specifica

Definizione del problema: Dato in input il valore di N, numero intero maggiore di zero, calcolare la media di una sequenza di N numeri interi immessi dall’utente

Definizione dei dati del problema:

I: N indicante su quanti numeri è effettuata la media;

generico numero intero elemento della sequenza Pi: N>0

U: la media degli N numeri Pu: nessuna

... risolvere con ciclo ripetitivo ....

(29)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 57

Esempio

Nome variabile Descrizione Tipo

N lunghezza della sequenza INT Numero elemento della sequenza INT

Nome variabile Descrizione Tipo

Media media degli N numeri FLOAT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

Sommatoria Sommatoria INT

i indice controllo ciclo INT

Tabella delle variabili di algoritmo

Esempio Progettazione

Descrizione del metodo di elaborazione:

• è letto il valore di N, la lettura è ripetuta fin quando è N=<0

• si inizializza il valore di Sommatoria a zero

• si ripete N volte, con un ciclo for:

• la lettura di un numero intero

• il valore del numero letto è aggiunto al valore di Sommatoria

• alla fine del ciclo si calcola il valore di Media = Sommatoria/N

• si visualizza il valore di Sommatoria e Media

(30)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 59

#include<stdio.h>

main()

{ // Calcola la sommatoria di N numeri interi int i, Numero, N;

float Media;

longint Sommatoria;

// legge N finché è maggiore di zero do

{ printf (”Immetti il valore di N \n”);

scanf("%d", &N); } while (N<=0);

// inizializza Sommatoria a zero Sommatoria=0;

Esempio - il programma in C

// ciclo ripetitivo per calcolare la sommatoria for (i=1; i<=N; i++)

{ // Legge un numero della sommatoria printf ("Dammi il numero %d

della sommatoria: \n ", i”);

scanf("%d", &Numero);

// aggiunge Numero a Sommatoria Sommatoria=Sommatoria + Numero;

}

Media = (float) (Sommatoria)/(float)N;

printf("Sommatoria = %d Media = %f\n“, Sommatoria, Media);

}

… supponiamo di eseguire il programma per calcolare la media di 4 numeri: (6, 9, 12, 18) ….

do printf (”Immetti il valore di N \n”);

scanf("%d", &N);

while (N<=0);

Sommatoria=0;

Immetti il valore di N 4

4 <= 0 ? Falso !

Sommatoria=0 Esecuzione ‘a mano’ programma calcolo media

(31)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 61

for (i=1; i<=N; i++)

{ // Legge un numero della sommatoria

printf ("Dammi il numero %d: ", i, “della sommatoria \n”);

scanf("%d", &Numero);

// aggiunge il valore letto a quello della sommatoria Sommatoria=Sommatoria + Numero;

}

Media = (float) (Sommatoria)/(float)N;

printf("Sommatoria = %d Media = %f\n“, Sommatoria, Media);

Dammi il numero 1 della sommatoria i = 1 <= 4 6

Valori variabile controllo del

ciclo Sommatoria = 27 + 18 =45

i = 5 > 4 i = 2 <= 4

i = 3 <= 4

i = 4 <= 4

Media = 45.00 / 4.00 = 11,25 Dammi il numero 2 della sommatoria 9

Dammi il numero 3 della sommatoria 12

Dammi il numero 4 della sommatoria 18

Sommatoria = 0 + 6 = 6 Sommatoria = 6 + 9 = 15

Sommatoria = 15 + 12 = 27

Sommatoria = 45 Media=11,25

Esempio Testing

criteri per la scelta dei casi di prova:

…. Lo studente definisca, quale esercizio, i casi di prova ...

(32)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 63

Esempio Analisi e Specifica

Definizione del problema: Dato in input il valore di N, numero intero compreso tra 10 e 30 estremi inclusi, calcolare la

sommatoria, la produttoria e la media dei numeri da 1 a N.

... risolvere con ciclo ripetitivo ....

Definizione dei dati del problema:

I: N

Pi: valore di N compreso tra 10 e 30, estremi inclusi U: sommatoria, produttoria e media dei numeri da 1 a N Pu: sommatoria, produttoria e media maggiori di zero

Esempio

Nome variabile Descrizione Tipo

N estremo superiore della sommatoria INT e produttoria

Nome variabile Descrizione Tipo

Sommatoria Sommatoria LONGINT Produttoria Produttoria LONGINT

Media Media FLOAT

Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

i indice elemento produttoria e di controllo di ciclo INT Tabella delle variabili di algoritmo

(33)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 65

Esempio

Progettazione

Descrizione del metodo di elaborazione:

• è letto il valore di N, la lettura è ripetuta se N non è compreso tra 10 e 30, estremi inclusi

• si inizializza il valore di Sommatoria a zero e quello di Produttoria a 1

• si ripete N volte, con un ciclo for:

• aggiungere al valore di Sommatoria il valore della variabile di controllo del ciclo for

• moltiplicare il valore di Produttoria per il valore della variabile di controllo del ciclo for

• alla fine del ciclo for:

• Si calcola il valore di Media = Sommatoria / N

• si visualizzano i valori di Sommatoria, Produttoria e Media

#include<stdio.h>

main()

{ // Calcola sommatoria, produttoria e media dei numeri interi da 1 a N int i, N;

longint Sommatoria, Produttoria;

float Media;

// legge il valore di N finché è maggiore di zero do

{ printf (”Immetti il valore di N, maggiore di zero \n”);

scanf("%d", &N); } while ((N<10) || (N>30));

// inizializza il valore di somma a zero e Produttoria a 1 Sommatoria=0;

Produttoria = 1;

Esempio - il programma in C

(34)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 67

// ciclo ripetitivo per calcolare sommatoria e produttoria for (i=1; i<=N; i++)

{ Sommatoria = Sommatoria + i;

Produttoria = Produttoria * i;

}

Media = (float) Sommatoria/(float)N;

printf("Sommatoria = %d \n", Sommatoria);

printf(“Produttoria = %d \n", Produttoria );

printf(“Media = %f \n", Media);

}

Esempio - il programma in C

Esempio Analisi e Specifica

Definizione del problema: data in input una sequenza di caratteri, terminante con il carattere ‘F’, contare quanti caratteri sono immessi e dire quante volte nella sequenza è presente un certo carattere fornito in input

Definizione dei dati del problema:

I: il carattere da cercare; un carattere della sequenza Pi: il carattere ‘F’ termina la sequenza; il carattere da cercare è diverso da ‘F’

U: il numero di caratteri immessi; il numero di volte per cui il carattere da cercare è nella sequenza

Pu: nessuna

(35)

69 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Esempio

Nome variabile Descrizione Tipo

C carattere della sequenza CHAR Cerca carattere da cercare CHAR

Nome variabile Descrizione Tipo

Volte Il numero di presenze di Cerca nella sequenza INT

Conta Il numero di caratteri immessi INT

Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Esempio Progettazione

Descrizione del metodo di elaborazione:

• è letto il valore del carattere da cercare nella sequenza, fin quando è diverso da ‘F’;

• Si stampa il carattere da cercare

• è letto un carattere della sequenza;

• si confronta il carattere letto con quello da cercare

• se essi sono uguali si incrementa di una unità la variabile Volte che conta le presenze del carattere nella sequenza

• Sinincrementa di una unità la variabile Conta

• si continua dal secondo punto fino all’immissione di ‘F’

• si stampa il valore di Conta e di Volte

(36)

71 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

#include <stdio.h>

main () {

// trova e conta carattere in sequenza caratteri int Volte, Conta = 0;

char C, Cerca;

do

{ printf("immetti il carattere da cercare \n");

scanf("%c", &Cerca);

}

while (Cerca=='F');

printf("carattere da cercare = %c \n", Cerca);

Esempio

Volte=0;

do

{ printf ( "immetti un carattere della sequenza \n");

scanf("%c", &C);

if (C==Cerca)

Volte=Volte+1;

Conta++;

}

while (C!='F');

printf ("Immessi %d caratteri \n", conta-1);

printf ("Carattere %c presente %d volte \n", Cerca, Volte);

system("Pause");

}

Esempio

(37)

73 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

.... Il problema può sorgere con l’uso di scanf (….) in un ciclo per leggere il valore di una variabile di tipo carattere, o comunque quando si effettuano più successive operazioni di scanf(…) per la lettura di valori di variabili di tipo carattere …

Quando il seguente codice:

{ printf("immetti il carattere da cercare \n");

scanf("%c", &Cerca);

} …………

{

{printf ("immetti un carattere della sequenza \n");

scanf("%c", &C);

………

}

… viene eseguito viene visualizzato ….

…. Osservazioni ….

(38)

75 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

…. il problema è dovuto al trattamento del <return> ….

…. la pressione del tasto <return> equivale all’immissione di un carattere, che non è visualizzabile sul monitor, da cui il ‘salto’ al passo successivo del ciclo e quindi la successiva istruzione di printf ()

scanf("%c", &C);

Avendo digitato ‘B’ e ‘\n’ (\n = <return>) , il successivo scanf( ) legge come carattere immesso il <return> prima digitato, da cui:

Contati anche i <return>

…. un modo per risolvere il problema ….

{ printf("immetti il carattere da cercare \n");

scanf("%c", &Cerca);

}

{ …………

{printf ("immetti un carattere della sequenza \n");

scanf("\n%c", &C);

………

}

Ovvero nella stringa del formato si aggiunge \n per ‘filtrare’ il carattere di <return>

…. Osservazioni ….

(39)

77 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

#include <stdio.h>

main () {

// trova e conta carattere in sequenza caratteri - BETTER int Volte, Conta =0;

char C, Cerca;

do

{ printf("immetti il carettere da cercare \n");

scanf(“%c", &Cerca);

}

while (Cerca=='F');

printf("carattere da cercare = %c \n", Cerca);

Esempio

Volte=0;

do

{ printf ( "immetti un carattere della sequenza \n");

scanf("\n%c", &C); // \n ‘filtra’ il <return> del precedente input if (C==Cerca)

Volte=Volte+1;

Conta++;

}

while (C!='F');

printf ("Immessi %d caratteri \n", conta-1);

printf ("Carattere %c presente %d volte \n", Cerca, Volte);

system("Pause");

}

Esempio

(40)

79 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Esercizio

Analisi e Specifica

Definizione del problema: Scrivere un programma che genera in modo casuale un valore compreso tra 1 e 6, estremi inclusi, e lo assegna ad una variabile DADO (rappresentante il risultato del lancio del dado);

... .... ...

Problema: lanciato un dado, un giocatore vince se il risultato del lancio è 1 oppure 6, perde se il risultato è 2, 3 o 5, non vince nè perde se il risultato è 4. Se vince, vince il doppio della posta puntata (che non può essere più di 2 euro); se perde, perde l’importo della puntata. Se parità, gli viene restituito lìimporto della puntata.

(41)

Prof. G. A. Di Lucca - Univ. del Sannio

Elementi di Informatica 81

… si usa la funzione rand() della libreria <stdlib.h>

#include <stdio.h>

#include <stdlib.h>

main () {int a;

printf ("Generazione random di un numero intero positivo minore di 70\n");

a = rand() %70; //la funzione rand() genera in modo random un numero intero;

// l’applicazione di %70 fa in modo che il numero generato // sia modulo 70, ossia compreso tra 0 e 69.

printf ("Numero = %d \n", a);

}

Generazione casuale (random) di un numero intero in C

// Programma per simulare il risultato del lancio di un dado

#include <stdio.h>

#include <stdlib.h>

main ()

{ int faccia_dado;

faccia_dado = rand() % 6; //genera un numero casuale fra 0 e 5 faccia_dado++; // per ottenere un valore tra 1 e 6

printf(“Faccia_dado = %d\n",faccia_dado);

system("Pause");

}

Generazione casuale (random) di un numero intero in C

(42)

Prof. G. A. Di Lucca - Univ. del Sannio

Elementi di Informatica 83

… generato più volte sempre lo stesso valore !!! ???

… Se

eseguiamo il programma più volte si ottiene sempre lo stesso risultato!!!

… ciò è dovuto al fatto che rand() genera numeri pseudo-casuali, cioè numeri che "sembrano" casuali …

Affinchè ogni esecuzione del programma generi un diverso valore deve essere effettuata la ‘randomizzazione’ della funzione, ovvero inizializzare il generatore di numeri pseudo-casuali usando un valore che viene detto ‘seed’

La randomizzazione può essere fatta usando la funzione srand(), che richiede un parametro di input di tipo unsigned (intero senza segno), che funge da seed.

Per inizializzare il seed è solitamente usata la funzione time(), della libreria time.h, con parametro NULL (o zero); la funzione time() fornisce un valore unsigned calcolato in base all'ora corrente del giorno, espressa in secondi.

Generazione casuale (random) di un numero intero in C

(43)

Prof. G. A. Di Lucca - Univ. del Sannio

Elementi di Informatica 85

// Programma per simulare il risultato del lancio di un dado - randomizzato

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

main ()

{ int lancio1, lancio2;

srand(time(NULL)); //inizializza il generatore di numeri random // lancia il dado 2 volte e mostra il risultato

lancio1= rand() % 6; //genera un numero casuale fra 0 e 5 lancio1++; // per ottenere un valore tra 1 e 6 lancio2= rand() % 6;

lancio2++;

printf(“Primo Lancio = %d \n Secondo Lancio= %d\n", lancio1, lancio2);

system("Pause");

}

Generazione casuale (random) di un numero intero in C

Riferimenti

Documenti correlati

Perci` o l’u- tilizzo della disuguaglianza di Chebyshev `e limitato ai casi in cui non `e nota la forma della distribuzione della variabile casuale... Sia X la variabile

[r]

Una ”relazione” da un insieme A ad un insieme B e’ una legge R che ad elementi di A associa elementi di B; e’ ammesso che a qualche elemento di A non associ alcun elemento di B, e

Possiamo pensare che la retta r t sia la retta per il punto O ed il punto P t che si muove di moto uniforme sulla circonferenza di centro O e raggio 1, percorrendo in senso

Valore assoluto Per parlare di vicinanza fra punti della retta reale conviene pas- sare attraverso la nozione di distanza fra due punti, e per descrivere la distanza fra due

In questa parte ricordiamo per completezza le prime nozioni e i primi principi sulle equazioni e disequazioni: sono le stesse nozioni e principi familiari al lettore dagli

Definizione del problema: Scrivere un programma che ricevuti in input tre numeri interi trova quello con valore massimo Definizione dei dati del problema:. I: i tre numeri di

Definizione del problema: Dato in input il valore di N, numero intero maggiore di zero, calcolare la media di una sequenza di N numeri interi immessi dall’utente. Definizione dei