МОСКОВСЬКИЙ Інститут радіотехніки, p>
ЕЛЕКТРОНІКИ І АВТОМАТИКИ p>
(технічний університет) p>
Звіт по лабораторній роботі № 2 p>
Програмування на мовах В/У p>
Студент: p>
Група: p>
Москва 2003 p>
ЗМІСТ p>
1 ЗАВДАННЯ 3
2 БЛОК-СХЕМА ПРОГРАМИ 3 p>
3 ТЕКСТ ПРОГРАМИ 5 p>
4 ОПИС РОБОТИ ПРОГРАМИ 6 p>
5 КЕРІВНИЦТВО ОПЕРАТОРА 10 p>
1 ЗАВДАННЯ p>
Многочлен з цілими коефіцієнтами представити у вигляді списку.
Програма повинна перевіряти на рівність багаточлени P і Q. p>
2 БЛОК-СХЕМА ПРОГРАМИ p>
так p>
немає p>
немає p>
так p>
так p>
немає p>
немає p>
так p>
Ні p>
Так p>
Ні Так p>
Ні p>
Так p>
Ні Так p>
Ні p>
Так p>
Так Ні p>
3 ТЕКСТ ПРОГРАМИ p>
Program Project1; p>
($ APPTYPE CONSOLE) p>
Uses SysUtils; type spisok = ^ s; s = record a, n: Integer; p: spisok; end; var k, m: word; b: boolean; P, Q, FstP, LP, FstQ, LQ: spisok;
BEGIN p>
(Формування списків P і Q) p>
Write ( 'Kol. Elementov P:>'); ReadLn (k); p> < p> FOR m: = 1 to k do BEGIN p>
New (P); p>
Write ( 'Koef.:>'); ReadLn (P ^. a); Write ( 'Step.:>'); ReadLn (P ^. n); p>
P ^. p: = nil; p>
IF m = 1 THEN begin FstP: = P; LP : = P; end p>
ELSE begin LP ^. p: = P; LP: = P; end; p>
END; p>
Write ( 'Kol. Elementov Q:> '); ReadLn (k); p>
FOR m: = 1 to k do BEGIN p>
New (Q); p>
Write (' Koef.:> '); ReadLn (Q ^. a); p>
Write (' Step.:> '); ReadLn (Q ^. n); p>
Q ^. p: = nil; p>
IF m = 1 THEN begin FstQ: = Q; LQ: = Q; end p>
ELSE begin LQ ^. p: = Q; LQ: = Q ; end; p>
END; p>
(ПРОГРАМА) p>
P: = FstP; Q: = FstQ; p>
REPEAT p >
If ((P ^. pnil) and (Q ^. p = nil)) or ((P ^. p = nil) and (Q ^. pnil)) Then p>
Begin Write ( 'P Q'); b: = true; End; p>
If (P ^. p = nil) and (Q ^. p = nil) Then Begin p>
If ( P ^. a = Q ^. a) and (P ^. n = Q ^. n) Then Begin Write ( 'P = Q'); b: = true; End p>
Else Begin Write ( 'P Q'); b: = true;
End; p>
End; p>
If (P ^. Pnil) and (Q ^. Pnil) Then BEGIN p>
If (P ^. A = Q ^ . a) and (P ^. n = Q ^. n) Then Begin P: = P ^. p; Q: = Q ^. p; End p>
Else Begin Write ( 'P Q') ; b: = true;
End; p>
END; p>
UNTIL b = true; p>
ReadLn; p>
END.
4 ОПИС РОБОТИ ПРОГРАМИ p>
ТАБЛИЦЯ ТИПІВ, що використовується програмою
| Назва | Тип | Призначення |
| типу | | |
| spisok | | Динамічна мінлива зі структурою s |
| s | record | Запис, що містить змінні типу integer (а, n) |
| | | І посилання (p). а використовується для запису значення |
| | | Коефіцієнта многочлена, а n для ступеня при |
| | | Якій стоїть цей коефіцієнт | p>
ТАБЛИЦЯ ЗМІННИХ, що використовується програмою
| Назва | Тип | Призначення |
| m | Word | Лічильник циклів |
| k | Word | Кількість елементів у многочленів |
| b | boolean | Ознака знаходження результату порівняння списків |
| | | P і Q |
| P | spisok | Покажчик, що містить адресу довільного |
| | | Елемента списку Р |
| Q | spisok | Покажчик, що містить адресу довільного |
| | | Елемента списку Q |
| FstP | spisok | Покажчик, що містить адресу першого елемента |
| | | Списку Р |
| FstQ | spisok | Покажчик, що містить адресу першого елемента |
| | | Списку Q |
| LP | spisok | Покажчик, що містить адресу останнього елемента |
| | | Списку Р |
| LQ | spisok | Покажчик, що містить адресу останнього елемента |
| | | Списку Q | p>
Спочатку роботи програма виводить на екран рядок "Kol. Elementov P:>",після чого необхідно ввести значення кількості елементів, які будутьзаписуватися до списку P. Потім відбувається зчитування цього значення ізмінної k присвоюється це значення. p>
Далі організовується цикл для введення коефіцієнтів (а) і ступенів кожногоокремого елемента (n) списку Р, починаючи з елемента має найбільшуступінь і закінчуючи коефіцієнтом елемента має найменший ступінь.
Цикл організується операторами FOR і TO. Починаючи з m, що приймає значення
1, до значення змінної k (кількість елементів у списку) програмавиконує наступне: p>
- За допомогою процедури New резервує місце в пам'яті ЕОМ піддинамічну змінну, адреса якої містить покажчик P. p>
- Виводить на екран рядок, в якому написано "Koef.:>". Після виводурядка програма чекає введення значення коефіцієнта елементу. Після введеннязначення воно присвоюється в полі а динамічної змінної структури s, наяку посилається вказівник Р. p>
- Виводить на екран рядок, в якому написано "Step.:>". Після виводурядка програма чекає введення значення ступеня елементу. Після введення значеннявоно присвоюється в полі n динамічної змінної структури s, на якупосилається вказівник Р. У полі p записується значення nil. p>
- Перевіряється умова: якщо m дорівнює 1, що відповідає першійелементу списку, тоді програма присвоює значення покажчика Рвказівниками FstР (показник, що містить адресу першого елементу списку) і Lр
(показник, що містить адресу останнього елемента списку). Тобто покажчик
FstL буде містити адресу першого елемента списку. А інакше якщо m не дорівнює
1, що відповідає другому і наступним елементам списку, програмаприсвоює посиланням останнього елемента списку, на який вказуєпокажчик Lр значення покажчика Р, і вказівником Lр привласнює адресупокажчика Р. Елемент, на який посилається вказівник Р стає останнімв списку. p>
На цьому цикл оператора FOR завершується. Таким чином відбуваєтьсязаповнення списку Р, який містить значення коефіцієнтів і ступеніввсіх елементів многочлена виду. p>
Після цього програма виводить на екран рядок "Kol. Elementov Q:>",після чого необхідно ввести значення кількості елементів, які будутьзаписуватися до списку Q. Потім відбувається зчитування цього значення ізмінної k присвоюється це значення. p>
Далі організовується цикл аналогічний циклу запису елементів списку Р.
Замість Р тут використовується покажчик Q, замість FstP покажчик FstQ,який містить адресу першого елемента списку Q, а замість LP використовується
LQ, який містить адресу останнього елемента списку Q. Таким чиномформується два списки Р і Q. p>
вказівниками Р і Q присвоюється адреса першого елемента списків Р і Q,які містяться відповідно в покажчиках FstР і FstQ. Потіморганізовується цикл за допомогою операторів REPEAT і UNTIL, який виконуєтьсядо тих пір поки мінлива b (ознака знаходження результату порівняннясписків P і Q) не стане рівним true. p>
1) Перевіряється умова за допомогою оператора IF. Якщо значення поля р.динамічної змінної структури s, на яку вказує покажчик Р, недорівнює значенню nil і це ж полі динамічної змінної структури s, наяку вказує покажчик Q, дорівнює значенню nil АБО навпаки значенняполя р. динамічної змінної структури s, на яку вказує покажчик
Р, так само значенням nil і це ж полі динамічної змінної структури s, наяку вказує покажчик Q, не дорівнює значенню nil, то тоді виконуєтьсянаступне. На екран виводиться рядок "PQ" і змінної b присвоюєтьсязначення true. Це відповідає тому, що один із списків містить меншукількість елементів, ніж в іншому. Відповідно багаточлени не можуть бутирівні один одному. p>
2) Перевіряється умова за допомогою оператора IF. Якщо значення поля р.динамічної змінної структури s, на яку вказує покажчик Р,дорівнює значенню nil і це ж полі динамічної змінної структури s, наяку вказує покажчик Q, дорівнює значенню nil, що відповідаєадресами останніх елементів двох списків, то тоді перевіряється рівністькоефіцієнтів і ступенів останніх елементів списків Р і Q. Якщо значенняполів а динамічних змінних структури s, на які вказують покажчики
Р і Q, рівні один одному, що відповідає тому що всі попередні елементицих списків були рівні і останні елементи теж рівні. Тоді на екранвидається рядок "P = Q" і змінної b привласнюється значення true. А інакшена екран виводиться рядок "PQ" і змінної b присвоюється значенняtrue. Це відповідає тому, що всі елементи крім останніх у спискахрівні. p>
3) Перевіряється умова за допомогою оператора IF. Якщо значення поля р.динамічної змінної структури s, на яку вказує покажчик Р, недорівнює значенню nil і це ж полі динамічної змінної структури s, наяку вказує покажчик Q, не дорівнює значенню nil, що відповідаєадресами не останніх елементів двох списків, то тоді перевіряється рівністькоефіцієнтів і ступенів останніх елементів списків Р і Q. Якщо вони рівні,то тоді вказівниками присвоюється значення наступних елементів списку, т.тобто значення полів р динамічної змінної структури s, на яку вони вданий момент посилаються. І програма буде порівнювати в наступному циклінаступні елементи списку. Інакше на екран виводиться рядок "PQ" ізмінної b привласнюється значення true. Це відповідає тому, що будь -то елемент з одного списку відрізняється від відповідного йому елементаіншого списку. Відповідно багаточлени не можуть бути рівні один одному. P>
У результаті цього циклу визначається рівність списків Р і Q. p>
Далі програма чекає натискання на клавішу "Enter". Програма завершуєроботу. p>
5 КЕРІВНИЦТВО ОПЕРАТОРА p>
Многочлен з цілими коефіцієнтами представити у вигляді списку.
Програма повинна перевіряти на рівність багаточлени P і Q. p>
Для роботи програми необхідно задати два многочлена P і Q. p>
Для цього програма видає на екран рядок:
| Kol. Elementov Р:> | p>
Після цього необхідно ввести кількість елементів многочлена Р інатиснути клавішу "Enter". Програма запам'ятовує це значення. P>
Потім програма буде питати у оператора коефіцієнт при х іступінь х кожного елемента многочлена починаючи з першого елементу, що маємаксимальний ступінь, і закінчуючи елементом з найменшою мірою. p>
Для цього програма видає на екран рядок:
| Koef. :> | P>
Після цього рядка необхідно ввести значення коефіцієнта елементамногочлена і натиснути клавішу "Enter". p>
Далі програма виведе на екран наступний рядок:
| Step. :> | P>
Після цього рядка необхідно ввести значення ступеня того ж елементумногочлена і натиснути клавішу "Enter". p>
Далі програма буде запитувати ввести коефіцієнт і ступіньнаступного елемента, якщо їх більше одного і т. д до. p>
Все що вводяться значення програма запам'ятовує і формує список,що містить всі значення коефіцієнтів і ступенів х, при яких вони стоять. p>
Таким чином формується список Р. p>
Потім програма видає на екран рядок:
| Kol. Elementov Q:> | p>
Після цього необхідно ввести кількість елементів многочлена Q інатиснути клавішу "Enter". Програма запам'ятовує це значення. P>
Потім програма буде питати у оператора коефіцієнт при х іступінь х кожного елемента многочлена починаючи з першого елементу, що маємаксимальний ступінь, і закінчуючи елементом з найменшою мірою. p>
Для цього програма видає на екран рядок:
| Koef. :> | P>
Після цього рядка необхідно ввести значення коефіцієнта елементамногочлена і натиснути клавішу "Enter". p>
Далі програма виведе на екран наступний рядок:
| Step. :> | P>
Після цього рядка необхідно ввести значення ступеня того ж елементумногочлена і натиснути клавішу "Enter". p>
Далі програма буде запитувати ввести коефіцієнт і ступіньнаступного елемента, якщо їх більше одного і т. д до. p>
Все що вводяться значення програма запам'ятовує і формує список,що містить всі значення коефіцієнтів і ступенів х, при яких вони стоять. p>
Таким чином формується список Q. p>
Після того, як два многочлена представлені у вигляді списку починаєтьсяосновна частина програми. p>
Якщо коефіцієнт або ступінь хоча б одного елемента многочленавідрізняється від коефіцієнта або ступеня відповідного елемента іншоїмногочлена, то ці два многочлена ніяк не можуть бути рівні один одному.
Програма починає порівнювати коефіцієнти і ступеня кожного з елементівдвох списків між собою, починаючи з першого. Якщо програма знаходить хоча бодин елемент многочлена відрізняється від відповідного елемента другумногочлена, то відповідно на екран буде виведений рядок:
| PQ | p>
Якщо ж програма не знаходить жодного елементу многочленащо відрізняється від відповідного елемента другого многочлена, товідповідно на екран буде виведений рядок:
| P = Q | p>
Далі програма чекає натискання на клавішу "Enter". Після цього програмазавершує роботу. p>
ПРИКЛАД p>
1) Якщо ви хочете задати многочлен Р рівний 4х2 2 х 1, то необхідно: p>
Коли на екран буде виведений рядок:
| Kol. Elementov Р:> | p>
Необхідно ввести значення 3 і натиснути клавішу "Enter". P>
Далі буде виведений рядок:
| Koef. :> | P>
Після цього рядка необхідно ввести значення 4 і натиснути клавішу
"Enter". P>
Далі програма виведе на екран наступний рядок:
| Step. :> | P>
Після цього рядка необхідно ввести значення 2 і натиснути клавішу
"Enter". P>
Далі буде виведена знову рядок, тому що число елементів у многочленівдорівнює 3:
| Koef. :> | P>
Після цього рядка необхідно ввести значення 2 і натиснути клавішу
"Enter". P>
Далі програма виведе на екран наступний рядок:
| Step. :> | P>
Після цього рядка необхідно ввести значення 1 і натиснути клавішу
"Enter". P>
Далі буде виведено третій і останній раз рядок:
| Koef. :> | P>
Після цього рядка необхідно ввести значення 1 і натиснути клавішу
"Enter". P>
Далі програма виведе на екран наступний рядок:
| Step. :> | P>
Після цього рядка необхідно ввести значення 0 та натиснути клавішу
"Enter". P>
Таким чином ви поставите многочлен 4х2 2 х 1. P>
Аналогічно задається і многочлен Q. Якщо ви задали многочлен Q рівний
3х2 2 х 1, то після обчислень програма видасть на екран рядок про те, щоці два многочлена не рівні:
| PQ | p>
Далі необхідно натиснути клавішу "Enter" і програма завершує свою роботу. P>
2) Якщо ви задали многочлен Р рівний: 4х2 2 х 1. І многочлен Q рівний:
4х2 2 х 1, то після обчислень програма видасть на екран рядок про те, щоці два многочлена рівні один одному:
| P = Q | p>
Далі необхідно натиснути клавішу "Enter" і програма завершує свою роботу.
----------------------- p>
m: = m +1 p>
m = k p>
m: = k p>
LP ^. p: = P; p>
LP: = P; p>
m = 1 p>
New (Q); p>
Write ( 'Koef.:>'); p>
ReadLn (Q ^. a); p>
Write (' Step. :>'); p>
ReadLn (Q ^. n); p>
Q ^. p: = nil; p>
Write ( 'Kol. Elementov Q: >'); p>
ReadLn (k); p>
m: = 1 p>
FstP: = P; p>
LP: = P ; p>
m = 1 p>
LQ ^. p: = Q; p>
LQ: = Q; p>
P: = FstP; p>
Q: = FstQ; p>
FstQ: = Q; p>
LQ: = Q; p>
m: = m +1
New (P); p>
Write ( 'Koef.:>'); p>
ReadLn (P ^. a); p>
Write ( 'Step.:>'); p>
ReadLn (P ^. n); p>
P ^. p: = nil; p>
m = k p>
Початок програми p>
Write ( 'Kol. Elementov P:>'); p>
ReadLn (k); p>
(P ^ . pnil) and p>
(Q ^. pnil) p>
Write ( 'P Q'); b: = true; p>
(P ^. a = Q ^. a) and (P ^. n = Q ^. n) p>
Write ( 'P = Q'); b: = true; p>
ReadLn p>
b = true p>
Write ( 'P Q'); b: = true; p>
(P ^. a = Q ^. a) and p> < p> (P ^. n = Q ^. n) p>
P: = P ^. p; Q: = Q ^. p; p>
(P ^. p = nil ) and p>
(Q ^. p = nil) p>
Write ( 'P Q'); b: = true; p>
((P ^. pnil ) and (Q ^. p = nil)) or ((P ^. p = nil) and (Q ^. pnil)) p>
Вихід p>