Czy słowo jest palindromem ?

2013-12-10 15:47
daggerfall96
0

Witam!
Nie dawno przepisałem się do klasy z informatyką i muszę napisać program, żeby zaliczyć.
Ma to być program który sprawdza czy słowo jest palindromem.Bardzo proszę o pomoc, to dla mnie bardzo ważne ! :(

dodam, że ma być to w pascalu

edytowany 1x, ostatnio: olesio, 2016-12-13 18:26
A tak w ogóle to wątek powinien być w tym dziale, bo dotyczy podstaw programowania; - furious programming 2013-12-10 19:14

Pozostało 580 znaków

2013-12-10 15:50
0

A z czym masz problem? Z zaczęciem?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2013-12-10 15:54
daggerfall96
0

Generalnie miałem kilka podejść i niestety zawsze jakieś błędy.
Czy takie coś będzie działać: ?

program palindrom;
function IsPalindrome(S: String): Boolean;
var I : Integer;
begin
  I := Length(S) div 2;
  IsPalindrome := True;
  while (I > 0) do
  begin
    Dec(I);
    if (S[I+1] <> S[Length(S) - I]) then
    begin
      IsPalindrome := False;
      Exit;
    end;
  end;
end;

Czy to będzie gotowy program ?

dodanie znacznika <code class="pascal"> - fp

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26
Przypominam o wstawianiu kodu w znaczniki kolorujące składnię; - furious programming 2013-12-10 16:30

Pozostało 580 znaków

2013-12-10 16:11
0

Po szybkim rzucie okiem: będzie OK jak zmienisz warunek z 'while (I > 0)' na 'while (I >= 0)'.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2013-12-10 16:15
daggerfall96
0

Niestety nie kompiluje się..

Pozostało 580 znaków

2013-12-10 16:22
0

A przed zmianą się kompilowało?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2013-12-10 16:32
0
daggerfall96 napisał(a)

Czy takie coś będzie działać: ?

Nie będzie, bo Twój program składa się jedynie z nagłówka program palindrom i funkcji, a brakuje głównego bloku programu;

Możesz sobie zadeklarować więcej zmiennych i raz obliczyć długość łańcucha; Dodatkowo trzeba zabezpieczyć się przed podaniem pustego łańcucha; Przykład:

function IsPalindrome(const AString: AnsiString): Boolean;
var
  intLength, intMiddle, I: Integer;
begin
  Result := False;

  if AString <> '' then
  begin
    intLength := Length(AString) + 1;
    intMiddle := intLength div 2;
    I := 1;

    while I <= intMiddle do
      if AString[I] = AString[intLength - I] then
        Inc(I)
      else
        Exit;

    Result := True;
  end;
end;

Lub można zrobić to nieco szybciej za pomocą wskaźników na znaki:

function IsPalindrome(const AString: AnsiString): Boolean;
var
  pchrLeft, pchrRight: PAnsiChar;
begin
  Result := False;

  if AString <> '' then
  begin
    pchrLeft := @AString[1];
    pchrRight := @AString[Length(AString)];

    while pchrLeft < pchrRight do
      if pchrLeft^ = pchrRight^ then
      begin
        Inc(pchrLeft);
        Dec(pchrRight);
      end
      else
        Exit;

    Result := True;
  end;
end;

Ewentualnie jeśli piszesz pod jakimś starociem (jak np. TurboPascal) to zamień słowa Result na nazwę funkcji.


edytowany 2x, ostatnio: furious programming, 2013-12-10 16:54

Pozostało 580 znaków

2013-12-10 16:32
1

A jak może się kompilować skoro nie ma ciała programu.


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

Pozostało 580 znaków

2013-12-10 16:49
daggerfall96
0

a coś takiego ?

program Palindrom;
var s: string;
    i, j: integer;

begin
write('Podaj ciag znaków: ');
readln(s);
i := 1; { numer pierwszego znaku }
j := length(s); { numer ostatniego znaku }
while i<j do
  begin
    if s[i]<>s[j] then
      begin
      {znaki roznia sie}
      writeln('Nie');
      halt
      end;
    {sprawdzamy dalej}
    i := i+1;
    j := j-1
  end;
{sprawdzenie dobiegło pomyslnie do konca}
writeln('Tak');
readln
end.

dodanie znacznika <code class="pascal"> - fp

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26
Pamiętaj o wstawianiu kodu w znaczniki kolorujące składnię, tutaj &lt;code=pacal&gt; Twój kod &lt;/code&gt; - furious programming 2013-12-10 16:54

Pozostało 580 znaków

2013-12-10 16:51
1

A sądzisz że kompilator cię okłamuje?


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

Pozostało 580 znaków

2013-12-10 17:01
daggerfall96
0

Korzystam w wersji przeglądarkowej i nie wiem czy tam jest poprawnie

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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