МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Программирование на языке Турбо Паскаль

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

    строке и в каком столбце она находится. Номера строк и столбцов в

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

    координаты всегда целочисленные. В графическом режиме начало координат

    находится в левом верхнем углу экрана, ось x направлена вправо, ось y

    направлена вниз.

    Заметим, что существуют разные графические режимы, они отличаются

    количеством точек по горизонтали и вертикали (разрешением), а также

    количеством возможных цветов, например: 320x200x16, 640x480x16, 640x200x16,

    800x600x256 и т. п.

    Все средства для работы с графикой содержаться в стандартном модуле

    Graph, поэтому его нужно будет упоминать после слова uses.

    1. Включение и выключение графического режима.

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

    InitGraph(driver,mode,path) опишем назначение её параметров:

    driver ( переменная типа integer, в котором задаётся тип видеоадаптера,

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

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

    такие константы: CGA, EGA, EGA64, EGAMono, VGA, MCGA, IBM8514 и т. п. Для

    нас наиболее важной будет константа detect, при указании которой InitGraph

    сама подыщет наиболее мощный тип адаптера, совместимый с тем адаптером,

    который установлен на компьютере.

    mode ( также переменная типа integer, задаёт режим, в котором работает

    выбранный видеоадаптер (здесь также определены константы). Почти каждый

    видеоадаптер может работать в нескольких режимах, например, у VGA есть

    640x200x16 (VGALo), 640x350x16 (VGAMed), 640x480x16 (VGAHi). Если в первом

    параметре было указано значение detect, то InitGraph не обращает внимания

    на mode, а устанавливает наилучший, на её взгляд, режим.

    path ( строковый параметр. Для каждого видеоадаптера (или для группы

    сходных видеоадаптеров) существует программа-драйвер, с помощью которой

    модуль Graph общается с видеоадаптером. Такие драйверы хранятся в файлах с

    расширением «bgi». В параметре path указывается каталог, в котором хранятся

    драйверы. Если они находятся в текущем каталоге, то этот параметр равен

    пустой строке.

    Обычно для включения графики мы будем использовать InitGraph в таком

    виде:

    const gpath = ‘Y:\WIN_APPS\BP\BGI’

    var gd,gm: integer;

    ...

    begin

    ...

    gd:=Detect;

    InitGraph(gd,gm,gpath);

    ...

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

    процедура CloseGraph.

    2. Построение элементарных изображений

    Система координат при работе с графикой имеет начало (точку (0,0)) в

    левом верхнем углу экрана. Ось x направлена вправо, ось y ( вниз. Очевидно,

    что все точки экрана имеют целочисленные координаты.

    При построении простейших элементов изображений используются следующие

    процедуры и функции:

    |Название |Назначение |

    |PutPixel(x,y: integer; c: |Поставить точку (x,y), используя цвет c. |

    |word); |Значение цвета обычно меняется от 0 до 15, |

    | |вместо номера цвета можно употреблять |

    | |цветовые константы модуля Graph. |

    |SetColor(c: word); |Установить текущий цвет для рисования |

    | |отрезков, окружностей и т. п. Все линии после|

    | |употребления этого оператора будут рисоваться|

    | |установленным цветом. |

    |SetBkColor(c: word); |Установить текущий цвет для фона (то есть |

    | |цвет всего экрана). |

    |GetMaxX; GetMaxY; |Эти функции возвращают максимальные |

    | |допустимые значения координат x и y, |

    | |соответственно. |

    |Line(x1,y1,x2,y2: integer); |Рисовать отрезок из (x1,y1) в (x2,y2) текущим|

    | |цветом. |

    |Rectangle(x1,y1,x2,y2: |Рисует текущим цветом прямоугольник, левый |

    |integer); |угол которого ( (x1,y1), а правый нижний ( |

    | |(x2,y2). |

    |Circle(x,y: integer; r: word); |Рисует текущим цветом окружность с центром в |

    | |точке (x,y) радиуса r. |

    |Arc (x,y: integer; a1,a2,r: |Рисует дугу окружности. a1 и a2 ( начальный и|

    |word); |конечный углы (в градусах), соответственно. |

    | |Угол отсчитывается традиционно, против |

    | |часовой стрелки, угол величиной 0( |

    | |соответствует лучу y=0, x>0. |

    |Ellipse(x,y: integer; |Рисует дугу эллипса с полуосями xr и yr от |

    |a1,a2,xr,yr: word); |угла a1 до a2. |

    |DrawPoly(n: word; P); |Рисует многоугольник, количество сторон в |

    | |котором ( n, а информация о вершинах хранится|

    | |в нетипизированном параметре P. В качестве P |

    | |удобнее всего использовать массив из записей,|

    | |каждая из которых содержит поля x,y: integer;|

    |MoveTo(x,y: integer); |Эта процедура опирается на понятие текущей |

    | |позиции. Она «запоминает» позицию (x,y) на |

    | |экране, а в дальнейшем из этой позиции можно |

    | |рисовать отрезки. |

    |LineTo(x,y: integer); |Рисует отрезок из текущей позиции в точку |

    | |(x,y). При этом текущая позиция перемещается |

    | |в конец нарисованного отрезка. |

    |MoveRel(dx,dy: integer); |Перемещает текущий указатель из прежнего |

    | |положения (x,y) в точку (x+dx,y+dy). |

    |LineRel(dx,dy: integer); |То же, что и предыдущая процедура, но при |

    | |перемещении рисует отрезок от (x,y) до |

    | |(x+dx,y+dy). |

    |GetX; GetY; |Возвращают координаты текущего указателя (по |

    | |отдельности). |

    |ClearDevice; |Очищает экран. |

    Все приведённые выше процедуры для рисования выполняют только контурные

    рисунки (не закрашивая прямоугольник, окружность или эллипс внутри). По

    умолчанию рисование происходит с использованием тонкой сплошной линии,

    однако толщину и вид линии можно менять с помощью процедуры

    SetLineStyle(style,pattern,width: word). Рассмотрим назначение параметров

    этой процедуры.

    1. style ( вид линии. Здесь удобно задавать не конкретные числа, а

    константы: SolidLn, DottedLn, CenterLn, DashedLn, UserBitLn. Первая

    обозначает сплошную линию, следующие три ( разные виды прерывистых

    линий, последняя ( линию, вид которой определяется пользователем (см.

    ниже).

    2. pattern ( образец для вида линии, определяемого пользователем. Этот

    параметр вступает в действие лишь тогда, когда в предыдущем указано

    UserBitLn. Образец ( это фрагмент линии, заданный в виде числа.

    Переход от конкретного фрагмента к числу выполняется, например, так:

    [pic]

    Удобнее всего переводить полученное число в шестнадцатеричный вид, в

    нашем примере получится $999C. При изображении линии закодированный

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

    3. width ( толщина линии. Можно использовать числа, однако определены 2

    константы: NormWidth и ThickWidth (нормальная и толстая линии).

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

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

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

    SetFillStyle(style, color: word); Также как и для стиля линии, для style

    предусмотрены константы: EmptyFill, SolidFill, LineFill, LtSlashFill,

    SlashFill, BkSlashFill, LtBkSlashFill, HatchFill, XHatchFill,

    InterleaveFill, WideDotFill, CloseDotFill, UserFill. Первая обозначает

    отсутствие закраски, вторая ( сплошную, последующие ( различные

    специфические виды закраски, самая последняя ( закраску, задаваемую

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

    использовать процедуру SetFillPattern(Pattern: FillPatternType; Color:

    Word); FillPatternType определяется как array[1..8] of byte, каждый элемент

    массива кодирует одну строчку образца закраски (как и для линий), а всего

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

    квадратиков 8x8.

    Ниже приводятся процедуры рисования закрашенных фигур.

    |Название |Назначение |

    |Bar(x1,y1,x2,y2: integer); |Рисует закрашенный прямоугольник. |

    |FillEllipse(x,y: integer; xr,yr: |Закрашенный эллипс. |

    |word); | |

    |FillPoly(n: word; P); |Закрашенный многоугольник. |

    |PieSlice(x,y: integer; a1,a2,r: word);|Закрашенный круговой сектор. |

    |Sector (x,y: integer; a1,a2,xr,yr: |Закрашивает эллиптический сектор. |

    |word); | |

    |FloodFill(x,y: integer; Cborder: |Выливает краску в точку (x,y), откуда |

    |word); |она растекается во все стороны, пока |

    | |не достигнет границы цвета Cborder. |

    | |Если такой границы нет или она |

    | |незамкнута, то краска может залить |

    | |весь экран. |

    3. Вывод текстовой информации.

    Для вывода текста на экран используются две процедуры:

    1. OutText(s: string). Эта процедура выводит строку s начиная с текущей

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

    текущей позиции (по умолчанию это так). Текущая позиция задаётся,

    например, с помощью MoveTo.

    2. OutTextXY(x,y: integer; s: string). Используется для вывода строки в

    конкретной позиции.

    Если требуется вывести какие либо числа, то предварительно требуется

    преобразовать их в строку, например, с помощью процедуры Str.

    Пример:

    var r: integer;

    s: string;

    ...............

    Str(r,s);

    OutTextXY(100,200,’Результат=’+s);

    Турбо Паскаль позволяет использовать несколько различных шрифтов для

    вывода текста. Кроме того, можно менять направление вывода текста, а также

    размер символов. В этих целях используется процедура SetTextStyle(Font,

    Direction, CharSize : word). Перечислим возможные константы и значения для

    параметров этой процедуры.

    Font (шрифт):

    DefaultFont ( шрифт 8x8 (по умолчанию)

    TriplexFont ( полужирный шрифт

    SmallFont ( тонкий шрифт

    SansSerifFont ( шрифт без засечек

    GothicFont ( готический шрифт.

    Direction (ориентация и направление вывода символов):

    0 ( привычный вывод слева направо

    1 ( снизу вверх (надпись «положена на бок»)

    2 ( слева направо, но «лежачими» буквами.

    Size ( размер шрифта (целые числа от 0 до 10).

    Другая возможность при работе с текстом ( это выравнивание его

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

    SetTextJustify(horiz,wert: word). Horiz указывет как текст расположен

    относительно заданной позиции по горизонтали, а vert ( по вертикали.

    Возможные константы:

    для horiz:

    LeftText ( указанная позиция является левым краем строки

    CenterText ( позиция является серединой выводимой строки

    RightText ( правым краем строки;

    для vert:

    BottomText ( позиция находится на нижнем крае изображения

    CenterText ( по центру

    TopText ( позиция является верхним краем изображения.

    Лекция 12. Текстовые файлы

    Ниже будут обсуждаться способы взаимодействия программы на Паскале с

    текстовыми файлами, записанными на каком-либо диске. Примерами текстовых

    файлов могут служить тексты программ на Паскале, простые текстовые

    документы и т.п.

    Любой текст в файле хранится в виде последовательности символов (char),

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

    конца строки.

    1. Объявление файловой переменной и привязка к файлу на диске

    Для того чтобы программа могла работать с текстовым файлом, нам

    потребуется переменная специального файлового типа text:

    var f: text;

    Эта переменная не содержит в себе весь текст из файла, она служит для

    чтения данных из файла и для записи новых данных в него.

    Прежде чем работать с конкретным файлом на диске, файловую переменную

    следует связать с этим файлом, используя такую процедуру:

    assign(TxtFile: text, name: string);

    Первый параметр (TxtFile) — файловая переменная, второй — строка,

    содержащая имя файла на диске. Если файл лежит в текущем каталоге, то

    достаточно указать только его имя и расширение, если в каком-либо другом,

    то потребуется указывать путь к этому файлу, например:

    assign(f,'Z:\SCHOOL\text1.txt');

    2. Чтение данных из файла

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

    обходить только последовательно. Хорошей аналогией файла может послужить

    магнитная лента, с которой головка может читать информацию только по

    порядку, а для возврата к началу блока данных требуется дополнительное

    усилие (перемотка).

    Чтобы открыть для чтения файл, который был указан при вызове assign,

    нужно использовать процедуру

    reset(TxtFile: text);

    После такого действия «читающая головка» будет установлена на начало файла.

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

    в программе возникнет ошибка.

    После открытия файла можно начинать чтение данных. Для этого

    используются процедуры read и readln, которые используются в следующем

    формате:

    read(TxtFile: text, v1: type1, v2: type2, ... vN: typeN);

    readln(TxtFile: text, v1: type1, v2: type2, ... vN: typeN);

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

    переменные v1, v2, ... vN. После каждого прочитанного значения указатель

    файла («читающая головка») смещается к началу следующего значения.

    Процедура readln делает то же самое, после чего перемещает указатель на

    начало следующей строки; readln с одним лишь первым параметром переводит

    указатель на начало новой строки. В качестве параметров для процедур read и

    readln можно использовать переменные следующих типов:

    целые: integer, byte, shortint, word, longint;

    вещественные: real, single, double, extended, comp;

    строковые (string);

    символьные (char).

    При чтении строковых значений из файла берётся вся последовательность

    символов от позиции указателя до конца строки. Если после этого попытаться

    вновь прочитать строку, то результат будет пустой строкой ( ' ' ). Если

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

    будет прочитан 0.

    При чтении чисел read и readln работают так: сначала указатель

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

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

    или число записано неверно), то произойдёт ошибка.

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

    var f: text; s: string; n: integer;

    ...

    readln(f,n,s);

    Необходимо помнить, что если файл не был открыт для чтения с помощью

    reset, то любая попытка прочитать из него данные приведёт к ошибке.

    Довольно часто в программе бывает необходимо определить, дошёл ли

    указатель файла до конца строки или до конца файла. В этом случае полезно

    использовать такие функции:

    eoln(TxtFile: text): boolean;

    eof(TxtFile: text): boolean;

    Первая принимает значение true (истина), если указатель стоит на конце

    строки, вторая — то же самое для конца файла.

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

    помощью процедуры

    close(TxtFile: text);

    если этого не сделать, то содержимое файла может оказаться испорченным

    после выполнения нашей программы.

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

    программа на Паскале. Требуется распечатать его содержимое на экране:

    program ShowFile;

    var f: text;

    c: char;

    begin

    assign(f,'showfile.pas');

    reset(f);

    while not eof(f) do begin

    while not eoln(f) do begin read(f,c); write(c); end;

    readln(f);

    writeln;

    end;

    close(f);

    Страницы: 1, 2, 3, 4, 5, 6


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.