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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2008, 22:17   #1
SINISTER
Новичок
Джуниор
 
Регистрация: 19.10.2008
Сообщений: 1
Сообщение Сложите программу, которая поможет работникам милиции.

Люди помогите решить задачу. Она, наверно, очень легкая, но я не шарю как ее и прочие задач делать. Очень хочу научится! Времени мало и некогда читать книги.

Так от, задача:
1. Три товариша были свидетелями дорожно-транспортного проишествия. Один из них запомнил что 4-значимый номер автомобиля делится без остатка на 2, 7 и 11. Второй подчеркнул что в записи номера есть две одинаковые цифры, а третий вспомнил что сума цифр номера 30.
Сложите программу, которая поможет работникам милиции.

P.S. Распишите пожалуйста все что нужно вводить и куда. Заранее спасибо.
SINISTER вне форума Ответить с цитированием
Старый 19.10.2008, 23:17   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Задача как раз не самая легкая и, если Вы не прикидываетесь и действительно ничего до этого не решали, то эта задача не для Вас.
Но я дам Вам решение, вдруг чему-нибудь научитесь.
Код:
uses crt;
var i:integer;
function SumCif(x:integer):integer;//функция подсчета суммы цифр числа
var t,sum:integer;
begin
sum:=0;
while x>0 do //пока число больше 0
  begin
   t:=x mod 10; //отделяем последнюю цифру
   sum:=sum+t;  //прибавляем ее
   x:=x div 10; //записываем число без последней цифры
  end;
SumCif:=sum; //присваиваем значение функции (запоминаем результат)
end;
function RavCif(x:integer):boolean; //функция определения есть ли 2 или больше одинаковых цифр
var t,k:integer;
    m:set of byte;//множество цифр
begin
m:=[];k:=0; //сначала множество пустое
while x>0 do //разбираем число на цифры как в предыдущей функции
  begin
    t:=x mod 10;
    if not (t in m) then //если цифры нет в множестве
      begin
       m:=m+[t]; //добавляем
       inc(k); //считаем (увеличиваем к на +1)
      end;
    x:=x div 10;
  end;
RavCif:=(k<3); //если в множестве меньше 3 цифр, то по крайней мере 2 одинаковые = истина
end;
begin
clrscr;
for i:=1010 to 9999 do //проверяем все 4-х значные числа от 1010, меньшие не содержат 
                       // одинаковых цифр или нечетные
if (i mod 2=0)and(i mod 7=0)and(i mod 11=0)and(SumCif(i)=30)and RavCif(i) //проверяем все условия
then writeln(i); //если выполняются, выводим число (8778)
readln
end.
puporev вне форума Ответить с цитированием
Старый 19.10.2008, 23:21   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
for i:=1000 to 9999 do
  if ((i mod 2)=0) and ((i mod 7)=0) and ((i mod 11)=0) then begin
    D4 := i mod 10;
    D3 := (i div 10) mod 10;
    D2 := (i div 100) mod 10;
    D1 := (i div 1000) mod 10;

    if ((D1=D2) or (D1=D3) or (D1=D4) or (D2=D3) or (D2=D4) or (D3=D4)) and ( (D1+D2+D3+D4)=30) then 
     WriteLn('Podhodit nomer ',I:4)
  end;

  end;
Добавлено
puporev, пока читал-писал Вы уже успели ответить... сорри...
увидел бы Ваш ответ - не писал бы... ;-)

Последний раз редактировалось Serge_Bliznykov; 19.10.2008 в 23:28.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.10.2008, 23:32   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

1234 mod 10=4
1234 mod 100 =34
1234 mod 1000=234
1234 mod 10000=1234
нужно
D4 := i mod 10;
D3 := i mod 100 div 10;
D2 := i mod 1000 div 100;
D1 := i div 1000;
Я чего-то с перепугу сделал почти на все случаи жизни, надо только в функции одинаковых цифр поменять 3 на переменную количества одинаковых цифр-1
puporev вне форума Ответить с цитированием
Старый 20.10.2008, 13:36   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

puporev, ага.
Полностью согласен с приведённым замечанием.
но заметьте, я успел исправить это на 4 минуты раньше, чем Вы написали об этой ошибке ;-P
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.10.2008, 13:42   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Как мне один товарищ сказал на форуме, puporev, ночью нужно спать.
puporev вне форума Ответить с цитированием
Старый 20.10.2008, 23:31   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, конечно, он прав!.. :-D
Но, половина двенадцатого — какая же это ночь? :-D
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.10.2008, 07:04   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Это я про себя писал, а у меня было половина второго.
puporev вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу которая выводит таблицу значений функйии akimbaev Паскаль, Turbo Pascal, PascalABC.NET 1 01.10.2008 00:21
Требуется написать программу которая переводит файл из одного вида в другой sarudan Помощь студентам 1 11.09.2008 16:17
написать программу которая строила графики функций GeSerKo Помощь студентам 1 05.09.2008 21:03
Кто поможет??? sashahttp Общие вопросы Delphi 1 24.06.2008 09:15
написать программу..которая с использованием метода наименьших квадратов определяет параметры зависимости Марго Помощь студентам 3 14.10.2007 15:47