• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Вычислить значения функции, заданной графически

  • Автор темы Автор темы vitjok
  • Дата начала Дата начала

vitjok

Новые
Регистрация
29 Сен 2012
Сообщения
72
Реакции
0
Баллы
0
Вычислить значения функции, заданной графически

Здравствуйте помогите написать программу к решения геометрической задачи в паскаль:)Составить алгоритм и написать код программы, вычисляющей значения функции y, заданной графически, по значениям аргумента x, введенным с консоли: Безымянный.webp
[mod2]На будущее - НЕ цепляемся к чужим темам, создаем свои.
Модератор.[/mod2]
 
Здравствуйте помогите написать программу к решения геометрической задачи в паскаль:)Составить алгоритм и написать код программы, вычисляющей значения функции y, заданной графически, по значениям аргумента x, введенным с консоли.
Легко. Для прерывания программы введите значение Х=-10.
Код:
Var
 X,Y:Real;
Begin
 Writeln('To quit the program type -10 az X');
 Repeat
  Repeat
   Write('X= ');
   Readln(X);
   If (X<0) and (X<>-10) then Writeln('X out of range: negatives are forbidden!');
  Until (X>=0) or (X=-10);
  If X>4 then
   Repeat
    X:=X-4;
   Until X<=4;
  If X<>-10 then
   begin
    If X<1 then
     Y:=Sqrt(1-Sqr(X-1)) else
    If (X>=1) and (X<3) then
     Y:=1-Sqrt(1-Sqr(X-2)) else
    Y:=Sqrt(1-Sqr(X-3));
    Writeln('Y= ',Y:0:3);
   end;
 Until X=-10;
End.
 
Большое Спасибо!!!:)
 
Здравствуйте! не могли бы вы сделать описание пожалуйста)) что бы на будущее писать такие программы самому)) и если вас это не затруднит написать алгоритм:) ОГРОМНОЕ СПАСИБО!!!!!!!!:)
 
Описание - попробую. А вот писать алгоритмы, извините, не умею.

Программа оформлена в виде бесконечного замкнутого цикла ввод аргумента - вывод значения функции - ввод аргумента - вывод и т.д. Прерывание цикла и выход из программы осуществляется, если ввести значение Х=-10 (сама величина не принципиальна).

Код:
Var
 X,Y:Real;
[COLOR=Red][B]Описали переменные X и Y[/B][/COLOR]
Begin
[COLOR=Red][B]Начало программы[/B][/COLOR]
 Writeln('To quit the program type -10 az X');
[COLOR=Red][B]Здесь на экран вывели информацию о способе прерывания программы:
ввести Х=-10[/B][/COLOR]
 Repeat
[COLOR=Red][B]Открываем глобальный цикл, о котором сказано выше[/B][/COLOR]
  Repeat
   Write('X= ');
   Readln(X);
   If (X<0) and (X<>-10) then Writeln('X out of range: negatives are forbidden!');
  Until (X>=0) or (X=-10);
[COLOR=Red][B]Вводим Х тоже с помощью цикла. Поскольку допустимы только 
положительные значения Х и единственное отрицательное Х=-10
(для прерывания), повторяем цикл ввода до тех пор, пока не 
будет введено неотрицательное число. В случае ввода
отрицательных значений (кроме -10), выводим уведомление
"Отрицательные значения запрещены!"  [/B][/COLOR]
  If X>4 then
   Repeat
    X:=X-4;
   Until X<=4;
[COLOR=Red][B]Поскольку изображенная на графике функция периодична с периодом
4, вычитаем из Х этот период до тех пор, пока Х не окажется между 0 и 
4.[/B][/COLOR]
  If X<>-10 then
[COLOR=Red][B]Проверяем, не равен ли аргумент -10. Если нет, то вычисляем
значение функции.[/B][/COLOR]
   begin
[COLOR=Red][B]Далее находим значения Y, разбив интервал 0 - 4 на три участка:
от 0 до 1, от 1 до 3 и от 3 до 4. Во всех случаях используем 
уравнение окружности (X-X0)² + (Y-Y0)² = R², где X0, Y0 - 
координаты центра, R - радиус (в данном случае R=1). [/B][/COLOR]
    If X<1 then
     Y:=Sqrt(1-Sqr(X-1))  else
[COLOR=Red][B]Если Х находится в интервале от 0 до 1, то функция представляет
собой дугу окружности (II сегмент) с центром (1, 0).[/B][/COLOR]
    If (X>=1) and (X<3) then
     Y:=1-Sqrt(1-Sqr(X-2)) else
[COLOR=Red][B]Если Х находится в интервале от 1 до 3, то функция представляет
собой дугу окружности (III и IV сегменты, т.е. нижняя полу-
окружность) с центром (2, 1).[/B][/COLOR]
    Y:=Sqrt(1-Sqr(X-3));
[COLOR=Red][B]И, наконец, если Х находится в интервале от 3 до 4, то функция
представляет собой дугу окружности (I сегмент) с центром 
(3, 0).[/B][/COLOR]
    Writeln('Y= ',Y:0:3);
[COLOR=Red][B]Выводим результат на экран[/B][/COLOR]
   end;
 Until X=-10;
[COLOR=Red][B]Проверяем выполнение условия выхода из глобального цикла.[/B][/COLOR]
End.
[COLOR=Red][B]Всё![/B][/COLOR]
 
здравствуйте)) как будет выгладить данный код без цикла?))
 
вообще без циклов)
я их тут убрал но все равно есть ошибка

Program Vitjok;
Uses CRT;
Var X,Y:Real;
Begin
Write('X= ');
Readln(X);
If (X<0) then Writeln('X out of range: negatives are forbidden!');
If X>4
then x:=x-4;
begin
If X<1 then
Y:=Sqrt(1-Sqr(X-1));

If (X>=1) and (X<3) then
Y:=1-Sqrt(1-Sqr(X-2)) else
Y:=1-Sqrt(1-sqr(x-3));
Writeln('Y= ',Y:0:3);
end;
End.
 
просто нужно что бы этот код Program Vitjok;
Uses CRT;
Var X,Y:Real;
Begin
Write('X= ');
Readln(X);
If (X<0) then Writeln('X out of range: negatives are forbidden!');
If X>4
then x:=x-4;
begin
If X<1 then
Y:=Sqrt(1-Sqr(X-1));

If (X>=1) and (X<3) then
Y:=1-Sqrt(1-Sqr(X-2)) else
Y:=1-Sqrt(1-sqr(x-3));
Writeln('Y= ',Y:0:3);
end;
End.
работал при вводе положительного числа
 
у вас корень из отрицательного числа получается при вводе положительного числа.
вот тут
 
1. Нахрена, извините, Вы туда втюхали Uses CRT? Где там команды этого модуля?
2. В моей программе обрабатывалось любое положительное значение Х. Например, 39765. Циклически вычиталось 4 до тех пор, пока Х не попадет в диапазон от нуля до четырех. Вы цикл вычитания периода выбросили, заменив однократным вычитанием четверки. То есть в моем примере Вам придется работать с числом 39761. И что Вы с ним собираетесь делать?
3. Допустим, Х=0.6. Проверяем первое условие (в Вашей программе - перед пустой строкой). Раз X<1, то Y есть корень из (1-0.16), то есть 0.92. Идем дальше. Второе условие гласит: если Х находится в диапазоне от 1 до 3, то считать по одной формуле, в противном случае - по другой. Вот по этой другой и пересчитаем: Y есть единица минус корень из (-4.76). Попытка извлечь корень из отрицательного числа и (вот те раз!) - ошибка! У меня-то все три условия были связаны ветвлением "else", но Вы, очевидно, решили, что два "else" - это слишком много, хватит и одного. Ну-ну... Эх, "раззудись плечо, размахнись рука!". Рубить программу, так от души.

Короче говоря, так. Я Вам представил отлаженную рабочую программу, полностью решающую поставленную задачу, причем посредством самых элементарных конструкций Паскаля. Помогать Вам ее незнамо зачем уродовать я, извините, не стану. Охота этой ерундой заниматься - Ваше дело. Успехов!
 
можете справить ошибку в программе??
 
Назад
Сверху