anton86993
(Mateusz Antoniewski)
18 Styczeń 2011 16:06
#1
Więc tak mam taką procedure:
Procedure SzukajWgNazwiska;
Var
nazwisko: string;
i: byte;
Begin
assign(f, ‘minibaza.dat’);
reset(f);
Repeat
write('Podaj nazwisko: ');
readln(nazwisko);
if length(nazwisko)<2 then writeln(‘PODANO ZLE DANE!’);
Until length(nazwisko)>=2;
while not eof(f) do
Begin
for i:=1 to ilosob do
Begin
read(f, osoba_);_
with osoba do
if nazwisko=osoba _.nazwisko then {<<<<<<<<<<<<<<-------TU JEST TA LINIJKA}_
Begin
writeln('OSOBA ',i);
writeln;
write('Imie: '); writeln(osoba _.imie);_
write('Nazwisko: '); writeln(osoba _.nazwisko);_
write('Data urodzenia: '); write(osoba _.dzienur); write(’.’); write(osoba__.miesiacur); write(’.’); writeln(osoba__.rokur);_
End
else
writeln(‘NIE MA OSOB SPELNIAJACYCH PODANE KRYTERIA!’);
End;
End;
close(f);
End;
Za każdym razem kiedy uruchomie te procedure to nic sie nie dzieje i wypisuje mi wszystkie osoby, tak jakby warunku w ogole nie bylo. Chodzi mi o to aby sprawdzono wpierw czy oba wyrazy są identyczne. Robie to po prostu znakiem rowna sie lecz to nic nei daje. Jak to mam zrobic?
Problem jest instrukcja with w linii przed tą przez Ciebie zaznaczoną (with osoba do).
Otóż nazwisko jest w tym wypadku utożsamiane z polem osoba _.nazwisko. Wywal tę linijkę i będzie dobrze._
P.S. Masz też inny błąd - pętla while not eof(f) jest tylko raz wykonywana, bo w niej czytasz (w innej pętli) wszystkie rekordy z bazy/pliku.
anton86993
(Mateusz Antoniewski)
18 Styczeń 2011 19:30
#3
Dobra wszystko picuś glancuś tylk ow programie głównym są jakieś 2 błędy. Oto kod:
Begin
Repeat
Menu;
Repeat
Wybor; {tutaj jest bład pisze: illegal expression}
Until decyzja in [1, 2, 3, 4, 5, 6, 7];
if decyzja<>7 then
Begin
case decyzja of
1: Wprowadzanie;
2: Wyprowadzanie;
3: Begin
Repeat
PrzeszukajMenu;
Repeat
Przeszukuj;
Until opcja in [1, 2, 3, 4, 5, 6, 7];
if opcja<>7 then
Begin
case opcja of
1: SzukajWgImienia;
2: SzukajWgNazwiska;
3: SzukajWgDniaUr;
4: SzukajWgMiesiacaUr;
5: SzukajWgRokuUr;
6: Clrscr;
7: Exit
End;
End;
Until opcja=7;
End;
4: Begin
Repeat
EdytujMenu;
Repeat
EdycjaWybor;
Until decyzjaedytuj in [1, 2, 3, 4, 5];
if decyzjaedytuj<>5 then
Begin
case decyzjaedytuj of
1: DodajNowyRekord;
2: EdytujBiezacyRekord;
3: Clrscr;
4: Exit;
End;
End;
Until decyzjaedytuj=5
End;
5: Eksportuj;
6: Clrscr;
7: Exit;
End;
End;
Until decyzja=7;
End. {tutaj jest 2: ‘;’ expected but ‘.’ found} wiem, że coś z beginem i endem tylko za cholere nie moge znalezsc bledu
_alex
([alex])
19 Styczeń 2011 14:18
#4
Sformatuj kod tak aby było widoczne który begin jest parą do którego end.
Któryś z begin nie ma odpowiedniej pary.
anton86993
(Mateusz Antoniewski)
19 Styczeń 2011 15:28
#5
No właśnie ja tak robię, ale jak się wklei na forum to tekst się wyrównuje. Ale mógłby ktoś sprawdzić, bo wrzuciłem ten sam kod na wklej.org : http://wklej.org/id/460019/ .