![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Организация программ вложенной циклической структуры
Пример. Найти следующую сумму 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 часа)
|