[Delphi] Wyświetl co drugą literę alfabetu


(Canaletto) #1

Program wyświetla kolejne litery alfabetu. Co mam wpisać, aby program wyświetlał mi co drugą literę, począwszy od A?

Przypuszczam, że należy wprowadzić nową zmienną. Jakieś sugestie?

var

znak:Char;

begin

ListBox1.Items.Clear;

for znak:='A' to 'Z' do

ListBox1.Items.Add(znak);

ListBox2.Items.Clear;

for znak:='Z' downto 'A' do

ListBox2.Items.Add(znak);

end;

(Fiołek) #2

Nie znam się na Delphi(ani Pascalu), ale patrząc na kod, to wystarczy dodać jakąś zmienną boolowską i co przebieg pętli zmieniać ją na przeciwną i sprawdzać na początku czy jest ustawiona na true, jeśli tak, to opuścić przebieg pętli(continue w C/C++). Można to zrobić inaczej, ale nie wiem czy da rade w Pascalu/Delphi(dodawać co przepieg do zmiennej znak dwa).


(Canaletto) #3

Chyba nie ma czegoś takiego w Delphi.


(Sawyer47) #4

Jeżeli znaki to typ arytmetyczny to wystarczy w ciele pętli dać znak++ czy znak+=1.

//edit: Nie znam się na Pascalu, nie przeczytałem co to za język i tak 'strzeliłem'...


(Canaletto) #5

nr47

W pierwszym poście dałem kod źródłowy. Mógłbyś napisać, w którym to dokładnie ma być miejscu?


(mktos) #6

W Delphi nie da się zrobić pętli for ze skokiem innym niż jeden, jak i w trakcie pętli nie da się zmieniać wartości zmiennej sterującej. Ale pomysł z dodatkową zmienną logiczną jest niezły, prosty i powinien działać:

var

  znak: Char;

  drugi: Boolean;

begin

  drugi := True;

  ListBox1.Items.Clear;

  for znak := 'A' to 'Z' do

  begin

    drugi := not drugi;

    if drugi then

      Continue;

    else

      ListBox.Items.Add(znak);

  end;

end;

Jednak prawdopodobnie lepszym pomysłem będzie użycie pętli while zamiast for i inkrementacja o dwa licznika pętli.


(Canaletto) #7

Znalazłem w miarę proste rozwiązanie:

var

znak:Char;

a:Integer;

begin

a:=0;

ListBox1.Items.Clear;

for znak:='A' to 'Z' do

begin

a:=a+1;

if not (a mod 2=0) then

ListBox1.Items.Add(znak);

end;

begin

a:=0;

ListBox2.Items.Clear;

for znak:='Z' downto 'A' do

begin

a:=a+1;

if not (a mod 2=0) then

ListBox2.Items.Add(znak);

end;

end;

end;

end.

Może i tak, ale można pokombinować. Na przykład, aby wyświetlał co trzecią literę alfabetu wystarczy wpisać następujący kod:

var

znak:Char;

a:Integer;


begin

a:=0;

ListBox1.Items.Clear;

for znak:='A' to 'Z' do

begin

a:=a+1;

if (a mod 3=1) then

ListBox1.Items.Add(znak);

end;


begin

a:=0;

ListBox2.Items.Clear;

for znak:='Z' downto 'A' do

begin

a:=a+1;

if (a mod 3=1) then

ListBox2.Items.Add(znak);

end;

end;

end;

end.