Pascal - długość łańcucha

0

Witam

Napisałem taki oto programik do zliczania długości łańcucha. Niestety po podaniu wyrazu nic się nie dzieje. Proszę o pomoc ;)

function dlugosc (lan : array of char) : byte;
var  d:byte;

begin
 d:=0;
 while (lan[d] <> '\0') do inc(d);

 result:=d;

end;


var  wyraz:array [1..50] of char;

begin
  repeat
    writeln('podaj wyraz');
    readln(wyraz);

    writeln('dlugosc wynosi', dlugosc(wyraz));

until wyraz = '.';
   readln;

end.     
1
  1. Dlaczego nie używasz typu string i gotowej funkcji Length()?

  2. W twoim kodzie jest tyle błędów, że nie chce mi się ich wymieniać. Oto poprawiona wersja:

function dlugosc (lan : pchar) : byte;
var  d:byte;
begin
  d:=0;
  while (lan[d] <> #0) do inc(d);
  result:=d;
end;
 
var  wyraz:array [0..49] of char;

begin
  repeat
    writeln('podaj wyraz');
    readln(wyraz);
    writeln('dlugosc wynosi ', dlugosc(wyraz));
  until wyraz = '.';
  readln;
end.

Ale nie tak powinien wyglądać kod w Pascalu. Użyj po prostu stringa.

0

Dzięki :)

Jakby komuś kiedyś było potrzebne to działający program na stringu z funkcją:

function dlugosc (lan : string) : byte;

begin
   result:= length(lan);
end;

var  wyraz:string;

begin
  repeat
    writeln('podaj wyraz');
    readln(wyraz);

    writeln('dlugosc wynosi', dlugosc(wyraz));

until wyraz = '.' ;
writeln('koniec programu');
readln;

end.  
0

Trzeba było jeszcze obudować w 5 funkcji

0

Nie dość, że ta funkcja:

function dlugosc (lan : string) : byte;
begin
   result:= length(lan);
end;

jest zbędna, to jeszcze nie obsługuje w pełni łańcuchów typu String - rozmiar tego łańcucha może być znacznie większy niż 255 znaków, więc typ Byte jako wartość zwracana jest błędna;

Poza tym nie ma sensu kombinować z własnymi nakładkami - lepiej po prostu poznać RTL;

0
var  wyraz:string;
begin
  repeat
    writeln('podaj wyraz');
    readln(wyraz); 
    writeln('dlugosc wynosi ', length(wyraz));
  until wyraz = '.' ;
  writeln('koniec programu');
  readln; 
end.

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