Я уже практически все сама написала,помогите пожалуйста с файлами...

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Marishka nillya
Сообщения: 4
Зарегистрирован: 28 сен 2009, 13:38

Задача была с матрицами и все шло хорошо,пока передо мной не встали следующие задачи:

Предыдущая задача должна иметь операторы ввода-вывода в файл.
Схема работы задачи:
1. если файл базы не найден, то программа создаёт файл новый с различными матрицами (размер у каждой матрицы храниться в файле перед значениями матрицы),
2. ввод матриц осуществлять в диалоговом режиме (хотите ввести ещё матрицу? Да/Нет) )
3. если файл найден, то матрицы считываются из файла, пока не достижим символ EOF.
4. Результат чтения из файла выводится на экран.


И я бы все сама сделала,но препод не хочет объяснять тему с файлами,тк обиделась на группу...не знаю что делать:( Help me anybody!

Вот моя программа,которая уже есть...

Код: Выделить всё

#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>


class mat
{private:
 int **mas;
 int n, m;
public:
	mat ();
	mat(int N,int M);
	mat(mat & obj);
	~mat();

    void random();
    void vivod();

    mat operator + (const mat & A);
    mat operator = (mat A);
    mat operator * (int c);

    friend mat operator * (int c, mat A);
    friend ostream & operator <<(ostream & out, mat A);
    friend istream & operator >>(istream & in, mat & A);


};


mat::mat ()
{ int i;
  cout<<"Vvedite razmernost matrici1:\n";
  cin>>n>>m;

  mas=new int*[n];
    for (i=0; i<n; i++) 
	{
		mas[i]=new int[m];
	}
}


mat::mat(int N,int M)
{int i;
  n=N;
  m=M;
  mas=new int*[n];
    for (i=0; i<n; i++) 
	{
		mas[i]=new int[m];
	}
}


mat::mat(mat &obj)
{int i, j;

n=obj.n;
m=obj.m;

mas=new int*[n];
for(i=0;i<n;i++)
{
	mas[i]=new int[m];
}

for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
	mas[i][j]=obj.mas[i][j];
}
}
}


mat::~mat()
{int i;
for(i=n-1;i>=0;i--)
{
	delete[]mas[i];
    mas[i]=0;
}
delete[]mas;
mas=0;
}


void mat::random()
{	
 int i,j;
 for (i=0;i<n;i++)
 
  for (j=0;j<m;j++)
  {
	mas[i][j]=rand()%201-100;
  }
}


void mat::vivod() 
{ 
int i,j;

  for (i=0; i<n; i++) 
  {
    for (j=0; j<m; j++) 
	{
     cout<<mas[i][j]<<"\t";
	}
    cout<<endl;
  }
}


ostream & operator <<(ostream & out, mat A)
{
		for (int i=0; i<A.n; i++)
	{
	for (int j=0; j<A.m; j++)
	out<<A.mas[i][j]<<"\t";
	out<<endl;
	}
  out<<endl;
	
return out;
}



istream & operator >>(istream & in, mat & A)
{
 for (int i=0; i<A.n; i++)
   for (int j=0; j<A.m; j++)
     in>>A.mas[i][j];
 return in;
}


mat mat ::operator + (const mat & A)

{ 
  int minn, minm;
  if (A.n<=n) minn=A.n;
  else minn=n;
  if (A.m<=m) minm=A.m;
  else minm=m;
  mat sum(minn, minm);
  { int i,j;
    for (i = 0; i < sum.n; i++ )
     for (j=0; j<sum.m; j++ )
      sum.mas[i][j]=mas[i][j]+A.mas[i][j];
   return sum;
  }

}


mat mat::operator = (mat A)
{int i,j;
  for (i=n-1; 0<=i; i--)
  { 
   delete [] mas[i];
   mas[i]=0;
  }
   delete []mas;
   mas=0;


	n=A.n;
    m=A.m;

    mas = new int* [n];
	for ( i=0;i<n;i++) 
		mas[i]=new int[m];
	
	for (i=0; i<n; i++)
	for (j=0; j<m; j++)
		mas[i][j]=A.mas[i][j];

return *this;
}

mat mat::operator * (int c)
{	mat A(n,m);

		for (int i=0; i<n; i++)
		for (int j=0; j<m; j++)
			A.mas[i][j]=mas[i][j]*c;
		return A;
}

mat operator*(int c, mat A)
{
  return (A*c);
}



void main(void)
{ int k;
  srand((unsigned) time(NULL));

  mat A,B,C(3,3);

  A.random();
  cout<<"Matrica A=\n";
  cout<<A<<endl;

  B.random();
  cout<<"Matrica B=\n";
  cout<<B<<endl;

  C=A+B;
  cout<<"C=A+B=\n";
  cout<<C<<endl;

  cout<<" Vvedite chislo na cotoroe nujno umnojit k=\n";
  cin>>k;
  C=C*k;
  cout<<"C*k=\n";
  cout<<C;
  }
заранее спасибо...:)
rangerx
Сообщения: 28
Зарегистрирован: 01 июл 2009, 10:30

Ну, а в чём собственно вопрос? )
препод не хочет объяснять тему с файлами
fstream
Marishka nillya
Сообщения: 4
Зарегистрирован: 28 сен 2009, 13:38

Ну она просто обиделась,что мы раньше с ленты ушли и сказала сами разбирайтесь...вот я и не могу разобраться с этими файлами...где объявлять переменную,куда функцию засунуть и как записывать и считывать размерности матриц,а потом и сами матрицы...куда их считывать... :confused: Я искала в инете и в учебнике Либирти смотрела,не понимаю...
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Может у кого-нибудь есть пример программы с использованием файлов или кто-нибудь поможет составить этот кусок...помогите непонятливой девушке! :)
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Marishka nillya писал(а): Может у кого-нибудь есть пример программы с использованием файлов или кто-нибудь поможет составить этот кусок...помогите непонятливой девушке! :)
Говори что конкретно надо сделать. Как уже тут писалось std::fstream рулит.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Пример из ссылки выше:

Код: Выделить всё

// using fstream constructors.
#include <iostream>
#include <fstream>
using namespace std;

int main () {

  fstream filestr ("test.txt", fstream::in | fstream: :o ut);

  // >> i/o operations here <<

  filestr.close();

  return 0;
}
То есть подход крайней прост. Создаёшь объект типа fstream, указывая имя файла и режим (чтение, запись и т.д.), затем работает с ним, как с обычными потоками, с которым ты работать уже умеешь (например так читаем переменную: filestr >> i), затем в конце не забудь вызвать метод close, который закроет файл и освободит его хэндл.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Marishka nillya
Сообщения: 4
Зарегистрирован: 28 сен 2009, 13:38

Спасибо! :) ))все оказывается не так страшно.Сейчас попробую сделать и завтра понесу на защиту! :cool:
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Airhand писал(а):Говори что конкретно надо сделать. Как уже тут писалось std::fstream рулит.
А сделать надо функцию,которая проверяет есть ли файл,если нет,то он создается и туда записываются матрицы,а если есть,то из него выводятся ранее записанные матрицы.
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Marishka nillya писал(а): А сделать надо функцию,которая проверяет есть ли файл,если нет,то он создается и туда записываются матрицы,а если есть,то из него выводятся ранее записанные матрицы.
А тебе Romeo уже всё написал: надо всего лишь считать файл если он есть, и написать новый в противном случае. Ты что думаешь это кто-то сделает за тебя ?
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Marishka nillya
Сообщения: 4
Зарегистрирован: 28 сен 2009, 13:38

Я все уже сделала! :) И защитила!
Ответить