motofan logo
8 страниц V  1 2 3 > »         
> 

Помогите решить задачку по програмингу, +3 к репе дам)

K-E-N-N-Y
сообщение 5.3.2010, 16:14


MotoCrazy^^
*****

Группа: Пользователи
Сообщений: 608
Регистрация: 9.4.2008
Из: Саратов
Пользователь №: 169 076
Модель телефона: Optimus P500
Прошивка: Android 2.2.1
Победитель конкурса 2008

Рейтинг: 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
Победитель конкурса 2008

Рейтинг: 533



Цитата(A.Vas @ 5.3.2010, 16:22) *

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 и др.
Победитель конкурса 2008


Настроение:
Второй год подряд решаю мир. Решения не найдено.



Рейтинг: 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
Победитель конкурса 2008

Рейтинг: 533



Цитата(AlexKooper @ 5.3.2010, 16:47) *

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 и др.
Победитель конкурса 2008


Настроение:
Второй год подряд решаю мир. Решения не найдено.



Рейтинг: 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
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Помогите решить задачку по програмингу, +3 к репе дам) · Обо всем · Forum
 

8 страниц V  1 2 3 > » 
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 22.10.2019, 21:41

Форум живёт: