Problema Ci sono 5 signore nel parco. Ognuna di loro ha 1 figlio. Ogni bambino ha 10 figurine di calciatori, per un totale quindi di 50 figurine. Questi.

Slides:



Advertisements
Presentazioni simili
Gli Algoritmi di ordinamento
Advertisements

INFORMATICA Algoritmi fondamentali
Uso avanzato di C.
Esercizio Usate il ciclo repeat until (controllo post condizionale) per simulare il prodotto N x M con M somme di N. Esempio: 5 x 3 equivale a fare 5 +5.
Informatica 22/03/2012.
Calcolo del minimo comune multiplo (m.c.m.) Luigi Sante
PROGRAMMARE IN PASCAL (le basi)
I File di testo in Pascal
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
numero rette n numero parti piano f(n) f(n -1)n -1 f(n -1) + nn numero parti piano f(n) numero rette n.
Programmazione Concorrente
Programmazione Procedurale in Linguaggio C++
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Linguaggio MATLAB: costrutti tipici (IF,WHILE…)
Algoritmi Paralleli e Distribuiti a.a. 2008/09
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Primo esercizio Scrivere un programma che legge da input
Cosè un programma? LALA PROGRAMMAZIONE PROGRAMMAZIONELALA PROGRAMMAZIONE PROGRAMMAZIONE UN ELENCO DI ISTRUZIONI, APPARTENENTI A UN BEN DEFINITO LINGUAGGIO,
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Il linguaggio Fortran 90: 2. Istruzioni di Controllo
Introduzione alla programmazione lll
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Algoritmo SelectSort Invariante di ciclo: ad ogni passo
Esercitazioni sui File Nicola Fanizzi - DIB Corso (B) di Programmazione CdL in Informatica – I livello A.A. 2003/2004.
Algoritmi su Tipi Semplici
Istruzioni Decisionali
Istruzioni Iterative Nicola Fanizzi
Array Ricerca Ordinamento Fusione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
Esercizi C su array e matrici
Relatori: Emanuele e Denis Tornei Informatici. Introduzione In queste prime lezioni abbiamo affrontato linformatica procedendo a soluzioni di problemi,
OPERAZIONI CON STRINGHE Le operazioni più interessanti da fare, per ora, con le stringhe sono: determinare la lunghezza della stringa, cioè quanti caratteri.
CAPITOLO 7.
CAPITOLO 6.
Lezione 2 Programmare in ASP
TIPI DI DATO Un tipo di dato T è definito come: un dominio di valori, D un insieme di funzioni F 1,..,F n sul dominio D un insieme di predicati P 1,..,P.
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
matematico greco del III° secolo a.c.,
Problema: come dividere due numeri
ESERCIZI.
ND-partizione (A) n   A  somma  0 M  1/2 (  a i ) for i  1 to n do S[i]  choice ({true, false}) if S[i] then somma  somma + a i if somma > M then.
Programmazione Strutturata
RISOLUZIONE DI EQUAZIONI
TURBOPASCAL L’iterazione - prof. V. Riboldi -.
Il ciclo while.  Permette di ripetere un blocco di istruzioni fino a quando non si verifica un determinato evento  Il ciclo while può essere realizzato.
4/5/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
La ricorsione.
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
PROVA INTERCORSO MOD.B a.a RICORSIONE ESERCIZI A1.1-A1.6.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
IL QUESITO DELLA SUSI n° 861
Interpreti e compilatori
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
L’ordinamento per Selezione seleziona l’elemento con valore maggiore e lo scambia con il primo elemento del vettore. Tra gli N-1 elementi rimanenti viene.
Procedure - Funzioni. Procedure e funzioni Parti di programma a cui è associato un nome e che può essere attivata mediante una chiamata. Le funzioni a.
Ciclo for nei linguaggi di programmazione. Nei linguaggi di programmazione, il ciclo for è una struttura di controllo iterativa che determina l'esecuzione.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Ordinamento. Introduzione Una delle operazioni che si possono eseguire sui vettori, è quella di ordinare gli elementi del vettore in ordine crescente.
Transcript della presentazione:

Problema Ci sono 5 signore nel parco. Ognuna di loro ha 1 figlio. Ogni bambino ha 10 figurine di calciatori, per un totale quindi di 50 figurine. Questi calciatori sono distribuiti equamente su cinque squadre: -10 calciatori (figurine) del Napoli; -10 calciatori (figurine) della Roma; -10 calciatori (figurine) del Torino; -10 calciatori (figurine) della Fiorentina; -10 calciatori (figurine) del Palermo. Ogni bambino fa il tifo per una sola di queste squadre. Per cui questi bambini cominciano a scambiare figurine finché ognuno di loro avrà 10 figurine tutte di giocatori della squadra del cuore.

Alcune note di progetto sullesercizio del 30/11 I bambini che si scambiano le figurine nel parco sono 5 e ognuno di loro ha 10 figurine appartenenti a 5 squadre differenti. Quindi la condizione iniziale si può rappresentare con una matrice NxM con N=5 e M=10, le cui colonne sono rappresentate dalle squadre. Lo scopo dellalgoritmo da implementare è quello di scambiare gli elementi di questa matrice finché non si arriva alla configurazione finale in cui gli elementi di ogni colonna sono uguali ad una delle squadre (facciamo un esempio considerando una matrice 3x3) Vediamo il problema dal punto di vista di uno dei bambini, ad esempio A: il bambino A (tifoso del Napoli) ha una figurina del Napoli e due figurine della Lazio. Prende la prima verifica che è della sua squadra e se la tiene; poi prende la seconda verifica che è della Lazio e cerca di scambiarla con un altro bambino che ha una figurina del Napoli. Quindi scorre le figurine (elementi della matrice) del bambino B; trova una figurina del Napoli (la seconda del bambino B) e la scambia. Infine prende la terza figurina, verifica che la squadra è diversa dal Napoli e cerca di scambiarla. Prova con B ma questultimo non ha altre figurine del Napoli; quindi prova da C. La trova (terza figurina di C) e la scambia. Alla fine di questa prima fase A ha tutte le figurine del Napoli quindi non accetterà nessun altro scambio. Se ipotizziamo lo stesso modo di procedere per B (il quale scambierà solo con C in quanto A ha completato i suoi scambi), alla fine di questa fase si raggiunge la configurazione finale desiderata.

var squadre: array[1..3] of string[10]; figurine: array[1..3, 1..3] of string[10]; i, j, s, t: integer; trovato: boolean; temp: string[10]; Le variabile di cui abbiamo bisogno per la risoluzione del problema sono: Un vettore (array monodimensionale) per le squadre: Napoli, Roma e Lazio. Una matrice 3x3 (array bidimensionale) per le figurine: ogni colonna della matrice sarà riferita ad un bambino quindi ad una squadra. Una variabile temporale per loperazione di scambio Un insieme di variabili intere da utilizzare nelle funzioni di accesso dei vettori: squadre[i]; figurine[i,j]; Individuazione delle variabili

Inizializzazione dei vettori begin { Per prima cosa assegniamo ad ogni elemento del vettore squadre un valore. Con questa notazione stabiliamo pure che il primo bambino (prima colonna) è tifoso del Napoli, il secondo della Roma e il terzo della Lazio} squadre[1]:= 'Napoli'; squadre[2]:= 'Roma'; squadre[3]:= 'Lazio'; { Assegniamo un valore ad ogni elemento della matrice. In questo caso attraverso un doppio ciclo for, e utilizzando la funzione di accesso figurine[i,j] ad ogni elemento della matrice attribuiamo un valore da standard input (tastiera)} for i:=1 to 3 do for j:=1 to 3 do begin write('Inserisci valore linea ', i, ' colonna ', j, ': '); readln(figurine[i,j]); end;

j i j=1 i=1 j=1 i=2 i=3 j=1

for j:=1 to 3 do begin for i:=1 to 3 do begin if figurine[i,j]<> squadre[j] then begin temp:=figurine[i,j]; s:=j+1; trovato:= FALSE; while (s<=3) and not trovato do begin t:=1; while (t<=3) and not trovato do begin if figurine[t,s] = squadre[j] then begin trovato:= TRUE; figurine[i,j]:=figurine[t,s]; figurine[t,s]:=temp; end; t:= t+1 end; s:= s+1; end;

Configurazione Finale Configurazione Iniziale

Generazione di numeri casuali random(n); restituisce un numero intero casuale compreso fra 0 e n-1 La funzione random genera numeri solo apparentemente casuali, determinati a partire da un valore iniziale detto seme. randomize; modifica il valore del seme e viene solitamente posta prima dellistruzione random(n). N.B. Il metodo più usato per generare numeri pseudocasuali è il generatore congruenziale: X i (aX i-1 + c)mod m con X 0 seme della sequenza.

Per generare con la funzione random, numeri pseudocasuali m nellintervallo [n,2n[ si utilizza la seguente istruzione: m:= n + random(n) Supponiamo di voler generare sempre con la funzione random, numeri compresi in un intervallo generico [a,b[. a + random(a) produce numeri pseudocasuali compresi nellintervallo [a,2a[ 2. 2a < b a2abb - 2a a + random(a + (b - 2a)) 1. 2a > b ab2a 2a - b a + random(a - (2a - b))

while guess <> num do begin s1 := max - 2*min; s2 := min + s1; guess := random(s2) + min; writeln('Giocatore2: Io dico: ', guess); counter := counter + 1; if guess < num then begin writeln('Giocatore1: numero piu basso, riprova!'); min := guess; end else if guess > num then begin writeln('Giocatore1: numero piu alto, riprova!'); max := guess; end;