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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2011, 17:17   #11
igni
Пользователь
 
Регистрация: 08.08.2009
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Это интервал значений. Тебе нужно прорешать формулу подставляя вместо Х конкретные значения от 1 до 3.
Спасибо, вроде понял!
[i,j] т.е.
For k:=i to j do
begin
x:=k;
...решение...
end;
igni вне форума Ответить с цитированием
Старый 27.09.2011, 17:19   #12
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

For не подойдет. Вам же не по единице надо прибавлять.
Сегодня уже 2 темы про это было:
http://programmersforum.ru/showthread.php?t=166743
http://programmersforum.ru/showthread.php?t=166720
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 27.09.2011, 17:31   #13
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Одногруппники ТС наверное))
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 27.09.2011, 18:05   #14
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

igni
Цитата:
Как сделать А=X^X-1 я прекрасно знаю. Но что значат цифры в квадратных скобках [1,3]? Как я понял это переменная X, но не пойму как X может быть = [1,3]... И еще "с шагом h=(b-a)/n" формула ясна но как она влеяет на счет не понятно(
Цифры в квадратных скобках означают промежуток, включающий граничные точки. Рассмотрим на конкретном примере.

Если есть промежуток [1, 3], то это означает, что необходимо вычислить значение функции на отрезке [1, 3] (протабулировать функцию на этом отрезке). То есть, вычислить значение этой функции не только в граничных точках этого отрезка, но и в точках, лежащих между ними. Промежуточные точки будут получаться благодаря шагу, вычисляемого по формуле h=(b-a)/n, где n - число разбиений этого промежутка.

Например, если n = 4, то h = (3 - 1)/4 = 2/4 = 0.5

При таких исходных данных на выходе будет получен результат в виде таблице, куда сведены исходные точки и значения функции в ней. Для нашего случая это будет выглядеть так:

x f(x)
1 f(1)
1.5 f(1.5)
............
3 f(3)

______________________


Цитата:
Сообщение от Alex11223 Посмотреть сообщение
For не подойдет. Вам же не по единице надо прибавлять.
Сегодня уже 2 темы про это было:
http://programmersforum.ru/showthread.php?t=166743
http://programmersforum.ru/showthread.php?t=166720
На самом деле, оператор for использовать можно
Но в этом случае действие с параметром цикла будет идти не напрямую, а через формулу
Код:
x = a + i*h
. То есть, процесс табулирования функции можно записать следующим образом:
Код:
h = (b - a)/n

for i:=0 to n do
begin
x = a + i*h
вычисляем значение F(x) и выводим его на экран вместе с аргументом функции
end;

Последний раз редактировалось Вадим Мошев; 27.09.2011 в 18:20.
Вадим Мошев вне форума Ответить с цитированием
Старый 28.09.2011, 07:25   #15
igni
Пользователь
 
Регистрация: 08.08.2009
Сообщений: 12
По умолчанию

Всем большущее спасибо

Опять застрял. Ввожу a и b как числа для подсчета шага. i и j ставлю как 1 и 3 ([1,3]) как теперь найти кол-ство шагов?
1 + (b-a)/n - это будет первый шаг? чему равно n в этом случае?
допустим
b:=10
a:=4
первый шаг будет 1+((10-4)/n)
Есть предположение что n изначально равно 1 и с каждым шагом n:=n+1, я прав?

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  a,b,n,i,j,x,F: real;
  //i начальная точка, j конечная точка.
begin
  a:=StrToFloat(Edit1.text);
  b:=StrToFloat(Edit2.text);
  i:=1;
  j:=3;
  n:=0;//номер шага
  x:=i;
  While (x<=j) do //Выполнять действия между Begin и End; пока (...)
  begin
    n:=n+1; //делаем шаг
    x:=((b-a)/n); //считаем индекс (Не знаю как это назвать иначе :) )
    F:=Exp(ln(x)*(x-1));
    Memo1.Lines.Add('Шаг №'+FloatToStr(n)+': F('+FloatToStr(x)+')='+FloatToStr(F));
    if n>=500 then //Если прошло 500 шагов остановим цикл т.к. это глюк %\
    begin
      memo1.Lines.Add('Останавливаем цикл, иначе он будет крутиться вечно :)');
      exit;
    end;
  end;
end;
Прошу проверить (подправить). Не обращайте внимание на корявость, как доделаю обязательно оптимизирую.

Последний раз редактировалось Stilet; 28.09.2011 в 14:42.
igni вне форума Ответить с цитированием
Старый 28.09.2011, 11:09   #16
Junsui
Пользователь
 
Регистрация: 25.01.2009
Сообщений: 12
По умолчанию

Зачем вам i и j, если вы вводите переменные a и b?
n, как я понимаю, изменяться не должна. Вы просто должны высчитать шаг, с которым будет изменяться x. Наверно должно получиться как-то так.
Код:
procedure TForm1.Button1Click(Sender: TObject);
  var
    a,b,n,h,F,x: real;
    //a, b - начало и конец интервала.
    //h - шаг
  begin
    a:=1;
    b:=3;
    n:=StrToFloat(Edit1.text); 
    h := (b-a)/n; //вычисляем шаг
    x := a;
    Memo1.Lines.Clear;
    While (x<=b) do 
      begin
        F:=Exp(ln(x)*(x-1));
        Memo1.Lines.Add('При x = ' + FloatToStr(x) + ' F(x) = ' + FloatToStr(F));
        x := x + h;
      end;
  end;
end.
Junsui вне форума Ответить с цитированием
Старый 28.09.2011, 11:18   #17
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И раз уж программа не консольнаям, то "Результат оформить в виде таблиц" скорее всего имеется в виду СтрингГрид.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 28.09.2011, 12:42   #18
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

На паскале(см первый пост) же нет стринггридов ))
а вот вывести таблично можно как-то так, коли не путаю:
Код:
for i := 0 to width do
begin
for j := 0 to height
  do write(mas[j,i]:5);
writeln;
end;
phomm вне форума Ответить с цитированием
Старый 28.09.2011, 13:05   #19
igni
Пользователь
 
Регистрация: 08.08.2009
Сообщений: 12
По умолчанию

Благодарю, теперь точно разобрался Не думал что a и b это [1,3]
P.S задачу уже сдавать поздно Просто жутко интересно было
igni вне форума Ответить с цитированием
Старый 28.09.2011, 13:35   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
n, как я понимаю, изменяться не должна.
точно. согласен. +1

Позволю сделать небольшое пояснение.
В подобных задачах на вычисление функции для аргументов, изменяющихся с шагом (это называют табулированием функции - т.е. составлением таблицы значений) задаётся интервал и шаг, или интервал и количество шагов (сколько значений функии надо получить на данном интервале или начальное значение, шаг и количество шагов. Очевидно, что эти величины могу быть легко пересчитаны относительно друг друга.
В данном случае даже в условии задана формула расчёта шага.
Т.е. нужно ввести в программу не только границы интервала, но и количество шагов.
(в примере Junsui это число из Edit1: n:=StrToFloat(Edit1.text); )
только я бы сделал её ЦЕЛЫМ числом. (иначе дробное число шагов - это бессмысленно!)

p.s. когда известно число шагов, основной цикл может быть записан и так, как предлагалось раньше:
Код:
  var
    a,b,h,F,x: real;
    //a, b - начало и конец интервала.
    //h - шаг
    i, n : integer;
  begin
    a:=1;
    b:=3;
    n:=StrToIntDef(Edit1.text,0); 
    if n<=0 then begin
      ShowMessage('Неверное значение в Edit1. Должно быть целое и положительное!');
       exit; {выходим из процедуры табулирования}
    end;
    if n=1 then h := b-a
    else
      h := (b-a)/(n-1); {вычисляем шаг - чтобы получить заданное число шагов n}
    x := a;
    Memo1.Lines.Clear;
    for i:=1 to n do
      begin
        F:=Exp(ln(x)*(x-1));
        Memo1.Lines.Add('При x = ' + FloatToStr(x) + ' F(x) = ' + FloatToStr(F));
        x := x + h;
      end;
  end
p.s. извините, что пример на Delphi. Думаю, не составит труда переделать его под Pascal
p.p.s.
Цитата:
P.S задачу уже сдавать поздно Просто жутко интересно было
а это правильный подход! Молодец!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить значение функции y, развив функцию ln(x) в ряд Тейлора Lifastyle Общие вопросы C/C++ 2 15.03.2010 11:26
Вычислить значения функции и вывести результаты в виде графика (функцию см.далее) {Please} timepoka Помощь студентам 10 28.02.2010 12:43
вычислить функцию sanya006 Помощь студентам 1 27.11.2009 23:55
Для заданных значений аргумента Х вычислить значения суммы S и функцию Z Infinity11 Помощь студентам 8 23.11.2009 09:35
Помогите вычислить функцию Xander Помощь студентам 6 13.11.2008 18:28