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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
LIDERSTEP
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 14
12.01.2013, 00:37     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы #1
Люди добрые помогите пожалуйста. Срочно нужно сделать задание.
Задание 5. Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть в программе использование функции пользователя. Определить количество четных элементов, расположенных на главной и побочной диагоналях.

Сделали что бы вводили N и M , но тогда нет главной и побочной диагонали, препод все перечеркнула а завтра сдать нужно. Помогите пожалуйста!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 00:37     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы
Посмотрите здесь:

C++ Разместить на побочной диагонали матрицы суммы элементов, которые лежат на диагоналях, перпендикулярных к побочной.
C++ Определить количество отрицательных элементов, расположенных вы-ше главной диагонали матрицы.
Массивы. Найти наибольший и наименьший элементы, среди расположенных на главной и побочной диагоналях C++
Определить количество отрицательных элементов, расположенных выше главной диагонали матрицы C++
Определить сумму элементов, расположенных на побочной диагонали матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LIDERSTEP
0 / 0 / 0
Регистрация: 12.01.2013
Сообщений: 14
12.01.2013, 01:27  [ТС]     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы #21
Цитата Сообщение от 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]: и так далее
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Zoominger
363 / 252 / 62
Регистрация: 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 минут
Поправьте только "В диагоналях массива...".
LIDERSTEP
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 минут
Поправьте только "В диагоналях массива...".
он разве правильно считает ???
Zoominger
363 / 252 / 62
Регистрация: 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";
}
Теперь да

Не по теме:

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

LIDERSTEP
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";
}
Теперь да

Не по теме:

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

все равно не правильно (
Zoominger
363 / 252 / 62
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 02:01     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы #26
все равно не правильно (
Проверил на матрице 3х3 и 2х2. Работает.
LIDERSTEP
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;
прога рабочая но если массив прямоугольный то что делать ???
Zoominger
363 / 252 / 62
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 04:30     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы #28
прога рабочая но если массив прямоугольный то что делать ???
Проверьте, будет ли программа верно работать на прямоугольных матрицах и отпишитесь.
FreeMinder
 Аватар для FreeMinder
36 / 36 / 2
Регистрация: 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;
}
Zoominger
363 / 252 / 62
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 07:04     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы #30
FreeMinder, каюсь, вторую ночь не сплю

Не по теме:

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

FreeMinder
 Аватар для FreeMinder
36 / 36 / 2
Регистрация: 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++;
А в этом коде внутренний цикл так и не выполнится ни разу
Zoominger
363 / 252 / 62
Регистрация: 22.06.2010
Сообщений: 1,566
12.01.2013, 16:13     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы #32
int j=m; j<0
О мой Бог
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 16:23     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы
Еще ссылки по теме:

Для каждой матрицы определить количество и сумму положительных элементов, расположенных в четных столбцах C++
Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы C++
Определить количество четных элементов, расположенных на главной и побочной диагоналях C++

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

Или воспользуйтесь поиском по форуму:
FreeMinder
 Аватар для FreeMinder
36 / 36 / 2
Регистрация: 29.08.2012
Сообщений: 59
12.01.2013, 16:23     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы #33
Кстати даже при j>=0, остается a[n][m] и остальные выходы за пределы массива, самое интересное что мусор за пределами массива оказывается четным, по крайней мере в моих тестах в студии
Yandex
Объявления
12.01.2013, 16:23     Определить количество четных элементов, расположенных на главной и побочной диагоналях матрицы
Ответ Создать тему
Опции темы

Текущее время: 07:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru