Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оператор MOD 
V
    Опции темы
Demonix
  Дата 17.11.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 17.11.2006
Где: Россия

Репутация: нет
Всего: нет



Ребята, такая тема:

   y:=66 mod 10;  'Это пашет'
  
Но вот так:

   y:=a mod 10; 'Уже не пашет'

Поясните, как он работает или че надо дописать?! smile   smile 
PM MAIL WWW ICQ Skype   Вверх
Kuvaldis
Дата 17.11.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: нет
Всего: 61



Demonix, 
а тип какой у переменной а?
и вообще, "код в студию" smile  Мы ж тут не ясновидящие


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Demonix
Дата 18.11.2006, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 17.11.2006
Где: Россия

Репутация: нет
Всего: нет



Код

program i6;
uses dos,crt;
var
a,x,y:real;
begin
a:=66;
x:=frac(a/10);
y:=a mod 10;
writeln(x:0:0);
writeln(y:0:0);
readln;
end.


Причем frac работает, а mod нет. Вообще-то это часть большей программы. Но вот в такой маленькой я пытался разобраться, почему не пашет mod (как и div, кстати). Но он не запускает программу, если y:=a mod 10; и просто пишет, что об ошибке.
А если ставишь число, все работает...



Это сообщение отредактировал(а) volvo877 - 18.11.2006, 20:33
PM MAIL WWW ICQ Skype   Вверх
sorryuz
Дата 18.11.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 1.12.2005
Где: Таш\Узбекист ан

Репутация: нет
Всего: нет



Код

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
  x,y: real;
  a: integer; {Мод работает только с целочисленными данными}
begin
  a:=66;
  x:=frac(a/10);
  y:=a mod 10;
  writeln(x:0:0);
  writeln(y:0:0);
readln;
end.


Это сообщение отредактировал(а) volvo877 - 18.11.2006, 20:34
PM MAIL WWW ICQ   Вверх
Demonix
Дата 18.11.2006, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 17.11.2006
Где: Россия

Репутация: нет
Всего: нет



sorryuz, 
Постойте, это, допустим, будет работать, но у нас же есть еще и 
Код

begin
  a:=66;
  x:=frac(a/10); {здесь тоже деление, а если a - integer, то здесь будет ошибка!}
  y:=a mod 10;
  writeln(x:0:0);
  writeln(y:0:0);
readln;


Это сообщение отредактировал(а) volvo877 - 18.11.2006, 20:35
PM MAIL WWW ICQ Skype   Вверх
Kuvaldis
Дата 18.11.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: нет
Всего: 61



Demonix, 
1. Используй кнопку код с выпадающим списком языков, где выбирай язык Delphi. В поле ответа появятся теги "код". Между ними и вставляешь свои программы
2. 
Цитата

 {здесь тоже деление, а если a - integer, то здесь будет ошибка!}

ТЫ проверял на компиляторе??? Все работает (идет неявное преобразование integer в real, и все отрабатывает "как в лучших домах Парижа и ЛондОна") smile 

Только для нормального отображения дробной части нужно написать было
Код

  writeln(x:0:1);
  writeln(y:0:1);


Это сообщение отредактировал(а) Kuvaldis - 18.11.2006, 17:35


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Demonix
Дата 18.11.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 17.11.2006
Где: Россия

Репутация: нет
Всего: нет



Короче было вот это задание:

Игрок А объявляет двузначное число от 01 до 99. Игрок Bменяет местами его цифры и прибавляет полученное число к сумме его цифр. Полученный результат он объявляет игроку А. Игрок
А проделывает с этим числом ту же процедуру, и так они продолжают поступать поочередно, объявляя числа. От суммы чисел берется остаток от деления на 100, поэтому объявляются лишь двузначные числа. Какие числа может объявить игрок А на начальном шаге, чтобы игрок В в некоторый момент объявил число 00.

Наши мозги додумались лишь до этого:
{Паскаль}


Код
program i6;
var
c,a,x,y,z,b,d:integer;
begin
randomize;
     c:=random(99);
     if c=0 then c:=random(99);
     writeln('c=',c);
     a:=c;
     while (a<>0) do
          begin
          x:=a mod 10;
          y:=a div 10;
          b:=x+y;
          x:=x*10;
          z:=x+y;
          d:=z+b;
          writeln('perevernutoe=',z);
          readln;
          writeln('summa=',b);
          readln;
          writeln('konechnoe d=',d);
          readln;
          d:=d mod 100;
          writeln('nacahlnoe d=',d);
          readln;
          a:=d;
          if a=c then
          begin
          writeln('fatal error');
          a:=0;
          end;
          if a=z then
          begin
          writeln('fatal error');
          a:=0;
          end;
          end;
          readln;
         end.
   smile 

Но в итоге программа приходит или к её собственному "Фатал ерору" или начинает гонять по кругу некоторые числа... К примеру начали с 41 и затем пришли к 93, которое через несколько порядков вылазиет заново... мы решили, что лучше сделать так:  smile , а иначе никак...




Это сообщение отредактировал(а) Demonix - 18.11.2006, 20:08
PM MAIL WWW ICQ Skype   Вверх
volvo877
Дата 18.11.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Demonix, я бы твою задачу решал так:
Код

var i, first, second, count: integer;
begin
  for i := 1 to 99 do begin
    first := i; { Первый получил число... }
    count := 0;
    repeat

      { Второй получил свое переворотом цифр и добавлением суммы цифр
         (по модулю 100 - только 2 последние цифры) }
      second := (10 * (first mod 10) + (first div 10) +
                (first div 10) + (first mod 10)) mod 100;

      { Если не получен 0, то первый точно так же пелучает свое число }
      if second <> 0 then begin
        first := (10 * (second mod 10) + (second div 10) +
                  (second div 10) + (second mod 10)) mod 100;

        { Эо - для контроля зацикленности }
        inc(count);
      end;

    { Повторять до тех пор, пока не зациклились (1000 проходов) или пока второй не получил 0 }
    until (second = 0) or (count > 1000);

    { Если ТОЛЬКО второй игрок получил 0 из числа, полученного от первого,
       а не случилось так, что первый УЖЕ передал 0 второму, и естественно, 0 и остался,
       насколько я понял, тебя этот вариант не интересует }
    if (first <> 0) and (second = 0) then begin
      { Напечатать само число, и проделать весь цикл заново, чтобы проследить решение }
      writeln; writeln('i = ', i);

      first := i;
      repeat

        write(' A: ', first div 10, first mod 10);
        second := (10 * (first mod 10) + (first div 10) +
                  (first div 10) + (first mod 10)) mod 100;
        write(' B: ', second div 10, second mod 10);
        first := (10 * (second mod 10) + (second div 10) +
                  (second div 10) + (second mod 10)) mod 100;

        { Здесь, как понятно, зацикленность не произошла, поэтому Count не увеличиваем }
      until (second = 0);
      writeln;
    end
      { иначе, если результат обработки нас не устроил, просто печатаем точку,
         чтобы показать, что программа считает, а не зависла }
    else write('.');

  end;
end.

Это имелось в виду? smile 
PM MAIL   Вверх
Demonix
Дата 19.11.2006, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 17.11.2006
Где: Россия

Репутация: нет
Всего: нет



volvo877, 

Именно это и было нужно! smile  В точку! Благодарю за помощь!!! smile 
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.