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

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

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

Студворк — интернет-сервис помощи студентам
Проблема в функции 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
Добрый день. Пишу программу по теории групп и внезапно появилась проблема, что на определенном шаге в функции передаваемая по значению...

4
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
12.09.2014, 23:00
А в прошлой теме чем тебя ответы не устроили?
0
И целого heap'а мало
 Аватар для Andrej
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
12.09.2014, 23:01
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
А в прошлой теме чем тебя ответы не устроили?
так тут уже совсем другой вопрос

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

Добавлено через 57 секунд
так и не получил правильный ответ, буду благодарен за него
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2014, 00:39
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2014, 00:39
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru