Задание в Pascal. Подскажите
Вложений: 1
Здравствуйте! :)
Помогите, пожалуйста, решить задачку в паскале. Сама не могу разобраться, а подсказать не кому (учусь заочно, 1курс). Задание: Вычислить значение функции f в точке х. Значение х должно вводиться с клавиатуры. Вывести полученный результат на экран. Вложение 46878 Вот мой вариант решения. Думаю, что тело программы написано верно, но выдает ошибку в значениях х < 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. |
Цитата:
1. В первом условии для начала, ввиду отсутствия вертикального штришка на конце знака радикала, неясно, докуда он тянется, т.е. накрывает он х^2 или нет. Ну ладно, будем исходить из того, что накрывает и все четыре слагаемых находятся под корнем. Но в любом случае, достаточно подставить значение х<3 (например, х=1), чтобы убедиться, что выражение под знаком радикала будет отрицательным. Отсюда и ошибка. 2. В третьем условии стоИт очень быстро нарастающая функция, которая почти сразу, т.е. даже при сравнительно небольших значениях х (в пределах 10) вылетит за границы разрядной сетки. Исходя из приведенного анализа, имею предложить вариант программы, в котором: 1. Исправлено второе условие. 2. Обменены местами знаки неравенств первого и третьего условий. Почти уверен, что так и предполагалось - просто опечатка. При таких (исправленных) неравенствах никаких ошибок и аномально больших значений не возникает. 3. Вывод значения функции сделан форматным - просто для красоты. Код:
program k_work_1; |
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. |
Цитата:
Код:
program prog_1; Код:
program prog_1; |
Цитата:
|
Vladimir_S, спасибо большое! Вы снова меня выручили! :)
Ваш вариант работает без ошибок и выдает верное значение "s"! Действительно, можно использовать и цикл For...to...do как я и сделала, просто не стала об этом писать. По условию задачи необходимо получить одинаковый результат различными способами. Спасибо Вам :tehnari_ru_657: |
Часовой пояс GMT +4, время: 09:55. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.