Le basi della programmazione La programmazione Problemi algoritmi programma I problemi Il problema è un quesito che deve avere una risposta (prepara il caffè, scrivere un tema, calcolare l’equazione, ec..) Processo risolutivo È un insieme di passi da svolgere per giungere alla soluzione del problema Figure del processo risolutivo Risolutore : chi definisce il processo risolutivo Esecutore : colui che esegue il processo risolutivo descritto dal risolutore Il computer Esegue i passi definiti e studiati dall’uomo L’uomo rimane l’elemento Centrale di tutte le attività Formalizzazione del problema È un processo essenziale per raggiungere in ultimo stadio alla soluzione Del problema Fasi della formalizzazione del problema : 1. rigorosa lettura del testo e rielaborazione in caso di ambiguità 2. Analisi 3. Obiettivo da raggiungere o soluzione 4. Evidenziare dati : 1. espliciti informazioni da assumere per giungere alla soluzione 2. Impliciti dati disponibili all’inizio del procedimento Per risolvere un problema Individuare le informazioni di partenza Individuare l’obiettivo da raggiungere Individuare il processo risolutivo : Trasformare i dati a disposizione Sottoporli a un processo di elaborazione (logico matematico, ect.) Ottenere i dati finali Verificare la soluzione trovata Ricerca della soluzione Conoscere la realtà di interesse, la realtà che il problema prende in esame Utilizzare metodi risolutivi già sperimentati Scomporre il problema in sottoproblemi di complessità più limitata Dal problema al programma Il computer diviene lo strumento per l’elaborazione dei dati Fasi di un processo : 1. Immissione dati (input) 2. Trattamento (elaborazione) 3. Emissione (output) La risoluzione del problema : Si scompone in passi o azioni L’azione per essere tale deve avere : Esecutore Oggetti sui cui opera l’esecutore La trasformazione sugli oggetti In un ben definito tempo processo Le azioni sono : sequenziali Elementari cioè non scomponibili L’insieme delle azioni elementari che si svolgono in modo Sequenziale prende il nome di PROCESSO Storia algoritmo Proviene dalla matematica Indica regole o operazioni da compiere per fare calcoli o risolvere problemi Deriva dal nome di un algebrista arabo del IX secolo Al-khuwarizmi ALGORITMO Si intende una sequenza finita e ordinata di azioni, univocamente Interpretabili, ciascuna delle quali deve essere precisamente Definita. L’ esecuzione fornisce dei risultati di classi di problemi per ogni Valore di dati forniti in ingresso Altra definizione Per algoritmo si intende la descrizione di un insieme finito di istruzioni , che devono essere eseguite per portare a termine un dato compito e per raggiungere un risultato definito in precedenza Caratteristiche fondamentali dell’algoritimo Preciso e non ambiguo Finito Generale Dettagliato (ogni passo corrisponde azioni elementari) Deterministico Completo ed esaustivo Osservabile nei risultati L’uomo per comunicare usa il linguaggio naturale Un algoritmo scritto in linguaggio Comprensibile al computer Prende il nome di programma sorgente L’attività di traduzione Dell’algoritmo prende il nome di codice Lavoro di programmazione I programmi comprensibili alla macchina Devono essere scritti in un linguaggio di programmazione (pascal, vb, c++, java) la persona in grado di scrivere programmi comprensibili per la macchina è il programmatore Linguaggio di programmazione È quel linguaggio che viene usato per tradurre l’algoritmo in una forma comprensibile all’elaboratore Il risultato di questa traduzione si chiama programma Fase iniziale di programmazione inizio Fase di analisi Fase di progetto Fase di realizzazione o implementazione Fase di verifica Problema analisi algoritmo Traduzione linguaggio (Programma sorgente) Correzione errori (debugging) Collaudo (testing) fine Il programma Composto da istruzioni e dati Le istruzioni rappresentano le azioni da svolgere sui dati DATI PROGRAMMA ISTRUZIONI I linguaggi simbolici o di programmazione Nel linguaggio dovremo rispettare : Regole sintattiche = modalità per scrivere le frasi o istruzioni in modo corretto Il lessico = Gli identificatori = le parole riconosciute dal linguaggio il nome che il programmatore assegna ai dati (variabili, costanti, numeriche alfanumeriche e logiche) Rappresentazione degli algoritmi Grafici informali Metodi grafici I passi dell’algoritmo sono rappresentati mediante simboli, associati a regole di interpretazione, rappresentano : Le istruzioni Il flusso dell’elaborazione seguito durante lo svolgimento Il metodo grafico più diffuso, è denominato diagramma a blocchi o di flusso dall’inglese FLOWCHART Metodi informali Consiste nel rappresentare i passi risolutivi del processo di un problema per mezzo di un linguaggio informale, simile a quello naturale, detto pseudolinguaggio o linguaggio per la progettazione di programmi Si dice psedocodice l’insieme di frasi scritte nel linguaggio di Progetto che rappresentano (codificano) le operazioni da compiere Per la risoluzione del problema Tipi di dati Variabili e costanti variabili Le variabili sono dei contenitori di dati, che possono cambiare durante l’ esecuzione dell’algoritmo Il valore di una variabile deve : essere memorizzato in una cella (contenitore) di memoria Individuarla attraverso un nome che la identifichi Definire il suo tipo, ciò permette di stabilire l’insieme di valori che può assumere e le operazioni che possono essere effettuate. Schema di Nome variabile variabile Contenuto della variabile INDIRIZZO 8 Cella di memoria costante Rappresenta un dato fisso che non può cambiare durante lo sviluppo dell’algoritmo. Il valore è : Memorizzato in una cella di memoria Identificata da un nome simbolico Nome costante Contenuto della costante INDIRIZZO 20 Cella di memoria Nome variabile Aliquota_iva Contenuto variabile 20 Cella di memoria dati Possono essere di tipo diverso : Numerici Alfanumerici Logici Per lavorare correttamente è necessario dichiarare il loro tipo Tipi di dati in Visual basic Tipo dato Dimen Descrizione Intervallo sione valori Operazioni ammesse Boolean 2 byte True /false 0/1 Not/ or /and/xor Byte 1 byte Numeri positivi da 0 a 255 0 – 255 + - * / MOD Currency 8 Intero con 4 cifre decimali utile nei calcoli finanziari -922337203685477,5808 + - * / MOD ^ +922337203685477,5807 Date 8 byte Data espressa con 8 caratteri e valori ora 1 gen 100 al 31 dic 9999 Double 8 byte Numeri in virgola mobile + - * / MOD integer 2 byte Numeri interi - 32.768 + 32767 + - * / MOD long 4 byte Numeri interi -2.147.483.648 +2.147.483.647 + - * / MOD single 4 byte Numeri in virgola mobile - + 3,402823E38 + - * / MOD string 10+2 byte Valori alfanumerici -2.147.483.648 +2.147.483.647 & concatenamento variant 16 byte Converte un tipo in un altro in base alle necessità object 4 byte oggetto tutte Riferimento ad un oggetto variabili Ciclo di vita e visibilità Ciclo di vita delle variabili o lifetime Ciclo di vita delle variabili è il periodo per il quale tale variabile resta attiva e utilizza memoria centrale Alcune hanno una durata pari all’intera applicazione Altre vengono create e distrutte diverse volte nel ciclo dell’applicazione Visibilità delle variabili L’area di visibilità o scope rules è: È la porzione di codice da cui si può accedere a tale variabile Alcune sono private e di solo a una porzione di codice in cui sono state dichiarate Altre sono public ossia visibili a tutto il codice Programmazione strutturata Strutture di controllo algoritmo La stesura dell’algoritmo risolutivo di un problema è una fase molto delicata della programmazione Pertanto : È necessario stabilire un’insieme di regole necessarie alla corretta organizzazione del lavoro Le regole trasformano la programmazione da attività disordinata e laboriosa in attività sistematica e orientata al raggiungimento di un buon livello di qualità Costituisce il metodo di lavoro che va sotto il nome : Programmazione strutturata Programmazione struttura Metodo di strutturazione degli algoritmi, conforme ad un insieme di regole, che rendono più facile : la costruzione la lettura La manutenzione Strutture di controllo Sono Sequenziale Condizionale o di selezione Iterativa o ciclica La teoria della programmazione strutturata enuncia il seguente dettato : Qualsiasi algoritmo può essere scritto utilizzando Soltanto le tre Strutture di base o fondamentali : 1. Sequenziale 2. Condizionale 3. iterativa Teorema di Bohm-Jacopini (1966) Questi 3 modelli organizzativi sono detti : strutture di controllo Sequenza Istruzione Istruzione Istruzione ….. ….. Istruzione 1 2 3 Condizionale o alternativa Se condizione Allora Istruzione 1 Altrimenti N Istruzione 2 Fine se Ciclica o ripetizione Ripeti istruzione / i Finchè condizione Rappresentazione grafica Strutture di controllo Struttura sequenziale Istruzione 1 Istruzione 2 Istruzione 3 Istruzione N Le istruzioni vengono eseguite Una di seguito all’altra, Secondo l’ordine del flow chart Struttura condizionale/ alternativa condizione Istruzione 1 Istruzione 2 Se la condizione è vera viene Eseguita istruzione 1 Se la condizione è falsa Viene eseguita istruzione 2 Struttura ciclica / iterativa Esegue istruzione/i finchè la Condizione rimane falsa, per Condizione vera esce dal ciclo Istruzione/i F condizione V I linguaggi di programmazione È il linguaggio che viene utilizzato per tradurre l’algoritmo in una forma comprensibile all’elaboratore Il risultato della traduzione è detta programma I moderni linguaggi di programmazione sono : Tipo evoluto o ad alto livello • Utilizzano termini del linguaggio naturale • Sono più vicini al problema • Facilitano il lavoro del programmatore Traduzione dei programmi Il testo di un programma scritto usando il linguaggio di programmazione e detto Sorgente (deve essere tradotto nel linguaggio macchina) La fase di traduzione viene fatta dal programma traduttore che genera una sequenza di istruzioni eseguibili Tipi di traduzione Interpretazione compilazione inteprete Si dice che un programma sorgente viene interpretato, quando : Il programma che prende il nome di INTERPRETE considera il testo sorgente istruzione per istruzione, le traduce mentre le esegue È consigliato usarlo solo in fase di progettazione compilazione Il programma traduttore è detto compilatore e trasforma l’intero programma sorgente in linguaggio macchina, memorizzando in un file i risultati. un programma compilato una sola volta può essere eseguito, senza bisogno di altri interventi Il risultato della compilazione si chiama programma oggetto Fase di link Alla compilazione deve far seguito la fase di link = collegamento Viene svolta da un programma apposito detto LINKER Aggiunge al programma compilato i moduli del compilatore, che realizzano la le funzioni richieste dai vari comandi, e collega i dati presenti in M.C. Programma sorgente Testo del programma Controllo della correttezza Dei termini Analisi lessicale Controllo della corretta Dei costrutti dei termini Analisi sintattica Programma oggetto Programma Tradotto in Linguaggio Machina Programma oggetto Linking LINKING collegatore Programma Eseguibile Programma eseguibile