Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
Что нужно изменить (добавить в код)
Вчера на уроке программирования получил задание: сделать программу которая бы считала сколько месяцев прожил человек. Вводить нужно: текущую дату и дату рождения объекта;)
В голову пришёл очень лёгенький код, но программа почему-то ошибается;(
И так:
Program Schitalka
var a,b,c,d,e,f,g,h,i,j:integer;
Begin
writeln('wvedite washu datu rojdenia');
read(a,b,c);
writeln('wvedite tekushuyu datu');
read(d,e,f);
g:=(f-c)*12;
h:=e-b;
i:=d-a mod 30;
j:=g+h+i;
writeln('vu projili ',j,' mesyacev');
end.

Вот такой код пришёл мне в голову...
программка ошибается...найдите ошибку или добавьте что-то в код.

кому понравилась задачка - прошу "+" в репутацию;))


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
1 | Автор: Berestovskiy | 2010-11-09, 19:55   |  Репутация: [ + 211 ]
твоя программа сможет считать только в том случае если номер месяца теккущей даты больше чем номер месяца даты прождения - тогда разницу годов можно умножать на 12. соответственно если текущий номер месяца меньше чем номер месяца рождения то разница этих чисел у тебя будет меньше нуля, и во вторых просто отнять месяцы можно тоже только тогда, когда номер дня текущей даты больше чем номер дня даты рождения. да и вообще строчка
Code
i:=d-a mod 30;

непонятно что делает. - если у тебя разница d и a будет 30 - что может соответствовать длинне одного из месяцев то остаток от деления на 30 будет 0 и этот месяц не учтется. врятли вообще хоть на одном тестовом примере программа отработает правильно.


If you can't make it GOOD make it LOOK GOOD. B.Gates
2 | Автор: DoVe | 2010-11-09, 20:08   |  Репутация: [ + 48 ]
В тот день мы повторяли условные операторы, не сложно было догадаться, что именно их и нужно было использовать при решении задачи.
Вот мой вариант, вроде бы правильный. Пост выше полностью объясняет решение, так что вроде бы непонятного ничего не должно быть =).
Code

program u0811;
uses dos; {нужен для того чтобы текущую дату брать из системы}
var d,m,y,w:word; {переменная w(номер дня недели) нужна лишь для того, чтобы без ошибок взять дату, ах да, тип word, это одно из условий оператора выборки даты =( }
     d1,m1,m2,y1,y2:integer;
BEGIN

  GetDate(y,m,d,w); {берем =)}
  writeln('Текущая дата: ',d,' ',m,' ',y);
  writeln('Пожалуйста введите дату своего рождения (ДД ММ ГГГГ):');
  readln(d1,m1,y1);
  if m>=m1 then
   begin
    y2:=y-y1;
    m2:=m-m1;
   end
  else
   begin
    y2:=y-y1-1;
    m2:=12+m-m1;
   end;
  if d<d1 then
   begin
    m2:=m2-1;
   end;
  m2:=m2+y2*12;
  writeln('Вы прожили ',m2,' Полных месяцев.');
  readln;

END.

P.S. - решил прописать выборку текущей даты из системы, по этому в местах где могут возникнуть вопросы я написал комментарии.
3 | Автор: AnCUBE9 | 2010-11-09, 22:46   |  Репутация: [ + 4 ]
Реомендую посмотреть то, что уже сделано до вас
http://primat.org/publ/8-1-0-155
4 | Автор: admin | 2010-11-12, 14:15   |  Репутация: [ + 22 ]
это наше домашнее задание))
5 | Автор: AnCUBE9 | 2010-11-12, 17:05   |  Репутация: [ + 4 ]
5 | Автор: AnCUBE9 | 2010-11-12, 17:05   |  Репутация: [ + 4 ]
ну а чем плохо, что нам решили домашнее задание?:))

Нужна помощь? Сюда: vkontakte.ru/berestovskiy
6 | Автор: Berestovskiy | 2010-11-12, 17:23   |  Репутация: [ + 211 ]
  • Страница 1 из 1
  • 1
Поиск: