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

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

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

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

Задание в Pascal. Подскажите

  • Автор темы Автор темы Olga89
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

Olga89

Ученик
Регистрация
16 Июл 2011
Сообщения
5
Реакции
0
Баллы
0
Задание в Pascal. Подскажите

Здравствуйте! :)
Помогите, пожалуйста, решить задачку в паскале. Сама не могу разобраться, а подсказать не кому (учусь заочно, 1курс).

Задание: Вычислить значение функции f в точке х. Значение х должно вводиться с клавиатуры. Вывести полученный результат на экран.
DSC01035.webp

Вот мой вариант решения. Думаю, что тело программы написано верно, но выдает ошибку в значениях х < 3 и х = 3. Наверно, я неправильно перевела выражения( Здесь я абсолютно запуталась! Помогите пожалуйста!:tehnari_ru_121:

program k_work_1;
var
x, f : real;
begin
writeln ('введите x');
readln (x);
if x<3 then f:=sqrt(exp(ln(x)*6)-6*(exp(ln(x)*4)+1)-x*x);
if x=3 then f:=ln(cos(x)/sin(x)*((6*x-x*x)/8));
if x>3 then f:=exp(x*x-4)-1;
writeln ('f=', f);
readln;
end.
 
Вот мой вариант решения. Думаю, что тело программы написано верно, но выдает ошибку в значениях х < 3 и х = 3. Наверно, я неправильно перевела выражения( Здесь я абсолютно запуталась! Помогите пожалуйста!
И это, и не только. Вы абсолютно неправильно ввели второе условие, тут я поправил (см. ниже). А вот что касается первого и третьего, то тут, извините за грубость, явный брёх в самом задании. Давайте разберемся.
1. В первом условии для начала, ввиду отсутствия вертикального штришка на конце знака радикала, неясно, докуда он тянется, т.е. накрывает он х^2 или нет. Ну ладно, будем исходить из того, что накрывает и все четыре слагаемых находятся под корнем. Но в любом случае, достаточно подставить значение х<3 (например, х=1), чтобы убедиться, что выражение под знаком радикала будет отрицательным. Отсюда и ошибка.
2. В третьем условии стоИт очень быстро нарастающая функция, которая почти сразу, т.е. даже при сравнительно небольших значениях х (в пределах 10) вылетит за границы разрядной сетки.

Исходя из приведенного анализа, имею предложить вариант программы, в котором:
1. Исправлено второе условие.
2. Обменены местами знаки неравенств первого и третьего условий. Почти уверен, что так и предполагалось - просто опечатка. При таких (исправленных) неравенствах никаких ошибок и аномально больших значений не возникает.
3. Вывод значения функции сделан форматным - просто для красоты.

Код:
program k_work_1;
var
 x,y,f : real;
begin
 writeln ('введите x');
 readln (x);
 if x>3 then f:=sqrt(exp(ln(x)*6)-6*(exp(ln(x)*4)+1)-x*x);
 if x=3 then
  begin
   y:=(6*x-x*x)/8;
   f:=ln(cos(y)/sin(y));
  end;
 if x<3 then f:=exp(x*x-4)-1;
 writeln ('f= ', f:0:5);
 readln;
end.
 
Vladimir_S, Спасибо Вам огромное за помощь!
Во втором выражении я поняла свою ошибку) Мне следовало быть чуть-чуть внимательней и сей час не было бы так стыдно=) По поводу опечатки я бы конечно сама не разобралась.
Спасибо Вам еще раз!
 
Здравствуйте!:)
Что бы не создавать новую тему спрошу здесь, если ни кто не против.
Не могу решить задачу с оператором цикла Repet, в строке «until i>10;» выдает ошибку «Ожидается логическое выражение» Помогите пожалуйста! Что не хватает?:tehnari_ru_117:

Задача: Вычислить сумму s значений функции f в точках xi которые берутся с заданного интервала [a;b] через равные отрезки длиной h. Длина отрезка рассчитывается по формуле h=(b-a)/(n-1) . Здесь i=1,2,3…n - номер точки; n - задаваемое количество точек; a - начло и b - конец интервала изменения x. Вывести на экран результаты вычислений.

program prog_1;
const a=10; b=11; n=10;
var s, x, h : real;
i : integer;
begin
h:=(b-a)/(n-1);
writeln ('a= a',a);
writeln ('b= b',b);
writeln ('n= n',n);
writeln ('h= h',h:0:8);
writeln;
x:=a;
s:=0;
i:=1;
repeat s:=s+(sin(x))/sqr(x+2);
x:=x+h;
i:=i+1;
until i>10;
writeln (s:0:8);
end.

С уважением!
 
Операторы цикла это =) (я конечно не про.... но вот)

Program prog2;
const
a=3;
b=10;
n=10;
var s,x,h:real;
i:integer;
begin
writeln('Вычисление суммы значений функции');
h:=(b-a)/(n-1);
writeln(' a = ',a);
writeln(' b = ',b);
writeln(' n = ',n);
writeln(' h = ',h:0:8);
writeln;
{цикл "while"}
writeln('1. Цикл "while"');
x:=a;
s:=0;
i:=1;
while i<=10 do
begin
s:=s+sin(x+3)/exp(2/5*ln(x+3));
x:=x+h;
i:=i+1;
end;
write(' Значение s: ');
writeln(s:0:8);
{цикл "repeat"}
writeln('2. Цикл "repeat"');
x:=a;
s:=0;
i:=1;
repeat
s:=s+sin(x+3)/exp(2/5*ln(x+3));
x:=x+h;
i:=i+1;
until i>10;
write(' Значение s: ');
writeln(s:0:8);
{цикл "for ... to ... do"}
writeln('3. Цикл "for ... to ... do"');
x:=a;
s:=0;
for i:=1 to 10 do
begin
s:=s+sin(x+3)/exp(2/5*ln(x+3));
x:=x+h;
end;
write(' Значение s: ');
writeln(s:0:8);
{цикл "for ... downto ... do"}
writeln('4. Цикл "for ... downto ... do"');
x:=a;
s:=0;
for i:=10 downto 1 do
begin
s:=s+sin(x+3)/exp(2/5*ln(x+3));
x:=x+h;
end;
write(' Значение s: ');
writeln(s:0:8);
readln;
End.
 
в строке «until i>10;» выдает ошибку «Ожидается логическое выражение» Помогите пожалуйста! Что не хватает?
Ошибок нет. Вероятно, какие-то "задвиги" или транслятора, или компа. Для проверки слегка "подчистил" Вашу программу, исправив не очень существенные огрехи. Проверял в таком виде:
Код:
program prog_1;
const
 a=10.0;
 b=11.0;
 n=10;
var
 s, x, h : real;
 i : integer;
begin
 h:=(b-a)/(n-1);
 writeln ('a= ',a:0:3);
 writeln ('b= ',b:0:3);
 writeln ('n= ',n);
 writeln ('h= ',h:0:8);
 writeln;
 x:=a;
 s:=0;
 i:=1;
 repeat
  s:=s+(sin(x))/sqr(x+2);
  x:=x+h;
  i:=i+1;
 until i>10;   
 writeln ('s= ',s:0:8);
 readln;
end.
Вот чего не понимаю, так это зачем тут применять цикл Repeat-Until, когда можно обойтись простым For...to...do? С ним такой вариант:

Код:
program prog_1;
const
 a=10.0;
 b=11.0;
 n=10;
var
 s, x, h : real;
 i : integer;
begin
 h:=(b-a)/(n-1);
 writeln ('a= ',a:0:3);
 writeln ('b= ',b:0:3);
 writeln ('n= ',n);
 writeln ('h= ',h:0:8);
 writeln;
 s:=0;
 for i:=1 to n do
  begin
   x:=a+h*(i-1);
   s:=s+(sin(x))/sqr(x+2);
  end;
 writeln ('s= ',s:0:8);
 readln;
end.
 
Vladimir_S, спасибо большое! Вы снова меня выручили! :)
Ваш вариант работает без ошибок и выдает верное значение "s"!
Действительно, можно использовать и цикл For...to...do как я и сделала, просто не стала об этом писать. По условию задачи необходимо получить одинаковый результат различными способами.
Спасибо Вам :tehnari_ru_657:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху