Witam, w programie który napisałem opartym na tablicach i rekordach nie mam pojęcia jak wprowadzić wyszukiwanie poprzez rekordy… Kombinowałem już na kilka sposobów, próbowałem wprowadzać dodatkową zmienną, zresztą; proszę o poprawienie opcji szukaj. Reszta zdaje się działać normalnie
program Ksiazka_Telefoniczna;
uses CRT;
type
spis_osob = record
Imie,nazwisko,adres,miasto,numer:string;
spis_osob:array[1..100] of string;
end;
var
osoba:spis_osob;
r,r2:char;
ilosc:byte;
d1:byte;
plik:text;
PROCEDURE Wprowadz;
begin
ClrScr;
Ilosc:=ilosc+1;
writeln('Imie');
readln(osoba.Imie[ilosc]);
writeln('Nazwisko');
readln(osoba.nazwisko[ilosc]);
writeln('Adres');
readln(osoba.adres[ilosc]);
writeln('Miasto');
readln(osoba.miasto[ilosc]);
writeln('Numer telefonu');
readln(osoba.numer[ilosc]);
end;
procedure Wyswietl;
begin
ClrScr;
write('Numer wpisu ? (1..', ilosc ,') :');
readln(d1);
writeln('Imie : ',osoba.Imie[d1] );
writeln('Nazwisko : ',osoba.nazwisko[d1] );
writeln('Adres : ',osoba.adres[d1] );
writeln('Miasto : ',osoba.miasto[d1] );
writeln('Numer telefonu : ',osoba.numer[d1] );
writeln;
write('Naciśnij Enter...');
r2:=readkey;
end;
procedure Zapisz;
begin
assign(plik,'BAZA.GIO');
rewrite(plik);
writeln(plik,ilosc);
d1:=0;
repeat
d1:=d1+1;
writeln(plik,osoba.Imie[d1] );
writeln(plik,osoba.nazwisko[d1] );
writeln(plik,osoba.adres[d1] );
writeln(plik,osoba.miasto[d1] );
writeln(plik,osoba.numer[d1] );
until d1=ilosc;
close(plik);
end;
procedure czytaj;
begin
assign(plik,'BAZA.GIO');
reset(plik);
readln(plik,ilosc);
d1:=0;
repeat
d1:=d1+1;
readln(plik,osoba.Imie[d1] );
readln(plik,osoba.nazwisko[d1] );
readln(plik,osoba.adres[d1] );
readln(plik,osoba.miasto[d1] );
readln(plik,osoba.numer[d1] );
until d1=ilosc;
close(plik);
end;
procedure szukaj;
begin
writeln('Proszę wprowadzić nazwisko:');
readln(osoba.nazwisko);
for ilosc:=1 to d1 do
if osoba.nazwisko = spis_osob[d1] then
writeln('znaleziono: ', osoba.nazwisko[d1], ' miejscowosc: ', osoba.miasto[d1]);
readln;
begin
Ilosc:=0;
repeat
ClrScr;
writeln('1. Nowy wpis');
writeln('2. Wyświetl wpisy');
writeln('3. Odczyt z bazy');
writeln('4. Zapis do bazy');
writeln('9. Koniec programu');
repeat
r:=readkey;
until (r>='1') and (r<='9');
If r='1' then Wprowadz;
If r='2' Then Wyswietl;
If r='3' Then Czytaj;
If r='4' Then Zapisz;
If r='5' Then Szukaj;
Until r='9';
End.
poprawiłem w sposób który poleciłeś, i mimo iż wszystko się kompiluje, zdaje się działać poprawnie o porównywać szukaną zmienną z rekordem a następnie to wyświetlać, nie robi tego…
program Ksiazka_Telefoniczna;
uses CRT;
type
spis_osob = array[1..100] of record
Imie,nazwisko,adres,miasto,numer:string;
end;
var
osoba:spis_osob;
r,r2:char;
ilosc:byte;
d1:byte;
plik:text;
n1:string;
PROCEDURE Wprowadz;
begin
ClrScr;
Ilosc:=ilosc+1;
writeln('Imie');
readln(osoba[ilosc].Imie);
writeln('Nazwisko');
readln(osoba[ilosc].nazwisko);
writeln('Adres');
readln(osoba[ilosc].adres);
writeln('Miasto');
readln(osoba[ilosc].miasto);
writeln('Numer telefonu');
readln(osoba[ilosc].numer);
end;
procedure Wyswietl;
begin
ClrScr;
write('Numer wpisu ? (1..', ilosc ,') :');
readln(d1);
writeln('Imie : ',osoba[d1].Imie );
writeln('Nazwisko : ',osoba[d1].nazwisko );
writeln('Adres : ',osoba[d1].adres );
writeln('Miasto : ',osoba[d1].miasto );
writeln('Numer telefonu : ',osoba[d1].numer );
writeln;
write('Naciśnij Enter...');
r2:=readkey;
end;
procedure Zapisz;
begin
assign(plik,'BAZA.GIO');
rewrite(plik);
writeln(plik,ilosc);
d1:=0;
repeat
d1:=d1+1;
writeln(plik,osoba[d1].Imie );
writeln(plik,osoba[d1].nazwisko );
writeln(plik,osoba[d1].adres );
writeln(plik,osoba[d1].miasto );
writeln(plik,osoba[d1].numer );
until d1=ilosc;
close(plik);
end;
procedure czytaj;
begin
assign(plik,'BAZA.GIO');
reset(plik);
readln(plik,ilosc);
d1:=0;
repeat
d1:=d1+1;
readln(plik,osoba[d1].Imie );
readln(plik,osoba[d1].nazwisko );
readln(plik,osoba[d1].adres );
readln(plik,osoba[d1].miasto );
readln(plik,osoba[d1].numer );
until d1=ilosc;
close(plik);
end;
procedure szukaj;
begin
ClrScr;
writeln('Proszę wprowadzić nazwisko:');
readln(n1);
for d1:=1 to ilosc do
if n1='spis_osob[d1].nazwisko' then
begin
writeln('Imie : ',osoba[d1].Imie );
writeln('Nazwisko : ',osoba[d1].nazwisko );
writeln('Adres : ',osoba[d1].adres );
writeln('Miasto : ',osoba[d1].miasto );
writeln('Numer telefonu : ',osoba[d1].numer );
Break;
end;
write('Naciśnij Enter...');
readkey;
end;
begin
Ilosc:=0;
repeat
ClrScr;
writeln('1. Nowy wpis');
writeln('2. Wyświetl wpisy');
writeln('3. Odczyt z bazy');
writeln('4. Zapis do bazy');
writeln('5. Szukaj wpisu');
writeln('9. Koniec programu');
repeat
r:=readkey;
until (r>='1') and (r<='9');
If r='1' then Wprowadz;
If r='2' Then Wyswietl;
If r='3' Then czytaj;
If r='4' Then Zapisz;
If r='5' Then szukaj;
Until r='9';
End.
jeśli ktoś mógłby na to rzucić raz jeszcze okiem i doszukać się błędu w owej procedurze, byłbym wdzięczny.
Próbowałeś to kompilować? Instrukcja warunkowa if… then writeln zostaje pominięta i przechodzi do '‘nacisnij enter…’ , jak gdyby pętla była nieprawidłowa :razz:
procedure szukaj;
begin
ClrScr;
writeln('Proszę wprowadzić nazwisko:');
readln(n1);
for d1:=1 to ilosc do
if n1=osoba[d1].nazwisko then
begin
writeln('Imie : ',osoba[d1].Imie );
writeln('Nazwisko : ',osoba[d1].nazwisko );
writeln('Adres : ',osoba[d1].adres );
writeln('Miasto : ',osoba[d1].miasto );
writeln('Numer telefonu : ',osoba[d1].numer );
write('Szukacz dalej [T/N]: ');
repeat
r2:=UpCase(readkey);
until (r2='T') or (r2='N');
if r2<>'T' then Break;
end;
end;