Скачать 119.69 Kb.
|
М А С С И В ЫПОСТАНОВКА ЗАДАЧИ - существует большое число задач, требующих много однотипных переменных. Например, присвоить переменным значения среднесуточных температур в течение года. Работать с таким количеством переменных очень трудно: процесс описания, присваивания, способы обработки переменных и т.д. РЕШЕНИЕ ЗАДАЧИ - введем новое понятие - массив. МАССИВ - это упорядоченный по номерам набор значений, объединенных общим типом и именем. Упорядоченность в том, что элементы массива располагаются в последовательных, пронумерованных ячейках памяти. Массив имеет фиксированные: имя, тип и количество значений. Массиву выделяется место в памяти. Элементы массива - это переменные с индексами. Индексы можно вычислять. ОПРЕДЕЛЕНИЕ МАССИВА - массивы, как и простые переменные, подлежат описанию в разделе переменных: VAR <имя>: ARRAY[ array (эррэй) - массив. of (оф) - из. Тип индексов - любой скалярный тип кроме real. Индексы можно вычислять. Тип элементов - любой для данной версии языка. [min..max] - размер массива. min - нижняя, max –верхняя границы индексов. min<=max. Границы можно задать с помощью переменных. Можно задавать постоянный массив: const x: array [1..10] of integer=(4,6,3,5,2,1,7,8,9,13); const x: array [1..8] of char=('a','b','c','d','e','f','g','h'); Элементы таких массивов являются константами. Если массивы одинаковы и отличаются лишь именами, то их можно описать в одной строке: var a,b,c :array[1..n] of real; , где n -верхняя граница индекса и n описывается в разделе констант. ^ Одномерные - ряд элементов. B[5] - 5-ый элемент массива. Двумерные - таблицы. B[3,5] - элемент таблицы B ,стоящий в 3 строке и в 5 столбце. Многомерные - ряд таблиц (изучаются в Вузе). ^ 1. С помощью CONST. 2. С помощью READ и циклической конструкции. 3. Часто требуется обнуление ячеек массива. For I:=1 to n do A[I]:=0; 4. Для отладки программ и для программирования игр, тестов применяют заполнение массива случайными числами. randomize; For I:=1 to n do A[I]:=random(q-p+1)+p; qp 5. Присваивание значений. A[1]:=7; A[2]:=77; A[3}:=33; и т. д. ^ Заполнить и вывести на экран одномерный массив целых чисел. Program Primer1; uses crt; var a: array[1..5] of integer; i: integer; Begin clrscr; {******* заполнение массива c клавиатуры *******} for i:=1 to 5 do begin write('a[',i,']='); readln(a[i]); end; clrscr; {***** вывод массива на экран *****} Write(‘Массив А: ’); for i:=1 to 5 do write(a[i],’ ‘); readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Увеличить число элементов массива. 3. Описать размерность массива с помощью переменных. Заполнить и вывести на экран одномерный массив символов. Program Primer2; uses crt; const a: array[1..5] of char=('a','b','c','d','e'); procedure Print(n: integer); var i: integer; begin for i:=1 to n do write (a[i]:2) end; Begin clrscr; write('Массив А: '); Print(5); readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Вывести на экран первые 3 буквы. 3. Вместе с тремя буквами вывести на экран последнюю букву. 3. Заполнить массив дробными и отрицательными значениями. 4. Заполнить и вывести на экран одномерный массив, содержащий 200 одинаковых элементов. 5. Вывести элементы построчно ( используйте wherex, см. практическое занятие 17 ). 6. Вывести элементы в указанной с клавиатуры строке экрана. ОБРАБОТКА ОДНОМЕРНЫХ ЧИСЛОВЫХ МАССИВОВ. ^ ПОСТАНОВКА ЗАДАЧИ: Найти сумму элементов одномерного массива. Найти среднее арифметическое. Program Summa; uses crt; const n=5; var a: array[1..n] of integer; m,i,s: integer; Автоматическое заполнение случайными числами от1 до20 procedure Input; Procedure Input; begin begin for i:=1 to n do p:=1; q:=20; randomize; begin for i:=1 to n do a[i]:=random(q-p+1)+p; write('a[',i,']='); readln(a[i]); end; end end; procedure Print; begin write('Массив целых чисел А: '); for i:=1 to n do write(' ',a[i]) writeln; writeln; { пропуск строки } end; procedure Sum( m: integer); begin s:=0; for i:=1 to m do s:=s+a[i]; end; Begin ClrScr; Input; { заполнение массива из 5 элементов } ClrScr; Print; { печать заполненного массива } write('Сколько элементов суммировать: '); readln(m); Sum(m); writeln; { суммирование m элементов массива } writeln('Сумма ',m,' элементов массива равна: ', s); { суммирование всех элементов массива } ^ writeln('Сумма всех ',n,' элементов массива равна: ', s); Write ('Среднее арифметическое всех элементов равно ', s/n); Readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Увеличить число элементов массива. 3. Найти сумму 8 элементов массива. 4. Осуществить ввод количества элементов массива с клавиатуры. ОБРАБОТКА ОДНОМЕРНЫХ ЧИСЛОВЫХ МАССИВОВ ^ ПОСТАНОВКА ЗАДАЧИ: Заполнить и вывести массив на экран. Ввести условие суммирования ( а[i] Найти сумму и вывести на экран результат. ^ const a: array[1..10] of integer=(3,5,2,1,6,3,8,7,5,9); var i, s, u: integer; procedure Su; begin s:=0; for i:=1 to 10 do if a[i] write('Сумма элементов меньших ',u,' равна ',s); end; Begin ClrScr; Print; { смотри занятие 32 } writeln; writeln; write('Введите условие суммирования : '); readln(u); Su; Readkey; End. З А Д А Н И Я: 1. Изменить условие суммирования. 2. Написать процедуру Input. 3. Найти произведение элементов по условию. ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ ^ ПОСТАНОВКА ЗАДАЧИ: Заполнить массив и вывести его на экран. Ввести с клавиатуры условие. Подсчитать количество элементов удовлетворяющих условию. ^ const m=1; { min индекс } n=10; { max индекс } var i, k, usl: integer; a: array[m..n] of integer; ... { процедуры Input и Print см. занятие 32 } procedure Kol_po_Usl; begin write('Введите ограничение :'); readln(usl); k:=0; for i:=m to n do if a[i]>usl then k:=k+1 write('Кoличество элементов больших ',usl, ' равно ', k); end; Begin ClrScr; Input; ClrScr; Print; writeln; writeln; Kol_po_Usl; Readkey; End. З А Д А Н И Я: 1. Самостоятельно написать процедуры Input, Print и исполнить программу. 2. Изменить условие подсчета элементов. 3. Подсчитать сумму элементов по условию. ^ В языке Pascal программист может описывать свои собственные типы и объекты, относящиеся к этому типу. Тип массив относится к структурированным типам. Описание типа помещают в раздел определения типов после раздела описания констант и до раздела описания переменных (var). Например: TYPE massiv=array[1..100] of integer; var a, b, c: massiv; Описание типа позволяет применить формальный параметр типа massiv. ^ Заполнить и вывести на экран два одинаковых по размеру массива: А и B. Найти массив C ,каждый элемент которого равен сумме соответствующих элементов массивов А и В: C[i]=A[i]+B[i]. ^ Type mas= array[1..100] of integer; var a, b, c: mas; I, n: integer; procedure Input(var x: mas); begin for i:=1 to n do begin write('Элемент [',i,']='); readln(x[i]); end end; procedure Print(x: mas); begin for i:=1 to n do write(' ',x[i]); end; procedure SumMass; begin for i:=1 to n do c[i]:=a[i]+b[i]; end; Begin ClrScr; n:=20; writeln('Ввoд массива А:); Input(a); writeln('Ввод массива В:); Input(b); ClrScr; write(' A: '); Print(a); write(' B: '); Print(b); SumMass; write(' C: '); Print(c); readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Найти сумму элементов, стоящих на четных местах в массиве С. 3. Найти сумму четных элементов в массиве С. ^ #5. ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ ОБЪЕДИНЕНИЕ ДВУХ МАССИВОВ С ЧЕРЕДОВАНИЕМ ЭЛЕМЕНТОВПОСТАНОВКА ЗАДАЧИ: Объединить два массива A и B ,содержащих по N элементов в один массив c, который будет содержать 2*N элементов, т.е. получить массив C=(а1,b1,a2,b2,..,an,bn). ^ type massiv=array[1..20] of integer; var a,b,c: massiv; I, n: integer; procedure Input(var x: massiv; n: integer); begin for i:=1 to n do begin write('Элемент [',i,']='); readln(x[i]); end end; procedure Print(x: massiv; n: integer); ... procedure Ob(n: integer); begin for i:=1 to n do begin c[2*i-1]:=a[i]; c[2*i]:=b[i] end end; Begin ClrScr; n:=10; Input(a,n); writeln; Input(b,n); ClrScr; write('Массив А: '); Print(a, n); writeln; write('Массив B: '); Print(b, n); writeln; Ob(n); write('Массив C: '); Print(c, 2*n); readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Изменить количество элементов в массивов. 3. Объединить массивы так, чтобы элементы одного массива следовали за элементами другого: c=(а1,а2,а3,..,аn,b1,b2,b3,..,bn). ^ ПОСТАНОВКА ЗАДАЧИ: Требуется изменить порядок следования элементов массива C, состоящего из n элементов, на обратный, используя вспомогательную переменную p. Исходный массив C: 1 2 3 4 5 Конечный массив C: 5 4 3 2 1 Перестановка производится по одному элементу через промежуточную переменную: 1) 1-ый элемент передается в ячейку p; 2) последний элемент ставится на место 1-го; 3) элемент из ячейки p ставится на последнее место. Количество таких перестановок равно trunc(n/2) или (n div 2) – деление нацело. ^ { описание переменных и массива } { описание процедуры ввода массива } { описание процедуры вывода массива } procedure Inw; var m: integer; p: real; begin m:=trunc(n/2); { определение числа циклов } for i:=1 to m do begin p:=c[i]; { перестановка i элемента в p } c[i]:=c[n-i+1]; { перестановка на i место элемента n-i+1 } c[n-i+1]:=p; { перестановка элемента из p нa n-i+1 место } end end; Begin ClrScr; n:=20; Input; ClrScr; Print; writeln; Inw; Print; writeln; Inw; Print; writeln; Readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Увеличить число элементов. 3. Заменить числовой массив на символьный. Получить из слова ГОРОД слово ДОРОГ и другие перевертыши. 4. Произвести инвертирование с сохранением исходного массива. Подсказка: используйте новый массив. ФОРМИРОВАНИЕ МАССИВА ИЗ ЭЛЕМЕНТОВ ДРУГОГО ^ ПОСТАНОВКА ЗАДАЧИ: Требуется из данного массива А, состоящего из N элементов, выбрать элементы, удовлетворяющие заданному ( пусть А(i)>T ), и сформировать из них массив B. Исходный массив А: 4 6 8 2 23 1 9 Условие: A(i)>=8 Новый массив B: 8 23 9 Особенность решения: Индексы элементов массивов A и B не совпадают, так как не все элементы массива A включаются в массив B. Введем переменную, формирующую индексы и являющуюся счетчиком элементов нового массива. ^ . . . procedure Mass_Usl; begin write('Введите параметр условия: '); readln(t); k:=0; {k- счетчик найденых элементов } for i:=1 to n do if a[i]>=t then begin k:=k+1; b[k]:=a[i]; end; end; Begin ClrScr; n:=20; Input; { заполнение исходного массива A } ClrScr; Print(а, n); writeln; { печать исходного массива A } Mass_Usl; { формирование массива по условию } Print(b, k); writeln; { вывод на экран нового массива B } Readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Изменить условие. 3. Вывести на экран сообщение о количестве найденных элементов. 4. Найти среднее арифметическое элементов нового массива. ^ С ЗАПОМИНАНИЕМ ЕГО ПОЛОЖЕНИЯ (ИНДЕКСА) ПОСТАНОВКА ЗАДАЧИ: Найти в массиве A, состоящем из n элементов, наибольший элемент и запомнить его индекс (K). ^ { описание массива и переменных } { процедура ввода массива } { процедура вывода массива } procedure MaxEl; begin max:=a[1]; k:=1; for i:=1 to n do if max writeln('Максимальный элемент массива А равен ',max); writeln('Максимальный элемент массива стоит на ' ,k, ' месте); end; Begin ClrScr; n:=20; Input; ClrScr; Print; writeln; MaxEl; Readkey;; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Найти минимальный элемент и его индекс. 3. Найти минимальный и максимальный элементы, и их индексы. 4. Заменить найденный минимальный элемент числом 100 и показать на экране массив с этой заменой. ^ ПОСТАНОВКА ЗАДАЧИ: Определить, есть ли в заданном массиве элемент равный L. Имеется массив А: 3 1 2 5 3 4 8 L=5 В массиве А имеется элемент равный 5 В данной программе можно использовать "флажок" - специальную переменную, которая принимает значения "истина" или "ложь" в зависимости от того найден элемент или нет. ^ . . . procedure Poisk(L: integer); var fl: boolean; begin fl:=false; for i:=1 to n do if a[i]=L then fl:=true; if fl then write(' Элемент равный ',L,' имеется ') else write(' Элемент равный ',L,' отсутствует'); end; Begin ClrScr; n:=20; Input; ClrScr; Print; writeln; writeln; write('Введите значение искомого элемента: '); readln(L); Poisk(L); Readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу, т. е. найти 3-4 элемента. 2. Если в массиве несколько одинаковых элементов, то найти первый из них и указать его индекс. 3. Подсчитать количество одинаковых элементов в массиве. ^ ПОСТАНОВКА ЗАДАЧИ: Расположить элементы массива в порядке возрастания. Из множества сортировок рассмотрим поиск MIN и перестановку. Исходный массив: 3 2 -5 2 0 8 4 Конечный массив: -5 0 2 2 3 4 8 ^ . . . procedure Sort; var min: real; begin for i:=1 to n do begin min:=a[i]; k:=i; for j:=i to n do if a[j] a[k]:=a[i]; a[i]:=min end end; Begin ClrScr; Input; ClrScr; write('Исходный массив: '); Print; writeln; Sort; write('Конечный массив: '); Print; readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Отсортировать исходный массив по убыванию элементов. 3. Отсортировать исходный массив по возрастанию и убыванию элементов. 4. Отсортировать массив латинских букв. О Б Р А Б О Т К А М А Т Р И Ц ^ В Паскале двумерные массивы называют матрицами. TYPE MATRICA=ARRAY[1..N,1..M] OF REAL; - определение типа двумерного массива, где N -число строк, М -столбцов. ПОСТАНОВКА ЗАДАЧИ: Заполнить матрицу и вывести ее на экран. Заполнение матрицы может производиться также как и одномерного массива, только с помощью вложенных циклов. ^ const n=3; var a: array[1..n,1..n] of integer; i,j: integer; Begin { ввод матрицы по строкам } ClrScr; 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 for i:=1 to n do begin begin for j:=1 to n do write(a[i,j],' '); gotoxy(10,5+i); writeln { перевод курсора на новую строку } for j:=1 to n do write(a[i,j]:3); end; end; readkey; readkey; End. End. Можно задать постоянную матрицу: const a: array[1..3,1..3] of integer=((1,2,3), (4,5,6), (7,8,9)); З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Описать процедуры ввода и вывода матриц. 3. Задать постоянную матрицу. 4. Вывести на экран матрицу по столбцам. 5. Вывести матрицу в указанное место экрана. ^ ПОСТАНОВКА ЗАДАЧИ: Для двумерного массива B размером N х M необходимо вычислить сумму всех элементов матрицы. Program Summa_Mat; uses crt; . . . procedure Sum; begin s:=0; for i:=1 to n do for j:=1 to m do s:=s+b[i,j] end; Begin ClrScr; Input_Mat; { если массив вводится с клавиатуры } ClrScr; Print_Mat; writeln; Sum; write('Сумма элементов матрицы равна ',s); readkey; End. З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Ввести дробные и отрицательные числа. ^ СЛЕД МАТРИЦЫ - сумма диагональных элементов матрицы N х N. ПОСТАНОВКА ЗАДАЧИ: Для матрицы В размером N х N надо вычислить сумму диагональных элементов B[i,i]. . . . procedure Sled_Mat; { главная диагональ } begin s:=0; for i:=1 to n do s:=s+b[i,i] end; . . . ^ ПОСТАНОВКА ЗАДАЧИ: Вычислить сумму элементов каждой строки матрицы В размером N х M. Результат получить в виде вектора D. . . . procedure Sum_Strok_Mat; begin for i:=1 to n do begin s:=0; for j:=1 to m do s:=s+b[i,j]; d[i]:=s end end; . . . . . . З А Д А Н И Я: 1. Набрать и исполнить программу. 2. Получить сумму элементов побочной диагонали. 3. Напечатать вектор суммы строк вертикально справа от матрицы. 4. Получить вектор суммы столбцов матрицы. |
![]() | Задача 1 Условие Условие в тексте заданий понятие «вектор» есть синоним для «одномерный массив». Программная функция должна получать на вход параметр-массив... | ![]() | Одномерные и двумерные массивы (таблицы) Массив Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются... |
![]() | Задание № Одномерные массивы Постановка задачи Анализ постановки задачи показывает, что в алгоритме задачи должны быть элементы циклической и разветвляющейся структур. Исходные... | ![]() | Type Matrix=Array. 3,. 2 ] of Real; //Тип двумерный массив // вещественных... Тип массив – структура данных, представляющая собой набор переменных одинакового типа, имеющих общее имя |
![]() | План стр. Введение Теоретические основы проблемы развития творческого... Понятие «Творчество» определяется как деятельность, в результате которой ребенок создает новое, оригинальное, проявляя воображение,... | ![]() | Необходимо переделать текст программы изложенный ниже для варианта выделенного зеленный цветом Задание. Дан массив чисел Х=0,-1,22,-34,43,-51,-63,17,8,-95 Необходимо сформировать новый массив Y, в который включить следующие... |
![]() | R: Real; { Знаменатель дроби } Дан одномерный массив целых чисел. Найти сумму положительных элементов массива с k1-го по k2, где k1 и k2 вводятся с клавиатуры.... | ![]() | Практическая работа №6 В соответствии с вариантами задания (табл. 4) представить: алгоритм вычисления значений заданной функции в виде схемы программы и... |
![]() | Городская спартакиада «Во славу Отечества» прошла 18 сентября 2013... Рисунок. Инструктаж команды перед стартом на городской спартакиаде «Решение пожарно-тактической задачи» | ![]() | Модуль 2 Лабораторная работа №1 Замечание. Задачи из данного пункта решить двумя способами, используя одномерный массив, а затем двумерный. Размерность массива вводится... |