Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933

Помогите найти ошибку при вычислении определителя матрицы

27.08.2015, 14:44. Показов 700. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задача:

Кликните здесь для просмотра всего текста
Тим разрабатывает модули для QA-системы iNdium-Beta, позволяющей выполнять различные математические расчеты. Тим хочет проверить работу модуля, вычисляющего с помощью распараллеливания определитель матрицы. Для тестирования он решил использовать матрицу A, элементы которой вычисляются следующим образом.
Ai,j=Bi+j−1
где Bk – первое число в k-й строке числового треугольника, построенного следующим образом. k-я строка треугольника содержит k чисел. Первая строка содержит число 1. Следующая строка треугольника начинается с последнего числа в предыдущей строке, а следующие числа в строке получаются как сумма предыдущего числа в строке и числа над ним.
1
1 2
2 3 5
5 7 10 15
15 20 27 37 52
52 67 87 ...
...
Например, матрица 3 × 3 будет выглядеть так:
1 1 2
1 2 5
2 5 15
Чтобы убедиться, что его модуль работает правильно, Тиму нужно знать значение определителя для матрицы A заданного размера.
Формат ввода:
Первая строка ввода одно целое число N (1 ≤ N ≤ 1000) – размер матрицы A.
Формат вывода:
В первой строке вывести одно целое число — определитель матрицы по модулю 10^9+9.
Пример ввода
3
Пример вывода
2

________________________________________ _______
1) Мне не понятно как получается матрица 3х3
2) "В первой строке вывести одно целое число — определитель матрицы по модулю 10^9+9."
т.е посчитать определитель матрицы и еще взять по этому модулю? Но я посчитал определитель ответ получился 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
#include<iostream>
int main()
{
    const int N = 7;
    using namespace std;
    int mass[N][N];
    
    for (int i = 0; i < N; i++  )
    {
    
        for (int j = 0; j <= i; j++ )
        {
            
            if ((i == 0 && j == 0) || (i == 1 && j == 0)) // вывожу 0 строку и 0 столбец и 1 строку 0 столбец
                                   //для определенности  
            {
            mass[i][j] = 1;
            cout<<mass[i][j]<<"\t";
            }
            else if ((i > 0) && (j == 0))   // здесь начиная со второй строки  (2 3 5) будет выводится последняя 
                                // цифра в предыдущей строке
            {
                mass[i][j] = 0; // изначально обнулю, но можно было и не делать, выводил просто проверить       
                cout<<mass[i-1][j + i]<<"\t"; // собственно из условия
                
            }
            else
            {
                mass[i][j] = 0;
                cout<<(mass[i-1][j-1] + mass[i][j-1])<<"\t"; // назад на 1 строку и столбец + эта же строка 
                                      // и назад 1 столбец
            }
            
        }
    
        
        cout<<endl;
    }
    
    return 0;
}
Но что то пошло ни так и выводится фигня. Где я лажанул?

Никакие решения мне не нужны нужна лишь подсказка по вопросам. Сдавать мне её никому не надо просто из какой то олимпиады взял. Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2015, 14:44
Ответы с готовыми решениями:

Вычисление определителя матрицы (помогите исправить ошибку)
program zav9; uses crt; const n=3; var a: array of integer; i,j,d: integer; begin writeln ('Shkurko'); for i:= 1 to n do ...

Помогите найти ошибку в вычислении выражения
A/B - 42, если A&gt;B -11, если А=В (A*A - 8)/A, если А&lt;В Первые два случая работают нормально, а третий случай программа не видит....

Найти ошибку при вычислении выражения
вот прога не могу найти ошибку Program Fak; var x: word; procedure POK(i:word); begin writeln(i); if i=1 then exit; if...

5
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
27.08.2015, 16:31
Вначале просчитывается числовой треугольник
число комментарий число комментарий число комментарий число комментарий
1 начальное значение      
1 повтор последнего значения в предыдущей строке 2 1 + 1    
2 повтор последнего значения в предыдущей строке 3 1 + 2 5 2 + 3  
5 повтор 7 2 + 5 10 3 + 7 15 10 + 5
Далее цикл по всем i и j, заполняем матрицу на основе формулы и этой таблички

Добавлено через 1 минуту
Цитата Сообщение от Senarist Посмотреть сообщение
Так же непонятно сколько должно быть строк.
Строк в матрице и треугольнике равно введённому числу
1
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
27.08.2015, 16:40  [ТС]
Цитата Сообщение от mymedia Посмотреть сообщение
Строк в матрице и треугольнике равно введённому числу
В момент компиляции или в процессе программы?
0
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
27.08.2015, 16:43
Цитата Сообщение от Senarist Посмотреть сообщение
В момент компиляции или в процессе программы?
В момент выполнения, конечно же. Ведь её длинна зависит от введёного числа.
Кстати, можно ещё так соптимизировать: заполнять матрицу сверху вниз, тогда можно будет хранить лишь только текущую и предыдущую строки таблицы.
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 933
27.08.2015, 16:54  [ТС]
Цитата Сообщение от mymedia Посмотреть сообщение
В момент выполнения, конечно же
т.е я должен работать с динамической памятью?
0
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
27.08.2015, 17:06
Цитата Сообщение от Senarist Посмотреть сообщение
т.е я должен работать с динамической памятью?
Да.

Добавлено через 7 минут
Я бы создал два массива (вектора).
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::vector<int> current, previous;
for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
        A[i][j] = current[0] + j + 1;
    }
    previous = std::move(current);
    current.clear();
    current.push_back(previous[previous.size() - 1]);
    for (int j = 0; j < i; j++) {
        current.push_back(previous[i] + current[i]);
    }
}
Как-то так, наверное…
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.08.2015, 17:06
Помогаю со студенческими работами здесь

Найти ошибку при вычислении выражения
Var x,y,t,i: integer; b: array of integer; a: array of array of integer; Begin For i:=1 to 64 do b:=1; i:=1; For i:=1 to 64...

Найти ошибку при вычислении выражения
Помогите найти ошибку и исправить ее. Program proba; Var a,x:integer; begin write('vvedite x='); readln(x); ...

Найти ошибку при вычислении выражения
program primer; var ...

Найти и исправить ошибку при вычислении выражения
проверьте код, не могу найти и исправить ошибку #include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int main() {int...

Найти ошибку(ошибки) при вычислении суммы
функция y=\frac{\left( {S}^{3}+0.01n\right)}{S+3} s=m\sum_{k=1}^{20}\frac{1}{{k}^{2}} Написал следующее. Где-то должна быть...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru