русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Занятие 3. Удаление элементов из одномерного массива.


Дата добавления: 2014-11-28; просмотров: 1215; Нарушение авторских прав


Задача. Удалить из массива максимальный элемент, если все элементы разные.

Для того, чтобы решить задачу нужно:

· найти номер максимального элемента k;

· сдвинуть все элементы, начиная с k-го, на один элемент влево;

· последнему элементу присвоить значение 0;

· уменьшить количество элементов массива на единицу.

Рассмотрим задачу на конкретном примере. Пусть дан одномерный массив из целых чисел, состоящий из 10 элементов:

6, 3, 4, 7, 11, 2, 13, 8, 1, 5.

Номер максимального элемента равен 7 (k=7), то есть, начиная с 7-го элемента, будем сдвигать элементы на один влево: 7-му присвоим значение 8-го, 8-му присвоим значение 9-го, 9-му присвоим значение 10-го, на этом сдвиг заканчивается. Таким образом, сдвиг начинается с k-го элемента и идет по (n-1)-й (где n – количество элементов в массиве). После этого последнему элементу присвоим значение, равное 0, и тогда массив будет следующим:

6, 3, 4, 7, 11, 2, 8, 1, 5, 0.

Примечание. При удалении элемента размерность массива не изменяется.

Составим программу, удаляющую максимальный элемент из одномерного массива. В программе опустим уже знакомые Вам процедуры заполнения массива и вывода элементов массива на экран. Чтобы последний элемент не выводился, модифицируйте соответствующую процедуру таким образом, чтобы ей передавать не только массив, но и количество элементов, которые надо вывести, начиная с первого.

Program DeleteK;

Const

n=30; dd=51;

Type

MyArray = Array [1..n] of Integer;

Var

A : MyArray;

k : Integer;

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}



Procedure InsertMas1(Var m : MyArray; n : integer);

. . .

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}



Procedure InsertMas2(Var m : MyArray; n : integer);

. . .

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}



Procedure PrintMas(m : MyArray; n : integer);

. . .

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}



Function Maximum (m : MyArray; n:integer) : Integer;

Var

i, max, maxi : integer;

Begin

max:=-maxint; {начальным значением переменной будет наименьшее значение данного типа}

for i := 1 to n do {просматриваем все элементы массива}

if m[i] > max {если найден элемент больше, чем мы считаем максимальным}

then

begin

max:=A[i]; {то запомним найденное значение}

maxi:=i; {а также место, на котором он стоит в массиве}

end;

Maximum := maxi; {имени функции присвоим найденный результат}

End;

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}



Procedure Delete(Var m : MyArray; Var n:integer; k1 : integer);

Var

i : integer;

Begin

for i := 1 to n-1 do

m[i] := m[i+1];

m[n]:=0;

Dec(n);

End;

{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}



Begin

. . .

k:=Maximum(A,m);

Delete(A,m,k);

. . .

End.

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

Изменим условие задачи. Пусть максимальный элемент встречается несколько раз.

Для решения этой задачи необходимо удалять несколько элементов. Это лучше сделать с конца массива, так как, иначе, нужно будет снова возвращаться к элементу с номером, который только что удаляли для предупреждения частного случая, когда подряд идут два максимальных элемента (при удалении первого на его месте будет стоять второй снова максимальный элемент. Это можно сделать при помощи цикла с параметром (downto). Кроме того, номер максимального элемента запоминать не нужно. При прохождении массива с конца, если элемент имеет максимальное значение, то удалим его, при этом значение счетчика k будем увеличивать на 1.

Задание. С учетом выше изложенного составьте программу, решающую поставленную задачу или дополните предыдущую. Результат покажите учителю для оценки.

Внимание! Любая Ваша программа должна сопровождаться комментариями.



<== предыдущая лекция | следующая лекция ==>
Есть ли в данном массиве элементы с данным свойством? | Вставка одного элемента


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.197 сек.