Програма формування символьних рядків

Опис функціональних можливостей програми. Розробка абстрактного типу даних відповідно концепції об'єктно-орієнтованого програмування. Формування тривимірного масиву. Уникнення появи небажаних символів. Графічне відображення літер. Розробка алгоритму.

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

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

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

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

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

Вступ

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

При формуванні символів в знакогенераторах може використовуватися піксельний або векторний принцип дії.

При піксельному формуванні кожному символу відповідає прямокутна матриця із заданою кількістю символів. Найчастіше вона має розмір 8х8, 5х7 або 5х8 елементів, що дозволяє створити зображення будь-якої літери чи знаку. Кожна комірка матриці приймає одне з двох можливих значень - 0 або 1.

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

У курсовому проекті складена програма формування символьних рядків, складеної з символів таблиці ASCI за піксельним методом знакогенерування.

1. Постанова задачі

Створити у курсовому проекті абстрактний клас - Алфавіт. Даний клас повинен містити методи формування введеної користувачем літери з визначеного символу.

Вхідні дані: буква або слово заданої довжини.

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

Додатково програма повинна мати допоміжні функції та можливості:

- інтуїтивно зрозуміле меню користувача;

- обробка однієї літери та масиву літер за бажанням користувача;

- перевірка вхідних даних на допустимі значення - літери англійського алфавіту без знаків пунктуації, довжина рядка не більше 9 літер;

- запис сформованого рядка літер з визначеного символу у зовнішній текстовий файл визначений користувачем.

2. Опис функціональних можливостей

За умовами постановки задачі курсового проекту була складена функціональна схема майбутньої програми яка наведена на рисунку 2.1.

Рисунок 2.1 - Функціональна схема

Розроблена програма містить один вихідний файл Alfavit.cpp, та один виконуючий файл Alfavit.exe. При розробці програми були використані такі бібліотечні заголовочні файли, які необхідно підключити за допомогою директиви #include:

<iostream> - містить прототипи потокових функцій вводу-виводу інформації;

<string> - реалізує стандартні рядкові класи і шаблони;

<fstream> - реалізує інструменти для файлового вводу та виводу.

У коді програми був розроблений абстрактний тип даних (атд) - клас Alfavit, який складеться з функцій-членів (методи класу) та даних-членів (властивості класу). Відповідно концепції ООП розроблений АТД складається з закритих та відкритих членів класу.

Закритими (private) членами класу Alfavit є:

int mss[7][72] - цілочисельний масив типу int;

x,y,yn,yk - лічильники внутрішніх циклів;

dl - цілочисельна змінна типу int - довжина введеного слова. string sl - змінна типу string для вводу букви чи слова;

bk - змінна типу string, яка містить букви англійського алфавіту;

char simv[1] - змінна типу char для вводу символу;

char d - змінна типу char для вводу символу для вибору дії;

FILE *fo - змінна типу FILE для роботи з зовнішнім файлом;

До відкритих (public) членів класу Alfavit належать конструктор Alfavit(), який містить формування літер для опрацювання програми, функція menu(), котра виводить інтерактивне меню користувача з вибором дії, функція show(), за допомогою якої відбувається графічне відображення літер на екрані і запис їх у текстовий файл.

Визначаємо конструктор Alfavit(), який не має параметрів і є базовою функцією програми.

Задаємо додатковим змінним необхідного значення:

sm=0; yn=0; yk=8;

Присвоюємо змінній рядок у вигляді переліку рядкових та заголовних літер англійського алфавіту:

bk="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

Формуємо тривимірний масив, який складається з 26 вкладених двомірних масивів (блоків) розміром 7х8 елементів, кожен яких утворює окрему букву англійського алфавіту. Наприклад:

int ms[26][7][8]={{0,0,0,1,1,1,1,0,

0,0,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0},

Для уникнення появи небажаних символів при виводі літер попередньо очищуємо масив mss, заповнивши його пробілами.

for (x=0;x<7;x++)

for (y=0;y<72;y++)

mss[x][y]=' ';

За допомогою функції fopen відкриваємо файл Alf.txt в режимі запису.

fo=fopen("Alf.txt","w");

Викликаємо функцію menu(), яка виведе запит на вибір користувачем певної дії.

po: menu();

Якщо в функції menu() змінній d було присвоєно значення `e', то за допомогою за допомогою оператора безумовного переходу goto буде виконано перехід до мітки exit і програма завершить роботу:

if (d=='e') goto exit;

У випадку, коли в функції menu() було введено літеру чи слово, починаємо перевірку на коректність. Якщо в позиції і змінної sl міститься літера англійського алфавіту, то змінній nb буде присвоєно номер цієї літери, під яким вона міститься в масиві ms, і внутрішній цикл буде перервано.

for(int i=0;i<dl;i++){

for(int j=0;j<52;j++){

if(sl[i]==bk[j]){

nb=j;

if (nb>25) nb-=26;

fn=1; break;}}

Якщо введені користувачем значення відповідають умові - заповнюємо масив mss:

if (fn==1){

for(x=0;x<7;x++)

for(y=yn;y<yk;y++)

mss[x][y]=ms[nb][x-sm][y];

sm++; yn+=8; yk+=8; fn=0; }

У разі введення знаків пунктуаціі чи іншиї символів - буде виведено повідомлення про помилку и буде повторно виведено меню користувача:

else{ cout<<"Ошибочный ввод!"<<endl; goto po;}

Викликаємо функцію show(), яка виведе отриманий масив mss на экран, після чого повертаємося меню.

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

fclose(fo);

Робота програми реалізується за допомогою меню користувача. Визначимо відповідну функцію menu():

void Alfavit::menu()

Виведемо повідомлення про необхідність вибору дії і введемо її номер с клавіатури.

cout<<"\n Выберите действие:\n 1-Вывод буквы\n 2-Вывод слова\n *-Завершение\n ";

cin>>d;

При виборі першої команди, чекаємо ініціалізації необхідної літери та символу:

if (d=='1') {

cout<<" Введите букву: "; cin>>sl;

cout<<" Введите символ: "; cin>>simv; cout<<'\n';

Перевіряємо коректність вводу на кількість набраних символів. Для цього присвоюємо додатковій змінній значення 1, яке є першим символом рядка:

dl=1;

При виборі другої команди, вводимо з клавіатури масив літер, який перевіряємо на коректність його довжини:

else if (d=='2') {

cout<<" Введите слово: "; cin>>sl;

if (sl.size()>9){

cout<<" Превышена длина слова!"<<endl;

goto pv; }

cout<<" Введите символ: "; cin>>simv;

Присвоюємо змінній, яка в подальшому буде використана як параметр циклу, довжину слова:

dl=sl.size(); cout<<'\n'; }

Для графічного відображення літер у програмі було визначено функцію show():

void Alfavit::show()

Отриманий за допомогою перетворення масив mss виводимо на екран і одночасно дублюємо у текстовий файл Alf.txt. Аналізуємо при цьому отриману інформацію наступним чином: при значенні 1 - виводиться необхідний символ, при 0 - виводиться пробільний символ:

for (x=0;x<7;x++) {

for (y=0;y<72;y++)

if (mss[x][y]==1) {

cout<<simv[0]; fprintf(fo,simv); }

else { cout<<' '; fprintf(fo," "); }

cout<<'\n';

fprintf(fo,"\n"); } fprintf(fo,"\n");

Для повторного заповнення масиву mss заданим лічильникам циклів надаємо початкові значення і очищуємо отриману матрицю значень:

yn=0; yk=8; sm=0;

for (x=0;x<7;x++)

for (y=0;y<72;y++)

mss[x][y]=' ';

В головній функції програми main встановлюємо можливість використання російської мови для виводу повідомлень, оголошуємо екземпляр класу Alfavit і автоматично викликаємо для нього однойменний конструктор:

void main()

{

setlocale(LC_ALL, "Russian");

Alfavit al;

}

3. Розробка алгоритму

відображення літера символ програма

4 Лістинг програми

#include <iostream>

#include <string>

#include <fstream>

using namespace std;

class Alfavit

{

private:

FILE *fo;

char simv[1],d;

int mss[7][72],sm,yn,yk,x,y,dl,nb,fn;

string sl,bk;

public:

Alfavit();

void menu();

void show();

};

Alfavit::Alfavit()

{

sm=0;

yn=0;

yk=8;

bk="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

int ms[26][7][8]={{0,0,0,1,1,1,1,0,

0,0,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0},

{0,1,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,0,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,0,0},

{0,0,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,0,0,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0},

{0,1,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,0,0},

{0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,0,0,0,

0,1,1,1,1,1,0,0,

0,1,1,0,0,0,0,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0},

{0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,0,0,0,

0,1,1,1,1,1,0,0,

0,1,1,1,1,1,0,0,

0,1,1,0,0,0,0,0,

0,1,1,0,0,0,0,0},

{0,0,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,0,0,0,

0,1,1,0,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0},

{0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0},

{0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0,

0,0,0,1,1,0,0,0,

0,0,0,1,1,0,0,0,

0,0,0,1,1,0,0,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0},

{0,0,0,0,1,1,1,0,

0,0,0,0,1,1,1,0,

0,0,0,0,0,1,1,0,

0,0,0,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0},

{0,1,1,0,0,1,1,0,

0,1,1,0,1,1,0,0,

0,1,1,1,1,0,0,0,

0,1,1,1,0,0,0,0,

0,1,1,1,1,0,0,0,

0,1,1,0,1,1,0,0,

0,1,1,0,0,1,1,0},

{0,1,1,0,0,0,0,0,

0,1,1,0,0,0,0,0,

0,1,1,0,0,0,0,0,

0,1,1,0,0,0,0,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0},

{1,1,0,0,0,1,1,0,

1,1,0,0,0,1,1,0,

1,1,1,0,1,1,1,0,

1,1,1,1,1,1,1,0,

1,1,0,1,0,1,1,0,

1,1,0,0,0,1,1,0,

1,1,0,0,0,1,1,0},

{0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,0,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,0,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0},

{0,0,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0},

{0,1,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,0,0,

0,1,1,0,0,0,0,0,

0,1,1,0,0,0,0,0},

{0,0,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,1,1,1,0,

0,1,1,1,1,1,1,1,

0,0,1,1,1,0,1,1},

{0,1,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,0,0,

0,1,1,1,1,0,0,0,

0,1,1,0,1,1,0,0,

0,1,1,0,0,1,1,0},

{0,0,1,1,1,1,0,0,

0,1,1,1,1,1,1,0,

0,1,1,0,0,0,0,0,

0,1,1,1,1,1,1,0,

0,0,0,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0},

{0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0,

0,0,0,1,1,0,0,0,

0,0,0,1,1,0,0,0,

0,0,0,1,1,0,0,0,

0,0,0,1,1,0,0,0,

0,0,0,1,1,0,0,0},

{0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0},

{0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,0,1,1,1,1,0,0,

0,0,1,1,1,1,0,0,

0,0,0,1,1,0,0,0},

{1,1,0,0,0,0,1,1,

1,1,0,0,0,0,1,1,

1,1,0,1,1,0,1,1,

1,1,0,1,1,0,1,1,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,0,0,1,0,0},

{0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,0,1,1,1,1,0,0,

0,0,0,1,1,0,0,0,

0,0,1,1,1,1,0,0,

0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0},

{0,1,1,0,0,1,1,0,

0,1,1,0,0,1,1,0,

0,1,1,1,1,1,1,0,

0,0,1,1,1,1,0,0,

0,0,0,1,1,0,0,0,

0,0,0,1,1,0,0,0,

0,0,0,1,1,0,0,0},

{0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0,

0,0,0,0,1,1,0,0,

0,0,0,1,1,0,0,0,

0,0,1,1,0,0,0,0,

0,1,1,1,1,1,1,0,

0,1,1,1,1,1,1,0}};

for (x=0;x<7;x++)

for (y=0;y<72;y++)

mss[x][y]=' ';

fo=fopen("Alf.txt","w");

po: menu();

if (d=='e') goto exit;

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

{

for(int j=0;j<52;j++)

{

if(sl[i]==bk[j])

{

nb=j;

fn=1;

break;

}

}

if (fn==1)

{

for(x=0;x<7;x++)

for(y=yn;y<yk;y++)

mss[x][y]=ms[nb][x-sm][y];

sm++;

yn+=8;

yk+=8;

fn=0;

}

else

{

cout<<"Ошибочный ввод!"<<endl;

goto po;

}

}

show();

goto po;

exit: ;

fclose(fo);

}

void Alfavit::menu()

{

cout<<"\n Выберите действие:\n 1-Вывод буквы\n 2-Вывод слова\n *-Завершение\n ";

cin>>d;

if (d=='1')

{

cout<<" Введите букву: ";

cin>>sl;

cout<<" Введите символ: ";

cin>>simv;

dl=1;

cout<<'\n';

}

else if (d=='2')

{

pv: cout<<" Введите слово: ";

cin>>sl;

if (sl.size()>9)

{

cout<<" Превышена длина слова!"<<endl;

goto pv;

}

cout<<" Введите символ: ";

cin>>simv;

dl=sl.size();

cout<<'\n';

}

else d='e';

}

void Alfavit::show()

{

for (x=0;x<7;x++)

{

for (y=0;y<72;y++)

if (mss[x][y]==1)

{

cout<<simv[0];

fprintf(fo,simv);

}

else

{

cout<<' ';

fprintf(fo," ");

}

cout<<'\n';

fprintf(fo,"\n");

}

fprintf(fo,"\n");

yn=0;

yk=8;

sm=0;

}

void main()

{

setlocale(LC_ALL, "Russian");

Alfavit al;

}

5. Тестування програми

1) Формування однієї літери:

2) Формування масиву літер:

3) Введення букв не англійського алфавіту або інших символів:

4) Введення замість букви слова:

5) Завершення роботи програми шляхом вводу будь-якого символу:

6. Результати реалізації

При тестуванні програми було випробувано виведення на екран текстової інформації у вигляді графічного зображення літер з подальшим записом результатів виконання у зовнішній текстовий файл. Також було перевірено обробку виключних ситуацій при формуванні не літерних символів з виводом на екран повідомлення про помилку.

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

Висновки

В цьому курсовому проекті була розроблена за умовами постановки задачі - програма обробки абстрактного класу "Абетка" (……).

Відповідно умовам постановки задачі було побудовано блок-схему до її окремих блоків. За описом блок-схеми складено програму, яка реалізує поставлену задачу.

За час виконання курсової роботи я вивчив принцип роботи зі статичними багатомірними масивами, рядками вбудованого класу string бібліотеки STL. Ознайомився із бібліотечними файлами мови програмування С, елементами стандартної бібліотеки шаблонів мови програмування С++ - STL, та правилами роботи з ними.

Список використаних джерел

1. Болски М. И. Язык программирования Си. Справочник: Пер. с англ. - М.: Радио и связь, 1988.

2. Уэйт М., Прата С., Мартин Д. Язык Си. Руководство для начинающих: Пер. с англ. - М.. Мир, 1988.

3. Хэнкок Л., Кригер М. Введение в программирование на языке Си: Пер. с англ. - М.: Радио и связь, 1986.

4. Иванов А. Г. Язык программирования Си: Предварительное описание // Прикладная информатика. - 1985.

5. Керниган Б., Ритчи Д., Фьюэр А. Язык программирования Си. Задачи по языку Си: Пер. с англ. - М.: Финансы и статистика, 1985.

6. Джехани Н. Программирование на языке Си: Пер. с англ. -- М.: Радио и связь, 1988.

Размещено на Allbest.ru

...

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

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