Ви тут: Головна | Алоритми | Лабораторні роботи | ЛР 1 | Мова С без об'єктів

Завдання на розроблення функції для бібліотеки Geometry.
Мова програмування — С++.
Структурно-функціональний варіант бібліотеки (без класів).
Поняття геометрії реалізовано як структури (struct).

 

Леся Вовчик

Лабораторні роботи

  1. Лабораторна робота № 1.
    Гуртом і батька легше бити...

  2. Лабораторна робота № 2.
    По порядку номєров становісь!

  3. Лабораторна робота № 3.
    Архімед, розумом Зевсу подібний...

  4. Лабораторна робота № 4.
    Крик мандрагори

А тепер — перше завдання квесту.

Вам дано конкретну задачу з аналітичної геометрії. Насправді завдання звучить так: "Написати для бібліотеки Geometry фунцію, яка буде розв'язувати БУДЬ-ЯКУ задачу такого типу, незалежно від конкретних чисел, що стоять в умові задачі для прикладу.

Категоричними умовами, яких треба дотримуватися, є таке. У біблітеці, яку ми всі пишемо, вже прийнято певні рішення щодо програмної реалізації основних понять геометрії у вигляді певних структур даних (typedef struct). Це означає, що Ваша функція повинна приймати вхідну інформацію і повертати результат у термінах цих типів даних. Тобто, якщо Ваше завдання звучить так: "Записати рівняння прямої лінії, яка...", то Ви маєте написати функцію, що як значення має повертати змінну типу TLine або TLine * (посилання на ...) і, відповідно, вхідні параметри мають бути саме змінними типів, відповідних поняттям геометрії. Якщо сказано "Записати рівняння прямої лінії, яка проходить через таку-то точку та такі-то пряму та площину", то КАТЕГОРИЧНО вхідними даними мають бути саме змінні типу TPoint, TLine та TPlane або, ще краще, посилання на них — TPoint *, TLine *, TPlane * -- ті, що їх реалізовано у Вашій версії бібліотеки.

На етапі проектування псувати саму бібліотеку Geometry не варто. Ви маєте здійснити ТРИфайловий проект.


1. Бібліотека Geometry, яку не МОЖНА міняти текстуально.
2. Модуль C++, що може бути ДВОфайловим (MyLab1.h та MyLab1.cpp), або ОДНОфайловим (тільки MyLab1.h). У разі двофайлового варіанту у файлі-заголовку пишемо:
// Це, напр., файл MyLab1.h

#include 
#include "geometry.h"
...

TLine * SmthIsDoing(TPlane *p, TPoint *M, TLine *L, int &RC);


// А це -- файл MyLab1.cpp

#include 
#include "geometry.h"
#include "MyLab1.h"
...

TLine * SmthIsDoing(TPlane *p, TPoint *M, TLine *L, int &RC)
{
   // Тут пишемо реалізацію
};

3. Ваша головна програма:
#include 
#include 
#include "geometry.h"
#include "MyLab1.h"

int main() 
{
  tPlane *p;
  tPoint *M; 
  tLine *L, L2;
  int RC; // Ретурн коде! :)
  
  // tMyLab1 for Geometry. V1.0 (C) Ipsayenko Vovchyk, 2011
  cout << "tMyLine for Geometry. V1.0 (C) Ipsayenko Vovchyk, 2011" << endl;

  //   Тут треба задати початкові значення для вхідних величин
  
  L2 = SmthIsDoing(TPlane *p, TPoint *M, TLine *L, int RС)
  if ((L2 == NULL) && (RC!=0))
     ... // все пропало... 
  else {
    ...  // нє, ще не все!
  }
  
}


Ретельна перевірка коректності вхідних даних — ще одна хороша думка, що прийшла була колись в голову бігбосу на етапі розробки специфікацій. Який мануал не пиши, а дурний користувач обов'язково спроможеться передати до Вашої функції некоректні дані. Коректна реакція на некоректні дані користувача — це гречно, шляхетно та кошерно. А якщо програма на помилкові вхідні дані реагує "злітанням" та "вивалюванням" в операційну систему, це просто ознака непрофесійності авторів розробки. Випишіть всі варіанти некоректностей, що можуть трапитися через фантазії користувача. А може, й через ляпи ваших колег, що працюють поруч. Всі ці перевірки треба буде реалізувати у вашій функції.

Чи є у Вашої задачі варіанти наборів коректних вхідних даних, що їх доведеться обробляти за різними алгоритмами? Чи не забули Ви реалізувати їх всі? А реалізувавши, чи відтестували?

Функція main() Вашого проекту пишеться лише з метою продемонструвати роботу Вашої функції або процедури. Тому до інтерфейсу (діалогу з користувачем) вимог аж ніяких. Зате є жорстка вимога щодо ВІДСУТНОСТІ виведення куди-небудь усередені тієї функції, що її Вам замовлено. Спілкуватися "зі світом широким" Ваша "фуця" має через список параметрів, а не засобами введення-виведення, які є різними у різних середовищах та у різних користувачів, а ми тут пишемо пакет з претензією на універсальність.

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

За другим разом Вовчик все зробив як слід, роботу здав. Випробувальний термін минув, і тепер він — у штаті.

А Ви?


Mail-to: oselin@mmsa.ntu-kpi.kiev.ua
http://mmsa.ntu-kpi.kiev.ua/~oselin (KPI Intranet)
http://www.iasa.kiev.ua/~oselin
Copyright © Olexander Selin 2010 (web-design); Olexander Selin 2010 (content).