Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova_Nykytiuk.docx
Скачиваний:
2
Добавлен:
18.09.2019
Размер:
56.36 Кб
Скачать

Завдання 1.

Написать shell сценарий, который, используя графические возможности shell, выполнял вывод информации о пользователе (ФИО, группа) , ввод строки символов и обработку строки:

Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами – не менее одного пробела, за последним словом – точка. Напечатать те слова последовательности, которые отличаются от последнего слова и удовлетворяют следующему свойству: первая буква слова входит в него ещё раз.

Алгоритм вирішення завдання:

  1. Зчитуємо рядок символів.

    1. В gdialog вводимо рядок символів.

    2. Записуємо їх в файл ptext.txt.

    3. Перевіряємо чи не введений пустий рядок.

    4. Зчитуємо рядок з файлу ptext.txt в змінну ptext.

    5. Виводимо введений рядок на екран.

  2. Фільтрація слів щодо поставлених вимог

2.1. Читаємо текст по слову

2.1.а. Якщо досягли кінця рядка переходимо до п.3

2.1.б. Якщо ні, переходимо до п.2.2

2.2. Порівнюємо кожне наступне слово з останнім словом у рядку

2.3. Якщо слово співпадає, то перейти до п. 2.2

2.4. Якщо ні, то перевіряємо слово на кількість введених символів

2.4.1. Якщо кількість символів більше 8 , то виводиться повідомлення про неправильно введені дані

2.4.2. Інакше переходимо до п. 2.5

2.5. Зчитуємо кожну наступну букву слова до його кінця і порівнюємо з першою

2.5.1. Якщо символ співпадає, то заносимо слово у файл ptext1.txt і переходимо п.2.2

2.5.2 Інакше переходимо до п 2.1

3. Виводимо відфільтровані слова

Код програми:

#!/bin/bash

gdialog --inputbox "Введите текст" 10 60 2> ptext.txt # вводимо текст через #gdialog

# і записуємо його в ptext.txt

if [ $? -ne 1 ]; #перевірка умови

then

ptext=$(cat ptext.txt) #записуємо текст в змінну

echo " " > ptext1.txt # очищаємо файл ptext1.txt

echo " you enter: $ptext"; #виводимо текст на екран

for i in $ptext; #читаємо текст по слову

do

if [ ${i} = ${ptext##* } ] # порівнюємо слово з останнім словом

then :

else # якщо слово не співпадає

m=0

n=${#i}; #довжина слова

if [ $n -gt 8 ]; # перевірка слова на кількість введених символів

then

echo wrong data > ptext1.txt

gdialog --title "oops!" --textbox ./ptext1.txt 100 100

exit 0

fi # якщо кількість символів більше 8, то помилка

k=1 # лічильник букв

while [ $k -lt $n ] # читає кожне слово по букві

do

if [ ${i:$k:1} = ${i:0:1} ] # порівнює кожну літеру з першою

then

echo ${i} >> ptext1.txt # якщо літера співпадає

k=$(($k+1)) # то слово виводиться на екран

break # і цикл завершується

fi

k=$(($k+1)) #лічильник циклу while інкрементується

done

fi

done

fi

gdialog --title "words that don't matches with last word and have duplicate first letter:"

--textbox ./ptext1.txt 100 100 #виведення слів, що відповідають вимогам

rm ptext1.txt #видалення ptext1.txt

exit 0 #вихід з програми

Операційна система Windows. Системне програмування в MASM.

ФЛАГОВИЙ РЕГІСТР

Цей pегістр містить 16 біт прапорів, що керуються різними командами для індикації стану операції. В усіх випадках прапори зберігають своє значення доти, поки інша команда не змінить його. Флаговий регістр містить наступні дев'ять використовуваних біт (зірочками відзначені невикористовувані біти):

Номер біта: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Прапор: * * * * O D I T S Z * A * P * C

Розглянемо ці прапори в послідовності праворуч ліворуч.

CF (Carry Flag) - прапор переносу. Містить значення "переносів" (0 чи 1) зі старшого розряду при арифметичес ких операціях і деяких операціях зрушення і циклічного зрушення.

PF (Parity Flag) - прапор парності. Перевіряє молодші вісім біт результат- тов операцій над даними. Непарне число біт приводить до установки цього прапора в 0, а парне - у 1. Не варто плутати прапор парності з бітом контро- лю на парність.

AF (Auxiliary Carry Flag) - додатковий прапор переносу. Встановлюється в 1, якщо арифметична операція приводить до переносу четвертого праворуч біта (біт номер 3) у регистро виття однобайтовой команді. Даний прапор має відношення до арифметичних операцій над символами коду ASCII і до десяткових упакованим полям.

ZF (Zero Flag) - прапор нуля. Встановлюється в якості результату aрифметичних команд і команд порівняння. Як це не дивно, ненульовий результат приводить до установки нульового значення цього прапора, а нульовий - до установки одиничного значення. Існуюча невідповідність є, однак, логічно правильною, тому що 0 позначає "ні" (т.е. результат не дорівнює нулю), а одиниця позначає "так" (т.е. результат дорівнює нулю). Команди умовного переходу JE і JZ перевіряють цей прапор. SF (SIgn Flag) - знаковий прапор. Встановлюється у відповідності зі знаком результату (старшого біта) після арифметичних опеpацій: позитивний результат установлює 0, а негативний - 1. Команди умовного переходу JG і JL перевіряють цей прапор.

TF (Trap Flag) - прапор покрокового виконання. Цей прапор вам уже прихо- дилося встановлювати, коли використовувалася до манда Т в отладчике DEBUG. Якщо цей прапор встановлений в единичное cостояние, те процесор переходить у режим покрокового виконання команд, тобто в кожен момент виконується одна команда під користувальницьким керуванням.

IF (Interrupt Flag) - прапор переривання. При нульовому складаючись нии цього прапора переривання заборонені, при одиничному - дозволені.

DF (DIrection Flag) - прапор напрямку. Використовується в строкових опера- ціях для визначення напрямку передачі даних. При нульовому стані команда збільшує вміст регістрів SI і DI, викликаючи передачу даних ліворуч праворуч, при нульовому - зменшує вміст цих регістрів, викликаючи передачу даних праворуч ліворуч (див. гл.11).

OF (Overflow Flag) - прапор переповнення. Фіксує арифметическое переповнення, тобто перенос в/из старшого (знакового) біта при знакових арифметичних операціях. Як приклад: команда CMP порівнює два операнда

і воздействуте на прапори AF, CF, OF, PF, SF, ZF. Однак, немає необхідності перевіряти всі ці прапори по окремості. У сле- прикладі, що дує, перевіряється чи містить регістр BX нульове значення:

CMP BX,00 ;Порівняння BX з нулем

JZ B50; Перехід на B50 якщо нуль. (дії при ненулі)

B50: ... ;Крапка переходу при BX=0

Якщо BX містить нульове значення, команда CMP установлює прапор нуля ZF в одиничний стан, і можливо змінює (чи немає) інші прапори. Команда JZ (перехлд якщо нуль) перевіряє тільки прапор ZF. При одиничному значенні ZF, що позначає нульова ознака, команда передає керування на адресу, зазначений у її операнде, тобто на мітку B50.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]