СПРОСИ ПРОФИ
👍
0
👎 00

Решение игры «Судоку»

Добрый день, писала код для решения игры «Судоку» при помощи двумерного массива, я только учусь и много не знаю, помогите пожалуйста исправить ошибки

#Область ПрограммныйИнтерфейс

// Функция решает судоку.
// Судоку передается в виде двухмерного массива размерности РазмерностьМассива.
// Параметры:
// МассивСудоку — Двумерный массив значений СудокуКлиентСервер.НовыйЭлементМассиваСудоку()
// РазмерностьМассива — Число — размерность массива судоку.
//
Процедура РешитьСудоку(МассивСудоку, РазмерностьМассива) Экспорт

//ВызватьИсключение «Функция решение судоку не реализована»;
КонецПроцедуры

//ПРИЛОЖЕНИЕ А
//Полный листинг программы – начало

Процедура ИнициализацияКонстант()
Перем N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные
N = 9;
КодСимволаНоль = КодСимвола(«0»);
Судоку = Новый Массив(N, N);
ИсхДанные = МассивСудоку(N, N);
СчЗамен = 0;
КонецПроцедуры

Процедура ИнициализацияПеременных()
ИнициализацияКонстант(N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
Судоку = Новый Массив(N, N);
ИсхДанные = МассивСудоку(N, N);
СчЗамен = 0;
КонецПроцедуры

Процедура ПечатьСудоку()
Перем Рез, ТекСтрок, ТекСтолб;
ИнициализацияКонстант(N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
Рез = «+---+---+---+»
"";
Для ТекСтрок = 0 По N — 1 Цикл
Для ТекСтолб = 0 По N — 1 Цикл
Если ТекСтолб % 3 = 0 Тогда
Рез = Рез + «|»;
КонецЕсли;
Рез = Рез + Символ(Судоку[ТекСтрок][ТекСтолб] + КодСимволаНоль);
КонецЦикла;
Рез = Рез + «|»
"";
Если ТекСтрок % 3 = 2 Тогда
Рез = Рез + «+---+---+---+»
"";
КонецЕсли;
КонецЦикла;
Рез = Рез + ""
"";
Сообщить(Рез);
КонецПроцедуры

Процедура СтрокиВСудоку()
Перем ТекСтрок, ТекСтолб;
ИнициализацияКонстант(N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
Для ТекСтрок = 0 По N — 1 Цикл
Для ТекСтолб = 0 По N — 1 Цикл
Судоку[ТекСтрок][ТекСтолб] = КодСимвола(Судоку[ТекСтрок], ТекСтолб + 1) — КодСимволаНоль;
КонецЦикла;
КонецЦикла;
КонецПроцедуры

Функция Решить()
Перем ЦифраВСудоку;
Перем НСтроки, НСтолбца;
Перем НетНулей;
Перем ТекСтрок, ТекСтолб, ТекЦифра;
Перем НачСтрок, НачСтолб, КонСтрок, КонСтолб;

ИнициализацияКонстант(N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);

ЦифраВСудоку = Новый Массив(10);

НСтроки = 0;
НСтолбца = 0;
НетНулей = Истина;

ТекСтрок = 0;
Пока НетНулей И (ТекСтрок < N) Цикл
ТекСтолб = 0;
Пока НетНулей И (ТекСтолб < N) Цикл
Если Судоку[ТекСтрок][ТекСтолб] = 0 Тогда
НетНулей = Ложь;
НСтроки = ТекСтрок;
НСтолбца = ТекСтолб;
КонецЕсли;
ТекСтолб = ТекСтолб + 1;
КонецЦикла;
ТекСтрок = ТекСтрок + 1;
КонецЦикла;
Если НетНулей Тогда
Возврат Истина;
КонецЕсли;

Для ТекЦифра = 0 По 9 Цикл
ЦифраВСудоку[ТекЦифра] = Ложь;
КонецЦикла;
НачСтрок = Цел(НСтроки / 3) * 3;
НачСтолб = Цел(НСтолбца / 3) * 3;
КонСтрок = НачСтрок + 3;
КонСтолб = НачСтолб + 3;
Для ТекСтрок = 0 По N — 1 Цикл
ЦифраВСудоку[Судоку[НСтроки][ТекСтрок]] = Истина;
ЦифраВСудоку[Судоку[ТекСтрок][НСтолбца]] = Истина;
КонецЦикла;
Для ТекСтрок = НачСтрок По КонСтрок — 1 Цикл
Для ТекСтолб = НачСтолб По КонСтолб — 1 Цикл
ЦифраВСудоку[Судоку[ТекСтрок][ТекСтолб]] = Истина;
КонецЦикла;
КонецЦикла;

Для ТекЦифра = 1 По 9 Цикл
Если Не ЦифраВСудоку[ТекЦифра] Тогда
СчЗамен = СчЗамен + 1;
Судоку[НСтроки][НСтолбца] = ТекЦифра;
Если Решить() Тогда
Возврат Истина;
КонецЕсли;
Судоку[НСтроки][НСтолбца] = 0;
КонецЕсли;
КонецЦикла;

Возврат Ложь;
КонецФункции

Процедура Главная()
ИнициализацияКонстант(N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
ИнициализацияПеременных();
СтрокиВСудоку();
ПечатьСудоку();
Сообщить("");
Решить();
ПечатьСудоку();
Сообщить("");
Сообщить("Число замен: " + СчЗамен);
Сообщить("");
КонецПроцедуры

//Главная();

//Полный листинг программы – конец

#КонецОбласти

Ошибка инициализации модуля: ОбщийМодуль.СудокуПереопределяемый.Модуль
по причине:
{ОбщийМодуль.СудокуПереопределяемый.Модуль(18,53)}: Ожидается символ ';'
Перем N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные<<?>>
{ОбщийМодуль.СудокуПереопределяемый.Модуль(27,24)}: Слишком много фактических параметров (ИнициализацияКонстант)
ИнициализацияКонстант(<<?>>N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
{ОбщийМодуль.СудокуПереопределяемый.Модуль(35,24)}: Слишком много фактических параметров (ИнициализацияКонстант)
ИнициализацияКонстант(<<?>>N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
{ОбщийМодуль.СудокуПереопределяемый.Модуль(59,24)}: Слишком много фактических параметров (ИнициализацияКонстант)
ИнициализацияКонстант(<<?>>N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
{ОбщийМодуль.СудокуПереопределяемый.Модуль(74,24)}: Слишком много фактических параметров (ИнициализацияКонстант)
ИнициализацияКонстант(<<?>>N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
{ОбщийМодуль.СудокуПереопределяемый.Модуль(131,24)}: Слишком много фактических параметров (ИнициализацияКонстант)
ИнициализацияКонстант(<<?>>N, КодСимволаНоль, Судоку, СчЗамен, ИсхДанные);
[ОшибкаКомпиляцииВстроенногоЯзыка]

Задайте свой вопрос по программистам 1С
профессионалам

Сейчас онлайн 75 программистов
Получите ответ профи быстро и бесплатно
ASK.PROFI.RU © 2020-2025