Методичні вказівки
В даній роботі пропонується написати програму обраною мовою програмування, у якій сформувати список відповідно до завдання на основі базових алгоритмів: пошук, вставка, вилучення, виведення елемента.
В першу чергу слід звернути увагу на введення даних елементів списку з урахуванням типу інформаційних полів, їх обробку і виведення на екран у зазначеному форматі. Для зберігання даних використати ресурси динамічної пам'яті. Введення даних здійснити із клавіатури з урахуванням вимог до вхідних даних, що зазначені у завданні. Обмеженнями на вхідні дані є максимальний розмір рядкових даних, діапазони числових типів полів структури і припустимий розмір області динамічної пам'яті обраної мови програмування.
При написанні програми виконуйте коментування коду.
Література
1. Ахо А., Хопкрофт Дж., Ульман Дж. Структуры данных и алгоритмы. – М.: Издательский дом “Вильямс”, 2001. – 384 с.
2. Вирт Н. Структуры данных и алгоритмы. С примерами на Паскале. Издание 2. – СПб.: Невский диалект, 2008. – 352 с.
3. Кнут Д. Искусство программирования для ЭВМ / В 3-х томах. – М.: “Мир”, 2008.
4. Новиков Ф. А. Дискретная математика для программистов. Учебник для вузов. 2-е изд. – СПб.: Питер, 2005. – 364 с.
Завдання
1. Вивчіть завдання, виділивши при цьому всі види даних;
2. Сформулюйте математичну постановку завдання;
3. Виберіть метод рішення завдання, якщо це необхідно;
4. Розробіть алгоритм рішення завдання;
5. Напишіть програму обраною мовою програмування;
6. Підготуйте тестові дані для перевірки різних режимів роботи програми;
7. Виконайте тестування програми;
8. Порівняйте отриманий результат з підготовленим для тестування;
9. Здійсніть відлагодження програми;
10. Підготуйте звіт.
Вимоги до звіту
Звіт до лабораторної роботи повинен відповідати наступній структурі:
- титульний лист.
- словесна постановка завдання. У цьому підрозділі проводиться повний опис завдання. Описується суть завдання, аналіз вхідних даних, область їх припустимих значень, одиниці їхнього виміру, можливі обмеження, аналіз умов при яких завдання має рішення (не має рішення), аналіз очікуваних результатів.
- математична модель. У цьому підрозділі вводяться математичні описи даних і математичний опис їхньої взаємодій. Ціль підрозділу - подати розв'язуване завдання у математичному формулюванні.
- алгоритм рішення завдання. У підрозділі описується розробка структури алгоритму, обґрунтовується абстракція даних, завдання розбивається на підзадачі.
- лістинг програми. Підрозділ повинен містити текст програми обраною мовою програмування.
- контрольний тест. Підрозділ містить набори вихідних даних і отримані в ході виконання програми результати.
- висновки по лабораторній роботі.
- відповіді на контрольні питання.
Приклад виконання роботи
Приклад 1. N-натуральних чисел є елементами двохспрямованого списку L, обчислити: X1*Xn+X2*Xn-1+...+Xn*X1. Вивести на екран кожний добуток і підсумкову суму.
Алгоритм:
1. Створюємо структуру.
2. Формуємо список цілих чисел.
3. Просуваємося за списком: від початку до кінця і від кінця до початку в одному циклі, перемножуємо дані, що утримуються у відповідних елементах списку.
4. Підсумуємо отримані результати.
5. Виводимо на друк
Створення структури, формування списку і виведення на друк розглянуті раніше. Приведемо функції реалізації просування за списком в обох напрямках і знаходження підсумкової суми.
// пошук останнього елемента списку
Double_List* Find_End_Item_Double_List(Double_List* Head){
Double_List *ptr; // додатковий вказівник
ptr = Head;
while (ptr->Next != NULL){
ptr = ptr->Next;
}
return ptr;
}
// підсумкова сума добутків
void Total_Sum(Double_List* Head) {
Double_List* lel = Head;
Double_List* mel = Find_End_Item_Double_List(Head);
int mltp,sum=0;
while(lel != NULL) {
mltp = (lel->Data)*(mel->Data);// множення елементів
printf("\n\n%d * %d = %d",lel->Data,mel->Data,mltp);
sum = sum + mltp;// підсумовування добутків
lel = lel->Next;
// ідемо за списком з першого елемента в останній
mel = mel->Prior;
// ідемо за списком з останнього елемента в перший
}
printf("\n\n Підсумкова сума дорівнює %d",sum);
}
}
