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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2011, 12:02   #1
Homutova_Julia
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 18
Восклицание Рекурсия

Разработать функцию или процедуру, которая позволяет вычислить сколько отрицательных элементов входит в массив
Код:
function TForm1.KQ(N: Byte; var X: array of integer; var K: Byte): byte;
  Begin
If N>=0 then begin K:=0; Exit end;
KQ(N-1, X, K);
If X[N]<0 then K:=K+1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  X: array of integer;
  found:boolean;
  n:byte;
  k:byte;
begin
Label2.Caption:=' ';
  for n:=Low(x) to High(x) do  begin
        k:=0;
    if X[n]<0 then k:=k+1 else exit;
     end;
           Label2.Caption:=IntToStr(TForm1.KQ(x));
          end;
При компиляции возникает ошибка [Error] Unit1.pas(67): Incompatible types: 'Byte' and 'dynamic array'.
Помогите, пожалуйста, найти в чем именно у меня ошибка и исправить ее.
С уважением, Юлия
Homutova_Julia вне форума Ответить с цитированием
Старый 08.06.2011, 12:43   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
в чем именно у меня ошибка
Ты считать не умеешь - вот в чем ошибка.

В формальном объявлении ф-ции

Код:
function TForm1.KQ(N: Byte; var X: array of integer; var K: Byte): byte;
сколько и КАКОГО ТИПА (в порядке перечисления) параметров ?

А в фактическом вызове

Код:
TForm1.KQ(x)
сколько и каких ?

Подумай головой ...
mss вне форума Ответить с цитированием
Старый 08.06.2011, 14:06   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Юля,
получите решение и разберитесь в нём.

Код:
function KQ(N: Integer; var X: array of integer): byte;
Begin
  If N<0 then KQ:=0
  else begin
    if X[N]<0 then
      KQ := KQ(N-1, X) + 1
    else
      KQ := KQ(N-1, X);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  X: array of integer;
  found:boolean;
  i : integer;
  n : integer;
begin
  // создадим массив X на 10 элементов
  n := 10;
  SetLength(X, n);

  Randomize;
  // заполним массив случайными числами от -10 до +10
  for i:=0 to n-1 do
    X[i] := Random(21)-10;

  // для отладки выведем содержимое массива в memo1
  Memo1.Lines.Clear;
  for i:=0 to n-1 do Memo1.Lines.Append('X['+IntToStr(i)+'] = '+IntToStr(X[i]));

  Label2.Caption:='количество отрицательных = '+IntToStr( KQ(n-1, x) );
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.06.2011, 18:24   #4
Homutova_Julia
Пользователь
 
Регистрация: 28.05.2011
Сообщений: 18
По умолчанию

Спасибо большое
С уважением, Юлия
Homutova_Julia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия McJordan Паскаль, Turbo Pascal, PascalABC.NET 5 18.12.2010 19:46
Рекурсия LegionuS Паскаль, Turbo Pascal, PascalABC.NET 4 29.09.2010 15:31
Рекурсия rasals Помощь студентам 4 14.09.2010 18:32
Рекурсия ldinka135 Паскаль, Turbo Pascal, PascalABC.NET 5 31.08.2010 12:57