






Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Una introduzione a strutture e caratteristiche degli algoritmi, inclusa la definizione, la differenza tra algoritmo e sua rappresentazione, strutture iterative come ricerca sequenziale e ordinamento per inserimento, e linguaggi di programmazione come prima, seconda e terza generazione. Il testo illustra concetti fondamentali per comprendere l'esecuzione di algoritmi e la loro implementazione in vari contesti.
Tipologia: Appunti
1 / 11
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!







UN ALGORITMO insieme dei passi che specificano come eseguire un dato compito. Sono alla base di qualsiasi attività comune. «Un algoritmo è un insieme ordinato di passi eseguibili e non ambigui che giunge certamente a destinazione»
1. Primo requisito: insieme ordinato di passi Deve esistere una struttura ben definita dell’ordine di esecuzione dei passi di un algoritmo Non è richiesto che la sequenza di esecuzione dei passi sia lineare Esempio 1: Algoritmi paralleli composti da più sequenze di passi affidate, per l’esecuzione, a differenti processori. Esempio 2: Circuiti flip-flop che eseguono, in ogni porta logica, singoli passi dell’algoritmo, secondo una relazione di causa ed effetto 2. Secondo requisito: passi eseguibili Deve consistere di passi effettivamente eseguibili (ovvero, di passi effettivi) Esempio : Si elenchino tutti i numeri interi positivi. Non è un algoritmo. L’esecuzione di tale istruzione non è possibile perché i numeri interi positivi sono infiniti 3. Terzo requisito: non ambigui L’esecuzione di ogni passo dell’algoritmo richiede la mera esecuzione delle istruzioni ivi contenute (non servono capacità creative) «Durante l’esecuzione di un algoritmo le informazioni presente nello stato del processo devono essere sufficienti a stabilire univocamente e completare le azioni da svolgere» 4. Quarto requisito: giungere certamente a terminazione L’algoritmo deve avere termine. Il processo da questi disegnato deve concludersi restituendo un risultato e non ripetersi all’infinito Talvolta si utilizza il termine ALGORITMO IN MODO IMPROPRIO per riferirsi a sequenze di passi che potrebbero non giungere a terminazione (Es: algoritmo della divisione (1/3); es2: monitoraggio dei segni vitali di un paziente ospedalizzato: la sequenza dei passi è ripetuta indefinitamente) Differenza tra L’ALGORITMO E LA SUA RAPPRESENTAZIONE : Un algoritmo è astratto e distinto dalla sua rappresentazione Algoritmo: entità astratta o concettuale RAPPRESENTAZIONE DELL’ALGORITMO : rappresentazione fisica La distinzione può determinare ambiguità nella comunicazione dell’algoritmo a terzi (Es: converti il numero decimale dato, nella sua equivalenza in esadecimale. Per gli specialisti quest’istruzione sarà chiara, per i profani risulterà ambigua e poco dettagliata). L’ambiguità è nella rappresentazione dell’algoritmo e non nell’algoritmo stesso. Differenze tra : PROGRAMMA rappresentazione formale di un algoritmo che è stata progettata per essere eseguita da un computer.
PROCESSO l’attività di esecuzione di un programma, ovvero dell’algoritmo rappresentato dal programma, ovvero dell’algoritmo.
Programma, processo, algoritmo: sono dei concetti distinti ma legati tra di loro PSEUDOCODICE: notazione utilizzabile per esprimere informalmente le idee durante il processo di sviluppo di un algoritmo. Si realizza rilassando le regole (struttura semantico-sintattica) del linguaggio formale di programmazione con cui l’algoritmo sarà espresso.
FUNZIONI : È possibile esprimere delle porzioni di codice di un programma all’interno di funzioni (o sottoprogramma, subroutine, procedura o metodo). Una porzione descrive delle attività che sono utilizzabili come strumenti astratti da altre applicazioni
È possibile utilizzare differenti approcci , come:
Top-down , si procede dal generale allo specifico (es: scomposizione di un problema mediante la metodologia di raffinamento per passi) Bottom-up , si procede dallo specifico al generale (es: costruzione di un grande sistema software combinando componenti precostituiti) In sintesi: «La scoperta di nuovi algoritmi resta un’arte, più che una scienza. […] Istruire un potenziale risolutore di problemi ad applicare alla lettera certi approcci vuol dire annullare proprio le competenze tecniche creative che dovrebbero invece essere educate»
Sono strutture di controllo in cui una serie di istruzioni viene ripetuta in modo ciclico (es: Ricerca sequenziale; Ordinamento per inserimento) L’ALGORITMO DI RICERCA SEQUENZIALE: Si occupa di verificare se è presente un valore in un elenco (lista). La ricerca ha successo se il valore si trova nella lista; altrimenti fallisce. Si ipotizza che l’elenco sia ordinato secondo una certa regola di organizzazione delle voci Ricerca sequenziale : come funziona? Si esamina la lista dall’inizio confrontando ogni voce con quella d’interesse. Le condizioni di fallimento sono le seguenti:
I CICLI : Struttura iterativa utilizzata per ripetere un’istruzione o una sequenza di istruzioni. La serie di istruzioni viene detta corpo del ciclo. Il corpo del ciclo viene eseguito in modo ripetitivo secondo quanto specificato da una condizione logica di controllo. L’esecuzione della struttura segue il pattern ciclico , fino a quando la condizione logica di controllo (parte più esposta a errori) non è più vera. L’esecuzione di un ciclo prevede 3 attività:
LA CONDIZIONE DI TERMINAZIONE: Un ciclo deve essere progettato in modo che le fasi d’inizializzazione di modifica portino alla condizione di terminazione appropriata. È un ciclo che non termina mai. STRUTTURA DEL CICLO WHILE: Il controllo della condizione di terminazione avviene prima dell’esecuzione del corpo del ciclo Se la condizione di terminazione è già soddisfatta la prima volta che viene esaminata, allora il ciclo non è mai eseguito.
Il corpo del ciclo viene eseguito prima di effettuare il controllo della condizione di terminazione Il corpo del ciclo è sempre eseguito almeno una volta.
Riassumendo: Ciclo con pre-test (struttura while)In cui il controllo della condizione di terminazione viene eseguito prima dell’esecuzione del corpo del ciclo
Ciclo con post-test (struttura repeat) In cui il controllo della condizione di terminazione è effettuato dopo l’esecuzione del corpo del ciclo.
I LINGUAGGI DI PRIMA GENERAZIONE : Sono i linguaggi macchina, ovvero dei sistemi di codifica in cifre numeriche, sono composti da sequenze di istruzioni codificate sotto forma di cifre numeriche. La scrittura di questi programmi risulta laboriosa e facilmente soggetta a errori (bug) Negli anni ‘40 i ricercatori hanno semplificato il processo di programmazione, sviluppando nuovi sistemi notazionali in cui:
I LINGUAGGI DI SECONDA GENERAZIONE : sistemi di codici mnemonici per rappresentare i programmi (linguaggi assembly). Approccio rivoluzionario alla programmazione. Debolezze dei linguaggi assembly
Il programmatore dovrà: Trovare un algoritmo risolutore di un dato problema Esprimere tale algoritmo come sequenza di comandi Dichiarativo : Si occupa di descrivere un problema: Tale sistema di programmazione applica un algoritmo prestabilito per la risoluzione di problemi, che è di uso generale. Scoprire l’algoritmo generale per risolvere una vasta classe di problemi non è banale Il programmatore dovrà: Sviluppare una dichiarazione precisa del problema Funzionale Concepisce il programma come un’entità che accetta input e produce output ( funzioni). Prevede la costruzione del programma mediante connessione di unità di programma predefinite più piccole (funzioni predefinite) affinché si ottenga la relazione input-output desiderata, in cui l’output di ogni unità è usato come input dell’unità successiva. Il processo di programmazione consiste nella costruzione di funzioni che sono dei complessi nidificati di funzioni più semplici. Un programma funzionale è costituito da un’unica istruzione in cui senza bisogno di immagazzinare dei dati in variabili, il risultato di ogni elaborazione è passato immediatamente a quella successiva Orientato agli oggetti Considera un sistema software come una collezione di unità (gli oggetti) che possono: Eseguire azioni di immediato interesse per sé Inviare richieste di azione agli altri oggetti (Gli oggetti interagiscono per svolgere le elaborazioni richieste) Esempio: l’interfaccia utente grafica. Le icone dello schermo sono implementate come oggetti che comprendono delle funzioni (i metodi) che descrivono il modo in cui l’oggetto risponde ai diversi eventi (come la relazione con il click del mouse e trascinamento sullo schermo). La forma del sistema completo assume la forma di un insieme di oggetti in grado di rispondere a determinati eventi. CARATTERISTICHE DEGLI OGGETTI Un oggetto può essere composto di dati associati a una collezione, e di metodi per l’esecuzione di attività (Es: lista di nomi e inserimento di nuovi nomi nella lista). Si tratta di caratteristiche descritte da istruzioni nel programma scritto. La descrizione delle proprietà dell’oggetto è denominata classe. LA CLASSE Gli oggetti sono «costruiti» applicando la classe che possiede le caratteristiche richieste. Un oggetto basato su una determinata classe si definisce istanza della classe. Gli oggetti sono entità distinte, ma con le stesse caratteristiche della classe a partire dalla quale sono stati costruiti (la classe è il modello di partenza) Considerazioni finali su OOP : Il paradigma orientato agli oggetti fornisce un ambiente utile allo
sviluppo del software, che si basa sull’utilizzo di componenti riutilizzabili. Esistono librerie di classi predefinite che fungono da base per i nuovi sistemi software. Le funzioni all’interno di un oggetto, sono di fatto delle piccole unità di programma imperative.