Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2012, 22:39   #1
Johny91
Пользователь
 
Регистрация: 21.11.2009
Сообщений: 37
По умолчанию проблемка с циклами

значит ближе к теме:
Заношу данные в stringgrid для того чтобы сделать календарик. Код написал по-моему ужасный С циклами не разобрался(=.

В коде я пытаюсь сделать текущий месяц, чтобы он выводился сразу на экран. Но не суть.
koldays- количество дней в месяце
weekday-номер дня недели.
цикл подгонял чуть-чуть. Однако он работает. Но уж больно по-дурацки выглядит.
Если не сложно подскажите как оптимизировать его.




Код:
procedure TForm1.FormCreate(Sender: TObject);
var
a,month,god:string;
begin
dtp1.Date:=Now;

a:=DateToStr(dtp1.date);
delete(a,1,3);
month:=copy(a,1,2);
god:=copy(a,4,4);
lbl1.Caption :=god;
    cbb1.ItemIndex:=StrToInt(month)-1;
    cbb2.ItemIndex:=StrToInt(god)-2000;


startdate:=EncodeDate(strtoint(god),strtoint(month),01);
weekday:=DayOftheWeek(startdate);

koldays:=daysinamonth(StrToInt(god),StrToInt(month));
k:=0;
j:=weekday-1;
 while k<koldays do begin

  while j<strngrd1.colcount do begin
    k:=k+1;
  strngrd1.Cells[j,0]:=IntToStr(k);
  j:=j+1;

  end;
  i:=1;
  j:=0;
  while j<7 do begin
    k:=k+1;
  strngrd1.Cells[j,i]:=IntToStr(k);
  j:=j+1;

  end;
  i:=2;
  j:=0;
  while j<7 do begin
    k:=k+1;
  strngrd1.Cells[j,i]:=IntToStr(k);
  j:=j+1;

  end;
   i:=3;
  j:=0;

  while j<7 do begin
    k:=k+1;
  strngrd1.Cells[j,i]:=IntToStr(k);
  j:=j+1;

  end;

  i:=4;
  j:=0;
  p:=koldays-k;
  edit2.Text:=IntToStr(p);
  while j<p do begin
    k:=k+1;
  strngrd1.Cells[j,i]:=IntToStr(k);
  j:=j+1;

  end;


  if p>7 then begin

  i:=5;
  j:=0;
  p:=koldays-k+1;
  while j<p do begin
  strngrd1.Cells[j,i]:=IntToStr(k);
  j:=j+1;
  k:=k+1;
  end;
  end;
 end;
end;

Последний раз редактировалось Johny91; 20.02.2012 в 22:43.
Johny91 вне форума Ответить с цитированием
Старый 21.02.2012, 00:31   #2
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

вывод месяца и года опускаю ...
Код:
  curDate:TDate;
 ...
var
  day,start,i:integer;
begin
 Day:= DayOf(curDate);
 start:=DayOfTheWeek(curDate-Day+1)-2;
 for i:=1 to DaysInMonth(curDate) do
    StringGrid1.Cells[(start+i) mod 7 ,(start+i) div 7]:=inttostr(i);
 StringGrid1.RowCount:=(i-1) div 7 +1;
 StringGrid1.Row:=(Day+start) div 7;
 StringGrid1.Col:=(Day+start) mod 7
end;
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 21.02.2012, 22:00   #3
Johny91
Пользователь
 
Регистрация: 21.11.2009
Сообщений: 37
По умолчанию

спасибо большое. тему можно закрыть.
Johny91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с циклами shutofka Общие вопросы Delphi 3 13.02.2012 17:30
практическая с циклами по BC++ Juice_TKD Помощь студентам 2 17.05.2011 03:17
C++ Операции с циклами Pascaler Помощь студентам 4 03.12.2010 20:37
работа с циклами серг Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 22.04.2010 21:34
Робота с циклами maloy-rom Помощь студентам 5 14.06.2009 19:53