2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Assembler, работа с текстом (сравнение числа букв...) [Упр]
Сообщение22.05.2011, 23:32 
Люди! Если есть время, просьба: подскажите
В память уже введен текст (последовательность символов) и только вот этот кусочек программы не получается:

Необходимо проверить, равное ли в тексте количество строчных и заглавных латинских букв

 
 
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение23.05.2011, 03:45 
А что тут сложного? Заводите и обнуляете переменную целого типа. "Пробегаете" циклом по тексту, если встретили строчную букву, то скажем переменную увеличиваете на единичку, если прописную - то скажем уменьшаете. Под конец проверяете ее на равенство 0.

Отличить строчные латинские буквы от заглавных (и от прочих небукв) можно, заметив, что их номера в ASCII-коде идут подряд (соответственно, требуется два сравнения с некоторыми числами чтобы определить причастность или непричастность символа к проверяемому диапазону).

Если не секрет, где это сейчас учат ассемблеру?

 
 
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение24.05.2011, 01:47 
2e2e4
Цитата:
Если не секрет, где это сейчас учат ассемблеру?

Да по-моему на всех компьютерных специальностях. А почему бы и нет.

2lidok
Давайте я немного расшифрую сказанное e2e4'ом. :) Допустим, вы извлекли очередной символ из текста и положили его в C, тогда подсчет строчных и прописных букв сведется к проверке if 'A'<=C and C<='Z' then U=U+1 else if 'a'<=C and C<='z' then L=L+1, где U, L -- переменные (регистры), хранящие соответственно количества прописных и строчных символов латиницы. Просто переведите это на asm.

 
 
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение24.05.2011, 23:14 
e2e4, Circiter,
огромное вам спасибо!
Очень вы мне помогли и вдохновили :)
Все работает, ура

 
 
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение29.05.2011, 00:49 
Зачет! :)
учитывая вероятность, что может кому-нибудь пригодится, вот мой код
(кривой конечно, а зато работает))

Код:
...
x db 100 dup (?)
q dw ?
K dw ?
...
...
      mov bx,offset X
     mov q,0
     mov cx,k; k- количество элементов в введенной нами строке
Str: cmp byte ptr [bx], 'a'
     jb AZ;          <a - проверяем на заглавные
     cmp byte ptr [bx], 'z'
     ja S;          >z - просматриваем строку дальше
     inc q;          строчная - увеличиваем q
     jmp S
AZ: cmp byte ptr [bx], 'A'
     jb  S   
     cmp byte ptr [bx],'Z'
     ja S
     dec q;          заглавная - уменьшаем q
  S: inc bx
     cmp byte ptr [bx],'.'
     je Toch
     loop Str

   Toch:  cmp q,0
     je P1; если одинаковое количество строчных и заглавных - "прыгаем"  на метку P1
     jmp P2; иначе  - Р2
Р1:...
Р2:...
....

 
 
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение29.05.2011, 11:14 
lidok в сообщении #451382 писал(а):
(кривой конечно, а зато работает)
Как Ваша программа поведет себя, если на входе будет "" (пустая строка)? А если точка в начале строки, например ".AaZz"? Или такие случаи не предусмотрены условиями задачи?

 
 
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение29.05.2011, 13:53 
lim0n
да, по условии задачи необходимо ввести в память ЭВМ текст, из не более чем 200 символов, где точка - признак конца текста.
И потом уже проверить на равенство заглавных и строчных букв

И ввод текста, и в том числе проверка на пустую строку, у меня реализованы так:

Код:
..
R db "Vvedite text $"
V db "V stroke net elementov $"
Z db "Vvodite ne bolee 100 elementov $"
K dw ?
...
     mov dx, offset R        ; приглашение к
     outstr;                          вводу
     mov k,0
     mov cx,201               ; счетчик цикла
  L: inch [bx]                   ;считывание введенного символа
     outch [bx]                 ;вывод его на экран
     cmp byte ptr [bx], '.'  ;сравнение с точкой
     je L1                          ; если точка - goto L1
     inc bx
     inc k ; k - считает количество элементов в введенном тексте
     cmp k,200
     jg Li
     loop L   
 
L1:
     cmp k,0
     jne L2
     mov dx, offset V
     outstr
     newline
     jmp Fin
  Li:newline
     mov dx,offset Z
     outstr
     newline
     jmp Fin
L2:
... ; далее непосредственно проверка на равенство строчных и заглавных, описанная ранее

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group