Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125

Удаление нескольких минимальных элементов из массива

10.10.2014, 20:15. Показов 2845. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан одномерный массив. Нужно найти минимальные элементы и удалить их из него.
Я думаю, что нужно сначала определить минимальный элемент в массиве; потом проверить есть-ли ещё такие же элементы; удалить эти элементы: сначала посчитать их количество, потом сдвинуть все элементы, что больше минимальных в начало и вывести массив не выводя последние минимальные символы(тип for i:=1 to n-km, где km - количество минимальных). Я попытался это всё осуществить, сначала всё вышло на маленьком примере(в нём количество элементов равно 7), а при попытке это сделать с массивом состоящим из 15-ти элементов возникли неполадки(он некорректно перемещал и удалял).
Вот код, что я написал.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Program rmv;
uses       crt;
const      n=6;
var         a:array[1..n] of integer;
              i,mn,km:integer;
 
Begin
for i:=1 to n do
Begin
write('Enter A[',i,']');
readln(a[i]);
End;
writeln;
writeln('Initial array');
for i:=1 to n do write(a[i],'  ');
writeln;
mn:=1;
for i:=2 to n do
of a[i]<a[mn] then mn:=i;
writeln('Minimal value is ',a[mn]);
km:=0;
for i:=1 to n do
Begin
if a[i]=a[mn] then km:km+1;
End;
writeln('Amount of minimal values is ',km);
for i:=1 to n-km do
write(a[i],'  ');
readln;
End.
Прошу править мой код.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.10.2014, 20:15
Ответы с готовыми решениями:

Удаление всех минимальных элементов из массива
Прошу, помогите исправить функцию. :scratch: Есть задача: удалить из массива все элементы, равные минимальному элементу массива. (Описать...

Поиск и выборка минимальных элементов в нескольких документах Exсel
Доброго времени суток! Нужна помощь! Необходимо в двух прайс-листах представленных ниже. Найти одинаковые товары. Выбрать из них,...

Вычислить: количество минимальных элементов массива и сумму элементов массива, расположенных до первого минимума
В одномерном целочисленном массиве (размер массива не больше 20 и значения его элементов вводить с клавиатуры) вычислить:количество...

5
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
10.10.2014, 20:51
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Program rmv;
uses       crt;
var         a:array[1..100] of integer;
            n,i,j,mn:integer;
 
Begin
randomize;
n:=20;
writeln('Initial array');
mn:=maxint;
for i:=1 to n do
  begin
   a[i]:=random(10);
   write(a[i]:3);
   if a[i]<mn then mn:=a[i];
  end;
writeln;
writeln('Minimal value is ',mn);
i:=1;
while i<=n do
if a[i]=mn then
 begin
  for j:=i to n-1 do
  a[i]:=a[i+1];
  n:=n-1;
 end
else i:=i+1;
for i:=1 to n do
write(a[i]:3);
readln;
End.
0
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125
12.10.2014, 04:09  [ТС]
Я пытался весь вечер сделать это с вводимыми элементами массива и что бы программа не дублировала элементы, но не вышло.
Помогите, пожалуйста, сделать так что бы было начало моё(ввод элементов, вывод исходного массива, определение минимального, подсчёт количества минимальных и вод его на экран), а вот удаление элементов так как нужно.(то есть между 26-ой и 27-ой строками моего кода размещался код удаления элементов из массива(не только одного минимального, а всех минимальных), а потом стоял вывод очищенного массива. Я с самого начала предполагал сделать это таким путём: сначала определить минимальный элемент, потом их количество, переместить минимальные элементы в конец и вывести массив до n-km(количество минимальных). То есть, минимальные элементы будут стоять в конце, а массив отрисовывается без них.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
12.10.2014, 07:02
Лучший ответ Сообщение было отмечено Magestian как решение

Решение

Цитата Сообщение от Magestian Посмотреть сообщение
и что бы программа не дублировала элементы, но не вышло.
Если программа не будет дублировать элементы, то минимальный всегда будет только 1, что не соответствует условию задачи
Цитата Сообщение от Magestian Посмотреть сообщение
Нужно найти минимальные элементы и удалить их из него.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Program rmv;
uses       crt;
const      nmax=100;
var        a:array[1..nmax] of integer;
           n,i,j,mn,km,x:integer;
Begin
write('razmer massiva n=');
readln(n);
for i:=1 to n do
 Begin
  write('Enter A[',i,']');
  readln(a[i]);
 End;
writeln('Initial array');
for i:=1 to n do
write(a[i],'  '); //вводим элементы, при чем минимальных несколько
writeln;
mn:=a[1];//найдем минимальный
for i:=2 to n do
if a[i]<mn then mn:=a[i];
writeln('Minimal value is ',mn);
km:=0;
for i:=n downto 1 do//идем с конца
if a[i]=mn then  //ищем минимальные
 begin
  km:=km+1;//нашли, считаем
  x:=a[i];//запоминаем
  for j:=i to n-km do //сдигаем массив влево на km элементов
  a[j]:=a[j+1];
  a[n-km+1]:=x; //вставляем мин на место с конца
 end;
writeln('Amount of minimal values is ',km);
for i:=1 to n-km do //выводим без минимальных
write(a[i],'  ');
readln;
End.
Добавлено через 57 секунд
Но это лишние телодвижения, приведенный мной код все делает быстрее и проще.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
12.10.2014, 12:38
Лучший ответ Сообщение было отмечено Magestian как решение

Решение

Puporev,
большого смысла подтягивать на каждом шаге весь хвост нет, можно совместить эту процедуру с подсчётом количества неминимальных, используя это количество в качестве индекса, как-то так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const
  n=20; LIM=10; W=2;
var
  a: array [1..n] of Integer;
  i, j, m: Integer;
begin
  Randomize;
  for i:=1 to n do a[i]:=Random(LIM);                    {инициализируем массив}
  WriteLn('A='); for i:=1 to n do Write(a[i]:W); WriteLn;       {выводим массив}
  m:=a[1]; for i:=2 to n do if a[i]<m then m:=a[i];               {ищем минимум}
  j:=0;                                                  {счётчик неминимальных}
  for i:=1 to n do                                     {проходим по массиву ...}
    if a[i]<>m then begin                            {...пропускаем минимальные}
      Inc(j); if j<i then a[j]:=a[i];  {если нужно, на их место пишем следующие}
    end;
  WriteLn('A''='); for i:=1 to j do Write(a[i]:W); WriteLn;     {выводим массив}
end.
Добавлено через 5 минут
PS. Если в строке 11 операция сравнения "if j<i then" не дешевле операции присваивания "a[j]:=a[i]", то её можно и вовсе убрать, оставив:
Pascal
1
Inc(j); a[j]:=a[i];
2
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125
12.10.2014, 13:06  [ТС]
Вот так я и хотел! Теперь понятно всё: нужно было проверку на минимальные, запоминание и перестановку в конец совершать в одном цикле. Ещё туговато представлял как переместить на место с конца. Теперь знаю, намотаю на ус, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2014, 13:06
Помогаю со студенческими работами здесь

Вычислить величину Z, которая равняется сумме минимальных элементов массивов, разделенной на двойное произведение индексов минимальных элементов
Заданы два массива - Х(10) и Y(12). Вычислить величину Z, которая равняется сумме минимальных элементов массивов, разделенной на двойное...

С клавиатуры вводятся значения 10 элементов массива. Найти количество минимальных элементов в массиве
С клавиатуры вводятся значения 10 элементов массива. Найти количество минимальных элементов в массиве( допускается наличие 2-х и более...

Определение и вывод номеров минимальных элементов двумерного массива и ввод массива меньшей размерности
Доброго времени суток. Пожалуйста, помогите с решением задания. Заранее спасибо. Исходная задача: В действительном массиве...

Сформировать массив из минимальных элементов каждой строки массива 4 на 4 и найти адрес его элементов
Сформировать массив из минимальных элементов каждой строки массива 4 на 4 и найти адрес его элементов

Найти номера минимальных элементов массива и заменить скажем 3-й мин.элемент последним числом массива
Как решать подобные задачи? скажем дан массив, минимальное число к примеру 1, встречается несколько раз в массиве. С нахождением...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru