Завдання на лабораторну роботу

Приклади програм

Приклад 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.