|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Help me...не могу решить задачу
Помогите, пожалуйста, решить задачку... Вроде до этой все получалось, а над этой уже три недели думаю:
Задача: пусть дан фрагмент программы: 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. |