1) analisi del problema 2) definizione dell`algoritmo

I FONDAMENTI della PROGRAMMAZIONE
Risoluzione dei problemi mediante il PC
1. analisi del problema
2. definizione dell’algoritmo
3. esecuzione e risoluzione
1) analisi del problema
Problema
produrre una melodia
risolvere un’equazione
Esperto
compositore
matematico
Algoritmo
spartito
formula
Esecutore
musicista
calcolatore
Es. equazione di 2° grado file: equ2
ax2+bx+c=0
1.1
def esatta e completa:
formula risolutiva delle equ di 2° grado
1.2
ricerca di algoritmi già esistenti:
non è conveniente ricercare algoritmi già esistenti
1.3
individuazione delle variabili di INPUT:
a, b, c
1.4
individuazione delle variabili intermedie e di OUTPUT:
D=b2-4ac; var OUT: x1, x2
1.5
necessità o meno di usare un PC:
è conveniente il PC se il numero di equ è elevato
2) definizione dell’algoritmo
algoritmo: una serie finita di operazioni eseguite in sequenza che fornisce la soluzione
l’algoritmo deve essere:
non ambiguo
finito nei passi
esaustivo – contenere tutte le possibili soluzioni
riproducibile – stessi input, stesse risoluzioni
descrizione
a. linguaggio naturale
b.
“
ad alto livello
c.
“
specialistico
d. diagrammi di flusso, pseudocodifica
3) realizzazione tramite PC
a. linguaggio macchina
b.
“
ad alto livello
c.
“
orientato al problema
diagrammi di flusso
un insieme di blocchi collegati da linee orientate
la forma del blocco indica il tipo di operazione, ovvero il tipo di istruzioni che il blocco contiene;
un blocco può contenere più istr. Che verranno eseguite in sequenza dall’alto verso il basso
Inizio o fine
IN e OUT
Assegnazione
selezione
l’algoritmo comunica tramite dati
dati:
hanno un nome “identificatore” associato all’indirizzo della locazione di memoria
i dati possono essere costanti e variabili:
costanti:
dato che mantiene lo stesso valore per tutta la durata del programma
variabili:
possono variare nel corso del programma
Espressioni: sequenza di costanti e variabili legate da operatori
Aritmetiche
Alfanumeriche
Logiche
Relazionali, confronto fra due espr. dello stesso tipo
STRUTTURE DEI FLOW-CHART
SEQUENZA
ISTR1
ISTR2
ISTR3
SELEZIONE
A UNA VIA
?
A DUE VIE
V
ISTR
ISTR1
V
?
F
F
ITERAZIONE
PRECONDIZIONALE
POSTCONDIZIONALE
ISTR
?
V
ISTR
F
V
?
F
ISTR2
Un algoritmo si dice STRUTTURATO se usa solo le strutture:
SEQUENZA-SELEZIONE-ITERAZIONE
Tecniche di programmazione:
TOP-DOWN: dal generale al particolare; prima il problema generale che viene poi scisso in tanti
sottoproblemi
BOTTOM-UP: dal particolare al generale; è usato in fase di verifica/correzione (debugging)
Problema: risoluzione equazione di primo grado ax+b=0 senza condizioni (file: equ1)
inizio
int a,b;
double x;
Leggi: a,b
x← -b/a
Stampa: x
a,b
fine
//************ file: equ1 *************
// autori: Nome Cognome Classe
// data: gg/mm/aaaa
// descrizione: RISOLUZIONE EQUAZIONE DI 1° GRADO
#include <iostream.h>
#include <math.h>
#include<stdio.h>
#include<stdlib.h>
int a,b;
float x;
main()
{
cout<<" inserire a:";
cin>> a;
cout<<" inserire b:";
cin>> b;
x=-b/a;
cout<<"la soluzione x="<< x << endl;
}
Problema: risoluzione equazione di primo grado ax+b=0 (con condizioni )
inizio
Leggi: a,b
V
F
a<>0
x ← - b/a
V
F
b=0
Stampa: x
Stampa:
soluzione
indeterminata
Stampa: non
esiste
soluzione
fine
//************ file: equ1 cond *************
// autori: Nome Cognome Classe
// data: gg/mm/aaaa
// descrizione: RISOLUZIONE EQUAZIONE DI 1° GRADO con condizione
#include <iostream.h>
#include <math.h>
#include<stdio.h>
#include<stdlib.h>
int a,b;
float x;
main()
{
cout<<" inserire a:";
cin>> a;
cout<<" inserire b:";
cin>> b;
if (a<>0)
{
x=-b/a;
cout<<x;
}
else {
if (b==0)
{
}
else
}
}
{
}
cout<<”soluzione indeterminata”
cout<<”non esiste soluzione”
Problema: risoluzione equazione di secondo grado ax2+bx+c=0
inizio
Leggi: a,b,c
D←b2-4ac
F
V
D<0
RX1←-b/(2a)
RX2←RX1
IX1←SQRT(-D)/(2a)
IX2←-IX1
RX1←(-b+SQRT(D))/(2a)
RX2←(-b-SQRT(D))/(2a)
IX1←0
IX2←0
Stampa: RX1,IX1,RX2,IX2
fine
{
leggi:a,b,c
D=b2-4ac
If (D<0)
{
RX1=b/(2a)
…………..
…………..
…………..
else
}
{
RX1=(-b+SQRT(D))/(2a)
………………………….
………………………….
………………………….
}
stampa: RX1,IX1,RX2,IX2
}