Основы структурного программирования
Их удобно использовать, когда в программе несколько раз решается одна и та же подзадача, но для разных наборов данных.
Процедуры и функции описываются до начала описания тела основной программы Раздел описания процедуры/функции начинается со слова: procedure имя (параметры); function имя (параметры): тип результата;
procedure box (s: char; w,h: integer); {раздел описания внутренних переменных} begin {тело процедуры} End;
function digits (n:integer): integer; {раздел описания внутренних переменных} begin {тело функции} End;
Когда процедура или функция вызываются, то в скобках вместо формальных параметров, указав фактические параметры (аргументы). Это могут быть либо конкретные значения, либо переменные из основной программы. box ('+', 10, 5); num := digits (num); Вызов процедуры Вызов функции
procedure box (s: char; w,h: integer); var i,j:integer; begin for i := 1 to h do begin for j := 1 to w do write (s); writeln end; writeln end; begin box ('+', 10, 5); box ('r', 20, 3); box ('|', 50, 10); box ('$', 12, 4); readln end.
var m: integer; function digits (n:integer): integer; var i: integer; begin i := 0; while n > 0 do begin n := n div 10; i := i + 1 end; digits := i end; begin write ('Введите положительное число: '); readln (m); m := digits (m); writeln ('Количество разрядов = ', m); readln end.
Написать программу ввода и вывода элементов двумерного массива на экран. Используйте в программе две процедуры: 1 – для ввода элементов двумерного массива, 2 – для вывода элементов двумерного массива
Что будет содержаться в теле основной программы? Запрос размера массива N x M, Вызов процедуры ввода элементов массива TAB_IN, Вызов процедуры вывода элементов массива TAB_OUT. Какие параметры нужно передать первой процедуре для ее работы? Размер массива (N, M) Какие параметры нужно передать второй процедуре для ее работы? Размер массива (N, M)
Описать тело основной программы Разработать первую процедуру TAB_IN Разработать вторую процедуру TAB_OUT
Написать программу, которая из двух целых чисел выбирает наибольшее число. Оформить выбор наибольшего числа в отдельной функции MAX.
Какие параметры нужно передать функции MAX для ее работы Два целых числа Какого типа будет получаться результат вычислений функции MAX ? Целого типа Что будет содержаться в теле основной программы? Запрос ввода двух чисел с клавиатуры, Сохранение в некоторой переменной целого типа результата вычисления функции MAX
Описываем функцию MAX Описываем тело основной программы
Написать программу, которая находит сумму цифр целого числа. Оформить поиск суммы цифр в виде отдельной функции.
Разработаем функцию NUM, определяющую количество цифр в числе (используйте операторы mod и div) Разработаем тело основной программы, в котором будем: Запрашивать ввод числа с клавиатуры, Помещать в некоторую переменную результат вычисления функции NUM Выводить результат на экран
Разработать программу, которая запрашивает ввод двух целых чисел и, если первое число больше второго, меняет значения переменных, в которых содержаться эти числа и выводит их на экран. Примечание: Оформить действия обмена значениями переменных в виде отдельной процедуры.
1. Какие параметры должны быть известны процедуре для выполнения поставленной задачи? 2. Разрабатываем тело процедуры (блок-схему и листинг). 3. Какие действия будут выполняться в основной программе? 4. Разрабатываем тело основной программы.
var k, l: integer; procedure exchange (var a,b: integer); var c: integer; begin if a > b then begin c := a; a := b; b := c; end; end; begin writeln ('Введите два числа: '); readln (k, l); exchange (k, l); writeln ('k = ', k,'; l = ', l); readln end.
Разработать программу вычисления НОД двух чисел a и b. Примечание: Оформить процесс вычисления НОД в виде отдельной функции.
1. Какие параметры должны быть известны функции? 2. Разрабатываем тело функции (блок-схему и листинг). 3. Какие действия будут выполняться в основной программе? 4. Разрабатываем тело основной программы.
var k, l, n: integer; function nod (var a,b: integer): integer; var c: integer; begin repeat if a > b then a := a mod b else b := b mod a; until (a = 0) or (b = 0); nod := a + b; end; begin writeln ('Введите два числа: '); readln (k, l); n := nod (k, l); writeln ('НОД = ', n); readln end.
Дана строка символов. Написать процедуру удаления всех кратных рядом стоящих символов.
Написать программу перевода числа из десятичной системы счисления в двоичную с применением рекурсивной процедуры РЕКУРСИВНАЯ ПРОЦЕДУРА ВЫЗЫВАЕТ САМУ СЕБЯ ИЗ СВОЕГО ЖЕ ТЕЛА
procedure scale (a: integer; b: byte); begin if b > 10 then write ('Основание должно быть меньше 10!') else begin if a > 1 then scale (a div b, b); write (a mod b) end;
var k: integer; s: byte; begin write ('Введите число: '); readln (k); write ('Перевод в систему счисления: '); readln (s); scale (k, s); readln end.
1. Найдем остаток от деления 3430 на 1365: 3430 mod 1365 = Так как этот остаток не равен нулю, повторим то же действие, подставив вместо первого числа второе, а вместо второго – остаток: 1365 mod 700 = Этот остаток также не нуль, поэтому еще одно деление: 700 mod 665 = И еще одно: 665 mod 35 = 0 5. Теперь остаток – нуль, следовательно, НОД равен 35.
function gcd(m, n: integer): integer; var modulo: integer; begin modulo := m mod n; if modulo = 0 then gcd := n else gcd := gcd (n, modulo)
var a, b, answer: integer; begin write('Enter two numbers: '); readln(a, b); answer := gcd(a, b); writeln('Greatest common divisor: ', answer); readln end.