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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    7,78 Кб
  • Опубликовано:
    2012-11-19
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

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

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

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







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

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

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


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

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

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

Студент

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

гр. Р-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.

Похожие работы на - Транслитерация кириллицы

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!