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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2014, 13:03   #1
Tpogih
 
Регистрация: 08.12.2013
Сообщений: 5
По умолчанию не правильный тип параметров подпрограммы

язык паскаль.
выдает ошибку, не правильный тип параметров подпрограммы, не могу найти где ошибка. буду рад помощи

Код:
function F(x, y: real): real;
 
begin
   F := (6-y*y)*cos(x)+2*y;
end;
 
procedure RungeKutta(x0, y0, h: real; n: Integer; var y1: array of real);
 
var
   x, y, k1, k2, k3, k4: real;
   i: Integer;
 
begin
   x := x0;
   y := y0;
   y1[0] := y0;
   i := 0;
   while i < n do
      begin
     k1 := F(x, y);
         k2 := F(x + h *0.5, y + h * k1*0.5);
         k3 := F(x + h *0.5, y + h * k2*0.5);
         k4 := F(x + h, y + h * k3);
         y := y + h * (k1 + 2 * k2 + 2 * k3 + k4)/6;
         inc(i);
         y1[i] := y;
         x := x +h;
      end;
end;
 
function Lin_interpol(x1, y1, x2, y2, x: real): real;
 
begin
     Lin_interpol := y1+ (x - x1) * (y2 - y1) / (x2 - x1);
end;
 
function Simpson(var y: array of real; n: Integer; h: real): real;
 
var
   p: real;
   i: Integer;
 
begin
   inc(i);
   p := y[0] + y[n];
   for i := 1 to n div 2 do
    p := p + 4 * y[i*2 -1];
   for i := 1 to n div 2 - 1 do
    p := p + 2 * y[i * 2];
   Simpson := p* h / 3;    
end;
 
var
   h, d, maxD: real;
   y: array[0..1, 0..1000] of real;
   y2: array[0..10] of real;
   i,j,n,k:integer;
 
begin
   h := 1;
   n := 1;
   RungeKutta(0, 0.3, h, n, y[0]);                           //здесь выдает ошибку
   i := 0;
   repeat
      h := h / 2;
      RungeKutta(0, 0.3, h, n * 2, y[1 - i]);
      maxD := 0;
      for j := 0 to n do
         begin
            d := abs(y[i, j] - y[1 - i, j * 2]);
            if d > maxD then
            maxD := d;
         end;
   i := 1 - i;
   n := n * 2;
   until (maxD <= 15 * 1e-4) or (n * 2 > 1000);
   writeln;
   writeln(' Reshenie differencialnogo yravneniya metodom Rynge-Kytta:');
   writeln;
   for j := 0 to n do
   WriteLn(' y(', j * h:5:5, ') = ', y[i, j]:5:5);
   WriteLn;
 
   y2[0] := 0.09;
   y2[10] := sqr(y[i, n]);
   writeln(' Rezultati interpolyacii:');
   writeln;
   for j :=0 to 10 do
       begin
          k := trunc(j * 0.1 / h);
      y2[j] := Lin_interpol(h * k, y[i, k], h * (k + 1), y[i, k + 1], j * 0.1);
      WriteLn(' y(', j * 0.1:5:5, ') = ', y2[j]:5:5);
            y2[j] := sqr(y2[j]);
       end;
   writeln;
   write(' Kol-vo teploti,videlaushegocia na edinichnom soprotivlenii ');
   write('za edinicy vremeni:');
   writeln;
   Writeln('Q =  ', Simpson(y2, 10, 0.1):5:5);
   readln;
end.

Последний раз редактировалось Tpogih; 29.05.2014 в 13:08.
Tpogih вне форума Ответить с цитированием
Старый 29.05.2014, 13:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно.
У тебя параметр: array of real а ты суешь туда array[0..1, 0..1000] of real;
Это разные типы.
Тебе тогда либо обьявлять везде type TArray=array[0..10] of real и использовать его в качестве типа параметра процедуры и пихаемой в нее переменной или y: array of real;
писать и спользовать SetLength для задания размерности
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2014, 17:27   #3
Tpogih
 
Регистрация: 08.12.2013
Сообщений: 5
По умолчанию

сделал тип. поменял описание некоторых переменных на него, теперь не хочет присваивать y1[0] := y0;
Tpogih вне форума Ответить с цитированием
Старый 29.05.2014, 17:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код в студию.
Текст ошибки в студию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2014, 17:44   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от Tpogih Посмотреть сообщение
сделал тип. поменял описание некоторых переменных на него, теперь не хочет присваивать y1[0] := y0;
Небось " аццес виолатион " .. Наверное массиву y1 размер не задал.
До первого же обращения к динамическому массиву надо ему сделать SetLength
type_Oleg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 0 02.11.2012 21:58
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 6 02.11.2012 21:46
Функции с переменным количеством параметров. Функция, как тип данных. Кудаив Помощь студентам 0 27.05.2012 14:21
PostMessage и тип Integer параметров WParam/LParam 3D Hunter Общие вопросы Delphi 3 20.09.2011 22:24
Подпрограммы-процедуры, подпрограммы-функции в Pascal rishikesh Помощь студентам 19 18.05.2010 23:05