Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

 

 

Институт кибернетики

Направление 230400 «Информационные технологии»

Кафедра вычислительной техники

 

Программирование на ЯВУ

 

 

 

Отчет по лабораторной работе № 8

Структуры

Вариант № 1

 

 

Выполнил: студент гр. 8И12 ________ ___.___._____ А.В. Матвиенко
       
Проверил: ассистент кафедры ВТ ________ ___.___._____ А.В. Лепустин

 

Томск – 2012

ЦЕЛЬ

Ознакомиться с принципом работы со структурами на языке программирования С++.

ЗАДАНИЕ

Читая данные из файла и используя массив структур, решить следующую задачу. Дана ведомость абитуриентов, сдавших вступительные экзамены в университет. В каждой строке данной ведомости записана фамилия абитуриента, его постоянное местожительство и полученные им оценки по отдельным дисциплинам (например, физике, математике, литературе). Необходимо определить количество абитуриентов, проживающих в выбранном городе и сдавших экзамены со средним баллом не ниже 4, распечатать их фамилии в алфавитном порядке.


  1. ЛИСТИНГ ПРОГРАММЫ

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <string>

#include <Windows.h>

 

using namespace std;

 

struct sList

{

string surname;

string city;

int evalA;

int evalB;

int evalC;

float average;

};

 

string from_DOS(string DOS_string)

{

char buf[1000];

OemToCharA(DOS_string.c_str(), buf);

return buf;

}

 

string unregister(string s)

{

for (int i = 0; i < s.length(); i++)

{

if ( (s[i] >= -64 && s[i] <= -33) || (s[i] >= 65 && s[i] <= 90) )

s[i] += 32;

}

return s;

}

 

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

{

setlocale(0, "RUS");

 

int count = 0;

string city;

bool t = false, run = true;

 

ifstream Input("input.txt");

 

char ch = 0, pch;

 

// Подсчёт количества записей

while ( !Input.eof() )

{

pch = ch;

ch = Input.get();

 

if ( ch == '\n' )

{

count++;

}

else

{

if ( Input.eof() && pch != '\n' )

{

count++;

}

}

if (ch == '\n' && pch == '\n')

{

count--;

break;

}

}

 

cout << "В файле найдено " << count << " записей.\n";

 

cout << "\nСписок абитуриентов:\n";

 

sList *List = new sList [count];

 

bool *res = new bool[count];

 

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

{

res[i] = false;

}

 

Input.clear();

Input.seekg (0, ios::beg);

 

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

{

Input >>

List[i].surname >>

List[i].city >>

List[i].evalA >>

List[i].evalB >>

List[i].evalC;

List[i].average = (List[i].evalA + List[i].evalB + List[i].evalC) / 3.0;

cout <<

List[i].surname <<

" " <<

List[i].city <<

" " <<

List[i].evalA <<

" " <<

List[i].evalB <<

" " <<

List[i].evalC <<

"\n";

}

 

while (run)

{

cout << "\nВведите город для фильтрации:\n";

cin >> city;

city = from_DOS(city);

 

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

{

if ( unregister(List[i].city) == unregister(city) && List[i].average >= 4)

{

t = true;

break;

}

}

 

if (!t)

{

cout << "\nВ базе не найдено ни одной записи, удовлетворяющей условиям фильтра\n";

}

else

{

cout << "\nРезультат фильтрации (по городу: \"" << city << "\" и среднему баллу: \"не ниже 4\"):\n";

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

{

if ( unregister(List[i].city) == unregister(city) && List[i].average >= 4)

{

res[i] = true;

}

}

}

 

// Вывод фамилий в алфавитном порядке

string strtmp;

for (int i = -32; i <= -1; i++)

{

 

for (int k = 0; k < count; k++)

{

strtmp = unregister(List[k].surname);

if (strtmp[0] == i && res[k])

{

cout << List[k].surname << "\n";

res[k] = false;

}

}

}

 

// Проверка на выход

string answer = "";

 

cout << "\nЖелаете ввести другой город? (да - продолжить\; нет - закрыть программу)\n";

while (answer != unregister("Да") && answer != unregister("Нет"))

{

cin >> answer;

answer = from_DOS(answer);

}

 

if (answer == unregister("Нет"))

{

run = false;

t = false;

}

}

 

Input.close();

 

return 0;

}

 


РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ

Таблица 1

 

В файле найдено 16 записей.

 

Список абитуриентов:

Петров Москва 3 4 4

Миролюбов Вологда 4 4 4

Добролюбов Томск 5 4 4

Сидоров Донецк 3 4 4

Бородач Томск 3 4 5

Овербух Москва 5 4 5

Григорьев Томск 5 5 5

Безруков Омск 3 3 5

Сапожников Москва 5 5 5

Мартынов Омск 5 4 5

Железякин Тюмень 5 5 5

Обходимов Омск 3 4 3

Сыромятин Вологда 3 4 5

Коромыслов Томск 4 5 4

Игнатьев Омск 5 5 5

Соловецкий Москва 4 5 5

 

Введите город для фильтрации:

Москва

 

Результат фильтрации (по городу: "Москва" и среднему баллу: "не ниже 4"):

Овербух

Сапожников

Соловецкий

 

Желаете ввести другой город? (да - продолжить; нет - закрыть программу)

да

 

Введите город для фильтрации:

омск

 

Результат фильтрации (по городу: "омск" и среднему баллу: "не ниже 4"):

Игнатьев

Мартынов

 

Желаете ввести другой город? (да - продолжить; нет - закрыть программу)

Нет


ВЫВОД

Структуры в C++ - это множество объектов разного типа расположенных в памяти последовательно. Использование структур сильно улучшает читабельность кода, т.к. при их использовании явно прослеживается связь переменных.

В программе при поиске совпадений по названию города и при обработке команд выхода из программы реализован алгоритм сравнения строк без учёта регистра символов (функция unregister). Поиск по базе фамилий и вывод результатов выполняется столько раз, сколько потребует пользователь.

При выполнении лабораторной работы, самой сложной задачей оказалась реализация корректной обработки символьных данных при считывании кириллических символов с клавиатуры (при считывании с файла проблем не возникло). Эту задачу удалось решить, добавив обработку для считанной строки (функция from_DOS выполняет корректировку).

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.