Читайте также: |
|
22. Составить программу, позволяющую получить словесное описание школьных отметок (1 – плохо, 2 – неудовлетворительно и т.д.)
23. Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень – отрицательные.
24. Даны целые числа m и n. Если числа не равны, то заменить меньшее число большим, оставив большее неизменным, а если равны, то заменить оба числа нулями.
25. Дано трехзначное число N. Проверить, будет ли сумма его цифр четным числом.
26. Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день", или "Выходной".
27. Подсчитать количество целых чисел среди чисел a, b, c.
28. Составить программу-результат гадания на ромашке – «любит – не любит», взяв за исходное данное количество лепестков.
29. Определить правильность даты, введенной с клавиатуры (число – от 1 до 31, месяц – от 1 до 12).
30. Составить программу, которая по заданным году и номеру месяца определяет количество дней в этом месяце.
Уровень B
31. Даны три стороны одного и три стороны другого треугольников. Определить, имеют ли эти треугольники равные площади.
32. Даны координаты трех вершин треугольника. Определить, будет ли этот треугольник равносторонним.
33. Написать программу решения квадратного уравнения. Программа должна проверять правильность исходных данных и в случае, когда коэффициент при второй степени неизвестного равен нулю, выводить соответствующее сообщение.
34. Написать программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до 999), обозначающего денежную единицу, дописывает слово "рубль" в правильной форме. Например, 12 рублей, 21 рубль и т. д.
35. Заданы размеры a, b прямоугольного отверстия и размеры x, y, z кирпича. Определить, пройдет ли кирпич через отверстие.
36. Написать программу, которая вычисляет дату следующего дня.
Уровень C
37. Написать программу решения системы линейных уравнений:
a1x + b1y = c1
a2x + b2y = c2
38. Даны три положительных числа. Определить, можно ли построить треугольник с длинами сторон, равным этим числам. Если можно, ответить на вопрос, является ли он остроугольным.
39. Пусть элементами равностороннего треугольника являются 1) сторона; 2) площадь; 3) высота; 4) радиус вписанной окружности; 5) радиус описанной окружности. По одному из элементов вычислить остальные.
40. Найти координаты точек пересечения прямой y = kx + m и окружности радиусом R с центром в начале координат.
8. Циклические алгоритмы
Цикл – многократное повторение последовательности действий по некоторому условию Известны три типа циклических алгоритмических структур:
· Цикл с предусловием;
· Цикл с постусловием;
· Цикл с параметром.
В Паскале существуют операторы, реализующие все три типа циклов.
a) Цикл с предусловием
Программа повторяет заданную последовательность действий, пока условие выполняется, и выходит из цикла после того, как условие становится ложным. Как видно из названия цикла, истинность условия проверяется до того, как тело цикла выполнится хотя бы один раз. Таким образом, алгоритм цикла с предусловием выглядит следующим образом:
начало цикла
Пока <условие>, повторяй
<действие 1>;
<действие 2>;
…
<действие n >;
конец цикла;
На языке Паскаль эта структура реализуется оператором While:
While <условие> do <действие>;
Так же, как и в ветвящихся конструкциях, если необходимо произвести несколько действий, используются служебные слова begin и end.
While <условие> do begin
<действие 1>;
<действие 2>;
…
<действие n >;
end;
Пример
Одноклеточная амеба каждые 3 часа делится на 2 клетки. Сколько амеб будет через n часов?
Алгоритм амеба;
Целые: a,t,n;
Начало
Ввести: n;
a:=1;
t:=0;
Начало цикла
Пока t<=n повторяй
a:=2*a;
t:=t+3;
Конец цикла;
Вывести: ‘через ‘,n,’ часов будет ‘,a,’ амеб’;
Конец.
Program ameba;
uses crt;
Var a,t,n: integer;
begin
clrscr;
a:=1;
t:=0;
writeln(‘Введите время (в часах)’);
read(n);
while t<=n do begin
a:=2*a;
t:=t+3;
end;
writeln(‘через ‘,n,’ часов будет ‘,a,’ амеб’);
end.
b) Цикл с постусловием
Инструкции цикла с постусловием обязательно выполняются один раз, и только после этого проверяется условие. Если оно ложно, то инструкции цикла выполняются еще раз, и так продолжается до тех пор, пока условие не станет истинным. Таким образом, в этой конструкции записывается условие завершения цикла.
Повторяй <действие 1>;
<действие 2>;
…
<действие n >
Пока не <условие>;
Аналогичным образом эта структура записывается на языке Паскаль:
Repeat <действие 1>;
<действие 2>;
…
<действие n >
until <условие>;
Использование служебных слов begin и end для ограничения составного тела цикла не требуется.
Пример
Одноклеточная амеба каждые 3 часа делится на 2 клетки. Сколько амеб будет через n часов?
Алгоритм амеба;
Целые: a,t,n;
Начало
Ввести: n;
a:=1;
t:=0;
Повторяй
a:=2*a;
t:=t+3
Пока не t>n;
Вывести: ‘через ‘,n,’ часов будет ‘,a,’ амеб’;
Конец.
Program ameba;
uses crt;
Var a,t,n: integer;
begin
clrscr;
a:=1;
t:=0;
writeln(‘Введите время (в часах)’);
read(n);
repeat
a:=2*a;
t:=t+3;
until t>n;
writeln(‘через ‘,n,’ часов будет ‘,a,’ амеб’);
end.
c) Цикл с параметром
Цикл с параметром удобно использовать, когда точно известно, сколько раз требуется произвести действия.
Для осуществления цикла необходима переменная типа integer (как правило, обозначается буквой i), которая исполняет роль счетчика, или параметра, и изменяется при каждом повторении тела цикла. В зависимости от того, как меняется значение параметра цикла, различают два вида циклов с параметром: прямой и обратный.
· Прямой цикл с параметром
Особенность этого вида в том, что при каждом повторении значение параметра увеличивается ровно на единицу.
Для i:= Kначальное до Kконечное повторяй
начало цикла
<действие 1>;
<действие 2>;
…
<действие n >;
конец цикла
Kначальное и Kконечное – некоторые значения целого типа, определяемые только один раз в начале цикла, причем Kначальное < Kконечное; параметр цикла принимает поочередно все целые значения, находящиеся в промежутке от Kначальное до Kконечное включительно.
В Паскале это записывается таким образом:
for i:= Kначальное to Kконечное do begin
<действие 1>;
<действие 2>;
…
<действие n >;
end;
Пример
Найдем сумму чисел от 1 до n, где n – натуральное число.
Алгоритм: числа;
Целые: i,n,s;
Начало
Ввести: n;
Для i:=1 до n повторяй s:=s+i;
Вывести: s;
Конец.
Program Chisla;
uses crt;
var i,n: integer; s: longint;
begin
clrscr;
Writeln(‘Введите натуральное число’);
read(n);
for i:=1 to n do s:=s+i;
writeln(‘Сумма равна ’,s);
end.
· Обратный цикл с параметром
В данном случае конструкция остается неизменной, единственное изменение связано с тем, что в обратном цикле параметр с каждым повторением уменьшается на единицу, таким образом, в алгоритмической записи Kначальное и Kконечное меняются местами:
Для i:= Kконечное до Kначальное повторяй
начало цикла
<действие 1>;
<действие 2>;
…
<действие n >;
конец цикла
В записи на Паскале, кроме этого, слово to меняется на downto:
for i:= Kконечное downto Kначальное do begin
<действие 1>;
<действие 2>;
…
<действие n >;
end;
Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Пример
В стаде 100 овец, каждая из которых за месяц дает 5кг шерсти. Ежемесячно волк крадет одну овцу из стада. Сколько шерсти состригут со всего стада за m месяцев?
Алгоритм: овцы;
Целые: o,sh,m;
Начало
Ввести: m;
sh:=0;
Если m>99, то m:=99;
Для o:=100 до (100-m) повторяй sh:=sh+5*o;
Вывести: sh;
Конец.
Program ovtsy;
uses crt;
var o,m,sh: integer;
begin
clrscr;
Writeln(‘Введите количество месяцев’);
read(m);
if m>99 then m:=99;
for o:=100 to (100-m) do sh:=sh+5*o;
writeln(‘Состригут ’,sh,‘ кг шерсти’);
end.
d) Принудительный выход из цикла
Иногда бывает удобно проводить проверку на возможный выход из цикла где-нибудь в его середине, а не в начале или конце. Такой выход из цикла обеспечивается процедурой break модуля System, которая прерывает выполнение самого внутреннего вложенного цикла, будь то for, while иди repeat. Указанный модуль подключается к программе автоматически, если в этом есть необходимость.
Пример
Ребенок каждую неделю покупает 2 мороженых по 5 рублей. Каждую неделю мороженое становится дороже на 1%. Сколько денег он потратит за n недель, с учетом, что у него есть только 200 рублей?
program morozhenoye;
uses crt;
var n,i: integer; ts,d: real;
begin
clrscr;
ts:=5;
writeln(‘введите количество недель’);
read(n);
for i:=1 to n do begin
ts:=ts*1.01;
d:=d+ts*2;
if d>200 then begin
break;
repeat d:=d-ts until d<200;
end;
end;
writeln(‘Ребенок потратит ’,d,‘ руб. за’,n,‘ недель’);
end.
Вопросы для самостоятельной работы
Задачи
Уровень A
41. Начав тренировки, спортсмен в первый день пробежал 10 км. каждый день он увеличивал дневную норму на 10% нормы предыдущего дня какой суммарный путь пробежит спортсмен за 7 дней?
42. Одноклеточная амеба каждые три часа делится на две клетки. Определить, сколько амеб будет через 3, 6, 9, …, 24 часа.
43. Ежемесячная стипендия студента составляет A руб., а расходы на проживание превышают стипендию и составляют B руб. в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Составьте программу расчета необходимой суммы денег, которую надо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию.
44. Написать программу, которая выводит на экран таблицу стоимости, яблок в диапазоне от 100 г до 1 кг с шагом 100.
45. Написать программу, которая выводит таблицу значений функции у = |х|. Диапазон изменения аргумента — от -4 до 4, шаг приращения аргумента — 0,5.
46. Написать программу, которая определяет максимальное число из введенной с клавиатуры последовательности положительных чисел (длина последовательности не ограничена, для завершения ввода вводится ноль).
47. Написать программу, вычисляющую сумму и среднее арифметическое последовательности положительных чисел, которые вводятся с клавиатуры.
48. Составить программу, которая запрашивает пароль (четырехзначное число) до тех пор, пока он не будет правильно введен.
49. Написать программу, которая "задумывает" число в диапазоне от 1 до 10 и предлагает пользователю угадать число за 5 попыток.
50. Написать программу проверки знания таблицы умножения. Программа должна вывести 10 примеров и выставить оценку: за 10 правильных ответов — "отлично", за 9 и 8 —"хорошо", за 7 и 6 — "удовлетворительно", за 6 и менее — "плохо".
Уровень B
51. Составить программу нахождения суммы всех делителей натурального числа, включая 1 и само это число.
52. Написать программу, которая проверяет, является ли целое число, введенное пользователем, простым.
53. Найти сумму всех n -значных чисел (1 ≤ n ≤ 4).
54. Найти сумму всех n -значных чисел (1 ≤ n ≤ 4), кратных m.
55. Написать программу, которая вычисляет наибольший общий делитель двух целых чисел.
56. Составить программу проверки утверждения: «Результатами вычислений по формуле x2 + x + 41 при 0 ≤ x ≤ 40 являются простые числа». Все результаты вывести на экран.
Уровень C
57. У гусей и кроликов вместе 64 лапы. Сколько могло быть кроликов и гусей (указать все возможные варианты)?.
58. Написать программу, которая преобразует введенное пользователем десятичное число от 1 до 255 в двоичное.
59. Сколько можно купить быков, коров и телят, платя за быка 10 р., за корову – 5 р., а за теленка – 0,5 р., если на 100 р. надо купить 100 голов скота?
60. Покупатель должен заплатить в кассу S рублей. У него имеются купюры достоинством в 1, 2, 5, 10, 50, 100, 500 руб. Сколько купюр отдаст покупатель, если он начинает платить с самых крупных?
9. Работа с массивами
Массив – упорядоченный набор однотипных значений – компонент массива. В Паскале массив рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое, так и на любую из его компонент.
Существует два вида массивов: линейные (одномерные) и многомерные (матрицы n-ного порядка)
a) Одномерные массивы
Одномерным называется массив, состоящий из простых переменных. Он задается с помощью команды такого вида:
<имя массива>: array[<нижний индекс> .. <верхний индекс>] of <тип элементов>;
Под нижним и верхним индексами подразумеваются номера соответственно первой и последней компонент массива.
Если необходимо обратиться к компоненте с определенным номером (индексом), прибегают к записи вида:
<Имя массива>[<индекс>]
Индекс – выражение порядкового типа, идентификатор компоненты массива.
Ввод и вывод массива осуществляются поэлементно, т.е. каждая компонента вводится отдельно. Обычно для этого используется цикл с параметром, где в качестве параметра применяется индексная переменная.
Пример
Создадим программу, собирающую массив из двадцати псевдослучайных целых чисел в диапазоне от 0 до 100 и отображающую элемент массива с номером, введенным пользователем.
program massiv;
uses crt;
var m: array[1..20] of integer; n,i,: integer;
begin
clrscr;
for i:=1 to 20 do m[i]:=random(100);
writeln(‘введите номер элемента’);
read(n);
writeln(‘На позиции ’,n,‘ находится число ’,m[n]);
end.
b) Многомерные массивы
В многомерных массивах переменные являются массивами более низкого порядка. Так, например, в наиболее часто употребляемом виде матриц – матрицах второго порядка элементами являются одномерные массивы, таким образом, матрицу второго порядка можно представить в виде таблицы.
Многомерный массив задается аналогично линейному:
<имя массива>: array[<нижний индекс1> .. <верхний индекс1>, <нижний индекс2> .. <верхний индекс2>, …,<нижний индекс n > .. <верхний индекс n >] of <тип элементов>,
где n – порядок матрицы.
Местоположение компонент определяется индексами, но в данном случае у каждой компоненты их несколько, а именно столько, какого порядка матрица.
Пример
Составим и выведем на экран таблицу умножения.
program umnoheniye;
uses crt;
var u: array[1..10,1..10] of integer; i,j: integer;
begin
clrscr;
for i:=1 to 10 do begin
for j:=1 to 10 do u[i,j]:=i*j;
end;
for i:=1 to 10 do begin
for j:=1 to 10 do writeln(u[i,j]:3);
writeln;
end;
end.
Вопросы для самостоятельной работы
Задачи
Уровень A
61. Составить массив из псевдослучайных чисел [0; 1] и отобразить значение и номер наименьшего элемента.
62. Написать программу, которая вводит с клавиатуры одномерный массив из 5 целых чисел и выводит количество ненулевых элементов. Перед вводом каждого элемента на экране должна появляться подсказка с его номером.
63. В целочисленной последовательности есть нулевые элементы. Составить массив из номеров этих элементов.
64. Составить массив из псевдослучайных чисел в диапазоне [-10; 10], вывести его на экран. Подсчитать, сколько в нем положительных, отрицательных и нулевых элементов.
65. Дан массив натуральных чисел. Найти сумму элементов, кратных данному k.
66. Дана последовательность действительных чисел. Заменить все ее члены, большие числа-предела z, значением z.
67. Написать программу, которая вычисляет среднее арифметическое ненулевых элементов введенного с клавиатуры массива целых чисел.
68. Написать программу, которая проверяет, находится ли в одномерном массиве введенное с клавиатуры число. Массив должен вводиться во время работы программы.
69. Написать программу, которая вычисляет, сколько раз введенное с клавиатуры число встречается в последовательности.
70. Создать массив из действительных чисел. Поменять местами наибольший и наименьший элементы.
71. Записать элементы данного одномерного массива в другой в обратном порядке.
72. Каждый солнечный день улитка, сидящая на a -метровом дереве, поднимается вверх на 2 см, а каждый пасмурный день опускается вниз на 1 см. В начале наблюдения улитка находилась в b см от земли. Имеется 30-элементный массив, содержащий сведения о том, был ли соответствующий день пасмурным или солнечным. Написать программу, определяющую местоположение улитки на дереве к концу 30-го дня наблюдения.
73. Последовательность чисел оканчивается нулем. Найти количество членов этой последовательности.
74. Сформировать и вывести на экран матрицу второго порядка размером m×n по заданному образцу:
1 1 1... 1 1 1
1 0 0... 0 0 1
...........
1 0 0... 0 0 1
1 1 1... 1 1 1
75. Построить квадратную матрицу со стороной 2n таким образом:
n n
1 1 … 1 2 2 … 2
1 1 … 1 2 2 … 2 n
………………..
1 1 … 1 2 2 … 2
3 3 … 3 4 4 … 4
3 3 … 3 4 4 … 4 n
………………...
3 3 … 3 4 4 … 4
76. Написать программу, которая проверяет, какие значения встречаются в созданной целочисленной матрице более одного раза, и выводит их на экран.
77. Дана квадратная матрица. Записать вместо отрицательных элементов нули, а вместо положительных – единицы и вывести матрицу на экран.
78. Создать прямоугольную матрицу и вывести на экран. Записать данные из нее в новый массив, поменяв местами строки и столбцы.
79. Найти наибольший и наименьший элементы матрицы размером m×n и поменять их местами.
80. Дана прямоугольная матрица. Найти строки с наибольшей и наименьшей суммами элементов. Вывести на печать найденные строки и суммы их элементов.
81. Для целочисленной квадратной матрицы найти число элементов, кратных k, и наибольший из полученных результатов деления.
82. Дана действительная матрица размером m×n, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.
83. Для заданной квадратной матрицы сформировать одномерный массив из ее диагональных элементов и вывести его на экран.
84. Создать прямоугольную матрицу. Преобразовать ее, переставив столбцы в обратном порядке, т.е. последний столбец становится первым, предпоследний – вторым и т.д.
Уровень B
85. Дан одномерный массив a[n]. Найти
max(a[2], a[4], …, a[2k]) + min(a[1], a[3], …, a[2k+1]).
86. Дана последовательность действительных чисел. Указать номера тех ее элементов, которые принадлежат отрезку [ c, d ].
87. Последовательность чисел состоите из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.
88. Дана неубывающая последовательность действительных чисел. Вставить в нее действительное число b так, чтобы последовательность осталась неубывающей.
89. Дан массив натуральных чисел. Найти среди них те, которые являются квадратами целых чисел.
90. Дан массив из n натуральных чисел. Образовать новый массив, элементами которого будут числа из исходного, оканчивающиеся на k.
91. Написать программу, которая объединяет два упорядоченных по возрастанию одномерных массива в один, также упорядоченный по возрастанию массив.
92. Задан массив, содержащий несколько нулевых элементов. «Сжать» его, выбросив эти элементы. Дополнительный массив не использовать.
93. Дан целочисленный массив с количеством элементов n. «Сжать» массив, выбросив из него каждый второй элемент. Дополнительный массив не использовать.
94. Составить программу, которая заполняет квадратную матрицу со стороной n числами 1, 2, 3, …, n2, записывая их в нее по спирали.
95. Проверить, какие значения встречаются во введенной с клавиатуры матрице более одного раза, и заменить остальные значения нулями.
96. Дан двумерный массив целых чисел. Вывести на экран только те элементы, значения которых больше, чем оба индекса, сохранив их расположение в матрице.
97. Написать программу, которая проверяет, является ли введенная с клавиатуры квадратная матрица магическим квадратом. Магическим квадратом называется матрица, сумма элементов которой в каждой строке, в каждом столбце и по каждой диагонали одинакова.
98. Дана действительная квадратная матрица 2n×2n. Получить новую матрицу, переставив ее блоки n×n по часовой стрелке.
99. Дана вещественная матрица размером m×n. Переставляя ее столбцы и строки, добиться того, чтобы наибольший элемент оказался в левом верхнем углу.
100. Определить, является ли заданная целая квадратная матрица симметричной относительно главной диагонали.
Уровень C
Сортировка массива
101. Сортировка выбором. Требуется расположить элементы последовательности по убыванию. Для этого в массиве, начиная с первого, выбирается наибольший элемент и ставится на первое место, а первый – на место наибольшего. Затем, начиная со второго, эта процедура повторяется.
102. Сортировка обменами. Требуется расположить элементы последовательности по возрастанию. Для этого сравниваются два соседних числа и, если первое из чисел больше второго, то делается перестановка. Так продолжается до тех пор, пока все элементы не станут расположены в порядке возрастания.
103. Сортировка вставками. Требуется расположить элементы последовательности по возрастанию. Делается это так. Пусть a1, a2, …, ai – упорядоченная последовательность. Следующее число вставляется в последовательность так, чтобы новая последовательность была также возрастающей. Процесс производится до тех пор, пока все оставшиеся элементы не займут нужные места.
104. Сортировка Шелла. Требуется расположить элементы последовательности по возрастанию. Для этого сравнивается пара соседних чисел ai и ai+1. Если ai ≤ ai+1, то пара продвигается на один элемент вперед, иначе производится перестановка, и пара сдвигается на один элемент назад.
105. Алгоритм фон Неймана. Требуется расположить элементы последовательности по убыванию с помощью алгоритма сортировки слияниями: каждая пара соседних элементов сливается в одну группу из двух элементов (последняя группа может состоять из одного элемента); каждая пара соседних групп сливается в одну четырехэлементную группу и т.д. При каждом слиянии новая группа упорядочивается.
106. Расположить элементы матрицы в порядке возрастания с помощью сортировки выбором.
107. Расположить элементы матрицы в порядке возрастания с помощью сортировки обменами.
10. Работа со строковыми переменными
a) Строковые переменные
Строковыми называют константы и переменные, значением которых служит набор символов, заключенный в апострофы, обозначающие начало и конец набора (сами апострофы в состав набора не входят). Строковые константы и переменные имеют тип string.Этот тип данных относят к структурированным.
Формат этого типа данных – string[n], где n - константа из диапазона 0...255.
Например, '2%', '12345', 'Коля'. В данном случае '12345' не число, а набор символов - цифр, математические операции с таким набором проводить нельзя.
В разделе описаний символьных констант тип не указывается, так как он определяется формой записи.
Пример
const
с = 'созидание';
Дата добавления: 2015-11-14; просмотров: 47 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Характеристика и особенности языка 1 страница | | | Характеристика и особенности языка 3 страница |