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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 20.12.2012
Размер файла 46,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

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

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

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

Студент

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

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

Glyazhu, podnimaetsya medlenno v goru

Loshadka, vezusсhaya khvorostu voz.

I, shestvuya vazhno, v spokojjstvii chinnom,

Loshadku vedet pod uzdcy muzhichok

V bol'shikh sapogakh, v polushubke ovchinnom,

V bol'shikh rukavicakh... a sam s nogotok!

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

http://ru.wikipedia.org/wiki/

http://www.codenet.ru/

ПРИЛОЖЕНИЕ

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

#include <string.h>

#include <dos.h>

#include <stdlib.h>

#define stop while(!kbhit())

struct slov_elem //Структура словаря

{

char rus[100],eng[100];

};

slov_elem *slov; //Массив элементов(словарь)

int numword=0; //Количество элементов словаря

void hello();

void test();

char *trans(char *t_rus);

void readsl(char *namesl);

char *read_tr(char *inputf);

void savetext(char *text);

void add(char *ins_s, char **str, int n);

void delet(char **str, int n, int N);

void change(char *rus, char *eng, char **et);

long file_size(FILE *stream);

void hello()

{

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

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

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

}

void test()

{

char *slname="slovar.txt";

char *test=NULL;

test = "test.txt";

char *test_rus=read_tr(test);

if(test_rus==NULL)

{

clrscr();

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

stop;

return;

}

readsl(slname);

char *englt=trans(test_rus);

if(strcmp(englt,"shiroko"))

{

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

stop;

return;

}

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

{

free(slov[i].rus);

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

free(slov[i].eng);

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

} */

free(slov);

free(englt);

free(test_rus);

}

void savetext(char *text)

{

FILE* file;

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

if(file)

fprintf(file,text);

}

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

{

char *a=NULL, *ostat=NULL;

int len1=strlen(*str);

if(n>len1)

return;

int len2=strlen(ins_s);

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

a=*str+n;

ostat=(char *)malloc(strlen(a)+1);

if(ostat==NULL)

{

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

stop;

exit(1);

}

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

strcpy(a,ins_s);//добавили ins_s

strcat(*str, ostat);//приписали остаток

free(ostat);

}

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

{

char *ostat=NULL, *a=NULL;

int len=strlen(*str);

if(n>len)

if(len<n+N)

N=len-n;

a=*str+n; //настраиваем указатель "а" на удаляемую подстроку

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

if(ostat==NULL)

{

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

stop;

exit(1);

}

strcpy(ostat,a+N);

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

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

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

strcpy(a,ostat);

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

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

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

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

free(ostat);

}

void 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)

{

delet(et,position,strlen(rus));

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

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

buf=strstr(*et,rus);

position=buf-*et;

}

}

char *trans(char *t_rus)

{

char *englt=strdup(t_rus); //копирование текста в englt

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

{

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

}

return englt;

}

void readsl(char *namesl)

{

FILE* fp;

fp=fopen(namesl, "rt");

if(fp==NULL)

{

clrscr();

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

stop;

return;

}

numword=0;

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

{

fscanf(fp,"%s", (*slov).rus);

fscanf(fp,"%s", (*slov).eng);

numword++;

slov=(slov_elem *)realloc(slov, sizeof(slov_elem)*numword);

strcpy(slov[numword-1].rus,(*slov).rus);

strcpy(slov[numword-1].eng,(*slov).eng);

}

fclose(fp);

}

long file_size(FILE *stream)

{

//была ошибка:Conversion may lose significant digits

long curpos, length;

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

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

//перейти в конец файла

fseek(stream,0L,SEEK_END);

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

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

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

fseek(stream,curpos,SEEK_SET);

return length;

}

char *read_tr(char *inputf)

{

char *buf=NULL;

FILE* fp=fopen(inputf, "rb");

if(fp==NULL)

{

return NULL;

}

long fsize=file_size(fp);

buf=(char *)malloc(fsize+1);

if(buf==NULL)

{

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

stop;

exit(1);

}

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

buf[fsize]='\0';

fclose(fp);

return buf;

}

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

{

clrscr();

int blocknum=0;

heapinfo hi;

hi.ptr=NULL;

while (heapwalk(&hi)==_HEAPOK)

if (hi.in_use)

++blocknum;

char *namesl=NULL;

if(argc<2)

{

hello();

stop;

return;

}

if(argc<3)

{

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

{

test();

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

stop;

return;

}

}

else

{

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

stop;

return;

}

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

{

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

stop;

return;

}

char *t_rus=read_tr(argv[1]);

if(t_rus==NULL)

{

clrscr();

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

stop;

return;

}

printf("Входной файл: %s\n",argv[1]);

namesl="slovar.txt";

readsl(namesl);

char *englt=trans(t_rus);

savetext(englt);

free(englt);

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

{

free(slov[i].rus);

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

free(slov[i].eng);

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

} */

free(slov);

free(t_rus);

if (heapcheck()==_HEAPCORRUPT)

{

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

}

hi.ptr=NULL;

while (heapwalk(&hi)==_HEAPOK)

if (hi.in_use)

--blocknum;

if (blocknum)

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

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

stop;

}

1. Размещено на www.allbest.ru


Подобные документы

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

    курсовая работа [496,2 K], добавлен 17.05.2015

  • Создание приложения для шифрования–дешифрования текста тремя алгоритмами (алгоритм "Цезаря","Модифицированного Цезаря", "Скитала"). Исходный текст компонента. Инструкция пользователя, возможность просмотра примерного алгоритма. Исходный текст программы.

    курсовая работа [2,8 M], добавлен 27.02.2015

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

    лабораторная работа [35,3 K], добавлен 04.09.2014

  • Составление транслятора на языке С для перевода кода программы из языка Pascal в код программы на языке Cи. Распознавание и перевод конструкций: for, type, function, integer. Вешняя спецификация, описание, структура, текст программы; распечатка текстов.

    курсовая работа [287,8 K], добавлен 24.06.2011

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

    курсовая работа [567,5 K], добавлен 03.07.2011

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

    презентация [1,2 M], добавлен 19.02.2014

  • Разработка сканера, который считывает литеры первоначальной, исходной программы и строит символы, исходной программы. Глобальные переменные и необходимые подпрограммы. Диаграмма состояний. Текст программы. Инструкция пользователю. Тестовый пример.

    курсовая работа [3,4 M], добавлен 05.07.2008

  • Панель элементов: "данные", "компоненты". Описание структуры базы данных. Блок-схема реализации программы, техническое описание. Вид окна "ввод пароля". Список элементов пользовательского интерфейса. Исходный код программы. Инструкция пользователя.

    курсовая работа [983,0 K], добавлен 29.09.2016

  • Постановка и актуальность задачи написания программы для перевода текстов с транслита. Метод ее решения, входные и выходные данные. Список процедур и функций выполняемые программой. Ее структура: главная форма, форма "О программе" и "Редактор алфавита".

    курсовая работа [259,8 K], добавлен 26.03.2009

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

    контрольная работа [29,0 K], добавлен 07.12.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.