Как считать размерность матрицы из файла (определить n и m)?
С заданной размерностью я поняла как делать.
вот функция формирования. В мейне задаю н и м.
void form (float **A, int m, int n)
{ FILE *f;
f=fopen("C://Users//user//Desktop//pr1.txt","r");
while(!feof(f))
{for (int i=0;i<m;i++)
for (int j=0;j<n;j++)
{
fscanf(f,"%f",&A[i][j]);
}
fclose(f);
}
}
Другие языки программирования и технологии
Помогите пожалуйста. Язык Си работа с файлами
#include <stdio.h>
#include <stdlib.h>
float** form(float**, int*, int*);
float** matrix(int*, int*);
void use_free(float**, int);
void print(float**, int, int);
int main() {
int n = 0, m = 0;
float** M = NULL;
M = form(M, &n, &m); /* размеры вернуться самостоятельно, указатель требуется вернуть явно */
if (M) { /* Есть указатель - есть матрица */
print(M, n, m);
use_free(M, n);
M = NULL;
}
fflush(stdin);
getchar();
return 0;
}
/* Файл содержит числа, первые два из которых являются размерами матрицы */
float** form(float** M, int* n, int* m) {
FILE* stream;
if (stream = fopen("filepath.txt", "r")) { /* filepath.txt - ваш путь к файлу */
int i, j;
fscanf(stream, "%i", n); /* амперсанд не нужен, т. к. указатель */
fscanf(stream, "%i", m); /* амперсанд не нужен, т. к. указатель */
M = matrix(n, m); /* создаём матрицу */
while (!feof(stream)) { /* Пишем в неё из файла */
for (i = 0; i < *n; ++i) {
for (j = 0; j < *m; ++j) {
fscanf(stream, "%f", &M[i][j]);
}
}
}
fclose(stream);
}
return M;
}
/* Создадим динамическую матрицу размерами rows, cols */
float** matrix(int* rows, int* cols) {
float** p = NULL;
if (p = (float**)malloc(*rows * sizeof(float*))) {
int row, r;
for (row = 0; row < *rows; ++row) {
if (p[row] = (float*)calloc(*cols, sizeof(float))); // на всякий случай записать нулями, если элементов в файле меньше чем нужно
else {
for (r = 0; r < row; ++r) {
free(p[r]);
}
free(p);
p = NULL;
}
if (!p) break;
}
}
return p;
}
/* Освобождаем ресурсы */
void use_free(float** M, int n) {
int i = 0;
for (i = 0; i < n; ++i) {
free(M[i]);
}
free(M);
}
/* Вывод на печать */
void print(float** M, int n, int m) {
int i, j;
for (i = 0; i < n; ++i, printf("\n")) {
for (j = 0; j < m; ++j) {
printf("%8.3f", M[i][j]);
}
}
printf("\n");
}
#include <stdlib.h>
float** form(float**, int*, int*);
float** matrix(int*, int*);
void use_free(float**, int);
void print(float**, int, int);
int main() {
int n = 0, m = 0;
float** M = NULL;
M = form(M, &n, &m); /* размеры вернуться самостоятельно, указатель требуется вернуть явно */
if (M) { /* Есть указатель - есть матрица */
print(M, n, m);
use_free(M, n);
M = NULL;
}
fflush(stdin);
getchar();
return 0;
}
/* Файл содержит числа, первые два из которых являются размерами матрицы */
float** form(float** M, int* n, int* m) {
FILE* stream;
if (stream = fopen("filepath.txt", "r")) { /* filepath.txt - ваш путь к файлу */
int i, j;
fscanf(stream, "%i", n); /* амперсанд не нужен, т. к. указатель */
fscanf(stream, "%i", m); /* амперсанд не нужен, т. к. указатель */
M = matrix(n, m); /* создаём матрицу */
while (!feof(stream)) { /* Пишем в неё из файла */
for (i = 0; i < *n; ++i) {
for (j = 0; j < *m; ++j) {
fscanf(stream, "%f", &M[i][j]);
}
}
}
fclose(stream);
}
return M;
}
/* Создадим динамическую матрицу размерами rows, cols */
float** matrix(int* rows, int* cols) {
float** p = NULL;
if (p = (float**)malloc(*rows * sizeof(float*))) {
int row, r;
for (row = 0; row < *rows; ++row) {
if (p[row] = (float*)calloc(*cols, sizeof(float))); // на всякий случай записать нулями, если элементов в файле меньше чем нужно
else {
for (r = 0; r < row; ++r) {
free(p[r]);
}
free(p);
p = NULL;
}
if (!p) break;
}
}
return p;
}
/* Освобождаем ресурсы */
void use_free(float** M, int n) {
int i = 0;
for (i = 0; i < n; ++i) {
free(M[i]);
}
free(M);
}
/* Вывод на печать */
void print(float** M, int n, int m) {
int i, j;
for (i = 0; i < n; ++i, printf("\n")) {
for (j = 0; j < m; ++j) {
printf("%8.3f", M[i][j]);
}
}
printf("\n");
}
Их нужно считать "руками". Файл придется или два раза читать или дополнительный массив заводить.
Можно память динамически выделять по мере прочтения
И еще зачем у вас три цикла стоит? Почему не два?
Можно память динамически выделять по мере прочтения
И еще зачем у вас три цикла стоит? Почему не два?
Похожие вопросы
- Помогите.Массивы.Язык Си.
- Строки. =(ужс, торможу. Помогите, пожалуйста! На Си.
- Умные люди есть тут?;)) ) Помогите, пожалуйста, с домашней работой по информатике. Нужно в Паскале составить алгоритм реш
- Кто знает язык Си? ПОМОГИТЕ ПОЖАЛУЙСТА!!!
- Язык Си. Помогите пожалуйста написать простую программу.
- Помогите, пожалуйста, написать программу на языке Си
- Как занести данные считанные из файла в массив на языке си?
- «Помогите пожалуйста! Очень надо!! ! Нужно написать на языке Си (именно на СИ) . Заранее СПАСИБО!!!»
- Почему язык СИ такой сложный?
- Помогите пожалуйста найти ошибку в задаче (Язык программирования Си)