ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Бийский технологический институт (филиал)
государственного образовательного учреждения
высшего профессионального образования
«Алтайский государственный технический университет
имени И.И. Ползунова»
Л.И. Трутнева, Н.В. Павлова
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ
PASCAL
Методические рекомендации по выполнению расчетного задания по курсу «Информатика» для студентов специальностей
200106 «Информационно-измерительная техника и технологии»,
260601 «Машины и аппараты пищевых производств»
и «Информатика и программирование» для студентов специальности 080801 «Прикладная информатика в экономике»
Бийск
Издательство Алтайского государственного технического университета им. И.И. Ползунова
2009
УДК 681.3.062.–004.43
Т 79
Рецензент: декан факультета ИТАУ БТИ АлтГТУ, к.ф.-м.н.
Ю.А. Галенко
|
Трутнева,
Л.И.
Программирование на языке Pascal: методические рекомендации по выполнению расчетного задания по курсу «Информатика» для студентов специальностей 200106 «Информационно-измеритель-ная техника и технологии», 260601 «Машины и аппараты пищевых производств» и «Информатика и программирование» для студентов специальности 080801 «Прикладная информатика в экономике» / Л.И. Трутнева, Н.В. Павлова; Алт. гос. техн. ун-т, БТИ. – Бийск: Изд-во Алт. гос. техн. ун-та, 2009. – 63 с.
Методические рекомендации предназначены в качестве руко-водства к самостоятельной работе студентов первого курса технических специальностей, изучающих курсы «Информатика» и «Информатика и программирование». Данные рекомендации призваны помочь студентам при выполнении расчетного задания, а также в освоении теоретического материала курса, содержат варианты расчетных заданий с пояснениями к их выполнению.
УДК 681.3.062.-004.43
Рассмотрены и одобрены
на заседании кафедры информатики
и вычислительной математики.
Протокол № 59 от 01.09.2008 г.
© Л.И. Трутнева, Н.В. Павлова, 2009
|
© БТИ АлтГТУ, 2009
СОДЕРЖАНИЕ
ВВЕДЕНИЕ.. 4
1 БЛОК-СХЕМЫ И АЛГОРИТМЫ ЛИНЕЙНОЙ СТРУКТУРЫ... 5
1.1 Выражения и оператор присваивания. 8
1.2 Простые типы данных. 8
1.3 Стандартные функции и процедуры.. 9
1.4 Ввод-вывод. 11
1.5 Примеры решения задач. 12
1.6 Задания для самостоятельного решения. 13
2 АЛГОРИТМЫ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ... 17
2.1 Условный оператор. 17
2.2 Оператор выбора. 18
2.3 Логический и перечисляемый типы данных. 18
2.4 Примеры решения задач. 20
2.5 Задачи для самостоятельного решения. 22
3 ЦИКЛИЧЕСКИЕ СТРУКТУРЫ... 28
3.1 Оператор цикла с параметром.. 28
3.2 Цикл с предусловием.. 28
3.3 Цикл с постусловием.. 29
3.4 Примеры решения задач. 29
3.5 Задачи для самостоятельного решения. 32
4 СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ.. 35
4.1 Основные понятия. 35
4.2 Одномерные массивы.. 36
4.3 Двумерные массивы и массивы большей размерности. 36
4.4 Примеры решения задач. 37
4.5 Задачи для самостоятельного решения по теме «Одномерные массивы». 42
4.6 Задачи для самостоятельного решения по теме «Двумерные массивы». 46
5 ПОДПРОГРАММЫ... 50
5.1 Общие понятия. 50
5.2 Формальные и фактические параметры.. 51
5.3 Локальные и глобальные параметры.. 52
5.4 Рекурсия. 52
5.5 Примеры решения задач. 53
5.6 Задания для самостоятельного решения. 56
ЛИТЕРАТУРА.. 62
ВВЕДЕНИЕ
Главной особенностью изучения курсов «Информатика» и «Информатика и программирование» является обеспечение подготовки студентов в области разработки алгоритмов и программирования прикладных задач. Программирование как особый род деятельности остается важнейшей составляющей в подготовке высококвалифицированных специалистов в сфере компьютерных наук. Данное методическое пособие разработано для успешного усвоения студентами основ программирования.
Методические рекомендации включают краткие теоретические сведения, практические приемы программирования в среде Turbo Pascal, рассмотренные на наглядных и типовых примерах, а также задания для самостоятельного выполнения по вариантам. Порядок изложения основных разделов, рассматриваемых в пособии, тесно привязан к лекционному курсу, и студент может выполнять задания последовательно, по мере их изучения. Такой подход облегчает понимание примеров и повышает скорость изучения языка программирования.
1 БЛОК-СХЕМЫ И АЛГОРИТМЫ ЛИНЕЙНОЙ СТРУКТУРЫ
Алгоритмы, представленные графическими средствами, получили название блок-схем. Отдельные действия (этапы алгоритма) изображаются при помощи различных геометрических фигур (блоков), а связи между этапами (последовательность выполнения этапов) указываются при помощи стрелок, соединяющих эти фигуры.
При выполнении блок-схем внутри каждого блока указывается поясняющая информация, которая характеризует действия, выполняемые этим блоком. Наиболее типичные действия алгоритма могут быть изображены в виде блоков, представленных в таблице 1.
Таблица 1 - Типовые блоки блок-схем по ГОСТ 19.701–90
Обозначение |
Описание |
|
Ввод, вывод данных |
|
Вычислительное действие или последовательность действий |
|
Проверка условий, выбор направления выполнения алгоритма |
|
Начало, конец, прерывание алгоритма |
|
Циклические действия |
|
Поток данных |
|
Комментарий |
Типы алгоритмов
1.
Все команды алгоритма выполняются последовательно одна за другой. |
|
Пример
|
|
2. Разветвленный
Содержит блок условия (ветвления) и имеет две или более ветвей. В зависимости от истинности условия выполняется одна из ветвей. |
|
Пример
|
|
3. Циклический
Содержит многократно повторяющийся фрагмент – тело цикла – и обеспечивает необходимое число повторений этого фрагмента. Количество повторений тела цикла не должно быть бесконечным. |
|
Пример 1.
|
|
Пример 2.
|
|
1.1 Выражения и оператор присваивания
Оператор – это инструкция, которую должен выполнить Turbo Pascal. Программа состоит из последовательности операторов. Исполняемые операторы должны заканчиваться знаком ;
. Существует несколько типов операторов.
Оператор присваивания
– это последовательность из переменной, знака присваивания (:=
) и арифметического выражения.
Структурный оператор
– это оператор, состоящий из нескольких зарезервированных слов и логических проверок. К ним относятся операторы циклов и условные операторы.
Составной оператор
– это группа операторов, заключённая между begin … end
;.
Пустой оператор
– оператор begin
en
d;
, не выполняющий никакого действия.
1.2 Простые типы данных
Числовые переменные можно описать по-разному в зависимости от вида (целые, вещественные) и значности чисел. Они приведены в таблице 2.
Таблица 2 - Обозначение и допустимые значения простых типов данных
Обозначение типа |
Допустимые значения
|
Формат
|
1 |
2
|
3
|
Целый тип
|
||
Byte |
0…255 |
1 байт без знака |
Word |
0...65535 |
2 байта без знака |
ShortInt |
-128…127 |
1 байт со знаком |
Integer |
-32768...32767 |
2 байта со знаком |
Longint |
-2147483648...2147483647 |
4 байта со знаком |
Вещественный тип
|
||
Real
|
2,9×10… 1,7×10 |
6 байтов (точность до 11 отрицательных и 12 положительных значащих чисел) |
Single |
1,5×10-45
|
4 байта (число значащих цифр 7–8)
|
Продолжение таблицы 2
1 |
2
|
3
|
|
Double |
5,0×10-
|
8 байтов
(число значащих цифр 15–16) |
|
Extended
|
3,4×10-
|
10 байт
(число значащих цифр 19–20) |
|
Comp
|
-9,2×1018
|
8 байтов
(число значащих цифр 19–20) |
|
Символьный
|
|||
Char |
Любой из 256 символов таблицы ASCII |
1 байт
|
|
Логический
|
|||
Boolean |
false, true
|
1 байт
|
1.3 Стандартные функции и процедуры
Стандартные функции и процедуры приведены в таблицах 3, 4.
Таблица 3 - Стандартные функции
Функция |
Назначение |
Тип аргумента |
1 |
2 |
3 |
Стандартные арифметические функции
|
||
Abs(x) |
Вычисление абсолютного значения x (модуль числа) |
Вещественный, целый |
Sqr(x) |
Вычисление квадрата x |
Вещественный, целый |
Sqrt(x) |
Вычисление квадратного корня из x |
Вещественный, целый |
Sin(x) |
Вычисление синуса x |
Вещественный, целый |
Cos(x) |
Вычисление косинуса x |
Вещественный, целый |
Arctan(x) |
Вычисление арктангенса x |
Вещественный, целый |
Exp(x) |
Вычисление экспоненты (числа e=2,71828…) в степени x (ех
|
Вещественный, целый |
Продолжение таблицы 3
1 |
2 |
3 |
Ln(x) |
Вычисление натурального логарифма x |
Вещественный, целый |
Pi |
Число p |
Нет |
Random(range) |
Генерирует случайное число целого типа в пределах от 0 до range. Если параметр range не задан, то формируется число вещественного типа в пределах от 0 до 1 |
Вещественный, целый |
Функции преобразования числовых переменных
|
||
Тrunc(x) |
Нахождение целой части x (дробная часть числа отбрасывается) |
Вещественный, целый |
Int(x) |
Округление вещественного числа x по направлению к нулю |
Вещественный |
Round(x) |
Округление x в сторону ближайшего целого по математическим правилам |
Вещественный, целый |
Frac(x) |
Вычисление дробной части числа х |
Вещественный |
Таблица 4 - Стандартные функции и процедуры
Название |
Назначение |
Функции, используемые для работы с порядковыми переменными
|
|
Pred(x) |
Определение предшественника взятого символа х |
Succ(x) |
Определение последующего символа за взятым символом х |
Ord(x) |
Определяет код символа. Например, Ord(‘A’) - 65 |
Chr(x) |
Определяет символ по коду. Например, Chr(65) - ’A’ |
Low(х) |
Возвращают минимальное значение указанного диапазона переменной х |
High(х) |
Возвращают максимальное значение указанного диапазона переменной х |
Продолжение таблицы 4
Название |
Назначение |
Стандартные процедуры
|
|
Dec(x, n), или dec(x) |
Уменьшает значение переменной х любого порядкового типа на значение n типа longint. Если параметр n опущен, то процедура уменьшает значение переменной х на 1 |
Inc(x, n), или inc(x) |
Увеличивает значение переменной х любого порядкового типа на значение n типа longint. Если параметр n опущен, то процедура увеличивает значение переменной x на 1 |
Randomize |
Инициализирует генератор случайных чисел |
1.4 Ввод-вывод
Операторы ввода данных в переменные с клавиатуры:
Read
(<список переменных>);
Readln
(<список переменных>);
Операторы являются стандартными, находятся в модуле System, не требующем специального подключения. Данные, вводимые в разные переменные, разделяются пробелом. Отличия операторов заключаются в том, что второй оператор после ввода информации (выполнения оператора) переводит курсор на следующую строку, а первый оператор - нет.
Оператор Readln
; без списка переменных используется для задержки информации на экране до нажатия на клавишу Enter и ставится в конце программы.
Операторы вывода
текстовой информации на экран:
Write
(<список переменных, констант и арифметических выражений>);
Writeln
(<список переменных, констант и арифметических выражений>);
Отличия операторов заключаются в том, что второй оператор после вывода информации переводит курсор на следующую строку, а первый оператор - нет. Переменные типа real рекомендуется выводить в форматированном виде.
Форматированный вывод
- вывод информации с указанием размерности, т.е. после переменной через двоеточие указывается количество символов под все число, а затем, для вещественных переменных, снова через двоеточие число десятичных знаков.
Например: Write(а:5:2);
под а
отводится 5 символов, включая точку, знак числа и два десятичных знака величины числа. Знак «+» перед числом при выводе будет опущен. Если в а
находится число 2,5678, то выведется на экран: _2.57.
1.5 Примеры решения задач
Пример 1.
Сгенерировать случайные числа и вывести их на экран:
1) целое в интервале от 0 до 67;
2) целое двухзначное;
3) целое из ряда 60, 70, 80, 90, …, 150;
4) вещественное из ряда -1.5, -1.3, -1.1, …, 0.7, 0.9.
Решение:
var a,b,c: integer;
d:real;
begin
randomize;
a:=random(68); writeln('1 -', a);
b:=random(90)+10; writeln('2 -', b);
c:=random(10)*10+60; writeln('3 -', c);
d:=random(round((0.9-(-1.5))/0.2+1))*0.2-1.5;
writeln('4 -', d:0:1);
readkey;
end.
Пример 2.
Вывести на экран код введенного с клавиатуры символа в таблице ASCII.
Решение
:
uses crt;
var Letter: char;
Code: byte;
begin
clrscr;
write('Введите символ:');
readln(Letter);
writeln('Код символа', Letter, ' - ', ord(Letter));
write('Введите код символа:');
readln(Code);
writeln('Символ с кодом ', Code, ' - ', chr(Code));
readkey;
end.
В программе Примера 2 сначала вводится символ, который затем сохраняется в переменной Letter. На основании значения этой переменной при помощи стандартной функции ord определяется код символа. Затем выполняется обратное действие - вводится код символа в переменную Code, на основании значения которой затем определяется сам символ при помощи стандартной функции chr. Процедура clrscr находится в модуле crt, очищает экран (окно) и помещает курсор в верхний левый угол.
Пример 3.
Написать программу подсчета количества часов, минут и секунд в данном числе суток.
Решение
:
uses crt;
var syt,has,min,sec:extended;
begin
clrscr;
write('сут =');
readln(syt);
has:=24*syt;
min:=60*has;
sec:=60*min;
writeln('часов:',has:0:0);
writeln('минут:',min:0:0);
writeln('секунд:',sec:0:0);
readln;
end.
В данном примере вещественные переменные (тип extended) выводятся с округлением до целых.
1.6 Задания для самостоятельного решения
Примечание
- Все необходимые значения (исходные данные) ввести с клавиатуры, результаты вывести на экран. Составить блок-схему.
1. Составьте программу для вычисления периметра прямоугольника.
2. Составьте программу для вычисления площади трапеции.
3. Задана окружность радиуса R. Составьте программу для нахождения ее длины и площади ограниченного ею круга.
4. Составьте программу для вычисления длин высот треугольника, у которого длины сторон a, b, c.
5. Составьте программу для вычисления длин медиан треугольника, у которого длины сторон a, b, c.
6. Составьте программу для вычисления площади прямоугольного треугольника по его катетам a и b.
7. Составьте программу, складывающую две обыкновенные дроби. Числители и знаменатели обеих дробей вводить отдельно.
8. Составьте программу, находящую разность двух обыкновенных дробей.
9. Составьте программу, умножающую две обыкновенные дроби.
10. Составьте программу, делящую две обыкновенные дроби.
11. Составьте программу для вычисления величины работы, совершенной при равномерном подъеме груза массой М кг на высоту H м. Ускорение свободного падения описать как константу G=9,81.
12. Составьте программу для вычисления давления столба жидкости плотностью R высотой H на дно сосуда.
13. Составьте программу для вычисления выталкивающей силы, действующей на тело объемом V, наполовину погруженное в жидкость плотностью R.
14. Составьте программу для вычисления количества теплоты по формуле Q = cm(t2
-t1
).
15. Составьте программу для вычисления количества теплоты, полученной при сгорании М г керосина, если его теплота сгорания q.
16. Составьте программу для вычисления величины силы тока на участке электрической цепи сопротивлением R Ом при напряжении U В.
17. Составьте программу для вычисления напряжения на каждом из последовательно соединенных участков электрической цепи сопротивлением R1, R2, R3 Ом, если сила тока при напряжении U В составляет 1 А.
18. Составьте программу для вычисления значения силы тока I на участке, состоящем из двух параллельно соединенных резисторов сопротивлением R1 и R2, если напряжение на концах этого участка равно U.
19. Напишите программу для расчета по двум формулам:
20. Расстояние между домами, в которых живут Петя и Коля, 1200 м. Однажды они вышли каждый из своего дома и направились навстречу друг другу. Когда Петя прошел А метров, они встретились. Во сколько раз расстояние, которое прошел Коля, больше расстояния, которое прошел Петя?
21. От станции до озера S км. Туристы, направляясь от станции к озеру, полтора часа шли пешком со скоростью А км, а затем сели на попутную машину, которая ехала со скоростью В км/ч. За какое время туристы добрались до озера?
22. Из 18 т железной руды выплавляют 10 т железа. Сколько железа выплавят из А т руды?
23. Чтобы заварить 1,5 л чая, нужно 30 г сухого чая. Чайник вмещает В л. Сколько нужно сухого чая для заварки?
24. В школьном коридоре длиной 56 м нужно выкрасить пол. Выкрасив часть коридора длиной 22 м, израсходовали А кг краски. Сколько еще нужно краски, чтобы докрасить коридор?
25. Чтобы сварить 4 порции пшенной каши, нужно взять 220 г пшена, 1 л молока и 30 г сахара. Сколько потребуется этих продуктов, чтобы сварить N порций каши?
26. Сахарная свекла содержит 14 % сахара. С 1 га собирают 30 т сахарной свеклы. Сколько гектаров надо засеять сахарной свеклой, чтобы получить В т сахара?
27. Чтобы связать один шарф, требуется 200 г пряжи. Пряжа состоит на 40 % из мохера и на 60 % из полиакрила. Сколько мохера и полиакрила потребуется, чтобы изготовить В шарфов?
28. Для приготовления компота из персиков берут сахар, персики и воду в пропорции 1:1:3. Сколько килограммов каждого продукта надо взять, чтобы сварить Р кг компота?
29. Масса молекул кислорода в организме человека составляет 65 % от его массы. Составьте программу для определения массы молекул кислорода в организме человека.
30. В классе N учеников. После контрольной работы было получено: A - пятерок, B - четверок, C – троек. Найти процент троек, четверок и пятерок.
31. Четырем классам поручено убрать поле площадью F га. Известно количество учеников в каждом классе. Сколько гектаров надо убрать каждому классу?
32. Даны два числа. Найти среднее арифметическое кубов этих чисел и среднее геометрическое модулей этих чисел.
33. Вычислить расстояние между двумя точками с данными координатами x1
, y1
и x2
, y2
.
34. По двум данным катетам найти гипотенузу и площадь прямоугольного треугольника.
35. Даны числа x и y. Вычислить их сумму, разность и произведение.
36. Смешано v1
литров воды температуры t1
с v2
литрами воды температуры t2
. Вычислить объем и температуру образовавшейся смеси.
37. Составьте программу для вычисления необходимой массы соли и воды для приготовления раствора массой m г с массовой долей w %.
38. Дано x. Вычислить 1 - 2x +3x2
- 4x3
и 1 + 2x +3x2
+ 4x3
. Позаботиться об экономии операций.
39. Автомобиль проехал три участка пути разной длины с разными скоростями. Найти среднюю скорость автомобиля.
40. Известна сумма денег, имеющаяся у покупателя и стоимость одной единицы товара. Сколько единиц товара сможет купить покупатель и какова его сдача?
41. Составьте программу для вычисления суммы цифр введенного с клавиатуры трехзначного натурального числа.
42. Известен объем продукции, выпускаемый пятью предприятиями отрасли. Вычислить средний объем продукции, выпускаемый одним предприятием.
43. Известен плановый P и фактический F показатели выпуска продукции предприятием. Определить процент выполнения плана.
44. На строительных работах нужно отработать S часов, в подразделении N строителей. Какова средняя загруженность одного человека?
45. Заданы координаты концов двух векторов, выходящих из начала координат. Найти длины этих векторов.
46. Дана длина ребра куба. Найти объем куба и площадь его боковой поверхности.
47. Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь.
48. Дана сторона равностороннего треугольника. Найти его площадь.
49. Напишите программу для расчета по двум формулам:
50. Сырье для изготовления искусственных нитей поступает в бочках радиуса R и высотой H. Определить объем N бочек.
51. Найти объем параллелепипеда по двум сторонам основания, углу между ними и высоте.
52. Расстояние между полицейской машиной и автомобилем преступника равно 240 м. Скорость полицейского автомобиля х, машины преступника – y. Как скоро полицейские догонят преступника?
53. Треугольник задан координатами (x1, y1), (x2, y2), (x3, y3) своих вершин. Найти периметр и площадь треугольника.
54. Бабушка вяжет в неделю 3 пары детских носков, пару женских и пару мужских и продает их. Считая, что в месяце 4 недели, определить, какую прибыль бабушка имеет за месяц.
55. Напишите программу для расчета по двум формулам:
2 АЛГОРИТМЫ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ
2.1 Условный оператор
В разветвляющихся вычислительных процессах отдельные этапы вычислений выполняются не всегда в одном и том же порядке, а в зависимости от некоторых условий выбираются для исполнения различные их последовательности.
if
<условие> then
<оператор 1> else
<оператор 2>];
если тогда иначе
Условие – логическое выражение, которое может быть истинным или ложным. Оператор 1, оператор 2 – какой-либо оператор, в том числе и составной оператор, т.е. несколько операторов, объединенных операторными скобками begin … end
. Конструкция else
может отсутствовать.
Принцип работы оператора
:
1. Проверяется условие.
2. Если условие истинно (верно), то выполняется оператор 1.
3. Если условие ложно (неверно), то выполняется оператор 2.
4. Если else
<оператор 2> отсутствует, то при ложности условия выполняется следующий за if
оператор.
2.2 Оператор выбора
Оператор выбора позволяет выбрать из любого числа возможностей.
case
<переменная или выражение> of
<список значений выбора 1>:<оператор 1>;
<список значений выбора 2>:<оператор 2>;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
<список значений выбора N>:<оператор N>;
else
<оператор>
end;
Переменная может быть любого порядкового типа, кроме longint (word, boolean, integer, char…
или перечисляемый тип). Список значений выбора - это значения, которые могут принимать переменная или выражение, перечисленные через запятую или, если значения принадлежат какому-либо интервалу, с использованием лексемы «..» (1..7 или 'а'..'м')
Принцип работы оператора:
1. Значение переменной или выражения сравнивается с предложенными списками значений.
2. Если найдено нужное значение, выполняется соответствующий оператор.
5. Если нужное значение не найдено в перечисленных списках, выполняется оператор после else
.
6. Если else
отсутствует, то, когда нужное значение не найдено, выполняется следующий за case
оператор.
Ветви здесь представлены элементами выбора, разграниченными точкой с запятой, а слово else
с последующим оператором могут отсутствовать.
2.3 Логический и перечисляемый типы данных
Условные операторы могут использовать логические операции, приведенные в таблице 4.
Таблица 4 - Логические операторы языка
Логическая операция |
Наименование |
=
|
Равно |
<> |
Не равно |
Продолжение таблицы 4
Логическая операция |
Наименование |
and |
Логическое И (логическое умножение, конъюнкция) |
or |
Логическое ИЛИ (логическое сложение, дизъюнкция) |
хor |
Логическое исключающее ИЛИ |
not |
Логическое НЕ |
Перечисляемый тип
– это описание упорядоченного множества значений, задаваемых идентификаторами в круглых скобках. Переменные перечисляемого типа могут использоваться в логических выражениях или операторах присваивания и не могут использоваться в операторах ввода или вывода.
Тип – диапазон (интервальный тип)
получается путем введения ограничения на уже определенный некоторый простой тип. Ограничения определяются заданием диапазона – минимального и максимального значений констант в этом диапазоне. Тип, из которого выбирается диапазон (отрезок), называется базовым типом. Левая граница диапазона не должна превышать правую. Диапазоны для вещественных типов не допускаются.
Например, рассмотрим типы:
type A=10..100;
Week=(monday, teusday, wednesday, thursday, friday, satyrday, sunday);
Workday=monday..friday;
Weekend=satyrday..sunday;
Базовый тип для диапазона А – тип integer; для диапазонов Workday и Weekend – перечисляемый тип Week.
Использование диапазонов позволяет более экономично распределять память, особенно в случае данных типа integer. Декларация интервального типа указывает компилятору, что для переменных возможны только значения в заданном интервале, тем самым в программе автоматически организуется проверка корректности операций присвоения.
2.4 Примеры решения задач
Пример 1.
Написать программу определения дня недели с использованием перечисляемого типа.
Решение
:
uses crt;
type week=(monday, teusday, wednesday, thursday, friday, satyrday, sunday);
var day:week;
begin
day:=thursday;
if (day=sunday) or (day=satyrday) then
writeln('выходной')
else writeln('рабочие дни');
readkey;
end.
Пример 2.
Составить программу, которая выдает на экран true, если заданная своими координатами точка лежит внутри выделенной области.
Решение
:
uses crt;
var x,y:integer; L:boolean;
begin
write('введите х и у -');
readln(x,y);
L:=((x<=0) and (Sqr(x)+Sqr(y)<=9) and (y>=-x-3)) or ((Sqr(x)+Sqr(y)<=25) and (x>0));
writeln('Точка лежит в заданной области? - ',L);
readkey;
end.
Пример 3.
Написать программу, которая проверяет, является ли четным введенное с клавиатуры число.
Решение
:
uses crt;
var n:integer;
begin
readln(n);
write('число', n, '-');
if n mod 2=0 then writeln('четное')
else writeln('нечетное');
readkey;
end.
Пример 4.
Вывести на экран большее из двух данных чисел.
Решение:
var х,у:integer;
begin
writeln('введите 2 числа');
readln(x,у);
if x>y then writeln(х) else writeln(у);
readln;
end.
Пример 5.
Даны целые числа а, b, с. Если а<b<с, то все числа заменить их квадратами, если а>b>с, то каждое число заменить наибольшим из них, в противном случае сменить знак каждого числа.
Решение
:
var a,b,c:integer;
begin
writeln('Введите числа a,b,с');
readln(a,b,c);
if (a<=b) and (b<=c) then begin a:=sqr(a);
b:=sqr(b);
c:=sqr(c)
end
else if (a>b) and (b>c) then begin a:=c;
b:=c; end
else begin a:=-a;
b:=-b;
c:=-c end;
writeln(a:3,b:3,c:3);
readln;
end.
2.5 Задачи для самостоятельного решения
Примечание
– Все исходные данные ввести с клавиатуры, составить блок-схему.
1. Заданы числа a и b. Определить, эти числа одного или разных знаков.
2. Составьте программу, проверяющую, верно ли утверждение, что введенное вами целое число является четным. Составьте программу, проверяющую, верно ли утверждение, что введенное вами целое число делится без остатка на 3.
3. Составьте программу, проверяющую, верно ли утверждение, что сумма цифр введенного вами целого числа является четным. Составьте программу, проверяющую, верно ли утверждение, что сумма цифр введенного вами целого числа делится на 5.
4. Составьте программу, определяющую, пройдет ли график функции y = 5x2
– 7 x + 2 через заданную точку с координатами (a, b).
5. Арифметические действия над числами пронумерованы следующим образом: 1 - сложение, 2 - вычитание, 3 - умножение, 4 - деление. Задать номер действия и два числа A и B (В не равно нулю). Выполнить над числами указанное действие и вывести результат. Использовать оператор выбора.
6. Задать целое число в диапазоне 100–999. Вывести строку – словесное описание данного числа, например: 256 - «двести пятьдесят шесть», 814 - «восемьсот четырнадцать». Использовать оператор выбора.
7. Даны три целых числа, найдите среднее из них. Средним назовем число, которое больше наименьшего из данных чисел, но меньше наибольшего.
8. Напишите программу, подсчитывающую сумму только положительных из трех данных чисел.
9. Составьте программу нахождения произведения двух наибольших из трех введенных с клавиатуры чисел.
10. Если целое число М делится нацело на целое число N, то вывести на экран частное от деления, в противном случае - сообщение «М на N нацело не делится».
11. Вычислить где
12. Вычислить значение выражения,
где при a<0 при
13. Если , то вычислить
, если
, если
14. Вычислить ,
где и , если
и , если x не принадлежит указанному интервалу.
15. Составить программу, которая из трех введенных с клавиатуры чисел возводит в квадрат положительные, а отрицательные оставляет без изменения.
16. Вычислить
17. Ракета запускается с точки на экваторе и развивает скорость v км/с. Каков результат запуска?
Примечание
- Если v£7,8 км/с, то ракета упадет на Землю, если 7,8<v<11,2, то ракета станет спутником Земли, если 11,2£v£16,4, то ракета станет спутником Солнца, если v>16,4, то ракета покинет Солнечную Систему.
18. Вычислить значение функции
19. Даны действительные числа x, y (x¹y). Меньшее из этих чисел заменить их полусуммой, а большее – их удвоенным произведением.
20. Написать программу проверки, является ли данный четырехугольник квадратом.
21. Гнездо для ножки деревянной кровати имеет форму прямоугольной вырезки. Определить, подойдет ли данный четырехугольный брусок для этого гнезда.
22. Стороны одного прямоугольника равны A и B. Стороны другого равны X и Y. Написать алгоритм и программу проверки прямоугольников на равенство.
23. Цилиндрическая деталь должна иметь длину LO и диаметр DO. Допуски равны соответственно XL и XD. Определить, удовлетворяет ли норме изготовленная деталь.
24. Даны действительные числа x, y. Определить, принадлежит ли точка с координатами (x, y) заштрихованной части плоскости.
25. Даны три переменные: x, y, z. Если их значения упорядочены по убыванию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное.
26. Поместятся ли две одинаковые книги в кейс размерами x<y<z?
27. Определить, имеет ли функция y = sin(x) корень на отрезке [x, x+1]. Подсказка: если функция имеет корень на данном интервале, то ее значения на его границах имеют разные знаки.
28. Даны действительные числа x, y. Определить, принадлежит ли точка с координатами (x, y)заштрихованной части плоскости.
29. Дан номер некоторого года (положительное целое число). Вывести соответствующий ему номер столетия, учитывая, что, к примеру, началом двадцатого столетия был 1901 год. Использовать оператор выбора.
30. Написать программу, которая бы запрашивала целое число и распечатывала любое его значение, кроме 13. Если заданное число равно 13, вместо него печатается число 77.
31. Написать программу, которая бы запрашивала возраст мужчины и сообщала, сколько лет ему осталось до пенсии, либо что он уже пенсионер.
32. Даны три действительных числа a, b, c. Определить, являются ли они последовательными членами арифметической последовательности.
33. Даны четыре целых числа, одно из которых отлично от трех других, равных между собой. Вывести порядковый номер этого числа.
34. Даны коэффициенты квадратного уравнения a, b, c. Найти действительные корни этого уравнения.
35. Даны действительные числа x, y. Определить, принадлежит ли точка с координатами (x, y) заштрихованной части плоскости.
36. Заданы размеры прямоугольного отверстия A, B и размеры кирпича X, Y, Z. Определить, пройдет ли кирпич в отверстие. Замечание: задачу решать в предположении, что A>B, X>Y>Z.
37. Можно ли прямоугольный пакет размерами A, B, C положить в чемодан размерами X, Y, Z?
38. Даны действительные числа x, y. Если x и y отрицательны, то каждое значение заменить его модулем; если отрицательно только одно из них, то оба значения увеличить на 0,5; если оба значения неотрицательны и ни одно из них не принадлежит отрезку [0,5;2,0], то оба значения уменьшить в 10 раз; в остальных случаях x и y оставить без изменения.
39. Дано действительное число h. Выяснить, имеет ли уравнение
ax2
+bx+c=0 действительные корни, если
,
,
.
Если действительные корни существуют, то найти их. В противном случае ответом должно служить сообщение, что действительных корней нет.
40. Даны длины трех отрезков a, b, c. Если можно построить треугольник по этим трем отрезкам, то вычислить его периметр и площадь.
41. Даны три числа x, y, z. Найти: а) max(x+y+z, xyz)+3; б) min (x2
+y2
, y2
+z2
)-4.
42. Составьте программу, которая по трем введенным вами числам определит, могут ли эти числа быть длинами сторон треугольника, и если да, то определить вид этого треугольника (остроугольный, прямоугольный или тупоугольный).
43. Выведите на экран номер четверти, которой принадлежит точка с координатами (х, у), при условии, что х и у отличны от 0.
44. Напишите программу, которая анализирует человека по возрасту и относит к одной из пяти групп: дошкольник, ученик, студент, работник, пенсионер. Возраст вводится с клавиатуры.
45. Составьте программу, которая по введенному вами k – числу грибов, печатает фразу «Мы нашли в лесу k грибов», причем согласовывает окончание слова «гриб» с числом k.
46. Составьте программу, которая для целого числа k (от 1 до 99), введенного вами, напечатает фразу «Мне k лет», при этом в нужных случаях слово «лет» заменяя на слово «год» или «года».
47. Составьте программу, определяющую, входит ли введенная вами цифра в десятичную запись введенного вами трехзначного числа.
48. Даны действительные числа x, y. Определить, принадлежит ли точка с координатами (x, y) заштрихованной части плоскости.
49. Найти координаты точек пересечения прямой y=kx+b и окружности радиуса R с центром в начале координат. Определить, сколько точек пересечения находится во II координатной четверти.
50. Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа.
51. Выяснить, принадлежит ли точка с координатами (x, y): кругу единичного радиуса с центром в начале координат; кольцу с центром в начале координат с внешним радиусом 3 и с внутренним радиусом 2,5.
52. Дан номер года. Найти число дней в этом году. Указание.
В современном (григорианском) календаре каждый год, номер которого делится на 4, является високосным, за исключением тех, которые делятся на 100 и не делится на 400. Например, 1900 год – не високосный, 2000 год – високосный.
53. С клавиатуры вводится шестизначный номер трамвайного билета. Определить, является ли билет счастливым.
54. Даны действительные числа x, y . Определить, принадлежит ли точка с координатами (x, y) заштрихованной части плоскости.
3 ЦИКЛИЧЕСКИЕ СТРУКТУРЫ
Цикл
– команда исполнителю повторить многократно указанную последовательность команд алгоритмического языка или, другими словами, многократно повторяющаяся часть программы. Существует три разновидности оператора цикла.
3.1 Оператор цикла с параметром
Оператор цикла со счетчиком (параметром) используется, когда известно, сколько раз выполняется циклическая часть программы.
Структура оператора:
а) for
<счетчик> := <начальное значение> to
<конечное значение> do
<оператор>;
Пример: for
i:=1 to
10 do
k:=k+1;
б) for
<счетчик> := <начальное значение> downto
<конечное значение> do
<оператор>;
Пример: for
i:=10 downto
1 do
k:=k*i;
В этих операторах счетчик цикла i имеет целый тип, и если не задан шаг, то увеличивается на 1 автоматически (случай а) или уменьшается (случай б). В случае, когда значение счетчика цикла достигает конечного значения, выполнение тела цикла прекращается. Если начальное значение изначально больше конечного, цикл не выполнится ни разу.
После оператора do выполняется только 1 оператор. Если необ-ходимо выполнить 2 и более, используют операторные скобки begin … end.
3.2 Цикл с предусловием
Цикл с предусловием используется, если число повторений тела цикла неизвестно, а определяется только результатами вычислений.
Структура оператора:
while
<условие> do
<оператор>;
Например, while
x<0 do
х:=х+2;
Здесь <условие> - выражение логического типа, <оператор> - выполняемый оператор. Цикл работает следующим образом: сначала вычисляется логическое выражение <условие>; если оно имеет значение true, то выполняется соответствующий оператор, если - false, то происходит выход из цикла. Если <условие> с самого начала имеет значение false, то тело цикла не выполнится ни разу. В теле цикла отсутствует счетчик, следовательно, должен стоять оператор, производящий изменение данного условия.
После оператора do выполняется только 1 оператор. Если необ-ходимо выполнить 2 и более, используют операторные скобки begin … end.
3.3 Цикл с постусловием
Цикл с постусловием используется, если число повторений тела цикла неизвестно, а определяется только результатами вычислений.
Структура оператора:
repeat
<условие> until
<условие>;
Например, repeat
x:=x+2 until
x>=0;
Здесь <тело цикла> - набор произвольных операторов, <условие> - выражение логического типа.
Цикл работает так: сначала выполняются операторы в теле цикла, затем проверяется <условие>. Если <условие> имеет значение false, то цикл повторяется, в противном случае цикл завершается. Таким образом, тело цикла выполняется хотя бы один раз.
Если операторов в теле цикла несколько, то прибегать к использованию составного оператора нет необходимости, поскольку они и так ограничены служебными словами repeat … until.
В теле цикла отсутствует счетчик, следовательно, должен стоять оператор, производящий изменение данного условия.
3.4 Примеры решения задач
Пример 1.
Проверить, является ли целое число простым.
Решение
:
uses crt;
var n,i:integer;
begin
readln(n);
for i:=2 to n-1 do
if n mod i = 0 then begin
writeln(n,'не простое'); readkey; halt; end;
writeln (n,'простое');
readkey;
end.
В примере использована стандартная процедура halt, которая останавливает выполнение программы, будучи вызвана в любом месте программы.
Пример 2.
Написать программу, которая определяет максимальное число из введенной последовательности положительных чисел. Завершение ввода – 0.
Решение
:
uses crt;
var a,max:integer;
begin
max:=0;
repeat
writeln('введите число');
readln(a);
if a>max then max:=a
until a=0;
writeln('max=',max);
readkey;
end.
Пример 3.
Написать программу, которая позволяет найти наименьшее общее кратное двух целых чисел.
Решение
:
var nok,n1,n2:byte; i:word;
begin
writeln('введите два числа');
readln(n1,n2);
nok:=1;
for i:=n1*n2 downto 2 do
if (n1 mod i=0) and (n2 mod i=0) then nok:=i;
write('NOK -', nok);
readkey;
end.
Пример 4.
Дано натуральное число n. Подсчитайте количество цифр данного числа.
Решение:
Подсчет количества цифр начнем с последней цифры числа. Увеличим счетчик цифр на единицу. Число уменьшим в 10 раз (тем самым мы избавляемся от последней цифры числа). Далее с получившимся числом проделаем ту же последовательность действий, пока число не станет равным нулю.
uses crt;
var m,n:longint; k:integer;
begin
writeln('Введите целое число');
readln(n);
while n<>0 do
begin
inc(k);
n:=n div 10;
end;
writeln('B числе',n, '-',k,'цифр!');
readkey;
end.
Пример 5.
Дано число n. Создать его «перевертыш» и определить, равно ли число перевертыш исходному числу (число 1234 есть перевертыш числа 4321).
Решение
:
uses crt;
var n,m,a,i:integer;
begin
writeln('введите целое число, не большее 9999');
readln(n);
m:=n;a:=0;
{создание перевертыша}
for i:=l to 4 do {так как число четырехзначное}
begin
a:=a*10+m mod 10; m:=m div 10;
end;
if a=n then writeln('ДА!') else writeln('НЕТ!');
readkey;
end.
Пример 6.
Дано х, принадлежащее интервалу от -1 до 1. Составьте программу вычисления суммы ряда с заданной точностью e. Нужная точность считается полученной, если очередное слагаемое оказалось по модулю меньше, чем данное малое положительное число e (это и все последующие слагаемые учитывать не надо).
Решение
:
uses crt;
var x,st,sl,у,е:real; n,z:integer;
begin
write('Введите х, принадлежащее (-1,1)');
readln(x);
write('Введите погрешность вычисления');
readln(e);
y:=0; n:=l; z:=l; st:=x; sl:=x;
repeat
inc(y,z*sl);
inc (n);
z:=-z;
st:=st*x;
sl:=st/n;
until sl<e;
writeln(y);
readkey;
end.
3.5 Задачи для самостоятельного решения
1. Составьте программу, выводящую на экран квадраты чисел от 10 до 20. Составьте программу, которая вычисляет сумму чисел от 1 до 100.
2. Даны натуральные числа n и m. Получить все меньшие n натуральные числа, квадрат суммы цифр которых равен m.
3. С клавиатуры вводятся N чисел. Составьте программу, которая определяет количество отрицательных, количество положительных и количество нулей среди введенных чисел. Значение N вводится с клавиатуры.
4. В сберкассу на трехпроцентный вклад положили S рублей. Какой станет сумма вклада через N лет?
5. Посчитать сумму ряда для заданного значения x с заданной пользователем точностью. Определить количество слага
6. Даны натуральные числа от 20 до 50. Напечатать те из них, которые делятся на 3, но не делятся на 5.
7. Даны натуральные числа от 35 до 87. Найти и напечатать те из них, которые при делении на 7 дают остаток 1, 2 или 5.
8. Даны натуральные числа от 1 до 50. Найти сумму тех из них, которые делятся на 5 или на 7.
9. Посчитать сумму ряда для заданного значения x с заданной пользователем точностью. Определить количество слагаемых.
10. Ввести с клавиатуры 10 чисел – положительных и отрицательных. Заменить все отрицательные числа их модулями и напечатать все полученные 10 чисел.
11. Напечатать те из двузначных чисел, которые делятся на 4, но не делятся на 6.
12. Найти произведение двузначных нечетных чисел, кратных 13.
13. Найти сумму чисел от 100 до 200, кратных 17.
14. Ввести с клавиатуры 10 чисел. Если квадрат числа меньше 100, напечатать число и его квадрат.
15. Составьте программу, которая вычисляет сумму квадратов чисел от 1 до введенного вами целого числа n.
16. Дано натуральное число n. Получить наименьшее число вида 2k
, превосходящее n.
17. Посчитать сумму ряда для заданного значения x с заданной пользователем точностью. Определить количество слагаемых.
18. Даны натуральные числа х и y, не равные нулю. Найти их наибольший общий делитель d и такие целые q w, что d=qx+wy.
19. Найти натуральное число от 1 до 10000 с максимальной суммой делителей.
20. Дано натуральное n. Вычислить: 1/22
+ 1/42
+ ... + 1/(2n)n
.
21. Дано натуральное n. Вычислить: 1/11
+ 1/22
+ ... + 1/nn
.
22. Посчитать сумму ряда для заданного значения x с заданной пользователем точностью. Определить количество слагаемых.
23. Даны действительное a и натуральное n. Вычислить a!
24. Вычислить: 1 + 1/2 + 1/3 +1/4 + … + 1/n.
25. Вычислить: 1 + 2 + 4 + 8 + … + 210
.
26. Вычислить: (1 + 2)(1 + 2 + 3)…(1 + 2 + … + 10).
27. Даны целые числа p и q. Получить все делители числа q, взаимно простые с p.
28. Дано действительное a и натуральное n. Вычислить: 1/a2
+
1/a4
+ …
+ 1/
a2
n
.
29. Вычислить: sinx + sin2
x + … + sinn
x.
30. Вычислить: sinx + sinx2
+ … + sinxn
.
31. Составьте программу вычисления суммы всех двузначных чисел.
32. Дано натуральное n. Получить последовательность b1
, b2
, ..., bn
, где при i
=1, 2, ..., n значение bi
= i
!
33. Посчитать сумму ряда для заданного значения x с заданной пользователем точностью. Определить количество слагаемых.
34. Напишите программу вычисления среднего геометрического модулей двух введенных с клавиатуры целых чисел. Программа должна использовать цикл while … do. Условие выхода из цикла – значение числа, равное 999.
35. Напишите программу, которая определит первое отрицательное число последовательности: y = sin(i
/100), i
= 1, 2, 3… .
36. Дано действительное число А, большее 1. Найти среди чисел 1, 1+1/2, 1+1/2+1/3, ... первое, большее А и его номер.
37. Составить программу для вычисления числа е (экспоненты) с точностью до 0,0001 по формуле 1 + 1/1! + 1/2! + 1/3! + ... .
38. С клавиатуры вводятся числа и последовательно суммируются. Найти количество введенных чисел, когда их сумма превысила 100.
39. Составьте программу вычисления степени числа a с натуральным показателем n. (Записать варианты программы с разными видами циклов while, repeat, for.)
40. Даны два целых числа A и B (A < B). Вывести все целые числа, расположенные между данными числами (не включая сами эти числа), в порядке их убывания, а также количество N этих чисел.
41. Составьте программу получения в порядке убывания всех делителей данного числа.
42. Дано действительное число b>0. Последовательность a1
, a2
,… образована по следующему закону: a1
=1, a2
=2a1
+1, …, ai
+1
=2ai
+1 (i
= 2, 3,…). Требуется получить все a1
, a2
,…, меньшие или равные b.
43. Даны натуральное число n и действительное x. Вычислить: x1
/1! + x2
/2! + ... + xn
/n!.
44. Найти наибольшее и наименьшее значение функции y=3x2
+x–4, если на заданном интервале [a, b] x изменяется с шагом 0,1.
45. Дано целое число N (N> 0). Если N – нечетное, то вывести произведение 1·3·...·N; если N – четное, то вывести произведение 2·4·...·N. Чтобы избежать целочисленного переполнения, вычислять это произведение с помощью вещественной переменной и выводить его как вещественное число.
46. Найти сумму ряда . Суммировать до тех пор, пока члены ряда не станут меньше некоторой заданной величины Е.
47. Найти произведение ряда . Сом-ножители брать с точностью eps.
48. Найти сумму натуральных чисел, предшествующих заданному числу а, введенному с клавиатуры.
49. Составить программу, определяющую, является ли данное число N простым.
50. Найти все двузначные числа, сумма квадратов цифр которых делится на 13.
51. Составить программу вывода всех трехзначных чисел, сумма цифр которого равна данному натуральному числу.
52. Найти первые сорок чисел Фибоначчи.
53. Найти первое число Фибоначчи, большее заданного числа М (М>1). Вычислить сумму всех чисел Фибоначчи, которые не превосходят 1000.
4 СТРУКТУРИРОВАННЫЕ ТИПЫ ДАННЫХ
4.1 Основные понятия
В Pascal, кроме простых типов данных (integer, real, char и т.д.), имеются и структурированные типы, в частности массивы.
Массив
(array
, от французского – сплошной) – это область памяти, в которой размещается совокупность конечного числа данных одного типа с одним именем. Каждый элемент такой совокупности обозначается именем массива с индексом (номером элемента в массиве).
Элемент массива
– отдельная переменная, входящая в массив.
Индекс
– это числовая константа или целочисленное арифметическое выражение (частный случай – целочисленная переменная), которым снабжаются элементы массива, чтобы отличать их друг от друга.
Индекс элемента массива
– номер элемента в массиве.
Особенность массивов заключается в том, что все элементы массива являются данными одного типа (возможно и структурированного). При назначении массиву имени соблюдаются те же требования, какие предъявляются к именам переменных простых типов.
В зависимости от количества используемых индексов, массивы могут быть одномерные (строка), двумерные (таблица), трехмерные и т.д.
4.2 Одномерные массивы
В одномерном
массиве для указания местоположения элемента достаточно одного индекса. Размер одномерного массива – количество элементов, которое содержит массив.
Описание массива
можно осуществить несколькими способами:
1) type t=array[1..n] of
тип;
var a:t;
2) var a:array[1..n] of
тип;
Элемент массива обозначается указанием имени массива, за которым в квадратных скобках следует индекс массива. Например, a[1] – первый элемент одномерного массива; а[5] – пятый элемент одномерного массива; a[i] – i-й элемент одномерного массива.
4.3 Двумерные массивы и массивы большей размерности
В двумерном
массиве для указания местоположения элемента необходимы два индекса, для строк и столбцов. Про матрицу, имеющую m строк и n столбцов, говорят, что она имеет размер m×n.
Двумерные массивы иногда называют матрицами. Двумерные массивы могут быть прямоугольными (количество строк и столбцов разное) или квадратными (одинаковое количество строк и столбцов). В двумерных массивах элементы, у которых номер строки совпадает с номером столбца, называются диагональными или элементами главной диагонали.
Описание массива
1) type
t
=
array
[1..
n
,1..
m
]
of
тип;
var a:t;
2) var a:array[1..n, 1..m] of
тип;
В двухмерном массиве первый индекс – номер строки, второй – номер столбца. Обращение к элементам двумерного массива: с[1,5] – пятый элемент первой строки массива; a[i,j] – j-й элемент i-й строки двумерного массива.
При решении задач с использованием двумерных массивов во всех случаях (кроме некоторых частных) организуются вложенные циклы.
Перемещение по строке:
for
i
:=1
to
m
do
{
внешний цикл, изменяется номер строки}
…
for
j
:=1
to
n
do
{внутренний цикл, изменяется номер столбца}
Перемещение по столбцу:
for
j
:=1
to
n
do
{внешний цикл, изменяется номер столбца}
…
for
i
:=1
to
m
do
{внутренний цикл, изменяется номер строки}
4.4 Примеры решения задач
Пример 1.
Заполнить одномерный массив размерностью М (М ввести с клавиатуры) целыми числами от –30 до 39 и выдать на экран. Все отрицательные элементы массива заменить на 0 и выдать массив на экран. Поменять местами второй и предпоследний элементы массива, выдать массив на экран.
Решение
:
uses crt;
const n=100;
type t=array[1..n] of integer;
var a:t; i,r,m:integer;
begin
clrscr;
randomize;
writeln('vvedite N');
readln(m);
for i:=1 to m do
begin
a[i]:=trunc(random(70))-30;
write(a[i]:4);
if a[i]<0 then a[i]:=0;
end;
writeln;
for i:=1 to m do
begin
write(a[i]:4);
end;
r:=a[2]; a[2]:=a[m-1]; a[m-1]:=r;
writeln;
for i:=1 to m do
write(a[i]:4);
readln;
end.
Пример 2.
Дан одномерный массив. Упорядочить массив, удалив нули со сдвигом влево ненулевых элементов.
Решение
:
uses crt;
var b:array[1..20]of integer; i,m,n:byte;
begin
clrscr;
write('введите кол-во элементов массива:');
readln(n);
for i:=1 to n do
begin
write('b[',i,']='); readln(b[i]);
end;
i:=1; m:=0;
while i<=n do
begin
if b[i]=0 then inc(m) else b[i-m]:=b[i];
inc(i);
end;
if n=m then
begin
write('в упорядоченном массиве нет элементов');
readln; halt;
end;
writeln('упорядоченный массив');
for i:=1 to n-m do
write(' ',b[i]);
readln;
end.
Пример 3.
Выполнить транспонирование матрицы. Транспонированная матрица – это матрица, получающаяся из данной (прямоугольной или квадратной) матрицы после замены строк соответствующими столбцами.
Решение
:
uses crt;
const n=8; m=8;
type t=array[1..n,1..m] of integer;
var a:t; i,j:integer;
begin
clrscr;
for i:=1 to n do begin
for j:=1 to m do begin a[i,j]:=random(10);
write (a[i,j]:3);
end;
writeln;
end;
writeln;
for i:=1 to n do begin
for j:=1 to m do begin write (a[j,i]:3); end;
writeln;
end;
readkey;
end.
Пример
4.
Составить программу вычисления произведения двух квадратных целочисленных матриц А и В размером 5´5. Элементы результирующей матрицы С вычисляются по формуле
где n - размерность матриц А и В.
Решение
:
const n=5;
var i,j,k:integer;
a,b,c:array[1..n,1..n] of integer;
begin
randomize;
for i:=1 to n do
for j:=1 to n do
begin
a[i,j]:=random(20);
b[i,j]:=random(15);
end;
for i:=l to n do
for j:=1 to n do begin
c[i,j]:=0;
for k:=l to n do c[i,j]:=c[i,j]+a[i,k]*b[k,j];
end;
for i:=1 to n do begin
for j:=1 to m do
write (a[i,j], ' ');
writeln;
end;
readln;
end.
Пример
5.
В двумерной матрице удалить строку с номером k.
Решение
:
const n=5; m=4;
var i,j,k:integer; a:array[1..n,1..m] of integer;
begin
randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(20);
for i:=1 to n do begin
for j:=1 to m do
write (a[i,j],' ');
writeln;
end;
write('введите номер строки');
readln(k);
for i:=k to n-1 do
for j:=l to m do a[i,j]:=a[i+1,j];
for i:=1 to n-1 do begin
for j:=1 to m do
write (a[i,j], ' ');
writeln;
end;
readln;
end.
Пример
6.
Дан целочисленный вектор положительных элементов. Найти среднее арифметическое его элементов, выяснить, является ли данное натуральное число совершенным (натуральное число называется совершенным, если оно равно сумме своих делителей, исключая само число, например 6=1+2+3).
Решение
:
uses crt;
var i,m,k,sum:longint; s:real;
a:array [1..20] of longint;
b:array [1..50] of longint;
begin
clrscr;
write('введите кол-во элементов:'); readln(m);
for i:=1 to m do
begin
write('a[',i,']='); readln(a[i]); s:=s+a[i];
end;
s:=s/m;
writeln('среднее арифметическое:',s); m:=round(s);
write('при округлении');
if m=1 then begin write('совершенное');
readln;
halt;
end;
sum:=0; k:=1;
for i:=1 to m-1 do if m mod i=0 then
begin
b[k]:=i;inc(k);
end;
for i:=1 to k-1 do sum:=sum+b[i];
if m=sum then write('совершенное')
else write('не совершенное');
readln;
end.
Пример 7.
Дано число a. Выбросить из него все единицы и пятёрки, оставив порядок цифр, например, 527012 преобразуется в 2702. Использовать для задания числа n одномерный массив.
Решение:
uses crt; const n=10;
var b:array[1..n]of string;
a,c:string; i,j,k:integer;
begin
clrscr;
write('введите число'); readln(a);
j:=0;k:=0;c:='';
for i:=1 to length(a)do {просмотр всего массива с первого до конечного элемента}
if (a[i]<>'1')and(a[i]<>'5')then
begin
j:=j+1; k:=k+1;
b[j]:=a[i];
end;
for j:=1 to k do c:=c+b[j];
write('полученное число',c);
readln;
end.
Пример 8.
Перевести число из десятичной в двоичную систему счисления.
Решение
:
uses crt;
var b,c: array [1..10] of longint;
j,k,g,n: longint;
begin
clrscr;
write('введите десятичное число:'); readln(n);
j:=0; k:=0; g:=0;
while n>=15 do
begin
j:=j+1; k:=k+1;
b[j]:=n mod 2;
n:=n div 2;
end;
for j:=1 to k do {соединение и переворот}
g:=g*10+b[k+1-j];
write('полученное число',g);
readln;
end.
4.5 Задачи для самостоятельного решения по теме «Одномерные массивы»
1. Введите с клавиатуры в массив пять целочисленных значений. Выведите их в одну строку через запятую. Получите для массива среднее арифметическое.
2. Введите с клавиатуры пять целочисленных элементов массива X. Выведите на экран значения корней и квадратов каждого из элементов массива.
3. Создайте массив из пяти фамилий и выведите их на экран столбиком, начиная с последней.
4. Ввести с клавиатуры целочисленный массив размерности n (задана константой). Найти второй по величине элемент и его индекс. Вывести на экран найденный элемент, его индекс.
5. Создайте массив А[1..8] с помощью генератора случайных чисел с элементами от –10 до 10 и выведите его на экран. Подсчитайте количество отрицательных элементов массива.
6. Создайте массив А[1..12] с помощью генератора случайных чисел с элементами от –20 до 10 и выведите его на экран. Замените все отрицательные элементы массива числом 0.
7. Создайте целочисленный массив А[1..15] с помощью генератора случайных чисел с элементами от –15 до 30 и выведите его на экран. Определите самый большой элемент массива и его индекс.
8. Ввести с клавиатуры целочисленный массив из n элементов (задано константой). Подсчитать количество чисел, значение которых (x) лежит в заданных пределах L<x<M, где L и M вводятся с клавиатуры. Вывести на экран полученное значение.
9. Ввести с клавиатуры целочисленный массив из n элементов (задано константой). Подсчитать количество чисел, значение которых меньше значений обоих соседних элементов. Вывести на экран полученное значение
10. Ввести с клавиатуры вещественный массив из n элементов (задано константой). Вычислить разность суммы элементов с четными индексами и суммы элементов с нечетными индексами. Вывести на экран полученное значение.
11. Заполнить массив из 15 целочисленных элементов числами 1, 1, 2, 3, 5, 8, … (первые два числа – единицы, каждое последующее равно сумме двух предыдущих). Вывести массив на экран.
12. В одномерном массиве, состоящем из n вещественных элементов, вычислить:
а) сумму отрицательных элементов массива;
б) произведение элементов массива, расположенных между максимальным и минимальным элементами;
в) упорядочить элементы массива по возрастанию.
13. Сформируйте линейный массив вещественных чисел, элементы которого являются расстояниями, пройденными телом при свободном падении на землю за 1, 2, …, 10 с.
14. В одномерном массиве, состоящем из n вещественных элементов, вычислить:
а) количество элементов массива, равных нулю;
б) сумму элементов массива, расположенных после минимального элемента;
в) упорядочить элементы массива по возрастанию модулей.
15. Дан линейный массив целых чисел. Проверьте, является ли он упорядоченным по убыванию.
16. Найти сумму положительных элементов линейного массива целых чисел. Размерность массива – 10. Заполнение массива осуществить с клавиатуры.
17. Найти сумму четных элементов массива целых чисел. Размерность массива – 20. Заполнение массива осуществить случайными числами от 100 до 200.
18. Найти произведение элементов массива целых чисел, которые кратны 7. Размерность массива – 15. Заполнение массива осуществить случайными числами от 10 до 50.
19. Найти сумму элементов массива вещественных чисел, имеющих нечетные номера. Размерность массива – 20. Заполнение массива осуществить случайными числами от 100 до 200.
20. Найти произведение всех элементов массива целых чисел, меньших 0. Размерность массива – 10. Заполнение массива осуществить с клавиатуры.
21. Найти сумму всех элементов массива целых чисел, удовлетворяющих условию: остаток от деления на 3 равен 2. Размерность массива – 20. Заполнение массива осуществить случайными числами от 200 до 300.
22. Найти сумму всех элементов массива вещественных чисел, больших заданного числа. Размерность массива – 20. Заполнение массива осуществить случайными числами от 50 до 100.
23. Найти произведение всех элементов массива вещественных чисел, меньших заданного числа. Размерность массива – 10. Заполнение массива осуществить случайными числами от 50 до 100.
24. Найти произведение элементов массива, кратных 3 и 9. Размерность массива – 10. Заполнение массива осуществить случайными числами от 5 до 500.
25. Найти сумму всех элементов массива целых чисел, которые меньше среднего арифметического элементов массива. Размерность массива – 20. Заполнение массива осуществить случайными числами от 150 до 300.
26. Найти сумму элементов массива целых чисел, которые делятся на 5 и на 8 одновременно. Размерность массива – 30. Заполнение массива осуществить случайными числами от 500 до 1000.
27. Найти произведение элементов линейного массива целых чисел, которые кратны 5. Размерность массива – 10. Заполнение массива осуществить случайными числами от 10 до 100.
28. Ввести с клавиатуры вещественный массив из n элементов (задано константой). Вычислить разность суммы элементов с четными индексами и суммы элементов с нечетными индексами.
29. В одномерном массиве, состоящем из n вещественных элементов, вычислить:
а) количество элементов массива, лежащих в диапазоне от А до В;
б) сумму элементов массива, расположенных после максимального элемента;
в) упорядочить элементы массива по убыванию модулей.
30. Найти количество четных элементов одномерного массива до первого встреченного числа, равного наперед заданному числу а.
31. В одномерном массиве, состоящем из n вещественных элементов, вычислить:
а) произведение положительных элементов массива;
б) сумму элементов массива, расположенных до минимального элемента;
в) упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.
32. Вычислить среднее арифметическое значение тех элементов одномерного массива, которые расположены за первым по порядку минимальным элементом.
33. Вычислить среднее арифметическое значение тех элементов одномерного массива, которые попадают в интервал от –2 до 10.
34. Переменной t присвоить значение истина, если в одномерном массиве имеется хотя бы одно отрицательное и четное число.
35. Вычислить сумму четных элементов одномерного массива до первого встреченного нулевого элемента.
36. Переменной t присвоить значение истина, если максимальный элемент одномерного массива единственный и не превосходит наперед заданного числа а.
37. Подсчитать количество элементов одномерного массива, для которых выполняется неравенство i·i<ai
<i!
38. Заданы два натуральных числа a и b. Переменной w присвоить значение истина, если в одномерном целочисленном массиве имеется хотя бы один элемент, кратный а и не кратный b.
39. Подсчитайте количество элементов одномерного массива, которые совпадают со своим номером и при этом кратны 3.
40. Дан одномерный массив а. Сформировать новый массив, который состоит только из тех элементов массива а, которые превосходят свой номер на 10. Если таких элементов нет, то выдать соответствующее сообщение.
41. Найти наибольший элемент из элементов одномерного массива, имеющих четный номер. Определить, является ли он единственным.
42. Задан массив А[1..20]. Найти произведение всех его ненулевых элементов.
43. Найдите в линейном массиве два элемента, сумма которых максимальна.
44. Введите массив из 20 элементов и определите, есть ли в нем элементы с одинаковыми значениями.
45. Задан список фамилий брокеров товарной биржи из N человек. Обменяйте местами фамилии брокеров: первого и последнего, второго и предпоследнего, третьего от начала и третьего от конца и т.д.
46. Перевести число из двоичной в десятичную систему счисления.
47. В линейном массиве найти максимальный элемент. Вставьте порядковый номер элемента за ним, передвинув все оставшиеся на одну позицию вправо.
48. Дан одномерный массив, состоящий из четного количества элементов. Поменять местами первую и вторую его половины. Вывести исходный и новый массивы.
49. Даны два линейных массива одинаковой размерности. Составить третий массив из произведений элементов первых двух массивов, стоящих на местах с одинаковым индексом.
50. Дан целочисленный линейный массив из 10 элементов. Найдите наименьшее число K элементов, которое нужно исключить из последовательности A[1], A[2], …, A[10], чтобы осталась возрастающая последовательность.
51. Дан одномерный массив целых чисел. Найдите, сколько раз в нем повторяется самое частое число.
52. Дан одномерный массив из 10 целых чисел. Переставить в обратном порядке элементы массива, расположенные между минимальным и максимальным элементами.
53. Дан одномерный массив из n целых чисел. Вставить число 100 после первого отрицательного элемента.
54. Дан одномерный массив из n целых чисел. К четным элементам прибавить величину А, а из элементов с нечетными номерами вычесть величину В.
4.6 Задачи для самостоятельного решения по теме «Двумерные массивы»
1. Дан целочисленный массив X[1..5, 1..4]. Заменить в нем все элементы, меньшие 5 числом 111.
2. Дан целочисленный массив В[1..4, 1..3]. Заменить все его элементы их квадратами.
3. Дан действительный массив А[1..5, 1..3]. Напечатать индексы его отрицательных элементов.
4. Создайте двумерный целочисленный массив А[1..10, 1..7] и найдите сумму всех его элементов, имеющих оба нечетных индекса.
5. Дан целочисленный массив А[1..5, 1..3]. Вывести на экран элементы массива, кратные 5, и их индексы.
6. Введите с клавиатуры целочисленные элементы матрицы 3×3 и вычислите сумму элементов каждого столбца.
7. Дан целочисленный массив В[1..5, 1..5]. Напечатать его левую и правую диагонали.
8. Дан целочисленный массив В[1..5, 1..5]. Найти сумму элементов его правой диагонали и произведение элементов левой диагонали.
9. Дан целочисленный массив В[1..5, 1..5]. Найти наибольший элемент массива и сообщить его расположение относительно левой диагонали.
10. Дан целочисленный массив В[1..5, 1..5]. Найти наименьший элемент массива и сообщить его расположение относительно правой диагонали.
11. Дан целочисленный массив В[1..5, 1..5]. Вычислить сумму элементов этого массива, расположенных выше левой диагонали.
12. Дан целочисленный массив В[1..5, 1..5]. Вычислить произведение элементов этого массива, расположенных ниже левой диагонали.
13. Дан целочисленный массив В[1..5, 1..5]. Найти количество отрицательных элементов этого массива, расположенных ниже левой диагонали.
14. Дан целочисленный массив В[1..5, 1..5]. Найти количество положительных элементов этого массива, расположенных выше левой диагонали.
15. Найти максимальное из чисел, встречающееся в данной матрице более одного раза.
16. Дан массив А[1..3, 1..15]. Известно, что среди его элементов два и только два равны между собой. Напечатать их индексы.
17. Даны целые числа а1
, а2
, а3
. Получить целочисленный массив В[1..3, 1..3], для которого B[i,j]=ai
-3aj
.
18. Даны действительные числа а1
, а2
, …, а10
и b1
, b2
, …, b20
. Получить действительный массив С[1..20, 1..10], для которого .
19. Получить целочисленный массив А[1..10, 1..12], для которого aij
=i+2j.
20. Создайте матрицу 5×5, значение каждого элемента которой равно сумме номера строки и столбца, на пересечении которых он находится, и вычислите сумму элементов каждой строки.
21. Получить действительный массив A[1..7, 1..7], первая строка которого задается формулой a1
j
=2j+3, вторая строка задается формулой , а каждая следующая строка есть сумма двух предыдущих.
22. Дано натуральное число n. Выяснить, сколько положительных элементов содержит массив A[1..n, 1..n], если .
23. Дан целочисленный массив А[1..4, 1..5]. Найти среднее арифметическое каждого из столбцов.
24. Дан действительный массив размерностью n×m, в котором не все элементы равны нулю. Получить новый массив путем деления всех элементов данного массива на его больший по модулю элемент.
25. Дан целочисленный массив А[1..4, 1..5]. Требуется преобразовать матрицу: поэлементно вычесть последнюю строку из всех строк, кроме последней.
26. Составьте программу упорядочения по возрастанию элементов каждой строки двумерного массива C.
27. Составьте программу, упорядочивающую по убыванию элементы каждой строки матрицы размером m×n.
28. Дан целочисленный массив А[1..4, 1..5]. Определить номера тех строк массива, в которых есть хотя бы один элемент, равный 10.
29. Составьте программу, упорядочивающую по возрастанию элементы каждого столбца матрицы размером m×n.
30. Задан массив А[1..5, 1..5]. Получить из него новый массив путем деления элементов каждой из строк первого массива на элемент этой строки, стоящий на левой диагонали.
31. Задан массив А[1..5, 1..6]. Поменять в нем местами первую и последнюю строки.
32. Задан массив А[1..5, 1..6]. Поменять в нем местами первый и последний столбцы.
33. Дана прямоугольная матрица. Найти строку с наибольшей суммой элементов.
34. Дана прямоугольная матрица. Найти столбец с наибольшей суммой элементов.
35. Найти сумму всех четных элементов двумерного массива целых чисел размерности 4×8.
36. Найти сумму всех элементов двумерного массива целых чисел размерности 5×5, расположенных на главной диагонали.
37. Найти номер строки и столбца максимального элемента двумерного массива целых чисел размерности 7×4.
38. Имеется двумерный массив целых чисел размерности 6×5. Найти номер строки, для которой среднеарифметическое значение ее элементов максимально.
39. В двумерном массиве целых чисел размерности 5×9 поменять местами строки и столбцы с одинаковыми номерами.
40. Найти минимальный элемент среди максимальных элементов строк двумерного массива целых чисел. Определить номер строки и столбца такого элемента.
41. Удалить столбец двумерного массива целых чисел, в котором находится максимальный элемент этого массива.
42. Найти все неповторяющиеся элементы двумерного массива целых чисел.
43. Дана целочисленная матрица размера M×N. Найти элемент, являющийся максимальным в своей строке и минимальным в своем столбце. Если такой элемент отсутствует, то вывести 0.
44. В двумерном массиве целых чисел заменить все элементы, меньшие суммы элементов первой строки на эту сумму.
45. Отсортировать строки массива целых чисел по убыванию.
46. Отсортировать нечетные столбцы массива по возрастанию.
47. Дано число k и матрица размера 4×10. Удалить столбец матрицы с номером k.
48. Даны две матрицы. Получите их произведение.
49. Сформируйте и выведите на экран по строкам трехмерный массив целых чисел размером 5×5×5. Найдите максимальный элемент и укажите его положение в массиве.
50. Составьте программу, проверяющую, образуют ли элементы двумерного массива магический квадрат (в магическом квадрате суммы чисел по всем вертикалям, всем горизонталям и двум диагоналям одинаковы).
51. Составьте программу вычисления суммы тех положительных элементов двумерного массива А, которые стоят в строках, не содержащих нулевых элементов.
52. В квадратной таблице обменяйте местами элементы строки и столбца, на пересечении которых находится минимальный из положительных элементов.
53. Создайте двумерный массив целых чисел. Удалите из него строку и столбец, на пересечении которых расположен минимальный элемент. Наименьший элемент каждой строки прямоугольной таблицы, начиная со второй, замените наибольшим элементом предыдущей строки.
5
ПОДПРОГРАММЫ
5.1 Общие понятия
Автономная часть программы, с помощью которой можно производить одни и те же вычисления с разными исходными данными и в различных местах программы, многократно называется подпрограммой. Преимущества использования подпрограмм - уменьшение объема программы, сокращение времени на отладку.
В Pascal существует 2 вида подпрограмм: процедуры и функции. В отличие от стандартных процедур и функций, описанных в специальных модулях, все пользовательские подпрограммы должны быть описаны в начале программы (до начала тела программы).
Функция
Function
Sum_v
(var a:vector;n:byte):
integer
;
Процедура
Procedure Sum_vec
(a:vector;n:byte;
var
sum:integer);
Основные отличия между процедурами и функциями приведены в таблице 5.
Таблица 5 - Основные отличия между процедурами и функциями
Функция |
Процедура |
Возвращает одно значение, которое связывается с именем функции, поэтому в теле подпрограммы-функции обязательно должно быть присваивание имени функции некоторого значения, чтобы вернуть его в основную программу |
Может возвращать любое количество значений, которые связываются с именем процедуры |
Продолжение таблицы 5
Функция
|
Процедура
|
Может использоваться в выражениях как обычная переменная, например, у:=х+ln(х) |
Нельзя использовать в выражениях, например, нельзя написать у:=x+write (х) |
Выполнение подпрограммы начинается при обращении к ней из основной программы. Процесс обращения называется вызовом процедуры
или функции.
Когда в теле основной программы встречается оператор вызова подпрограммы, выполнение инструкций основной программы приостанавливается и выполняются инструкции подпрограммы. После выполнения всех инструкций подпрограммы продолжается выполнение инструкций основной программы с оператора, следующего за обращением к процедуре или функции.
5.2 Формальные и фактические параметры
Параметры (переменные), определяемые при описании процедуры или функции, называются формальными
.
Параметры (переменные), задаваемые при вызове подпрограммы, называются фактическими
.
Замена формальных параметров фактическими делается так: на место первого формального параметра подставляется первый фактический параметр, на место второго формального параметра - второй фактический и т.д. Поэтому количество и типы формальных и фактических параметров должны совпадать.
Формальные параметры, если они приводятся при описании процедуры, можно разделить на несколько категорий. Мы будем рассматривать только две:
- параметры-значения;
- параметры-переменные.
Основные отличия параметров-значений и параметров-перемен-ных приведены в таблице 6.
Таблица 6 - Основные отличия параметров-значений и параметров-переменных
Параметры-значения |
Параметры-переменные |
Признаком является отсутствие служебного слова var |
Признаком является наличие служебного слова var |
Передаются в процедуру через стек в виде копии их значений. Процедура не может менять параметры х и у вне процедуры |
Передаются через стек, но напрямую. Эти параметры процедура может изменять в основной программе |
В качестве фактических параметров могут выступать любые выражения
|
В качестве фактических параметров должны использоваться только переменные
|
5.3 Локальные и глобальные параметры
Переменные и константы, описанные внутри подпрограммы, называются локальными
. Для основной программы они не существуют. Переменные и константы, определенные в разделе описаний основной программы, называются глобальными
. Любой подпрограмме доступны все глобальные параметры, за исключением тех, с чьими именами совпадают имена ее параметров или локальных переменных.
В заголовках процедур и функций в списке формальных параметров необходимо указывать их тип. Правилами языка Pascal определено, что можно использовать либо стандартные типы (определенными разработчиками языка), либо так называемые предопределенные типы (определённые программистом ранее). Вводить новый тип в списке формальных параметров не допускается.
5.4 Рекурсия
Язык Pascal допускает, чтобы процедуры или функции были рекурсивными.
Рекурсия
- это такой способ организации вычислительного процесса, при котором процедура или функция в собственном разделе операторов обращается сама к себе. В ряде случаев этот прием позволяет существенно повысить эффективность программирования.
Рекурсивная форма организации алгоритма обычно выглядит изящнее итерационной и дает более компактный текст программы, но при выполнении, как правило, медленнее и может вызвать переполнение стека
.
Стек
– это специальная область памяти (конечное число ячеек), где сохраняется адрес возврата
(адрес вызывающей программы, используется для передачи управления вызывающей программе). Стеки используются также для передачи параметров в процедуры (для обычных параметров в стек заносятся их значения, для параметров-переменных – их адреса), размер стека ограничен. Стек можно представить в виде стопки книг. Если стопка достигла максимального размера, то при добавлении новой книги сверху – нижняя книга должна быть убрана.
Нужно обязательно отслеживать в программе наполнение стека, то есть не допускать зацикливания рекурсии.
5.5 Примеры решения задач
Пример 1.
Вычислить хn
, используя рекурсивную функцию.
Решение
:
uses crt;
var x1,x2:word;
i,m:byte; s:longint;
function xn(x,n:byte):longint;
begin
if n=0 then xn:=1
else xn:=xn(x,n-1)*x;
end;
begin
clrscr;
write('x,n='); readln(x1,m);
writeln('xn-',xn(x1,m));
readkey;
end.
Пример 2.
Написать рекурсивную функцию вычисления суммы 1 + 2 + 3 + 4 + 5 + … + N.
Решение
:
uses crt;
var m:word;
funnction sum(n:word):longint;
begin
if n=1 then sum:=1 else sum:=sum(n-1)+n;
end;
begin
write('n=');
readln(m);
writeln('сумма -',sum(m));
readkey;
end.
Пример 3.
Написать функцию, подсчитывающую количество цифр числа. Используя ее, определить, в каком из двух данных чисел больше цифр.
Решение
:
uses crt;
var nl,n2:longint;
kl,k2:byte;
function Quantity(x:longint):byte;
var k:byte;
begin
while x<>0 do
begin
inc(k); x:=x div 10; end;
Quantity:=k;
end;
begin
writeln ('Введите два числа’);
readln(nl,n2);
kl:=Quantity(nl); {количество цифр первого числа}
k2:=Quantity(n2);{количество цифр второго числа}
if kl=k2 then writeln('Одинаковое количество цифр') else if kl>k2 then writeln('В первом числе цифр больше') else writeln('Во втором числе цифр больше');
readkey;
end.
Пример 4.
Дана точка. Определить, лежит ли она в кольце.
Решение
:
uses crt;
var x,y,r1,r2,a,b:real;
procedure haltpr;
begin
writeln('Неверные данные');
write('r1<r2');
readln; halt;
end;
begin
clrscr;
write('координаты центра окр. a=');readln(a);
write('координаты центра окр. b=');readln(b);
write('x='); readln(x);
write('y='); readln(y);
write('r1=');readln(r1);
write('r2=');readln(r2);
if r1>r2 then haltpr;
if (sqr(x-a)+sqr(y-b)<sqr(r2))and(sqr(x-)+ sqr(y-b)>sqr(r1))
then write('лежит')
else write('не лежит');
readln;
end.
Пример 5.
Определить, сократимая ли дробь a/b (дробь a/b несократимая, если НОД=1).
Решение
:
uses crt;
var m,n,ot:longint;
procedure nod(a,b:longint; var n:longint);
begin
while a<>b do
if a>b then a:=a-b
else b:=b-a;
n:=a;
end;
begin
clrscr;
write('числитель');
readln(m);
write('знаменатель');
readln(n);
nod(m,n,ot);
if ot=1
then write('несократимая')
else write('сократимая');
readln;
end.
5.6 Задания для самостоятельного решения
1. Напишите программу, состоящую из трех процедур и основной программы. Первая процедура организует ввод двух целых чисел x и y, вторая проверяет их сумму, третья выводит результат. Используйте эти процедуры в основной программе. Опишите x и y как глобальные переменные.
2. Напишите программу вычисления площади поверхности и длины экватора на основе известного радиуса планет солнечной системы. Форму планет будем считать шаром. Вычисление площади поверхности и длины экватора оформите отдельными функциями.
3. Напишите программу поиска большего из четырех чисел с использованием подпрограммы поиска большего из двух чисел.
4. Даны координаты вершин многоугольника (x1, y1, x2, y2,…, x10, y10). Напишите программу для вычисления его периметра (вычисление расстояния между вершинами оформить подпрограммой).
5. Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала.
6. Напишите программу для вычисления числа сочетаний из N по M. Число сочетаний определяется по формуле , где N – количество элементов перебора. Используйте подпрограмму вычисления факториала.
7. Напишите программу для определения НОД трех натуральных чисел.
8. Даны действительные числа s, t. Составить программу вычисления выражения f(t, -2s, 1.17)+f(2.2, t, s-t), где
9. Даны натуральные m и n (m<n). Составить программу, сокращающую дробь m/n.
10. Напишите программу вычисления суммы квадратов простых чисел, лежащих в интервале (M, N).
11. Напишите программу подсчета числа четных цифр, используемых в записи N-значного числа M.
12. Составьте программу вычисления суммы трехзначных чисел, в десятичной записи которых нет четных цифр.
13. Составьте программу вывода на экран всех натуральных чисел, не превосходящих N и делящихся на каждую из своих цифр.
14. Составьте программу нахождения наименьшего натурального N-значного числа X (X>=10), равного утроенному произведению своих цифр.
15. Составьте программу подсчета числа всех натуральных чисел, меньших М, квадрат суммы цифр которых равен X.
16. Составьте программу, вычисляющую значение функции:
, где .
Для вычисления функции f(x, n) используйте подпрограмму-функцию. Значения аргумента x введите с клавиатуры.
17. Составьте программу, вычисляющую значение функции:
, где
Для вычисления функции f(i) используйте подпрограмму-функцию. Значения аргумента n введите с клавиатуры.
18. Составьте программу, вычисляющую значение функции:
, где
Для вычисления функции f(t) используйте подпрограмму-функцию. Значения аргумента x введите с клавиатуры. После ввода данных программа должна проверять условие существования функции z(x).
19. Составьте программу, вычисляющую значение функции:
, где
Для вычисления функции f(x) используйте подпрограмму-функцию. Значения аргументов a и b введите с клавиатуры. После ввода данных программа должна проверять условие существования функции z(a, b).
20. Напишите функцию для определения номера первого встретившегося элемента в одномерном целочисленном массиве произвольной длины, значение которого совпадает с заданным. При отсутствии такого элемента функция должна возвращать значение -1.
21. Составьте программу, вычисляющую значение функции:
.
Для вычисления факториала используйте подпрограмму-функ-цию. Значения аргументов x, y и z введите с клавиатуры.
22. Напишите функцию для определения наибольшего общего делителя (НОД) двух целых чисел.
23. Составьте программу, вычисляющую значение функции:
Для вычисления факториала используйте подпрограмму-функ-цию. Значения аргументов m и n введите с клавиатуры.
24. Составьте программу, вычисляющую значение функции:
, где
Для вычисления функции f(t) используйте подпрограмму-функцию. Значения аргумента x введите с клавиатуры. После ввода данных программа должна проверять условие существования функции y(x).
25. Напишите функции для вычисления суммы положительных элементов одномерных массивов произвольной длины.
26. Напишите функции для вычисления суммы отрицательных элементов одномерных массивов произвольной длины.
27. Составьте программу, вычисляющую следующее выражение:
A = 2B + 5(C+D),
где B, C и D – квадратные матрицы размером (n´n). Ввод элементов матриц, вывод матриц на экран, вычисление суммы двух матриц и умножение матрицы на константу оформите в виде процедур.
28. Составьте программу, вычисляющую следующее выражение:
A = 7(B+С) + 5(C+D),
где B, C и D – квадратные матрицы размером (n´n). Ввод и вывод элементов матриц, а также вычисление суммы двух матриц и умножение матрицы на константу оформите в виде процедур.
29. Составьте программу, вычисляющую следующее выражение:
A = (B + C) - (C + D),
где B, C и D - квадратные матрицы размером (n´n). Ввод элементов матриц, вывод матриц на экран и вычисление суммы и разности двух матриц оформите в виде процедур.
30. Вычислить , где М1, М2, М3 – максимальные элементы массивов Х(30), Y(15), Z(20).
31. Пятиугольник задан координатами своих вершин. Найти его площадь, используя для вычисления площадей треугольников формулу Герона:
,
где.
32. Четырехугольник задан координатами своих вершин. Найти его периметр, используя формулу вычисления расстояния между двумя точками.
33. Даны три одномерных массива А(15), В(10), С(20). Вывести на экран их значения в порядке возрастания.
34. Вычислить , где m1 и m2 – наименьшие элементы массивов Х(20) и Х(35).
35. Вычислить среднее арифметическое значение положительных элементов для массивов Р(к), L(m), Q(n).
36. Сформировать массив А(n), где а1=1!, а2=2!, ..., аn=n!.
37. Даны две квадратных матрицы Х(5,5) и Y(7,7). Определить сумму элементов, расположенных на главных диагоналях.
38. Получить, используя подпрограммы нахождения максимума и минимума:
max(a-b, a, a+b) + min(a, b+c, a-c),
где а, b, с - некоторые переменные, введенные с клавиатуры.
39. Описать процедуру, находящую номера минимального и максимального элементов массива A из N вещественных чисел. С помощью этой процедуры найти номера минимальных и максимальных элементов трех одномерных массивов.
40. Составить программу, содержащую процедуру для вычисления функции:
41. Даны действительные числа s, t. Получить
где
42. Даны действительные числа s, t. Получить
где
43. Даны действительные числа a, b. Получить
.
44. Составить подпрограмму вычисления сумм для с шагом . Значения a, b, n передать в качестве параметров.
45. Вычислить значения функции с заданной точностью для каждого Считать, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем e (это и все последующие слагаемые можно не учитывать).
46. Дано действительное число y. Получить
, где
47. Даны действительные числа s, t. Получить
где
48. Построить таблицу значений функции , её производной , второй производной на заданном интервале с шагом h.
49. Построить подпрограмму-функцию, в которой вычисляются варианты значений функции в зависимости от знака и . Меняя входные параметры-значения подпрограммы-функции вычислить значение суммы z.
50. Используя подпрограмму вычисления факториала найти среди трехзначных чисел такие, у которых сумма факториалов его цифр равнялась бы самому числу.
51. Написать функцию, подсчитывающую количество цифр числа. Используя ее, определить, в каком из двух данных чисел больше цифр.
52. Написать программу перевода натурального числа из десятичной системы счисления в двоичную.
53. Среди чисел из интервала от А до В найти все простые.
54. Определить, является ли число автоморфным, то есть квадрат этого числа заканчивается этим же числом, например, число 6, так как его квадрат 36 заканчивается на 6, или число 25, так как его квадрат 625 заканчивается на 5.
ЛИТЕРАТУРА
1. Алексеев, Е.Р. Турбо Паскаль 7.0: учебное пособие / Е.Р. Алексеев, О.В. Чеснокова, В.Н. Павлыш, Л.В. Славинская.- 2-е изд. - М.: НТ-Пресс, 2006.
2. Архангельский, А.Я. Язык Pascal и основы программирования в Delphi / А.Я. Архангельский. - М.: ООО «Бином-Пресс», 2004.
3. Культин, Н.Б. Турбо Паскаль в задачах и примерах / Н.Б. Культин. - СПб.: BHV, 2000.
4. Немнюгин, С.А. Turbo Pascal в задачах и примерах: учебник / С.А. Немнюгин. - 2-е изд. - СПб.: Питер, 2003.
5. Лисица, В.Д. Начальный курс программирования на языке Turbo Pascal: учебное пособие / В.Д. Лисица, Г.И. Севодина, В.В. Царегородцева. - Бийск: Изд-во Алт. гос. техн. ун-та, 2003.
6. Лисица, В.Д. Основы программирования в среде Turbo Pascal 7.0: электронный учебник / В.Д. Лисица, Г.И. Севодина - Режим доступа: http://www.bti.secna.ru.
7. Емелина, Е.И. Основы программирования на языке Паскаль / Е.И. Емелина. - М.: Финансы и статистика, 1997.
8. Могилев, А.В. Практикум по информатике: учебное пособие / А.В. Могилев, Н.И. Пак, Е.К. Хеннер. – М.: Академия, 2005.
9. Рапаков, Г.Г. Программирование на языке Pascal: учебное пособие / Г.Г. Рапаков, С.Ю. Ржеуцкая. - СПб.: БХВ-Санкт-Петербург, 2005.
10. Программирование на языке Паскаль: задачник: учебное пособие / под ред. О.Ф. Усковой. - СПб.: Питер, 2002.
11. Фаронов, В.В. Турбо Паскаль 7.0. Начальный курс: учебное пособие / В.В. Фаронов. - 7-е изд., перераб. - М.: Нолидж, 2000.
12. Турбо Паскаль 7.0: учебное издание / под ред. А. Колесникова, В. Гинзбурга. - 2-е изд. - Киев: Торг.-издат. бюро BHV, 1997.
13. Алексеев, Е.Р. Турбо Паскаль 7.0: учебное пособие / Е.Р. Алексеев, О.В. Чеснокова, В.Н. Павлыш, Л.В. Славинская. - 2-е изд. - М.: НТ-Пресс, 2006.
14. Абрамов, С.А. Начала программирования на языке Паскаль: учебник / С.А. Абрамов, Е.В. Зима. - М.: Наука, 1987.
15. Васюкова, Н.Д. Практикум по основам программирования. Язык Паскаль: учебное пособие / Н.Д. Васюкова, В.В. Тюляева. - М.: Выcшая школа, 1991.
Учебное издание
Трутнева
Лариса Ивановна
Павлова
Наталья Валерьевна
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PASCAL
Методические рекомендации по выполнению расчетного задания
по курсу «Информатика» для студентов специальностей 200106
«Информационно-измерительная техника и технологии»,
260601 «Машины и аппараты пищевых производств» и «Информатика и программирование» для студентов специальности
080801 «Прикладная информатика в экономике»
Редактор Соловьёва С.В.
Подписано в печать 24.01.2009. Формат 60´84 1/16
Усл. п. л. - 3,6. Уч.-изд. л. - 3,9
Печать - ризография, множительно-копировальный аппарат «RISO TR-1510»
Тираж 70 экз. Заказ 2009-05
Издательство Алтайского государственного
технического университета
656038, г. Барнаул, пр-т Ленина, 46
Оригинал-макет подготовлен ИИО БТИ АлтГТУ
Отпечатано в ИИО БТИ АлтГТУ
659305, г. Бийск, ул. Трофимова, 27
Архив создан Бухвиной А.А
|