1) analisi del problema - itisforli.it 2... · analisi del problema 2. definizione dell’algoritmo...
TRANSCRIPT
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
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
Inizio o fine
IN e OUT
Assegnazione
selezione
STRUTTURE DEI FLOW-CHART
F V
F
V ? ISTR ? ISTR1 ISTR2
SELEZIONE
A UNA VIA A DUE VIE
ITERAZIONE
PRECONDIZIONALE POSTCONDIZIONALE
ISTR1
ISTR2
ISTR3
SEQUENZA
F
V F
V
?
? ISTR
ISTR
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)
//************ 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;
}
inizio
Leggi: a,b
x← -b/a
Stampa: x
a,b
fine
int a,b;
double x;
Problema: risoluzione equazione di primo grado ax+b=0 (con condizioni )
//************ 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) { cout<<”soluzione indeterminata”
}
else { cout<<”non esiste soluzione”
}
}
}
F V
F V
inizio
Stampa:
soluzione
indeterminata
b=0
a<>0
Leggi: a,b
Stampa: non
esiste
soluzione
fine
x ← - b/a
Stampa: x
Problema: risoluzione equazione di secondo grado ax2+bx+c=0
{
leggi:a,b,c
D=b2-4ac
If (D<0) {
RX1=b/(2a)
…………..
…………..
…………..
}
else {
RX1=(-b+SQRT(D))/(2a)
………………………….
………………………….
………………………….
}
stampa: RX1,IX1,RX2,IX2
}
V F
inizio
Leggi: a,b,c
D←b2-4ac
D<0
fine
Stampa: RX1,IX1,RX2,IX2
RX1←(-b+SQRT(D))/(2a) RX2←(-b-SQRT(D))/(2a)
IX1←0
IX2←0
RX1←-b/(2a)
RX2←RX1
IX1←SQRT(-D)/(2a)
IX2←-IX1