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 }