Форум программистов, компьютерный форум CyberForum.ru

Как считать матрицу из файла без указания размерности? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дан текстовый файл f , содержащий программу на языке Паскаль. Проверить эту программу на соответствие количества ключевых слов BEGIN, END. http://www.cyberforum.ru/cpp-beginners/thread37230.html
Дан текстовый файл f , содержащий программу на языке Паскаль. Проверить эту программу на соответствие количества ключевых слов BEGIN, END. вот решение на Паскале! нужно на с или с++! заранее спасибо!!! uses crt; var beg,en:byte; file_ :string; function find(slovo,stroka:string):byte; var f,p:byte; begin
C++ функции для очистки содержимого файла Есть какие нибудь функции для очистки содержимого файла???ну или для его удаления хотя бы?Подскажите пжл... http://www.cyberforum.ru/cpp-beginners/thread37226.html
Определить минимально значение среди трех вещественных чисел C++
Описать функции: 1) ввода исходных данных 2) обработки исходых данных 3) вывода результата С помощью этих функций написать программу для решения предложенной задачи: Определить минимально значение среди трех вещественных чисел, вводимых с клавиатуры..:wall:
C++ Файловые потоки и кириллица в имени файла
существует следующая проблема, возможно ранее обсуждалась, но поиск по форуму результатов не принес: ... std::ofstream file( "c:/кириллица_в_пути/file.txt" ); file << "hello, world!"; file.close(); ..
C++ Есть код нужно исправить ошибки http://www.cyberforum.ru/cpp-beginners/thread37201.html
есть задача: ввести размер квадратной матрицы и ее элементы. Элементы матрицы расположить в динамической памяти. Определить номер столбца, у которого сумма элементов, расположенных выше главной диагонали, максимальная, и номер столбца, у которого сумма элементов, расположенных ниже главной диагонали наименьшая. Обнулить элементы, используемые при подсчете этих сумм. #include <stdio.h>...
C++ Из строки удалить все символы, кроме пробелов, не являющиеся буквами английского алфавита Разработать консольное приложение. 1. Во введенной строке после k-го символа вставить заданную подстроку. Подстроку ввести с клавиатуры. 2. Найти и напечатать сколько раз повторяется в строке каждое слово, которое встречается в нем. Строку ввести с клавиатуры. 3. Из строки удалить все символы, кроме пробелов, не являющиеся буквами английского алфавита. Строку ввести с клавиатуры. подробнее

Показать сообщение отдельно
Lil Crazy
6 / 6 / 1
Регистрация: 23.03.2009
Сообщений: 198
30.05.2009, 11:28  [ТС]     Как считать матрицу из файла без указания размерности?
Кое-что понял, кое-что нет Вот код:
C++
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <fstream>
#include <queue>
using namespace std;
 
int **ReadMatrixFromFile(int &K, int &L);
int **CreateMatrix(const int K,const int L);
void FreeMatrix(int **X, const int L);
void SortMatrix(int **X, const int K, const int L);
void PrintMatrix(int **X, const int K, const int L);
void WriteMatrixToFile(int **X, const int K, const int L);
 
void main()
{  
    int K,L;
    printf("This program in each column swap the largest and smallest modulo elements.\n");
    int **X=ReadMatrixFromFile(K,L);
    printf("Initial matrix:\n");
    PrintMatrix(X,K,L);
    SortMatrix(X,K,L);
    printf("Result matrix:\n");
    PrintMatrix(X,K,L);
    WriteMatrixToFile(X,K,L);
    FreeMatrix(X,K);
    printf("The program work is completed. For exiting press Enter.\n");
    getch();
}
 
void SortMatrix(int **X, const int K, const int L)
{
    int i,j;
    int A,B;
    int min_j,max_j,buf;
    for (j=0;j<L;j++)
    {
        min_j=abs(X[0][j]);
        max_j=abs(X[0][j]);
        for(i=0;i<K;i++)
        {
            if (abs(X[i][j])>=max_j)
            {
                max_j=abs(X[i][j]);
                A=i;
            }
            if (abs(X[i][j]<=min_j))
            {
                min_j=abs(X[i][j]);
                B=i;
            }
        }
        buf=X[A][j];
        X[A][j]=X[B][j];
        X[B][j]=buf;
    }
}
 
void PrintMatrix(int **X, const int K, const int L)
{
    int i,j;
    for (i=0;i<K;i++)
    {
        for (j=0;j<L;j++)
        {
            printf("%5i",X[i][j]);
        }
        printf("\n");
    }
}
 
void FreeMatrix(int **X, const int K)
{
    int i;
    for(i=0; i<K; i++)
    {
        delete[] X[i];
    }
    delete[] X;
}
 
int **CreateMatrix(const int K,const int L)
{
    int i;
    int ** X = new int*[K];
    for(i=0; i<K; i++)
    {
         X[i] = new int[L];
    }
    return X;
}
 
void CheckingDimensionOfMatrix(const int K, const int L)
{
    if ((K<1) || (L<1)) 
    {
        printf("Matrix has the wrong dimension, that is less than unity. For exiting press Enter.\n");
        getch();
        exit(1);
    }
}
 
int **ReadMatrixFromFile(int &K, int &L)
{
    FILE *InputFile;
    char PathIn[25];
    int i,j;
    printf("Enter a path for input file: ");
    scanf("%s",PathIn); 
    if ((InputFile=fopen(PathIn, "r")) == NULL )
    {
        perror(PathIn);
        exit;
    }
    fscanf(InputFile,"%d ",&K);
    fscanf(InputFile,"%d ",&L);
    CheckingDimensionOfMatrix(K,L);
    int ** X=CreateMatrix(K,L); 
    for (i=0;i<K;i++)
    {
         for (j=0;j<L;j++)
            fscanf (InputFile,"%d ",&X[i][j]);
    }
    fclose(InputFile); 
    return X;
}
 
void WriteMatrixToFile(int **X, const int K, const int L)
{
    int i,j;
    FILE *OutputFile;
    char PathOut[25];
    printf("Enter a path for output result file: ");
    scanf("%s",PathOut);  
    OutputFile=fopen(PathOut,"w+");
    for (i=0;i<K;i++)
    {
        for (j=0;j<L;j++)
        {
            fprintf(OutputFile,"%4d",X[i][j]);
        }
        fprintf(OutputFile,"\n");
    }
    fclose(OutputFile); 
}
 
/*int **ReadMatrixFromFile(int &K, int &L)
{
    FILE *InputFile;
    char PathIn[25];
    int i,j;
    int **X;
    printf("Enter a path for input file: ");
    scanf("%s",PathIn); 
    if ((InputFile=fopen(PathIn, "r")) == NULL )
    {
        perror(PathIn);
        exit;
    }
    *X=new int [K];    
    for (j = 0; j < L; j++)
        {
            X[i]=new int [K];
        }
    while (feof(InputFile)==0) 
    {
        if (fgetc(InputFile)!=32)
        {
            X[K][L]=fgetc(InputFile);
        }
        if (fgetc(InputFile)==32)
        {
            continue;
        }
    }
    return X;
}*/
 
/*int **ReadMatrixFromFile(int &K, int &L)
{
    FILE *InputFile;
    char PathIn[25];
    int i,j;
    ifstream in("C:\\in2.txt");
    queue<int> tmp;
    int count = 0;
    while (!in.eof())
    {
        in >> i;
        tmp.push(i);
        ++count;
    }
    int N = sqrt((double)count);
    int **X = new int*[N];
    for (int z = 0; z < N; z++) X[z] = new int[N];
    for (int z = 0; z < N; z++)
        for (int y = 0; y < N; y++)
        {
            X[z][y] = tmp.front();
            tmp.pop();
        }
    return X;
}*/
Не закомментированная функция ReadMatrixFromFile нормально работает, но я её писал для заданной размерности в файле. Как бы мне теперь её переделать без указания размерности в файле (матрица не квадратная)???!!!
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru