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

Заполнение змейкой - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Можно ли спомощью такого цикла все элементы массива вывести в обратном порядке? http://www.cyberforum.ru/cpp-beginners/thread621470.html
можно ли спомощью такого цикла все элементы массива вывести в обратном порядке? for(i=n;i=0;i--)
C++ С одной cpp в другую Господа, вот ниже два куска кода, как сделать так чтобы результат ARB_multitexture_supported приходил во вторую cppшку? В общем как ее туда правильно перекинуть? bool SetUpARB_multitexture() {... http://www.cyberforum.ru/cpp-beginners/thread621467.html
C++ Win32 API, LRESULT CALLBACK, ошибки
Помогите исправить ошибки #include<windows.h> #include<commctrl.h> const IDM_Enable_Disable=0; const IDM_Exit=1; const IDM_About=2; const IDP_File=3; const IDP_Help=4; char* pMessages=
C++ Сортировать массивы по возрастанию и по убыванию.
1. Дано одномерный массив, состоящий из 20и элементов. Сортировать эти массивы по возрастанию и по убыванию. Например: Дано:1 4 7 2 5 8 3 6 9 10 15 13 12 14 11 В Итоге: 1 2 3 4 5 6 7 8 9 10 11...
C++ Функции для работы с ole2 strorage http://www.cyberforum.ru/cpp-beginners/thread621455.html
Народ, кто-нибудь может подсказать функцию для работы с ole2 strorage, аналогичную StgOpenStorage(), которой можно было бы пользоваться под линуксом?
C++ Сортировать по возрастанию(по алфавиту) 2. Символьный массив, состоящий из 15и символов. Сортировать их по возрастанию(по алфавиту). Например: Дано: ф а п р б г д . . . . В итоге:а б г д п р ф . . . . подробнее

Показать сообщение отдельно
prettynetty
2 / 2 / 1
Регистрация: 09.07.2012
Сообщений: 14

Заполнение змейкой - C++

09.07.2012, 19:51. Просмотров 1096. Ответов 3
Метки (Все метки)

заполнение матрицы по диагонали змейкой по принципу
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16.
Программа работает при вводе данных с клавиатуры. А мне нужно, чтобы можно было данные брать и из файла. не могу под файл сделать
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru