Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

Решения заданий

Задание 1

Программа для робота Пояснения для нас с вами

ПОВТОРИ 5 РАЗ ШАГ ВПЕРЕД Робот идет по коридору до двери

НАЛЕВО Робот поворачивается лицом к двери

ПОВТОРИ 3 РАЗА ШАГ ВПЕРЕД Робот подходит к стулу

ВОЗЬМИ ПРЕДМЕТ Робот берет стул

ПОВТОРИ 2 РАЗА НАЛЕВО Робот поворачивается кругом

ПОВТОРИ 3 РАЗА ШАГ ВПЕРЕД Робот выходит в коридор

НАПРАВО Поворачивается направо

ПОВТОРИ 5 РАЗ ШАГ ВПЕРЕД Идет по коридору до исходного положения

ОПУСТИ ПРЕДМЕТ Робот ставит стул на новое место

Задание 2

1

2

5

+

1

6

=

1

4

1

Задание З

1

9

9

2

М

ы

н

а

ч

и

н

а

е

м

!

4

8

Ш

е

с

т

ь

ю

Ш

е

с

т

ь

3

6

.

А

Р

и

ф

м

е

т

и

к

а

:

3

0

Задание 4

О

Задание 5

VAR a,b : LongInt;

BEGIN

a:= 9000000; b;=1000; WriteLn (a-b); ReadLn END.

Задание 6

Паскаль выдает сообщение об ошибке: Constant out of range (см. сообщения об ошибках в части 4).

Задание 7

Паскаль выдает результат 211 или другой неправильный.

Задание 8

1001

Задание 9

-100

Задание 10

15-10

Задание 11

82

Заданис 12

VAR dlina_dvora, dlina_doma,

Shirina_dvora, shirina_doma,

p1_dvora, pl_doma,

svobodn_pl_dvora, dlina_zabora :Integer;

BEGIN

dlina_dvora:=50; dlina_doma:=20;

shirina_dvora:=30; shirina_doma:=10;

pl_dvora := dlina_dvora * shirina_dvora;

pl_doma := dlina_doma * shirina_doma;

svobodn_pl_dvora := pl_dvora - pl_doma;

dlina_zabora := 2*(dlina_dvora+shirina_dvora)-

(dlina_doma+shirina_doma);

WriteLn (pl_doma,' ', svobodn_pl_dvora,' ', dlina_zabora);

ReadLn

END.

Задание 13

VAR г :Integer; {r - радиус окружности}

l, s :Real {l - длина окружности, s - площадь круга}

BEGIN

г:=800;

l:=2*pi*r;

s := pi * r * r;

WriteLn (1:15:5,' ', s:15:5);

ReadLn

END.

Задание 14

VAR t1, t2, {t1 - время на первом отрезке, t2 - на втором}

v1, v2, {v1 - скорость на первом отрезке, v2 - на втором}

s1, s2 :Integer; {s1 - первый отрезок пути, s2 - второй}

sredn_skorost :Real;

BEGIN

t1:=3; t2:=2;

v1:=80; v2:=90;

s1 :=v1 *t1; {путь равен скорость умножить на время}

s2:=v2*t2;

sredn_skorost := (s1+s2)/(t1+t2);

WriteLn (sredn_skorost :10:3);

ReadLn

END.

Задание 15

VAR a,b,c, perimetr :Integer; {a,b,c - стороны треугольника}

BEGIN

a:=20;

WriteLn ('Введите длины двух сторон треугольника1);

ReadLn(b,c);

perimetr := a+b+c; {периметр - это сумма сторон}

WriteLn ('Периметр треугольника равен', perimetr);

ReadLn

END.

Задание 16

VAR t, v, s :Real; {t - время, v - скорость, s - путь}

BEGIN

WriteLn ('Введите путь в метрах и скорость в м/с');

ReadLn(s.v);

t:=s/v;

WriteLn ('Время = ', t :6:3,' сек');

ReadLn

END.

Задание 17

VAR r1, r2, {r1 - радиус орбиты первой планеты, r2 - второй}

v1, v2, {v1 - скорость первой планеты, v2 – второй}

t1, t2 :Real; {t1 - продолжительность года первой планеты, t2 - второй}

nazvanie1, nazvanie2 :String;

BEGIN

WriteLn('Bведите название первой планеты');

ReadLn(nazvanie1);

WriteLn(‘Bведите радиус орбиты и скорость первой планеты1’);

ReadLn(r1,v1);

WriteLn('Введите название второй планеты');

ReadLn(nazvanie2);

WriteLn('Введите радиус орбиты и скорость второй планеты');

ReadLn(r2,v2);

t1:= 2*pi*r1/v1; {время = длина орбиты/скорость, а длина}

t2:= 2*pi*r2/v2; {орбиты равна два "пи" * радиус}

WriteLn ('Продолжительность года на планете', nazvanie1,'-

',t1:3:0,' сут., а на планете ',

nazvanie2,' -', t2 :3:0,' сут.');

ReadLn

END.

Задание 18

8

Задание 19

29

Задание 20

66

Задание 21

VAR a1,a2 :Integer;

BEGIN

ReadLn (a1,a2);

if a1>a2 then WriteLn (a1 +a2);

else WriteLn (a1*a2);

WriteLn('ЗАДАЧА РЕШЕНА');

ReadLn

END.

Задание 22

VAR a,b,c : Integer;

BEGIN

ReadLn (a,b,c);

if a<b+c then WriteLn ('Подходит.')

else WriteLn ('He подходит, слишком длинный.');

ReadLn

END.

Задание 23

VAR golov, glaz, N : Integer;

BEGIN

WriteLn ('Сколько лет дракону?');

ReadLn(N);

if N<100 then golov := 3*N

else golov := 300 + 2*(N-100);

glaz := 2*golov;

WriteLn ('У дракона', golov ,' голов N', glaz ,' глаз');

ReadLn

END.

Задание 24

VAR imya :String;

Vozrast :Integer;

BEGIN

WriteLn ('Здравствуй, я компьютер, а тебя как зовут?');

ReadLn (imya);

WriteLn ('Очень приятно,', imya,'. Сколько тебе лет?');

ReadLn (vozrast);

WriteLn ('Ого! Целых' .vozrast,' лет! Ты уже совсем взрослый!');

if vozrast <=17 then begin

WriteLn ('В какой школе ты учишься?');

ReadLn; {Во время паузы вы можете вводить любой текст,

все равно он программе не понадобится}

WriteLn ('Неплохая школа!')

end

else begin

WriteLn ('В каком институте ты учишься?');

ReadLn;

WriteLn ('Хороший институт!')

end;

WriteLn ('До следующей встречи!');

ReadLn

END.

Задание 25

VAR a,b,c: Integer;

BEGIN

ReadLn (a,b,c);

if a>=b+c then WriteLn ('Неправда')

else if t>=a+c then WriteLn ('Неправда')

else if c>=a+b then WriteLn ('Неправда')

else WriteLn ('Правда');

ReadLn

END.

Задание 26

Ей нравятся любые черноглазые, но только не те, у кого рост находится в диапазоне от 180 до 184.

Задание27

VAR a,b :String; {a - ПРИВЕТСТВИЕ ЧЕЛОВЕКА, b - ОТВЕТ КОМПЬЮТЕРА}

BEGIN

ReadLn(a);

if а='3дравия желаю' then b:='Вольно';

if а='3дорово' then b:='Здравствуйте';

if (а='Добрый день')OR(а='Приветик')ОR(а='Салют')

then b:='Салют';

if (а='Привет') OR (а='3дравствуйте') then b:=a;

WriteLn {b,T);

ReadLn

END.

Задание 28

VAR bukva: Char;

BEGIN

WriteLn ('Введи строчную букву русского алфавита');

ReadLn (bukva);

case bukva of

'а','и','о','у','ы','э',’ю’, ‘я;WriteLn('гласная');

'б','з','в','г','д','ж','й','л','м','н','р'

:WriteLn('Согласный звонкий');

'п','с','ф','к','т','ш','х','ц','ч','щ'

:WriteLn('Согласный глухой');

'ъ','ь' :WriteLn('другая’);

else WriteLn('Таких букв нe знаю')

end;

ReadLn

END.

Задание 29

VAR a.b.rez :Real; {а и b - два числа, rez - результат}

Oper :Char; {oper - знак арифметического действия}

BEGIN

ReadLn (a);

ReadLn (oper);

ReadLn(b);

case oper of

'+' rez:=a+b;

'-' rez:=a-b;

'*' rez:=a*b;

'/' rez:=a/b;

else WriteLn(Таких действий не знаю')

end;

WriteLn(rez:11:8);

ReadLn

END.

Задание 30

Эта программа будет печатать:

Считаем зайцев

10 зайцев

10 зайцев

11 зайцев

13 зайцев

16 зайцев

20 зайцев

Операторы n:=n+1 и WriteLn('Прсчитали зайцев') не будут выполнены никогда.

Задание 31

LABEL m1; BEGIN m1: Write ('A'); ReadLn; goto m1 END.

Задание 32

LABEL m1;

VAR I :LongInt;

BEGIN

i:=1000;

m1: Write (i, ' ');

ReadLn;

i:=i-1;

goto m1

END.

Задание 33

LABEL ml;

VAR a :Real;

BEGIN

a:=100;

ml: Write (a :12:8,' ');

ReadLn;

a:=a/2;

goto ml

END.

Задание 34

LABEL m1,m2;

VAR i :LongInt;

BEGIN

i:=1; {Печатаем 1 2 ... 99}

ml: Write (i, ' '):

i:=i+1;

if i<100 then goto ml;

m2: Write (i, ' '); {Печатаем 100 99 ... 1}

i:=i-1;

if i>=1 then goto m2;

ReadLn

END.

Задание 35

LABEL m;

VAR a :Real;

BEGIN

a:=0;

m: WriteLn(a:5:3,'', a*a:9:6);

a:=a+0.001;

if a<=1.00001 then goto m;

ReadLn

END.

Пояснение. Вместо if a<=1 then приведено if a<=1.00001 then, и вот по какой причине. Вещественные числа компьютер складывает с незначительной погрешностью, но ее достаточно, чтобы при тысячекратном прибавлении 0.001 набралась не единица, а чуть-чуть больше. А это значит, что счет остановился бы на 0.999. Если не верите, попробуйте распечатывать а с 15 знаками после точки. Подробнее о причинах - см. раздел 12.2.

Задание 36

LABEL m1,m2;

VAR x,y,z :Real;

BEGIN

x:=2700;

m1: y:=x/4 + 20;

z:=2*y+0.23;

WriteLn('x=',x:12:6,'y=',y:12:6, 'z=',z:12:6);

if y*z < 1/x then goto m2;

x:=x/3;

goto ml;

m2: ReadLn

END.

Задание 37

VAR Slovo :String;

Nomer :Integer;

BEGIN

Nomer:=1;

repeat

WriteLn('Введите слово');

ReadLn(Slovo);

WriteLn(Nomer,''. Slovo,'!');

Nomer:=Nomer+1;

until Slovo:='Хватит';

WriteLn('Хватит так хватит');

ReadLn

END.

Задание 38

VAR a :Real;

BEGIN

a:=0;

repeat

WriteLn (a:5:3,'', a*a:9:6);

a:=a+0.001;

until a>1.00001;

ReadLn

END.

Задание 39

VAR x,y,z :Real;

BEGIN

x:=8100;

repeat

x:=x/3;

y:=x/4 + 20;

z:=2*y+0.23;

WriteLn ('x=',x:12:6, 'y=',y:12:6,'z=',z:12:6);

until y*z<1/x;

ReadLn

END.

Пояснение. Обратите внимание, что repeat иногда слишком неуклюж по сравнению с комбинацией if и goto. Из-за этого пришлось немного переставить местами операторы программы из задания 36 и даже сделать такую вещь, как х:=8100 (т.к. 8100/3 =2700).

Задание 40

VAR t,s,h,v :Real;

BEGIN

v:=20;

t:=0;

repeat

s:= v*t;

h:= 100-9.81*t*t/2;

WriteLn('t=',t:5:1, 's=',s:8:2, 'h=',h:6:2);

t:=t+0.2;

until h<=0; {Отрицательная высота - значит, упал на землю}

ReadLn

END.

Задание 41

VAR a: Real;

BEGIN

а:=900;

while a>=0 do begin {Из отрицательных чисел корни компьютер не вычисляет}

WriteLn('Число=', а:5:0, 'Корень=', Sqrt(a):7:3);

а:=а-3;

end;

ReadLn

END.

3 ада н и е 42

VAR i: Integer;

BEGIN

Write('Прямой счет:');

for i:=-4 to 4 do Write(i,'');

Write('Oбpaтный счет:');

for i:=4 downto -4 do Write(i,'');

Write('Конец счета');

ReadLn

END.

Задание 43

VAR i, N, a : Integer;

BEGIN

WriteLh('Введите число кубиков');

ReadLn(N);

for i:=1 to N do begin

WriteLn('Введите длину стороны кубика');

ReadLn (a);

WriteLn('Объем кубика=', а*а*а)

end;

ReadLn

END.

Задание 44

Компьютер напечатает:

Площадь пола=300 Объем зала=1200

Площадь пола=300 Объем зала=1200

Площадь пола=300 Объем зала=1200

и не спросит размеры 2-го и 3-го залов.

Задание 45

Компьютер напечатает результаты только для последнего зала.

Задание 46

Компьютер напечатает результат:

a) на 10 больше правильного.

b) в два раза больше правильного.

c) не один раз, а будет печатать нарастающий результат после ввода каждого числа.

d) 0 или 1, так как на каждом цикле счетчик будет обнуляться.

e) 200 или 0 в зависимости от того, положительно первое число или нет.

Задание 47

VAR i, a, N, c_pol, c_otr, c_10 : Integer;

BEGIN

WriteLn('Введите количество чисел');

ReadLn (N);

c_pol:=0; c_otr:=0; c_10:=0; {Обнуляем счетчики}

for i:=1 to N do begin

WriteLn('Введите число');

ReadLn (a);

if a>0 then c_pol:=c_pol+1; {Подсчитываем положительные}

if a<0 then c_otr:=c_otr-1; {Подсчитываем отрицательные}

if a>10 then c_10 :=c_10 +1; {Подсчитываем превышающие 10}

end {for};

WriteLn('Положит-',c_pol,' Отрицат-',c_otr,' Больших 10-',c_10);

ReadLn

END.

Задание 48

VAR a, b, с: Integer;

BEGIN

c:=0; {Обнуляем счетчик}

repeat

ReadLn (a,b) {Ввод пары чисел,}

if a+b=13 then c:=c+1;

until (a=0) AND (b=0); {пока не введена пара нулей}

WriteLn(c);

ReadLn

END.

Задание 49

a) 18

b) 10

c) 5 и 8

d) 3

e) 10

f) 3

g) 5

Задание 50

VAR i, dlina, shirina, S, sum :Integer;

BEGIN

Sum:=0;

for i:=1 to 40 do begin

ReadLn (dlina, shirina);

S:=dlina*shirina; {S - площадь зала}

sum:=sum+S {sum - площадь дворца};

end {for};

WriteLn(sym);

ReadLn

END.