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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 20:41   #1
Маленыч
Пользователь
 
Аватар для Маленыч
 
Регистрация: 04.04.2012
Сообщений: 23
Лампочка В массив В записать K<L наибольших элементов массива X(L), L <= 300. Динамические переменные.

Здравствуйте! Задание следующее:
В массив В записать K<L наибольших элементов массива X(L), L <= 300.
Помимо процедур и функций и файлового ввода-вывода память под используемые в программе массивы должна выделяться динамически.
Необходимо предусмотреть заполнение элементов массива случайными числами.

Собственно трудность вызывает задание:
Цитата:
Память под используемые в программе массивы необходимо выделять динамически. Необходимо предусмотреть заполнение элементов массива случайными числами.
Саму программу я набросал ниже, но без динамики.
Помогите понять и влепить в мою программу динамические переменные.

Собственно сам сабж:
Код:
program massiv;
uses crt;
const
  leng=300;
type
  mass=array[1..leng] of real;
var
  b,x:mass;
  n,k:integer;
procedure info;
begin
  writeln('Программа записывает в массив K<',300,' наибольших элементов массива X(',300,').');
end;
procedure input(var n,k:integer; var x:mass);
var
  i:integer;
begin
  repeat
    writeln('Введите размер массива (n) X (n <=',leng,' и n > 1).');
    write('n = ');
    {$I-}readln(n);{$I+}
  until (IOresult = 0) and (n <= leng) and (n > 1);
  writeln('Заполните массив X числами.');
  for i:=1 to n do
    begin
      repeat
      write('X[',i,'] = ');
	{$I-}readln(x[i]);{$I+}
      until (IOresult = 0);
    end;
  if n = 2 then
    begin
      k:=2;
      writeln('Количество наибольших элементов массива X, которыми заполнится массив B равно ',k);
    end
    else
    begin
      repeat
        writeln('Введите количество наибольших элементов (k) массива X, которыми заполнится массив B.');	
        write('k = ');
	  {$I-}readln(k);{$I+}
      until (IOresult = 0) and (k < n) and (k > 0);
    end;
end;
procedure sort(var x:mass; n:integer);
var
  i,j:integer;
  m:real;
begin
  for j:=1 to n-1 do
    begin
      for i:=1 to n-1 do
	begin
	  if x[i] < x[i+1] then
	    begin
	      m:=x[i];
	      x[i]:=x[i+1];
	      x[i+1]:=m;
	    end;
	end;
    end;
end;
procedure output(k:integer; b:mass; const x:mass);
var
  i:integer;
begin
  for i:=1 to k do
    begin
      b[i]:=x[i];
      writeln('b[',i,'] = ',b[i]:4:2);
    end;
end;
begin
  info;
  input(n,k,x);
  sort(x,n);
  output(k,b,x);
end.
Если кому важно, это сами переменные и для чего они предназначаются:

b,x:real //Массивы чисел.
i,j:integer //Счетчики для циклов
n:integer //Количество записей в массиве.
k:integer //Количество K<L элементов массива.
m:real //Переменная для хранения значений.

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

Ларчик открывается просто:
Код:
const
  leng=300;
type
  mass=array[0..0] of real;
  pmass=^mass;
var
  b,x:pmass;
  n,k:integer;
procedure info;
begin
  writeln('Программа записывает в массив K<',300,' наибольших элементов массива X(',300,').');
end;
procedure input(var n,k:integer; var x:pmass);
var
  i:integer;
begin
  repeat
    writeln('Введите размер массива (n) X (n <=',leng,' и n > 1).');
    write('n = ');
    {$I-}readln(n);{$I+}
  until (IOresult = 0) and (n <= leng) and (n > 1);
  writeln('Заполните массив X числами.');
  GetMem(x,n*sizeof(real));
  for i:=1 to n do
    begin
      repeat
      write('X[',i,'] = ');
	{$I-}readln(x[i]);{$I+}
      until (IOresult = 0);
    end;
  if n = 2 then
    begin
      k:=2;
      writeln('Количество наибольших элементов массива X, которыми заполнится массив B равно ',k);
    end
    else
    begin
      repeat
        writeln('Введите количество наибольших элементов (k) массива X, которыми заполнится массив B.');
        write('k = ');
	  {$I-}readln(k);{$I+}
      until (IOresult = 0) and (k < n) and (k > 0);
    end;
end;
procedure sort(var x:pmass; n:integer);
var
  i,j:integer;
  m:real;
begin
  for j:=1 to n-1 do
    begin
      for i:=1 to n-1 do
	begin
	  if x^[i] < x^[i+1] then
	    begin
	      m:=x[i];
	      x[i]:=x[i+1];
	      x[i+1]:=m;
	    end;
	end;
    end;
end;
procedure output(k:integer; var b,x:pmass);
var
  i:integer;
begin
   GetMem(b,k*sizeof(real));
  for i:=1 to k do
    begin
      b[i]:=x[i];
      writeln('b[',i,'] = ',b[i]:4:2);
    end;
end;
begin
  info;
  input(n,k,x);
  sort(x,n);
  output(k,b,x);
  readln;
end.
Только для красы допиши очистку мусора.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.05.2012, 21:12   #3
Маленыч
Пользователь
 
Аватар для Маленыч
 
Регистрация: 04.04.2012
Сообщений: 23
По умолчанию

Угу спасибо проюзаем)
Маленыч вне форума Ответить с цитированием
Старый 24.05.2012, 00:59   #4
Маленыч
Пользователь
 
Аватар для Маленыч
 
Регистрация: 04.04.2012
Сообщений: 23
По умолчанию

Не не так все просто, во-первых надо везде понатыкать указатели, во вторых на участке кода
Код:
  b[i]:=x[i];
который будет выглядеть
Цитата:
b^[i]:=x^[i];
возникает ошибка. Вот например результат выполнения проги:



Вот такая вот бредятина, как исправить?
Маленыч вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана матрица.Записать в массив индексы наибольших элементов в строках.В Windows Forms C#. alexander1994 C# (си шарп) 0 17.05.2012 20:51
Паскаль. Найти сумму наибольших элементов в строках двумерного массива Женька Good Помощь студентам 4 17.12.2011 19:52
Записать в массив Z подряд семь нулевых элементов массива R,состоящего из N элементов.(Язык QBasic) Лиза) Помощь студентам 0 11.01.2011 16:02
Найти пять наибольших элементов одномерного массива целых чисел. Serega-ru Помощь студентам 2 20.10.2010 10:10