Тема: Потрібна допомога!
Завдання:
Число N вводиться з клавіатури. Треба вивести всі числа, що задовольняють умову (2^a)*(3^b)*(5^c), де a, b і c >=0, та які менші за N.
N брала більше 0 і менше 100 (перший цикл).
Я робила його таким способом: спочатку формувала три масиви: перший (у програмі А) - числа-степені двійки; другий (В) - числа-степені трійки і третій (С) - числа-степені п'ятірки.
Тоді просто брала і поступово перемножувала кожен елемент кожного масиву з іншими (тобто, перший*перший*перший, перший*перший*другий і т. д.) і з них формувала четвертий масив (D). Звичайно, він не сортований, але це я виправлю пізніше.
Проблема в тому, що в масиві D невідомо звідки з'являються числа типу 14, 28, 44, 68. Я вирахувала, що вони з'являються кожен раз, коли цикл першого масиву (з іа) робить нове "коло". Я виправляла це за допомогою if, але це якось штучно і негарно. Я хочу зрозуміти, в чому помилка.
Ще одна проблема: у кінці значення починають повторюватись і я знову не розумію, чому.
Текст програми:
Program One;
uses crt;
var
N, x, ia, ib, ic, id: integer;
bool: boolean;
A, B, C:array[1..8] of byte;
D:array[1..106] of byte;
begin;
ClrScr;
bool:=false;
x:=1;
D[1]:=1;
Write('Please, enter number less then 100: ');
While (bool=false) do
begin
ReadLn(N);
If ((N>0) and (N<=100))
then bool:=true
else Write('Wrong number. Please, enter another: ');
end;
ia:=1;
While (x<100) do
begin
Write(x,' ');
A[ia]:=x;
х:=x*2;
ia:=ia+1;
end;
x:=1;
ib:=1;
WriteLn;
While (x<100) do
begin
Write(x,' ');
B[ib]:=x;
x:=x*3;
ib:=ib+1;
end;
x:=1;
ic:=1;
WriteLn;
While (x<100) do
begin
Write(x,' ');
C[ic]:=x;
x:=x*5;
ic:=ic+1;
end;
id:=1;
WriteLn;
for ia:=1 to 7 do
for ib:=1 to 5 do
for ic:=1 to 3 do
begin
D[id]:=A[ia]*B[ib]*C[ic];
if (D[id]<=N)
then
Write(D[id],' ');
id:=id+1;
end;
ReadKey;
end.
Будь ласка, не треба радити скористатися іншим методом (наприклад, перебору чи діленням). Мене цікавить саме цей.