Скачиваний:
14
Добавлен:
15.03.2015
Размер:
317.97 Кб
Скачать

Санкт-Петербургский Государственный университет телекоммуникаций

им. проф. М. А. Бонч-Бруевича

Лабораторная работа №1

«Программная реализация файловой модели

на языке С»

12 Вариант

Выполнил студент группы Р-25М Снопков Ст. И.

Проверил доцент кафедры ЦОС __________ И. И. Гук

Цель работы:

Изучить основные правила реализации программного кода в рамках файловой

модели, закрепить знания языка программирования С++, реализовать

программный код простейшей программы.

Дано:

Необходимо реализовать программный код алгоритма масштабирования входных

отсчетов. Входные отсчеты представлены в виде входного файла. Выходные –

должны находиться в выходном файле. Входные и выходные отсчеты – это 16-ти

разрядные целые числа.

Разработка алгоритма для простейшего выражения (рис.1)

Рис.1. Алгоритм простейшей программы.

Распределение процедуры обработки по функциям

1. Функция main(). Выполняет вызов функции инициализации алгоритма, открытие

входного и выходного файлов, создание контекстной структуры, содержащей все

переменные данного алгоритма, создание и инициализацию указателя на контекстную

структуру, инициализацию организацию цикла считывания и записи данных во

входной и выходной файлы, где кроме этого вызывается функция обработки входного

буфера, и в конце – выполняет корректный выход из процедуры обработки (закрытие

входного и выходного файлов). Соответствует рис. 1.

2. Функция инициализации начального состояния. Выполняет инициализацию

контекстной структуры.

3. Функция запуска процедуры обработки. Выполняет обработку входного буфера и

формирование выходного буфера (рис .2).

Начало

Инициализация начального состояния

Обработка данных из вх. буфера и запись результата в вых. буфер

Конец

Рис. 2 Функция запуска процедуры обработки.

Разработка программного кода

Файл с функцией запуска процедуры обработки.

#include "prjMPY.h"

Void runMPY(CONTEXMPY*pCntx)

{

word16 *pInpBuff;

word16 *pOutBuff;

word16 lenBuff;

word32 constA;

word32 count;

word16 coeff;

pInpBuff = pCntx->pInpBuff;

pOutBuff = pCntx->pOutBuff;

lenBuff = pCntx->lenBuff;

constA = pCntx->constA;

for(count = 0; count <lenBuff; count++)

{

coeff = *pInpBuff++;

coeff *= constA;

*pOutBuff++ = coeff;

}

}

Файл main.cpp. Содержит функцию main().

#include "prjMPY.h"

int main(void)

{

FILE *pInpFile;

FILE *pOutFile;

word32 len;

printf("START PROGRAMS!\n");

pInpFile = fopen("Inp.dat","rb");

if(pInpFile == NULL)

{

printf("ERROR, INPUT FILE!\n");

printf("\nPress ENTER to stop... \n");

getchar();

return 2;

}

printf("OPEN INPUT FILE SUCSESFUL!\n");

pOutFile = fopen("out.dat","wb");

if(pOutFile == NULL)

{

printf("ERROR, OUT FILE\n");

printf("\nPress ENTER to stop... \n");

getchar();

return 1;

}

printf("GREAT OUTPUT FILE SUCSESFUL!\n");

pCntx = &cntx;

initMPY(pCntx);

len = SAZEBUFF;

while(len == SAZEBUFF)

{

len = fread(pCntx->pInpBuff,sizeof(word16),SAZEBUFF,pInpFile);

runMPY(pCntx);

fwrite(pCntx->pOutBuff, sizeof(word16), len, pOutFile);

}

printf("STOP PROGRAMS!\n");

printf("\nPress ENTER to stop... \n");

getchar();

fclose(pInpFile);

fclose(pOutFile);

return 0;

}

Файл с функцией начальной инициализации.

#include "prjMPY.h"

Void initMPY(CONTEXMPY* pCntx)

{

pCntx->pInpBuff = inpBuff;

pCntx->pOutBuff = outBuff;

pCntx->lenBuff = SAZEBUFF;

pCntx->constA = MASHTAB;

}

Файл, в котором создаются все константы, массивы, контекстные структуры,

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

#include "prjMPY.h"

CONTEXMPY* pCntx;

CONTEXMPY cntx;

word16 inpBuff[SAZEBUFF];

word16 outBuff[SAZEBUFF];

Заголовочный файл, содержащий объявление всех функций, констант,

контекстных структур, массивов, а так же необходимые макросы.

#include <stdio.h>

#define SAZEBUFF 120

#define MASHTAB 5

typedefint word32;

typedef short word16;

typedef char word8;

typedefstruct

{

word16 *pInpBuff;

word16 *pOutBuff;

word16 lenBuff;

word32 constA;

}

CONTEXMPY;

voidinitMPY(CONTEXMPY* pCntx);

voidrunMPY(CONTEXMPY* pCntx);

extern CONTEXMPY* pCntx;

extern CONTEXMPY cntx;

extern word16 inpBuff[];

extern word16 outBuff[];

Отладка программного кода

Рис.3. Анализ результатов выполнения программы в Matlab.

Открыв входной и выходной файлы (int.dat и out.dat) в программе Matlab можно убедиться в корректной работе разработанного кода (рис. 3) — масштабирование входного сигнала в 5 раз.

Выводы по проделанной работе

Набран программный код алгоритма масштабирования входных отсчетов среде программирования wvDev-C++. Входные отсчеты представлены в виде входного файла (сгенерирован синусоидальный сигнал в программе Matlab). Входные и выходные отсчеты – это 16-ти разрядные целые числа. Программа запущена на выполнение и работает корректно, при этом результат работы контролируется программой Matlab.Изучены основные правила реализации программного кода в рамках файловой модели, закреплены знания языка программирования С.

Санкт-Петербург

2013 год