Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка Программирование

.pdf
Скачиваний:
35
Добавлен:
13.03.2016
Размер:
3.61 Mб
Скачать

15.Вводятся имена и годы рождения двух девочек. Вывести на экран имя старшей.

16.Дано: v – скорость (км/час); s – расстояние до университета. Не опоздает ли студент на пары, если до начала осталось 30 минут?

17.Дано натуральное двухзначное число. Определить, что больше, цифра десятков или цифра единиц.

18.Поместится ли круг радиусом R в квадрат со стороной a.

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

20.Даны два натуральных числа. Определить, является ли большее из них четным.

21.Даны площадь круга и площадь квадрата. Определить: 1) поместится ли круг в квадрате? 2) поместится ли квадрат в круге?

22.Имеется цепь из двух резисторов, соединенных последовательно или параллельно. Определить вид соединения, если известны сопротивления резисторов и сопротивление цепи.

23.Прием на работу идет на конкурсной основе. Кандидат будет принят, если стаж его работы не менее 10 лет, а возраст не более 42 лет. Определить, будет ли кандидат принят на работу.

24.Определить, удовлетворяет ли введенное пользователем число трем отдельным условиям: 1) оно четное, 2) оно делится на 3, 3) не делится на

5.

25.Даны два числа. Определить, делится ли одно число на другое число без остатка.

Задание к лабораторной работе № 2

(Операторы управления CASE)

1.Пользователь вводит длительность звонка и код города. Необходимо вычислить и вывести стоимость разговора, а также город. Например, если 495 – Москва, стоимость минуты разговора – 25 руб. Необходимо добавить 4-5 городов.

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

3.Предложить пользователю ввести номер месяца, выведите название этого месяца.

4.Предложить пользователю ввести номер дня недели, выведите название этого дня (1 – Пн, 2 – Вт, и т.д.)

5.Предложить пользователю ввести два числа, запомнить их. Предложите пользователю выбрать действие (+, –, *, / ), составьте выражение, выведите его на экран с решением.

6.Участники соревнований делятся на возрастные группы:

15 - 20 лет – первая группа;

21 - 35 лет – вторая группа;

36 - 50 лет – третья группа.

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

41

7. Предложить пользователю ввести вид треугольника: 1 – прямоугольный, 2 – равнобедренный и 3 – равносторонний. Запросите минимально необходимые данные и вычислите площадь треугольника.

8.Контрольные делятся на варианты. Первый вариант пишут студенты, фамилии которых начинаются «A»-«J», второй – «K»-«R», остальные пишут третий вариант. Вводится фамилия студента, указать номер варианта контрольной.

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

10.Запросите у пользователя шкалу в которую необходимо перевести температуру (Кельвина (K), Фаренгейта (F) или Цельсия (C)), запросите значение температуры (в градусах Цельсия), выведите результат с

пояснением (формулы перевода: C 59 (F 32); C K 273.15).

Тема № 3. Построение таблицы значений функции

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

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

While и repeat-until

Если заранее неизвестно, сколько раз необходимо выполнить тело цикла, то удобнее всего пользоваться циклом с предусловием (while) или циклом с постусловием (repeat-until).

Общий вид этих операторов:

while <условие_1> do <оператор>; repeat <операторы> until <условие_2>;

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

Замечание. На каждой итерации все циклы, кроме repeat-until выполняют только по одному оператору (либо группу операторов, заключенную в операторные скобки begin-end и потому воспринимаемую как единый составной оператор). В отличие от них, цикл repeat-until позволяет выполнить сразу несколько операторов: ключевые слова repeat и until сами служат операторными скобками, поэтому операторные скобки (begin-end) не требуются.

Циклы while и repeat-until, так же, как циклы for-to и for-downto, можно назвать в некотором смысле противоположными друг другу.

42

Последовательность действий при выполнении этих циклов приведена в таблице 7.

Таблица 7

Последовательность выполнения операторов цикла

 

Для while:

 

Для repeat-until:

1.

Проверяется, истинно ли

1.

Выполняются <операторы>.

<условие_1>.

 

 

2.

Если это так, то выполняется

2.

Проверяется, ложно ли

<оператор>.

<условие_2>

3.

Пункты 1 и 2 выполняются до тех

3.

Пункты 1 и 2 выполняются до тех

пор, пока <условие_1> не станет

пор, пока <условие_2> не станет

ложным.

истинным.

Для while:

Для repeat-until:

Таким образом, если <условие_1> изначально ложно, то цикл while не выполнится ни разу. Если же <условие_2> изначально истинно, то цикл repeat- until выполнится один раз.

for-to и for-downto

В случае, когда количество однотипных действий заранее известно (например, необходимо обработать все компоненты массива), стоит отдать предпочтение циклу с параметром (for).

Инкрементный цикл с параметром

Общий вид оператора for-to:

for i:= first to last do <оператор>;

Счетчик i (переменная), нижняя граница first (переменная, константа или выражение) и верхняя граница last (переменная, константа или выражение) должны относиться к эквивалентным порядковым типам данных. Если тип нижней или верхней границы не эквивалентен типу счетчика, а лишь совместим с ним, то осуществляется неявное приведение: значение границы преобразуется к типу счетчика, в результате чего возможны ошибки.

Цикл for-to работает следующим образом:

1)вычисляется значение верхней границы last;

2)переменной i присваивается значение нижней границы first;

3)производится проверка того, что i <= last;

4)если это так, то выполняется <оператор>;

5)значение переменной i увеличивается на единицу;

6)пункты 3-5, составляющие одну итерацию цикла, выполняются до тех пор, пока i не станет строго больше, чем last; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору.

43

Из этой последовательности действий можно понять, какое количество раз отработает цикл for-to в каждом из трех случаев:

first < last: цикл будет работать last - first + 1 раз;

first = last: цикл отработает ровно один раз;

first > last: цикл вообще не будет работать.

После окончания работы цикла переменная-счетчик может потерять свое значение. Таким образом, нельзя с уверенностью утверждать, что после того, как цикл завершил работу, обязательно окажется, что i=last+1. Поэтому попытки использовать переменную-счетчик сразу после завершения цикла (без присваивания ей какого-либо нового значения) могут привести к непредсказуемому поведению программы.

Декрементный цикл с параметром

Существует аналогичный вариант цикла for, который позволяет производить обработку не от меньшего к большему, а в противоположном направлении:

for i:= first downto last do <оператор>;

Счетчик i (переменная), верхняя граница first (переменная, константа или выражение) и нижняя граница last (переменная, константа или выражение) должны иметь эквивалентные порядковые типы. Если тип нижней или верхней границы не эквивалентен типу счетчика, а лишь совместим с ним, то осуществляется неявное приведение типов.

Цикл for-downto работает следующим образом:

1)переменной i присваивается значение first;

2)производится проверка того, что i >= last;

3)если это так, то выполняется <оператор>;

4)значение переменной i уменьшается на единицу;

5)пункты 2-4 выполняются до тех пор, пока i не станет меньше, чем

last; как только это произошло, выполнение цикла прекращается, а управление передается следующему за ним оператору.

Если при этом:

first < last, то цикл вообще не будет работать;

first = last, то цикл отработает один раз;

first > last, то цикл будет работать first – last + 1 раз.

Замечание о неопределенности значения счетчика после окончания работы

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

Операторы break и continue

Существует возможность прервать выполнение цикла (или одной его итерации), не дождавшись конца его (или ее) работы.

Оператор break прерывает работу всего цикла и передает управление на следующий за ним оператор.

Оператор continue прерывает работу текущей итерации цикла и передает управление следующей итерации (цикл repeat-until) или на предшествующую ей проверку (циклы for-to, for-downto, while).

44

Замечание. При прерывании работы циклов for-to и for-downto с помощью оператора break переменная цикла (счетчик) сохраняет свое текущее значение, не «портится».

Задание

Составить программу вычисления значений указанной функции на отрезке [A,B] в точках xi A i H , где H (B A)/M , M – заданное целое число. Значения A, B и M берутся из таблицы в соответствии с вариантом задания. Задание необходимо решить двумя разными способами: с использованием цикла for и с использование цикла while. Сравните результаты выполнения программ (например, рис. 8 и 9), если результаты отличаются, определите причину.

Образец выполнения задания

F(x)

 

A

 

B

M

x2 + cos(x–2)

1

 

2∙π

 

15

Текст программы a:

var a,b,h,r:real; begin

a:=1;

b:=2*pi; h:=(2*pi-1)/15; r:=a;

writeln('A=',a:0:3,' B=',b:0:3); while (r<=b) do

begin

writeln(r:0:3,'^2 + cos(',r:0:3,'-2) = ',(r*r+cos(r- 2)):0:3);

r:=r+h;

end;

readln;

end.

45

Рис. 8. Результат работы программы А

Текст программы б:

var a,b,h,r,k:real; i:integer; begin

a:=1;

b:=2*pi; h:=(b-a)/15; r:=a;

writeln('A=',a:0:3,' B=',b:0:3); for i:=1 to 16 do

begin

k:= sqr(r)+cos(r-2);

writeln(i,') ',r:0:3,'^2 + cos(',r:0:3,'-2) = ',k:0:3);

r:=r+h;

end;

readln;

end.

Рис. 9. Результат работы программы Б

Варианты домашних заданий

Внимание! Обратите внимание на интервал вывода значений функции. При использовании цикла while последнее значение функции может не выводиться, тогда выведите большее число знаков после запятой (9-12). Для границы B и для параметра x в последней точке (B).

Номер вар.

F(x)

A

B

M

1

x – sin(x)

0

π/2

10

2

sin(x) – 1

π/4

π/2

15

3

cos(x) – sin(x)

π/3

2π/3

20

4

tg(x) – sin(2x)

0

π/4

10

5

ctg(x) + cos(2x)

π/4

π/2

15

46

Номер вар.

F(x)

A

B

M

6

arcsin(x)

0

0.9

20

7

arccos(x)

0.5

0.9

10

8

sin(x) – cos(x)

0

π/2

20

9

x sin(x)

0

10

10

sin(1/x) + 1

π/8

2/π

15

11

cos(1/x) – 1

π/4

4/π

20

12

sin(x2)

π/6

2π/3

10

13

cos(x2)

π/3

3π/2

15

14

sin(x) + tg(x)

0

π/4

20

15

cos(x) + ctg(x)

π/4

π/2

10

16

tg(x/2)

0

2π/3

15

17

tg(x/2) + cos(x2)

π/2

π

20

18

ctg(x/3) + sin(x2)

π/4

π/2

10

19

sin(x/4)/4

π/2

π

15

20

arcctg(x) – sin(x2)

1

5

20

21

tg(x/4) + sin(x/2)

–1

1

10

23

x2 tg(x/2)

5

8

15

24

tg(x)/x

–5

5

20

25

tg(x) +ctg(x/2)

0

3

10

Задание к лабораторной работе № 3

1.Сколько существует двухзначных чисел, у которых цифра десятков больше цифры единиц? Выведите эти числа.

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

3.Определить, сколько существует двухзначных чисел кратных трем, вывести их сумму.

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

5.Определить, сколько существует трехзначных чисел кратных m, вывести их на экран.

6.Выведите на экран строку из 10 звездочек, в следующей строке спросите: «Еще (Y/N)». Пока пользователь будет вводить «Y», выводите строку звездочек, каждый раз увеличивая на одну звездочку. Если введен ответ «N», завершите программу, иначе сообщите пользователю, что его ввод не допустим и его надо повторить.

7.Сколько существует чисел меньших 100, цифры которых идут в возрастающем порядке? Вывести эти числа на экран.

47

8.Число ряда Фибоначчи равно сумме двух предыдущих, а первые два числа ряда равны 1. Таким образом, ряд выглядит, как 1, 1, 2, 3, 5, 8, 13… Предложите пользователю ввести некоторое число и выведите все элементы последовательности, не превышающие указанного числа.

9.Сколько существует двухзначных чисел, сумма цифр которых равна 7? Вывести эти числа на экран.

10.Предложите пользователю ввести 10 оценок, полученных группой студентов на экзамене. Проверьте, что оценки находятся в интервале от 2 до 5. Выведите итого подобного вида: «Отлично: 2|Хорошо: 5|Удовлетворительно: 3|Неудовлетворительно: -|, вместо символа «|» -

переход на новую строку.

11.Определить, сколько трехзначных чисел содержат хотя бы одну цифру 3? Вывести эти числа на экран.

Тема № 4. Рекурсия и организация циклов в программе

Вматематике функция называется рекурсивной (рекуррентной), если ее

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

Вкачестве примера рекурсии традиционно приводится задача вычисления факториала n!. По определению, n ! = n ∙ ( n – 1 ) !. А для вычисления ( n – 1 ) ! необходимо знать ( n – 2 ) !, и так далее до 0 ! = 1.

function fact(n:integer):integer; begin

if (n<=1) then Result:=1

else Result:=n*fact(n-1);

end;

var k,kf:integer; begin write(Rus('Число:')); readln(k); kf:=fact(k); writeln(k,' != ',kf); readln;

48

end.

Задание

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

|an | .

Внимание! В вариантах 1-17 необходимо вычислить значение приведенной функции и ряда, вывести результат на экран, результаты обоих вычислений должны совпадать.

Образец выполнения задания

Задание: S x2 x3 x4 x5 x6 ... .

2! 3! 4! 5!

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

 

 

 

 

 

 

 

 

a ( 1)

n x3

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

n!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для получения рекуррентной формулы вычислим отношение an 1 a

:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

a

 

( 1)n 1 xn 1

 

 

 

 

( 1)n 1 xn 1 n!

( 1) x

 

 

 

 

 

 

(n 1)!

 

 

 

 

n 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

a

 

( 1)n xn

 

 

 

( 1)n

 

 

 

 

 

 

 

 

 

 

xn (n 1)!

n 1

 

 

n

 

 

 

 

 

 

n!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Откуда, a

 

a

 

( 1) x

,

то есть для получения следующего элемента ряда

 

 

 

 

 

 

n 1

n

 

 

n 1

 

 

 

 

 

 

 

 

 

 

 

необходимо текущий элемент умножить на ( 1) x . n 1

Примечание. В некоторых случаях при использование отношения an 1

an

ряд может расходиться, в этом случае можно использовать отношение an an 1 .

Текст программы:

var sum,an,x:real;n:integer; begin

write('Vvedite X:'); readln(x);

sum:=0; an:=-(x*x); n:=1;

while (abs(an)>0.0001) do begin

49

sum:=sum+an;

n:=n+1; an:=an*((-1*x)/(n+1)); end;

writeln(Rus('Сумма '),n:3, Rus(' элементов равна='),sum:0:5);

readln;

end.

Рис. 10. Результат работы программы

Варианты домашних заданий

 

 

ln(1 x)

x

x2

 

 

 

 

x3

 

 

 

(N 1)

 

x(N 1)

1)

функция

 

; S 1

 

 

 

 

 

 

 

 

 

 

 

... ( 1)

 

 

 

...;

 

2

 

3

 

 

4

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

N

2)

функция ex ; S 1 x

x2

 

 

x3

 

 

x

4

 

 

x5

...;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2!

 

3!

 

4!

 

5!

 

 

 

 

 

3)функция sin(x); S x x3 x5 x7 x9 ...;

3! 5! 7! 9!

4)функция cos(x); S 1 x2 x4 x6 x8 ...;

 

 

 

1

 

 

 

 

 

 

2!

 

 

 

4!

 

 

 

6!

 

 

8!

 

 

 

 

 

 

 

 

 

 

 

 

 

5)

функция

; S 1 x x2

x3

 

x4

..., для | x| 1;

 

 

 

 

 

 

 

 

 

 

 

1 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3

 

 

 

 

 

 

 

 

 

3 x5

 

 

 

 

 

3 5 x7

 

3 5 7 x9

 

 

 

arcsin(x);

S x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6)

функция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...

 

 

 

 

 

 

 

 

 

 

2 4 5

2 4 6 7

 

 

 

(2 n)!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 3

 

 

 

 

2 4 6 8 9

 

...

x2 n 1

...;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4n (n!)2 (2 n 1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

функция arctg(x); S x

 

 

 

x3

 

 

 

x5

 

 

 

 

x7

 

 

 

x9

 

 

 

 

 

 

 

 

 

7)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ex

e x

 

 

 

3

 

 

 

5

 

 

 

7

 

 

 

9

 

 

 

 

 

 

 

 

 

 

 

 

S

x

 

x3

 

 

 

 

 

x5

 

 

 

x7

 

 

x9

 

 

 

 

 

 

 

 

 

8)

функция

 

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...;

 

 

 

 

 

 

3!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

5!

 

 

 

7!

 

 

 

9!

 

 

 

 

 

 

 

 

 

 

 

 

ex

e x

S

 

 

x2

 

 

 

 

x4

 

 

x6

 

x8

 

 

 

 

 

 

 

 

 

9)

функция

 

 

 

;

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...;

 

 

 

 

2

 

 

 

2!

 

4!

 

6!

 

8!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10)

функция ln(1 x);

S

x

 

x2

 

 

x3

 

 

x4

 

 

x5

 

...;

 

 

 

 

 

 

 

 

3

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

1 x

 

 

 

 

 

 

 

 

 

 

 

x3

 

 

 

 

 

x5

 

 

 

 

 

x7

 

 

 

x9

 

 

 

11)

функция ln(

 

 

); S 2 (x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...).;

 

 

 

 

 

 

3

 

 

5

 

 

7

 

9

 

 

 

 

 

 

 

 

1 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

50