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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2014, 18:41   #1
ZdSaliery
Пользователь
 
Регистрация: 22.03.2014
Сообщений: 14
Сообщение Цикл с условиями. Delphi.

Здравствуйте! Столкнулся с небольшой проблемой - понимаю ее с логической стороны, но знания языка не достаточны. Суть такова - программе вводятся данные по ФАР, и в следствии этих данных она рисует топологию, которую можно в последующем использовать при расчетах в САПР. Мне необходимо было внести изменения позволяющие менять фазу по определенному закону(y=x;x^2;x^3). Характеризуется данное изменение тем что фаза может меняться либо по одной оси - либо по окружности, естественно с разными формулами. Реализация данной функции сделана через checkbox1.
Теперь сама проблема - при попытке ввести 3 checkbox'a с условиями выбора закона изменения(Линейный, Квадратичный, Кубичный), так что если выбран один - оставшиеся два не выбирались и расчет проводился уже от условия выбора checkbox1 - привел к тому что программа воспринимает мои условия как просто текст - и считает все подряд, чего мне естественно не надо. Кто-нибудь подскажите пожалуйста, как это сделать.
Собственно сам текст:
Код:
for Q:=0 to (sqr(N)-1) do
begin
W1:=10000;
I:=Q mod N;  // nomer stolbza elementa
G:=Q div N;   //  nomer stroki elementa
HX:=D*(Abs(I+1/2)-N/2); //koordinata X elementa
HY:=D*(Abs(G+1/2)-N/2);   //koordinata Y elementa
L:=sqrt(sqr(HX-FX)+sqr(HY-FY)+sqr(H));  //rasstoianie ot elementa do fokusa
Beta:=Koef/sqr(D*((N-1)/2));
       if  checkbox3.Checked=True then    //lineinaia
             begin
             checkbox4.enabled:=False;
             checkbox5.enabled:=False;
             end
             else
             ShowMessage ('Нужно выбрать только один закон изменения');
             end;
  begin
            if checkbox2.Checked=False then
            begin
               F1:=(формула для расчета по одной оси)
            end 
            else
            begin
               F1:=(формула для расчета по окружности);
            end;
      if  checkbox4.Checked=True then       //kvadrati4naia
            begin
      checkbox3.Checked:=False;
      checkbox5.checked:=False;
end
else
ShowMessage ('Нужно выбрать только один закон изменения');
 end;
 if checkbox2.Checked=False then
            begin
               F1:=(формула для расчета по одной оси);
            end
            else
             begin
               F1:=(формула для расчета по окружности);
            end;
      if  checkbox5.Checked=True then        //kubi4naia
         begin
          checkbox3.Checked:=False;
          checkbox4.checked:=False;
end
          else
ShowMessage ('Нужно выбрать только один закон изменения');
            end;
            if checkbox2.Checked=False then
            begin
               F1:=(формула для расчета по одной оси);
              end
            else
             begin
               F1:=(формула для расчета по окружности);
            end;
      Fi:=F1-360*trunc(F1/360);
        if Fi>180 then
        Fi:=Fi-360;
ZdSaliery вне форума Ответить с цитированием
Старый 22.04.2014, 18:49   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В алгоритм не вникал, но явно с блоками begin ... end чехарда
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.04.2014, 18:52   #3
ZdSaliery
Пользователь
 
Регистрация: 22.03.2014
Сообщений: 14
По умолчанию

А как обойтись без них? И ваще возможна ли реализация такая?
ZdSaliery вне форума Ответить с цитированием
Старый 22.04.2014, 19:06   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Без них не нужно обходиться. Их нужно правильно расставить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.04.2014, 21:15   #5
ZdSaliery
Пользователь
 
Регистрация: 22.03.2014
Сообщений: 14
По умолчанию

Аватар, не могли бы вы подсказать каким образом. Правда, плохо знаю язык, но главное же мотивация =)
ZdSaliery вне форума Ответить с цитированием
Старый 22.04.2014, 21:39   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну сначала код отформатировать так, что бы было видно где операторный блок начинается и где заканчивается. Отступами нормальными а не крендебобильно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.04.2014, 22:07   #7
ZdSaliery
Пользователь
 
Регистрация: 22.03.2014
Сообщений: 14
По умолчанию

Не совсем наверное наглядно, ну вот примерно вот так вот. Посоветовали еще OnClick сделать, не совсем понимаю что это?
Код:
if  checkbox3.Checked=True then    //Линейный
        begin
              checkbox4.enabled:=False;
              checkbox5.enabled:=False;
        end
         else
             ShowMessage ('Нужно выбрать только один закон изменения');
        end;
         begin
if checkbox2.Checked=False then
              begin
              F1:=(формула для расчета по одной оси)
         end 
          else
              begin
              F1:=(формула для расчета по окружности);
         end;
if  checkbox4.Checked=True then       //Квадратичный
         begin
             checkbox3.Checked:=False;
             checkbox5.checked:=False;
         end
          else
             ShowMessage ('Нужно выбрать только один закон изменения');
         end;
if checkbox2.Checked=False then
         begin
               F1:=(формула для расчета по одной оси);
         end
            else
             begin
               F1:=(формула для расчета по окружности);
            end;
if  checkbox5.Checked=True then        //Кубичный
          begin
            checkbox3.Checked:=False;
            checkbox4.checked:=False;
         end
           else
             ShowMessage ('Нужно выбрать только один закон изменения');
            end;
if checkbox2.Checked=False then
          begin
               F1:=(формула для расчета по одной оси);
          end
            else
             begin
               F1:=(формула для расчета по окружности);
          end;
ZdSaliery вне форума Ответить с цитированием
Старый 22.04.2014, 22:15   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

И че толку от такого форматирования? В исходники любого юнита делфи загляните
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.04.2014, 22:43   #9
ZdSaliery
Пользователь
 
Регистрация: 22.03.2014
Сообщений: 14
По умолчанию

Хорошо, признаю, я не умеют делать то, что вы просите... Но давайте отбросим эти визуальные преобразования, и переступим через ваши профессионально-эстетические взгляды на форматирование текста... Вы можете подсказать мне где я ошибаюсь,мне действительно нужна подсказка человека разбирающегося в Delphi...
ZdSaliery вне форума Ответить с цитированием
Старый 23.04.2014, 08:54   #10
syrj
 
Регистрация: 18.04.2013
Сообщений: 4
По умолчанию Вот немного поправил ваш код.

Вот немного поправил ваш код. В своих проектах я делаю выбор через case of, так для процессора меньше работы и нагрузка меньше.

Код:
if  checkbox3.Checked=True then    //Линейный
begin
    checkbox4.enabled:=False;
    checkbox5.enabled:=False;
end;
    if  checkbox3.Checked=False then
begin
    ShowMessage ('Нужно выбрать только один закон изменения');
end;

if checkbox2.Checked=False then
begin
    F1:=(формула для расчета по одной оси)
end
else
    F1:=(формула для расчета по окружности);

    if  checkbox4.Checked=True then       //Квадратичный
begin
    checkbox3.Checked:=False;
    checkbox5.checked:=False;
end;

if  checkbox4.Checked=False then
begin
    ShowMessage ('Нужно выбрать только один закон изменения');
end;

if checkbox2.Checked=False then
begin
    F1:=(формула для расчета по одной оси);
end
else
   F1:=(формула для расчета по окружности);

if  checkbox5.Checked=True then        //Кубичный
          begin
            checkbox3.Checked:=False;
            checkbox4.checked:=False;
         end
if  checkbox5.Checked=False then
begin
             ShowMessage ('Нужно выбрать только один закон изменения');
end;
if checkbox2.Checked=False then
          begin
               F1:=(формула для расчета по одной оси);
          end
            else
               F1:=(формула для расчета по окружности);



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 23.04.2014 в 09:08.
syrj вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл с условиями и выход из цикла KJ_ya Microsoft Office Excel 5 20.01.2013 14:43
цикл while (delphi) mxra1n Помощь студентам 8 25.06.2012 19:43
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34