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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2010, 19:46   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию проблемы с открытием файла

Добрый вечер дана задача реализации длинной вещественной арифметике использую пергрузку. Возникает ошибка при чтении второго числа, что-то с открытием файла, посмотрите пожалуйста вот прога
Код:
/*
		реализация длинной вещественной арифметики
*/

#include "stdafx.h"
#include "cstring"
#include "iostream"
#include "fstream"
#include "math.h"

using namespace std;

//===============================================================================
//              описание глобальных данных
//===============================================================================
	ifstream in;	//файловая переменная для ввода
	ofstream out;	//файловая переменная для вывода
	const int count = 5;  //максимальная разрядность числа


class longfloat	//класс длинное вещественное
{    
    public:
        int chislo[5];   //число
        bool znak;  //знак true=+, false=-
        int por;    //порядок числа
        int len; //длина числа
        friend istream& operator>>(istream& file, longfloat& a); //переопределение ввода
        friend ostream& operator<<(ostream& file, longfloat& a); //переопределение вывода
};


istream& operator >> (istream& file,longfloat& a)
{
//=============================================================================
//		описание данных для ввода
//=============================================================================
    char sim;   //текущий символ
    bool flag = true; //наличие знака

//=============================================================================
//		инициализация массива
//=============================================================================
    for(int i=0;i<count;i++)
        a.chislo[i] = 0;

	file>>sim;
//=============================================================================
//		проверка знака
//=============================================================================    
    if(sim == '-')	//если число отрицательное
        a.znak = false;
    else if(sim == '+')	//если число положительное
        a.znak = true;
    else	//если знак не указан считаем число положительным
	{
        a.znak = true;
        flag = false;	//знака нет снова читаем этот символ
    }

	if(flag)	
		file>>sim;	//если знак был читаем следующий символ
    else
		flag = true;	

//=============================================================================
//			обработка и ввод числа
//=============================================================================    
    a.por=0;
    a.len = 0;	
    while(!in.eof())
	{
//=============================================================================
//			целая часть (представлена в инвертированном ввиде)
//=============================================================================    
        int i = count-1;	
        while((sim != '.')&&(!in.eof()))	
		{
            a.por++;
            a.len++;
            a.chislo[i] = sim-48;	
            i--;
            file>>sim;
        }
        file>>sim;

//=============================================================================
//			дробная часть (представлена в инвертированном ввиде)
//=============================================================================    
        while(!in.eof())
		{
            a.len++;
            a.chislo[i] = sim-48;
            i--;
            file>>sim;            
        }
    }

//=============================================================================
//			проверка
//=============================================================================    
	for(int i=0;i<count;i++)
		std::cout<<a.chislo[i];
    
//=============================================================================
//			инвертирование обратно
//=============================================================================    
    int razn = count-a.len; //находим длину числа
    int tmp;    //вспомогательная переменнная для переворота
    int i=razn; //левая граница
    int j=count-1; //правая граница

    for(i,j;i<j;i++,j--)
	{
        tmp = a.chislo[i];
        a.chislo[i] = a.chislo[j];
        a.chislo[j] = tmp;
    }
//=============================================================================
//			проверка
//=============================================================================    
    std::cout<<"\n";
    for(int i=0;i<count;i++)
        std::cout<<a.chislo[i];
    return file;
}
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 09.04.2010, 19:46   #2
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

продолжение:
Код:
ostream& operator << (ostream& file,longfloat& a){
    int i = 0;
    if(a.znak){
        file<<'+';
    }
    else{
        file<<'-';
    }
    while(i<=count){
        while((a.chislo[i]==0)&&(a.chislo[i+1]!='.')&&(i<=count)){
            i++;
        }
        if((a.chislo[i]==0)&&(a.chislo[i+1]!='.')){
            file<<a.chislo[i];
        }
        while(i<(count-a.por-2)){
            file<<a.chislo[i];
            i++;
        }
        file<<'.';
        while(i<=count){
            file<<a.chislo[i];
            i++;
        }
    }

    return file;
}

void main()
{	
//=============================================================================
//			описание данных
//=============================================================================
	char operation;	//операция которую нужно будет произвести
    longfloat p1,p2;	//аргументы
	longfloat res;

//=============================================================================
//			проверка
//=============================================================================
	in.open("input1.txt");
	in>>p1;
	in.close;
		
	std::cout<<"\n";
	in.open("input2.txt");
	in>>p2;
	in.close();

	getchar();
}
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перед открытием файла программа должна спрашивать адрес файла Belii09878 Помощь студентам 1 07.03.2010 16:37
меню с открытием текстового файла seven123 Паскаль, Turbo Pascal, PascalABC.NET 2 24.11.2009 11:33
Проблема с открытием файла (C++) Скарам Помощь студентам 6 09.09.2009 15:31
проблема с открытием прикрепленного файла с расшаренной папки opel.omega Общие вопросы Delphi 1 29.01.2009 12:45
VSL Form, проблемы с открытием si13 Общие вопросы Delphi 1 03.07.2008 05:56