Задание:
Даны действительные числа х и у.Определить,лежит ли точка с заданными координатами (х,у) внутри заштрихованной области.
Надо написать на Паскале или на Си,но лучше на паскале.
Здравствуйте, гость ( Вход | Регистрация ) |
Помогите решить задачку по програмингу, +3 к репе дам) |
K-E-N-N-Y |
5.3.2010, 16:14
|
MotoCrazy^^ Группа: Пользователи Сообщений: 608 Регистрация: 9.4.2008 Из: Саратов Пользователь №: 169 076 Модель телефона: Optimus P500 Прошивка: Android 2.2.1 Рейтинг: 533 |
Задание: Даны действительные числа х и у.Определить,лежит ли точка с заданными координатами (х,у) внутри заштрихованной области. Надо написать на Паскале или на Си,но лучше на паскале. |
A.Vas |
5.3.2010, 16:22
|
Гуру Группа: Пользователи Сообщений: 1 016 Регистрация: 2.12.2005 Из: г. Томск Пользователь №: 60 511 Модель телефона: HTC One X Прошивка: CyanogenMod 11 Рейтинг: 435 |
K-E-N-N-Y,
и что тут сложного? Проверяй для точек три условия, если выполняются все три - точка лежит в заштрихованной области: 1) abs(x) < 1, abs(y) < 1 2) x^2 + y^2 > 1 3) y > x Условие 1 задаёт положение точки внутри внешнего (квадратного) края области, условие 2 - вне внутреннего круга, условие 3 - выше диагональной разделительной линии. Сообщение отредактировал A.Vas - 5.3.2010, 16:24 |
K-E-N-N-Y |
5.3.2010, 16:38
|
MotoCrazy^^ Группа: Пользователи Сообщений: 608 Регистрация: 9.4.2008 Из: Саратов Пользователь №: 169 076 Модель телефона: Optimus P500 Прошивка: Android 2.2.1 Рейтинг: 533 |
K-E-N-N-Y, и что тут сложного? Проверяй для точек три условия, если выполняются все три - точка лежит в заштрихованной области: 1) abs(x) < 1, abs(y) < 1 2) x^2 + y^2 > 1 3) y > x Условие 1 задаёт положение точки внутри внешнего (квадратного) края области, условие 2 - вне внутреннего круга, условие 3 - выше диагональной разделительной линии. эмм и как будет выглядеть? writeln('введите координаты'); read(x,y) if abs(x) < 1 and abs(y) < 1 а дальше как с другими условиями? тупо также записать? и почему второе условие именно такое? Сообщение отредактировал K-E-N-N-Y - 5.3.2010, 16:39 |
AlexKooper |
5.3.2010, 16:43
|
Авторитет Группа: Почётные мотофаны Сообщений: 2 838 Регистрация: 27.7.2005 Из: Йошкар-Ола Пользователь №: 47 140 Модель телефона: E398 Прошивка: AlexKooper mod v.47 Рейтинг: 1337 |
второе условие - проверка на радиус (квадрат радиуса на самом деле) круга, расстояние от центра должно быть больше 1
|
DmT |
5.3.2010, 16:43
|
Мото-Портной Группа: Разработчики Сообщений: 1 174 Регистрация: 31.3.2007 Из: Екатеринбург Пользователь №: 129 181 Модель телефона: LG GW620, L7e и др. Настроение: Второй год подряд решаю мир. Решения не найдено. Рейтинг: 669 |
Цитата(K-E-N-N-Y @ Сегодня, 21:14) Я тя уверяю - лучше на Си ^__^ Вот по описанию A.Vas: Код if( (abs(x) <= 1) && // координата X лежит в промежутке [-1;1] (abs(y) <= 1) && // координата Y лежит в промежутке [-1;1] (x*x + y*y >= 1) && // точка за пределами единичной окружности (y > x) ) { printf("This point is in valid region."); } else { printf("This point isn't in valid region."); } Сообщение отредактировал DmT - 5.3.2010, 16:44 |
AlexKooper |
5.3.2010, 16:47
|
Авторитет Группа: Почётные мотофаны Сообщений: 2 838 Регистрация: 27.7.2005 Из: Йошкар-Ола Пользователь №: 47 140 Модель телефона: E398 Прошивка: AlexKooper mod v.47 Рейтинг: 1337 |
var b: boolean;
writeln('введите координаты'); read(x,y); if abs(x) < 1 and abs(y) < 1 then b:=true else b:=false; if ((x*x)+(y*y)) > 1 then else b:= false; if y>x then else b:=false; if b=true then writeln ('Попадает'); либо через одно сплошное условие, но громозко получится - паскаль очень любит скобками всё чтоб обрамлено было, чтоб порядок операций задать. Добавлено позже (5.3.2010, 19:50): на паскале писал 10 лет назад поэтому получилось так коряво... но должно работать Или как вариант var b: integer; writeln('введите координаты'); read(x,y); if abs(x) < 1 and abs(y) < 1 then b:=1 else b:=0; if ((x*x)+(y*y)) > 1 then b:= b+1; if y>x then b:= b+1; if b=3 then writeln ('Попадает'); Добавлено позже (5.3.2010, 19:53): кстати границы заштрихованной области входят в допустимую зону? если да, то надо условия смягчать во всех трёх проверках, допуская равенство. Сообщение отредактировал AlexKooper - 5.3.2010, 16:54 |
K-E-N-N-Y |
5.3.2010, 16:57
|
MotoCrazy^^ Группа: Пользователи Сообщений: 608 Регистрация: 9.4.2008 Из: Саратов Пользователь №: 169 076 Модель телефона: Optimus P500 Прошивка: Android 2.2.1 Рейтинг: 533 |
var b: boolean; writeln('введите координаты'); read(x,y); if abs(x) < 1 and abs(y) < 1 then b:=true else b:=false; if ((x*x)+(y*y)) > 1 then else b:= false; if y>x then else b:=false; if b=true then writeln ('Попадает'); либо через одно сплошное условие, но громозко получится - паскаль очень любит скобками всё чтоб обрамлено было, чтоб порядок операций задать. Добавлено позже (5.3.2010, 19:50): на паскале писал 10 лет назад поэтому получилось так коряво... но должно работать Или как вариант var b: integer; writeln('введите координаты'); read(x,y); if abs(x) < 1 and abs(y) < 1 then b:=1 else b:=0; if ((x*x)+(y*y)) > 1 then b:= b+1; if y>x then b:= b+1; if b=3 then writeln ('Попадает'); Добавлено позже (5.3.2010, 19:53): кстати границы заштрихованной области входят в допустимую зону? если да, то надо условия смягчать во всех трёх проверках, допуская равенство. а почему if y>x then b:= b+1; насчет границ не знаю, извините даже,в точности задание написал вариант проги второй не работает... у кого еще есть предложение готовой программы на паскале? ту DmT,твой код чет тоже не хотел компилить : warning C4700: использована неинициализированная локальная переменная "x" warning C4700: использована неинициализированная локальная переменная "y" Сообщение отредактировал K-E-N-N-Y - 5.3.2010, 17:02 |
AlexKooper |
5.3.2010, 16:59
|
Авторитет Группа: Почётные мотофаны Сообщений: 2 838 Регистрация: 27.7.2005 Из: Йошкар-Ола Пользователь №: 47 140 Модель телефона: E398 Прошивка: AlexKooper mod v.47 Рейтинг: 1337 |
Цитата а почему if y>x then b:= b+1; это же проверка третьего условия. за каждое выполненное условие начисляем 1 балл. Три условия выполнено (b=3) - значит все условия выполнены. Сообщение отредактировал AlexKooper - 5.3.2010, 17:00 |
DmT |
5.3.2010, 17:01
|
Мото-Портной Группа: Разработчики Сообщений: 1 174 Регистрация: 31.3.2007 Из: Екатеринбург Пользователь №: 129 181 Модель телефона: LG GW620, L7e и др. Настроение: Второй год подряд решаю мир. Решения не найдено. Рейтинг: 669 |
K-E-N-N-Y,
Эт еще повезло что не на прологе писать надо... |
AlexKooper |
5.3.2010, 17:02
|
Авторитет Группа: Почётные мотофаны Сообщений: 2 838 Регистрация: 27.7.2005 Из: Йошкар-Ола Пользователь №: 47 140 Модель телефона: E398 Прошивка: AlexKooper mod v.47 Рейтинг: 1337 |
это ещё повезло, что не в машинных кодах какого-нибудь z80 писать надо :) а то у нас в универе и такое было. причем никаких компов - бумажные таблицы перевода написанного от руки асм кода в хексы, и вбивать в стенд кнопочками...
Добавлено позже (5.3.2010, 20:05): конечно не работает, надо же писать всякие бегины-енды, тело програмы, тип переменных X Y, подстегнуть модули ввода-вывода чтоб writeln readln работали... ты хоть ошибки пиши. Добавлено позже (5.3.2010, 20:07): как-то так uses crt; {этот вроде какой-то стандарт. модуль для ввода-вывода} var b: integer; x,y: real; begin writeln('введите координаты'); read(x,y); if abs(x) < 1 and abs(y) < 1 then b:=1 else b:=0; if ((x*x)+(y*y)) > 1 then b:= b+1; if y>x then b:= b+1; if b=3 then writeln ('Попадает') else writeln ('Не попадает'); end. Сообщение отредактировал AlexKooper - 5.3.2010, 17:14 |
Текстовая версия | Сейчас: 28.3.2024, 23:01 |
Форум живёт: