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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 16:03   #1
Blad47
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 93
По умолчанию Файловый ввод с использованием потоков

Всем привет. У меня есть файл m1.txt , где зранятся элементы двумерного массива (матрицы). Подскажите, как считать эти элементы из файла , чтобы дальше работать с этой матрицей?
Необходимо работать с классом fstream.

ifstream m1;
m1.open("m1.txt",ios::in);

я всего лишь открыл файл и создал поток, как быть дальше?
Спасибо.
Blad47 вне форума Ответить с цитированием
Старый 21.10.2010, 16:43   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну теперь читайте с него данные, в каком они формате у вас записаны?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.10.2010, 18:10   #3
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Если в файле в тестовом виде хранятся элементы массива, то создаешь массив типа char и в него считываешь данные из файла
Код:
int len=//==размер файла
char *mass=new char[len];

in.read(mass,len);//==счтитать кусок файла in длинной len  в символьный массив mass
А потом выделяешь оттуда элементы массива
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 21.10.2010, 22:41   #4
Blad47
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 93
По умолчанию

у меня размер матрицы( там будут только квадратные массивы) произволен и может меняться. Элементы только численные.
Мне имено и не понятно как с файла стянуть все элементы...
Blad47 вне форума Ответить с цитированием
Старый 21.10.2010, 23:07   #5
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Если размер файла будет менятся, то я бы написал функцию возвращающую размер файла, например
Код:
unsigned long int FileSize(string name){
	
	ifstream in_file(name.c_str(),ios::in|ios::binary);      
	
	in_file.seekg(0,ios::end);  
	
             unsigned long int length=in_file.tellg()
   

            return length;
   
}
Она вернет размер файла.
Т.о размерность массива, в который ты будешь считывать данные будет известна.
Потом ты считываешь данные из файла в этот массив, затем я бы создал строку, которая бы хранила считанные данные
Код:
char *mass......
in.read(mass,len);
string data(mass);
А из нее бы выделял элементы массива и преобразовывал их в числа.
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 22.10.2010, 10:19   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Предполагая, что файл у нас текстовый, дам вам пример записи/чтения массива целых чисел.
Код:
int* array;
int n;
//...
void save(char* filename)
{
std::ofstream file(filename);
file << n << std::endl;
for (int i = 0; i < n; i++)
   file << array[i] << " ";
}
В результате получаем файл, к примеру, такого вида:
Код:
10
1 3 5 7 9 11 13 15 17 19
Чтение из файла:
Код:
void load(char* filename)
{
std::ifstream file(filename);
file >> n;
if (array)
   delete[] array;
array = new int[n];
for (int i = 0; i < n; i++)
   file >> array[i];
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 24.10.2010, 18:46   #7
Blad47
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 93
По умолчанию

Поясните пожалуйста часть кода

Код:
	m1.open("m1.txt",ios::in);
	m1 >> x;
    m1 >> y;
	if (x!=y) {cout<<"Матрица не квадратная, подсчет невозможен"; system("pause"); return;}
Не пойму как m1 >> x; и m1 >> y; считывают кол-во элементов по вертикали и горизонтали???
Blad47 вне форума Ответить с цитированием
Старый 24.10.2010, 18:56   #8
Xeonc
Форумчанин
 
Регистрация: 20.10.2010
Сообщений: 143
По умолчанию

никак, просто чтобы матрица была квадратной, надо чтобы количество столбцов было равно количеству строк. А если они не равны - то не важно какие у них значения, матрица квадратной уже не будет
451 -870-7(три)6. Выполняю работы на заказ, гарант честности - ВМ аттестат с 60+ БЛ без претензий
Xeonc вне форума Ответить с цитированием
Старый 24.10.2010, 19:24   #9
elja_1989
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 58
По умолчанию

какой-то бред)

придумай свою структуру, как ты будешь хранить свои матрицы и радуйся
допустим
1 2 3 4\n2 3 4 5\n

И тут необязательно кадратные матрицы, только валидацию количества элементов в строке сделать и всё... а если матрицы зарание квадратные то можно и в одну строку лепить, но ИМХО зачем? Другой вариант сделать что-то вроде сериализации твоего класса или чего-то там под названием Matrix в бинарный вид, и записть в файл, потом десериализация..
elja_1989 вне форума Ответить с цитированием
Старый 24.10.2010, 20:10   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Кстати а что с этой матрицей делать потом нужно?
Может и вправду не стоит в памяти организововать массив. а оперировать со считанным по ходу считывания?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файловый ввод-вывод Оля_1991 Помощь студентам 0 10.10.2010 14:12
Файловый ввод с++ Blad47 Помощь студентам 3 07.10.2010 17:05
Файловый ввод вывод GrihaI Общие вопросы C/C++ 4 31.05.2010 02:45
вычисления с использованием потоков Sparky Помощь студентам 0 19.02.2010 18:09
Синхронизация потоков с использованием именованых каналов _Денис Помощь студентам 0 09.01.2010 16:58