Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Вставка и удаление элементов
Вставка строки Мы уже рассматривали операции вставки для одномерных массивов. Обобщим их для двухмерных. Пример Вставить строку из нулей после строки с номером k. Решение Для решения этой задачи необходимо: 1. Первые k строк оставить без изменения. 2. Все строки после k−й сдвинуть на одну вниз, это лучше начать с последней строки и идти до (k+1)−й. 3. Присвоить значения элементам (k+1) строки. Кроме того, необходимо обратить внимание на размерность массива. Так как мы вставляем строку, то необходимо иметь одну строку "в запасе". Program Example_122; Const n=5; m:=7; Type dmyarray=Array[1..n+1,1..m] Of Integer; Var A: dmyarray; k:Integer; Теперь опишем процедуру вставки: Procedure Insert(k1: Integer; Var x: dmyarray); Var i, j: Integer; Begin For i:=n Downto k1+1 Do For j:=1 To m Do x[i+1, j]:=x[i, j]; {Элементу столбца с номером j присваиваем элемент этого же столбца, но из предыдущей строки} For j:=1 То m Do x[k1+1, j]:=0; End; Так как число строк меняется, то процедуру Print надо изменить. Она должна выводить указанное количество строк, начиная с первой: Procedure Print1 (n1: Integer; x: dmyarray); Var i, j: Integer; Begin For i:=1 To n1 Do Begin For j:=1 To m Do Write(x[i, j]: 4); Writeln; End; End; Часть основной программы будет такой: Begin Init(A); Print(n, A); Writeln ('Введите номер строки, после которой надо вставить новую строку'); Readln(k); Insert(k, A); Print1(n+1, A); Readln; End. Примечания 1. Если необходимо вставить новую строку после строки, удовлетворяющей некоторому условию, то надо лишь найти номер этой строки и задача сведется к решению уже рассмотренной. 2. Если надо вставлять новые строки после всех строк с заданным условием, то надо учесть это при описании массива. Заметим, что удобнее просматривать строки с последней и ввести счетчик вставленных строк. 3. Вставка новой строки перед строкой с номером k изменится только тем, что сдвигать назад надо не с (k+1)−й строки, а с k−й. 4. Если надо вставлять столбцы, то размерность массива увеличивается по столбцам, а все остальное практически не меняется: надо сдвинуть столбцы вправо и на данное место записать новый столбец. Удаление строки Пример Удалить строку с номером k. Решение Дли того чтобы удалить строку с номером k, необходимо: · Сдвинуть все строки, начиная с данной на одну вверх. · Последнюю строку "обнулить", то есть всем элементам последней строки присвоить значение 0. Описание массивов оставим прежним (размером nxm). Также в программе будем использовать процедуру вывода Print1 из предыдущего параграфа. Будем выводить на экран сначала все строки, а второй раз, после удаления, на одну меньше. Теперь опишем процедуру удаления строки с данным номером: Program Example_123; Procedure Delete (k1: Integer; Var x: dmyarray); Var i, j: Integer; Begin For i:=k1 To n-1 Do For j:=1 To m Do x [i, j]:=x[i+1, j]; For j:=1 To m Do x[n, j]:=0; End; Примечания 1. Задачу удаления строки, удовлетворяющей заданному условию, можно решить этим же способом, достаточно только найти ее номер. 2. Используя данную процедуру, можно решить еще одну задачу − удаление всех строк, которые обладают некоторым свойством. Перестановка элементов массива Перестановка двух элементов
Пример 1 Поменять местами два элемента массива А с заданными координатами (номерами строки и столбца). Решение Можно эту задачу решить несколькими способами. Первый способ аналогичен перестановке элементов в одномерном массиве, когда в процедуру передаются индексы элементов и массив, в котором надо их поменять. Тогда процедура может быть такой: Program Example_124; Procedure Swap1(k1, l1, k2, l2: Integer; Varx: dmyarray); Var c: Integer; Begin c:=x[k1, l1]; x[k1, l1]:=x[k2,l2]; x[k2,l2]:=c; End; Второй способ. Вспомним процедуру Swap, которая меняет местами значения двух целых переменных. Program Example_125; Procedure Swap(Varx, у: Integer); Var z: Integer; Begin z:=x; x:=y; y:=z; End; А теперь обратимся к ней, передавая данные элементы: Swap(A[k1, l1], A[k2, l2]). Рассмотрим задачу о перестановке двух столбцов (строк), так как многие задачи используют это действие. Пример 2 Поменять местами столбцы с номерами l1 и l2. Эту задачу также можно решить несколькими способами. Составим процедуру, в которую будем передавать номера столбцов, и массив, в котором надо их переставить. Кроме того, добавим проверку корректности ввода данных номеров, так как если столбца с данным номером нет, то и переставлять ничего не надо. В самой процедуре можно использовать, например, процедуру Swap Program Example_126; Procedure Swap2(l1, l2: Integer; Var x: dmyarray); Var i: Integer; Begin If (l1<1) Or (l1>m)) Or (l2<1) Or (12>m)) Then Writeln ('Ввод неправильный') Else For i:=1 To m Do Swap(x[i, l1], x[i, l2]); End; Если применять первую процедуру Swap1, то после проверки правильности ввода данных будет такое обращение: For i:=1 То m Do Swap1(i, l1, i, l2, x);
СТРОКОВЫЙ ТИП ДАННЫХ Строкой называется последовательность заданной длины, состоящая из символов. Строки (переменные типа String) могут быть объявлены, например, следующим образом: Var Str1: String[30]; Str2: String; При объявлении строковой переменной в квадратных скобках может указываться длина строки. Если длина строки не указана, то она принимается равной 255. Максимальная длина строки также равна 255. В данном случае в первой строке может содержаться максимум 30 символов, а во второй − 255. Надо заметить, что строка похожа на одномерный массив символов: она имеет определенную длину (не больше некоторого числа), к каждому символу можно обратиться по его номеру (как в массиве) – Str1[i] − это обращение к i−му элементу строки Str1. Переменные типа String выводятся на экран посредством стандартных процедур Write и Writeln и вводятся с помощью стандартных процедур Readln и Read. To есть вводятся и выводятся не поэлементно, как массивы, а целиком. Примечание. Если при вводе задать символов больше, чем максимально допустимо, то лишние символы будут проигнорированы. Операции со строками
В Паскале имеется два основных способа обработки переменных типа String. Первый способ предполагает обработку всей строки как единого целого, т.е. единого объекта. Кроме того (это второй способ), можно рассматривать строку как составной объект, состоящий из отдельных символов, то есть элементов типа Char, которые при обработке доступны каждый в отдельности. Склеивание Под склеиванием понимается последовательное объединение нескольких строк. Пример Var Str1, Str2, Str3: String[20]; Str1:='y Егорки'; Str2:='всегда отговорки'; Str3:=Str1+' '+Str2; Строка Str3 имеет значение 'У Егорки всегда отго'. В данном примере максимальная длина строки Str3 равна 20 символам, поэтому будут взяты только первые 20 символов суммы строк, а остальные рассматриваться не будут. Паскаль позволяет выполнять операции объединения (сцепления) нескольких строк в процессе их присвоения какой-либо переменной: Str3:= 'У Егорки '+' всегда '+' отговорки'. В результате такой операции в переменной Str3 будет то же самое содержимое, что и в предыдущем примере. Примечание. "Склеить" строки можно также при помощи функции Concat(Str1, Str2,..., StrN).
Сравнение Паскаль позволяет выполнять операции сравнения двух строк. Сравнение происходит посимвольно слева направо: сравниваются коды соответствующих символов до тех пор, пока не нарушится равенство или не кончится одна из строк (или обе сразу), при этом сразу делается вывод о знаке неравенства. Две строки называются равными, если они равны по длине и совпадают посимвольно. Пример
'Balkon'<'balkon'(Ord(' B' )<Ord('b')); 'balkon'>'balken'(Ord('o')>0rd('e')) ; 'balkon'>'balk' (длина первой строки больше); 'кошка '>'кошка' (длина первой строки больше); 'кот'='кот' (равны по длине и совпадают посимвольно). Можно использовать любые операции отношения (>, <, =, <>, >=, =<) и их комбинации в условных операторах. Их результат − это одно из двух значений: True или False. Для доступа к отдельному символу в строке необходимо указать имя строки и в квадратных скобках номер позиции элемента (символа) в строке. При этом по отношению к отдельному символу строки возможны все те же операции, что и к переменной типа Char.
|
||
Последнее изменение этой страницы: 2018-05-31; просмотров: 237. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |