Quando è necessario scegliere chi interrogare oppure chi spostare in classe potrebbe essere utili avere un generatore automatico di sequenze casuali di vittime predestinate del sistema scolastico nazionale…
Algoritmo
- Quanti allievi in classe?
- Acquisisci tutti nomi
- Mescola i nomi in modo imparziale
- Comunica la sequenza di nomi
Esempio
- Elenco prima = { ‘Antoniol’, ‘Canzio’, ‘Cappellaro’, ‘Casanova De Marco’, ‘Chiovaro’, …, ‘Zucco’ }
- Elenco dopo = { ‘Chiovaro’, ‘Antoniol’, ‘Peratoner’, ‘Cappellaro’, ‘Casanova De Marco’, …, ‘Canzio’ }
Approfondimenti
- I nomi degli allievi sono stringhe
- La sequenza di nomi diventa un array
- Per mescolare in modo imparziale si usa Random() e SCAMBIA()
- Le permutazioni possibili per n nomi sono n!=n*(n-1)*(n-2)*...*2*1.
Program Problemino_di_Carla; Uses Crt; Const TANTO=50; // numero scambi N =26; // numero studenti 3AA... Var NOMI: Array[1..N] of String; i, primo, secondo: Integer; TEMP: String; Begin // INIZIALIZZA L'ARRAY CON I NOMI DELLA 3AA - 2013-14 NOMI[ 1]:='Antoniol'; NOMI[ 2]:='Canzio'; NOMI[ 3]:='Cappellaro'; NOMI[ 4]:='Casanova De Marco'; NOMI[ 5]:='Chiovaro'; NOMI[ 6]:='Chistruga'; NOMI[ 7]:='De Bortoli'; NOMI[ 8]:='De Salvador'; NOMI[ 9]:='Della Chiesa'; NOMI[10]:='Fontan'; NOMI[11]:='Fontana'; NOMI[12]:='Guzzo'; NOMI[13]:='Iseo'; NOMI[14]:='Maoret'; NOMI[15]:='Mione'; NOMI[16]:='Moretta'; NOMI[17]:='Pannilunghi A'; NOMI[18]:='Pannilunghi E'; NOMI[19]:='Peratoner'; NOMI[20]:='Polesana'; NOMI[21]:='Riviello'; NOMI[22]:='Rossi'; NOMI[23]:='Saadaoui'; NOMI[24]:='Secco'; NOMI[25]:='Vaccari'; NOMI[26]:='Zucco'; // MESCOLA I NOMI IN MODO CASUALE Randomize; For i:=1 to TANTO Do Begin primo:=Random(N)+1; secondo:=Random(N)+1; TEMP:=NOMI[primo]; // SCAMBIA(NOMI[primo], NOMI[secondo]) NOMI[primo]:=NOMI[secondo]; NOMI[secondo]:=TEMP; End; // VISUALIZZA L'ELENCO APPENA GENERATO ClrScr; For i:=1 to N Do Write(NOMI[i]:20); Readln; End.
Meglio strutturare…
... Begin Inizializza; Mescola; Visualizza; End.
Continua
- Fai in modo che il programma possa essere utilizzato per qualsiasi classe
Numero studenti? Nomi? - Se la sequenza risultante non è soddisfacente?
Aggiungi un menu con le opzioni input-mescola-output...
Attenzione!
Se si aggiungono delle condizioni, come
- Tizio non può sedersi con Caio
- Sempronio è miope…
- le coppie (1°-2°, 3°-4°, …) devono essere sempre diverse
- chi oggi occupa la prima fila la prossima volta deve passare in seconda..
- …
allora ogni permutazione generata deve
- superare tutte le condizioni stabilite,
- … anche quelle rispetto alle permutazioni utilizzate precedentemente
- … che quindi devono essere salvate su memoria di massa (file).
Il problema diventa più complesso…