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

  • Цель работы

  • Краткие теоретические сведения

  • 1. Операторы цикла со счетчиком

  • 2. Оператор цикла WHILE с предусловием (предпроверкой условия)

  • Задание для подготовки к работе

  • Фактические параметры

  • Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Варианты заданий

  • Delete(Str,n,m)

  • Length(Str)

  • Практическая работа_ Реализация алгоритма линейной струкруры на. Практическая работа Реализация алгоритма линейной структуры


    Скачать 195.04 Kb.
    НазваниеПрактическая работа Реализация алгоритма линейной структуры
    Дата21.02.2023
    Размер195.04 Kb.
    Формат файлаdocx
    Имя файлаПрактическая работа_ Реализация алгоритма линейной струкруры на .docx
    ТипПрактическая работа
    #949517
    страница3 из 4
    1   2   3   4

    Лабораторная работа №3

    Программирование алгоритмов циклической структуры



    Цель работы: получить навыки разработки алгоритмов циклической структуры, их кодирования, отладки и тестирования программы.
    Задание для подготовки к работе

    1. Изучить операторы языка Турбо Паскаль для организации циклов в программах.

    2. Разработать алгоритм для решения задачи соответствующего варианта.

    3. Подобрать тестовые данные.


    Задание к работе

    Написать программу, отладить её, протестировать. Распечатать текст программы и результаты её работы на тестовых данных.
    Содержание отчёта

    1. Условие задачи.

    2. Описание алгоритма.

    3. Набор текстовых данных с обоснованием их выбора.

    4. Текст программы.

    5. Описание и анализ ошибок, выявленных при отладке программы.


    Краткие теоретические сведения

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

    1. Операторы цикла со счетчиком For … to … do и For … downto … do имеют следующую структуру

    F or <параметр>:=<нач.знач.> to <кон.знач.> do <оператор>;

    Рассмотрим программу, осуществляющую ввод с клавиатуры произвольного целого числа N и вычисление суммы всех целых чисел от 1до N

    p
    y

    конец
    rogram Sum


    Var

    i, n, s : integer ;

    Begin

    Write ('N =');

    Readln (n);

    S :=0;

    For i :=1 to n do

    s:=s+i ;

    writeln('сумма = ',s)

    end.

    Отметим два обстоятельства. Во-первых, условие, управляющее работой оператора FOR, проверяется перед выполнением оператора: если условие не выполняется в самом начале работы оператора FOR, исполняемый оператор не будет выполнении ни разу. Другое обстоятельство - шаг наращивания цикла строго постоянен и равен (+l). Существует другая форма оператора: Существует другая форма оператора:

    For <параметр>:=<нач.знач.> downto <кон.знач.> do <оператор>;

    Замена зарезервированного слова ТО на DOWNTO означает, что шаг наращивания параметра цикла равен (-1).

    Приведенный выше пример можно модифицировать так, чтобы сделать его пригодным для подсчета любых сумм - положительных и отрицательных:

    Var

    I, n, s : integer ;

    Begin

    Write ('N =');

    Readln (n);
    s :=0;

    if n>=0

    then

    for i :=1 to n do

    s:=s+i

    else

    for i:=-1 downto n do

    s:=s+i;

    writeln('сумма = ',s)

    end.

    2. Оператор цикла WHILE с предусловием (предпроверкой условия) имеет вид:

    while <условие> do <оператор>

    WHILE, DO - зарезервированные слова (пока (выполняется условие) делать)

    <условие> - выражение логического типа

    <оператор> - произвольный оператор Турбо Паскаля

    Порядок работы оператора WHILE

    Условие выполняется?




    нет

    да



    Оператор

    Выход


    3. Оператор цикла REPEAT... UNTIL с постусловием (постпроверкой условия)

    Структура:

    R epeat

    <Оператор1>;

    <Оператор2>;

    . . .

    <ОператорN>

    UNTIL <условие>;

    где

    REPEAT,UNTIL - зарезервированные слова (повторять до тех пор, пока)

    <ОПЕРАТОР1>,<ОПЕРАТОР2>,...<ОПЕРАТОРN> - произвольные операторы Турбо Паскаля

    <УСЛОВИЕ> - выражение логического типа.

    порядок работы оператора REPEAT представлен на бллок-схеме:

    Составим программу, которая вводит символ и выводит на экран его код. Для завершения работы программы нужно дважды нажать Enter.

    Решение.

    program char_code;

    var ch:char;

    const cr=13;

    begin

    repeat

    writeln(‘введите символ’);

    readln(ch);

    write(ch,’=’,ord(ch));

    until ord(ch)=cr;

    end.

    Оператор цикла repeat повторяет команды тела цикла до тех пор, пока условие, записанное после слова until не верно.
    Варианты заданий

    1/21. Вводится последовательность из n целых чисел. Найти сумму всех отрицательных чисел.

    2/22. Вводится последовательность из n целых чисел. Найти сколько в ней нулей.

    3/23. Вводится последовательность из n целых чисел. Найти наибольшее число.

    4/24. Вводится последовательность из n целых чисел. Найти наибольшее из всех отрицательных чисел.

    5/25. Вводится последовательность из n целых чисел, 0- конец последовательности, найти 2 наименьших числа.

    6/26. Вводится последовательность чисел, 0- конец последовательности, определить, содержит ли последовательность хотя бы 2 равных числа.

    7/27. Вводится последовательность чисел, 0- конец последовательности, определить, сколько раз последовательность меняет знак.

    8/28. Вводится последовательность из N произвольных чисел, определить, сколько раз последовательность меняет знак.

    9/29. Вводится последовательность ненулевых чисел, 0- конец последовательности, определить, является ли последовательность возрастающей.

    10/30. Вводится последовательность ненулевых чисел, 0- конец последовательности, определить, является ли последовательность знакопеременной.

    11/31. На выставке собак, где были представлены разные породы, отбор животных проводится по возрасту и высоте холки. Определить, сколько было боксеров 2-3-летнего возраста с высотой холки не менее 55 сантиметров.

    12/32. В очереди за билетами стоят мужчины и женщины. Какое количество мужчин стоит до первой женщины.

    13/33. Вводится последовательность ненулевых чисел, 0- конец последовательности, посчитать, сколько в ней отрицательных чисел, и сумму положительных чисел.

    14/34. Дана последовательность из n целых чисел, определить является ли она убывающей.

    15/35. Дана последовательность из n целых чисел, определить сохраняет ли она знак.

    16/36. Вводится последовательность ненулевых чисел, 0- конец последовательности, определить, сколько в ней пар равных соседних элементов.

    17/37. Дана последовательность из n целых чисел, определить сумму 3 наибольших элементов.

    18/38. Установить, чётным или нечётным является число цифр в записи данного натурального числа.

    19/39. Дано целое число N , удовлетворяющее условию 0<|N|<2*109 . Найти сумму цифр числа N.

    20/40. Дано целое число N , удовлетворяющее условию 0<|N|<2*109 . Проверить, входит ли в запись числа N цифра 5 ровно 2 раза.
    Контрольные вопросы

        1. Классифицируйте операторы циклов в Паскале.

        2. Расскажите о каждом из структурных операторов Паскаля, реализующих цикл.

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

        4. Перечислите отличие циклов while от repeat.

        5. Какой тип может иметь параметр цикла FOR , начальное и конечное выражение?

        6. Какие действия с параметром цикла FOR недопустимы в теле цикла?

        7. Какое значение имеет параметр цикла FOR после окончания работы цикла?






    Лабораторная работа №4

    Работа с одномерными массивами


    Цель работы: получить навыки работы с массивами, их ввода и вывода, закрепление навыков организации программ циклической структуры.
    Задание для подготовки к работе

    1. Изучить способы описания и использования массивов, алгоритмы сортировки массивов и алгоритмы поиска элемента в массивах.

    2. Разработать алгоритм для решения задачи соответствующего варианта.

    3. Подобрать тестовые данные.

    Задание к работе

    Написать программу, отладить её, протестировать. Распечатать текст программы и результаты её работы на тестовых данных.
    Содержание отчёта

    1. Условие задачи.

    2. Описание алгоритма.

    3. Набор тестовых данных с обоснованием их выбора.

    4. Текст программы.

    5. Описание и анализ ошибок, выявленных при отладке программы.


    Краткие теоретические сведения

    Массивэто упорядоченная последовательность величин, обозначаемая одним именем. Упорядоченность заключается в том, что элементы массива располагаются в последовательных ячейках памяти.

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

    Описывать массивы можно двумя способами:

    1. Type <имя типа>= array[<номер 1 эл-та>..<номер последнего эл-та>] of <тип элементов>;

    Var <имя массива>:<имя типа>;
    2. Var <имя массива>:array [<номер 1 эл-та>..<номер последнего эл-та>] of <тип элементов>;
    Пример. Описать массив из 10 целых чисел, назвать его а.

    Решение.

    1) Type Myarray=array[1..10]of integer;

    Var a:MyArray;
    2) Var a:array[1..10]of integer;


    Чтобы получить доступ к нужному элементу массива, нужно указать имя массива и индекс (номер) элемента массива.

    Пример. Пусть описан массив из 5 целых чисел:

    Var A:array [1..5] of integer;

    И пусть первоначально все элементы массива равны 0, а третьему элементу массива мы хотим присвоить значение 9. Оператор присваивания будет иметь вид:

    A[3]:=9;

    Для большей наглядности представим графически набор ячеек памяти компьютера, которые выделяются для хранения этого массива:

    Рисунок 3.2.1.



    Здесь I - порядковый номер элемента в массиве.
    Работа над элементами массива осуществляется в цикле.

    Пример. Ввод элементов массива

    var i:integer;

    Begin

    for i:=1 to n do

    Begin

    Write(Name,'[',i,']=');

    ReadLn(a[i]);

    End;
    Пример. Составим программу заполнения массива случайными числами.

    Program wwod;

    Const n=10;

    Var a:array[1..n]of integer;

    Begin

    Randomize;

    for i:=1 to n do

    a[i]:=Random(121);

    End.

    Варианты заданий


    1/21. Дан массив чисел. Найти значение max элемента. Если таких элементов несколько, то определить, сколько их.

    2/22. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.

    3/23. Дан массив чисел. Найти max элемент, поставить его первым. Вывести на печать исходный и полученный массивы.

    4/24. Дан массив чисел. Расставить их по убыванию. Вывести на печать исходный и полученный массивы.

    5/25. Имеются данные об успеваемости не более чем 24 учебных групп (в процентах). Определить, на сколько нужно повысить успеваемость в самой отстающей группе, чтобы достичь среднего уровня успеваемости.

    6/26. Известны данные о среднемесячной температуре за год. Определить, какая была самая высокая температура летом и самая низкая зимой.

    7/27. В одномерном массиве произвольных чисел вычислить произведение отрицательных элементов, имеющих отрицательные индексы.

    8/28. В одномерном массиве произвольных чисел найти max элемент из отрицательных.

    9/29. В одномерном массиве из 20 чисел определить сумму и количество элементов, которые меньше 50 и индексы, которых кратны 4.

    10/30. Определить сумму чётных элементов массива.

    11/31. Определить сумму элементов массива, стоящих на нечётных местах.

    12/32. Определить сумму элементов массива. А, удовлетворяющих условию A[I]>d.

    13/33. Определить произведение элементов массива, стоящих на нечётных местах.

    14/34. Определить произведение массива. А, удовлетворяющих условию d1<A[I]<d2.

    15/35. Найти первый отрицательный элемент в массиве.

    16/36. Найти первый элемент в массиве больший заданного значения.

    17/37. Найти максимальный и минимальный элемент в массиве.

    18/38. Определить какой элемент раньше встречается в массиве: максимальный или минимальный.

    19/39. Найти максимальный элемент в массиве, стоящий на чётном месте.

    20/40. Найти последний отрицательный элемент в массиве.




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

    1. Как описываются массивы в Паскале?

    2. Какой тип может быть базовым типом массива и типом индекса?

    3. Как осуществляется ввод и вывод массивов?

    4. Какие действия определены над массивами как единым объектами?

    5. Где можно использовать переменные с индексами?

    6. Дайте подробное описание типа «массив».

    7. Назовите известные вам способы сортировки одномерных массивов?

    8. Какими способами может, осуществлен поиск элемента в упорядоченном и не упорядоченном одномерном массиве?


    Лабораторная работа №5

    Работа с двумерными массивами



    Цель работы: Получение навыков работы с двумерными массивами. Закрепление навыков построения циклических алгоритмов и работы с одномерными массивами.
    Задание для подготовки к работе

    1. Изучить способы описания и использования двумерных массивов; назначение подпрограмм; описание и обращение к подпрограммам. Основные алгоритмы для работы с матрицами.

    2. Разработать алгоритм для решения задачи соответствующего варианта.

    3. Подобрать тестовые данные.

    Задание к работе

    Написать программу, отладить её, протестировать. Распечатать текст программы и результаты её работы на тестовых данных.
    Содержание отчёта

    1. Условие задачи.

    2. Описание алгоритма.

    3. Набор тестовых данных с обоснованием их выбора.

    4. Текст программы.

    5. Описание и анализ ошибок, выявленных при отладке программы.


    Краткие теоретические сведения

    Исходные данные для решения многих задач удобно представляются в табличной форме. Например, результат производственной деятельности сборочных заводов можно представить в виде следующей таблицы:



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

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

    Каждый двумерный массив определяется именем, числом строк и столбцов.

    Описание двумерного массива в Паскале рекомендуется производить так:

    Type

    Matrix=array[Нижняя граница индекса1..Верхняя граница индекса1,

    Нижняя граница индекса2..Верхняя граница индекса2]

    of < тип элементов >;

    Var < Имя массива> :Matrix;

    Приведенная выше таблица мажет быть представлена в виде двухмерного массива так:

    Type

    Matr=array[1..4,1..5]of integer;

    Var product:Matr;
    Чтобы использовать элемент массива нужно указать имя массива и в квадратных скобках номер строки, затем номер столбца где этот элемент находится.

    Так элемент product[2,3] содержит число Продукта3, которое произвел завод2.

    Значение элементов двумерного массива выводятся на экран и вводятся с клавиатуры, как правило, по строкам, т.е. сначала все элементы первой строки, затем второй и т.д.

    Ввод матрицы product будет выглядеть так:

    for i:=1 to 4 do

    for j:=1 to 5 do

    begin

    write('product[',i,',',j,']=');

    readln(product[i,j]);

    end;

    Вывод элементов матрицы product будет выглядеть так:

    for i:=1 to 4 do

    begin

    for j:=1 to 5 do

    write(product[i,j]:6);

    writeln;

    end;
    Пример: Нахождение суммы элементов заданного столбца и нахождение произведения всех элементов матрицы.

    Здесь S1 - сумма элементов столбца с номером К; Р - произведение всех элементов матрицы А

    S1:=0;

    For i:=1 to m do

    S1:=s1+a[i,k];

    P:=1;

    For i:=1 to m do

    For j:=1 to n do

    P:=p*a[i,j];
    Пример: Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.

    Здесь Max - максимальный по модулю элемент матрицы А.

    max:=abs(a[1,1]);

    For i:=1 to m do

    For j:=1 to n do

    If max < abs(a[i,j]) then max:=a[i,j];

    For i:=1 to m do

    For j:=1 to n do

    A[i,j]:=a[i,j]/max;
    Варианты заданий

    1/21. Найти последний отрицательный элемент в массиве.

    2/22. Найти максимальный элемент в массиве, стоящий на чётном месте.

    3/23. Определить какой элемент раньше встречается в массиве: максимальный или минимальный.

    4/24. Найти максимальный и минимальный элемент в массиве.

    5/25. Найти первый элемент в массиве больший заданного значения.

    6/26. Найти первый отрицательный элемент в массиве.

    7/27. Определить произведение массива. А, удовлетворяющих условию d1<A[I]<d2.

    8/28. Определить произведение элементов массива, стоящих на нечётных местах.

    9/29. Определить сумму элементов массива. А, удовлетворяющих условию A[I]>d.

    10/30. Определить сумму элементов массива, стоящих на нечётных местах.

    11/31. Дан массив чисел. Найти значение max элемента. Если таких элементов несколько, то определить, сколько их.

    12/32. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов.

    13/33. Дан массив чисел. Найти max элемент, поставить его первым. Вывести на печать исходный и полученный массивы.

    14/34. Дан массив чисел. Расставить их по убыванию. Вывести на печать исходный и полученный массивы.

    15/35. Имеются данные об успеваемости не более чем 24 учебных групп (в процентах). Определить, на сколько нужно повысить успеваемость в самой отстающей группе, чтобы достичь среднего уровня успеваемости.

    16/36. Известны данные о среднемесячной температуре за год. Определить, какая была самая высокая температура летом и самая низкая зимой.

    17/37. В одномерном массиве произвольных чисел вычислить произведение отрицательных элементов, имеющих отрицательные индексы.

    18/38. В одномерном массиве произвольных чисел найти max элемент из отрицательных.

    19/39. В одномерном массиве из 20 чисел определить сумму и количество элементов, которые меньше 50 и индексы, которых кратны 4.

    20/40. Определить сумму чётных элементов массива.
    Контрольные вопросы

    1. Как описываются двумерные массивы в Паскале?

    1. Как осуществляется ввод и вывод двумерных массивов?

    2. Как обратиться к элементу двумерного массива?

    3. Приведите пример описания двумерного массива.

    4. Написать алгоритм: в исходной матрице поменять местами заданные столбцы, с номерами j1 и j2.






    Лабораторная работа №6

    Использование процедур и функций при работе с двумерными массивами



    Цель работы: получение навыков работы с процедурами и функциями, закрепление навыков работы с двумерными массивами
    Задание для подготовки к работе

    1. Изучить способы описания и использования многомерных массивов; назначение подпрограмм; описание и обращение к подпрограммам.

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

    3. Для каждой подзадачи описать спецификацию и блок-схему алгоритма. Спецификация содержит: заголовок программы, назначение, входные и выходные параметры.

    4. Подобрать наборы тестовых данных.


    Задание к работе

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

    1. Описание используемых структур данных.

    2. Описание подпрограмм: спецификация, блок-схема.

    3. Блок схема основной задачи.

    4. Наборы тестовых данных с обоснованием их выбора.

    5. Текст программы.

    6. Описание и анализ ошибок, выявленных при отладке программы.


    Краткие теоретические сведения

    В языке программирования Pascal определены два вида подпрограмм - процедуры и функции.

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

    Структура процедур и функций аналогична структуре полной программы на языке Паскаль:

    - Заголовок подпрограммы - задает имя подпрограммы и список формальных параметров с указанием их типов.

    - Раздел описаний.

    - Тело подпрограммы.

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

    Определение функции, создаваемой программистом, в общем виде выглядит так:
    Function имя (список формальных параметров): тип результата;

    var {раздел описания внутренних переменных функции}

    begin {раздел команд функции}

    имя := выражение;

    end;

    Пример функции вычисления факториала:
    Function factor(n:integer): integer;

    var

    i, f: integer;

    begin

    f:=1;

    for i:=2 to n do f:=f*i;

    factor:=f;

    end;

    Пример. Вычислить значение

    Program prf;

    var

    a,y : real;

    i,b : integer;

    {функция программиста}

    function factor (n:integer): integer;

    var

    i,f: integer;

    begin

    f:=1;

    for i:=2 to n do f:=f*i;

    factor:=f;

    end;

    {основная программа}

    begin

    writeln ('введите значения a и b');

    readln (a,b);

    if a<=b

    then y:=a*factor(b)

    else

    y:=b+factor(a);

    writeln ('ответ y=', y:6:0);

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

    Для обмена информацией между процедурой и основной программой используются один или несколько параметров.

    Общий вид процедуры:

    Procedure имя_проц(список формальных параметров);

    var

    {раздел описания внутренних переменных процедуры}

    begin

    {команды процедуры}

    end;
    Найти сумму элементов массива, состоящего из 12 целых чисел.

    Const n=12;

    type mas=array[1..n]of integer;

    Var a:mas; i,s:integer;

    Procedure wwod(var a:mas; Name:char);

    var i:integer;

    Begin

    for i:=1 to n do

    Begin

    Write(Name,'[',i,']=');

    ReadLn(a[i]);

    End;

    End;

    Begin

    wwod(a,'a');

    For i:=1 to n do

    s:=s+a[i];

    Write('s=',s:4);

    Readln;

    End.

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

    Фактические параметры -параметры, которые передаются подпрограмме при обращении к ней.

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

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

    1/21. Дана матрица N×M, состоящая из натуральных чисел. Найти в ней наименьший элемент и определить его местоположение. Если таких элементов несколько, то вывести на экран местоположение каждого из них.

    2/22. Дана матрица N×M, состоящая из натуральных чисел. Найти в строках самые правые наименьшие элементы и определить их местоположение.

    3/23. Дана матрица N×M, состоящая из натуральных чисел. Выбрать в строках самые левые наименьшие элементы и поставит их в первый столбец.

    4/24. Дана матрица N×M, состоящая из натуральных чисел. Расставить строки таким образом, чтобы элементы в первом столбце были упорядочены по убыванию.

    5/25. Найти столбец матрицы, сумма элементов которого максимальна.

    6/26. Найти первую строку матрицы (строку с наименьшим номером), произведение элементов которой отрицательно.

    7/27. Найти последнюю строку матрицы (строку с наибольшим номером) произведение элементов которой положительно.

    8/28. Найти первый столбец матрицы (столбец с наименьшим номером), произведение элементов которого отрицательно.

    9/29. Найти строку матрицы, содержащую наибольшее число отрицательных элементов.

    10/30. Найти столбец матрицы, содержащий наименьшее число отрицательных элементов.

    11/31. Найти строку матрицы, содержащую наименьшее число нулевых элементов.

    12/32. Найти столбец матрицы, содержащий наименьшее число нулевых элементов.

    13/33. Найти сумму элементов квадратной матрицы, расположенных выше главной диагонали.

    14/34. Найти сумму элементов квадратной матрицы, расположенных ниже главной диагонали.

    15/35. Найти наибольший элемент, расположенный на главной диагонали квадратной матрицы, меньше заданного значения.

    16/36. Найти наибольший элемент, расположенный на побочной диагонали квадратной матрицы, меньше заданного значения.

    17/37. Найти наименьший элемент, расположенный на главной диагонали квадратной матрицы.

    18/38. Найти наименьший элемент, расположенный на побочной диагонали квадратной матрицы.

    19/39. Поменять местами заданные строки матрицы.

    20/40. Поменять местами заданные столбцы матрицы.
    Контрольные вопросы

    1. Какими средствами Паскаля обеспечивается блочная структура программ?

    2. Чем подпрограммы-функции отличаются от подпрограмм-процедур?

    3. Для чего используются подпрограммы.

    4. В каких случаях для решения задачи следует использовать функции, а в каких – процедуры?

    5. Чем отличается обращение к функции от обращения к процедуре?

    6. Что такое область видимости переменных?

    7. Чем локальные переменные отличаются от глобальных?


























    Лабораторная работа №7

    Работа со строками


    Цель работы: Изучить стандартные процедуры и функции языка Turbo Pascal работы со строками. Получение навыков работы со строками и функциями.
    Задание для подготовки к работе

    1. Изучить строковый тип, организацию работы со строками; назначение и описание процедур и функций работы со строками.

    2. Разработать алгоритм для решения задачи соответствующего варианта.

    3. Подобрать тестовые данные.


    Задание к работе

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


    1. Описание используемых структур данных.

    2. Условие задачи.

    3. Описание алгоритма.

    4. Набор тестовых данных с обоснованием их выбора.

    5. Текст программы.

    6. Описание и анализ ошибок, выявленных при отладке программы.


    Краткие теоретические сведения

    Строка это последовательность символов определённой длины.

    Для описания переменных этого типа используется зарезервированное слово string.

    Переменные типа string могут быть объявлены следующим образом:

    Var Strl:String[31];

    Str2:String;

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

    Процедура Delete(Str,n,m)- удаляет из строки Str m символов, начиная с n-го.
    Процедура Insert(Str1,Str2,n) - вставка строки Str1 в строку Str2 начиная с n-го символа, при этом Str1 не изменяется.
    Процедура Copy(Str,n,m) - копирует m символов строки Str, начиная с n-го, при этом исходная строка не меняется. Результат этой функции можно присваивать другой строке или сразу выводить на экран.

    Функция Length(Str) - результат этой функции целое число, равное количеству символов в строке Str.
    Функция Pos(Str1,Str2) - определяеет позицию подстроки в строке. Результатом этой функции будет целое число, и оно определяет номер первого элемента, с которого начинается первое вхождение подстроки Str1 в строку Str2. Если такой подстроки нет, то значение функции равно 0.
    Функция Str(N,Str1) - переводит числовое значение N в строковое и присваивает результат строке Str1, причём можно переводить как целые числа, так и вещественные, и есть возможность следить за формой числа, т.е. вполне закономерно следующее обращение к функции Str(f:6:3,Str1).
    Функция Val(Str,N,K) - выполняет обратное преобразование, переводит строковое значение в числовое, если строка Str действительно является записью числа (целого или вещественного), то значение k=0, а N - число, иначе K будет равно номеру символа, в котором встречается первое нарушение записи числа N.
    Пример.

    Сколько раз в данной строке встречается символ 'а'.

    Решение:

    Function KolSim(st:String):byte;

    var i,k:Byte;

    Begin

    k:=0; {кол-во символов 'a' в данной строке}

    For i:=1 to Length(st) do

    If st[i]='a' then Inc(k);

    KolSim:=k;

    End;

    Пример.

    Если длина строки нечётное число, то удалить среднюю букву.

    Решение.

    Если k - длина строки, то номер среднего символа равен k div 2 +1

    Procedure Del(var st:String);

    Var k:Byte;

    Begin

    k:=Length(st);

    If k mod 2=1 then Delete(st,k div2+1,1);

    End;


    Пример.

    Заменить все вхождения подстроки 'del' на 'Insert'

    Решение.

    Procedure Zamena(Var st:string);

    Var k:Byte;

    Begin

    While Pos('del',st)<>0 do

    begin

    k:=Pos('del',st);

    Delete(st,k,3);

    Insert('Insert',st,k);

    end;

    End;
    Варианты заданий

    1/21. Дана строка символов. Дано слово. Удалит из строки это слово.

    2/22. Дана строка символов. Выделить подстроку между первой и второй точкой.

    3/23. Дана строка символов. Выделить подстроку между первой и последней точкой.

    4/24. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Посчитать сколько слов содержит данная строка.

    5/25. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Определить длину самого короткого и самого длинного слова.

    6/26. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Определить, сколько слов начинается и заканчивается одной и той же буквой.

    7/27. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Определить, сколько слово содержит хотя бы одну букву «е».

    8/28. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Определить, сколько слов содержит ровно три буквы «е».

    9/29. Дана строка символов до точки. Определить, является ли она правильным скобочным выражением. Рассматривать только круглые скобки.

    10/30. Дана строка символов до точки. Определить является ли она записью десятичного числа, кратного двум.

    11/31. Дана строка символов до точки. Определить является ли она записью десятичного числа, кратного трем.

    12/32. Дана строка символов до точки. Вывести ее на экран задом на перед.

    13/33. Дана символьная строка. Зашифровать в ней все латинские символы с помощью циклической подстановки: A=>B=>CY=>Z=>A.

    14/34. Дана символьная строка. Удалить из нее все рядом стоящие одинаковые символы, оставив по одному. Например, ФЫЫЫЫВВВААПРО=>ФЫВАПРО.

    15/35. Дана символьная строка. Посчитать, сколько раз в ней встречается подслово АВВА. Обратите внимание: в строке АВВАВВА это подслово встречается два раза.

    16/36. В записке слова зашифрованы – каждое из них записано наоборот. Расшифровать сообщение.

    17/37. Дан текст. Напишите программу, определяющую процентное отношение строчных и прописных букв к общему числу символов в ней.

    18/38. В строке заменить все двоеточия(:) точкой с запятой(;). Посчитать количество замен.

    19/39. Удалить часть символьной строки, заключенной в скобки (вместе со строками).

    20/40. Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо.
    Контрольные вопросы

    1. Дайте характеристику символьному типу.

    2. Дайте характеристику строковому типу.

    3. Что такое код ASCII?

    4. Как сравниваются строковые значения?

    5. Перечислите операции над строковыми значениями.

    6. Перечислите функции работы со строками. Объясните их назначение.

    7. Перечислите процедуры работы со строками. Объясните их назначение.


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

    Построение графика функции



    Цель: Получить навыки работы в графическом режиме; рисования графика функции с помощью точек и линий; вывода текста на экран в графическом режиме; вывода на печать графика, представленного на экране.
    Задание для подготовки к работе

    1. Изучить процедуры и функции работы в графическом режиме.

    2. Разработать алгоритм и программу вывода на экран графика функции разными способами, с помощью разных стандартных процедур согласно заданию.

    Задание к работе

    1. Написать программу вывода на экран графика функции по разработанному алгоритму.

    2. Программа должна выводить в графическом режиме результат в виде:

    • линий – осей координат со стрелками на концах осей, с черточками для оцифровки и с оцифровкой осей.

    • графика функции, отображающего результат вычислений;

    • при выводе графика максимально использовать площадь экрана.

    • надписей у графика кривой с использование латинского и русского алфавитов.

    1. Набрать программу, отладить ее, протестировать.


    Содержание отчета

    1. Условие задачи.

    2. Описание алгоритма.

    3. Текст программы.

    4. Описание и анализ ошибок, выявленных при отладке программы.


    Краткие теоретические сведения

    Пример программы выводящей на экран график функции

    program graphfunc;

    uses graph;

    var x1,x2:real;{границы изменения аргумента функции}

    y1,y2:real; {границы изменения значения функции}

    x: real; {аргумент функции}

    y: real; {значение функции в точке х}

    dx: real; {приращение аргумента}

    l,b: integer; {левый нижний угол области вывода графика}

    w,h: integer; {ширина и высота области вывода графика}

    mx,my: real; {масштаб по оси X и Y}

    x0,y0: integer; {точка начала координат}

    st:string; {изображение числа}

    driver,mode:integer;
    function f(x:real) :real;

    begin

    f:=2*sin(x)+exp(x/5);

    end;
    begin

    initgraph(driver, mode, ‘c:\bp\bgi’);

    l:=40; b:=400; h:=200; w:=200;

    x1:=0; x2:=25; dx:=0.01;

    {найдем максимальное и минимальное значение функции на отрезке[x1, x2]}

    y1:=0; {минимум}

    y2:=0; {максимум}

    x:=x1;

    repeat

    y:=f(x);

    if y

    if y>y2 then y2:=y;

    x:=x+dx;

    until (x>x2);

    my:=h/abs(y2-y1);

    mx:=w/abs(x2-x1);

    x0:=1;

    y0:=b-abs(round(y1*my));

    line(l,b,l,b-h);

    line(x0,y0,x0+w,y0);

    str(y2:5:1,st);

    outtextxy(l+5,b-h,st);

    str(y1:5:1,st);

    outtextxy(l+5,b,st);

    {строим график}

    x:=x1;

    repeat

    y:=f(x);

    putpixel(x0+round(x*mx),y0-round(y*my),15);

    x:=x+dx;

    until(x>x2);

    readl;

    closegraph;

    end.

    Варианты заданий

    1/11/21/31.



    2/12/21/32.



    3/13/23/33.



    4/14/24/34.



    5/15/25/35.



    6/16/26/36.



    7/17/27/37.



    8/18/28/38.



    9/19/29/39.



    10/20/30/40.




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

    1. Чем графический режим отличается от текстового?

    2. Чем характеризуется графический режим?

    3. Чем математические координаты отличаются от графических?

    4. Какой модуль Турбо Паскаля содержит графические процедуры?

    5. Как выполняется инициализация графического режима?

    6. Какие процедуры модуля Graph используются для вывода текста?

    7. Какая процедура модуля Graph используется для вывода окружности?

    8. Что такое видеоадаптер? Какие видеоадаптеры поддерживаются Турбо Паскалем?




    Лабораторная работа №9

    1   2   3   4


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