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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2009, 18:06   #1
defol-777
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 30
Стрелка Есть код программы Сортировка строк в файле...помогите разобраться)

Это кусок кода...помогите разобраться...как сделать сортировку строк...можно словами)))

Код:
//Сортировка по количеству проданых билетов
void sort_sellbilets(char *fname)
{
	int i;
	int fl;
	kass ppp;
	FILE *base1;

	if((base1 = fopen(fname, "r+")) == NULL)
	{
		printf("\n Ошибка открытия базы данных для чтения и записи\n");
		abort();
	}
	fl = 0;
	do{
		rewind(base1);
		fl = 0;
		for(i=0; fread(&bilets, sizeof(bilets), 1, base1) > 0; i += sizeof(bilets),
			fseek(base1, i, SEEK_SET))
			{
				if(fread(&ppp, sizeof(bilets), 1, base1) > 0)
				{
					if(bilets.sellbillet > ppp.sellbillet)
					{
						fseek(base1, i, SEEK_SET);	//позиция i от НАЧАЛА файла
						fwrite(&ppp, sizeof(bilets), 1, base1);
						fwrite(&bilets, sizeof(bilets), 1, base1);
						fl = 1;
					}
				}
			}
	}
	while(fl);
	fclose(base1);
}
Тоесть берётся 1ая строка и сравнивается со 2ой и перезаписывает..или как?
defol-777 вне форума Ответить с цитированием
Старый 18.09.2009, 19:17   #2
defol-777
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 30
По умолчанию

хотя бы на словах чо для чего нужно
defol-777 вне форума Ответить с цитированием
Старый 18.09.2009, 20:02   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Строки здесь не сравниваются. Если я правильно понял, то в файле записаны данные в виде структур kass. У этой структуры есть член sellbillet(видимо интегрального типа). Так вот, берётся первый такой элемент, затем второй, сравнивают у них член sellbillet, в случае, если у 1-го больше, то они меняются местами, после чего берутся второй и третий элементы и т.д.
netrino вне форума Ответить с цитированием
Старый 18.09.2009, 20:04   #4
defol-777
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 30
По умолчанию

всмысле меняются?

Вот например есть 1ая строка её мы считываем...
берёт 2ую строку её мы тоже считывае...затем сравниваем...
если 2ая строка больше по параметру 1ой то что дальше?...первая удаляется а на её место в 2ая строчка записывается?...или как вообще?...
можно поподробнее

Последний раз редактировалось Stilet; 29.09.2009 в 11:48.
defol-777 вне форума Ответить с цитированием
Старый 18.09.2009, 20:36   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну тут не совсем строки... Ну пусть, ладно. Да, мы считываем одну строку, за ней вторую, сравниваем их по sellbillet, если 1-я больше, то:
1. fseek(base1, i, SEEK_SET); // Устанавливаем указатель на место, с которой начинается первая строка.
2. fwrite(&ppp, sizeof(bilets), 1, base1); // Записываем на место 1-й, 2-ю строку.
3. fwrite(&bilets, sizeof(bilets), 1, base1); // Записываем 1-ю, на место 2-й строки.
И так поочередно со всеми строками
netrino вне форума Ответить с цитированием
Старый 18.09.2009, 20:56   #6
defol-777
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 30
По умолчанию

ааа спасибо netrino.....вроде до пёрло!!!!!
defol-777 вне форума Ответить с цитированием
Старый 22.09.2009, 20:32   #7
joka87
Новичок
Джуниор
 
Регистрация: 22.09.2009
Сообщений: 1
По умолчанию

netrino
а что обозначает fl=0
joka87 вне форума Ответить с цитированием
Старый 22.09.2009, 21:39   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от joka87 Посмотреть сообщение
netrino
а что обозначает fl=0
fl в данном случае является флагом перестановки. Цикл будет выполнятся до тех пор, пока не будет сделано ни одной перестановки(то есть массив будет полностью отсортирован)
netrino вне форума Ответить с цитированием
Старый 29.09.2009, 11:42   #9
defol-777
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 30
По умолчанию

netrino посмотри личку!)
defol-777 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
игра домино.код уже есть! помогите найти ошибку! kitty_girl Помощь студентам 3 24.09.2014 12:02
Помогите разобраться в реализации поразрядной сортировки(код внутри) CooCkoo Помощь студентам 0 15.06.2009 23:52
Есть код программы на с++. Нужно обьяснение Alex1991 Помощь студентам 1 16.03.2009 14:37
Помогите разобраться в файле Proton-x Microsoft Office Excel 2 27.11.2008 22:27
Помогите с компиляцией игры, код есть (Delphi 4) Дилетант Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.05.2007 20:57