Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Закрытая тема
 
Опции темы Опции просмотра
Старый 15.08.2011, 19:53   #1 (permalink)
Olga89
Новичок
 
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Задание в Pascal. Подскажите

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

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

Вот мой вариант решения. Думаю, что тело программы написано верно, но выдает ошибку в значениях х < 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.
Olga89 вне форума  

Старый 15.08.2011, 19:53
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вы так же можете не терять времени и просмотреть сходные с вашей темы

Задание в паскале. Помогите с решением
Задание в паскале с кординатами
Задание в Паскале
Задание по циклам
Задание подпрограммы

Старый 15.08.2011, 21:15   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Olga89 Посмотреть сообщение
Вот мой вариант решения. Думаю, что тело программы написано верно, но выдает ошибку в значениях х < 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 вне форума  
Старый 16.08.2011, 16:43   #3 (permalink)
Olga89
Новичок
 
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Smile

Vladimir_S, Спасибо Вам огромное за помощь!
Во втором выражении я поняла свою ошибку) Мне следовало быть чуть-чуть внимательней и сей час не было бы так стыдно=) По поводу опечатки я бы конечно сама не разобралась.
Спасибо Вам еще раз!
Olga89 вне форума  
Старый 16.08.2011, 17:18   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Olga89 Посмотреть сообщение
Спасибо Вам еще раз!
Да не за что. Заходите, обращайтесь - чем можем...
Vladimir_S вне форума  
Старый 11.09.2011, 18:35   #5 (permalink)
Olga89
Новичок
 
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question

Здравствуйте!
Что бы не создавать новую тему спрошу здесь, если ни кто не против.
Не могу решить задачу с оператором цикла 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.

С уважением!
Olga89 вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 11.09.2011, 19:10   #6 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 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.
Gruvi вне форума  
Старый 11.09.2011, 19:18   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Olga89 Посмотреть сообщение
в строке «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 вне форума  
Старый 11.09.2011, 21:20   #8 (permalink)
Olga89
Новичок
 
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Gruvi Посмотреть сообщение
Операторы цикла это =) (я конечно не про.... но вот)
Gruvi, спасибо конечно, но Вы действительно не про! Ваш код к моему заданию не имеет никакого отношения
Olga89 вне форума  
Старый 11.09.2011, 21:28   #9 (permalink)
Olga89
Новичок
 
Регистрация: 16.07.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S, спасибо большое! Вы снова меня выручили!
Ваш вариант работает без ошибок и выдает верное значение "s"!
Действительно, можно использовать и цикл For...to...do как я и сделала, просто не стала об этом писать. По условию задачи необходимо получить одинаковый результат различными способами.
Спасибо Вам
Olga89 вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Закрытая тема


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 22:38.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.