Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.04.2008, 16:57
Cathrinka Cathrinka вне форума
Прохожий
 
Регистрация: 23.04.2008
Сообщения: 9
Репутация: 10
По умолчанию Help me...не могу решить задачу

Помогите, пожалуйста, решить задачку... Вроде до этой все получалось, а над этой уже три недели думаю:
Задача: пусть дан фрагмент программы:
type месяц=(январь, февраль, март, апрель, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь);
var k:1..366; d:1..31; m:месяц.
Определить (d,m)-дату k-того по счету дня ВИСОКОСНОГО года.
Ответить с цитированием
  #2  
Старый 23.04.2008, 19:05
Аватар для Professor Farnsworth
Professor Farnsworth Professor Farnsworth вне форума
Прохожий
 
Регистрация: 19.04.2008
Сообщения: 42
Репутация: 10
По умолчанию

А условие менять нельзя?
Без таких переменных и введения именно такого типа?
Ответить с цитированием
  #3  
Старый 23.04.2008, 19:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ввести костанту (массив) для дней в месяце, а дальше обратным отсчетом.

Код:
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  
Старый 23.04.2008, 21:55
Cathrinka Cathrinka вне форума
Прохожий
 
Регистрация: 23.04.2008
Сообщения: 9
Репутация: 10
По умолчанию

У меня в этом-то вся и проблема, что с помощью массива нельзя. Нужно с помощью перечислимого типа. Через всякие CASE .. OF и прочее. У меня ничего не получается, не считает программа ничего....
Ответить с цитированием
  #5  
Старый 23.04.2008, 21:57
Cathrinka Cathrinka вне форума
Прохожий
 
Регистрация: 23.04.2008
Сообщения: 9
Репутация: 10
По умолчанию

Вот и нельзя-то.... меня эта задача скоро с ума сведет, уже черт знает сколько пытаюсь ее написать
Ответить с цитированием
  #6  
Старый 23.04.2008, 23:21
Аватар для Professor Farnsworth
Professor Farnsworth Professor Farnsworth вне форума
Прохожий
 
Регистрация: 19.04.2008
Сообщения: 42
Репутация: 10
По умолчанию

Вот в принципе работает. Только с небольшими изменениями. Не знаю как с русскими названиями сделать. Во вторых как переводить 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter