Problema: conteggio occorrenze

Documenti analoghi
Individuazione di sottoproblemi

Problema: calcolare il massimo tra K numeri

Esempio: somma di due numeri

Esercizio: dispari-pari

Esercizio: dispari-pari

Programmazione web lato client con JavaScript. Marco Camurri 1

Formalismi per la descrizione di algoritmi

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

UD 3.2b: Programmazione in Pascal (1)

Fondamenti di Informatica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Esercitazione 6. Array

PROGRAMMAZIONE STRUTTURATA

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Algoritmi di Ricerca. Esempi di programmi Java

Le basi del linguaggio Java

Guida introduttiva al PHP

Sviluppo di programmi

Algoritmi di Ricerca. Esempi di programmi Java

Esercizio: numero primo

= < < < < < Matematica 1

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Lezione 6 programmazione in Java

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

L ELABORATORE ELETTRONICO

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Introduzione alla programmazione strutturata

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

PROGRAMMAZIONE: Le strutture di controllo

n deve essere maggiore di 0, altrimenti il metodo restituisce null.

Strutture di Controllo

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Algoritmi e soluzione di problemi

Studio degli algoritmi

Esercizi 2. Marco Anisetti

10 Funzioni MATLAB. dove: output1, output2,.. sono gli output (opzionali), che, se dichiarati, devono essere inizializzati dalla funzione

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Fondamenti di Informatica T-1 Modulo 2

Introduzione all ambiente MATLAB. Richiami II. Calcolo Numerico - A.A. 2008/09

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Metodi statici. Dichiarazione e chiamata di metodi statici

Esercizi d esame. Elena Tundo

Laboratorio di programmazione

Esercizi. La funzione swapint() primo tentativo

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Esercizi Programmazione I

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Algoritmi di ordinamento: Array e ricorsione

Introduzione agli Algoritmi

L ELABORATORE ELETTRONICO!

Introduzione al MATLAB c Parte 3 Script e function

Problemi, istanze, soluzioni

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Le funzioni in JavaScript. Modularizzazione

Javascript. - Corso Web Design - Media Dream Academy. Stefano Gaborin

A.S Classe III H Informatica. Programma didattico finale e indicazioni per il recupero estivo relativi all'insegnamento di Informatica

LEZIONE 11 IMPARIAMO A PROGRAMMARE: I DATI E LE VARIABILI Laboratorio di Informatica per l Educazione A. A. 2014/2015

STRUTTURA E LOGICA DI FUNZIONAMENTO DEL COMPUTER

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Esercizi su JavaScript, DOM e Web Storage

Rappresentazione degli algoritmi

Dall algoritmo al programma

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

A lezione sono stati presentati i seguenti passi per risolvere un problema:

Transcript:

Problema: conteggio occorrenze start read N,X i := 0 occorrenze := 0 vero vero i < N vettore[i]=x falso write occorrenze end occorrenze := occorrenze + 1 falso i := i + 1

Codice Javascript: prima parte <html> <head> <title>conteggio occorrenze in array</title> </head> <body> <script> <!-- Inizio script JavaScript var N; var X; var i; var occorrenze; N = window.prompt("inserisci la lunghezza dell'array"); N = N * 1; var vettore = new Array(N); i = 0; while (i < N) { vettore[i] = window.prompt("inserisci vettore[" + i + "]"); vettore[i] *= 1; i = i + 1; X = window.prompt("inserisci il numero da ricercare"); X = X * 1; Non presente nell algoritm ma necessario

Codice Javascript: seconda parte = 0; ccorrenze = 0; hile (i < N) { if(vettore[i]==x) { occorrenze = occorrenze + 1; i = i + 1; indow.alert("il numero " + X + " compare " + occorrenze + " volte nell'array"); / Fine script --> /script> /body> /html>

Problema: verifica ordinamento Scrivere un algoritmo ed un relativo programma in Javscript che calcoli il valore di una variabile booleana che deve essere true se l array è ordinato in maniera crescente e false altrimenti e stampi il relativo messaggio. Assumere che la dimensione del vettore sia uguale ad N e che la prima posizione del vettore sia uguale a 0. Esempio: Se N=4 e il contenuto del vettore è vettore[0]=555, vettore[1]=10, vettore[2]=555, vettore[3]=14 allora la variabile deve valere false Esempio: Se N=4 e il contenuto del vettore è vettore[0]=12, vettore[1]=17, vettore[2]=555, vettore[3]=1312 allora la variabile deve valere true

Problema: verifica ordinamento start read N i := 0 ordinato:= true i < N -1 falso ordinato=true vero vero vero vettore[i]>vettore[i+1] falso write "array ordinato" ordinato := false falso write "array ordinato" i := i + 1 end

Codice Javascript: prima parte <html> <head> <title>verifica ordinamento array</title> </head> <body> <script> <!-- Inizio script JavaScript var N; var i; var ordinato; N = window.prompt("inserisci la lunghezza dell'array"); N = N * 1; var vettore = new Array(N); i = 0; while (i < N) { vettore[i] = window.prompt("inserisci vettore[" + i + "]"); vettore[i] *= 1; i = i + 1;

Codice Javascript: prima parte i = 0; ordinato = true; while (i < N) { if(vettore[i]>vettore[i+1]) { ordinato = false; i = i + 1; if(ordinato==true) { window.alert("array ordinato"); else { window.alert("array non ordinato"); // Fine script --> </script> </body> </html>

Individuazione di sottoproblemi Quando il problema è complesso conviene partire con una individuazione di sottoproblemi Scriviamo un algoritmo contenente azioni o condizioni complesse per l esecutore che dettaglieremo e raffineremo in passaggi successivi per ottenere un algoritmo direttamente eseguibile Ognuno dei sottoproblemi potrà essere risolto da un algoritmo a parte che potremo riutilizzare, quando sarà necessario, nella soluzione di ulteriori problemi complessi.

Individuazione di sottoproblemi: vantaggi I dettagli delle diverse soluzioni sono descritti negli algoritmi dei sottoproblemi In generale, uno stesso sottoproblema deve essere risolto più volte nella soluzione di un problema principale o in problemi diversi Dagli algoritmi derivano programmi, quindi si possono raccogliere librerie di software da riutilizzare in nuovi programmi

Esempio: ripetizione di codice Se in un algoritmo fosse prevista la lettura di due numeri positivi in ingresso, allora la parte di codice Javascript che traduce questa parte dell algoritmo potrebbe essere

Esempio: ripetizione di codice <SCRIPT> <!-- Inizio script JavaScript var a0, b0, r; a0 = window.prompt("inserisci il primo numero"); while (isnan(a0) a0 <= 0 a0 == null ((a0 - parseint(a0))!= 0)) { window.alert("il valore " + a0 + " non va bene,\n" + "inserire un numero intero positivo."); a0 = window.prompt("inserisci il primo numero"); a0 = a0 * 1; b0 = window.prompt("inserisci il secondo numero"); while (isnan(b0) b0 <= 0 b0 == null ((b0 - parseint(b0))!= 0)) { window.alert("il valore " + b0 + " non va bene,\n" + "inserire un numero intero positivo."); b0 = window.prompt("inserisci il primo numero"); b0 = b0 * 1; var a = a0, b = b0; [ ] // Fine script --> </SCRIPT>

Esempio: ripetizione di codice Desideriamo controllare che l input inserito sia effettivamente un numero intero positivo Se non è un intero positivo il numero inserito si segnala l errore e si richiede una nuova immissione Si noti parseint(.), isnan(.) e alert(.)

Esempio: ripetizione di codice Il precedente esempio contiene due blocchi di istruzioni simili per la richiesta e il controllo dell input, una per ogni valore richiesto all utente I due blocchi di istruzioni differiscono per: la variabile su cui è memorizzato il valore in input (a0 e b0) il messaggio che viene visualizzato nella finestra prompt ( Inserisci il primo/secondo numero ) Se l algoritmo prevedesse l inserimento di 12 numeri da memorizzare in altrettante variabili avremmo scritto per 12 volte lo stesso codice!!! Ci piacerebbe poter disporre di una nuova istruzione del tipo promptnumero(messaggio) La nuova istruzione dovrebbe essere come prompt ma con il controllo che il valore immesso sia un intero positivo

Esempio: ripetizione del codice Se dovessimo scrivere un algoritmo che presi tredici numeri determini se sono tutti e tredici dispari o meno allora questo stralcio di codice dovrebbe essere scritto 13 volte per 13 variabili diverse (con un array risparmieremmo un po ) var N1, N1_dispari; N1 = window.prompt("inserisci il numero"); N1 = N1 * 1; while (N1 > 1) { N1 = N1-2; if (N1==0) { N1_dispari = true; else { N1_dispari = true;

Esempio: ripetizione del codice Ci piacerebbe poter disporre di una nuova istruzione del tipo NumeroDispari(numero) La nuova istruzione dovrebbe dire true se il numero è dispari e false altrimenti così potremmo scrivere var N1, N1_dispari; N1 = window.prompt("inserisci il numero"); N1 = N1 * 1; N1_dispari = NumeroDispari(N1);

Individuazione di sottoproblemi: vantaggi Per risolvere il problema del calcolo del MCD bisogna risolvere il sottoproblema della divisibilità Per risolvere il problema del pari o dispari bisogna risolvere il sottoproblema della divisibilità Per risolvere il problema del numero primo bisogna risolvere il sottoproblema della divisibilità La suddivisione in sottoproblemi serve a risolvere un sottoproblema con un algoritmo, codificarlo in un linguaggio di programmazione, riusare il codice scritto per la risoluzione di altri problemi (pensate al problema di calcolare la radice quadrata di un numero)

Le funzioni: definizione In altre parole: si vorrebbe definire una funzione, cioè una parte di codice utilizzabile in più parti di uno stesso programma In JavaScript questo è possibile farlo utilizzando la parola chiave function : function nome_della_funzione ( arg1, arg2,, argn) { definizione della funzione nome della funzione parentesi graffe! parametri formali della funzione, usati nella definizione della funzione

Le funzioni: richiamo La definizione di una funzione è una sequenza di istruzioni, un blocco di istruzioni Le istruzioni contenute in una funzione non vengono eseguite quando definite ma solo al momento del richiamo della funzione: nome_della_funzione(val1, val2,, valn) Quando l interprete incontra un richiamo di una funzione passa ad eseguire il codice contenuto nella definizione della funzione, dopo aver sostituito i parametri formali con quelli attuali parametri attuali della funzione

Ambito di validità delle variabili Variabili locali: i parametri formali e le dichiarazioni di variabili interne ad una funzione Variabili globali: le dichiarazioni di variabili esterne alle funzioni, a livello più alto La variabili locali sono visibili solo all'interno della funzione in cui sono dichiarate ma mai all'interno di altre funzioni o a livello principale Le dichiarazioni locali nascondono quelle principali con lo stesso identificatore

Le funzioni: restituire un risultato All interno di una funzione si può usare l istruzione return per restituire dei valori, di solito il risultato prodotto dalla funzione stessa return <espressione>; : restituirà il valore computato dall espressione return ; : restituirà undefined In entrambi i casi si esce dalla funzione e l interprete JavaScript passa ad eseguire l istruzione che segue il richiamo della funzione

Esempio <SCRIPT> <!-- Inizio script JavaScript function promptnumero(messaggio) { var numero = window.prompt(messaggio); while (isnan(numero) numero <= 0 numero == null ((numero - parseint(numero))!= 0)) { alert("il valore " + numero + " non va bene,\n" + "inserire un numero intero positivo."); numero = prompt(messaggio); return numero * 1; var a0, b0, r; a0 = promptnumero("inserisci il primo numero"); b0 = promptnumero("inserisci il secondo numero"); var a = a0, b = b0; [ ] // Fine script --> </SCRIPT> -->

Esempio La funzione promptnumero(.) richiede un numero intero in input, verifica che il valore immesso lo sia Il valore restituito è il numero intero positivo inserito dall utente, dopo averlo convertito in numero(!) Il parametro attuale è il messaggio da visualizzare nella richiesta

Individuazione di sottoproblemi: esempio Scrivere un algoritmo che determina se un numero è perfetto. Un numero si dice perfetto quando è uguale alla somma di tutti i suoi divisori escluso se stesso. Ad esempio, il numero 28, divisibile per 1, 2, 4, 7, 14 è un numero perfetto (28 = 1 + 2 + 4 + 7 + 14). Per scrivere questo algoritmo dovremmo scrivere un algoritmo per la divisibilità ed il relativo codice Javascript

Esempio: numero perfetto start N divisore := 1 somma := 0 vero divisore < N falso vero somma := somma+divisore N divisibe per divisore falso vero write "numero perfetto" somma = N falso write "numero non perfetto" divisore := divisore + 1 end

Codice Javascript <html> <head> <title>esercizio sui numeri perfetti</title> </head> <body> <script> <!-- Inizio script JavaScript function isdividable(dividendo,divisore) { if(dividendo%divisore==0) return true; else return false; function promptnumero(messaggio) { var numero = window.prompt(messaggio); while (isnan(numero) numero <= 0 numero == null ((numero - parseint(numero))!= 0)) { window.alert("il valore " + numero + " non va bene,\n" + "inserire un numero intero positivo."); numero = window.prompt(messaggio); return numero * 1;

Codice Javascript var N; var divisore; var somma; N = promptnumero("inserisci il numero"); divisore = 1; somma = 0; while (divisore < N) { if(isdividable(n,divisore)==true) somma = somma + divisore; divisore = divisore + 1; if(somma==n) window.alert("il numero " + N + " è perfetto"); else window.alert("il numero " + N + " non è perfetto"); // Fine script --> </script> </body> </html>

Cosa è un programma per il processore? <html> <head> <title>esempio</title> </head> <body> <script> <!-- Inizio script JavaScript var A,B,X; if(a==b) X = 1; else X = 2; // Fine script --> </script> </body> </html> A: indirizzo in RAM 1000 B: indirizzo in RAM 1002 X: indirizzo in RAM 1004 4726. 4730 MOV R1,1000 4734 MOV R2,1002 4738 MOV R3,1004 4342 JNE R1,R2,4354 4346 MOV R3,#1 4350 JMP 4358 4354 MOV R3,#2 4358..