Типы данных, относящиеся к порядковым 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Типы данных, относящиеся к порядковым



Опишем теперь порядковые типы данных более подробно.

  1. Логический тип boolean имеет два значения: false и true, и для них выполняются следующие равенства:
2. ord(false)=0, ord(true)=1, false<true, 3. pred(true)=false, succ(false)=true,4. inc(true)=false, inc(false)=true, dec(true)=false, dec(false)=true.
  1. В символьный тип char входит 256 символов расширенной таблицы ASCII (например, 'a', 'b', 'я', '7', '#'). Номер символа, возвращаемый функцией ord(), совпадает с номером этого символа в таблице ASCII.
  2. Целочисленные типы данных сведем в таблицу:
Тип данных Количество Диапазон
байтов битов
shortintbyteintegerwordlongint 11224 88161632 -128..1270..255-32768..327670..65535-2147483648..2147483647 -27..27-10..28-1-215..215-10..216-1-231..231-1
  1. Перечисляемые 3) типы данных задаются в разделе type явным перечислением их элементов. Например:
8. type week =(sun,mon,tue,wed,thu,fri,sat) 0 1 2 3 4 5 6

Напомним, что для этого типа данных:

inc(sat) = sun, dec(sun) = sat.
  1. Интервальные типы данных задаются только границами своего диапазона. Например:
10.type month = 1..12; budni = mon..fri;
  1. Программист может создавать и собственные типы данных, являющиеся комбинацией нескольких стандартных типов. Например:
type valid_for_identifiers = 'a'..'z','A'..'Z','_','0..9';

Этот тип состоит из объединения нескольких интервалов, причем в данном случае изменен порядок латинских букв: если в стандартном типе char 'A' < 'a', то здесь, наоборот, 'a' < 'A'. Для величин этого типа выполняются следующие равенства:

inc('z')='A'; dec('0')='_', pred('9')='8'; ord('b')= 2.

ЦЕЛЫЕ ТИПЫ ДАННЫХ.АРИФМЕТИЧЕСКИЕ ФУНКЦИИ ЯЗЫКА ПАСКАЛЬ, РЕЗУЛЬТАТ КОТОРЫХ ЦЕЛОЕ ЧИСЛО.

Целочисленные типы данных представляют собой значения, которые могут использоваться в арифметических выражениях и занимать в памяти от одного до четырех байт.

В языке Турбо Паскаль определено пять целых типов:

Shortint (диапазон представления от -128 до 127, 1 байт);

Integer (диапазон представления от -32767 до 32768, 2 байта);

Longint (диапазон представления от -2147483648 до 2147483647, 4 байта);

Byte (диапазон представления от 0 до 255, 1 байт), – Word (диапазон представления от 0 до 65535, 2 байта).

Значения целых типов могут изображаться в программе двумя способами: в десятичном виде (традиционно, в виде последовательности цифр) и в шестнадцатеричном виде (в этом случае число предваряется знаком «$», а цифры старше 9 обозначаются латинскими буквами от А до F).

Пример:

Var

x1, x2:integer;

y1:byte;

y2:word;

Над данными целого типа определены следующие арифметические операции: сложение «+», вычитание «-», умножение «*», деление «/», целочисленное деление div, остаток от деления mod. Результат выполнения этих операций над целыми операндами также имеет целый тип.

Также с целыми числами можно производить операции, результаты которых не целые числа. Это обычное деление и операции отношения. Кроме того, имеется большое количество встроенных функций для работы с целыми числами: abs, sqr, sqrt, sin, cos, exp, ln и др.

Над данными целого типа определены следующие операции отношения: равно «=», не равно «<>», больше «>», меньше «<», больше или равно «>=», меньше или равно «<=», вырабатывающие результат логического типа (Boolean).

Для целых чисел определены следующие стандартные функции:

Odd(x) – возвращает результат логического типа: для четного аргумента – false, а для нечетного – true;

Succ(x) – возвращает следующее целое число (х+1);

Pred(x) – возвращает предыдущее целое число (х-1);

Ord(x) – возвращает аргумент x;

Abs(x) – возвращает модуль х;

Srq(x) – возвращает квадрат числа х;

Sqrt(x) – возвращает значение корня числа х;

Exp(x) – возвращает е в степени х (экспоненту), результат вещественного типа;

Sin(x) – возвращает синус х, результат вещественного типа;

Cos(x) – возвращает косинус х, результат вещественного типа;

Ln(x) – возвращает натуральный логарифм х, результат вещественного типа;

Dec(x, i) – уменьшает значение х на i, если i не задано, то на 1;

Inc(x, i) – увеличивает значение х на i, если i не задано, то на 1

 

ЛОГИЧЕСКИЙ ТИП ДАННЫХ.ЛОГИЧЕСКИЕ ФУНКЦИИ В ЯЗЫКЕ ПАСКАЛЬ.ТАБЛИЦА ИСТИННОСТИ.

В Турбо Паскале логический тип данных носит название BOOLEAN. Значением логического типа может быть одна из двух констант FALSE (ложь) или TRUE (истина). Для них справедливы правила:

Ord(false)=0
Ord(true)=1
False<true
Succ(false)=true
Pred(true)=false

Все реализации языка Pascal, в том числе и Turbo Pascal, вплоть до версии 6.0 содержали только один логический тип данных Boolean, элементы которого могут принимать лишь два логических значения: True (истина) и False (ложь). В Turbo Pascal версии 7.0 добавлены еще три логических типа данных ByteBool, WordBool и LongBool.

Название логического типа данных Значению False соответствует Значению True соответствует Размер памяти для логического типа данных
Boolean Число 0   1 байт
ByteBool Число 0 Любое число, отличное от 0 1 байт
WordBool Число 0 в обоих байтах 2 байта
LongBool Число 0 во всех байтах 4 байта

Отметим, что новые логические типы данных были введены для обеспечения совместимости разрабатываемых программ с Windows, в которой значению False соответствует 0, а значению True – любое, отличное от 0, число.

Логические переменные должны быть описаны предложением:

Var <имя_переменной>: boolean;

Величины логического типа данных можно присваивать, выводить, но нельзя вводить процедурой read.

Пример переменных с булевым значением

X:=true;
y:=5>3

Логические выражения

Логические выражения (условия) – это выражения, которые могут принимать лишь одно из двух значений: true (истина) или false (ложь). Для построения логических выражений используются операции отношения, которые обозначаются знаками: = (отношение на равенство), <> (отношение на неравенство), < (отношение меньше), > (отношение больше), <= (отношение меньше или равно), >= (отношение больше или равно).

Сложные условия составляются из простых с помощью логических операций: and (логическое «И»), or (логическое «ИЛИ») и not (логическое «НЕ»). При составлении сложных условий операнды логического выражения берутся в скобки (это важно!).

Пример логических выражений:

5>3;
2<=6;
(x<2)and(x>=0)
2*x+5<>0

При вычислении логических выражений операции выполняются в следующем порядке: not, and, or, операции отношения, арифметические операции. Если порядок выполнения операций нужно изменить, то применяют скобки.

 

СИМВОЛЬНЫЙ ТИП ДАННЫХ.СРАВНЕНИЕ ВЕЛИЧИН СИМВОЛЬНОГО ТИПА.

Ип данных CHAR

Каждая переменная символьного типа может принимать значение только одного символа. Все символы упорядочены в соответствии с принятым в ЭВМ коде (например ASCII). При этом порядковый но­мер символов называется кодом (например, код латинского символа 'А ' равен 65; символа '3' равен 51).
Для символьных данных не определены никакие арифметические операции, но они могут сравниваться по своим кодам, участвовать в чтении, печати, операторах присваивания. Существуют две стандартные функции преобразования:
1) ORD (C) принимает значение кода символа С;
2) значение функции CHR(I) является символ с кодом Например:ORD('А ')=65
CHR(ORD(C))=C; CHR (65) = A;
Строка - это последовательность символов. Строку можно представить как массив, элементы которого имеют тип CHАR. Например:
BUK: array[1..17] of char;
Массив BUK-массив символов, который содержит 17 символов. Если символов меньше, то строка дополняется пробелами справа. В про­тивном случае возникает ошибка несоответствия типов. Так как массивы символов являются обычными массивами с элементами типа CHAR, они обладают всеми свойствами массивов.

Пример: Из набора 10 любых символов напечатать только заглавные английские буквы и их коды.

program lr1;
type sl =array [1..10] of char;
var s: sl; {описание массива символов}
i: integer;
begin
writeln ('введите 10 символов'):
for i:=1 to 10 do readln (s[i]); {ввод массива}
for i:=1 to 10 do
if (s[i]>=’A’) and (s[i]<= ‘Z’) then
writeln (‘Символ:’, s[i], ‘ его код =’, ord (s[i]);
readln;
end.

Тип данных STRING

В Турбо Паскале предусмотрен тип данных STRING. Переменная типа STRING может принимать значения переменной длины. Максимально возможная длина переменной 255 символов. Например:
str: STRING[200];
ow: STRING[10];
В скобках указывается максимальная длина для данной переменной. Для ввода значений типа STRING необходимо использовать READLN, а не READ. За один раз может быть введена только одна строка. Две строки можно сравнивать, используя операции отношения (сначала сравниваются самые левые символы, если они равны, то сравниваются следующие). Для работы с переменными типа STRING используют следующие стандартные процедуры и функции:

1) Функция LENGTH
C:=LENGTH(str); Переменной С будет присвоено целое значение, показывающее количествo символов в строковой переменной str.

2) Функция СОNCAТ - сцепление строк в порядке их перечисления.
str:=CONCAT(st1,st2,...,stN);str-переменная типа STRING, состоящая из строк st1,...,stN.

3) Функция POS
P:=POS (st1, st2); Р-целое число, показывающее номер позиции, с которой начина­ется строка st1 в строкe st2.

4) Функция COPY
S1:=COPY(str, I, J); Sl-символьная подстрока, выделенная из строки str с позиции I, длиной J символов.

5) Процедура DELETE(Str, I, J);
Из строки str удаляется J символов, начиная с I позиции.

6) Процедура INSERT(Str1, Str2, I);
Строка Str1 вставляется с I позиции в строку Str2.

7) Процедура STR (V, S1);
Числовое значение переменной V преобразуется в строку символов и записывается в строку S1.

8) Процедура VAL (S1, V, C);

Строковое выражение S1 преобразуется в величину целочислен­ного или вещественного типа и записывается в переменной V. Если при этом ошибок не обнаруживается, то С будет равно 0. В противном случае значение С будет равно номеру позиции пер­вого ошибочного символа и V будет неопределено. Строка S1 не должна содержать незначащих пробелов, перемен­ная V может быть целой или вещественной, а переменная С - только целой.


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

program lr2;
var
s: string[30];
kol, i, n: integer;
begin
writeln ('введите строку'); readln (s);
kol:=0; {счетчик количества слов}
n:= length(s); {определяем длину введенного текста}
s:= concat(' ',s); {добавляем пробел к первому слову}
for i:=1 to n do
if (copy (s,i,1)=' ') and (copy (s,i+1,1)<>' ')
then kol:= kol+1;{подсчет количества слов}
writeln (s,' количество слов= ', kol);
readln;
end.

 

 

ПЕРЕЧИСЛЯЕМЫЕ ТИПЫ ДАННЫХ.СПОСОБЫ ОПИСАНИЯ.

Перечисляемый тип данных

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

Программист объединяет в одну группу в соответствии с каким-либо признаком всю совокупность значений, составляющих перечисляемый тип. Например, перечисляемый тип Rainbow (РАДУГА) объединяет скалярные значения RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET (КРАСНЫЙ, ОРАНЖЕВЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, СИНИЙ, ФИОЛЕТОВЫЙ). Перечисляемый тип Traffic_Light (СВЕТОФОР) объединяет скалярные значения RED, YELLOW, GREEN (КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ).

Перечисляемый тип описывается в разделе описания типов, например:

type

Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

Каждое значение является константой своего типа и может принадлежать только одному из перечисляемых типов, заданных в программе. Например, перечисляемый тип Traffic_Light не может быть определен в одной программе с типом Rainbow, так как оба типа содержат одинаковые константы.

Описание переменных, принадлежащих к скалярным типам, которые объявлены в разделе описания типов, производится с помощью имен типов. Например:

type Traffic_Light= (RED, YELLOW, GREEN);var Section: Traffic_Light;

Это означает, что переменная Section может принимать значения RED, YELLOW или GREEN.

Переменные перечисляемого типа могут быть описаны в разделе описания переменных, например:

var Section: (RED, YELLOW, GREEN);

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

К переменным перечисляемого типа может быть применим оператор присваивания:

Section:= YELLOW;

Упорядоченная последовательность значений, составляющих перечисляемый тип, автоматически нумеруется, начиная с нуля и далее через единицу. Отсюда следует, что к перечисляемым переменным и константам могут быть применены операции отношения и стандартные функции Pred, Succ, Ord.

 

ТИП-ДИАПАЗОН.СПОСОБЫ ОПИСАНИЯ.

 

Тип-диапазон (интервальный тип) есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона.

Тип-диапазон задается границами своих значений внутри базового типа:

<мин.знач.>.. <макс.знач.>

Где: <мин.знач.> - минимальное значение типа-диапазона; <макс.знач.> - максимальное его значение.

Примеры:

type Workdays = Mon.. Fri; Index = 0.. 63; Letter = 'A'.. 'Z'; Natural = 0.. MaxInt; Positive = 1.. MaxInt;

Тип-диапазон необязательно описывать в разделе type, а можно указывать непосредственно при объявлении переменной. При объявлении типа-диапазона нужно руководствоваться следующими правилами:

§ два символа.. рассматриваются как один символ, поэтому между ними недопустимы пробелы;

§ левая граница диапазона не должна превышать его правую границу.

Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью.

В стандартную библиотеку Паскаля включены две функции, поддерживающие работу с типами-диапазонами:

§ high(x) – возвращает максимальное значение типа-диапазона, к которому принадлежит переменная x;

§ low(x) – возвращает минимальное значение типа-диапазона, к которому принадлежит переменная x;

 

ВЕЩЕСТВЕННЫЕ ТИПЫ ДАННЫХ.АРИФМЕТИЧЕСКИЕ ФУНКЦИИ ЯЗЫКА ПАСКАЛЬ,РЕЗУЛЬТАТ КОТОРЫЙ ВЕЩЕСТВЕННОЕ ЧИСЛО.

Вещественные типы

В Турбо Паскале имеется пять видов вещественных типов, диапазон возможных значений которых зависит от их внутреннего представления. Типы целых, объем занимаемой памяти, количество значащих цифр и диапазон возможных значений приведен в табл. 3.
Таблица 3

Тип Длина, байт К-во зн. цифр Диапазон
REAL   11..12
SINGLE   7..8
DOUBLE   15..16
EXTENDED   19..20
COMP   19..20

Над данными вещественного типа определены следующие операции:
- арифметические: +, -, /, *
- соотношения: =, <>, <, >, <=, >=
Набор встроенных математических функций применимых к данными вещественного типа приведен в табл. 4.
Таблица 4

Обращение Назначение Пример
sin(x) Возвращает синус, угол в радианах  
cos(x) Возвращает синус, угол в радианах  
arctan(x) Возвращает арктангенс  
abs(x) Возвращает абсолютную величину  
sqr(x) Возвращает квадрат  
exp(x) Возвращает экспоненту  
ln(x) Возвращает логарифм натуральный  
trunc(x) Отбрасывает дробную часть trunc(5.6)=5
round(x) Округляет до ближайшего целого round(5.6)=6
frac(x) Выделяет дробную часть frac(10.1)=0.1
int(x) Выделяет целую часть int(10.1)=10.0
random Датчик случайных чисел (ДСЧ) 0 <n?1  
random(x) Датчик случайных чисел (ДСЧ) 0 <n?x  
randomize Инициализация ДСЧ  

 

ТИП ДАННЫХ СТРОКА.ОПИСАНИЕ.ПРОЦЕДУРЫ И ФУНКЦИИ ОБРАБОТКИ СТРОК В ЯЗЫКЕ ПАСКАЛЬ.

Строка (string) - это последовательность литер. Литерные строки уже использовались нами в качестве аргументов операторa write при изучении темы "Ввод-вывод". Теперь познакомимся с ними подробнее.

Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины.

Например,

MaxLine: string; City: string[30]

Строковая переменная может иметь атрибут длины, определяющий ее максимальную длину.

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

Выражения, в которых операндами служат строки, называются строковыми выражениями.

Над строками определены следующие операции:

1. Операция конкатенации (+) применяется для сцепления нескольких строк в одну.

Например,
SumStr:= 'Турбо '+'Паскаль '+'7.0'

2. Операции отношения (=, <>, >, <, >=, <=) проводят посимвольное сравнение двух строк слева направо до первого несовпадающего символа. Большей считается та строка, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строками всегда имеет булевский тип.

Например, выражение 'MS-DOS'<'MS-Dos' имеет значение True

Если строки имеют различную длину, но в их общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная.

Строки считаются равными, если они совпадают по длине и содержат одни и те же символы на соответствующих местах в строке.

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

Допускается смешение в одном выражении операндов строкового и символьного типа.

К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке.

Например, чтобы обратиться к третьему символу строки SumStr надо записать SumStr[3]. Запись SumStr[0] дает значение текущей длины строки.

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

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

Program StringLength; Var S: string; {макс. длина строки = 255} Begin S:=''; {пустая строка} writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=0} S:='Пример длинной строки'; {присваиваем строке некоторое значение} writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=21} Delete(S,7,8); {удаляем из строки 8 символов, начиная с 7} writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=13} S:=S+' символов'; {добавляем к строке строку} writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=22} End.

Внимание! При решении задач со строковыми переменными Вы можете столкнуться с распространенной трудно обнаруживаемой ошибкой, когда после присваивания некоторым элементам строки символов ни содержимое, ни длина строки не изменяются. Разберемся, с чем это связано.

Очень важно понимать, что при доступе к некоторому элементу строки значение ее текущей длины не проверяется. Это иллюстрирует следующая программа:

Program StringElements; Var S: string; {макс. длина строки = 255} Begin S:='ABCD'; {инициализация строки} writeln (S,' ',Length(S)); {вывод строки и ее длины} S[5]:= 'E'; {присваивание элементу строки} writeln (S,' ',Length(S)); {ни сама строка, ни ее длина не изменились} End.

Присваивание пятому элементу строки некоторого значения не изменяет длину строки, что подтверждает вывод на экран ее содержимого и длины (конечно само присваивание реально произошло, но на значение текущей длины строки в нулевом байте это никакого влияния не оказало). Работа с элементами строки без учета ее текущей длины и является ошибкой программиста. Посмотрите следующую программу:

Program StringElements2; Var Str: string[26]; {длина строки = 26} i: integer; Begin Str:='A'; for i:= 1 to 26 do Str[i]:= Chr (Ord('A')+i-1); writeln(Str); End.

Предполагается, что данная программа должна сформировать строку из 26 символов, содержимым которой является последовательность заглавных букв латинского алфавита. Однако вызов процедуры writeln показывает, что содержимым переменной Str будет строка из одного символа 'А'. Природа совершенной ошибки заключается в том, что присваивание значений элементам строки не влияет на текущую длину, которая была установлена равной 1 при первом присваивании. Поэтому правильной будет следующая программа:

Program stringElements3; Var Str: string[26]; {длина строки = 26} i: char; Begin Str:=''; for i:= 'A' to 'Z' do Str:= Str + i; writeln(Str); End.

Операция конкатенации, как и все стандартные операции, работающие со строками, в отличие от поэлементного присваивания, изменяет длину строки, что дает корректный результат. Кроме того, вторая программа работает непосредственно с символами букв. Наконец, не следует забывать инициализировать строку перед ее заполнением (первый оператор программы). В противном случае, так как начальная длина строки является неопределенной, можно получить произвольный результат; не стоит рассчитывать на то, что в нулевом байте стоит ноль.

Для обработки строковых данных можно использовать встроенные процедуры и функции:

  1. Delete (Str, Poz, N) - удаление N символов строки Str, начиная с позиции Poz.
  2. Insert (What, Where, Poz) - вставка строки What в строку Where, начиная с позиции Poz.
  3. Copy (Str, Poz, Nstr) - выделяет подстроку длиной Nstr, начиная с позиции Poz, из строки Str.
  4. Concat (Str1, Str2,..., StrN) - выполняет сцепление строк в том порядке, в каком указаны в списке параметров.
  5. Pos (What, Where) - обнаруживает первое появление подстроки What в строке Where.
  6. UpCase (Ch) - преобразует строчную букву в прописную.
  7. Str (Number, Stroka) - преобразует число в строку.
  8. Val (Stroka, Number, Code) - преобразует строку в число и выдает код правильности преобразования.

 

ТИП ДАННЫХ МАССИВ.ОПИСАНИЕ.ВВОД И ВЫВОД ЭЛЕМЕНТОВ МАССИВА В ЯЗЫКЕ ПАСКАЛЬ.

Массив – это упорядоченная последовательность величин, обозначаемых одним именем. Упорядоченность заключается в том, что элементы массива располагаются в последовательных ячейках памяти. Существуют одномерные, двумерные и многомерные массивы.

Рассмотрим одномерные массивы.

Для обозначения типа данных массив в Паскале есть служебное слово array.

В начале программы необходимо описать массив, т.е. задать имя массива, количество элементов в массиве и их тип. Например

var A: array[ 1.. 15 ] of integer

var X, Y: array [1..10] of real

var Q: array [0..9] of real

var A: array ['A'..'Z'] of real

Также можно использовать константу для описания размера массива.

const N=5;

var A: array[ 1.. N ] of integer

После объявления массива в памяти выделяется место для размещения массива.

При обработке массивов могут встречаться различные задачи, которые можно разделить на группы:

- поиск элементов,

- математическая обработка элементов

- преобразование элементов по какому- то правилу

- преобразование массива

- удаление или вставка элементов массива

и другие задачи

Во всех этих задачах есть обязательно блок ввода элементов массива.

Ввод, вывод и обработка элементов массива производится поэлементно, т.е. используется оператор цикла с параметром.

Можно вводить элементы массива с клавиатуры

for i:=1 to N do

Begin

write ('введите a[', i, ']=');

read (a[i]);

end;

Для заполнения массива может быть использована формула. Например, массив заполняется числами -1, 1, -1, 1 и т.д.

a[1]:=1;

for i:=2 to N do

begin

a[i]:=-1*a[i-1];

write(a[i]);

end;

Для заполнения массива можно использовать генератор случайных чисел. Например, массив заполнится случайными числами в интервале [50,150) в результате выполнения фрагмента

for i:=1 to N do begin

a[i]:= random(100) + 50;

write(a[i]);

end;

Блок вывода массива в большинстве случаев присутствует в программе.Так же как и блок ввода он использует цикл.

 

 

writeln('Массив A:');

 

 

for i:=1 to N do
write(a[i]:4);

 

ТИП ДАННЫХ МАССИВ.ОПИСАНИЕ.СОРТИРОВКА ЭЛЕМЕНТОВ МАССИВА МЕТОДОМ ОБМЕНА.

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

Итак, представим, что у нас есть целочисленный массив из 10 элементов и нам его необходимо отсортировать по возрастанию.

Вот код программы на Паскале:

{ сортировка массива "пузырьком" по возрастанию }

Const

n = 10; { количество элементов в массиве }

Var

a: array [1..n] of integer;

i,j,buf:integer;

Begin

{Заполняем массив случайными целыми числами из диапазона от 0 до 9 и выводим массив на экран}

for i:=1 to n do

Begin

a[i]:=random(10);

write(a[i],' ');

end;

for i:=1 to n-1 do

for j:=i+1 to n do {В этой строке начинающие программисты чаcто допускают ошибку}

if a[i]>a[j] then

Begin

buf:=a[i];

a[i]:=a[j];

a[j]:=buf;

end;

writeln;

writeln('Массив после сортировки пузырьковым методом: ');

for i:=1 to n do

write(a[i],' ');

End.

 

 

Пояснения. Как видно из текста программы на Паскале, при сортировке массива методом пузырька, сравниваются два соседних элемента массива. В том случае, если элемент массива с номером iоказывается больше элемента массива с номером i+1, происходит обмен значениями при помощи вспомогательной переменной buf (переменной я дал название со смысловой нагрузкой, от слова "буфер").

 

ТИП ДАННЫХ ЗАПИСЬ.ОПИСАНИЕ.ОСОБЕННОСТИ ПРИМЕНЕНИЯ.

Как мы уже выяснили, массивы объединяют однородные единицы информации – элементы одного и того же типа. Но многообразие информации нельзя свести только к какому-то одному типу данных. Например, указывая положение точки в пространстве, мы можем воспользоваться одним и тем же типом для указания ее координат, но, описывая человека, мы должны указать его имя, рост, цвет глаз и волос, то есть в одном описании объединим разнородную информацию. Точно так же, описывая автомобиль, мы укажем не только его марку, но и год выпуска, модификацию, да и цвет кузова может нас заинтересовать. Составляя автоматизированный каталог книгохранилища, мы для каждой книги должны указать ее название, имя автора, область знания, количество страниц, год издания, а также, возможно, признак нахождения на руках или в хранилище.

Данные такого рода, описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 380; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.233.43 (0.126 с.)