|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.07.2019, 17:48 | #1 |
Новичок
Джуниор
Регистрация: 26.07.2019
Сообщений: 2
|
C++, двусвязный список, поправьте, пожалуйста.
#include "iostream"
#include "fstream" using namespace std; struct Student { char name[20];//фамилия студента int group; //номер группы int ses[5]; //оценки Student *next; Student *prev; }; Student *new_element_spisok(Student *spisok_end, Student *spisok_beg) { Student *new_element = new Student; new_element->prev = spisok_end; spisok_end->next = new_element; printf("Vvedite element \n"); cin>>new_element->name; cin>>new_element->group; for(int i=0;i<5;i++){cin>>new_element->ses[i];} return new_element; } void sort(Student *spisok_beg, Student *spisok_end) { int a=0; Student *last, *temp ; Student *sort_beg , *sort_end ; for (temp = spisok_beg; temp != spisok_end; temp = temp->next) { a++; } do { for (sort_end = spisok_end; sort_end!= spisok_beg->next ; sort_end = sort_end->prev) { if ((sort_end->prev)->group > sort_end->group) { (sort_end->next)->prev=sort_end->prev; (sort_end->prev)->next = sort_end->next; (sort_end->prev)->prev = sort_end; ((sort_end->prev)->prev)->next = sort_end; last = sort_end; } } spisok_beg = last->next; for (sort_beg = spisok_beg; sort_beg != spisok_end->prev ; sort_beg = sort_beg->next) { if ((sort_beg->next)->group > sort_beg->group) { (sort_beg->prev)->next=sort_beg->next; (sort_beg->next)->prev = sort_beg->prev; (sort_beg->next)->next = sort_beg; ((sort_beg->next)->next)->prev = sort_beg; last = sort_beg; } } spisok_end = last->prev; } while (sort_beg != sort_end); Student *pv = spisok_beg->next; int i =0; while (i<a){ i++; printf("%d ", pv->name); pv = pv->next; } printf("\n"); } //ищем хорошистов double horoshist(Student *gr, int n) { int x, z = 0; //объявляем переменные for(int i = 0; i < n; i++) { x = 0; for(int j = 0; j < 5; j++) { if(gr[i].ses[j] == 4 || gr[i].ses[j] == 5) { x++; //считаем количество 4 и 5 у каждого студента } } if (x == 5) //если еоличество 4 и 5 равен 5 тогда... { cout << gr[i].name << '\t' << gr[i].group << endl; //выводи этих студентов z++;//подсчитываем количеств хорошистов } } if (z == 0) //если хорошистов нет, тогда .... { cout << "Среди студентов нет хорошистов" <<endl; //выводим сообщение об этом } return 0; } int main() { bool for_while = true; int for_switch_case; Student *spisok_beg , *spisok_end = new Student; spisok_beg = spisok_end; while(for_while){ printf(" 1. Sozdat element v spiske \n 2. Sortrovat\n 3. Vihod \n"); scanf("%d", &for_switch_case); switch (for_switch_case) { case 1: spisok_end = new_element_spisok(spisok_end, spisok_beg); break; case 2: sort(spisok_beg, spisok_end); break; case 3: for_while = false; break; default: break; ; } } return 0; } |
26.07.2019, 17:49 | #2 |
Новичок
Джуниор
Регистрация: 26.07.2019
Сообщений: 2
|
ВОТ ВАРИАНТ НА МАССИВЕ (РАБОТАЕТ), НУЖЕН НА ДВУСВЯЗНОМ СПИСКЕ.
#include "iostream" #include "fstream" using namespace std; struct student { char name[20];//фамилия студента int group; //номер группы int ses[5]; //оценки }; double sort(student *,int n); // прототип функции сортировки по среднему балу double horoshist(student *,int n); // прототип функции вывод студентов у которых 4 и 5 int main() { setlocale(LC_CTYPE,"Russian"); //русский шрифт в консоле int n, i, j; //обьявляем переменные cout << "Введите количество структур типа студент - "; cin >> n; //число элементов в массиве структур student *stud1 = new student [n]; //выделение динамической памяти под массив структур //заполнение массива считыванием из файла for(i = 0; i < n; i++) { cin >> stud1[i].name >> stud1[i].group; for(j = 0; j < 5; j++) { cin >> stud1[i].ses[j]; } cout << endl; } cout << endl << "Mассив STUD1 по возрастанию среднего балла" << endl; cout << endl << "Фамилия\tГруппа\t\t Оценки\t\t Средний бал" << endl << endl; sort(stud1, n); //вызываем функцию сортировки cout << endl << "Фамилии и номера групп для всех студентов, имеющих оценки 4 и 5" << endl; cout << endl << "Фамилия\tГруппа" << endl << endl; horoshist(stud1, n); //вызываем функцию для вывода хорошистов delete [] stud1; //очищаем память system("pause >> null"); //ждем пока пользователь нажмет любую клавишу return 0; //выход с программы } //сортировку делаеи спомощью "Пузырьковой сортировки" double sort(student *gr, int n) { double s; //перемееная для подсчета суммы балов каждого студента double *avg = new double [n]; //выделяем память под массив хранящщего средние балы каждого студента //находим средний бал каждого студента for(int i = 0; i < n; i++) { s = 0.; for(int j = 0; j < 5; j++) { s += gr[i].ses[j]; avg[i] = s / 5; } } bool flag = true; //обьявляем булевую переменную и даем есть значение "истина" while(flag) //пока "истина" делаем { flag = false; //устанавливаем переменную в "ложь" for(int i = 0; i < n - 1; ++i) { if(avg[i] > avg[i + 1]) //если элемент массива большн следующий элемент, тогда { //меняем массивы в структуре местами student x = gr[i]; gr[i] = gr[i + 1]; gr[i + 1] = x; //а также меняем местами и элементы в массиве средних оценок double temp = avg[i]; avg[i] = avg[i + 1]; avg[i + 1] = temp; flag = true; //уснанавлюем в "истина" } } } //выводим на экран отсортированную структуру for(int i = 0; i < n; i++) { cout << gr[i].name << '\t' << gr[i].group; for(int j = 0; j < 5; j++) { cout << '\t' << gr[i].ses[j]; } cout << "\t" << avg[i]; //выводим на экран средний бал cout << endl; } delete [] avg; //освобождаем память return 0; } //ищем хорошистов double horoshist(student *gr, int n) { int x, z = 0; //объявляем переменные for(int i = 0; i < n; i++) { x = 0; for(int j = 0; j < 5; j++) { if(gr[i].ses[j] == 4 || gr[i].ses[j] == 5) { x++; //считаем количество 4 и 5 у каждого студента } } if (x == 5) //если еоличество 4 и 5 равен 5 тогда... { cout << gr[i].name << '\t' << gr[i].group << endl; //выводи этих студентов z++;//подсчитываем количеств хорошистов } } if (z == 0) //если хорошистов нет, тогда .... { cout << "Среди студентов нет хорошистов" <<endl; //выводим сообщение об этом } return 0; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поправьте программу в Pascal пожалуйста | MyAngelRem | Помощь студентам | 1 | 18.03.2017 10:57 |
Двусвязный список | decantnik | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 09.05.2011 00:58 |
Поправьте пожалуйста код | batonza | Общие вопросы C/C++ | 3 | 03.10.2009 11:05 |
Поправьте код, пожалуйста! | Blondy | Общие вопросы C/C++ | 10 | 14.09.2009 01:47 |
Поправьте пожалуйста код... | Rymond | Помощь студентам | 4 | 26.04.2009 19:41 |