Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2011, 14:37   #1
Surik
 
Регистрация: 23.02.2011
Сообщений: 6
По умолчанию Ошибка в программе решения (Pascal)

Приветствую всех
Дали задание в лабораторной работе по
Алгоритмизации и программированию
Нужно написать программу для этого примера:

Код:
program bla;
var x,y,z,a,b,c,d,e,f:real;
function Arcsin (x :real ) : real;
begin
if abs(x) = 1 then Arcsin:= 0
else  Arcsin:= Arctan(x/Sqrt(1-sqr(x)));
end;
begin
readln(x);
a:=(x*x*x-1)/(2*sqrt(3));
b:=exp(x*x+1);
c:=abs(x-1)/abs(x-2);
c:=ln(c);
y:=ln(2.3);
d:=(x-1)/2;
d:=Arcsin(d);
e:=sin(x/2);
e:=e*e*e;
f:=sqr(2*x/3);
f:=sin(f)/cos(f);
z:=a*b*c*y-d+e+f;
writeln(z:8:1);
readln;
end.
Компилируется нормально
но при вычислении "z"
TurboPascal ругается вот так:

Причем в двух местах
Первое место то что на скрине
А второе это
Код:
c:=ln(c);
Причем вторая ошибка не появляется
если вводимое число больше "3"
А Если ввести число "3" то вычисление проходит на ура!
Пожалуйста подскажите где я ошибся
Изучаю паскаль всего 3 дня по колледжной программе
До этого были два самостоятельных урока по дельфи
поэтому надеюсь на местных знатоков и профессионалов!
Surik вне форума Ответить с цитированием
Старый 02.10.2011, 15:11   #2
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Проверил Ваш код и нашёл 3 уязвимости
1. b:=exp(x*x+1); - вылетает при больших Х
2. c:=ln(c); вылетает при Х=2
Кусок кода c:=abs(x-1)/abs(x-2); написан не правильно, нужно так:
c:=abs((x-1)/(x-2));
В формуле же написано - модуль от результата деления
3. d:=Arcsin(d); вылетает при если вводимое число больше "3"
тут ошибка понятна слону: d:=(x-1)/2; при Х>3 число D>1
при проверке if abs(x) = 1 then Arcsin:= 0 ошибка в условии, нужно так:
if abs(x) >= 1 then Arcsin:= 0
-------------------
Я тут "накидал" Ваш пример с условиями и проверками.
Код:
program Project1;
var z, x  : double;
    v1,v2,v3,v4,v5,v6 : double;
begin
 readln(x);
 v1 := (x*x*x-1)/2*sqrt(3);
 v1 := arctan(v1);
 v2 := exp(x*x+1);
 if (x=2) then
 begin
  writeln('bezkonechost');
  exit;
 end;
 v3 := ln(abs((x-1)/(x-2)))*ln(2.3);
 if abs(x)>3 then
 begin
  writeln('net resheniy');
  exit;
 end;
 v4 := (x-1)/2;
 if v4=1 then v4:=pi/2 else
 v4 := arctan(v4/Sqrt(1-sqr(v4)));

 v5:=sin(x/2);
 v5:=v5*v5*v5;

 v6:=sqr(2*x/3);
 v6:=sin(v6)/cos(v6);

 Z:=v1*v2*v3 - v4+v5+v6;
 writeln(z:8:1);
end.
Посмотрите, может поможет в обнаружении ошибок в Вашем коде
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 02.10.2011, 15:14   #3
Surik
 
Регистрация: 23.02.2011
Сообщений: 6
По умолчанию

Спасибо большое
Сейчас буду пробывать
Surik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в программе,двумерный массив. PASCAL Ilovesport Помощь студентам 1 24.03.2011 17:47
Напишите исходный код решения на Pascal CTR Помощь студентам 0 07.11.2010 17:43
Ошибка в программе larin1974 Помощь студентам 7 06.03.2010 20:44