Pascal. Программы 10 класс

Повторение
Представление математических выражений в Pascal:


y := (5*x - 6) / (x - 4)



y := ( 5*sqr(x) – 6 ) / ( (x - 4)*(sqr(x)+6) )



y := ( sqr(x-6) – sqrt(4 – 3*x) ) / (x - 4)






Ввод и вывод данных

Задача (урок )
Составить программу, которая вычисляет объем звукового файла в Мбайтах по формуле 
V=k*ϑ*I*t , где 
k - количество каналов
ϑ - частота кодирования измеряется в Гц(герцах) 
I - глубина кодирования или разрешение измеряется в битах
t - время измеряется в секундах:

текст программы
var k,t,i,ch:integer;
    v,vmb:real;
begin
writeln('введите количество каналов k');
readln(k);
writeln('введите частоту в Гц (1КГц=1000гц)');
readln(ch);
writeln('введите время в секундах');
readln(t);
writeln('введите глубину кодирования i в битах');
readln(i);
v:=k*ch*t*i;
vmb:=v/(1024*1024*8);
writeln('объем зв.файла в Мб ',vmb);
end.


Задача (урок )
Составить программу, которая вычисляет количество цветов в палитре, если дан объем графического файла в Кбайтах - V, количество точек по горизонтали и вертикали - x, y.
Формула объема графического файла: 
V=x*y*I, где I - глубина кодирования точки в битах
Количество цветов 





В данной задаче используем функцию trunc, которая отбрасывает дробную часть т.к. объем файла не должен превышать вводимое число.
Пример trunc(6,578)=6
Для подсчета степени двойки используем цикл for с рекурсией
N:=1;
for j:=1 to k do N:=N*2;


текст программы
var v,x,y:integer;
    N,k,j:integer;
    i:real;   
begin
writeln('введите объем файла в Кб');
readln(v);
writeln('введите количество точек по гор. x');
readln(x);
writeln('введите количество точек по вер. y');
readln(y);
i:=v*1024*8/(x*y);
k:=trunc(i);
N:=1;
for j:=1 to k do N:=N*2;
writeln('глубина кодирования i=',k);
writeln('количество цветов в палитре=',N);
end.

________________________________________________________

Повторение

Условный оператор if ... then ... else (если ... тогда/да ... иначе/нет)


Задача
 (урок )

Вычислите значение выражения y = (5x + 7)/(x+3), х целое число, вводимое с клавиатуры (обратите внимание, что у в данной задаче принадлежит множеству действительных чисел, т.е. тип переменных real).
В данной программе используется условный оператор if для того, чтобы исключить деление на 0. Пример алгоритма с ветвлением (или разветвляющийся алгоритм).

Пример
Вычислите значение выражения 

, x целое число, вводимое с клавиатуры.



Обратите внимание, что в данной программе у нас идет ограничение на переменную x: под корнем выражение (3x-20) должно быть больше или равно 0

Пример
Вычислите значение выражения 


, x целое число, вводимое с клавиатуры.


Обратите внимание, что в данной программе у нас идет ограничение на переменную x: под корнем выражение (5x-20) должно быть больше или равно 0 и (x-4) не равно 0. Задачу решаем с использование сложного условия.
Вариант 1 с "и": (5*x-20>=0) and (x-4<>0)
Вариант 2 с "или": (5*x-20<0) or (x-4=0)
блок-схема вариант 1

Задача (самостоятельная работа) 
Вычислите значение выражения

, x действительное число, вводимое с клавиатуры.




________________________________________________________

Оператор цикла с известным количеством повторений for i:=начальное значение to конечное значение do оператор (повторение)

Задача
Составьте программу, которая выводить на экран в строчку 10 случайных чисел из промежутка от 21 до 75.
Пояснение
Обратите внимание, что случайные числа задаются функцией random(x). Для того чтобы задать случайные числа из промежутка от a до b есть формула x:=random(b-a+1)+a, в нашем примере
x:=random(55)+21

Задача
Составьте программу, которая выводит на экран в строчку 8 случайных чисел из промежутка от 15 до 100 и находит максимальное из них.
Пояснение
Обратите внимание, что если требуется найти максимальное число, начальное значение переменной, в которой будем его хранить, делаем наименьшим из возможных (в данном примере не более 14). 
Условие для нахождения максимального элемента if max<m[i] then max:= m[i], т.е. если максимальны будет меньше следующего элемента, то меняется значение max на этот элемент.

Задача
Составьте программу, которая выводит на экран в строчку 8 случайных чисел из промежутка от 15 до 100 и находит минимальное из них.
Пояснение Обратите внимание, то если требуется найти минимальное число, начальное значение делаем наибольшим из возможных (в данном примере не менее 101). Условие для нахождения минимального элемента if min>m[i] then min:= m[i].

________________________________________________________

Одномерный массив.

Упорядоченное множество однотипных элементов, расположенное в строке (или столбце).
В общем виде:
а1, а2, а3, ..., аn

Описание одномерного массива
var mas: array[1..5] of integer;
Задается массив с именем mas, количество элементов 5, элементы целые числа
имена элементов - mas[1], mas[2] ...

Формирование массива. Ввод элементов массива с клавиатуры.

Задача
Составьте программу, задающую одномерный массив целых чисел из 6 элементов, вводимых с клавиатуры, и оформите вывод элементов на экран в строчку.
текст программы
var m: array [1..6] of integer;
    i: integer;
begin
for i:=1 to 6 do
begin
writeln('Введите ',i,' элемент');
readln(m[i]);
end;
for i:=1 to 6 do write(m[i],' ');
end.

Формирование массива с помощью функции случайных чисел random.

Задача
Составьте программу, задающую одномерный массив размерность 10, состоящий из случайных чисел из промежутка  от 5 до 22. Оформите вывод элементов на экран в строчку.
Пояснение
Обратите внимание, что случайные числа задаются функцией random(x).Если требуются числа из промежутка от a до b, то формула имеет следующий вид random(b-a+1)+a
текст программы
var m: array [1..10] of integer;
    i: integer;
begin
for i:=1 to 10 do
begin
m[i]:=random(17)+5;
write(m[i],' ');
end;
end.

Задача (урок )
Составьте программу, которая в одномерном массиве размерностью 8 (элементы массива случайные числа из промежутка от 15 до 100) находит максимальный элемент.  Оформите вывод элементов на экран в строчку, максимальный на следующей строке.
Пояснение
Обратите внимание, что это задание аналогично задаче 7. Но в данном случае при составление программы используется массив.
текст программы
var m:array[1..8] of integer;
    i,max:integer;
begin
max:=14;
for i:=1 to 8 do
begin
m[i]:=random(86)+15;
write(m[i],' ');
if max<m[i] then max:=m[i];
end;
writeln;
writeln('Максимальный - ',max);
end.

Задача (урок )
Составьте программу, которая в одномерном массиве размерностью 12 (элементы массива случайные числа из промежутка от 0 до 6) находит количество элементов равных 3. Оформите вывод элементов на экран в строчку, количество искомых элементов на следующей строке.
Пояснение
Обратите внимание, что переменная k - счетчик, поэтому начальное значение переменной обнуляем. Условие для подсчета 3: if w[i]=3 then k:=k+1, т.е. если элемент равен 3, то k увеличивается на 1.
текст программы
var w:array[1..12] of integer;
    i,k:integer;
begin
k:=0;
for i:=1 to 12 do
begin
w[i]:=random(7);
write(w[i],' ');
if w[i]=3 then k:=k+1;
end;
writeln;
writeln('Количество троек ',k);
end.

Задача (урок )
Составьте программу, которая в одномерном массиве размерностью 7 (элементы массива случайные числа из промежутка от 1 до 8) сумму элементов меньше или равных 3. Оформите вывод элементов на экран в строчку, количество искомых элементов на следующей строке.
Пояснение
Обратите внимание, что переменная s - накопитель суммы, поэтому начальное значение переменной обнуляем. Условие для подсчета суммы элементов меньших или равных 3: 
if w[i]<=3 then s:=s+w[i], т.е. если элемент меньше или равен 3, то s увеличивается на значение элемента.
текст программы
var w:array[1..7] of integer;
    i,s:integer;
begin
s:=0;
for i:=1 to 7 do
begin
w[i]:=random(8)+1;
write(w[i],' ');
if w[i]<=3 then s:=s+w[i];
end;
writeln;
writeln('Сумма элементов <=3 ',s);
end.

Задача (урок )
Составьте программу,  в которой подсчитывается количество четных элементов, одномерного массива размерность 7, состоящего из случайных чисел из промежутка  от 1 до 20. Оформите вывод элементов на экран в строчку. Количество четных элементов на следующей строке.
Пояснение
Обратите внимание, что условием чётности элемента будем выводить через функцию mod (целочисленный остаток от деления). Четные числа делятся на 2 с нулевым остатком: 
if w[i] mod 2=0 then k:=k+1
текст программы
var m: array [1..7] of integer;
    i,k: integer;
begin
k:=0;
for i:=1 to 7 do
begin
m[i]:=random(20)+1;
if m[i] mod 2=0 then k:=k+1;
write(m[i],' ');
end;
writeln;
writeln('Количество четных элементов ',k);
end.

Задача (урок )
Составьте программу, которая в одномерном массива размерность 20, состоящим из случайных чисел из промежутка  от 1 до 100, находится наибольший элемент оканчивающийся на цифру 2. Оформите вывод элементов на экран в строчку.
Пояснение
Обратите внимание, что в данной задаче используем сложное условие. Проверка, что число оканчивается на цифру 2: m[i] mod 10 =2 и сравнение с максимальным max<m[i].

max может не поменяется, т.е. в данной последовательности не будет чисел, оканчивающихся на 2, и после цикла нужно поставить проверку на значение max.
текст программы
var m:array[1..20] of integer;
    i,max:integer;
begin
max:=0;
for i:=1 to 20 do
begin
m[i]:=random(100)+1;
write(m[i],' ');
if (m[i]mod 10=2)and(max<m[i]) then max:=m[i];
end;
writeln;
if max=0 then writeln('Среди данных чисел, нет оканчивающегося на 2')
else writeln('Максимальный, оканчивающийся на 2 ',max);
end.

Задача (урок )
Составьте программу, которая в одномерном массива размерность 11, состоящим из случайных чисел из промежутка  от 1 до 20, находится наименьший элемент оканчивающийся на цифру 3. Оформите вывод элементов на экран в строчку.
Пояснение 
Обратите внимание, что в данной задаче используем сложное условие. Проверка, что число оканчивается на цифру 3: m[i] mod 3 =0 и сравнение с минимальным min>m[i].

Начальное значение min:=21, так как наибольшее число 20.
min может не поменяется, т.е. в данной последовательности не будет чисел, оканчивающихся на 3, и после цикла нужно поставить проверку на значение min.
текст программы
var m:array[1..11] of integer;
    i,min:integer;
begin
min:=21;
for i:=1 to 11 do
begin
m[i]:=random(20)+1;
write(m[i],' ');
if (m[i]mod 10=3)and(min>m[i]) then min:=m[i];
end;
writeln;
if min=21 then writeln('Среди данных чисел, нет оканчивающегося на 3')
else writeln('Минимальный, оканчивающийся на 3 ',min);
end.

Задача (урок )
Составьте программу, которая в одномерном массива размерность 15, состоящим из случайных чисел из промежутка  от 20 до 80, находится наибольший элемент оканчивающийся на цифру 2 или на цифру 8. Оформите вывод элементов на экран в строчку.
Пояснение 
Обратите внимание, что в данной задаче используем сложное условие. Проверка, что число оканчивается на цифру 2 или на 8: ((m[i] mod 2 =0) or (m[i] mod 10=8)) и сравнение с максимальным max<m[i].

текст программы
var m:array[1..15] of integer;
    i,max:integer;
begin
max:=19;
for i:=1 to 15 do
begin
m[i]:=random(61)+20;
write(m[i],' ');
if ((m[i]mod 10=2)or(m[i]mod 10=8))and(max<m[i]) then max:=m[i];
end;
writeln;
if max=19 then writeln('Среди данных чисел, нет оканчивающегося на 2 или 8')
else writeln('Максимальный, оканчивающийся на 2 или 8 ',max);
end.

Сортировка одномерного массива

Задача  (урок )
Составить программу, которая сортирует элементы одномерного массива размерностью 7 по возрастанию (элементы массивы случайные числа от 10 до 60).
текст программы
var mas:array[1..7] of integer;
    i,j,a:integer;
begin
for i:=1 to 7 do
begin
mas[i]:=random(60)+1;
write(mas[i],' ');
end;
for j:=1 to 6 do
for i:=1 to 6 do
if mas[i]>mas[i+1] then
       begin
       a:=mas[i];
       mas[i]:=mas[i+1];
       mas[i+1]:=a;
       end;
writeln;
write ('Отсортированный массив  ');
for i:=1 to 7 do write(mas[i],' ');
end.



Двумерный массив

Описание двумерного массива
var mas: array[1..3,1..4] of integer;
Задается двумерный массив(матрица) с именем mas,  количество строк - 3количество столбцов - 4
имена элементов - mas[1,1], mas[1,2] ...
Расположение:
 mas[1,1]  mas[1,2]  mas[1,3]  mas[1,4]
 mas[2,1]  mas[2,2]  mas[2,3]  mas[2,4]
 mas[3,1]  mas[3,2]  mas[3,3]  mas[3,4]

Задача (урок )
Составьте программу по формированию и выводу на экран двумерного массива размерность 5х4, элементами являются случайные числа от 20 до 99
var m:array[1..5,1..4] of integer;
    i,j:integer;
begin
for i:=1 to 5 do
begin
for j:=1 to 4 do
begin
m[i,j]:=random(80)+20;
write(m[i,j],' ');
end;
writeln;
end;
end.

_______________________________________________________

Процедуры и функции в Паскале

Процедуры

Задача (урок )
Процедура, которая меняет местами значения двух переменных.
Пояснение: обычно, чтобы поменять местами значения двух переменных, нужна третья переменная, в которой будет храниться значение первой переменной, когда ей присваивается значение второй.
текст программы
var x,y:integer;
procedure chan(var a,b:integer);
var c:integer;
begin
c:=a;a:=b;b:=c;
end;
begin
readln(x,y);
writeln(x,' ',y);
chan(x,y);
writeln(x,' ',y);
end.

Задача (урок )
Процедура, которая для вводимого с клавиатуры целого числа значения возраста выводит на экран это число с соответствующим наименованием:
Например: 21 год, 23 года, 27 лет  
Пояснение: Рассмотрим, в каких случаях будет наименование "год", "года", "лет".
Если возраст оканчивается на 1 - то будет год, если на 2,3,4  - "года", в остальных случаях - "лет". Будем расписывать условия через функцию mod и вложенный if.
Программа работает неправильно для 11, 12, 13 и 14 лет. Попробуйте исправить.
текст программы
var x:integer;
procedure god(a:integer);
begin
if a mod 10=1 then writeln(a,' год')
else 
if (a mod 10=2)or(a mod 10=3)or(a mod 10=4)then writeln(a,' года')
else writeln(a,' лет');
end;
begin
readln(x);
god(x);
end.



Задача (урок )

Процедура, которая для вводимого с клавиатуры числа выводит соответствующее пояснение: "число положительное", "ноль" или "число отрицательное".

текст программы
var x:integer;
procedure pp(a:integer);
begin
if a>0 then writeln('число положительное')
else
if a=0 then writeln('ноль')
else writeln('число отрицательное');
end;
begin
readln(x);
pp(x);
end.

Задача (урок )
Процедура, которая после ввода с клавиатуры целого числа выводит на экран в строчку столько же раз знак "=" .
текст программы
var x:integer;
procedure kkk(a:integer);
var i:integer;
begin
for i:=1 to a do write('=');
end;
begin
readln(x);
kkk(x);
end.


Задача (урок )
Процедура, которая для введенного с клавиатуры числа минут выделяет количество часов и количество минут.
текст программы
var x:integer;
procedure mh(a:integer);
var h,m:integer;
begin
h:=a div 60;
m:=a mod 60;
writeln(h,' ч',' ',m,' мин');
end;
begin
readln(x);
mh(x);
end.

Функции


Задача (урок 
)
Функция, которая определяет наибольшее число из трех целых чисел, вводимых с клавиатуры.
текст программы
var x,y,z:integer;
function max3(a,b,c:integer):integer;
var m:integer;
begin
if a>b then m:=a else m:=b;
if m<c then m:=c;
max3:=m;
end;
begin
readln(x);
readln(y);
readln(z);
writeln(max3(x,y,z));
end.

Задача (урок )
Написать программу с функцией, вычисляющей степень целого числа,вводимого с клавиатуры
Пояснение: рассмотрим по шагам как получается степень числа х
1 степень=х
2 степень=х*х
3 степень=х*х*х
.....

Таким образом, степень можно считать через оператор for и накопитель p, которому вначале программы присвоим значение 1, тк она не изменяет число при умножении.
1 шаг p:=x*p { x*1=x }
2 шаг p:=x*p { x*x - 2 степень }
3 шаг p:=x*p { x*x*x - 3 степень }
......

текст программы 
var x,n:integer;
function st(a,k:integer):integer;
var p,i:integer;
begin
p:=1;
for i:=1 to k do p:=p*a;
st:=p;
end;
begin
writeln('введите число');
readln(x);
writeln('введите степень');
readln(n);
writeln(x,' в степени ',n,' - ',st(x,n));
end.

Задача 
(урок)
Написать программу с функцией, вычисляющей факториал числа.
Факториал можно вычислить только у натуральных чисел (целы числа >0)
Запись: n!=1*2*3*...*n
n! - обозначение
Определение. Факториал n - это произведение всех чисел от 1 до числа n.
Пример: 5! = 1*2*3*4*5=120

текст программы
var x:integer;
function f(a:integer):integer;
var p,i:integer;
begin
p:=1;
for i:=1 to a do p:=p*i;
f:=p;
end;
begin
writeln('введите число');
readln(x);
writeln(x,'!','=',f(x));
end.


______________________________________________________

Двумерные массивы.

Описание двумерного массива

var mas: array[1..3,1..4] of integer;
Задается двумерный массив(матрица) с именем mas,  количество строк - 3количество столбцов - 4
имена элементов - mas[1,1], mas[1,2] ...
Расположение:
 mas[1,1]  mas[1,2]  mas[1,3]  mas[1,4]
 mas[2,1]  mas[2,2]  mas[2,3]  mas[2,4]
 mas[3,1]  mas[3,2]  mas[3,3]  mas[3,4]

Задача .  (урок )
Составить программу, которая формирует двумерный массив 3х4 (3 строки и 4 столбца) из случайных чисел от 1 до 9. 
текст программы
var a:array[1..3,1..4] of integer;
    i,j:integer;
    n,max,f:integer;
begin
for i:=1 to 3 do
begin
for j:=1 to 4 do
begin
a[i,j]:=random(9)+1;
write(a[i,j],' ');
end;
writeln;
end;
end.

Задача  (урок )
Составить программу, которая в двумерном массиве 4х4 (элементы случайные числа от 1 до 9) в каждой строчке находит наибольший элемент и ставит его на первое место в строке, меняя местами с первым.
Пояснение 
В данной задаче будет три блока: первый - формирование массива и вывод на экран, второй - перестановка наибольших элементов в строке на первое место, третий - вывод нового массива.

В втором блоке в каждой строке мы принимаем вначале за наибольший первый элемент, т.е. стоящий в первом столбце, max:=a[i,1], в переменной n будем хранить номер столбца n:=1. Сравнивая max с другими элементами строки, при нахождении больших меняем max и запоминаем  в n новый номер столбца. После просмотра всей строки меняем первый элемент с наибольшим местами через дополнительную переменную f:
f:=a[i,1];
a[i,1]:=a[i,n];
a[i,n]:=f;

текст программы
var a:array[1..4,1..4] of integer;
    i,j:integer;
    n,max,f:integer;
begin

for i:=1 to 4 do
begin
for j:=1 to 4 do
begin
a[i,j]:=random(9)+1;
write(a[i,j],' ');
end;
writeln;
end;

for i:=1 to 4 do
begin
max:=a[i,1];
n:=1;
for j:=2 to 4 do
if max<a[i,j] then
begin
max:=a[i,j];
n:=j;
end;
f:=a[i,1];
a[i,1]:=a[i,n];
a[i,n]:=f;
end;

writeln('Новый массив');
for i:=1 to 4 do
begin
for j:=1 to 4 do write(a[i,j],' ');
writeln;
end;
end.


Комментариев нет:

Отправить комментарий