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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2011, 01:22   #1
RakNaGore
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 12
Восклицание Модуль по работе с элементами массива

Пишу модуль для работы с элементами массива, решил проверить его, сделав его, как программу. Столкнулся с проблемами.

В функции поиска минимального элемента:

Код:
Function FindMin (w : TArray) : integer;
var
 i : integer;
begin
 FindMin := w[1];
 for i := 1 to ChkArray(w) do if w[i] < FindMin then FindMin := w[i];
end;
Выдает ошибку: Error: Incompatible types: got "FindMin(TArray):SmallInt;" expected "LongInt" на строке for i := 1 to ChkArray(w) do if w[i] < FindMin then FindMin := w[i];

Тоже самое выдает в функции поиска максимального элемента на соответствующей строке:

Код:
Function FindMax (w : TArray) : integer;
var
 i : integer;
begin
 FindMax := w[1];
 for i := 1 to ChkArray(w) do if w[i] > FindMax then FindMax := w[i];
end;
Весь код:


PHP код:
PROGRAM Test;

USES
 Crt
;

CONST
 
n1 100;

TYPE
 TList 
0..n1;
 
TArray = array[TListof integer;

VAR
 
TArray;
 
integer;

Procedure EnterArray(integer; var TArray);
var
 
integer;
 
begin
  
for := 1 to n do
  
begin
   Write
('Enter ь'i,': ');
   
ReadLn(w[i]);
  
end;
 
end;

Procedure ShowArray (integerTArray);
var
 
integer;
begin
 
for := 1 to n do WriteLn('Massive №'i,'= 'w[i]);
end;

Procedure Swap (var ainteger); {замена двух элементов массива местами}
var
  
temp integer;
 
begin
  temp 
:= a;
  
:= b;
  
:= temp;
 
end;

Function 
ChkArray (var TArray) : integer; {проверка сколько всего непустых элементов в массиве}
var
  
iinteger;
 
begin
  
for := 1 to n1 do if w[i] <> 0 then j := i;
  if 
<> n1 then ChkArray := else ChkArray := n1;
 
end;

Function 
FindMin (TArray) : integer;
var
 
integer;
begin
 FindMin 
:= w[1];
 for 
:= 1 to ChkArray(w) do if w[i] < FindMin then FindMin := w[i];
end;

Function 
FindMax (TArray) : integer;
var
 
integer;
begin
 FindMax 
:= w[1];
 for 
:= 1 to ChkArray(w) do if w[i] > FindMax then FindMax := w[i];
end;

Procedure DeleteByNum (TArrayinteger);
begin
 repeat
  w
[a] := w[1];
  
:= 1;
 
until a ChkArray(w);
 
w[a] := 0;
end;

Procedure InsertByNum (TArrayainteger);
var
 
iqq1 integer;
begin
 q 
:= w[a];
 
w[a] := b;
 
q1 := w[1];
 
w[1] := q;
 for 
:= 2 to n1 do
 
begin
  q 
:= w[i];
  
w[i] := q1;
  
q1 := w[1];
  
w[1] := q;
 
end;
end;
Function 
NumOfQuantile (TArrayinteger) : integer; {поиск номера квантиля (квантиль это a), если его нетуто номер 0}
var 
iinteger;
begin
 NumOfQuantile 
:= 0;
 
:= ChkArray(w);
 
:= 1;
 
repeat
  
if w[ithen NumOfQuantile := else := 1;
 
until i 1; {1потому-что могут искать элемент "0"}
end;

Procedure CopyOfArray (TArray; var w1 TArray);
var
 
integer;
 
begin
  
for := 1 to ChkArray(w) do w1[i] := w[i];
 
end;

Procedure Sort1 (var TArray); {метод пузырька}
var
 
ijinteger;
begin
 k 
:= ChkArray(w);
 for 
:= 1 to k do
 
begin
  
for := (1) - i downto 1 do if w[j] < w[1then swap(w[j], w[1]);
 
end;
end;

Procedure Sort2 (var TArray); {метод вставок}
var
 
ijkinteger;
begin
 k 
:= ChkArray(w);
 
:= FindMin(w);
 
w[0] := 1;
 for 
:= 2 to k do
 
begin
  j 
:= i;
  while 
w[j] < w[1] do
   
begin
    swap
(w[i], w[1]);
    
:= 1;
   
end;
  
end;
end;

Procedure Sort3 (var TArray); {метод сортировки посредством выборасамый простой}
var
 
w1 TArray;
 
ikinteger;
begin
 CopyOfArray
(ww1);
 
:= ChkArray(w1);
 for 
:= 1 to k do
 
begin
  q 
:= NumOfQuantile(w1FindMin(w1)); {находим номер минимального элемента};
  
w1[i] := w1[q];
  
DeleteByNum(w1q);
 
end;
end;

BEGIN
 EnterArray
(5w);
 
Sort1(w);
 
ShowArray(5w);
END

Последний раз редактировалось RakNaGore; 09.11.2011 в 16:38.
RakNaGore вне форума Ответить с цитированием
Старый 09.11.2011, 01:50   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Can't take the address of constant expression

чё-то у вас все ошибки одинаковые, хотя в первых двух случаях должна быть ошибка "( expected", либо "Not enough actual parameters", если компилить дельфой.

А в третьем случае действительно, результат функции нельзя передавать по ссылке, только по значению.

Вобще, код уникален тем, что почти в каждой строчке логическая ошибка )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 09.11.2011, 16:38   #3
RakNaGore
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 12
По умолчанию

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

Но первые 2 ошибки остаются нерешенными. Очень интересно что же я там не так сделал.
RakNaGore вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать произведение эл-ов массива, расположенных между максимальным и минимальными элементами. Fri Помощь студентам 4 23.10.2011 20:35
Задача на работу с элементами массива Full Juice Помощь студентам 4 11.01.2010 16:17
Задачи на работу с элементами массива и с компонентами массива Full Juice Помощь студентам 24 30.12.2009 13:33
Работа с элементами массива Qwerty91 Помощь студентам 4 13.12.2009 12:54
Работа с элементами массива. (Паскаль). tanuschka Помощь студентам 1 20.11.2008 20:38