15.08.2011, 19:53 | #1 (permalink) |
Новичок
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Задание в Pascal. Подскажите
Помогите, пожалуйста, решить задачку в паскале. Сама не могу разобраться, а подсказать не кому (учусь заочно, 1курс). Задание: Вычислить значение функции f в точке х. Значение х должно вводиться с клавиатуры. Вывести полученный результат на экран. Вот мой вариант решения. Думаю, что тело программы написано верно, но выдает ошибку в значениях х < 3 и х = 3. Наверно, я неправильно перевела выражения( Здесь я абсолютно запуталась! Помогите пожалуйста! 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. |
15.08.2011, 19:53 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Вы так же можете не терять времени и просмотреть сходные с вашей темы Задание в паскале. Помогите с решением Задание в паскале с кординатами Задание в Паскале Задание по циклам Задание подпрограммы |
15.08.2011, 21:15 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
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. |
|
16.08.2011, 16:43 | #3 (permalink) |
Новичок
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Vladimir_S, Спасибо Вам огромное за помощь!
Во втором выражении я поняла свою ошибку) Мне следовало быть чуть-чуть внимательней и сей час не было бы так стыдно=) По поводу опечатки я бы конечно сама не разобралась. Спасибо Вам еще раз! |
11.09.2011, 18:35 | #5 (permalink) |
Новичок
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Здравствуйте!
Что бы не создавать новую тему спрошу здесь, если ни кто не против. Не могу решить задачу с оператором цикла Repet, в строке «until i>10;» выдает ошибку «Ожидается логическое выражение» Помогите пожалуйста! Что не хватает? Задача: Вычислить сумму 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. С уважением! |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
11.09.2011, 19:10 | #6 (permalink) |
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
Операторы цикла это =) (я конечно не про.... но вот)
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. |
11.09.2011, 19:18 | #7 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
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. Код:
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. |
|
11.09.2011, 21:28 | #9 (permalink) |
Новичок
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Vladimir_S, спасибо большое! Вы снова меня выручили!
Ваш вариант работает без ошибок и выдает верное значение "s"! Действительно, можно использовать и цикл For...to...do как я и сделала, просто не стала об этом писать. По условию задачи необходимо получить одинаковый результат различными способами. Спасибо Вам |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|