IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Табулирование функции
Василяй
сообщение 17.06.2007 19:29
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Василий

Репутация: -  0  +


Помогите разобраться в задаче!
Задание такое: Затабулировать функцию двух переменных z(x,y)=sqrt(1-sqr(x)-sqr(y)) внутри квадрата 0<=x, y<=1 (<= - меньше или равно) и области существования функции z. Шаги табуляции х=у=0.1

Я задачю решил (вроде бы smile.gif ). Мне не понятно как затабулировать функцию в области существования функции z. Помогите с этим пожайлуста! Вот моя программа:
uses crt;
const shag = 0.1;
var
x,y,z: real ;
count : integer ;

function func(x,y:real ):real;
var
z: real;
begin
z:=0;
begin
z:=sqrt(1-sqr(x)-sqr(y));
end;
func:=z;
end;

begin
clrscr;
count := 1;
x := 0;
y := 1;
While x <= y do
begin
writeln(count,')','x=',x,' y=',y,' z(x,y)=',func(x,y));
x:= x+shag;
y:= y-shag;
inc(count);
end;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.06.2007 19:35
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


function func(x,y:real ):real;
var
z: real;
begin
z:=0;
begin
z:=sqrt(1-sqr(x)-sqr(y));
end;
func:=z;
end;

а нельзя так:
function func(x,y:real ):real;
begin
func:=sqrt(1-sqr(x)-sqr(y));
end;


?
Цитата
While x <= y do

вот это условие откуда берется?
по заданию оно должно быть таким:
0<=x<=1
0<=y<=1
но дело в том, что не на всем квадрате функция sqrt(1-sqr(x)-sqr(y)) определена (корень из отрицательного числа в области действительных чисел извлечь невозможно).


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Василяй
сообщение 17.06.2007 19:49
Сообщение #3





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Василий

Репутация: -  0  +


Цитата(мисс_граффити @ 17.06.2007 20:35) *

а нельзя так:

function func(x,y:real ):real;
begin
func:=sqrt(1-sqr(x)-sqr(y));
end;


можно yes2.gif
а с квадратом я всё равно что-то не понял как цикл делать!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.06.2007 19:50
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


в общих чертах - можно так (а можно и иначе...):
uses crt;
const shag = 0.1;
eps=1E-5;
var
x,y:real;
count : integer ;

function func(x,y:real ):real;
begin
func:=sqrt(1-sqr(x)-sqr(y));
end;

begin
clrscr;
count := 1;
x := 0;
y := 0;
While x < 1+eps do
begin
y:=0;
while y< 1+eps do
begin
if (1-sqr(x)-sqr(y))>=0 then
begin
write(count:2,')','x=',x:0:1,' y=',y:0:1,' z(x,y)=',func(x,y):0:3,'; ');
inc(count);
if odd(count) then
writeln;
end;
y:= y+shag;
end;
x:= x+shag;
end;
readln;
end.

но при таком раскладе возникает один глюк (из-за погрешности вычислений). постарайся его найти.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Василяй
сообщение 17.06.2007 19:54
Сообщение #5





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Василий

Репутация: -  0  +


Цитата(мисс_граффити @ 17.06.2007 20:50) *

eps=1E-5;


а для чего эта строчка?
Щя попытаемся найти этот глюк smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.06.2007 19:57
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


вещественные числа не принято (ну, это не просто традиция, а во избежание лишних глюков) сравнивать через =. то есть лучше написать не с>=0.3, а с>0.2999999999, или (чтобы было нагляднее и проще было задать точность), с>3-eps, где eps - какое-то маленькое число (у меня это 10^-5)


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Василяй
сообщение 17.06.2007 20:05
Сообщение #7





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Василий

Репутация: -  0  +


Цитата
вещественные числа не принято (ну, это не просто традиция, а во избежание лишних глюков) сравнивать через =. то есть лучше написать не с>=0.3, а с>0.2999999999, или (чтобы было нагляднее и проще было задать точность), с>3-eps, где eps - какое-то маленькое число (у меня это 10^-5)

понятно

Цитата
но при таком раскладе возникает один глюк (из-за погрешности вычислений). постарайся его найти.

я так понял что глюк, это то что скачет шаг у Y ( шаг должен быть 0.1, а он 0.2). верно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.06.2007 20:12
Сообщение #8


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


почему??? 0.1, как положено....
просто выводится в 2 столбика, посмотри внимательнее


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Василяй
сообщение 17.06.2007 21:03
Сообщение #9





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Василий

Репутация: -  0  +


Цитата(мисс_граффити @ 17.06.2007 21:12) *


...
if odd(count) then
writeln;
end;
...


вроде этот цикл создаёт этот глюк?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 17.06.2007 21:07
Сообщение #10


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


это не цикл
и к глюку никакого отношения не имеет...

вывод в 2 столбика позволяет лучше поместить строчки, иначе они совсем не влезают


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Василяй
сообщение 17.06.2007 21:18
Сообщение #11





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Василий

Репутация: -  0  +


Всё понятно! спасибо за помощь!
crazy.gif good.gif crazy.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 3:20
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"