Министерство образования и науки Республики Казахстан
Карагандинский Государственный Технический Университет
Курсовая работа
По дисциплине:
«Лингвистическое обеспечение»
Тема:
«Создание программы-переводчика текстов с английского на русскийязык»
2009
Содержание
Введение
1. Предпроектныеисследования
2. Работа на тему«Бинарные деревья»
2.1 Техническое заданиена разработку программы
2.2 Описание программы
2.3 Выводы по работе
2.4 Результаты работыпрограммы
3. Работа на тему«Польская запись»
3.1 Техническое заданиена разработку программы
3.2 Описание программы
3.3 Выводы по работе
3.4 Результаты работыпрограммы
4. Работа на тему«Переводчик»
4.1 Техническое заданиена разработку программы
4.2 Описание программы
4.3 Выводы по работе
4.4 Результаты работыпрограммы
Заключение
Список использованныхисточников
Приложения
Введение
Цельювыполнения данного курсового проекта является приобретение практических навыковв построении переводчиков; в разработке диалога САПР; в структурировании языковСАПР;в областииспользования языков программирования и создания языков проектирования.
В задачикурсового проекта по дисциплине «Лингвистическое обеспечение» входит:
§ получениезнаний в области лингвистического обеспечения;
§ изучениеклассификации языков САПР, структуры трансляторов, структуры диалога в САПР;
§ развитиенавыков программирования, полученных на предыдущих курсах;
§ развитиесистемное мышление;
§ написаниепрограммы, соответственно варианту задания.
В настоящеевремя все большее распространение приобретает английский язык, как языкмеждународного значения. Поэтому ставится задача создания более совершенныхпереводчиков. Разработанный проект демонстрирует переводчик, работа с которымочень удобна для пользователя. Программа является очень актуальной насегодняшний день, она способствует быстрому переводу различных текстовыхдокументов и обработку большого количества информации, а также предоставляетвозможность добавления новых слов в словарь.
1.Предпроектные исследования
Лингвистическоеобеспечение – это совокупность всех языковых средств используемых в САПР,включая термины и определения, правил формализации естественного языка, методысжатия и развертывания текстов, необходимых для выполнения автоматизированногопроектирования.
Лингвистическоеобеспечение автоматизированной системы – совокупность языковых средств,используемых в автоматизированных системах, а также правил формализацииестественного языка в целях повышения эффективности машинной обработкиинформации.
Практикапоказала, что мощность и комфортность конкретной системы автоматизированногопроектирования прямо и весьма существенно зависит от мощности еелингвистического обеспечения. Возрастающая практическая значимостьлингвистического обеспечения определяется такими причинами, как:
§ огромные объемы текстов наестественном языке, циркулирующих в информационных системах;
§ необходимостьиспользования новых стратегий обработки информации с учетом семантическихзаконов обыденного языка;
§ потребность в гибком итесном симбиозе человека и компьютерной системы;
§ вовлечение в обработкумногообразных скрытых знаний, экспликация которых возможна только наестественном языке.
В настоящеевремя искусственные языки, использующие для описания предметной областитекстовое представление, широко применяются не только в программировании, но ив других областях. С их помощью описывается структура всевозможных документов,трехмерных виртуальных миров, графических интерфейсов пользователя и многихдругих объектов, используемых в моделях и в реальном мире. Для того, чтобы этитекстовые описания были корректно составлены, а затем правильно распознаны иинтерпретированы, используются специальные методы их анализа и преобразования.В основе методов лежит теория языков и формальных грамматик, а также теорияавтоматов.
Несмотря нато, что к настоящему времени разработаны тысячи различных языков и ихтрансляторов, процесс создания новых приложений в этой области не прекращается.Это связано как с развитием технологии производства вычислительных систем, таки с необходимостью решения все более сложных прикладных задач. Элементы теорииязыков и формальных грамматик применимы и в других разнообразных областях,например, при описании структур данных, файлов, изображений, представленных нев текстовом, а двоичном формате.
Лингвистическоеобеспечение состоит из совокупности трёх языков: входного, внутреннего ивыходного.
2. Работа на тему «Бинарныедеревья»
2.1Техническое задание на разработку программы
Дана числоваяпоследовательность. Отсортировать ее, используя обратный обход бинарного деревав порядке возрастания.
2.2Описание программы
Входнойязык
Входнойязык является средством взаимодействия пользователя с данной программой в ходеобработки исходных данных и формулировки проблемы.
Для даннойпрограммы исходными данными являются, числовая последовательность, необходимаядля сортировки, которую пользователь вводит с клавиатуры.
Форма вводадля исходных данных приведены ниже (рисунок 1).
/>
Рисунок 1 –Форма ввода данных для программы «Бинарные деревья»
Внутреннийязык
Внутреннийязык обычно скрыт от рядового пользователя, служит для представления иобработки информации, которая передаётся между различными подсистемамиинформационных систем. В качестве внутреннего языка был выбран Паскаль.
Это структурированный язык высокогоуровня, который можно использовать для написания программ любого типа иразмера. Разработкапрограмм на Паскале включает в себя следующие действия: ввод и редактированиетекста на языке программирования, трансляция и отладка программы. Для каждогоэтапа требуются специальные средства: редактор текстов, компилятор, включающийв себя компоновщик – для построения исполняемого компьютером программногомодуля и отладчик – для отладки программы. Систему программирования ТурбоПаскаль называют еще интегрированной средой программирования, так как онаобъединяет в себе все ранее разрозненные средства, используемые при разработкепрограмм.
Широкойпопулярности Паскаля способствовали следующие причины:
· Благодарякомпактности, удачному первоначальному описанию язык оказался достаточно легкимдля изучения.
· Онотражает фундаментальные концепции алгоритмов в легко воспринимаемой форме.
· Паскальпозволяет четко реализовывать идеи структурного программирования и осуществлятьпереход к объектно-ориентированному программированию (язык Турбо Паскальпредоставляет программисту все средства ООП: высокую степеньструктурированности, модульность, абстрактность и возможность повторногоиспользования, которые встроены непосредственно в язык).
· Языкпрограммирования позволил перейти к системам автоматической проверкиправильности программ.
Паскаль – языкструктурного программирования.
Для данной программы этотязык подходит больше всего, так как имеет возможность работы с динамическимиструктурами данных, т.е. с такими структурами данных, размер и конфигурациякоторых изменяются во времени исполнения программ. Для них выделение иочистка памяти происходит не на этапе трансляции, а в ходе выполнения самойпрограммы. Для работы с динамическими величинами в Паскале предусмотренспециальный тип значений – ссылочный. Этот тип не относится ни к простым, ни ксоставным. Переменные ссылочного типа, или указатели, являются статическимипеременными. Значением переменной ссылочного типа является адрес ячейки – местав памяти соответствующей динамической величины. Своё значение ссылочнаяпеременная получает в процессе выполнения программы, в момент появлениясоответствующей динамической величины.
Выходнойязык
Выходнойязык обеспечивает оформление результатов программы в текстовом виде.
Для даннойпрограммы выходными данными является последовательность чисел, отсортированная впорядке возрастания, используя обратный обход бинарного дерева. Форма выходнойинформации приведена ниже (рисунок 2).
/>
Рисунок 2 –Форма выходных данных для программы «Бинарные деревья»
2.3 Выводыпо работе
В даннойработе были изучены алгоритмы сортировки методом прохождения бинарного дерева.
Деревомназывается орграф для которого:
1.Существует узел, в который не входит ни одной дуги. Этот узел называетсякорнем.
2.В каждую вершину, кроме корня, входит одна дуга.
Сточки зрения представления в памяти важно различать два типа деревьев: бинарныеи сильноветвящиеся. В бинарном дереве из каждой вершины выходит не более двухдуг. В сильноветвящемся дереве количество дуг может быть произвольным.
Бинарноедерево является рекурсивной структурой, поскольку каждое его поддерево самоявляется бинарным деревом и, следовательно, каждый его узел в свою очередьявляется корнем дерева.
Узел дерева, не имеющий потомков, называется листом.
Я считаю, чтоэтот метод сортировки для данной работы является очень удобным и быстрым. Онпозволяет значительно ускорить время поиска любого элемента. Программапозволяет сортировать с помощью бинарных деревьев последовательность чисел впорядке возрастания методом обратного обхода.
2.4Результаты работы программы
Результатыработы программы представлены на рисунке 3. Листинг программы приведен вприложении А.
/>
Рисунок 3 –Результаты работы программы «Бинарные деревья»
3.Работа на тему «Польскаязапись»
3.1Техническое задание на разработку программы
Перевестивходную строку в инфиксной форме в постфиксную.
3.2Описание программы
Входнойязык
Лексемамивходного языка в данной работе являются буквы или цифры, т.е. операнды, исвязывающие их арифметические действия.
Входнымиданными являются арифметические выражения.
Формаисходной информации приведена на рисунке 4.
/>
Рисунок 4 –Форма ввода данных для программы «Польская запись»
Внутреннийязык
В качествевнутреннего языка для данной работы был выбран Паскаль.
Описаниеданного языка программирования приведено в первой работе на тему «Бинарныедеревья».
Выходнойязык
Выходнойязык обеспечивает оформление результатов программы в текстовом виде.
Для даннойпрограммы выходными данными является строка символов в постфиксной формезаписи.Форма выходной информации приведена ниже (рисунок 5).
/>
Рисунок 5 –Форма выходных данных для программы «Польская запись»
3.3 Выводыпо работе
В даннойработе были изучены алгоритмы перевода выражений в форму, удобную для машиннойобработки в виде польской записи, а также был осуществлен на практике алгоритмперевода выражения из инфиксной формы в постфиксную.
Обратнаяпольская запись обладает pядом замечательных свойств, котоpые пpевpащают ее видеальный пpомежуточный язык пpи тpансляции. Во-пеpвых, вычисление выpажения,записанного в обpатной польской записи, может пpоводиться путем однокpатногопpосмотpа, что является весьма удобным пpи генеpации объектного кода пpогpамм.
Во-втоpых,получение обpатной польской записи из исходного выpажения может осуществлятьсявесьма пpосто на основе пpостого алгоpитма, пpедложенного Дейкстpой, – методстеков с приоритетами.
Этот методоснован на использовании стека с приоритетами, позволяющего изменить порядокследования знаков операций в выражении так, что получается обратная польская запись.В данной работе был использован именно этот метод, так как он является болееудобным для реализации щаной программы.
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 с.
ПриложениеА
Листингпрограммы «Бинарные деревья»
ProgramBin_tree;
UsesCrt;
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
New(Q); {формирование новогоэлемента списка}
Write('Число', i, ':');
Read (Q^.Key); {присваиваем элементу key введенное значение}
Q^.Next:= P; {включение новогоэлемента в список}
P:= Q; {указатель списка – наначало списка}
i:=i+1;
end;
End;
ProcedureTreeBild (var T: Link; P: Point); {процедура построения дерева}
Varx: Integer;
ProcedureFind_Ins (var Q: Link; x: Integer);
varQ1:link;
ProcedureIns (var S: Link);
Begin {процедуры вставкиэлемента}
New(S);
S^.Key:=x;
S^.Left:=Nil; S^.Right:= Nil;
End;
Begin {процедуры поиска ивставки элемента}
x:=P^.Key;
IfQ = Nil
thenIns(Q)
else
ifx
Find_Ins(Q^.Left, x)
elseif x=Q^.key then Find_Ins (Q^.right, x) else
begin
new(Q1);
Q1^.left:=Q;
Q1^.key:=x;
Q:=Q1;
end;
End;
Begin {процедуры построениядерева из списка}
IfP Nil
then
begin
Find_Ins(T, P^.Key);
TreeBild(T, P^.Next)
end;
End;
{процедураобхода дерева}
ProcedureOutTree (var T: Link);
Begin
IfT 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. {конец программы}
ПриложениеВ
Листингпрограммы «Польская запись»
ProgramPolskaya;
usescrt;
var
i,n:integer;
st1,st2, st3:string;
label1;
begin
clrscr;
st2:='';
write('Stroka v infiksnoi forme: '); {Вводим строку}
Readln(st1);
fori:=1 to length(st1) do
begin
1:
ifst1 [i]=' (' then st3:=st3+st1 [i]
else
ifst1 [i]='^'then
begin
n:=Length(st3);
ifst3 [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);
ifst3 [n]='^' then
begin
st2:=st2+st3[n];
Delete(st3, n, 1);
Goto1;
Goto1;
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);
Goto1;
end
else
begin
st2:=st2+st3[n];
Delete(st3, n, 1);
st3:=st3+st1[i];
end;
end
else
ifst1 [i]= ')'then
begin
n:=Length(st3);
ifn=0 then
Break;
if(st3 [n]='(') then
Delete(st3, n, 1)
else
begin
st2:=st2+st3[n];
Delete(st3, n, 1);
Goto1;
end;
end
elsest2:=st2+st1 [i];
end;
n:=Length(st3);
fori:=n downto 1 do
st2:=st2+st3[i];
WriteLn('Stroka v postfiksnoi forme: ', st2);
readkey;
end.
ПриложениеС
Листингпрограммы «Переводчик»
unitUnit1;
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;
procedureN2Click (Sender: TObject);
procedureN3Click (Sender: TObject);
procedureN5Click (Sender: TObject);
procedureFormCreate (Sender: TObject);
procedureN6Click (Sender: TObject);
procedureN7Click (Sender: TObject);
procedureButton1Click (Sender: TObject);
procedureregistr;
procedurezamena;
procedureN9Click (Sender: TObject);
procedureN10Click (Sender: TObject);
procedureN11Click (Sender: TObject);
procedureN12Click (Sender: TObject);
procedureN13Click (Sender: TObject);
procedureN15Click (Sender: TObject);
procedureN16Click (Sender: TObject);
procedureButton2Click (Sender: TObject);
private
{Privatedeclarations}
public
rus:string;
s1,s2, s3, a, st1:string;
i,j, k, g, l, h, t, n, p, dl, count:integer;
{Publicdeclarations}
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}
procedureTForm1.N2Click (Sender: TObject);
var
i:integer;
begin
ifOpenDialog1. Execute then
begin
EdFile:=OpenDialog1.FileName; {впеременную присваиваем
имя и полныйпуть к файлу}
RichEdit1.Lines. LoadFromFile(EdFile);
memo1.Lines. LoadFromFile(EdFile);
end;
end;
proceduretform1.zamena;
label1;
label2;
var
i,j, k:integer; t:string;
a:char;
begin
fori:=0 to richedit2. Lines. Count-1 do
begin
t:=richedit2. Lines[i];
forj:=1 to length(t) do
begin
if(j=1) and (i=0) then
begin
t[j]:= chr (ord(t[j]) –32); // замена строчных букв после '.' на прописные
end;
ift[j]='.' then
begin
fork:=j+1 to length(t) do
begin
ift[k]' ' then
begin
a:=chr(ord(t[k]) – 32);
delete(t, k, 1);
insert(a, t, k);
goto2;
end;
end;
2:richedit2. Lines[i]:= t;
end;
end;
end;
end;
proceduretform1.registr;
label1;
vari, x, j, k, g:integer; f:string;
begin
forx:=0 to memo2. Lines. Count-1 do
begin
memo2.Lines[x]:=''; // очистка memo2
end;
ifrichedit1.textmemo1. Text
then
forx:=0 to memo1. Lines. Count-1 do
memo1.Lines[x]:=''; // очистка memo1
ifrichedit1.text'' then
fori:=0 to richedit1. Lines. Count-1 do
ifmemo1. Lines[i]='' then
ifrichedit1. Lines[i]'' then
forj:=0 to memo1. Lines. Count-1 do
begin
memo1.Lines[j]:= richedit1. Lines[i]; // заполняем memo1
end;
forj:=0 to memo1. Lines. Count-1 do
memo1.Lines[j]:=lowercase (memo1. Lines[j]); // переводим текст memo1 в нижний регистр
ifmemo1. Text'' then
begin
forg:=0 to memo1. Lines. Count-1 do
memo1.Lines[g]:=lowercase (memo1. Lines[g]); // переводим текст memo1 в нижний регистр
goto1;
end;
1:end;
procedureTForm1.N3Click (Sender: TObject);
begin
ifsaveDialog1. Execute then
begin
EdFile:=SaveDialog1.FileName; // сохранение перевода
memo2.Lines. SaveToFile(EdFile);
ifrichedit2. Modified then memo2. Modified:=False;
end;
end.