49066 (Создание программы-переводчика текстов с английского на русский язык), страница 2
Описание файла
Документ из архива "Создание программы-переводчика текстов с английского на русский язык", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "49066"
Текст 2 страницы из документа "49066"
Рисунок 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 – Окно просмотра словаря программы «Переводчик»
Заключение
Разработанный в ходе выполнения курсового проекта переводчик текстов с английского языка на русский язык является актуальным на сегодняшний день, так как многие пользователи нуждаются в автоматизированном простом и быстром средстве перевода. Нами были приобретение практических навыков в построении переводчиков.
Также были решены задачи, поставленные перед нами. Мы научились разрабатывать собственные алгоритмы для решения этих задач, овладели методами и средствами отладки и тестирования программ.
Разработанная нами программа устойчиво выполняет все свои функции, что делает ее применимой к многим областям деятельности. Но теперь перед нами стоит задача сделать переводчик еще более совершенным и более расширенным.
Список использованных источников
-
Гриз Д. Теория конструирования цифровых компиляторов. М.: Мир, 1980.
-
Ахо А., Ульман Дж. Теория синтаксического анализа перевода и компиляции. М.: Мир, 1978
-
Хантер Р. Проектирование и конструирование компиляторов. М.: Радио, 1984.
-
Молчанов, А.Ю. Системное программное обеспечение. – М.; СПб.; Нижний Новгород: Питер, 2003. – 395 с.
-
Гордеев, А.В. Системное программное обеспечение. – СПб.; М.; Харьков: Питер, 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 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.