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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Андрей\
3 / 3 / 0
Регистрация: 13.12.2011
Сообщений: 22
#1

Заполнение матрицы по диагонали змейкой - C++

14.12.2011, 12:44. Просмотров 1897. Ответов 5
Метки нет (Все метки)

будьте добры ,помогите написать програму: заполнение матрицы введенными с клавиатуры числами по диагонали змейкой по принципу
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
я уже все перепробовал не могу написать заполнение именно числами введенными с клавиатуры ,хотя говорят принцип перехода не сложный
помогите пожалуйста, если не сложно

Добавлено через 15 часов 47 минут
объясните хотя бы принцип по которому элементы из введенной матрицы переносятся в нужную
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2011, 12:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнение матрицы по диагонали змейкой (C++):

Заполнение матрицы змейкой по диагонали - C++
Дано натуральное N (1<=N<=10). Заполнить матрицу порядка NxN целыми числами 0, 1, 2, 3, …, NxN – 1 по диагонали(из правого верхнего угла...

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

Заполнение матрицы змейкой - C++
Подскажите как мне изменить код #include <iostream> #include <iomanip> using namespace std; int main() { int n; ...

Заполнение матрицы змейкой - C++
Здравствуйте, нужно заполнить матрицу змейкой(картинка змейки вложена). Матрица NxN (1<=N<=10), заполнить числами от 1 до N^2 - 1 по...

Заполнение не квадратной матрицы по диагоналям змейкой - C++
Пробовал написать программу, но мой вариант адекватно работает только с квадратными матрицами. Помогите подправить программу. Вот код: ...

Заполнение квадратной матрицы змейкой по горизонтали - C++
помогите пожалуйста Даны числа n и m. Создайте массив A и заполните его змейкой вот код #include <iostream> using namespace std; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
14.12.2011, 21:24 #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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <stdio.h>
#include <stdlib.h>
 
int **allocate_matrix(int nrow, int ncol)
{
    int **p, i;
 
    if ((p = 
        (int **) malloc(nrow * sizeof(int *))) == NULL)
            return NULL;
    for (i = 0; i < nrow; i++)
        if ((p[i] =
            (int *) malloc(ncol * sizeof(int))) == NULL) {
                while (--i >= 0)
                    free(p[i]);
                free(p);
                return NULL;
        }
    return p;
}
 
void free_matrix(int **m, int nrow)
{
    while (--nrow > 0)
        free(m[nrow]);
    free(m);
}
 
int **snake_fill(int **m, int ord,
    int direction, int (*gen)(void))
{
    int i, j;
    
    /*
     * direction == 1  means direction from  
     * the left bottom corner to the right top one.
     * ... == 0  means the opposite.
     * Function parameter of the same name sets
     * the direction to be started from.
     */
    i = j = 0;
    /* 
     * First cycle fills the first part which
     * includes diagonal:
     *
     *      * * * *
     *      * * *
     *      * *
     *      *
     */
    for (;;) {
        if (direction == 0) {
            do {                   
                m[i++][j--] = gen();
            } while (j >= 0);
            j++;
            direction ^= 1;
            if (i == ord)
                break;
        } else { /* from the right top to the left bottom */
            do { 
                m[i--][j++] = gen();
            } while (i >= 0);
            i++;
            direction ^= 1;
            if (j == ord)
                break;
        } /* end of else block */
    } /* end of cycle for */
 
    if (direction == 0) {
        i = 1;
        j = ord - 1;
    } else {
        i = ord - 1;
        j = 1;
    }
 
    /* 
     * Second cycle fills the second part:
     *
     *             *
     *          * *
     *       * * *
     */
    while (i != ord && j != ord) {
        if (direction == 0) {
            do {                   
                m[i++][j--] = gen();
            } while (i < ord);
            i--;
            j += 2;
        } else {
            do {
                m[i--][j++] = gen();
            } while (j < ord);
            j--;
            i += 2;
        } /* end of else block */
        direction ^= 1;
    } /* end of cycle for */
    return m;
}
 
int getnumber(void)
{
    int n;
 
    scanf("%d", &n);
    return n;
}
 
int main()
{
    int **m, ord, i, j;
 
    printf("enter a size of the square matrix:\n");
    scanf("%d", &ord);
    m = allocate_matrix(ord, ord);
 
    printf("enter the elements:\n");
    snake_fill(m, ord, 0, getnumber);
    
    putchar('\n');
    for (i = 0; i < ord; i++) {
        for (j = 0; j < ord; j++)
            printf("%2d ", m[i][j]);
        putchar('\n');
    }
    free_matrix(m, ord);
    return 0;
}
пример работы
enter a size of the square matrix:
4
enter the elements:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
Press any key to continue . . .
2
Андрей\
3 / 3 / 0
Регистрация: 13.12.2011
Сообщений: 22
14.12.2011, 21:27  [ТС] #3
огромное спасибо
0
Андрей\
3 / 3 / 0
Регистрация: 13.12.2011
Сообщений: 22
26.12.2011, 13:50  [ТС] #4
А еще не могли бы вы подсказать как изменить программу чтобы она вместо чисел считывала одномерный массив
по принципу
Введите В[1]
Введите B[2]
.................
и тд.
Буду очень благодарен
0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.12.2011, 21:09 #5
замените соответствующие участки кода следующим:
C
1
2
3
4
5
6
7
8
9
10
int index;
 
int getnumber(void)
{
        int n;
 
        printf("enter m[%d]:\n", index++);
        scanf("%d", &n);
        return n;
}
C
1
2
        index = 0;
        snake_fill(m, ord, 0, getnumber);
1
Андрей\
3 / 3 / 0
Регистрация: 13.12.2011
Сообщений: 22
26.12.2011, 21:17  [ТС] #6
дело в том, что нужно вывести введенные данные
буду разбираться
еще раз спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2011, 21:17
Привет! Вот еще темы с ответами:

Заполнение квадратной матрицы змейкой по вертикали - C++
помогите пожалуйста!!!!заполнить квадратную матрицу змейкой по вертикали!!! вот так: 1 8 9 2 7 10 3 6 11 4 5 12... зарание...

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

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

Заполнение змейкой - C++
заполнение матрицы по диагонали змейкой по принципу 1 3 4 10 2 5 9 11 6 8 12 15 7 13 14 16. Программа работает при вводе данных с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.12.2011, 21:17
Ответ Создать тему
Опции темы

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