Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
#1

ASSEMBLER:совершенные числа

24.05.2011, 07:36. Просмотров 1897. Ответов 14
Метки нет (Все метки)

Здравствуйте,помогите, пожалуйста, написать программу , которая определяет является ли введённое с клавиатуры число совершенным. Cвершенные числа - те числа у которых сумма делителей равна самому числу ( 6 = 1 + 2 + 3)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2011, 07:36
Ответы с готовыми решениями:

Assembler. Перевод числа
Написать программу, которая организует ввод с клавиатуры шестнадцатеричного...

Дано трехзначное натуральное число А.Получить новое натуральное число В,который являлся бы перевёртышём числа А (например,А=123,тогда В=321 Assembler
1.Дано трехзначное натуральное число А. Получить новое натуральное число В,...

Assembler
Объясните смысл написанного mov ax, +5 Вторая часть, это как я понимаю...

Assembler
Добре время суток, помогите в решение задачи, заранее спасибо: Разработать...

Assembler начало.
Привет. Есть желание изучать именно этот язык. До этого никогда не кодил. В...

14
Mikl___
Автор FAQ
11736 / 6047 / 544
Регистрация: 11.11.2010
Сообщений: 11,029
24.05.2011, 12:49 #2
No.Ob?, открываешь википедию и внимательно ее читаешь
Первое совершенное число — 6 (1 + 2 + 3 = 6), следующее — 28 (1 + 2 + 4 + 7 + 14 = 28). По мере того как натуральные числа возрастают, совершенные числа встречаются всё реже. Третье совершенное число — 496, четвёртое — 8128, пятое — 33550336, шестое — 8589869056, седьмое — 137438691328
Алгоритм построения чётных совершенных чисел описан в IX книге Начал Евклида, где было доказано, что число (2^P-1)*2^(p-1) является совершенным, если число 2^P-1 является простым
совершенное число p сумма
6=(2^2-1)*2^(2-1)=3*2 2 1 + 2 + 3
28=(2^3-1)*2^(3-1)=7*4 3 1 + 2 + 4 + 7 + 14
496=(2^5-1)*2^(5-1)=31*16 5 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
8128=(2^7-1)*2^(7-1)=127*64 7 1+2+4+8+16+32+64+127+254+508+1016+2032+4064
33550336=(2^13-1)*2^(13-1)=8191*4096 13 1+2+4+8+16+32+64+128+256+512+1024+2048+4096+8191+...
8589869056=(2^17-1)*2^(17-1)=131071*65536 17  
137438691328=(2^19-1)*2^(19-1)=524287*262144 19  
В начале XX века были найдены ещё три совершенных числа (для р = 89, 107 и 127), допиши их в таблицу самостоятельно.
Программа должна быть такой -- получаешь число с клавиатуры и сравниваешь его с совершенными числами, перечисленными в таблице.
1
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
24.05.2011, 19:39  [ТС] #3
дело в том,что у меня алгоритмы программы есть в уме..
1)ввод числа с клавиатуры==>найти сумму его всех множителей==>сравнить сумму с числом,если равно-то число совершенное
2) ввод числа==> сравниваем с известными совершенными,только здесь будет один недостаток-- 10 чисел легко посчитать,а вот...:
На апрель 2010 года известно 47 чётных совершенных чисел.

Вот только как реализовать это-я не знаю,так как ASSEMBLER не мой профиль (максимум что мы проходили-это сложение,вычитание)
Помогите,если не сложно,думаю,человека,владеющего ассемблером не затруднит помочь.
0
Mikl___
Автор FAQ
11736 / 6047 / 544
Регистрация: 11.11.2010
Сообщений: 11,029
25.05.2011, 05:00 #4
No.Ob?, он же pozitifforever
"Зачем делать сложным, То что проще простого?" (© Наутилус Помпилиус)
1) ввод числа с клавиатуры и превращение цепочки символов в число смотри здесь Ввод и вывод чисел в различных системах счисления
2) геморрой при переводе строки в число начнется уже после того, как число станет больше 999999999, поэтому ограничься теми числами, которые я привел в таблице, а не замахивайся на 47 чисел
3) можно даже не переводить строку в число, а напрямую сравнивать введенную строку с совершенными числами в строковом виде
4) мне-то какое дело, что ASSEMBLER не твой профиль и максимум, что ты проходил - это сложение, вычитание? -- пиши давай сам, а не дави на жалость
1
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
25.05.2011, 19:15  [ТС] #5
Спасибо за ссылку.
Напишу - отпишусь.

Добавлено через 9 часов 54 минуты
осталось только организовать ввод с клавы ))
вместо поля "число"..

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
include 'emu8086.inc'
   #make_COM#
   ORG 100h 
   MOV AX,ЧИСЛО
   CMP AX,6
   JE  label1 
   CMP AX,28
   JE  label1 
   CMP AX,496
   JE  label1
   CMP AX,8128
   JE  label1
   PRINT 'ne sovershennoe.' 
   JMP exit
   label1:
   PRINT 'sovershennoe.' 
   exit:
   RET
Добавлено через 1 час 26 минут
Вот..в самом асм все работает,а вот .com файл запускается,ввожу число и исчезает окно
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
include 'emu8086.inc'
   #make_COM#
   ORG 100h 
 
   call print_string
   call scan_num
   mov AX,CX
          call pthis
   msg db '',0
   define_scan_num
   define_print_string
   Define_pthis
   CMP AX,6
   JE  label1 
   CMP AX,28
   JE  label1 
   CMP AX,496
   JE  label1
   CMP AX,8128
   JE  label1
   PRINT 'ne sovershennoe.' 
   JMP exit
   label1:
   PRINT 'sovershennoe.' 
       exit:       
   RET
0
Vadimych
635 / 478 / 12
Регистрация: 10.01.2011
Сообщений: 1,047
25.05.2011, 19:35 #6
No.Ob?, внедри в код ожидание нажатия клавиши перед выходом:
Assembler
1
2
3
4
exit:
xor ax,ax
int 16h
ret
1
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
25.05.2011, 21:23  [ТС] #7
Готовый код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
include 'emu8086.inc'               
#make_COM#
ORG 100h 
lea SI,msg
call print_string
call scan_num
mov AX,CX
call pthis
msg db 'chislo ' ,0
define_scan_num
define_print_string
Define_pthis
CMP AX,6
JE  label1 
CMP AX,28
JE  label1 
CMP AX,496
JE  label1
CMP AX,8128
JE  label1
PRINT 'ne sovershennoe.' 
JMP exit
label1:
PRINT 'sovershennoe.' 
exit: 
xor ax,ax
int 16h
ret
0
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
01.06.2011, 11:49  [ТС] #8
вот код,обрабатывает введенные с клавы числа до 511 включительно...
6 и 28 -пишет совершенные,а вот 496 -пишет не совершенное ((
мб это из-за того что надо переводить d 16-ную...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
include 'emu8086.inc'
#make_COM#
org 100h
   lea SI,msg
   call print_string
   call scan_num
   mov AX,CX
   call pthis
db 13,10, 'chislo ',0
xor dx,dx 
 mov ax,cx  
 mov delitel,02h  
 div delitel  
 mov scet,al  
 
metka2: 
 mov ax,cx  
 xor dx,dx  
 mov dl,scet 
 mov delitel,dl
 div delitel  
 cmp ah,00h 
 je metka1 
 metka4: 
 dec scet  
 cmp scet,01h 
 jg metka2  
 jmp metka3  
 
metka1: 
 add sum,ax 
 jmp metka4
metka3: 
 mov ax,cx 
 cmp sum,ax  
 je metka5
 PRINT 'ne sovershennoe' 
 JMP exit 
metka5:  
 PRINT 'sovershennoe.' 
 exit: 
 xor ax,ax
   int 16h
 ret  
msg db 'chislo ' ,0
   define_scan_num
   define_print_string
   Define_pthis    
 num dw 0000h 
 sum dw 0001h 
 delitel db 00h 
 scet db 00h 
 end
Помогите,пожалуйста, найти ошибкИ.
0
zzzyyyxxx
763 / 307 / 11
Регистрация: 27.05.2011
Сообщений: 704
01.06.2011, 12:09 #9
Ну и чё ты паришся, делишь? Тебе же Mikl___ сказал:

3) можно даже не переводить строку в число, а напрямую сравнивать введенную строку с совершенными числами в строковом виде.

Коротко и ясно!
0
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
01.06.2011, 13:20  [ТС] #10
или я не так понимаю,или тупо загнать сов. числа(как я это сделал и написал код тут)в асм и сравнить введенное число?
такой метод не универсальный(так мне препод сказала),она хочет видеть решение через сумму делителей.
0
zzzyyyxxx
763 / 307 / 11
Регистрация: 27.05.2011
Сообщений: 704
01.06.2011, 13:30 #11
выложи этот файл [emu8086.inc], а то посмотреть что у тебя получается не могу.
0
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
01.06.2011, 13:38  [ТС] #12
Вот,там 2 .txt
Первый путем сравнения
Второй - делением(там где ошибки)
0
Вложения
Тип файла: rar Архив WinRAR.rar (857 байт, 12 просмотров)
zzzyyyxxx
763 / 307 / 11
Регистрация: 27.05.2011
Сообщений: 704
01.06.2011, 13:45 #13
эт всё хорошо, но этого в архиве нет - [emu8086.inc].
Без него я прогу не получу.
0
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
01.06.2011, 13:52  [ТС] #14
я что-то не выспался наверно
0
Вложения
Тип файла: rar emu8086.rar (1.64 Мб, 14 просмотров)
No.Ob?
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 13
04.06.2011, 17:18  [ТС] #15
Ладно,не буду больше терзать участников форума,бессмысленно.
тема закрыта
0
04.06.2011, 17:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2011, 17:18

Assembler A51
Есть два задания, я в Assemblere не очень силен. 1.Задание: Программа...

Assembler. массивы
Посмотрите, плз... Написать программу, которая вводит с клавиатуры число типа...

Вставка assembler'a в С++
Доброго времени суток, изучая вставки assembler'a в С++, столкнулся с таким...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru