Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 12
1

Из записи натурального числа N выбросить все цифры, кратные заданной

22.04.2016, 20:14. Показов 1179. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот такая вот задача. Из записи натурального числа N выбросить все цифры, кратные
заданной, оставив прежним порядок остальных цифр. С языком еще не очень знакома, можете подсказать хотя бы принцип и последовательность действий, при помощи которых можно решить эту задачу. А то совсем никаких идей нет. Заранее благодарна.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2016, 20:14
Ответы с готовыми решениями:

Выбросить из записи данного натурального числа n все цифры 0 и 5
дано натуральне число n. выбросить из записи числа n все цифри 0 і 5. например, из числа 59015509...

Выбросить из записи введенного натурального числа n цифры 0 и 5
Я не могу записать эту задачу на языке си с помощью цикла, использовать массив нельзя...

Вычеркнуть все вхождения заданной цифры из записи натурального числа
Есть решение , нужно переделать с помощью рекурсивной функции или процедуры. Пожалуйста!!! var ...

Выбросить из записи введенного натурального числа n цифры, которые задаются пользователем, оставив прежним порядок остал
Здравствуйте, форумчане. Нужна программа на Си, которая убирала бы из записи определённого числа,...

3
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
23.04.2016, 03:43 2
Милена1,
а другие языки программирования ты знаешь? Попробуй эту задачу выполнить на Паскале, Си или Бейсике... Результаты выложишь здесь, а дальше поможем
1
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 12
23.04.2016, 15:17  [ТС] 3
но вот на с++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    int a, s=0, i=1 , n, k;
    cin >> a >> n;
    while (a)
    {
        if ((k = a % 10)%n!=0)
        {
            s += k*i;
            i *= 10;
        }
        a /= 10;
    }
    cout << s;
}
0
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
23.04.2016, 21:09 4
Милена1, пример с 16-тиричным числом 8F5Ch размером в 2 байта (16 бит).
Разбиваем его на 4 тетрады, в каждой из которых можно закодировать числа 00..0Fh (00..15d):
Assembler
1
2
  hex  =  8    F    5    C  
  bin  =  1000 1111 0101 1100
Из этого следует, что тебе нужно выталкивать из твоего числа по 4 бита, и проверять их на кратность заданной константе. Как-нельзя-лучше подходит для этого команда SHLD. У неё 3 операнда:
Assembler
1
    SHLD приёмник, источник, счетчик
SHLD сдвигает влево биты приёмника на количество бит, указанных в третьем операнде(счётчике). Освободившееся место приёмника занимают старшие биты источника. При этом значение источника не меняется. Для следующей тетрады источник нужно сдвигать вручную. Вот что можно из этого наваять..

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
org 100h
jmp start
 
mes0   db  13,10,'Default digit: F9A3h'
       db  13,10,'Binary codes : 1111 1001 1010 0011b'
       db  13,10,'Type constant: $'
ress   db  13,10,'       Result: $'
digit  dw  0F9A3h
const  db  0
 
start:
    mov   dx,mes0         ;
    call  message         ;
    mov   ah,8            ; вводим константу
@@: int   21h             ;
    cmp   al,'0'          ; игнорируем всё,
    jb    @b              ;     ..кроме цифр 0..9
    cmp   al,'9'          ;
    ja    @b              ;
    int   29h             ;
    and   ax,0Fh          ; переводим символ в цифру,
    push  ax              ;     ..и запоминаем её
    mov   dx,ress         ;
    call  message         ;
 
    pop   bx              ; ВХ = константа (делитель)
    xor   ax,ax           ; АХ будет результат (пока очищаем)
    mov   si,[digit]      ; натуральное число
    mov   cx,4            ; кол-во цифр в числе
@@: shld  ax,si,4         ; см.описание выше!
    push  ax              ; запомним АХ
    and   ax,0Fh          ; оставляем только мл.тетраду числа
    cwd                   ; очищаем место под остаток (DX=0)
    div   bx              ; разделить АХ на ВХ
    pop   ax              ; восстановим число
    or    dx,dx           ; в DX есть остаток?
    jnz   ok              ; есть - пропускаем тетраду в приёмник
    shr   ax,4            ; иначе: удаляем её от туда
ok: rol   si,4            ; сдвинем на 4 влево источник (сл.тетрада для проверки)
    loop  @b              ; проверяем оставшиеся цифры..
                          ; в АХ у нас результат! ==============================
    call  hexOut          ;      ..выводим его на экран
    mov   al,'h'          ; вставляем в конец литер "hex"
    int   29h             ;
 
exit:                     ;
    xor   ax,ax           ;
    int   16h             ;
    int   20h             ; выход!
 
;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
message:                  ;
   mov   ah,9             ;
   int   21h              ;
ret                       ;
;-----------------------------------------------------------------------
; процедура выводит EАХ на экран в HEX
hexOut:                   ;
   pusha                  ;
   xchg  dx,ax            ; DX = число
   mov   cx,4             ; кол-во цифр для вывода
@@:                       ;
   shld  ax,dx,4          ; получить в AL очередную цифру
   rol   dx,4             ; удалить ее из DX
   and   al,0Fh           ; оставить в AL только эту цифру
   cmp   al,0Ah           ; три команды, переводящие
   sbb   al,69h           ;    ..шестнадцатеричную цифру из AL
   das                    ;         ..в соответствующий ASCII-код
   int   29h              ; вывод на экран
   loop  @b               ; повторить для всех цифр
   popa                   ;
ret                       ;
1
23.04.2016, 21:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2016, 21:09
Помогаю со студенческими работами здесь

Выбросить из записи числа все заданные цифры, оставив прежним порядок остальных цифр
Ребятки умняшки, помогите написать простенькую задачку :) Дано натуральное число. Выбросить из...

Выбросить из натурального числа цифры 0 и 5
Доброго времени суток! Только начал разбираться в Паскале. Есть задача: Определить функцию...

Для натурального числа определить истинность предиката «все цифры в записи числа равны»
Для натурального числа определить истинность предиката «все цифры в записи числа равны». Если...

Проверить, есть ли в записи числа три одинаковых цифры. Найти все делители натурального числа
1. Дано натуральное число n. Проверить, есть ли в записи числа три одинаковых цифры (n&lt;=9999). 2....


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

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