![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Особенности программирования скалярных типов пользователя
В Паскале существует два способа описания типов данных: явный – с использованием раздела TYPE и неявный, когда тип данного описывается непосредственно в разделе VAR. Примеры тождественного описания данных: Явное задание пользовательских типов TYPE_DAY = (SU, МО, TU, WE, ТН, FR, SA); YEAR= 1900.. 2000; NUMERIC = '0'.. '9'; VAR Dl, D2: DAY; G: YEAR; INTG: NUMERIC; Неявное задание тех же типов VAR Dl, D2: (SU, МО, TU, WE, ТН, FR, SA); G: 1900.. 2000; INTG: '0'.. '9'; Паскаль не поддерживает операции ввода-вывода значений пользовательских перечисляемых типов.
3.2. Массивы. Регулярные типы В простых типах данных каждое данное имеет свое название (идентификатор). В этом разделе вводится структурная взаимосвязь между данными, хранимыми в оперативной памяти путем организации массива, состоящего из непрерывно расположенных данных, не снабженных отдельными именами. Эти данные в свою очередь могут быть простыми или сложными и называются элементами массива. Основное преимущество массива состоит в том, что его элементы не имеют отдельных имен, и нет необходимости описывать каждый элемент по отдельности. Достаточно описать весь массив. Объявление массива содержит следующее описание: TYPE <имя типа> = ARRAY [тип индекса] OF <тип элементов массива>; Каждый элемент именуется путем указания имени массива и порядкового номера, определяющего его позицию в массиве, то есть индекса. Если тип данных определен с помощью конструкции ARRAY... OF то он называется регулярным типом. Паскаль предоставляет пользователю широкие возможности по заданию типа индекса, которым может быть любой порядковый или интервальный типы данных, в том числе и определенные пользователем. Тип элемента массива иногда называется базовым. Он может быть как любым скалярным, так и структурированным типом данных. Правомерно существование массивов-массивов, записей, множеств. Однако не существует массивов файлов. Число компонентов массива неявно определяется через тип индекса при его объявлении и в дальнейшем не меняется. Одномерные массивы. Вектора Если в описании массива типом элемента является простой тип данных, то такой массив называется вектором. Поскольку в таком массиве для идентификации величины используется только один индекс, то он называется одномерным. Такие одномерные массивы представляют собой простейшие структурированные данные. Обращение к элементам одномерного массива осуществляется с помощью индексированных переменных, например X[i]. Здесь X – имя массива, a i — константа, переменная или выражение того же типа, что и тип индекса в объявлении массива.
Пример 28. Определить частоту появления латинских прописных букв в тексте, вводимом с клавиатуры. Ввод данных завершить символом '*'. Здесь, в качестве индекса удобно использовать ограниченный литерный тип 'А'.. 'Z', что обеспечивает с одной стороны - мнемонический смысл индекса, соответствующего счетчику частоты появления литеры в тексте, а с другой стороны – легкость перебора значений индекса. В Паскале нет средств ввода, вывода массива целиком, поэтому эти действия приходится выполнять как циклические процессы над отдельными элементами массива, используя (в частности, в нашем примере) оператор FOR. В этом примере при выводе результатов с помощью форматного вывода реализован перевод целочисленного выражения COUNTER [СН] * 100 / N в вещественную форму числа с фиксированной десятичной точкой. PROGRAM PR28; VAR COUNTER: ARRAY ['A'.. 'Z'] OF INTEGER; CH: CHAR; N: INTEGER; BEGIN { Инициализация массива счетчиков букв COUNTER, то есть — присвоение его элементам значения 0 } FOR СН:= 'А' ТО 'Z' DO COUNTER[CH]:= 0; {Обнуление счетчиков литер} N:= 0; { Обнуление счетчика числа символов в тексте} REPEAT { Повторять для каждой новой литеры} READ(СН); { Ввод очередного символа с клавиатуры } N:= N + 1; { Увеличение счетчика символов на единицу } IF (СН >= 'A') AND (СН <= 'Z') THEN COUNTER[CH]:= COUNTER[CH] + 1; {Наращивается элемент массива с индексом, соответствующим коду вводимого символа} UNTIL СН = '*'; { Если True, то прочитана * - признак конца текста} WRITELN('Всегo прочитано символов:', N); WRITELN('буквa:':10, 'частота:':10, 'процент:':10); FOR СН:= 'А' ТО 'Z' { Вывод элементов массива на экран } DO WRITELN(CH:8,COUNTER[CH]:10,COUNTER[CH]*100/N:10:2) END.
Инициализация одномерного массива Отличительной особенностью Паскаля от большинства процедурных языков является то, что все переменные должны быть инициализированы. То есть в разделе VAR переменным отводится место, а начальное значение этих величин специально не устанавливается. Поэтому после объявления массива необходимо его элементам задать необходимые значения. Широко используется три способа инициализации одномерного массива.
• Если значения элементов массива определены до начала работы программы, то есть известны на этапе формулировки задания на программирование, то можно использовать следующий способ: CONST A: ARRAY [1..10] OF REAL = (0.1, -15.3, 7, 0, -11.89, 4, -78,11.2, 1,0.01); При таком объявлении массива в разделе констант вы заносите в одномерный массив А по порядку А[1] = 0.1, А[2] = -15.3,... А[10] = 0.01 вещественные числа, перечисленные в круглых скобках. При этом массив является массивом переменных, то есть в процессе работы программы можно менять содержимое любого разряда одномерного массива. Этот способ, конечно, является нарушением по стандарту Паскаля, однако очень часто используется на практике. • Второй способ применяется в том случае, если исходные данные необходимо ввести с клавиатуры в процессе выполнения программы. Поскольку одномерный массив представляет собой конечный набор однотипных элементов, пронумерованных с помощью индекса (переменной перечисляемого типа), то удобно использовать арифметический цикл (оператор FOR) для ввода значений непосредственно с клавиатуры. При этом можно предложить два равноценных приема. Предположим, в вашей программе сделаны объявления: CONST M=1; N=15; VAR A: ARRAY[M.. N] OF REAL; где M – нижняя, a N верхняя границы индексов. Первый способ ввода будет иметь инструкцию: WRITELN('Введите массив А, из 15 вещественных чисел');
При таком способе оператор может ввести все 15 чисел через пробел в одну строку и только затем нажать на клавишу Enter. Если он считает нужным, то он может вводить группы чисел (например, по 3 числа, чтобы не ошибиться) через пробелы и нажимать Enter. А можно вводить на каждой строке только по одному числу. Второй способ ввода имеет вид: FOR I:= M TO N DO BEGIN WRITE('A[', I:1,'] = '); READLN(A[I]) END; Этот фрагмент программы позволяет вам вводить число непосредственно за подсказкой компьютера, курсор для ввода стоит через пробел за знаком равенства. • Третий способ заполнения используется для массивов малых размерностей и заключается в прямом присвоении в теле программы значений элементам массива. Например, допустимы следующие операторы: FOR I:= М ТО N DO А[I]:= 0; Пример 29. В результате измерения случайного параметра сформирован массив из N вещественных чисел. Вычислить эмпирическую среднюю Обозначим М = Как мы только что обсуждали, ввод массива — это инструкция, содержащая несколько операторов, в том числе оператор цикла FOR. Но здесь и во всех последующих примерах мы не будем уточнять способ ввода одномерного массива, оставляя выбор за программистом. PROGRAM PR29; CONST N=10; VAR X: ARRAY [1.. N] OF REAL; I: INTEGER; S, M: REAL; BEGIN WRITELN('Введите массив X, из', N:2,' вещественных чисел'); FOR I:= 1 TO N DO READ(X[I]); M:=0; S:= 0; FOR I:= 1 TO N DO M:= M + X[I]; M:=M/N; FOR I:= 1 TO N DO S:= S + (X[I] - M) * (X[I] - M); S:= SQRT(S / (N - 1)); WRITELN('M - ', M:10:6,', S = ', S:9:6); END.
Отображение на экране значений одномерного массива Если в результате работы вашей программы массив изменил свое состояние и необходимо значения каждого из его элементов отобразить на монитор, то можно воспользоваться любым из двух способов, описанных ниже. Предположим, в вашей программе сделаны объявления:
CONST M = 1; N=15; VAR A: ARRAY [M.. N] OF REAL; Тогда первый способ вывода элементов массива в строку будет иметь инструкцию: WRITELN('Элементы массива А имеют значения:'); FOR I:= М ТО N DO WRITE(A[I]: С: D,''); WRITELN; В этой инструкции первый оператор WRITELN сообщает оператору, какую информацию он увидит на экране. Второй оператор сформирует цепочку вещественных чисел, разделенных пробелами в формате: С: D. Третий оператор WRITELN переведет курсор на новую строку. Второй способ обеспечивает вывод значений элементов массива в столбец, причем каждый из элементов будет идентифицирован: FOR I:= М ТО N DO WRITELN('A[', I:2,'] - ', А[I]: С: D);
Работа с индексами одномерного массива Существует класс задач, в которых индекс массива используется для формализации вычислительного процесса путем сведения исходных формул к конечным суммам и произведениям. Преобразованные таким образом формулы программируются с помощью арифметических циклов. При обращении к элементам массива в качестве индексов можно использовать выражения перечисляемого типа. Пример 30. Дана последовательность вещественных чисел X1, Х2, X3,..., Х24. Требуется вычислить U = X1 • Х2 • Х3 • X4 + X4 • Х6 • Х7 • Х8 +... + Х21 • Х22 • X23 • Х24 Для программирования необходимо линейную формулу U преобразовать к следующему виду: Нетрудно заметить, что задача сведена к двойному арифметическому циклу. Для накопления суммы по I используется переменная U, исходное состояние которой равно 0. Для накопления произведения используется рабочая переменная Р, которая рассчитывается шесть раз для значений индекса I =1,2,…,6. Для накопления произведения начальное значение J принимается равным 1. PROGRAM PR30; VAR X: ARRAY [1.. 24] OF REAL; I, J: INTEGER; U, P: REAL; BEGIN WRITELN('Введите массив X, из 24 вещественных чисел'); FOR I:= 1 ТО 24 DO READ(X[I]); U:= 0; FOR I:= 1 TO 6 DO BEGIN P:= 1; FOR J:= 1 TO 4 DO P:=P*X[4*(I-1)+J]; U:= U + P END; WRITELN('U =', U:10:2) END.
|
|||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 133; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.60.166 (0.022 с.) |