Считать матрицу из файла
Считать матрицу из файла
Такой вопрос, как считать матрицу из файла, если в первой строке записана размерность матрицы, а на.

Как считать матрицу из файла?
Необходимо считать квадратную матрицу неизвестного размера из файла. При этом нужно, чтобы память.

Как считать матрицу из текстового файла
привет народ, помогите. Как считать в С из текстового файла матрицу при том что я сам указываю.

Считать матрицу из файла и определить в ней количество строк и столбцов
Как сделать, чтоб программа считывала любой двумерный массив из файла и вычисляла сколько линий и.
6277 / 3562 / 898
Регистрация: 28.10.2010
Сообщений: 5,926

Сообщение было отмечено Транзистор как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#include int main() { const int rows = 2; const int cols = 6; int matrix[rows][cols]; int i, j; FILE *out; FILE *file = fopen("a.txt", "r"); out = fopen("b.txt", "w"); for (i = 0; i rows && !feof(file) && !ferror(file); i++) { for (j = 0; j cols && !feof(file) && !ferror(file); j++) { if (!fscanf(file, "%d", &matrix[i][j])) { fprintf(stderr, "Error reading file"); } fprintf(out, "%d ", matrix[i][j]); } fputc('\n', out); } return fclose(file) && fclose(out); }
87844 / 49110 / 22898
Как считать матрицу из файла си
код на си
вроде,сколько смотрела по форумам, код правильный
грешу на ввод размерности с клавиатуры
выводит матрицу заполненную нулями
подскажите,пожалуйста, в чем проблема
printf("Введите количество строк матрицы А "); scanf("%d",&m); printf("Введите количество столбцов матрицы А "); scanf("%d",&n); float A[m][n]; FILE *fp; fp=fopen("matrixA.txt", "rt"); for (i=0;i > printf("\nМатрица А \n"); for (i=0;i printf ("\n"); > fclose(fp);
Цифровой кот
Регистрация: 29.08.2014
Сообщений: 7,656
Это чо? Выделение памяти под динамический массив?
float A[m][n];
И чо, работает?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана.
Регистрация: 23.06.2015
Сообщений: 9
Файл в одной папке с cpp файлом.
Работает, при вводе с клавиатуры матриц.
Цифровой кот
Регистрация: 29.08.2014
Сообщений: 7,656
| Файл в одной папке с cpp файлом. |
Издеваешься? ПОСМОТРЕТЬ ФАЙЛ ДАЙ!
у меня телепатор отключен за неуплату.
| Работает, при вводе с клавиатуры матриц. |
да ну нафиг. покажи код и вывод массива после ввода с клавы.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана.
Регистрация: 23.06.2015
Сообщений: 9
Сообщение от min@y™
Издеваешься? ПОСМОТРЕТЬ ФАЙЛ ДАЙ!
у меня телепатор отключен за неуплату.
да ну нафиг. покажи код и вывод массива после ввода с клавы.
Я не издеваюсь. И, простите, можно помягче. Если я не правильно поняла Ваш вопрос, это не повод для подобного рода сарказма.
файл содержит следующее
1.000000 2.000000 3.000000
2.000000 3.000000 1.000000
3.000000 2.000000 1.000000
4.000000 0.500000 -3.000000
вот код с вводом с клавиатуры
int i,j; int m,n; printf("Введите количество строк матрицы А "); scanf("%d",&m); printf("Введите количество столбцов матрицы А "); scanf("%d",&n); float A[m][n]; printf("Bведите матрицу %d x %d \n",m,n); for (i=0; i > printf("\nМатрица А\n"); for(i=0; i printf("\n"); > >
Считывание матрицы из файла на C++
Пример кода на C++ с считыванием двумерного массива из целых чисел, разделенных пробелом, на C++.
Для того, чтобы считать из простого текстового файла матрицу, можно пойти несколькими путями. В примере ниже рассмотрен вариант, когда мы используем для хранения в программе классический динамический двумерный массив, а в файле не хранятся размеры матрицы в отдельной строке.
Принцип работы такой:
- Вначале обходим весь файл и считыванием через поток все целые числа. Тем самым узнаем число чисел в матрице.
- Затем посчитаем число пробелов до первого знака перевода на новую строку. Значит, число столбцов будет равно числу пробелов +1.
- Теперь мы знаем размеры матрицы и можем создать массив, и пройти по файлу, считывая данные в матрицу.
Программа является обучающим примером и содержит ряд недостатков, таких как:
- Можно сократить обход файла до одного, если, например, использовать списки.
- Считается, что между числами есть один пробел, а в конце строки пробела нет. А если будут лишние пробелы?
- Предполагаем, что в других строчках число чисел такое же, как и в первой.
Вот код самой программы:
#include #include using namespace std; int main() setlocale(LC_ALL, "RUSSIAN"); //Создаем файловый поток и связываем его с файлом ifstream in("input.txt"); if (in.is_open()) //Если открытие файла прошло успешно //Вначале посчитаем сколько чисел в файле int count = 0;// число чисел в файле int temp;//Временная переменная while (!in.eof())// пробегаем пока не встретим конец файла eof in >> temp;//в пустоту считываем из файла числа count++;// увеличиваем счетчик числа чисел > //Число чисел посчитано, теперь нам нужно понять сколько //чисел в одной строке //Для этого посчитаем число пробелов до знака перевода на новую строку //Вначале переведем каретку в потоке в начало файла in.seekg(0, ios::beg); in.clear(); //Число пробелов в первой строчке вначале равно 0 int count_space = 0; char symbol; while (!in.eof())//на всякий случай цикл ограничиваем концом файла //теперь нам нужно считывать не числа, а посимвольно считывать данные in.get(symbol);//считали текущий символ if (symbol == ' ') count_space++;//Если это пробел, то число пробелов увеличиваем if (symbol == '\n') break;//Если дошли до конца строки, то выходим из цикла > //cout //Опять переходим в потоке в начало файла in.seekg(0, ios::beg); in.clear(); //Теперь мы знаем сколько чисел в файле и сколько пробелов в первой строке. //Теперь можем считать матрицу. int n = count / (count_space + 1);//число строк int m = count_space + 1;//число столбцов на единицу больше числа пробелов double **x; x = new double*[n]; for (int i = 0; in; i++) x[i] = new double[m]; //Считаем матрицу из файла for (int i = 0; i n; i++) for (int j = 0; j m; j++) in >> x[i][j]; //Выведем матрицу for (int i = 0; i n; i++) for (int j = 0; j m; j++) cout <x[i][j] <"\t"; cout <"\n"; > for (int i = 0; in; i++) delete[] x[i]; delete[] x; in.close();//под конец закроем файла > else //Если открытие файла прошло не успешно cout <"Файл не найден."; > system("pause"); return 0; >
Если у нас такой файл input.txt :
3 5 69 1 12 3 48 69 2
То получим вот такое при запуске программы:
Считать матрицу из файла
Как считать размерность матрицы и затем саму матрицу из файла?
Добавлено через 52 минуты 53 секунды
HELP.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
считать матрицу с файла
Матрица имеет такой вид, плз помогите написать код считывания с файла! заранее спасибо и файл я.

Считать матрицу из файла
код на си вроде,сколько смотрела по форумам, код правильный грешу на ввод размерности с.
Считать матрицу из текстового файла
в текстовом файле дана матрица 4 9 5 5 9 2 9 2 9 как считать этот двумерный массив и вывести.
Считать данные в матрицу из файла
(С/С++)Как считать матрицу из файла и записать в массив. Файл содержит такой вид: 2 3 23 -4 0 -3.
Регистрация: 20.04.2009
Сообщений: 32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include void main(void) { int N=0; //Razmernost int a[50][50];// Тут укажи число явно большее чем размерность на входе, ну например у меня 50- max строк и столбцов:) это никак не повлияет на работу, ты ведь будешь работать со строками\столбцами FILE *in=fopen("file.in", "rt");//файл чтения FILE *out=fopen("file.out", "wt");//файл записи fscanf(in,"%d",&N); //Считали N for(i=0;iN;i++) { for(j=0;jN;j++) { fscanf(in,"%d",&a[i][j]); } } //. чета чота for(i=0;iN;i++)//Записываем в файл { for(j=0;jN;j++) { fprintf(out,"%d",a[i][j]); } } }
При этом представляю файл вида:
3
1 2 3
4 5 6
7 8 9
Добавлено через 7 минут 45 секунд
чуть не забыл,
fclose(in); fclose(out);
это написать перед последней >
Регистрация: 27.05.2010
Сообщений: 9
Сообщение от marty0701 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include void main(void) { int N=0; //Razmernost int a[50][50];// Тут укажи число явно большее чем размерность на входе, ну например у меня 50- max строк и столбцов:) это никак не повлияет на работу, ты ведь будешь работать со строками\столбцами FILE *in=fopen("file.in", "rt");//файл чтения FILE *out=fopen("file.out", "wt");//файл записи fscanf(in,"%d",&N); //Считали N for(i=0;iN;i++) { for(j=0;jN;j++) { fscanf(in,"%d",&a[i][j]); } } //. чета чота for(i=0;iN;i++)//Записываем в файл { for(j=0;jN;j++) { fprintf(out,"%d",a[i][j]); } } }
При этом представляю файл вида:
3
1 2 3
4 5 6
7 8 9
Добавлено через 7 минут 45 секунд
чуть не забыл,
fclose(in); fclose(out);
это написать перед последней >
Отлично! Вроде работает. У меня схожая проблема, но с файла вроде читается, да вот только дальше данные не хотят идти((
Дело в том, что массивы я использую статические, а везде где не искал в основном описывают ввод/вывод динамических массивов. Дык вот я вроде смазговал что бы вводился массив статически, и программа файл вроде читает и на экран выводит, а вот дальше мой массив a[i][j] не перехватывается((
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
#include #include #include #include using namespace std; void main() { setlocale(0,"Russian"); double a[50][51], x[50], t; int k, m, n; cout"\n\tЗдравствуйте, Вас приветствует программа решения СЛАУ. \n\tПожалуйста, следуейте вспомогательными подсказками =) \n\n\tДля продолжения нажмите ENTER. "; getch(); system("cls"); int key; cout"Для загрузки данных из файла нажмите 1\nДля ввода матрицы нажмите 2"endl; cin>>key; if (key==1) { int n=3, m=4; ifstream Proga("file.txt"); // double **a=new double *[n]; for (int i = 0; i n; ++i) for (int j = 0; j m; ++j) Proga>>a[i][j]; for (int i = 0; i n; ++i) { for (int j = 0; j m; ++j) //cout {printf("%6.2f\t", a[i][j]);} printf("\n"); } } else { cout"\n\tВведите размерность Вашей матрицы СЛАУ: "; cin>>n; m=n+1; //a[0][0]= 1; a[0][1]= 1; a[0][2]= 1; a[0][3]= 2; //a[1][0]= 2; a[1][1]=2; a[1][2]=2; a[1][3]= 3; //a[2][0]= 1; a[2][1]= -1; a[2][2]= 2; a[2][3]= 5; system("cls"); cout"Введите значения матрицы размерностью: "nendl; cout"Коэффициенты следует вводить построчно, как они стоят в заданной СЛАУ!"endl; for (int i = 0; i n; ++i) for (int j = 0; j m; ++j) cin>> a[i][j] ; } // проверка на бесконечное множество решений for (int j = 0; j n; j++) if (a[j][j] == 0) { k = j; while ((a[k+1][j] == 0) && (k n)) k++; if (a[k+1][j] != 0) for (int i = 0; i m; i++) { t = a[j][i]; a[j][i] = a[k+1][i]; a[k+1][i] = t; } else { printf("СЛАУ имеет множество решений"); _getch(); exit(1); } } //проверка на отсутсвие решений СЛАУ for (k = 0; k n - 1; k++) for (int j = k + 1; j n; j++) { if (a[k][k] !=0) { t = a[j][k] / a[k][k]; for (int i = 0; i n + 1; i++) a[j][i] = a[k][i] * t - a[j][i]; } else { printf("СЛАУ не имеет решений\n"); _getch(); exit(1); } } system("pause"); system("cls"); //основной цикл построение диоганальной матрицы - прямой проход обнуление(исключение) элементов ниже главной диагонали int q; cout"Вы хотите проследить ход решения данного СЛАУ?\n\t1 - да\n\t2 - нет"endl; cin>>q; for(k = 0; kn; k++) { int ch_col = k; //search for(int j = k; jm-1; j++) // ищем главный элемент в строке k if(abs(a[k][j])>abs(a[k][ch_col])) ch_col = j; double bufff; for(int i = 0; in; i++)// меняем местами столбцы где главный найденный элемент и столбец которому принадлежит диагональный элемент { bufff = a[i][k]; a[i][k] = a[i][ch_col]; a[i][ch_col] = bufff; } for(int e = k+1; en; e++)//вычитаем из строк ниже катой строки коэф.. { double kof = a[e][k]/a[k][k]; for(int l = 0; lm; l++) a[e][l] = a[e][l] - a[k][l]*kof; } if (q==1)///смотрим или не смотрим ход решения СЛАУ { for (int j = 0; j n; j++) { for (int i = 0; i n + 1; i++) printf("%6.2f\t", a[j][i]); printf("\n"); }} else cout endl; cout endl; } cout"Ваша матрица приведена к диагональному виду:\n"endl; for (int j = 0; j n; j++)// вывод диагональной матрицы { for (int i = 0; i n + 1; i++) {printf("%6.2f\t", a[j][i]);} printf("\n"); } for (int j = n - 1 ; j >= 0; j--) // вычисление корней { t = a[j][n]; for (int i = j + 1; i n; i++) t= t - a[j][i] * x[i]; x[j] = t / a[j][j]; } printf("\n Корни СЛАУ:\n\n"); for (int i = 0; i n; i++) printf("x%d = %6.2f\n", i, x[i]); _getch(); }
Да! В файлике у меня вот такая ересь:
1 2 4 5
7 8 9 8
6 5 3 2
от балды. Программа их все равно решает если вводить с клавиатуры