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

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

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

 
 Ответить  Открыть новую тему 
> Табулирование функции
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


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

eps=1E-5;


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


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

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

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


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


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





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

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


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

понятно

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

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


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

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

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


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


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





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

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


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


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


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


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

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

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


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

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


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





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

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


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

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

 





- Текстовая версия 29.03.2024 14:20
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name