Понятие о языке программирования Pascal. Линейные алгоритмы

advertisement
Понятие о языке программирования Pascal. Линейные
алгоритмы
Пример 1. Найти сумму двух вещественных чисел.
program primer;
var
X, Y, Z: Real;
begin
Writeln(‘Введите два целых числа X и Y:');
Readln(X,Y);
Z := X + Y;
Writeln('Сумма чисел X и Y’, Z);
Readln;
end.
1. Составить программу рассчитывающую разность двух действительных чисел.
2. Составить программу рассчитывающую значение выражения (a+b)*c.
Пример 2. Вводится вещественное число а. Не пользуясь никакими арифметическими
операциями, кроме умножения, получить a4 за две операции.
program primer;
var a: integer;
begin
writeln('введите a');
readln (a);
a:=a*a;
a:=a*a;
writeln('a=',a);
readln;
end.
3. Вводится вещественное число а. Не пользуясь никакими арифметическими
операциями, кроме умножения, получить a8 за три операции.
4. Вводится вещественное число а. Не пользуясь никакими арифметическими
операциями, кроме умножения, получить a6 за три операции.
Пример 3. Составить программу расчета значения функции.
Z = |cos х4 – 3 tg х2 |+0.8 sin yх2+ 10 при любых значениях х и у. Результат вывести в
виде: при х= и у=…
z=…
program primer;
var x,y,z: real;
begin
writeln('введите X Y');
{вывод строки подсказки}
readln (x,y);
{ввод аргументов x и y}
z:=abs(cos(sqr(x)*sqr(x)-3*sin(sqr(x))/cos(sqr(x))))+0.8*sin(y*sqr(x))+10;
writeln('при x=',x:8:2,' y=',y:8:2,' z=',z:8:2); {вывод результата}
readln;
{задержка до нажатия клавиши Enter}
end.
5. Составить программу расчета значения функции
Z = |3 ех+3 – 2 ln ху| + 1,8х2 + 1 при любых значениях х и у. Результат вывести в
виде: при х= … и у=…
z=…
6. Составить программу расчета значения функции
Z = (2eх-4 – |sin х2у| )/( 2.1ctg х + 10.2) при любых значениях х и у. Результат
вывести в виде: при х= … и у=…
z=…
Пример 4. Найти периметр и площадь прямоугольного треугольника по его катетам.
program primer;
var a, b, c, S, P: real;
begin
writeln('введите катеты a, b:');
readln (a,b);
c:=sqrt(sqr(a)+sqr(b));
P:= a+b+c;
S:= a*b/2;
writeln('P =', P:6:3, ‘S=’, S:6:3);
readln;
end.
7. По длине ребра куба найти площадь грани, площадь полной поверхности и объем
куба.
7’. Найти площадь круга и длину окружности.
8. Найти площадь кольца с радиусами r1 и r2.
Пример 5. Вычислить сумму цифр введенного натурального трехзначного числа.
Program primer;
Var n, a, b, c: integer;
begin
write('n= '); readln(n);
a:=n div 100;
b:=(n div 10) mod 10;
c:=n mod 10;
writeln('сумма = ', a+b+c);
readln;
end.
9. Определить сумму квадратов цифр введенного трехзначного числа.
10. Определить произведение второй и четвертой цифр введенного четырехзначного
числа.
Пример 6. Введенное 4-значное число изменить так, чтобы 2 и 3 цифры поменялись
местами.
program primer;
var n,a,b,c,d:integer;
begin
write('введите n ');
readln (n);
a:=n div 1000;
b:=n div 100 mod 10;
c:=n div 10 mod 10;
d:=n mod 10;
n:= a*1000+c*100+b*10+d;
writeln('результат', n);
readln;
end.
11. Введенное 4-значное число изменить так, чтобы 1 и 4 цифры поменялись
местами.
12. Введенное 4-значное число изменить так, чтобы 1 - 4 и 2 – 3 цифры попарно
поменялись местами.
Дополнительные задания
1. Составить программу для обмена значений двух переменных без
использования вспомогательной переменной.
2. Составить программу, которая преобразует введенное с клавиатуры
дробное число в денежный формат. Например, число 45.7 должно быть
преобразовано к виду 45 руб. 70 коп.
3. Составить программу для перевода суммы из долларов в рубли.
Вводится текущий курс доллара и сумма в долларах. Результат должен
выводиться в денежном формате, например, 345 руб. 50 коп.
Условный оператор, оператор множественного выбора
Пример 1. Определить, является ли введенное число четным. Вывести true
(четное), false (нечетное).
program primer;
var
N: integer;
f: boolean;
begin
Writeln(‘N=');
Readln(N);
F := N mod 2 =0;
Writeln(F);
Readln;
end.
1. Определить, делится ли введенное число на 3. Вывести true (делится), false (не
делится).
2. Вводится число. Если оно делится на 2 или на 3, то вывести true, в противном
случае вывести false.
Пример 2. Определить, принадлежит ли введенное число интервалу (0; 10).
0< x< 10
(x>0) and (x<10)
program primer;
var
x: integer;
f: boolean;
begin
Writeln(‘x=');
Readln(x);
F := (x>0) and (x<10);
Writeln(F);
Readln;
end.
3. Определить, принадлежит ли введенное число интервалу (-∞; -10) U (10; +∞).
4. Определить, принадлежит ли введенное число интервалу (-10; -5) U (5; 10).
Пример 3. Вводится число. Если оно положительное, то уменьшить его в 10 раз.
Program primer;
Var a: real;
BEGIN
write('a='); readln(a);
if a>0 then a:=a/10;
writeln('a=', a);
readln
END.
5. Вводятся X и Y. Заменить большее из этих чисел разностью большего и меньшего.
6. Вводятся Х и Y. Если хотя бы одно из этих чисел четно, то найти их
произведение. Иначе – найти их сумму.
Пример 4. Выбрать минимальное из трех введенных целых чисел.
Program primer;
Var a, b, c, m: integer;
BEGIN
write('a, b, c='); readln(a, b, c);
if a<b then m:=a else m:=b;
if c<m then m:=c;
writeln('Мin=', m);
readln
END.
7. Выбрать максимальное из трех введенных целых чисел.
8. Из чисел A, B, C, D выбрать максимальное.
9. Решить квадратное уравнения вида Ax2 + Bx + C = 0.
Пример 5. Вводятся координаты точки. Определить попадает ли точка в
заштрихованную область или нет.
y
x2+y2=25
x
x2+y2=4
1
program primer;
var x,y: real;
begin
Write('введите x y ');
readln (x,y);
if (sqr(x)+sqr(y)<=25) and (sqr(x)+sqr(y)>=4) then writeln('точка попадает в
заштрихованную область')
else writeln('точка не попадает в
заштрихованную область');
readln;
end.
10. Вводятся координаты точки. Определить попадает ли точка в заштрихованную
область или нет.
y
y=5 sin x
x
pi
11. Вводятся координаты точки. Определить попадает ли точка в заштрихованную
область или нет.
y=x2
2
y=-0.5x2
Пример 6. Вводятся три числа A, B, C. Определить, сколько среди них нечетных.
program primer;
var a, b, c, k: integer;
begin
write('a, b, c= ');
readln (a, b, c);
k:=0;
if (a mod 2=1) then k:=k+1;
if (b mod 2=1) then k:=k+1;
if (c mod 2=1) then k:=k+1;
writeln(‘k=’,k);
readln;
end.
12. Вводятся четыре числа A, B, C, D. Определить, сколько среди них отрицательных.
13. Вводятся четыре числа A, B, C, D. Определить, содержится ли среди них число 29?
Пример 7. Введено трехзначное число. Необходимо разбить его на цифры. Все четные
цифры, которые меньше 8 увеличить на 2, а 8 заменить на 0.
program primer;
var n,a,b,c,d:Integer;
begin
write('введите n');
readln (n);
a:=n div 1000;
b:=n div 100 mod 10;
c:=n div 10 mod 10; d:=n mod 10;
if (a mod 2=0) and (a<8) then a:=a+2 else if a=8 then a:=0;
if (b mod 2=0) and (b<8) then b:=b+2 else if b=8 then b:=0;
if (c mod 2=0) and (c<8) then c:=c+2 else if c=8 then c:=0;
if (d mod 2=0) and (d<8) then d:=d+2 else if d=8 then d:=0;
n:=1000*a+100*b+10*c+d;
writeln('результат= ', n);
readln;
end.
14. Введено четырехзначное число. Найти сумму четных цифр.
15. Введено четырехзначное число. Найти среднее арифметическое нечетных цифр.
Резерв 1. Даны два натуральных числа A и B. Выяснить, делится ли A на B.
Резерв 2. Введено четырехзначное число. Найти сумму цифр, кратных 3-м.
Резерв 3. Введено трехзначное число. Если сумма его цифр нечетна, то увеличить число
вдвое.
Резерв 4. Введено трехзначное число. Если в записи числа встречается цифра 5, то записать
число в зеркальном отображении.
Пример 8. Составить программу, которая по введенному номеру месяца определяет
время года.
N – номер месяца. Зима – 12, 1, 2. Весна – 3, 4, 5 и т.д.
Program primer;
Var n: integer;
Begin
Write(‘n=’);
Readln(n);
Case n of
12, 1, 2 : writeln(‘зима’);
3, 4, 5 : writeln(‘весна’);
6, 7, 8 : writeln(‘лето’);
9, 10, 11 : writeln(‘осень);
else
writeln(‘Ошибка’);
end;
End.
16. По введенному номеру вывести день недели.
17. Составить программу, которая по введенной начальной букве выводит
название цветов радуги (красный, оранжевый, желтый, зеленый, голубой, синий,
фиолетовый).
Дополнительные задания
1. Определить возможность существования треугольника по трем сторонам.
2. Определить, является ли треугольник со сторонами a, b, c прямоугольным.
3. Введено трехзначное число. Если сумма его цифр нечетна, то увеличить число
вдвое.
4. Введено трехзначное число. Если в записи числа встречается цифра 5, то записать
число в зеркальном отображении.
5. Введено 4-значное число. Определить, является ли оно палиндромом. (палиндром
- это число, десятичная запись которого читается одинаково слева направо и справа
налево)
6. Составить программу, которая после введенного с клавиатуры числа (в диапазоне
от 1 до 999), обозначающего денежную величину, дописывает слово «рубль» в
правильной форме. Например, 5 рублей, 21 рубль, 173 рубля.
7. Составить программу, моделирующую работу простейшего калькулятора.
8. Составить программу, которая по введенному году определяет соответствующее
ему животное по восточному гороскопу (например, 2013 - год змеи).
9. Написать программу определения стоимости разговора по телефону с учетом
скидки 20 %, предоставляемой по субботам и воскресеньям.
Вид экрана при работе программы (данные, вводимые пользователем, выделены
полужирным шрифтом):
Вычисление стоимости разговора по телефону.
Введите исходные данные:
Цена минуты 2.5
Длительность разговора (целое количество минут) 3
День недели (1, 2,…, 7) 6
Предоставляется скидка 20%
Стоимость разговора: 7.5 руб.
Циклы
Пример 1. Вывести квадраты первых десяти натуральных чисел.
Program primer;
Var i, x: integer;
begin
for i:=1 to 10 do begin
{перебираем натуральные числа от 1 до 10}
x:=sqr(i);
{возводим очередное число в квадрат}
write(x, ' ');
{выводим полученное значение}
end;
readln
end.
1.
2.
Дано натуральное число n. Вывести первые n членов арифметической прогрессии
3n+1.
Числа Фибоначчи – это последовательность: 1, 1, 2, 3, 5, 8… (начиная с третьего
числа – очередное число равно сумме двух предыдущих). Дано натуральное число n.
Вывести первые n чисел Фибоначчи.
Пример 2. Найти сумму 1 + 1/3 + 1/5 +...(N слагаемых).
Program primer;
Var I, N: integer;
S: real;
begin
Write('N='); Readln(N); {вводим количество слагаемых}
S:=0;
{обнуляем сумму}
For I:=1 to N do
{выполняем цикл N раз, добавляя к сумме по од ному
слагаемому}
S:=S+1/(2*I-1);
Writeln('S=',S:5:2);
{выводим значение суммы с двумя десятичными знаками}
Readln
end.
Дано натуральное число n. Найти сумму S=1+2/3+3/7... (n слагаемых)
Дано натуральное число n. Найти сумму S = 1 -3 +5 - ... (n слагаемых)
1 
1  
1 

Резерв 1. Дано натуральное число n. Вычислить 1  2 1  2   1  2  .
2  
n 
 1 
Резерв 2. Даны натуральные числа а, n. Вычислить aa  na  2n a  n * n .
Резерв 3. Найти произведение: Р = (1 + х)·(3+2х)·(5+3х)·... . (n множителей)
Резерв 4. Дано натуральное число n. Найти сумму S = 10/3 - 100/5 + 1000/7 - ... (n
слагаемых).
Резерв 5. Дано натуральное число n. Найти сумму ряда: S = x - x2 /4 + x3/9 - x4/16... (n
слагаемых).
3.
4.


Пример 3. Подсчитать количество двузначных чисел, кратных 3.
Program primer;
Var i, k: integer;
begin
k:=0; for i:=10 to 99 do begin
if i mod 3=1 then k:=k+1;
end;
writeln ('k=', k);
readln;
end.
5. Подсчитать количество и сумму четных трехзначных чисел.
6. Подсчитать количество двузначных чисел, у которых сумма цифр нечетна.
Резерв 1. Подсчитать сумму двухзначных чисел, сумма цифр которых не превышает 7.
Резерв 2. Подсчитать количество и сумму трехзначных чисел, кратных 3.
Пример 4. Найти сумму четных делителей введенного целого числа.
Program primer;
Var i, S, n: integer;
begin
Write (‘n=’); Readln(n);
S:=0;
for i:=2 to (n div 2) do
if (n mod i=0) and (i mod 2=0) then s:=s+i;
writeln('S=', S);
readln;
end.
7. Определить, является ли введенное целое число простым или составным.
8. Вводятся целые числа n и k. Вывести на экран все простые числа, попадающие в
диапазон [n, k].
Пример 5. Задана арифметическая прогрессия -21; - 16;… Определить номер первого
положительного члена прогрессии.
a – очередной член прогрессии, n – его порядковый номер
Program primer;
Program primer;
var
var
a, n: integer;
a, n: integer;
begin
begin
a:= -21; n:=1;
a:= -21; n:=1;
while a<=0 do begin
repeat
a:=a+5; n:=n+1; end;
a:=a+5;
writeln(‘n=’, n);
n:=n+1;
readln;
until a>0;
end.
writeln(‘n=’, n);
readln;
end.
9. Задана арифметическая прогрессия 2; 2,8; … . Сколько членов прогрессии нужно
сложить, чтобы полученная сумма стала >20.
10. Задана арифметическая прогрессия 7,6; 6,3;.... Сколько членов прогрессии нужно
сложить, чтобы полученная сумма стала <0.
Резерв 1. Задана арифметическая прогрессия. 2; 3,8; ... . Сколько членов прогрессии
нужно сложить, чтобы полученная сумма стала >30.
Резерв 2. Задана арифметическая прогрессия. 7,1; 5,3; … . Сколько членов прогрессии
нужно сложить, чтобы полученная сумма стала <0.
Резерв 3. Задана геометрическая прогрессия 128; 64;...Определить номер члена
прогрессии, который <0.1.
Пример 6. Протабулировать функцию y=2x+1 интервале [-3; 3] с шагом 0.5.
Program primer;
Program primer;
Const h=0.5;
Const h=0.5;
Var x, y: real;
Var x, y: real;
begin
begin
x:=-3;
x:=-3;
while x<=3 do
repeat
begin
y:=2*x+1;
y:=2*x+1;
writeln('x=',x:8:2,' y=',y:8:2);
writeln('x=',x:8:2,' y=',y:8:2);
x:=x+h;
x:=x+h;
until x>3;
end;
readln;
readln;
end.
end.
11. Протабулировать функцию y=x3-1 на интервале [-1,3] с шагом 0.2.
12. Протабулировать функцию y=x2-1/x на интервале [1,2] с шагом 0.05.
i
Пример 7. Вычислить сумму S 
с заданной точностью E=0.0001.
(i  1) 2
Program primer;
Var S, e, slag: real;
k: integer;
begin
e:=0.0001; s:=0; k:=1;
slag:= k/sqr(k+1);
repeat
s:=s+slag;
k:=k+1;
slag:=k/sqr(k+1);
until slag<e;
write (‘s=’, s:6:2);
readln;
end.
i
13. Вычислить сумму S 
с заданной точностью E=0.0001.
(2i  1) 2
1
1

 ... с заданной точностью E=0.001, |x|>1.
14. Вычислить сумму S  1 
x 2 x3
Подпрограммы
Пример 1. Создать функцию пользователя, вычисляющую х!
Program primer;
Var
x: integer; y: real;
Function Fact(x: integer): real;
Var
i: integer; f: real;
begin
f:=1;
for i:=1 to x do f:=f*i;
{вычисляем произведение}
Fact:=f;
{имени функции присваиваем полученное значение}
end;
begin
{основная программа}
Write (‘x=’); Readln(x);
{ввод значения х}
y:=Fact(x);
{вызов функции с аргументом х }
Writeln(‘y=’, y:4:0);
{вывод результата}
Readln;
end.
1. Создать функцию пользователя, вычисляющую гиперболический косинус gc=
e x  e x
2.
2
Создать функцию нахождения максимального из двух чисел
Пример 2. Вычислить, используя функцию нахождения знаменателя:
1 2 3
   ... (n слагаемых)
2! 3! 4!
Program primer;
Var s: real;
i, n: integer;
Function Fakt(x: integer): real;
{функция вычисления факториала}
Var
i: integer; f: real;
begin
f:=1;
for i:=1 to x do f:=f*i;
Fakt:=f;
end;
BEGIN
write('n= ');
Readln(n);
{вводим количество слагаемых суммы}
s:=0;
For i:=1 to n do
{перебираем i от 1 до n}
s:=s+i/Fakt(i+1);
{добавляем к сумме очередную дробь, вызывая}
{ функцию для вычисления знаменателя}
writeln('s=',s:6:4);
{вывод результата}
Readln;
END.
Вычислить,
используя
функцию
нахождения
5
10
15


...
(n слагаемых)
1 2 1 2  3 1 2  3 4
4. Вычислить, используя функцию нахождения знаменателя:
2
4
6


... (15 слаг)
1 2 1 2  3 1 2  3 4
3.
знаменателя:
Пример 3. Два треугольника заданы длинами своих сторон. Определить, площадь какого
из них больше (создать функцию для вычисления площади треугольника по длинам его
сторон).
Для решения задачи используем формулу Герона S  p   p  x    p  y    p  z  , где x, y, z
– стороны треугольника, p – полупериметр)
Program primer;
var
a1, b1, с1, s1, a2, b2, с2, s2: real;
Function PlTr(x ,y, z: real): real;
Var
p: real;
Begin
p:= (x + y + z)/2;
{полупериметр треугольника}
PlTr:=Sqrt(p*(p-x)*(p-y)*(p-z));
End;
BEGIN
{основная программа}
Write('Cтороны 1-го треугольника:'); Readln(a1, b1, c1);
Write('Cтороны 2-го треугольника:'); Readln(a2, b2, c2);
S1:=PlTr(a1, b1, c1);{вызов функции для нахождения площади 1-го треугольника}
S2:=PlTr(a2, b2, c2);{вызов функции для нахождения площади 2-го треугольника}
if S1>S2 then Writeln(‘S1>S2’)
else if S1<S2 then Writeln(‘S1<S2’)
else Writeln(‘S1=S2’);
Readln;
END.
5. Два прямоугольных треугольника заданы своими катетами. Определить, у какого
из них периметр больше (создать функцию для вычисления
периметра
прямоугольного треугольника по его катетам).
6. Найти максимальное из чисел A, B, C, D, создав процедуру выбора максимального
из 2-х произвольных чисел.
Резерв 1. Создать функцию нахождения наибольшего общего делителя двух натуральных
чисел.
Пример 4. Создать процедуру для вычисления периметра и площади прямоугольного
треугольника по его катетам a, b.
Program primer;
Var
a, b, p, s: real;
{ a, b- катеты, p - периметр, s - площадь }
Procedure Treug(a,b: real; Var p, s: real);
{a, b- входные данные(параметры-значения),}
{p,
s-выходные данные(параметры-переменные)}
Begin
p:= a + b + Sgrt(a*a + b*b); {периметр треугольника с катетами a, b}
s:= a*b/2;
{ площадь треугольника с катетами a, b }
End;
Begin
{основная программа}
Write('a, b =');Readln(a, b);
{ввод исходных данных}
Treug(a, b, p, s);
{вызов процедуры и передача исходных данных a, b}
Writeln('p=', p:4:1, ‘ s=’, s:4:1); {вывод результата, полученного из процедуры}
Readln;
End.
7. Создать процедуру для вычисления объема и площади поверхности куба по длине
его ребра.
8. Создать процедуру для вычисления длины окружности и площади круга по
заданному значению радиуса. ( L= 2R, S=R2)
Пример 5. Создать процедуру обмена значениями 2-х переменных.
Program primer;
Var
A, B: real;
Procedure Obmen(Var X,Y:real);
Var
T: real;
Begin
T:=X;
X:=Y;
Y:=T;
End;
begin
Write('A, B ='); Readln(A,B);
Obmen(A,B);
Writeln('A=', A:5:2,' B=');
Readln;
end.
9. Вводятся A, B, C, D. Поменять местами A и C, B и D, создав процедуру обмена
значениями 2-х переменных.
10. Упорядочить по возрастанию числа A, B, C, создав процедуру обмена значениями
2-х переменных.
Пример 6. Создать процедуру для вывода первых N членов арифметической прогрессии,
заданной значением первого члена а и разностью d. Вывести первые 7 членов
прогрессии 2, 5, … (a=2, d=3) и первые 10 членов прогрессии 20, 19, ….(a=20, d= -1)
Program primer;
Procedure progres(a,d,n:integer);
Var
i: integer;
{i – номер очередного члена прогрессии }
Begin
for i:=1 to n do
{перебираем i от 1 до n}
begin
write(a,' ');
{выводим очередной член прогрессии}
a:=a+d;
{вычисляем следующий член прогрессии}
end;
End;
begin
{основная программа}
{вызов процедуры для вывода 7 членов арифметической прогрессии 2, 5,…}
progres(2,3,7);
writeln;
{вызов процедуры для вывода 10 членов прогрессии 20,19,…}
progres(20,-1,10);
Readln;
end.
11. Создать процедуру для вывода первых N членов арифметической прогрессии,
заданной первым членом а и разностью d. С помощью этой процедуры вывести
8 первых членов прогрессии 1, 4, … и 10 первых членов прогрессии 24, 22, ….
12. Создать процедуру для вывода и нахождения суммы первых N членов
арифметической прогрессии, заданной формулой an=2n+1.
Пример 7. Выяснить, какие натуральные числа от 2 до 10 являются простыми, а какие составными (создать процедуру, определяющую простым или составным является
данное число).
Число называется простым, если оно не имеет делителей кроме 1 и самого себя.
Если у него есть другие делители, то число – составное.
Program primer;
Var
i: integer;
Procedure prostoe(x:integer);
Var
k,n: integer; {n - возможные делители числа, k – количество делителей}
Begin
k:=0;
for n:=2 to x div 2 do {перебираем числа от 2 до x div 2 для поиска делителей}
if x mod n = 0
{если n –делитель числа x}
then k:=k+1;
{увеличиваем количество делителей на 1}
if k=0
{если у числа нет делителей}
then writeln (x,' - prostoe')
{то число простое}
else writeln (x,' - sostavnoe');
{иначе число составное}
End;
begin
{основная программа}
for i:=2 to 10 do
{перебираем числа от 2 до 10}
prostoe(i);
{вызываем процедуру для проверки очередного числа}
Readln;
end.
13. Создать процедуру для вывода и подсчета суммы последовательных целых чисел
от a до b. С помощью этой процедуры вывести и найти сумму целых чисел: 1) от
10 до 20; 2) от -5 до 15.
14. Определить, какие из целых чисел от -10 до 2 являются решениями неравенства
(x+4)(x+1)<0 (создать процедуру, определяющую является или не является данное
целое число решением неравенства (x+4)(x+1)<0)
Массивы
Пример 1. Задан одномерный массив A[1..5]. Заполнить массив числами, вводимыми с
клавиатуры, определить произведение элементов.
Program primer;
Var
a: array [1..5] of integer;
i, p: integer;
Begin
For i:=1 to 5 do
begin
Write(‘a[‘, I, ‘]=’); Readln(a[i]);
end;
P:=1;
For i:= 1 to 5 do
P:=p*a[i];
Writeln(‘p=’, p);
Readln;
End.
1. Задан одномерный массив A[1..7]. Заполнить массив числами, вводимыми с
клавиатуры, определить сумму и среднее арифметическое элементов.
2. Задан одномерный массив A[1..10]. Заполнить массив числами, вводимыми с
клавиатуры, определить сумму и среднее арифметическое элементов с n-го по kый (числа n и k вводятся с клавиатуры).
Пример 2. Сформировать одномерный массив из 20 элементов, которые выбираются
случайным образом из диапазона [-50; 50]. Определить максимальный элемент и его
индекс.
Program primer;
Var
a: array [1..20] of integer;
i, max, k : integer;
Begin
For i:=1 to 20 do
begin
a[i]:= random(101)-50;
Write(a[ i]:3);
end;
max:=a[1]; k:=1;
For i:=2 to 20 do
begin
if max<a[i] then begin max:=a[i]; k:=I; end;
end;
Writeln(‘max=’, max, ‘index=’, k);
Readln;
End.
3. Сформировать одномерный массив из 15 элементов, которые выбираются
случайным образом из диапазона [0; 50]. Определить сумму максимального и
минимального элементов массива.
4.
Сформировать одномерный массив из 20 элементов, которые выбираются
случайным образом из диапазона [-15; 45]. Найти минимальный элемент среди
элементов, стоящих на четных позициях и его номер.
Пример 3. Сформировать одномерный массив из 12 элементов. Определить количество
четных элементов.
Program primer;
Var
a: array [1..12] of integer;
i, k: integer;
Begin
k:=0;
For i:=1 to 20 do
begin
a[i]:= random(101)-50;
Write(a[ i]:3);
if (a[i] mod 2=0) then inc(k);
end;
Writeln(‘kol=’, k);
Readln;
End.
5. Сформировать одномерный массив из 10 элементов. Просуммировать все
отрицательные элементы, стоящие на нечетных местах.
6. Сформировать одномерный массив из 17 элементов. Определить среднее
арифметическое
нечетных положительных элементов, стоящих на четных
местах.
Пример 4. Сформировать одномерный массив из 7 элементов. Определить, содержится
ли в нем элемент ‘5’, если элемент найден, поменять его с первым элементом.
Program primer;
Var
a: array [1..7] of integer;
i, k: integer;
Begin
k:=0;
For i:=1 to 7 do
begin
a[i]:= random(101)-50;
Write(a[ i]:3);
if (a[i] =5) then k:=I;
end;
Writeln;
if k<>0 then
begin
a[k]:=a[1]; a[1]:=5;
For i:=1 to 7 do
Write(a[ i]:3);
end
else Writeln(‘net 5’);
Readln;
End.
7.
8.
Сформировать одномерный массив из 13 элементов. Определить, содержатся ли
в нем одновременно элементы ‘3’ и ‘6’? Если да, то обменять их местами.
Сформировать одномерный массив из 20 элементов. Определить, содержится ли
в нем элемент, равный целой части среднего арифметического максимального и
минимального элементов, если да – вывести его индекс, иначе вывести 0.
Пример 5. Сформировать одномерный массив из 10 элементов. Упорядочить по
возрастанию элементы массива.
Program primer;
Var
a: array [1..10] of integer;
i, j, t: integer;
Begin
For i:=1 to 10 do
begin
a[i]:= random(51);
Write(a[ i]:3);
end;
For i:=1 to 9 do
For j:=i+1 to 10 do
If a[i]>a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end;
For i:=1 to 10 do
Write(a[i]:3);
Readln;
End.
9. Сформировать одномерный массив из 10 элементов. Упорядочить по убыванию
элементы массива.
10. Сформировать одномерный массив из 10 элементов. Первые 5 элементов
упорядочить по возрастанию, вторые 5 – по убыванию.
Пример 6. Сформировать двумерный массив вида:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Program primer;
Var
a: array [1..5, 1..5] of integer;
i, j: integer;
Begin
For i:=1 to 5 do
begin
For j:=1 to 5 do
begin
if i=j then a[i, j]:= 1 else a[i, j]:=0;
Write(a[ i, j]:3);
end;
Writeln;
end;
Readln;
End.
11. Сформировать двумерный массив вида:
1 2 3 4 5
5 4 3 4 1
1 2 3 4 5
5 4 3 2 1
1 2 3 4 5
12. Сформировать двумерный массив вида:
1 0 0 0 1
0 2 0 2 0
0 0 3 0 0
0 4 0 4 0
5 0 0 0 5
Резерв 1. Сформировать двумерный массив вида:
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1
Резерв 2. Сформировать двумерный массив вида:
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
Пример 7. Вывести на экран матрицу размером M*N, элементами которой являются
целые случайные числа из интервала [-9,9]. Определить минимальный элемент в каждой
строке.
Program primer;
Const m=5, n=4;
Var a: array[1..m,1..n] of integer;
min, k, j, i : integer;
begin
randomize;
for i:=1 to m do begin
for j:=1 to n do begin
a[i,j]:=random(18+1)-9; write(a[i,j]);
end;
writeln;
end;
for i:=1 to m do begin
min:=a[i,1]; for j:=2 to n do
if min>a[i,j] then min:=a[i,j] ;
writeln(min);
end;
end.
13. Вывести на экран массив 5x5. Определить сумму элементов каждого столбца
таблицы.
14. Задана матрица 6x8. Отсортировать все строки по возрастанию.
Обработка строк и символов
Пример 1. Вводятся строка и символ. Определить количество заданных символов во
введенной строке.
Program primer;
Var st: string; c: char;
k, n, i: integer;
begin
write(‘stroka=’); readln(st);
write(‘simvol=’); readln(c);
n:= length(st);
k:=0;
for i:=1 to n do
if st[i]=c tnen inc(k);
writeln (‘k=’, k);
readln;
end.
1. Определить количество "2" и "3" во введенной строке.
2. Определить, имеются ли во введенной строке следующие подряд две "4".
Резерв 1. Дана последовательность слов из латинских букв. Соседние слова отделены
друг от друга пробелом. Определить количество слов, которые начинаются с буквы a.
Пример 2. Заменить во введенной строке все цифры символом *.
Program primer;
Var st: string;
n, i: integer;
begin
write(‘stroka=’); readln(st);
n:= length(st);
for i:=1 to n do
if (st[i]>=’0’) and (st[i]<=’9’) then st[i]:=’*’;
writeln (‘st=’, st);
readln;
end.
Заменить во введенной строке попарно символы: ‘a’ – ‘x’ , ‘b’ – ‘y’, ‘c’ – ‘z’.
Введена строка маленьких латинских букв. Преобразовать ее, превратив
маленькие буквы в большие.
Резерв 1. В I в н.э. Ю. Цезарь во время войны с галлами, переписываясь со своими
друзьями в Риме, заменял в сообщении первую букву латинского алфавита (A) на
четвертую (D), вторую (B) – на пятую (E), наконец, последнюю – на третью:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
DEFGHIJKLMNOPQRSTUVWXYZABC
Напишите программу – шифратор, заменяющую введенный текст кодом (если
встречаются цифры или другие символы (точка, запятая и т.д.) оставить их без
изменения).
3.
4.
Пример 3. Удалить из введенной строки все символы ‘3’.
Program primer;
Program primer;
Var st1, st: string;
Var st: string;
i: integer;
begin
write(‘stroka=’); readln(st);
for i:=1 to length(st) do
if st[i]<>’3’ then st1:=st1+st[i];
writeln (‘st1=’, st1);
readln;
end.
5.
6.
i: integer;
begin
write(‘stroka=’); readln(st);
i:=1;
repeat
if st[i]=’3’ then delete(st, i, 1) else
i:=i+1;
until i=length(st);
writeln (‘st=’, st);
readln;
end.
Преобразовать введенную строку так, чтобы из нее были удалены буквы с
ASCII - кодами от 70 до 75.
Напечатать текст удалив из него все лишние пробелы, т.е. из нескольких подряд
идущих пробелов оставить только один.
Пример 4. Введенную строку преобразовать так, чтобы после
каждого слова
следовала точка.
Program primer;
Var st: string;
i: integer;
begin
write(‘stroka=’); readln(st);
i:=1;
repeat
if (st[i]<>’ ’) and (st[i+1]=’ ’) then begin insert(‘.’, st, i+1); i:=i+2; end else i:=i+1;
until i=length(st);
writeln (‘st=’, st);
readln;
end.
Введенную строку букв и цифр преобразовать так, чтобы после каждой
цифры следовал пробел.
8. Напечатать заданный непустой текст, удвоив знаки ‘+’ и ‘-‘.
Резерв 1. В заданном тексте слова перечислены через запятую. Распечатать слова
текста в столбик.
7.
Пример 5. Найти сумму цифр введенной строки, содержащей цифры и буквы.
Program primer;
Var st: string;
i, x, k, s: integer;
begin
write(‘stroka=’); readln(st);
s:=0;
for i:=1 to length(st) do
begin
val(st[i],x,k);
if k=0 then s:=s+k;
end;
write(‘s=’,s);
readln;
end.
9. Найти произведение четных цифр введенной строки, содержащей цифры и буквы.
10. Удалить из введенной строки все цифры, кратные 3.
Резерв 1. Преобразовать введенную строку так, чтобы сначала были расположены
цифры, потом остальные символы.
Графика в Pascal
Отобразить точку красного цвета в центре экрана.
Отобразить мигающую точку в центре экрана.
Изобразить на экране звездное небо.
Изобразить на экране множество точек, напоминающих созвездие Большой
Медведицы, а также нарисовать Луну.
5. Изобразить на экране концентрические окружности.
6. Нарисовать на экране домик с трубой.
7. Изобразить на экране пять олимпийских колец.
8. Составить программу, по которой окружность движется по экрану.
9. Изобразить на экране монитора светофор (с учетом цвета).
10. Вывести на экран изображение шахматной доски.
11. Изобразить на экране улыбающуюся рожицу.
1.
2.
3.
4.
Записи
Пример 1. Создайте пользовательский тип данных – запись, описывающий данные
человека (Фамилия, Имя, Отчество), опишите в программе массив таких записей,
состоящий из пяти элементов. В цикле, при помощи оператора read заполните массив
данными ваших товарищей.
Program primer;
Type
Chelovek=Record
Fam: String[15];
Ima: String[15];
Otch: String[15];
End;
Var
Klass:Array[1..5] Of Chelovek;
k:Integer;
Begin
For k:=1 To 5 Do
With Klass[k] Do
Begin
Writeln('Введите фамилию’); Readln(Fam);
Writeln('Введите имя’); Readln(Ima);
Writeln('Введите отчество’); Readln(Otch);
End;
Readln;
End.
1. Создайте пользовательский тип данных – запись, описывающий адрес (Индекс,
Страна, Город, Улица, Номер дома, Номер квартиры), опишите в программе 3
экземпляров такой записи. При помощи оператора присоединения, заполните поля
записи адресами.
2. Известны фамилии и оценки (в баллах) по пяти предметам каждого из двадцати
пяти учеников класса. Требуется вычислить среднюю оценку каждого из учеников
и выбрать человека, имеющего максимальный средний балл.
Работа с файлами
Пример 1. Составить пргорамму, создающую на жестком диске текстовый файл,
добавить в созданный файл данные (ф.и.о., номер школы, класс).
Program primer;
Var f: text;
x, y: real;
BEGIN
assign(f,'prim.txt');
rewrite(f);
write(‘Иванов Иван Иванович, Школа № 1, 1 «а» класс’);
Close(f);
END.
Пример 2. а) Создать файл, содержащий значения функции y= x2 + x (0= x= 2, h= 0,2).
б) Вывести на экран данные в виде таблицы.
Program primer;
Var f: file of real;
x, y: real;
BEGIN
assign(f,'prim.txt');
rewrite(f);
x:=0;
repeat
y:=sqr(x)+x;
write(f,y, х);
x:=x+0.2;
until x>2;
Close(f);
reset(f);
while not eof(f) do
begin
read(f,y,x); writeln('x=',x:4:2,' y=',y:8:4);
end;
END.
1. а) Создать файл, содержащий значения функции y= 2x + 5 (0= x= 10, h= 0,5).
б) Вывести на экран данные в виде таблицы.
2. а) Создать файл, содержащий значения функции y= 2x2 + 3x (-2= x= 2, h= 0,2).
б) Вывести на экран данные в виде таблицы.
Пример 3. а) Создать файл, содержащий данные:
 ФИО работника;
 склад;
 стаж работы.
б) Просмотреть записи. Определить фамилию работника, имеющего самый
большой стаж работы.
Program pr;
Type rabotnik=record
Fio: string [20];
sklad: char;
stag: integer;
End;
Var
X: rabotnik; f: file of rabotnik;
N, i, max: integer;
Name: string [20];
Begin
Assign(f,’pr.txt’);
Rewrite(f);
Write(‘n=’); Readln (n);
For i:=1 to n do
Begin
Write(‘fio:’); Readln(x.fio);
Write(‘sklad:’); Readln(x. sklad);
Write(‘stag:’); Readln(x. stag);
Write(f,x);
End;
Close(f);
{******************}// можно сделать две разные программы
Assign(f,’pr.txt’);
Rewrite(f);
Max:=0;
While Not EOF(f) do
Begin
Readln(f,x);
Writeln(x.fio: 20, x. sklad:3, x. stag:5);
If x. stag >max then
Begin
Max:=x. stag;
Name:=x.fio;
End;
End;
Writeln(‘max stag -‘, max, name);
Close(f);
Readln;
End.
3. а) Создать файл, содержащий данные:
 ФИО работника;
 пол;
 возраст.
б) Просмотреть записи. Определить средний возраст мужчин.
4. а) Создать файл, содержащий данные;
 ФИО ученика;
 класс;
 оценка.
б) Просмотреть записи. Определить среднюю оценку в 9-м классе.
Download