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

Функция не изменяет масссив

12.09.2014, 22:48. Показов 474. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема в функции RemoveToRight
Я проверял, вход в функцию есть, но что-то не правильно, функция не работает как нужно, числа в права не идут как нужно
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include <iostream>
#include <algorithm>
#include <time.h>
 
void PrintMap(int (&myMap)[4][4]);
int BuildPositionForX(int (&myMap)[4][4]);
int BuildPositionForY(int (&myMap)[4][4]);
int BuildNumber();
void BuildNewMap(int (&myMap)[4][4], int, int, int);
 
void RemoveToRight(int (&myMap)[4][4]);
void RemoveToLeft(int (&myMap)[4][4]);
void RemoveUp(int (&myMap)[4][4]);
void RemoveDown(int (&myMap)[4][4]);
 
 
int main()
{
    
    srand(time(0));
    int map[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
    PrintMap(map);
    while(true) 
    {
    
    char move;
    std ::cin >> move;
    if(move == 'w') RemoveUp(map);
    if(move == 'd'){
        int myX = BuildPositionForX(map);
        int myY = BuildPositionForY(map);
        int theNumber = BuildNumber();
        RemoveToRight(map);
        PrintMap(map);
        BuildNewMap(map, myX, myY, theNumber);
        PrintMap(map);
        
    }
 
    if(move == 'a') RemoveToLeft(map);
    if(move == 's') RemoveDown(map);
    
    } 
 
    system("pause");
    return 0;
    
}
 
void PrintMap(int (&myMap)[4][4])
{
    for(int j = 0; j < 4; j++)
    {
        for(int k =0; k < 4;k++)
        {
            std::cout  << myMap[j][k] << " ";
        }
        std::cout << "\n";
    }
    std::cout << std::endl;
            
}
int BuildPositionForX(int (&myMap)[4][4])
{
//srand(time(0));
    int x = rand() % 4;
    return x;
}
int BuildPositionForY(int (&myMap)[4][4])
{
//srand(time(0));
    int y = rand() % 4;
    return y;
}
int BuildNumber()
{
//srand(time(0));
    int b;
    int a = rand() % 2;
    if(a==1) b = 4;
    else b = 2;
    return b;
}
void BuildNewMap(int (&myMap)[4][4], int x, int y, int d)
{
    myMap[x][y] = d;
    
}
 
 
void RemoveToRight(int (&myMap)[4][4])
{
    for(int t = 0; t <= 3; t++)
    {
        if ((myMap[t][0] != 0) && (myMap[t][1] = 0)) std::swap(myMap[t][0], myMap[t][1]);
        else continue;
    }
    for(int t = 0; t <=3; t++)
    {
        if ((myMap[t][0] != 0) && (myMap[t][y+1] = 0)) std::swap(myMap[t][y], myMap[t][y+1]);
        else continue;
    }
    
    for(int u = 0; u < 3; u++)
    {
        if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] == 0) && (myMap[u][3] == myMap[u][1]))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] == myMap[u][0]) && (myMap[u][3] == 0))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }else if((myMap[u][0] != 0) &&  (myMap[u][1] == myMap[u][0]) && (myMap[u][2] == 0) && (myMap[u][3] == 0))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        } else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] == 0) && (myMap[u][3] != myMap[u][0]) && (myMap[u][3] != myMap[u][0]) )
        {
            myMap[u][2] = myMap[u][0];
            myMap[u][0] = 0;
            myMap[u][1] = 0;            
        } else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] != myMap[u][0]) && (myMap[u][3] != myMap[u][0]) && (myMap[u][2] != 0))
        {
            myMap[u][3] = myMap[u][2];
            myMap[u][2] = myMap[u][0];
            myMap[u][0] = 0;            
        }else if((myMap[u][0] != 0) &&  (myMap[u][1] != myMap[u][0]) && (myMap[u][0] == myMap[u][1]) && (myMap[u][2] == 0) && (myMap[u][3] != myMap[u][0]))
        {
            myMap[u][2] = myMap[u][0];
            myMap[u][3] = myMap[u][1];
            myMap[u][0] = 0;
            myMap[u][1] = 0;            
        }else if((myMap[u][0] == 0) &&  (myMap[u][1] != myMap[u][0]) && (myMap[u][2] == 0) && (myMap[u][3] != 0) && (myMap[u][3] != myMap[u][1]))
        {
            myMap[u][2] = myMap[u][1];
            myMap[u][3] = myMap[u][1];
            myMap[u][1] = 0;            
        }else if((myMap[u][0] == 0) &&  (myMap[u][1] != 0) && (myMap[u][2] == 0) && (myMap[u][3] == myMap[u][1]))
        {
            myMap[u][3] = myMap[u][1] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }else if((myMap[u][0] == 0) &&  (myMap[u][1] != 0) && (myMap[u][2] == myMap[u][1]) && (myMap[u][3] == 0))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] == 0) && (myMap[u][3] == myMap[u][0]))
        {
            myMap[u][3] = myMap[u][0] * 2;
            myMap[u][0] = 0;
            myMap[u][1] = 0;
            myMap[u][2] = 0;
            
        }else if((myMap[u][0] != 0) &&  (myMap[u][1] == 0) && (myMap[u][2] != 0) && (myMap[u][2] != myMap[u][0] && (myMap[u][2] != myMap[u][3]))  && (myMap[u][3] != myMap[u][1]) &&(myMap[u][3] != myMap[u][2]) && (myMap[u][3] != 0))
        {
            std::swap(myMap[u][0], myMap[u][1]);
            
        }else if((myMap[u][0] != 0) &&  (myMap[u][2] == 0) && (myMap[u][1] != myMap[u][0]) && (myMap[u][1] != myMap[u][1] && (myMap[u][1] != myMap[u][3]))  && (myMap[u][3] != myMap[u][1]) &&(myMap[u][3] != myMap[u][0]) && (myMap[u][3] != 0))
        {
            std::swap(myMap[u][1], myMap[u][2]);
            std::swap(myMap[u][0], myMap[u][1]);
            
        } else if((myMap[u][0] != 0) &&  (myMap[u][3] == 0) && (myMap[u][1] != myMap[u][0]) && (myMap[u][1] != myMap[u][2] && (myMap[u][1] != myMap[u][3]))  && (myMap[u][3] != myMap[u][1]) &&(myMap[u][3] != myMap[u][0]) && (myMap[u][3] != 0))
        {
            std::swap(myMap[u][1], myMap[u][2]);
            std::swap(myMap[u][0], myMap[u][1]);
            
        }
        
    }
}
void RemoveToLeft(int (&myMap)[4][4])
{
 
}
void RemoveUp(int (&myMap)[4][4])
{
 
}
void RemoveDown(int (&myMap)[4][4])
{
 
}
Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.09.2014, 22:48
Ответы с готовыми решениями:

Функция, которая изменяет первоначальное значение переменной и хранит его до следующего вызова
Нужно , чтобы функция(пусть даже main()) изменял первоначальное значение переменной и хранила его...

Формирование и просмотр списка и функция, которая изменяет каждое значение информационной части элемента списка на его квадрат
Написать программу, содержащую процедуры формирования и просмотра списка и функцию, которая...

Функция изменяет матрицу в Delphi
Добрый день. Пишу программу по теории групп и внезапно появилась проблема, что на определенном шаге...

Функция SetCurrentDirectory не изменяет директорию, что не так?
Дали задание создать прогу на с++, используя функцию BOOL SetCurrentDirectory(LPCWSTR lpszCurDir),...

4
2338 / 1828 / 753
Регистрация: 27.07.2012
Сообщений: 5,410
12.09.2014, 23:00 2
А в прошлой теме чем тебя ответы не устроили?
0
И целого heap'а мало
 Аватар для Andrej
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
12.09.2014, 23:01 3
Цитата Сообщение от bekabot Посмотреть сообщение
(int (&myMap)[4][4])
Что это? Обычный myMap[4][4] уже не работает? Да и честно, мало встречалось кода с таким объявлением. Уж, если хотите проверять, то передавайте размер полноценно через аргумент. Тогда, кстати, и размеры в функциях не будут захардкожены.
C++
1
2
3
4
5
6
7
void
printArray(int** array, std::size_t length) // length = x * y, ленька возиться с вложенными циклами
{
    for (std::size_t i; i < length; ++i) {
        std::cout << **(array + i) << '\n';
    }
}
Вот завтра у вас массив станет размером 100 * 500, и что делать?
А вот да. Если аргументов больше трёх, то стоит разродиться в класс и кидать объекты, или лучше передавать по ссылке.
А тогда и огород городить незачем, велосипедов написано достаточно, заиспользуйте std::vector или std::array.
0
1 / 1 / 0
Регистрация: 18.12.2013
Сообщений: 61
12.09.2014, 23:52  [ТС] 4
Цитата Сообщение от John Prick Посмотреть сообщение
А в прошлой теме чем тебя ответы не устроили?
так тут уже совсем другой вопрос

Добавлено через 1 минуту
Цитата Сообщение от Andrej Посмотреть сообщение
Что это? Обычный myMap[4][4] уже не работает?
Честно, я сам не понимаю написанного, понятие не имею как по другому двумерный массив передавать по ссылке, чтобы функция меняла содержимое

Добавлено через 57 секунд
так и не получил правильный ответ, буду благодарен за него
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2014, 00:39 5
Цитата Сообщение от bekabot Посмотреть сообщение
понятие не имею как по другому двумерный массив передавать по ссылке, чтобы функция меняла содержимое
В параметрах функции имя массива разлагается до указателя на его первый элемент, поэтому в функции можно менять содержимое массива.
C++
1
2
3
4
5
void RemoveToRight(int myMap[][4])
{
{...}
int map[4][4] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
RemoveToRight(map);
Что за y в 100-й строке?
0
13.09.2014, 00:39
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2014, 00:39
Помогаю со студенческими работами здесь

Excel. Функция от ячеек, которая не изменяет их самих
Привет, помогите пожалуйста. Довольно срочное дело. Есть функция: Function Macro8(a As Variant,...

Функция strtod не изменяет значение errno при слишком большом значении числа
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;errno.h&gt; int main(int argc, char* argv) {...

Функция высших порядков изменяет знак всех положительных элементов списка чисел
вот просто функция, которая изменяет знак всех положительных элементов списка чисел m :: -&gt; m =...

Одномерный масссив
Мне надо было решить такую же задачу, но без массива...долго мучался, закидывал сюда своё решение...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru