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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 22:11   #1
zoha
Новичок
Джуниор
 
Регистрация: 05.04.2012
Сообщений: 2
По умолчанию Одномерный массив Pascal/Delphi

Переместить минимальные элементы в начало, сдвинув остальные элементы вправо
Одномерный массив
zoha вне форума Ответить с цитированием
Старый 06.04.2012, 07:50   #2
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Код:
const ncount=25; // размер массива
var a:array [1..ncount] of integer; // массив элементов

procedure CreateArray;
var i:integer;
begin
randomize;// инициализация
  for i:=1 to ncount-1 do  a[i]:=random(150);
end;
// функция поиска минимального элемента
Function GetMin:integer;
var i:integer; // переменная
    MinA:integer;
begin
  MinA:=a[1];
  for i:=1 to ncount-1 do
     if MinA>a[i] then MinA:=a[i];
  result:=MinA;
end;
// возвращает index минимального элемента
Function GetMinIndex:integer;
var i:integer; // переменная
    MinA:integer;
begin
  MinA:=a[1];
  result:=1;
  for i:=1 to ncount-1 do
     if MinA>a[i] then begin MinA:=a[i];result:=i; end;
end;

procedure move_right(index:integer);
var i:integer;
begin
 for i:=ncount-2 downto index do  a[i+1]:=a[i];

end;

procedure move_left(index:integer);
var i:integer;
begin
 for i:=index to ncount-1 do  a[i]:=a[i+1];

end;

Function ShowArray:string;
var s:string;
    i:integer;
begin
s:='';
 for i:=1 to ncount-1 do
 if s='' then s:=s+inttostr(a[i])
 else
  s:=s+','+inttostr(a[i]);
  result:=s;
end;

var mina // значения минимального элемента 
,x:integer; // временная переменая хранит индес мин. элемента 
begin

   CreateArray; // заполняем массив 
   writeln(ShowArray); // выводим исходный массив 
   x:=GetMinIndex; // получем индекс минимальго элемента 
   mina:=a[x]; // получаем знаяения мин. элемента 
   move_left(x); // сдвигаем массив в лево  / затираем минимальный элемент массива 
   move_right(1); // сдвигаем массив вправо с первого элемента 
   a[1]:=mina; // выставляем значения минимального элемента в начало 
   writeln(ShowArray); // выводим полученный массив 

end.
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 06.04.2012, 08:41   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

denisbrain, во-первых, функцию Function GetMin:integer;
вы написали, а потом решили, что она вам не нужна.. а убрать из кода Вы её забыли. это не ошибка (и даже не недочёт!), но некрасиво - зачем в коде лишнее!

но, во-вторых, главное, ваш код решает ДРУГУЮ задачу
в условиях исходной задачи было: "Переместить минимальные элементы в начало"
а ваш код переносит только ОДИН элемент в начало.

но в целом - работа вполне достойная, молодец!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.04.2012, 09:05   #4
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
denisbrain, во-первых, функцию Function GetMin:integer;
вы написали, а потом решили, что она вам не нужна.. а убрать из кода Вы её забыли. это не ошибка (и даже не недочёт!), но некрасиво - зачем в коде лишнее!

но, во-вторых, главное, ваш код решает ДРУГУЮ задачу
в условиях исходной задачи было: "Переместить минимальные элементы в начало"
а ваш код переносит только ОДИН элемент в начало.

но в целом - работа вполне достойная, молодец!

если элементов несколько то да

Код:

var mina,x:integer;
    i:integer;
begin

   CreateArray; // создаем массив
   writeln(ShowArray); // выводим исъодный массив
   mina:=GetMin; // получаем минимальный элемент
   Writeln(inttostr(mina)); // выводим минимальный элемент
   for i:=1 to ncount-1 do
     if mina=a[i] then begin // если текущий элемент минимальный
     move_left(i); // сдвигаем влево и затираем элемент
     move_right(1); // двигаем весь массив вправо
     a[1]:=mina; // устанавливаем первый элемент минимальным
   end;
   writeln(ShowArray); // выводим полученный массив


end;
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 06.04.2012, 15:21   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,341
По умолчанию

Код:
{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  ncount = 10;

var
  i, j, min, k: integer;
  a: array[1..ncount] of integer;

begin
  randomize;
  for i := 1 to ncount do
    a[i] := random(5) + 1;
  for i := 1 to ncount do
    write(a[i], ' ');

  min := a[i];
  k := 1;
  for i := 2 to ncount do
    if a[i] < min then
    begin
      min := a[i];
      k := 1;
    end
    else
      if a[i] = min then
        inc(k);
  i := ncount;
  j := ncount;
  while (j > 0) do
  begin
    a[i] := a[j];
    if a[i] = min then
      dec(j)
    else
    begin
      dec(i);
      dec(j);
    end;
  end;
  for i := 1 to k do
    a[i] := min;

  writeln;
  for i := 1 to ncount do
    write(a[i], ' ');
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 06.04.2012 в 15:32.
BDA вне форума Ответить с цитированием
Старый 06.04.2012, 16:02   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

BDA, красавчик! Браво! жаль ещё раз плюсануть сервер не даёт!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.04.2012, 00:17   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,341
По умолчанию

Обнаружена ошибка (опечатка)
Код:
for i := 1 to ncount do
    write(a[i], ' ');

  min := a[1];
  k := 1;
  for i := 2 to ncount do
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
одномерный массив(pascal) buslik Помощь студентам 2 08.12.2011 17:57
одномерный массив (Pascal) buslik Помощь студентам 1 07.12.2011 17:09
Одномерный массив (PASCAL) KirillP Помощь студентам 13 12.09.2010 09:10
Pascal, Одномерный массив Nastik Помощь студентам 1 23.06.2010 22:15
Одномерный массив (pascal) voodavari Помощь студентам 2 20.05.2010 07:16