Программа алгоритм, записанный на языке программирования, служащий для выполнения каких-либо действий. Транслятор

Вид материалаПрограмма

Содержание


mod – взятие остатка от целочисленного деления. Стандартные математические функции
Правила записи арифметических
Самостоятельная работа по теме: «Модуль CRT».
If условие then
If условие then
A произведение его цифр; г) кратна ли пяти сумма его цифр; д) кратна ли сумма его цифр числу A
A. Составить программу для вычисления значения функции y
Самостоятельная работа на условный оператор.
Самостоятельная работа на условный оператор и оператор выбора.
Самостоятельная работа на циклы с параметром.
Цикл с предусловием while
Зачет по операторам цикла.
Объявление массива
Оператор присваивания.
2) Оператором ввода с клавиатуры.
3) Заполнение массива с использованием генератора случайных чисел.
4) Заполнение по формуле.
Подобный материал:
1   2   3   4   5   6   7   8   9   10

mod – взятие остатка от целочисленного деления.

Стандартные математические функции





abs(x)

Абсолютное значение х, т.е. х

exp(x)

Значением функции является е в степени х.

sin(x) и cos(x)

Значение синуса или косинуса х, х должен задаваться в радианах.

arctan(x)

Арктангенс х.

ln(x)

Натуральный логарифм х (х>0)

sqr(x)

Квадрат х.

sqrt(x)

Квадратный корень из х.

random(x)

Случайное число из диапазона

0<=...< x

Pi

Значение пи.

odd(x)

Значение функции true, если х нечетен, и false в противном случае.

inc(x,n)

Значением является х увеличенное на n.

dec(x,n)

Значением является х уменьшенное на n.

int(x)

Целая часть числа х.

frac(x)

Дробная часть числа х.

trunc(x)

Целая часть в форме longint.

round(x)

Значение х округленное до следующего целого числа.

Правила записи арифметических

выражений.
  1. Все данные, входящие в арифметическое выражение, должны быть одного типа. Допускается использовать вместе данные целого и действительного типа.
  2. Записывать все составные части в одну строку без подстрочных и надстрочных индексов.
  3. Использовать скобки одного типа - круглые. ( [{ и другие скобки применять запрещается)
  4. Нельзя записывать подряд 2 знака арифметических операций.
  5. Вычисления выполняются слева направо в соответствии со старшинством операций:

1) вычисление функций;

2) * / DIV (деление нацело)

MOD (получение остатка от деления)

3) + -

Правила записи стандартных функций.
  1. Имя функции записывается латинскими буквами.
  2. Аргумент функции записывается в круглых скобках после имени функции.
  3. Аргументом функции может быть : константа, переменная или арифметическое выражение.

Например :


ax2 + bx + c записывают так a*x*x +b*x + c


записывают так sqrt(b*b – 4*a*c)

записывают так (a + c – 2*b)/(3-x)


Рассмотрим примеры использования арифметических действий :

Правильно :

VAR a,b : integer;

r,s : integer;

............................

r:=a div b; {r=3 при a=7, b=2}

r:= a mod b; {r=1 при a=7,b=2}

s:=a*b;

s:=a div b;

Неправильно :

VAR a,b : integer;

r : integer;

r:=a/b; {если результат объявлен как целочисленный, нельзя использовать наклонную черту деления}

VAR a,b : real;

r : integer;

.................

r:=a div b; { нельзя использовать операцию div для вещественных чисел}

r:=a mod b; { операция mod используется только по отношению к целым числам}


VAR a,b : integer;

r : real;

....................

r:=a div b; {r должно быть целым}

Слева по отношению к оператору присваивания должен стоять более широкий тип.

VAR a : integer;

b : real;

c : real;

...........

c:=a+b {правильно}

a:=c+b; {неправильно}


Примеры: 23 div 5 = 4 23 mod 5 = 3


16 div 4 = 4 16 mod 4 = 0

5 div 8 = 0 5 mod 8 = 5

37 div 10 = 3 37 mod 10 = 7

Определить количество слив, если их делили на 5 человек:

write (‘Кол-во слив = ');

readln (a);

b:= a mod 5;

writeln(‘Осталось ‘,b,’ слив’);

Определить сколько попугаев уберется на удаве, если длина удава b, а длина попугая а.

write ('a='); readln (a);

write ('b='); readln (b);

c:= b div a;

writeln ('Поместится', с, ‘попугаев');

В любом выражении, если один или более операндов имеют вещественный тип, то результат будет так же вещественного типа. Операнды операторов div и mod всегда должны быть целого типа.

При вычислении выражений принят следующий приоритет: 1) *, /, div, mod; 2) +, -. порядок выполнения операций регулируется с помощью скобок. В Turbo Pascal нет операции возведения в степень.

Задание: Внести в программу составленную ранее необходимые изменения для высчитывания целой части от деления и остатка от деления первого числа на второе и вывода этих результатов на экран. а так же вывода на экран информации вида: a=b*c +r, где a – первое число, b – второе число, c – частное, r – остаток.

Целочисленное деление.

Задачи:
  1. Дано расстояние в сантиметрах. Найти число полных метров в нем.
  2. Дана масса в килограммах. Найти число полных тонн в ней.
  3. Дан прямоугольник с размерами 543×130 мм. Сколько квадратов со стороной 130 мм можно отрезать от него.
  4. С клавиатуры вводится двухзначное число, вычислить сумму его цифр.
  5. С клавиатуры вводятся трехзначное (четырехзначное, пятизначное, шестизначное) число, вычислить сумму его цифр.
  6. С клавиатуры вводится трехзначное число, необходимо получить новое число приписав к исходному справа число 45.
  7. С клавиатуры вводится четырехзначное число, необходимо получить новое число приписав к нему слева цифру 9. Найти остаток от деления полученного числа на 3.
  8. Дано трехзначное число. В нем зачеркнули первую слева цифру и приписали ее в начале. Найти полученное число.
  9. Дано трехзначное число. Найти число, полученное при перестановке второй и третьей цифр заданного числа.
  10. Дано число а1а2а3а4а5а6. Получить новое число следующего вида: а6а4а2а1. для полученного числа найти целую часть от деления на 8 и остаток от деления на 111.
  11. Даны трехзначное и четырехзначные числа: а1а2а3 и b1b2b3b4. Получить новое число вида: b1a1b2a2b3a3b4. У нового числа найти целую часть и остаток от деления на число 35.

Операции отношений:

< - меньше;

> - больше;

= - равно;

<> - не равно;

>= - больше или равно;

<= - меньше или равно.

Функции:

Арифметические функции:


abs (x) – модуль числа х, тип результата совпадает с типом аргумента;

sqr (x) – квадрат числа х, тип результата совпадает с типом аргумента;

sqrt (x) – квадратный корень из числа х, аргумент и результат должны иметь вещественный тип;

Пример: вычислить гипотенузу прямоугольного треугольника, если длина катетов a и b.

write ('a='); readln (a);

write ('b='); readln (b);

c:= sqrt (sqr(a) + sqr(b) );

writeln ('c=', с:5:2);

Вычислить модуль разности чисел a и b.

write ('a='); readln (a);

write ('b='); readln (b);

c:= abs (a - b);

writeln ('модуль=', с);

Тригонометрические функции:


sin (x) – синус числа х, выраженного в радианах, аргумент и результат должны иметь вещественный тип;

cos (x) – косинус числа х, выраженного в радианах, аргумент и результат должны иметь вещественный тип;

arctan (x) – арктангенс числа х, результат будет выражен в радианах, аргумент должен быть вещественного типа;

Пример: вычислить синус, косинус, тангенс и котангенс угла 30.

a:=Pi/180*30;

s:=sin(a); c:=cos(a);

t:=s/c; ct:=c/s;

Экспонента и логарифм:


exp (x) – ех, аргумент и результат должны иметь вещественный тип;

ln (x) – натуральный логарифм числа х, аргумент и результат должны иметь вещественный тип;

exp (b*ln(a)) – степень числа, где а основание, а b показатель степени, т.е. ab.

Примеры вычисления степени:

(x-3)7 exp(7*ln(x-3))

2x exp(x*ln2)

exp(1/3*ln(x))

Преобразование типов:

Round (x) – перевод дробного числа в целое с округлением;

Tranc (х) – перевод дробного числа в целое отбрасыванием дробной части.

Примеры преобразования типов:

a1:=Round(2.34); а1=2

a2:=Trunc(2.34); а2=2

b1:=Round(8.51); b1=9

b2:=Trunc(8.51); b1=8

c1:=Round(-3.7); c1=-4


int (x) – целая часть числа х, аргумент и результат должны иметь вещественный тип;

frac (x) – дробная часть числа х, аргумент и результат должны иметь вещественный тип;

Изменение аргумента:

inc (x) – увеличение числа х на единицу, аргумент и результат должны быть целого типа;

inc (x, a) – увеличение числа х на число а, оба аргумента и результат должны быть целого типа;

dec (x) – уменьшение числа х на единицу, аргумент и результат должны быть целого типа;

dec (x, a) – уменьшение числа х на число а, оба аргумента и результат должны быть целого типа.

Генерация случайных чисел:

Randomize – установка датчика случайных чисел в исходное состояние;

Random - формирование случайного дробного числа из диапазона от 0 до 1.

Примеры получения дробных случайных чисел:

a:=Random; 0
x:=Random+10; 10
y:=5*Random; 0
c:=10*Random-5; -5
b:=7*Random-3;

-3
Random (n) – формирование случайного целого числа из диапазона от 0 до n-1, где n – натуральное число.

Примеры получения целых случайных чисел:

a:=Random(3); 0, 1, 2

x:=Random(10); 0, 1, 2,…,9

y:=Random(5)+3; 3, 4, 5,…,7

c:=Random(8)-5; -5, -4,…,2

Смоделировать 5-кратное бросание игрального кубика:

randomize;

for i=1 to 5 do begin

x:=random(6)+1;

writeln(i,‘ бросок: ',x,’очков’);


end;

Смоделировать 10-кратное бросание монеты:

randomize;

for i=1 to 10 do

if random(2)=0

then writeln(’орел’)

else writeln(’решка’);

Приоритетность выполнения действий:

1.Выражение в скобках

2.Функции

3.Знак числа (+,-), not, @


4.*, /, div, mod, and, shl, shr


5.+, -, or, xor

6.=, <>, <, >, <=, >=, in


Задание: Составить программу, которая по введенным значениям чисел а и b, высчитывала бы и выводила бы на экран значения следующих функций:

  1. y = 7a2 – 3a + 6;
  2. ;
  3. y = a3 – 2,5ab + 1,78a2 – 12,5b + 1;
  4. y = 3,56(a + b)3 – 5,8b2 + 3,8a – 1,5;
  5. ;
  6. ;
  7. .

Вывод на экран организовать в следующем виде: у1(1.22, 0.45)=…и т.д.

Контрольная работа № 1 по теме: «Линейные алгоритмы. Деление нацело».

Стандартный модуль CRT.

Помимо встроенных процедур и функций Turbo Pascal предоставляет программисту множество функций и процедур различного назначения, объединенных в группы – библиотеки. Каждая библиотека состоит из функций и процедур, предназначенных для решения определенного типа задач. Например, есть библиотека математических функций, библиотека управления экраном, библиотека функций и процедур ввода с клавиатуры, библиотека для работы с графическим экраном и т.д.

Начнем рассмотрение первой из таких библиотек – это модуль CRT. Библиотека содержит функции и процедуры, полезные при выводе на экран.

Некоторые процедуры стандартного модуля CRT:

Clrscr - экран очищается текущим фоновым цветом, при этом курсор устанавливается в левый верхний угол экрана;

TextColor (c) – устанавливает цвет символов, где с – название или номер цвета: 0-черный, 1 – синий, 2 – зеленый, 3 – голубой, 4 – красный, 5 – фиолетовый, 6 – оранжевый, 7 – серый, 8 – темно-серый, 9 – светло-синий, 10 – светло-зеленый, 11 – светло-голубой, 12 – светло-красный, 13 – светло-фиолетовый, 14 – желтый, 15 – белый.

TextBackGround (с) – устанавливает цвет фона, где с – название или номер цвета: 0-черный, 1 – синий, 2 – зеленый, 3 – голубой, 4 – красный, 5 – фиолетовый, 6 – оранжевый, 7 – серый.

GotoXY (x, y) – устанавливает курсор в позицию экрана с координатами х и у, где х – номер столбца позиции (1..80), у – номер строки позиции (1..25).

TextMode (r) – установка режима экрана, где r – это номер текстового режима, который может принимать следующие значения: 1 - 4025; 3 - 8025; 257 - 4050; 259 - 8050.

Delay (ms) - задержка выполнения программы (миллисекунды);

Sound (f) – включение динамика, где f - это частота сигнала (Гц);

NoSound – отключение динамика;

Значение частот:


Гамма:

Uses Crt;

Var i : Integer;

Const f : array[1..7] of word = (523, 587, 659, 698, 783, 880, 998);

Begin

For i:=1 to 7 do begin

Sound(f[i]); delay(100);

end;

NoSound;

End.

ClrEol - очищается строка от текущей позиции до конца строки без изменения позиции курсора;

DelLine - удаляется строка, на которой находится курсор, и все строки, расположенные ниже, смещаются на позицию вверх;

InsLine - вставляется пустая строка, начиная с позиции, где находится курсор;

WhereX – функция, определяющая координату х курсора, результат возвращается типа integer;

WhereY– функция, определяющая координату y курсора, результат возвращается типа integer;

Window (x1,y1,x2,y2) – задание текстового окна, после задания окна все координаты задаются относительно этого активного окна;

KeyPressed – функция проверки буфера клавиатуры, результат булевского типа: True – если в буфере клавиатуры есть символы и False – если буфер клавиатуры пуст;

Примеры использования функции KeyPressed:

Repeat

<Операторы>

Until KeyPressed;

или:

While Not KeyPressed

begin

<Операторы>

end;

ReadKey – чтение первого байта (символа) из буфера клавиатуры. Если буфер клавиатуры пуст, то ожидание нажатия клавиш символа из буфера клавиатуры, результат функции должен быть типа char;

Пример фрагмента программы для чтения расширенного кода:

Key:=ReadKey; {чтение первого байта (#0)}

If Key=#0 Then

Key:=ReadKey; {чтение второго байта}

Коды некоторых клавиш:

Enter - 13 ¬ - 0 75

Esc - 27 ­ - 0 72

BackSpace- 8 ® - 0 77

Space - 32 ¯ - 0 80

Tab - 9 Home - 0 71

a - 97 End - 0 79

A - 65 Insert - 0 82

Пример фрагмента программы управления движением:

Repeat

Key:=ReadKey;

If Key=#0 Then Key:=ReadKey;

Case Key of

75 : Left;

77 : Right;

72 : Up;

80 : Down;

End;

Until Key=#27;

Highvideo – символы выводятся на экран с повышенной яркостью;

Lowvideo – символы выводятся на экран с пониженной яркостью.

Задание: Составить программу вывода на экран поздравления друга с Днем Рождения (использовать разумно разные цвета и местоположение текста на экране).

Самостоятельная работа по теме: «Модуль CRT».

Условия в Turbo Pascal. Виды условий.

Алгоритмы решения большинства задач не являются последовательными. Действия, которые необходимо выполнить, могут зависеть от определенного условия, например исходных данных, или результатов, полученных во время выполнения программы. Например, если нам необходимо переменной max присвоить значение большей из переменных х1 или х2, мы должны определить сначала какое число больше а уже после этого заносить его значение в переменную max.

В языке Pascal условие – это выражение логического типа (Boolean), которое может принимать одно из двух значений: истина или ложь.

В Pascal имеется шесть операторов, позволяющих сравнивать между собой значения числовых переменных, а также значения переменной и константу (число).


Использование операторов сравнения позволяет записывать простые условия. Например, х1>x2 или х1=х2, или х1<>х2 и т.п.

Из простых условий, которые являются выражениями логического типа, можно строить сложные условия с применением к ним, как к операндам, логических операторов:

Not – отрицание;

And – логическое «и»;

Or – логическое «или».

При записи сложных условий важно учитывать то, что логические операторы имеют более высокий приоритет, чем операторы сравнения, поэтому простые условия следует брать в скобки.

Например, нам необходимо из трех чисел выбрать большее, можно составить такое условие: (x>y) and (x>z), или условие попадания точки в интервал : будет выглядеть так:


(х<= -3) or (x>=7). Возможно составление и более сложных условий: (a=5) or ((a>10) and (a<1)).

Итак, следовательно, условия могут быть либо простыми, либо составными, полученными из простых с помощью логических связок.

Условный оператор.

В Turbo Pascal включены два условных оператора – if и case (хотя исторически так сложилось что последний называется оператором выбора), каждый из которых может быть записан в двух формах: полной и неполной.

Синтаксис инструкции IF:

If условие

then

begin

{инструкции выполняемые, если условие истинно};

end

else

begin

{инструкции выполняемые, если условие ложно};

end;

Инструкция if выполняется следующим образом:
  1. вычисляется значение условия (выражение логического типа).
  2. Если значение выражения условия равно true, то выполняются инструкции, следующие за словом then. Если значение выражения условия равно false, то выполняются инструкции, следующие за словом else.

Примечания:
  1. Перед ключевым словом else символ «;» никогда не ставится.
  2. Если при выполнении (невыполнении) условия надо выполнить только одну инструкцию, то слова begin и end после then (else) могут быть опущены.

Пример: необходимо вывести на экран значение большего из двух введенных с клавиатуры чисел. Пусть первое число х, а второе число у, тогда фрагмент программы будет выглядеть так:

if x>y then writeln (‘большее из данных двух чисел ’, x)

else writeln ( ‘большее из данных двух чисел ’,y);

Если какое-либо действие нужно выполнить только при выполнении условия, инструкция if может быть записана так:

If условие

then

begin

{инструкции выполняемые, если условие истинно};

end;

Пример: вычислить значение функции y=1/x. Фрагмент программы будет выглядеть так:

If x<>0 then y:=1/x;

Иногда возникает необходимость использования вложенных условных операторов.

Пример: С клавиатуры задаются три числа, необходимо вывести на экран значение большего из этих чисел. Фрагмент такой программы будет выглядеть так:

if x>y

then begin

if x>z then writeln (‘большее из данных чисел ’, x)

else writeln ( ‘большее из данных чисел ’,z);

end

else writeln (‘большее из данных чисел ’, y);

Либо можно построить несколько по другому, например так:

if (x>y) and (x>z)

then begin writeln (‘большее из данных чисел ’, x)

else

if y>z then writeln (‘большее из данных чисел ’, y)

else writeln ( ‘большее из данных чисел ’,z);


Задание: Написать полностью программы для разобранных выше примеров.

Задачи:
  1. Рассчитать значение y при заданном значении x:


  1. Дано целое число. Определить:

а) является ли оно чётным;

б) оканчивается ли оно цифрой 7;

в) оканчивается ли оно чётной цифрой. Составное условие не использовать.
  1. Дано двузначное число. Определить:

а) какая из его цифр больше: первая или вторая;

б) одинаковы ли его цифры?
  1. Дано двузначное число. Определить:

а) кратна ли трём сумма его цифр;

б) кратна ли сумма его цифр числу A?
  1. Дано трёхзначное число. Определить, равен ли квадрат этого числа сумме кубов его цифр.
  2. Дано трёхзначное число. Определить:

а) является ли сумма его цифр двузначным числом;

б) является ли произведение его цифр трёхзначным числом;

в) больше ли числа A произведение его цифр;

г) кратна ли пяти сумма его цифр;

д) кратна ли сумма его цифр числу A.
  1. Дано трёхзначное число.

а) верно ли, что все его цифры одинаковые?

б) определить, есть ли среди его цифр одинаковые?
  1. Дано четырёхзначное число. Определить:

а) равна ли сумма двух первых его цифр сумме двух его последних цифр;

б) кратна ли трём сумма его цифр;

в) кратно ли четырём произведение его цифр;

г) кратно ли произведение его цифр числу A.
  1. Составить программу для вычисления значения функции y(x):


  1. Дано натуральное число.

а) Верно ли, что оно заканчивается нечетной цифрой?

б) Верно ли, что оно заканчивается четной цифрой?
  1. Дано вещественное число x. Вычислить y(x), если
  2. Определить, является ли число A делителем числа B, или наоборот. Ответом должны служить сообщения: "да, одно из чисел является делителем другого" или "нет, ни одно из чисел не является делителем другого".
  3. Год является високосным, если его номер кратен 4, однако из кратных 100 високосными являются лишь кратные 400 (например, 1700, 1800 и 1900 – не високосные года, 2000 – високосный). Дано натуральное число N. Определить, является ли високосным год с таким номером.
  4. Дано четырехзначное число. Определить:

а) входит ли в него цифра 4; б) входит ли в него цифра B.
  1. Дано четырехзначное число. Определить:

а) входят ли в него цифры 4 или 7; б) входят ли в него цифры 3, 6 или 9.
  1. Дано натуральное число n (n  9999).Выяснить, различны ли все четыре цифры этого числа (если оно записано четырьмя цифрами). Например, в числе 3678 все цифры различны, в числе 0023 – нет.
  2. Определить, является ли заданное шестизначное число счастливым. (Счастливым называют такое шестизначное число, у которого сумма его первых трех цифр равна сумме его последних трех цифр).
  3. Составить программу, которая уменьшает первое веденное число в два раза, если оно больше второго введенного числа по абсолютной величине.
  4. Даны два числа. Если квадратный корень из второго числа меньше первого числа, то увеличить второе число в пять раз.
  5. Даны три целых числа. Вывести на экран те из них, которые являются четными.
  6. Даны три вещественных числа. Возвести в квадрат те из них, значения которых неотрицательны.
  7. Даны три вещественных числа. Вывести на экран:

а) те из них, которые принадлежат интервалу (1,6 – 3,8);

б) те из них, которые принадлежат интервалу (0,7 – 5,1).
  1. Даны четыре вещественных числа. Найти сумму тех чисел, которые больше пяти.
  2. Даны четыре целых числа. Определить сумму тех из них, которые кратны трем.
  3. Составить программу для вычисления значения функции z(a):
  4. Дано вещественное число x.Вычислить f(x), если:
  5. Даны вещественные числа a, b, c (a ≠ 0).Выяснить, имеет ли уравнение ax2+bx+c=0 вещественные корни. Если такие корни имеются, то найти их. В противном случае ответом должно служить сообщение, что вещественных корней нет.
  6. Вывести на экран номер четверти координатной плоскости, которой принадлежит точка с координатами (x, y), при условии, что x ≠ 0 и y ≠ 0.
  7. Для натурального числа k напечатать фразу “мы нашли k грибов в лесу“, согласовав окончание слова “гриб” с числом k.

Самостоятельная работа на условный оператор.

Оператор выбора.

Рассмотренный условный оператор If позволяет выбирать только одно из двух возможных действий в зависимости от логического выражения.

Оператор выбора case является обобщением оператора If – он дает возможность выполнять одно из нескольких действий в зависимости от значения переключателя.

В качестве переключателя используется выражение, которое располагается между ключевыми словами case и of. Результатом этого выражения может быть только значение порядкового типа, общее количество элемент которого не превышает 65535.

Синтаксис инструкции case:

case выражение of

список констант_1 : begin

{последовательность инструкций 1};

end;

список констант_2 : begin

{последовательность инструкций 2};

end;

список констант_n : begin

{последовательность инструкций n};

end

else begin

{последовательность инструкций, выполняемая в случае, если выражение не попало ни в один из списков констант};

end;

end;

Где выражение – это выражение, от значения которого зависит дальнейший ход программы (одна из последовательностей инструкций, которая должна быть выполнена).

Список констант – константы, разделенные запятыми. Если константы представляют диапазон чисел, то вместо списка можно указать первую и последнюю константу диапазона, разделив их двумя точками. Например список 1, 2, 3, 4, 5, 6 может быть заменен диапазоном 1..6.

При выполнении инструкции case происходит следующее: вычисляется значение выражения оператора case, затем полученное значение последовательно сравнивается с константами из списков констант. Если значение выражения совпадает с константой из списка, то выполняется соответствующая этому списку последовательность инструкций, и на этом выполнение инструкции case завершается. Если значение выражения не совпадает ни с одной константой из всех списков, то выполняется последовательность инструкций идущих после else. Синтаксис инструкции case позволяет не использовать else и соответствующую последовательность инструкций. В этом случае, если значение выражения не совпадает ни с одной константой из всех списков, то выполняется следующая за cаse команда.

Примеры:

Case day of Case day of Case day of

1, 2, 3, 4, 5: write (‘ рабочий день’); 1..5: write (‘ рабочий день’); 6: write (‘суббота’);

6: write (‘суббота’); 6: write (‘суббота’); 7: write (‘воскресенье’)

7: write (‘воскресенье’); 7: write (‘воскресенье’); else write (‘ рабочий день’);

end; end; end;

Задание: При выводе числовой информации с пояснительным текстом возникает проблема согласования выводимого значения и окончания пояснительного текста. Например, рубль, рубля или рублей, либо год, года, лет. Составить программу, запрашивающую количество лет и выводящую сообщение: «Вам …лет».

Задачи:
  1. Составить программу, которая в зависимости от порядкового номера месяца (1, 2, …, 12) выводит на экран его название (январь, февраль, …, декабрь).
  2. Составить программу, которая в зависимости от порядкового номера месяца (1, 2, …, 12) выводит на экран количество дней в этом месяце. Рассмотреть 2 случая:
    1. год не является високосным (см. задачу 13);
      1. год високосный (информация об этом вводится с клавиатуры).

Самостоятельная работа на условный оператор и оператор выбора.

Циклы.

При решении многих задач некоторую последовательность действий приходится выполнять несколько раз. Например, программа контроля знаний выводит вопрос, принимает ответ, добавляет оценку за ответ к сумме баллов, затем повторяет это действие еще раз, и еще, до тех пор, пока не будут выведены все вопросы. Другой пример. Чтобы найти фамилию человека в списке, надо проверять первую фамилию списка, потом вторую, третью и т.д. до тех пор, пока не будет найдена нужная или не будет достигнут конец списка. Такие повторяющиеся действия называются циклами и реализуются в программе с использованием операторов циклов.

Оператор цикла for.

Оператор for используется если надо выполнить некоторую последовательность действий несколько раз, причем заранее известно число таких повторений. Также удобно использовать этот оператор, когда необходимо некоторым образом использовать в теле цикла информацию о номере очередной итерации.

Синтаксис оператора цикл for:

For i:=n1 to n2 do

begin

{последовательность операторов};

end;

Либо:

For i:=n2 downto n1 do

begin

{последовательность операторов};

end;


Где i – это счетчик цикла, который обязательно должен быть объявлен в разделе var, и иметь целочисленный тип;

n1 – начальное значение счетчика, которое является значением выражение, определяющее начальное значение переменной – счетчика цикла;

n2 – конечное значение счетчика, которое является выражением, определяющим конечное значение переменной – счетчика циклов.

Примечания:
  1. Если между begin и end находится только одна инструкция, то begin и end можно не писать.
  2. Шаг изменения переменной – счетчика циклов может быть равен только 1(если используется ключевое слово to) или –1 (если используется ключевое слово downto).
  3. Категорически не рекомендуется проводить какое–либо изменение переменной – счетчика цикла внутри тела цикла.

Оператор цикла for работает следующим образом:
  1. Вычисляется начальные и конечные значения параметра цикла;
  2. Если начальное значение превосходит конечное, то тело цикла не выполняется. В противном случае, изменяется параметр цикла и вместе с каждым его значением выполняется тело цикла.

Примеры:
  • у=1+1/2+1/3+…+1/n

у:=0;

for i:=1 to n do

y:=y+1/i;

writeln (‘y=’,y:5:2);
  • Вывести на экран и вычислить сумму квадратов целых чисел от 1 до n.

s:=0;

for i:=1 to n do begin

s:=s+sqr(i);

writeln (sqr(i));

end;

writeln (‘s=’,s);
  • y=xk

y:=1;

for i:=1 to k do

y:=y*x;

writeln (‘y=’,y:5:2);

Задание: Составить полностью программы для разобранных выше примеров.

Задачи:
      1. Напечатать "столбиком":

а) все целые числа от 20 до 35;

б) квадраты всех целых чисел от a до b (значение b вводится с клавиатуры; b≥10);

в) третьи степени всех целых чисел от a до 50 (значение a вводится с клавиатуры; a≤10);

г) все целые числа от a до b (значение a и b вводятся с клавиатуры; b≤a).
      1. Одна штука некоторого товара стоит 20.4 руб. Напечатать таблицу стоимости 2, 3, ..., 20 штук этого товара.
      2. Напечатать таблицу соответствия между весом в фунтах и весом в килограммах для значений 1, 2, ..., 10 фунтов (1 фунт = 453 г).
      3. Напечатать таблицу перевода 1, 2, ..., 20 долларов США в рубли по текущему курсу (значение курса вводится с клавиатуры).
      4. Составить таблицу умножения на 9.
      5. Составить таблицу умножения на число n (значение n вводится с клавиатуры; 1≤n≤9).
      6. Рассчитать значения y для значений x, равных 4, 5, ..., 28:

y = 2y2 + 5,5t – 2,

t = x + 2.
      1. Рассчитать значения z для значений a, равных 2, 3, ..., 17:

z = 3,5t2 – 7t + 16,

t = 4a.

      1. Найти:

a) сумму всех целых чисел от 100 до 500;

б) сумму всех целых чисел от a до 500 (значение a вводится с клавиатуры; a≤500);

в) сумму всех целых чисел от -10 до b (значение b вводится с клавиатуры; b≥ -10);

г) сумму всех целых чисел от a до b (значения a и b вводятся с клавиатуры; b≥a).
      1. Найти:

а) среднее арифметическое всех целых чисел от 1 до 1000;

б) среднее арифметическое всех целых чисел от 100 до b (значение b вводится с клавиатуры; b≥100);

в) среднее арифметическое всех целых чисел от a до 200 (значение a вводится с клавиатуры; a≤200);
      1. Найти:

a) сумму кубов всех целых чисел от 20 до 40;

б) сумму квадратов всех целых чисел от a до 50 (значение a вводится с клавиатуры; 0≤a≤50);

в) сумму квадратов всех целых чисел от 1 до n (значение n вводится с клавиатуры; 1≤n≤100);

г) сумму квадратов всех целых чисел от a до b (значение a и b вводится с клавиатуры; b≥a).
      1. Дано натуральное число n. Найти сумму n2 + (n+1)2 + ... + (2n)2.

Самостоятельная работа на цикл с параметром.

Оператор цикла с предусловием while.

Оператор цикла while используется в программе, если надо провести некоторые повторные вычисления (цикл), однако число повторов заранее неизвестно и определяется самим ходом вычисления.

В общем виде оператор выглядит так:

while условие do

begin

{последовательность операторов};

end;

где условие – выражение логического типа.

Оператор цикла while работает следующим образом:
  1. Вычисляется условие.
  2. Если условие ложно, то вход в цикл не выполняется и управление передается оператору, следующему непосредственно за операторами тела цикла.
  3. Если же условие истинно, то происходит вход в цикл и однократное выполнение операторов. Как только достигнут конец тела цикла, управление передается на его заголовок, где снова вычисляется его условие.

Примечание:
  1. Для того чтобы последовательность инструкций между begin и end была выполнена хотя бы один раз, необходимо, чтобы перед выполнением инструкции while условие было истинно;
  2. Для того чтобы цикл завершился, необходимо чтобы последовательность инструкций между begin и end изменяла значения переменных, входящих в выражение условие.ъ

Примеры: Вычислить сумму нечетных чисел от 1 до некоторого числа n. (n=1, s=1; n=2, s=1+3=4; n=12, s=1+3+5+7+9+11=36).

program summa;

uses crt;

var

n, s, i: integer;

begin

clrscr;

s:=0; i:=1;

writeln (‘Введите натуральное число n’); readln(n);

while i<=n do

begin

s:=s+i;

i:=i+2;

end;

writeln (‘сумма нечетных чисел от 1 до ’, n, ‘=’,s);

readln;

end.

Составить таблицу значений функции на отрезке [2;4] с шагом 0,2.

program func;

uses crt;

var

x, y: real;

begin

clrscr;

x:=2;

while x<=4 do

begin

y:=sqrt(x);

writeln (y:6:3);

x:=x+0.2;

end;

readln;

end.

Задание: Составить программу составляющую таблицу значений функции на отрезке [a;b] с шагом 0,2.

Задачи:
  1. Дано натуральное число. Определить:

а) количество цифр в нем;

б) сумму его цифр;

в) произведение его цифр;

г) среднее арифметическое его цифр;

д) сумму квадратов его цифр;

е) сумму кубов его цифр;

ж) его первую цифру;
  1. Напечатать минимальное число, больше 200, которое нацело делится на 17.
  2. Найти максимальное из натуральных чисел, не превышающих 5000, которое нацело делится на 39.
  3. Даны натуральные числа a и b, обозначающие соответственно числитель и знаменатель дроби. Сократить дробь, т.е. найти такие натуральные числа p и q, не имеющие общих делителей, что p/q=a/b.
  4. Даны натуральные числа m и n. Получить все кратные им числа, не превышающие m*n. Условный оператор не использовать.
  5. Даны натуральные числа a и b. Найти НОД(a,b) и НОК(a,b).
  6. Дано натуральное число.

а) Получить число, получаемое при прочтении его цифр справа налево.

б) Приписать по двойке в начало и конец записи этого числа.

в) Удалить из него все цифры А.

г) Переставить его первую и последние цифры.

д) Приписать к нему такое же число.
  1. Дано натуральное число. Определить номер цифры 3 в нем, считая от конца числа. Если такой цифры нет, ответом должно быть число 0, если таких цифр в числе несколько - должен быть определен номер самой правой из них.
  2. Дано натуральное число. Определить сумму m его последних цифр.
  3. Дано натуральное число. Найти его наименьший делитель, отличный от 1.
  4. Дан прямоугольник с размерами 425x131. От него отрезают квадраты со стороной 131, пока это возможно. Затем от оставшегося прямоугольника вновь отрезают квадраты со стороной, равной 425-131*3=32, и т. д. На какие квадраты и в каком их количестве будет разрезан исходный прямоугольник?
  5. Дан прямоугольник с размерами axb. От него отрезают квадраты максимального размера, пока это возможно. Затем от оставшегося прямоугольника вновь отрезают квадраты максимально возможного размера и т.д. На какие квадраты и в каком их количестве будет разрезан исходный прямоугольник?
  6. Дана непустая последовательность целых чисел, оканчивающаяся нулем. Найти:

а) сумму всех чисел последовательности;

б) количество всех чисел последовательности.
  1. Определить:

а) является ли заданное число степенью числа 3;

б) является ли заданное число степенью числа 5.
  1. Дано число n.

а) Напечатать те натуральные числа, квадрат которых не превышает n.

б) Найти первое натуральное число, квадрат которого больше n.
  1. Дано натуральное число.

а) Верно ли, что сумма его цифр больше 10?

б) Верно ли, что произведение его цифр меньше 50?

в) Верно ли, что количество его цифр есть четное число?

г) Верно ли, что это число четырехзначное?

Составное условие и вложенный условный оператор не использовать.

д) Верно ли, что его первая цифра не превышает 6?

е) Верно ли, что оно начинается и заканчивается одной и той же цифрой?

ж) Определить, какая из его цифр больше: первая или последняя.
  1. Дано натуральное число.

а) Верно ли, что сумма его цифр больше к, а само число четное?

б) Верно ли, что количество его цифр есть четное число, а само число не превышает b?

в) Верно ли, что оно начинается на X и заканчивается на Y?

г) Верно ли, что произведение его цифр меньше А, а само число делится на В?

д) Верно ли, что сумма его цифр больше M, а само число делится на N?
  1. Дано натуральное число. Определить:

а) есть ли в нем цифра 3;

б) есть ли в нем цифры 2 и 5.
  1. Дано натуральное число.

а) Определить, есть ли в нем цифра А.

б) Верно ли, что в нем нет цифры В?

в) Верно ли, что цифра А встречается в нем более К раз?

г) Определить, есть ли в нем цифры А и В.
  1. Дано натуральное число. Выяснить, является ли оно палиндромом ("перевертышем"), т.е. числом, десятичная запись которого читается одинаково слева направо и справа налево.
  2. Напечатать полную таблицу умножения в виде:

1*1=1 1*2=2 … 1*9=9

2*1=1 2*2=4 … 2*9=18

… … … …

9*1=9 9*2=18 … 9*9=81
  1. Найти все натуральные числа, меньшие 200, у которых сумма цифр равна 13.
  2. Найти все целые числа от 30 до 350, у которых сумма цифр равна 15.
  3. Найти все целые числа из промежутка от 1 до 100, у которых есть цифра ‘7’.
  4. Найти все целые числа из промежутка т 50 до 150, у которых есть цифра ‘9’.
  5. Найти все целые числа из промежутка от 10 до 200, у которых есть цифры ‘2’ и ’5’.
  6. Найти размеры всех прямоугольников, площадь которых равна заданному натуральному числу s и стороны которого выражены натуральными числами. При этом решения, которые получаются перестановкой размеров сторон:

а) считать разными;

б) считать совподающими.

Оператор цикла с постусловием repeat.

Инструкция repeat как и инструкция while, используется в программе, если надо провести некоторые повторяющиеся вычисления (цикл), однако число повторений не известно и определяется самим ходом вычислений.

В общем виде оператор выглядит так:

repeat

{последовательность операторов};

until условие;

где условие – выражение логического типа.

Оператор работает следующим образом:
  1. Выполняются инструкции следующие за слово repeat.
  2. Вычисляется значение условия. Если условие ложно, то повторно выполняются инструкции цикла. Если же условие истинно, то выполнение цикла заканчивается.

Таким образом, операторы находящиеся между repeat и until выполняются до тех пор, пока условие ложно.

Примечания:
  1. Последовательность инструкций между repeat и until всегда будет выполнена хотя бы один раз.
  2. Для того чтобы цикл завершился, необходимо, чтобы последовательность операторов между repeat и until изменяла значения переменных, входящих в выражение условие.

Инструкция полезна при создании программ, обрабатывающих ввод с клавиатуры.

Пример: Составить программу вычисляющую сумму положительных чисел, вводимых с клавиатуры.

program polog;

uses crt;

var

n, s: integer;

begin

clrscr;

s:=0;

repeat

write (‘->’);

readln (n);

if n>0 then s:=s+n;

until n<=0;

writeln (‘Сумма введенных положительных чисел =’,s);

readln;

end.

Пример: С клавиатуры вводится число, проверить является ли оно простым.

program prost;

uses crt;

var

r, n, d: integer;

begin

clrscr;

writeln (‘Введите целое число’); readln (n);

d:=2;

repeat

r:=n mod d;

if r<>0 then d:=d+1;

until r=0;

if d=n then

writeln (n,‘ – простое число’)

else writeln (n,‘ – составное число’)

readln;

end.

Задачи:
  1. Дано натуральное число.

а) Получить все его делители.

б) Найти сумму его делителей.

в) Найти сумму его четных делителей.

г) Определить количество его делителей.

д) Определить количество его нечетных делителей.

е) Определить количество его делителей. Сколько из них четных?

ж) Найти количество его делителей, больших D.
  1. Натуральное число называется совершенным, если оно равно сумме своих делителей, включая 1 и, естественно, исключая это самое число. Например, число 6 - совершенное (6=1+2+3). Дано натуральное число. Выяснить, является ли оно совершенным.
  2. Найти количество делителей каждого из целых чисел от 120 до 140.
  3. Найти все целые числа из промежутка от 1 до 300, у которых ровно 5 делителей.
  4. Найти все целые числа из промежутка от 200 до 500, у которых ровно 6 делителей.
  5. Найти все целые числа из промежутка от А до В, у которых количество делителей равно К. Если таких чисел нет, то должно быть напечатано соответствующее сообщение.
  6. Найти натуральное число из интервала от А до В, у которого количество делителей максимально. Если таких чисел несколько, то должно быть найдено:

а) максимальное из них;

б) минимальное из них.
  1. Найти все трёхзначные простые числа.
  2. Найти 100 первых простых чисел.
  3. Найти сумму делителей каждого из целых чисел от 50 до 70.
  4. Найти все целые числа из промежутка от 100 до 300, у которых сумма делителей равна 50.
  5. Найти все целые числа из промежутка от 300 до 600, у которых сумма делителей кратна 10.
  6. Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого (само другое число в качестве делителя не рассматривается).Найти все пары дружественных чисел, меньших 50000.
  7. Дана непустая последовательность неотрицательных целых чисел, оканчивающаяся отрицательным числом. Найти среднее арифметическое всех чисел последовательности (без учета отрицательного числа).
  8. Дана непустая последовательность целых чисел, оканчивающаяся числом -1. Определить, есть ли в последовательности хотя бы одно число, кратное 7. В случае положительного ответа определить порядковый номер первого из них.
  9. Дана последовательность натуральных чисел а1,а2,...,а15. Определить, есть ли в последовательности хотя бы одна пара одинаковых "соседних" чисел. В случае положительного ответа определить порядковые номера чисел первой из таких пар.
  10. Дана последовательность целых чисел, оканчивающаяся числом 9999. Количество чисел в последовательности не меньше двух. Определить, есть ли в ней хотя бы одна пара "соседних" четных чисел. В случае положительного ответа определить порядковые номера чисел первой из таких пар.
  11. Дана последовательность вещественных чисел, оканчивающаяся числом 10000. Количество чисел в последовательности не меньше двух. Определить, является ли последовательность упорядоченной по возрастанию. В случае отрицательного ответа определить порядковый номер первого числа, "нарушающего" такую упорядоченность.

Самостоятельная работа на циклы с параметром.

Сравнение работы операторов цикла (repeat, while, for).



n/n

Цикл с предусловием while

(пока условие истинно)

Цикл с постусловием repeat

(до истинности условия)

Цикл со счетчиком for

1

До начала цикла должны быть сделаны начальные установки переменных, управляющих условием цикла, для корректного входа в цикл.

Начальная установка переменной счетчика цикла до заголовка не требуется

2

В теле цикла должны присутствовать операторы, изменяющие переменные условия так, чтобы цикл через некоторое число итераций закончился.

Изменение в теле цикла значений переменных, стоящих в заголовке цикла, не допускается.

3

Цикл работает пока условие истинно.

Цикл работает пока условие ложно.

Количество итераций цикла неизменно и точно определяется значениями верхней и нижней границ и шага цикла.

4

Цикл завершается, когда условие становится ложным.

Цикл завершается, когда условие становится истинным.

Нормальный ход работы цикла может быть нарушен оператором goto или процедурами Break и Continue.

5

Цикл может не выполниться ни разу, если исходное значение условия при входе в цикл ложно

Цикл обязательно выполняется как минимум один раз.

Цикл может не выполниться ни разу, если шаг цикла будет изменять значение счетчика цикла от нижней границы в направлении, противоположном верхней границы.

6

Если в теле цикла требуется более одного оператора, то необходимо использовать составной оператор.

Независимо от количества операторов в теле цикла использование составного оператора не требуется.

Если в теле цикла требуется более одного оператора, то необходимо использовать составной оператор.


Зачет по операторам цикла.

Вложенные циклы

Для решения задачи достаточно часто требуется использовать две и более циклические конструкции, одна из которых расположена внутри другой (других). Такие конструкции называют вложенными циклами. Какие именно циклы при этом используются, роли не играет, они могут быть организованы посредством любых рассмотренных ранее операторов (For, While, Repeat ... Until).

Задача : Сколько можно купить быков, коров и телят, если бык стоит 10 рублей, корова - 5 рублей, теленок - полтинник (0,5 рубля), при условии, что на 100 рублей надо купить 100 голов скота.

Решение : Обозначим через b- количество быков, k - количество коров, t - количество телят. После этого можно записать два уравнения:

10b+5k+0,5t=100 и b+k+t=100

Преобразуем их :

20b+10k+t=200 и b+k+t=100

На 100 рублей можно купить :
  1. не более 10 быков, т.е. 0<=b<=10;
  2. не более 20 коров, т.е. 0<=k<=20;
  3. не более 200 телят, т.е. 0<=t<=200;

Таким образом получаем :

Program skot;

Var b,k,t : integer;

Begin

For b:=0 to 10 do

For k:=0 to 20 do

For t:=0 to 200 do

if (20*b+10*k+t=200) and (b+k+t=100) then

writeln(‘быков ‘,b,‘ коров ’,k,’ телят ’,t);

end.

Условие будет проверятся 11*21*201=46431 раз. Но задачу можно сократить на один цикл если количество телят вычислять по формуле:

t=100-(b+k)


Массивы.

Массив – это упорядоченный набор однотипных элементов, имеющих общее имя.

Объявление массива.

Перед использованием массив, как и любая переменная, должен быть объявлен в разделе объявления переменных. В общем виде объявление массива выглядит так:

имя: array [нижний_индекс..верхний_индекс] of тип;

где

имя – имя переменной – массива.

array – ключевое слово, обозначающее, что переменная является массивом;

нижний_индекс и верхний_индекс – целые числа, определяющие диапазон изменения индексов (номеров) элементов массива и, неявно, количество элементов (размер) массива;

тип – тип элементов массива.

Примеры объявления массивов:

t: array[1..31] of real;

k: array[0..2] of integer;

n: array[1..30] of longint;

Чтобы в программе использовать элемент массива, надо указать имя массива и номер элемента (индекс), заключив его в квадратные скобки. индекс может быть константой или выражением целого типа.

Например: t[1]:=1.22;

d:=k[1]*k[1]-4*k[2]*k[1];

readln (n[i+1]);

writeln (t[m]);
  1. Оператор присваивания.

А[1]:=3;

А[2]:=4;

........

или

B[1]:=’Иванов’;

B[2]:=’Петров’;

........

Такой способ задания значений используется, если массив небольшой.

2) Оператором ввода с клавиатуры.

For i:=1 to 10 do

begin

Writeln(‘введите ’,i,’-ый элемент массива’);

Readln(a[i]);

{в качестве индекса используется параметр цикла }

end;

Этот способ задания значений также используется для небольших массивов.

3) Заполнение массива с использованием генератора случайных чисел.

.......

RANDOMIZE;

For i:=1 to 10 do

a[i]:=Random(x);

…....

{массив заполнится целыми числами в диапазоне от 0 до Х}

4) Заполнение по формуле.

Каждый элемент массива должен быть рассчитан по формуле (например ai=sin i - cos i)

for i:=1 to 10 do

a[i]:=sin(i)-cos(i);

Вывод массива.

For i:=1 to 10 do writeln(a[i]);

Вывод пятого элемента массива записывается так : write(a[5]);