Консультация № 181016
29.11.2010, 15:22
0.00 руб.
29.11.2010, 15:36
0 13 1
Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:
1) Вычислить дату выхода на пенсию,учитывая,что мужчины выходят на пенсию в 60 лет, а женщины в 55. и учитывая так же високосный год.
Вот моя программка.(https://rfpro.ru/upload/3764)

Обсуждение

давно
Профессионал
153662
1070
29.11.2010, 16:53
общий
Вам нужно вычислить дату, значит нужно день месяц и год выхода на пенсию, а у Вас, как я понимаю, вводится просто год поступления на работу, соответственно нужно вводить полную дату поступления на работу, или дата выхода на пенсию вычисляется от другой даты, например окончания школы? А год окончания что обозначает(что считает этот код
Код:
 if (k=9) or(k=10) then o:=p+4;
if (k=11) then o:=p+3;
)? У вас ещё ошибка в коде загрузки рисунка, правильней сделать не жёсткий путь к файлу картинок, так как папка с картинками лежит в папке с программой надо сначала определить путь до папки с программой, а потом уже до картинки, вот так: image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'pict\men.jpg'); тогда программа будет правильно работать. Если Вы теперь переместите папку с программой в другое место ошибки не будет возникать
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
29.11.2010, 17:06
общий
Адресаты:
Спасибо большое,про то,как лучше загрузить картинку)
Не,вы не совсем понели,Год поступление,это совсем другое)
Выход человека,зависит прежде всего от даты рождения)
Например я родился 01.01.2000г, тогда дата выхода на пенсию будет равен 01.01.2060г)
+еще нужно учесть в высокосный год)
Неизвестный
29.11.2010, 17:10
общий
Адресаты:
если вы даже поможете сделать,чтобы указывал дату выхода на пенсию,не учитывая високосный год..будет очень здорово
давно
Профессионал
153662
1070
29.11.2010, 17:30
общий
Чего то я не соображу смысл учёта высокосного года или нужно строго отсчитать количество дней.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
29.11.2010, 17:49
общий
Адресаты:
Нет,просто нужно вывести дату выхода на пенсию.
ввожу в поле "Дата рождения" свою дату,выбераю пол, и напротив "Дата выхода на пенсию" должна появится дата
давно
Профессионал
153662
1070
29.11.2010, 18:27
общий
Получается что то вроде этого:
Код:
var
y, m, d: word;
p, k, o, t: integer;
begin
DecodeDate(StrToDate(Edit3.Text), y, m, d); // Получили исходный год
d:= 0;
Case RadioGroup1.ItemIndex of // Выбираем тип счёта
0: begin
for p:= y to y + 59 do // Считаем количество дней для мужчин
if IsLeapYear(p) then // Если год высокосный
d:= d + 366
else // Если нет
d:= d + 365;
label11.Caption:= DateToStr(StrToDate(Edit3.Text) + d); // Считаем и выводим результат
end;
1: begin
for p:= y to y + 54 do
if IsLeapYear(p) then
d:= d + 366
else
d:= d + 365;
label11.Caption:= DateToStr(StrToDate(Edit3.Text) + d);
end;
end;
end;
Только получается такой же результат, что и если к исходному году просто прибавить 60 или 55.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
29.11.2010, 18:38
общий
Весь проект.
Прикрепленные файлы:
7e791fc41df4c4529f7566e296810ab3.rar
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
29.11.2010, 18:44
общий
я попытался сделать по другому,т.е я работал со строками.
Вывелял из строки "ДР" год,затем к этому году прибавлял 60 или 55.
но почему то ошибку выдает,что типы разные.

P.S я пока не работал с датами в Delphi

Код:
var p,k,o,t,e,new,yy,no,code,new1:integer;
s,y,x:string;
begin
s:=edit3.text;
p:=strtoint(edit6.Text); {год поступления}
k:=strtoint(edit4.Text); {какой класс}
t:=strtoint(edit3.Text); {дата рождения}
e:=strtoint(edit2.Text); {текущий класс}
if (k=9) or(k=10) then o:=p+4;
if (k=11) then o:=p+3;
label9.Caption:=inttostr(o);
no:=pos('.',s);
y:=copy(s,no+4,length(s)-no); {год (число)}
x:=copy(s,1,length(s)-4); {дд.мм}
yy:=strtoint(y); {числом}
new:=0;
new1:=0;
if radiogroup1.ItemIndex=0 then
begin
new:=yy+men;
label9.Caption:=inttostr(new)+x;
end;
if radiogroup1.ItemIndex=1 then
begin
new1:=yy+women;
label9.Caption:=inttostr(new1)+x;
end;
давно
Профессионал
153662
1070
29.11.2010, 18:56
общий
В этой строке t:=strtoint(edit3.Text); {дата рождения} переменная должна быть не integer, а к примеру Double, так как тип дата имеет формат вещественного числа (у Вас переменная t целое число), отсюда и ошибка, Эта строка должна выглядеть так: t:= StrToFloat(Edit3.Text);. Мой вариант решения задачи Вас устраивает?
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
29.11.2010, 19:05
общий
Мой вариант Вас устраивает?
Вот Ваш исправленный вариант:
Код:
 s:=edit3.text;
p:=strtoint(edit6.Text); {год поступления}
k:=strtoint(edit4.Text); {какой класс}
e:=strtoint(edit2.Text); {текущий класс}
if (k=9) or(k=10) then o:=p+4;
if (k=11) then o:=p+3;
label9.Caption:=inttostr(o);
no:=pos('.',s);
y:=copy(s,no+4,length(s)-no); {год (число)}
x:=copy(s,1,length(s)-4); {дд.мм}
yy:=strtoint(y); {числом}
new:=0;
new1:=0;
if radiogroup1.ItemIndex=0 then
begin
new:=yy+60;
label11.Caption:= x + inttostr(new);
end;
if radiogroup1.ItemIndex=1 then
begin
new1:=yy+55;
label11.Caption:= x + inttostr(new1);
end;
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
29.11.2010, 21:15
общий
Адресаты:
конечно устраивает!!!
Большое спасибо!!!
давно
Профессионал
153662
1070
29.11.2010, 22:33
общий
это ответ
Здравствуйте, Павел Сергеенко!
Могу предложить такой вариант вычисления, как Вы хотели с учётом високосных годов:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
p: integer;
y, m, d: word;
begin
DecodeDate(StrToDate(Edit3.Text), y, m, d); // Получили исходный год
d:= 0;
Case RadioGroup1.ItemIndex of // Выбираем тип счёта
0: begin
for p:= y to y + 59 do // Считаем количество дней для мужчин
if IsLeapYear(p) then // Если год высокосный
d:= d + 366
else // Если нет
d:= d + 365;
label11.Caption:= DateToStr(StrToDate(Edit3.Text) + d); // Считаем и выводим результат
end;
1: begin
for p:= y to y + 54 do // Считаем количество дней для женщин
if IsLeapYear(p) then
d:= d + 366
else
d:= d + 365;
label11.Caption:= DateToStr(StrToDate(Edit3.Text) + d);
end;
end;
end;
Прикрепленные файлы:
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Мастер-Эксперт
425
4118
03.12.2010, 10:19
общий
Для вычисления прибавок лет к любой дате, более правильно использовать функцию из модуля DateUtils под названием IncYear(Какая-то_дата, Сколько_лет_прибавить). При этом автоматически учитывается високосный или невисокосный год.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа