• Non ci sono risultati.

Definizione dei dati del problema:

N/A
N/A
Protected

Academic year: 2021

Condividi "Definizione dei dati del problema: "

Copied!
81
0
0

Testo completo

(1)

Elementi di Informatica

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

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

Codifica (LDP)

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

write (‘immetti coefficiente A ‘);

read (A);

write (‘immetti coefficiente B ‘);

read (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 migliore ...

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

write (‘Equazione Impossibile’) endif

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

write (‘Equazione indeterminata’) endif

…..

Esempio

Codifica

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

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

... oppure ...

if A=0 then

if B<>0 then

write (‘Equazione Impossibile’) else

write (‘Equazione indeterminata’) endif

endif

(5)

Elementi di Informatica

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

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 = ‘, X);

end endif

Esempio Codifica

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

... un modo migliore ...

if A=0 then ……..

else begin

X = -B/A;

write (‘X = ‘, X);

end

endif

(6)

Elementi di Informatica

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

Risoluzione Equazione I grado - LDP

Program equazioneIgrado;

FLOAT A, B, X;

begin

write (‘immetti coefficiente A ‘);

read (A);

write (‘immetti coefficiente B ‘);

read (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 = ‘, X);

end endif end.

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);

(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

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 dell’algoritmo (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 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 

#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’

(13)

Elementi di Informatica

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

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

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)

Elementi di Informatica

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

#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’

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

(15)

Elementi di Informatica

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

Terzo caso di prova:

A=0 - B=0

#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 

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. }

}

(16)

Elementi di Informatica

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

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);

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

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

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

(17)

Elementi di Informatica

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

Risoluzione Equazione I grado - il programma in 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”);

} else

{ X= -B/A;

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

} }

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

(18)

Elementi di Informatica

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

Risoluzione Equazione I grado - C

Supponendo che l’equazione sia 3x + 9 = 0

Primo caso di prova:

A=3 B=9

Esecuzione ‘carta e penna’

#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);

A= 0 ? Falso

else

X = - B/A = - 9/3 = -3 X= -3

Risoluzione Equazione I grado - C

Esecuzione ‘carta e penna’

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

printf (“Equazione Impossibile \n”);

else

printf (“Equazione indeterminata \n”);

} else {

X= -B/A;

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

} }

(19)

Elementi di Informatica

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

Secondo caso di prova:

A=0 B=9

Risoluzione Equazione I grado - LDP

Esecuzione ‘carta e penna’

#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);

A= 0 ?

VERO

B<> 0 ? VERO

Equazione Impossibile

Risoluzione Equazione I grado - LDP

Esecuzione ‘carta e penna’

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

printf (“Equazione Impossibile \n”);

else

printf (“Equazione indeterminata \n”);

} else {

X= -B/A;

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

} }

(20)

Elementi di Informatica

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

Terzo caso di prova:

A = 0 B = 0

Risoluzione Equazione I grado - LDP

Esecuzione ‘carta e penna’

#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);

Risoluzione Equazione I grado - LDP

A= 0 ?

VERO B<> 0 ?

FALSO else

Equazione indeterminata

Esecuzione ‘carta e penna’

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

printf (“Equazione Impossibile \n”);

else

printf (“Equazione indeterminata \n”);

} else {

X= -B/A;

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

} }

(21)

Elementi di Informatica

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

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

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

(22)

Elementi di Informatica

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

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’

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);

(23)

Elementi di Informatica

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

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

Esempio Codifica

• se g=0 stampare ‘Sistema impossibile’

if G<>0 then ………

else

write (‘Sistema Impossibile’);

endif

(24)

Elementi di Informatica

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

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 (A);

….

write (‘immetti il coefficiente F ‘);

read (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.

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

{

(25)

Elementi di Informatica

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

Esempio Testing

criteri per la scelta dei casi di prova:

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

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 ...

(26)

Elementi di Informatica

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

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

(27)

Elementi di Informatica

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

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 = 7 Falso MAX = 7 Vero MAX = 9

Esempio

Progettazione

Descrizione del metodo di elaborazione:

• sono letti i valori dei tre numeri interi;

• inizialmente si considera il primo numero immesso 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 e se questo è magiore 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 e se questo è magigore di MAX si aggiorna il valore di MAX con il valore del terzo numero

• si stampa il valore della variabile MAX così calcolato

(28)

Elementi di Informatica

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

Esempio Codifica

• sono letti i valori dei tre numeri interi;

write (‘immetti il primo numero A ‘);

read (A);

write (‘immetti il secondo numero B ‘);

read (B);

write (‘immetti il terzo numero C ‘);

read (C);

Esempio Codifica

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

MAX=A;

• si confronta il valore di MAX con il secondo numero e se questo è magiore di MAX si aggiorna il valore di MAX con il valore del secondo numero:

if (B>MAX) then MAX=B endif

(29)

Elementi di Informatica

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

Codifica

• si confronta il valore di MAX con il terzo numero e se questo è magigore 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 = ‘, 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 (A);

write (‘immetti il secondo numero B ‘);

read (B);

write (‘immetti il terzo numero C ‘);

read (C);

MAX=A;

if (B>MAX) then MAX=B endif

if (C>MAX) then MAX=C endif

write (‘Valore massimo = ‘, MAX);

end.

(30)

Elementi di Informatica

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

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

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 dado lanciato);

Il giocatore immette quanti euro scommette; se la puntata è valida:

Nel caso il valore del DADO è 1 oppure 6 stampa “Bravo! Hai vinto”

Nel caso il valore del DADO è 4 stampa “Lancia di nuovo il dado”

Nel caso caso il valore del DADO è 2, 3 oppure 5 stampa “Peccato, non hai vinto!”

Se ha vinto si stampal’importo della vincita pari al doppio della scommessa Se la puntata non è valida è stampato un messaggio di errore ed il

Problema: lanciato un dado, un giocatore vince se il risultato del lancio è 1 oppure 6, perde se il risultato è 2, 3 o 5, rilancia il dado se il risultato è 4. Se vince, vince il doppio della posta puntata (che non può essere più di 5 euro)

(31)

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

Elementi di Informatica 61

… 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 \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);

}

/* 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

(32)

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

Elementi di Informatica 63

… 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 ‘seme’

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

La funzione time() della libreria time.h è solitamente usata, con parametro NULL (o zero) , per generare il seme; essa fornisce un valore unsigned calcolato in base all'ora corrente del giorno, espressa in secondi.

Generazione casuale (random) di un numero intero in C

// 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);

Generazione casuale (random) di un numero intero in C

(33)

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

Elementi di Informatica 65

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 dado lanciato);

Il giocatore immette quanti euro scommette; se la puntata è valida:

Nel caso il valore del DADO è 1 oppure 6 stampa “Bravo! Hai vinto”

Nel caso il valore del DADO è 4 stampa “Lancia di nuovo il dado”

Nel caso caso il valore del DADO è 2, 3 oppure 5 stampa “Peccato, non hai vinto!”

Se ha vinto si stampal’importo della vincita pari al doppio della scommessa Se la puntata non è valida è stampato un messaggio di errore ed il

programma termina

Problema: lanciato un dado, un giocatore vince se il risultato del lancio è 1 oppure 6, perde se il risultato è 2, 3 o 5, rilancia il dado se il risultato è 4. Se vince, vince il doppio della posta puntata (che non può essere più di 5 euro)

Esercizio

Definizione dei dati del problema:

I: DADO, di tipo intero, rappresentante il dado da lanciare;

scommessa, importo in euro della posta puntata

Pi: il valore di dado deve essere compreso tra 1 e 6, estremi inclusi;

il valore di scommessa deve essere maggiore di zero e non superare 5 U: vinto, variabile booleana indicante se il giocatore ha vinto

vincita, importo della vincita

Pu: vinto = VERO importo vincita uguale al doppio di scommessa;

(34)

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

Elementi di Informatica 67

Esempio

Nome variabile Descrizione Tipo

DADO Variabile rappresentante il dado INT

scommessa importo scommesso INT

Nome variabile Descrizione Tipo

vinto il giocatore ha vinto BOOL

vincita importo vincita INT

Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Progettazione

Descrizione del metodo di elaborazione:

• Il giocatore immette l’importo che vuole scommettere;

• Se l’importo è non maggiore di zero o supera 5 si stampa "IMPORTO SCOMMESSA NON VALIDO !!! FINE PROGRAMMA”,

altrimenti

• Si assegna alla variabile DADO un valore, compreso tra 1 e 6, generato in maniera casuale usando le funzioni srand () e rand() del linguaggio C (libreria <stdlib.h>) e si stampa il valore di DADO;

• Nel caso che DADO ha valore:

• 1 oppure 6: si stampa “Bravo! Hai vinto”, si pone vinto=1 e calcola vincita= scommessa * 2;

• 4: si stampa “Lancia di nuovo il dado”

• 2, 3 oppure 5: si stampa “Peccato, non hai vinto!”

• Se vinto=1 si stampa l’importo della vincita pari al doppio degli euro

(35)

Elementi di Informatica

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

#include <stdlib.h>

#include <time.h>

main ()

{ int DADO, vinto=0, scommessa, vincita;

printf("quanti euro scommetti ? \n");

scanf("%d", &scommessa);

if ((scommessa<=0)|| (scommessa>5))

printf("IMPORTO SCOMMESSA NON VALIDO !!! FINE PROGRAMMA \n");

else

{ srand(time(NULL)); //inizializza il generatore di numeri random DADO= rand() % 6; //genera un numero casuale fra 0 e 5 DADO++; // per ottenere un valore tra 1 e 6

printf(" Lancio dado = %d \n ", DADO);

switch (DADO)

{ case 1: case 6: { vinto=1;

vincita= scommessa * 2;

printf ("Bravo! Hai vinto \n");

break; }

case 2: case 3: case 5: printf("Peccato, non hai vinto!\n"); break;

case 4: printf("Lancia di nuovo il dado \n"); break;

default: printf("ERRORE !!!\n"); break;

}

if (vinto == 1) printf ("Hai vinto %d euro \n", vincita);

} // fine else system("Pause");

}

(36)

Elementi di Informatica

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

Esercizio

Analisi e Specifica

Definizione del problema: Scrivere un programma che

assegnati, in modo casuale, tre valori, compresi tra 1 e 10 estremi inclusi, a tre variabili A, B, C (rappresentanti le tre carte estratte dal mazzo), faccia scegliere al giocatore una carta: se questa ha il valore massimo fra le tre far stampare “Bravo! Hai vinto”

altrimenti far stampare “Peccato, non hai vinto! Ritenta”

Problema: Estratte tra carte (indicate con A, B, C) da un mazzo di carte da gioco napoletane e messele coperte sul tavolo,

indovinare quella con il valore più alto tra le tre

Esercizio

Definizione dei dati del problema:

I: tre variabili A, B, C, di tipo intero, ciascuna rappresentante una delle carte estratte dal mazzo;

la carta scelta dal giocatore;

Pi: i valori delle tre variabili devono essere compresi tra 1 e 10, estremi inclusi; la carta scelta deve essere A, B o C

U: trovatomax, variabile booleana indicante se la carta scelta è quella con valore massimo.

Pu: trovatomax = VERO messaggio “Bravo! Hai vinto”;

trovatomax =FALSO messaggio “Peccato, non hai vinto! Ritenta”

(37)

Elementi di Informatica

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

Nome variabile Descrizione Tipo

A, B,C Variabili rappresentanti le tre carte INT cartascelta Carta scelta dal giocatore CHAR

Nome variabile Descrizione Tipo

trovatomax trovata carta con valore max BOOL Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo

MAX massimo tra le tre carte INT valscelta valore carta scelta INT Tabella delle variabili di algorimo

Progettazione

Descrizione del metodo di elaborazione:

• A ciasuna delle tre variabili A, B, C è assegnato un valore, compreso tra 1 e 10, generato in maniera casuale usando le funzioni srand () e rand() del linguaggio C (libreria <stdlib.h>) e si pone trovatomax=FALSO

• Si trova il massimo tra i tre valori generati in modo casuale:

• si considera il valore di A come quello massimo, ovvero si assegna alla variabile MAX il valore della variabile A;

• si confronta il valore di MAX con quello della variabile B se questo è maggiore di MAX si aggiorna il valore di MAX con il valore di B;

• si confronta il valore di MAX con quello della variabile C e se questo è maggiore di MAX si aggiorna il valore di MAX con il valore di C;

• si chiede al giocatore di immettere la lettera A, B, C corrispondete alla carta che lui sceglie

• Se il giocatore immette un valore diverso da A, o B, o C viene visualizzato il messaggio "Immesso valore non valido - FINE PROGRAMMA !!” ed il

(38)

Elementi di Informatica

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

• Nel caso che la variabile cartascelta ha valore:

• ‘A’, si verifica se il valore della variabile A è uguale a quello della variabile MAX ed in tal caso si pone trovatomax=VERO e si assegna alla variabile valscelta il valore della variabile A

• ‘B’, si verifica se il valore della variabile B è uguale a quello della variabile MAX ed in tal caso si pone trovatomax=VERO e si assegna alla variabile valscelta il valore della variabile B

• ‘C’, si verifica se il valore della variabile C è uguale a quello della variabile MAX ed in tal caso si pone trovatomax=VERO e si assegna alla variabile valscelta il valore della variabile C

• Si verifica il valore della variabile trovatomax: se è VERO si visualizza il messaggio "Bravo hai Vinto !!” altrimenti si visualizza il messaggio “Non hai vinto! Riprova”

• Si visualizza il valore della variabile cartascelta e quello di MAX

• Si visualizzano i valori delle tre variabili A, B, C

• Il programma termina

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

main ()

{ // carta più alta vince int A, B, C, MAX;

char cartascelta;

int valscelta;

int trovatomax=0; // inizializzata a FALSO

srand(time(NULL)); //inizializza il generatore di numeri random A= rand() % 10; //genera un numero casuale fra 0 e 9 A++; // per ottenere un valore tra 1 e 10 B= rand() % 10; //genera un numero casuale fra 0 e 9 B++; // per ottenere un valore tra 1 e 10 C= rand() % 10; //genera un numero casuale fra 0 e 9 C++; // per ottenere un valore tra 1 e 10

Esempio: il programma in C

(39)

Elementi di Informatica

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

MAX=A;

if (B>MAX) MAX=B;

if (C>MAX) MAX=C;

// Il giocatore sceglie la carta

printf ("Quale carta scegli: A, B, C ?\n");

scanf ("%c", &cartascelta);

if ((cartascelta != 'A') && (cartascelta != 'B') && (cartascelta != 'C')) printf("Immesso valore non valido - FINE PROGRAMMA !!\n");

else {

switch (cartascelta)

{case 'A': {if (A == MAX) trovatomax=1;

valscelta=A;

break;}

case 'B': { if (B == MAX) trovatomax=1;

valscelta=B;

break;}

case 'C': { if (C == MAX) trovatomax=1;

valscelta=C;

break;}

} // chiude switch

if(trovatomax==1)

printf ("Bravo hai Vinto !! \n\n");

else

printf("Peccato non hai vinto! Riprova \n\n");

printf("Carta scelta = %d - carta massima = %d \n\n", valscelta, MAX);

printf("A= %d B= %d C=%d \n", A,B,C);

} // chiude else system("Pause");

(40)

Elementi di Informatica

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

Esempio Analisi e Specifica

Definizione del problema: Dato in input il valore di N, numero intero maggiore di zero, calcolare

ovvero la sommatoria dei numeri da 1 a n Definizione dei dati del problema:

I: N Pi: N>0

U: la sommatoria dei numeri da 1 a N Pu: la sommatoria è maggiore di 0

Esempio

Nome variabile Descrizione Tipo

N estremo superiore della sommatoria INT

Nome variabile Descrizione Tipo

Sommatoria Sommatoria INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

(41)

Elementi di Informatica

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

Progettazione

Descrizione del metodo di elaborazione:

• è letto il valore di N

• si verifica il valore di N e la lettura è ripetuta se N=<0

• si inizializza il valore di Sommatoria a zero

• si inizializza il valore di i a uno

• si ripetono, mentre i è non maggiore di N, le seguenti due istruzioni:

• si incrementa di i il valore di Sommatoria

• si incrementa di (uno) 1 il valore di i

• alla fine del ciclo si visualizza il valore di Sommatoria

Esempio

Nome variabile Descrizione Tipo N estremo superiore della sommatoria INT

Nome variabile Descrizione Tipo

Sommatoria Sommatoria INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo i indice elemento sommatoria e di controllo di ciclo INT Tabella delle variabili di algoritmo

(42)

Elementi di Informatica

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

#include<stdio.h>

main()

{ // Calcola la sommatoria dei numeri interi da 1 a N int i, N; long Sommatoria;

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

// continua a leggere N mentre è NON maggiore di zero scanf("%d", &N);

while (N<=0)

{ printf (”Immesso un valore non positivo, Immetti il valore di N \n”);

scanf("%d", &N);

}

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

Esempio - il programma in C

Errore!! Manca l’incremento della variabile i !!!

Sommatoria incrementata solo di 1 (uno) !

Ciclo NON convergente ! // ciclo while per calcolare la sommatoria

while (i<=N)

Sommatoria=Sommatoria + i;

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

}

#include<stdio.h>

main()

{ // Calcola la sommatoria dei numeri interi da 1 a N int i, N; long Sommatoria;

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

scanf("%d", &N);

// continua a leggere N mentre è NON maggiore di zero while (N<=0)

{ printf (”Immesso un valore non positivo, Immetti il valore di N \n”);

scanf("%d", &N);

}

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

Esempio - il programma in C

// ciclo while per calcolare la sommatoria while (i<=N)

{Sommatoria=Sommatoria + i;

i++; }

(43)

Elementi di Informatica

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

Analisi e Specifica

Definizione del problema: Dato in input il valore di N, numero intero maggiore di zero, calcolare la sommatoria dei numeri da 1 a N

… risoluzione del problema con l’uso di cicli a condizione finale …

Definizione dei dati del problema:

I: N Pi: N>0

U: la sommatoria dei numeri da 1 a N Pu: la sommatoria è maggiore di 0

Esempio

Nome variabile Descrizione Tipo

N estremo superiore della sommatoria INT

Nome variabile Descrizione Tipo

Sommatoria Sommatoria INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

(44)

Elementi di Informatica

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

Esempio Progettazione

Descrizione del metodo di elaborazione:

• è letto il valore di N

• la lettura è ripetuta se N=<0

• si inizializza il valore di Sommatoria a zero

• si inizializza il valore di i a uno

• si incrementa di i il valore di Sommatoria

• si incrementa di 1 (uno) il valore di i

• si ripetono, con un ciclo, i due passi precedenti finché i è non maggiore di N

• alla fine del ciclo si visualizza il valore di Sommatoria

Esempio

Nome variabile Descrizione Tipo N estremo superiore della sommatoria INT

Nome variabile Descrizione Tipo

Sommatoria Sommatoria INT Tabella delle variabili di ingresso

Tabella delle variabili di uscita

Nome variabile Descrizione Tipo i indice elemento sommatoria e di controllo di ciclo INT Tabella delle variabili di algoritmo

Riferimenti

Documenti correlati

«valido con riferimento a tutti quanti gli organi supremi dello Stato, in virtù del quale, a tutela della loro indipendenza, deve essere consentito.. Nell’intento di favorirne

«valido con riferimento a tutti quanti gli organi supremi dello Stato, in virtù del quale, a tutela della loro indipendenza, deve essere consentito loro di disciplinare

La Corte, al momento, risulta essersi pronunciata in un solo caso (Sez. 22494\2005), dichiarando la manifesta infondatezza di una questione di legittimità costituzionale

Mario Livio è anche Professore presso il Dipartimento di Fisica e Astronomia della Johns Hopkins University di Baltimore.. I suoi interessi di ricerca sono l’Astrofisica teorica,

Per virtù o per necessità, il mondo della comunicazione d’impresa prende coscienza di un fatto molto semplice, ovvero che alla base esiste un rapporto, un dialogo, una

carico su linee già esistenti: ovvia- mente, come è stato accennato in principio, quando s i vogliono de- durre elementi circa le percorren- ze medie, l'andamento

In altra nota ho dato gli elemen- ti necessari per calcolare l'econo- mia che consegue per i vari casi pratici dali 'utilizzazione di varie caratteristiche stradali

Corso di STATISTICA MATEMATICA Prova scritta del