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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
brenor01
2 / 2 / 1
Регистрация: 15.01.2010
Сообщений: 98
#1

Матрица - C++

23.06.2010, 21:32. Просмотров 582. Ответов 10
Метки нет (Все метки)

Найти произведение отрицательных нечетных чисел побочной диагонали матрицы.
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{clrscr();
const n=5;
int a[n][n],s1=0,s2=0,max,k=0; int i,j;
cout <<"\n Massiv A:";
randomize;
for (i=0;i<n;i++)
{for (j=0;j<n;j++)
{a[i][j]=random (80)-20;
cout <<a[i][j];
}
cout<<"\n";
}
if (i==j && a[i][j]>0) k+=a[i][j];
cout<<"\n k="<<k;
getch();
        return 0;
}
//---------------------------------------------------------------------------

Что неправильно... Должно находить : Найти количество положительных четных чисел главной диагонали матрицы.

Добавлено через 1 час 20 минут
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
clrscr();
const n=5;
int a[n][n],P=1;
int i,j;
cout <<"\n Massiv A:\n";
randomize;
for (i=0;i<n;i++)
{
    for (j=0;j<n;j++)
        {
        a[i][j]=random (80)-20;
        cout<<" "<<a[i][j];
                if (i+j==n-1 && a[i][j]<0 && a[i][j]%2!=0) P*=a[i][j];
 
                }
    cout<<"\n";
 
 
}
 
cout<<"\n P="<<P;
getch();
        return 0;
}
решил другую задачу... вроед решает правильно, но матрица постоянно одинакова... Разбберитесь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2010, 21:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Матрица (C++):

дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не сим - C++
помогите пожалуйста. условие: дана квадратичная матрица z. составить программу, которая если матрица симметричная(транспонированная...

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) - C++
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include&lt;conio.h&gt; void main() { int mas; int N; int max_element; int...

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) - C++
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include &lt;stdlib.h&gt; int main(int argc, char* argv) { srand(time(NULL)); int mas; ...

Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E единичная матрица порядка n - C++
Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E-единичная матрица порядка n. Помогите...

Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица" - C++
Нужно определить класс &quot;матрица&quot; с возможностью динамического выделения и освобождения памяти, наполнения матрицы, сохранения и чтения из...

Матрица C++ - C++
Помогите написать класс и функцию, необходимо сделать указатель на указатель который будет содержать данные о строке и колонка, констрактор...

10
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
24.06.2010, 05:21 #2
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
//---------------------------------------------------------------------------
#include <iostream>
#include <ctime>
#include <vcl>
#pragma hdrstop
 
using namespace std;
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
    int **A, m, n, p=1, Num=0;
    cout <<"Rows: ";
    cin >>m;
    cout <<"Cols: ";
    cin >>n;
    cout <<endl;
    A=new int*[m];
    for (int i=0; i<m; i++) A[i]=new int[n];
 
    //Случайные целые числа в диапазоне [-100, 100].
    srand (time(NULL));
    for (int i=0; i<m; i++) {
        for (int j=0; j<n; j++) {
            A[i][j]=(rand()%401-200);
            cout <<A[i][j]<<'\t';
      }
        cout <<endl;
    }
 
 
    for (int i=0, j=n-1; j!=-1; i++, j--) {
        if (A[i][j]<0 && A[i][j]%2!=0) p=p*A[i][j];
    }
 
    cout <<"\nP="<<p<<endl;
 
    //Расчет количества целых положительных на главной диагонали.
    for (int i=0, j=0; i<m || j<n; i++, j++) {
        if (A[i][j]>0 && A[i][j]%2==0) Num++;
    }
    cout <<"Num="<<Num<<endl;
 
    for (int j=0; j<n; j++) delete []A[j];
    delete []A;
    system ("pause");
    return 0;
}
//---------------------------------------------------------------------------
Попытался сделать, матрица заполнялась случайными числами. С расчетом количества положительных четных на главной диагонали получилось, а вот с отрицательными нечетными на побочной нет. Долго мучился, но увы. Он, проклятый, упорно оставляет мне p==1. Если найдете ошибку вы или кто-то другой, то я буду только рад. Но сам уже и так и эдак. Нужен свежий глаз.
0
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
24.06.2010, 09:42 #3
"он, проклятый, упорно оставляет мне p==1. Если найдете ошибку вы или кто-то другой, то я буду только рад. Но сам уже и так и эдак. Нужен свежий глаз"
Просто у вас изначально p при инициализации присваивается 1, и если не будет отрицательных нечетных чисел, значение p у вас не изменится (выведет равное 1).
Еще с удалением немного напутали...
вот подпраленная ваша программа
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 <iostream>
#include <ctime>
//#include <vcl>
#pragma hdrstop
 
using namespace std;
//---------------------------------------------------------------------------
 
#pragma argsused
int main()
{
    int **A, m, n, p=1, Num=0, i, j;
    bool flag=false;
    cout <<"Rows: ";
    cin >>m;
    cout <<"Cols: ";
    cin >>n;
    cout <<endl;
    A=new int*[m];
    for (int i=0; i<m; i++) A[i]=new int[n];
 
    //Случайные целые числа в диапазоне [-100, 100].
    srand (time(NULL));
    for (int i=0; i<m; i++) {
        for (int j=0; j<n; j++) {
            A[i][j]=(rand()%401-200);
            cout <<A[i][j]<<'\t';
      }
        cout <<endl;
    }
    //произведение отрицательных нечетных чисел побочной диагонали матрицы.
    for (i=0, j=n-1; i<m && j>=0; i++, j--)
    {
        if (A[i][j]<0 && A[i][j]%2!=0)
        {
            flag=true;
            p*=A[i][j];
        }
    }
    if (!flag)
        p=0;
 
    cout <<"\nP="<<p<<endl;
 
    //Расчет количества целых положительных на главной диагонали.
    for (i=0, j=0; i<m && j<n; i++, j++) 
    {
        if (A[i][j]>0 && A[i][j]%2==0)
            Num++;
    }
    cout <<"Num="<<Num<<endl;
 
    for (j=0; j<m; j++)
        delete []A[j];
    delete []A;
    system ("pause");
    return 0;
}
0
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
24.06.2010, 17:33 #4
NNN777, мы с вами не учли, что матрица-то квадратная. Так что переменная m не нужна в принципе. И произведение элементов тоже без ошибок у меня, сейчас проверял.

brenor01, держите код.
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
//---------------------------------------------------------------------------
#include <iostream>
#include <ctime>
#include <vcl>
#pragma hdrstop
 
using namespace std;
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
    int **A, n, p=1, Num=0;
    cout <<"Dimension: ";
    cin >>n;
    cout <<endl;
    A=new int*[n];
    for (int i=0; i<n; i++) A[i]=new int[n];
 
    //Случайные целые числа в диапазоне [-100, 100].
 
    srand (time(NULL));
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
        A[i][j]=(rand()%401-200);
        cout <<A[i][j]<<'\t';
      }
    cout <<endl;
    }
 
    for (int i=0, j=n-1; j!=-1; i++, j--) {
        if (A[i][j]<0 && A[i][j]%2!=0) p=p*A[i][j];
    }
 
    cout <<"\nP="<<p<<endl;
 
    //Расчет количества целых положительных на главной диагонали.
    for (int i=0, j=0; i<n || j<n; i++, j++) {
        if (A[i][j]>0 && A[i][j]%2==0) Num++;
    }
    cout <<"Num="<<Num<<endl;
 
    for (int j=0; j<n; j++) delete []A[j];
    delete []A;
    system ("pause");
    return 0;
}
//---------------------------------------------------------------------------
0
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
24.06.2010, 17:45 #5
Red Planet, в задании не написано, что матрица квадратная, только в программе
brenor01 можно это рассмотреть)). Но суть-то не в этом, в вашей программе, если не будет ни одного отрицательного нечетного числа побочной диагонали матрицы, то произведение все равно будет равно 1, хотя оно, по идее, должно быть равно 0. А если будут такаие числа, то все правильно считает, хотя не понятно, почему граница j!=-1... не все выходы из цикла продуманы.
это
C++
1
i<n || j<n
тоже смущает, оба эти условия должны строго выполняться
0
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
24.06.2010, 18:47 #6
Цитата Сообщение от NNN777 Посмотреть сообщение
Red Planet, в задании не написано, что матрица квадратная
Если логически подумать, то главную диагональ можно провести лишь у квадратной матрицы. Как вы проведете у матрицы произвольной размерности?

Цитата Сообщение от NNN777 Посмотреть сообщение
если не будет ни одного отрицательного нечетного числа побочной диагонали матрицы, то произведение все равно будет равно 1, хотя оно, по идее, должно быть равно 0
Тоже думал над этим, но, мне кажется, это чисто философский вопрос, чему оно должно быть равно изначально: единице ли, нулю ли или еще Бог знает чему.

Цитата Сообщение от NNN777 Посмотреть сообщение
почему граница j!=-1... не все выходы из цикла продуманы.
В случае с квадратной матрицей все выходы продуманы: конец будет тогда, когда достигнем j==0 (левый столбец) или же тогда, когда достигнем последней строки. А эти два события произойдут в случае квадратной матрицы одновременно. Так что можно выбрать любое условие из этих двух.

Цитата Сообщение от NNN777 Посмотреть сообщение
i<n || j<n
тоже смущает, оба эти условия должны строго выполняться
То же самое, что и в предыдущем случае: конец по строкам и конец по столбцам достигаются одновременно. Поэтому еще лучше будет так.
C++
1
2
3
for (int i=0, j=0; i<n; i++, j++) {
        if (A[i][j]>0 && A[i][j]%2==0) Num++;
    }
0
Scythian
58 / 58 / 8
Регистрация: 01.01.2010
Сообщений: 222
24.06.2010, 21:09 #7
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
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <vcl>
#pragma hdrstop
 
using namespace std;
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
    int **A, m, n, p=1, Num=0;
    cout <<"Rows: ";
    cin >>m;
    cout <<"Cols: ";
    cin >>n;
    cout <<endl;
    A=new int*[m];
    for (int i=0; i<m; i++)
     A[i]=new int[n];
 
    //Случайные целые числа в диапазоне [-100, 100].
    srand (time(NULL));
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
        {
            A[i][j]=(rand()%401-200);
            cout <<A[i][j]<<'\t';
        }
        cout <<endl;
    }
 
 
    for (int i=0;i<m ;i++)
        if (A[i][(m-1)-i]<0 && A[i][(m-1)-i]%2!=0)
                p*=A[i][(m-1)-i];
    cout<<"\nP= "<<p<<endl;
   getch();
    return 0;
}
//---------------------------------------------------------------------------
Вот вроде бы работает
0
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
25.06.2010, 11:35 #8
brenor01, вам теперь даже выбрать можно между моей программой и программой Scythian'а. На ваше усмотрение.
0
Хохол
Эксперт С++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 11:40 #9
Цитата Сообщение от Red Planet Посмотреть сообщение
Цитата Сообщение от NNN777 Посмотреть сообщение
если не будет ни одного отрицательного нечетного числа побочной диагонали матрицы, то произведение все равно будет равно 1, хотя оно, по идее, должно быть равно 0
Тоже думал над этим, но, мне кажется, это чисто философский вопрос, чему оно должно быть равно изначально: единице ли, нулю ли или еще Бог знает чему.

Общепринято, что произведение нулевого количества множителей есть единица, так же как сумма нулевого количества слагаемых - ноль.
0
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
25.06.2010, 13:09 #10
Хохол, значит и менять мне в программе ничего не нужно.
0
Хохол
Эксперт С++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
25.06.2010, 13:15 #11
Именно.
0
25.06.2010, 13:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2010, 13:15
Привет! Вот еще темы с ответами:

Матрица - C++
Добрый вечер, вопрос в следующем, есть матрица, в которую можно записать три числа. Как сделать, чтобы при введение этих трех чисел...

МАТРИЦА!!! - C++
ввести матрицу 5*5 типа LNT отсортировать строки в порядке возрастания суммы элементов каждой строки

Матрица - C++
Дана матрица A(n,m). Найти сумму тех элементов, которые являются квадратами некоторого числа m.

Матрица - C++
В какой строке матрицы A(mхn) определить количество элементов, значения коториых принадлежат промежутку . Строку, содержащую максимальное...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru