Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Простейшие процедуры
1. Создайте процедуру, печатающую на экране слово Hello и программу, которая с ее помощью напечатает слово Hello 10 раз.
Локальные переменные
2. Создайте процедуру, которая выводит в одну строку слово Hello 5 раз. Осуществите это с помощью цикла. Переменную счетчик цикла сделайте локальной. С помощью этой процедуры выведите 5 таких строк.
Параметры процедур
3. Создайте процедуру, печатающую слово Hello заданное число раз. Количество раз передавайте в процедуру как параметр-значение.
4. Создайте процедуру, увеличивающую значение переменной на единицу.
5. Создайте процедуру, меняющую значения двух переменных местами.
6. Создайте процедуру, располагающую два числа по возрастанию. На входе она должна получать две переменные и если первая больше второй, то значения должны поменяться местами. Операцию перестановки выполняйте, обращаясь к процедуре из первой задачи.
7. Создайте процедуру, упорядочивающую три числа по возрастанию. Сравнений в этой процедуре не проводите. Вместо этого обращайтесь к процедуре из предыдущего задания.
8. Создайте процедуру, которая пару последовательных чисел Фибоначчи преобразует в следующую пару. То есть, если на входе даны элементы с номерами (n-1) и n, то процедура должна в те же переменные записать элементы с номерами n и (n+1). С помощью этой процедуры найдите 10-е число в последовательности Фибоначчи.
9. Создайте процедуру для возведения числа в целую степень. Число и степень должны быть параметрами-значениями, а результат должен записываться в параметр-переменную. То есть заголовок процедуры должен выглядеть примерно так:
procedure Power(x: real; n: integer; var Result: real);
10. Поворот на угол против часовой стрелки относительно начала координат приводит к следующему преобразованию координат:
Создайте процедуру, осуществляющую такое преобразование.
12. Создайте процедуру, заполняющую массив случайными числами. Массив для заполнения передавайте в процедуру как параметр-переменную. В той же программе создайте процедуру, печатающую на экране элементы массива. Главная программа должна состоять из вызова этих процедур.
13. Усовершенствуйте предыдущую программу, добавив к процедурам еще один параметр – количество элементов, которые нужно заполнять или печатать. Пусть главная программа запрашивает это количество у пользователя.
Функции
14. Создайте функцию, перемножающую два числа. Убедитесь с ее помощью, что дважды два – четыре.
15. Создайте функцию, возводящую число в целую степень. Число и степень должны быть, естественно, параметрами.
16. Создайте функцию, возвращающую индекс максимального элемента части массива. Часть задавайте диапазоном индексов (с какого по какой). С помощью этой функции осуществите сортировку массива.
17. Реализуйте несделанные вами ранее задания на обработку массивов, оформляя часть программы как процедуру или функцию.
Процедурные типы
18. Создайте функцию, вычисляющую определенный интеграл методом трапеций. Функцию, от которой надо брать интеграл, передавайте как параметр процедурного типа.
Следующий раздел:
Предыдущий раздел:
Ух! Ещё 5 параграфов и можно переходить к PHP :)
Хороший план :)
Кстате, а можно сначало изучить PHP, а потом полностью HTML. HTML только базу знаю :/
Поскольку результатом работы PHP скрипта является HTML код, то совсем без HTML никак. Но если база, как ты говоришь, есть, то вполне можно учить PHP. Просто странички будут получаться простенькие, без дизайнерских изысков.
«Процедуры и функции»… Почему они такие сложные?! В голове каша… все смешалось: локальные, глобальные переменные… а уж параметры процедур вообще ужасны(((
Привыкнешь ))
Два вида переменных, два вида параметров. Всего-то!
Здравствуйте, Тарас Викторович, проверьте, пожалуйста 4 задание:
…
Был текст программы
и 5 задание:
var
…
Был текст программы
Все правильно )
Здравствуйте, проверьте, пожалуйста, задание 7:
…
Был текст программы
задание 13:
…
Был текст программы
7, 9 — правильно.
13 — стоит убрать var перед t в Randomm. Во Writee количество задается глобальной переменной m. Глобальные переменные в процедурах — это не хорошо. Надо сделать параметр.
Здравствуйте, замечания принимаются))))
задание 15:
…
Был текст программы
задание 16:
…
Был текст программы
А сортировку делать именно с этой функцией?
15 — хорошо
16 — для сортировки нужен максимум не во всем массиве, а только в неотсортированной части. Так что я, получается, не очень хорошо сформулировал задачу. Формулировку задачи исправил.
Здравствуйте, задание 16, сортировка по убыванию:
…
Был текст программы
Параметр t у функции никак не используется. Раз уж первым делом t:=m1+1, то совершенно не важно какое значение было передано в функцию.
n1 — лишний посредник.
В остальном — хорошо.
program N11_8;{числа Фибоначчи}
var
x, y:integer;
procedure Fibonachi( x, y:integer);
var
a, b, c, i:integer;
begin
a:=1;
b:=1;
c:=0;
i:=2;
while a < x do
begin
c:=a;
a:=b;
b:=b+c;
c:=0;
i:=i+1;
end;
if (a = x) and (b = y) then
begin
c:=x;
x:=y;
y:=y+c;
writeln('x', [i], ' = ', x, ' ', 'y', [i+1], ' = ', y);
end else
writeln(x, ' и ', y, ' не являются числами Фибоначчи ');
end;
begin
write('x = ');
readln(x);
write('y = ');
readln(y);
Fibonachi(x, y);
end.
В задаче предполагалось, что будет процедура типа
procedure Fibonachi(var x, y:integer);
Программа возьмет начальные значения (1,1), вызовет процедуру 8 раз и т.о. получит искомое 10-е число.
Кстати,
c := 0;
оба раза лишнее..
Пример 6:
Program Z11_6; {Order}
type
TProc = procedure(var x, y: real);
var
a, b: real;
Proc1: TProc;
procedure Swap(var x, y: real);
var
c: real;
begin
c:= x;
x:= y;
y:= c;
end;
procedure Order(var x, y: real; Proc1: TProc);
begin
if (x>y) then
Swap(x, y);
end;
begin
readln(a, b);
writeln(‘a=’, a, ‘ b=’, b);
Order(a, b, Swap);
writeln(‘a=’, a, ‘ b=’, b);
end.
Как может быть оформлен код программы без использования в процедуре Order параматра процедурного типа Proc1 ?
Пример 7:
Program Z11_7; {Order 3 operands}
type
TProc = procedure(var x, y: real);
var
a, b, c: real;
Proc1: TProc;
procedure Swap(var x, y: real);
var {Swap: перев.»поменять местами»}
d: real;
begin
d:= x;
x:= y;
y:= d;
end;
procedure Order(var x, y: real; Proc1: TProc);
begin
if (x>y) then
Proc1(x, y);
end;
begin
readln(a, b, c);
writeln(‘a=’, a, ‘ b=’, b, ‘ c=’, c);
Order(a, b, Swap);
Order(b, c, Swap);
Order(a, b, Swap);
writeln(‘a=’, a, ‘ b=’, b, ‘ c=’, c);
end.
Пример 8:
Program Z_11_8;{Последовательность Фибоначчи: 1,1,2,3,5,8,13,21,34,55,89,144…}
const
n = 10;
var
x, y: integer;
Counter: integer;
procedure Fibonachi(var x, y: integer);
var
z: integer;
begin
z:= x;
x:= y;
y:= y+z;
write(y, ‘ ‘);
end;
begin
x:=1;
y:=1;
write(‘ Последовательность Фибоначчи: ‘, x, ‘ ‘, y, ‘ ‘);
Counter:=2;
repeat
Fibonachi(x, y);
Counter:=Counter+1;
until Counter = n;
write(‘…’);
writeln;
writeln(‘ Y_n=’, y);
end.
Program Z11_10 {Преобразование координат};
var
x, y, fi: real;
procedure Transform(var x, y: real; fi: real);
var
z: real;
begin
z:= x;
x:= x*cos(fi) — y*sin(fi);
y:= z*sin(fi) + z*cos(fi);
end;
begin
readln(x, y, fi);
writeln(‘ x=’, x, ‘ y=’, y, ‘ fi=’, fi);
Transform(x, y, fi);
writeln(‘ x=’, x, ‘ y=’, y);
end.
Может быть такая сортировка имелась в виду в примере 16:
Program Z11_16; {Ранжирование элементовтов массива по возрастанию}
const
N=10;
type
TMass = array[1..N] of real;
var
a: TMass;
i, d: integer;
z: real;
procedure FillTMass(var x: TMass; m1, m2: integer);
var {Заполнение массива}
i: integer;
begin
for i:=m1 to m2 do
x[i]:= trunc(99 *(2*random-1));
end;
procedure OutTMass(var x: TMass; n1, n2: integer);
var {Вывод массива}
i: integer;
begin
for i:=n1 to n2 do
write(x[i]:4);
writeln;
end;
function Indexmax(var x: TMass; k1, k2: integer): integer;
var {Индекс наибольшего элемента: k1<=Indexmaxx[c]) then
c:= i;
Indexmax:=c;
end;
begin
FillTMass(a, 1, N);
OutTMass (a, 1, N);
for i:=1 to N do
begin
d:= Indexmax(a, i, N);
z:= a[i];
a[i]:= a[d];
a[d]:= z;
end;
OutTMass (a, 1, N);
end.
Работает также код с параметром процедурного типа, хотя и нет полной уверенности в корректности описаний параметров:
Program Z11_16; {Ранжирование элементов массива по возрастанию}
const
N=10;
type
TMass = array[1..N] of real;
TFunc = function(var x: TMass; k1, k2: integer): integer;
var
a: TMass;
Func: TFunc;
i: integer;
procedure FillTMass(var x: TMass; m1, m2: integer);
var {Заполнение массива}
i: integer;
begin
for i:=m1 to m2 do
x[i]:= trunc(99 *(2*random-1));
end;
procedure OutTMass(var x: TMass; n1, n2: integer);
var {Вывод массива}
i: integer;
begin
for i:=n1 to n2 do
write(x[i]:4);
writeln;
end;
procedure Sort(var x: TMass; k1, k2: integer; Func: TFunc);
var {Сортировка элементов массива по возрастанию}
i, d: integer;
z: real;
begin
for i:=1 to N do
begin
d:= Func(a, i, N);
z:= a[i];
a[i]:= a[d];
a[d]:= z;
end;
end;
function Indexmax(var x: TMass; k1, k2: integer): integer;
var {Индекс наибольшего элемента: k1<=Indexmaxx[c]) then
c:= i;
Indexmax:=c;
end;
begin
FillTMass(a, 1, N);
OutTMass (a, 1, N);
Sort(a, 1, N, Indexmax);
OutTMass(a, 1, N);
end.
В первом варианте ошибка копирования. Пробую исправить:
function Indexmax(var x: TMass; k1, k2: integer): integer;
var {Индекс наибольшего элемента: k1<=Indexmaxx[c]) then
c:= i;
Indexmax:=c;
end;
function Indexmax(var x: TMass; k1, k2: integer): integer;
var
i, c: integer;
begin
c:= k1;
for i:=k1+1 to k2 do
if (x[i]>x[c]) then
c:= i;
Indexmax:=c;
end;
Пример 18:
rogram Integral_11_11;
type
TFunc = function (x: real): real;
var
x, Int: real;
function Example (x: real): real;
{Та функция, от которой в последствии будем брать интеграл}
begin
Example:=cos(x);
end;
function Integral(a, b: real; f: TFunc): real;
const
N=1000;
var
i: integer;
h, s: real;
begin
h:=(b-a)/N;
s:=(f(a)+f(b))/2;
x:=a;
for i:=1 to N-1 do
begin
x:=x+h;
s:=s+f(x);
end;
Integral:=s*h;
end;
begin
Int:=Integral(-Pi/2, Pi/2, Example); {Вызов функции Integral, где в
качестве параметра передана функция Example, вычисляющая
косинус}
Writeln(‘ Int=’, Int);
end
Не могу 11 сделал помогите пожалуйста