IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Вычисление даты, задача на вычисление конечной даты
NightPaladin
сообщение 27.11.2004 16:47
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 67
Пол: Мужской

Репутация: -  0  +


Надо учитывать только то, что месяцы по 30 и 31 дню, высокосным годом и 29 днями февраля.
У Васи Пупкина неожиданно сломался компьютер. Из-за отсутствия нужных материалов на ремонт понадобится N дней. Определите дату окончания ремонта, если известно, что компьютер сломался в текущем году, и ремонт должен закончиться тоже в этом году.
Известна дата поломки в формате ДД.ММ и количество дней ремонта N.
Получить дату окончания ремонта в формате: ДД.ММ.
Пример:
Входные данные: Выходные данные:

01.06 30 01.07



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

program asd;
Uses
Crt;
const
n = 100;
m = 1000;
var
mas: array[1..n] of String;
mas2: array[1..m] of Integer;
date: String;
count,w,q,e,r,day,k,i: Integer;
pr,od: byte;

begin
ClrScr;
 WriteLn('Input date:');
 Readln(date);
 WriteLn('Input day:');
 Readln(day);

 For count:= 1 to Length(date) do
  mas[count]:=Copy(date,count,1);

     mas[1]:=mas[1]+mas[2];
     For count:= 2 to Length(date) do
     mas[count]:=  mas[count+1];
     Val(mas[1],q,w);
     mas2[1]:=q;

     mas[3]:=mas[3]+mas[4];
     For count:=4 to Length(date)-1 do
     mas[count]:=mas[count+1];
     Val(mas[3],e,r);
     mas2[2]:= e;

  Case e of
   1,3,5,7,9,11: k:=31;
   4,6,8,10,12: k:=30;
   2: k:=30;
  end;

  If day+q > k then
     begin
      i:=(day+q) div k;
      mas2[2]:=e+i;
      day:=day-(k-q);
      If
      For count:= e+1 to mas2[2] do
       begin
        If NOT Odd(count) = true then day:=day - 30;
        Writeln(day);
        If Odd(count) = true then day:= day - 31;
       end;
     For count:=1 to pr do
       day:= day-30;
     For count:=1 to od do
       day:= day-31;
        end;{
   else
      day:=day+q;

If day = 0 then day:=1;
Writeln(day,'.',mas2[2]);}
ReadKey;
end.

Все исходники должны помещаться в теги [ CODE] [ /CODE]

Сообщение отредактировано: volvo - 27.11.2004 16:53


--------------------
На горе лежит дискета
У неё испорчен boot
Через дырочку в конверте
Её вирусы грызут
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 6)
volvo
сообщение 28.11.2004 23:00
Сообщение #2


Гость






NightPaladin
Если это еще нужно, я набросал кое-что, погоняй эту программу. Найдешь баги - говори ;)

Код

Function GetInteger(s: String): Integer;
 Var i, Err: Integer;
 Begin
   If s[1] = '0' Then Delete(s, 1, 1);
   Val(s, i, Err); GetInteger := i
 End;

Const
 CurrYear = 2004;
 DayInMonth: Array[1 .. 12] Of Byte =
   (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

(*
{ Тестировалось с этими данными }
Const
 Repair: Integer = 50;
 st: String = '21.06';
*)
Var
 Day, Month, DaysBefore: Integer;
 p, i: Byte;
Var
 Repair: Integer;
 st: String;
begin
 Inc(DayInMonth[2], Byte((CurrYear mod 4) = 0));
 Write('Дата поломки > '); ReadLn(st);
 Write('Длительность ремонта > '); ReadLn(Repair);

 p := Pos('.', st);
 Day := GetInteger( Copy(st, 1, Pred(p)) );
 Month := GetInteger( Copy(st, Succ(p), Length(st)-p) );

 For i := 1 To Pred(Month) Do
   Inc(DaysBefore, DayInMonth[i]);
 Inc(DaysBefore, Day);

 Inc(DaysBefore, Repair);
 i := 1;
 While DaysBefore > DayInMonth[i] Do
   Begin
     Dec(DaysBefore, DayInMonth[i]); Inc(i)
   End;
 WriteLn('Ремонт закончится: ', DaysBefore, '.', i);
end.
 К началу страницы 
+ Ответить 
NightPaladin
сообщение 29.11.2004 10:57
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 67
Пол: Мужской

Репутация: -  0  +


Насчёт тегово спосибо учту. rolleyes.gif Програма тоже очень пригодилась. smile.gif
Безмерно благодарен.


--------------------
На горе лежит дискета
У неё испорчен boot
Через дырочку в конверте
Её вирусы грызут
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
BUGerKola
сообщение 27.10.2005 20:14
Сообщение #4


Гость






volvo
мне нужно без вызова функций. Простым тупым языком +)) мы такого ещё не проходили и я мало во что врубляю в твоих записях. Если можно попроще как-нибудь просто определить дату следующего дня и квартал.при помощи того же перечисляемого типа.

М
не было функций - УЧИ САМ! Тебе дали код, если ты "мал" для него то должен вырасти сам! Так или иначе тебе рано или поздно придется познакомиться с функцими.
Altair

 К началу страницы 
+ Ответить 
BUGerKola
сообщение 27.10.2005 20:51
Сообщение #5


Гость






ты мне скажи, вообще можно как нить это без функций сделать?
М
можно. доделаешь.
Altair

 К началу страницы 
+ Ответить 
BUGerKola
сообщение 27.10.2005 21:06
Сообщение #6


Гость






извиняйте, но или я не врубаюсь в код, или программа совсем не то считает что мне нужно. И как её подправить под себя я не пойму. Там совсем другое считает.
Мне нужно ввести сегоднящнюю дату, и чтоб прога вывела дату следующего дня и квартал
а тут что-то другое
 К началу страницы 
+ Ответить 
volvo
сообщение 27.10.2005 21:31
Сообщение #7


Гость






Цитата
или я не врубаюсь в код
Скорее всего... На запрос "Дата поломки" введи сегодняшнюю дату, "Длительность ремонта" введи 1 день... (Не забудь про CurrYear - сейчас уже 2005)... Получишь дату следующего дня. По месяцу определить квартал не должно быть проблемой...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 2:46
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"