close

Вход

Забыли?

вход по аккаунту

?

Laboratorna robota 10

код для вставкиСкачать
Іллюшко А. КІ-132
Лабораторна робота №10. Робота зі структурами
Мета роботи:
- Ознайомитися із поняттям структура.
- Ознайомитися із способами оголошення та ініціалізації структур.
- Опанувати алгоритми обробки структур.
10.1 КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Структура - це тип даних, якому відповідає суміш елементів даних різних типів. Кожен з таких елементів, що входять до складу структури, називають полем. При роботі із структурами оперують поняттями ім'я структури і ім'я поля. Імена структурам та їх полям присвоюються у відповідності зі стандартними правилами конструювання імен ідентифікаторів. Програміст може оперувати як з усією структурою, так і з окремими полями - це залежить від розв'язуваної задачі і операторів, що використовуються.
Для структури використовується її ім'я, а для ідентифікації її складових частин використовується складене ім'я, яке складається з імені структури та імені поля, розділених крапкою.
Для конструювання структури використовується поняття шаблону структури.
10.1.1 Оголошення шаблону та ініціалізація структур
Синтаксис оголошення шаблону структури виглядає так, як показано на рисунку 10.1.
Рисунок 10.1 - Синтаксис оголошення шаблону структури
10.1.2 Масиви структур
Із структур однакового тегу може бути створений масив, точно так само як з даних інших типів. Наприклад, якщо ми хочемо мати результати атестації для всіх студентів, можна створити масив, що містить дані про кожного студента у вигляді структури і частково його проініціалізувати:
#define FIO_SIZE 15
#define GR_SIZE 7
#define AR_SIZE 30
struct stud {char fio[FIO_SIZE];
char gr[GR_SIZE];
float srBall;
int neud;
};
stud ar[AR_SIZE]={
{"Чуб П.П.","КС051", 4.55, 0},
{"Гай А.Л.","КС052", 1.55, 3},
{"Кит А.В.","КС051", 2.45, 1},
{"Кiт С.В.","КС052", 1.25, 3},
{"Бут К.Л.","КС052", 4.65, 0}
};
int size=5;
При зверненні до елементу масиву структур також використовуються індекси та квадратні дужки. При цьому слід враховувати, що елементом масиву є структура і, тому, квадратні дужки ставляться після імені масиву, а потім, через крапку, записується ім'я поля.
Наприклад, вище наведений масив можна доповнити ще однією структурою.
ar[size].fio ='Петренко А,П,';
ar[size].gr = 'КС041';
ar[size].srBall = '3.2';
ar[size].neud = 1;
Якщо полем структури є масив, то у зверненні до елементу масиву квадратні дужки вже будуть після імені поля. Так, наприклад, якщо ми хочемо у вищенаведеному масиві структур змінити прізвище студента "Гай" на "Гак", то слід написати так:
ar[1].fio[2] = 'к';
10.1.3 Введення-виведення структур При організації вводу-виводу варто мати на увазі, що безпосередньо структуру ввести або вивести, без використання спеціально написаних процедур, не можна. Можна вводити або виводити окремі поля структури, або елементи полів, якщо поля є теж структурами.
Введення і виведення структур схоже на введення та виведення матриць, але різниця тут у тому, що стовпчики можуть мати різні типи, і доступ до елементів різних стовпців проводиться не за індексом, а за назвою.
10.1.4 Сортування масивів структур Сортування масиву структур проводиться так само, як і сортування масиву чисел, тобто структури порівнюються і, якщо необхідно, переставляються. Єдина проблема тут полягає в тому, що способів порівняння записів, а, отже, і варіантів сортування, може бути багато, і кожен з них може знадобитися. Так для масиву, розглянутого в попередньому прикладі, записи можна сортувати за прізвищем студента або за середнім балом, за кількістю незадовільних оцінок і т.д. 10.2 РЕЗУЛЬТАТИ ТЕСТУВАННЯ ПРОЕКТУ
10.2.1 Тексти функцій програми з коментарями
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <iomanip>
#include <windows.h>
#include <stdio.h>
#define Size 20
#define sizear 20
using namespace std;
struct pokazatelu{
char data[Size];
int temperatyra;
int davlenue;
int vlagnost;
};
pokazatelu ar[sizear] = {
{"13-07-13",34, 765, 40},
{"13-07-14",29, 757, 34},
{"13-07-23",25, 767, 42},
{"13-07-13",34, 765, 43},
{"13-07-09",37, 752, 39},
// {"13-08-19",30, 763, 41},
// {"13-08-27",19, 756, 50},
};
int size=5;
void vivod(pokazatelu ar[sizear], int size);
void addData(pokazatelu ar[sizear], int& size);
void sort(pokazatelu ar[sizear], int size);
bool pravuloSort(pokazatelu d1, pokazatelu d2);
void yslogSort(pokazatelu ar[sizear], int size);
double sertemp(pokazatelu ar[sizear], int size,char m[]);
int main () {
system("color F0");
int var; char m[2];
while(true){
cout<<"1. Вывод структуры"<<endl;
cout<<"2. Добавление новой даты"<<endl;
cout<<"3. Сортировка по дате"<<endl;
cout<<"4. Комплексная сортировка"<<endl;
cout<<"5. Определение средней температуры заданого месяца"<<endl;
cout<<"6. Изменение информации"<<endl;
cout<<"7. Дни месяца, когда температура превышала среднее значение"<<endl;
cout<<"Ваш выбор"<<" ";
cin>>var;
switch(var){
case 1:{
vivod(ar,size);
system("pause");
system("cls");
break;
}
case 2:{
addData(ar,size);
cout<<endl;
vivod(ar,size);
system("pause");
//system("cls");
break;
}
case 3:{
vivod(ar,size);
cout<<endl;
sort (ar,size);
vivod(ar,size);
system("pause");
system("cls");
break;
}
case 4:{
vivod(ar,size);
cout<<endl;
yslogSort(ar,size);
cout << "Сортировка за температурой + давление + влажность(на увелечение)" << endl;
cout << "===========================================================" << endl;
vivod(ar,size);
system("pause");
system("cls");
break;
}
case 5:{
cout<<"Введите месяц, для которого нужно определить среднюю температуру"<<" ";
// char m[2];
cin.ignore();
gets(m);
cout<<"Средняя температура месяца"<<" "<< sertemp(ar,size,m);
cout<<endl;
system("pause");
system("cls");
break;
}
case 6:{
int index;
vivod(ar,size);
cout << "Введите номер даты: ";
cin >> index;
cout << "Введите новую дату: ";
cin.ignore();
gets(ar[index].data);
cout << "температура: ";
cin >> ar[index].temperatyra;
cout << "давление: ";
cin >> ar[index].davlenue;
cout << "влажность: ";
cin >> ar[index].vlagnost;
vivod(ar,size);
system("pause");
system("cls");
break;
}
case 7:{
vivod(ar,size); cout<<endl;
cout<<"Введите месяц, для которого нужно определить среднюю температуру"<<" ";
cin.ignore();
gets(m);
cout<<"Средняя температура месяца"<<" "<< sertemp(ar,size,m);
cout<<endl;
cout<<"Дни месяца, когда температура превышала среднее значение"<<endl;
for(int i=0;i<size;i++){
if(ar[i].temperatyra> sertemp(ar,size,m)){
cout<<ar[i].data[6]<<ar[i].data[7]<<" ";
}
}
cout<<endl;
}
}
}
return 0;
}
//==============================================
double sertemp(pokazatelu ar[sizear], int size,char m[]){
double kolm=0,sumt=0;
for(int i=0;i<size;i++){
if(ar[i].data[3]==m[0] && ar[i].data[4]==m[1]){
kolm++; sumt+=ar[i].temperatyra;
}
else return 0;
}
return sumt/kolm;
}
//==============================================
void vivod(pokazatelu ar[sizear], int size){
cout << setw(6)<< "Дата" << setw(17) << "\tТемпература, С" << setw(6) << "\tДавление, мм.рт.ст" << setw(13) << "\tВлажность, %" << endl << endl;
for (int i = 0; i < size; i++) {
cout << i << " " <<ar[i].data <<
setw(11)<<ar[i].temperatyra <<
setw(20) <<ar[i].davlenue <<
setw(25) <<ar[i].vlagnost;
cout << endl;
}
}
//================================================
void addData(pokazatelu ar[sizear], int &size){
cout << "Введите Дату: ";
cin.ignore();
gets(ar[size].data);
cout << "Температура: ";
cin >> ar[size].temperatyra;
cout << "Давление: ";
cin >> ar[size].davlenue;
cout << "Влажность: ";
cin >> ar[size].vlagnost;
size++;
}
//================================================
void sort (pokazatelu ar[sizear], int size){
for (int i = 0; i < size-1; i++) {
for (int j = i+1; j < size; j++) {
if (strcmp(ar[j].data, ar[i].data)<0){
pokazatelu x = ar[i];
ar[i] = ar[j];
ar[j] = x;
}
}
}
}
//==============================================
bool pravuloSort(pokazatelu d1, pokazatelu d2){
if(d1.temperatyra<d2.temperatyra) return true;
if(d1.davlenue<d2.davlenue) return true;
if(d1.vlagnost<d2.vlagnost) return true;
return false;
}
//===============================================
void yslogSort(pokazatelu ar[sizear], int size){
for (int i = 0; i < size-1; i++) {
for (int j = i+1; j < size; j++) {
if (pravuloSort(ar[j], ar[i])){
pokazatelu x = ar[i];
ar[i] = ar[j];
ar[j] = x;
}
}
}
}
10.2.2 Результати тестування проекту у вигляді консолі
Рисунок 10.2 - Результати тестування проекту у вигляді консолі
Рисунок 10.3 - Результати тестування проекту у вигляді консолі
Рисунок 10.4 - Результати тестування проекту у вигляді консолі
Рисунок 10.5 - Результати тестування проекту у вигляді консолі
Рисунок 10.6 - Результати тестування проекту у вигляді консолі
Рисунок 10.7 - Результати тестування проекту у вигляді консолі
Рисунок 10.8 - Результати тестування проекту у вигляді консолі
Висновки
На цій лабораторній роботі ознайомився із поняттям структур. Створивши проект, зумів опанувати алгоритми обробки структур.
Документ
Категория
Рефераты
Просмотров
16
Размер файла
150 Кб
Теги
laboratornaya, robota
1/--страниц
Пожаловаться на содержимое документа