Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2012, 13:48   #1
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
Восклицание Односвяный список С++

Помогите пожалуйста с задачей.
Описать структуру с именем STUDENT, с полями: фамилия, имя, номер группы, успеваемость (массив из пяти элементов). Сформировать односвязный список. Затем напечатать элементы списка по возрастанию, используя в качестве первичного ключа – номер группы. Затем напечатать фамилии студентов, у которых средний балл выше, чем средний балл по всем студентам.

Мне даже как-то стыдно показывать то, что у меня получилось.
kryliaangela вне форума Ответить с цитированием
Старый 10.04.2012, 18:58   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от kryliaangela Посмотреть сообщение
Мне даже как-то стыдно показывать то, что у меня получилось.
Мы тут как врачи - нас стесняться не надо
eoln вне форума Ответить с цитированием
Старый 19.05.2012, 03:52   #3
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
По умолчанию

Код:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
struct student
	{char name, surname;
	 int gryppa, ball;
	 student *next;
	 student *prev;};
student *head=0;
student *tail=0;
student *tmp;
bool flag=true;
float sred_ball=0;
int a=0;
int main()
{SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 cout<<"Введите данные о студенте:"<<'\n';
 while (flag)
	{if (head)
		{tail->next= new student;
		 tail->next->prev=tail;
		 tail=tail->next;}
	else
		{head=new student;
		 tail=head;
		 head->prev=0;}
	 cout<<'\n'<<"Имя студента:";
	 cin>>tail->name;
	 cout<<"Фамилия студента:";
	 cin>>tail->surname;
	 cout<<"Номер группы:";
	 cin>>tail->gryppa;
	 cout<<"Успеваемость студента (балл):";
	 cin>>tail->ball;
	 sred_ball=+tail->ball;// формирование среднего балла
	 +a;
	 tail->next=0;
	 cout<<"Для продолжения enter, для завершения ввода esc";
	 if(getch()==VK_ESCAPE)
		flag=false;}
  sred_ball=sred_ball/a;// средний балл
  tmp=head;
  cout<<'\n';
  while(tmp!=0)
	{cout<<"Имя студента:"<<tmp->name;
	 cout<<"Фамилия студента:"<<tmp->surname;
	 cout<<"Номер группы:"<<tmp->gryppa;
	 cout<<"Успеваемость студента (балл):"<<tmp->ball<<'\n';
	 tmp=tmp->next;}
  tmp=head->next;
  student *temp;
  temp=new student;
  flag=true;
  while (flag)//сортировка в порядке возврастания номера группы
	{flag=false;
	 while(tmp!=0)
		{if((tmp->gryppa<tmp->prev->gryppa)||(tmp->gryppa==tmp->prev->gryppa))
			{*temp=*tmp;
			temp->prev=tmp->prev->prev;
			temp->next=tmp->prev;
			tmp->prev->prev=tmp;
			tmp->prev->next=tmp->next;
			if (tmp->next!=0) 
				{tmp->next->prev=temp->next;} 
			else 
				{tail=tmp->prev;}				
			if (temp->prev!=0) 
				{temp->prev->next=tmp;} 
			else 
				{head=tmp;};
			*tmp=*temp;	
			flag=true;}				
		tmp=tmp->next;}
	tmp=head->next;}
 delete temp;
 tmp=head;
 cout<<'\n';
 cout<<"Отсортированный список"<<'\n';
 while(tmp!=0)
	{cout<<"Имя студента:"<<tmp->name;
	 cout<<"Фамилия студента:"<<tmp->surname;
	 cout<<"Номер группы:"<<tmp->gryppa;
	 cout<<"Успеваемость студента (балл):"<<tmp->ball<<'\n';
	 tmp=tmp->next;}
 tmp=head;
 cout<<"Средний балл:"<<" "<<sred_ball;
 while(tmp!=0)
	{if(tmp->ball>sred_ball)
		{cout<<"Фамилия студента:"<<tmp->surname;
		 cout<<"Успеваемость студента (балл):"<<tmp->ball<<'\n';}
	 tmp=tmp->next;}
 _getch();
}
kryliaangela вне форума Ответить с цитированием
Старый 19.05.2012, 10:52   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну. Код есть. Какие к нему претензии?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2012, 00:16   #5
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
По умолчанию

Как можно его оптимизировать, я с задачей разобралась сама, но вот код получился громоздкий
kryliaangela вне форума Ответить с цитированием
Старый 20.05.2012, 10:15   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
код получился громоздкий
Громоздкий??? Это еще ничего, это ты громоздких не видела еще.
Программа работает? Результ верный выдает?
Или по ТЗ нужно дабы код был меньше маленького?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.05.2012, 21:53   #7
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
По умолчанию

код работает без ошибок, единственное, меня смущает вот эта часть
Код:
flag=true;
  while (flag)//сортировка в порядке возврастания номера группы
	{flag=false;
	 while(tmp!=0)
		{if((tmp->gryppa<tmp->prev->gryppa)||(tmp->gryppa==tmp->prev->gryppa))
			{*temp=*tmp;
			temp->prev=tmp->prev->prev;
			temp->next=tmp->prev;
			tmp->prev->prev=tmp;
			tmp->prev->next=tmp->next;
			if (tmp->next!=0) 
				{tmp->next->prev=temp->next;} 
			else 
				{tail=tmp->prev;}				
			if (temp->prev!=0) 
				{temp->prev->next=tmp;} 
			else 
				{head=tmp;};
			*tmp=*temp;	
			flag=true;}				
		tmp=tmp->next;}
	tmp=head->next;}
 delete temp;
 tmp=head;
ее можно укоротить или нет?
kryliaangela вне форума Ответить с цитированием
Старый 21.05.2012, 22:21   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Такс... Ладно. Вот когда-то я предлагал вместо поточной сортировки сортировку при внесении нового элемента:http://www.programmersforum.ru/showthread.php?t=62347
Как будет время наверно нужно будет пополнить коллекцию Клуба подобным примером по сортировке списков.
Посмотри, может тебя заинтересует та темка
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.05.2012, 17:16   #9
kryliaangela
Пользователь
 
Аватар для kryliaangela
 
Регистрация: 12.01.2012
Сообщений: 18
По умолчанию

Спасибо, посмотрю)
kryliaangela вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание Zigfried Помощь студентам 2 04.10.2010 20:29
связать список строк и список целых чисел lirikoff Помощь студентам 5 31.08.2010 13:23
Сортировка слиянием(1 сорт список+2 сорт список=3 сорт список) Promolol Помощь студентам 0 21.05.2010 23:49
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43