Лабораторная работа 8


Программирование с использованием процедур и функций

Теоретический материал Справочник по процедурам и функциям


Цель работы: познакомиться с понятиями "процедура" и "функция" в языке программирования Pascal, рассмотреть их сходства и различия, закрепить практические навыки работы с системой TURBO Pascal на примере реализации алгоритмов при помощи процедур и функций, научиться применять метод последовательной детализации в практическом программировании; применять процедуры и функции при решении задач.

Общие сведения

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

Контрольные вопросы

  1. Для чего нужны в программе процедуры и функции?
  2. В чем отличие между процедурой и функцией?
  3. Чем отличаются формальные и фактические параметры?
  4. Чем отличаются параметры-значения и параметры-переменные?
  5. Как объявляются глобальные и локальные переменные? Каково правило видимости этих переменных?
  6. Почему при обращении к процедуре, аргумент, передаваемый параметру-переменной, может быть только переменной, а не константой или выражением?

Пример

Пример1. Найти сумму положительных элементов в массиве.

Этапы решения задачи:
  1. Алгоритм решения довольно прост - в цикле будем "пробегать" массив, сравнивая его ячейки с 0 и суммировать, если они >0.
  2. Составим блок-схему программы

    Уточним из каких блоков состоит блок"Суммирование положительных ячеек"

    Содержание этих блоков простое, поэтому не стоит их уточнять.
  3. Напишем программу на языке Паскаль
    program example; 
       type 
        Tarray = array[1..100] of integer; 
         Var v: Tarray; 
        N,i,s:integer; 
      Procedure vvod_data(var m:Tarray;n:integer); 
      Var i:integer; 
    Begin 
      Writeln('Введите ',n,' чисел через пробел');
       For i:= 1 to n do read(m[i]); 
    End; 
      Function summ(m:TArray):integer; 
      Var s:integer; 
    Begin 
       S:=0; 
        For i:= 1 to n do if m[i]>0 then s:= s+m[i]; 
       Summ:=s; 
    End; 
    begin 
          write('Введите размерность массива N= '); readln(n); 
         vvod_Data(v,n); 
        s:= summ(v); 
       writeln('Сумма= ',s); 
    end. 

Задания

  1. Даны действительные числа х1, у1, х2, у2, …,х10, у10. Найти периметр десятиугольника, вершины которого имеют соответственно координаты (х1, у1), (х2, у2), …, (х10, у10). (Определить процедуру вычисления расстояния между двумя точками, заданными своими координатами.)
  2. Даны действительные числа a, b, c, d, e - стороны пятиугольника. Найти площадь пятиугольника. (Определить процедуру вычисления площади треугольника по его сторонам.)
  3. Даны три символьные матрицы.
    a) ту матрицу, где есть хотя бы одна гласная - транспонировать;
    b) в той матрице, на главной диагонали которой все цифры, найти наименьшую и удалить соответствующую строку.
  4. Написать программу вычисления P по формуле: где n - заданное натуральное число.
  5. Описать функцию Stepen (x,n) от вещественного x и целого n, вычисляющую (посредством умножения) величину xn, и использовать ee для вычисления b=2.7k+(a+1)-5.
  6. Даны отрезки a,b,c и d. Для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. Определить процедуру Plo(x,y,z), печатающую площадь треугольника со сторонами x,y и z, если такой треугольник существует.
  7. Пусть процедура Socr(a,b,p,q) от целых параметров (b№0)приводит дробь к несократимому виду Описать данную процедуру и использовать ее для приведения дроби к несократимому виду
  8. Даны длины a,b и c сторон некоторого треугольника. Найти медианы треугольника, сторонами которого являются медианы исходного треугольника. Длина медианы, проведенной к стороне a, равна
  9. Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь.
  10. Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника. (При определении расстояний учесть, что площадь треугольника вычисляется и через три его стороны, и через основание и высоту.).
    Задачи на смекалку
  11. Три прямые на плоскости заданы уравнениями akx+bky=ck, k=1,2,3. Если эти прямые попарно пересекаются и образуют треугольник, тогда найти его площадь.
  12. Два натуральных числа называются "дружественными", если каждое из них равно сумме всех делителей другого, за исключением его самого (таковы, например, числа 220 и 284). Напечатать все пары "дружественных" чисел, не превосходящих заданного натурального числа.
  13. Дано четное число n > 2. Проверить для этого числа гипотезу Гольдбаха. Эта гипотеза (по сегодняшний день не опровергнутая и полностью не доказанная) заключается в том, что каждое четное n, большее двух, представляется в виде суммы двух простых чисел. Воспользоваться функцией распознавания простых чисел.
  14. Дано натуральное число n. Выяснить, является ли оно полным квадратом. Определить функцию, позволяющую распознавать полные квадраты.
  15. Дан массив A[1..50], элементы которого отличны от нуля. Расположить их в таком порядке, чтобы первыми были все положительные элементы, а затем - все отрицательные, причем порядок следования как положительных, так и отрицательных элементов должен сохраниться (при решении задачи новый массив не заводить!).
  16. Преобразовать массив S, "поворачивая" его вокруг центра на 90, 180, 270 градусов против часовой стрелки.
  17. Рассматривая массивы X, Y и Z как представление некоторых множеств из объектов типа индекс (X[k]=TRUE, если элемент k принадлежит множеству X, и X[k]=FALSE иначе, и т.п.), реализовать следующую операцию над этими массивами-множествами: переменной t присвоить значение TRUE, если множество X является подмножеством множества Y, и значение FALSE иначе.
  18. Элемент двухмерного массива называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером NxN найти максимум среди всех локальных минимумов.
  19. Составить функцию для нахождения точного значения суммы натуральных чисел, в десятичной записи которых более 20 знаков. Указание. Исходные данные и ответ представить в виде массивов цифр.
  20. Даны две строки символов. Символ будем называть общим, если он встречается и в первой, и во второй строке. Пусть K1 - число вхождений в первую строку общего символа, а K2 - во вторую. Минимальное из чисел K1, K2 будем называть числом общности. Вывести все общие символы с указанием для них числа общности.
Задачи повышенной сложности

  1. Рассмотрим произвольное натуральное число и найдем сумму его цифр, затем сумму цифр полученного числа и так далее, пока не получим однозначное число. Назовем это число цифровым корнем. Требуется написать программу, которая для заданного N (N<10100) находит его цифровой корень.
  2. Задано N натуральных чисел a1,a2,…,aN (1Ј N Ј 20), каждое из которых находится в интервале от 1 до 10000. Необходимо определить количество натуральных делителей произведения a1*a2*…*aN.
  3. Написать функцию поиска корней полинома степени n. Исходными параметрами будут числа a1, a2,…,an. Комплексные корни учитывать.
  4. Требуется написать программу, которая выводит в порядке возрастания все правильные несократимые дроби, знаменатели которых не превосходят N (2<=N<=500).
  5. На экране компьютера, работающего в операционной системе Windows, было открыто N (N <= 20) окон, положение каждого из которых однозначно определяется четверкой натуральных чисел - X1 Y1 X2 Y2 - координатами левого верхнего и правого нижнего угла окна. Очевидно, что окна, открытые позже, могут частично или полностью перекрывать открытые ранее. Окно считается видимым, если виден хотя бы один образующий его пиксел.
    Назад
    На главную
        Учебник по языку Pascal          Лабораторные работы по программированию          Справочник




    Нет комментариев.



    Оставить комментарий:
    Ваше Имя:
    Email:
    Антибот: *  
    Ваш комментарий: