Теперь, когда мы познакомились с операторами, необходимыми для составления линейной программы, рассмотрим еще один пример такой программы. Пусть дано два числа a и b - длины сторон прямоугольника. Найти площадь s и периметр p прямоугольника. На рис.6 представлена графическая схема алгоритма решения данной задачи, а программа приведена в примере pr2.
![]() |
program pr2;
var
a,b,s,p:real;
begin
writeln('Введите длины стоpон пpямоугольника:');
read(a,b);
s:=a*b;
p:=(a+b)*2;
writeln('Площадь = ',s:5:3);
writeln('Пеpиметp = ',p:5:3);
end.
В этой программе все операторы выполняются последовательно друг за другом. Выполнение программы начинается с вызова процедуры вывода writeln, которая выводит на экран подсказку "Введите длины сторон прямоугольника:", что обеспечивает удобный интерфейс с пользователем. Вызов процедуры read приводит к прерыванию программы до тех пор, пока пользователь не введет два числа. Далее вычисляются площадь и периметр прямоугольника и выводятся результаты на экран.
РАЗВЕТВЛЯЮЩИЯСЯ ПРОГРАММЫ
К разветвляющимся программам приводят задачи, в которых, в зависимости от некоторого условия, вычисления производятся тем или иным путем. Пусть нам необходимо вычислить значение y по формуле:
На рис.7 приведена графическая схема алгоритма, а программа - в примере pr3.
![]() |
program pr3;
var
x,y:real;
begin
writeln('Введите x:');
readln(x);
if x>0
then
y:=x*x*x+3
else
y:=x*sin(x);
writeln(y);
end.
В этой программе впервые встречается условный оператор и служит для выбора формулы вычисления y в зависимости от введенного значения x.
УСЛОВНЫЙ ОПЕРАТОР
Условный оператор служит для ветвлений в программе и имеет следующий синтаксис:
if <условие> then <оператор1> else <оператор2>.
Здесь if, then, else - ключевые слова (перев. с англ. если, то, иначе соответственно);
<условие> - логическое выражение типа сравнения (например, a>b, c<=d, f=1), логическому типу посвящен следующий раздел пособия;
<оператор1> и <оператор2> - любой оператор Турбо-Паскаля. Оператор работает следующим образом: если условие истинно, то выполняется <оператор1> и управление передается на следующий за условным оператор; если условие ложно, то выполняется <оператор2> и управление передается на следующий за условным оператор. Таким образом, всегда выполняется один из двух операторов: либо из ветви then, либо из ветви else.
Кроме вышеприведенной формы условного оператора, существует сокращенная форма условного оператора, в которой отсутствует ветвь else:
if <условие> then <оператор1>.
Оператор работает следующим образом: если условие истинно, то выполняется <оператор1> и управление передается на следующий за условным оператор; если условие ложно, то управление сразу передается на следующий за условным оператор. Таким образом, в зависимости от условия <оператор1> либо выполняется, либо не выполняется.
Рассмотрим фрагменты схем алгоритмов и соответствующие им фрагменты программ.
![]() | if a>b then max:=a else max:=b; | |
![]() | if k>0 then s:=s+k; | |
![]() | if a>b then if a>c then max:=a else max:=c; | |
if a>b then
if a>c then
max:=a
else max:=c
else
if b>c then
max:=b
elsemax:=c;
В первом примере приведена полная форма условного оператора, во втором – сокращенная, в третьем – сокращенная с вложенным условным оператором и в четвертом - полная форма с вложенными в каждой ветви условными операторами. Вложенные условные операторы уменьшают число необходимых проверок, обеспечивают большую эффективность, но ухудшают читаемость программы, поэтому не рекомендуется слишком увлекаться вложением условных операторов.
При определении последовательности выполнения вложенных условных операторов следует учесть, что каждое else соответствует тому if, которое ему непосредственно предшествует, таким образом исключается всякая двусмысленность.
Условный оператор может оказаться негибким, так как выполняемые действия могут быть описаны только одним оператором. Если необходимо выполнить в ветви условного оператора несколько операторов, то в этом случае можно использовать составной оператор.
СОСТАВНОЙ ОПЕРАТОР
Когда необходимо добиться того, чтобы последовательность операторов работала как единый оператор, можно помещать эту последовательность между ключевыми словами begin и end. Такая конструкция называется составным оператором, или операторными скобками: begin открывает скобку, end – закрывает. Каждый оператор, входящий в состав составного оператора, заканчивается точкой с запятой. Рассмотрим примеры:
![]() | if c>0 then begin s:=s+c; k:=k+1 end else c:=c-1; |
![]() | if n<m then begin n:=n+1; m:=m-1; end else begin n:=n-1; m:=m+1; end; |
Здесь следует обратить внимание на правила употребления точки с запятой:
- каждое описание переменной и определение константы заканчивается точкой с запятой;
- каждый оператор в теле программы завершается точкой с запятой, если сразу за ним не следуют ключевые слова end, else или until;
- после определенных ключевых слов, таких, как then, else, begin, var, const, никогда не ставится точка с запятой.
Перед ключевым словом end можно поставить точку с запятой, это означает появление дополнительного пустого оператора, который не выполняет никаких действий.
ЛОГИЧЕСКИЙ ТИП
Паскаль позволяет обрабатывать данные не только числового типа, но и других типов, например логического. Для обозначения логического типа используется ключевое слово boolean. Булевы (логические) переменные могут иметь одно из двух значений: true (истина) или false (ложь). Булевский тип является порядковым типом и упорядочен так, что false < true. По сравнению с типом real, который допускает миллионы различимых значений, может показаться, что тип boolean имеет ограниченную область применения. Однако, как это ни странно, именно ограниченность диапазона значений булевых переменных придает булевым выражениям их значимость.
Булевы выражения могут принимать несколько различных форм. Во-первых, они могут быть просто константами true (истина) или false (ложь). Оператор присваивания, использующий эту форму, аналогичен арифметическому оператору. Например, пусть переменные a и b логического типа:
var a,b:boolean;
тогда можно написать операторы:
a:=true;
b:=false.
Булевы выражения можно использовать для проверки отношений между двумя переменными: a>b,c<=d,k=m и т.д. Таким образом, условие в условном операторе является выражением логического типа. Кроме того, булевы выражения могут конструироваться с помощью булевых операций. Эти операции образуют инструментальный фундамент булевой логики, алгебры логики, разработанной в ХIХв. математиком Джорджем Булем. Рассмотрим три основные булевы операции.
Операция and – логическое пересечение (умножение, операция "и"). Выражение a and b дает значение true только в том случае, если a и b имеют значения true, в остальных случаях – false:
true and true = true
true and false = false
false and false = false
Операция or – логическое сложение (объединение, операция "или"). Выражение a or b дает значение false в том и только в том случае, если a и b имеют значения false, в остальных случаях – результат true:
true or true = true
true or false = true
false or false = false
Операция not – отрицание (операция "не"). Выражение not a имеет значение, противоположное значению a:
not true = false
not false = true
Эти операции полезны, если нужно проверить сложное условие:
![]() | if (a>b) and (a>c) then max:=a; |
![]() | if (x=y) or (x=z) then z:=y; |
ОдномерныЕ массивы
Приведем схему алгоритма формирования элементов массива с помощью датчика случайных чисел, вывод элементов массива на экран, вычисление суммы всех элементов.
Программа приведена в примере:
constn1=100; {максимальный размер массива}
type mas = array[1..n1] of integer;
var a:mas;
i,{индекс элемента массива}
n,s:integer;
begin
writeln ('Введите число элементов массива:');
read (n);
{ Формирование массива с помощью датчика случайных чисел}
randomize;{Инициализация датчика случайных чисел }
for i:=1 to n do
a [i]:=random(10);
writeln ('Полученныймассив');
for i:=1 to n do
write (a[i]:5);
writeln;
s:=0; { Нахождениесуммы }
for i:=1 to n do
s:=s+a[i];
writeln ('s=',s);
end.
Графическая схема алгоритма определения максимального элемента массива и суммы положительных элементов, а также замены максимального элемента массива суммой положительных элементов массива.
const n1=100; {максимальный pазмеp массива}
type
mas = array[1..n1] of integer;
var
a:mas;
i, {индекс элемента массива}
n,s,
imax:integer;{индекс максимального элемента}
begin
writeln('Введите число элементов массива:');
read(n);
{Вводмассива}
for i:=1 to n do
begin
read(a[i])
end;
s:=0;
imax:=1;{пpедполагаем, что пеpвый элемент максимальный}
for i:=1 to n do
begin
{если элемент положительный, то прибавляем его к сумме}
if a[i]>0 then s:=s+a[i];
{если текущий элемент массива больше максимального, то запоминаем его индекс}
if a[imax]<a[i] then imax:=i;
end;
writeln('максимальный элемент массива =',a[imax]);
a[imax]:=s;{ замена максимального элемента суммой }
writeln('s=',s);
writeln('Обpаботанныймассив:');
for i:=1 to n do
writeln (a[i]);
end.
2.4. двумерныЕ массивЫ
Приведена схема алгоритма формирования элементов массива с помощью датчика случайных чисел, вывод элементов массива на экран, вычисление суммы всех элементов двумерного массива. Программа дана в примере:
program pr21;
const n1=10; {максимальнoе количество стpок массива}
m1=10; { максимальное количество столбцов массива}
type mas = array[1..n1,1..m1] of integer;
var a: mas;
i, { текущийномеp строки }
j, { текущийномеp столбца }
n,s,m: integer;
begin
writeln('Введите число стpок и столбцов массива:');
read(n,m);
randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(10);
writeln('Полученныймассив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
s:=0;
for i:=1 to n do
for j:=1 to m do
s:=s+a[i,j];
writeln('s=',s);
end.
Дана прямоугольная матрица. Отсортировать столбцы матрицы в порядке неубывания максимальных элементов столбцов. Пример решения:
const n1=10; {максимальнoе количество стpок массива}
m1=10; {максимальнoе количество столбцов массива}
type
mas = array[1..n1,1..m1] of integer;{квадpатнаяматpица}
var
a:mas;
b:array[1..m1] of integer;{массивизмаксимальныхэлементовстолбцов}
i, { текущийномеp стpоки }
j, { текущийномеp столбца }
n,m,d:integer;
fl:boolean;
begin
writeln ('Введите число стpок и столбцов массива:');
read(n,m);
for i:=1 to n do
for j:=1 to m do
begin
writeln('Введитеэлементмассива');
read(a[i,j]);
end;
writeln ('Исходныймассив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
{Фоpмиpование одномеpного массива из максимальных
элементов столбцов}
forj:=1 tomdo {Пеpебиpаемвсестолбцы}
begin
b[j]:=a[1,j];{Пpинимаем пеpвый элемент в столбце за максимальный }
for i:=2 to n do{Пеpебиpаем все элементы в столбце}
if a[i,j]>b[j] then b[j]:=a[i,j];
end;
{Сортировка одномерного и двумерного массива}
repeat
fl:=true;{Поднятьфлаг}
for j:=1 to m-1 do {Перебрать элементы одномерного массива}
if b[j]>b[j+1] then { Проверить нужна ли перестановка }
begin
fl:=false;{опустить флаг}
{Переставить элементы одномерного массива и}
d:=b[j];
b[j]:=b[j+1];
b[j+1]:=d;
{столбцыдвумерногомассива}
for i:=1 to n do
begin
d:=a[i,j];
a[i,j]:=a[i,j+1];
a[i,j+1]:=d;
end;
end;
until fl;{Завершить сортировку,если флаг не опускался}
writeln('Отсортированныймассив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
end.
ЗАПИСИ
Рассмотрим пример программы с использованием массива структур. В ведомости, содержащей фамилии группы студентов, оценки по физике, математике и программированию определить средний балл каждого студента и средний балл в группе.
В программе использованы следующие обозначения:
n1– максимальное количество студентов в группе;
n – реальное количество студентов в группе;
student– идентификатор типа, представляющий запись с полями fam, fiz, mat, pr и ss;
fam – поле записи, содержащее фамилию студента;
fiz, mat, pr – поле записи, содержащее оценки по физике, математике и программированию соответственно;
ss – поле записи, содержащее средний балл студента;
ved – массив, содержащий элементы типа student;
sg – средний балл группы;
i – индекс элемента массива ved;
Программа выглядит следующим образом:
constn1=30;
type student=record
fam:string[10];
fiz,mat,pr:integer;
ss:real;
end;
var ved:array[1..n1] of student;
i,n:integer;
sg:real;
begin
writeln('сколько студентов в группе?');
read(n);
for i:=1 to n do
with ved[i] do
begin
writeln('введитефамилиюстудента');
read(fam);
writeln('введитеоценки');
read(fiz,mat,pr)
end;
sg:=0;
for i:=1 to n do
with ved[i] do
begin
ss:=(fiz+mat+pr)/3; {вычислениесреднегобалластудента}
sg:=sg+ss;
end;
sg:=sg/n;{вычисление среднего балла группы}
writeln('ведомость группы');
write('! фамилия! физика! мат! прогр!');
writeln('! cp. балл!')
for i:=1 to n do
with ved[i] do
begin
write('!',fam:10,'!',fiz:10,'!',mat:10,'!',pr:10);
writeln('!',ss:10:2,'!');
end;
writeln('средний балл в группе =',sg);
end.
СТРОКИ СИМВОЛОВ
Приведем пример программы, определяющие количество символов и слов в произвольнойстроке символов.
program pr28;
const YES=1; {Константы, опpеделяющие является ли }
NO=0; { текущий символ элементом слова}
var
str: string;
nw, {Количество слов}
nc, {Количество символов}
inword: integer; {Переменная, принимающая значения констант YES или NO}
i: integer;
begin
writeln('Введитестpокусимволов:');
read (str);
nw:=0;nc:=0;inword:=NO;
for i:=1 to length(str) do
begin
nc:=nc+1;
if str[i] in [':','.',',','"','!','?',';',' ']{Если pразделитель,}
then inword:=NO {то текущий символ вне слова}
else
if inword=NO then
begin inword:=YES;
nw:=nw+1;
end;
end;
writeln ('nc=',nc,'nw=',nw);
end.
Практические задания
Написать представленные задачи в виде текстовых файлов в программе Wordи проверить их работоспособность.
Создать на основе решения блок-схему каждой задачи.
1. Составить программу, которая запрашивает возраст ребенка и затем выдает решение о приеме ребенка в школу (возраст ³ 7лет).
Program sh;
Var v: integer;
Begin
Write(‘Введите возраст ребенка’);
Readln(v);
If v>=7 then writeln(‘Принимаемвшколу’)
else writeln (‘Не принимаем в школу’);
end.
![]() |
2. Модифицировать данную программу, чтобы ограничить верхнюю границу приема в школу 16 годами.
Program sh;
Var v: integer;
Begin
Write(‘Введите возраст ребенка’);
Readln(v);
If (v>=7) and (v<=16) then writeln(‘Принимаемвшколу’)
else writeln (‘Не принимаем в школу’);
end.
![]() |
3.Даны два числа. Меньшее из этих чисел заменить суммой данных чисел, большее - произведением.
Program sh;
Var x, y,s,p: integer;
Begin
Write(‘Введите 2 числа’);
Readln(x, y);
s:=x+y; p:=x*y;
If x>y
then begin y:=s; x:=p; end
else begin x:=s; y:=p; end;
writeln(‘x=’, x);
writeln(‘y=’, y);
end.
![]() | |||
![]() | |||
4.Составить программу, которая по введенному номеру дня недели выводит на экран его название.
Program days;
Var day:byte;
Begin
Write(‘Введите номер дня недели’);
Readln(day);
Case day of
|
|
|





3: writeln(‘Среда’);
4: writeln(‘Четверг’);
|
|
|

|
7: writeln(‘Воскресенье’)
elsewriteln(‘Такого дня нет’);
end; end.
![]() | |||||||||
![]() | |||||||||
![]() | ![]() | ||||||||
![]() |
5.Составить программу, которая по введенному номеру месяца выводит на экран название времени года.
Program m;
Var k:byte;
Begin
Write(‘Введите номер месяца’);
Readln(k);
Case k of
1, 2, 12: writeln(‘Зима’);
3, 4, 5: writeln(‘Весна’);
6, 7, 8: writeln(‘Лето’);
9, 10, 11: writeln(‘Осень’)
elsewriteln(‘Такогомесяцанет’);
end; end.
![]() | |||
![]() |
6.Вывести на экран таблицу перевода из градусов по шкале Цельсия в градусы по Фаренгейту для значений от 15°С до 30°С с шагом в 1°С. Перевод осуществляется по формуле: F=C*1.8+32.
Program zf;
Var i:integer; f:real;
Begin
Writeln(‘Температура’);
For i:=15 to 30 do
Begin
f:=i*1.8+32;
Writeln(‘поЦельсию’, i, ‘поФаренгейту’, f:5:2);
End;
End.
7. Найти сумму 10 произвольных чисел.
Programz;
Const
N=10;
Var k, x, s: integer;
Begin
k:=0; s:=0; {k- количество введенных чисел}
while k < N do
begin
k:=k+1;
write(‘Введитечисло’);
readln(x);
s:=s+x;
end;
writeln(‘Суммачиселравна’, s);
end.
8. В автопарке, имеющем 18 машин марки КАМАЗ, каждый из КАМАЗов перевез за день определенный объем груза. Определить суммарный объем перевозок грузов за день.
Useswincrt;
TypeKAMAZ=array[1..18] ofreal;
Var
i:integer;
p:KAMAZ;
S:real;
Begin
S:=0;
For i:=1 to 18 do
Begin
Writeln(‘Введите объем перевозок’, I,‘-ой машины, т’);
Readln(p[i]);
S:=S+p[i]; End;
Writeln(‘Суммарный объем перевозок S=’,S:8:2,‘т’);
End.
9. Известна среднемесячная зарплата всех 16 сотрудников одного отдела. Найти величину наибольшей среднемесячной зарплаты в отделе.
Useswincrt;
TypeZARPL=array[1..16] ofreal;
Var
i:integer;
sotr:ZARPL;
max:real;
Begin
For i:=1 to 16 do
Begin
Writeln(‘Введите зарплату ’,I,‘-го сотрудника, руб.’);
Readln(sotr[i]);
End;
max:=sotr[1];
For i:=2 to 16 do
If max<sotr[i] then max:=sotr[i];
Writeln(‘Наибольшая зарплата =’, max:10:2, ‘руб.’);
End.
![]() |
![]() | |||
![]() |
10. Известны результаты экзамена по информатике одной группы из 22 студентов. Определить, сколько студентов сдали экзамен на 4 и 5.
Текст программы:
TypeINF=array[1..22] ofinteger;
Var
stud:INF;
i,p:integer;
begin
p:=0;
for i:=1 to 22 do
begin
stud[i]:=0;
while ((stud[i]<1) or (stud[i]>5)) do
writeln(‘Введитеоценку ’,i,’-гостуден-та’);
readln(stud[i]);
if stud[i]>3 then p:=p+1;
end;
writeln(‘На 4 и 5 сдали экзамен ’,p,’ сту-дентов’);
end.
![]() | |||
![]() |
11. Предположим, известны результаты соревнований по стрельбе, в которых принимали участие 9 человек. Расположить данные результаты в порядке возрастания набранных при стрельбе очков.
Type STREL=array[1..9]of integer;
Var
rez:strel;
i,j,s:integer;
Begin
For i:=1 to 9 do
begin
writeln(‘Введитерезультаты ’,i,’-гоучастни-ка’);
readln(rez[i]);
end;
for i:=1 to 8 do
for j:=i+1 to 9 do
if rez[i]>rez[j] then
begin
s:=rez[j];
rez[j]:=rez[i];
rez[i]:=s;
end;
writeln(‘Отсортированные по возрастанию результаты:’);
for i:=1 to 9 do write (rez[i]:5,’ ‘);
end.
![]() |
12. Задан одномерный массив В (10), заполненный произвольным образом. Подсчитать количество элементов массива, больших заданного числа k.
Varb:array [1..10] ofword;
I, k, s: word;
Begin
s:=0;
For i:=1 to 10 do
b[i]:=random(100);
Write(‘Введитечисло k’);
Readln(k);
For i:=1 to 10 do
If b[i]>k then s:=s+1;
Write(‘Количество элементов’, s);
End.
![]() | |||
![]() | |||
13. Определить самую высокую температуру и самый теплый день в мае.
Var t:array [1..31] of integer;
I, max, n: integer;
Begin
For i:=1 to 31 do
Begin
t[i]:=random(30);
Write(b[i], ‘ ‘);
End;
max:=t[1]; n:=1;
For i:=2 to 31 do
Begin
If t[i] > max then max:=t[i]; n:=i;
End;
Write(‘максимальная температура’, max, ‘в’, n, ‘день’);
End.
![]() | |||||
![]() | |||||
![]() | |||||
14. Пусть задана матрица А из действительных чисел размера 3х4. Найти наибольший элемент во второй строке данной матрицы.
Type Matr=array[1..3,1..4] of real;
Var max:real;
a:Matr;
i,j:integer;
begin
for i:=1 to 3 do
for j:=1 to 4 do
begin
writeln(‘Введитеэлемента[‘,i,’,’,j,’]’);
readln(a[i,j]);
end;
max:=a[2,1];
for j:=2 to 4 do
if max<a[2,j] then max:=a[2,j];
writeln(‘Наибольший элемент второй строки=’,max:8:2);
|
|








|






|


|










|
|
|









15. Известны результаты 5 студентов по итогам экзаменов по химии и информатике. Найти фамилии студентов, сдавших оба экзамена на отлично.
ProgramSessia;
type PR=array [1..5,1..2]of integer;
Fam=array[1..5]of string[10];
var r:PR;
st:Fam;
i,j:integer;
begin
for i:=1 to 5 do
begin
writeln('Введите фамилию ',i,'-го сту-дента');
readln(st[i]);
writeln('Введите оценку данного сту-дента по химии (от 2 до 5)');
readln(r[i,1]);
writeln('Введите оценку данного сту-дента по информатике (от 2 до 5)');
readln(r[i,2]);
end;
for i:=1 to 5 do
if (r[i,1]=5) and (r[i,2]=5) then writeln('Студент-отличник - ',st[i]);
end.
![]() | |||||
| |||||
![]() | |||||
16. Сформировать таблицу Пифагора (таблица умножения) и вывести ее на экран.
Program Pifagor;
Uses crt;
Var p: array[1..9, 1..9] of integer; i, j:integer;
Begin
Clrscr;
for i:=1 to 9 do
for j:= 1 to 9 do
begin
p[i,j]:= i*j;
write(p[i,j], ‘ ‘);
writeln
end;
end.
![]() |
17. Задан двумерный массив В(10, 10), заполненный случайными числами из [-10,10]. Найти и вывести на экран те элементы массива, которые
больше заданного числа k.
Programmassiv;
Uses crt;
Var b: array[1..10, 1..10] of integer; i, j, k:integer;
Begin
Clrscr;
for i:=1 to 10 do
begin
for j:= 1 to 10 do
begin
b [i,j]:= random(20)-10;
|

end;
writeln;
end;
|

readln (k);
|
For j:=1 to 10 do
If b[i, j] >k then write (b[i, j]);
|




|

|

|








18. Дано предложение. Сколько слов является перевёртышами и будет ли это число совершенным.
var i,j,k,l,l1,sum,k1: longint;
a,b,c: string;
d: array [1..60] of longint;
begin
clrscr;
textcolor(11);
write('введитетекст: ');
readln(a);
l:=length(a);
if (a[l]<>'.')or(a[l]<>'!')or(a[l]<>'?')
then begin
a[l+1]:=' ';
inc(l);
end
else a[l]:=' ';
for i:=1 to l do if (a[i]=' ')
then begin
l1:=length(b);c:='';
for j:=l1 downto 1 do c:=c+b[j];
if b=c then inc(k);b:='';
end
else b:=b+a[i];
if k=1 then begin
write('совершенное');
readln;halt;
end;
sum:=0;k1:=1;
for i:=1 to k-1 do if k mod i=0 then begin
d[k1]:=i;inc(k1);
end;
for i:=1 to k1-1 do sum:=sum+d[i];
if k=sum then write('совершенное')
else write('несовершенное');
readln;
end.
![]() | |||
![]() |
![]() | |||||
![]() | |||||
![]() |
19. Найти значение выражения 1*1+2*2+...+n*n
varn,s,i: integer;
begin
write('n = ');
readln(n);
s:=0;
for i:=1 to n do
s:=s+i*i;
writeln('s = ',s);
readln;
end.
20. Найтисумму.
var a,b,s: integer;
begin
clrscr;
write('a=');readln(a);
write('b=');readln(b);
s:=a+b;
write('сумма s=',s);
readln;
end.
21. Составитьиздвухтаблиц 3-юупорядоченнуюповозрастанию
var a: array [1..10] of longint;
b: array [1..20] of longint;
c: array [1..30] of longint;
n,m,k,l,i,j,min: longint;
begin
clrscr;
write('введ.кол.эл.таб.а n=');readln(n);
write('введ.кол.эл.таб.b m=');readln(m);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
for i:=1 to m do
begin
write('b[',i,']=');readln(b[i]);
end;
k:=n+m;{кол.эл.таб.с}
(*заносим эл.таб.а в таб.с*)
for i:=1 to n do c[i]:=a[i];
(*заносим эл.таб.в в таб.с*)
for i:=1 to m do c[i+n]:=b[i];
(*упорядочим таб.с[1..k] по возраст*)
for i:=1 to k-1 do
begin
l:=i;{номермин.}min:=c[i];
for j:=i+1 to k do
if c[j]<min then
begin
min:=c[j];l:=j;
end;
c[l]:=c[i];{меняем местами 1-й и мин.эл.}
c[i]:=min;
end;
for i:=1 to k do writeln('Ответ:c[',i,']=',c[i]);
readln;
end.
![]() | |||
![]() |
![]() | |||
| |||
22. Найти максимальное число из трёх
var a,b,c,max: integer;
begin
clrscr;
write('a=');readln(a);
write('b=');readln(b);
write('c=');readln(c);
if (a>b) and (a>c) then max:=a;
if (b>a) and (b>c) then max:=b
else max:=c;
write('max=',max);
readln;
end.
![]() |
23. Найти наибольшее из четырёх чисел.
var a,b,c,d,max,max1,max2: real;
procedure bol2(aa,bb: real; var maxmax: real);
begin
if aa>bb then maxmax:=aa
else maxmax:=bb;
end;
begin
clrscr;
write('введте a,b,c,d через пробел ');
readln(a,b,c,d);
bol2(a,b,max1);
bol2(c,d,max2);
bol2(max1,max2,max);
writeln('max=',max);
readln;
end.
1) Блок-схема процедуры:
2)Блок-схема основной программы:
![]() | |||
![]() | |||
24. Количествово букв "а" в тексте
uses crt;
var d: string;
n,i: integer;
begin
write('наберитетекст ');
readln(d);
n:=0;
for i:=1