Главная страница
Навигация по странице:

  • Функция Function Sum_v (var a:vector;n:byte): integer ;

  • Функция Процедура

  • Формальные и фактические параметры

  • Локальные и глобальные параметры

  • Примеры решения задач Пример 1.

  • Пример 2.

  • Пример 3.

  • Пример 4.

  • Пример 5.

  • Номер учащегося в списке по журналу

  • Задания для самостоятельного решения

  • ВСР_инф_МЭО. Методические рекомендации по их выполнению по дисциплине Информатика и икт


    Скачать 1.29 Mb.
    НазваниеМетодические рекомендации по их выполнению по дисциплине Информатика и икт
    Дата21.04.2018
    Размер1.29 Mb.
    Формат файлаdocx
    Имя файлаВСР_инф_МЭО.docx
    ТипМетодические рекомендации
    #41744
    страница7 из 11
    1   2   3   4   5   6   7   8   9   10   11

    Самостоятельная работа № 12


    Составление подпрограмм в Паскале
    Цель работы: ознакомление с подпрограммами-функциями; ознакомление с подпрограммами-процедурами; получение навыков в составлении х программ на основе приобретённых сведений.
    Общие понятия

    Автономная часть программы, с помощью которой можно производить одни и те же вычисления с разными исходными данными и в различных местах программы, многократно называется подпрограммой. Преимущества использования подпрограмм  уменьшение объема программы, сокращение времени на отладку.

    В Pascal существует 2 вида подпрограмм: процедуры и функции. В отличие от стандартных процедур и функций, описанных в специальных модулях, все пользовательские подпрограммы должны быть описаны в начале программы (до начала тела программы).

    Функция

    Function Sum_v (var a:vector;n:byte): integer;

    зарезер. имя список формальных тип возвращ.

    слово функции параметров значения
    Процедура

    Procedure Sum_vec (a:vector;n:byte; var sum:integer);

    зарезерв. имя список формальных

    слово процедуры параметров


    Основные отличия между процедурами и функциями приведены в таблице 5.

    Таблица 5  Основные отличия между процедурами и функциями

    Функция

    Процедура

    Возвращает одно значение, которое связывается с именем функции, поэтому в теле подпрограммы-функции обязательно должно быть присваивание имени функции некоторого значения, чтобы вернуть его в основную программу

    Может использоваться в выражениях как обычная переменная, например, у:=х+ln(х)

    Может возвращать любое количество значений, которые связываются с именем процедуры

    Нельзя использовать в выражениях, например, нельзя написать у:=x+write (х)

    Выполнение подпрограммы начинается при обращении к ней из основной программы. Процесс обращения называется вызовом процедуры или функции.

    Когда в теле основной программы встречается оператор вызова подпрограммы, выполнение инструкций основной программы приостанавливается и выполняются инструкции подпрограммы. После выполнения всех инструкций подпрограммы продолжается выполнение инструкций основной программы с оператора, следующего за обращением к процедуре или функции.


    Формальные и фактические параметры

    Параметры (переменные), определяемые при описании процедуры или функции, называются формальными.

    Параметры (переменные), задаваемые при вызове подпрограммы, называются фактическими.

    Замена формальных параметров фактическими делается так: на место первого формального параметра подставляется первый фактический параметр, на место второго формального параметра  второй фактический и т.д. Поэтому количество и типы формальных и фактических параметров должны совпадать.

    Формальные параметры, если они приводятся при описании процедуры, можно разделить на несколько категорий. Мы будем рассматривать только две:

     параметры-значения;

     параметры-переменные.

    Основные отличия параметров-значений и параметров-переменных приведены в таблице 6.

    Таблица 6  Основные отличия параметров-значений и параметров-переменных

    Параметры-значения

    Параметры-переменные

    Признаком является отсутствие служебного слова var

    Признаком является наличие служебного слова var

    Передаются в процедуру через стек в виде копии их значений. Процедура не может менять параметры х и у вне процедуры

    Передаются через стек, но напрямую.

    Эти параметры процедура может изменять в основной программе

    В качестве фактических параметров могут выступать любые выражения соответствующего типа и константы

    В качестве фактических параметров должны использоваться только переменные соответствующего типа

    Локальные и глобальные параметры

    Переменные и константы, описанные внутри подпрограммы, называются локальными. Для основной программы они не существуют. Переменные и константы, определенные в разделе описаний основной программы, называются глобальными. Любой подпрограмме доступны все глобальные параметры, за исключением тех, с чьими именами совпадают имена ее параметров или локальных переменных.

    В заголовках процедур и функций в списке формальных параметров необходимо указывать их тип. Правилами языка Pascal определено, что можно использовать либо стандартные типы (определенными разработчиками языка), либо так называемые предопределенные типы (определённые программистом ранее). Вводить новый тип в списке формальных параметров не допускается.

    Рекурсия

    Язык Pascal допускает, чтобы процедуры или функции были рекурсивными.

    Рекурсия  это такой способ организации вычислительного процесса, при котором процедура или функция в собственном разделе операторов обращается сама к себе. В ряде случаев этот прием позволяет существенно повысить эффективность программирования.

    Рекурсивная форма организации алгоритма обычно выглядит изящнее итерационной и дает более компактный текст программы, но при выполнении, как правило, медленнее и может вызвать переполнение стека.

    Стек – это специальная область памяти (конечное число ячеек), где сохраняется адрес возврата (адрес вызывающей программы, используется для передачи управления вызывающей программе). Стеки используются также для передачи параметров в процедуры (для обычных параметров в стек заносятся их значения, для параметров-переменных – их адреса), размер стека ограничен. Стек можно представить в виде стопки книг. Если стопка достигла максимального размера, то при добавлении новой книги сверху – нижняя книга должна быть убрана.

    Нужно обязательно отслеживать в программе наполнение стека, то есть не допускать зацикливания рекурсии.

    Примеры решения задач

    Пример 1. Вычислить хn , используя рекурсивную функцию.

    Решение:

    uses crt;

    var x1,x2:Writer;

    i,m:byte; s:longint;

    function xn(x,n:byte):longint;

    begin

    if n=0 then xn:=1

    else xn:=xn(x,n-1)*x;

    end;

    begin

    clrscr;

    write('x,n='); readln(x1,m);

    writeln('xn-',xn(x1,m));

    readkey;

    end.
    Пример 2. Написать рекурсивную функцию вычисления суммы
    1 + 2 + 3 + 4 + 5 + … + N.

    Решение:

    uses crt;

    var m:Writer;

    funnction sum(n:Writer):longint;

    begin

    if n=1 then sum:=1 else sum:=sum(n-1)+n;

    end;

    begin

    write('n=');

    readln(m);

    writeln('сумма -',sum(m));

    readkey;

    end.
    Пример 3. Написать функцию, подсчитывающую количество цифр числа. Используя ее, определить, в каком из двух данных чисел больше цифр.

    Решение:

    uses crt;

    var nl,n2:longint;

    kl,k2:byte;

    function Quantity(x:longint):byte;

    var k:byte;

    begin

    while x<>0 do

    begin

    inc(k); x:=x div 10; end;

    Quantity:=k;

    end;

    begin

    writeln ('Введите два числа’);

    readln(nl,n2);

    kl:=Quantity(nl); {количество цифр первого числа}

    k2:=Quantity(n2);{количество цифр второго числа}

    if kl=k2 then writeln('Одинаковое количество цифр') else if kl>k2 then writeln('В первом числе цифр больше') else writeln('Во втором числе цифр больше');

    readkey;

    end.
    Пример 4. Дана точка. Определить, лежит ли она в кольце.

    Решение:

    uses crt;

    var x,y,r1,r2,a,b:real;

    procedure haltpr;

    begin

    writeln('Неверные данные');

    write('r1
    readln; halt;

    end;

    begin

    clrscr;

    write('координаты центра окр. a=');readln(a);

    write('координаты центра окр. b=');readln(b);

    write('x='); readln(x);

    write('y='); readln(y);

    write('r1=');readln(r1);

    write('r2=');readln(r2);

    if r1>r2 then haltpr;

    if (sqr(x-a)+sqr(y-b)sqr(y-b)>sqr(r1))

    then write('лежит')

    else write('не лежит');

    readln;

    end.
    Пример 5. Определить, сократимая ли дробь a/b (дробь a/b несократимая, если НОД=1).

    Решение:

    uses crt;

    var m,n,ot:longint;

    procedure nod(a,b:longint; var n:longint);

    begin

    while a<>b do

    if a>b then a:=a-b

    else b:=b-a;

    n:=a;

    end;

    begin

    clrscr;

    write('числитель');

    readln(m);

    write('знаменатель');

    readln(n);

    nod(m,n,ot);

    if ot=1

    then write('несократимая')

    else write('сократимая');

    readln;

    end.

    Задание: Выполните задания в соответствии с номером учащегося в списке по журналу (см. в табл. ).

    Таблица  – Номера вариантов учащихся по списку

    Номер задания

    1,20

    2,19

    3,18

    4,17

    5,16

    6,15

    7,14

    8,13

    Номер учащегося

    в списке по журналу

    1,9,


    2,10,


    3,11,


    4,12,


    5,13,


    6,14,


    7,15,


    8,16,


    Задания для самостоятельного решения

    1. Напишите программу, состоящую из трех процедур и основной программы. Первая процедура организует ввод двух целых чисел x и y, вторая проверяет их сумму, третья выводит результат. Используйте эти процедуры в основной программе. Опишите x и y как глобальные переменные.

    2. Напишите программу вычисления площади поверхности и длины экватора на основе известного радиуса планет солнечной системы. Форму планет будем считать шаром. Вычисление площади поверхности и длины экватора оформите отдельными функциями.

    3. Напишите программу поиска большего из четырех чисел с использованием подпрограммы поиска большего из двух чисел.

    4. Даны координаты вершин многоугольника (x1, y1, x2, y2,…,
      x10, y10). Напишите программу для вычисления его периметра (вычисление расстояния между вершинами оформить подпрограммой).

    5. Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала.

    6. Напишите программу для вычисления числа сочетаний из N по M. Число сочетаний определяется по формуле , где N – количество элементов перебора. Используйте подпрограмму вычисления факториала.

    7. Напишите программу для определения НОД трех натуральных чисел.

    8. Даны действительные числа s, t. Составить программу вычисления выражения f(t, -2s, 1.17)+f(2.2, t, s-t), где

    9. Даны натуральные m и n (m

    10. Напишите программу вычисления суммы квадратов простых чисел, лежащих в интервале (M, N).

    11. Напишите программу подсчета числа четных цифр, используемых в записи N-значного числа M.

    12. Составьте программу вычисления суммы трехзначных чисел, в десятичной записи которых нет четных цифр.

    13. Составьте программу вывода на экран всех натуральных чисел, не превосходящих N и делящихся на каждую из своих цифр.

    14. Составьте программу нахождения наименьшего натурального N-значного числа X (X>=10), равного утроенному произведению своих цифр.

    15. Составьте программу подсчета числа всех натуральных чисел, меньших М, квадрат суммы цифр которых равен X.

    16. Составьте программу, вычисляющую значение функции:

    , где .

    Для вычисления функции f(x, n) используйте подпрограмму-функцию. Значения аргумента x  введите с клавиатуры.

    17. Составьте программу, вычисляющую значение функции:

    , где

    Для вычисления функции f(i) используйте подпрограмму-функцию. Значения аргумента nвведите с клавиатуры.

    18. Составьте программу, вычисляющую значение функции:

    , где

    Для вычисления функции f(t) используйте подпрограмму-функцию. Значения аргумента x введите с клавиатуры. После ввода данных программа должна проверять условие существования функции z(x).

    19. Составьте программу, вычисляющую значение функции:

    , где

    Для вычисления функции f(x) используйте подпрограмму-функцию. Значения аргументов a и bвведите с клавиатуры. После ввода данных программа должна проверять условие существования функции z(a, b).

    20. Напишите функцию для определения номера первого встретившегося элемента в одномерном целочисленном массиве произвольной длины, значение которого совпадает с заданным. При отсутствии такого элемента функция должна возвращать значение 1.
    1   2   3   4   5   6   7   8   9   10   11


    написать администратору сайта