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

Функция проверки двумерного массива C++ - C++

Восстановить пароль Регистрация
 
Sashuteak
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 1
06.03.2016, 01:34     Функция проверки двумерного массива C++ #1
Здравствуйте! Мне нужна помощь вот в чем - мое полное задание это написать игру пятнашки которая должна состоять из 5 функций!!
1 - функция которая заполняет массив случайными числами от 0 до 16
2 - функция которая выводит этот исходный массив с которого все начинается
3 - функция которая находит позицию нуля в массиве
4 - функция которая двигает нулем как пустой ячейкой
5 - функция которая проверяет массив на победу

я сделал все функции кроме последней пятой
5 - функция которая проверяет массив на победу - это значит что она принимает заполненный массив и если он упорядочен с 1 до 15 и последний элемент 0 тогда она возвращает значение истина!!!
примерно так!!! и я никак не могу последнюю функцию сделать правильно!!!

вот тут я остановился!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool win_check(int mas[][2], int row, int col) //Проверка на победу
{
    bool win;
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            if (mas[i][j] < mas[i][j + 1] && mas[1][1] == 0)
            {
                win = true;
                break;
            }
            else
            {
                win = false;
            }
        }
    }
    return win;
}
этот код не работает!! помогите пожалуйста разобраться в чем дело, что я не так делаю!
Спасибо огромное за помощь
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
06.03.2016, 01:35     Функция проверки двумерного массива C++ #2
В общем случае, для оформления кода,
выделите код и нажмите на кнопку соответствующего языка (см. изображение)
Juffin
50 / 50 / 16
Регистрация: 24.12.2011
Сообщений: 133
06.03.2016, 01:48     Функция проверки двумерного массива C++ #3
Можно начать с того, что первый элемент матрицы - это mas[0][0], а не mas[1][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
bool win_check(int mas[][], int row, int col) //Проверка на победу
{
    bool win = true;
    int previous = -1;
 
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            if (i == 0 && j == 0)
                previous = mas[0][0];
            else
                if (mas[i][j] > previous)
                {
                    win = false;
                    break;
                }
 
            previous = mas[i][j];
        }
    }
    return win;
}
Добавлено через 6 минут
Прошу прощения, вот правильный код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool win_check(int mas[][], int row, int col) //Проверка на победу
{
    int previous = -1;
 
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            if (i == 0 && j == 0)
                previous = mas[0][0];
            else
                if (mas[i][j] > previous)
                    return false;
 
            previous = mas[i][j];
        }
    }
    return true;
}
marat_miaki
97 / 86 / 31
Регистрация: 08.04.2013
Сообщений: 296
06.03.2016, 08:32     Функция проверки двумерного массива C++ #4
Можно наверное улучшить, пока только учусь
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 <iostream>
#include<cstdlib>
using namespace std;
bool win_check(int *, int row, int col);
 
int main()
{
    const int row = 4, col = 4;
    int mas[row][col];
    int *p = &mas[0][0];
    
    for (int i = 0; i < row*col; i++)
    {
        *(p + i) = i+1;
        if(!(i%row)) cout <<endl;
        if (i == 15 ) *(p + i) = 0;
        cout << *(p + i) << "\t";
    }
    cout << endl;
    
    if (win_check) cout << "Yess";
   
   return 0; 
}
 
bool win_check(int *p, int row, int col) //Проверка на победу
{
    bool win =true;
    if (*(p + 15)  != 0 ) win = false; //и можно выйти
    for (int i = 0; i < row*col-1; ++i)
    {
     if( *(p + i)  != (i+1) ) win = false;
    }
     return win;
}
Добавлено через 12 минут
C++
1
21 if (win_check(p, row, col)) cout << "Yess";
Yandex
Объявления
06.03.2016, 08:32     Функция проверки двумерного массива C++
Ответ Создать тему
Опции темы

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