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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2011, 16:01   #1
dukales
Пользователь
 
Регистрация: 26.06.2011
Сообщений: 58
Радость Как обойти условный цикл?!

Добрый день, дорогие форумчане.
Писал одной знакомой лабу и возникли проблемки. Преподаватель не разрешает в ней пользоваться условными операторами, а иначе никак нельзя проверить условие делимости на ноль. Помогите, пожалуйста.
Задание:
Цель работы:
Изучение структуры программы, получение навыков ввода-вывода информации и выполнения простейших вычислений.
Задача работы: Рассчитать коэффициент передачи электрической цепи. Значения сопротивления и величину ЭДС Е источника постоянного напряжения выбрать самостоятельно. Для выполнения расчетов необходимо получит выражение коэффициента передачи цепи К. Коэффициентом передачи цепи К называется отношение выходного напряжения цепи U2 к входному напряжению U1: K=U2/U1. Величина входного напряжения во всех вариантах схем равна ЭДС источника постоянного напряжения U1=E. Для расчета U2 можно использовать любые известных методы и законы (закон Ома, законы Кирхгофа, методы узловых напряжений и контурных токов). Следует помнить, что при последовательном соединении сопротивлений Ra и Rb результирующее сопротивление равно их сумме Ra+Rb, а при параллельном соединении сопротивлений – величине (Ra-Rb)/(Ra+Rb). Необязательно стремиться получить одну конечную (зачастую сложную) формулу для расчета искомой величины. Последовательность из нескольких более простых формул также может привести к нужному результату.
фото схемки:

Код:
Код:
program pr2;
var E, R1, R2, R3, R4, R5, R23, R45 : integer ;
    I2, U2,I0, U0, R2345, R, K : real ;
begin
   K := 0 ;
   Writeln ('Vvedite E (V) = ') ;
   Readln (E) ;
   repeat
     Writeln ('Vvedite R1, R2, R3, R4, R5 (Om) = ') ;
     Readln (R1, R2, R3, R4, R5) ;
   until not(r1=0)or not(r2=0)or(r3=0)or (r4=0)or (r5=0);  
   R23:=R2+R3 ;
   R45:=R4+R5 ;
        R2345:=(R23*R45)/(R23+R45) ;
  writeln('r2345=',r2345);
   R:=R1+R2345 ;
   I0:=E/R ;
   U0:=R1*I0 ;
   I2:=U0/R45;
   U2:=I2*R5 ;
   K:=U2/E ;
   Writeln ('Koefficient peredachi cepi = ', K) ;
   Readln ;
   End.
Проблема: преподаватель вводит такое данные, что в формулах начинается деление на 0 и вылетает ошибка. Требует сдавать в turbopascale.
dukales вне форума Ответить с цитированием
Старый 28.06.2011, 16:09   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Преподаватель не разрешает в ней пользоваться условными операторами
А чем разрешает? while?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.06.2011, 16:27   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
не разрешает в ней пользоваться условными операторами
я так понимаю это if ну тогда без оного)
case - оператор выбора
Код:
R:=R1+R2345 ;
case r=0 of
 false:I0:=E/R ;
 true:begin Writeln('Division By Zero');Writeln('Bye-bye');Writeln('Press Any Key For EXIT');readln;exit;end;
end;
c остальными аналогично)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 28.06.2011 в 16:30.
Mad_Cat вне форума Ответить с цитированием
Старый 28.06.2011, 16:58   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
преподаватель вводит такое данные, что в формулах начинается деление на 0 и вылетает ошибка
выдимо он хочет видеть защиту от сбоев (блок try except)
Код:
try
....расчеты
и ответы
....
except
при сбоях
....
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.06.2011, 17:06   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Разве он есть в Turbo Pascal?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.06.2011, 17:17   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от evg_m
видимо он хочет видеть защиту от сбоев (блок try except)
да Господь с Вами!!
Цитата:
сдавать в turbopascale.
Откуда в TurboPascal исключения и их обработка?!!!

dukales, мне всегда были непонятны эти преподовательские капризы - вот эти операторы можно использовать, а вот эти - ни-ни! ни моги!

ну, как уже выше было сказано - либо используйте проверки в операторах цикла,
либо в case...


p.s. я бы мудрил что-то вроде такого:
Код:
   K := 0 ;
   repeat
      Writeln ('Vvedite E (V) = ') ;
      Readln (E) ;
   until E <> 0;

   repeat
     Writeln ('Vvedite R1, R2, R3, R4, R5 (Om) = ') ;
     Readln (R1, R2, R3, R4, R5) ;
     R23:=R2+R3 ;
     R45:=R4+R5 ;
   until (R1<>0) and ((R23+R45) <> 0) and ((R23*R45)<>0);  
   R2345:=(R23*R45)/(R23+R45) ;
   writeln('r2345=',r2345);
   R:=R1+R2345 ;
   case (R=0) of
      false:I0:=E/R ;
      true:begin Writeln('Division By Zero'); Halt end;
   end;
....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.06.2011, 18:07   #7
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
dukales, мне всегда были непонятны эти преподовательские капризы - вот эти операторы можно использовать, а вот эти - ни-ни! ни моги!
Да не. Мне кажется ТС лукавит немножко (чуть-чуть). Задачка то техническая. К примеру - что значит R45:=R4+R5 равно 0. А значит коэффициент передачи равен 0. А у вас получается какой-то Division By Zero. При этом программа не считает коэффициент передачи, а просто откланивается. Вобщем, я то не знаток паскаля вообще, поэтому напишу в общих чертах (доработать напильником):

Код:
RN:=(R2+R3)*(R4+R5);
RS:=(R2+R3+R4+R5);
K:=RN/(R1*RS+RN);
Всё. И вот эта формула выдаст "Division By Zero" только лишь в том случае, когда посчитать коэффициент передачи действительно невозможно (коза на выходе источника ЭДС). Вроде я нигде не ошибся.

Ещё чуть-чуть подумал:
Хотя всё равно есть исключение. Некорректное деление на ноль, когда R2=R3=R4=R5=0. Не, ну ситуация конечно немного абсурдная, но тем не менее она может быть.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 28.06.2011 в 18:21.
Ulex вне форума Ответить с цитированием
Старый 28.06.2011, 18:35   #8
dukales
Пользователь
 
Регистрация: 26.06.2011
Сообщений: 58
По умолчанию

В том то и дело что он уже n лет мучает студентов. и знает к каждому варианту такую заковыристую комбинацию чтобы вылетал 0.
dukales вне форума Ответить с цитированием
Старый 28.06.2011, 18:51   #9
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

погоди, а вот этот until он разрешил что-ли?

Код:
until not(r1=0)or not(r2=0)or(r3=0)or (r4=0)or (r5=0);
Я правильно понял (синтаксиса не знаю), что этот repeat будет запрашивать сопротивления до тех пор, пока хотя бы одно из (r2, r3, r4, r5) не будет введено отличным от нуля?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условный цикл Vovan1111 Microsoft Office Excel 5 30.12.2010 12:51
условный оператор + цикл pascal kyop Помощь студентам 1 14.12.2010 13:04
использовать цикл (и условный оператор, если надо) Еля Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 16.11.2009 23:22
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
использовать цикл (и условный оператор, если надо) Еля Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 27.10.2009 08:59