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

Вычислить матрицу по двум другим - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ МНК, повреждение кучи http://www.cyberforum.ru/cpp-beginners/thread96619.html
Аппроксимация методом наименьших квадратов.. Если не использовать динамическую память, все работает замечательно.. Если описывать массивы как динамические - программа работает через раз.. Если...
C++ Электронные часы Приветствую всех специалистов по программированию!!! Мне срочно нужна ваша помощь! помогите пожалуйста разработать программу на С++ в графическом режиме, которая будет показывать в середине экрана... http://www.cyberforum.ru/cpp-beginners/thread96616.html
Рекурсивное вычисление C++
Доброе время суток!!! Помогите пожалуйста решить две задачи с помощью рекурсии. За ранее огромное спасибо!!! Задача №1. Написать функцию, которая рекурсивно вычисляет сумму чисел в заданном...
C++ Используя оператор For и else
Составить программу каторые выводить четные цифры Используя оператор For спс заранее)))))
C++ Функция без условия http://www.cyberforum.ru/cpp-beginners/thread96568.html
Нужно написать программу к этой функции( толкового словесного условия к ней не давали ) Вот f(2)=3x(в кубе, тоесть в 3-й степени)-2x(в квадрате, тоесть во 2-й степени)+4x-1 Тоесть программа и есть...
C++ Определить максимальное значение напряжения в сети Народ, плз, помогите :help: В течение суток через каждый час проведены 24 замера напряжения в сети. Определить максимальное значение напряжения в сети в интервале (20,6) час и время, когда оно было... подробнее

Показать сообщение отдельно
Slav1991
0 / 0 / 1
Регистрация: 07.01.2010
Сообщений: 44
17.02.2010, 20:24  [ТС]
ну скажем у меня есть прога, но считает она неправильно и в файл не записывает
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
float  * CreateM(unsigned int idx, unsigned int idy)
{
    float * map = new float[idx*idy];
    for(unsigned int y = 0; y < idy; y++)
    {
        for(unsigned int x = 0; x < idx; x++)
        {
            *(map+(y*idy)+x) = 0;
        }
    }
    return map;
}
 
void SumM(float * const map, float const * const map_a, float const * const map_b, unsigned int idx, unsigned int idy)
{
    for(unsigned int y = 0; y < idy; y++)
    {
        for(unsigned int x = 0; x < idx; x++)
        {
            *(map+(y*idy)+x) = *(map_a+(y*idy)+x) + *(map_b+(y*idy)+x);
        }
    }
}
 
void InvertM(float * const map, float const * const map_a, unsigned int idx, unsigned int idy)
{
    for(unsigned int y = 0; y < idy; y++)
    {
        for(unsigned int x = 0; x < idx; x++)
        {
            *(map+(y*idy)+x) = (*(map_a+(y*idy)+x) * -1);
        }
    }
}
 
void MultiplicationM(float * const map, float const * const map_a, float const * const map_b, unsigned int idx, unsigned int idy)
{
/*
    for(unsigned int yr = 0; yr < idx; yr++)
    {
        for(unsigned int x = 0; x < idx; x++)
        {
            *(map+(yr*idx)+x) = 0;
            for(unsigned int y = 0; y < idx; y++)
            {
                *(map+(yr*idx)+x) = *(map+(yr*idx)+x) + ((*(map_a+(x*idx)+y)) * (*(map_b+(y*idx)+x)));
            }
        }
    }
*/
    for(unsigned int y = 0; y < idy; y++)
    {
        for(unsigned int x = 0; x < idx; x++)
        {
            *(map+(y*idy)+x) = *(map_a+(y*idy)+x) * *(map_b+(y*idy)+x);
        }
 
    }
}
 
void MultiplicationMConst(float * const map, float const * const map_a, unsigned int idx, unsigned int idy, float val)
{
    for(unsigned int x = 0; x < idx; x++)
    {
        for(unsigned int y = 0; y < idy; y++)
        {
            *(map+(y*idy)+x) = (*(map_a+(y*idy)+x)) * val;
        }
    }
}
 
void PrintM(float const * const map_a, unsigned int idx, unsigned int idy, const char * text)
{
    printf("%s\n",text);
    char buffer[65];
    for(unsigned int y = 0; y < idy; y++)
    {
        for(unsigned int x = 0; x < idx; x++)
        {
            // char buffer[_CVTBUFSIZE];
            float val = *(map_a+(y*idy)+x);
            // _gcvt( val, 17, buffer );
            printf("M[%d][%d]=%10.10f\t", y,x,val);
        }
        printf("\n");
    }
}
 
void PrintMFile(float const * const map_a, unsigned int idx, unsigned int idy, const char * file_name)
{
    FILE *stream;
    if( (stream = fopen( file_name, "w" )) == NULL )
    {
        printf("”*©« %s *ВҐ *ВҐ©¤ВҐ*", file_name);
    }
     else
     {
        //char buffer[_CVTBUFSIZE];
        for(unsigned int y = 0; y < idy; y++)
        {
            for(unsigned int x = 0; x < idx; x++)
            {
                float val = *(map_a+(y*idy)+x);
                //_gcvt( val, 17, buffer );
                fprintf(stream, "M[%d][%d]=%10.10f\t", y,x,val);
            }
            fprintf(stream, "\n");
        }
        fclose( stream );
    }
}
 
void InitMConsole(float * const map, unsigned int idx, unsigned int idy)
{
    for(unsigned int y = 0; y < idy; y++)
    {
        for(unsigned int x = 0; x < idx; x++)
        {
            printf("M[%d][%d]=", y,x);
            scanf("%f",(map+(y*idy)+x));
        }
    }
}
 
void InitMFile(float * const map, unsigned int idx, unsigned int idy, const char * file_name)
{
    FILE *stream;
    if( (stream = fopen( file_name, "r" )) == NULL )
    {
        printf("”*©« %s *ВҐ *ВҐ©¤ВҐ*", file_name);
    }
     else
     {
        for(unsigned int y = 0; y < idy; y++)
        {
            for(unsigned int x = 0; x < idx; x++)
            {
                fscanf(stream, "%f",(map+(y*idy)+x));
            }
        }
        fclose( stream );
    }
}
 
int CheckYN(const char * text)
{
    int ret = 0;
    int val = 0;
    while((val != char('Y')) &&
          (val != char('y')) &&
          (val != char('N')) &&
          (val != char('n'))
         )
    {
        printf("%s (Y/N):",text);
        val = getch();
        printf("\n");
    }
    if ((val == char('Y')) || (val == char('y'))) ret = 1;
    return ret;
}
 
int main()
{
    //unsigned int idx = 3;
 
    unsigned int idx = 0;
    unsigned int idy = 0;
 
 
          printf("vvedite razmernost:\n");
    printf("X=");
    scanf("%i",&idx);
    printf("Y=");
    scanf("%i",&idy);
 
    if(idx > 8 || idy > 8)
    {
      printf("razmernost doljna bit (8 x 8)!!!");
      return 0;
    }
 
    float * map_a = CreateM(idx, idy);
    float * map_b = CreateM(idx, idy);
    float * map_t1 = CreateM(idx, idy);
    float * map_t2 = CreateM(idx, idy);
 
    if (CheckYN("read from file?"))
    {
        InitMFile(map_a, idx, idy, "D:\\lab11.txt");
        InitMFile(map_b, idx, idy, "D:\\lab11.txt");
    }
    else
    {
        printf("vvedite elementi matrix A\n");
        InitMConsole(map_a, idx, idy);
        printf("vvedite elememti matrix B\n");
        InitMConsole(map_b, idx, idy);
    }
 
    //PrintM(map_a, idx, "MAP A");
    //PrintM(map_b, idx, "MAP B");
 
    MultiplicationM(map_t1, map_b, map_b, idx, idy); // B^2
    //PrintM(map_t1, idx, "MAP B^2");
    InvertM(map_t1, map_t1, idx, idy); // -B^2
    //PrintM(map_t1, idx, "MAP -B^2");
    SumM(map_t1, map_a, map_t1,idx, idy); // A-B^2
    //PrintM(map_t1, idx, "MAP A-B^2");
 
    MultiplicationMConst(map_t2, map_a, idx, idy, 2); // A*2
    //PrintM(map_t2, idx, "MAP A*2");
    SumM(map_t2, map_t2, map_b, idx, idy); // A*2+B
    //PrintM(map_t2, idx, "MAP A*2+B");
 
    MultiplicationM(map_t1, map_t1, map_t2, idx, idy); // (A-B^2)*(A*2+B)
    PrintM(map_t1, idx, idy, "MAP (A-B^2)*(A*2+B)");
 
    if (CheckYN("write to file?"))
    {
        PrintMFile(map_t1, idx, idy, "c.txt");
    }
    else
    {
        PrintM(map_t1, idx, idy, "MAP (A-B^2)*(A*2+B)");
    }
 
    delete map_a;
    delete map_b;
    delete map_t1;
    delete map_t2;
    return 0;
}
Добавлено через 15 минут
или такой вариант, ток по другой формуле:
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
typedef int massiv[8][8];
 
int print_file(const massiv *mas, int mas_h, int mas_w)
{
    FILE *fC;
 
    fC = fopen( "massiv_C.txt", "w");
    if (fC==NULL)
    {
        printf("File \"massiv_C.txt\" could not be created.\n");
        getch();
        return -1;
    }
 
    for(int i=0;i<mas_h;i++)
    {
        for(int j=0;j<mas_w;j++)
        {
            fprintf (fC, "%d\t", (*mas)[i][j]);
        }
        fprintf (fC, "\n\n");
    }
 
    fclose(fC);
    return 1;
}
 
void print_mon(const massiv *mas, int mas_h, int mas_w)
{
    for(int i=0;i<mas_h;i++)
    {
        for(int j=0;j<mas_w;j++)
        {
            printf("%d\t", (*mas)[i][j]);
        }
        printf("\n\n");
    }
}
 
 
int scan_file(FILE *stream, massiv *mas, int mas_h, int mas_w)
{
    int X;
 
    for(int i=0;i<mas_h;i++)
        for(int j=0; j<mas_w; j++)
        {
            if(fscanf(stream, "%d", &X)==1)
                (*mas)[i][j]=X;
            else
            {
                printf("Unexpected end of file!\n");
                return 0;
            }
        }
        fclose(stream);
 
    return 1;
}
 
int get_h_w_and_scan(massiv *A, massiv *B, int &h, int &w)
{
 
    FILE *fA;
    fA = fopen( "massiv_A.txt", "r");
    if (fA==NULL)
    {
        printf("File \"massiv_A.txt\" not found.\n");
        getch();
        return -1;
    }
 
 
    FILE *fB;
    fB = fopen( "massiv_B.txt", "r");
    if (fB==NULL)
    {
        printf("File \"massiv_B.txt\" not found.\n");
        getch();
        return -1;
    }
 
    char ch;
    while(fscanf(fA, "%c", &ch)==1)
    {
        if(ch==' ') w++;
        if(ch=='\n')
        {
            h++;
            w=0;
        }
    }
 
    if(h==0 && w==0)
        printf("File: massiv_A.txt - is empty or not exist!\n");
    else
    {
        w++;
        h++;
    }
 
    rewind(fA);
 
    scan_file(fA, A, h, w);
    scan_file(fB, B, h, w);
 
    return 1;
}
 
void scan_cons(massiv *mas, int mas_h, int mas_w)
{
    printf("Enter elements of nassiv:\n");
 
    for(int i=0;i<mas_h;i++)
        for(int j=0;j<mas_w;j++)
        {
            printf("[%d][%d]: ",i+1,j+1);
            scanf("%d", &((*mas)[i][j]));
        }
 
}
 
void mas_plus_mas(const massiv *mas1, const massiv *mas2, massiv *mas3, int mas_h, int mas_w)
{
   for(int i=0;i<mas_h;i++)
       for(int j=0;j<mas_w;j++)
        {
            (*mas3)[i][j]=(*mas1)[i][j]+(*mas2)[i][j];
        }
}
 
void mas_x_chislo(const massiv *mas1, massiv *mas2, int chislo, int mas_h, int mas_w)
{
   for(int i=0;i<mas_h;i++)
       for(int j=0;j<mas_w;j++)
        {
            (*mas2)[i][j]=(*mas1)[i][j]*chislo;
        }
}
 
void mas_x_mas(const massiv *mas1, const massiv *mas2, massiv *mas3, int mas_h, int mas_w)
{
   for(int i=0;i<mas_h;i++)
       for(int j=0;j<mas_w;j++)
        {
            int E=0;
            for(int a=i, b=0, k=0, l=j;b<mas_w && k<mas_h;b++, k++)
            {
                (*mas3)[i][j]=(*mas1)[a][b] * (*mas2)[k][l]+E;
                E=(*mas3)[i][j];
            }
 
        }
}
 
 
int main()
{
    massiv A, B, C, temp1, temp2, temp3, temp4;
    int ok = 1, h=0, w=0;
 
 
    clrscr();
 
    printf("Do you want to get data from file? (Y/N)\n");
 
    if(getch() == 'y') {
        ok = get_h_w_and_scan(&A, &B, h, w);
        printf("W=%d H=%d\n", w, h);
    } else {
        printf("Enter 'h' and 'w' of massivs:\n");
        scanf("%d %d", &h, &w);
        scan_cons(&A, h, w);
        scan_cons(&B, h, w);
    }
 
    if(ok == 0)
    {
        printf("Do you want to write data from consol? (Y/N)\n");
        if(getch() == 'y')
        {
            printf("Enter 'h' and 'w' of massivs:\n");
            scanf("%d %d", &h, &w);
            scan_cons(&A, h, w);
            scan_cons(&B, h, w);
            ok=1;
        }
    }
 
    if(ok != 0)
     {
          printf("Massiv A: \n");
          print_mon(&A, h, w);
 
          printf("\nMassiv B: \n");
          print_mon(&B, h, w);
 
          mas_x_chislo(&B, &temp1, -1, h, w);
          mas_plus_mas(&A, &temp1, &temp2, h, w);
          mas_plus_mas(&A, &B, &temp3, h, w);
          mas_x_mas(&temp2, &temp3, &temp1, h, w);
          mas_x_mas(&A, &B, &temp2, h, w);
          mas_x_chislo(&temp2, &temp3, -2, h, w);
          mas_plus_mas(&temp1, &temp3, &C, h, w);
 
          printf("\nMassiv C: \n");
          print_mon(&C, h, w);
 
          printf("Do you want to write data to file? (Y/N)\n");
 
          if(getch()=='y')
               print_file(&C,h,w);
 
     }
            
            printf("\nThe program is finished...");
    getch();
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru