Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 5

Динамически выделить память под верхний треугольник квадратной матрицы

12.04.2009, 02:56. Показов 2726. Ответов 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
44
45
46
47
48
49
#include "stdafx.h"
#include <iostream>
//#include <math.h>
using namespace std;
void main(void)
{
setlocale(LC_ALL,".1251");
int i, j, N, k = 0, l = 0, x = 0, q = 0, *a, y = 0, s = 0;
double sr = 0, sum = 0, *c, min =0, max = 0;
cout<<" Программа:"<<endl;
cout<<" 1) Вводит целочисленную квадратную матрицу, такую, что а[i,j]=a[j,i] для всех i,j;"<<endl;
cout<<" 2) Находит максимальный элемент в тех столбцах, которые не содержат положительных элементов"<<endl;
cout<<" 3) Находит минимум среди средних значений элементов диагоналей, параллельных побочной диагонали матрицы"<<endl<<endl;
while(1 == 1)
{
cout<<endl<<"Задайте размер матрицы(N <= 10): ";
cin>>N;
if(N <= 10 && N > 1) break;
else cout<<endl<<"Будьте внимательны при вводе! Некорректный размер матрицы!!!"<<endl;
 
}
 
s = N;
a = new int [N];
c = new double [N];
 
int **mas = new int*[N];
for(i = 0; i < N; i++)
{
mas[i] = new int[N-i];
//s--;
}
 
 
cout<<"Введите элементы матрицы, расположенные выше главной диагонали, включая главную диагональ:"<<endl;
for(i = 1; i <= N; i++ )
{
k++;
for(j = k; j <= N; j++)
{
 
cout<<"Элемент матрицы ["<<i<<"]["<<j<<"] = ";
 
cin>>mas[i-1][j-1];
cout<<"element ["<<i-1<<"]["<<j-1<<"]="<<mas[i-1][j-1]<<endl<<endl;
 
}
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2009, 02:56
Ответы с готовыми решениями:

Напечатать верхний треугольник квадратной матрицы
Квадратная матрица задана в виде одномерного массива по строкам. Напечатать верхний треугольник матрицы (включая элементы главной...

Динамически выделить память под массив
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...

Динамически выделить память под массив
Добрый день форусчани Как можно выделить память под массив объекта класса class Save_Colection { public: pk *field; ...

7
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 12:35
ошибка была в вводе, а не в выделении..вот рабочий вариант:

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
#include<iostream>
using namespace std;
 
 
void main(void)
{
    setlocale(LC_ALL,".1251");
    int i, j, N, k = 0, l = 0, x = 0, q = 0, *a, y = 0, s = 0;
    double sr = 0, sum = 0, *c, min =0, max = 0;
 
    cout<<" Программа:"<<endl;
    cout<<" 1) Вводит целочисленную квадратную матрицу, такую, что а[i,j]=a[j,i] для всех i,j;"<<endl;
    cout<<" 2) Находит максимальный элемент в тех столбцах, которые не содержат положительных элементов"<<endl;
    cout<<" 3) Находит минимум среди средних значений элементов диагоналей, параллельных побочной диагонали матрицы"<<endl<<endl;
    while(true)
    {
        cout<<endl<<"Задайте размер матрицы(N <= 10): ";
        cin>>N;
        if(N <= 10 && N > 1) break;
            else cout<<endl<<"Будьте внимательны при вводе! Некорректный размер матрицы!!!"<<endl;
    }
 
    s = N;
 
    a = new int [N];
    c = new double [N];
 
    int **mas = new int*[N];
    for(i = 0; i < N; i++)
        mas[i] = new int[N-i];
 
 
    cout<<"Введите элементы матрицы, расположенные выше главной диагонали, включая главную диагональ:"<<endl;
    for(i = 0; i < N; i++ )
    {
        for(j = 0; j < N-i; j++)
        {
            cout<<"Элемент матрицы ["<<i+1<<"]["<<j+1<<"] = ";
            cin>>mas[i][j];
        }
    }
}
1
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 5
12.04.2009, 22:08  [ТС]
Весьма Вам благодарен! Спасибо! Все работает!

Добавлено через 8 часов 32 минуты 1 секунду
C++
1
2
3
4
5
6
7
8
9
cout<<"Введите элементы матрицы, расположенные выше главной диагонали, включая главную диагональ:"<<endl;
        for(i = 0; i < N; i++ )
        {
                for(j = 0; j < N-i; j++)
                {
                        cout<<"Элемент матрицы ["<<i+1<<"]["<<j+1<<"] = ";
                        cin>>mas[i][j];
                }
        }

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

написанный мной фрагмент опять не работает...
C++
1
2
3
4
5
6
7
8
9
cout<<"Введите элементы матрицы, расположенные выше главной диагонали, включая главную диагональ:"<<endl;
        for(i = 0; i < N; i++ )
        {
                for(j = i; j < N; j++)
                {
                        cout<<"Элемент матрицы ["<<i+1<<"]["<<j+1<<"] = ";
                        cin>>mas[i][j];
                }
        }
у меня вопрос, в суть которого я не внедрялся изначально:

при динамическом выделен
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 22:18
не понял.. что не понятно?
1
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 5
12.04.2009, 22:18  [ТС]
похоже, что я понял, в чем дело...
при записи mas[i] = new int[N-i]
new int[N-i] означает, что выделяется память не просто для 0..(N-i) элементов массива, но
и эти элементы должны иметь соответствующие индексы...
например, mas[2]=new int[2] означает, что выделяется память под элементы [2][0], [2][1]...
в моем случае получалось так: mas[2]= new int[1] и 1 один я трактовал как количество элементов, но никак не как индекс... то есть память выделяется и под соответствующие индексы? надеюсь, теперь-то я разобрался?..))
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 22:24
ну да...

как бы выходило для N=5:

C++
1
2
3
4
5
mas[0] = new int[5];  // mas[0][0], mas[0][1], mas[0][2], mas[0][3], mas[0][4]
mas[1] = new int[4];  // mas[0][0], mas[0][1], mas[0][2], mas[0][3]
mas[2] = new int[3];  // mas[0][0], mas[0][1], mas[0][2]
mas[3] = new int[2];  // mas[0][0], mas[0][1]
mas[4] = new int[1];  // mas[0][0]
1
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 5
12.04.2009, 22:26  [ТС]
в моем случае, похоже, память придется выделять под нижний треугольник относительно побочной диагонали, ибо под верхний треугольник уйдет лишняя память...


Monte-Cristo, спасибо большое за участие... уж извиняйте, что я пока такой дилетант..
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 22:38
все мы когда-то были делетантами.. да и остались... ибо познать все, увы, не возможно

для нижнего треугольника выделять так

C++
1
2
3
        int **mas = new int*[N];
        for(i = 0; i < N; i++)
                mas[i] = new int[i+1];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.04.2009, 22:38
Помогаю со студенческими работами здесь

Динамически выделить память под массив функций
QByteArray (SerfingThread::*lp_GetRequest)(const QByteArray&amp; ,const QByteArray&amp;); как сделать тоже самое только через new? как правильно...

Выделить память под двумерный массив динамически
Маюсь уже неделю, не могу выделить динамическую память под двумерный массив(чистый Си), чтобы на вход подавать файлы любого размера....

Выделить динамически память под размер файла
Доброго времени суток. Вот имеется такой код, пытаюсь выделить область памяти под файл, но постоянно выдаёт ошибку. .386 dseg...

Можно ли динамически выделить память под массив указателей, на объекты класса?
Прошу прощения если не правильно назвал вопрос. Не знаю как правильно сформулировать. Можно ли строчку VisualizationTools* VT; заменить...

Узнать количество структур в файле и динамически выделить память под них
Доброго времени суток. Начал писать некую программу, работающую со структурами. Появились такие вопросы: 1) Как можно узнать количество...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru