Побудова алгоритму
Розглянемо всі можливі перестановки чисел x, y, z:
xyz
xzy
yzx
yxz
zxy
zyx
Кожну наступну ми отримуємо з попередньої помінявши місцями виділені змінні (наприклад xzy отримуємо з xyz помінявши місцями 2 останніх елементи).
Переберемо всі перестановки і знайдемо таку, що перша координата буде найбільшою. В цьому випадку ми будемо максимально ефективно використовувати пристрій плавлення (dl = const, тому намагаємось максималізувати площу, яка буде плавитись).
Далі за допомогою команд R і T дійдемо до даної перестановки і поки в нас не перевищені необхідні умови для зльоту будемо плавити золото.
Проектування програми
У нашій програмі буде 3 файли, в кожному файлі будуть наступні функції
f1.c
fibb
get_rand
f2.c
P
C
R
T
A
D
f3.c
swap
min
get_x
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;
Література
www.wikipedia.org
Методичні рекомендації до виконання практичних і лабараторних робіт з дисципліни «Програмування» / В. В. Зубенко, Г. А. Кияшко -- К.: «Київський університет», 2005. – 456-470 с.
М. Эллис, Б. Строуструп. Справочноеруководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992. 651с.
Додатки
Специфікація мови C.
Лістинг програми.
Специфікація мови С
<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> — атомарний вираз
