Структури та алгоритми обробки даних

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

МОСКОВСЬКИЙ ДЕРЖАВНИЙ ІНСТИТУТ
Радіотехніки, електроніки і АВТОМАТИКИ
(Технічний університет)
Кафедра «Математичне забезпечення обчислювальних систем»
ЗВІТ
з лабораторного практикуму
з дисципліни «Структури та алгоритми обробки даних»
(Частина 1)
Групи: ВСМ-6-05
Студент: Антонов О.Є.
Керівник: Сиромятніков В.П.
Москва-2007 рік

Лабораторна робота № 1
«Кільцеві однозв'язний списки»
Варіант № 1.18
ПОСТАНОВКА ЗАВДАННЯ
Сформувати лінійний однозв''язних список (ЛОС) із заданим покажчиком sag, що працює з типом даних Integer. Скласти програму, яка повинна із заданого списку видалити перший та останній елементи.
Скласти програму, яка:
- Забезпечує введення даних типу Integer з клавіатури;
- Створює лінійний однозв''язних список з введених даних з клавіатури;
- Забезпечує діалог у вигляді виведення інформаційних повідомлень і варіантів виконання подальших дій;
- Видаляє перший і останній елементи.
- У цій програмі будуть реалізовані наступні можливості роботи з ЛОС:
0 - Вихід з програми
1 - Створення ЛОС
2 - Додавання елемента в початок списку
3 - Додавання елемента в середину списку, перед вказаним значенням
4 - Додавання елемента в середину списку, після вказаного значення
5 - Додавання елемента в кінець списку
6 - Видалення елемента на початку списку
7 - Видалення елемента ЛОС стоїть перед вказаним значенням списку
8 - Видалення елемента ЛОС стоїть після вказаного значення списку
9 - Видалення певного елемента в списку
10 - Видалення елемента в кінці списку
11 - Видалення першого і останнього елементів ЛОС
12 - Очищення ЛОС
13 - Пошук елемента за його значенням
14 - Сортування елементів ЛОС
15 - Підрахунок кількості ідентичних за змістом елементів із зазначеним
ОПИС АЛГОРИТМУ РІШЕННЯ ЗАДАЧІ
Введення даних здійснюється в діалоговому режимі.
Користувач інформується про варіанти роботи в даній програмі, про особливості введення значень у програмі.
Далі здійснюється введення самого списку. Створюється лінійний однозв''язних список, із зазначенням на кінець списку (NIL) і в міру введення даних, ЛОС наповнюється, при цьому йде сортування значень елементів за зростанням.
Після введення необхідної кількості елементів і введення нульового значення, створений і відсортований ЛОС виводитися на екран.
Далі, слідуючи вказівкам програми, користувач натискає Enter, для продовження роботи програми, на екран виводитися перелік можливих варіантів роботи в даній програмі.
Після вибору потрібного номера операції, в нашому випадку (11 - Видалити перший і останній елементи ЛОС) і натискання на Enter. Відбувається видалення першого і останнього елементів ЛОС, з виводом на екран підсумкового виду ЛОС.

ОПИС ВИКОРИСТОВУЮТЬСЯ СТРУКТУР ДАНИХ
Для зберігання даних відповідно з постановкою завдання необхідно в програмі створити Лінійний однозв''язних Список (ЛОС).
Опис типу використовуваних даних
Type
chisla = set of 0 ".. '9 '; {безліч}
TE = Integer; {опис цілочисельного типу}
WE = String; {опис строкового типу}
PE = ^ EL; {опис типу покажчика}
EL = Record {опис типу - запис}
inf: TE; {інформаційна частина елемента, тип Integer}
inf2: WE; {інформаційна частина елемента, тип String}
next: PE {адресна частина елемента}
End;
Var
Sag, {покажчик початку списку}
q, qq: PE; {змінні покажчиків}
oper, st, st2: TE; {змінні цілочисельного типу}
w, stroka: WE; {змінні строкового типу}
Описи користувацьких інтерфейсів
Початковий вигляд вікна програми.
Для початку введення даних в ЛОС, треба визначитися з яким типом даних Ви хотіли б працювати. Після того, як Ви вирішили з яким типом даних Ви будете далі працювати, Вам потрібно ввести номер варіанти подальшої роботи (1 або 2).
Для виконання умов даної лабораторної, вибираємо тип Integer (тип цілочисельний) межа його від -32768 до 32767.
Далі, здійснюється введення самого списку. Створюється лінійний однозв''язних список, із зазначенням на кінець списку (NIL) і в міру введення даних, ЛОС наповнюється, при цьому йде сортування значень елементів за зростанням.
Після введення необхідної кількості елементів і введення нульового значення, створений і відсортований ЛОС виводитися на екран. (Рис.2)
Далі, слідуючи вказівкам програми, користувач натискає Enter для продовження роботи програми, і на екран виводитися перелік можливих варіантів роботи в даній програмі. (Рис.3)
Після вибору потрібного номера операції, для виконання умов нашої задачі, вибираємо (11 - Видалити перший і останній елементи ЛОС) і натискаємо на Enter. Відбувається видалення першого і останнього елементів ЛОС, з виводом на екран підсумкового виду ЛОС. (Рис.4)
Видно, що з поставленим завданням наша програма впоралася. Були вилучені перший і останній елементи ЛОС, а потім був виведений підсумковий вид ЛОС.
Лістинг програм
Type
chisla = set of 0 ".. '9 '; / / безліч
TE = Integer; / / опис цілочисельного типу
WE = String; / / опис строкового типу
PE = ^ EL; / / тип покажчика
EL = Record / / опис типу - запис
inf: TE; / / інформаційна частина елемента, тип Integer
inf2: WE; / / інформаційна частина елемента, тип String
next: PE / / адресна частина елемента
End;
Var
Sag, / / ​​покажчик, на початок списку
q, qq: PE; / / змінні покажчиків
oper, st, st2: TE; / / змінні цілочисельного типу
w, stroka: WE; / / змінні строкового типу
Procedure Print (sag: PE); {висновок ЛОС}
Var
q: PE; / / адресна мінлива
Begin
q: = sag ^. next; / / запам'ятовуємо адресу першого елемента ЛОС
if q = Nil then {перевіряємо ЛОС на порожнечу і якщо він порожній
виводимо повідомлення про те, що ЛОС порожній
і виводимо варіанти подальшої роботи
програми}
begin
WriteLn (rus ('ЛОС порожній, виводити нічого !'));
WriteLn ('');
WriteLn (rus ('___________________________________________'));
WriteLn (rus ('Що Ви хочете зробити ?'));
WriteLn (rus (''));
WriteLn (rus ('1 - Створити ЛОС '));
WriteLn (rus (''));
WriteLn (rus ('0 - Вийти '));
WriteLn (rus (''));
WriteLn (rus ('Введіть номер необхідної операції'));
WriteLn (rus ('___________________________________________'));
WriteLn ('');
end
Else {якщо ЛОС не порожній продовжуємо виконання
процедури}
Begin {перевіряємо, з яким типом даних відбувається
робота програми}
If st = 1 then {якщо користувач вибрав варіант роботи, робота з типом Integer}
/ / St = 1 - робота з типом даних, Integer
Begin
While q <> Nil do {проходимо по всьому ЛОС поки не дійдемо до покажчика кінця списку (Nil)}
Begin
Write ('[', q ^. Inf, ']'); {виводимо на екран значення елемента ЛОС - тип
Integer}
q: = q ^. next; / / запам'ятовуємо адреса наступного елемента
End;
WriteLn;
end
else
Begin
While q <> Nil do {проходимо по всьому ЛОС поки не дійдемо до
покажчика кінця списку (Nil)}
Begin
Write ('[', q ^. Inf2, ']'); {виводимо на екран значення елемента ЛОС - тип
String}
q: = q ^. next; / / запам'ятовуємо адреса наступного елемента
End;
WriteLn ('');
end;
End;
End;
Procedure Proverka (var w: WE); {перевірка перевищення
значення типу Integer}
Var
a, i: TE;
c: char;
b: chisla;
Begin
w: ='';
ReadLn (w); / / введення числа з клавіатури - тип String
While (w ='') or (w ='-') do {перевіряємо, якщо користувач не ввів дані чи увів тільки знак мінуса виводимо на екран повідомлення про не коректні введенні}
Begin
WriteLn (Rus ('Ви не ввели дані або вони не коректні, спробуйте ще раз')); WriteLn ('');
Proverka (w); / / виконуємо рекурсивний вхід в процедуру
End;
for i: = 1 to length (w) do {запускаємо цикл перевірки числа на коректність введення, число введено, як рядок. З цього ми можемо поелементно перевірити кожну цифру}
begin
b: = ['0 ', '1', '2 ', '3', '4 ', '5', '6 ', '7', '8 ', '9']; / / безліч складається з цифр
c: = w [i]; {беремо кожну цифру з числа проходячи від першої до останньої}
if (c in b) or (c ='-') and (i = 1) then {порівнюємо чи є цифра з введеного числа в безлічі заданих цифр і перевіряємо яке число було введено, негативне чи позитивне і чи не варто знак мінус в середині числа}
else
a: = 1; {якщо число не коректно робимо позначку для подальшої перевірки}
end;
if a = 1 then {якщо число не пройшло перевірку виводимо
повідомлення про не коректному введенні числа}
begin
WriteLn (rus ('Ви ввели не коректні дані !'));
WriteLn ('');
Proverka (w); {виконуємо рекурсивний вхід в
процедуру}
end;
if (length (w) <5) then {якщо довжина числа менше 5 знаків закінчуємо перевірку, так як число не перевищує максимального значення типу Integer, а коректність введення ми вже перевірили}
else {якщо число більше то перевіряємо його
далі}
begin
if (length (w)> 5) and (w [1] <> '-') then {якщо довжина числа більше п'яти
знаків, і при цьому перший знак, не знак
мінуса то виводимо повідомлення про
перевищенні максимального
значення типу Integer}
begin
Write (rus ('Ви ввели не число або число перевищує діапазон'));
WriteLn (rus ('типу Integer (-32 768 .. 32767)'));
WriteLn ('');
WriteLn (rus ('Введіть інше число'));
Proverka (w); {виконуємо рекурсивний вхід в
процедуру}
end;
if (w [1] = '-') and (length (w)> 4) and (w> '-32768') then {якщо перший знак числа, знак мінуса, а число по довжині менше або дорівнює чотирьом знаків або число більше ніж чотири знаки і в ході порівняння рядок зі значенням введеного числа, менше або дорівнює рядку за значенням з максимальною межею типу Integer, то йдемо далі. Інакше, виводимо повідомлення про перевищення максимального значення типу Integer}
begin
Write (rus ('Ви ввели не число або число перевищує діапазон'));
WriteLn (rus ('типу Integer (-32 768 .. 32767)'));
WriteLn ('');
WriteLn (rus ('Введіть інше число'));
Proverka (w); {виконуємо рекурсивний вхід в
процедуру}
end;
if (length (w)> 4) and (w> '32767 ') then {якщо число по довжині менше або дорівнює чотирьом знаків або число більше ніж чотири знаки і в ході порівняння рядок зі значенням введеного числа, менше або дорівнює рядку за значенням з максимальною межею типу Integer, то йдемо далі. Інакше виводимо повідомлення про перевищення максимального значення типу Integer}
begin
Write (rus ('Ви ввели не число або число перевищує діапазон'));
WriteLn (rus ('типу Integer (-32 768 .. 32767)'));
WriteLn ('');
WriteLn (rus ('Введіть інше число'));
Proverka (w); {виконуємо рекурсивний вхід в
процедуру}
end;
end;
End;
Procedure Gou (w: WE); forward; / / Випереджаючий опис процедури
Procedure Create2 (var sag: PE); {Процедура введення елементів в ЛОС з сортуванням за зростанням}
Var
q, qq, s: PE; / / адресні змінні
a: TE; / / мінлива для введення даних
Begin
writeln ('');
WriteLn (rus ('Введіть елементи в ЛОС:'));
WriteLn (rus ('Введення завершіть 0'));
if st2 <> 1 then / / якщо ЛОС ще не був створений
begin
New (sag); / / створюємо покажчик початку списку
q: = sag ^. next; / / запам'ятовуємо адресу першого елемента ЛОС
end;
If st = 1 then {якщо користувач вибрав варіант роботи, з типом Integer}
/ / St = 1 - робота з типом даних, Integer
begin
Proverka (w); {вхід в процедуру перевірки коректності
введення даних}
a: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
end
else {якщо користувач вибрав варіант роботи, робота з типом String}
/ / St = 2 - робота з типом даних, String
ReadLn (stroka); / / введення даних типу String
if (q = nil) or (st2 = 1) then {якщо ЛОС був порожнім або ЛОС вже створювався}
Begin
New (q); {створюємо адресну змінну для
першого елемента}
If st = 1 then {якщо користувач вибрав варіант роботи, робота з типом Integer}
/ / St = 1 - робота з типом даних, Integer
q ^. inf: = a {заносимо в інформаційну частину, значення даних}
else
q ^. inf2: = stroka; {заносимо в інформаційну частину, значення даних}
q ^. next: = sag ^. next; {в адресну частину другого елементу
заносимо адресну частину першого
елемента}
sag ^. next: = q; {в адресну частину першого елемента заносимо адресу створеного покажчика}
If st = 1 then {якщо користувач вибрав варіант роботи, робота з типом Integer}
/ / St = 1 - робота з типом даних, Integer
begin
Proverka (w); {вхід в процедуру перевірки коректності введення даних}
a: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
end
else
ReadLn (stroka); / / введення даних типу String
End;
If st = 1 then {якщо користувач вибрав варіант роботи, робота з типом Integer}
/ / St = 1 - робота з типом даних, Integer
begin
While a <> 0 do {запускаємо цикл що виконується поки не буде введений нуль}
Begin
New (q); {створюємо адресну змінну для першого елемента}
q ^. inf: = a; {заносимо в інформаційну частину, значення даних}
q ^. next: = sag ^. next; {в адресну частину другого елементу заносимо адресну частину першого елемента}
sag ^. next: = q; {в адресну частину першого елемента заносимо адресу створеного покажчика}
//--------- Сортування
qq: = sag ^. next; / / запам'ятовуємо адресу першого елемента ЛОС
While qq <> Nil do {запускаємо цикл що виконується поки не буде досягнутий кінець списку}
begin
s: = qq; / / запам'ятовуємо адресу першого елемента ЛОС
qq: = qq ^. next; {запам'ятовуємо адреса наступного елемента
ЛОС}
if (qq <> nil) then {якщо адресна змінна не дорівнює вказівником кінця списку}
begin
begin
if (qq ^. inf <s ^. inf) then {якщо інформаційна частина наступного елемента менше ніж попереднього, тоді:}
begin
a: = qq ^. inf; {запам'ятовуємо значення інформаційної частини наступного елемента}
qq ^. inf: = s ^. inf; {в інформаційну частину наступного елемента запам'ятовуємо значення інформаційної частини
попереднього елемента}
s ^. inf: = a; {в інформаційну частину попереднього елемента запам'ятовуємо значення наступного елементу}
end;
end;
end;
end; //--------- кінець сортування
Proverka (w); {вхід в процедуру перевірки коректності введення даних}
a: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
end;
end
else
begin
While stroka <> 0 "do {запускаємо цикл що виконується поки не буде введений нуль}
Begin
New (q); {створюємо адресну змінну для першого елемента}
q ^. inf2: = stroka; {заносимо в інформаційну частину, значення даних}
q ^. next: = sag ^. next; {в адресну частину другого елементу
заносимо адресну частину першого
елемента}
sag ^. next: = q; {в адресну частину першого елемента заносимо адресу створеного покажчика}
//--------- Сортування
qq: = sag ^. next; / / запам'ятовуємо адресу першого елемента ЛОС
While qq <> Nil do {запускаємо цикл що виконується поки не буде досягнутий кінець списку}
begin
s: = qq; / / запам'ятовуємо адресу першого елемента ЛОС
qq: = qq ^. next; {запам'ятовуємо адреса наступного елемента
ЛОС}
if (qq <> nil) then {якщо адреса змінної не дорівнює вказівником кінця списку}
begin
begin
if (qq ^. inf2 <s ^. inf2) then {якщо інформаційна частина наступного елемента менше ніж попереднього, тоді:}
begin
a: = qq ^. inf2; {запам'ятовуємо значення інформаційної частини наступного елемента}
qq ^. inf2: = s ^. inf2; {в інформаційну частину наступного елемента запам'ятовуємо значення інформаційної частини
попереднього елемента}
s ^. inf2: = a; {в інформаційну частину попереднього елемента запам'ятовуємо значення наступного елементу}
end;
end;
end;
end;
//--------- Кінець сортування
ReadLn (stroka); / / введення даних типу String
end;
end;
WriteLn ('');
WriteLn (rus ('Ваш підсумковий ЛОС :'));
print (sag); / / вивід ЛОС на екран
WriteLn ('');
if st2 = 1 then / / якщо ЛОС наповнюється перший раз
Gou (w); {процедура переміщення між
процедурами}
End;
Procedure Vopros (w: WE); {процедура виведення списку варіантів подальших варіантів роботи в ЛОС}
Begin
WriteLn (rus ('___________________________________________'));
WriteLn (rus ('Що Ви хочете виконати далі ?'));
WriteLn ('');
WriteLn (rus ('2 - Додати елемент в початок списку '));
Write (rus ("3 - Додати елемент в середину списку, перед вказаним '));
WriteLn (rus ('значенням'));
Write (rus ('4 - Додати елемент в середину списку, після зазначеного '));
WriteLn (rus ('значення'));
WriteLn (rus ('5 - Додати елемент в кінець списку '));
WriteLn (rus (''));
WriteLn (rus ('6 - Видалити елемент на початку списку '));
Write (rus ('7 - Видалити елемент ЛОС стоїть перед вказаним '));
WriteLn (rus ('значенням списку'));
Write (rus ('8 - Видалити елемент ЛОС стоїть після зазначеного "));
WriteLn (rus ('значення списку'));
WriteLn (rus ('9 - Видалити певний елемент у списку '));
WriteLn (rus ('10 - Видалити елемент у кінці списку '));
WriteLn (rus ('11 - Видалити перший і останній елементи ЛОС '));
WriteLn ('');
WriteLn (rus ('12 - Очистити ЛОС '));
WriteLn ('');
WriteLn (rus ('13 - Пошук елемента за його значенням '));
WriteLn ('');
WriteLn (rus (Пул 14 - Сортування елементів '));
WriteLn ('');
Write (rus ('15 - Підрахувати кількість ідентичних за змістом '));
WriteLn (rus ('елементів із зазначеним'));
WriteLn ('');
WriteLn (rus ('0 - Вихід '));
WriteLn ('');
WriteLn (rus ('___________________________________________'));
End;
Procedure Gou (w: WE); {процедура переміщення між
процедурами}
Begin
WriteLn (rus ('Натисніть Enter для продовження'));
ReadLn (W); / / чекаємо натискання Enter
While w <>''do {перевіряємо чи був просто натиснутий Enter або користувач щось введено. цикл буде працювати поки користувач не натисне просто Enter, без введення даних}
begin
WriteLn ('');
if w =''then {якщо був натиснутий Enter без введення даних продовжуємо роботу процедури}
else {інакше видаємо повідомлення}
WriteLn (rus ('Будьте уважні, потрібно просто натиснути на введення !'));
ReadLn (W); / / чекаємо натискання Enter
end;
WriteLn ('');
WriteLn ('');
Vopros (w); {процедура виведення списку варіантів подальших варіантів роботи в ЛОС}
WriteLn;
WriteLn ('');
proverka (w); {вхід в процедуру перевірки коректності введення даних}
oper: = strtoint (w); {переклад числа з строкового типу даних у цілочисельний}
While oper = 1 do {якщо ЛОС не порожній то виводимо
повідомлення}
Begin
Write (rus ('Ваш ЛОС не порожній, для створення нового'));
Writeln (rus ('зніміть усе поточного .'));
Writeln (rus ('Виберіть варіант подальших дій .'));
proverka (w); {вхід в процедуру перевірки коректності введення даних}
oper: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
end;
end;
. . .
Procedure Delet11 (var sag: PE); {процедура видалення першого і останнього, елементів у ЛОС}
var
k, kk, q, qq: PE; / / адресні змінні
Begin
WriteLn (rus ('Ваш ЛОС виглядав так :'));
WriteLn ('');
print (sag); / / процедура виведення ЛОС
WriteLn ('');
q: = sag ^. next; / / запам'ятовуємо адресу першого елемента
k: = sag ^. next; / / запам'ятовуємо адресу першого елемента
If q ^. Next = Nil then {якщо адреса другого елементу містить вказує на кінець списку}
Begin
sag ^. next: = q ^. next; {в адресну частину першого елемента заносимо покажчик на кінець списку}
dispose (k); / / видаляємо адресу першого елемента
WriteLn (rus ('У ЛОС був тільки один елемент !')); / / виводимо повідомлення
WriteLn ('');
End
Else / / інакше
Begin
qq: = sag ^. next; / / запам'ятовуємо адресу першого елемента
q: = qq ^. next; / / запам'ятовуємо адресу другого елементу
if (q ^. next = Nil) then {якщо адресна частина другого елементу вказує на кінець списку (це означає що в ЛОС тільки два елементи)}
Begin
sag ^. next: = Nil; {в адресну частину початку ЛОС заносимо покажчик на кінець списку}
dispose (q); / / видаляємо адресу першого елемента
dispose (q); / / видаляємо адресу другого елементу
End
Else / / інакше
Begin
q: = sag ^. next; / / запам'ятовуємо адресу другого елементу
sag ^. next: = q ^. next; {в адресну частину першого елемента заносимо адресу другого елементу}
dispose (k); / / видаляємо адресу першого елемента
q: = sag ^. next; / / запам'ятовуємо адресу першого елемента
qq: = q ^. next; / / запам'ятовуємо адресу другого елементу
While (q <> Nil) do {цикл видалення останнього елемента
проходимо за списком, до тих пір, поки вказівник не буде дорівнює значенню, покажчика на кінець списку}
Begin
kk: = q; / / запам'ятовуємо адресу поточного елемента
q: = q ^. next; / / запам'ятовування наступного адреси
k: = qq; / / запам'ятовуємо адреса наступного елементу
qq: = qq ^. next; / / запам'ятовування наступного адреси
if qq = Nil then {якщо адресна частина наступного елемента вказує на значення кінця списку значить ми знайшли адресу останнього елемента ЛОС}
Begin
kk ^. next: = qq; {заносимо в адресну частину попереднього елемента значення кінця списку}
q: = kk ^. next; {запам'ятовування в змінну покажчика, значення кінця списку для виходу з циклу}
dispose (k); / / видаляємо адресу останнього елемента
End;
end;
End;
End;
q: = sag ^. next; / / запам'ятовуємо адресу початкового елемента
if q = Nil then {якщо адресу початкового елемента вказує на кінець списку виводимо повідомлення}
Begin
WriteLn (rus ('Ваш підсумковий ЛОС :'));
WriteLn ('');
print (sag); / / процедура виведення ЛОС на екран
WriteLn ('');
proverka (w); {вхід в процедуру перевірки коректності введення даних}
oper: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
if oper = 0 then / / якщо змінна дорівнює нулю
exit; / / завершуємо роботу програми
While (oper <> 1) do {цикл працює поки змінна не дорівнює
одиниці}
Begin {виводить повідомлення, про не вірно обраної операції}
WriteLn ('');
WriteLn (rus ('Обрана не та операція !'));
WriteLn (rus ('_____________________________________'));
WriteLn ('');
WriteLn (rus ('Введіть номер необхідної операції'));
WriteLn ('');
proverka (w); {вхід в процедуру перевірки коректності введення даних}
oper: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
if oper = 0 then / / якщо змінна дорівнює нулю
exit; / / завершуємо роботу програми
end;
end
Else
Begin
Write (rus ('Після видалення першого і останнього елементів Ваш ЛОС'));
Writeln (rus ("виглядає так :'));
WriteLn ('');
print (sag); / / процедура виведення ЛОС на екран
WriteLn ('');
Gou (w); {процедура переміщення між
процедурами}
End;
End;
. . .
Begin / / Виконання самої програми
WriteLn (rus ('Лабораторна робота студента групи ВСМ червня 2005'));
WriteLn (rus ('Антонова О.Є.'));
WriteLn (rus ('Номер лабораторної # 1.18'));
WriteLn ('');
WriteLn (rus ('Для більш зручної роботи в програмі'));
WriteLn (rus ('розгорніть вікно програми на максимальний розмір'));
WriteLn ('');
WriteLn (rus ('Натисніть Enter для продовження'));
ReadLn (W); / / чекаємо натискання Enter
While w <>''do {перевіряємо чи був просто натиснутий Enter або користувач щось введено. цикл буде працювати поки користувач не натисне просто Enter, без введення даних}
begin
WriteLn ('');
if w =''then {якщо був натиснутий Enter без введення даних продовжуємо роботу процедури}
else {інакше видаємо повідомлення}
WriteLn (rus ('Будьте уважні, потрібно просто натиснути на введення !'));
ReadLn (W); / / чекаємо натискання Enter
end;
WriteLn ('');
WriteLn (rus ('У даній лабораторній, присутні наступні'));
WriteLn (rus ('можливості роботи з ЛОС :'));
WriteLn (rus ('___________________________________________'));
WriteLn ('');
WriteLn (rus ('1 - Створити ЛОС '));
WriteLn ('');
WriteLn (rus ('2 - Додати елемент в початок списку '));
Write (rus ("3 - Додати елемент в середину списку, перед вказаним '));
WriteLn (rus ('значенням'));
Write (rus ('4 - Додати елемент в середину списку, після зазначеного '));
WriteLn (rus ('значеніея'));
WriteLn (rus ('5 - Додати елемент в кінець списку '));
WriteLn (rus (''));
WriteLn (rus ('6 - Видалити елемент на початку списку '));
Write (rus ('7 - Видалити елемент ЛОС стоїть перед вказаним '));
WriteLn (rus ('значенням списку'));
Write (rus ('8 - Видалити елемент ЛОС стоїть після зазначеного '));
WriteLn (rus ('значенням списку'));
WriteLn (rus ('9 - Видалити певний елемент у списку '));
WriteLn (rus ('10 - Видалити елемент у кінці списку '));
WriteLn (rus ('11 - Видалити перший і останній елементи ЛОС '));
WriteLn ('');
WriteLn (rus ('12 - Очистити ЛОС '));
WriteLn ('');
WriteLn (rus ('13 - Пошук елемента за його значенням '));
WriteLn ('');
WriteLn (rus (Пул 14 - Сортування елементів '));
WriteLn ('');
Write (rus ('15 - Підрахувати кількість ідентичних за змістом '));
WriteLn (rus ('елементів'));
WriteLn (rus ('з вказаним'));
WriteLn ('');
WriteLn (rus ('0 - Вихід '));
WriteLn ('');
WriteLn (rus ('___________________________________________'));
WriteLn ('');
Write (rus ('Ви будете працювати з числами (Тип Integer) - 1'));
WriteLn (rus ('або з рядками (Тип String) - 2'));
While (st <> 1) and (st <> 2) do {цикл перевірки введення номера варіанта
роботи}
Begin
WriteLn ('');
WriteLn (rus ('Виберіть номер потрібного варіанта роботи'));
WriteLn ('');
ReadLn (w);
if (w <> "1") and (w <> '2 ') then / / якщо вибраний не той варіант роботи
begin / / виводимо повідомлення
WriteLn ('');
WriteLn (rus ('Не правильно вибраний номер варіанта роботи'));
end
else
st: = StrToInt (w); {переклад числа з рядкового типу даних у цілочисельний}
end;
WriteLn ('');
Create2 (sag); / / процедура створення ЛОС
st2: = 1;
WriteLn ('');
WriteLn (rus ('Натисніть Enter для продовження'));
ReadLn (W); / / чекаємо натискання Enter
While w <>''do {перевіряємо чи був просто натиснутий Enter або користувач щось введено. цикл буде працювати поки користувач не натисне просто Enter, без введення даних}
begin
WriteLn ('');
if w =''then {якщо був натиснутий Enter без введення даних продовжуємо роботу процедури}
else / / інакше видаємо повідомлення
WriteLn (rus ('Будьте уважні, потрібно просто натиснути на введення !'));
ReadLn (W); / / чекаємо натискання Enter
end;
WriteLn ('');
WriteLn ('');
Vopros (w); {процедура виведення списку варіантів подальших варіантів роботи в ЛОС}
WriteLn;
Begin {Визначення яка операція повинна
бути запущена}
proverka (w); {вхід в процедуру перевірки коректності введення даних}
oper: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
if oper = 1 then {якщо була вибрана перша операція, а ЛОС не порожній, виводимо повідомлення}
Begin
Write (rus ('Ваш ЛОС не порожній, для створення нового'));
Writeln (rus ('зніміть усе поточного .'));
Writeln (rus ('Виберіть варіант подальших дій .'));
proverka (w); {вхід в процедуру перевірки коректності введення даних}
oper: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
end;
while oper <> 0 do {цикл працює поки не вибрана операція виходу з програми}
begin
if (oper> = 1) and (oper <= 15) then {перевірка проходить між п'ятнадцятьма
операціями}
begin
if oper = 1 then
begin
WriteLn;
WriteLn ('');
Write (rus ('Ви будете працювати з числами (Тип Integer) - 1'));
WriteLn (rus ('або з рядками (Тип String) - 2'));
st: = 0;
While (st <> 1) and (st <> 2) do {цикл перевірки введення номера варіанта
роботи}
Begin / / виводимо повідомлення
WriteLn ('');
WriteLn (rus ('Виберіть номер потрібного варіанта роботи'));
WriteLn ('');
ReadLn (w);
if (w <> "1") and (w <> '2 ') then / / якщо вибраний не той варіант роботи
begin
WriteLn ('');
WriteLn (rus ('Не правильно вибраний номер варіанта роботи'));
end
else
st: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
end;
Create2 (sag); / / процедура створення ЛОС
WriteLn;
end;
. .
if oper = 11 then
begin
WriteLn;
Delet11 (sag);
WriteLn;
end;
. . .
else
Begin
Writeln (rus ('Не коректний введення варіанту операції'));
Writeln (rus ('Спробуйте ще раз'));
proverka (w); {вхід в процедуру перевірки коректності введення даних}
oper: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
While oper = 1 do {якщо ЛОС не порожній то виводимо
повідомлення}
Begin
Write (rus ('Ваш ЛОС не порожній, для створення нового'));
Writeln (rus ('зніміть усе поточного .'));
Writeln (rus ('Виберіть варіант подальших дій .'));
proverka (w); {вхід в процедуру перевірки коректності введення даних}
oper: = StrToInt (w); {переклад числа з строкового типу даних у цілочисельний}
end;
end;
end;
if oper = 0 then / / якщо змінна дорівнює нулю, то
begin
exit; / / вихід з програми
end;
end;
end. / / Кінець програми
ОПИС ТЕСТ-ПРИКЛАДІВ
У контрольному прогоні програми використовуються наступні тест-приклади:
1. при проханні натиснути введення, буде введена одиниця
2. при питанні, з якими даними Ви будете працювати, замість 1 або 2, буде введена трійка
3. при введенні даних буде натиснуто Enter без введення значення
4. при роботі з даними типу Integer, при введенні значень буде введена не цифра, а літера
5. при роботі з даними типу Integer, при введенні значень буде введено число, що перевищує максимальне значення типу Integer
6. при виборі варіанту продовження роботи програми, замість потрібного варіанту буде введена буква або номер варіанта, що перевищує їх кількість
7. буде введений один елемент
8. буде введено два елементи
9. буде введено п'ять значень елементів ЛОС для перевірки коректності роботи програми
10. після видалення і виведення варіантів продовження роботи з програмою буде введений, номер, що перевищує за значенням запропоновані варіанти
РЕЗУЛЬТАТИ КОНТРОЛЬНОГО Прогони
Тест-приклад № 1
При прохання натиснути введення, вводитися одиниця. У відповідь виводитися повідомлення «Будьте уважні, потрібно просто натиснути на введення».
При питанні, з якими даними Ви будете працювати, замість введення варіанту роботи 1 або 2 вводитися варіант три, якого не існує. У відповідь виводитися повідомлення «Не правильно вибраний варіант роботи», надалі пропонується вибрати номер потрібного варіанта з пред'явлених.
При введенні даних, не ввівши значення, натискається введення. У відповідь виводитися повідомлення «Ви не ввели дані або вони не коректні, спробуйте ще раз».
При роботі з раніше обраним типом даних Integer, вводитися не число, а літера. Після відпрацювання процедури перевірки на коректність даних, що вводяться, виводитися повідомлення «Ви ввели не коректні дані» і буде запропоновано повторити введення даних ще раз.
При роботі з даними типу Integer, вводиться значень перевищує максимальне значення типу Integer. У відповідь виводитися повідомлення
«Ви ввели не число або число перевищує діапазон типу Integer
(-32 768 .. 32767) »і буде запропоновано ввести інше число.
а) На екран виводитися список варіантів продовження роботи з програмою. Замість номера варіанту вводитиметься номер перевищує їх кількість. У відповідь виводитися повідомлення «Не коректний введення варіанту операції» і буде запропоновано ввести номер варіанта завдання, ще раз.
б) На екран виводитися список варіантів продовження роботи з програмою. Замість номера варіанту вводитися буква. У відповідь виводитися повідомлення «Ви ввели не коректний дані» і буде запропоновано спробувати ще раз.
У ЛОС вводиться тільки один елемент. Далі, вибирається операція з видалення першого і останнього елементів ЛОС. Так, як в ЛОС був тільки один елемент, виводитися повідомлення «У ЛОС був тільки один елемент!». Далі, запускається процедура виведення на екран вмісту ЛОС. Але! Так, як ЛОС порожній, тому, що ми видалили цей, один елемент, який був у ньому. Виводиться повідомлення «ЛОС порожній, виводити нічого!». Далі, виводитися повідомлення з питанням про хід подальшої роботи програми і виводяться варіанти робіт. З пропозицією ввести варіант і продовжити. Варіанти:
1 - Створити (наповнити ЛОС)
0 - Вийти з програми
У ЛОС вводяться два елементи. Далі, вибирається операція з видалення першого і останнього елементів ЛОС. У ЛОС записані два елементи, перший і останній. Значить вони просто видаляються, а далі, запускається процедура виведення на екран вмісту ЛОС. Але! Так, як ЛОС порожній, тому, що ми видалили ці два елементи, які були в ньому. Виводиться повідомлення «ЛОС порожній, виводити нічого!». Далі, виводитися повідомлення з питанням про хід подальшої роботи програми і виводяться варіанти робіт, з пропозицією ввести варіант і продовжити. Варіанти:
1 - Створити (наповнити ЛОС)
0 - Вийти з програми
Буде введено п'ять значень елементів ЛОР (1, 2, 3, 4, 5), для перевірки коректності роботи програми. У результаті видалення першого і останнього елементів. ЛОС буде виглядати так: (2, 3, 4).
Тест-приклад № 10
Після видалення і виведення варіантів продовження роботи з програмою буде введений, номер, що перевищує за значенням запропоновані варіанти. У підсумку буде виведено повідомлення «Обрана не та операція!» І буде запропоновано ввести номер необхідної операції ще раз.

Висновок:
З результатів тест-прикладів можна сказати, що програма функціонує правильно і готова до експлуатації.

Список використаних інформаційних джерел:
1. В.П. Сиромятніков, «Структури та алгоритми обробки даних», лекції МІРЕА, 2007 діл. рік
2. В.В. Фаронов, «TURBO PASCAL 7.0» Початковий курс навчальний посібник. -М.: «КНОРУС» 2006р. - 576 с
3. А.Я. Архангельський, «Програмування в Delphi 6». -М.: ЗАТ «Видавництво БІНОМ» 2002р. - 1120 с.
4. А.Я. Архангельський, Delphi 6 «Довідковий посібник». -М.: ЗАТ «Видавництво БІНОМ» 2001р. - 1124 с.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Лабораторна робота
60.5кб. | скачати


Схожі роботи:
Алгоритми і структури даних Програмування у Cі
Структури даних для обробки інформації
Алгоритми і організація даних
Алгоритми стиснення даних 2
Алгоритми стиснення даних
Про алгоритми самоорганізації в задачі синтезу інформаційних технологій обробки сигналів
Методи обробки статистичних даних
Методи аналізу та обробки даних
Статистичні методи обробки даних
© Усі права захищені
написати до нас