0 / 0 / 1
Регистрация: 12.01.2017
Сообщений: 104
|
||||||
1 | ||||||
Глобальные переменные и процедуры14.01.2017, 10:45. Показов 2593. Ответов 2
Метки нет (Все метки)
Итак, я решил, что начать изучение этого языка лучше начать с написания чего-то интересного и простого. Крестики-нолики показались мне идеальным выбором. А теперь к проблеме: (коротко: я делаю в процедуре так: глобалка winl:=true, а winl посылает меня и не становится true в глобальном смысле)
Суть кода примерно такая: (ход мой, ход компа)*4+мой ход+проверка ничьей. При этом в каждой процедуре хода есть процедура проверки победы. Если размотать этот клубок до конца и выйти к моей проблеме, то получится следующие: есть глобальная переменная winl, при победе (не важно чьей) я присваиваю ей значение истины. Но, судя по всему, это не работает. Ей не присваивается нужное значение. Ничья, возникающая при значении "победа=ложь" после последнего хода работает, а присваивание истины при победе - нет. Выяснил я это, решив сделав игру бесконечной - чтобы после победы/поражения/ничьей она начиналась сначала. Я убрал из побед halt и добавил в процедуры ходов первой строчкой строку if winl=true then exit; Как итог - программа просто упрямо выполнялась до конца, не обращая ни малейшего внимания на ту строку. Вывод один - присваивание не работает. Хотелось бы спросить, что здесь не так и почему оно не работает? Заранее спасибо Под спойлером сама программа. Кликните здесь для просмотра всего текста
0
|
14.01.2017, 10:45 | |
Ответы с готовыми решениями:
2
Куда помещать свои переменные, процедуры и функции? Глобальные переменные глобальные переменные Глобальные переменные |
3 / 2 / 1
Регистрация: 19.07.2019
Сообщений: 1
|
||||||||||||||||
19.07.2019, 20:53 | 2 | |||||||||||||||
Сообщение было отмечено Kujivunia как решение
Решение
ваш код, начинающийся со строки 88:
в начале программы (
вы объявляете переменную winl. В наведенных мной процедурах вы используете переменную winl как аргумент, то есть во время выполнения процедуры существует ДВЕ переменные с именем winl, при этом переменная, которая объявлена в заголовке процедуры имеет больший приоритет, чем глобальная, то есть если в процедуре вы присваиваете переменной winl значение true, оно присваивается ЛОКАЛЬНОЙ переменной winl (которая, кстати, удаляется при завершении процедуры). Тут надо бы менять название переменной в заголовке процедур, но конкретно в вашем случае, процедуре ВООБЩЕ не нужны какие-либо входные данные. То есть, код, начинающийся на строке 88 должен выглядеть как-то так:
надеюсь, понятно объяснил)
2
|
5084 / 2655 / 2350
Регистрация: 10.12.2014
Сообщений: 10,041
|
||||||||||||||||||||||||||
21.07.2019, 14:36 | 3 | |||||||||||||||||||||||||
Во-первых, ваше форматирование… Совершенно не понятно где какие операторные скобки! А форматирование текста программы именно и приводит к лёгкости чтения кода.
Во-вторых, Kujivunia, очень странный код после такого вопроса: Как считать файл с текстом в одну переменную типа string максимально быстро? Добавлено через 9 минут Вы объявляете массив [0..2, 0..2], но зачем-то используете какие-то „костыли“, чтобы обратиться к конкретной ячейке этого массива.К примеру, для заполнения массива в процедуре recording_empty_in_memory можно было же просто:
draw :
Процедура read_user_key : зачем делать двойные проверки на <>X и <>O , когда достаточно одной =~ :
case здесь лишнее:
AI — просто верх совершенства! Ни какой логики! Тупой рандом…С проверкой на выигрыш сильно… Масштабировать до 4-х в ряд вы не собираетесь, поэтому можно проще:
1
|
21.07.2019, 14:36 | |
21.07.2019, 14:36 | |
Помогаю со студенческими работами здесь
3
Модули и глобальные переменные Локальные и глобальные переменные. Локальные и глобальные переменные Глобальные и локальные переменные, одна и та же прога в процедуре Не работает, а просто так работает. Почему? Задать переменные для процедуры val Какие в коде имеются глобальные переменные, процедуры и функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |