Paskal_ucheb_posob_ch1_21_11_2011
.pdf41
Упражнение 2.
Вычислить:
24/(3*4)-24/3/4+24/3*4
12 |
8/4 |
+ |
8*4 |
2 |
- 2 |
+ |
32 = 32 |
Ответ: 32
Упражнение 3.
Записать на ПАСКАЛЕ следующие формулы:
|
п/п |
Исходная |
Запись на Паскале |
|
|
формула |
|
|
1. |
(1+X)2 |
SQR(1+X) или (1+X)*(1+X) |
|
2. |
X-1 |
1/X |
|
3. |
│A+B*X│ |
ABS(A+B*X) |
|
4. |
Х4 |
SQR(SQR(X)) |
|
5. |
SIN(X) |
SIN(X) |
|
6. |
X100 |
EXP(100*LN(X)) |
|
7. |
COS 2X3 |
SQR(COS(X*X*X)) |
|
8. |
21+X |
EXP((1+X)*LN(2)) |
|
9. |
LOG2 (X/5) |
LN(X/5)/LN(2) |
|
10. |
Х0,5 |
EXP( (0.5)*LN(X)) |
|
11. |
TG(X |
SIN(X)/COS(X) |
|
12. |
(1+X) 1/3 |
EXP(LN(1+X)/3) |
13 |
X-100 |
EXP(100*abs(LN(X)))*(-1) |
Таблица 9. Запись формул и выражений.
аb = еb*ln(a)
Упражнение 4.
Число e можно записать: EXP(1)
42
Pi можно записать:4*ARCTAN(1)
SIN0(X ) = SIN(Pi*(X/180)
Упражнение 5.
Написать программу, которая вычисляет расстояние между точками с координатами (Х1,У1) и (Х2,У2) по формуле: d=sqrt(sqr(x1-x2)+sqr(y1-y2)); и находит площадь треугольника по фор-
мулам: p=(a+b+c)/2 , s=sqrt(p*(p-a)(p-b)(p-c).
Var x1,x2,y1,y2,a,b,c,p,s,d:real; Begin
write(‘Ведите координаты 1-й точки по x->’,x1); Readln (x1);
write(‘Ведите координаты 1-й точки по y->’,y1); Readln (y1);
write(‘Ведите координаты 2-й точки по x->’,x2); Readln (x2);
write(‘Ведите координаты 2-й точки по y->’,y2); Readln (y2);
d:= sqrt (sqr (x1-x2)+sqr (y1-y2)); writeln(‘Расстояние между точками = ’,d:8:2); write(‘Вводите длины сторон треугольника’);
Readln (a, b, c,); p:=(a+b+c)/2; s:=sqrt(p*(p-a)(p-b)(p-c));
Writeln (‘Периметр треугольника равен->’,p*2); Writeln (Площадь треугольника =’,s);
Readln ; end.
Упражнение 6.
Поменять местами значения Х и У.
Для обмена значениями должна существовать третья ячейка для хранения промежуточных значений (рис. 6). В данном случае это ячейка R.
R:=X;
X:=Y;
Y:=R;
|
43 |
|
2 шаг |
Y |
X |
3 шаг |
1 шаг |
|
R |
Рисунок 6. Схема перестановки значений между двумя ячейками.
Упражнение 7.
Вычислить значения выражений:
п/п |
Выражение |
Результат |
1. |
TRUNC(6.9) |
6 |
2. |
ROUND(6.9) |
7 |
3. |
TRUNC(6.2) |
6 |
4. |
ROUND(6.2) |
6 |
5. |
TRUNC(-1.8) |
-1 |
6. |
ROUND(-1.8) |
-2 |
7. |
ROUND(0.5) |
1 |
8. |
ROUND(-0.5) |
-1 |
Таблица 10. Примеры вычисления стандартных функции.
Упражнение 8.
Вычислить значения выражений:
п/п |
Выражение |
Результат |
1. |
20 DIV 6 |
3 |
2. |
20 MOD 6 |
2 |
3. |
20 DIV 4 |
5 |
4. |
20 MOD 4 |
0 |
5. |
2 DIV 5 |
0 |
|
|
|
44 |
|
|
|
|
|
|
6. |
2 MOD 5 |
|
2 |
|
7. |
2 |
DIV 0 |
|
Ошибка |
8. |
3 |
МOD 0 |
|
Ошибка |
Таблица 11. Примеры вычислений стандартных функций.
Упражнение 9.
Вычислить значение выражений:
п/п |
Выражение и исходные данные |
Результат |
|
1. |
NOT ODD(N), |
N=0 |
TRUE |
2. |
T AND (P MOD 3) = 0, T=TRUE , |
TRUE |
|
|
P=1010102 = 4210 |
|
|
3. |
(X*Y<>0) AND (Y>X) , X=2, Y=1 |
FALSE |
|
4. |
(X*Y<>0) OR (Y>X), X=2, Y=1 |
TRUE |
|
5. |
A OR (NOT B), A=FALSE, B=TRUE |
FALSE |
Таблица 12. Примеры вычислений логических выражений.
Упражнение 10.
Записать на ПАСКАЛЕ выражение, истинное при выполнении указанного условия и ложное в противном случае.
п/п |
Выражение и исходные дан- |
|
Результат |
|
|
|
ные |
|
|
|
|
1. |
X принадлежит отрезкам |
(X>=2) |
AND |
(X<=5) |
OR |
|
[2,5];[-1,1] |
ABS(X)<=1 |
|
|
|
2. |
Х лежит вне отрезков [2,5] и |
(X<-1) OR (X>1) AND (X<>2) OR |
|||
|
[-1,1] |
(X>5) |
|
|
|
Таблица 13. Примеры вычислений логических выражений.
Упражнение 11.
Нарисовать на плоскости (X,Y) область: а) в которой истинно указанное выражение:
(Y>=X) AND (Y+X>=0) AND (Y<=1)
б) в которой, и только в которой истинно указанное выражение:
(ABS(X)<=1) AND (ABS(Y)>=1)
45
СЕМИНАРЫ ЧАСТЬ II
Условный оператор, операторы цикла.
Упражнение 12.
Var X,Y : real; Begin
Read ( X );
if (X < 0)
Then Y:=sqr(X) + 1
Else
if (X > (3.14/2))
Then Y:=X - 2.1 Else Y:=sin(X);
Writeln ('Y= ',Y:2:4); End.
Что делается в программе?
Для более четкого понимания алгоритма разработайте и приведите и блок-схему.
Упражнение 13.
Просчитать сумму чисел от 1 до N.
Var
s,i,n: integer; Begin
Writeln ('Bведите N '); Readln (n);
for i:=1 to n do Begin
Writeln (' Суммируется ',I:4,' элемент '); if not (odd(i)) then
s:=s+i;
End;
Writeln (' Сумма = ',S )
End.
Подобная задача рассматривалась в разделе, где рассматривался цикл с параметром FOR.
46
Упражнение 14.
Сгенерировать число Фибоначчи, не превосходящее заранее заданное натуральное число. Число Фибоначчи получается по формуле:
Fi+2 = F i+1 + F i ,
где I >= 0, F0=0, F1=1.
Программы написать с использованием двух типов циклов: While и Repeat.
program FIB_while; Var
n,fi,fi1,fi2:integer; Begin
write(‘Введи погрешность вычисления’);
Readln (n); fi:=0; fi1:=1;
fi2:=1; {fi2:=fi1+fi;}
while fi2<=n do Begin fi2:=fi1+fi; fi:=fi1;
fi1:=fi2;
End; Writeln (fi); Readln ;
End.
program FIB_repeat; var
n,fi2,fi1,fi :integer; Begin
write(‘Введи погрешность вычисления’);
Readln (n); fi:=0; fi1:=1; repeat
fi2:=fi1+fi;
fi:=fi1;
fi1:=fi2; until fi2>=n;
47
Writeln (fi); Readln ;
end.
Не зависимо от применения различных типов циклов весь смысл задачи сводится к тому, что нужно делать после некоторых вычислений перестановки значений между переменными, где они хранятся. Поясним на рисунке 7. В части А) приведен оператор, распложенный внутри цикла, fi2:=fi1+fi, записанный в привычном «школьном» виде. В части Б) приведены сразу два оператора, расположенные внутри цикла, fi:=fi1 (1); fi1:=fi2 (2), в которых последующее значение элемента ряда заносится в предыдущую ячейку.
A) |
Fi |
+ |
Fi1 |
= |
Fi2 |
|
|
Fi |
|
Fi1 |
|
Fi2 |
Б) |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
2 |
Рисунок 7. Схема замены элементов при суммировании ряда.
Упражнение 15.
Дан текст, содержащий N символов. Подсчитать количество вхождений символов А и В.
Program kol;
Var k,l,i,n :integer; a:char;
Begin write('n=?'); readln(n); k:=0;
l:=0;
for i:=1 to n do Begin read(a);
48
if a='a' then k:=k+1 {inc(k) -> +1; dec(k) -> -1} else if a='b' then l:=l+1;
End;
writeln('a=',k,' b=',l);
End.
Упражнение 16.
Дано целое число N, нужно найти его факториал.
Program FAKTORIAL ; Var N,I,F : integer; Begin
readln (N); F:=1;
for I:=2 to N do F:=F*I;
writeln ('Факториал от ', N ,' равен ', F );
End.
Для полного понимания вычисления факториала посмотрим его подсчет с помощью таблицы трассировки при N=5.
Шаг |
F |
I |
F |
1 |
1 |
2 |
1*2=2 |
2 |
2 |
3 |
2*3=6 |
3 |
6 |
4 |
6*4=24 |
4 |
24 |
5 |
24*5=120 |
|
|
|
|
Таблица 14. Таблица трассировки вычисления факториала
Упражнение 17.
Дано N чисел, вводимых с клaвиатуpы. Найти сумму четных чисел .
Program SUMMA; Var
A: array[1..10] of integer; I,S: integer;
Begin
for I:=1 to 10 do begin
write(‘Введите число с номером’,I,’’); readln ( A[I] );
end;
49
S:=0;
for I:=1 to 10 do
if ( odd( A[I] )=false) then S:=S+A[I] ; Writeln ('Сумма четных чисел равна ', S );
End.
Для хранения вводимых чисел используется целочисленный массив из 10 элементов, которые водится с клавиатуры в первом цикле с параметром. Во втором цикле рассматриваются поочередно каждый элемент массива. Если он имеет четное значение, то этот элемент заносится в сумму.
Напомню, что функция odd принимает значение True, если аргумент является нечетным числом, и False, если число четное.
Упражнение 18.
Найти сумму ряда по приведенной ниже формуле:
Y 1 |
x1 |
|
x2 |
|
x3 |
... |
xn |
. |
|
|
|
|
|
||||
|
1! |
2! |
3! |
|
n! |
Суммирование закончить в том случае, когда очередной элемент ряда станет меньше 10-5 .
uses crt;
const pogr=1e-5; var
n, fact, i ,x, znam: integer; summa, a_n, chisl: real;
begin
clrscr;
writeln(' a(n) = (x^n) / n! ' ); write('input x (zeloe)->'); readln(x);
n:=1;
summa:=1;
chisl:=x;
znam:=1; a_n:=chisl/znam;
while a_n>=pogr do begin summa:= summa+a_n; n:=n+1;
chisl :=exp(n*ln(x));
50
fact:=1;
for i:=2 to n do fact:= fact * i;
znam:=fact; a_n:=chisl/znam;
end;
writeln ('summa r y a d a =',summa:8:3,' shag=',n); readln;
end.
В данном примере a_n очередной элемент ряда, chisl – значение числителя в дроби очередного элемента ряда, znam- знаменатель дроби. Числитель вычисляется согласно известной формуле возведения в степень, а знаменатель – как факториал от значения n, которое является основным критерием для изменения значения очередного элемента ряда.
Упражнение 19.
Найти сумму ряда согласно приведенной формулы:
Y 1 |
x1 * ( 1)1 |
|
x2 * ( 1)2 |
|
x3 * ( 1)3 |
... |
xn * ( 1)n |
. |
|
|
|
|
|
||||
|
1! |
2! |
3! |
|
n! |
Суммирование закончить в том случае, когда абсолютное значение очередного элемента ряда станет меньше 10-5
uses crt;
const pogr=1e-5; var
n,fact,i ,x,znam, koeff:integer; summa,a_n,chisl:real;
begin
clrscr;
writeln(' a(n)=(x^n*(-1^n)/n!'); write('input x (zeloe)->'); readln(x);
n:=1;
summa:=1; chisl:=-x; znam:=1;
if odd(n) then koeff:= -1 else koeff:=1;