Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 96; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.171.10 (0.007 с.) |