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

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

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






 

Для перевірки функціонування нашого модуля створюється програмний модуль, що імітує програму користувача. Цей модуль звертається до функції 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; просмотров: 346. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Тема: Составление цепи питания Цель: расширить знания о биотических факторах среды. Оборудование:гербарные растения...

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

Типовые примеры и методы их решения. Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно. Какова должна быть годовая номинальная процентная ставка...

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

Классификация и основные элементы конструкций теплового оборудования Многообразие способов тепловой обработки продуктов предопределяет широкую номенклатуру тепловых аппаратов...

Именные части речи, их общие и отличительные признаки Именные части речи в русском языке — это имя существительное, имя прилагательное, имя числительное, местоимение...

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