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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2013, 18:47   #1
NinjaNoob
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 40
По умолчанию C++ Односв. список, ошибка сортировки

Имеется структура:
Код:
struct Student {
 // Идентификатор
 int id;
 // фамилия
 char surname[64];
 // имя
 char name[64];
 // отчество
 char second_name[64];
 // Факультет
 char faculty[32];
 // специальность
 char specialty[64];
 // возраст
 int age; 
 // курс
 int course;
 // Дата поступления - Формат - День / Месяц / Год
 char date[32];
};

struct Students {
 Student P;
 Students *next;
};
Необходимо отсортировать список студентов по полю id. Есть функция сортировки:
Код:
Students * Sort(Students *Ps)
{
    Students *First=Ps;
	Students *Current=Ps;
	Students *Next=NULL;
	Students *TMP=NULL;
	while (Current)
	{
		Next=Current->next;

		while(Next)
		{
			if (Next->P.id < Current->P.id)
			{
				TMP=Next->P.id;
				Next->P.id=Current->P.id;
				Current->P.id=TMP;
			}
			Next=Next->next;
		} Current=Current->next;
	}
	return First;
}

int main()
{
Student D;
Students *Ps=NULL;
Students *BPs=NULL;
......
Sort(&Ps);
}
Но при компиляции возникают следующие ошибки:
Код:
Ошибка	30	error C2440: =: невозможно преобразовать "int" в "Students *"	c:\users\вадим\documents\visual studio 2010\projects\dynamiclist\dynamiclist\dynamiclist.cpp	430
Ошибка	31	error C2440: =: невозможно преобразовать "Students *" в "int"	c:\users\вадим\documents\visual studio 2010\projects\dynamiclist\dynamiclist\dynamiclist.cpp	432
Ошибка	32	error C2664: Sort: невозможно преобразовать параметр 1 из "Students **" в "Students *"	c:\users\вадим\documents\visual studio 2010\projects\dynamiclist\dynamiclist\dynamiclist.cpp	538
	33	IntelliSense: значение типа "int" нельзя присвоить сущности типа "Students *"	c:\users\вадим\documents\visual studio 2010\projects\dynamiclist\dynamiclist\dynamiclist.cpp	430
	34	IntelliSense: значение типа "Students *" нельзя присвоить сущности типа "int"	c:\users\вадим\documents\visual studio 2010\projects\dynamiclist\dynamiclist\dynamiclist.cpp	432
Что я делаю не так?
NinjaNoob вне форума Ответить с цитированием
Старый 19.01.2013, 18:51   #2
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

IntelliSense: значение типа "int" нельзя присвоить сущности типа "Students *

вот здесь ошибка
Код:
TMP=Next->P.id;
Current->P.id=TMP;
еще ты функцию не те параметры передаешь

А на счет этих ошибок наверное там нужно писать
Код:
TMP.id=Next->P.id;
rUs_LAN вне форума Ответить с цитированием
Старый 19.01.2013, 18:53   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Sort(&Ps);
А зачем передавать указатель на указатель? У тебя же Students *Ps. Ты получается передаешь в Sort адрес на переменную содержащую адрес а не структуру студентов...
На какой вообще строке ругается?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.01.2013, 19:17   #4
NinjaNoob
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем передавать указатель на указатель? У тебя же Students *Ps. Ты получается передаешь в Sort адрес на переменную содержащую адрес а не структуру студентов...
вызывать нужно Sort(Ps); ?

Цитата:
Сообщение от Stilet Посмотреть сообщение
На какой вообще строке ругается?
Код:
if (Next->P.id < Current->P.id)
{
     TMP=Next->P.id; //здесь 
     Next->P.id=Current->P.id;
     Current->P.id=TMP; //и здесь
}
Цитата:
Сообщение от rUs_LAN Посмотреть сообщение
еще ты функцию не те параметры передаешь
Код:
Students *Sort(Students *Ps)
Передаю список, чего мне не хватает?

Последний раз редактировалось Stilet; 19.01.2013 в 19:34.
NinjaNoob вне форума Ответить с цитированием
Старый 19.01.2013, 20:02   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вызывать нужно Sort(Ps); ?
Чего спрашиваешь? Пробуй!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.01.2013, 20:05   #6
NinjaNoob
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Чего спрашиваешь? Пробуй!
Попробовал. На вызов больше не ругается. А с сортировкой до сих пор не разобрался.

Код:
TMP->P.id=Next->P.id;
Next->P.id=Current->P.id;
Current->P.id=TMP->P.id;
Вот так по идее. Спасибо за помощь.

Последний раз редактировалось Stilet; 19.01.2013 в 21:07.
NinjaNoob вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить эффективность алгоритмов шейкерной сортировки и сортировки слиянием (язык C) Ольга210993 Помощь студентам 2 20.09.2012 13:52
Алгоритмы сортировки пирамидальный(кучей) и быстрой сортировки (с++) mmd12 Помощь студентам 4 17.05.2012 14:14
ошибка при сортировки пузырьком(Delphi) maksat-15 Помощь студентам 2 22.04.2012 16:05
Ошибка в алгоритме сортировки в теме "ДЛЯ СТУДЕНТОВ !!!" Darth.Vader Общие вопросы C/C++ 0 06.12.2009 15:21
ошибка в процедуре сортировки строк массива halfpenny Паскаль, Turbo Pascal, PascalABC.NET 1 17.06.2009 00:36