Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Тема 9. Массивы в языке PascalСодержание книги Поиск на нашем сайте Примеры решаемых задач Пример 1. Составить программу, которая сформирует случайным образом массив из 20 целых чисел и: а) выведет его в одну строку на экране; б) выведет элементы массива, стоящие на четных местах и вычислит их сумму; в) вычислит количество нечетных элементов; г) упорядочит элементы массива по убыванию. Программа: Program М1; Uses Crt; Type Numbers = Array [1..20 ] Of Integer; {} Var A: Numbers; I, J, S, K, P: Integer; Begin Clrscr; Randomize; { инициализируем датчик случайных чисел } For I:= 1 To 20 Do { заполняем массив А случайными числами от 0 до 99} A [ I ]:= Random (100); { Задача (а) } Writeln (‘Получили массив:’); { выводим полученный массив на экран } For I:= 1 To 20 Do Write (A [ I ]: 3); Writeln; { переводим курсор в следующую строку экрана } { Задача (б) } Writeln (‘Элементы на четных местах: ’); S:= 0; { Обнулили сумму } For I:= 1 To 20 Do If I mod 2 = 0 { Если у элемента четный НОМЕР } Then Begin Write (A [ I ]: 3); { то выводим его } S:= S + A [ I ] { и накапливаем сумму } End; Writeln; { переводим курсор в следующую строку экрана } Writeln (‘ Их сумма ’, S); { выводим значение суммы } { Задача (в) } K:= 0; { Обнулили счетчик нечетных элементов в массиве } For I:= 1 To 20 Do If A [ I ] mod 2 <> 0 { Если ЭЛЕМЕНТ нечетный } Then K:= K + 1; { то увеличиваем значение счетчика } Writeln (‘ Количество нечетных элементов ’, К); { выводим значение счетчика } { Задача (г) } { Сортируем массив А по убыванию } For I:= 1 To 19 Do For J:= I + 1 To 20 Do If A[ J ] > A[ I ] Then Begin P:= A[ I ]; {меняем местами i-ый и j-ый элементы массива А} A[ I ]:= A[ J ]; { для этого используем переменную p } A[ J ]:= P End; Writeln (‘Получили массив:’); {выводим упорядоченный массив на экран} For I:= 1 To 20 Do Write (A [ I ]: 3); Readln End. Пример 2. Составить программу, которая сформирует случайным образом двумерный массив N x N целых чисел и: а) выведет его на экран в виде матрицы; б) выведет элементы массива, стоящие над главной диагональю; в) вычислит суму элементов, стоящих на побочной диагонали; г) вычислит суммы столбцов.
Пояснение: Если элемент M [i, j] двумерного массива M размера n x n расположен на главной диагонали, то i = j (номер строки равен номеру столбца). Если элемент M [i, j] двумерного массива M размера n x n расположен на побочной диагонали, то i + j = n + 1 (сумма его индексов равна n + 1). Программа: Program М2; Uses Crt; Type Numbers = Array [1..20, 1..20 ] Of Integer; { Тип - двумерный массив 20 х 20 } Var A: Numbers; N, I, J, S: Integer; Begin Clrscr; Write (‘Введите количество строк и столбцов ’); Readln(N); Randomize; { инициализируем датчик случайных чисел } For I:= 1 To N Do { Организуем цикл по строкам } For J:= 1 T N Do { Организуем цикл по столбцам } A [ I,J]:= Random (100); { заполняем массив А случайными числами } { Задача (а) } Writeln (‘Получили массив:’); { выводим массив на экран } For I:= 1 To N Do Begin For J:= 1 To N Do Write (A [I, J]: 3); {выводим все элементы i-ой строки в одну строку на экране} Writeln { переводим на экране курсор на следующую строку} End; { Задача (б) } Writeln (‘Элементы над главной диагональю:’); For I:= 1 To N Do Begin For J:= 1 To N Do If J >= I { Eсли элемент на главной диагонали или над ней, } Then Write (A [I, J]: 3) { то выводим его} Else Write(‘ ‘:3); { иначе выводим три пробела } Writeln { переводим на экране курсор на следующую строку} End; { Задача (в) } S:= 0; For I:= 1 To N Do For J:= 1 To N Do If J + I = N + 1 { Eсли элемент на побочной диагонали } Then S:= S + A [I, J]; { то накапливаем сумму } Writeln (‘Сумма элементов побочной диагонали ’, S); { Задача (г) } For J:= 1 To N Do { организуем цикл по столбцам } Begin S:= 0; { обнуляем сумму для каждого столбца } For I:= 1 To N Do { цикл по строкам } S:= S + A [I, J]; { накапливаем сумму элементов столбца } Writeln (‘ Сумма элементов ’, J, ‘ столбца ’, S) { выводим на экран значение суммы } End; Readln End.
Тема 11. Подпрограммы в языке Pascal Примеры решаемых задач Пример 1. Составить программу, которая вычислит значение выражения am + bn +(a - b) m + n. Вычисление степени числа оформить в виде подпрограммы. Пояснение. Составим и сравним две программы: с использованием процедуры и функции вычисления степени числа. Программа: program calc_proc; uses crt; var a, b, m, n, s1, s2, s3, s: integer; procedure stepen (x, y: integer; var z: integer); {процедура возводит число x в степень y, результат записывает в z } {т.е. в процедуре описано правило вычисления z = xy } var i: integer; { локальная переменная для организации цикла } begin z:= 1; for i:= 1 to y do z:= z * x end; begin clrscr; write(‘Введите a, b, m, n ’); readln(a, b, m, n); { три раза вызываем процедуру stepen для вычисления трех слагаемых } stepen(a, m, s1); { вычислили s1 как am } stepen(b, n, s2); { вычислили s2 как bn } stepen(a-b, m+n, s3); { вычислили s3 как (a-b)m+n } s:= s1 + s2 + s3; { вычислили сумму трех слагаемых } writeln(‘Значение выражения ’, s); readln end. program calc_func; uses crt; var a, b, m, n, s: integer; function stepen (x, y: integer): integer; { функция возводит число x в степень y } { т.е. описано правило вычисления stepen = xy } var i,z: integer; {локальные переменные: begin z:= 1; for i:= 1 to y do z:= z * x; stepen:= z { присвоили имени функции вычисленное значение } end; begin clrscr; write(‘Введите a, b, m, n ’); readln(a, b, m, n); { три раза вызываем функцию stepen для вычисления трех слагаемых } s:= stepen(a, m) + stepen(b, n) + stepen(a-b, m+n, s3); writeln(‘Значение выражения ’, s); readln end. Тема 12. Тип данных запись (Record) Примеры решаемых задач Пример 1. Составить программу, которая обрабатывает информацию о студентах (фамилия, номер группы, рейтинг): а) вводит такую информацию; б) выводит список студентов заданной группы; в) выводит список студентов в порядке убывания рейтинга. Пояснение: Для хранения данных будем использовать массив записей с информацией о студентах. (При решении этой задачи можно и не использовать тип запись, а написать программу, обрабатывающую три массива. Без использования типа Record трудно обойтись при обработке файлов – см. следующую тему.) Программа: Program Record_Student; Uses Crt; Const N = 100; { N - максимальное количество студентов } Type Stud = Record {данные об одном студенте–запись из трех полей:} Name: String; { фамилия} Group: Integer; { номер группы} Rating: Real { рейтинг } End; Students = Array [1..N] Of Stud; { данные обо всех студентах - } { это массив записей } Var St: Students; { список студентов – массив записей } K, M, L, Gr: Integer; Pst: Stud; { промежуточная переменная, необходимая для того, } {чтобы менять местами два элемента массива при его сортировке} Begin ClrScr; { а) Ввод данных о студентах } Write (‘Сколько студентов ’); Readln (M); For K:= 1 To M Do With St [K] Do { вводим все поля записи St[K] } Begin Write (‘Введите фамилию ’,K,’ студента ‘); Readln (Name); Write (‘Введите номер его группы ‘); Readln (Group); Write (‘Введите его рейтинг ‘); Readln (Rating) End; { б) Вывод списка заданной группы } Write (‘Список какой группы требуется ’); Readln (Gr); Writeln(‘Список группы № ‘,Gr); For K:= 1 To M Do { просматриваем весь список } With St [K] Do If Group = Gr { если номер группы студента равен требуемому} Then Writeln (Name:20); { то печатаем его фамилию } { в) Сортировка студентов по их рейтингу } For K:= 1 To M – 1 Do For L:= K + 1 To M Do If St[L]. Rating > St[K]. Rating Then Begin Pst:= St[L]; St[L]:=St[K]; St[K]:=Pst End; { вывод отсортированного списка} Writeln (‘Список студентов в порядке убывания рейтинга:’); For K:= 1 To M Do Writeln (Name:20, Group:5, Rating:7:2); Readln End.
|
|||||
|
Последнее изменение этой страницы: 2021-04-05; просмотров: 141; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.) |