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

Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз - C++

Восстановить пароль Регистрация
 
KrotZaDroT
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 22
24.04.2014, 11:06     Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз #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
#include <stdio.h>
#include <conio.h>
#include <iostream>
int main()
{
    setlocale(LC_ALL, "Russian");
    int n, k, j, i;
    int *a= new int[i][j];
    k = 1;
    printf_s("ввелите размерность матрицы i и j= \n");
    scanf_s("%d%d", i, j);
    for (i = 1; i < n; i++)
    {
        for (j = 0; j <= i ; j++);
        {
            a[i - j][j] = k++; 
        }
    }
    for (j = 1; j < n; j++);
    {
        for (i = 0; i <= n - 1 - j; i++)
        {
            a[n - 1 - i][j + 1] = k++;
        }
    }
    for(i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++);
    }
    printf_s("%3d", &*a[i][j]);
    printf_s("\n");
    delete[]a;
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2014, 11:06     Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз
Посмотрите здесь:

C++ Заполнить матрицу линейной последовательностью (0-81), от левого верхнего угла по диагонали: вправо - вверх
Заполнить матрицу ЛП, от левого верхнего угла по спирали: вправо - вниз - влево - вверх. C++
(CИ)Заполнить матрицу ЛП, от центра по спирали: влево - вниз - вправо - вверх. C++
Заполнить матрицу, от левого верхнего угла по диагонали: вправо - вверх C++
C++ Заполнить матрицу ЛП, от левого нижнего угла по диагонали: влево - вверх.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Ellen_
15 / 15 / 5
Регистрация: 28.11.2013
Сообщений: 50
24.04.2014, 12:18     Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз #2
Для начала Вы умудряетесь динамически (?) создать массив, если я правильно поняла эту строку
Цитата Сообщение от KrotZaDroT Посмотреть сообщение
int *a= new int[i][j];
до того, как узнаете его размерность. Сначала нужно узнать значения i и j.

Двумерный массив создается немного иначе

C++
1
2
3
int ** a = new int * [i];
for (int count = 0; count < i; count++)
     a[count] = new int [j];
И удалить не забыть нужно.
KrotZaDroT
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 22
24.04.2014, 12:44  [ТС]     Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз #3
сделал примерно как вы сказали, но все равно выдает ошибку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
setlocale(LC_ALL, "Russian");
    int n, i, j, k;
    int **a = new int*[i];
    for (int i = 0; i < n; i++) a[i] = new int[j];
    k = 1;
    printf_s("введите размерность массива n: \n");
    scanf_s("%d",&n);
    for (i = n; i = -n + 1; i--)
    for (j = 1; j < n; j++)
    if (j + i>0  && j + i <= n)
    {
        k = k + 1;
        a[i + j] = k;
    }
    for (i = 1; i < n; i++)
    for (j = 1; j < n; j++)
        printf_s("%d%d", a[i], a[j]);
    _getch();
    return 0;
_Ellen_
15 / 15 / 5
Регистрация: 28.11.2013
Сообщений: 50
24.04.2014, 13:01     Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз #4
Примерно

Сначала мы вводим размерность массива (n).

Потом создаем динамический двумерный массив. В Ваших буквах это так:
C++
1
2
3
int ** a = new int * [n];
for (int count = 0; count < n; count++) 
    a[count] = new int[n];
А после этого уже начинаем заполнять.

Цитата Сообщение от KrotZaDroT Посмотреть сообщение
a[i + j] = k;
Вот эта строка непонятна. Должно быть два индекса типа a[i][j].
KrotZaDroT
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 22
24.04.2014, 13:13  [ТС]     Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз #5
простите, если надоедаю из за своей тупости.
так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int n, i, j, k;
    int **a = new int*[i];
    for (int i = 0; i < n; i++) 
        a[i] = new int[j];
    k = 1;
    printf_s("введите размерность массива n: \n");
    scanf_s("%d",&n);
    for (i = 0; i = -n + 1; i--)
    for (j = 1; j < n; j++)
    if (j + i>0  && j + i <= n)
    {
        k = k + 1;
        a[i + j][j] = k;
    }
    for (i = 1; i < n; i++)
    for (j = 1; j < n; j++)
    printf_s("%d%d", a[i][j]);
    _getch();
    return 0;
_Ellen_
15 / 15 / 5
Регистрация: 28.11.2013
Сообщений: 50
24.04.2014, 15:49     Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз #6
C++
1
2
3
4
5
6
printf_s("введите размерность массива n: \n");
scanf_s("%d",&n); // узнали размерность
 
int ** a = new int * [n];
for (int count = 0; count < n; count++) 
     a[count] = new int[n]; // только после этого создаем массив размером nxn
Переменную k сначала скорее всего нужно инициализировать нулем (иначе первому элементу будет сразу присвоено значение 2), но в алгоритме заполнения сейчас нет в времени разобраться, к сожалению. Чуть позже.

Добавлено через 2 часа 3 минуты
Заполнять, например, так:
C++
1
2
3
4
5
6
7
k = 0;
 
for (int s = 0; s < 2*n - 1; s++)
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            if (i+j == s)
                a[i][j] = ++k;
И массив Вы же двумерный удаляете...

C++
1
2
3
for (i = 0; i<n; i++)
        delete [] a[i];
delete [] a;
Yandex
Объявления
24.04.2014, 15:49     Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево - вниз
Ответ Создать тему
Опции темы

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