Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ чтение из файла последовательного доступа(С++)

Автор: Наталя 20.07.2006 18:23

Есть файл в котором записаны позиции на которых в матрице стоят единицы (матрица состоит из 0 и 1),это выглядит примерно так:23 45 ;56 34 ;67 87 ; и т. д.
Нужно сделать из этого матрицу. Размер матрицы фиксированный(233).
Помогите, пожалуйста.

Автор: volvo 20.07.2006 18:42

Делай что-то такое:

#include <iostream.h>
#include <fstream.h>


class Pos {

public:
Pos(): x(0), y(0) {
}

int x, y;

};

istream& operator >> (istream &is, Pos &p) {
char ch;

is >> p.x >> p.y >> ch;

return is;
};

int main() {
int arr[100][100] = {0}; // Здесь задай нужную тебе размерность

ifstream in_file("pos.txt", ios :: in);

Pos p;
while( !in_file.eof() ) {
in_file >> p;
arr[p.x][p.y] = 1; // Вот тут и устанавливается 1-ца там, где нужно...
}
in_file.close();
return 0;

}

Автор: RebIonok 20.07.2006 18:52

А если без классов? Можно ведь give_rose.gif ...

И конечно огромное спасибо!!!

Автор: RebIonok 20.07.2006 19:20

тут еще в чем прикол что если метрица например arr[i][j], то в файле записаны только позиции j,а i дожно свитаться точками с запятой.
Я извиняюсь за не корректно поставленную задачу.

Автор: volvo 20.07.2006 19:26

Цитата(RebIonok @ 20.07.2006 14:52)
А если без классов? Можно ведь

Можно, конечно... Только когда я вижу, что требуется написать программу на C++, то естественно, я пользуюсь классами...

А насчет исправления задания - непонятно... Если задана матрица a[i][j], то для того, чтобы проставить 1-цы, нужно получить 2 числа... Приведенный пример файла как раз и рассчитан на двумерную матрицу, и я именно для двумерной и сделал...

Автор: RebIonok 20.07.2006 19:49

Цитата(volvo @ 20.07.2006 15:26) *

А насчет исправления задания - непонятно... Если задана матрица a[i][j], то для того, чтобы проставить 1-цы, нужно получить 2 числа...

Так и есть, в a[i][j], i-счетчик и нарастает при каждом знаке ";", а то что между ";" - это j. Всегда в первой стоке этой матрицы одна единица, а в остальных по две.

Автор: volvo 20.07.2006 20:58

Допустим, файл содержит ТОЛЬКО вот это:

Цитата
23 45 ;56 34 ;67 87 ;


Приведи координаты всех единиц в матрице (в виде a[2][3] = 1, a[3][4] = 1 ...]), и сколько их всего... МЕЖДУ точками с запятой есть по ДВА числа - какое из них определяет координату J ???

Автор: RebIonok 20.07.2006 21:17

Вот так оно запишется в матрицу:
a[0][23]=1
a[0][45]=1
a[1][56]=1
a[1][34]=1
a[2][67]=1
a[2][87]=1

Автор: volvo 20.07.2006 21:24

Теперь ясно smile.gif Тогда попробуй вот это:

#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>


int main() {
int arr[100][100] = {0};
int i = 0, j;

ifstream in_file("pos.txt", ios :: in);

char inBuf[1024], *delimit = " ";

while( !in_file.eof() ) {

in_file.getline(inBuf, 1024, ';');
char *p = strtok(inBuf, delimit);
while(p) {

j = atoi(p);
p = strtok(0, delimit);

arr[i][j] = 1; // Запись в матрицу единицы

}
i += 1;

}
in_file.close();
return 0;

}


Как ты и просила - без классов, но одно НО... Весь файл должен быть записан в одну строку, без символов перевода строки ("\n")... Если такие символы есть, то надо еще немного доработать программу...

Автор: RebIonok 20.07.2006 22:23

Все работает!!! Спасибо...