Реферат: Латинизация кириллицы - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Латинизация кириллицы

Банк рефератов / Радиоэлектроника

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 38 kb, скачать бесплатно
Обойти Антиплагиат
Повысьте уникальность файла до 80-100% здесь.
Промокод referatbank - cкидка 20%!

Узнайте стоимость написания уникальной работы






МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ–УПИ

Кафедра автоматики и информационных технологий





Оценка_____________


Члены комиссии:

___________________

___________________





ЛАТИНИЗАЦИЯ КИРИЛЛИЦЫ

Курсовой проект по дисциплине ПЯВУ












Студент: Мальцев

Группа Р-328A

Преподаватель: Трофимов С.П.





Екатеринбург 2004

ОГЛАВЛЕНИЕ


ПОСТАНОВКА ЗАДАЧИ 3

Теоретическая часть 4

Инструкция пользователя 6

Инструкция программиста 8

“Menu.cpp” 8

“Translit cpp” 9

“Test.сpp” 12

ТЕСТИРОВАНИЕ 14

ЗАКЛЮЧЕНИЕ 15

Библиографический список 16

ПРИЛОЖЕНИЕ 1. ТЕКСТ ПРОГРАММЫ 17

ПРИЛОЖЕНИЕ 2. Экранные формы 24




ПОСТАНОВКА ЗАДАЧИ

Написать программу, соответственно следующим требованиям:

  • программа работает с командной строкой, получающей входной файл и словарь;

  • программа преобразует русские буквосочетания в английские;

  • предусмотреть корректность словаря;

  • реализовать тестирование программы.










































Теоретическая часть

Транслит – замещение букв одного языка другими на основании фонетического созвучия. Например, русское словосочетание "РТФ" пишется так – “RTF”. Почему же возникло это явление и зачем оно используется?

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

Был предложен еще один вариант замены – на основании визуального подобия. Например, русское словосочетание "РТФ" пишется так “PTOP”, причем оно написано полностью английскими буквами. В этом виде транслита допустима еще и замена цифрами (ч-4,з-3). Название этому явлению – мегатранслит (или псевдотранслит), т.к. это нечто большее, чем простой транслит.

Если же взглянуть на все это с точки зрения банальной эрудиции, то сейчас транслит можно было бы забыть. Но он нашел свое применение в сфере общения. Например, когда разговариваешь в чате, то чего же не писать транслитом? Вообще, точек зрения на вопрос каким должен быть стандарт кодировки у русской Сети существует несколько:

  1. кодировка КОИ8

  2. кодировка CP1251

  3. cтандартом русской Сети - равно как и мировой - является и должен оставаться translit, то есть верхняя половина символьной таблицы

  4. у русской Сети не может и не должно быть единого стандарта.

Приверженцы транслита на замечают, что если русским стандартом ДОСа является CP866, в клонах UNIX распространена поддержка КОИ8, а в виндозных системах принято поддерживать CP1251, то существует лишь одна кодировка, на основании которой пользователи всех этих операционных систем могут договориться, - транслит.

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

Но также следует отметить, что у операционных систем, установленных примерно на 90% компьютеров в мире, не существует средств поддержки КОИ8, будь то в режиме чтения или письма. Кодировка CP1251 не поддерживается в довольно большом числе не последних по значимости операционных систем - включая ДОС, UNIX, Макинтош. Делать стандартом кодировку, которую пользователи этих систем не могут прочитать в принципе, означает изначальную установку на отсечение от русского киберпространства всех пользователей, которые не являются клиентами Билла Х. Гейтса.

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

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

Следует отметить, что писать вручную на транслите – для рядового обывателя дело очень утомительное из-за своей необычности и непривычности. Данное приложение призвано помочь вам в этом!























Инструкция пользователя

Данное приложение предназначено для латинизации (транслитерации) кириллицы. Включает в себя проект Translit.prj, содержащий три файла menu.cpp, translit.cpp, test.сpp, два словаря tdict.txt и pdict.txt (содержат транслит и псевдотранслит соответственно), а также для осуществления тестирования программы- файлы tsource.txt, tresult.txt, tcorrect.txt.

Файлы словари составлены разработчиком проекта, представляют собой обычные текстовые файлы. Каждая строка в словаре записана в следующем формате:

key-value

где key – русское буквосочетание, value – словосочетание, на которое заменяется rus при переводе.

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

Существует три способа указания файлов:

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

2.Меню оболочки RUNArguments, где прописываются просто имена необходимых файлов(при наличии их в текущей директории) или полный путь к файлам(при отсутствии их в текущей директории).

3. Меню оболочки FILEDOS shell(указание аргументов командной строки производится аналогично).

Если при запуске программы появляется сообщение

Используйте: Translit.exe словарь файл_для_перевода [переведенный файл]

это означает, что пользователь ввел недопустимое число аргументов. Следует повторить запуск программы с правильно указанными аргументами.

Если файл-словарь пуст, то выдается сообщение:

Словарь слишком мал!

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

Невозможно открыть файл для перевода!

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

  • About;

  • Help;

  • Translit;

  • Test;

  • Exit

Передвижение по пунктам меню осуществляется при нажатии клавиш “стрелка вверх” или ”стрелка вниз”. Для входа в какой-либо пункт меню используйте клавишу “ENTER”.

При выборе “About” вы увидите на экране несколько строк об разработчике и предназначении программы:

Программа Translit осуществляет транслитерацию.

Автор: Пашкова Ольга, группа Р-220б"

Пункт “Help” поможет вам разобраться в использовании программы.

При выборе “Translit” осуществляется транслитерация указанного файла и полученный текст выводится на экран(если не был отмечен в командной строке файл для перевода) или в файл.

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

При выборе “ Test ” осуществляется тестирование данной программы за счет сравнения файла полученного с помощью Translitа с файлом, произведенным вручную (оба файла содержатся в приложении: tresult.txt, tcorrect.txt, соответственно). На экран может быть выведено одно из сообщений:

"Тест удачно пройден." или "Тест не пройден.",

а также при отсутствии одного или двух файлов

Ошибка при открытии файла(ов).

Для выхода пользуетесь “Exit” или просто нажмите “esc”.

Программа осуществляет проверку выбранного словаря на корректность записанной в нем информации: в каждой строке словаря должен имеется символ '-', не допускается отсутствие в какой-либо из строк словаря словосочетания(ий) key и (или)value.

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


Предупреждение! (7) строчка словаря 'вv' записана некорректно!


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

Для своей работы программы использует динамическую память. Если на экране появляется сообщение касающееся отсутствия свободной памяти, например

Нет памяти для хранения словаря


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


В случае невозможность устранения неполадок самим пользователем обращаться к разработчику по адресу, указанному в пункте меню “About”.

Инструкция программиста

Данная программа предназначена для латинизации (транслитерации) кириллицы. Программа представляет собой проект, состоящий из трех файлов: menu.cpp, translit.cpp, test.сpp.

Причем для ее работы необходимы следующие файлы: один из файлов словарей (DictT.txt или DictP.txt), входной файл с текстом для перевода (source.txt), файл для вывода (result.txt), которые задаются в командной строке (последний файл является не обязательным аргументом командной строки).

“Menu.cpp”

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

  • void translit (char *, char *, char *);

  • int test ( );

  • void usage (char * name);

  • void main(int argc, char *argv[]).


-void translit (char *, char *, char *)

Функция, реализующая латинизацию кириллицы, находится в файле translit.cpp(см. ниже). Ее аргументами являются указатели на имена файлов, имеющиеся в командной строке. Ничего не возвращает.


-int test ( ) (пдробное описание данной функции приведено ниже)

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

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

1-файлы одинаковы;

0-файлы различны.

-void usage (char * name)

Получает указатель на имя исполнимого файла. Используется в помощь пользователю для работы с командной строкой (задания аргументов командной строки), где обязательно должны быть указаны исполняемый файл, словарь, файл для перевода, необязательным аргументом является файл для вывода.

Если в командной строке не указан хотя бы один из параметров, функция выдает сообщение об ошибке:


Используйте: Translit.exe словарь файл_для_перевода [переведенный файл]





- void main(int argc, char *argv[])

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

Параметры функции: argc – переменная, содержащая количество аргументов командной строки, включая исполнительный файл; argv – массив указателей, на аргументы командной строки. Ничего не возвращает.

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

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

Выделяются окна для каждого из пунктов меню с заданием цвета текста(WHITE) и местонахождения на экране. Причем при активизации какого-либо пункта меню цвет текста меняется(RED)(данная часть функции осуществляется с помощью переключателя).

Производится очистка буфера ввода-вывода с клавиатуры, так как при нажатии некоторых клавиш в буфер записываются два числа: 0 и расширенный код, совпадающий, как правило, со scan-кодом клавиши. Далее определяется какая клавиша была нажата, посредством этого осуществляется перемещение по пунктам меню по кругу, если были нажаты “стрелки вверх, вниз”; выход из программы-“ESC”; вход в пункт меню-“ENTER”. Причем при нажатии последней клавиши на экране выделяется окно для вывода информации:

About Программа Translit, осуществляет транслитерацию.

Автор: Пашкова Ольга, группа Р-220б.

Help Пользуйтесь клавишами стрелки 'вверх','вниз',

а также 'Enter', для входа в пункт меню.

Translitвыполняется функция translit, описанная выше.

Test выполняется функция test, описанная выше.

Exitосуществляется выход из программы.


“Translit cpp”

- модуль, непосредственно осуществляющий транслитерацию.


Имеет макроопределение

define chunk 10 для минимального количества структур, используется в функции bukvosoch*divide_dick (char *d, int *count)..

Содержит структуру bukvosoch, элементами которой являются подстрока слева от “-” (русские буквы) в словаре, подстрока справа от “-” (латинские буквы) в словаре и длина key (в байтах).

Содержит следующие функции:

  • char * read_dick (char *filename);

  • bukvosoch *divide_dick (char *d, int *count);

  • int sortf (const void *a, const void *b);

  • void prepare_dick(bukvosoch *w, int count);

  • void translit(char *dict,char *text, char *output).


-char * read_dick (char *filename)

Получает указатель на имя файла – словаря. Возвращает указатель на область памяти, куда был считан словарь. Если произошла одна из ошибок, описанных ниже, функция возвращает значение NULL.

Функция открывает имеющийся словарь (с атрибутом «только для чтения»), определяет его размер. Если файл оказался пустым, программа выдает сообщение:

Словарь слишком мал!

и закрывает файл. В противном случае выделяется область памяти для словаря. Если нет свободного места в памяти, то выдается сообщение

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

В отсутствии ошибки происходит считывание содержимого файла в выделенную область памяти, причем в конец файла приписывается нуль с целью предохраниться от “мусора”. Закрывается словарь, пришедший в функцию.

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


-bukvosoch *divide_dick (char *d, int *count)

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

Выделяется память, размером в chunk структур bukvosoch, так как изначально неизвестно какой обьем памяти понадобится. Если нет свободной памяти, то выдается сообщение об ошибке:

Нет памяти!

При удачном выделении памяти определяется длина файла. В цикле for проверяется каждый символ строки. При обнаружении ‘\n’(asci-кода “ENTER”) заменяется на нуль, причем каждая такая замена учитывается счетчиком k. Если их количество превысило (chunk-1)(получающийся массив структур начинается с нулевого элемента), то производится изменение размера ранее выделенной памяти (перевыделение памяти ) до размера n*chunk, где n- число перевыделений.В случае отсутствии памяти появляется сообщение об ошибке, указанной выше, и освобождается ранее выделенный блок динамически распределяемой памяти, функция возвращает NULL. Данная функция представляет каждую структуру виде строки русских символов (key), остальные ее элементы приравнивает к нулю. Определение числа получившихся структур осуществляется так: k+1.




-int sortf (const void *a, const void *b)

Является аргументом функции qsort.Получает два указателя с квалификатором типа-const, т.е. имеющих постоянное значение (доступны только для чтения). Осуществляет сравнение элементов key структур по длине и возвращает результат сравнения (положительное число, 0, отрицательное число).


-void prepare_dick(bukvosoch *w, int count)

Получаем массив структур и число структур в массиве (число элементов массива). Функция ничего не возвращает.

Циклом for осуществляется проверка словаря на корректность. При обнаружении следующих ошибок: хотя бы одна структура не имеет ’-’, в структуре отсутствует элемент key или value программа выдает сообщение, указывая ошибочную запись с номером соответствующей строки:

Предупреждение! (7) строчка словаря 'вv' записана некорректно!

Структура с ошибкой обнуляется. Подстрока после найденного ‘-’ обозначается элементом структуры value, определяется и значение keylen.

После этого производится сортировка структур по длине key при использовании функции сравнения, определенной выше, описание функции qsort производится в пункте “Некоторые функции из HELPa”.


-void translit(char *dict,char *text, char *output)

Получает указатели на имена файлов, указанных в командной строке. Ничего не возвращает.

Функция проверяет наличие всех обязательных аргументов в командной строке и существование указанных файлов. При обнаружении ошибки заканчивает свою работу(соответствующее сообщение выдает функция usage, содержащаяся в модульном файле “Menu.cpp”).

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

Ошибка при открытии файла для выходного потока!

Осуществляется считывание словаря в память (read_dick), производится разделение полученной строки в памяти на подстроки-структуры(divide_dick), затем каждая строка представляется в виде элементов структуры(prepare_dick). При выполнении этих трех шагов возможны сообщения:

Ошибка при чтении словаря!

Ошибка при разбиении словаря (нет памяти).

при этом функция завершает свою работу.

При удачном результате определяется длина key нулевого элемента массива структур и выделяется память для “окошка” этой длины. В случае отсутствия свободной памяти на экране появляется сообщение:

Нет свободной памяти для window.

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

В противном случае производится открытие файла с текстом для чтения. При неудаче программа выдает ошибку:

Невозможно открыть файл для перевода!

При удачном открытии файла “окошко” заполняется нулями с целью предохраниться от “мусора”, затем в него считывается строка из файла такой же длины и по всем структурам осуществляется поиск key, входящего в эту строку(cравнение осуществляется с начала “окошка”). Если key был найден, то соответствующий элемент структуры value записывается в output файл и (или) выводится на экран, а “окошко” будет передвинуто на число равное keylen (транслитерация происходит в бесконечном цикле). Если “окошко” снова заполнилось нулями, то выходим из цикла. Производится закрытие файлов и очистка динамической памяти.


“Test.сpp”

- модуль, осуществляющий тестирование транслитерации.

  • void translit(char *,char *, char *);

  • int test ( ).

Включает в себя прототип функции translit, описанной выше. Причем имена файлов прописываются в функции, обязательно наличие всех файлов.


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

1-файлы одинаковы;

0-файлы различны.

Открываются для чтения файлы, записанные в функции fopen: tresult.txt, tcorrect.txt.При невозможности открытия на экран выводится сообщение об ошибке:

Ошибка при открытии файла(ов).

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


Некоторые функции из HELPa

- FILE f open (const char *filename, const char *mode) открывает файл, на имя которого указывает filename, в режиме зазываемом mode и связывает его с протоколом. Указатель на поток является значением, возвращаемым функцией.

- char *strchr (const char *str, intc) ищет в строке str первое вхождение символа с.

-void*memset (void *s, int c, unsigned n) записывает во все байты области памяти s значение с. Длина области s равна n байт.

- fread (void *buf, size_t size, sizet sizebl, FILE *fp) считывает sizet sizebl количество блоков из fp в buf, размером size_t size. Возвращает количество считанных блоков, даже если считалась половина блока.

-int strncmp (const char *str1, const char *str2, int kol) сравнивает части строк str1 и str2, причем рассматривая str1str2.

- void *memmove (roid *dest, const void *src, int n) копирует блок длиной n байтов из src в dest, возвращает указатель dest.

-void qsort(void base,size_t nelem, size_t width, int(*fcmp)(const void *p1,const void *p2)) – функция быстрой сортировки массива. Параметры: base- указатель на начало массива сортируемых элементов (адрес нулевого элемента массива), nelem-количество сортируемых элементов в массиве, width -размер элемента массива в (байтах), fcmp -указатель на функцию сравнения.Функция ничего не возвращает.


-int feof (FILE *stream) проверяет, достигнут ли конец файла, связан с потоком stream.
































ТЕСТИРОВАНИЕ

Как говорилось ранее, тестирование программы осуществляется при выборе пункта меню “Test”. Производится сравнивание посимвольно двух файлов: первым является файл с произведенным транслитом данным приложением, второй был произведен в результате транслитерации вручную. Тестирование прошло удачно и на экране появилось сообщение:

Тест удачно пройден.

Также для тестирования были смоделирована ситуация(модификация в функции translit), при которой не верно была произведена транслитерация.При этом программа выдало сообщение:

Тест не пройден.








































ЗАКЛЮЧЕНИЕ

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

Словари программы созданы в вольной интерпретации разработчика.

Достоинством программы является ее простота.

Реализация поставленной задачи была осуществлена при создании проекта, содержащего три файла, с использованием текстого диалога с пользователем путем выбора пунктов меню. Следует отметить, что разработчику пришлось столкнуться со следующей проблемой: ”выигрываем в памяти- проигрываем в скорости”(например, при использовании консольных функций ввода-вывода, при выполнении функции divide_dick в модуле Translit.cpp).

Программа написана в соответствии с правилами хорошего стиля:

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

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

Программа была протестирована в соответствии с пунктом ТЕСТИРОВАНИЕ данного курсового проекта.

























Библиографический список


  1. Подбельский В.В., Фомин С.С. Программирование на языке Си: Учеб. пособие. – 2-е доп. изд. – М.: Финансы и статистика, 1999. – 576 с.

  2. Программирование в языке СИ. Организация ввода-вывода: Методические указания к лабораторным занятиям / С.П.Трофимов. Екатеринбург. Изд-во УГТУ,1998.22c.

  3. Керниган Б.,Ритчи Д.Язык программирования СИ / Пер. с англ. –СПб.: “Невский Диалект”, 2001. – 351 с.











































ПРИЛОЖЕНИЕ 1. ТЕКСТ ПРОГРАММЫ

Menu.cpp

#include

#include

#include

#include

#include

#include


void translit(char *, char*,char*);

int test();

//#####################################

void usage(char *name)

{

printf("Используйте: %s словарь файл_для_перевода [переведенный файл]",name);

}

//#####################################

void main(int argc,char *argv[])

{

clrscr();

if (argc<3>

{

usage(argv[0]);

return;

}

else if(argc==4)

freopen(argv[3],"wt",stdout);

else clrscr();

int k=0,z=0;

while(1)

{

window(3,3,30,11);

textcolor(WHITE);

gotoxy(1,1);

cprintf("About\n\r");

cprintf("Help\n\r");

cprintf("Translit\n\r");

cprintf("Test\n\r");

cprintf("Exit\n\r");

switch(k)

{

case 0: gotoxy(1,1);

textcolor(RED);

cprintf("About");

break;

case 1: gotoxy(1,2);

textcolor(RED);

cprintf("Help");

break;

case 2: gotoxy(1,3);

textcolor(RED);

cprintf("Translit");

break;

case 3: gotoxy(1,4);

textcolor(RED);

cprintf("Test");

break;

case 4: gotoxy(1,5);

textcolor(RED);

cprintf("Exit");

break;

}

textcolor(WHITE);

if(!(z=getch()))

z=getch();

if(z==80)

{k=k==4?0:k+1;}

else if(z==72)

{k=k==0?4:k-1;}

else if(z==27)

return ;

else if(z==13)

{

window(15,3,80,20);

clrscr();

switch(k)

{

case 0:cprintf("Программа Translit осуществляет транслитерацию."

"Автор: Пашкова Ольга, группа Р-220б");

break;

case 1:cprintf("Пользуйтесь клавишами стрелки 'вверх','вниз', "

"а также 'Enter', для входа в пункт меню");

break;

case 2:translit(argv[1],argv[2],argc==4?argv[3]:NULL);

break;

case 3:cprintf(test()?"Тест удачно пройден":"Тест не пройден");

break;

case 4:exit(0);

break;

}

}

}

}


Translit cpp”

include

include

include //для filelength

include

include

include


define chunk 10


struct bukvosoch

{

char *key; // строка в словаре, стоящая слева от '-'

char *value; // строка в словаре, стоящая слева от '-'

unsigned keylen; //длина key в байтах

};

/#####################################

/выделение памяти и чтение файла-словаря в выделенную область памяти

char *read_dick(char *filename)

{

FILE *dic=NULL;

dic=fopen(filename,"rt");

if (!dic)

{

cprintf("\nОшибка при открытии файла-словаря!");

return NULL;

}

long len=filelength(dic->fd);

if (len==0)

{

cprintf("\nСловарь слишком мал!");

fclose(dic);

return NULL;

}

unsigned l=(unsigned)(++len);

char *dick=(char *)malloc(l);

if(dick==NULL)

{

cprintf("\nНет памяти для хранения словаря");

fclose(dic);

return NULL;

}

fread(dick,l,1,dic); //считывание словаря в память

dick[l-1]=0;

fclose(dic);

return dick;

}

/#####################################

/разбиение считанной 'строки' на строки

bukvosoch* divide_dick(char *d, int *count)

{

int ps=chunk;

bukvosoch *items=(bukvosoch*)malloc(ps*sizeof(bukvosoch));

if (items==NULL)

{

cprintf("\nНет памяти!");

return NULL;

} //нет памяти

unsigned l=strlen(d);

char *start=NULL;

start=d;

int k=-1;

for (unsigned i=0; i

if (d[i]=='\n')

{

d[i]=0;

k++;

if (k>ps-1)

{

ps+=chunk;

bukvosoch *qwe=(bukvosoch*)realloc(items,ps*sizeof(bukvosoch));

if(qwe==NULL)

{

free(items);

cprintf("\nНет памяти!");

return NULL;

}

else items=qwe;

}

items[k].key=start;

items[k].value=NULL;

items[k].keylen=0;

start=d+i+1;

}

*count=k+1;

return items;

}

/#############################################

/функция для сравнения длин key в элементах массива структур

int sortf(const void *a, const void *b)

{

return ((bukvosoch*)b)->keylen-((bukvosoch*)a)->keylen;

}

/#####################################

/представление строк в виде "key-value",сортировка их по длине key

void prepare_dick(bukvosoch* w, int count)

{

for(int i=0; i

{

char *e=strchr(w[i].key,'-');

if (e==NULL || e==w[i].key || e==w[i].key+w[i].keylen-1)

{

cprintf("\nПредупреждение! (%d) строчка словаря '%s' записана некорректно!\n",i,w[i].key);

w[i].key=NULL;

w[i].value=NULL;

w[i].keylen=0;

continue;

}

*e=0;

w[i].value=e+1;

w[i].keylen=(e-w[i].key);

}

qsort(w,count,sizeof(bukvosoch),sortf);

}

//#############################################

void translit(char*dict,char*text,char *output)

{

if (!dict || !*dict || !text || !*text) return;

FILE*ou=NULL;

if (output)

{

ou=fopen(output,"wt");

if (!ou)

{

cprintf("Ошибка при открытии файла для выходного потока!");

return;

return;

}

}


clrscr();

char *d=read_dick(dict);

if (!d)

{

cprintf("Ошибка при чтении словаря!");

return;

}

int num=0;

bukvosoch *qwe=divide_dick(d,&num);

if (!qwe)

{

cprintf("Ошибка при разбиении словаря (нет памяти)");

return;

}

prepare_dick(qwe,num);

int wl=strlen(qwe[0].key);

char *window=(char*)malloc(wl+1);


if (window==NULL)

{

free(qwe);

free(d);

cprintf("Нет свободной памяти для window");

return;

}

window[wl]=0;

char found=0;

int i;

//поиск key в источнике

char *where=window;

char count=wl;

int a=0,exit=0;

FILE *source=fopen(text,"rt");

if (source==NULL)

{

free(qwe);

free(d);

cprintf("Невозможно открыть файл для перевода!");

return;

}

while(1)

{

memset(where,0,count);

a=fread(where,count,1,source);

if (a==0) //нет больше информации для чтения-window пусто

{

exit=1;

for(int i=0; i

if (window[i])

{

exit=0;

break;

}

if (exit) break;

}

found=0;

for (i=0; i

{

if(strncmp(qwe[i].key,window,qwe[i].keylen)==0)

{

found=1;

break;

}


}

if (found)

{

if (output)

fprintf(ou,qwe[i].value);

else

cprintf("%c",qwe[i].value);

count=qwe[i].keylen;

}

else

{

if (output)

fprintf(ou, "%c", window[0]);

else

cprintf("%c", window[0]);

count=1;

}

where=window+wl-count;

memmove(window,window+count,wl-count);

}//конец while

free(window);

fclose(source);

if (output)

fclose(ou);

free(qwe);

free(d);

}


Test.сpp”

#include

#include

#include


void translit(char *,char*,char*);

//#####################################

int test()

{

translit("tdict.txt","tsource.txt", "tresult.txt");

FILE *f1=fopen("tcorrect.txt","rt");

FILE *f2=fopen("tresult.txt","rt");

if (!f1 || !f2)

{

printf("Ошибка при открытии файла(ов).");

return 0;

}

char buf1[11],buf2[11];

buf1[10]=0;buf2[10]=0;

char equal=1;

while(1)

{

fread(buf1,10,1,f1);

fread(buf2,10,1,f2);

if (memcmp(buf1,buf2,10))

{

equal=0;

break;

}

if (feof(f1) || feof(f2))

break;

}

return equal;

}












ПРИЛОЖЕНИЕ 2. Экранные формы


About Программа Translit осуществляет транслитерацию.

Help Автор: Пашкова Ольга, группа Р-220б.

Translit

Test

Exit


About Пользуйтесь клавишами стрелки 'вверх','вниз', а также 'ENTER' дл

Help входа в пункт меню.

Translit

Test

Exit


About

Help Ошибка при открытии файла-словаря!Ошибка при чтении словаря!

Translit

Test

Exit


About РТФ-chempion!

Help

Translit

Test

Exit


About РТФ-4eMn|/|oH!

Help

Translit

Test

Exit


About Тест удачно пройден.

Help

Translit

Test

Exit












1Авиация и космонавтика
2Архитектура и строительство
3Астрономия
 
4Безопасность жизнедеятельности
5Биология
 
6Военная кафедра, гражданская оборона
 
7География, экономическая география
8Геология и геодезия
9Государственное регулирование и налоги
 
10Естествознание
 
11Журналистика
 
12Законодательство и право
13Адвокатура
14Административное право
15Арбитражное процессуальное право
16Банковское право
17Государство и право
18Гражданское право и процесс
19Жилищное право
20Законодательство зарубежных стран
21Земельное право
22Конституционное право
23Конституционное право зарубежных стран
24Международное право
25Муниципальное право
26Налоговое право
27Римское право
28Семейное право
29Таможенное право
30Трудовое право
31Уголовное право и процесс
32Финансовое право
33Хозяйственное право
34Экологическое право
35Юриспруденция
36Иностранные языки
37Информатика, информационные технологии
38Базы данных
39Компьютерные сети
40Программирование
41Искусство и культура
42Краеведение
43Культурология
44Музыка
45История
46Биографии
47Историческая личность
 
48Литература
 
49Маркетинг и реклама
50Математика
51Медицина и здоровье
52Менеджмент
53Антикризисное управление
54Делопроизводство и документооборот
55Логистика
 
56Педагогика
57Политология
58Правоохранительные органы
59Криминалистика и криминология
60Прочее
61Психология
62Юридическая психология
 
63Радиоэлектроника
64Религия
 
65Сельское хозяйство и землепользование
66Социология
67Страхование
 
68Технологии
69Материаловедение
70Машиностроение
71Металлургия
72Транспорт
73Туризм
 
74Физика
75Физкультура и спорт
76Философия
 
77Химия
 
78Экология, охрана природы
79Экономика и финансы
80Анализ хозяйственной деятельности
81Банковское дело и кредитование
82Биржевое дело
83Бухгалтерский учет и аудит
84История экономических учений
85Международные отношения
86Предпринимательство, бизнес, микроэкономика
87Финансы
88Ценные бумаги и фондовый рынок
89Экономика предприятия
90Экономико-математическое моделирование
91Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
- Алло, это бордель?
- Нет, это сауна...
- А как мне позвонить в бордель?
- Перезвоните через два часа.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по радиоэлектронике "Латинизация кириллицы", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2017
Рейтинг@Mail.ru