Źle działająca funkcja getdate.

2011-03-06 10:14
0

Witam. Mam mały problem z funkcją getdate. Mianowicie, chyba źle odczytuje aktualną datę z komputera. Mam następujący program:

program odczyt;

uses
  crt, dos;

type
  rosoba = record
    imie, nazwisko : string;
    rokurodzenia : byte;
  end;

var
  f : file of rosoba;
  osoba : rosoba;
  rok, m, d, dt : word;

begin
  getdate(rok, m, d, dt);
  clrscr;
  assign(f, 'osoby.dta');
  rewrite(f);
  repeat
    writeln('Podaj imie, lub wcisnji Enter aby zakonczyc');
    readln(osoba.imie);
    if osoba.imie <> '' then
    begin
      writeln('Podaj nazwisko');
      readln(osoba.nazwisko);
      writeln('Podaj rok urodzenia');
      readln(osoba.rokurodzenia);
      write(f, osoba);
    end;
  until osoba.imie = '';
  close(f);
  clrscr;
  reset(f);
  while not eof(f) do
  begin
    read(f, osoba);
    write('Imie: ');
    writeln(osoba.imie);
    write('Nazwisko: ');
    writeln(osoba.nazwisko);
    write('Wiek: ');
    writeln(rok - osoba.rokurodzenia,' lat');
    writeln;
  end;
  close(f);
  readln;
end.

I po podaniu roku urodzenia np. 1990 potem wyświetla mi w polu wiek 1813 lat. Nie wiem co jest nie tak i proszę o pomoc w rozwiązaniu tego problemu.

edytowany 2x, ostatnio: olek1, 2011-03-06 10:17

Pozostało 580 znaków

2011-03-06 10:24
0
type
  rosoba = record
    imie, nazwisko : string; // Co za absurd ! String musi mieć określoną długość !
    rokurodzenia : byte;
  end;

;-)


W TP jeżeli string nie ma określonej długości to przyjmuje maksymalny rozmiar, czyli 255 o ile dobrze pamiętam. - notaras 2011-03-06 10:30
Hm...Nawet nie wiedziałem, zaraz to sprawdzę... A tak btw, to te 255 to o dobre 155 za dużo. Szkoda tych bajtów ;-) - Patryk27 2011-03-06 10:33

Pozostało 580 znaków

2011-03-06 10:26

U ciebie rokurodzenia jest typu byte, a powinna być typu integer. Byte przechowuje liczby tylko z zakresu 0-255.

Pozostało 580 znaków

2011-03-06 12:41
0

W TP jeżeli string nie ma określonej długości to przyjmuje maksymalny rozmiar, czyli 255 o ile dobrze pamiętam.

Tak, tylko 255 to trochę za dużo, zwłaszcza zważywszy ograniczone zasoby pamięciowe w 16-bitowym programie.

proponuję coś takiego:

type
  string30 = string[30];
  rosoba = record
    imie, nazwisko : string30;
    rokurodzenia : word;
  end;

i będzie przenośne do Delphi.

Pozostało 580 znaków

2011-03-06 13:38
0
notaras napisał(a)

U ciebie rokurodzenia jest typu byte, a powinna być typu integer. Byte przechowuje liczby tylko z zakresu 0-255.

Dzięki, tego właśnie nie zauważyłem.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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