Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fort Knox.docx
Скачиваний:
1
Добавлен:
23.11.2019
Размер:
49.9 Кб
Скачать

Побудова алгоритму

Розглянемо всі можливі перестановки чисел x, y, z:

  1. xyz

  2. xzy

  3. yzx

  4. yxz

  5. zxy

  6. zyx

Кожну наступну ми отримуємо з попередньої помінявши місцями виділені змінні (наприклад xzy отримуємо з xyz помінявши місцями 2 останніх елементи).

Переберемо всі перестановки і знайдемо таку, що перша координата буде найбільшою. В цьому випадку ми будемо максимально ефективно використовувати пристрій плавлення (dl = const, тому намагаємось максималізувати площу, яка буде плавитись).

Далі за допомогою команд R і T дійдемо до даної перестановки і поки в нас не перевищені необхідні умови для зльоту будемо плавити золото.

Проектування програми

У нашій програмі буде 3 файли, в кожному файлі будуть наступні функції

  1. f1.c

    1. fibb

    2. get_rand

  2. f2.c

    1. P

    2. C

    3. R

    4. T

    5. A

    6. D

  3. f3.c

    1. swap

    2. min

    3. get_x

    4. main

Функція fibb повертає наступне число Фібоначчі при параметрі 0 і ініціалізує значення початкові значення при параметрі не 0.

Функція get_rand повертає наступне псевдовипадкове число.

Функції P, C, R, T, A, D виконують операції на конвеєрі.

Функція swap міняє місцями два значення xx і yy.

Функція min повертає менше з двох значень.

Функція x повертає значення першого елемента в перестановці з номером параметра.

Функція main виконує всі операції по управлінню космічним апаратом.

Тестування

В ході тестування були виявлені недоліки в програмі. Вони були успішно виправлені і тепер в програмі недоліків не виявлено.

Протокол виправлення помилок

У функції P() стрічка fibb(1); має бути в main(), а не в P().

int P() // Put

{

fibb(1);

x=get_rand();

y=get_rand();

z=get_rand();

ro=get_rand();

// cur_m = x*y*z*ro;

return 0;

}

При перевірці чи треба плавити до умови x>0 варто додати що добуток усіх змінних x y z ro має бути ненулбовим «while (x*y*z*ro>0»

В функції

int R() // Rotare Ox

{

xx=y;

yy=z;

y==yy;

z==xx;

}

Замість

y==yy;

z==xx;

варто писати

y=yy;

z=xx;

Література

  1. www.wikipedia.org

  2. Методичні рекомендації до виконання практичних і лабараторних робіт з дисципліни «Програмування» / В. В. Зубенко, Г. А. Кияшко -- К.: «Київський університет», 2005. – 456-470 с.

  3. М. Эллис, Б. Строуструп. Справочноеруководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992. 651с.

Додатки

  1. Специфікація мови C.

  2. Лістинг програми.

Специфікація мови С

<P>::={<VD>|<FD>}

<VD>::=<IT><WS><IV>{‘,’<IV>}‘;‘

<FD>::=<IT><WS><IF>‘(‘<PD>‘)’’{‘[<SS>]’}’ — Стандарт Ансі

<FD>::=<IT><WS><IF>‘(‘<PL>‘)‘<PS><SS> — Стандарт Кернігана

<PD>::=<IT><WS><IV>[{‘,’<IT><WS><IV>}]

<IT>::=’int’|’char’|’double’|’bool’|’string’|’short’|’unsigned’

<IV>::=<L>|<IV><L>|<IV><NU>

<L>::=’a’|’b’|…|’z’|’A’|’B’|…|’Y’|’Z’|’_’

<NU>::=’0’|’1’|’2’|’3’|’4’|’5’|’6’|’7’|’8’|’9’

<SS>::=‘{‘{<VD>}{<S>}‘}‘

<S>::=<SS>|‘return’‘(‘<E>‘)‘ ‘;‘|<E>‘;‘

<E>::=<D>{<+-><D>}

<D>::=<M>{<*/%><M>}

<M>::=<A><^><M>

<A>::=<const>|<IV>|’IF’‘(‘[<E>{‘,‘<E>}]‘)‘|‘(‘<E>‘)‘

Пояснення позначень:

<P> — програма

<VD> — опис змінних

<FD> — опис функцій

<IT> — ідентифікатор типу

<WS> — wide space (Space, Enter, Tab)

<IV> — ідентифікатор змінної

<L> — букви

<NU> — цифри (десяткова система числення)

<IF> — ідентифікатор функції

<PD> — опис параметрів

<PL> — список параметрів

<PS> — типізація параметрів

<SS> — складний оператор

<S> — оператор

<E> — вираз

<D> — доданок

<M> — множник

<A> — атомарний вираз

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]