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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Bloody Body
2 / 2 / 1
Регистрация: 20.11.2013
Сообщений: 12
#1

Зануление элементов матрицы ниже главной диагонали - C++

20.11.2013, 13:47. Просмотров 1394. Ответов 2
Метки нет (Все метки)

Здравствуйте.

Мне нужно занулить матрицу ниже главной диагонали. Я написал нижеприведённый код, но он почему-то не работает. На указанной в коде строке на шаге, когда i=0, j=1, k=1, появляется ошибка Integer division by zero. Но при этом вне цикла при тех же параметрах ошибка не возникает, и вычисление производится верно.

Заранее благодарю за помощь.

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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    int A[10][10];
    int u, q, nok;
    cout<<"Введите длину стороны матрицы: ";
    cin>>u;
    if (u<=1)
        cout<<"Не может быть";
    else
    {
        for (int i=0; i<u; i++)//Ввод матрицы
        {
            cout<<"Введите "<<i+1<<"-ю строку:\n";
            for (int j=0; j<u; j++)
                cin>>A[i][j];
        }
        for (int i=0; i<u; i++)
        {
            cout<<"Введите "<<i+1<<"-й свободный член:\n";
            cin>>A[i][u];
        }
        cout<<"\n";
        for (int i=0; i<u; i++)//Вывод матрицы
        {
            for (int j=0; j<u+1; j++)
            {
                if (j==u)
                    cout<<"|"<<"    "<<A[i][j]<<"\n";
                else
                    cout<<A[i][j]<<"    ";
            }
        }
        int i=0;                                                                // --
        int j=i+1;                                                              //  |
        int k=i+1;                                                              //  |
        q=0;                                                                    //  |
        nok=1;                                                                  //  |
        while(q==0)                                                             //  |
        {                                                                       //  | Проверка вне
            if((nok%A[i][i]==0)&&(nok%A[j][i]==0))                              //  | цикла
                q=q++;                                                          //  |
            else                                                                //  |
                nok=nok++;                                                      //  |
        }                                                                       //  |
        cout<<"\n"<<((nok/A[j][i])*A[j][k])-((nok/A[i][i])*A[i][k])<<"\n"<<"\n";// --
        for (int i=0; i<u; i++)//Номер изменяющей строки
        {
            for (int j=i+1; j<u; j++)//Номер изменяемой строки
            {
                q=0;
                nok=1;
                while(q==0)//Нахождение наименьшего общего кратного первых элементов
                {
                    if((nok%A[i][i]==0)&&(nok%A[j][i]==0))
                        q=q++;
                    else
                        nok=nok++;
                }
                for (int k=i; k<u+1; k++)//Номер изменяемого элемента
                {
                    A[j][k]=((nok/A[j][i])*A[j][k])-((nok/A[i][i])*A[i][k]);
                    /*^На этой строке происходит ошибка^*/
                    cout<<A[j][k]<<"\n";
                }
            }
        }
        for (int i=0; i<u; i++)//Вывод преобразованной матрицы
        {
            for (int j=0; j<u+1; j++)
            {
                if (j==u)
                    cout<<"|"<<"    "<<A[i][j]<<"\n";
                else
                    cout<<A[i][j]<<"    ";
            }
        }
    }
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 13:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зануление элементов матрицы ниже главной диагонали (C++):

Отсортировать диагонали матрицы,расположенные выше главной, по убыванию элементов, а диагонали матрицы, расположенные ниже главной, по возрастанию - C++
дана матрица размерностью nxn, содержащая целые числа. Отсортировать диагонали матрицы,расположенные выше главной, по убыванию элементов, а...

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

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

Найти сумму элементов матрицы ниже главной диагонали, и произведение элементов выше нее - C++
Добрый день, помогите найти ошибку в коде, вот задание: В матрице размером n х n найти сумму элементов, лежащих ниже главной...

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

Найти произведение элементов матрицы, лежащих ниже главной диагонали - C++
Дана целочисленная матрица. найти произведение элементов матрицы, лежащий ниже главной диагонали.

2
BigProgrammer
38 / 38 / 3
Регистрация: 20.07.2013
Сообщений: 105
20.11.2013, 16:54 #2
Обратите внимание на строчку
C++
1
q=q++;
Оператор ++ может выполниться раньше оператора =, и после выполнения данной инструкции значение q останется неизменным. Чтобы увеличить q на 1, можно писать, например,
C++
1
q++;
.
Ошибка "Integer division by zero" означает "целочисленное деление на нуль". Если посмотреть на строку, причиняющую ошибку, то это означает, что одно из значений A[j][i] или A[i][i] равно нулю. Вероятно, алгоритм в данном виде написан неправильно, и должен включать проверку на 0 указанных значений.
1
Bloody Body
2 / 2 / 1
Регистрация: 20.11.2013
Сообщений: 12
20.11.2013, 17:48  [ТС] #3
Спасибо, я уже нашёл ошибку. В цикле на первой итерации зануляется значение A[1][0], а на следующей, на это значение производится деления. Я просто слепой лопух =)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2013, 17:48
Привет! Вот еще темы с ответами:

Сумма элементов квадратной матрицы, расположенных ниже главной диагонали - C++
Написать функцию для вычисления суммы элементов квадратной матрицы, которые расположены ниже главной диагонали. С ее помощью найти...

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

Определить: сумма элементов выше главной диагонали меньше суммы элементов ниже главной диагонали? - C++
Дана квадратная матрица натуральных чисел,( получаемая через rand()) .Определить, верно ли утверждение: сумма эллементов выше главной...

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


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

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

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