Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Sys_Programming / metodSP.doc
Скачиваний:
39
Добавлен:
20.02.2016
Размер:
583.68 Кб
Скачать

Вариант №1. (*)

Задана строка. Скопировать первые count символов в другую строку. Произвеси проверку 0 < count <= len, где len - длина строки. Если count <= 0, то выдать пустую строку. Если count > len, то выдать сообщение об ошибке. Исходную строку, ее длину, количество копируемых символов и результат вывести на экран.

Вариант №2.(**)

Задана строка S. Скопировать count символов начиная с символа index в другую строку. ;Произвеси проверку 1 <= index <= len и 0 <= count <= len-index + 1, где len - длина строки. ;Если index > len , то выдать пустую строку. ;Если count > имеющихся символов, то скопировать символы до конца строки. ;Исходную строку, ее длину, count, index и результат вывести на экран.

Вариант №3.(**)

Вставить строку S в строку Source начиная с символа Source[index]. ;Если index < 1, где len1 - длина Source, то ничего не делать. ;Если index > len1, то добавить S в конец Source. ;Исходные строки, их длины, index и результат вывести на экран.

Вариант №4.

Подсчитать количество слов в заданном тексте. ;Исходный текст, его длину и количество слов вывести на экран.

Вариант №5.

Скопировать первое слово текста и вычислить его длину. ;Исходный текст, первое слово и его длину вывести на экран.

Вариант №6.(*)

;В заданном тексте заменить все символы '#' на символы '&&'. ;Исходный и результирующий тексты вывести на экран.

Вариант №7.

В заданном тексте удалить все символы '&'. Подсчитать количество удалений. ;Исходный и результирующий тексты, а также количество удалений вывести на экран.

Вариант №8.

В заданном тексте заменить идущие подряд пробелы одним. ;Подсчитать количество удалений.

Вариант №9.(*)

Заданный текст трансформировать таким образом, ;чтобы при выводе на экран, его слова были выведены в одну колонку. ;Исходный и результирующий тексты вывести на экран.

Вариант №10.(*)

В заданном тексте найти количество повторений заданного слова. ;Текст и количество повторений вывести на экран.

Вариант №11.

Заменить все пробелы в тексте на два пробела. Исходный и результирующий тексты вывести на экран.

Вариант №12.(*)

В заданном тексте между двумя (определенными) символами вставить '-'. Исходный и результирующий тексты вывести на экран.

Вариант №13

В тексте заменить определенный сивол другим. Исходный, результирующий текст и его длину,а также количество замен вывести на экран.

Вариант №14.(*)

Задана строка. Скопировать последние count символов в другую строку. ;Обработку строк производить с конца. ;Произвеси проверку 0 < count <= len, где len - длина строки. ;Если count <= 0, то выдать пустую строку. ;Если count > len, то выдать сообщение об ошибке. ;Исходную строку, ее длину, количество копируемых символов и ;результат вывести на экран.

Вариант №15.(**)

Удалить подстроку длиной Сount символов из строки S, начиная с S[Index]. ;Если index > len (где len - длина строки S), то ничего не удаляется. ;Если Count содержит больше символов, чем осталось, начиная с S[Index], ;то удалить остаток строки

;Исходную строку, ее длину, count, index и результат вывести на экран.

Вариант №16.

Заменить определенный символ в тексте на две звездочки. Исходный и результирующий тексты вывести на экран.

Вариант №17(***).

Найти подстроку SbStr в строке S. Если такая подстрока есть, то в переменной result выдать номер первого символа SbStr ;в строке S. В противном случае result=0. ;Исходные строки, их длины и результат вывести на экран.

Указание: сначала при помощи команды SCAS найти первый символ SbStr в S. Если найден, то далее продолжить сравнение при помощи команды CMPS.

Вариант №18.(*)

Скопировать второе слово текста и вычислить его длину. ;Исходный текст, второе слово и его длину вывести на экран.

Вариант №19.

Подсчитать количество пробелов в заданном тексте. ;Исходный текст, его длину и количество пробелов вывести на экран.

Вариант №20.

;В заданном тексте удалить все символы '#'. Исходный и результирующий тексты вывести на экран.

Вариант №21.

В заданном тексте два (определенных) символа заменить символом '-'. ;Подсчитать количество замен. ;Исходный и результирующий тексты, а также количество замен вывести на экран.

Вариант №22.(*)

Заменить все символы '%' на символы '**'. ;Исходный и результирующий тексты вывести на экран.

Вариант №23.

Заменить все символы '*' в тексте на заданную строку. Исходный и результирующий тексты вывести на экран.

Вариант №24.

В заданном тексте удалить все слова, содержащие символ ‘*’. Подсчитать количество удалений. ;Исходный и результирующий тексты, а также количество удалений вывести на экран.

Вариант №25.

Имеется некоторый текст, в котором между словами находится 1,2,3 и т.д. пробелов. Трансформировать текст таким образом, чтобы между словами было по одному пробелу. ;Исходный и результирующий тексты вывести на экран.

ЛАБОРАТОРНАЯ РАБОТА №8

Цель работы: изучить приемы прямого программирования видеобуфера.

К экрану, как и любому другому устройству, входящему в состав компьютера, можно обращаться треамя способами: с помощью функций DOS (прерывание 21h), с использованием прерывания BIOS (для управления экраном используется прерывание 10h) и, наконец, путем прямого программирования аппаратуры, в данном случае видеобуфера (видеопамяти). Функции DOS позволяют выводить только черно-белый текст и имеют ряд других ограничений (нельзя очистить экран, нет средств позиционирования курсора); при использовании прерывания BIOS все эти ограничения снимаются, однако программирование с помощью средств BIOS весьма трудоемко; наконец прямая запись в видеопамять, предоставляя возможность вывода цветного текста в любую точку экрана, является процедурой очень простой и, к тому же, повышает скорость вывода (по сравнению с использованием системных средств) в десятки и сотни раз. Прямое обращение к видеобуферу удобно использовать, например, в обработчиках прерываний, где запрещен вызов функций DOS и имеются ограничения на обращения к средствам BIOS.

Пусть по ходу программы необходимо вывести в нижнюю строку экрана предупреждающее сообщение. Для этого в программу надо включить следующие предложения:

;-------Сегмент данных---------------------

DATASG SEGMENT PARA 'Data'

text DB 'Измерения закончены' ;Заданный текст

len=$-text ;Длина строки

DATASG ENDS ;Конец сегмента данных

;------------------------Сегмент кода---------------------

CODE SEGMENT PARA PUBLIC 'CODE'

BEGIN PROC FAR

ASSUME CS:CODE, DS:DATASG, ES:DATASG, SS:STK

MOV AX,DATASG

MOV DS,AX

MOV SI,OFFSET TEXT ;DS:SI => выводимая строка

MOV AX,0B800H ;Сегментный адрес видеобуфера

MOV ES,AX ;Адресуем через ES

MOV DI, 24*80*2 ;Смещение к последней строке экрана

MOV CX,LEN ;Счетчик цикла вывода символов

CLD ;DF=0, движение по строке и по экрану вперед

MOV AH,35H ;Атрибут символов – синий по голубому

OUTSCR:

LODSB ;Взять символ из строки в AL

STOSW ;Вывод на экран символа

;из AL и его атрибута из АН

LOOP OUTSCR ;Цикл

Регистры DS:SI настраиваются на адрес начала выводимой строки; регистры ES:DI – на адрес требуемой позиции в видеобуфере. В регистр СХ надо поместить длину строки в байтах, а флаг DF сбросить, чтобы двигаться построке вперед. На экран будет выводится содержимое регистра АХ, в младшем байте которого должен находиться код ASCII выводимого символа, а в старшем байте – атрибут символа, т.е. код цвета символа ( вмладшем полубайте) и код цвета фона ( в старшем полубайте).

Соседние файлы в папке Sys_Programming