Представление списка в виде массива
Способы создания массивов
Download 29.77 Kb.
|
Самостоятельная работа №2 Структура данных и алгоритм
Способы создания массивов.
… const n = 200; type months = (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); years = 1900..2100; people = array[years] of longint; var growth: array[months] of real; hum: people; notes: array[1..n] of string; Обращение к определенному элементу массива осуществляется путем указания имени переменной массива и в квадратных скобках индекса элемента. Простой массив является одномерным. Он представляет собой линейную структуру. var ch: array [1..11] of char; h: char; i: integer; begin for i := 1 to 11 do read (ch[i]); for i := 1 to 11 do write (ch[i]:3); readln end. В примере выделяется область памяти под массив из 11 символов. Их индексы от 1 до 11. В процессе выполнения программы пользователь вводит 11 любых символов (например, `q', 'w', 'e', '2', 't', '9', 'u', 'I', 'I', 'o', 'p'), которые записываются в ячейки массива. Текущее значение переменной i в цикле for используется в качестве индекса массива. Второй цикл for отвечает за вывод элементов массива на экранФункция sizeof, примененная к имени массива или имени массивного типа, возвращает количество байтов, отводимое под массив.В задачах по программированию очень часто встречается необходимость заполнить массив данными и вывести их потом на экран. Методов этого не так уж много и особым разнообразием они не отличаются. Поэтому хорошо бы их оформить в виде процедур и использовать по мере необходимости Алгоритм решения задачи: Создадим две процедуры заполнения одномерного массива целыми числами: одну с использованием функции random и одну, где пользователь самостоятельно задает значения. Также создадим процедуру вывода массива на экран. Затем вызовем в основной ветке программы эти процедуры, передав им в качестве аргументов переменные, связанные с массивами. Массивы - это совокупности однотипных элементов. Характеризуются они следующим: каждый компонент массива может быть явно обозначен и к нему имеется прямой доступ; число компонент массива определяется при его описании и в дальнейшем не меняется. Для обозначения компонент массива используется имя переменной-массива и так называемые индексы, которые обычно указывают желаемый элемент. Тип индекса может быть только порядковым (кроме longint). Чаще всего используется интервальный тип (диапазон). Описание типа массива задается следующим образом: type имя типа = array[ список индексов ] of тип Здесь имя типа - правильный идентификатор; список индексов - список одного или нескольких индексных типов, разделенных запятыми; тип - любой тип данных. Вводить и выводить массивы можно только поэлементно. Пример 1. Ввод и вывод одномерного массива. const n = 5; type mas = array[1..n] of integer; var a: mas; i: byte; begin writeln('введите элементы массива'); for i:=1 to n do readln(a[i]); writeln('вывод элементов массива:'); for i:=1 to n do write(a[i]:5); end. Определить переменную как массив можно и непосредственно при ее описании, без предварительного описания типа массива, например: var a,b,c: array[1..10] of integer; Если массивы a и b описаны как: var a = array[1..5] of integer; b = array[1..5] of integer; то переменные a и b считаются разных типов. Для обеспечения совместимости применяйте описание переменных через предварительное описание типа. Если типы массивов идентичны, то в программе один массив может быть присвоен другому. В этом случае значения всех переменных одного массива будет присвоены соответствующим элементам второго массива. Вместе с тем, над массивами не определены операции отношения. Сравнивать два массива можно только поэлементно. Так как тип, идущий за ключевым словом of в описании массива, - любой тип то он может быть и другим массивом. Например: type mas = array[1..5] of array[1..10] of integer; Такую запись можно заменить более компактной: type mas = array[1..5, 1..10] of integer; Таким образом возникает понятие многомерного массива. Глубина вложенности массивов произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничена, однако не может быть более 65520 байт. Работа с многомерными массивами почти всегда связана с организацией вложенных циклов. Так, чтобы заполнить двумерный массив (матрицу) случайными числами, используют конструкцию вида: for i:=1 to m do for j:=1 to n do a[i,j]:=random(10); Для "красивого" вывода матрицы на экран используйте такой цикл: for i:=1 to m do begin for j:=1 to n do write(a[i,j]:5); writeln; end; Строки При работе со строками, как правило, возникает необходимость выполнять их копирование, вставку, удаление или поиск. Для эффективной реализации этих действий в Паскале предусмотрены стандартные процедуры и функции. Они кратко описаны ниже. Функция Concat (s1, s2, ..., sn) возвращает строку, являющуюся слиянием строк s1, s2, ..., sn. Функция Copy (s, start, len) возвращает подстроку длиной len, начинающуюся с позиции start строки s. Процедура Delete (s, start, len) удаляет из строки s, начиная с позиции start, подстроку длиной len. Процедура Insert (subs, s, start) вставляет в строку s подстроку subs, начиная с позиции start. Функция Length (s) возвращает фактическую длину строки s, результат имеет тип byte. Функция Pos (subs, s) ищет вхождение подстроки subs в строку s и возвращает номер первого символа subs в s или нуль, если subs не содержится в s. Процедуры преобразования типовПроцедура Str (x, s) преобразует числовое значение x в строку s, при этом для x может быть задан формат, как в процедурах вывода write и writeln. Например: x := 123; s := str(x:6,s); Результат: s = ' 123'. Процедура Val (s, x, errcode) преобразует строку s в значение числовой переменной x, при этом строка s должна содержать символьное представление числа. В случае успешного преобразования переменная errcode равна нулю. Если же обнаружена ошибка, то errcode будет содержать номер позиции первого ошибочного символа, а значение x не определено.В языке программирования Паскаль переменная типа array of char может рассматриваться как строка постоянной длины. Переменные такого типа могут свободно использоваться в любых строковых выражениях. При этом компилятор автоматически преобразует такой массив в строку, длина которой равна количеству элементов массива. Массивы типа char можно сравнивать друг с другом и обращаться с ними почти так же, как с переменными типа string. Можно в операторе присваивания в левой части указывать имя такого массива, а в правой - строковую константу с длиной, равной количеству элементов в массиве. Кроме того, массивам типа array of char разрешено присваивать строковые константы, длина которых меньше количества элементов массива; в оставшиеся при этом незаполненные элементы заносится символ #0. Однако нельзя переменной типа array of char присвоить значение строковой переменной или строкового выражения (кроме выражений над строковыми константами с результирующей длиной,равнойразмерности массива). Массивы типа array of char могут использоваться в процедуре val и функциях concat, copy и length. var s: string; i, id, len, max, count: byte; begin readln(s); len := length(s); max := 0; id := 0; count := 0; for i:=1 to len do if s[i] <> ' ' then count := count + 1 else begin if count > max then begin max := count; id := i - count; end; count := 0 end; if count > max then begin // for last word max := count; id := i - count; end; for i:=id to id+max do if s[i] = 'a' then s[i] := 'b'; writeln(s); Во введенной строке удалить пробелы между первым и вторым вопросительным знаком. var str: string; q1, q2, l, i: byte; begin readln(str); l := length(str); q1 := 0; q2 := 0; for i:=1 to l do if str[i] = '?' then begin q1 := i; break; end; for i:=q1+1 to l do if str[i] = '?' then begin q2 := i; break; end; if (q1 <> 0) and (q2 <> 0) then begin q1 := q1 + 1; while q1 < q2 do if str[q1] = ' ' then begin delete(str,q1,1); q2 := q2-1; end else q1 := q1 + 1; writeln(str); Download 29.77 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling