Консультация № 135243
04.05.2008, 03:14
0.00 руб.
0 1 1
Написать прог, осуществляющую подсчет числа разных символов в введенной пользователем строке.(т.е. кол-во разных символов
напр строка: 111444ааабббкккк
1 - 3
4 - 3
а - 3
б - 3
к - 4
Всех символов(т.е. то что можно ввести с клавы)
Прога в приложение делает подсчет, но только цыфр.

Приложение:
data segmentCOUNT db 10 dup (0)CIFR db ‘0123456789ABCDEF‘IN_STR db 80, ?, 82 dup (?)OUT_STR db 0Dh, 0Ah, ?,‘-‘,?,?,‘$‘ data endssk segment stack db 256 dup(0)endscode segmentassume cs:code, ds:data, ss:skSTART: mov ax,data mov ds,ax lea dx, IN_STR mov ah, 0ah int 21h xor ah, ah lea bx, IN_STR+2 xor cx, cx mov cl, IN_STR+1CYC: mov al, [BX] cmp al,‘0‘ jb NC cmp al, ‘9‘ ja NC sub al, ‘0‘ mov si, ax inc COUNT[si]NC: inc bxloop CYC mov cx, 10 lea bx, CIFR xor si, si KON: mov al, ‘0‘ add ax, si mov OUT_STR+2, al mov dl, COUNT[si] mov al, dlpush cx mov cl, 4 shr al, cl xlatpop cx; cmp dl,1;jb A1 mov OUT_STR+4, al mov al, dl and al,00001111b xlat mov OUT_STR+5, al lea dx, OUT_STR mov ah, 09h int 21hA1: inc siloop KONQUIT: mov ax, 4C00h int 21hcode endsend START

Обсуждение

давно
Посетитель
7438
7205
07.05.2008, 10:39
общий
это ответ
Здравствуйте, STALKER58!
Программа в приложении "делает подсчет", и не только цифр...

Приложение:
data segmentCOUNT db 256 dup (0) ;будем считать ВСЕ коды, а их 100h;COUNT db 10 dup (0)CIFR db ‘0123456789ABCDEF‘IN_STR db 80, ?, 82 dup (?)OUT_STR db 0Dh, 0Ah, ?,‘-‘,?,?,‘$‘ data endssk segment stack db 256 dup(0)endscode segmentassume cs:code, ds:data, ss:skSTART: mov ax,data mov ds,ax lea dx, IN_STR mov ah, 0ah int 21h xor ah, ah lea bx, IN_STR+2 xor cx, cx mov cl, IN_STR+1CYC: mov al, [BX] ;введенный символ будет индексом в массиве COUNT; cmp al,\‘0\‘; jb NC; cmp al, \‘9\‘; ja NC; sub al, \‘0\‘ mov si, ax inc COUNT[si]NC: inc bxloop CYC; mov cx, 10; lea bx, CIFR; xor si, si ;KON:; mov al, \‘0\‘; add ax, si; mov OUT_STR+2, al; mov dl, COUNT[si]; mov al, dl;push cx; mov cl, 4; shr al, cl; xlat;pop cx;; cmp dl,1;;jb A1; mov OUT_STR+4, al; mov al, dl; and al,00001111b; xlat; mov OUT_STR+5, al; lea dx, OUT_STR; mov ah, 09h; int 21h;A1:; inc si;loop KON mov cx, 256 ;пробежим по всем кодам lea bx, CIFR xor si, si KON: mov dl, COUNT[si] cmp dl,0 ;будем выводить количество только для введенных символов je a1 mov al, dl push cx mov cl, 4 shr al, cl xlat pop cx mov OUT_STR+4, al mov al, dl and al,00001111b xlat mov OUT_STR+5, al mov ax, si ;индекс в строке COUNT есть сам код! mov OUT_STR+2, al lea dx, OUT_STR mov ah, 09h int 21hA1: inc si loop KONQUIT: mov ax, 4C00h int 21hcode endsend START
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа