Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

это попытка решения разработчиками языка С задач объектноориентированного программирования Object Oriented Progrmmi

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 1.6.2024

Содержание

Введение

Постановка задачи   4

Разработка алгоритма  5

Описание функций и переменных   7

Блок – схема программы   8

Тестирование программы 9

Текст программы 11


Введение

C++ - это попытка решения разработчиками языка С задач объектно-ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, С++ помимо ООР поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. С++ уже стал универсальным языком для программистов всего мира.

C++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

Постановка задачи:

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


Разработка алгоритма

Для реализации программы были созданы две структуры.

Структуры использованы для логического объединения данных типов string и int. и так же как массивы служат для группирования данных разного типа.

Структура groups задана следующим образом:

struct groups {

string name;             colStudents;             string fioStudents[50];};

В структуре groups созданы три переменные - name типа string, содержащую название группы, colStudent типа int, принимающую значение о количестве студентов в данной группе и fioStudents типа string, включающая информацию о фамилиях студентов.

Доступ к полям  структуры осуществляется посредством оператора . (точка).

arrG[i].name;       

arrG[i].colStudents;

arrG[i].ftoStudents[j];

Аналогичной является структура predmets

struct predmets  {

string name;             string prepod; };

Имеет две переменные типа string: первая – name, в которой заключается наименование предмета, вторая – prepod, которая содержит ФИО преподавателя, который преподает этот предмет.

Для сортировки массива по фамилиям студентов была выбрана быстрая сортировка.

Быстрая сортировка (англ. quicksort), часто называемая qsort по имени реализации в стандартной библиотеке языка Си — широко известный алгоритм сортировки, разработанный английским информатиком Чарльзом Хоаром в МГУ в 1960 году. Один из быстрых известных универсальных алгоритмов сортировки массивов (в среднем O (n log n) обменов при упорядочении n элементов.

Краткое описание алгоритма быстрой сортировки:

  1.  выбрать элемент, называемый опорным.
  2.  сравнить все остальные элементы с опорным, на основании сравнения разбить множество на три — «меньшие опорного», «равные» и «большие», расположить их в порядке меньшие-равные-большие.
  3.  повторить рекурсивно для «меньших» и «больших».

Для вывода на экран диалога с пользователем и вывода ведомостей был использован оператор cout.

Диалог с пользователем был осуществлен посредством перебора последовательности условий поиска «нужной» ведомости. После чего на экран выводиться искомая ведомость, после просмотра которого есть возможность повторного поиска ведомости.

Сложность метода заключаеться в том, что метод неустойчив. Поведение довольно естественно, если учесть, что при частичной упорядоченности повышаються шансы разделения массива на более равные части.

Сортировка использует дополнительную память, так как приблизителдьная глубина рекурсии составляет O(log n), а данные о рекурсивнх подвызовах каждый раз добавляются в стек.


Описание функций и переменных.

1.Функция ввода значений в массивы.

На входе:

Указатели на массивы содержащий символьные  элементы, количество элементов в массиве.

По очереди вводим  все элементы массивов.

2. Функция сортировки quickSort.

Функция сортирует список фамилий в алфавитном порядке  при печати ведомости.  

3. Функция определения номера для выбора той или иной группы/предмета/формы контроля и т.д.

На входе: Указатель на массив, три целочисленных переменные присвоенные названиям групп/предметов/формы контроля

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

На выходе:  Зачетная/Экзаменационная ведомость, заполненная данными из массивов.


Блок – схема программы

НАЧАЛО

Чтение groups.txt, predmets.txt

Запись данных о группах

For i= 0; i<nGroups

Сортировка фамилий

i=nGroups-1

For i= 0; i<nPredmets

Запись данных о предметах

i=nPredmets-1

true

Вывод последовательности условий

Вывод ведомости

КОНЕЦ


Тестирование программы

Для вывода требуемой ведомости нужно уточнить условия выбора. Для этого нужно выбрать тип ведомости (зачет/экзамен), группу и нужный предмет.

Рисунок 1.

После выбора всех параметров поиска на экран выводиться искомая ведомость.

Рисунок 2.


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

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

struct groups                                      

{

string name;                                     

 int colStudents;                                   

string fioStudents[50];                                  

};

struct predmets

{

string name;                                    

string prepod;                                    

};

#include <iostream>

using namespace std;

 

void quickSort(string arr[], int left, int right) {

   int i = left, j = right;

   string tmp;

string pivot = arr[(left + right) / 2];

 

   /* partition */

   while (i <= j) {

 while (arr[i] < pivot)

       i++;

 while (arr[j] > pivot)

       j--;

       if (i <= j) {

           tmp = arr[i];

           arr[i] = arr[j];

           arr[j] = tmp;

           i++;

           j--;

       }

   };

 

   /* recursion */

   if (left < j)

   quickSort(arr, left, j);

   if (i < right)

   quickSort(arr, i, right);

 

}

int main()

{

setlocale(0,"Rus");

 int i, j, nGroups, nPredmets, group, predmet, tmp;

string typeVed;

ifstream in("groups.txt", ios::in);                               

ifstream in2("predmets.txt", ios::in);                              

in>>nGroups;                                     

groups *arrG = new groups[nGroups];                               

 for(i=0; i<nGroups; i++)                                 

{

 in>>arrG[i].name;                                  

 in>>arrG[i].colStudents;                                

 for(j=0; j<arrG[i].colStudents; j++)                             

 {

  in>>arrG[i].fioStudents[j];

 }

 cout<<"Группа "<<arrG[i].name<<" успешно сохранена!"<<endl<<endl;

}

 for(i=0; i<nGroups; i++){

 quickSort(arrG[i].fioStudents, 0, arrG[i].colStudents-1);

}

 

in2>>nPredmets;                                    

predmets *arrP = new predmets[nPredmets];                              

 for(i=0; i<nPredmets; i++)                                 

{

 in2>>arrP[i].name;                                  

 in2>>arrP[i].prepod;                                 

 cout<<"Предмет "<<arrP[i].name<<" успешно сохранён!"<<endl<<endl;

}

 

 

 

 while (true)

 

{

 cout<<"\n\nВыберите тип ведомости:\n\n0 - зачёт\n1 - экзамен\n\n: "; cin>>tmp;

 if(tmp) typeVed = "экзамен"; else typeVed = "зачёт";                          

 

cout<<"\nГруппы сдающие "<<typeVed<<"\n"<<endl;

 for(i=0; i<nGroups; i++)

{

 

 cout<<i<<": "<<arrG[i].name<<endl;                              

}

cout<<"\nВыберите группу, сдающую "<<typeVed<<"\n\n: "; cin>>group;

cout<<"\nПредметы, которые сдает группа "<<arrG[group].name<<"\n"<<endl;

 for(i=0; i<nPredmets; i++)

{

 cout<<i<<": "<<arrP[i].name<<endl;       

}

cout<<"\nВыберите предмет, который сдаёт группа "<<arrG[group].name<<"\n\n: "; cin>>predmet;

system("cls");

 if(typeVed=="экзамен") cout<<"\n________________________________________________________________________________\n\t\t\t   ЭКЗАМЕНАЦИОННАЯ ВЕДОМОСТЬ\n________________________________________________________________________________"<<endl; else cout<<"\n________________________________________________________________________________\n\t\t\t   ЗАЧЕТНАЯ ВЕДОМОСТЬ\n________________________________________________________________________________"<<endl;

 cout<<"\n\tГРУППА: "<<arrG[group].name<<"\tПРЕДМЕТ: "<<arrP[predmet].name<<"\tПРЕПОДОВАТЕЛЬ: "<<arrP[predmet].prepod<<endl;

 cout<<"\n________________________________________________________________________________"<<endl;

 cout<<"\t   ФИО\t\t|  № Зач.книжки\t|    Оценка\t| Подпись экзаменатора"<<endl;

 cout<<"________________________________________________________________________________"<<endl;

 for(j=0; j<arrG[group].colStudents; j++)                            

 {

  cout<<" "<<arrG[group].fioStudents[j]<<"\t\t|\t\t|\t\t|"<<endl;

 }

 cout<<"________________________________________________________________________________"<<endl;

 cout<<"Итого:"<<endl;

 cout<<"\t\tОтлично: ______________________________"<<endl;

 cout<<"\t\tХорошо: _______________________________"<<endl;

 cout<<"\t\tУдовлетворительно: ____________________"<<endl;

 cout<<"\t\tНеудовлетворительно: __________________"<<endl;

 cout<<"\t\tНеявка: _______________________________\n"<<endl;

system("pause");

}

system("pause");

 return 0;

}

2

Лист                             




1. Контрольная работа- Проблемные поля туристической фирмы
2. хронический и хронический рецидивирующий.
3. Две воительницы Личия ТроисиДве воительницы Серия- Войны Всплывшего Мира ~ 2 Scn.
4. тематическими психическими нагрузками и сильными стрессами их рабочий день нередко составляет 10 12 а то и 1
5. Мансийского АО Общие сведения ХантыМ
6. Тема- Дополнительные методы обследования гинекологических больных
7. In recent yers one populr theory proposes tht climtic chnges cused the dinosurs to become extinct
8. методические рекомендации для студентов педагогических вузов Волгоград ~ 2010 г Мет
9. Н Подзорова доцент к
10. Тема 1 1Зависит от мощности процессора и объема оперативной памяти
11. Элементарные частицы. Античастицы, взаимные превращения частиц
12. Дінай- резюме року минулого сюрпризи майбутнього Програма семінару 10-30 Реєстрація відвідувачів на
13. Организация питания, построение меню
14. Исследование торговой панели г Краснодара
15. ВВЕДЕНИЕ В современных условиях перехода России к рыночной экономике гражданское право становится одним
16. Организм и среда
17. Subject Pr stock Issue Dte Revision 1
18. dies ntlis jour de nissnce employ~e le jour o~ les Chr~tiens c~l~brent l nissnce du Christ
19. Особенности проведения маркетингового исследования
20. Тема ИЗМЕРЕНИЕ ОБЪЕМА ПРОИЗВОДСТВА И УРОВНЯ ЦЕН В ЭКОНОМИКЕ 1