Algoritmi e Strutture Dati Gestione Informatica dei Dati CdL in Statistica Bruno Bertaccini La programmabilità degli elaboratori Bruno Bertaccini (mail to: [email protected]) La programmabilità degli elaboratori Introduzione Gli elaboratori elettronici sono macchine programmabili: l’utilizzatore deve fornire loro un’insieme di istruzioni che indichino le operazioni da compiere ed i dati su cui operare. Un insieme coerente di tali istruzioni si chiama PROGRAMMA Tali istruzioni, una volta memorizzate nella memoria centrale, verranno prese in considerazione dalla CPU che si occuperà dell’attivazione dei dispositivi necessari alla loro elaborazione Bruno Bertaccini (mail to: [email protected]) La programmabilità degli elaboratori Introduzione Un elaboratore elettronico, a differenza di quanto ci si potrebbe aspettare, è in grado di compiere SOLO operazioni estremamente semplici (es: una radice quadrata, una funzione trigonometrica richiedono programmi specifici) OPERAZIONI ELEMENTARI Tuttavia un elaboratore è molto veloce e può eseguire un gran numero di operazioni nell’unità di tempo (la velocità dipende anche dal fatto che le operazioni sono appunto elementari) Bruno Bertaccini (mail to: [email protected]) La programmabilità degli elaboratori Le operazioni elementari Classificazione delle istruzioni elementari in base alla diversità delle funzioni svolte dall’elaboratore e agli effetti che queste hanno sui dati. 1. Istruzioni aritmetiche e logiche 2. Istruzioni di trasferimento 3. Istruzioni di input-output 4. Istruzioni di controllo 5. Istruzioni ausiliarie Bruno Bertaccini (mail to: [email protected]) La programmabilità degli elaboratori Le operazioni elementari Istruzioni Aritmetiche e Logiche. servono ad eseguire operazioni aritmetiche ( + ,- , * , / ) e logiche (NOT, AND, OR) sui dati presenti nella memoria centrale Istruzioni di Trasferimento. permettono lo spostamento dei dati all’interno della memoria centrale e tra questa e i registri presenti nella unità aritmetico logica (ALU) della CPU Bruno Bertaccini (mail to: [email protected]) La programmabilità degli elaboratori Le operazioni elementari Istruzioni Input-Output. consentono l’immissione e l’emissione dei dati nella e dalla memoria centrale; il dialogo avviene generalmente con in i dispositivi di I/O e e con le memorie ausiliarie. Istruzioni di Controllo. guidano lo svolgimento dell’elaborazione controllando l’ordine di esecuzione delle istruzioni elementari; sono eseguite dalla unità di controllo (CU) della CPU. Istruzioni Ausiliarie. sono deputate a riordinare alcuni dispositivi fisici dell’elaboratore e a controllarne lo stato. Bruno Bertaccini (mail to: [email protected]) La programmabilità degli elaboratori Le operazioni elementari Operazione Elementare (generalizzata) codice operativo operando indica il tipo di operazione da compiere identifica i dati o i dispositivi che interessano l’operazione L’insieme dei codici operativi e le regole che guidano il modo di esprimere gli operatori costituiscono un sistema di programmazione, un sistema completo per gestire il funzionamento dell’elaboratore ed indirizzarlo alla risoluzione di un determinato problema. Bruno Bertaccini (mail to: [email protected]) La programmabilità degli elaboratori Il linguaggio macchina ed i linguaggi simbolici Tale sistema è detto LINGUAGGIO MACCHINA perché è il SOLO comprensibile dall’unità di controllo dell’elaboratore. Il Linguaggio Macchina varia da elaboratore ad elaboratore ed è estremamente complicato da utilizzare ed interpretare da parte dell’utilizzatore. Generalmente vengono utilizzati altri linguaggi di programmazione, i cosiddetti LINGUAGGI SIMBOLICI, basati su una modalità di espressione di operatori ed operandi più simili ai criteri usati dal linguaggio umano. Bruno Bertaccini (mail to: [email protected]) La programmabilità degli elaboratori Il linguaggio macchina ed i linguaggi simbolici Un programma espresso per mezzo di un linguaggio simbolico non è direttamente utilizzabile dall’unità di controllo dell’elaboratore; sarà prima necessario TRADURLO per mezzo di un apposito programma nell’unico linguaggio comprensibile alla CU: il linguaggio macchina appunto. Bruno Bertaccini (mail to: [email protected]) Gli ALGORITMI Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Algoritmi: aspetti definitori I problemi umani la cui soluzione è demandata ad un elaboratore sono notoriamente MOLTO COMPLESSI. (es: f ( x) 2 x 2 3x 5 per x = 1.347) Ma un elaboratore è in grado di svolgere SOLO OPERAZIONI ELEMENTARI e NON operazioni complesse. Come è possibile allora utilizzare un elaboratore per risolvere un problema complesso? Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Algoritmi: aspetti definitori Occorre SCOMPORRE il problema complesso in una serie di operazioni elementari in grado di poter essere compiute da un esecutore che non riesce ASSOLUTAMENTE a prendere in considerazione il problema nella sua interezza. Tale procedimento è detto PROCESSO ALGORITMICO ed il risultato di tale processo è detto ALGORITMO Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Algoritmi: aspetti definitori L’ALGORITMO è una serie finita e completa di operazioni elementari ordinate alla soluzione di un problema, da effettuare meccanicamente, ossia attraverso una esecuzione precisa delle regole, senza implicare alcuna conoscenza del caso da trattare. Le operazioni in cui viene scomposto il processo risolutivo del problema devono essere comprensibili ed eseguibili dall’entità cui l’algoritmo è destinato, entità che può non necessariamente essere l’elaboratore. In pratica esisterà sempre un limite preciso al numero di istruzioni che possono comporre l’algoritmo e al tempo di esecuzione dello stesso, limite dettato dalle caratteristiche dell’elaboratore. Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Algoritmi: caratteristiche Un ALGORITMO adatto ad essere utilizzato da un elaboratore deve rispondere ad alcune proprietà essenziali; deve cioè essere: effettivo; definito e non ambiguo; generale; finito. Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Algoritmi: caratteristiche Deve avere un punto di partenza e deve essere EFFETTIVO cioè deve avere un punto di partenza ed ogni operazione deve produrre un certo e ben determinato risultato ogni volta che si presentano le stesse condizioni. Deve essere DEFINITO e NON AMBIGUO è necessario ciò che sia stato previsto ogni aspetto che il problema può assumere durante la fase risolutiva e che ogni espressione sia interpretabile in maniera univoca senza ambiguità. Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Algoritmi: caratteristiche Deve essere GENERALE ossia utilizzabile per una serie o classe di problemi. Dominio dell’algoritmo: insieme dei dati che possono essere elaborati e le condizioni che ne permettono l’elaborazione Deve essere FINITO deve cioè poter giungere al suo termine dopo che sia stato eseguito un numero anche elevatissimo ma finito di istruzioni (poiché spesso le istruzioni possono essere eseguite in modo ciclico – loop -, sarà necessario che non sia possibile prevedere loop non aventi limite finito). Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Analisi e Programmazione ANALISI: fase di comprensione del problema, in base all’obiettivo da perseguire. Conduce ad un disegno articolato del problema stesso. Ogni problema che l’uomo si pone comporta una serie di azioni (“decisioni”) stabilite in base allo stato dell’informazione disponibile all’insorgere del problema stesso: si effettua una rassegna degli elementi determinanti alla soluzione, elencando gli elementi necessari e quelli disponibili. Vengono “decise” le azioni da compiere e la loro sequenza temporale. Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Analisi e Programmazione Generalizzazione della fase d’Analisi: definizione dei dati in ingresso; definizione dei risultati in uscita; individuazione dei termini del problema e dei possibili metodi risolutivi; determinazione della necessità e della disponibilità di risorse (di calcolo e memorizzazione); generalizzazione del problema (definizione di una classe di problemi da risolvere); descrizione informale dell’algoritmo o degli algoritmi necessari a risolvere la procedura. Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Analisi e Programmazione PROGRAMMAZIONE: ha lo scopo di descrivere le operazioni che l’elaboratore deve eseguire per risolvere il problema. Fase della programmazione insieme delle attività e delle funzioni che trasformano il bisogno (necessità di risolvere il problema con un elaboratore) in una richiesta di formulazione, costruzione e definizione delle regole di comportamento per la soluzione di classi di processi di elaborazione, fatte ad un insieme di risorse di calcolo. Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Analisi e Programmazione Tecnica TOP-DOWN: si definiscono inizialmente un insieme d’azioni a grandi linee (macro istruzioni) e si procede per raffinamenti successivi, fino ad arrivare ad operazioni elementari che l’esperienza designa come indipendenti dal linguaggio di programmazione utilizzato per scrivere il programma. Tecnica BOTTOM-UP: parte dai singoli dati e dalle operazioni elementari da compiere su di essi, arrivando, per aggregazione, ad una o più procedure automatiche. Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Analisi e Programmazione Indipendentemente dalla tecnica usata, la programmazione si concretizza nei seguenti passi: definizione formale dell’algoritmo, spesso in forma grafica tramite un diagramma a blocchi; stesura del programma nel linguaggio di programmazione prescelto; prova del programma. La programmazione è sicuramente un processo creativo non vincolato da regole, che deve tenere in considerazione alcuni criteri di ottimizzazione quali i tempi di calcolo e l’occupazione delle memorie. Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Esempi di algoritmi Una ricetta di cucina. Lettura di due valori numerici e stampa del maggiore tra i due Lettura di due valori numerici A e B e stampa di (A-B)^2 n i 2 Lettura del valore numerico n e calcolo di i 0 Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. Ordinamento di una sequenza di numeri Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Algoritmi rilevanti Progetto Genoma Umano per la mappatura dei 100000 geni del DNA umano; Navigazione Internet: percorsi ottimali che i dati devono percorrere in rete per il rapido accesso a grandi quantità di informazioni e motori di ricerca; Percorso stradale minimo data una certa rete viaria (es: mappe in internet); Compressione del testo, crittografia e firme digitali; Allocazione ottimale dei prodotti negli scaffali di un supermercato (P. L. e Game Theory); Gestione delle code; … Bruno Bertaccini (mail to: [email protected]) Gli Algoritmi Efficienza di un Algoritmo Quand’è che un Algoritmo è EFFICIENTE? quando è CORRETTO: cioè produce il risultato atteso; quando è VELOCE (in termini di tempo impiegato per produrre il risultato); quando è PARSIMONIOSO (in termini di risorse allocate per produrre il risultato). Bruno Bertaccini (mail to: [email protected]) Strutture dati (fondamenti) Bruno Bertaccini (mail to: [email protected]) Strutture dati Classificazione Variabili numeriche Bit Intere Reali (razionali) precisione singola precisione doppia Complesse Variabili carattere Bruno Bertaccini (mail to: [email protected]) Strutture dati Strutture di memorizzazione Variabili singole Vettori: una sequenza indicizzabile di valori numerici dello stesso tipo es: stringa = vettore di caratteri Matrici: una sequenza indicizzabile di vettori dello stesso tipo Array: matrici multidimensionali Liste: array differenziabili per tipo di valori memorizzabili Bruno Bertaccini (mail to: [email protected]) I DIAGRAMMI a BLOCCHI (o Diagrammi di Flusso) Bruno Bertaccini (mail to: [email protected]) I Diagrammi a Blocchi Aspetti definitori I Diagrammi a Blocchi sono uno strumento molto utilizzato in informatica per una chiara e semplice esposizione in forma grafica degli algoritmi. Sono uno strumento fondamentale per l’analista (servono a definire in modo schematico il processo algoritmico di scomposizione di un problema), danno una visione immediata dell’iter risolutivo e facilitano il controllo di correttezza logica dell’algoritmo. Inoltre hanno anche uno scopo comunicativo: la documentazione di un algoritmo nel tempo. È infatti molto più facile leggere un algoritmo schematizzato mediante un diagramma a blocchi che leggerne la sua traduzione in uno specifico linguaggio di programmazione. Bruno Bertaccini (mail to: [email protected]) I Diagrammi a Blocchi Aspetti definitori Requisiti essenziali di un Diagramma a Blocchi: • deve esistere un solo blocco di inizio; • deve essere previsto almeno un blocco di fine; • il diagramma può esibire un numero finito di blocchi di controllo; • il diagramma può prevedere un numero finito di blocchi relativi sia ad operazioni aritmetiche e logiche che di I/O. Bruno Bertaccini (mail to: [email protected]) I Diagrammi a Blocchi Simboli e regole di costruzione Punto di Inizio e punti di Fine Operazioni Aritmetiche e Logiche Operazioni di Input/Output Decisioni Sottoprogrammi Connessioni ad un qualsiasi punto del diagramma Bruno Bertaccini (mail to: [email protected]) I Diagrammi a Blocchi Simboli e regole di costruzione Regole di implementazione: • ogni blocco logico/aritmetico o di I/O deve avere una sola linea in ingresso e una sola in uscita; • ogni blocco di controllo deve avere una sola linea in ingresso e due (o più) linee in uscita; • una linea può inserirsi in un blocco o in un’altra linea; • dall’unico blocco iniziale parte una sola linea, seguendo la quale, attraverso un insieme non vuoto di blocchi deve potersi raggiungere uno dei blocchi finali. Bruno Bertaccini (mail to: [email protected]) I Diagrammi a Blocchi es. 1 : scambio di due valori numerici START INPUT A INPUT B AUX = B B=A A = AUX PRINT A PRINT B STOP Bruno Bertaccini (mail to: [email protected]) semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B I Diagrammi a Blocchi es. 1 : scambio di due valori numerici START INPUT A INPUT B Scambia A con B PRINT A PRINT B STOP Bruno Bertaccini (mail to: [email protected]) semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B dove Scambia A con B AUX = B B=A A = AUX I Diagrammi a Blocchi es. 2 : scambio di due valori numerici START INPUT A INPUT B A>B Sì Scambia A con B PRINT A PRINT B STOP Bruno Bertaccini (mail to: [email protected]) No scambio di 2 valori numerici immessi da tastiera nelle variabili A e B solo se il primo è maggiore del secondo I Diagrammi a Blocchi es. 3 : somma dei valori di un vettore START Somma di una certa sequenza di valori, immessi da tastiera all’interno di un vettore INPUT N DIM V[N] INPUT V[1] … INPUT V[N] J=1 S=0 No J <= N Sì S = S + V[J] J=J+1 Bruno Bertaccini (mail to: [email protected]) PRINT S STOP I Diagrammi a Blocchi es. 3 : somma dei valori di un vettore Somma degli elementi di un vettore V già presente in memoria Somma vettore START J=1 S=0 No J <= N Sì S = S + V[J] J=J+1 Bruno Bertaccini (mail to: [email protected]) PRINT S STOP I Diagrammi a Blocchi es. 4 : ricerca del minimo di un vettore Minimo di un vettore Ricerca del minimo di un vettore V già presente in memoria START min = V[1] N = length(V) J=2 No J <= N Sì J = J +1 No V[J] < min Sì min = V[J] Bruno Bertaccini (mail to: [email protected]) PRINT min STOP I Diagrammi a Blocchi es. 5 : somma, media, min e max di un vettore START A INPUT N media = S/N DIM V[N] PRINT media INPUT V[1] … INPUT V[N] Minimo di un vettore Somma vettore Massimo di un vettore A STOP Bruno Bertaccini (mail to: [email protected]) Somma, media, min e max di una sequenza di valori, immessi da tastiera all’interno di un vettore I Diagrammi a Blocchi es. 6 : calcolo di una serie parziale START Lettura del valore numerico n e calcolo di n 2 INPUT N i 0 J=0 S=0 No J <= N Sì S = S + 2^J J=J+1 Bruno Bertaccini (mail to: [email protected]) PRINT S STOP i I Diagrammi a Blocchi es. 7 : calcolo del MCD (algoritmo di Euclide) Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. START INPUT N INPUT M No M>N Scambia M con N Sì Q = INT(N/M) R = N - M*Q N=M No Sì R=0 M=R Bruno Bertaccini (mail to: [email protected]) PRINT ”MCD :”, M STOP I Diagrammi a Blocchi es. 7 : calcolo del MCD (algoritmo inefficiente) START INPUT N INPUT M No M>N Scambia M con N Sì Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. con un algoritmo inefficiente J=M Q = INT(N / J) R = N - J*Q J=J-1 Sì No R=0 Bruno Bertaccini (mail to: [email protected]) PRINT ”MCD :”, J STOP I Diagrammi a Blocchi es. 8 : radici di un polinomio di 2° grado Ricerca delle due radici reali x1 e x2, di una equazione del tipo ax bx c 0 2 se a , b, c >0 : b 4ac 2 Bruno Bertaccini (mail to: [email protected]) b x 2a =0 : b x 2a <0 : non esistono radici reali I Diagrammi a Blocchi es. 8 : radici di un polinomio di 2° grado START Ricerca delle due radici reali x1 e x2, di una equazione del tipo INPUT A,B,C ax bx c 0 2 delta = B*B-4*A*C STOP PRINT ”non esistono radici reali” >0 <0 delta rad = SQRT(delta) =0 rad = 0 X1 = (-B + rad)/(2*A) X2 = (-B - rad)/(2*A) PRINT X1, X2 STOP Bruno Bertaccini (mail to: [email protected]) I Diagrammi a Blocchi es. 9 : ricerca in un vettore Verifica della presenza di un certo elemento A all’interno di un vettore V preesistente in memoria START INPUT A J=1 N = length(V) Sì J>N J = J +1 PRINT ”elemento non trovato” STOP PRINT ”elemento trovato” STOP No Sì A = V[J] No Bruno Bertaccini (mail to: [email protected]) I Diagrammi a Blocchi es. 10 : ordinamento di un vettore Ordinamento di un vettore V preesistente in memoria: un’ipotesi di lavoro Start 7 4 3 8 1: 7 4 3 8 4: 3 7 4 8 2: 4 7 3 8 5: 3 4 7 8 3: 3 7 4 8 6: 3 4 7 8 3 4 7 8 Bruno Bertaccini (mail to: [email protected]) Stop I Diagrammi a Blocchi START es. 10 : ordinamento di un vettore SORT vettore N = length(V) Ordinamento di un vettore V preesistente in memoria I=1 I <= (N-1) No PRINT V Sì J=I+1 J <= N Sì J=J+1 No V[I] > V[J] Sì Scambia V[I] con V[J] Bruno Bertaccini (mail to: [email protected]) I=I+1 No STOP I Diagrammi a Blocchi es. 11 : ricerca in un vettore (alg. dicotomico) START INPUT A SORT V Verifica della presenza di un certo elemento A all’interno di un vettore V preesistente in memoria, previa ordinamento L1 = 1 L2 = length(V) A < V[L1] or A > V[L2] Sì PRINT A “non trovato” STOP No A = V[L1] or A = V[L2] Attenzione: possibilità di loop infinito Sì PRINT A “trovato” No STOP med = INT ( (L1 + L2) / 2 ) L2 = med A >= V[med] No Bruno Bertaccini (mail to: [email protected]) L1 = med Sì I Diagrammi a Blocchi START es. 11 : ricerca in un vettore INPUT A SORT V (alg. dicotomico) L1 = 1 L2 = length(V) A < V[L1] or A > V[L2] Sì PRINT A “non trovato” STOP No A = V[L1] or A = V[L2] Verifica della presenza di un certo elemento A all’interno di un vettore V preesistente in memoria, previa ordinamento Sì PRINT A “trovato” No STOP L1 = L2 - 1 Sì No med = INT ( (L1 + L2) / 2 ) L2 = med Bruno Bertaccini (mail to: [email protected]) A >= V[med] No L1 = med Sì Lo PSEUDOLINGUAGGIO un ponte verso i linguaggi di programmazione Bruno Bertaccini (mail to: [email protected]) Lo pseudolinguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Condizioni: IF (condizione) THEN inizio blocco istruzione 1 istruzione 2 … ELSE fine blocco inizio blocco istruzione 1 istruzione 2 … fine blocco Bruno Bertaccini (mail to: [email protected]) Lo pseudolinguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Condizioni: IF (condizione) THEN [blocco istruzioni] ELSE IF (condizione) THEN [blocco istruzioni] ELSE [blocco istruzioni] Bruno Bertaccini (mail to: [email protected]) Lo pseudolinguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Condizioni: SWITCH (espressione) CASE (condizione1): NON in tutti i linguaggi di programmazione [blocco istruzioni] CASE (condizione2): [blocco istruzioni] CASE (condizione3): [blocco istruzioni] … OTHER: [blocco istruzioni] Bruno Bertaccini (mail to: [email protected]) Lo pseudolinguaggio La traduzione del diagramma a blocchi in pseudolinguaggio Iterazioni: FOR (variabile) = (inizio) TO (fine) (step) inizio blocco istruzione 1 istruzione 2 … fine blocco WHILE (condizione) inizio blocco istruzione 1 istruzione 2 … fine blocco Bruno Bertaccini (mail to: [email protected]) Lo pseudolinguaggio es. 1 : scambio di due valori numerici START INPUT A INPUT B AUX = B B=A A = AUX PRINT A PRINT B STOP Bruno Bertaccini (mail to: [email protected]) main { input A input B AUX = B B=A A = AUX print A print B } Lo pseudolinguaggio es. 2 : scambio di due valori numerici START INPUT A INPUT B A>B No Sì Scambia A con B PRINT A PRINT B STOP Bruno Bertaccini (mail to: [email protected]) main { input A input B if (A > B) then { AUX = B B=A A = AUX } print A print B } Lo pseudolinguaggio es. 3 : somma dei valori di un vettore START INPUT N DIM V[N] INPUT V[1] … INPUT V[N] J=1 S=0 No J <= N PRINT S Sì S = S + V[J] J=J+1 Bruno Bertaccini (mail to: [email protected]) STOP main { input N dim V(N) S=0 for I = 1 to N { input V(I) S = S + V(I) } print S } Lo pseudolinguaggio es. 4 : ricerca del minimo di un vettore main { input N dim W(N) for I = 1 to N { input W(I) } MIN = minimo(W) print MIN } Bruno Bertaccini (mail to: [email protected]) minimo(V) { N = length(V) M = V(1) for I = 2 to N { if (V(I) < M) then { M = V(I) } } return (M) } Lo pseudolinguaggio n es. 6 : calcolo della serie parziale 2 i i 0 START INPUT N J=0 S=0 No J <= N PRINT S Sì S = S + 2^J J=J+1 Bruno Bertaccini (mail to: [email protected]) STOP main { input N S=0 for I = 0 to N { S = S + 2^I } print S } Lo pseudolinguaggio es. 7 : calcolo del MCD (algoritmo di Euclide) main { input N input M if (M > N) then { START INPUT N INPUT M No M>N Scambia M con N Sì Q = INT(N/M) R = N - M*Q N=M No Sì R=0 M=R Bruno Bertaccini (mail to: [email protected]) PRINT ”MCD :”, M STOP AUX = M M=N N = AUX } Q = int(N/M) R = N - M*Q while (R<>0) { N=M M=R Q = int(N/M) R = N - M*Q } print “MCD :”, M } Lo pseudolinguaggio es. 8 : radici di un polinomio di 2° grado main { input A, B, C if (A <> 0) then { DELTA = B*B – 4*A*C if (DELTA >= 0) then { RAD = 0 if (DELTA > 0) then { RAD = SQRT(DELTA) } X1 = (-B + RAD)/(2*A) X2 = (-B - RAD)/(2*A) print “le radici sono: “, X1, X2 } else{ print “non esistono radici reali” } } else { print “è stato inserito un polinomio non di 2° grado” } } Bruno Bertaccini (mail to: [email protected]) Lo pseudolinguaggio es. 9 : ricerca in un vettore ricerca1 (V,E) { N = length(V) F=0 for I = 1 to N { if (V(I) = E) then { F=I I=N } } return (F) } main { input N dim W(N) for I = 1 to N { input W(I) } input A POS = ricerca1 (W,A) if (POS > 0) then { print “trovato in posizione ”, POS } } Bruno Bertaccini (mail to: [email protected]) Lo pseudolinguaggio es. 10 : ordinamento di un vettore main { input N dim W(N) for I = 1 to N { input W(I) } W = ordina (W) for I = 1 to N { print W(I) } } Bruno Bertaccini (mail to: [email protected]) ordina (V) { N = length(V) for I = 1 to N-1 { for J = I+1 to N { if (V(J) < V(I)) then { A = V(I) V(I) = V(J) V(J) = A } } } return (V) }