Wypisywanie wszystkich dodatnich parzystych wartości

0

Program ma wczytać dwie wartości całkowite, a następnie:
wypisać na ekranie wszystkie parzyste dodatnie (wraz z 0) liczby całkowite znajdujące się pomiędzy wartościami wczytanymi.np
wprowadzono -5 i 5, wiec pojawi się 0 2 4
wprowadzono 5 i -5, wiec pojawi się 4 2 0

program x;
var
 a,b:integer;
begin
 writeln('Podaj pierwsza wartosc: ');
 readln(a); 
 writeln('Podaj druga wartosc: ');
 readln(b);
 if (a = b) or (a < 0) and (b < 0) then writeln('Zle podany zakres liczb')
 if (a <  b) then {jak zrobić pętle, żeby wypisywała mieszczące się w tym zbiorze liczby oraz dla a >b?}

end. 
0

Zapomniałeś o jednym: zadać pytanie.

0
program x;
var
  a, b, i:integer;
begin
  writeln('Podaj pierwsza wartosc: ');
  readln(a); 
  writeln('Podaj druga wartosc: ');
  readln(b);
  if (a <  b) then 
  begin  
    for i := a to b do
    begin
      //a tutaj pomyśl sam jak sprawdzić czy liczba jest parzysta i nieujemna
    end;
  end 
  else 
  begin
    for i := a downto b do
    begin
      //a tutaj pomyśl sam jak sprawdzić czy liczba jest parzysta i nieujemna
    end;
  end;  
end. 
0

Czemu pokazuje mi ciagle ta samo liczbe dla zakresu -5 5? a nie np. -4 -2 0 2 4 ?

 
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
 m,n,i,ciag_liczb:integer;
begin
 writeln('Podaj  pierwsza wartosc');
 readln(m);
 writeln('Podaj druga wartosc');
 readln(n);
 if (m = n) or (m < 0) and (n < 0) then
 begin
   writeln('Wprowadzono zle wartosci');
 end;
 for i := (m div 2) to (n div 2) do
  begin
    ciag_liczb := m div 2;
    writeln(ciag_liczb);
    writeln;
  end;
 readln;
end.
0

Czemu pokazuje mi ciagle ta samo liczbe dla zakresu -5 5? a nie np. -4 -2 0 2 4 ?

Tak? Bo ja jak ten kod uruchomię pod FPC i podam zakres od -5 do 5 to wypisuje same -2:

Podaj  pierwsza wartosc
-5
Podaj druga wartosc
5
-2

-2

-2

-2

-2

I to w dodatku w beznadziejny sposób; Liczby wyświetlaj obok siebie za pomocą Write oraz ustalając szerokość pola; Tej procedury użyj także do wyświetlenia etykiet i wprowadzania liczb dla zakresu.

0

Chce mieć taki sam wynik jak z IntToStr, tylko używając podstawowych komend. Jak to zrobić ?

 program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
 m,n,i,ciag_liczb:integer;
begin
 writeln('Podaj  pierwsza wartosc');
 readln(m);
 writeln('Podaj druga wartosc');
 readln(n);
 if (m = n) or (m < 0) and (n < 0) then
 begin
   writeln('Wprowadzono zle wartosci');
 end;
 if (m < n) then
 for i := (m div 2) to (n div 2) do
 begin
    ciag_liczb := m div 2;
    write(ciag_liczb,' ');
 end;
  if (m > n) then
  for i := (n div 2) to (m div 2) do
  begin
    write(IntToStr(i * 2) + ' ');
  end;
 readln;
end.
0

Pokazuje tę samą liczbę, ponieważ masz ciag_liczb := m div 2, czyli podczas każdej pętli jest to ta sama wartość. Żeby liczby były różne, musisz uzależnić tę wartość od i.

0

To zadanie zakrawa na fizzbuzz... na szybko skleciłem coś takiego:

uses
  Math;
var
  intA, intB: Integer;
begin
  Write('Enter A: ');
  ReadLn(intA);
  Write('Enter B: ');
  ReadLn(intB);

  if intA < intB then
  begin
    intA := Max(intA + intA and 1, 0);
    intB := intB shr 1 shl 1;

    while intA <= intB do
    begin
      Write(intA:3);
      Inc(intA, 2);
    end;
  end
  else
  begin
    intA := intA shr 1 shl 1;
    intB := Max(intB + intB and 1, 0);

    while intA >= intB do
    begin
      Write(intA:3);
      Dec(intA, 2);
    end;
  end;

  ReadLn();
end.

Przykładowe wyjścia:

Enter A: -5
Enter B: 5
  0  2  4
Enter A: 5
Enter B: -5
  4  2  0

Użyłem pętli While, bo można inkrementować i dekrementować od razu o 2; Wystarczą dwie zmienne, bez "swapowania"; Swap by się nadał, ale kolejność wypisywania może być różna; Ale coś mi się widzi, że kawa słabo działa :]

0

Co musiałbym wpisać do tego kodu, żeby nie pokazywał ujemnych liczb? Tak samo jak wyżej dla -5 5 0 2 4,-6 6 wypisać 0 2 4, dla -7 7 wypisać 0 2 4 6 .
Readkey i clrscr nie działa w delphi? Jeśli tak to jest inna funkcja działająca identycznie?

 
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
 m,n,i,ciag_liczb:integer;
begin
 writeln('Podaj  pierwsza wartosc');
 readln(m);
 writeln('Podaj druga wartosc');
 readln(n);
 if (m = n) or (m < 0) and (n < 0) then
 begin
   writeln('Wprowadzono zle wartosci');
 end;
 if (m < n) then
 for i := (m div 2) to (n div 2) do
 begin
    write(i * 2,' ');
 end;
  if (m > n) then
  for i := (n div 2) to (m div 2) do
  begin
    write(i * 2,' ');
  end;
 readln;
end.
0

Zacznij lub kończ indeksowanie pętli od/na liczbie 0; Możesz posłużyć się funkcją Max z modułu Math.

0

Co do ClrScrjest mnsóstwo stron z róznymi wersjami modułu Crt, ktory mozna użyć w Delphi 7. Pogoogluj.

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