Преобразования информации перед передачей её в канал связи
Пояснительная записка к курсовой работе
Разработал: студент Петров А.В.
Пензенский государственный университет, Кафедра "РЭСС и ЗИ"
Пенза 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("nr")
}
}
} 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("nr")
GetWin(&win[0])
ch=perest(ch)
SetWin(&win[1])
if (ch!='n') putch(ch)
else cprintf("nr")
GetWin(&win[1])
c^=ch
i++
fputc(ch,out)
if (i==3)
{
SetWin(&win[1])
if (c!='n') putch(c)
else cprintf("nr")
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("nr")
GetWin(&win[0])
ch^=c
i++
c=perest(c)
SetWin(&win[1])
if (c!='n') putch(c)
else cprintf("nr")
GetWin(&win[1])
fputc(c,out)
} else
{
c=fgetc(in)
SetWin(&win[0])
if (c!='n') putch(c)
else cprintf("nr")
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-Выход
Для подготовки данной работы были использованы материалы с сайта http://kurslab.chat.ru/