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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2011, 15:48   #1
rager06
Пользователь
 
Регистрация: 08.09.2010
Сообщений: 17
По умолчанию Если массив начинается с 0, то ноль не выводится

Всем привет. Делаю задание по Паскалю (игра "Быки и Коровы" ("Числа" её ещё называют)). Всё получилось, всё работает, но если генерируемый массив начинается с "0", то 0 почему-то не выводится.
Например, массив "0123" будет отображён как "123". Как победить? Помогите, пожалуйста!

Мой код:
Код:
program bullz;
uses crt;
var arr,arr0: array [1..5040] of integer;
    i, j, k, z, f:         integer;
    m, n, b, c, bull, cow: integer;

Procedure division(a: integer; var w, x, y, z: integer);
  begin
    w := a div 1000;
    a := a mod 1000;
    x := a div 100;
    a := a mod 100;
    y := a div 10;
    z := a mod 10;
  end;

procedure _cow(m, n: integer; var c: integer);
var w1, x1, y1, z1, w2, x2, y2, z2: integer;
  begin
    division(m, w1, x1, y1, z1);
    division(n, w2, x2, y2, z2);
    c := 0;
    if (w1=x2)or(w1=y2)or(w1=z2) then
      c := c +1;
    if (x1=w2)or(x1=y2)or(x1=z2) then
      c := c +1;
    if (y1=w2)or(y1=x2)or(y1=z2) then
      c := c+1;
    if (z1=w2)or(z1=x2)or(z1=y2) then
      c := c+1;
  end;

procedure _bull(m, n: integer; var b: integer);
var w1, x1, y1, z1, w2, x2, y2, z2: integer;
  begin
    division(m, w1, x1, y1, z1);
    division(n, w2, x2, y2, z2);
    b := 0;
    if w1 = w2 then
      b := b +1;
    if x1 = x2 then
      b := b +1;
    if y1=y2 then
      b := b +1;
    if z1 = z2 then
      b := b +1;
  end;

begin
   clrscr;
   i := 0;
   for j:=0 to 9 do
      for k:=0 to 9 do
         for z:=0 to 9 do
            for f:=0 to 9 do
               if (j<>k) and (j<>z) and (j<>f) and
                  (k<>z) and (k<>f) and (z<>f) then
                  begin
                     i := i+1;
                     arr[i] := j * 1000 + k * 100 + z * 10 + f;
                  end;
   repeat
      begin
         m := arr[1];
         textcolor(white);
         writeln(m);
         textcolor(green);
         writeln('bull: ');
         readln(bull);
         textcolor(yellow);
         writeln('cow:');
         readln(cow);
         for i:=1 to 5040 do
            arr0[i] := 0;
            f := 0;
         for i:=1 to 5040 do
            begin
               n := arr[i];
               _bull(m, n, b);
               _cow(m, n, c);
            if (b<>bull) or (c<>cow) then
               arr[i]:=0
            else
              begin
                 f:=f+1;
                 arr0[f] := arr[i];
              end;
      end;
      for i:=1 to 5040 do
      arr[i] := arr0[i];
end;
  until f=1;
     textcolor(white);
     writeln('‚*Ur number is :  ',arr[1]);
     readkey;
end.
rager06 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двумерный массив. вывести все строки, содержащие хотя бы один "0"(ноль) (написать через функцию в Delphi) BLADIMIR Помощь студентам 4 07.09.2011 21:24
Странно выводится массив... Romantik (Dima) Общие вопросы C/C++ 3 16.12.2010 18:52
Delphi, ошибка деления на ноль, хотя знаменатель не ноль Эренка Помощь студентам 7 22.04.2010 15:56
Массив не выводится на экран vikaspb Общие вопросы C/C++ 7 22.01.2009 17:29