- •1.1.2 Структура функцій програми
- •1.1.3 Правила синтаксису
- •1.1.4. Типи даних
- •1.1.5. Функції введення та виведення даних
- •1.2 Приклад програми Умова задачі
- •Особливості використання функцій вводу та виводу
- •1.3 Технологія виконання лабораторної роботи
- •1.4. Варіанти завдань
- •1.5 Контрольні запитання
- •Розгалужені обчислювальні процеси Лабораторна робота 2
- •2.1 Теоретичні відомості
- •2.1.1. Вибір із двох альтернатив
- •2.1.2. Вкладеність конструкцій вибору
- •2.1.3. Операторний блок
- •2.1.4. Поліваріантний вибір
- •2.2. Приклади програм
- •2.3. Варіанти завдань
- •2.4 Контрольні запитання
- •Циклічні обчислювальні процеси Лабораторна робота 3
- •3.1 Теоретичні відомості
- •3.1.1. Цикл із передумовою
- •3.1.2. Цикл із постумовою
- •3.1.3. Цикл із лічильником
- •3.1.4. Переривання та продовження циклу
- •3.2. Приклад алгоритму та програми
- •3.3. Варіанти завдань
- •3.4 Контрольні запитання
- •Цикли з розгалуженням Лабораторна робота 4
- •4.1 Теоретичні відомості
- •4.1.1. Рекурентні співвідношення
- •4.1.2. Функції користувача
- •4.2. Приклад алгоритму та програми
- •Алгоритм задачі
- •Код програми
- •4.3. Варіанти завдань
- •4.4 Контрольні запитання
- •Рекурсивні функції Лабораторна робота 5
- •5.1 Теоретичні відомості
- •5.2. Приклад алгоритму та програми
- •5.3. Варіанти завдань
- •6.1.2. Оголошення та ініціалізація
- •6.1.3. Операції над покажчиками
- •6.1.4. Методи розв’язанні нелінійних рівнянь
- •6.2. Приклад алгоритму та програми
- •6.3. Варіанти завдань
- •6.4 Контрольні запитання
- •Одновимірні масиви Лабораторна робота 7
- •7.1 Теоретичні відомості
- •7.2. Приклад алгоритму та програми
- •Алгоритм програми
- •Код програми
- •7.3. Варіанти завдань
- •7.4 Контрольні запитання
- •Багатовимірні масиви Лабораторна робота 8
- •8.1 Теоретичні відомості
- •8.1.1. Оголошення багатовимірних масивів. Доступ до елементів
- •8.1.2. Базові операції обробки двовимірних масивів
- •8.2. Приклад алгоритму та програми
- •8.3. Варіанти завдань
- •9.1.2. Деякі функції обробки рядків
- •9.2. Приклад алгоритму та програми
- •9.3. Варіанти завдань
- •9.4 Контрольні запитання
- •Структури та масиви структур Лабораторна робота 10
- •10.1 Теоретичні відомості
- •10.2. Приклад алгоритму та програми
- •Алгоритм задачі
- •Приклад коду
- •10.3. Варіанти завдань
- •10.4 Контрольні запитання
Приклад коду
#include<iostream>
#include<conio.h>
#include<string.h>
#include<iomanip> //бібліотека маніпуляторів уведення-виведення
using namespace std;
/////////////// оголошення структур ///////////////////
struct teacher //структура даних про викладача
{
char fio[10]; //прізвище
char posada[20]; //посада
float salary; //зарплатня
};
struct stud //структура даних про студента
{
char fio[10]; //прізвище
float bal; //середній бал
float stip; //стипендія
};
struct subject //структура даних про дисципліни
{
char name[10]; //назва дисципліни
teacher prepod; //викладач, який читає дисципліну
int stnum; //кількість студентів, які вивчають цю дисципліну
stud student[10] ; //масив студентів, які вивчають дисципліну
};
subject predmet[10]; //масив дисциплін
int n; //кількість записів
///////////////////// Введення даних ////////////////////
void input()
{
char answer_prep, //параметр закінчення введення даних про викладача
answer_stud; //параметр закінчення введення даних про студента
int i=0; //початкове значення лічильника кількості дисциплін
do
{ //уведення даних про викладача
cout<<"subject name"<<endl; //уведення назви дисципліни
cin>>predmet[i].name; //уведення назви дисципліни
cout<<"teacher\'s surname"<<endl;
cin>>predmet[i].prepod.fio;
cout<<"teacher\'s position"<<endl;
cin>>predmet[i].prepod.posada;
cout<<"teacher\'s salary"<<endl;
cin>>predmet[i].prepod.salary;
int j=0; //початкове значення лічильника кількості студентів
do
{
//уведення даних про студента, який навчається у конкретного викладача
cout<<"student\'s surname"<<endl;
сin>>predmet[i].student[j].fio;
cout<<"student\'s ball on subject"<<endl;
cin>>predmet[i].student[j].bal;
cout<<"student\'s stipend"<<endl;
cin>>predmet[i].student[j].stip;
j++; //перехід до індексу наступного студента
cout<<"any students else? y/n"<<endl;
answer_stud=getch();
} while(answer_stud!='n'); //кінець введення даних про студента
predmet[i].stnum=j; //кількість студентів, які вивчають і-у
// дисципліну
cout<<"contunue input? y/n"<<endl;
answer_prep=getch();
i++; //перехід до нової дисципліни
} while (answer_prep!='n'); //кінець введення даних про викладача
n=i; //кількість викладачів
getch(); //чекати натиснення клавіші
} //кінець функції input()
/////////////////// виведення даних ///////////////////////
void output()
{
for(int i=0;i<n;i++)
{
cout<<"subject------teacher----position-----salary"<<endl;
cout.setf(ios::left); //вирівнювання даних на екрані зліва
cout<<setw(12)<<predmet[i].name<<setw(12)<<predmet[i].prepod.fio<<
setw(13)<<predmet[i].prepod.posada<<predmet[i].prepod.salary<<endl;
cout<<"____Students"<<endl;
cout<<" fio--------ball-----stipend"<<endl;
for(int j=0;j<predmet[i].stnum;j++) //виведення даних про студентів
{
cout.setf(ios::left);
cout<<setw(12)<<predmet[i].student[j].fio<<setw(10)<<
predmet[i].student[j].bal<<predmet[i].student[j].stip<<endl;
}
}
getch(); //чекати натиснення клавіші
} //кінець функції read_from_file()
//////////////// виведення даних про викладачів /////////////
void list_prepod()
{
cout<<"---subject----teacher-----position-----salary \n";
for(int i=0;i<n;i++)
{
cout.setf(ios::left); //виведення даних про викладачів
cout<< setw(10)<<predmet[i].name<<setw(12)<<predmet[i].prepod.fio<<
setw(14)<<predmet[i].prepod.posada<<predmet[i].prepod.salary<<endl;
}
getch(); //чекати натиснення клавіші
}
/////// пошук дисципліни з найвищім середнім балом ////////////
void maxbal()
{
float sr[10];
int i; //середній бал
for(i=0;i<n;i++)
{
sr[i]=0; //сума балів успішності по і-й дисципліні
for(int j=0;j<predmet[i].stnum;j++) //перегляд даних про студентів
//сума балів студентів з дисципліни
sr[i]+=predmet[i].student[j].bal;
sr[i]=float(sr[i])/predmet[i].stnum; //середній бал з конкретної
//дисципліні
}
cout<<" Subject\'s average ball"<<endl;
for (int i=0;i<n;i++) //цикл виведення даних про всіх викладачів
{
cout.setf(ios::left);
cout<<setw(10)<<predmet[i].name<<setw(5)<<sr[i]<<endl;
}
cout<<" subject with the highest ball: "<<endl;
float max=sr[0]; //максимальний бал
int nomer_predmet=0; //індекс дисципліни у масиві дисциплін
//пошук найбільшого середнього бала з усіх дисциплін
for(int i=1;i<kol_prep; i++)
if (max<sr[i])
{
max=sr[i];
nomer_predmet=i;
}
cout<<" max ball="<<max<<" in subject "<<
predmet[nomer_predmet].name<<
" teacher "<<predmet[nomer_predmet].prepod.fio<<endl;
getch(); //чекати натиснення клавіші
} //кінець функції maxbal()
////////////// перерозподіл стипендій /////////////////
void stipendia()
{
float sum=0; //сума стипендій студентів з середнім балом меншим трьох
int k=0; //кількість записів про студентів у вхідному масиві
int m=0; //лічильник кількості студентів
stud s,tmp[10],stud_tmp[10]; //проміжні масиви студентів
//копіювання даних про студентів у масив без дисциплін і прізвищ викладачів
for(int i=0;i<n;i++)
for(int j=0;j<predmet[i].stnum;j++) //обробка масиву студентів
{ //копіювання масиву студентів
tmp[k]=predmet[i].student[j];
k++;
}
//===розрахунок середнього бала студентів, що вивчають різні дисципліни =====
int kol[10]; //лічильник дисциплін, які вивчає один студент
for (int i=0;i<k;i++)
{ //перегляд усього масиву студентів
stud_tmp[m].bal=0; //сума балів одного студента з різних дисциплін
kol[m]=0; //кількість дисциплін для одного студента
int f=0; //прапорець обробки даних про студента
//перегляд даних про студентів від початку масиву до конкретного запису
for (int j=0;j<i;j++)
if ((strcmp(tmp[i].fio,tmp[j].fio)==0))
f=1; //відомості про студента вже зустрічалися в масиві
if (f==0) //відомості про студента ще не зустрічалися в масиві
{
for (int j=i;j<k;j++) //перегляд масиву студентів
if (strcmp(tmp[i].fio,tmp[j].fio)==0) //студент вивчає
// інший предмет
{
stud_tmp[m].bal+=tmp[j].bal; //накопичення балів
// одного студента
strcpy(stud_tmp[m].fio, tmp[j].fio); //запам’ятати
// прізвище студента
stud_tmp[m].stip=tmp[j].stip; //запам’ятати
//розмір стипендії
kol[m]++; //вибір наступної дисципліни
}
stud_tmp[m].bal=float(stud_tmp[m].bal)/kol[m]; //розрахунок
// середнього бала
m++; //перехід до наступного студента
} // end of if (f==0)
} //end of for I
//================ сортування студентів за алфавітом =================
int all_stud=m; //загальна кількість студентів
for (int i=0;i<all_stud;i++)
for(int j=i+1;j<all_stud;j++)
if (strcmp(stud_tmp[i].fio,stud_tmp[j].fio)>0)
{
s=stud_tmp[i];
stud_tmp[i]=stud_tmp[j];
stud_tmp[j]=s;
}
//=== виведення даних про загальний середній бал і початкову стипендію ====
cout<<"Array of students after sort"<<endl;
cout<<"—student------average ball------stipend"<<endl;
for (int i=0;i<all_stud;i++)
{
cout.setf(ios::left);
cout<<setw(20)<<stud_tmp[i].fio<<setw(15)<<stud_tmp[i].bal<<
stud_tmp[i].stip<<endl;
}
getch();
// ================== перерозподіл стипендій =======================
int j=0; //кількість студентів
for (int i=0;i<all_stud;i++)
if ((stud_tmp[i].bal>=0)&&(stud_tmp[i].bal<3)) //умови зняття стипендій
{
sum+=stud_tmp[i].stip;
stud_tmp[i].stip=0; //обнуління даних про стипендії
j++;
}
//розподіл стипендії між студентами, які добре вчаться
for (int i=0;i<all_stud; i++)
if ((stud_tmp[i].bal>=3)&&(stud_tmp[i].bal<=5))
stud_tmp[i].stip=stud_tmp[i].stip+sum/(all_stud-j);
//=============== виведення нарахованої стипендії =================
//виведення заголовка таблиці
cout<<endl<<"Counted stipend"<<endl;
cout<<"—FIO------average ball------stipend"<<endl;
//виведення даних з масиву студентів
for(int i=0;i<all_stud;i++)
{
cout.setf(ios::left);
cout<<setw(15)<<stud_tmp[i].fio<<setw(15)<<stud_tmp[i].bal;
if ((stud_tmp[i].bal>=3)&&(stud_tmp[i].bal<=5))
cout<<stud_tmp[i].stip<<endl;
else
cout<<"has no stipend"<<endl; //стипендію не нараховано
}
getch(); //чекати натиснення клавіші
} //кінець функції stipendia()
///////////////// виведення даних про студентів //////////////////
void list_student()
{
cout<<"---teacher----student-----ball----stipend \n";
for(int i=0;i<n;i++)
{
cout<<" "<<predmet[i].prepod.fio<<endl; //прізвища викладача
//вибір студентів, які навчаються у конкретного викладача
for(int j=0;j<predmet[i].stnum;j++)
{
cout.setf(ios::left); //виведення даних про студентів
cout<<setw(12)<<predmet[i].student[j].fio<<setw(10)<<
predmet[i].student[j].bal<<predmet[i].student[j].stip<<endl;
}
}
} //кінець функції list_student()
//////////////////// головна програма //////////////////
void main()
{
while (1)
{
system("cls");
cout<<" MENU \n"<<endl;
cout<<"1. Database input by keyboard."<<endl;
cout<<"2. Output data."<<endl;
cout<<"3. View teacher\’s database."<<endl;;
cout<<"4. View student\’s database."<<endl;
cout<<"5. List of subjects with the highest average ball."<<endl;
cout<<"6. Stipend."<<endl;
cout<<"7. Stipend found."<<endl;
cout<<"8. Exit"<<endl;
cout<<endl;
int key; //номер пункту меню
cout<< "Choosen menu item:";
cin>>key; //вибір потрібного пункту меню
switch(key) //вибір функції реалізації меню
{
case 1: {input();break;} //введення даних
case 2: {output();break;} //виведення даних з масиву на екран
case 3: {list_prepod();break;} //виведення даних про викладачів
case 4: {list_student();break;} //виведення даних про студентів
case 5: {maxbal();break;} //пошук дисципліни з найвищім балом
case 6: {stipendia();break;} //перерозподіл стипендій
case 8: {exit (0); break;} //вихід з програми
default: {cout<<"Try another time...";getch();break;}
}
}
} //кінець функції main()
Рис. 10.1. Результати роботи програми. Виконання меню 2
Рис. 10.2. Результати роботи програми. Виконання меню 5
Рис. 10.3. Результати роботи програми. Виконання меню 6