Технический форум

Технический форум (http://www.tehnari.ru/)
-   Форум программистов (http://www.tehnari.ru/f22/)
-   -   Составить программу (http://www.tehnari.ru/f22/t90814/)

Bogdanghost 10.09.2013 22:45

Составить программу
 
Вложений: 1
Вложение 151206
не знаю как делать
надеюсь,поможете новичку

AlexZir 11.09.2013 06:05

Для решения задачи вам нужно запросить координаты точки, затем проверять принадлежность по следующему условию "если точка лежит во внешнем круге и не лежит во внутреннем, то принадлежит, иначе не принадлежит".
Код:

if ((sqr(x)<100-sqr(y))) or (sqr(x)=100-sqr(y)))) and (sqr(x)>25-sqr(y))) then writeln('принадлежит') else writeln('не принадлежит');
В данном условии исключен случай, когда точка лежит на внутренней окружности, но это вы сами уже допишите.

Vladimir_S 11.09.2013 10:23

Лёша, а почему только Паскаль? Раз человек не счёл нужным указать язык программирования, значит Ваш долг - выложить варианты еще и на СИ, Фортране, Алголе-60, Коболе, Аде, ПЛ'е, Модуле-2 и Ассемблере. Как минимум. Можно еще пару-тройку добавить. Чтобы человек мог выбрать.

AlexZir 11.09.2013 13:05

Ну, на ассемблере листинг немного другой будет, а сишный код почти совпадает, за исключением операторов вывода и возведения в степень :))

Bogdanghost 11.09.2013 16:50

program Kolcho;
var x,y,v: real; otvet:char;
Rb:=10;
rm:=5;
begin
writeln('введите значение х');
readln(x);
writeln('введите значение y');
readln(y);
v:=x*x+y*y;
if ((sqr(x)<100-sqr(y))) or (sqr(x)=100-sqr(y))) and (sqr(x)>25-sqr(y))) then writeln('принадлежит')
else writeln('не принадлежит');
end.
так?
но там ошибка,не пойму что не так

Vladimir_S 11.09.2013 17:17

Цитата:

Сообщение от Bogdanghost (Сообщение 948239)
но там ошибка,не пойму что не так

Да много что. А прежде всего, Вы вводите значения Rb и rm, как значения переменных, но при этом сами эти переменные в разделе Var начисто отсутствуют.

Bogdanghost 11.09.2013 17:25

увидел)поменял
какие еще проблемы?)

Bogdanghost 11.09.2013 19:02

подскажите пожалуйста

Vladimir_S 11.09.2013 20:57

Цитата:

Сообщение от Bogdanghost (Сообщение 948262)
подскажите пожалуйста

Завтра утром. Раньше не получится.

Bogdanghost 11.09.2013 21:23

хорошо
спасибо

Vladimir_S 12.09.2013 10:46

Собственно, остальное всё более ли менее, вот только...
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.


AlexZir 12.09.2013 23:31

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


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.