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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2011, 09:03   #1
Бинари
Пользователь
 
Регистрация: 23.09.2011
Сообщений: 17
По умолчанию [C++]Перемена местами записей в двоичном файле

1. Постановка задачи: В двоичном файле поменять местами записи под номерами i и j. Каждая запись содержит три числа типа float.

2. Код функции, которая меняет местами записи:
Код:
int Swap(char *BName, int i, int j)
{
	float x[NMAX], y[NMAX];

	FILE *bin;
	if ((bin = fopen(BName,"r+b")) == NULL)
	{
		cout << "Ошибка чтения бинарного файла";
		return 0;
	}

	if (fseek(bin, i, SEEK_SET) != 0)
	{
		cout << "Не существует записи под номером i";
		return 0;
	};

	if (fseek(bin, j, SEEK_SET) != 0)
	{
		cout << "Не существует записи под номером j";
		return 0;
	};

	fseek(bin,i, SEEK_SET);
	fread(x,3*sizeof(float),1,bin);

	fseek(bin,j, SEEK_SET);
	fread(y,3*sizeof(float),1,bin);
	fseek(bin, i, SEEK_SET);
	fwrite(y,3*sizeof(float),1,bin);
	fseek(bin, j, SEEK_SET);
	fwrite(x,3*sizeof(float),1,bin);

	fclose(bin);

	return 1;
};
3. В чём проблема: на скрине

Заранее спасибо за помошь.
Изображения
Тип файла: jpg irreg_prog.jpg (27.9 Кб, 146 просмотров)
Бинари вне форума Ответить с цитированием
Старый 23.09.2011, 09:45   #2
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Цитата:
Каждая запись содержит три числа
Следовательно для 2 записи указатель необходимо устанавливать в 6 позицию.
Код:
fseek(bin, i*3*sizeof(float), SEEK_SET)
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 23.09.2011, 19:55   #3
Бинари
Пользователь
 
Регистрация: 23.09.2011
Сообщений: 17
По умолчанию

Спасибо за ответ. Заработало. но пришлось подправить i на (i-1)
Ещё раз большое спасибо за помощь.
Бинари вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование записей в файле Neroaz Помощь студентам 9 12.04.2010 20:06
перемена местами элементов матрицы. so1o Общие вопросы C/C++ 1 18.11.2009 17:07
Хранение текста в двоичном файле Nitrino Общие вопросы C/C++ 63 04.06.2009 02:46
как поменять местами слова в файле? r-tem Общие вопросы C/C++ 6 01.12.2008 22:17
Как поменять строки в текстовом файле местами _ares_ Помощь студентам 8 13.11.2007 02:14