Date post: | 01-May-2015 |
Category: |
Documents |
Upload: | caprice-grilli |
View: | 216 times |
Download: | 3 times |
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
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
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
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
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
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?
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
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...
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
Informatica B
Allievi Elettrici
AA 2000-01
Fondamenti della programmazione in linguaggio C
(I)
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
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;
}
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 */
}
Dichiarazione dei dati:tipi di dati
Il tipo e’ un concetto astratto che esprime:
• allocazione di spazio
• operazioni permesse
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
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
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);
}
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
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 */
}
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
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”);
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”);
}