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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 16:05   #1
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию Моя сортировка. внутри ошибка, найти не могу

Код:
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
using namespace std;


template <class Class> 
class List:public fstream{

public: 
	Class* Begin;
	string Name;

	List():fstream(){
		Begin=0;
		cout<<"What file?\nPrint file name: ";
		cin>>Name;
		Name+='.';
		Name+='d';
		Name+='a';
		Name+='t';

		ifstream ifst;
		ifst.open(Name.c_str());
		if (ifst.is_open()){cout<<"File has been\nYou open file: "<<Name<<"\n";}
		else {cout<<"Creatin...\nYou creat file: "<<Name<<"\n"; int o=0; ofstream ofst(Name.c_str()); ofst.write(reinterpret_cast<char*>(&o), sizeof(int)); ofst.close();}
		open(Name.c_str(), fstream::in | fstream::out | fstream::binary);
		ifst.close();
		
	};

	void Show(){
		Class a;
		int next, Num;
		Num=Number();
		cout<<"Number of items: "<<Num<<"\n";
		seekg(0, ios::beg);
		read(reinterpret_cast<char*>(&next), sizeof(int));
		for(;next!=0;){
			seekg(next, ios::beg);
			read(reinterpret_cast<char*>(&a),sizeof(Class));
			read(reinterpret_cast<char*>(&next), sizeof(int));
			cout<<a<<" ";
		}
		cout<<"\n";
		seekg(0, ios::beg);
	};

	int Number(){
        int Length, Num;
		seekg(0, ios::end);
		Length=tellg();
		seekg(0, ios::beg);
		Num=(Length-4)/(sizeof(int)+sizeof(Class));
		return Num;
	};

	void GoTo(int Number){ //пропускаю Number указателей и Number елементов, оказываюсь в начале указателя на Number+1-ый элемент
		int next;
		seekg(0, ios::beg);
		for(int i=0; i<Number; i++){
			read(reinterpret_cast<char*>(&next), sizeof(int));
			seekg(next+sizeof(Class), ios::beg);
		}
	};

	void Sort(){ //сама сортировка
		seekg(0, ios::beg);
		Class min, a;
		int Num, NumberSort=0, next, arrow_min, arrow_change, arrow_min_next; //файловые указатели
		int Parrow_min, Parrow_change, Parrow_min_next, Pnext; //места записи файловых указателей
		Num=Number();
		/*for(int i=0; i<Num; i++){
			GoTo(NumberSort);*/
			Parrow_min=tellg();
			Parrow_change=Parrow_min;
			read(reinterpret_cast<char*>(&next),sizeof(int));
			arrow_min=next;
			arrow_change=arrow_min;
			read(reinterpret_cast<char*>(&min),sizeof(Class));
			Parrow_min_next=tellg();
			read(reinterpret_cast<char*>(&next),sizeof(int));
			arrow_min_next=next;
			seekg(-4, ios::cur);
			for(;next!=0;){
				Pnext=tellg();
				read(reinterpret_cast<char*>(&next),sizeof(int));
				read(reinterpret_cast<char*>(&a),sizeof(Class));
				if(min>a){
					min=a;
					arrow_min=next;
					Parrow_min=Pnext;
					Parrow_min_next=tellg();
					read(reinterpret_cast<char*>(&arrow_min_next), sizeof(int));
					seekg(-4, ios::cur);
				}
			}
			if(arrow_change!=arrow_min){
				seekg(Parrow_change, ios::beg); write(reinterpret_cast<char*>(&arrow_min), sizeof(int));
				seekg(Parrow_min, ios::beg); write(reinterpret_cast<char*>(&arrow_min_next), sizeof(int));
				seekg(Parrow_min_next, ios::beg); write(reinterpret_cast<char*>(&arrow_change), sizeof(int));
			}
			NumberSort=NumberSort+1;
		//}
	};

	void GoToEnd(){
		int next;
		seekg(0, ios::beg);
		for(read(reinterpret_cast<char*>(&next), sizeof(int)); next!=0; read(reinterpret_cast<char*>(&next), sizeof(int))){
			seekg(next+sizeof(Class), ios::beg);		
		}
		seekg(-4, ios::cur);
	};

	void Download(){
		int arrow, Num;
		Class a;
		
		Num=Number();
		cout<<"What is the next item in the list?: ";	
		cin>>a;
		GoToEnd();
		arrow=(Num+1)*sizeof(int)+Num*sizeof(Class);
		write(reinterpret_cast<char*>(&arrow), sizeof(int));
		write(reinterpret_cast<char*>(&a),sizeof(Class));
		arrow=0;
		write(reinterpret_cast<char*>(&arrow), sizeof(int));
	};
};
сортирует бинарный файл с загрузкой в оперативную память не более 2х элементов. меняет не элементы местами а файловые указатели на них.

я скинул с закоментированной частью, так что это не совсем сортировка а просто функция которая на первое место ставит минимальный элемент.

Может кто потратит немного своего времени чтобы мне помочь?

Три часа бесплодно хожу отладчиком не могу найти ошибку
pinkiller вне форума
Старый 10.01.2012, 18:41   #2
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

Справился=Р
pinkiller вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибка в коде массива. Hoochara Microsoft Office Excel 3 05.09.2011 11:32
Массивы . Сортировка методом вставки. Не могу найти ошибку Azzzza Общие вопросы C/C++ 0 05.05.2011 18:31
Нахождение слов-анаграмм, Ошибка выдается. Задание внутри. Код внутри. TYMON Общие вопросы .NET 2 22.11.2010 21:07
ошибка в коде. не могу найти Giffon Общие вопросы C/C++ 3 30.11.2009 15:24
Не могу найти макрос, ошибка со шрифтами и поиск! Ilya87 Microsoft Office Excel 15 14.01.2009 05:43