Телескопы покупают здесь


A A A A Автор Тема: Новая программа для обработки наблюдений  (Прочитано 2641 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн St@sАвтор темы

  • **
  • Сообщений: 54
  • Благодарностей: 1
    • Сообщения от St@s
Я написал программу для определения радиантов метеорных потоков.
Скачать программу можно с сайта http://www.astroprogs.narod.ru/
Хотелось бы узнать мнение посетителей форума о программе.
SkyWatcher DOB 8"

Sumo

  • Гость
Мелкие замечания по исходникам:
1. Кучу if'ов вида:
If en1<32 then
  begin
  d2[1]:=en1;
  d2[2]:=1;
  end;
 If (en1>31) and (en1<61) then
  begin
  d2[1]:=en1-31;
  d2[2]:=2;
  end;
 If (en1>60) and (en1<92) then
  begin
  d2[1]:=en1-60;
  d2[2]:=3;
  end;

  и т.д.

спокойно можно заменить на две строчки!!!:
 d2[1] := d2[1] mod 31;
  d2[d] := (en1 div 31) + 1;

У вас таких мест много.

2. Конструкция:
If CheckBox2.Checked=True then
 begin
 If dmax[2]=1 then en:=0;
 If dmax[2]=2 then en:=31;
 If dmax[2]=3 then en:=60;
 If dmax[2]=4 then en:=91;
 If dmax[2]=5 then en:=121;
 If dmax[2]=6 then en:=152;
 If dmax[2]=7 then en:=182;
 If dmax[2]=8 then en:=213;
 If dmax[2]=9 then en:=244;
 If dmax[2]=10 then en:=274;
 If dmax[2]=11 then en:=305;
 If dmax[2]=12 then en:=335;
 en:=en+dmax[1];
 end;

меняется на:
var
  DayCount : array [1..12] of integer = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335);
begin
...
  en := en + DayCount[en];
...
end;

И таких мест навалом.

3. Если переписать программу с использованием 1 и 2, она станет раз в 10 меньше и понятнее.

p.s. Стиль программирования ужасный! Комментарий на всю программу один! Какой уж тут OpenSource...
« Последнее редактирование: 16 Мар 2003 [12:54:04] от Sumo »

Sumo

  • Гость
И еще:
If CheckBox2.Checked=True then
begin
end;
If CheckBox2.Checked=True then
begin
end;

лучше писать как
if CheckBox2.Checked then
begin
end
  else
     begin
     end;

Sumo

  • Гость
спокойно можно заменить на две строчки!!!:
 d2[1] := d2[1] mod 31;
  d2[d] := (en1 div 31) + 1;

Сейчас внимательно посмотрел и понял, что двумя строчками не решается ... Решается подольше, но в любом случае без кучи if-ов. Например:
var
  DayCount : array [1..13] of integer = (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 1000);
  i : byte;
begin
...
  i := 1;
  while (i <= 12) and (en1 <= DayCount[i + 1]) do
    inc(i);
  d2[2] := i;
  d2[1] := en1 - DayCount[i];
...
end;
Естественно подобные вещи в виде функций оформляются.

И еще: високосность года учитывается?
« Последнее редактирование: 16 Мар 2003 [13:47:41] от Sumo »

oxyd

  • Гость
C одной стороны вы вроде как помогаете челу писать в следующий раз эффективнее. А с другой стороны, если такие умные, написали бы сами! Вообще-то, когда я что-то пишу, то тоже часто использую неэффективные конструкции, которые либо помогают мне не запутаться (что я в этом месте хотел), либо являются продуктом многочисленных исправлений и дебаггинга.

Sumo

  • Гость
А с другой стороны, если такие умные, написали бы сами!

Написали уже ... http://www.simfov.ru ... :)

Цитата
Вообще-то, когда я что-то пишу, то тоже часто использую неэффективные конструкции, которые либо помогают мне не запутаться (что я в этом месте хотел), либо являются продуктом многочисленных исправлений и дебаггинга.

Человек выложил с программой исходники, я их прокоментировал и задал вопрос. В чем проблема-то?
Я надеюсь, что это сподвигнет автора аккуратнее подходить к алгоритмам.
« Последнее редактирование: 18 Мар 2003 [22:56:52] от Sumo »

Оффлайн St@sАвтор темы

  • **
  • Сообщений: 54
  • Благодарностей: 1
    • Сообщения от St@s
Мне бы хотелось услышать мнение о самой программе, а не об особенностях исходного кода, я знаю, что он не очень хорошо написан.
SkyWatcher DOB 8"