Обработка графических данных

Содержание

Введение ……………………………………………………… 3

1. Обработка символьных данных………………………………… 4

   1. 1. Обработка текста …..…………………………………… 4

   1. 2. Работа с файлами …………..……………………………11

2. Обработка графических данных ………...………………………21

   2. 1. Графические функции …………………………………… 21

   2. 2. Движение рисунка ……………………………………… 30

Заключение ……………………………………………………. 34

Список литературы ………………………………………………35

Приложение ……………………………………………….....… 36

 

Введение

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

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

  Цель: разработать  комплекс программ по обработке графических и символьных данных. 

  Для реализации поставленной цели необходимо решить следующие задачи:  

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

     2 Дана последовательность, содержащая от 2 до 10 слов, в каждом из которых от 2 до 6 латинских                                       букв; между соседними словами - не менее одного пробела, за последним словом точка. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: перенести первую букву в конец слова.

  3 Разработать  программу, которая будет выводить  на экран график функции y=cos(x).

    4 Разработать  программу, которая будет отображать  движение многоугольника по экрану  по   принципу угол падения равен углу отражения.

 

Обработка символьных данных.

    1. Обработка текста.

Как известно, основной вид информации, которую хранит, получает и использует человек, - это  текстовая информация. В эпоху  активного использования вычислительной техники большая часть информации, обрабатываемой компьютерами, является текстовой. Для удобства ее обработки на компьютере придуманы специальные типы данных и операции над ними.

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

var s: string [n];

var s: string;

n - максимально возможная длина строки - целое число в диапазоне 1..255. Если этот параметр опущен, то по умолчанию он принимается равным 255.

Строковые константы  записываются как последовательности символов, ограниченные апострофами. Допускается  формирование строк с использованием записи символов по десятичному коду (в виде комбинации # и кода символа) и управляющих символов (комбинации и некоторых заглавных латинских букв). Выражения типа char можно присваивать любым строковым переменным.

Над строковыми данными определена операция слияния (конкатенации), обозначаемая знаком +.

Кроме слияния  над строками определены операции сравнения <, >, =, <>, <=, >=. Две строки сравниваются посимвольно, слева направо, по кодам символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются символом с кодом 0.

Процедуры и функции  для работы со строками

В системе  Turbo Pascal имеется несколько полезных стандартных процедур и функций, ориентированных на работу со строками. Ниже приводится список этих процедур и функций с краткими пояснениями.

Length (s: string): integer

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

Concat (s1, [s2,...,sn]: string): string

Функция выполняет  слияние строк-параметров, которых  может быть произвольное количество. Каждый параметр является выражением строкового типа. Если длина строки-результата превышает 255 символов, то она усекается до 255 символов. Данная функция эквивалентна операции конкатенации "+" и работает немного менее эффективно, чем эта операция.  

Copy (s: string; index:integer; count:integer):string

Функция возвращает подстроку, выделенную из исходной строки s, длиной count символов, начиная с символа под номером index.

Delete (var s: string; index, count: integer)

Процедура удаляет  из строки-параметра s подстроку длиной count символов, начиная с символа под номером index.

Insert (source: string; var s: string; index: integer)

Процедура предназначена  для вставки строки source в строку s, начиная с символа index этой строки.

Pos (substr, s: string): byte

Функция производит поиск в строке s подстроки substr. Результатом функции является номер первой позиции подстроки в исходной строке. Если подстрока не найдена, то функция возвращает 0.  

Str (X: арифметическое выражение; var st: string)

Процедура преобразует  численное выражение X в его строковое представление и помещает результат в st.  

Val (st: string; x: числовая переменная; var code: integer)

Процедура преобразует  строковую запись числа, содержащуюся в st, в числовое представление, помещая результат в x. x - может быть как целой, так и действительной переменной.

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

Chr (n: byte): char

Функция возвращает символ по коду, равному значению выражения n. Если n можно представить как числовую константу, то можно также пользоваться записью #n.

Ord (ch: char): byte;

В данном случае функция возвращает код символа  ch.  

UpCase (c: char): char;

Если c - строчная латинская буква, то функция возвращает соответствующую прописную латинскую букву, в противном случае символ c возвращается без изменения.

Для более наглядной  я продемонстрирую вам пример.

Задание: Задан список городов. Присвоить переменной Т название первого из городов название которого содержит 5 букв. 

Решение задачи показано на блок-схеме (смотрите рисунок 1.1.)

 

 
Код программы:

program kurs_1;

uses crt;

const z=['-', '.', ',', ':', ';', '!', '?', '(', ')', '[', ']', '_'];

var s, p: string[20];

   b: string;

   a: array [1..100] of string;

   t: string;

   m, k, i, n: integer;

   f: text;

   o, d: char;

begin

  clrscr;

  writeln ('VY XOTITE VVESTI SAMOSTOYATELNO? y/n');

  readln (o);

  if o='y'

  then

     begin

        writeln('vvedite kolichestvo gorodov');

      readln(n);

      for i:=1 to n do

         begin

              writeln('vvedite nazvanie goroda');

              readln(a[i]);

         end;

        for i:=1 to n do

           if length(a[i])=5

           then

              begin

                 t:=a[i];

                 break;

              end

           else;

        writeln (t);

     end

  else;

     begin

        writeln ('VVEDITE PYTb K FAYLU');

        readln (p);

        assign (f, p);

        reset (f);

        while not eof (f) do read (f, b);

        for i:=1 to length (b) do

      if b[i] in z

               then

                  begin

                     delete (b, i, 1);

                  end;

  k:=1;

         for i:=1 to length (b) do

            if b[i]=' '

            then k:=k+1

            else;

        for i:=1 to k do

           begin

              s:=copy (b, 1, pos (' ', b));

                if s[length (s)]=' '

                then delete (s, length (s), 1);

                delete (b, 1, pos (' ', b));

                if length (s)=5

                then

                   begin

                      t:=s;

                      break;

                   end

                else;

           end;

             writeln (t);

        close (f);

     end;

  writeln;

  readln;

end. 

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

    Руководство программиста: для очистки экрана в программе используется модуль crt. Блок-схема изображена на Рисунке 1.1. Результаты смотрите в приложении.

 

1.2. Работа с файлами

А теперь намного о файлах. Введение файлового типа в язык Паскаль  вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных.

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

Понятие файла  достаточно широко. Это может быть обычный файл на диске, коммуникационный порт ЭВМ, устройство печати, клавиатура или другие устройства.

При работе с  файлами выполняются операции ввода - вывода. Операция ввода означает перепись данных с внешнего устройства (из входного файла) в основную память ЭВМ, операция вывода - это пересылка данных из основной памяти на внешнее устройство (в выходной файл).

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

'LAB1.DAT'

'c:\ABC150\pr.txt'

'my_files' 

Турбо Паскаль  поддерживает три файловых типа:

  • текстовые файлы;
  • типизированные файлы;
  • нетипизированные файлы.

Доступ к файлу  в программе происходит с помощью  переменных файлового типа. Переменную файлового типа описывают одним из трех способов:

file of тип - типизированный файл (указан тип компоненты); 
text - текстовый файл; 
file - нетипизированный файл.

Стандартные процедуры и функции

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

Assign (f, FileName)

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

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

Reset (f)

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

Если f - типизированный файл, то процедурой reset он открывается для чтения и записи одновременно.

Rewrite (f)

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

Close (f)

закрывает открытый до этого файл с файловой переменной f. Вызов процедуры Close необходим при завершении работы с файлом. Если по какой-то причине процедура Close не будет выполнена, файл все-же будет создан на внешнем устройстве, но содержимое последнего буфера в него не будет перенесено.

EOF (f): boolean

возвращает значение TRUE, когда при чтении достигнут конец файла. Это означает, что уже прочитан последний элемент в файле или файл после открытия оказался пуст.  

Rename (f, NewName)

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

Erase (f)

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

IOResult

возвращает целое  число, соответствующее коду последней ошибки ввода - вывода. При нормальном завершении операции функция вернет значение 0. Значение функции IOResult необходимо присваивать какой-либо переменной, так как при каждом вызове функция обнуляет свое значение. Функция IOResult работает только при выключенном режиме проверок ошибок ввода - вывода или с ключом компиляции {$I-}.

Работа  с типизированными  файлами

Типизированный  файл - это последовательность компонент  любого заданного типа (кроме типа "файл"). Доступ к компонентам  файла осуществляется по их порядковым номерам. Компоненты нумеруются, начиная с 0. После открытия файла указатель (номер текущей компоненты) стоит в его начале на нулевом компоненте. После каждого чтения или записи указатель сдвигается к следующему компоненту.

Запись в файл:

Write (f, список переменных);

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

Чтение из файла:

Read (f, список переменных);

Процедура читает из файла f компоненты в указанные  переменные. Тип файловых компонент  и переменных должны совпадать. Если будет сделана попытка чтения несуществующих компонент, то произойдет ошибочное завершение программы. Необходимо либо точно рассчитывать количество компонент, либо перед каждым чтением данных делать проверку их существования (функция eof, см. выше)

Смещение указателя  файла:

Seek (f, n);

Процедура смещает  указатель файла f на n-ную позицию. Нумерация в файле начинается с 0.

Определение количества компонент:

FileSize (f): longint;

Функция возвращает количество компонент в файле  f.

Определение позиции указателя:

FilePos (f): longint;

Функция возвращает порядковый номер текущего компонента файла f.

Отсечение последних  компонент файла:

Truncate (f);

Процедура отсекает конец файла, начиная с текущей  позиции включительно.  

Работа  с текстовыми файлами

Текстовый файл - это совокупность строк, разделенных  метками конца строки. Сам файл заканчивается меткой конца файла. Доступ к каждой строке возможен лишь последовательно, начиная с первой. Одновременная запись и чтение запрещены.

Чтение из текстового файла:

Read (f, список переменных);

ReadLn (f, список переменных);

Процедуры читают информацию из файла f в переменные. Способ чтения зависит от типа переменных, стоящих в списке. В переменную char помещаются символы из файла. В числовую переменную: пропускаются символы-разделители, начальные пробелы и считывается значение числа до появления следующего разделителя. В переменную типа string помещается количество символов, равное длине строки, но только в том случае, если раньше не встретились символы конца строки или конца файла. Отличие ReadLn от Read в том, что в нем после прочтения данных пропускаются все оставшиеся символы в данной строке, включая метку конца строки. Если список переменных отсутствует, то процедура ReadLn (f) пропускает строку при чтении текстового файла.

Запись в текстовый файл:

Write (f, список переменных);

WriteLn (f, список переменных);

Процедуры записывают информацию в текстовый файл. Способ записи зависит от типа переменных в списке (как и при выводе на экран). Учитывается формат вывода. WriteLn от Write отличается тем, что после записи всех значений из переменных записывает еще и метку конца строки (формируется законченная строка файла).

Добавление информации к концу файла:

Append (f)

Процедура открывает  текстовый файл для добавления информации к его концу. Используйте эту процедуру вместо Rewrite.  

Работа  с нетипизированными файлами

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

Открытие нетипизированного  файла:

Reset (f, BufSize)

Rewrite (f, BufSize)

Параметр  BufSize задает число байтов, считываемых из файла или записываемых в него за одно обращение. Минимальное значение BufSize - 1 байт, максимальное - 64 К байт. Если BufSize не указан, то по умолчанию он принимается равным 128.

Чтение данных из нетипизированного файла:

BlockRead (f, X, Count, QuantBlock);

Эта процедура осуществляет за одно обращение чтение в переменную X количества блоков, заданное параметром Count, при этом длина блока равна длине буфера. Значение Count не может быть меньше 1. За одно обращение нельзя прочесть больше, чем 64 К байтов.

Необязательный  параметр QuantBlock возвращает число блоков, прочитанных текущей операцией BlockRead. В случае успешного завершения операции чтения QuantBlock = Count, в случае аварийной ситуации параметр QuantBlock будет содержать число удачно прочитанных блоков. Отсюда следует, что с помощью параметра QuantBlock можно контролировать правильность выполнения операции чтения.

Запись данных в нетипизированный файл:

BlockWrite (f, X, Count, QuantBlock);

Эта процедура  осуществляет за одно обращение запись из переменной X количества блоков, заданное параметром Count, при этом длина блока равна длине буфера.

Необязательный  параметр QuantBlock возвращает число блоков, записанных успешно текущей операцией BlockWrite.

Для не типизированных файлов можно использовать процедуры Seek, FIlePos и FileSize, аналогично соответствующим процедурам типизированных файлов.

 

 Задание 2: Дана последовательность, содержащая от 2 до 10 слов, в каждом из которых от 2 до 6 латинских букв; между соседними словами - не менее одного пробела, за последним словом точка. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу, перенести последнюю букву в начало слова

     Набор тестов к программе

  1. Если значению n присвоить значение больше 0, то программа работает неправильно.
  1. Так же значению i присвоить значение больше 0, то программа работает неправильно.
  1. Если же наоборот, то программа пропускает  две строки и начинает работать правильно.
  1. Если врось i и n водить (i:=2, n:=0), то в программе первое слове удаляет первую букву и переносит последнюю.
  1. Если убрать inc, то программа работает не правильно (inc - процедура, увеличивающая значение)
  1. Если между  словами будет пробел >1, то программа работает неправильно
  1. Если не вычитать в цикле for единицу, то программа будет переносить последнюю букву во всех словах.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

Код программы:

var s, sub:string;

    i, n, k, j:integer;

    a: array [2..10] of string;

begin

     writeln;

     readln(s);

      i:=0; n:=0;

     repeat

       inc(i); 

       if (s[i]= ' ') and (s[i+1] <> ' ')

       then

          begin

               inc(n); 

               a[n]:=sub;

               sub:='';

          end

       else if (s[i] <> ' ') and (s[i] <> '.')

            then sub:=sub+s[i];

     until i=length(s); 

           if sub <> ''

           then

               begin

     until i=length(s); 

              if sub <>''

              then

                  begin

                       inc(n);

                       a[n]:=sub;

                  end;

                   writeln;

     for i:=1 to n-1 do

Обработка графических данных