![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите, пожалуйста, решить задачку... Вроде до этой все получалось, а над этой уже три недели думаю:
Задача: пусть дан фрагмент программы: type месяц=(январь, февраль, март, апрель, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь); var k:1..366; d:1..31; m:месяц. Определить (d,m)-дату k-того по счету дня ВИСОКОСНОГО года. |
|
#2
|
||||
|
||||
|
А условие менять нельзя?
Без таких переменных и введения именно такого типа? |
|
#3
|
|||
|
|||
|
Ввести костанту (массив) для дней в месяце, а дальше обратным отсчетом.
Код:
type TDayInMonth = record month : месяц; days : integer; end; const cDayInMonth : Array [1..12] Integer = (31, 29, 31, 30,...), ... var n : Integer; m : Integer; ResDate : String; n := k; For I := 1 To 12 Do begin m := I; If n <= cDayInMonth[i] Then break; n := n - cDayInMonth[i]; end; ResDate :=IntToStr(n) + ' ' + месяцToStr(месяц(m-1)); Если что непонятно - пиши. |
|
#4
|
|||
|
|||
|
У меня в этом-то вся и проблема, что с помощью массива нельзя. Нужно с помощью перечислимого типа. Через всякие CASE .. OF и прочее. У меня ничего не получается, не считает программа ничего....
|
|
#5
|
|||
|
|||
|
Вот и нельзя-то.... меня эта задача скоро с ума сведет, уже черт знает сколько пытаюсь ее написать
|
|
#6
|
||||
|
||||
|
Вот в принципе работает. Только с небольшими изменениями. Не знаю как с русскими названиями сделать. Во вторых как переводить TMonth в string формат чтобы вывести на экран.
Поэтому поступил несколько хитро. Может сами переделаете как надо или местные профи подскажут. Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMonth =(jan, feb, mar, apr, may, jun, jul, aug, sen, okt, noy, dec);
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Function m1(m:TMonth):integer;
var k:1..366;
d:1..31;
m:TMonth;
st:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Var t:string;
n,i:integer;
label 10;
begin
k:=StrToInt(Edit1.text);
m:=jan;
For i:=1 to 12 do
begin
d:=m1(m);
if k>d then inc(m)
else
begin
d:=k;
goto 10;
end;
k:=k-d;
end;
10: label1.Caption:= st;
label2.Caption:= IntToStr(d);
end;
Function m1;
var day:integer;
begin
case m of
jan: begin day := 31; st:='январь;end;
feb: begin day := 29; st:='февраль';end;
mar: begin day := 31; st:='март';end;
apr: begin day := 30; st:='апрель';end;
may: begin day := 31; st:='май';end;
jun: begin day := 30; st:='июнь';end;
jul: begin day := 31; st:='июль';end;
aug: begin day := 31; st:='август';end;
sen: begin day := 30; st:='сентябрь';end;
okt: begin day := 31; st:='октябрь';end;
noy: begin day := 30; st:='ноябрь';end;
dec: begin day := 31; st:='декабрь';end;
end;
result:=day;
end;
end. |