| | | | | РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты в разделе Номер выпуска: | 1614 | Дата выхода: | 28.05.2016, 20:51 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 23 / 8 | Вопросов / ответов: | 1 / 1 | Консультация # 189436: Уважаемые эксперты! Пожалуйста, помогите составить программу на на assembler'e: Требуется: "Разработать подпрограмму, которая подсчитывает, сколько раз за-данный символ встречается в строке. Разработать программу, которая вводит с клавиатуры строку и число N и выдаёт список символов, которые встречаются в ... Консультация # 189436: Уважаемые эксперты! Пожалуйста, помогите составить программу на на assembler'e:
Требуется: "Разработать подпрограмму, которая подсчитывает, сколько раз за-данный символ встречается в строке. Разработать программу, которая вводит с клавиатуры строку и число N и выдаёт список символов, которые встречаются в строке не менее N раз."
Использование в emu8086 - assembler and microprocessor emulator 0.03 Желательно, делать комментарии к строкам.
Дата отправки: 18.05.2016, 20:34 Вопрос задал: haustow_2012 (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, haustow_2012! Вот Вам программа
;Разработать подпрограмму, которая подсчитывает, ;сколько раз заданный символ встречается в строке. ;Разработать программу, которая вводит с клавиатуры ;строку и число N и выдаёт список символов, ;которые встречаются в строке не менее N раз data segment sEnterString db 0ah,"Enter string: $" sEnterSymbol db 0ah,"Enter symbol: $" sEnterNumber db 0ah,"Enter number: $" sResult db 0ah,"Result: $" ;для ввода строки max db 128 ;максимальный размер len db 0 ;реальная длина строки string db 128 dup(0) ;сама строка, в конце 0dh N db 0 ;вводимое число data ends _stack segment stack 'stack' dw 128 dup(?) ;стек _stack ends assume cs:code, ds:data, ss:_stack code segment start: mov ax, data mov ds, ax ;настроим сегмент данных call GetNumber ;вводим число < 256 mov N, al ;сохраним call GetString ;вводим строку call PrintCounts ;считаем символы и выводим mov al, 0dh ;перевод строки int 29h mov al, 0ah int 29h mov ah, 0 ;ждем нажатие на клавишу int 16h mov ax, 4c00h ;выход int 21h GetNumber: ;вводим число < 256 lea dx, sEnterNumber mov ah, 9 int 21h ;приглашение lea dx, max mov ah, 0ah int 21h ;вводим строку mov bx, 10 ;bl = 10 - основание с.с., ;bh = 0 - наше число lea si, string ;введенная числовая строка GetNumber_loop: lodsb ;очередной символ cmp al, 0dh ;в конце 0dh je GetNumber_ret sub al, '0' ;превратим символ в число cmp al, 9 ja GetNumber ;если не цифр, то на повтор ввода! xchg al, bh ;al = старшие разряды, bh = новый разряд mul bl ;ax = al * 10 cmp ah, 0 ;больше 255? jne GetNumber ;на повтор ввода add bh, al ;bh - новое значение числа jc GetNumber ;> 255 - на повтор ввода jmp GetNumber_loop ;продолжаем GetNumber_ret: mov al, bh ;вернем число в al ret GetString: ;ввод строки lea dx, sEnterString mov ah, 9 int 21h lea dx, max mov ah, 0ah int 21h ret SearchSymbol: ;поиск вхождения в строке string символа al lea di, string ;адрес строки mov ah, 0 ;счетчик SearchSymbol_loop: cmp byte ptr [di], 0dh ;конец строки? je SearchSymbol_ret cmp al, [di] ;сравниваем jne SearchSymbol_next inc ah ;считаем одинаковые mov byte ptr [di], 0 ;обнулим встреченные! ;чтобы не искать еще раз! SearchSymbol_next: inc di ;на следующий адрес jmp SearchSymbol_loop SearchSymbol_ret: ret PrintCounts: ;поиск и вывод найденных символов lea dx, sResult ;выведем сообщение mov ah, 9 int 21h lea si, string ;адрес строки PrintCounts_loop: lodsb ;очередной символ cmp al, 0dh ;конец строки? je PrintCounts_ret cmp al, 0 ;0 пропускаем je PrintCounts_loop call SearchSymbol ;считаем cmp ah, N ;сравним с числом N jb PrintCounts_loop int 29h ;выведем, если >= N jmp PrintCounts_loop PrintCounts_ret: ret code ends end start
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! | | | | | | | |
| | | | | РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты в разделе Номер выпуска: | 1613 | Дата выхода: | 25.05.2016, 18:21 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 23 / 8 | Вопросов / ответов: | 1 / 1 | Консультация # 189448: Язык Lisp. 1) Написать функцию возведения числа X в степень Y. (defun power (x y) (cond ((= y 0) 1) (t (* x (power x (- y 1))) ) ... Консультация # 189448: Язык Lisp.
1) Написать функцию возведения числа X в степень Y.
(defun power (x y) (cond ((= y 0) 1) (t (* x (power x (- y 1))) ) ) )
2) Вычислить значение функции y=10/(1+x), где x?[0..20] и изменяется с шагом h=0.5, все полученные значения хранить в списке.
(defun func (x) (setq y (/ 10 (+ 1 x))) (cond ((= x 20) (list x y)) (t (cons (list x y) (func (+ x 0.5))) ) ) )
>> loop for x in (func 4) do (print x) 3) Написать функцию удаления из списка элемента с указанным номером.
(defun kill# (a b) (cond ((= b 0) (cdr a)) ((atom a) a) (t (cons (car a) (kill# (cdr a) (- b 1))) ) ) )
4) Написать функцию удаления из списка первого встреченного элемента, соответствующего указанному значению.
(defun killf (a key) (cond ((atom a) a) ((= key (car a)) (cdr a)) (t (cons (car a) (killf (cdr a) key)) ) ) )
Может кто-то объяснитЬ, что мы тут делаем в каждой строке? Дата отправки: 20.05.2016, 09:58 Вопрос задал: Посетитель - 399158 (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Зенченко Константин Николаевич (Модератор): Здравствуйте, Посетитель - 399158!
Опишем используемые функции:
DEFUN | определяет функцию пользователя | ATOM | предикат возвращает истину, если переменная является атомом | CAR | функция возвращает голову списка | CDR | функция возвращает хвост списка | CONS | функция присоединяет голову к хвосту списка | COND | функция ветвления возвращает результат, если сработает соответсвующее условие | T | последняя строка функции ветвления, срабатывает, если не сработало ни одно условие верления | = | функция сравнивает переменную с прерменной или значением | + - * / | математичиские функции сложения, вычитания, умножения и деления |
(defun power (x y) = определяем функцию пользователя (cond = ветвление вычислительного процесса ((= y 0) 1) = проверяем равна ли переменная Y нулю, т.е. если степень равна нулю возвращается 1 (t = выполнить следующую строку в любом случае (* x (power x (- y 1))) = рекурсивно вызываем функцию с измененной степенью и полученный результат умножаем с переменной ) ) )
(defun func (x) (setq y (/ 10 (+ 1 x))) = вычисляем текущее значение переменной (cond ((= x 20) (list x y)) = возвращаем список из переменной и значения (t (cons (list x y) (func (+ x 0.5))) = соединяем ренее полученный список с текущим ) ) )
(defun kill# (a b) (cond ((= b 0) (cdr a)) = если переменная В равна нулю возвращается хвост списка ((atom a) a) = проверяется является ли А атомом, т.е. пустой ли список (t (cons (car a) (kill# (cdr a) (- b 1))) = востанавливаем список, без уже вычеркнутого элемента ) ) )
(defun killf (a key) (cond ((atom a) a) ((= key (car a)) (cdr a)) = проверяется, является ли голова списка нужным элементом (t (cons (car a) (killf (cdr a) key)) ) ) )
Удачи!
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! | | | | | | | |
| | | | | РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты в разделе Номер выпуска: | 1612 | Дата выхода: | 24.05.2016, 17:51 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 23 / 8 | Вопросов / ответов: | 1 / 1 | Консультация # 189441: Здравствуйте! У меня возникли сложности с таким вопросом: Здравствуйте, вот у меня код неправильно выдает результат, нужно Определить номер максимального числа. ... Консультация # 189441: Здравствуйте! У меня возникли сложности с таким вопросом: Здравствуйте, вот у меня код неправильно выдает результат, нужно Определить номер максимального числа.
RD #90 WR R1 RD #4 WR R2 CALL M WR R7 RD #100 WR R1 RD #4 WR R2 CALL M WR R8 RD #110 WR R1 RD #4 WR R2 CALL M WR R9 ADD R8 ADD R7 DIV #3 OUT HLT M: RD @R1 WR R4 MOV R3,R1 JMP L1 L2: RD @R1+ WR R5 SUB R4 JS L1 MOV R4,R5 MOV R3,R1 L1: JRNZ R2,L2 RD R3 RET Заранее спасибо. Дата отправки: 19.05.2016, 17:18 Вопрос задал: lileay (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, lileay! Вот мое решение...
RD #90 WR R1 RD #4 WR R2 CALL M SBI #90 WR R6 RD #100 WR R1 RD #4 WR R2 CALL M SBI #100 ADD R6 WR R6 RD #110 WR R1 RD #4 WR R2 CALL M SBI #110 ADD R6 DIV #3 OUT HLT M: RD @R1 WR R5 JMP L3 L2: RD @R1 WR R5 SUB R4 JS L1 L3: MOV R4,R5 MOV R3,R1 L1: RD R1 ADI #1 WR R1 JRNZ R2,L2 RD R3 RET  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 19.05.2016, 21:13 5 нет комментария ----- Дата оценки: 19.05.2016, 21:27 | Рейтинг ответа: 0 |
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! | | | | | | | |
| | |