Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Занятие 2. Доступ к элементам массиваСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Рассмотрите предложенные ниже фрагменты программ для решения некоторых типичных задач. Изменение значения некоторых элементов Задача. Заменить отрицательные элементы на противоположные по знаку. Для этого опишем процедуру. Ей будем передавать один параметр – массив, который будет результатом ее выполнения, так как некоторые элементы могут быть заменены. Procedure Zamena (Var m: MyArray; n:integer); Var i: integer; Begin for i:= 1 to n do if m[i] < 0 then m[i]:= -1*m[i]; End; Нахождение номеров элементов с заданным свойством Задача. Найти и вывести на экран номера четных элементов. Для решения задачи необходимо просмотреть весь массив, и если просматриваемый элемент является четным, то выводить его номер. Опишем процедуру, которой передается данный массив и выводятся нужные номера. Procedure PoiskChet(m: MyArray; n:integer); Var i: integer; Begin for i:= 1 to n do if m[i] mod 2 =0 then Write(i:5); End; Нахождение количества элементов с заданным свойством Задача. Найти количество положительных и отрицательных элементов в данном массиве. Опишем процедуру, которой будем отправлять три параметра – массив и два счетчика, один для элементов, больших нуля, а второй – для отрицательных элементов. Procedure OtrPol(m: MyArray;; n:integer; Var k1,k2: Integer); Var i: integer; Begin k1:=0; k2:=0; for i:= 1 to n do if m[i] > 0 then Inc(k1) else if m[i] < 0 then Inc(k2); End; Есть ли в данном массиве элементы с данным свойством? Для решения таких задач удобнее использовать циклы с условиями и составлять функции, результат которых имеет логический тип. Задача. Есть ли отрицательный элемент в массиве? Начинаем с первого элемента (i=1). пока не просмотрен последний элемент (i<=n) и не найден отрицательный (m[i]>=0), будем переходить к следующему (Inc(i)). Таким образом, мы закончим просмотр массива в одном из двух случаев: первый – просмотрели все элементы и не нашли отрицательный, тогда i>n, второй – нашли нужный, при этом i<=n. Опишем функцию, значение которой истина (True), если такой элемент есть, и ложь (False), если его нет. Function Control (m: MyArray; n:integer): Boolean; Var i: integer; Begin i:= 1; while (i<=n) and (m[i]>0) do Inc(i); Control:= (i<=n); End; Задание. Выберите с учителем задачи для самостоятельного решения. 1. Дан одномерный массив. Найдите разность наибольшего и наименьшего чисел в этом массиве. 2. Даны два одномерных массива А и В. Подсчитайте количество тех i, для которых: а) А[i] < B[i] б) A[i] = B[i]; в) A[i] > B[i] 3. Составьте программу определения количества элементов массива, больших среднего арифметического всех его элементов. 4. Дан одномерный массив. Подсчитайте, сколько раз встречается в этой таблице максимальное по величине число. 5. Дан одномерный целочисленный массив. Составьте программу определения значения наибольшего элемента этого массива. 6. Дан одномерный целочисленный массив. Составьте программу определения индекса(-ов) минимального элемента массива. 7. Составьте программу, проверяющую упорядочены ли элементы одномерного массива по возрастанию. 8. Дан одномерный массив чисел. Определите сумму его элементов. 9. Дан одномерный массив чисел. Измените знаки всех его элементов на противоположные. 10. Дан одномерный массив чисел. Подсчитайте, сколько раз в нем встречается число 1. 11. Дан одномерный массив чисел. Подсчитать в нем количество элементов равных нулю, отрицательных элементов и положительных элементов. 12. В массиве А (m,n) найдите количество всех чисел, по модулю меньших заданного Т.
Занятие 3. Удаление элементов из одномерного массива. Задача. Удалить из массива максимальный элемент, если все элементы разные. Для того, чтобы решить задачу нужно: · найти номер максимального элемента 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. Задание. С учетом выше изложенного составьте программу, решающую поставленную задачу или дополните предыдущую. Результат покажите учителю для оценки. Внимание! Любая Ваша программа должна сопровождаться комментариями. Задачи для самостоятельного решения 1. Удалить первый отрицательный элемент, если таковой имеется. 2. Удалить все отрицательные элементы. 3. Удалить все элементы, большие данного числа А (А вводить с клавиатуры). 4. Удалить все четные элементы, стоящие на нечетных местах. 5. Удалить все повторяющиеся элементы, оставив только их первые вхождения, то есть получить массив различных элементов. 6. Удалить последний четный элемент. 7. Удалить все элементы, кратные 3 или 5. 8. Удалить все элементы, начиная с k1-го по k2-ой. Сделать проверку корректности ввода значений k1 и k2, если ввод некорректный, то вывести сообщение об ошибке и закончить работу.
Занятие 4. Вставка элементов в одномерный массив. Вставка одного элемента Вставлять элемент можно до или после данного элемента, номер этого элемента можно вводить с клавиатуры или искать при определенных условиях. Пусть k – это номер элемента, после которого мы должны вставить элемент х. Тогда вставка осуществляется следующим образом: · первые k элементов массива остаются без изменения, · все элементы, начиная с (k+1)-го, необходимо сдвинуть на один назад, · на место (k+1)-го элемента записываем значение х; · увеличить количество элементов в массиве на единицу. Задача. Вставить число 100 после пятого элемента массива. Рассмотрим на конкретном примере. Пусть задан следующий одномерный массив из N (N=10) элементов: 3, -12, 5, 14, 27, -6, 1, -34, 10, -15. Надо вставить 100 после пятого элемента массива, т. е. должен получиться следующий массив: 3, -12, 5, 14, 27, 100, -6, 1, -34, 10, -15. Таким образом, в массиве стало 11 элементов, то есть массив надо определять на N+1 элемент: Type MyArray = array[1..n+1] of integer Кроме того, в программе необходимо выводить массив два раза, сначала первые N элементов массива, а затем все N+1 элементы. Рассмотрите процедуру вставки Insert1(m, n, Mesto, Element), которой передаются: m – массив, в котором делаем преобразования; n – количество элементов в массиве. Mesto – номер элемента, после которого надо вставить данный, Element – число, которое вставляем, Кроме того, сдвиг элементов будем начинать с последнего элемента. Program Vstavka1; Const n=10; dd=51; Type MyArray = array [1..n+1] of integer; Var A: MyArray; k, x: Integer; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure InsertMas1(Var m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure InsertMas2(Var m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure PrintMas(m: MyArray; n: integer); ... {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure Insert1(Var m: MyArray; Var n: integer; Mesto, Element: integer); Var i: integer; Begin for i:= n downto Mesto+1 do m[i+1]:= m[i]; m[Mesto+1]:= Element; Inc(n); End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Begin ... Writeln('Номер элемента, после которого вставлять > '); Readln(k); Writeln('Вставляемое число > '); Readln(x); Insert1(A, n, k, x); ... End. Задание. На основе разобранной задачи вставьте число перед некоторым заданным элементом самостоятельно. Дополните программу необходимыми операторами и комментариями и добейтесь работоспособности программы. Покажите результат работы учителю для оценки.
|
||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 421; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.7.53 (0.01 с.) |