2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Assembler, работа с текстом (сравнение числа букв...) [Упр]
Сообщение22.05.2011, 23:32 


22/05/11
4
Люди! Если есть время, просьба: подскажите
В память уже введен текст (последовательность символов) и только вот этот кусочек программы не получается:

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

 Профиль  
                  
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение23.05.2011, 03:45 


21/03/06
1545
Москва
А что тут сложного? Заводите и обнуляете переменную целого типа. "Пробегаете" циклом по тексту, если встретили строчную букву, то скажем переменную увеличиваете на единичку, если прописную - то скажем уменьшаете. Под конец проверяете ее на равенство 0.

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

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

 Профиль  
                  
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение24.05.2011, 01:47 
Заслуженный участник


26/07/09
1559
Алматы
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 


22/05/11
4
e2e4, Circiter,
огромное вам спасибо!
Очень вы мне помогли и вдохновили :)
Все работает, ура

 Профиль  
                  
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение29.05.2011, 00:49 


22/05/11
4
Зачет! :)
учитывая вероятность, что может кому-нибудь пригодится, вот мой код
(кривой конечно, а зато работает))

Код:
...
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 


16/06/10
199
lidok в сообщении #451382 писал(а):
(кривой конечно, а зато работает)
Как Ваша программа поведет себя, если на входе будет "" (пустая строка)? А если точка в начале строки, например ".AaZz"? Или такие случаи не предусмотрены условиями задачи?

 Профиль  
                  
 
 Re: Assembler, работа с текстом. Помогите, пожааалуйста
Сообщение29.05.2011, 13:53 


22/05/11
4
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 ] 

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group