Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8743
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Советник
Рейтинг: 6913
∙ повысить рейтинг »
lamed
Статус: Академик
Рейтинг: 5631
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1218
Дата выхода:19.12.2011, 19:00
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:159 / 171
Вопросов / ответов:2 / 2

Консультация # 184779: Здравствуйте! Прошу помощи в следующем вопросе: Ранее в запросе №184671 была составлен программа тему: Вычисление таблицы значений функции, заданной в виде разложения в ряд Где было необходимо составить программу вычисления таблицы значений функции, заданной в виде разложения в ряд. Значение функции вычислять с точностью e (эпсилон)>0,...


Консультация # 184785: Здравствуйте! Прошу помощи в следующем вопросе: Ранее в запросе №184672 была составлена программа для транспонирования матрицы A(I,J), I ≤ 10, J ≤ 15. Суть этого вопроса в следующем: По данной программе необходимо провести: 1. Математическая формулировка задачи; 2. Численный метод решения.

Консультация # 184779:

Здравствуйте! Прошу помощи в следующем вопросе:
Ранее в запросе №184671 была составлен программа тему: Вычисление таблицы значений функции, заданной в виде разложения в ряд

Где было необходимо составить программу вычисления таблицы значений функции, заданной в виде разложения в ряд. Значение функции вычислять с точностью e (эпсилон)>0, т.е. вычисление суммы членов ряда необходимо прекратить, когда абсолютная величина очередного члена ряда разложения окажется меньше e: l ак l <e.

При вычислении очередного члена целесообразно воспользоваться рекурентным выражением:
ак+1=скак; к= 0, 1, 3, ...,
где ак - некоторый к-ый член ряда; ак+1 - следующий к+1-ый член ряда; ск - коэффициент, определяемый номером к.


При составлении программы необходимо было по возможности воспользоваться операторами организации циклов WHILE, REPEAT, FOR.
Границы интервала вычислений функций a и b, величина шага изменения аргумента h и точность вычисления функц ии e задавались при вводе. На печать выводились номер по порядку, значение аргумента, соответствующие ему, значение функции и номер члена ряда, на котором закончилось вычисление значение функции.

Функция задана на рисунке:


Код :
uses crt;
const
  en = 5;
var
  a, b, h, x, sqrx, el, fx, e: real;
  i, count: integer;
begin
   clrscr;
   Writeln ('Программа предназначена для вычисления таблицы значений функции, ');
writeln ('заданной в виде разложения в ряд.');
writeln;
{------------------------------------------------------------------------}
{Ввод данных}

writeln('Введите границы интервала [A,B] ( причем (A<=B) ); ');
writeln('шаг изменения аргумента H (H>0) и точность E (E>0)');
writeln;
repeat
 begin
   write('Введите границу интервала A = ');
   readln(a);
   write('Введите границу интервала B = ');
   readln(b);
   if not (A<=B) then writeln ('A должно быть меньше или равно B! Повторите ввод.');
 end;
until (A<=B);
repeat
 begin
   write('Введите велечину изменения шага аргумента H = ');
   readln(h);
   if not (H>0) then writeln ('H должно быть больше 0! Повторите ввод.');
 end;
until (H>0);
      repeat
        begin
        write('Введите точность вычисления E (эпсион) = ');
        readln(e);
        if not (e>0) then writeln ('E должно быть больше 0! Повторите ввод.');
        end;
      until (E>0);
      writeln;
{------------------------------------------------------------------------------}
{Вывод введенных значений}
writeln('Вы ввели: ');
writeln('A=',a:1:en, ' B=',b:1:en,' H=',h:1:en,' E=',e:1:en);
writeln;
{------------------------------------------------------------------------------}
{Вывод шапки таблицы}
   writeln('---------------------------------------------------------------------------');
   writeln('№ номер':5, '  ':3, 'X', ' ':9, 'f(X)', ' ':6, 'Номер члена ряда');
   writeln('---------------------------------------------------------------------------');
{------------------------------------------------------------------------------}
{Условия для выполнения}
   x := a;
   count := 1;
   while (x<=b) do begin
      sqrx := sqr(x);
      fx := 1;
      i := 1;
      el := 1;
      repeat
         el := (el/i) * sqrx;
         if (abs(el) < e) then
            break;
         if odd(i) then
            fx := fx - el
         else
            fx := fx + el;
         inc(i);
      until false;
      writeln(count:5, ' ':3, x:7:en, ' ':3, fx:7, ' ':3, i);
      x := x + h;
      inc(count);
   end;
   writeln;
   writeln('Готово. Для выхода нажмите любую кнопку...');
   readkey;
end.


Суть этого вопроса в следующем:
По данной программе необходимо провести:
1. Математическая формулировка задачи;
2. Численный метод решения.

Для примера выполнения могу привести следующий документ, который можно скачать по ссылке представленной ниже:
Пример оформления поставленной задачи

Дата отправки: 13.12.2011, 20:09
Вопрос задал: Посетитель - 386678 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Andrew Kovalchuk (Профессионал):

Здравствуйте, Посетитель - 386678!

Математическая формулировка задачи.
Некоторые функции удобно представлять в виде разложения в бесконечный ряд, где значение функции характеризуется тем точнее, чем больше членов последовательности принимает участие в ее формировании. Каждый член ряда – это конкретное значение. Нахождение значения каждого из членов последовательности дает возможность вычислить значение функции. Продолжать вычисления целесообразно до тех пор пока вклад каждого члена последовательности превышает некое наперед заданное пороговое значение е (эпсилон) больше нуля (е>0), характеризующее достаточную точность представления члена последовательности.
Пусть задана функция f(x) = 1 + (-1)^k*((x^2k)/(k!)).
Требуется построить таблицу значений для заданного границами интервала [a, b] с указанными шагом изменения аргумента (h) и точностью вычисления (e>0).

Численный метод решения.
Требуется приближённо вычислить значение функции, задан ной в виде разложения в бесконечный ряд. Очевидно, что вычисление значения функции нужно производить за конечное число шагов. А значит, необходим некий ограничивающий фактор, в качестве которого в нашей задаче будет выступать погрешность вычислений е (е>0). Следовательно, вычислив значение нового члена ряда, нам необходимо проверить, не будет ли абсолютная величина очередного члена ряда меньше, чем величина погрешности е, т.е. |ak| < е. Если это неравенство выполнилось, то мы достигли требуемой точности представления очередного значения функции и вычисления можно прекращать. Кроме того, для уменьшения числа вычислительных операций целесообразно воспользоваться уже имеющимися от предыдущих вычислений значениями членов последовательно. Так в нашей функции значение k! будет отличаться от предыдущего значения наличием константы k в произведении, а x^2k - это ничто иное, как значение x^(2(k-1)), полученное на предыдущем шаге, домноженное на x^2. Таким образом, используя зна чения членов, полученные на предыдущих шагах мы будем получать значения членов текущей итерации: a[k] = a[k-1] * (x^2/k);

Консультировал: Andrew Kovalchuk (Профессионал)
Дата отправки: 14.12.2011, 10:20

5
нет комментария
-----
Дата оценки: 14.12.2011, 11:28

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 184785:

Здравствуйте! Прошу помощи в следующем вопросе:
Ранее в запросе №184672 была составлена программа для транспонирования матрицы A(I,J), I ≤ 10, J ≤ 15.

Суть этого вопроса в следующем:
По данной программе необходимо провести:
1. Математическая формулировка задачи;
2. Численный метод решения.

Код :
uses crt;
const
  MaxD = 15;
  MaxI = 10;
  MaxJ = 15;
var
   A: array[1..MaxD, 1..MaxD] of byte;
   el, maxij: byte;
   I, J, ii, jj: byte;
   povtor: char;
   label start;
begin
   start:
   clrscr;
   writeln ('Программа предназначена для выполнения траспонирования ');
   writeln ('исходной матрицы');
   repeat
     write ('Введите количество столбцов (I<=10): '); readln(I);
     if I>10 then writeln ('I должно быть меньше или равно 10. Повторите ввод! ');
   until (I<=10);
   repeat
     write ('Введите количество строк (J<=15): '); readln(J);
     if J>15 then writeln ('J должно быть меньше или равно 15. Повторите ввод! ');
   until (J<=15);
    writeln('Введите элементы матрицы:');
   for jj:=1 to MaxD do
      for ii:=1 to MaxD do
         A[ii, jj] := 0;
   for jj:=1 to J do
      for ii:=1 to I do begin
        write('Введите ',jj,' - элемент ',ii,' - го столбца: ');
        readln (A[ii,jj]);
      end;
   writeln('Исходная матрица:');
      for jj:=1 to J do begin
      for ii:=1 to I do begin
         write(A[ii, jj]:5);
      end;
      writeln;
   end;
   writeln ('Транспонированная матрица:');
   if (I>J) then
      maxij := I
   else
      maxij := J;
   for jj:=1 to maxij do
      for ii:=jj+1 to maxij do begin
         el := A[ii, jj];
         A[ii, jj] := A[jj, ii];
         A[jj, ii] := el;
      end;
   el := I;
   I := J;
   J := el;
   for jj:=1 to J do begin
      for ii:=1 to I do begin
         write(A[ii, jj]:5);
      end;
      writeln;
   end;
   writeln ('Вы хотите повторить ввод? Да - клавиша "y", нет - клавиша "n" ');
   repeat
   readln (povtor);
   if povtor ='n' then
   begin
    writeln('Готово. Для выхода нажмите любую кнопку...');
    readkey;
   end
   else if povtor ='y' then goto start;
   until (povtor='n')or(povtor='y');
end.


Пример оформления похож на примеры в запросах №184779 и №184777

Гарантирую как минимум 100 рублей как материальное вознаграждение за ответы.
Сроки поджимают... Пожалуйста помогите с вопросами... Жду ваших ответов.

Дата отправки: 13.12.2011, 23:18
Вопрос задал: Посетитель - 386678 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Andrew Kovalchuk (Профессионал):

Здравствуйте, Посетитель - 386678!

Математическая постановка задачи
Пусть дана матрица А, количество строк и столбцов в которой не превышает наперед заданные значения. Значения элементов матрицы определены. Построить матрицу транспонированную данной.
Задача состоит в том, чтобы путем перемещения элементов матрицы получить такую, в которой строки и столбцы исходной поменяются местами.
Матрица размерностью ixj при этом станет преобразовании станет матрицей размерностью jxi.
При решении задачи не использовать дополнительные матрицы кроме данной.



Численный метод решения
Для решения данной задачи воспользуемся приемом "тройного попарного обмена". Этот прием позволяет сделать обмен значениями двух элементов (переменных) с временных хранением значения в единичном промежуточном элементе (переменной). Суть метода в том, что обмен элементов матрицы производится симметрично относительно элементов с равными значени ями индексов строки и столбца. Такая последовательность действий гарантирует достижение результата не более чем за N*(N-1)/2 операций "тройного попарного обмена" (где N - большая из размерностей). Критерием окончания итерационного процесса служит превышение индекса меньшей размерности ее граничного значения.

Консультировал: Andrew Kovalchuk (Профессионал)
Дата отправки: 14.12.2011, 02:41

5
нет комментария
-----
Дата оценки: 14.12.2011, 02:42

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное