Jak sprawdzić, czy liczba posiada wszystkie cyfry parzyste?

0

Jak pokazać liczby, które mają wszystkie cyfry parzyste w Pascalu z tablicy n-wymiarowej?

0

Ja zamienił bym na string i sprawdzał po kolei if znak in [0,2,4,6,8]

0

Najpierw napisz sobie fukcję, która sprawdzi, czy dana liczba posiada wszystkie cyfry parzyste; Możesz to zrobić na różne sposoby, poczynając od konwersji liczby do łańcucha i sprawdzanie w pętli każdego znaku - jeśli natrafisz na nieparzystą cyfrę - przerywasz pętlę zwracając False;

Do sprawdzenia czy cyfra jest parzysta możesz wykorzystać kod ASCII danego znaku - pobierasz kod znaku i sprawdzasz czy jest podzielny przez 2 bez reszty i jeśli tak - cyfra jest parzysta; Tutaj akurat wszystko jest proste, bo kod parzystych cyfr jest parzysty i łatwo będzie to sprawdzić;

Prosta implementacja:

function AllOddNumbers(const ANumber: Integer): Boolean;
var
  ansiNumber: ANSIString;
  I: Integer;
begin
  Result := True;
  ansiNumber := IntToStr(ANumber);

  for I := Integer(ANumber < 0) + 1 to Length(ansiNumber) do
    if Ord(ansiNumber[I]) and 1 = 1 then
    begin
      Result := False;
      Exit;
    end;
end;

Dodatkowo funkcja rozróżnia liczby dodatnie i ujemne - jeśli poda się prawidłową liczbę ujemną - pętla rozpoczyna sprawdzanie od drugiego znaku łańcucha by ominąć znak -;

Można też wykorzystać inny wariant - wykorzystać wartość bezwzględną argumentu i ustawić statyczne indeksowanie pętli:

{...}
ansiNumber := IntToStr(Abs(ANumber));

for I := 1 to Length(ansiNumber) do
{...}

z tablicy n-wymiarowej?

Na pewno chodzi Ci o tablicę n-wymiarową? A może n-elementową? Napisz coś więcej na temat tej "dziwnej" tablicy;


Wątek przeniosłem do działu dla początkujących, bo dotyczy absolutnych podstaw kodzenia i znajomości podstawowych funkcji konwersji.

0

Sugerowałbym coś bardziej w tę stronę:

{$MODE OBJFPC}

Function WingardiumLeviosa(Num: Integer): Boolean;
Begin
 if (Num = 0) Then
  Exit(True);

 While (Num > 0) Do
 Begin
  if (Num and 1 <> 0) Then
   Exit(False);

  Num := Num div 10;
 End;

 Exit(True);
End;

Begin
 Writeln(WingardiumLeviosa(0)); // true
 Writeln(WingardiumLeviosa(1)); // false
 Writeln(WingardiumLeviosa(4)); // true
 Writeln(WingardiumLeviosa(1024)); // false
 Writeln(WingardiumLeviosa(2048)); // true
End.
0

@Patryk27 - Twój algorytm jest błędny, bo 0 jest liczbą parzystą, więc dla argumentu 0 funkcja powinna zwrócić True, a Twoja tego nie robi;

Dlatego właśnie podałem taki algorytm, a nie inny - bez względu na to, czy argument ma wartość 0, czy jest dodatni czy ujemny funkcja poprawnie sprawdza liczbę i daje poprawny wynik.

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