Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая Майер АИ-102 ПЕЧАТЬ.doc
Скачиваний:
1
Добавлен:
18.07.2019
Размер:
232.45 Кб
Скачать

3.6. «Виведення списку елементів із температурою води менше заданої»

У данному розділі, ви маєте можливість вивести список елементів, що має температуру води нище заданої. Вам запропонується ввести значення границі температури для формування списку.(Після виведення, знову з’явиться меню).

Рис.3.6. Список елементів із температурою води менше заданої.

3.7. «Виведення дати з максимальною температурою води та повітря»

У данному розділі, ви маєте можливість побачити, якого числа була зафіксована максимальні температури повітря та води..(Після виведення, знову з’явиться меню).

Рис.3.7. Виведення дати з максимальною температурою води та повітря.

3.8. «Виведення списку елементів із атмосферним тиском вище 760 мм.рт.ст.»

У данному розділі, ви маєте можливість побачити елементи черги, які мають значення атмосферного тиску менше ніж 760 мм.рт.ст. Якщо елементи с відповідним значенням не будуть знайденні, вибрана вами дії проігнорується. (Після виведення, знову з’явиться меню).

Рис.3.8 Список елементів із атмосферним тиском вище 760 мм.рт.ст.

3.9. «Сортування всієї структури за полем «температура повітря»»

У данному розділі, ви маєте можливість побачити значення полів елементів циклічної черги, відсортованної за полем «температура повітря».

(Після виведення, знову з’явиться меню).

Рис.3.9. Відсортований список елементів.

3.10. «Збереження в файл»

У данному розділі програма збереже всі елементи деку до файлу для подальшого використання .

Висновки

В ході проведеної роботи була розроблена програма для збереження інформації вимірів, що містяться в базі даних гідрометеорологічної служби. Програма була реалізована за допомогою динамічних структур даних, які дозволяють оптимізувати витрати на реалізацію. Була створена циклічна черга, якийа зберігає інформацію про дату, розмір температуру повітря, температуру води та адресу кварти атмосферний тиск, а також функції та процедури, що працюють з циклічною чергою.

Були поглиблені знання про динамічні структури даних та навички роботи з ними.

Були систематизовані знання, отримані на теоретичних заняттях та лабораторних роботах під час навчання, розвинуті навички вибору представлення початкових даних, роботи з динамічними структурами та їх розміщення в пам’яті комп’ютера.

В результаті була створена програма, яка оснащена зрозумілим інтерфейсом та різноманітними операціями над даними.

До програми також додається зручна інструкція користувача, яка допоможе початківцям розібратися з можливостями програми.

Перелік посилань

  1. http://www.cppreference.com/wiki/ru/container/deque/start

  2. http://program.rin.ru/razdel/html/813.html

  3. Полный справочник по C++. Герберт Шилдт. 2006.

  4. Вікіпедія

Додаток

Текст програми

#include "stdafx.h"

#include <stdlib.h>

#include <stdio.h>

#include <iostream>

#include <conio.h>

using namespace std;

struct gidmetsl

{float WaterTemperature;

float AirTemperature;

int data;

float AtmospherePressure;

gidmetsl *right;

};

gidmetsl* add(gidmetsl* que);

void insert(gidmetsl* ptr);

void show(gidmetsl* que);

void show_info(gidmetsl* ptr);

gidmetsl *del(gidmetsl *que);

void readf();

void writef(gidmetsl *que);

void correct(gidmetsl *que);

void WaterList(gidmetsl *que);

void PressureList(gidmetsl *que);

void MAX(gidmetsl *que, int choice);

void Sorting();

void Sorting_Real(gidmetsl *ptr);

int number=0;

gidmetsl *liststart, *listfinal;

int _tmain(int argc, _TCHAR* argv[])

{ setlocale( LC_ALL,"Russian" );//русифицируем консоль

int v;

while(1)

{

cout<<("1: Вставка данных")<<endl;

cout<<("2: Вывод всех данных")<<endl;

cout<<("3: Считывание с файла")<<endl;

cout<<("4: Запись в файл")<<endl;

cout<<("5: Удаление одного элемента")<<endl;

cout<<("6: Корректировка выбранного элемента")<<endl;

cout<<("7: формирование списка элементов с температурой воды ниже заданного значения")<<endl;

cout<<("8: формирование списка элементов с атмосферным давлением выше 760 мм рт. ст.")<<endl;

cout<<("9: вывод даты с максимальной температурой воздуха")<<endl;

cout<<("10: вывод даты с максимальной температурой воды")<<endl;

cout<<("11: Cортировка по полю «температура воздуха»")<<endl;

cout<<("12: выход")<<endl;

cout<<("Введи вариант: ");

cin>>v;

switch (v)

{

case 1: listfinal=add(listfinal); break;

case 2: show(liststart); break;

case 3: readf(); break;

case 4: writef(liststart); break;

case 5: liststart=del(liststart); break;

case 6: correct(liststart); break;

case 7: WaterList(liststart); break;

case 8: PressureList(liststart); break;

case 9: MAX(liststart, 1); break;

case 10: MAX(liststart, 2); break;

case 11: Sorting(); break;

case 12: return 0; break;

default: cout<<("недопустимый вариант")<<endl;

}

}

}

gidmetsl *del(gidmetsl *que)

{if((liststart==NULL) && (listfinal==NULL))

cout<<"Очередь пуста!!!"<<endl;

else{

gidmetsl *ptr=que->right;

delete que;

number--;

return ptr;}

}

gidmetsl* add(gidmetsl* c_que)

{ gidmetsl *c_ptr=new gidmetsl;

insert(c_ptr);

if(number){

c_ptr->right=liststart;

listfinal->right=c_ptr;

c_que=c_ptr;

}

else

{ liststart=c_que=c_ptr;

c_que=c_ptr;

c_que->right=0;

}

number++;

return c_que;

}

void insert(gidmetsl* ptr)

{

cout<<("Введите Дату. Вводить без точек и запятых")<<endl;

cin>>ptr->data;

cout<<("Введите температуру воздуха. Если температура имеет десятичное значение - вводить через точку")<<endl;

cin>>ptr->AirTemperature;

cout<<("Введите температуру воды. Если температура имеет десятичное значение - вводить через точку")<<endl;

cin>>ptr->WaterTemperature;

cout<<("Введите атмосферное давление в мм.рт.ст. ")<<endl;

cin>>ptr->AtmospherePressure;

}

void show_info(gidmetsl* ptr)

{

cout<<"Дата:"<<ptr->data<<endl;

cout<<"Температура воздуха: "<<ptr->AirTemperature<<endl;

cout<<"Температура воды: "<<ptr->WaterTemperature<<endl;

cout<<"Атмосферное давление: "<<ptr->AtmospherePressure<<(" мм.рт.ст.")<<endl;

}

void show(gidmetsl* que)

{ if((liststart==NULL) && (listfinal==NULL))

cout<<"Очередь пуста!!!";

for(int i=0;i<number;i++)

{ show_info(que);

que=que->right;

}

}

void correct(gidmetsl *que)

{ if((liststart==NULL) && (listfinal==NULL))

cout<<"Очередь пуста!!!"<<endl;

else{

int k;

cout<<("Номер эл-та, который вы хотите изменить")<<endl;

cin>>k;

for(int i=0;i<k-1;i++) que=que->right;

insert(que);}

}

void WaterList(gidmetsl *que)

{ if((liststart==NULL) && (listfinal==NULL))

cout<<"Очередь пуста!!!"<<endl;

else{

int k;

cout<<("Введите предел значения температуры ")<<endl;

cin>>k;

for(int i=0;i<number;i++)

{

if(que->WaterTemperature<=k)

show_info(que);

que=que->right;

}}

}

void PressureList(gidmetsl *que)

{ if((liststart==NULL) && (listfinal==NULL))

cout<<"Очередь пуста!!!";

else

for(int i=0;i<number;i++)

{

if(que->AtmospherePressure>=760)

show_info(que);

que=que->right;

}

}

void MAX(gidmetsl *que, int choice)

{

if((liststart==NULL) && (listfinal==NULL))

cout<<"Очередь пуста!!!"<<endl;

else

{float k=0;

gidmetsl *gid;

for(int i=0;i<number;i++)

{

if(choice==1)

if(que->AirTemperature>k)

{

k=que->AirTemperature;

gid=que;

}

if(choice==2)

if(que->WaterTemperature>k)

{

k=que->WaterTemperature;

gid=que;

}

que=que->right;

}

cout<<"Максимальная температура зарегестрирована: "<<gid->data<<endl;}

}

void readf()

{

FILE *f;

if((f=fopen("A.txt","r"))==NULL)

{

cout<<"Error";

}

else

{

gidmetsl* d=new gidmetsl;

fread(d,sizeof(gidmetsl),1,f);

liststart=listfinal=d;

while(!feof(f))

{

d=new gidmetsl;

fread(d,sizeof(gidmetsl),1,f);

if(!feof(f))

{

number++;

listfinal->right=d;

listfinal=d;

}

}

number++;

fclose(f);

}

}

void writef(gidmetsl *que)

{

if((liststart==NULL) && (listfinal==NULL))

cout<<"Очередь пуста!!!"<<endl;

FILE* f;

if((f=fopen("A.txt","w"))==NULL)

{

cout<<"Error, the program didn't saved";

}

else

{

gidmetsl* d=que;

for(int i=0; i<number;i++)

{

fwrite(d,sizeof(gidmetsl),1,f);

d=d->right;

}

fclose(f);

}

}

void Sorting_Real(gidmetsl *ptr)

{

struct gidmetsl temp;

for(int j=0;j<number-1; j++)

{

ptr=liststart;

for(int i=0;i<number-1;i++)

{

if(ptr->AirTemperature > ptr->right->AirTemperature)

{

//======================================

temp.data=ptr->data;

temp.AirTemperature=ptr->AirTemperature;

temp.WaterTemperature=ptr->WaterTemperature;

temp.AtmospherePressure=ptr->AtmospherePressure;

//=======================================

ptr->data=ptr->right->data;

ptr->AirTemperature=ptr->right->AirTemperature;

ptr->WaterTemperature=ptr->right->WaterTemperature;

ptr->AtmospherePressure=ptr->right->AtmospherePressure;

//=======================================

ptr->right->data=temp.data;

ptr->right->AirTemperature=temp.AirTemperature;

ptr->right->WaterTemperature=temp.WaterTemperature;

ptr->right->AtmospherePressure=temp.AtmospherePressure;

//=======================================

}

ptr=ptr->right;

}

}

}

void Sorting()

{

if((liststart==NULL) && (listfinal==NULL))

{

cout<<"Очередь пуста!!!";

getch();

return;

}

else

{

Sorting_Real(liststart);

cout<<"Очередь отсортирована"<<endl;

}

}