IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> чтение из файла последовательного доступа(С++)
сообщение
Сообщение #1


Гость






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


Гость






Делай что-то такое:
#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;

}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Наташа

Репутация: -  0  +


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

И конечно огромное спасибо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Наташа

Репутация: -  0  +


тут еще в чем прикол что если метрица например arr[i][j], то в файле записаны только позиции j,а i дожно свитаться точками с запятой.
Я извиняюсь за не корректно поставленную задачу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






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

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

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





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Наташа

Репутация: -  0  +


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

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

Так и есть, в a[i][j], i-счетчик и нарастает при каждом знаке ";", а то что между ";" - это j. Всегда в первой стоке этой матрицы одна единица, а в остальных по две.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Допустим, файл содержит ТОЛЬКО вот это:
Цитата
23 45 ;56 34 ;67 87 ;


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





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Наташа

Репутация: -  0  +


Вот так оно запишется в матрицу:
a[0][23]=1
a[0][45]=1
a[1][56]=1
a[1][34]=1
a[2][67]=1
a[2][87]=1
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Теперь ясно 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")... Если такие символы есть, то надо еще немного доработать программу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Наташа

Репутация: -  0  +


Все работает!!! Спасибо...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 14:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name