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

  • Оборудование

  • ПРАКТИЧЕСКАЯ РАБОТА 10 ТЕМА: СОСТАВЛЕНИЕ ПРОГРАММ СО СТРУКТУРИРОВАННЫМ ТИПОМ ДАННЫХ «МНОЖЕСТВО» Цель работы

  • Debug/Add

  • Run/Go to cursor (F4)

  • Run/Program reset (Ctrl+F2)

  • ПРАКТИЧЕСКАЯ РАБОТА 11 ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР. ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ФУНКЦИЙ Цели работы

  • Главная программа … Подпрограмма 1 Подпрограмма n Begin … Вызов подпрограммы 1 … 49 Процедура и функция

  • Описание, определение и вызов процедур

  • В основной программе процедуры располагают перед разделом операторов (телом программы) основной программы . Формальные параметры

  • Описание, определение и вызов функции О

  • Передача параметров в подпрограммы

  • Передача параметров по значению

  • Приступая к решению задач этого раздела, следует вспомнить, что

  • ЗАДАНИЕ Напишите программу на языке программирования, используя процедуры и функции, по варианту, предложенному преподавателем. 53 Вариант 1

  • программирование. Сборник методических указаний по выполнению практических работ по учебной дисциплине основы алгоритмизации и программирования структурное программирование


    Скачать 0.68 Mb.
    НазваниеСборник методических указаний по выполнению практических работ по учебной дисциплине основы алгоритмизации и программирования структурное программирование
    Анкорпрограммирование
    Дата01.10.2021
    Размер0.68 Mb.
    Формат файлаpdf
    Имя файлаm_prog.pdf
    ТипСборник
    #239861
    страница4 из 6
    1   2   3   4   5   6
    ТЕМА: ИСПОЛЬЗОВАНИЕ СТАНДАРТНЫХ ФУНКЦИЙ И ПРОЦЕДУР
    ДЛЯ РАБОТЫ СО СТРОКАМИ
    Цель работы
    Целью работы является приобретение навыков алгоритмизации и программирования задач, оперирующих строковыми типами данных:

    ввод и вывод строковых данных;

    обработка строковых данных;

    использование стандартных процедур и функций языка Pascal для обработки строковых данных.
    Оборудование: ПК, ИСР Pascal ABC
    ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
    Обработка строковых данных является необходимым элементом программ, работающих с текстами. К таким программам относятся программы лингвистического анализа текстов, текстовые редакторы, программы, работающие в диалоговом (интерактивном) режиме, программы, содержащие текстовые пояснения результатов своей работы.
    Строка – последовательность символов (от 0 до 255), заключенная в апострофы. При составлении программ используются строковые константы и строковые переменные.
    1. Определение через описание типа в разделе описания типов.
    Формат
    TYPE
    <имя типа> = STRING [максимальная длина строки];
    VAR
    <идентификатор1, идентификатор2,…> : <имя типа>; где
    STRING – зарезервированное слова (строка);
    Максимальная длина строки – наибольшее допустимое количество символов переменной данного типа ( . 255).
    Например,
    TYPE
    FLO = STRING [130];
    FTK = STRING; {По умолчанию длина строки равна 255}
    VAR
    ST1 : FLO;
    ST2, ST3 : FTK;
    2. Определение непосредственно в разделе описания переменных
    Формат
    VAR
    ST4, ST5 : STRING [60];
    ST6, ST7 : STRING;
    ПРИМЕР ЗАДАЧИ
    Разработать программу, удаляющую из вводимой с клавиатуры строки пробелы между словами и записывающую в массив N длину (число символов) каждого слова. Длина текста – не более 80 символов. Число слов – не более 10. Наличие более одного символа ‘пробел’ подряд свидетельствует о конце строки.

    43
    Используемые в программе идентификаторы приведены в таблице 1.
    Таблица 1
    Листинг программы
    Program Prim1;
    Uses Crt;
    Label 4;
    VAR
    N: ARRAY [1..10] OF INTEGER;
    I, J, K, L: INTEGER;
    A: STRING [80];
    PR, OTVET:BYTE;
    BEGIN
    CLRSCR;
    REPEAT
    REPEAT
    WRITELN (' Введите через пробел');
    READLN (A);
    WRITELN('Исходная строка');
    WRITELN(A);
    WRITELN ('Работаем дальше? 1 -да,0 -нет');
    READLN (OTVET);
    UNTIL OTVET=1;
    K:=0;
    L:=0;
    PR:=0;
    FOR I:=1 TO length(a) DO
    IF (A[I]= ' ') THEN
    BEGIN
    L:=L+1;
    N[L]:=K;
    IF (A[I+1]=' ')THEN GOTO 4;
    FOR J:=i TO length(a) DO
    A[J]:= A[J+1];
    K:=1
    END
    ELSE begin
    K:=K+1;
    N[L+1]:= K-l; end;
    4:WRITELN ('Результирующая строка');

    44
    WRITELN (A);
    WRITELN ('№ слова число букв');
    FOR I:=1 TO L+1 DO
    WRITELN (' N[',I,'] =',N[I]:6);
    WRITELN('Обработать еще одну строку? 1 –да 0 -нет');
    READLN(PR);
    UNTIL PR=0
    END.
    Протокол работы программы
    Протокол работы программы показан на рис. 1.
    Рис. 1. Протокол работы программы
    ЗАДАНИЕ
    1.
    В заданном тексте удалить символ ‘,’ и подсчитать число удаленных символов.
    Предусмотреть возможность задания с клавиатуры удаляемого символа.
    2.
    В заданном тексте заменить словосочетание «свернутые обороты» на словосочетание
    «разделенные обороты» и подсчитать число произведенных замен.
    3.
    Из заданного предложения выбрать и вывести на экран только те символы, которые встречаются в нем только один раз (в том порядке, в каком они встречаются в тексте)
    4.
    В заданном предложении найти самое длинное и самое короткое слова и подсчитать, на сколько больше символов в самом длинном слове.
    5.
    Проверить, встречается ли в заданном предложении словосочетание «Остаток счета».
    6.
    Проверить, встречается ли в заданном предложении словосочетание «Сальдо счета».
    7.
    Для каждого слова заданного предложения указать долю согласных букв. Определить слово, в котором доля согласных максимальна.
    8.
    Из заданного текста выбрать цифры и записать в массив N, а буквы- в массив B. Все остальные символы записать в массив S.
    9.
    Удалить из заданного текста все пробелы, подсчитать длину получившегося текста и число удаленных пробелов.
    10.
    Для заданного предложения указать слова, в котором доля гласных букв максимальна.
    11.
    Отредактировать предложение, удаляя из него лишние пробелы, оставив только по одному пробелу между словами. Подсчитать число удаленных пробелов.

    45 12.
    Проверить, имеется ли в заданном тексте баланс открывающихся и закрывающихся круглых скобок.
    13.
    Дана последовательность из 10 слов. Вывести слова в обратном порядке.
    14.
    Дана последовательность из 10 слов. Вывести все слова, входящие в эту последовательность по одному разу.
    15.
    Дана последовательность из 8 слов. Вывести входящие в эту последовательность слова, расположив их по алфавиту.
    КОНТРОЛЬНЫЕ ВОПРОСЫ
    1.
    Что такое строка?
    2.
    Для чего в программировании используются строки?
    3.
    Как объявляется строка в программе?
    4.
    Как обозначается элемент строки?
    5.
    Назовите процедуры для обработки строк
    6.
    Назовите функции для обработки строк

    46
    ПРАКТИЧЕСКАЯ РАБОТА 10
    ТЕМА: СОСТАВЛЕНИЕ ПРОГРАММ СО СТРУКТУРИРОВАННЫМ
    ТИПОМ ДАННЫХ «МНОЖЕСТВО»
    Цель работы: организовывать программы и использованием структурированного типа данных
    «множество».
    Оборудование: ПК, ИСР Pascal ABC
    ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
    В Pascal отсутствуют средства ввода-вывода элементов множества, поэтому работу программы необходимо проверять, выполняя ее в пошаговом режиме и отслеживая изменения значений переменных в окне просмотра:
    1.
    С помощью команды Debug/Add watch задать переменные, значения которых необходимо наблюдать.
    2.
    Открыть окно наблюдаемых значений, выбрав команду Debug/Watch, а окно редактора уменьшить так, чтобы окна не перекрывали друг друга.
    3.
    Установить курсор на точку программы, до которой она выполняется правильно
    4.
    Запустить программу до этой точки, выбрав команду Run/Go to cursor (F4), а затем выполнять ее по шагам с помощью команды Run/Step over (F8), наблюдая в окне значения переменных.
    5.
    Для прерывания процесса отладки выбрать команду Run/Program reset (Ctrl+F2)
    Пример
    Program Dem_Mno;
    {Демонстрация операций над множествами} type
    Digits=set of 0..9; var d1, d2,d3,d: digits; begin d1:=[2, 4,6,8];
    {Заполнение множеств} d2:=[0..3,5]; d3:=[1,3,5,7,9]; d:=d1+d2;
    {Объединение множеств d1и d2} d:=d+d3;
    {Объединение множеств d и d3} d:=d-d2;
    {Разность множеств d и d2} d:=d*d1;
    {Пересечение множеств d и d1} end.
    ЗАДАНИЯ
    1.
    Опишите множество Pr(1..20) и поместите в него все простые числа в диапазоне 1..20.
    Составьте блок-схему.
    2.
    Опишите множество Alf(‘a’..’я’) и поместите в него гласные буквы. Составьте блок-схему.
    3.
    Опишите множества M1(1,2) и М2(2,1). Сравните множества М1 и М2 на равенство.
    Составьте блок-схему.

    47 4.
    Опишите множества М1(‘a’, ‘b’) M2(‘b’, ’a’, ‘c’). Сравните два этих множества на неравенство. Составьте блок-схему.
    5.
    Опишите множества M1(‘a’, ‘b’,’c’) M2(‘a’, ‘c’). Сравните два этих множества с использованием операции >=. Составьте блок-схему.
    6.
    Опишите множества M1(1, 2, 3) M2(1, 2, 3, 4). Сравните два этих множества с использованием операции <=. Составьте блок-схему.
    7.
    Опишите множества M1(1, 2) M2(5, 6). Получите результирующее множество М3=М1-М2.
    Определите содержится в М3 элемент 7. Составьте блок-схему.
    8.
    Опишите множества M1(1, 2, 3,4) M2(3, 4, 1). Получите результирующее множество М3=М1-
    М2. Определите содержится в М3 элемент 7. Составьте блок-схему.
    9.
    Опишите множества M1(1, 2, 3) M2(1, 4, 2, 5). Получите результирующее множество
    М3=М1*М2. Определите содержится в М3 элемент 2. Составьте блок-схему.
    10.
    Опишите множества M1(1, 2) M2(5, 6). Получите результирующее множество
    М3=М1+М2. Определите содержится в М3 элемент 2. Составьте блок-схему.
    КОНТРОЛЬНЫЕ ВОПРОСЫ
    1.
    Что такое множество?
    2.
    Как в Паскале организовывается работа с множеством?
    3.
    Перечислите операции сравнения множества
    4.
    Как описать множество в программе?
    5.
    С помощью какой функции определить содержится ли элемент в множестве?

    48
    ПРАКТИЧЕСКАЯ РАБОТА 11
    ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР.
    ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ФУНКЦИЙ
    Цели работы:
    -
    Научиться описывать процедуры и функции в программе;
    -
    Научиться задавать фактические и формальные параметры;
    -
    Научиться организовывать вызов процедуры и функции в программе
    Оборудование: ПК, ИСР Pascal ABC
    ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
    Подпрограмма — это последовательность операторов, которые определены и записаны только в одном месте программы, однако их можно вызвать для выполнения из одной или нескольких точек программы. Каждая подпрограмма определяется уникальным именем.
    Рис. 1 Структура программы с подпрограммами
    Различают два вида подпрограмм — это процедуры и функции.
    Главная программа

    Подпрограмма 1
    Подпрограмма n
    Begin

    Вызов подпрограммы
    1


    49
    Процедура и функция — это именованная последовательность описаний и операторов.
    При использовании процедур или функций Pascal — программа должна содержать текст процедуры или функции и обращение к процедуре или функции. Тексты процедур и функций помещаются в раздел описаний процедур и функций.
    Процедура — это независимая именованная часть программы, которую можно вызвать по имени для выполнения определѐнной в ней последовательности действий. Функция отличается от процедуры тем, что возвращает результат указанного при еѐ описании типа.
    Вызов функции может осуществляться из выражения, где имя функции используется в качестве операнда.
    Заголовок процедуры имеет вид: PROCEDURE <имя> [ (<сп. ф. п .>) ] ;
    Заголовок функции: FUNCTION <имя> [ (<сп.ф.п.>)] : <тип>;
    Здесь <имя> - имя подпрограммы (правильный идентификатор);
    <сп.ф.п.> - список формальных параметров;
    <тип> - тип возвращаемого функцией результата.
    Описание, определение и вызов процедур
    О
    писание процедуры производится в разделе описаний основной программы. Любая процедура оформляется аналогично программе, может содержать заголовок, разделы описаний и операторов. Синтаксис заголовка процедуры:
    Procedure (<Список формальных параметров>);
    {Раздел описаний}
    Begin …{Раздел операторов процедуры}End; где
    Procedure - служебное слово;
    Name - произвольный идентификатор, определяющий имя процедуры.
    Procedure MyProc (A,B,C: Real; var X1,X2: Real);
    Begin
    WriteLn('A=',A, ' B=', B, 'C=', C);
    X1:=A+B;
    X2:=A*B-C
    End;
    Разделы описаний процедуры подобно основной программе могут содержать разделы описания меток (Label), констант (Const), типов (Type), переменных (Var) и раздел процедур и функций. Раздел операторов помещается после служебного слова Begin и заканчивается служебным словом End, после End ставится " ; ".
    В основной программе процедуры располагают перед разделом операторов (телом
    программы) основной программы.
    Формальные параметры — это переменные, посредством которых передаются данные из места вызова процедуры в еѐ тело, либо из процедуры в места вызова. Список формальных параметров может отсутствовать, при этом символ " ; " ставится сразу за именем процедуры и данные из места вызова процедуры в еѐ тело не передаются.
    Для вызова процедуры на исполнение к ней необходимо обратится.
    Вызов процедуры производится указанием имени процедуры и списком фактических параметров:
    Name(<Список фактических параметров>);
    MyProc(K, L+M, 12, Y1, Y2);
    Выполнение оператора вызова процедуры состоит в том, что все формальные параметры заменяются соответствующими фактическими. После выполнения процедуры

    50 происходит передача управления в основную программу, т.е. начинает выполняться оператор, следующий за оператором вызова процедуры.
    Фактические параметры — это переменные (или значения заданные явно), которые передаются в процедуры на место формальных параметров. Если в вызываемой процедуре отсутствует список формальных параметров, то список фактических параметров тоже отсутствует.
    Количество фактических параметров должно соответствовать количеству формальных параметров; соответствующие фактические и формальные параметры должны совпадать по порядку записи и по типу данных.
    Описание, определение и вызов функции
    О
    формляется функция аналогично процедуре. Отличительной особенностью функции является то, что она возвращает только один результат выполнения. Этот результат обозначается именем функции и возвращается (передается) в основную программу (место вызова). Функция состоит из заголовка, раздела описаний и раздела операторов.
    Function (<Список формальных параметров>):;
    … {Раздел описаний}
    Begin
    …{Раздел операторов процедуры}
    Name:=<выражение соответствующего типа;

    End; где Function - служебное слово; Name - произвольный идентификатор, определяющий имя функции. В отличии от процедур в разделе операторов тела функции обязательно должен быть хотя бы один оператор присвоения имени функции выражения или значения соответствующего типа. После работы функции результат присваивается имени функции.
    Таким образом, алгоритм можно оформить в виде функции в том случае, если в качестве результата получается одно единственное значение. Для вызова функции достаточно указать ее имя (с фактическими параметрами) в любом выражении, где тип результата функции будет приемлем. Имя функции можно использовать в арифметических выражениях и других командах.
    Пример 1. Разработать функцию, определяющую по двум катетам гипотенузу прямоугольного треугольника.
    Function Gepoten(a,b:real):real;
    Begin
    Gepoten:=Sqrt(Sqr(a)+Sqr(b))
    End;
    Вызов функции из основной программы может выглядеть следующим образом: z:=Gepoten(x, y); {z присваивается значение гипотенузы} или WriteLn('Значение гипотенузы', Gepoten(x, y));
    Передача параметров в подпрограммы
    Передача параметров в подпрограмму может осуществляться несколькими способами.
    Параметры процедур и функций могут быть следующих видов: параметры-значения, параметры-переменные, параметры-константы и не типизированные параметры.
    Группа параметров без предшествующего ключевого слова является списком
    параметров-значений
    Группа параметров, перед которыми следует ключевое слово Const и за которыми следует тип, является списком параметров-констант.

    51
    Группа параметров, перед которыми стоит ключевое слово Var и за которыми следует тип, является списком типизированных параметров-переменных.
    Группа параметров, перед которыми стоит ключевое слово Var или Const за которыми не следует тип, является списком не типизированных параметров-переменных.
    Передача параметров по значению
    При передаче параметров по значению в формальный параметр передаѐтся копия значения соответствующего фактического параметра. Примерами параметров-значений служат параметры A, B и C в процедуре с заголовком MyProc. В этом случае фактическим параметром, соответствующим A, либо B, либо C, может быть любое выражение или переменная типа Real.
    Для параметров-значений компилятор при вызове процедуры выделяет место в сегменте стека
    (специальная область оперативной памяти) для каждого формального параметра, вычисляет значение фактического параметра и передаѐт его в ячейку, соответствующую формальному параметру, выполняет тело процедуры. После завершения работы процедуры, формальные параметры уничтожаются, а фактические остаются неизменными (по значению).
    Формальный параметр-значение обрабатывается, как локальная по отношению к процедуре или функции переменная, за исключением того, что он получает свое начальное значение из соответствующего фактического параметра при активизации процедуры или функции.
    Соответствующее фактическое значение параметра-значения должно быть выражением и его значение не должно иметь файловый тип или какой-либо структурный тип, содержащий в себе файловый тип. Фактический параметр должен иметь тип, совместимый по присваиванию с типом формального параметра-значения. Если параметр имеет строковый тип, то формальный параметр будет иметь атрибут размера, равный 255.
    Приступая к решению задач этого раздела, следует вспомнить, что:

    для передачи информации в процедуру следует использовать параметры, а не глобальные переменные, т. е. объявленные вне процедуры;

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

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

    если аргумент процедуры применяется для возврата результата в программу, вызвавшую эту процедуру, то перед именем аргумента нужно поставить слово var.
    Пример 1
    Программа вычисления степени по вводимым пользователем значением числа и показателя степени. program Func; uses crt; var a,z,r: integer; m:integer;
    {Функция вычисления степени, N, X – формальные параметры} function Stepen(n:integer; x:integer):integer; var i:integer; y: integer;

    52 begin y:=1; for I:=1 to n do
    {Цикл вычисления n-ой степени числа х} y:=y*x; stepen:=y
    {Присваивание функции результата вычисления степени} end;
    {Конец функции}
    Begin clrscr; writeln('vvedite znachenie chisla a i pokazatel stepeni m'); readln(a); readln(m); z:=Stepen(m,a);
    Writeln('z=', z:3); end.
    Пример № 2
    Даны два натуральных числа a и b. Требуется определить наибольший общий делитель трех величин. Определить наибольший общий делитель трех величин a+b, |a-b|, a*b
    Идея решения состоит в следующем математическом факте: НОД(х, y, z) = НОД(НОД(x,y),z)
    Program NOD;
    Uses crt; var a,b,c: integer;
    Procedure Evklid (M,N: integer; Var k: integer); {m,n – формальные параметры (параметры- аргументы, к – параметр-результат)}
    Begin while m<>n Do
    If m>n then m:=m-n else n:=n-m; k:=m
    End;
    Begin clrscr; write('a='); readln(a);
    Write('b='); readln(b);
    Evklid(a+b, ABC(a-b), a*b);
    Evklid(с, a*b, c);
    Writeln('NOD=',c)
    End.
    ЗАДАНИЕ
    Напишите программу на языке программирования, используя процедуры и функции, по варианту, предложенному преподавателем.

    53
    Вариант 1
    Дана целочисленная квадратная матрица 4х4. Определить:
    1)
    произведение элементов во второй строке (оформить в виде функции)
    2)
    сумму элементов главной диагонали (оформить в виде процедуры)
    3)
    составить блок-схемы
    Вариант 2
    Дана целочисленная матрица размером 4х3. Определить:
    1)
    Количество нулевых элементов в 4 строке. (Оформить в виде функции).
    2)
    Максимальный элемент матрицы (оформить в виде процедуры)
    3)
    составить блок-схемы
    Вариант 3
    Дана целочисленная прямоугольная матрица. Определить:
    1)
    Сумму положительных элементов матрицы (оформить в виде функции)
    2)
    Минимальный элемент матрицы (оформить в виде процедуры)
    3) составить блок-схемы
    Вариант 4
    Дана целочисленная квадратная матрица 3х3. Определить:
    1)
    количество отрицательных элементов матрицы (оформить в виде функции)
    2)
    количество положительных элементов в 3 строке (оформить в виде процедуры)
    3) составить блок-схемы
    Вариант 5
    1. Сформировать одномерный массив В с помощью генератора случайных чисел в интервале от
    0 до 50 (оформить в виде процедуры).
    2. Подсчитать для сформированного массива В сумму положительных элементов (оформить в виде функции).
    3. Составить блок-схемы
    Вариант 6
    1. Сформировать многомерный массив размерностью 3х3, ввод элементов осуществлять с клавиатуры (оформить в виде процедуры).
    2. Подсчитать для сформированного массива произведение элементов главной диагонали
    (оформить в виде функции).
    3. Составить блок-схемы
    Вариант 7

    54 1.
    Сформировать многомерный массив Т размерностью 4х2 с помощью генератора случайных чисел в интервале от 0 до 100 (оформить в виде процедуры)
    2.
    Посчитать для сформированного массива Т сумму элементов первой строки (оформить в виде функции)
    3.
    Составить блок-схемы
    Вариант 8
    1.
    Сформировать одномерный массив D, состоящий из 10 элементов с помощью генератора случайных чисел в интервале от 0 до 200 (оформить в виде процедуры)
    2.
    Подсчитать для сформированного массива D среднее арифметическое (оформить в виде функции)
    3.
    Составить блок-схемы
    Вариант 9
    Дана целочисленная квадратная матрица 4х4. Определить:
    1)
    произведение положительных элементов матрицы (оформить в виде функции)
    2)
    минимальный элемент во второй строке (оформить в виде процедуры)
    3)
    составить блок-схемы
    Вариант 10
    Дана целочисленная прямоугольная матрица. Определить:
    1)
    сумму отрицательных элементов (оформить в виде функции)
    2)
    максимальный элемент в первой строке
    3)
    составить блок-схемы
    КОНТРОЛЬНЫЕ ВОПРОСЫ
    1.
    Что такое подпрограмма?
    2.
    Что такое процедура?
    3.
    Что такое функция?
    4.
    Что такое фактический параметр?
    5.
    Что такое формальный параметр?
    6.
    Как фактические параметры должны соответствовать формальным параметрам?
    7.
    Чем описание процедуры отличается от описания функции?
    8.
    Как осуществляется вызов процедуры?
    9.
    Как осуществляется вызов функции?

    55
    ПРАКТИЧЕСКАЯ РАБОТА 12
    1   2   3   4   5   6


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