Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

23
Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi

Transcript of Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Page 1: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Informatica B

Allievi Elettrici

AA 2000-01

La progettazione per raffinamenti successivi

Page 2: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Un passo ulteriore

• Verifica dei dati di ingresso: segnalazione dei valori inaccettabili e del motivo

• Fa parte della gestione dell’interazione con l’utente: alcune volte piu’ complicata dell’algoritmo stesso che risolve il problema

Page 3: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Verifica dei dati di ingresso

1. Leggi(N)

2. If N < 0 then End

3. S=0

4. I=1

5. while I <= N do

6. { S=S+I

7. I=I+1}

8. Scrivi(“La somma e’” S)

9. End

• implementa un ciclo a condizione iniziale

• e’ corretto

per qualsiasi N!

• non entra nel ciclo se N=0

Page 4: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Un problema piu’ generale

• La verifica dei dati di ingresso e’ un aspetto della tecnica di raffinamento dell’algoritmo per passi successivi:– Si trascurano volontariamente alcuni dettagli– Ci si concentra sul problema fondamentale– In seguito si introducono successivi

miglioramenti

Page 5: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Riconoscimento del tipo di un triangolo

• Dati tre numeri interi

• Riconoscere se possono essere i lati di un triangolo

• Riconoscere se il triangolo e’ equilatero, isoscele o scaleno

Page 6: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Riconoscimento del tipo di un triangolo: diagramma di flusso

Leggi X,Y,Z

Puo’ essere un triangolo?Scrivi:

non e’ un triangolo

Tre lati uguali?

Due lati uguali?Scrivi:

triangolo equilatero

Scrivi: triangolo isoscele

Scrivi: triangolo scaleno

inizio

fine

fine

fine

NO SI

SI NO

NOSI

Page 7: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Raffinamento

• In cosa consiste il test per vedere se puo’ essere un triangolo?

• In cosa consiste il test dei tre lati uguali?

• In cosa consiste il test dei due lati uguali?

Page 8: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Puo’ essere un triangolo?

• X < Y + Z? se NO, stampa “non e’ un triangolo”

• Y < X + Z? se NO, stampa “non e’ un triangolo”

• Z < Y + X? se NO, stampa “non e’ un triangolo”

Si tratta di tre test in successione

Page 9: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Tre lati uguali?

• X = Y? se SI,

• Y = Z? se SI, stampa “triangolo equilatero”

Due lati uguali?• X = Y? se SI, stampa “triangolo isoscele”

• Y = Z? se SI, stampa “triangolo isoscele”

Nota: in realtà già all’uscita del primo “se” sapevamo che il triangolo era isoscele...

Page 10: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Progettazione per raffinamenti successivi

• Fa parte di una tecnica più generale dell’Ingegneria del Software e in generale dell’informatica: divide at impera

• Dà origine alle varie tecniche di modularizzazione

• Vedremo nella seconda parte del corso che ciò si esprime concretamente nell’uso delle procedure e funzioni

Page 11: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Informatica B

Allievi Elettrici

AA 2000-01

Fondamenti della programmazione in linguaggio C

(I)

Page 12: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Struttura di un programma(linguaggio di alto livello)

• Parte dichiarativa: dichiarazione degli elementi del programma (dati e funzioni)

• Parte eseguibile: istruzioni:– assegnazione– controllo:

» condizionali

» cicli – input/output

Page 13: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Struttura di un programma Cinclusione librerie /*serve per poter richiamare funzioni utili */

dichiarazioni di variabili e funzioni

main()

{

dichiarazioni di variabili e funzioni

istruzione 1; /* tutti i tipi di operazioni di cui abbiamo parlato: */

istruzione 2; /* assegnazione, controllo (condizionali, cicli), */istruzione 3; /* input/output */

istruzione 4;

…..

istruzione N;

}

Page 14: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Il nostro primo vero programma C#include <stdio.h>

/* Calcolo dell’area di un triangolo */

main()

{

int base;/*dichiarazione delle tre variabili */

int altezza;

int area;

base = 3;/* assegnazione dei valori*/

altezza = 7;

area = (base * altezza)/2; /*assegnazione del valore di una espressione

*/

printf(“%d”,area); /*output */

}

Page 15: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Dichiarazione dei dati:tipi di dati

Il tipo e’ un concetto astratto che esprime:

• allocazione di spazio

• operazioni permesse

Page 16: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Principali tipi fondamentali del C• int (interi) : valori:{…-4,-3,-2,-1,0,1,2,3,4,…

dimensione: 1 parola, (=16 bit nei vostri PC)

operazioni: {+, -, *, /}• char (caratteri): valori: “a”, “b”, “x”, “Y”, “A”, “4”,...

dimensione: 1 byte

operazioni: {<, >, = …} (ma in C anche aritmetiche !!)• float (reali): valori: R

dimensione: 2 parole, (=32 bit nei vostri PC)

operazioni: {+, -, *, /, , …>, <, }… alcune realizzate mediante funzioni apposite

Page 17: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Dichiarazione dei dati

Gli oggetti possono avere una struttura molto complessa. Esempi:

• vettori (array): A[1],A[2],…A[N]

a una o piu’ dimensioni

• strutture:

data:giorno: 1..31,

mese: string,

anno: integer

Page 18: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Un altro esempio#include <stdio.h>

/* Calcolo dell’area di un triangolo */

int base,altezza,area;/*dichiarazione delle variabili*/

main()

{

printf(“Area del triangolo\n\n”);

printf(“Inserisci Base:”);

scanf (“%d”,&base); /*input */

printf(“Inserisci Altezza:”);

scanf (“%d”,&altezza); /*input */

area = (base * altezza)/2; /*assegnazione del valore di una espressione */

printf(“Base: %d\n”,base); /*output */

printf(“Altezza: %d\n”,altezza);

printf(“Area: %d\n”,area);

}

Page 19: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Cosa accade sullo schermoArea del triangolo

Inserisci Base: _

[una volta inserito il valore (ad es. 10):]

Inserisci Altezza:_

[una volta inserito il valore (ad es. 15):]

Base:10

Altezza:15

Area:75

Page 20: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Uso di istruzioni di I/O e di una funzione matematica

#include <stdio.h>

#include <math.h>

int a,b,segmento,lunghezza;/*dichiarazione variabili*/

main()

{

printf(“Calcolo lunghezza di un segmento\n\n”);

printf(“Inserisci Primo Estremo:”);

scanf (“%d”,&a); /*input */

printf(“Inserisci Secondo Estremo:”);

scanf (“%d”,&b); /*input */

segmento = a-b;

lunghezza = abs(segmento); /* uso della funzione abs*/

printf(“Lunghezza del segmento:%d”,lunghezza);/*output */

}

Page 21: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Istruzioni condizionali

Anche in C esiste il costrutto a selezione semplice e quello a selezione doppia:

• if (espressione) istruzione• if (espressione) istruzione1

else istruzione2

In generale:if (espressione) {seq1. di istruzioni}

[else {seq2. di istruzioni}]

Nota: gli if possono essere nidificati

Page 22: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Frammento di programma (if nidificati)if(i<100)

if(i>0)

printf(“\n minore di 100 e maggiore di zero”);

else

if (i==0)

printf(“\n uguale a zero”);

else

printf(“\n minore di zero”);

else

if (i==100)

printf(“\n uguale a 100”);

else

printf(“\n maggiore di 100”);

Page 23: Informatica B Allievi Elettrici AA 2000-01 La progettazione per raffinamenti successivi.

Verifica dati d’ingresso (istruzioni composte)

#include <stdio.h>

/* Calcolo dell’area di un triangolo */

int base,altezza,area;/*dichiarazione delle variabili*/

main()

{

printf(“Area del triangolo\n\n”);

printf(“Inserisci Base:”);

scanf (“%d”,&base); /*acquisizione valori */

printf(“Inserisci Altezza:”);

scanf (“%d”,&altezza); /*input */

if (base>=0 && altezza>=0)

{area = (base * altezza)/2; /*caso valori d’ingresso accettabili */

printf(“Base: %d\n”,base); /*output */

printf(“Altezza: %d\n”,altezza);

printf(“Area: %d\n”,area);}

else printf(“Valori non accettabili”);

}