Newsgroup: it.comp.lang.pascal
Titolo: Aiuto...

Ciao,
non mi conosci e neanche io conosco te, ma sei famoso nel newsgroup di
pascal perché dai sempre una mano a persone che sono in difficoltà con
questo linguaggio.
Se hai un attimo di tempo da dedicarmi, ti espongo il mio problema.
Devo leggere da un file una serie di dati così composti:
< numero persone >
< nome persona numero 1 >
< nome persona numero 2 >
< . >
< nome persona numero n >
e finora nessun problema.
ma sempre questo file continua nel seguente modo:
< nome persona >_< nome persona >
e così via, sempre uguale, per un numero imprecisato di righe.
Questo file è caratterizzato dal numero di persone invitate ad una cena, dai
loro nomi e dai rapporti di antipatia che corrono tra un ospite ed un altro.
Queste ultime righe così composte (< nome persona >_< nome persona >), sono
caratterizzate da nomi di persone già elencate all'inizio del file.
Suddetto file è da considerarsi senza errori, cioè non vi sono due invitati
con lo stesso nome.
Vi è un altro file così composto:
< nome persona > < nome persona > < nome persona > e così via.
questo file contiene righe di nomi di persone.
Queste righe non sono altro che le possibili disposizioni intorno a un
tavolo circolare delle persone sopra indicate. Queste righe però possono
contenere degli errori:
1. un nome di persona può essere ripetuto due volte
2. ci sono meno persone di quelle dichiarate nel file precedente
3. siedono accanto due persone che risultano antipatiche
4. nella riga vi è un nome di persona non presente nel precedente file
Se nessuno di questi errori è stato trovato, allora la possibile
disposizione è da considerarsi corretta.
Ecco. questo è il mio problema.
Finora sono riuscito a memorizzare in un array i nomi degli ospiti e basta.
. è da giorni che ci sto dietro. compreso a Natale. niente. non riesco ad
andare avanti.
Spero che tu mi possa dare una mano. perlomeno qualche aiutino.
Grazie mille per la tua disponibilità.
Simone
P.S. Il numero degli ospiti è max 20, e i loro nomi non superano i 30
caratteri.

caratteri.
costruisci un vettore con i nomi degli ospiti, es.:
ospite[1] := "andrea" ;
ospite[2] := "giuseppe" ;
ospite[3] := "filippo" ;
...
poi costruisci una "tabella delle antipatie", bidimensionale, in base
agli indici di ogni nome, inizialmente con tutti gli elementi a
'false'.
es.: 
se leggi dal file la seguente antipatia :
andrea filippo
allora la tabella delle antipatie, sara' :
antipatia[1,3] := true ;
in cui il primo indice e' quello di andrea e il secondo quello di
filippo.
Poi quando leggi le possibili combinazioni a tavola, le leggi con un
for del tipo :
for i := 1 to n-1 do
  for j := 2 to n do
    if antipatia[i,j] then 
    begin
      writeln('combinazione errata !') ;
      exit ;
    end ;
--
Andrea Laforgia
andrea_...@bigfoot.com

Ciao Andrea,
ti ringrazio per i consigli che mi hai scritto.
ma ho sempre un problema che mi affligge.
Quando tu dici:
es.:
se leggi dal file la seguente antipatia:
andrea Filippo
allora la tabella delle antipatie, sara':
antipatia[1,3]:=true;.
Come faccio a leggere e a memorizzare in un array la stringa < andrea
Filippo >?
Mi spiego meglio.
Come faccio a leggere il primo nome, individuare quale indice ha nell'elenco
memorizzato immediatamente prima, saltare lo spazio, e leggere il secondo
nome, individuando sempre il suo indice?
Ho provato in tutti i modi e non riesco. ho la testa che mi scoppia. ho
sfogliato libri e appunti e non ho trovato nulla a riguardo.
Scommetto che sara' una stupidata. ma non riesco ad arrivarci.
Il mio problema è questo: leggere da una riga di un file nomi (stringhe) che
stanno di per sé in un array.
Spero che tu mi possa dare una mano.
Grazie
Simone