Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Тема№10 Одномерные и двумерные массивы




Тема №9 Логические операторы и логические выражения. Тип 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, операции отношения, арифметические операции. Если порядок выполнения операций нужно изменить, то применяют скобки

 

Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива).

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

Вообще, массив – однородный, упорядоченный структурированный тип данных с прямым доступом к элементам.

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

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

Пример: числовая последовательность четных натуральных чисел 2, 4, 6,..., N представляет собой линейный массив, элементы которого можно обозначить А[1]=2, А[2]=4, А[3]=6,..., А[К]=2*(К+1), где К — номер элемента, а 2, 4, 6,..., N — значения. Индекс (порядковый номер элемента) записывается в квадратных скобках после имени массива.

Например, A[7] — седьмой элемент массива А; D[6] — шестой элемент массива D.

Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний. Массив описывается так:

имя массива: Array [тип индекса] Of базовый тип;

Чаще всего типом индекса является диапазон. Например,

Var B: Array [1..5] Of Real, R: Array [1..34] Of Char;

— описывается массив В, состоящий из 5 элементов и символьный массив R, состоящий из 34 элементов. Для массива В будет выделено 5*6=30 байт памяти, для массива R — 1*34=34 байта памяти.

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

Кроме того, массив можно объявить с использованием собственного типа:

Type mas = array[1..100] of integer;

mas_ = array[1..50] of real;

Var a, b: mas;

R: mas_;

Заполнить массив можно следующим образом:

1) с помощью оператора присваивания. Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой рекуррентным соотношением.

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

2) ввод значений элементов массива с клавиатуры используется обычно тогда, когда между элементами не наблюдается никакой зависимости. Например, последовательность чисел 1, 2, -5, 6, -111, 0 может быть введена в память следующим образом:

Над элементами массивами чаще всего выполняются такие действия, как

а) поиск значений;

б) сортировка элементов в порядке возрастания или убывания;

в) подсчет элементов в массиве, удовлетворяющих заданному условию.

Сумму элементов массива можно подсчитать по формуле S=S+A[I] первоначально задав S=0. Количество элементов массива можно подсчитать по формуле К=К+1, первоначально задав К=0. Произведение элементов массива можно подсчитать по формуле P = P * A[I], первоначально задав P = 1.

Если два массива являются массивами эквивалентных типов, то возможно присваивание одного массива другому. При этом все компоненты присваиваемого массива копируются в тот массив, которому присваивается значение. Типы массивов будут эквивалентными, если эти массивы описываются совместно или описываются идентификатором одного и того же типа. Например, в описании

Type Massiv = Array[1..10] Of Real;

Var A, B: Massiv; C, D: Array[1..10] Of Real; E: Array[1..10] Of Real;

типы переменных A, B эквивалентны, и поэтому данные переменные совместимы по присваиванию; тип переменных C, D также один и тот же, и поэтому данные переменные также совместны по присваиванию. Но тип переменных C, D не эквивалентен типам переменных A, B, E, поэтому, например, A и D не совместны по присваиванию. Эти особенности необходимо учитывать при работе с массивами.

 

При работе с массивами целесообразно использовать процедуры и функции. Вот типовые процедуры:

Type mas = array[1..100] of LongInt;

{Заполнение массива с помощью ввода с клавиатуры}

Procedure Vvod_Kl(var n: byte; var a: mas);

Var i: byte;

Begin

Write(‘Количество элементов?’); Readln(n);

For i:= 1 to n do

Begin

write(i, ‘-й элемент’); readln(a[i])

End

End;

{Заполнение массива случайными данными}

Procedure Vvod_Sl(var n: byte; var a: mas);

Var i: byte;

Begin

Write(‘Количество элементов?’); Readln(n);

For i:= 1 to n do

a[i]:= -1000+random(2001)

End;

{Вывод массива}

Procedure Print(n: byte; const a: mas);

Var i: byte;

Begin

For i:= 1 to n do

write(a[i]:8);

writeln

End;

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

Например, данные о планетах Солнечной системы представлены следующей таблицей:

Планета Расст. до Солнца Относ. обьем Относ. масса

Меркурий 57.9 0.06 0.05

Венера 108.2 0.92 0.81

Земля 149.6 1.00 1.00

Марс 227.9 0.15 0.11

Юпитер 978.3 1345.00 318.40

Сатурн 1429.3 767.00 95.20

Их можно занести в память компьютера, используя понятие двумерного массива. Положение элемента в массиве определяется двумя индексами. Они показывают номер строки и номер столбца. Индексы разделяются запятой. Например: A[7, 6], D[56, 47].

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

Program Vvod2;

Var I, J: Integer;

A: Array [1..20, 1..20] Of Integer;

Begin

FOR I:= 1 TO 3 DO

FOR J:= 1 TO 2 DO A[I, J]:= 456 + I

End.

элементы массива примут значения A[1, 1] = 457; A[1, 2] = 457; A[2, 1] = 458; A[2, 2] = 458; A[3, 1] = 459; A[3, 2] = 459.

При описании массива задается требуемый объем памяти под двумерный массив, указываются имя массива и в квадратных скобках диапазоны изменения индексов.

При выполнении инженерных и математических расчетов часто используются переменные более чем с двумя индексами. При решении задач на ЭВМ такие переменные представляются как компоненты соответственно трех-, четырехмерных массивов и т.д.

Однако описание массива в виде многомерной структуры делается лишь из соображений удобства программирования как результат стремления наиболее точно воспроизвести в программе объективно существующие связи между элементами данных решаемой задачи. Что же касается образа массива в памяти ЭВМ, то как одномерные, так и многомерные массивы хранятся в виде линейной последовательности своих компонент, и принципиальной разницы между одномерными и многомерными массивами в памяти ЭВМ нет. Однако порядок, в котором запоминаются элементы многомерных массивов, важно себе представлять. В большинстве алгоритмических языков реализуется общее правило, устанавливающее порядок хранения в памяти элементов массивов: элементы многомерных массивов хранятся в памяти в последовательности, соответствующей более частому изменению младших индексов.

Задача 6. Заполнить матрицу порядка n по следующему образцу:

1 2 3... n-2 n-1 n

2 1 2... n-3 n-2 n-1

3 2 1... n-4 n-3 n-2

.....................

n-1 n-2 n-3... 2 1 2

n n-1 n-2... 3 2 1

Program Massiv12;

Var I, J, K, N: Integer;

A: Array [1..10, 1..10] Of Integer;

Begin

Write('Введите порядок матрицы: '); ReadLn(N);

For I:= 1 To N Do

For J:= I To N Do

Begin

A[I, J]:= J - I + 1; A[J, I]:= A[I, J];

End;

For I:= 1 To N Do

Begin

WriteLn;

For J:= 1 To N Do Write(A[I, J]:4);

End

End.

Задача 7. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.

Program Obmen;

Var N, I, J, Max,Ind, Vsp: Integer;A: Array [1..15, 1..15] Of Integer;

Begin

WRITE('Введите количество элементов в массиве: '); READLN(N);

FOR I:= 1 TO N DO

FOR J:= 1 TO N DO

Begin

WRITE('A[', I, ',', J, '] '); READLN(A[I, J])

End;

FOR I:= 1 TO N DO

Begin

Max:= A[I, 1]; Ind:= 1;

FOR J:= 2 TO N DO

IF A[I, J] > Max THEN

Begin

Max:= A[I, J]; Ind:= J

End;

Vsp:= A[I, I]; A[I, I]:= A[I, Ind]; A[I, Ind]:= Vsp

End;

FOR I:= 1 TO N DO

Begin

WriteLn;

FOR J:= 1 TO N Do Write(A[I, J]: 3);

End; WriteLn

End.

Задача 8. Задана прямоугольная целочисленная таблица размером m?n. Указать столбец (назвать его номер), где минимальное количество элементов, кратных сумме индексов.

type mas2=array[1..20, 1..20] of integer;

 

{Формирование массива заданного размера с помощью датчика псевдослучайных чисел}

procedure create(var m, n: byte; var a: mas2);

var i, j: byte;

begin

write('Введите размеры таблицы: '); readln(m, n);

for i:=1 to m do

for j:= 1 to n do

a[i, j]:= -20+random(41);

end;

 

{вывод таблицы на экран}

procedure print(const m, n: byte; const a: mas2);

var i, j: byte;

begin

for i:=1 to m do

begin

writeln;

for j:=1 to n do

write(a[i, j]:5);

end;

writeln

end;

 

{Поиск нужного столбца; результат - в переменной k и, далее, - значение функции}

function solution(const m, n: byte; const a: mas2): byte;

var i, j, k, ke, mke: byte;

begin

k:=1; mke:=m;

for j:=1 to n do

begin

ke:=0;

for i:=1 to m do

if abs(a[i, j]) mod (i+j) = 0 then ke:=ke+1;

if ke<mke then begin mke:=ke; k:=j end

end;

solution:= k;

end;

 

var m, n: byte; a: mas2;

 

begin

randomize;

create(m, n, a);

print(m, n, a);

writeln('Ответ: ', solution(m, n, a))

end.

 

 




Поделиться с друзьями:


Дата добавления: 2015-04-24; Просмотров: 890; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.067 сек.