Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Организация программ вложенной циклической структуры




Пример. Найти следующую сумму

Var i, n: integer;

x, sum: real;

Begin

writeln('Input N: ');

read(n);

sum := 0;

for i := 1 to n do

begin

x := 1/(2*i-1);

if (i mod 2 = 0) then x := -1*x;

sum := sum + x;

end; {for}

writeln('The summ is ', sum:0:6);

readln;

readln

End.

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

Внешний цикл определяет количество проходов цикла, а внутренний цикл на каждом четном шаге внешнего цикла считает выражение, стоящее в задании под знаком сумма – x := 1/(2*i-1).


Лекция 8. Массивы (2 часа)

Описание одномерных массивов

Массив - это упорядоченная совокупность однотипных данных. Каждому элементу массива соответствует один или несколько индексов, определяющих положение элемента в массиве. Индексы образуют упорядоченные последовательности. Тип индекса определяет его допустимые значения. В качестве типа индекса может быть указан любой порядковый тип (boolean, char, integer, перечисляемый тип, а также диапазоны этих типов), кроме типа longint и его производных.

В зависимости от количества типов индексов различают: одномерные, тку мерные, трехмерные н n-мерные массивы. Двумерные массивы обычно называют матрицами, считая первый индекс - номером строки, а второй -номером столбца.

Тип элементов массива любой допустимый в Borland Pascal тип (в том числе и массив), кроме файла.

Объявление переменных типа массив выполняется двумя способами:

  • в операторе объявления переменных, например:

Var a: array [1..10] of integer;{массив из 10 целых чисел}

b: array [byte] of char; {массив из 256 символов, индекс элемента массива изменяется от 0 до 255}

с: аггау ['A'.. 'C', -5..-1] of byte;{матрица из 9 чисел}

d: array ['A'.. 'C'] of array [-5..-3] of byte; {матрица из 9 чисел, по структуре эквивалентная предыдущей}

  • с предварительным объявлением типа, например:

Туре mas=аггау[1..10] of integer; {объявляем тип}

Var a:mas; {объявляем переменную}

Максимальный размер массива

Ограничения на количество индексов в Borland Pascal нет, однако суммарная длина массива не должна превышать 65537 байт.

Присваивание массивов

Над массивом в целом определена единственная операция - операция присваивания.

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

Массивы считаются совпадающими по типу, если они объявлены через запятую в одной строке, например:

Var a, b: array [boolean] of real;

... a:=b;...

или, если вначале объявлен тип массива, а затем массивы этого типа:



Type mas: array [boolean] of real;

Const a:mas = (3.6,-5.1);

Var b:mas;

... b:=a;...

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

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

а) с использованием датчика случайных чисел;

б) заданным образом, в том числе, и скопированы из другого массива.

Для объявления инициализированных массивов в Borland Pascal используют типизированные констапты. При этом соответствующие значения указывают в скобках через запятую. Значения элементов многомерных массивов перечисляют в порядке возрастания индексов справа налево, заключая в скобки каждый подмассив. Для матриц такой порядок соответствует построчному указанию значений. Например:

Const a: array[1..5]of real = (0,-3.6,7.8,3.789,5.0);

b: array [Boolean, 1..5] of real = ((0,-3.6,7.8,3.789,5.0), (6.1,0,-4.56,8.9,3.0)); {массив будет инициализирован следующим образом:

bfalse,1=0,bfalse,3=7.8, … btrue,1=6/1, т.д.}

c: array [1..3,0..l,-2..1] of byte = (((3,6,9,6),(0,4,3,9)),

((5,7,3.1),(45,8,0,2)),

((5,9,2,3),(1,5,8,4)));…

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



Var a: array[char,boolean] of real; {объявляем матрицу}

... a['A',true]:=5.1;... {присваиваем значение элементу аА,true}

Значения индексов можно указать непосредственно литералом, например, а[3], или косвенно,указав идентификатор переменной, которая содержит значение индекса, например, a[i].

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

Var а:аrraу[1..6] of integer;

... for i:=l to 6 do a[i]:=i; ... {при i=1 а1 присваивается 1, при i=2 a2 присваивается 2, при i=3 a3 присваивается 3 и т.д.}

Количество переменных, необходимых для косвенной адресации массивов, совпадает с размерностью массива. Так, для работы с матрицами используют две переменные, хранящие индексы: одну для хранения номеров строк, а вторую - номеров столбцов.

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

type mas=array[boolean] of real; {массив из двух вещественных чисел}

Const

a: array [l..2] of mas = ((3.6,-5.1),

(7.0,-1.2)); {матрица из четырех вещественных чисел}

Var b:mas;

Begin b:=a[l];...{a массив b скопирована первая строка матрицы а}

Ввод-вывод массивов выполняют поэлементно, используя циклы с заданным числом повторений, например:

Var a: array [1..5J of real;

Begin

for i:= l to 5 do Read(a[i]); (осуществляем ввод массива}

Readln; {очищаем буфер ввода, чтобы далее значения вводились со следующей строки}

Значения элементов массива вводят в порядке обращения к ним из цикла. Эти значения могут сдаваться в одной строке через пробел или с нажитием клавиши Enter после ввода одного или нескольких чисел.

При выполнении операций ввода-вывода матриц и массивов большой размерности целесообразно вводить и выводить значения построчно. Например:

Var a: array[l..5, 1..7] of real; {матрица а из 5 строк по 7 элементов}

Begin

for i:=l to 5 do {цикл ввода строк массива: a1, a2, a3, a4, a5}

begin for j:=l to 7 do {цикл ввода элементов i-й строки:}

Read(a[i,j]); {аi,1, ai,2, ai,3, ai,4, ai,5, ai,6, ai,7}

ReadLn; {очищаем буфер ввода}

end; ...

Пример: Разработать программу определения максимального элемента массива А(5) и его номера.

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

Поиск максимального элемента выполним следующим образом. Запомним в качестве максимального, т. е. запишем в amax первый элемент и зафиксируем в imax его номер. Затем будем последовательно просматривать элементы массива, сравнивая их со значением, хранящимся в аmах. Если очередной элемент больше значения в аmах, то сохраняем его в качестве максимального в аmах и запоминаем его номер в imax. Дпя организации последовачелыюго просмотра используем цикл с заданным числом повторений, изменяя переменную цикла от 2 до 5, так как первый элемент мы уже учли. Просмотрев все элементы массива, найдем максимальный элемент и его номер. После этого необходимо вывести па экран исходный массив, максимальный элемент и его номер. Поскольку операции ввода-вывода массивов выполняют однотипно, на схеме алгоритма соответствующих циклов, так же как и запросов на ввод данных, обычно не показывают. Вместо этого в схему вставляют блок операции ввода/вывода, в котором указано имя массива и количество элементов, участвующих в операции.

Ниже приведем текст программы.

Var a: array [1..5] of real;

amax: real;

r, imax:byte;

Begin

{зanpoc на ввод массива}

WriteLn ('Введите 5 чисел:');

{ввод элементов массива}

for i:=1 to 5 do Readl(a[i]);

ReadLn;

{поиск максимального эмемента}

amax: =a[1]; imax:=1;

for i:=2 to 5 do

if a[i]>amax then

begin

amax: =a[i]; imax:=i;

end;

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

WrtteLn('Исходные данные:');

for i:= 1 to 5 do Write(a[i];5:2);

WrileLn;

{вывод результата}

WrtteLn('Максимальный элемент равен ', аmаx:5:2,', его напер равен ', imax);

End.

 

Пример. Разработать программу вычисления сумм элементов строк матрицы А(4.5). Полученные суммы записать в новый массив В.

Итак, нам задана матрица, имеющая 4 строки и 5 столбцов. Требуется сформировать одномерный массив В из четырех элементов, который будет содержать суммы элемента строк. Распечатать результат лучше так, чтобы суммы были выведены после соответствующей строки матрицы.

Программа должна начинаться с ввода матрицы. Основной цикл программы цикл по строкам. Переменная цикла i в нем будем изменяться oт 1 до 4. Для каждой i-й строки в этом цикле должно выполняться суммирование элементов. Суммирование будем осуществлять методом накопления, для чего перед суммированием обнулим соответствующий i-й элемент массива В, а затем в цикле выполним добавление элементов строки. После завершения цикла суммирования эту строку и ее сумму можно сразу выводить.

Var А: array [1..4,1..5] of real;

B: array [1..4] of real;

i,j:byfe;

Begin

WriteLn ('Введите матрицу построчно:');

for i:=l to 4 do {вводим матрицу}

begin

for j:=1 to 5 do Read(A[i,j])

ReadLn;

end;

Writeln('Результаты: ');

for i:=1 to 4 do {для каждой строки}

begin

B[i]:= 0; {обнуляем накапливаемую сумму}

for j:=l to 5 do B[i]:=B[i]+A[i,j]; {суммируем элементы строки}

for j:=1 to 5 do Write(A[i,j]:7:2); {выводим cтроку}

WriteLn('Сумма равна ',B[i];7:2); {выводим сумму}

end;

end.


Лекция 9. Матрицы (2 часа)


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.03 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал