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

Nello studio dei record ho effettuato un programma che gestisce una
rubrica telefonica con
l’uso degli array.
Riporto qui una parte di esso che dovrebbe permettere all’utente di
potere aggiornare il telefono di un nominativo.
Procedure aggiorna;
var
   p: persona;
   i: integer;
begin
   ClrScr;
   write('   Nome da ricercare: ');
   readln(p.nome);
   write('   Cognome da ricercare: ');
   readln(p.cognome);
                                { 'lunga' rappresenta il numero degli
elementi presenti nella rubrica }
   i := 1;
   while (i<=lunga) and
             (rubrica[i].nome<>p.nome) and
             (rubricaa[i].cognome<>p.cognome) do
   i:=i+1;
   writeln;
   if i > lunga then begin
      writeln('Attenzione: nominativo non presente in rubrica');
      writeln('Premere un tasto per continuare');
      readln;
   end
   else begin
      with rubrica[i] do begin
         write('Il vecchio numero di telefono di ');
         writeln(nome, ' ', cognome, ' è: ', telefono);
         writeln;
         writeln('Deve essere cambiato in: ');
         readln(telefono);
      end;
   end;
end;
Nella rubrica ho i seguenti nominativi:
Sandro Caio
Antonio Tizio
Sandro Sempronio
Se immetto Sandro Sempronio mi dà Sandro Tizio.
Se immetto Sandro Tizio, perché ho sbagliato, anziché darmi nominativo
non presente, mi
dà Sandro Caio.
Solo nel caso in cui non vi è assoluta corrispondenza di nome e cognome
mi dà nominativo
non presente.
Cos'è che non funziona?
Grazie, Giuseppe

 scrisse nel messaggio 381219C4...@tin.it...
| Nello studio dei record ho effettuato un programma che gestisce una
| rubrica telefonica con l'uso degli array.
| Riporto qui una parte di esso che dovrebbe permettere all'utente di
| potere aggiornare il telefono di un nominativo.
|
| Procedure aggiorna;
| var
|    p: persona;
|    i: integer;
| begin
|    ClrScr;
|    write('   Nome da ricercare: ');
|    readln(p.nome);
|    write('   Cognome da ricercare: ');
|    readln(p.cognome);
|                                 { 'lunga' rappresenta il numero degli
| elementi presenti nella rubrica }
|    i := 1;
|    while (i<=lunga) and
|              (rubrica[i].nome<>p.nome) and
quando rubrica[i].nome == p.nome, a prescindere dal cognome, risulta falsa
questa affermazione ed esci dal while...
vero AND (falso AND vero) = falso
|              (rubricaa[i].cognome<>p.cognome) do
|    i:=i+1;
Prova così:
    ....tra le var: trovato:boolean;    {un bool non costa poi troppo...}
    ........
    trovato=false;
    while (i<=lunga and not trovato) do
        if (rubrica[i].nome=p.nome and
             rubrica[i].cognome=p.cognome) then trovato=true
        else i:=i+1;
{sicuramente ci sono altri modi, ma questo è molto leggibile e intuitivo...}
|    writeln;
e qui sarà:
    if (trovato) then ....

Il fatto poi che ti da dei nomi 'assurdi' è, secondo me, perché hai fatto un
errore simile a quello che ho detto prima, anche nel modulo che memorizza i
nuovi nominativi.
Rivediti un po' tutto...
--
Ciao da Pavelo, e che lo sforzo sia con te!
E-mail: 
pi....@bigfoot.com
        (se 'rispondi al mittente', togli NO_SPAM)
HomePage: 
http://web.tiscalinet.it/pavelo
ICQ UIN #37941259
Fortunatamente, secondo la moderna astronomia,
l'universo e' finito: un pensiero consolante per chi,
come me, non si ricorda mai dove ha lasciato le cose.
    Woody Allen