Newsgroup: it.comp.lang.c
Titolo: esercizio matrice

Ciao a tutti,
c'è un esercizio che mi sta causando una certa emicrania. Immaginando
che per la maggior parte di voi possa essere una specie di giochetto da
bambini, mi permetto di proporverlo:
Realizzare un programma in C che, lette da tastiera le dimensioni di un
rettangolo n x m, simuli il movimento di due robot. I due robot partono
da due angoli opposti del rettangolo ed ognuno si muove di un passo per
volta. Il primo compie un percorso a spirale in senso orario, toccando
tutte le celle fino al centro; il secondo si muove percorrendo ad una
ad una tutte le colonne, salendo e scendendo alternativamente.
L'elaborazione termina quando i due robot arrivano ad occupare la
stessa cella,o quando hanno compiuto il loro percorso; prima di
terminare il programma deve stampare quale è stata la condizione di
uscita.
Dunque, ho questa matrice e due indici (riga e colonna) per ogni
robot,che per intenderci vengono inizializzati così:
riga_rob1=col_rob1=0
riga_rob2=numero_righe_tot-1
col_rob2=numero_col_tot-1
La matrice viene inizializzata tutta a 0 e man mano che i maledetti
robottini passano su una cella, questa diventa un 1.
Ok.
Quello che non capisco è come far sì che il tutto avvenga un passo
alla volta.
L'unico metodo che mi è venuto in mente è quello di valutare in ogni
cella, per ognuno dei robot, che cosa fare. Però mi sembra una
soluzione complicata e piuttosto lunga.
 
Qualcuno ha un'idea migliore?
Grazie!

 soluzione complicata e piuttosto lunga.
Perché complicata? In pratica, usando le primitive di cui sopra, potresti
costruirti due funzioni che fanno fare un singolo passo a ognuno dei due
robot:
    bool Robot1 (Robot * rob)
    {
       ... fa una mossa
       ... ritorna true se c'è riuscito
    }
    bool Robot2 (Robot * rob)
    {
       ... come sopra
    }
Il loop principale potrebbe ridursi a questo:
    while (Robot1(&rob1) && Robot2(&rob2) && rob1.Pos != rob2.Pos)
        ;
Su, sembra un esercizio divertente... :-)
Una volta che l'hai fatto, puoi divertirti a costruire una funzione simile
alle due sopra accennate ma che fa muovere il robot in modo *casuale*,
oppure secondo qualche logica perversa che t'inventi tu. A questo punto,
anziché avere due robot ne puoi avere un array grande quanto vuoi.
Una volta avevo fatto un programma simile, con migliaia di esserini che
andavano a spasso casualmente e quando s'incontravano, se erano di sesso
diverso e in età giusta, trombavano. Dopo un po' la femmina generava una
cucciolata di robottini, ovviamente con età inizializzata a zero. Arrivati
a una certa età morivano di vecchiaia. Ci stavo ore a guardare queste
popolazioni di pixel che crescevano, migravano, ne invadevano altre, si
estinguevano, si dividevano... Il programma più poetico che abbia mai
fatto. :-)
Se te l'ho fatta troppo complicata, scusami: è venerdì sera...
--
Cingar
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

>>
Sono molto ammirata. Spero che qualcuna/o sia caduta/o ai tuoi piedi
per questo.
Grazie ancora

 andrebbe svolto senza farne uso.
In effetti le strutture non sono necessarie: non si tratta di fare un 
videogame ma solo di risolvere il ben piu'  prosaico problema: se ho due 
coppie ordinate di interi, di cui la prima evolve secondo il pattern a 
spirale mentre la seconda "arando" la matrice, trovare  se si verifica 
che le due coppie divengono uguali oppure se si generano tutte le nxm 
coppie senza mai avere l'  uguaglianza.
A questo punto si tratta solo di trovare i due algoritmi che generano le 
due successioni di coppie e di decidere le strutture dati piu' 
opportune per implementarli...
A questo punto la scelta tra vare implementazioni dipende anche da cosa 
conosci.
Un modo per generare le due evoluzioni e' il seguente: si incrementano i 
due interi mediante (0,-1) o (+1,0) a seconda del punto di partenza. 
Quando si raggiunge il limite della matrice si modificano opportunamente 
le coppie e si passa a scandire la nuova direzione nel verso 
appropriato. Eventualmente, vanno ridefiniti i limiti. Etc. etc.
Spero di aver dato l' idea.
Giorgio

 per questo.
Gnegnegnč... No, era una specie di tamagochi personale che mi contemplavo
in perfetta solitudine. Per cuccare usavo metodi meno introversi.
