Jak pokazać liczby, które mają wszystkie cyfry parzyste w Pascalu z tablicy n-wymiarowej?
Ja zamienił bym na string i sprawdzał po kolei if znak in [0,2,4,6,8]
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.
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.
@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.