Roman25
Удален
|
Составить программу для графического изображения делимости чисел от 1 до n (n - исходное данное). В каждой строке надо печатать число и сколько плюсов, сколько делителей у этого числа. Например, если исходное данное - число 4, то на экране должно быть напечатано: 1+ 2++ 3++ 4+++ Составить программу получения всех совершенных чисел, меньших заданного числа n. Число называется совершенным, если равно сумме всех своих положительных делителей, кроме самого этого числа. Например, 28 - совершенно, так как 28=1+2+4+7+14. Даны натуральные числа n, m. Получить все меньшие n натуральные числа, квадрат суммы цифр которых равен m. Даны натуральные числа n и m. Найти все пары дружественных чисел, лежащих в диапазоне от n до m. Два числа называются дружественными, если каждое из них равно сумме всех делителей другого (само число в качестве делителя не рассматривается).
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 20 фев. 2005 20:25 | IP
|
|
IDStud
Удален
|
Роман, что Вам не понятно в этих задачах? Попытайтесь решить их сами. Во время решения задач, у Вас будут возникать конкретные вопросы, задавайте их. Я с удовольствием на них отвечу.
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 20 фев. 2005 22:46 | IP
|
|
Roman25
Удален
|
Спасибо ! А можно попытки к решению сюда кидать ?
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 20 фев. 2005 23:12 | IP
|
|
Roman25
Удален
|
Даны натуральные числа n, m. Получить все меньшие n натуральные числа, квадрат суммы цифр которых равен m. uses crt; var n,m,i,a,summ:integer; begin clrscr; readln (n,m); for i:= 10 to n do summ:=0; repeat a:=i mod 10; summ:=summ+a; i:=i div 10; until i<10; if (summ+i)*(summ+i)=m then writeln (i); readkey; end. Помогите найти ошибку плз !
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 20 фев. 2005 23:14 | IP
|
|
IDStud
Удален
|
uses crt; var n,m,i,a,summ:integer; begin clrscr; readln (n,m); for i:= 1 to n do begin summ:=0; a:= i; repeat summ:=summ + a mod 10; a:=a div 10; until a<10; if (summ+a)*(summ+a)=m then writeln (i); end; readkey; end. Вот что исправлено. 1. Вместо for i:= 10 to n do я написал for i:= 1 to n do. Здесь все зависит от того, как трактовать условие задачи. Мне кажется правильнее мой вариант, хотя по идее "квадрат суммы цифр" должен означать, что число как минимум двухзначное, т.е. >=10. 2. После этого же цикла заключил часть операторов в begin...end. Это объясняется правилами записи цикла for. Если тело цикла состоит из нескольких операторов, то их следует заключать в begin...end. 3. Так как переменная i участвует в цикле, то ее в теле цикла изменять нельзя, поэтому я переделал программу так, чтобы изменялась переменная a. Одна задачи решена. Попробуйте решить остальные.
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 21 фев. 2005 6:16 | IP
|
|
Roman25
Удален
|
Благодарю вас. Все решал, кроме последней, собственно говоря её сейчас и пытаюсь сделать!
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 21 фев. 2005 16:33 | IP
|
|
Roman25
Удален
|
Вот что со второй вышло: uses crt; var n,m,del1,del2,per,vtor,summ1,summ2:integer; begin readln (n,m); summ1:=0; summ2:=0; for per:=n to m do for vtor:=n to m do begin for del1:= n to m do for del2:= n to m do if (per mod del1=0) then inc (summ1); if (vtor mod del2=0) then inc (summ2); end; if (summ1-per)=(summ2-vtor) then writeln (per,' ', vtor); readkey; end. виснет.. помогайте...
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 21 фев. 2005 17:08 | IP
|
|
Roman25
Удален
|
Точнее, с последней... Про делители...
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 21 фев. 2005 17:10 | IP
|
|
IDStud
Удален
|
Четвертая задача: uses crt; var n,m,del1,del2,per,vtor,summ1,summ2:integer; begin readln (n,m); for per:=n to m - 1 do for vtor:=per + 1 to m do begin summ1:=0; summ2:=0; for del1:= 1 to per div 2 do if (per mod del1=0) then summ1:=summ1+del1; for del2:= 1 to vtor div 2 do if (vtor mod del2=0) then summ2:=summ2+del2; if (summ1=vtor)and(summ2=per) then writeln (per,' ', vtor); end; readkey; end. Изменения 1. Заголовки циклов переписались на for per:=n to m - 1 do и for vtor:=per + 1 to m do, чтобы уменьшить количество перебираемых чисел. 2. В тело цикла вошли операции приравнивания сумм нулю и операция вывода дружественных чисел. Думаю, понятно почему. 3. Ну и сам поиск делителей немного переделан. Кстати, эта программа требует больших вычислений. Поэтому, если задать большую вилку чисел (например, n=1, m=10000), программа будет долго работать и может показаться, что программа "зависла".
|
Всего сообщений: N/A | Присоединился: N/A | Отправлено: 21 фев. 2005 22:47 | IP
|
|
|