Pascal - długość łańcucha

Pascal - długość łańcucha
QE
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:31
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 ;)

Kopiuj
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.     
edytowany 1x, ostatnio: qetix
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 8 godzin
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:

Kopiuj
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.

edytowany 2x, ostatnio: Azarien
QE
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:31
0

Dzięki :)

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

Kopiuj
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.  
edytowany 1x, ostatnio: qetix
pelsta
To bez sensu. Zamiast wywoływać dlugosc(wyraz) napisz length(wyraz).
szopenfx
  • Rejestracja:prawie 21 lat
  • Ostatnio:6 miesięcy
0

Trzeba było jeszcze obudować w 5 funkcji

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12175
0

Nie dość, że ta funkcja:

Kopiuj
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;


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:12 dni
0
Kopiuj
var  wyraz:string;
begin
  repeat
    writeln('podaj wyraz');
    readln(wyraz); 
    writeln('dlugosc wynosi ', length(wyraz));
  until wyraz = '.' ;
  writeln('koniec programu');
  readln; 
end.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.