Приклади програм
Приклад 1. Даны два комплексных числа. Найти их произведение.
Розв’язок.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
struct complex // Определение структурного типа
{
float Re;
float Im;
};
complex cplx1, cplx2, mult; // Определение структур
cout << "\nВведи действительную и мнимую части 1 числа\n";
cin >> cplx1.Re >> cplx1.Im; // Операция "точка"
cout << "\nВведи действительную и мнимую части 2 числа\n";
cin >> cplx2.Re >> cplx2.Im;
mult.Re = cplx1.Re * cplx2.Re - cplx1.Im * cplx2.Im;
mult.Im = cplx1.Re * cplx2.Im + cplx1.Im * cplx2.Re;
cout << "Действительная часть: " << mult.Re <<
" мнимая часть: " << mult.Re,mult.Im;
cout << "\nPress any key";
_getch();
return 0;
}
Приклад 2. Дан массив комплексных чисел. Найти сумму его элементов.
Розв’язок.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
struct complex // Определение структурного типа
{
float Re;
float Im;
} arr[] = {1, 2, 3, -4, -5, -6, -7, -8}; // Определение
// массива
complex sum = {0, 0};
complex *point = &arr[0]; // Определение указателя
// на структуру с инициализацией адресом нулевого
// элемента массива
int k;
k = sizeof(arr) / sizeof(arr[0]); // Вычисление количества
// элементов массива: объем памяти, выделенной под
// массив, делится на размер одного (нулевого) элемента
for (int i = 0; i < k; i++)
{
sum.Re += point->Re; // Использование операций "точка"
sum.Im += point->Im; // и "стрелка"
point++; // Изменение указателя (переход к
// элементу массива
}
cout << "Сумма: real = " << sum.Re <<
"\timag = " << sum.Im;
cout << "\nPress any key";
_getch();
return 0;
}
Приклад 3. Даны массы и координаты материальных точек. Найти координаты центра масс.
Розв’язок.
#include <iostream>
#include <conio.h>
using namespace std;
struct particle // Определение структурного типа с элементами:
{
double mass; // масса точки
double coord[3]; // и массив координат
};
int main()
{
particle mass_point[] = { // Определение массива структур
20, {2, 4, 6}, // с инициализацией
40, {6, -2,8},
10, {1, 3, 2}
};
int n;
particle center = { // Определение структуры с
0, {0, 0, 0} // инициализацией
};
n = sizeof(mass_point) / sizeof(mass_point[0]); // Коли-
// чество элементов массива
for (int i = 0; i < n; i++)
{
center.mass += mass_point[i].mass;
for (int k = 0; k < 3; k++)
center.coord[k] += mass_point[i].coord[k] *
mass_point[i].mass;
}
cout << "\nКоординаты центра масс:";
for (int i = 0; i < 3; i++)
{
center.coord[i] /= center.mass;
cout << "\nКоордината " << i + 1 << ": " <<
center.coord[i];
}
cout << "\nPress any key";
_getch();
return 0;
}
Завдання на лабораторну роботу
За час, відведений для виконання лабораторної роботи (2 академічні години), студент повинен:
1. Розробити алгоритм розв’язання задачі, запропонованої для програмування.
2. Здійснити програмну реалізацію розробленого алгоритму.
3. Здійснити налаштування програми, виправивши синтаксичні та логічні помилки.
4. Підібрати тестові дані для перевірки програми, включаючи виняткові випадки.
5. Оформити звіт до лабораторної роботи.
6. Відповісти на контрольні запитання.
7. Здати викладачу працездатну програму з демонстрацією її роботи на декількох варіантах вихідних даних.
4. Варіанти задач
1. Дано натуральне число n і послідовності дійсних чисел a1, a2, …, an; x1, x2, …, xn; y1, y2, …, yn. Ці дані визначають на координатній площині n квадратів зі сторонами, паралельними координатним осям: ai – сторона квадрата, (xi, yi) – координати центра i‑го квадрата, i = 1, 2, …, n. Чи існують на координатній площині точки, що належать усім квадратам? Якщо так, то зазначити координати однієї з них.
2. Дано натуральне число n і множину з n точок на площині, що задаються парами дійсних чисел (xi, yi), i = 1, 2, …, n, а також пару дійсних чисел (u, v), які визначають координати додаткової точки. Знайти номер точки множини, що є:
а) найближчою до точки (u, v);
б) найвіддаленішою від точки (u, v).
3. Множина точок задається аналогічно тому, як вона задана в задачі 2 Знайти точку цієї множини, для якої:
а) сума відстаней до інших точок множини мінімальна;
б) сума відстаней до інших точок множини максимальна;
в) сума відстаней до центра множини мінімальна;
г) сума відстаней до центра множини максимальна.
4. Множина точок задається аналогічно тому, як вона задана в задачі 2 Знайти дві різні точки цієї множини, відстань між якими:
а) мінімальна;
б) максимальна.
5. Дано дві множини точок A і B, задані аналогічно тому, як це описано в задачі 2. Множина A містить m точок, а множина B – n точок, де m і n – задані натуральні числа. Знайти відстань між множинами A і B. Відстань між двома множинами точок визначати як:
а) відстань між найближчими одна до одної точками цих множин;
б) відстань між найвіддаленішими точками цих множин;
в) відстань між центрами цих множин.
У двох перших випадках знайти також номери і координати точок, за якими визначалася відстань між множинами.
6. Дано масив з 10 дат (число, місяць, рік). Зазначити всі літні дати, а також найбільш ранню дату.
7. Маємо каталог на n книг і журнальних статей (n ≤ 100). Вивести інформацію про публікації, видані після 1990 р. (окремо книги і статті).
Дано інформацію про оцінки, отримані студентами академічної групи під час сесії. Інформація подається у такому вигляді: прізвище студента (рядок не більше 30 символів), форма навчання (бюджетна або контрактна – одна з латинських літер B або C), 5 оцінок (цілі числа 2, 3, 4, 5 або 0, причому 0 відповідає випадку, коли студент не складав відповідний іспит). Має бути також передбачена можливість наявності інформації про середній бал за результатами сесії (дійсне число), а також про розмір стипендії (дійсне число). За умови, що у групі навчається не більше 40 студентів, описати у програмі масив для зберігання згаданої інформації, розрахувати середній бал кожного зі студентів, які склали всі іспити з оцінками, вищими за 2, і виконати нарахування стипендії усім студентам бюджетної форми навчання із середнім балом 4.0 та більше. Базова стипендія становить 600 грн. Студентам, які отримали максимальні бали з усіх іспитів, нараховується стипендія, на 25 % вища за базову стипендію. Вивести інформацію про студентів, що мають академічні заборгованості, а також інформацію про нарахування стипендій.
5. Контрольні запитання
Список літератури
1. Страуструп, Б. Язык программирования Си++: Второе издание / Б. Страуструп. – К.: ДиаСофт, 1993. – Ч. 1. – 264 с.; Ч. 2. – 296 с.
2. Керниган, Б. Язык программирования Си / Б. Керниган, Д. Ритчи. – М.: Финансы и статистика, 1992. – 272 с.
3. Либерти, Джесс. Освой самостоятельно С++ за 21 день: учеб. пособ. / Джесс Либерти. – М.: Вильямс, 2001. – 816 с.
4. Подбельский, В. В. Программирование на языке Си / В. В. Подбельский, С. С. Фомин. – М.: Финансы и статистика, 1999. – 600 с.
5. Подбельский, В. В. Язык Си++ / В. В. Подбельский. – М.: Финансы и статистика, 1999. – 560 с.
6. Савитч, Уолтер. Язык C++. Курс объектно-ориентированного программирования / Уолтер Савитч. – М.: Вильямс, 2001. – 704 с.
Навчальне видання
Методичні вказівки
до лабораторної роботи
«Структури в програмах мовою C++»
з курсу «Програмування» для студентів напряму 6.040302 – Інформатика
і курсу «Програмування та алгоритмічні мови» для студентів напряму
6.040303 – Системний аналіз
Укладачі: БЕЗМЕНОВ Микола Іванович,
БЕЗМЕНОВА Ольга Миколаївна
Відповідальний за випуск О. С. Куценко
Роботу до видання рекомендував О. В. Горелий
За авторською редакцією
План 2013 р., поз. 10/40–13
Підписано до друку __.__.2013 р. Формат 60´84 1/16. Папір офсетний.
Друк – ризографія. Гарнітура Таймс. Ум. друк. арк. _______.
Обл.-вид. арк. 0,8. Тираж 50 прим. Зам. №___. Ціна договірна.
________________________________________________________________
Видавничий центр НТУ «ХПІ».
Свідоцтво про державну реєстрацію ДК № 116 від 10.07.2000 р.
61002, Харків, вул. Фрунзе, 21.
________________________________________________________________
Друкарня НТУ «ХПІ»
61002, Харків, вул. Фрунзе, 21.