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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2015, 10:49   #1
Stas8282
 
Регистрация: 14.03.2015
Сообщений: 4
По умолчанию Функции (Pascal)

Необходимо найти максимум двух массивов с помощью функции. Программа работает. Но вместо максимумов выдает либо значения последних элементов массивов, либо их значения q. Как это можно исправить? Заранее благодарен)

Код:
uses
   crt;

const
   q1 = 19;
   q2 = 14;

var
   i, xmax, ymax: integer;
   z: real;
   x: array[0..q1]of integer;
   y: array[0..q2]of integer;

function Max(a: array of integer; up: integer): integer;
var
   i: integer;
begin
  Result:=a[1];
   for i := 0 to up do 
   begin
      if a[i] > Result then Result := a[i];
   end;
end;

begin;
   randomize;
   
   for i := 0 to q1 do 
   begin
      x[i] := random(50);
      writeln('x[', i:2, ']= ', x[i]);
   end;
   writeln;
   for i := 0 to q2 do 
   begin
      y[i] := random(50);
      writeln('y[', i:2, ']= ', y[i]);
   end;
   
   xmax := Max(x,q1);
   ymax := Max(y,q2);
   
   writeln;
   writeln(xmax);
   writeln(ymax);
   
end.

Последний раз редактировалось Stilet; 14.03.2015 в 11:19.
Stas8282 вне форума Ответить с цитированием
Старый 14.03.2015, 11:16   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,985
По умолчанию

Не понятно, для чего переменная z:real;
В функции Max исправить нулевой индекс:
Код:
Result:=a[0];
А так в принципе работает!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 14.03.2015, 11:20   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
function Max(a: array of integer): integer;
var
   i: integer;
begin
  Result:=a[Low(a)];
   for i := Low(a)+1 to High(a) do 
   begin
      if a[i] > Result then Result := a[i];
   end;
end;
Так будет надежнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.03.2015, 11:42   #4
Stas8282
 
Регистрация: 14.03.2015
Сообщений: 4
По умолчанию

так действительно лучше)) но теперь другая проблемка...
Код:
uses
   crt;

const
   q1 = 20;
   q2 = 15;

var
   i, xmax, ymax: integer;
   x: array[1..q1]of integer;
   y: array[1..q2]of integer;

function Max(a: array of integer): integer;
var
   i: integer;
begin
  Result:=a[Low(a)];
   for i := Low(a)+1 to High(a) do 
   begin
      if a[i] > Result then Result := a[i];
   end;
end;

begin;
   randomize;
   
   for i := 1 to q1 do 
   begin
      x[i] := random(50);
      writeln('x[', i:2, ']= ', x[i]);
   end;
   writeln;
   for i := 1 to q2 do 
   begin
      y[i] := random(50);
      writeln('y[', i:2, ']= ', y[i]);
   end;
   
   xmax := Max(x);    //нельзя преобразовать тип array[1..20] of integer к array
                              //of integer
   ymax := Max(y);
   
   writeln;
   writeln(xmax);
   writeln(ymax);
   
end.

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

Либо опиши тип массива отдельно, либо используй динамические массивы.
Второе будет ИМХО удобнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.03.2015, 12:16   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

пора уже вырасти:
  • нумеровать массивы с нуля,
  • не путать статические, динамические и открытые массивы.
и жить станет проще.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось Stilet; 14.03.2015 в 13:06.
min@y™ вне форума Ответить с цитированием
Старый 14.03.2015, 12:20   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,985
По умолчанию

Цитата:
//нельзя преобразовать тип array[1..20] of integer к array
//of integer
У меня также все работает (на Delphi).

А какая среда программирования?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось Stilet; 14.03.2015 в 13:06.
newerow1989 вне форума Ответить с цитированием
Старый 14.03.2015, 20:01   #8
Stas8282
 
Регистрация: 14.03.2015
Сообщений: 4
По умолчанию

PascalABC.NET
Stas8282 вне форума Ответить с цитированием
Старый 14.03.2015, 20:29   #9
Stas8282
 
Регистрация: 14.03.2015
Сообщений: 4
По умолчанию

Спасибо, ребятки)) все работает. Вот что получилось...

Код:
uses
   crt;

const
   q1 = 21;
   q2 = 16;

var
   i,j, xmax, ymax: integer;
   z:real;
   o:array of integer;
   p:array of integer;

function Max(a: array of integer): integer;
var
   i: integer;
begin
  Result:=a[Low(a)];
   for i := Low(a)+1 to High(a) do 
   begin
      if a[i] > Result then Result := a[i];
   end;
end;

begin;
   randomize;
   
   o:=new integer[q1];
   p:=new integer[q2];
   
   for i := Low(o) to High(o) do 
   begin
      o[i] := random(50);
      writeln('o[', i:2, ']= ', o[i]);
   end;
   writeln;
   for j := Low(p) to High(p) do 
   begin
      p[j] := random(50);
      writeln('p[', j:2, ']= ', p[j]);
   end;
   
   xmax := Max(o); 
   ymax := Max(p);
   
   writeln;
   writeln('xmax = ',xmax);
   writeln('ymax = ',ymax);
   z:=(exp(xmax)-exp(ymax)/sqrt(xmax*ymax));
   writeln('z = ',z);
   
end.
From Stilet: У нас для выделения кода в редакторе поста есть кнопки. # в твоем случае. Прошу ей пользоваться, а не писать отсебятину.

Последний раз редактировалось Stilet; 14.03.2015 в 21:10.
Stas8282 вне форума Ответить с цитированием
Старый 14.03.2015, 20:39   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Вот что получилось...
не надо так!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции. Pascal Kind1 Помощь студентам 2 24.12.2013 22:12
функции в Pascal zver1804 Помощь студентам 0 01.11.2012 23:01
[Pascal] Функции MaximV Помощь студентам 1 26.04.2012 16:23
Функции. Pascal. meta Помощь студентам 1 12.01.2011 04:04
Функции [Pascal]. sergey31 Помощь студентам 4 31.05.2008 22:11