Преобразования информации перед передачей её в канал связи

Преобразования информации перед передачей её в канал связи

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

Разработал: студент Петров А.В.

Пензенский государственный университет, Кафедра "РЭСС и ЗИ"

Пенза 1998

Задание на курсовое проектирование по теме Разработка программы обработки информации на языке С++

1. Дисциплина - Алгоритмизация и программирование.

2. Вариант задания - 45.

3. Студент Петров А.В. группа 97ПС3.

4. Исходные данные на проектирование

4.1. Общие требования к программе:

- наличие пользовательского интерфейса 

- чтение необходимой информации из файлов 

- сохранение результатов в файлах 

- контроль ошибок при работе с файлами 

- преобразование информации по заданному алгоритму 

- обратное преобразование информации 

- использование избыточности для контроля ошибок 

- одновременное отображение на экране преобразованной и не преобразованной информации.

4.2. Требования к пользовательскому интерфейсу:

- обеспечить управления программой посредством "горячих клавиш" (сочетании клавиш) из диапазона Alt-F1 - Alt-F10 , допускается использование клавиши Esc 

- обеспечить одновременное отображение на экране преобразованной и не преобразованной информации 

- обеспечить цветовое выделение искажённой информации.

4.3. Требования к преобразованию информации:

- преобразование символов с кодами 40h - 5Fh (верхний регистр латинского алфавита) 

- использование для преобразования операци. перестановки: 

биты (0-1,1-0,2-3,3-2).

- использование для формирования избыточности операцию исключающего ИЛИ (сложение по модулю 2) 

- избыточные символы формируются на каждые 3 символа информации.

5. Объём работы по проекту.

5.1. Содержание работы:

- разработка алгоритмов 

- создание программы на базе разработанных алгоритмов 

- описание работы программы 

- описание пользовательского интерфейса программы 

6. Графическая часть

7.Экспирементальная часть

- отладка отдельных частей программы 

- проверка работоспособности программы 

8. Календарный план выполнения курсового проекта.

8.1 Срок выполнения работ по разделам:

- выдача задания к      1998 г 

- разработка алгоритма работы программы к      1998 г 

- разработка и отладка пользотательского интерфейс к      1998 г 

- разработка и отладка процедур записи и чтения файлов к     1998г 

- разработка и отладка процедуры преобразования файлов к     1998г 

- оформление П3 к     1998г 

- подготовка к защите к     1998г.

Дата защиты проекта                           "   "         1998г.

Руководитель проекта                             Дорошкевич В.В.

Задание получил                               "   "         1998г.

Студент Петров А.В.

РЕФЕРАТ

Пояснительная записка содержит 16 листов , 1 рисунк , 2 источника, 

2 таблицы , 2 приложения.

ПРОГРАММА , АЛГОРИТМ РАБОТЫ , ПЕРЕСТАНОВКА , ИЗБЫТОЧНОСТЬ.

Объект исследования: алгоритм преобразования информации перед передачей её в канал связи и программа , реализующая этот алгоритм.

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

В результате была получена работающая программа , а также результаты её работы.

Введение

В настоящее время индустрия производства компьютеров и программного обеспечения для них является одной из наиболее важных сфер экономики развитых стран. Ежегодно в мире продаются десятки миллионов компьютеров. Только в США объем продаж компьютеров составляет десятки миллионов долларов и постоянно продолжает расти.

В чем же причины такого стремительного роста индустрии персональных компьютеров и их сравнительная выгодность для многих деловых применений?

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

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

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

И потому в данной курсовой работе необходимо применить язык программирования С++ , как наиболее подходящий для решения поставленной задачи.

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

Заданием на данную курсовую работу является разработка программы на языке C++ для преобразования информации перед передачей её в канал связи.

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

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

В качестве "горячих клавиш" должны использоваться клавиши (комбинации клавиш) из диапазона Alt+F1 - Alt+F10 , клавиша Esc может использоваться для выхода из программы.

В данной курсовой работе для кодирования данных используется метод перестановки бис символа , варианты которой представлены в таблице 1.

Таблица 1

До перестановки

0

1

2

3

После перестановки

1

0

3

2

Избыточный байт в выходном файле формируется через каждые 3 символа путём сложения по модулю 2.

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

2. Разработка алгоритма решения задачи преобразования информации

По условиям , заданным в задаче , исходный текст должен кодироваться с избыточностью путём сложения по модулю 2 на каждые 3 символа. Kодирование должно осуществляться путём подстановки символа по следующей схеме (0-1,1-0,2-3,3-2) 

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

1) начало функции 

2) проверка попадания символа в интервал 

3) проверка кода символа >=50 

4) если код символа >=50 то переменная mask=50h 

5) если код символа не >=50 то переменная mask=40h 

6) обнулить половину кода 

7) разложить по битам в массив buf c перестановкой 

8) запись полученных битов в символ 

9) вернуть половину кода 

10) возвратить символ программе 

11) конец функции 

3. Разработка программы

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

1) функция getwin - осуществляет считывание позиции курсора 

2) функция perest - осуществляет преобразование символа в соответствии с заданием.

3) основная программа - осуществляет оформление экрана , опрос клавиатуры [1] , вызов функций [1] в соответствии с нажатой "горячей клавиши", вывод сообщения об ошибке при её возникновении , очистку экрана , [1] выход из программы.

Данная программа использует при своей работе следующие переменные:

x1,y1,x2,y2 - координаты окна 

tc , tb - цвет окна 

px , py - позиция курсора 

fname[50] - имя файла.

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

4. Руководство оператора

Разработанная программа petrov.cpp предназначена для преобразования информации перед передачей её в канал связи.

Данная программа предназначена для своего использования операционной системой MS-DOS.

Для запуска программы необходимо вызвать на выполнение запускаемый файл petrov.exe. После запуска данной программы на экране появитс строка подсказки со списком "горячих клавиш". Чтобы начать работу с программой , пользователю необходимо загрузить исходный файл , для чего нужно с помощью клавиш Alt+F1 загрузить исходный файл , с помощью клавиш Alt+F2 создать выходной файл и нажать сочетание клавиш Alt+F3 для кодирования информации.

Для декодирования информации необходимо загрузить уже записанный файл с помощью клавиш Alt+F2 и нажать сочетание клавиш Alt+F4.

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

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

Для нормальной работы данной программы необходимо наличие персонального компьютера типа IBM PC стандартной конфигурации.

Заключение

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

Разработан алгоритм решения поставленной задачи [2].

Составлена и отлажена программа на языке С++ [2] , реализующая кодирование информации.

В процессе отладки программы была получена полностью работоспособная программа.

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

Анализ результатов показал , что поставленная задача успешно решается.

Список литературы

1. Бьярн Страуструп. Язык программирования С++.в двух частях. Пер. с англ.  Киев:  "ДиаСофт" , 1993.-296 с.,ил.

2 . Корриган Джон : С++ основы программирования: Пер с англ. -М.:Энтроп, 1995. - 352 с., ил.

ПРИЛОЖЕНИЕ А

(обязательное)

Текст программы ptrov.cpp приведён в таблице А1

Таблица А1

Команда

Пояснение

#include <stdio.h>

#include <conio.h>

#include <string.h>

struct win_info

{

int x1, y1, x2, y2 

int tc, tb 

 

int px, py 

 

char fname[50] 

}win[2] 

FILE *in, *out 

char c, ch 

int i 

void SetWin(win_info * w) 

{  

textcolor(w->tc) 

textbackground(w->tb) 

window(w->x1,w->y1,w->x2,w->y2) 

gotoxy(w->px,w->py) 

}

void GetWin(win_info * w) 

{

w->px=wherex() 

w->py=wherey() 

}

char perest(char x)

{

if ((x>=0x40)&(x<=0x5f)) 

{  

char mask, buf[4] 

if (x>=0x50) mask=0x50 

else mask=0x40 

x^=mask 

 

buf[0]=(x&1) 

 

buf[1]=(x&2)/2 

buf[2]=(x&4)/4 

buf[3]=(x&8)/8 

x=buf[1]+buf[0]*2+buf[3]*4+buf[2]*8 

x^=mask 

  

}

return x 

 

}

void main()

{

textbackground(WHITE) 

textcolor(BLACK) 

clrscr() 

for(i=1 

i<2000 

i++) putchar(176) 

window(1,25,80,25) 

textcolor(BLACK) 

textbackground(WHITE) 

clrscr() 

cprintf(" ALT-F1 Исходн.файл ALT-F2 Конечн.файл ALT-F3 Кодир. ALT-F4 Декодир. ESC-Выход") 

win[0].x1=2 

 win[1].x1=2 

win[0].x2=79 

 win[1].x2=79 

win[0].y1=3 

 win[1].y1=14 

win[0].y2=12 

 win[1].y2=23 

win[0].py=1 

 win[1].px=1 

win[0].px=1 

 win[1].py=1 

win[0].tc=LIGHTBLUE 

win[1].tc=LIGHTBLUE 

win[0].tb=BLUE 

win[1].tb=BLUE 

window(1,1,80,1) 

textcolor(BLACK) 

textbackground(WHITE) 

clrscr() 

_setcursortype(_NOCURSOR) 

do

{

ch=getch() 

if (ch==0) switch(getch())

{



координаты окна

цвета окна

позиция курсора

имя файла

активизировать рабочее окно и

установить курсор в текущую позицию

считать поз. курсора

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

обрабатываемым символам

обнулить половину кода

разложить по битам

собрать биты в обратном порядке

восстановить половину кода

вернуть новый символ

создать рабочий экран

задать параметры рабочих окон



Команда

Пояснение

case 104 : fclose(in) 

// Нажата ALT-F1

   win[0].px=1 

win[0].py=1 

   window(1,1,80,1) 

   textcolor(BLACK) 

   textbackground(WHITE) 

   clrscr() 

   printf(" Введите имя исходного файла : ") 

   _setcursortype(_NORMALCURSOR) 

   gets(win[0].fname) 

   _setcursortype(_NOCURSOR) 

   window(1,2,80,12) 

   clrscr() 

   for(i=1 

i<=880 

i++) putchar(176) 

   if((in=fopen(win[0].fname,"rt"))==NULL)

   {

window(1,1,80,1) 

textcolor(RED) 

clrscr() 

printf(" %cНемогу открыть файл - %s - !!!",7,&win[0].fname) 

   } else

   {

   textcolor(RED) 

   textbackground(WHITE) 

   window(39-strlen(win[0].fname)/2,2,41+strlen(win[0].fname)/2,2) 

   clrscr() 

   printf(" %s",&win[0].fname) 

   SetWin(&win[0]) 

   clrscr() 

   while(!feof(in))

   {

c=fgetc(in) 

if(c!='\n') putch(c) 

else {

   if (wherey()==10) break 

   cprintf("\n\r") 

   }

   }

   } break 

 case 105 : fclose(out) 

   win[1].px=1 

win[1].py=1 

   window(1,1,80,1) 

      textcolor(BLACK) 

   textbackground(WHITE) 

   clrscr() 

   printf(" Введите имя конечного файла : ") 

   _setcursortype(_NORMALCURSOR) 

   gets(win[1].fname) 

   _setcursortype(_NOCURSOR) 

   window(1,13,80,23) 

   clrscr() 

   for(i=1 

i<=880 

i++) putchar(176) 

   if((out=fopen(win[1].fname,"wt"))==NULL)

   {

window(1,1,80,1) 

textcolor(RED) 

clrscr() 

printf("%c Немогу создать файл - %s - !!!",7,&win[1].fname) 

   } else

   {

   textcolor(RED) 

   textbackground(WHITE) 

   window(39-strlen(win[1].fname)/2,13,41+strlen(win[1].fname)/2,13) 

   clrscr() 

   printf(" %s",&win[1].fname) 

   SetWin(&win[1]) 

   clrscr() 

   } break 

 case 106 : if((in!=NULL)&(out!=NULL)) 

   {

   c=0 

   i=0 

   SetWin(&win[0]) 

clrscr() 

GetWin(&win[0]) 

   SetWin(&win[1]) 

clrscr() 

GetWin(&win[1]) 

   fseek(in,0,0) 

   fseek(out,0,0) 

   while(!feof(in))    





Нажата ALT-F2



ALT-F3



Команда

Пояснение

{

ch=fgetc(in) 

SetWin(&win[0]) 

if (ch!='\n') putch(ch) 

else cprintf("\n\r") 

GetWin(&win[0]) 

ch=perest(ch) 

SetWin(&win[1]) 

if (ch!='\n') putch(ch) 

else cprintf("\n\r") 

GetWin(&win[1]) 

c^=ch 

i++ 

fputc(ch,out) 

if (i==3)

{

 SetWin(&win[1]) 

 if (c!='\n') putch(c) 

else cprintf("\n\r") 

 GetWin(&win[1]) 

 fputc(c,out) 

 c=0 

 i=0 

}

   }

   } break 

case 107 : if((in!=NULL)&(out!=NULL)) 

   {

   ch=0 

   i=0 

   SetWin(&win[0]) 

clrscr() 

GetWin(&win[0]) 

   SetWin(&win[1]) 

clrscr() 

GetWin(&win[1]) 

   fseek(in,0,0) 

   fseek(out,0,0) 

   while(!feof(in))

   if (i!=3)

   {

c=fgetc(in) 

SetWin(&win[0]) 

if (c!='\n') putch(c) 

else cprintf("\n\r") 

GetWin(&win[0]) 

ch^=c 

i++ 

c=perest(c) 

SetWin(&win[1]) 

if (c!='\n') putch(c) 

else cprintf("\n\r") 

GetWin(&win[1]) 

fputc(c,out) 

   } else

   {

c=fgetc(in) 

SetWin(&win[0]) 

if (c!='\n') putch(c) 

else cprintf("\n\r") 

GetWin(&win[0]) 

if (c==ch)

{

 ch=0 

 i=0 

} else

{

 textcolor(RED) 

 textbackground(WHITE) 

 window(1,1,80,1) 

 clrscr() 

 printf(" %cОшибка в файле %s",7,&win[0].fname) 

 break 

}

   }

   } break 

}

}

while(ch!=27) 

 

fcloseall() 

 

textcolor(WHITE) 

textbackground(BLACK) 

window(1,1,80,25) 

clrscr() 

}





ALT-F4



выход, если нажат ESC

закрыть все файлы

очистить экран



ПРИЛОЖЕНИЕ В

РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ

Введите имя конечного файла : zzz

____________________________________ file _____________________________________

_Проверка программы преобразования информации_                 _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_____________________________________ zzz ______________________________________

_Про-верчка *просграуммыы прoеобкразчовамнияъ ин%форкмацъии__         _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

_                                       _

________________________________________________________________________________

ALT-F1 Исходн.файл ALT-F2 Конечн.файл ALT-F3 Кодир. ALT-F4 Декодир. ESC-Выход