0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 2
1

Написать программу поиска совершенного числа.

22.11.2013, 16:35. Показов 3361. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задали две задачи - хз как решить, но уверен что они очень простые, а я очень глуп.
1) К любому натуральному числу прибавить первую цифру. То есть 1488 ---> 14881, 228 --->2282 и т.д.
2) Написать программу поиска совершенного числа. (Совершенное число равно сумме всех своих делителей, это 6, 28, 496, 8128, 33550336, 8589869056, и т.д.)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2013, 16:35
Ответы с готовыми решениями:

Написать программу нахождения следующего за данным совершенного числа
При выполнении данного задания необходимо использовать процедуры и функции с параметрами. ...

Написать функцию определения совершенного числа
Написать функцию определения совершенного числа нужно оформить в виде фунции и завернуть все в...

Даны три числа A, B, C, написать программу поиска максимум и минимум
Здравствуйте! Помогите, пожалуйста, в оформлении задачи: Даны три числа A, B, C, написать...

Написать программу с функцией для поиска экстремального числа(наибольшего или наименьшего) элемента массива
Написать программу с функцией для поиска экстремального числа(наибольшего или наименьшего) элемента...

13
Супер-модератор
6192 / 2938 / 1300
Регистрация: 04.03.2013
Сообщений: 5,780
Записей в блоге: 1
22.11.2013, 16:41 2
Цитата Сообщение от 2ch Посмотреть сообщение
1) К любому натуральному числу прибавить первую цифру. То есть 1488 ---> 14881, 228 --->2282 и т.д.
Через строки:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  a, e : integer;
  s : string;
begin
  repeat
    write('Введи число: ');
    readln(a)
  until a > 0;
    str(a, s);
    s := s + s[1];
    val(s, a, e);
    writeln(a)
end.
Через выделение цифры:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  a, e : integer;  
begin
  repeat
    write('Введи число: ');
    readln(a)
  until a > 0;
    e := a;
    while e > 10 do
      e := e div 10;
    a := a * 10 + e;    
    writeln(a)
end.
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
22.11.2013, 16:46 3
Цитата Сообщение от 2ch Посмотреть сообщение
1) К любому натуральному числу прибавить первую цифру. То есть 1488 ---> 14881, 228 --->2282 и т.д.
Pascal
1
n:=n*10+k;//n-само число,к цифра
Цитата Сообщение от 2ch Посмотреть сообщение
2) Написать программу поиска совершенного числа. (Совершенное число равно сумме всех своих делителей, это 6, 28, 496, 8128, 33550336, 8589869056, и т.д.)
Если числа небольшие нетрудно,но если такие огромные как 33550336 то написать программу которая работает быстро тяжело.

Добавлено через 4 минуты
Программа 1 полная,
Pascal
1
2
3
4
5
6
7
8
9
10
var n,m:LongInt;
begin
Write('Введите натуральное число:');
Read(n);
m:=n;
while m>9 do m:=m div 10;
n:=n*10+m;
Writeln('Полученное число:',n);
Readln;
end.
1
Супер-модератор
6192 / 2938 / 1300
Регистрация: 04.03.2013
Сообщений: 5,780
Записей в блоге: 1
22.11.2013, 16:50 4
Новичок, второй вариант я тоже указал.
1
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
22.11.2013, 16:51 5
А,ну да точно,простите.Не заметил вторую часть вашего поста.
0
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 2
22.11.2013, 17:03  [ТС] 6
Цитата Сообщение от Новичок Посмотреть сообщение
Если числа небольшие нетрудно,но если такие огромные как 33550336 то написать программу которая работает быстро тяжело.
В пределе integer вполне хватит. Числа то знаю, а какой алгоритм поиска?
0
18 / 11 / 5
Регистрация: 27.05.2013
Сообщений: 36
22.11.2013, 18:59 7
Цитата Сообщение от 2ch Посмотреть сообщение
В пределе integer вполне хватит. Числа то знаю, а какой алгоритм поиска?
В цикле от 2 до N (наше число) div 2 проверяем, делится ли на текущее i число N без остатка (N mod i = 0). Если да, то увеличиваем некоторый счетчик суммы на i. В конце проверяем, если i = N - число совершенное
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
22.11.2013, 19:02 8
Ну раз в пределах Integer,такая прога пойдет,
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var i,j,s:Integer;
begin
for i:=1 to 32767 do//Проходим все числа от 1 до макс. в типе Integer
begin
s:=0;//Обнуляем сумму
for j:=1 to i div 2 do //Перебираем все делители от 1
if i mod j=0 then s:=s+j;//Если делится то прибавляем к s
if s=i then Write(i,' ');//Если сумма равна числу выводим на экран
end;
Writeln;
Writeln('Программа завершена.');
Readln;
end.
Находит все совершенные числа в пределах Integer.
1
18 / 11 / 5
Регистрация: 27.05.2013
Сообщений: 36
22.11.2013, 22:24 9
Новичок, один маленький совет - вместо того, чтобы явно задавать число 32767, можно написать high(integer). (Хотя, может Турбо Паскаль так не понимает, и я ошибаюсь). От этого, конечно, результат работы программы не изменится, но выглядеть будет гораздо лучше =) А если еще и табуляции будут, так вообще сказка) Просто так удобнее читать код
1
Супер-модератор
6192 / 2938 / 1300
Регистрация: 04.03.2013
Сообщений: 5,780
Записей в блоге: 1
22.11.2013, 22:29 10
Gealz, паскали такие паскали. high(integer) турбо точно не понимает. Надо максимально стараться писать под компилятор, который указан в заголовке раздела, ничего лишнего, но и ничего недостающего.
0
Gealz
22.11.2013, 22:44
  #11

Не по теме:

ildwine, не поленился, и специально скачал Турбо чтобы проверить. Работает :P

0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
22.11.2013, 23:01 12
Я вот не помню,а ведь есть какая-то константа типа MAX_INT,но не помню какая.А насчет табуляции-не привык я форматировать код свой.А вообще это по желанию-кто как хочет так и пишет.
0
3030 / 1916 / 1649
Регистрация: 30.04.2011
Сообщений: 3,060
22.11.2013, 23:09 13
Самый быстрый вариант
1
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
23.11.2013, 10:36 14
Да алгоритм UI очень классный-прям летает!Единственное,что скорее всего автору темы не это главное.Скорее всего у них тема циклы и целочисленная арифметика и не нужен такой крутой код.
0
23.11.2013, 10:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2013, 10:36
Помогаю со студенческими работами здесь

2. Написать программу поиска двузначных чисел, обладающих следующим свойством: если к сумме цифр числа прибавить квадрат этой суммы, то получится снов
Кто может напишите пожалуйста эти программы с процедурой или функцией: 1) Дан двумерный массив....

Реализовать программу для расчёта совершенного числа в диапазоне от 0 до 50000
Требуется реализовать программу для расчёта совершенного числа в диапазоне от 0 до 50000.Программа...

Написать программу для поиска четырёхзначного числа
Написать программу для поиска четырёхзначного числа, которое при делении на 133 даёт остаток 125, а...

Написать программу поиска числа Фибоначчи с помощью рекурсии
написать программу числа Фибоначчи с помощью рекурсии


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru