Технический форум
Вернуться   Технический форум > Программирование > Форум программистов


Ответ
 
Опции темы Опции просмотра
Старый 12.09.2013, 10:46   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Собственно, остальное всё более ли менее, вот только...
1. Лишние переменные. Зачем нужна переменная otvet, да еще типа Char? Напомню, что "Char" - это тип "Символ", т.е. такая переменная может принимать значение ТОЛЬКО ОДНОГО символа, например "A", "f", "4", "+" и т.п. А если Вы хотите управлять сообщением о результате не через прямой вывод, а через переменную, то тип такой переменной следует объявить String. Только в данном случае это не нужно - вполне нормально выводить сообщения напрямую, как у Вас и сделано.
2. Внешний и внутренний радиусы кольца целесообразно либо не задавать вовсе и работать с их числовыми значениями, либо задать в виде констант. Этот второй вариант мне представляется предпочтительным. Программа становится "универсальнее", т.к. значения констант легче (если захочется) поменять, чем редактировать условный оператор.
3. В построении условного оператора мой коллега AlexZir, как мне кажется, несколько перемудрил: Паскаль допускает нестрогие неравенства, а потому связка "or" там лишняя. Кроме того, удобнее работать с самими величинами расстояний и радиусов, а не с их квадратами.
4. Разумно программу зациклить, так, чтобы была возможность вводить без перезапуска последовательность пар координат точек. Выход из цикла можно устроить когда, например, будут введены нулевые координаты, причем обе сразу.

Исходя из всего этого, представлю вариант решения такой, какой я бы сделал. Сразу отмечу, что с кириллицей у меня некий напряг, поэтому я ее стараюсь не применять. Но это сами легко поправите.
Код:
Const
 Rb=10.0;
 Rm=5.0;
Var
 x,y,v:real;
Begin
 Writeln('Point (0;0) quits');
 Repeat
  write('X= ');
  readln(x);
  write('Y= ');
  readln(y);
  if (x<>0) or (y<>0) then
   begin
    v:=Sqrt(x*x+y*y);
    if (v>=Rm) and (v<=Rb) then writeln('YES!') else writeln('NO!');
   end;
 Until ((x=0) and (y=0));
end.
Vladimir_S вне форума   Ответить с цитированием

Старый 12.09.2013, 10:46
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Я вам советую прочитать уже обсуждаемые темы

Составить программу на Паскале
Помогите составить программу
Составить программу в Pascal
Помогите составить программу на Паскале
Помогите составить программу

Старый 12.09.2013, 23:31   #12 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Владимир, моя задача - дать верное направление, а решений может быть много.
Нестрогие неравенства поддерживаются не всеми версиями компиляторов, встречался с одним таким, долго не мог понять, почему условие не проходит.
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.