Zadanie na pętle Until lub While

0

Napisać program wypisujący dzielniki wprowadzonej liczby naturalnej.

program petla_2;
 uses crt;
 var x,i:INTEGER;
begin
 clrscr;
 write('podaj jakas liczbe calkowita: ');readln(x);
 clrscr;
 write('Dzielniki: ');
 repeat
   write(i,', ');
 until x mod i=0;
 readkey;
end. 

To ostatnia wersja tego programu. Nie mam w ogóle pomysłu na warunek do tej pętli. Za pomoc z góry dziękuje.

0

Chyba tak:

program dzielniki;
uses CRT;
var liczba, dzielnik:integer;

BEGIN
	ClrScr;
	dzielnik := 1;
	write('Podaj liczbe: ');
	readln(liczba);
	while dzielnik <> liczba do {jeśli chcesz by pokazywało że liczba dzieli sie przez sama siebie, dopisz: liczba + 1 do}
	BEGIN
		if liczba mod dzielnik = 0 then writeln(dzielnik);
		dzielnik:=dzielnik+1;
	END;
	readkey;
END.
 

Oczywiście nie uwzględniam liczby jako 'samej siebie', jeśli tak to dopisz while dzielnik <> liczba + 1

1

Po pierwsze nie przypisałeś na początku do i żadnej wartości. W pascalu domyślnie przypisywane jest chyba 0. Potem nawet gdybyś na początku przypisał jakąś wartość do i to wypisujesz ciągle tą samą liczbę dopóki i (które się nie zmienia) nie dzieli x. Czyli wypiszesz i albo raz, albo nieskończoną liczbę razy. Obczaj to:

program petla_2;
 uses crt;
 var x,i:INTEGER;
begin
 clrscr;
 write('podaj jakas liczbe calkowita: ');readln(x);
 clrscr;
 i:=1;
 write('Dzielniki: ');
 repeat
   if x mod i=0 then write(i,', ');
   i:=i+1;
 until x < i;
 readkey;
end.  
0

Dziękować za tak szybką i skuteczną pomoc. Nie znam za dobrze tych pętli bo teraz mam problem zwykła potęgą którą bym i tak szybciej sobie napisał w for niż until i while.

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