Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 14
1

Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы

12.01.2013, 00:37. Показов 8759. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Люди добрые помогите пожалуйста. Срочно нужно сделать задание.
Задание 5. Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть в программе использование функции пользователя. Определить количество четных элементов, расположенных на главной и побочной диагоналях.

Сделали что бы вводили N и M , но тогда нет главной и побочной диагонали, препод все перечеркнула а завтра сдать нужно. Помогите пожалуйста!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2013, 00:37
Ответы с готовыми решениями:

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

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

Сформировать массив из элементов матрицы, расположенных на главной и побочной диагоналях
Дан динамический массив из n строк и m столбцов. Сформировать одномерный массив из элементов...

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

32
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 14
12.01.2013, 01:27  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Zoominger Посмотреть сообщение
C++ (Qt)
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
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
void Opredel(int**,int);
 
int main(){
    int i,j,n, m;
    cout <<"Vvedite kolichestvo strok (N): ";
    cin >> n;
    cout <<"Vvedite kolichestvo stolbcov (M): ";
    cin >> m;
    int **a = new int*[n];
    for(i= 0; i < n; i++)
    a[i] = new int[m];
    for(i=0;i<n;i++)
    cout<<"Vvedite massiv A:\n";
    for(i=0;i<n;i++)for(j=0;i<n;j++)
    {
        cout<<"Vvedite a["<<i<<"]["<<j<<"]:";
        cin>>a[i][j];
    }
    cout<<"\nMassiv A: \n";
    for(i=0;i<n;i++)
    {cout<<setw(9)<<a[i][j];
    cout<<endl;
    }
    Opredel(a,n);
    for(i=0;i<n;i++)
        delete[]a[i];
    delete[]a;
    a=NULL;
    return 0;
}
void Opredel(int**a,int n){
    int Iter=0;
    for(int i=0; i<n; i++)for(int j=0; j<n; j++)if(a[i][j]%2==0)Iter++;
    for(int i=n; i>0; i--)for(int j=n; j<0; j++)if(a[i][j]%2==0)Iter++;
    cout << "B MACCUBE " << Iter << " 4ETHblX 4UCEJl.\n";
}
Вот как-то так. Компилируется, но работоспособность не проверял.
что-то не то, размерность массива не вводиться

Добавлено через 5 минут
Цитата Сообщение от LIDERSTEP Посмотреть сообщение
что-то не то, размерность массива не вводиться
Vvedite kolichestvo strok (N): 2
Vvedite kolichestvo stolbcov (M): 2
Vvedite massiv A:
Vvedite massiv A:
Vvedite a[0][0]:1
Vvedite a[0][1]:2
Vvedite a[0][2]:3
Vvedite a[0][3]:1
Vvedite a[0][4]:23
Vvedite a[0][5]:2
Vvedite a[0][6]:3
Vvedite a[0][7]:21
Vvedite a[0][8]: и так далее
0
368 / 256 / 65
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 01:42 22
C++ (Qt)
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
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
void Opredel(int**,int);
 
int main(){
    int i,j,n, m, **a;
    cout <<"Vvedite kolichestvo strok (N): ";
    cin >> n;
    cout <<"Vvedite kolichestvo stolbcov (M): ";
    cin >> m;
    a = new int* [n];
    for(i=0; i<n; i++)a[i] = new int [m];
    for(i=0;i<n;i++)for(j=0;j<m;j++){
        cout<<"Vvedite a["<<i<<"]["<<j<<"]:";
        cin>>a[i][j];
    }
    Opredel(a,n);
    for(i=0;i<n;i++)
        delete[]a[i];
    delete[]a;
    a=NULL;
    return 0;
}
void Opredel(int**a,int n){
    int Iter=0;
    for(int i=0; i<n; i++)for(int j=0; j<n; j++)if(a[i][j]%2==0)Iter++;
    for(int i=n; i>0; i--)for(int j=n; j<0; j++)if(a[i][j]%2==0)Iter++;
    cout << "B MACCUBE " << Iter << " 4ETHblX 4UCEJl.\n";
}
Проверил, работает.


Bash
1
2
3
4
5
6
7
8
9
10
user@home:~/Рабочий стол/Домашняя папка/Документы$ '/home/user/Документы/Без имени' 
Vvedite kolichestvo strok (N): 2
Vvedite kolichestvo stolbcov (M): 3
Vvedite a[0][0]:5
Vvedite a[0][1]:4
Vvedite a[0][2]:5
Vvedite a[1][0]:7
Vvedite a[1][1]:5
Vvedite a[1][2]:2
B MACCUBE 1 4ETHblX 4UCEJl.
Добавлено через 7 минут
Поправьте только "В диагоналях массива...".
0
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 14
12.01.2013, 01:45  [ТС] 23
Цитата Сообщение от Zoominger Посмотреть сообщение
C++ (Qt)
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
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
void Opredel(int**,int);
 
int main(){
    int i,j,n, m, **a;
    cout <<"Vvedite kolichestvo strok (N): ";
    cin >> n;
    cout <<"Vvedite kolichestvo stolbcov (M): ";
    cin >> m;
    a = new int* [n];
    for(i=0; i<n; i++)a[i] = new int [m];
    for(i=0;i<n;i++)for(j=0;j<m;j++){
        cout<<"Vvedite a["<<i<<"]["<<j<<"]:";
        cin>>a[i][j];
    }
    Opredel(a,n);
    for(i=0;i<n;i++)
        delete[]a[i];
    delete[]a;
    a=NULL;
    return 0;
}
void Opredel(int**a,int n){
    int Iter=0;
    for(int i=0; i<n; i++)for(int j=0; j<n; j++)if(a[i][j]%2==0)Iter++;
    for(int i=n; i>0; i--)for(int j=n; j<0; j++)if(a[i][j]%2==0)Iter++;
    cout << "B MACCUBE " << Iter << " 4ETHblX 4UCEJl.\n";
}
Проверил, работает.


Bash
1
2
3
4
5
6
7
8
9
10
user@home:~/Рабочий стол/Домашняя папка/Документы$ '/home/user/Документы/Без имени' 
Vvedite kolichestvo strok (N): 2
Vvedite kolichestvo stolbcov (M): 3
Vvedite a[0][0]:5
Vvedite a[0][1]:4
Vvedite a[0][2]:5
Vvedite a[1][0]:7
Vvedite a[1][1]:5
Vvedite a[1][2]:2
B MACCUBE 1 4ETHblX 4UCEJl.
Добавлено через 7 минут
Поправьте только "В диагоналях массива...".
он разве правильно считает ???
0
368 / 256 / 65
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 01:51 24
C++ (Qt)
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
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
void Opredel(int**,int, int m);
 
int main(){
    int i,j,n, m, **a;
    cout <<"Vvedite kolichestvo strok (N): ";
    cin >> n;
    cout <<"Vvedite kolichestvo stolbcov (M): ";
    cin >> m;
    a = new int* [n];
    for(i=0; i<n; i++)a[i] = new int [m];
    for(i=0;i<n;i++)for(j=0;j<m;j++){
        cout<<"Vvedite a["<<i<<"]["<<j<<"]:";
        cin>>a[i][j];
    }
    Opredel(a,n,m);
    for(i=0;i<n;i++)
        delete[]a[i];
    delete[]a;
    a=NULL;
    return 0;
}
void Opredel(int**a,int n, int m){
    int Iter=0;
    for(int i=0; i<n; i++)for(int j=0; j<m; j++)if(a[i][j]%2==0)Iter++;
    for(int i=n; i>0; i--)for(int j=m; j<0; j--)if(a[i][j]%2==0)Iter++;
    cout << "B MACCUBE " << Iter << " 4ETHblX 4UCEJl.\n";
}
Теперь да

Не по теме:

Легче было сразу с нуля написать...

0
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 14
12.01.2013, 01:58  [ТС] 25
Цитата Сообщение от Zoominger Посмотреть сообщение
C++ (Qt)
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
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
void Opredel(int**,int, int m);
 
int main(){
    int i,j,n, m, **a;
    cout <<"Vvedite kolichestvo strok (N): ";
    cin >> n;
    cout <<"Vvedite kolichestvo stolbcov (M): ";
    cin >> m;
    a = new int* [n];
    for(i=0; i<n; i++)a[i] = new int [m];
    for(i=0;i<n;i++)for(j=0;j<m;j++){
        cout<<"Vvedite a["<<i<<"]["<<j<<"]:";
        cin>>a[i][j];
    }
    Opredel(a,n,m);
    for(i=0;i<n;i++)
        delete[]a[i];
    delete[]a;
    a=NULL;
    return 0;
}
void Opredel(int**a,int n, int m){
    int Iter=0;
    for(int i=0; i<n; i++)for(int j=0; j<m; j++)if(a[i][j]%2==0)Iter++;
    for(int i=n; i>0; i--)for(int j=m; j<0; j--)if(a[i][j]%2==0)Iter++;
    cout << "B MACCUBE " << Iter << " 4ETHblX 4UCEJl.\n";
}
Теперь да

Не по теме:

Легче было сразу с нуля написать...

все равно не правильно (
0
368 / 256 / 65
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 02:01 26
все равно не правильно (
Проверил на матрице 3х3 и 2х2. Работает.
0
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 14
12.01.2013, 02:27  [ТС] 27
C++ (Qt)
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
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
void Opredel(int**,int, int,int*);
 
int main()
{
    int**a;
    int i,j,n,m,Kol;
    cout <<"Vvedite kolichestvo strok (n): ";
    cin >> n;
    cout <<"Vvedite kolichestvo stolbcov (m): ";
    cin >> m;
  a=new int*[n];
  for(i=0;i<n;i++)
      a[i]=new int[m];
    cout<<"Vvedite massiv A:\n";
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
    {
        cout<<"Vvedite a["<<i<<"]["<<j<<"]:";
        cin>>a[i][j];
    }
    cout<<"\nMassiv A: \n";
    for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
        cout<<setw(9)<<a[i][j];
        cout<<endl;
    }
    Opredel(a,n,m,&Kol);
    cout<<"\nKol="<<Kol<<endl;
    for(i=0;i<n;i++)
        delete[] a[i];
    delete[]a;
    a=NULL;
    return 0;
}
void Opredel(int**a,int n,int m, int*Kol)
{
    int i, j;
    *Kol=0;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        {
            if((a[i][j]%2==0)&&(i==j))
            {*Kol+=1;
            }
            if((i==m-j-1)&&(a[i][j]%2==0))
            {*Kol+=1;
            }}}
Вот что было с самого начала, преподша подчеркнула m
int main()
{
int**a;
int i,j,n,m,Kol;
прога рабочая но если массив прямоугольный то что делать ???
0
368 / 256 / 65
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 04:30 28
прога рабочая но если массив прямоугольный то что делать ???
Проверьте, будет ли программа верно работать на прямоугольных матрицах и отпишитесь.
0
36 / 36 / 4
Регистрация: 29.08.2012
Сообщений: 59
12.01.2013, 05:59 29
Цитата Сообщение от Zoominger Посмотреть сообщение
for(int i=n; i>0; i--)for(int j=m; j<0; j--)if(a[i][j]%2==0)Iter++;
Выход за пределы массива при i = n или j = m, n и m - это размерность массива, но НЕ его последний индекс.
Если матрица прямоугольная то и считать ничего не надо, нет в прямоугольных матрицах главной и побочной диагонали.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int EvenCounter(int**,int, int);
 
int main()
{
    srand(time(0));
    int**a;
    int n = 0, m = 0;
 
    cout <<"Input rows count (n): ";
    cin >> n;
    cout <<"Input columns count (m): ";
    cin >> m;
 
    a = new int*[n];
    for(int i=0;i<n;i++)
        a[i]=new int[m];
 
    cout<<"\nArray a: \n";
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            a[i][j] = rand()%10;
            cout<<setw(2)<<a[i][j];
        }
        cout<<endl;     
    }
    if( n != m)
        cout<<"\nThere is nothing to count n != m\n"<<endl;
    else
        cout<<"\nCount = "<<EvenCounter(a,n,m)<<endl;
 
    for(int i=0;i<n;i++)
        delete[] a[i];
    delete[]a;
 
    return 0;
}
 
int EvenCounter(int**a,int n,int m)
{
    int count=0;
    // для главной
    for(int i=0, j=0; i < n && j < m; i++, j++)
    {
        if( a[i][j] % 2 == 0)
            count++;
    }
    // для побочной
    for(int i=0, j=m-1; i < n && j > 0; i++, j--)
    {
        if( a[i][j] % 2 == 0)
            count++;
    }
    return count;
}
1
368 / 256 / 65
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 07:04 30
FreeMinder, каюсь, вторую ночь не сплю

Не по теме:

Но почему мой вариант работает?

0
36 / 36 / 4
Регистрация: 29.08.2012
Сообщений: 59
12.01.2013, 15:16 31
Работает, но не верно
Цитата Сообщение от Zoominger Посмотреть сообщение
for(int i=0; i<n; i++)for(int j=0; j<m; j++)if(a[i][j]%2==0)Iter++;
Этот код "прогуляется" по всему массиву и подсчитает общее количество четных, а не по диагонали.

Цитата Сообщение от Zoominger Посмотреть сообщение
for(int i=n; i>0; i--)for(int j=m; j<0; j--)if(a[i][j]%2==0)Iter++;
А в этом коде внутренний цикл так и не выполнится ни разу
0
368 / 256 / 65
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 16:13 32
int j=m; j<0
О мой Бог
0
36 / 36 / 4
Регистрация: 29.08.2012
Сообщений: 59
12.01.2013, 16:23 33
Кстати даже при j>=0, остается a[n][m] и остальные выходы за пределы массива, самое интересное что мусор за пределами массива оказывается четным, по крайней мере в моих тестах в студии
0
12.01.2013, 16:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2013, 16:23
Помогаю со студенческими работами здесь

Для массива определить количество четных элементов, расположенных ниже главной и побочной диагоналей
Для заданного массива A размером n*n определить количество четных элементов, расположенных ниже как...

Найти максимальное значение элементов, расположенных на главной и побочной диагоналях матрицы
Дана квадратная матрица M x M. Найти максимальное значение элементов, расположенных на главной и...

Определить количество отрицательных элементов на главной и побочной диагоналях
Помогите с решением 1 вопроса) Данный код нужно переделать,чтобы он определял:где меньше...

Подсчитать количество положительных элементов в главной и побочной диагоналях матрицы
Дана матрица А(n,n). подсчитать к-во положительных элементов в главной и побочной диагоналях...


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

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