Отчет по лабораторної роботі №2

Тип работы:
Реферат
Предмет:
Информатика, программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

МОСКОВСЬКИЙ ІНСТИТУТ РАДИОТЕХНИКИ,

ЕЛЕКТРОНІКИ І АВТОМАТИКИ

(ТЕХНІЧНИЙ УНИВЕРСИТЕТ)

Звіт по лабораторної роботі № 2

Програмування мовами В/У

Студент:

Группа:

Москва 2003

1 ЗАВДАННЯ 3

2 БЛОК-СХЕМА ПРОГРАМИ 3

3 ТЕКСТ ПРОГРАМИ 5

4 ОПИС РОБОТИ ПРОГРАМИ 6

5 КЕРІВНИЦТВО ОПЕРАТОРА 10

1 ЗАДАНИЕ

Багаточлен [pic] з цілими коефіцієнтами у вигляді списку. Програма повинна перевіряти на рівність багаточлени P і Q.

2 БЛОК-СХЕМА ПРОГРАММЫ

да

нет

нет

да

да

нет

нет

да

Нет

Да

Ні Да

Нет

Да

Ні Да

Нет

Да

Так Нет

3 ТЕКСТ ПРОГРАММЫ

Program Project1;

{$APPTYPE CONSOLE}

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 і Q}

Write («Kol. Elementov P: > «); ReadLn (k);

FOR m: =1 to k do BEGIN

New (P);

Write («Koef.: > «); ReadLn (P^. a); Write («Step.: > «); ReadLn (P^. n);

P^. p:=nil;

IF m=1 THEN begin FstP: =P; LP: =P; end

ELSE begin LP^. p:=P;LP:=P; end;

END;

Write («Kol. Elementov Q: > «); ReadLn (k);

FOR m: =1 to k do BEGIN

New (Q);

Write («Koef.: > «); ReadLn (Q^. a);

Write («Step.: > «); ReadLn (Q^. n);

Q^. p:=nil;

IF m=1 THEN begin FstQ: =Q; LQ: =Q; end

ELSE begin LQ^. p:=Q;LQ:=Q; end;

END;

{ПРОГРАММА}

P: =FstP;Q:=FstQ;

REPEAT

If ((P^. pnil) and (Q^. p=nil)) or ((P^. p=nil) and (Q^. pnil)) Then

Begin Write («P Q »); b: =true; End;

If (P^. p=nil) and (Q^. p=nil) Then Begin

If (P^. a=Q^. a) and (P^. n=Q^. n) Then Begin Write («P = Q »); b: =true; End

Else Begin Write («P Q »); b: =true; End;

End;

If (P^. pnil) and (Q^. pnil) Then BEGIN

If (P^. a=Q^. a) and (P^. n=Q^. n) Then Begin P: =P^. p; Q: =Q^. p; End

Else Begin Write («P Q »); b: =true; End;

END;

UNTIL b=true;

ReadLn;

END. 4 ОПИС РОБОТИ ПРОГРАММЫ

ТАБЛИЦЯ ТИПІВ, ВИКОРИСТОВУВАНИХ ПРОГРАМОЮ |Ім'я |Тип |Призначення | |типу | | | |spisok| |Динамічна змінна зі структурою p. s | |p.s |record |Запис, яка містить перемінні типу integer (а, n) | | | |і заслання (p). а використовується для записи значення | | | |коефіцієнта багаточлена, а n для ступеня при | | | |якою стоїть цей коефіцієнт |

ТАБЛИЦЯ ЗМІННИХ, ВИКОРИСТОВУВАНИХ ПРОГРАМОЮ |Ім'я |Тип |Призначення | |m |Word |Лічильник циклів | |k |Word |Кількість елементів в многочленах | |b |boolean |Ознака перебування результату порівняння списків | | | |P і Q | |P |spisok |Покажчик, у якому адресу довільного | | | |елемента списку Р | |Q |spisok |Покажчик, у якому адресу довільного | | | |елемента списку Q | |FstP |spisok |Покажчик, у якому адресу першого елемента | | | |списку Р | |FstQ |spisok |Покажчик, у якому адресу першого елемента | | | |списку Q | |LP |spisok |Покажчик, у якому адресу останнього елемента | | | |списку Р | |LQ |spisok |Покажчик, у якому адресу останнього елемента | | | |списку Q |

Спочатку роботи програма виводить на екран рядок «Kol. Elementov P: > «, після чого слід запровадити значення кількості елементів, які записуватися до списку P. Потім відбувається зчитування цього значення й перемінної k присвоюється це значение.

Далі організується цикл для введення коефіцієнтів (чи ступенів кожного окремого елемента (n) списку Р, починаючи з елемента має найбільшу ступінь і до коефіцієнтом елемента має найменшу ступінь. Цикл організується операторами FOR і TO. Починаючи з m, приймаючої значення 1, до значення перемінної k (кількість елементів у списку) програма виконує следующее:

— З допомогою процедури New резервує місце у пам’яті ЕОМ під динамічну зміну, адресу якої містить покажчик P.

— Виводить на екран рядок, у якій написано «Koef.: > «. Після висновку про рядки програма чекає введення значення коефіцієнта елемента. Після введення значення воно присвоюється на полі а динамічної перемінної структури p. s, на яку посилається покажчик Р.

— Виводить на екран рядок, у якій написано «Step.: > «. Після висновку про рядки програма чекає введення значення ступеня елемента. Після введення значення воно присвоюється на полі n динамічної перемінної структури p. s, яку посилається покажчик Р. У центрі p записується значення nil.

— Перевіряється умова: якщо m одно 1, що відповідає першому елементу списку, тоді програма привласнює значення покажчика Р покажчикам FstР (покажчик, у якому адресу першого елемента списку) і LР (покажчик, у якому адресу останнього елемента списку). Тобто покажчик FstL міститиме адресу першого елемента списку. Бо інакше якщо m не одно 1, що він відповідає другому і елементам списку, програма привласнює засланні останнього елемента списку, яку підказує покажчик LР значення покажчика Р, і покажчику LР привласнює адресу покажчика Р. Елемент, який посилається покажчик Р стає останнім в списке.

У цьому цикл оператора FOR завершується. Отже відбувається заповнення списку Р, який містить значення коефіцієнтів і ступенів всіх елементів багаточлена виду [pic].

Після цього програма виводить на екран рядок «Kol. Elementov Q: > «, після чого слід запровадити значення кількості елементів, які записуватися до списку Q. Потім відбувається зчитування цього значення й перемінної k присвоюється це значение.

Далі організується цикл аналогічний циклу записи елементів списку Р. Замість Р тут використовується покажчик Q, замість FstP покажчик FstQ, який містить адресу першого елемента списку Q, а замість LP використовується LQ, який містить адресу останнього елемента списку Q. Отже формується два списку Р і Q.

Покажчикам Р і Q присвоюється адресу першого елемента списків Р і Q, які є відповідно покажчиках FstР і FstQ. Потім організується цикл з допомогою операторів REPEAT і UNTIL, виконуваному до того часу поки змінна b (ознака перебування результату порівняння списків P і Q) стане рівним true.

1) Перевіряється умова з допомогою оператора IF. Якщо значення поля р динамічної перемінної структури p. s, яку вказує покажчик Р, не одно значенням nil і це ж полі динамічної перемінної структури p. s, на яку вказує покажчик Q, одно значенням nil АБО навпаки значення поля р динамічної перемінної структури p. s, яку вказує покажчик Р, одно значенням nil і це ж полі динамічної перемінної структури p. s, на яку вказує покажчик Q, не одно значенням nil, тоді виконується таке. На екран виводиться рядок «P Q «і перемінної b присвоюється значення true. Це відповідає з того що одне із списків містить менше кількість елементів, ніж у іншому. Відповідно багаточлени неможливо знайти рівні друг другу.

2) Перевіряється умова з допомогою оператора IF. Якщо значення поля р динамічної перемінної структури p. s, яку вказує покажчик Р, одно значенням nil і це ж полі динамічної перемінної структури p. s, на яку вказує покажчик Q, одно значенням nil, що він відповідає адресами останніх елементів двох списків, тоді перевіряється рівність коефіцієнтів і ступенів останніх елементів списків Р і Q. Якщо значення полів, а динамічних змінних структури p. s, куди вказують покажчики Р і Q, рівні одна одній, що він відповідає з того що попередніх елементи цих списків були рівні й останні елементи теж рівні. Тоді на екран видається рядок «P = Q «і перемінної b присвоюється значення true. Бо інакше на екран виводиться рядок «P Q «і перемінної b присвоюється значення true. Це відповідає з того що все елементи крім їх у списках равны.

3) Перевіряється умова з допомогою оператора IF. Якщо значення поля р динамічної перемінної структури p. s, яку вказує покажчик Р, не одно значенням nil і це ж полі динамічної перемінної структури p. s, на яку вказує покажчик Q, не одно значенням nil, що він відповідає адресами неостанніх елементів двох списків, тоді перевіряється рівність коефіцієнтів і ступенів останніх елементів списків Р і Q. Якщо вони самі рівні, тоді покажчикам присвоюється значення таких елементів списку, т. е. значення полів р динамічної перемінної структури p. s, яку вони у цей час посилаються. І програма порівнюватиме наступного циклі такі елементи списку. Інакше на екран виводиться рядок «P Q «і перемінної b присвоюється значення true. Це відповідає з того що який- то елемент вже з списку відрізняється від відповідного йому елемента іншого списку. Відповідно багаточлени неможливо знайти рівні друг другу.

Внаслідок цього циклу визначається рівність списків Р і Q.

Далі програма чекає натискання на клавішу «Enter «. Програма завершує работу.

5 КЕРІВНИЦТВО ОПЕРАТОРА

Багаточлен [pic] з цілими коефіцієнтами у вигляді списку. Програма повинна перевіряти на рівність багаточлени P і Q.

Робота програми що необхідно дати два багаточлена P і Q.

І тому програма видає на екран рядок: |Kol. Elementov Р: > |

Після цього потрібні запровадити кількість елементів багаточлена Р і натиснути клавішу «Enter «. Програма запам’ятовує це значение.

Потім програма питатиме у оператора коефіцієнт при x і ступінь x кожного елемента багаточлена починаючи з першого елемента, має максимальну ступінь, і до елементом з найменшої степенью.

І тому програма видає на екран рядок: |Koef.: > |

Після цього рядка необхідно провести значення коефіцієнта елемента багаточлена й тицьнути на клавішу «Enter ».

Далі програма виведе на екран наступний рядок: |Step.: > |

Після цього рядка необхідно провести значення ступеня тієї самої елемента багаточлена й тицьнути на клавішу «Enter ».

Далі програма буде вимагати запровадити коефіцієнт і рівень наступного елемента, якщо їх побільшає один і т. буд до.

Усі запроваджувані значення програма запам’ятовує і формує список, у якому все значення коефіцієнтів і ступенів x, за яких вони стоят.

Отже формується список Р.

Потім програма видає на екран рядок: |Kol. Elementov Q: > |

Після цього потрібні запровадити кількість елементів багаточлена Q і натиснути клавішу «Enter «. Програма запам’ятовує це значение.

Потім програма запитуватиме у оператора коефіцієнт при x і ступінь x кожного елемента багаточлена починаючи з першого елемента, має максимальну ступінь, і до елементом з найменшої степенью.

І тому програма видає на екран рядок: |Koef.: > |

Після цього рядка необхідно провести значення коефіцієнта елемента багаточлена й тицьнути на клавішу «Enter ».

Далі програма виведе на екран наступний рядок: |Step.: > |

Після цього рядка необхідно провести значення ступеня тієї самої елемента багаточлена й тицьнути на клавішу «Enter ».

Далі програма буде вимагати запровадити коефіцієнт і рівень наступного елемента, якщо їх побільшає один і т. буд до.

Усі запроваджувані значення програма запам’ятовує і формує список, у якому все значення коефіцієнтів і ступенів x, за яких вони стоят.

Отже формується список Q.

Коли два багаточлена представлені у вигляді списку починається переважна більшість программы.

Якщо коефіцієнт або міра хоча самого елемента багаточлена відрізняється від коефіцієнта чи ступеня відповідного елемента іншого багаточлена, то ці дві багаточлена не можуть бути рівні одна одній. Програма починає порівнювати коефіцієнти і рівня кожного з елементів двох списків між собою, починаючи з першого. Якщо програма знаходить хоча б один елемент багаточлена відрізняється від відповідного елемента другого багаточлена, то відповідно на екран буде виведено рядок: |P Q |

Якщо ж програма не знаходить жодного елемента багаточлена яка від відповідного елемента другого багаточлена, то відповідно на екран буде виведено рядок: |P = Q |

Далі програма чекає натискання на клавішу «Enter «. Після цього програма завершує работу.

ПРИМЕР

1) Коли хочете поставити багаточлен Р рівний 4×2+2х+1, то необходимо:

Коли на екран буде виведено рядок: |Kol. Elementov Р: > |

Необхідно запровадити значення 3 й тицьнути на клавішу «Enter ».

Далі буде виведено рядок: |Koef.: > |

Після цього рядка необхідно провести значення 4 й тицьнути на клавішу «Enter ».

Далі програма виведе на екран наступний рядок: |Step.: > |

Після цього рядка необхідно провести значення 2 й тицьнути на клавішу «Enter ».

Далі буде виведено знову рядок, т. до. число елементів в многочлене одно 3: |Koef.: > |

Після цього рядка необхідно провести значення 2 й тицьнути на клавішу «Enter ».

Далі програма виведе на екран наступний рядок: |Step.: > |

Після цього рядка необхідно провести значення 1 й тицьнути на клавішу «Enter ».

Далі буде виведено третій і другий раз рядок: |Koef.: > |

Після цього рядка необхідно провести значення 1 й тицьнути на клавішу «Enter ».

Далі програма виведе на екран наступний рядок: |Step.: > |

Після цього рядка необхідно провести значення 0 й тицьнути на клавішу «Enter ».

Отож ви задасте багаточлен 4×2+2х+1.

Аналогічно задається і багаточлен Q. Якщо ви хоч поставили багаточлен Q рівний 3×2+2х+1, то після обчислень програма видасть на екран рядок у тому, що ці дві багаточлена нерівні: |P Q |

Далі необхідно натиснути клавішу «Enter «і яскрава програма завершує работу.

2) Якщо вже ви поставили багаточлен Р рівний: 4×2+2х+1. І багаточлен Q рівний: 4×2+2х+1, то після обчислень програма видасть на екран рядок у тому, що ці дві багаточлена рівні одна одній: |P = Q |

Далі необхідно натиснути клавішу «Enter «і яскрава програма завершує роботу. -----------------------

m: =m+1

m=k

m: =k

LP^. p:=P;

LP: =P;

m=1

New (Q);

Write («Koef.: > «);

ReadLn (Q^. a);

Write («Step.: > «);

ReadLn (Q^. n);

Q^. p:=nil;

Write («Kol. Elementov Q: > «);

ReadLn (k);

m: =1

FstP: =P;

LP: =P;

m=1

LQ^. p:=Q;

LQ: =Q;

P: =FstP;

Q: =FstQ;

FstQ: =Q;

LQ: =Q;

m: =m+1

New (P);

Write («Koef.: > «);

ReadLn (P^. a);

Write («Step.: > «);

ReadLn (P^. n);

P^. p:=nil;

m=k

Початок программы

Write («Kol. Elementov P: > «);

ReadLn (k);

(P^. pnil) and

(Q^. pnil)

Write («P Q »); b: =true;

(P^. a=Q^. a) and (P^. n=Q^. n)

Write («P = Q »); b: =true;

ReadLn

b=true

Write («P Q »); b: =true;

(P^. a=Q^. a) and

(P^. n=Q^. n)

P: =P^. p; Q: =Q^. p;

(P^. p=nil) and

(Q^. p=nil)

Write («P Q »); b: =true;

((P^. pnil) and (Q^. p=nil)) or ((P^. p=nil) and (Q^. pnil))

Выход

ПоказатьСвернуть
Заполнить форму текущей работой