Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 17:06   #21
zzzzza
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
zzzzza(как Вы их называете "константы").
я не называю их константой, просто хочу, чтобы они стали константами.
Как задается константа в описание переменных:
const
a=1;
b=2;

Var ...
А как ее задать, чтобы она была тут:
Var ...
Begin
readln(a);
const a

end.
zzzzza вне форума Ответить с цитированием
Старый 05.04.2012, 18:35   #22
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А как ее задать, чтобы она была тут:
Var ...
Begin
readln(a);
const a
end
ответ - НИКАК!

как уже было сказано выше - контролируйте что можно изменять, а что нет - САМОСТОЯТЕЛЬНО!!

и вы мой пост #21 читали? и что ответите насчёт пункта 3) ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.04.2012, 07:39   #23
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

извиняюсь за поздний ответ, со временем напряг..
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
в данном случае речь идёт о игре СУДОКУ.
Ну, к тому посту, на который я отвечал, это еще не было известно, как я понял )). И ты, Серж, говорил про числа, которые не влезают в множества - какое уж тут судоку?.. )) А за некоторый оффтоп я уже извинился.
Цитата:
p.s. кстати, о перемешивании, ты в данном коде перемешиваешь не очень корректно - смотри по ссылочкам ...
Вот за это большое спасибо, +1 (хотя сильно сомневаюсь, что паронаильность администрации на этом форуме позволит мне осуществить этот +1). Я подозревал, что есть разница в том, как переставлять (со всем массивом или с остатком), но ни во что конкретное мои подозрения не выилились. Если честно, остались непонятки с этим.. Статьи по той ссылке больше нет, а сам я никак не выберу время все аккуратно просчитать (или хотя бы проверить). Но постараюсь все же сделать это.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 07.04.2012, 23:26   #24
zzzzza
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

нашел алгоритмы, но они недоработанные и там я не все понимаю, но думаю если посмотреть внимательно, можно все понять)
на всякий случай скину, вдруг у кого-то тоже возникла такая же идея))
http://programmersforum.ru/showthread.php?t=84708
http://forum.sources.ru/index.php?showtopic=192143
http://forum.pascalnet.ru/lofiversio...hp/t10635.html
zzzzza вне форума Ответить с цитированием
Старый 08.04.2012, 00:21   #25
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Решал 1.5 года назад задачу по решению судоку (код на Дельфи (но почти ничего нет от Дельфи, так что легко превращается в паскаль), 99%, что можно сделать красивее):
Код:
{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  sudoku = array[1..9, 1..9] of 0..10;
  point = record
    x: byte;
    y: byte;
  end;

var
  a: sudoku;
  i, j: byte;
  c: char;

function zero(b: sudoku): point;
var
  i, j: byte;
begin
  for i := 1 to 9 do
    for j := 1 to 9 do
      if b[i, j] = 0 then
      begin
        zero.x := i;
        zero.y := j;
        exit;
      end;
  zero.x := 255;
  zero.y := 255;
end;

function check(var b: sudoku; x1, y1: byte): boolean;
var
  q, i, j, x2, y2: byte;
begin
  if b[x1, y1] = 10 then
  begin
    check := false;
    exit;
  end;
  q := b[x1, y1];
  b[x1, y1] := 10;
  for i := 1 to 9 do
    if q = b[i, y1] then
    begin
      b[x1, y1] := q;
      check := false;
      exit;
    end;
  for i := 1 to 9 do
    if q = b[x1, i] then
    begin
      b[x1, y1] := q;
      check := false;
      exit;
    end;
  x2 := 1 + 3 * ((x1 - 1) div 3);
  y2 := 1 + 3 * ((y1 - 1) div 3);
  for i := x2 to x2 + 2 do
    for j := y2 to y2 + 2 do
      if q = b[i, j] then
      begin
        b[x1, y1] := q;
        check := false;
        exit;
      end;
  b[x1, y1] := q;
  check := true;
end;

procedure printmatrix(b: sudoku);
var
  i, j: byte;
begin
  for i := 1 to 9 do
  begin
    for j := 1 to 9 do
      write(b[i, j]);
    writeln;
  end;
end;

function solve(var b: sudoku; p: point): boolean;
var
  t: boolean;
begin
  if p.x = 255 then
  begin
    solve := true;
    exit;
  end;
  repeat
    repeat
      b[p.x, p.y] := b[p.x, p.y] + 1;
      t := check(b, p.x, p.y);
    until t or (b[p.x, p.y] = 10);
    if t and (b[p.x, p.y] <> 10) then
      t := solve(b, zero(b));
  until t or (b[p.x, p.y] = 10);
  if t then
    solve := true
  else
  begin
    solve := false;
    b[p.x, p.y] := 0;
  end;
end;

function solvable(var b: sudoku): boolean;
var
  i, j: byte;
begin
  for i := 1 to 9 do
    for j := 1 to 9 do
      if b[i, j] <> 0 then
        if not check(b, i, j) then
        begin
          solvable := false;
          exit;
        end;
  solvable := true;
end;

begin
  try
    assign(input, 'sydoky.in');
    assign(output, 'sydoky.out');
    reset(input);
    rewrite(output);
    for i := 1 to 9 do
    begin
      for j := 1 to 9 do
      begin
        read(c);
        a[i, j] := ord(c) - ord('0');
      end;
      readln;
    end;
    if solvable(a) then
    begin
      solve(a, zero(a));
      printmatrix(a);
    end
    else
      writeln(output, 'Unsolvable');
    close(input);
    close(output);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Также, есть вероятность, что код неустойчив к входным данным (т.е. можно подобрать пример, что программа зависнет).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 08.04.2012 в 01:43.
BDA на форуме Ответить с цитированием
Старый 08.04.2012, 17:46   #26
zzzzza
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

BDA, спасибо большое)

BDA,
1)как забивать числа в блокнот, то есть просто число написать?
2)не очень понял, что вот эта строчка означает function zero(b: sudoku): point;
3)Writeln(E.ClassName, ': ', E.Message); пишет 'неизвестное поле класса', убрал .ClassName, программа запускается.Надо ли убирать это?)
4)Программа писала 'Неверное кол-во фактических параметров'
zero.x := i;
zero.y := j;
убрал zero и добавил x и y в переменные все заработало.Вопрос, что делает zero.x := i; ?
5)Запускаю программу, пишет '$0E409C60: ошибка ввода-вывода', что делать?
6)пишет, что модуль SysUtils не найден, заменил на crt. Что делает модуль SysUtils ?

Последний раз редактировалось Stilet; 08.04.2012 в 20:54.
zzzzza вне форума Ответить с цитированием
Старый 08.04.2012, 18:28   #27
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Переделал код под Паскаль АБС (сборка паскаля 1.8.0.490).
1) пример входного файла в приложенном архиве
2) функция zero ищет следующую пустую клетку на поле
3) эта строка нужна была в Дельфи для вывода ошибок (убрал всю конструкцию try except)
4) не знаю, почему не сработало (заменил на временную переменную tmp)
5) скорее всего нет входного файла (не работал в Паскаль АБС)
6) Модуль SysUtils всегда подключается в консольных приложениях Дельфи (отвечает, скорее всего, за самые базовые функции)
Вложения
Тип файла: zip sudoku pascal abc.zip (1.1 Кб, 23 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.04.2012, 20:20   #28
zzzzza
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

BDA, Как я понял, файл sudoku.in надо открыть через текстовый редактор и вбить туда числа которые нам известны, а если число не известно, то поставить 0, да?
Что программа требует в начале?
Надо ли output и input описывать, то есть VAR output,input: text; ? просто без этого она не хочет запускаться.
zzzzza вне форума Ответить с цитированием
Старый 08.04.2012, 20:31   #29
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Да, с файлом судоку.ин нужно сделать описанные вами действия.
Программе в начале работы обязательно требуется наличие этого файла.
У меня работает в Паскаль АБС без объявления (но исправленная версия во вложении).
Вложения
Тип файла: zip Program1.zip (1.1 Кб, 22 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 08.04.2012 в 20:34.
BDA на форуме Ответить с цитированием
Старый 09.04.2012, 15:34   #30
zzzzza
Пользователь
 
Регистрация: 01.04.2012
Сообщений: 16
По умолчанию

BDA, спасибо большое, все работает. Теперь буду разбираться в программе)
zzzzza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи на решение Pascal abc Tecka Фриланс 9 18.12.2012 22:20
Решение задач в PASCAL ABC canter Помощь студентам 2 11.03.2012 22:03
нужно решение на Pascal ABC EvilCry Помощь студентам 8 27.10.2011 12:30
(PASCAL ABC)Дана Матрица, найти индексы всех эл-ов с наибольшим значением, если таких элементов несколько Grandhustla Помощь студентам 0 25.05.2011 16:06
решение задачи в PASCAL ABC kill_01 Помощь студентам 14 19.05.2011 05:51