asyan.org
добавить свой файл
1


Київський Національний Університет імені Тараса Шевченка

Кафедра теорії та технології програмування

Лабораторна робота № 3

з дисципліни

,,Програмування”

на тему:

«ЕЛЕКТРОННІ ТАБЛИЦІ. АНАЛІЗ ТА ОБЧИСЛЕННЯ ВИРАЗІВ»

Виконав: студент 2 курсу

групи ТТП-2

**** *.*.
Перевірив:

Бойко Б.І.

Варіант 6
Київ

2008

Зміст


  1. Умова задачі

  2. Аналіз задачі

  3. Проектування

  4. Тестування

  5. Список використаної літератури



  1. ^

    Умова задачі


Клітини електронної таблиці містять вирази, що складаються із знаків операцій, констант та посилань на інші клітини таблиці. Перевірити синтаксичну правильність побудованого за правилами мови Паскаль виразу та знайти його значення (передбачити виконання двох етапів: синтаксична перевірка то власне обчислення значення).

Вважати, що при побудові виразів використовуються:

а) цілі числа;

б) круглі дужки;

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

Символи пропуску у виразах використовуються звичайним чином.

Перелік варіантів операцій та функцій:

  1. +, -, *, / (бінарні операції);

  2. mod, dіv;

  3. ^ (піднесення у степінь);

  4. max(x,y), mіn(x,y);


  1. ^

    Аналіз задачі


Перед нами стоять задачі на роботу з електронними таблицями та з іншими структурами даних (можна було використати «дерева»). Надзвичайно складна задача синтаксичного аналізу виразів ще більше ускладнюється можливою наявністю рекурсії по чарунках таблиці – у MS Excel це просто заборонено. Це буде заборонено і у нас.

Використаємо інверсний польський запис (ПОЛІЗ).

Також необхідно врахувати багато різних нюансів – наприклад, арність операторів, число чи вираз стоїть у чарунці, наявність функцій тощо.

Застосуємо для цього метод повного перебору чарунок таблиці з послідовною їх обробкою.

Для розв’язання задач спочатку створюємо форму, вводимо вхідні дані (у кожній чарунці по-різному), потім натискаємо на кнопку та підраховуємо шукані характеристики у таблиці, що нижче. Після цього виводимо результат.

Якщо заглибитися у алгоритм, то він такий:

1. перетворюємо вираз у чарунці на список структур. Стан про повернення показує, чи не сталося циклічне посилання або помилка. На цьому етапі знімаються посилання на інші чарунки і ліквідується загроза зациклювання по чарунках, тому, можливо, це найбільш технічно складний етап;

2. перетворюємо цей список зі списку інверсної форми запису на список ПОЛІЗУ (також контролюємо при цьому помилки, що можуть виникнути);

3. обчислюємо числове значення цього виразу.

3. Проектування




  1. Розробляємо потрібні типи даних.

  2. За необхідності, оголошуємо класи та описуємо їх склад (використання парадигми ООП у задачах деяких розділів дуже доречне через тісний зв’язок деяких функцій з певними структурами (які можна розглядати як набір членів-даних)). У даному завданні в нас невеликий за обсягом набір функцій, тому можна обійтися без цього. До речі, можна було ще лаконізувати програму, але я намагався зробити її якомога універсальнішою.

  3. Проектуємо та імплементуємо допоміжні внутрішні функції (бажано, щоб вони повертали звіт про стан результату виконання, а в них передавалися по значенню змінні для обробки (якщо це не структури – тоді заради економії пам’яті краще все ж таки передавати вказівники на них), а по посиланню – ті змінні, які процедура повинна змінити (у назвах моїх процедур відображені ті фактичні інтерпретації змінних, які розглядаються програмою, що визиває процедуру (її ще можна називати функцією), коли вона її визиває (у круглих дужках зазначене те, як це реалізується технічно))). Ще бажано передавати не окремі члени структури чи об’єкта для обробки, а увесь об’єкт чи структуру – тоді програму легше розширювати.

  4. Проектуємо та імплементуємо основні функції (методи візуальних компонентів).

  5. Оголошуємо глобальні змінні. Я давав імена змінним такі, які якомога точніше описують їхнє функціональне навантаження.

  6. Поміщуємо файли до папки проекту.

  7. Формуємо технічну документацію проекту.

4. Тестування

Вихідні дані:



Висновки




Під час виконання поставленого завданя була успішно реалізована програма, покращений власний гарний стиль побудови програм із власними, характерними для мене цікавими відтінками. Також були розроблені функції, які претендують на універсальність при розв’язуванні задач такого класу. Ми переконалися у високій надійності та ефективності як мови C++, так і IDE C++ Builder 6.0. Були впорядковані та застосовані на практиці мої знання стосовно використання електроних таблиць та досліджено зручність використання знань з даної предметної області – математики, завдяки чому програма вийшла оригінальною й не схожою на інші. Зроблено кілька незначних знахідок у галузі алгоритмів. Також було розглянуто і використано у роботі над проектом поняття „об’єкт” та „клас”, які у мові С++ майже ототожнюються з поняттям „структура” (тільки дані у структурі за замовчанням доступні широкому загалу (public), а у екземплярах класу – приватні (private)) і хотілося б ширше їх застосовувати надалі (це значно покращить сприйняття проекту сторонніми особами та поліпшить можливість до модифікації програми. Також дуже хотілося б опанувати методику роботи із шаблонами та алгоритмами зі структурами даних простору імен STL – це дозволило б „штампувати” подібні програми, не дуже задумуючись (це жарт, звичайно). Дякую за науку!

Список використаної літератури

  1. Кнут Д. Искусство програмирования. Т.2. Получисленные алгоритмы. 3-е изд. – М., 2001.

  2. Вирт Н. Алгоритмы и структуры данных. – М., 1989.

  3. Герберт Шилдт Полный справочник по C++ = C++: The Complete Reference. — 4-е изд. — М.: «Вильямс», 2006. — С. 800. ISBN 0-07-222680-3

  4. Джесс Либерти, Дэвид Хорват Освой самостоятельно C++ за 24 часа = Sams Teach Yourself C++ in 24 Hours, Complete Starter Kit. — 4-е изд. — М.: «Вильямс», 2007. — С. 448. ISBN 0-672-32681-7 Бауэр А., Гооз Г. Информатика. – М., 1976.

  5. Майерс Г. Надежность програмного обеспечения. – М., 1980.

  6. Подбельский В.В., Фомин С.С. Программирование на языке Си. – М., 1999.

  7. Ставровський А.Б., Коваль Ю.В. Вступний курс програмування. – К., 1998.