Gdzie się to wczytuje (rekordy)?

0

Napisalem program w pascalu:
[code]
uses crt;

type
Tosoba= Record
nazwisko: string[20];
imie: string[15];
rok_urodz: integer;
end;
var
o1,o2,o3: Tosoba;

procedure wyswietl_dane(osoba: Tosoba);
begin
with osoba do
begin
writeln('Nazwisko: ',nazwisko);
writeln('Imie: ',imie);
writeln('Rok urodzenia: ',rok_urodz);
end;
end;

procedure wczytaj_dane(osoba: Tosoba);
begin
with osoba do
begin
write('Nazwisko: ');
readln(nazwisko);
write('Imie: ');
readln(imie);
write('Rok urodzenia: ');
readln(rok_urodz);
end;
end;

begin
clrscr;

wczytaj_dane(o1);
writeln;
writeln ('Wprowadzone dane: ');
wyswietl_dane(o1);

readkey;

end.
[/code]

Niestety gdzieś jest błąd - procedura wczytująca dane wczytuje je nie wiedomo gdzie - procedura wyświetlająca wyświetla pusty rekord nie zawierający danych, które wcześniej się wprowadzi.
Jeśli natomiast do wczytania danych użyję funkcji, np:
[code]
uses crt;

type
Tosoba= Record
nazwisko: string[20];
imie: string[15];
rok_urodz: integer;
end;
var
o1,o2,o3: Tosoba;

function wczytaj_nazwisko: string;
var nazwisko: string;
begin
write ('Podaj nazwisko osoby: ');
readln (nazwisko);
wczytaj_nazwisko:=nazwisko;
end;

function wczytaj_imie: string;
var imie: string;
begin
write ('Podaj imie osoby: ');
readln (imie);
wczytaj_imie:=imie;
end;

function wczytaj_rok_urodz: integer;
var rok: integer;
begin
write ('Podaj rok urodzenia osoby: ');
readln (rok);
wczytaj_rok_urodz:=rok;
end;

procedure wyswietl_dane(osoba: Tosoba);
begin
with osoba do
begin
writeln('Nazwisko: ',nazwisko);
writeln('Imie: ',imie);
writeln('Rok urodzenia: ',rok_urodz);
end;
end;

begin
clrscr;

o1.nazwisko:= wczytaj_nazwisko;
o1.imie:= wczytaj_imie;
o1.rok_urodz:= wczytaj_rok_urodz;

writeln;
writeln ('Wprowadzone dane: ');
wyswietl_dane(o1);
readkey;
[/code]

Gdzie robię błąd? Chodzi o procedurę wczytującą dane:
[code]
procedure wczytaj_dane(osoba: Tosoba);
begin
with osoba do
begin
write('Nazwisko: ');
readln(nazwisko);
write('Imie: ');
readln(imie);
write('Rok urodzenia: ');
readln(rok_urodz);
end;
end;
[/code]
która w/g mnie jest prawidłowa, a jednak po jej wywołaniu:
[code]
wczytaj_dane(o1);
[/code]
dane wczytują się nie tam, gdzie bym się spodziewał.
Proszę o pomoc w rozwiązaniu problemu.

0

Pierwsze co mi się rzuca w oczy to to , że odwołujesz się do rekordu osoba a deklarowałeś 3 rekordy o1,o2,o3 nie deklarujesz żadnej zmiennej osoba!

0

odwołuję się do rekordu osoba, który jest typu Tosoba i jest przekazywany jako parametr w wywołaniu:
[code]
wczytaj_dane(o1);
[/code]
czyli faktycznie odwołuję się do rekordu o1.
Tak samo postępuję w wypadku wyświetlenia i wyświetlanie danych poprzez:
[code]
wyswietl_dane(o1);
[/code]
działa, pod warunkiem, że wcześniej wczytam dane za pomocą np. funkcji, które podałem wyżej.

0

sorry pomyłka! ;-)

0
procedure wczytaj_dane(var osoba: Tosoba);
0

Faktycznie, po tym zabiegu zaczęło działać :)
Dzięki Smiglo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1