Консультация № 191926
28.11.2017, 17:28
0.00 руб.
0 13 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Образовать строку из исходной, повторив i элемент i раз, i+1 элемент i+1 раз, i+2 элемент i+2 раза.
Платформа ДОС. На TASM, модель памяти SMALL. Заранее спасибо)

Обсуждение

давно
Старший Модератор
31795
6196
28.11.2017, 18:09
общий
Адресаты:
Что нибудь уже написали?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
7438
7205
29.11.2017, 14:30
общий
Адресаты:
Если не хотите с нами общаться, то не уверен, что дождетесь ответа...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401533
6
29.11.2017, 17:37
общий
Извините, не было возможности ответить..
давно
Посетитель
401533
6
29.11.2017, 17:42
общий
Мы только начали изучать данный язык программирования, нужно слишком быстро выполнять задачи. В чем-то я примерно ориентируюсь, но пока не хватает знаний для написания работающей программы с нуля. Вы уже помогали с решением данной задачи https://rfpro.ru/question/110794 . Код по ссылке на ТАСМе правильно не работает, просто выдает строку различных символов. Понимаю, что достаточно внести какие-то изменения, но какие?
давно
Старший Модератор
31795
6196
29.11.2017, 17:43
общий
Адресаты:
Цитата: vik.privalova
не было возможности

Пока Вы тут, ответьте на вопросы:
1)что у Вас есть;
2)текущая тема;
3)методичка-это что бы понять на каком уровне писать код.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
401533
6
29.11.2017, 17:48
общий
вот ссылка на методичку https://vk.com/doc36747551_453535431?hash=cfab89ce9378197133&dl=4282949d88b10fbd9b . Сейчас лабораторная №2, 8 вариант. Больше ничего нет, сказали: разбирайтесь сами!
давно
Посетитель
401533
6
29.11.2017, 18:06
общий
вот я ворона, написала текст задачи неправильно. исправляюсь: образовать строку из исходной, повторив i элемент 1 раз, 1+1 элемент - 1+1 раз, 1+2 - 1+2 раза
давно
Посетитель
7438
7205
29.11.2017, 18:13
общий
Адресаты:
Мне кажется, все равно попутали i и 1
Надо понимать так?
Образовать строку из исходной, повторив i элемент 1 раз, i+1 элемент - 1+1=2 раза, i+2 - 1+2=3 раза ?

Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
29.11.2017, 18:15
общий
Адресаты:
В этом коде из-за нескольких переносов движка портала - сбился формат.
Отформатировал заново:
[code lang=asm h=250]dos21 macro str
mov ah,09
mov dx,offset str
int 21h
endm
.model small
.stack 100h
.code
start: mov ax,@DATA
mov ds,ax
mov es,ax
;выводим приглашение к ввводу
dos21 enterStr;вводим строку
mov ah,0ah
mov dx,offset myStrMax
int 21h;ввод символа
;выводим приглашение к ввводу
dos21 enterSim
;вводим символ
mov ah,1
int 21h
mov ah,al;запомним эталонный символ
;готовимся обрабатывать строку
xor ch,ch
xor bx,bx;обнулим bx
cld
mov cl,myStrLen
mov si,offset myStr
mov di,offset getStr
;участок анализа
@@S0: push cx;в стек cx
lodsb ;в al один байт из строки mystr
or bx,bx;ВХ-флаг и счетчик
jnz @@S1;если ВХ обльше 0 -счет пошел
mov cx,1;влюбом случае 1
cmp ah,al;Проверяем текущий символ с введенным
jnz @@S2;если не равны выведем 1 символ
@@S1: inc bx;увеличим bx на единицу
mov cx,bx;занесем его в cx
@@S2: rep stosb; в стоку getstr записываем байт из al пока cx не равно нулю
pop cx;востанавливаем cx
loop @@S0;на метку цикла
;конец строки
mov byte ptr[di],'$'
dos21 endstr
dos21 getstr
mov ah,4ch
int 21h
.data
enterStr db 'Vvedite stroku: $'
enterSim db 'Vvedite simbol: $'
endStr db 0ah,0dh,'Polu4ennaya stroka: $'
;добавил переход на следующию строку
myStrMax db 6; максимальный размер буфера ввода
myStrLen db ?; размер буфера после считывания
myStr db 6 dup(?)
getStrMax db 22;=6+5+4+3+2+1+'$'
getStr db 22 dup(?)
end start [/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
401533
6
29.11.2017, 18:15
общий
Адресаты:
ну вообще, мне тоже кажется, что опечатка в тексте
давно
Посетитель
401533
6
29.11.2017, 18:23
общий
Адресаты:
Огромное спасибо!!! работает. у меня такой вопрос: можно вводить только буквы? после ввода других символов прекращается работа
давно
Старший Модератор
31795
6196
29.11.2017, 19:09
общий
Адресаты:
В принципе такого быть не должно.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
29.11.2017, 19:12
общий
это ответ
Здравствуйте, vik.privalova!

Смотрите код:
[code lang=asm h=250]dos21 macro str
mov ah,09
mov dx,offset str
int 21h
endm
.model small
.stack 100h
.code
start: mov ax,@DATA
mov ds,ax
mov es,ax
;выводим приглашение к ввводу
dos21 enterStr;вводим строку
mov ah,0ah
mov dx,offset myStrMax
int 21h;ввод символа
;выводим приглашение к ввводу
dos21 enterSim
;вводим символ
mov ah,1
int 21h
mov ah,al;запомним эталонный символ
;готовимся обрабатывать строку
xor ch,ch
xor bx,bx;обнулим bx
cld
mov cl,myStrLen
mov si,offset myStr
mov di,offset getStr
;участок анализа
@@S0: push cx;в стек cx
lodsb ;в al один байт из строки mystr
or bx,bx;ВХ-флаг и счетчик
jnz @@S1;если ВХ обльше 0 -счет пошел
mov cx,1;влюбом случае 1
cmp ah,al;Проверяем текущий символ с введенным
jnz @@S2;если не равны выведем 1 символ
@@S1: inc bx;увеличим bx на единицу
mov cx,bx;занесем его в cx
@@S2: rep stosb; в стоку getstr записываем байт из al пока cx не равно нулю
pop cx;востанавливаем cx
loop @@S0;на метку цикла
;конец строки
mov byte ptr[di],'$'
dos21 endstr
dos21 getstr
mov ah,4ch
int 21h
.data
enterStr db 'Vvedite stroku: $'
enterSim db 'Vvedite simbol: $'
endStr db 0ah,0dh,'Polu4ennaya stroka: $'
;добавил переход на следующию строку
myStrMax db 6; максимальный размер буфера ввода
myStrLen db ?; размер буфера после считывания
myStr db 6 dup(?)
getStrMax db 22;=6+5+4+3+2+1+'$'
getStr db 22 dup(?)
end start [/code]
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа