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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 19:34   #1
curly182
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 14
По умолчанию массивы переменной длины

Хочу написать функцию-подпрограмму поиска максимального элемента массива. Есть массивы из 4 и 6 элементов. Для каждого нужна своя функция поиска или нет? В документации по массивам переменной длины ниче найти не смог( Если кто писал что то похожее или знает как это делать - отпишитесь
curly182 вне форума Ответить с цитированием
Старый 16.05.2009, 22:17   #2
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Одна функция для любого массива. Правда в нее нужно будет, скорее всего передавать указатель на массив, и его размер, а затем используя указатели обрабатывать в цикле. На Си это просто делается.

Второй вариант более простой:
Код:
type mass=array[1.. 6] of integer;// берем данные из большего массива
var arrA, arrB: mass;
....
function (arr:mass; size:byte):integer;
begin
................
end;

A=function (arrA, 6);
B=function (arrB, 4);
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 18.05.2009, 20:17   #3
curly182
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 14
По умолчанию

А что тут тогда не так?

program lab7;
uses wincrt;
var num: integer;
type masA=array[1..num] of real;
const A: masA = (-5.2, 8.1, 1.3, 8.25);
var rez: real;
function GetMax(X:masA;num:integer):real;
var max: real;
begin
max:=X[1];
for i:=1 to num do
begin
if X[i]>max then
max:=X[i];
end;
GetMax:=max
end;
begin
rez:=GetMax(A,4);
writeln;
writeln(' максимум массива A = ', rez);
end.
curly182 вне форума Ответить с цитированием
Старый 18.05.2009, 20:55   #4
NSvirus
пропагандирую жизЪ
Форумчанин
 
Аватар для NSvirus
 
Регистрация: 19.03.2007
Сообщений: 950
По умолчанию вот...

program lab7;
uses crt;

type MasA = array[1..4] of real;

const A:MasA=(-5.2, 8.1, 1.3, 8.25);
var rez: real;

>>function GetMax(A:masA):real;
>> var max: real;
>> i:integer;
>> begin
>> max:=A[1];
>> for i:=1 to 4 do
>> begin
>> if A[i]>max then
>> max:=A[i];
>> end;
>> GetMax:=max
>> end;
>>begin
>> rez:=GetMax(A);
>> writeln;
>> writeln(' Максимум массива* A = ', rez);
>> readln;
>>end.
Посторонним В.
NSvirus вне форума Ответить с цитированием
Старый 18.05.2009, 21:08   #5
-HunteR-
Форумчанин
 
Аватар для -HunteR-
 
Регистрация: 04.11.2007
Сообщений: 117
По умолчанию

curly182
массив сразу задать нужно. Задавай от 1 до 300, которые не будут использоваться будут просто висеть в памяти.
Перед тем, как выложить код, я его всегда проверяю.
Если помог - тыкни на на весы слева, под аватарой.
-HunteR- вне форума Ответить с цитированием
Старый 19.05.2009, 02:24   #6
curly182
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 14
По умолчанию

А как объявить тогда теперь инициализированный массив из 4 элементов, когда есть тип - массив из 6 ?? пишет, что не хватает запятых в массиве
curly182 вне форума Ответить с цитированием
Старый 19.05.2009, 03:12   #7
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

значит, забить ерундой, чтоб было 6
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 19.05.2009, 16:28   #8
curly182
Пользователь
 
Регистрация: 07.04.2009
Сообщений: 14
По умолчанию

Цитата:
Сообщение от OCTAGRAM Посмотреть сообщение
значит, забить ерундой, чтоб было 6
это ваще бред.. неужели в этом гребаном паскале нельзя написать нормальную функцию поиска для массивов разной длины? хоть кто нибудь может сказать четко ?
curly182 вне форума Ответить с цитированием
Старый 19.05.2009, 19:48   #9
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Цитата:
Сообщение от curly182 Посмотреть сообщение
это ваще бред.. неужели в этом гребаном паскале нельзя написать нормальную функцию поиска для массивов разной длины? хоть кто нибудь может сказать четко ?
В Delphi появились открытые массивы, в Паскале их ещё не было (кстати, в ISO Pascal открытые массивы тоже есть). Поэтому в таких случаях, если очень надо, используются нетипизированные аргументы. Например, FillPoly и DrawPoly, у которых количество точек варьируется, используют именно такую технику.

Код:
type BigIntegerArray = array[1..32767] of Integer;

function IntegerMax(var IntegerArray; Len : Integer) : Integer;
var R, i, El : Integer;
begin
  R := -MaxInt;
  for i := 1 to Len do
  begin
    El := BigIntegerArray(IntegerArray)[i];
    if El > R then
      R := El;
  end;
  IntegerMax := R;
end;

const
  Array1 : array[1 .. 6] of Integer = (4, 8, 2, 12, 8, 3);
  Array2 : array[1 .. 1] of Integer = (7);
  Array3 : array[1 .. 9] of Integer = (-9, -2, -7, -3, -28, -13, -5, -15, -4);

begin
  WriteLn(IntegerMax(Array1, 6)); {12}
  WriteLn(IntegerMax(Array2, 1)); {7}
  WriteLn(IntegerMax(Array3, 9)); {-2}
end.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 20.05.2009, 13:23   #10
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Цитата:
неужели в этом гребаном паскале нельзя написать нормальную функцию поиска для массивов разной длины?
Можно при передаче параматров в функции и процедуры, далаете описание например
Код:
Procedure a(b:array of integer)
и можно передавать любой целочисельный массив. Для компилятора должна стоять опция: Open Parameters
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 20.05.2009 в 13:37.
Anatole вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06
Поиск цикла длины 4. <Бананан> Помощь студентам 33 25.05.2008 20:10
Массив неопределённой длины Влажимир Общие вопросы Delphi 2 01.04.2008 10:14
определение длины динамич. массива Романнн Общие вопросы Delphi 3 11.03.2008 18:48
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47