0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 15
1

По заданной прямоугольной матрице А с размерами n на m сформировать матрицу В

14.04.2011, 20:46. Показов 1291. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток не могли бы вы мне помочь с задачей, считает совершенно не так как нужно! задача такая: По заданной прямоугольной матрице А с размерами n на m сформировать матрицу В, каждый элемент b(ij) которой равен произведению средних арифметических значений элементов "диагоналей", проходящих в матрице А через элемент a(ij).

вот сам код, но считать правильно он не хочет, посмотри пожалуйста:

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
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
int main()
{
int n,m,i,j,number1=0, number2=0;
float **mas1;
float **mas2;
float sum1=0.0, sum2=0.0;
printf("\n Kol_strok: ");
scanf("%d",&n);
printf("\n Kol_colums: ");
scanf("%d", &m);
mas1=(float**)malloc(sizeof(float*)*n); //выделяем память под первый массив
mas2=(float**)malloc(sizeof(float*)*n); //выделяем память под второй массив
for(i=0;i<n:i++)
{
mas1[i]=(float*)malloc(sizeof(float)*m);
mas2[i]=(float*)malloc(sizeof(float)*m);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("\n Element mas=");
scanf("%f",&mas1[i][j]);  //заполняем первый массив элеменрами
}
}
for(i=0;i<n;i++) //высчитываем произведение среднеарифметической суммы диагоналей
{
for(j=0;j<m;j++)
{
if(i==j)
{
sum1+=mas1[i][j];
number1++;
}
if(i==(m-j))
{
sum2+=mas1[i][j];
number2++;
}
float str1=sum1/number1;
float str2=sum2/number2;
float str=str1*str2;
mas2[i][j]=str; //заполняем массив второй
str1=0;
str2=0;
sum1=0;
sum2=0;
number1=0;
number2=0;
printf("%f",mas2[i][j]);
}
}
 
}
Добавлено через 2 часа 5 минут
ну помогите же хоть кто нибудь... неужели нет никаких идей???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2011, 20:46
Ответы с готовыми решениями:

Сформировать и вывести на экран матрицу А размерами N*M элементов
Сформировать и вывести на экран матрицу А размерами N*M элементов, у которой элементы первого и...

В заданной прямоугольной матрице найти наибольший по модулю элемент
В заданной прямоугольной матрице найти наибольший по модулю элемент и удалить строку,в которой он...

Найти произведение отрицательных чисел в заданной прямоугольной матрице
Добрый вечер. Помогите с решением. Дан массив 5*4 заполненый в input.txt положительными и...

В заданной прямоугольной матрице найти столбец с минимальной суммой элементов
В заданной прямоугольной матрице найти столбец с минимальной суммой элементов.

3
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
15.04.2011, 00:59 2
Проставь отступы в коде — читать невозможно.
0
Заблокирован
15.04.2011, 07:05 3
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
#include <iostream>
#include <iomanip>
#include <ctime>
#define M 4
#define N 6
 
using namespace std;
 
int main()
{   int i,j,f,g=0;
    double A[M][N], B[M][N];
    double averD, averSD;
    srand(time(NULL));
 
    cout<<"Array A:\n";
    for(i=0;i<M;i++)
    {   for(j=0;j<N;j++)
        {   A[i][j] = i+j;
            cout<<setw(8)<<fixed<<setprecision(1)<<A[i][j];
        }
        cout<<"\n";
    }
    
    cout<<"\nArray B:\n";
    for(i=0;i<M;i++)
    {   for(j=0;j<N;j++)
        {   if(i<j)
                for(f=0, averD=0.; f<M && f+j-i<N; f++)
                    averD += A[f][f+j-i];
            else
                for(f=0, averD=0.; f+i-j<M && f<N; f++)
                    averD += A[f+i-j][f];
            averD /= f; //average along diagonal
            
            if(i+j<=N-1)
                for(f=0, averSD=0.,g=0; f<M && i+j-f>-1; f++,g++)
                    averSD += A[f][i+j-f];
            else
                for(f=N-1, averSD=0.,g=0; i+j-f<M && f>-1; f--,g++)
                    averSD += A[i+j-f][f];
            averSD /= g; //average along subdiagonal
 
            B[i][j]=averD * averSD;
            cout<<setw(8)<<B[i][j];
        }
        cout<<"\n";
    }
    
    cin.get();
    return 0;
}
Миниатюры
По заданной прямоугольной матрице А с размерами n на m сформировать матрицу В  
1
0 / 0 / 0
Регистрация: 09.04.2011
Сообщений: 15
16.04.2011, 00:06  [ТС] 4
я переписала код с добавлением из вашего примера, теперь для всех элементов выходного массива он выдает значение NULL, что не так... не понятно :-(

вот получившийся код:
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
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
 
int main()
{
    int n,m,i,j,f,g=0;
    float **mas1;
    float **mas2;
    float sum1=0.0, sum2=0.0;
    printf("\n Kol_strok: ");
    scanf("%d",&n);
    printf("\n Kol_colums: ");
    scanf("%d", &m);
    mas1=(float**)malloc(sizeof(float*)*n); //выделяем память под первый массив
    mas2=(float**)malloc(sizeof(float*)*n); //выделяем память под второй массив
        for(i=0;i<n:i++)
        {
            mas1[i]=(float*)malloc(sizeof(float)*m);
            mas2[i]=(float*)malloc(sizeof(float)*m);
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                printf("\n Element mas=");
                scanf("%f",&mas1[i][j]);  //заполняем первый массив элеменрами
            }
        }   
            for(i=0;i<n;i++)
        {      
                for(j=0;j<m;j++)
                {       if(i<j)
                                for(f=0; (f<n) && (f+j-i<m); f++)
                                            sum1 += mas1[f][f+j-i];
                        else
                                for(f=0; (f+i-j<n) && (f<m); f++)
                                            sum1 += mas1[f+i-j][f];
                        sum1 /= f;
                        
                        if(i+j<=m-1)
                                for(f=0,g=0; (f<n) && (i+j-f>-1); f++,g++)
                                            sum2 += mas1[f][i+j-f];
                        else
                                for(f=m-1,g=0; (i+j-f<n) && (f>-1); f--,g++)
                                            sum2+= mas1[i+j-f][f];
                        sum2 /= g;
 
                        mas2[i][j]=sum1 * sum2;
                        printf("%f ",mas2[i][j]);
                }       
    }   
 
    
    }
0
16.04.2011, 00:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2011, 00:06
Помогаю со студенческими работами здесь

В заданной прямоугольной матрице в последней строке найти первый отрицательный элемент
В заданной прямоугольной матрице в последней строке найти первый отрицательный элемент. Все...

Массив: В заданной прямоугольной матрице с количеством строк 2n переставить столбцы в следующем порядке: 1, 2n, 2, 2n–1, 3, 2n–2, … n, n+1
Пожалуйста помогите с задачей! С++ программа Visual Studio В заданной прямоугольной матрице с...

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

В заданной целочисленной прямоугольной матрице определить количество столбцов, содержащих хотя бы один нулевой элемент
c++ дана целочисленная прямоугольная матрица. вывести ее на экран и определить количество столбцов,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru