Транслитерация кириллицы

 

Федеральное агентство по образованию

ГОУ ВПО «Уральский государственный технический университет - УПИ имени первого Президента России Б.Н. Ельцина»

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









Транслитерация кириллицы

Пояснительная записка к курсовой работе

по дисциплине «Программирование на языке высокого уровня»




Руководитель

Трофимов С.П.

доцент, к. ф.-м. н.

Студент

Путинцев А.В.

гр. Р-28031






2009

СОДЕРЖАНИЕ


ВВЕДЕНИЕ

ОБЗОР ПРЕДМЕТНОЙ ОБЛАСТИ

ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ

ИНСТРУКЦИЯ ПРОГРАММИСТА

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

ЗАКЛЮЧЕНИЕ

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

ПРИЛОЖЕНИЕ


ВВЕДЕНИЕ


В данной курсовой работе требуется написать программу, на языке программирования Си, под названием «Транслитерация кириллицы».

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


ОБЗОР ПРЕДМЕТНОЙ ОБЛАСТИ


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

Например:

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

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

Классификация транслитерации (по строгости представления):

Строгая

Замена каждого знака исходного текста только одним знаком другой письменности (а?a, б?b, в?v…).

Ослабленная

Замена некоторых знаков исходного текста сочетаниями двух или более знаков другой письменности (ж?zh, ч?ch, я?ya…).

Расширенная

Представление некоторых сочетаний знаков исходного текста особым образом (ый?y).

На практике транслитерация применяется ограниченно, большей частью в сфере формальной обработки данных (например, при составлении в единой письменности каталога библиотеки из книг на разных языках). Для воспроизведения же в русском тексте иностранных имен и названий предпочтение в большинстве случаев отдается так называемой практической транскрипции, учитывающей не только письменную форму исходных слов, но и их произношение, а также исторические соображения. В чистом виде транслитерация применяется для немногих языков: таковы, например, системы передачи кириллицей китайских и японских слов (см. статьи «Система Палладия» и «Система Поливанова», соответственно). Транслитерация получила широкое распространение в SMS в эпоху нерусифицированных сотовых телефонов. Широко используется вместо кириллицы при работе на нерусифицированных компьютерах. Очень небольшое количество программ и сайтов (например, Яндекс) предлагают виртуальную русскоязычную клавиатуру, которой удобно пользоваться только слепым методом.

транслитерация кириллица программа алфавит

ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ


Программа представляет собой архив, содержащий в себе: TR.EXE (сама программа), slovar.txt (словарь) и test.txt (необходим для проведения тестирования).

Перед запуском программы необходимо создать файл с расширением *.txt. В нем написать русский текст, который необходимо латинизировать. Далее пользователь должен запустить программу через командную строку, где требуется ввести название исходного файла, содержащий русский текст (пример: tr.exe mytext.txt). В программе предусмотрена возможность провести тест. Запуск можно осуществить с помощью параметра -t, который передается через командную строку (пример: tr.exe -t). Замечание: тест возможен, если присутствует файл test.txt.

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

ИНСТРУКЦИЯ ПРОГРАММИСТА


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

Функция void hello(); отвечает за приветствие. Ничего не получает и не возвращает никаких данных.

Функция void test(); необходима для теста. Ничего не получает и не возвращает.

Функция char *trans(char *t_rus); отвечает за транслитерацию. Получает указатель на русский текст и возвращает переведенный.

Функция void readsl(char *namesl); для чтения данных из словаря. Получает имя исходного файла и ничего не возвращает.

Функция char *read_tr(char *inputf); для чтения данных из файла с русским текстом. Возвращает *read_tr.

Функция void savetext(char *text); получает данные для сохраняемого текста. Ничего не возвращает.

Функция void add(char *ins_s, char **str, int n); отвечает за добавление подстроки. Получает указатель на eng,двойной на строку и данные о позиции, где осуществляется добавление. Ничего не возвращает.

Функция void delet(char **str, int n, int N); отвечает за удаление подстроки. Получает строку, позицию и strlen(rus). Ничего не возвращает.

Функция void change(char *rus, char *eng, char **et); осуществляет замену символов с использованием функций add и delet. Получает значения из структуры, а также данные о тексте, где необходимо произвести замену. Ничего не возвращает.

Функция long file_size(FILE *stream); необходима для вычисления размеров входного файла.


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


В файле input.txt:

Однажды, в студеную зимнюю пору,

Я из лесу вышел; был сильный мороз.

Гляжу, поднимается медленно в гору

Лошадка, везущая хворосту воз.


И, шествуя важно, в спокойствии чинном,

Лошадку ведет под уздцы мужичок

В больших сапогах, в полушубке овчинном,

В больших рукавицах... а сам с ноготок!


В файле trans.txt:

Odnazhdy, v studenuyu zimnyuyu poru,

Ya iz lesu vyshel; byl sil'nyjj moroz., podnimaetsya medlenno v goru, vezusсhaya khvorostu voz.

, shestvuya vazhno, v spokojjstvii chinnom,vedet pod uzdcy muzhichokbol'shikh sapogakh, v polushubke ovchinnom,bol'shikh rukavicakh... a sam s nogotok!


ЗАКЛЮЧЕНИЕ


В ходе данной курсовой работы была выполнена задача написания программы на языке высокого уровня Си по теме «Транслитерация кириллицы».

Работа была выполнена согласно всем требованиям, поставленным по данной теме.


БИБЛИОГРАФИЧЕСКИЙ СПИСОК


Керниган Б.В., Ричи Д. Язык программирования Си М.: Санкт-Петербург 2004, 351с

Громов Ю.Ю.,Татаренко С.И. Программирование на языке СИ: Учебное пособие. -Тамбов,1995.- 169 с.

#"justify">ПРИЛОЖЕНИЕ


#include <stdio.h>

#include <conio.h>

#include <alloc.h>

#include <string.h>

#include <dos.h>

#include <stdlib.h>

#define stop while(!kbhit())slov_elem //Структура словаря

{rus[100],eng[100];

};_elem *slov; //Массив элементов(словарь) numword=0; //Количество элементов словаря

void hello();

void test();*trans(char *t_rus);readsl(char *namesl);*read_tr(char *inputf);savetext(char *text);add(char *ins_s, char **str, int n);delet(char **str, int n, int N);change(char *rus, char *eng, char **et);file_size(FILE *stream); hello()

{

printf("Программа для транслитераций.\nВозможные действия:\n\

. Запустить через командную строку, и ввести название файла.\n\

. Параметр в консоле '-t' запускает тест программы.");

}test()

{*slname="slovar.txt";*test=NULL;= "test.txt";*test_rus=read_tr(test);(test_rus==NULL)

{();("Ошибка теста 1: не найден или поврежден файл test.txt.");

stop;;

}(slname);*englt=trans(test_rus);(strcmp(englt,"shiroko"))

{

printf("Ошибка теста 2: поврежден словарь или задан пользовательский.");

stop;;

}

/* for(int i=0; i<numword; i++)

{(slov[i].rus);

(*slov).rus[i]=NULL;(slov[i].eng);

(*slov).eng[i]=NULL;

} */(slov);(englt);(test_rus);

}savetext(char *text)

{* file;=fopen("trans.txt","wb");(file)(file,text);

}add(char *ins_s, char **str, int n)

{*a=NULL, *ostat=NULL;len1=strlen(*str);(n>len1);len2=strlen(ins_s);

*str=(char *)realloc(*str, len1+len2+1);//удлинение строки=*str+n;=(char *)malloc(strlen(a)+1);(ostat==NULL)

{("Недостаточно памяти");;

exit(1);

}

strcpy(ostat, a);//сохранение остатка строки

strcpy(a,ins_s);//добавили ins_s(*str, ostat);//приписали остаток(ostat);

}delet(char **str, int n, int N)

{*ostat=NULL, *a=NULL;len=strlen(*str);(n>len)(len<n+N)=len-n;=*str+n; //настраиваем указатель "а" на удаляемую подстроку

ostat=(char *)malloc(strlen(a)+1);//выделяем под остаток память

if(ostat==NULL)

{

printf("Недостаточно памяти");

stop;(1);

}(ostat,a+N);

/*Записываем в остаток все, что после удаляемой подстроки.

"а" указывает на начало удаляемой строки, она содержит count символов, тогда

а+N указывает на конец удаляемой строки */

strcpy(a,ostat);

/*Пишем остаток текста поверх исходного текста с того места, где когда-то начиналась подстрока.

В итоге в тексте сохраняется все, кроме подстроки */

*str=(char *)realloc(*str,len-N+1);

//строка укоротилась, следовательно можно укоротить под неё память

free(ostat);

}change(char *rus, char *eng, char **et)

{

char *buf=strstr(*et,rus); //возвращает указатель на первое вхождение rus в et.

//настраиваем указатель buf на первое вхождение подстроки, которую надо заменить в исходной строке.

int position=buf-*et; //была ошибка:Conversion may lose significant digits

//вычисляем позицию подстроки относительно начала строки

//если подстрока в строке не найдена, то получаем отрицательное число,

//так как buf будет равен NULL

while(position>=0)

{

(et,position,strlen(rus));

//удаляем подстpоку

add(eng,et,position);//вставляем на её место новую подстроку.

buf=strstr(*et,rus);=buf-*et;

}

}*trans(char *t_rus)

{*englt=strdup(t_rus); //копирование текста в englt(int i=0; i<numword; i++)

{(slov[i].rus, slov[i].eng, &englt);

}englt;

}readsl(char *namesl)

{* fp;=fopen(namesl, "rt");(fp==NULL)

{();("Словарь не найден.");;;

}=0;(!feof(fp))//обнаруживает конец файла

{(fp,"%s", (*slov).rus);(fp,"%s", (*slov).eng);++;=(slov_elem *)realloc(slov, sizeof(slov_elem)*numword);(slov[numword-1].rus,(*slov).rus);(slov[numword-1].eng,(*slov).eng);

}(fp);

}file_size(FILE *stream)

{

//была ошибка:Conversion may lose significant digits curpos, length;

//сохраняет текущее положение указателя

curpos=ftell(stream); //Возвращает положение указателя текущей позиций файла

//перейти в конец файла(stream,0L,SEEK_END);

//получит текущее положение указателя

length=ftell(stream);//возвращает размер файла

//восстановит старое положение

fseek(stream,curpos,SEEK_SET);

return length;

}*read_tr(char *inputf)

{*buf=NULL;* fp=fopen(inputf, "rb");(fp==NULL)

{NULL;

}fsize=file_size(fp);=(char *)malloc(fsize+1);(buf==NULL)

{

printf("Недостаточно памяти");

stop;

exit(1);

}

fread(buf,1,fsize,fp);//fread(сюда считывает, длина элемента,количество эл., откуда считает)

buf[fsize]='\0';(fp);buf;

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

{();blocknum=0;hi;.ptr=NULL;(heapwalk(&hi)==_HEAPOK)(hi.in_use)

++blocknum;*namesl=NULL;(argc<2)

{();;;

}(argc<3)

{(argv[1][0]=='-'&&argv[1][1]=='t')

{();("Тест закончен.");;;

}

}

{("Ошибка при вводе в консоль.");;;

}(strlen(argv[1])>10)

{

printf("Имя входного файла слишком длинное.");

stop;;

}*t_rus=read_tr(argv[1]);(t_rus==NULL)

{();("Файл не найден.");

stop;

return;

}("Входной файл: %s\n",argv[1]);="slovar.txt";(namesl);*englt=trans(t_rus);(englt);(englt);

/* for(int i=0; i<numword; i++)

{(slov[i].rus);

(*slov).rus[i]=NULL;(slov[i].eng);

(*slov).eng[i]=NULL;

} */(slov);(t_rus);(heapcheck()==_HEAPCORRUPT)

{("Куча повреждена.\n");

}.ptr=NULL;(heapwalk(&hi)==_HEAPOK)(hi.in_use)

-blocknum; (blocknum)

printf("В куче есть занятые блоки.\n");

printf("Перевод сохранен в trans.txt");

stop;

}

1.


Федеральное агентство по образованию ГОУ ВПО «Уральский государственный технический университет - УПИ имени первого Президента России Б.Н. Ельцина»

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ