Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Тексты программных модулей





/******* Файл LAB2.H *************************/

/* Описание функций и внешних переменных файла LAB2.C */

extern int L2_RESULT; /* Глобальна переменная — флаг ошибки */

/***** Выделение памяти под матрицу */

int creat_matr (int N);

/***** Чтение элемента матрицы по заданным координатам */

int read_matr (int x, int y);

/***** Запись элемент в матрицу по заданным координатам */

int write_matr (int x, int y, int value);

/***** Уничтожение матрицы */

int close_matr (void);

/******* Конец файла LAB2.H *******************/

/********** Файл LAB2.C *************************/

/* В этом файле определены функции и переменные для обработки матрицы, заполненной нулями ниже главной диагонали */

#include <alloc.h>

static int NN; /* Размерность матрицы */

static int SIZE; /* Размер памяти */

static int *m_addr=NULL; /* Адрес сжатой

матрицы */

static int lin(int, int); /* Описание функции линеаризации */

static char ch_coord(int, int); /* Описание функции проверки */

int L2_RESULT; /* Внешняя переменная, флаг ошибки */

/*************************************************/

/* Выделение памяти под сжатую матрицу */

int creat_matr (int N) {

/* N — размер матрицы */

NN=N;

SIZE=N*(N-1)/2+N;

if ((m_addr=(int *)malloc(SIZE*sizeof(int))) == NULL)

return L2_RESULT=-1;

else

return L2_RESULT=0;

/* Возвращает 0, если выделение прошло успешно, иначе -1 */

}

/*************************************************/

/* Уничтожение матрицы (освобождение памяти) */

int close_matr(void) {

if (m_addr!=NULL) {

free(m_addr);

m_addr=NULL;

return L2_RESULT=0;

}

else return L2_RESULT=-1;

/* Возвращает 0, если освобождение пршло успешно, иначе — -1 */

}

/*************************************************/

/* Чтение элемента матрицы по заданным координатам */

int read_matr(int x, int y) {

/* x, y -координати (строка, столбец) */

if (ch_coord(x,y)) return 0;

 

/* Если координаты попадают в нулевой участок — возвращается 0, иначе — применяется функция линеаризации */

return (x > y)? 0: m_addr[lin(x,y)];

/* Проверка успешности чтения — по переменной

L2_RESULT: 0 — без ошибок, -1 — была ошибка */

}

 

/*************************************************/

/* Запись элемента матрицы по заданным координатам */

int write_matr(int x, int y, int value) {

/* x, y -координати, value — записываемое значение */

if (chcoord(x,y)) return;

/* Если координаты попадают в нулевой участок — записи нет, иначе — применяется функция линеаризации */

if (x > y) return 0;

else return m_addr[lin(x,y)]=value;

/* Проверка успешности записи — по L2_RESULT */

}

 

/**************************************************/

/* Преобразование 2-мерных координат в линейную */

/* (вариант 3) */

static int lin(int x, int y) {

int n;

n=NN-x;

return SIZE-n*(n-1)/2-n+y-x;

}

 

/*************************************************/

/* Проверка корректности обращения */

static char ch_coord(int x, int y) {

if ((m_addr==NULL) ||

(x>SIZE) || (y>SIZE) || (x<0) || (y<0))

/* Если матрица не размещена в памяти, или заданные координаты выходят за пределы матрицы */

return L2_RESULT=-1;

return L2_RESULT=0;

}

/*******Конец файла LAB2.C ********************/

/******** Файл MAIN2.C **************************/

/* "Программа пользователя" */

#include "lab2.h"

main(){

int R; /* размерность */

int i, j; /* номера строки и столбца */

int m; /* значения элемента */

int op; /* операция */

clrscr();

printf('Введите размерность матрицы >'); scanf("%d",R);

/* создание матрицы */

if (creat_matr (R)) {

printf("Ошибка создания матрицы\n");

exit(0);

}

/* заполнение матрицы */

for (m=j=0; j<R; j++)

for (i=о; i<R; i++)

write_matr(i,j,++m);

while(1) {

/* вывод матрицы на экран */

clrscr();

for (j=0; j<R; j++) {

for (i=0; i<R; i++)

printf("%3d ",read_matr(i,j));

printf("\n");

}

printf("0 — выход\n1 — чтение\n2 — запись\n>")

scanf("%d",&op);

switch(op) {

case 0:

if (close_matr()) printf("Ошибка при уничтожении\n");

else printf("Матрица уничтожена\n");

exit(0);

case 1: case 2:

printf("Введите номер строки >");

scanf("%d",&j);

printf("Введите номер столбца >");


scanf("%d",&i);

if (op==2) {

printf("Введите значение элемента >");

scanf("%d",&m);

write_matr(j,i,m);

if (L2_RESULT<0) pritnf("Ошибка записи\n");

}

else {

m=read_matr(j,i);

if (L2_RESULT<0) pritnf("Ошибка считывания\n");

else printf("Считано: %d\n",m);

}

printf("Нажмите клавишу\n"); getch();

break;

}

}

}

/*****Конец файла MAIN2.C **********************/

Варианты

Вариант 1 требует:

u добавления к общим статическим переменным еще переменной:

static int *D; /* адрес дескриптора */

u добавления такого блока в функцию creat_matr:

{

int i, s;

D=(int *)malloc(N*sizeof(int));

for (D[0]=0,s=NN-1,i=1; i<NN; i++)

D[i]=D[i-1]+s--;

}

u изменения функции lin на:

static int lin(int x, int y) {

return D[x]+y;

}

Вариант 2 требует:

u изменения функции lin на:

static int lin(int x, int y) {

int s;

 

for (s=j=0; j<x; j++)

s+=NN-j;

return s+y-x;

}

:

Лабораторная работа №4.
Проверка оборудования







Date: 2015-05-22; view: 673; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.017 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию