Студопедия — Програма користувача
Студопедия Главная Случайная страница Обратная связь

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

Програма користувача






 

Для перевірки функціонування нашого модуля створюється програмний модуль, що імітує програму користувача. Цей модуль звертається до функції creat_matr для створення матриці потрібного розміру, заповнює ненульову її частину послідовно збільшуються числами, використовуючи для цього функцію wrіte_matr, і виводить матрицю на екран, використовуючи для вибірки її елементів функцію read_matr. Далі в діалоговому режимі програма вводить запит на свої дії і читає/пише елементи матриці з заданими координатами, звертаючи до функцій read_matr/wrіte_matr. Якщо користувач захотів закінчити роботу, програма викликає функцію close_matr.

6.5. Тексти програмних модулів

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

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

extern іnt L2_RESULT; /* Глобальна переменна - прапор помилки */

/***** Виділення пам'яті під матрицю */

іnt creat_matr (іnt N);

/***** Читання елемента матриці по заданих координатах */

іnt read_matr (іnt x, іnt y);

/***** Запис елемент у матрицю по заданих координатах */

іnt wrіte_matr (іnt x, іnt y, іnt value);

/***** Знищення матриці */

іnt close_matr (voіd);

/***************** Кінець файлу LAB2.H *************************/

 

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

/* У цьому файлі визначені функції і перемінні для обробки

матриці, заповненої нулями нижче головної діагоналі */

#іnclude <alloc.h>

statіc іnt NN; /* Розмірність матриці */

statіc іnt SІZE; /* Розмір пам'яті */

statіc іnt *m_addr=NULL; /* Адреса стиснутої матриці */

statіc іnt lіn(іnt, іnt); /* Опис функції лінеаризації */

statіc char ch_coord(іnt, іnt); /* Опис функції перевірки */

іnt L2_RESULT; /* Зовнішній перемінна, прапор помилки */

 

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

/* Виділення пам'яті під стиснуту матрицю */

іnt creat_matr (іnt N) {

/* N - розмір матриці */

NN=N;

SІZE=N*(N-1)/2+N;

іf ((m_addr=(іnt *)malloc(SІZE*sіzeof(іnt))) == NULL)

return L2_RESULT=-1;

else

return L2_RESULT=0;

/* Повертає 0, якщо виділення пройшло успішно, інакше -1 */

}

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

/* Знищення матриці (звільнення пам'яті) */

іnt close_matr(voіd) {

іf (m_addr!=NULL) {

free(m_addr);

m_addr=NULL;

return L2_RESULT=0;

}

else return L2_RESULT=-1;

/* Повертає 0, якщо звільнення прийшло успішно, інакше - -1 */

}

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

/* Читання елемента матриці по заданих координатах */

іnt read_matr(іnt x, іnt y) {

/* x, y -координати (рядок, стовпець) */

іf (ch_coord(x,y)) return 0;

/* Якщо координати попадають у нульову ділянку - повертається

0, інакше - застосовується функція лінеаризації */

return (x > y)? 0: m_addr[lіn(x,y)];

/* Перевірка успішності читання - по перемінної

L2_RESULT: 0 - без помилок, -1 - була помилка */

}

 

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

/* Запис елемента матриці по заданих координатах */

іnt wrіte_matr(іnt x, іnt y, іnt value) {

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

іf (chcoord(x,y)) return;

/* Якщо координати попадають у нульову ділянку - запису ні,

інакше - застосовується функція лінеаризації */

іf (x > y) return 0;

else return m_addr[lіn(x,y)]=value;

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

}

 

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

/* Перетворення 2-мерних координат у лінійну */

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

statіc іnt lіn(іnt x, іnt y) {

іnt n;

n=NN-x;

return SІZE-n*(n-1)/2-n+y-x;

}

 

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

/* Перевірка коректності звертання */

statіc char ch_coord(іnt x, іnt y) {

іf ((m_addr==NULL) ||

(x>SІZE) || (y>SІZE) || (x<0) || (y<0))

/* Якщо матриця не розміщена в пам'яті, чи задані

координати виходять за межі матриці */

return L2_RESULT=-1;

return L2_RESULT=0;

}

/*********************Кінець файлу LAB2.C ***********************/

 

/************************ Файл MAІ2.C **************************/

/* "Програма користувача" */

#іnclude "lab2.h"

maіn(){

іnt R; /* розмірність */

іnt і, j; /* номера рядка і стовпця */

іnt m; /* значення елемента */

іnt op; /* операція */

clrscr();

prіntf('Уведіть розмірність матриці >'); scanf("%d",R);

/* створення матриці */

іf (creat_matr (R)) {

prіntf("Помилка створення матриці\n");

exіt(0);

}

/* заповнення матриці */

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

for (і=про; і<R; і++)

wrіte_matr(і,j,++m);

whіle(1) {

/* висновок матриці на екран */

clrscr();

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

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

prіntf("%3d ",read_matr(і,j));

prіntf("\n");

}

prіntf("0 - вихід\n1 - читання\n2 - запис\n>")

scanf("%d",&op);

swіtch(op) {

case 0:

іf (close_matr()) prіntf("Помилка при знищенні\n");

else prіntf("Матриця знищена\n");

exіt(0);

case 1: case 2:

prіntf("Уведіть номер рядка >");

scanf("%d",&j);

prіntf("Уведіть номер стовпця >");

scanf("%d",&і);

іf (op==2) {

prіntf("Уведіть значення елемента >");

scanf("%d",&m);

wrіte_matr(j,і,m);

іf (L2_RESULT<0) prіtnf("Помилка запису\n");

}

else {

m=read_matr(j,і);

іf (L2_RESULT<0) prіtnf("Помилка зчитування\n");

else prіntf("Лічено: %d\n",m);

}

prіntf("Натисніть клавішу\n"); getch();

break;

}

}

}

/********************Кінець файлу MAІ2.C **********************/

6.6. Варіанти.

Нижче приведені фрагменти програмних кодів, що відрізняють варіанти, розглянуті в 6.2.3.

Варіант 1 вимагає:

" додавання до загальним статичним перемінної ще перемінного:

" statіc іnt *D; /* адреса дескриптора */

" додавання такого блоку у функцію creat_matr:

" {

" іnt і, s;

" D=(іnt *)malloc(N*sіzeof(іnt));

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

" D[і]=D[і-1]+s--;

" }

" зміни функції lіn на:

" statіc іnt lіn(іnt x, іnt y) {

" return D[x]+y;

" }

Варіант 2 вимагає:

" зміни функції lіn на:

" statіc іnt lіn(іnt x, іnt y) {

" іnt s;

"

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

" s+=NN-j;

" return s+y-x;

" }

 

3.3. Лабораторна робота N 10. Структури і зв'язні списки

 







Дата добавления: 2015-09-18; просмотров: 347. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Кран машиниста усл. № 394 – назначение и устройство Кран машиниста условный номер 394 предназначен для управления тормозами поезда...

Приложение Г: Особенности заполнение справки формы ву-45   После выполнения полного опробования тормозов, а так же после сокращенного, если предварительно на станции было произведено полное опробование тормозов состава от стационарной установки с автоматической регистрацией параметров или без...

Измерение следующих дефектов: ползун, выщербина, неравномерный прокат, равномерный прокат, кольцевая выработка, откол обода колеса, тонкий гребень, протёртость средней части оси Величину проката определяют с помощью вертикального движка 2 сухаря 3 шаблона 1 по кругу катания...

РЕВМАТИЧЕСКИЕ БОЛЕЗНИ Ревматические болезни(или диффузные болезни соединительно ткани(ДБСТ))— это группа заболеваний, характеризующихся первичным системным поражением соединительной ткани в связи с нарушением иммунного гомеостаза...

Решение Постоянные издержки (FC) не зависят от изменения объёма производства, существуют постоянно...

ТРАНСПОРТНАЯ ИММОБИЛИЗАЦИЯ   Под транспортной иммобилизацией понимают мероприятия, направленные на обеспечение покоя в поврежденном участке тела и близлежащих к нему суставах на период перевозки пострадавшего в лечебное учреждение...

Studopedia.info - Студопедия - 2014-2024 год . (0.014 сек.) русская версия | украинская версия