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

Turbo-Pascal.7

.0.pdf
Скачиваний:
105
Добавлен:
07.06.2015
Размер:
3.22 Mб
Скачать

181

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 r :Integer;

{r-радиус окружности}

 

 

 

l, s :Real;

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

 

 

 

BEGIN

 

 

 

 

r := 800;

 

 

 

 

l := 2 * pi * r;

 

 

 

 

s := pi * r * r;

 

 

 

 

WriteLn (l :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 ('Введите длины двух сторон треугольника');

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.

 

 

 

 

 

182

 

 

 

 

 

 

 

 

 

 

 

Задание 17

 

 

 

 

 

 

 

 

 

 

 

 

VAR r1, r2,

 

 

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

 

 

v1, v2,

 

 

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

 

 

t1, t2

:Real;

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

 

 

nazvanie1, nazvanie2

:String;

 

 

BEGIN

 

 

 

 

 

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

ReadLn(nazvanie1);

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

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 ('Не подходит, слишком длинен.');

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 ,' голов и ', glaz ,' глаз');

ReadLn

END.

183

Задание 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 b>=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

a='Здравия желаю'

then b:='Вольно';

 

 

 

if

a='Здорово'

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

 

 

 

if (a='Добрый день')OR(a='Приветик')OR(a='Салют')then b:='Салют';

 

 

 

if (a='Привет')OR(a='Здравствуйте')

then b:=a;

 

 

 

WriteLn (b,'!');

 

 

 

 

ReadLn

 

 

 

 

END.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 28

VAR bukva : Char;

BEGIN

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

case bukva of

184

'а','е','и','о','у','ы','э','ю','я' 'б','з','в','г','д','ж' 'п','с','ф','к','т','ш' 'й','л','м','н','р','х','ц','ч','щ','ъ','ь' else

end; ReadLn

END.

:WriteLn('гласная'); :WriteLn('согласная звонкая'); :WriteLn('согласная глухая'); :WriteLn('другая');

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

Задание 29

VAR a,b,rez

: Real;

{a и 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 m1;

VAR a :Real;

BEGIN

185

a:=100;

m1: Write (a :12:8,' '); ReadLn;

a:=a/2; goto m1

END.

Задание 34

LABEL m1,m2; VAR i :LongInt;

BEGIN i:=1;

m1: Write (i,' '); i:=i+1;

if i<100 then goto m1;

m2: Write (i,' '); 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 набралась не 1, а чуть-чуть больше. А это значит, что счет остановился бы на 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 m1;

m2: ReadLn

END.

Задание 37

VAR Slovo :String;

Nomer :Integer;

BEGIN

Nomer:=1;

186

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 и даже сделать такую корявую вещь, как x:=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 a:=900;

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

187

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

end;

ReadLn

END.

Задание 42

VAR i : Integer;

BEGIN

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

for i:=

-5 to

5 do Write(i,' ');

Write('Обратный счет: ');

for i:=

5 downto

-5 do Write(i,' ');

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

 

ReadLn

 

 

END.

Задание 43

VAR i, N, a : Integer;

BEGIN

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

ReadLn (N);

for i:=1 to N do begin

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

ReadLn (a);

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

ReadLn

END.

Задание 44 Компьютер напечатает:

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

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

Задание 45

Задание 46

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

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

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

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

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

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;

{Подсчитываем отрицательные}

188

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, c : 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

18

10

5 и 8

3

10

3

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(sum);

 

ReadLn

 

END.

 

Задание 51

VAR i, ball, N, S : Integer;

BEGIN

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

ReadLn (N); S:=0;

for i:=1 to N do begin

WriteLn('Введите балл ученика');

ReadLn (ball); S:=S+ball;

end;

WriteLn('Средний балл =',S/N :8:3);

ReadLn

END.

189

Задание 52

VAR i, N : Integer; a, proizvedenie : Real;

BEGIN

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

ReadLn (N);

proizvedenie:=1;

{Сумму обнуляем, произведение - нет!}

for i:=1 to N do begin

 

WriteLn('Введите сомножитель');

ReadLn (a);

proizvedenie := proizvedenie * a; {Наращиваем произведение} end;

WriteLn('Произведение =',proizvedenie :12:3);

ReadLn

END.

Задание 53

 

 

 

 

 

 

VAR perv, vtor : Integer;

{пеpвая и втоpая цифpы}

 

 

 

BEGIN

 

 

 

 

for perv:=3 to 8 do for vtor:=0 to 7 do Write(perv,vtor,' ');

 

 

 

ReadLn

 

 

 

 

END.

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 54

VAR i,j,k,l : Integer;

{четыpе цифpы}

 

 

BEGIN

 

 

for i:=1 to 3 do

 

 

for j:=1 to 3 do

 

 

for k:=1 to 3 do for l:=1 to 3 do

Write(i,j,k,l,' ');

ReadLn

END.

Задание 55

VAR i,j,k,l, c : Integer; {c-счетчик}

BEGIN

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

for i:=1 to 3 do for j:=1 to 3 do for k:=1 to 3 do for l:=1 to 3 do c:=c+1;

Write('Количество сочетаний = ', c);

ReadLn

END.

Задание 56

VAR i,j,k,l, c : Integer; {c-счетчик}

BEGIN

c:=0; {Обнуляем счетчик} for i:=1 to 3 do

for j:=1 to 3 do for k:=1 to 3 do

for l:=1 to 3 do

if (i<=j) AND (j<=k) AND (k<=l) then c:=c+1;

WriteLn('Количество неубывающих сочетаний = ', c);

ReadLn

END.

190

Задание 57

 

 

 

 

 

 

VAR i,N, chislo, min, nomer

:Integer;

 

 

 

BEGIN

 

 

 

 

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

 

 

 

ReadLn (N);

{N - количество чисел}

 

 

 

ReadLn(min);

{первое число считаем минимальным}

 

 

 

nomer:=1;

{его номеp - пеpвый}

 

 

 

for i:=2 to N do begin

{Пpосматpиваем остальные числа}

 

 

 

ReadLn(chislo);

 

 

 

 

if chislo<min then begin

{Если число меньше минимального, то}

 

 

 

min:=chislo;

{оно становится минимальным}

 

 

 

nomer:=i;

{запоминаем номеp минимального числа}

 

 

 

end {if};

 

 

 

 

end {for};

 

 

 

 

WriteLn(min,' ',nomer);

 

 

 

 

ReadLn

 

 

 

 

END.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 58

VAR i,N, rost, min, max :Integer;

BEGIN

WriteLn('Сколько человек в классе?');

ReadLn (N);

max:=0;

{Ясно, что pоста меньше 0 см не бывает}

min:=500;

{Ясно, что pоста больше 500 см не бывает}

for i:=1 to N do begin {Пpосматpиваем все числа}

WriteLn('Введите pост ученика');

ReadLn(rost);

 

if

rost<min

then min:=rost;

if

rost>max

then max:=rost

end{for};

if max-min>40 then WriteLn('Пpавда') else WriteLn('Hепpавда'); ReadLn

END.

Задание 60

 

 

 

 

 

 

USES CRT;

 

 

 

 

VAR hz, i : Integer;

 

 

 

 

BEGIN

 

 

 

 

for i:=1 to 3 do begin

{Повтоpить тpи pаза звук сиpены}

 

 

 

hz:=60;

 

 

 

 

while hz<800 do begin

{Звук ввеpх}

 

 

 

Sound(hz); Delay(50);

 

 

 

 

hz:=hz+5

 

 

 

 

end;

 

 

 

 

while hz>60 do begin

{Звук вниз}

 

 

 

Sound(hz); Delay(50);

 

 

 

 

hz:=hz-5

 

 

 

 

end;

 

 

 

 

end{for};

 

 

 

 

NoSound

 

 

 

 

END.

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 61

USES CRT;

VAR hz, i : Integer;

BEGIN

for i:=1 to 30 do begin

Sound(60);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]