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

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

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

 
 Ответить  Открыть новую тему 
> Вычисление даты, задача на вычисление конечной даты
сообщение
Сообщение #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 -


--------------------
На горе лежит дискета
У неё испорчен boot
Через дырочку в конверте
Её вирусы грызут
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


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


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


Гость






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

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

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


Гость






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

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


Гость






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


Гость






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

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

 





- Текстовая версия 3.05.2024 17:06
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name