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

Где ошибка в передаче указателя на массив? - C++

Восстановить пароль Регистрация
 
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
27.06.2014, 12:48     Где ошибка в передаче указателя на массив? #1
через указатель на массив хочу в массив записать значние -1 или +1. гдето ошибка в синтаксисе. ПРошу помочь. ПОдозреваю что ошибка в самом вызове функции... А конкретней я не правильно из main`a вызываю нужную функцию. НО значения в определении функции и инициализации функции принимаю правлиьно.

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
#include <iostream>
#include <stdlib.h>
using namespace std;
 
int InputLocPl1(int gor, int ver, int playID);
int fNumField(int[B] *pNumField, int s[/B], int playID, int ver, int gor);
 
 
int main(){
    
    setlocale(0,"");
    
    int playID;
    int gor, ver;
    
    int s=3;    
    int *pNumField;
 
    //1) Создание первоначального игрового поля. С пустыми значениями.
    //  а) Дубликат массива для инициализации его цифровыми занчениями.
    int NumField[s][s];
    
    cout    << "NumField: \n"; // забиваю значение пустой ячейки массива.
    for(int i=0; i<3; i++){
        for(int a=0; a<3; a++){
            NumField[i][a] = 0;
        }
    cout    << endl;        
    }
    
    cout    << "NumField[s][s] : \n"; // вывожу все забитые значения ячеек.
    for(int i=0; i<3; i++){
        for(int a=0; a<3; a++){
            cout    << NumField[i][a];
        }
    cout    << endl;        
    }
        
    //Иниц. Игровых массивов указателям.
    pNumField = &NumField[s][s];
    
    InputLocPl1(gor, ver, playID); // вводим координаты.
    fNumField[B](*pNumField, playID,[/B] ver, gor);//show new playfield
        
    
    return 0;
}
//2) Предложение ввести координаты. 
int InputLocPl1(int gor, int ver, int playID){
    cout    << "Игрок номер 1 введите координаты ячейки: Строка-Колонка...\n";
    
    int g, v;
    cout    <<"По-горизонтали: ";
    cin     >> g;
    cout    <<"По-вертикали: ";
    cin     >> v;
    
    gor = g+1;
    ver = v+1;
    playID = 1;
    
    return gor, ver, playID;
};
 
 
// очистка консоли.
// заполнение основног омассива  х ли 0.
int fNumField([B]int *pNumField, int s[/B], int playID, int ver, int gor){
    system("cls"); // очистка консоли.
    int plId;
    
    if(playID = 1) // определение 1 или -1 записывать в ячейку.
        plId = +1;
    
    
    else if(playID= 2) // определение 1 или -1 записывать в ячейку.
        plId = -1;
    
    
    int i=0, k=0;
    
    for(i; i<3; ++i){}// write -1 or 1 in stack
        for(k; k<3; ++k){
            if(i == ver && k == gor)
                *pNumField[k]=plId;
        }       
    }
    
    for(int i=0; i<3; ++i){ //show writen storage(mem. stack)
        for(int k=0; k<3; ++k){
            cout    << *pNumField[k];           
        }
    }
    return *pNumField[s];
}
Добавлено через 37 секунд
Строки 6, 43 и 68
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
27.06.2014, 17:35  [ТС]     Где ошибка в передаче указателя на массив? #21
Добавлено через 7 минут
я не пойму какая переенная что счелкает.... массив это матрица(квадрат прямоугольник, прямая с равнымыми частями...)

01. 02. 03. 04. строка это в длинну.
05. 06. 07. 08. столбец это в высоту.
09. 10. 11. 12.


или так выразить можно (01, 02, 03, 04)(05, 06, 07, 08)(09, 10, 11, 12)

какая переменная как переключает доступ к ячейке....




Глупый вопрос. - разобрался. Прежде чем задавать его стоило сперва самому подумать как бы я написал уравнение где надо найти положение чейки в строке, зная 2 числа.

Арр[0][0] - имя массива или нулевая ячейка.
Чтоб попсть в нужную ячейку из этого массива, по правилам обращения к ячейкам массива мне надо к к 0.0. координатам добавить число на котоое я хочу сместиться. Например я хочу попасть в 7 ячейку.

7 ячейка это Арр c индексом [2][1]. У меня двехмерный массив App[3][3].

формула по которой можно попасть в 7 ячейку
0.0.(адрес первой ячейки или нулевой!) + 3(количество ячеек в 1 строке)*Х(это строка в которой у меня находиться нужная мне ячейка) + У(это порядок нужной мне ячейки по отношению к началу строки к которой она находиться)

с первого взгялда запутанно, но когда сам пробуешь написать все эллементарно. С положением нужных ячеек разобрался! Алекс и Киррил - спасибо Вас огромное.

Туперь в коде очередная ошибка. с диапазоном записываемх значений. Мне нужно в ячейку записат ьчисло -1 или +1. Если я записываю 1, то все нормально, а -1 не пишет...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
27.06.2014, 20:15     Где ошибка в передаче указателя на массив? #22
А как -1 подставляете?

Добавлено через 3 минуты
Я так понимаю, Вы хотите "крестики - нолики" написать?
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
27.06.2014, 20:33  [ТС]     Где ошибка в передаче указателя на массив? #23
угу) крестики нолики. с минусом разобрался, функция не видела идентификатор игрока.
сут ьв чем:
Игрок 1 Id=1;
игрок 2 Id=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
int fNumField(int *pNumField, int s, int playID, int ver, int gor){
    system("cls"); // î÷èñòêГ* ГЄГ®Г*ñîëè.
    
    int plId=0;
        
    if(playID == 1) // îïðåäåëåГ*ГЁГҐ 1 èëè -1 Г§Г*ïèñûâГ*ГІГј Гў ÿ÷åéêó.
        plId = -1;
    
    
    
    if(playID == 2) // îïðåäåëåГ*ГЁГҐ 1 èëè -1 Г§Г*ïèñûâГ*ГІГј Гў ÿ÷åéêó.
        plId = 1;
    
    for(int i=0; i<3; ++i){// write -1 or 1 in stack
        for(int k=0; k<3; ++k){
            if((i == ver) && (k == gor))
                *(pNumField+i*s+k)=plId;
        }   
    }
    
    for(int i=0; i<3; ++i){ //show writen storage(mem. stack)
        for(int k=0; k<3; ++k){
            cout    << *(pNumField+i*s+k) <<' ';            
        }
        cout    <<endl;
    }
    
    
    return *(pNumField), playID;
}
если Айди1 то ставим -1 если 2 тов ставим +1. это нао для определения победителя. ПОбедителя бду определять по такому алгоритму - где быстрее сумма строк собереться +3 или -1 там и будет победитель 1 или 2 игрок. Инчае ничья.

Добавлено через 1 минуту
сейчас ошибка не с знчением в ячейке а с заполнением игровог ополя. Функция отрисовки заполняет только ячейку с координатами 0.0. хотя в формуле неот ошибки в заполнении нет ошибки... может в выводе - проверяю.

Добавлено через 7 минут
145-149 строки гдето тут логичесская ошибка
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 1
Завершенные тесты: 5
27.06.2014, 20:55     Где ошибка в передаче указателя на массив? #24
Вы снова повторяете свою ошибку.
Цитата Сообщение от MMt Посмотреть сообщение
return *(pNumField), playID;
Во-первых, функция может вернуть только одно значение
Цитата Сообщение от MMt Посмотреть сообщение
int fNumField(int *pNumField, int s, int playID, int ver, int gor)
Во-вторых, Вам никакие значения не нужно возвращать, т.к. при вызове функции Вы не присваиваете ее значение никакой переменной.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2014, 21:43     Где ошибка в передаче указателя на массив?
Еще ссылки по теме:

Порча указателя при передаче в функцию C++
При передаче указателя в качестве аргумента функции теряется значение C++
C++ Ошибки преобразования при передаче указателя на функцию

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

Или воспользуйтесь поиском по форуму:
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
27.06.2014, 21:43  [ТС]     Где ошибка в передаче указателя на массив? #25
Кирил у меня вопрос. по возврату.
в каком случае мне надо возвращать значения?
возвращают некоторое значение если внутри функции была создана некая новая переменная которая нигде раньше не оглашалась? чтоб остальной код мог "знать" откуда и что это за переменная...

Добавлено через 45 минут
нашел ошибку. я не правильно использую функцию. слишком сложное принципиально написание. мне достаточно в функцию передать координаты и выкинуть значение только 1 ячейки памяти из массива. не надо ничего выводить и так дале... над опереписать.
Yandex
Объявления
27.06.2014, 21:43     Где ошибка в передаче указателя на массив?
Ответ Создать тему
Опции темы

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