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

  • Procedure InitGraph(Var Driver,Mode: Integer; Path: String);

  • Функция Copy (S, Poz, N)

  • Функция Concat (Sl, S2, ..., SN)

  • Процедура Delete (S, Poz, N)

  • Процедура Insert(Sl,S2,Poz)

  • Пример

  • ОСНОВЫ ПРОГРАММИРОВАНИЯ_2014. Учебное пособие для 1го курса оглавление Оглавление 2 основы программирования 2 Введение 2


    Скачать 4.81 Mb.
    НазваниеУчебное пособие для 1го курса оглавление Оглавление 2 основы программирования 2 Введение 2
    АнкорОСНОВЫ ПРОГРАММИРОВАНИЯ_2014.doc
    Дата20.04.2018
    Размер4.81 Mb.
    Формат файлаdoc
    Имя файлаОСНОВЫ ПРОГРАММИРОВАНИЯ_2014.doc
    ТипУчебное пособие
    #18298
    страница14 из 17
    1   ...   9   10   11   12   13   14   15   16   17

    3.15. Основные понятия и средства компьютерной графики в Турбо Паскале


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

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

    Uses Graph;

    Графические режимы экрана отличаются:

    • размером графической сетки (M x N, где М — число точек по горизонтали, N — число точек по вертикали);

    • цветностью (число воспроизводимых на экране цветов).

    Для установки графического режима экрана существуют соответствующие процедуры. В модуле Graph процедура установки графического режима экрана имеет следующий заголовок:

    Procedure InitGraph(Var Driver,Mode: Integer; Path: String);

    Здесь целая переменная Driver определяет тип графического драйвера; целая переменная Mode задает режим работы графического драйвера; Path — выражение типа String, содержащее маршрут поиска файла графического драйвера.

    Список констант модуля Graph, определяющих типы драйверов и режимы, приведен в табл. П2.1 приложения 2.

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

    Uses Graph;

    Var Driver,Mode: Integer;

    Begin

    Driver: = VGA;{драйвер}

    Mode: = VGAHi;(режим работы}

    InitGraph(Driver,Mode,'C:\TP\BGI');

    Здесь указывается, что файл egavga.bgi с драйвером для VGA-монитора находится в каталоге C:\TP\BGI. Режим VGAHi соответствует графической сетке 640 х 480 с палитрой из 16 цветов.

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

    Driver:=Detect;

    InitGraph(Driver,Mode,'C:\TP\BGI');

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

    В модуле Graph процедура возвращения в текстовый режим имеет заголовок:

    Procedure CloseGraph;

    3.16. Строковый тип данных


    Теперь мы познакомимся с типом данных, который относится к числу структурированных. Это строковый тип данных (строка). Следует заметить, что строковый тип данных есть в Турбо Паскале и отсутствует в стандартном Паскале.

    Строка — это последовательность символов. Каждый символ занимает 1 байт памяти (код ASCII). Количество символов в строке называется ее длиной. Длина строки может находиться в диапазоне от 0 до 255. Строковые величины могут быть константами и переменными.

    Строковая константа есть последовательность символов, заключенная в апострофы. Например:

    'Язык программирования ПАСКАЛЬ',

    'IBM PC — computer',

    '33-45-12'.

    Строковая переменная описывается в разделе описания переменных следующим образом:

    Var <идентификатор>: String[<максимальная длина строки>]

    Например:

    Var Name: String[20]

    Параметр длины может и не указываться в описании. В таком случае подразумевается, что он равен максимальной величине — 255. Например:

    Var slovo: String

    Строковая переменная занимает в памяти на 1 байт больше, чем указанная в описании длина. Дело в том, что один (нулевой) байт содержит значение текущей длины строки. Если строковой переменной не присвоено никакого значения, то ее текущая длина равна нулю. По мере заполнения строки символами ее текущая длина возрастает, но она не должна превышать максимальной по описанию величины.

    Символы внутри строки индексируются (нумеруются) от единицы. Каждый отдельный символ  идентифицируется именем строки с индексом, заключенным в квадратные скобки. Например:

    Name[5], Name[i], slovo[k+1].

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

    Тип String и стандартный тип char совместимы. Строки и символы могут употребляться в одних и тех же выражениях.

    Строковые выражения строятся из строковых констант, переменных, функций и знаков операций. Над строковыми данными допустимы операции сцепления и операции отношения.

    Операция сцепления (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные.

    Например:

    'ЭВМ'+'IВМ'+'РС'.

    В результате получится строка:

    'ЭВМ IBM PC'.

    Длина результирующей строки не должна превышать 255. Операции отношения =, <

    , >, <=, >=, <> производят сравнение двух строк, в результате чего получается логическая величина (true или false). Операция отношения имеет более низкий приоритет, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и больше считается та строка, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки.

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

    Пример:

    Выражение            Результат

    'cosmi'<'cosm2'      True

    'pascal'>'PASCAL'    True

    'Ключ_'<>'Ключ'      True

    'MS DOS'='MS DOS'    True

    Функция Copy (S, Poz, N) выделяет из строки s подстроку длиной в N символов, начиная с позиции Poz.N и Poz — целочисленные выражения.

    Пример:

    Значение S                 Выражение                Результат

    'ABCDEFG'    Copy(S,2,3)    'BCD'

    'ABCDEFG'    Copy(S,4,4)    'DEFG'

    Функция Concat (Sl, S2, ..., SN) выполняет сцепление (конкатенацию) строк S1,... ,SN в одну строку.

    Пример:

    Выражение                                                    Результат

    Concat('АА','XX','Y')    'AAXXY'

    Функция Length (S) определяет текущую длину строки S. Результат — значение целого типа.

    Пример:

    Значение S            Выражение                Результат

    'test-5'     Length(S)       6

    '(А+В)*С'    Length(S)       7

    Функция Pos (Sl, S2) обнаруживает первое появление в строке S2 подстроки Sl. Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1.

    Если в строке S2 подстроки Sl не обнаружено, то результат равен 0.

    Пример:

    Значение S2              Выражение                Результат

    'abcdef      Pos('cd',S2)    3

    'abcdcdef    Pos('cd',S2)    3

    'abcdef      Pos('k',S2)     0

    Процедура Delete (S, Poz, N) выполняет удаление N символов из строки S, начиная с позиции Poz.

    Пример:

    Исходное значение S       Оператор                                Конечное значение S

    'abcdefg'         Delete(S,3,2)          'abefg'

    'abcdefg'         Delete (S,2,6)     'a'

    В результате выполнения процедуры уменьшается текущая длина строки в переменной S.

    Процедура Insert(Sl,S2,Poz) выполняет вставку строки S1 в строку S2, начиная с позиции Poz.

    Пример:

    Начальное S2                         Оператор                                            Конечное S2

    'ЭВМ PC'        Insert('IBM-',S2, 5)       'ЭВМ IBM-PC'

    'Рис.2'         Insert('N',S2,6)           'Рис. N2'

    Пример 1. Следующая программа получает из слова «ВЕЛИЧИНА» слово «НАЛИЧИЕ»:

    Program Slovo_1;

    Var S11,S12: String[10];

    Begin

    S11:='ВЕЛИЧИНА';

    S12:=Copy(S11,7,2)+Copy(S11,3,4)+S11[2];

    WriteLn(S12)

    End.

    Пример 2. Составим программу, которая формирует символьную строку, состоящую из n звездочек (n — целое число, 1 ≤ n ≤ 255).

    Program Stars;

    Var A: String;

    N,I: Byte;

    Begin

    Write('Введите число звездочек');

    ReadLn(N);

    A:=';

    For I:=1 To N Do

    A:=A+'*';

    WriteLn(A)

    End.

    Здесь строковой переменной а вначале присваивается значение пустой строки (' '). Затем к ней присоединяются звездочки.

    Пример 3. В символьной строке подсчитать количество цифр, предшествующих первому символу !.

    Program С;

    Var S: String;

    К,I: Byte;

    Begin

    WriteLn(«Введите строку»);

    ReadLn(S);

    K:=0;

    I:=l;                    

    While (K»Length(S)) And (S[I]<>'!') Do

    Begin

    If (S[I]>='0') And (S[i]<='9')

    Then K:=K+1;

    I:=I+1

    End;

    WriteLn ('Количество цифр до символа «!» равно',К)

    End.

    В этой программе переменная К играет роль счетчика цифр, а переменная I — роль параметра цикла. Цикл закончит выполнение при первом же выходе на символ ! или, если в строке такого символа нет, при выходе на конец строки. Символ S[I] является цифрой, если истинно отношение: 0

    Пример 4. Дана символьная строка, которая имеет следующий вид:





     b ='

    На месте а и b стоят десятичные цифры; значком



     обозначен один из знаков операций: +, -, *. Иначе говоря, записано арифметическое выражение с двумя однозначными числами и знак равенства, например '5+7 ='. Нужно, чтобы машина вычислила это выражение и после знака равенства вывела результат. Операция деления не рассматривается для того, чтобы иметь дело только с целыми числами.

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

    От исходной символьной информации он должен перейти к работе с числовой информацией. Если предположить, что строка составлена только из четырех символов в соответствии с указанным форматом, то задача решается довольно просто. Вот программа такого интерпретатора:

    Program Interpretator;

    Var Str: String[4];

    А, В: 0..9;

    С: -100..100;

    Begin

    {ввод исходной строки}

    WriteLn('Введите выражение!');

    WriteLn;

    Read(Str);

    {преобразование цифровых символов в числа}

    A:=Ord(Str[l])-Ord('0');

    B:=Ord(Str[3])-Ord('0');

    (выполнение арифметической операции)

    Case Str[2] Of

    '+': С:=А+В;

    '-': С:=А-В;

    '*': С:=А*В

    End;

    {вывод результата}

    WriteLn(С:2)

    End.

    В этой программе появился новый для нас оператор. Он называется оператором выбора. Формат этого оператора описывается синтаксической диаграммой (рис. 33).



    Здесь <селектор> — это выражение любого порядкового типа; <константа> — постоянная величина того же типа, что и селектор; <оператор> — любой простой или составной оператор.

    Выполнение оператора выбора происходит так: вычисляется выражение-селектор; затем в списках констант ищется такое значение, которое совпадает с полученным значением селектора; далее исполняется оператор, помеченный данной константой. Если такой константы не найдено, то происходит переход к выполнению оператора, следующего после оператора выбора.

    В приведенной выше программе роль селектора играет символьная величина Str[2]. Если она равна +, то выполнится оператор c:=a+b; если равна -, то выполнится оператор с:=а-b; если равна *, выполнится оператор с:=а*b. Для любых других значений Str[2] не выполнится ни один из операторов присваивания, и значение переменной С останется неопределенным.

    Приведенное выше описание оператора выбора соответствует стандарту Паскаля. В Турбо Паскале допустимо использование в операторе Case альтернативной ветви после служебного слова Else. Вот пример для той же задачи. Если мы хотим, что-. бы в случае неверного символа в Str[2] выдавалось сообщение об этом, нужно программировать так:

    Case Str[2] Of

    '+': С:=А+В;

    '-': С:=А-В;

    '*': С:=А*В

    Else WriteLn("неверный знак операции')

    End;

    А теперь вернемся к программе interpretator и разберемся в том, как она будет выполняться.

    После ввода строки цифровые символы переводятся в соответствующие десятичные числа. Затем интерпретируется знак операции. В зависимости от знака выполняется одно из трех арифметических действий. Далее результат выводится на экран после символа =.
    1   ...   9   10   11   12   13   14   15   16   17


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