La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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.

Presentazioni simili


Presentazione sul tema: "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."— Transcript della presentazione:

1 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.

2 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.

3 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

4 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;

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

6 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;

7 Configurazione Finale Configurazione Iniziale

8 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.

9 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))

10 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;


Scaricare ppt "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."

Presentazioni simili


Annunci Google