Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
28th
Фев
В тексте определить количество чисел, у которых три одинаковых цифры в числе
Posted by obzor under assembler
В тексте определить количество чисел, у которых три одинаковых цифры в числе (например, 36533).
Я думаю сделать так:
1) Раз это текст, то пусть числа вводятся с клавиатуры через пробел. И надо сделать цикл по выделению каждого слова (числа), ориентируясь на пробел как на признак конца слова. Чтобы работать с каждым словом, то бишь числом, отдельно.
2) Цикл, где считается количество вхождений каждого символа (то есть цифры) в слово. Если счетчик строго равен трем, то вывести это слово на экран.
На FASM’е это дело можно организовать так. Мутновато.., но вроде работает.
Для корректного отображения — строку заканчивай пробелом:
org 100h
jmp start
hello db 13,10,'String: $'
bye db 13,10,'Result: $'
string db 80,0,80 dup(' ') ;' входной буфер для dos(0Ah)
buff db 20 dup('$') ;' выходной буфер (место под каждое слово)
;' макс.длина слова: 20 символов
start:
;' Сохраняем строку юзера ========================================
mov ah,9 ;
mov dx,hello ;
int 21h ;
mov ah,0Ah ;
mov dx,string ;
int 21h ;
mov ah,9 ;
mov dx,bye ;
int 21h ;
;' Копируем очередное слово из строки в буфер ====================
xor ch,ch ;' СН = текущая позиция в строке
mov cl,[string+1] ;' CL = длина введённой строки
mov si,string+2 ;' указатель на начало строки
startCopy: ;
mov di,buff ;' адрес приёмного буфера
xor bx,bx ;' ВХ = 0 (это будет длина слова)
copy: ;
lodsb ;' берём символы из SI,
cmp al,' ' ;' ..пока не встретиться пробел
je stopCopy ;
stosb ;' запись их в DI.
inc bx ;' длина слова +1
inc ch ;' позиция в строке +1
jmp copy ;' сл.символ...
;' Встретился пробел. Поиск триады в слове =======================
stopCopy: ;' в ВХ лежит длина слова
push si cx ;' запомним текущую позицию в строке
mov si,buff ;' SI = плавающий символ в слове
mov dx,bx ;' СX/DX = длина слова
find3: ;
mov cx,bx ;
inc cx ;' захватим последний символ
xor ah,ah ;' AH будет флагом совпадений
mov di,buff ;' где искать
mov al,byte[si] ;' что искать
@@: ;' <----------------<<---------------+
repne scasb ;' ищем до совпадения! |
or cl,cl ;' все символы слова проверили? |
jz test3 ;' да: тест на 3 |
inc ah ;' нет: флаг +1 |
jmp @b ;' продолжаем поиск совпадений -->---+
test3: ;
cmp ah,3 ;' проверка флага на 3
jz stopFind ;' прыг если равно
inc si ;' иначе: ищем сл.символ слова
dec dx ;' уменьшить длину слова
jnz find3 ;' конец слова? нет: искать дальше..
jmp clearBuff ;' иначе: нет триады. Очистить буфер!
;' Есть 3 совпадения! Выводим результат ===========================
stopFind:
mov ah,9 ;' выводим слово из буфера
mov dx,buff ;
int 21h ;
mov al,' ' ;' ..и вставляем пробел/разделитель
int 29h ;
clearBuff: ;' забиваем буфер баксами
mov al,'$' ;
mov cx,20 ;
mov di,buff ;
rep stosb ;
;' Читаем следующее слово... ======================================
nextWord: ;
pop cx si ;' восстанавливаем позицию в строке юзера
cmp ch,cl ;' всю строку проверили?
ja exit ;' да - на выход!
jmp startCopy ;' иначе: берём сл.слово строки в буфер
exit: ;
xor ax,ax ;
int 16h ;
int 20h ;' выход в DOS...
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)