Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 26.07.2019, 18:48   #1
Гарин Борис
Новичок
 
Регистрация: 26.07.2019
Сообщений: 2
Репутация: 10
По умолчанию 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, 18:49   #2
Гарин Борис
Новичок
 
Регистрация: 26.07.2019
Сообщений: 2
Репутация: 10
По умолчанию

ВОТ ВАРИАНТ НА МАССИВЕ (РАБОТАЕТ), НУЖЕН НА ДВУСВЯЗНОМ СПИСКЕ.

#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;
}
Гарин Борис вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поправьте программу в Pascal пожалуйста MyAngelRem Помощь студентам 1 18.03.2017 11:57
Двусвязный список decantnik Паскаль 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


20:23.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.