p align="left">3.4 Результаты работы программы Результаты работы программы представлены на рисунке 6. Листинг программы приведен в приложении В.
Рисунок 6 - Результаты работы программы «Польская запись» 4. Работа на тему «Переводчик» 4.1 Техническое задание на разработку программы Написать программу, при помощи которой можно переводить несложные тексты с английского языка. Программа должна загружать файлы с текстом и словарем из оболочки или путем передачи имен файлов как параметров командной сроки и выдавать файл с переводом. 4.2 Описание программы Входной язык Входной язык является диалоговым языком, который позволяет в форме диалога пользователю ввести данные. Входной язык характеризуется большим разнообразием, изменчивостью, узкой проблемной ориентацией. Недостатки входных языков это необходимость существенной перестройки программной системы при изменении каких-то условий. Лексемами входного языка в данной работе являются слова английского алфавита, т.е. входными данными является текст на английском языке. Текст может как загружаться из текстового файла, так и вводиться пользователем с клавиатуры. Форма входных данных приведена на рис. 7.
Рисунок 7 - Форма входных данных для программы «Переводчик» Внутренний язык В качестве внутреннего языка для данной работы был выбран ObjectPascal, который используется в среде программирования Delphi. Этот язык использует принципы объектно-ориентированного и визуального программирования. Язык ObjectPascal является одним из высокоразвитых языков объектно-ориентированного программирования. И среди других, например, таких как Visual Basic или Visual C++, отличается простотой программного кода, достаточным количеством литературы по этому языку. Объектно-ориентированное программирование (ООП) - это методика разработки программ, в основе которой лежит понятие объект. Объект - это некоторая структура, соответствующая объекту реального мира, его поведению. Задача, решаемая с использованием методики ООП, описывается в терминах объектов и операций над ними, а программа при таком подходе представляет собой набор объектов и связей между ними. По сравнению с традиционными способами программирования ООП обладает рядом преимуществ. Главное из них заключается в том, что эта концепция в наибольшей степени соответствует внутренней логике функционирования операционной системы (ОС) Windows. Программа, состоящая из отдельных объектов, отлично приспособлена к реагированию на события, происходящие в ОС. К другим преимуществам ООП можно отнести большую надежность кода и возможность повторного использования отработанных объектов. Delphi - это комбинация нескольких важнейших технологий: · Высокопроизводительный компилятор в машинный код · Объектно-ориентированная модель компонент · Визуальное (а, следовательно, и скоростное) построение приложений из программных прототипов · Масштабируемые средства для построения баз данных Программирование в Delphi строится на тесном взаимодействии двух процессов: * процесса конструирования визуального проявления программы (т.е. ее Windows-окна), * процесса написания кода, придающего элементам этого окна и программе в целом необходимую функциональность. Основные преимущества среды программирования Delphi: - Простота языка позволяет быстро его освоить и создавать сложные программы; - Развитые средства представления структур данных обеспечивают удобство работы, как с числовой, так и с символьной и битовой информацией; - Объектно-ориентированное программирование (ООП) в визуальной среде. В процессе построения приложения разработчик выбирает из палитры компонент готовые компоненты как художник, делающий крупные мазки кистью. Еще до компиляции он видит результаты своей работы - после подключения к источнику данных их можно видеть отображенными на форме, можно перемещаться по данным, представлять их в том или ином виде. В этом смысле проектирование в Delphi мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции мы получаем код, который исполняется в 10-20 раз быстрее, чем тоже самое, сделанное при помощи интерпретатора. Кроме того, компилятор компилятору рознь, в Delphi компиляция производится непосредственно в родной машинный код, в то время как существуют компиляторы, превращающие программу в так называемый p-код, который затем интерпретируется виртуальной p-машиной. Это не может не сказаться на фактическом быстродействии готового приложения. Основной упор этой модели в Delphi делается на максимальном реиспользовании кода. Это позволяет разработчикам строить приложения весьма быстро из заранее подготовленных объектов, а также дает им возможность создавать свои собственные объекты для среды Delphi. Никаких ограничений по типам объектов, которые могут создавать разработчики, не существует. Выходной язык Выходной язык обеспечивает оформление результатов программы в текстовом виде. Лексемами выходного языка являются слова на русском языке, т.е. для данной программы выходными данными является текст на русском языке. Форма выходных данных приведена ниже (рисунок 8).
Рисунок 8 - Форма выходных данных для программы «Переводчик» 4.3 Выводы по работе В данной работе были изучены некоторые аспекты конструирования и построения переводчика с английского языка на русский язык.
4.4 Результаты работы программы В представленной работе был разработан переводчик с английского языка на русский язык. В нем присутствуют функции сохранения перевода и добавления новых слов в словарь. Результаты работы программы представлены на рисунках 9 и 10. Листинг программы приведен в приложении С.
Рисунок 9 - Главное окно программы «Переводчик» Рисунок 10 - Окно просмотра словаря программы «Переводчик» Заключение Разработанный в ходе выполнения курсового проекта переводчик текстов с английского языка на русский язык является актуальным на сегодняшний день, так как многие пользователи нуждаются в автоматизированном простом и быстром средстве перевода. Нами были приобретение практических навыков в построении переводчиков. Также были решены задачи, поставленные перед нами. Мы научились разрабатывать собственные алгоритмы для решения этих задач, овладели методами и средствами отладки и тестирования программ. Разработанная нами программа устойчиво выполняет все свои функции, что делает ее применимой к многим областям деятельности. Но теперь перед нами стоит задача сделать переводчик еще более совершенным и более расширенным. Список использованных источников 1. Гриз Д. Теория конструирования цифровых компиляторов. М.: Мир, 1980. 2. Ахо А., Ульман Дж. Теория синтаксического анализа перевода и компиляции. М.: Мир, 1978 3. Хантер Р. Проектирование и конструирование компиляторов. М.: Радио, 1984. 4. Молчанов, А.Ю. Системное программное обеспечение. - М.; СПб.; Нижний Новгород: Питер, 2003. - 395 с. 5. Гордеев, А.В. Системное программное обеспечение. - СПб.; М.; Харьков: Питер, 2002. - 736 с. Приложение А Листинг программы «Бинарные деревья» Program Bin_tree; Uses Crt; Type Point = ^ Item; {тип - указатель на список} Item = Record {запись в составе:} Key: Integer; {корень-целое число} Next: Point; {указатель на список} end; Link = ^Derevo; {тип - указатель на дерево} Derevo = Record {дерево в составе:} Key: Integer; {корень} Left, Right: Link; {указатели на левое и правое поддерево} End; Var A: Point; {указатели на запись-список} Tree: Link; {указатель на дерево} Procedure Vvod (var P: Point); {процедура ввода списка} Var i: integer; Q: Point; {указатель на список} Begin P:= Nil; {пустой список} Writeln ('Введите числовую последовательность'); i:=1; While i<=10 do begin New(Q); {формирование нового элемента списка} Write ('Число', i, ':'); Read (Q^.Key); {присваиваем элементу key введенное значение} Q^.Next:= P; {включение нового элемента в список} P:= Q; {указатель списка - на начало списка} i:=i+1; end; End; Procedure TreeBild (var T: Link; P: Point); {процедура построения дерева} Var x: Integer; Procedure Find_Ins (var Q: Link; x: Integer); var Q1:link; Procedure Ins (var S: Link); Begin {процедуры вставки элемента} New(S); S^.Key:= x; S^.Left:= Nil; S^.Right:= Nil; End; Begin {процедуры поиска и вставки элемента} x:= P^.Key; If Q = Nil then Ins(Q) else if x<Q^.key then Find_Ins (Q^.Left, x) else if x=Q^.key then Find_Ins (Q^.right, x) else begin new(Q1); Q1^.left:=Q; Q1^.key:=x; Q:=Q1; end; End; Begin {процедуры построения дерева из списка} If P <> Nil then begin Find_Ins (T, P^.Key); TreeBild (T, P^.Next) end; End; {процедура обхода дерева} Procedure OutTree (var T: Link); Begin If T <> Nil then begin OutTree (T^.Left); {левое поддерево} OutTree (T^.Right); {правое поддерево} Write (T^.Key, ' '); {корень дерева} end; End; Begin {основная программа} ClrScr; Vvod(A); {процедура ввода списка} Tree:= Nil; TreeBild (Tree, A); {процедура построения дерева Tree из списка A} OutTree(Tree); {процедура обхода дерева} dispose(Tree); {освобождение ОП} ReadKey; End. {конец программы} Приложение В Листинг программы «Польская запись» Program Polskaya; uses crt; var i, n:integer; st1, st2, st3:string; label 1; begin clrscr; st2:=''; write ('Stroka v infiksnoi forme: '); {Вводим строку} Readln(st1); for i:=1 to length(st1) do begin 1: if st1 [i]=' (' then st3:=st3+st1 [i] else if st1 [i]='^'then begin n:=Length(st3); if st3 [n]='^' then begin st2:=st2+st3 [n]; Delete (st3, n, 1); st3:=st3+st1 [i]; end else if (n=0) or (st3 [n]='(') or (st3 [n]='+') or (st3 [n]='-') or (st3 [n]='*') or (st3 [n]='/') then st3:=st3+st1 [i]; end else if (st1 [i]='*') or (st1 [i]='/') then begin n:=Length(st3); if st3 [n]='^' then begin st2:=st2+st3 [n]; Delete (st3, n, 1); Goto 1; Goto 1; end; if (st3 [n]='*') or (st3 [n]='/') then begin st2:=st2+st3 [n]; Delete (st3, n, 1); st3:=st3+st1 [i]; end else if (n=0) or (st3 [n]='(') or (st3 [n]='+') or (st3 [n]='-') then st3:=st3+st1 [i]; end else if (st1 [i]='+') or (st1 [i]='-') then begin n:=Length(st3); if (st3 [n]='(') or (n=0) then st3:=st3+st1 [i] else if (st3 [n]='^') or (st3 [n]='*') or (st3 [n]='/') then begin st2:=st2+st3 [n]; Delete (st3, n, 1); Goto 1; end else begin st2:=st2+st3 [n]; Delete (st3, n, 1); st3:=st3+st1 [i]; end; end else if st1 [i]= ')'then begin n:=Length(st3); if n=0 then Break; if (st3 [n]='(') then Delete (st3, n, 1) else begin st2:=st2+st3 [n]; Delete (st3, n, 1); Goto 1; end; end else st2:=st2+st1 [i]; end; n:=Length(st3); for i:=n downto 1 do st2:=st2+st3 [i]; WriteLn ('Stroka v postfiksnoi forme: ', st2); readkey; end. Приложение С Листинг программы «Переводчик» unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ComCtrls, Buttons, ExtCtrls; type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N4: TMenuItem; N5: TMenuItem; OpenDialog1: TOpenDialog; Memo2: TMemo; Memo3: TMemo; N3: TMenuItem; N6: TMenuItem; SaveDialog1: TSaveDialog; N7: TMenuItem; Button1: TButton; RichEdit1: TRichEdit; RichEdit2: TRichEdit; Memo1: TMemo; N8: TMenuItem; N9: TMenuItem; N10: TMenuItem; N11: TMenuItem; N12: TMenuItem; BitBtn1: TBitBtn; Bevel1: TBevel; Bevel2: TBevel; N13: TMenuItem; ColorDialog1: TColorDialog; N14: TMenuItem; N15: TMenuItem; FontDialog1: TFontDialog; N16: TMenuItem; Button2: TButton; Image1: TImage; Image2: TImage; procedure N2Click (Sender: TObject); procedure N3Click (Sender: TObject); procedure N5Click (Sender: TObject); procedure FormCreate (Sender: TObject); procedure N6Click (Sender: TObject); procedure N7Click (Sender: TObject); procedure Button1Click (Sender: TObject); procedure registr; procedure zamena; procedure N9Click (Sender: TObject); procedure N10Click (Sender: TObject); procedure N11Click (Sender: TObject); procedure N12Click (Sender: TObject); procedure N13Click (Sender: TObject); procedure N15Click (Sender: TObject); procedure N16Click (Sender: TObject); procedure Button2Click (Sender: TObject); private {Private declarations} public rus:string; s1, s2, s3, a, st1:string; i, j, k, g, l, h, t, n, p, dl, count:integer; {Public declarations} end; var Form1: TForm1; EdFile:string; s1, s2, s3, a, st1, rus:string; i, j, k, g, l, h, t, n, p, dl, count:integer; implementation {$R *.dfm} procedure TForm1.N2Click (Sender: TObject); var i:integer; begin if OpenDialog1. Execute then begin EdFile:=OpenDialog1. FileName; {в переменную присваиваем имя и полный путь к файлу} RichEdit1. Lines. LoadFromFile(EdFile); memo1. Lines. LoadFromFile(EdFile); end; end; procedure tform1.zamena; label 1; label 2; var i, j, k:integer; t:string; a: char; begin for i:=0 to richedit2. Lines. Count-1 do begin t:= richedit2. Lines[i]; for j:=1 to length(t) do begin if (j=1) and (i=0) then begin t[j]:= chr (ord(t[j]) - 32); // замена строчных букв после '.' на прописные end; if t[j]='.' then begin for k:=j+1 to length(t) do begin if t[k]<>' ' then begin a:=chr (ord(t[k]) - 32); delete (t, k, 1); insert (a, t, k); goto 2; end; end; 2: richedit2. Lines[i]:= t; end; end; end; end; procedure tform1.registr; label 1; var i, x, j, k, g:integer; f:string; begin for x:=0 to memo2. Lines. Count-1 do begin memo2. Lines[x]:=''; // очистка memo2 end; if richedit1.text<>memo1. Text then for x:=0 to memo1. Lines. Count-1 do memo1. Lines[x]:=''; // очистка memo1 if richedit1.text<>'' then for i:=0 to richedit1. Lines. Count-1 do if memo1. Lines[i]='' then if richedit1. Lines[i]<>'' then for j:=0 to memo1. Lines. Count-1 do begin memo1. Lines[j]:= richedit1. Lines[i]; // заполняем memo1 end; for j:=0 to memo1. Lines. Count-1 do memo1. Lines[j]:=lowercase (memo1. Lines[j]); // переводим текст memo1 в нижний регистр if memo1. Text<>'' then begin for g:=0 to memo1. Lines. Count-1 do memo1. Lines[g]:=lowercase (memo1. Lines[g]); // переводим текст memo1 в нижний регистр goto 1; end; 1: end; procedure TForm1.N3Click (Sender: TObject); begin if saveDialog1. Execute then begin EdFile:=SaveDialog1. FileName; // сохранение перевода memo2. Lines. SaveToFile(EdFile); if richedit2. Modified then memo2. Modified:=False; end; end.
Страницы: 1, 2
|