Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример выполнения работы. Список индивидуальных данных




Список индивидуальных данных

Общая постановка задачи

Теоретическая часть

Лабораторная работа №1. Операции на множествах

Целью лабораторной работы является изучение операций на множествах и приобретение навыков программирования.

Требования к содержанию, оформлению и порядку выполнения

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

Теоретические сведения, необходимые для выполнения лабораторной работы, представлены в разд.1.1.1-1.1.2

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

Для хранения множеств можно использовать статические целочисленные массивы, т.е допускается, что множества состоят из натуральных чисел и имеют ограниченную константой мощность.

Элементы массива a, используемого для хранения множества A, могут содержать, как сами элементы A, так и формироваться по правилу: a[i]=1, если iÎA; a[i]=0, если iÏA.

В первом случае для хранения множества A={5,2,4} будет использоваться массив a=5,2,4. Во втором случае для хранения того же множества будет использоваться массив a=01011.

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

Разработанные процедуры должны использоваться для решения индивидуальной задачи согласно варианту.

Разработайте программу, позволяющую вводить с клавиатуры множества A,B,C и вычисляющую элементы множеств F1 и F2. Элементы множеств F1 и F2 выведите на экран. Выполните тестирование программы на различных входных данных. Обоснуйте полученные результаты.

1. F1=AI(BUC), F2=(AIB)U(AIC)

2. F1=AU(BIC), F2=(AUB)I(AUC)

3. F1=(AUB)IA, F2=A

4. F1=A\(BUC), F2=(A\B)I(A\C)

5. F1=A\(BIC), F2=(A\B)U(A\C)

6. F1=A\(A\B), F2=AIB

7. F1=A\(AIB), F2=A\B

8. F1=AI(B\C), F2=(AIB)\(AIC)

9. F1=(A\B)\C, F2=(A\C)\(B\C)

10. F1=AU(B\A), F2=AUB

11. F1=(AUB)\C, F2=(A\C)U(B\C)

12. F1=A\(B\C), F2=(A\B)U(AIC)

13. F1=A\(BUC), F2=(A\B)\C

14. F1=A∆B, F2=(A∆B)U(B∆A)

15. F1=A∆B, F2=(AUB)\(AIB)

16. F1=A∆(B∆C), F2=(A∆B)∆C

17. F1=AI(B∆C), F2=(AIB)∆(AIC)

18. F1=A∆(A∆B), F2=B

19. F1=A∆B∆(AIB), F2=AUB

20. F1=A∆(AIB), F2=A\B

21. F1=(A∆B)U(AIB), F2=AUB

22. F1=(A\C)U(B\C), F2=(AUB)\C

23. F1=(A\B)U(AIC), F2=A\(B\C)

24. F1=(A\B)\C, F2=A\(BUC)

25. F1=(A\B)I(A\C), F2=A\(BUC)

Разработаем программу, позволяющую вводить с клавиатуры множества A,B,C и вычисляющую элементы множества F1=((AUC)\B)I(A∆C). Элементы множеств F1 выведем на экран. Для множества F2 требуется выполнить аналогичные действия. Поэтому в данном примере они не рассматриваются.

Для хранения множеств A, B, С будем использовать массивы a, b, c размера mm=10. Также будем считать, что в качестве элементов множеств можно использовать только целые числа от 0 до mm. Массив a формироваться по правилу: a [ i ]=1, если i Î A; a [ i ]=0, если i Ï A. Аналогичным образом формируются массивы B, C.

При таком способе хранения множеств все операции имеют простую реализацию, которая сводится к выполнению логических операций над элементами соответствующих массивов. Если bool mn1[] - массив, хранящий первое множество (первый операнд), а bool mn2[] - массив, хранящий второе множество (второй операнд), то массив bool mn_rez[], хранящий множество, полученное в результате выполнения операции над множествами mn1 и mn2 формируется следующим образом:

  • Объединение: for (i=0;i<=mm;i++) mn_rez[i]= mn1[i] || mn2[i];
  • Пересечение: for (i=0;i<=mm;i++) mn_rez[i]= mn1[i] && mn2[i];
  • Разность: for (i=0;i<=mm;i++) mn_rez[i]= mn1[i] &&!mn2[i];
  • Симметрическая разность: for (i=0;i<=mm;i++) mn_rez[i]= mn1[i] &&!mn2[i] || mn2[i] &&!mn1[i];

Все операции реализуем в виде соответствующих функций. Эти функции будем использовать в основной функции для получения требуемого множества F1=((AUC)\B)I(A∆C). Для этого будем использовать рабочие массивы, т.е. массивы для хранения промежуточных результатов. В данном примере последовательность вычислений может быть следующей: r1=AUC; r2=r1\B; r3=A∆C; r1=r2Ir3=F1.

Ввод элементов множеств будем осуществлять в консольном режиме. Полностью текст программы приведен ниже.

Для подбора тестовых примеров и наглядного представления результатов рекомендуется нарисовать диаграммы, иллюстрирующие процесс вычисления требуемых множеств. Для рассматриваемого примера данные диаграммы представлены на рис. Л.1.

 

 

 
 

 

 


#include <stdio.h>

#include <stdlib.h>

 

#define mm 10 // Максимальное число элементов в множествах

typedef int bool;

 

// Используемые множества целых чисел от 0 до mm

bool a[mm],b[mm],c[mm], r1[mm],r2[mm],r3[mm];

 

// Функция print_set(char st [], boolmn [])

// Назначение: Печать элементов множества mn,

// состоящего из целых чисел от 0 до mm-1

// Вход: char st[] - строка сообщения;

// bool mn[] - множество.

// Выход: нет

// Возвращает: нет.

void print_set (char st[], bool mn[]) {

int i;

printf ("%s{",st);

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

if (mn[i]) printf ("%d ",i);

printf ("}\n");

}

 

// Функция create_keybrd_set(char st[], bool mn[])

// Назначение: Ввод элементов множества mn с клавиатуры,

// состоящего из целых чисел от 0 до mm-1

// Вход: char st[] - строка сообщения;

// Выход: bool mn[] - множество.

// Возвращает: нет.

void create_keybrd_set (char st[], bool mn[]) {

int i,el;

printf ("Диапазон элементов: %d..%d; число вне диапазона - конец ввода элементов\n",0,mm-1);

printf ("%s",st);

for (i=0;i<mm;i++) mn[i]=0;

scanf ("%d",&el);

while (el>=0 && el<mm)

{mn[el]=1; scanf ("%d",&el);}

}

 

// Функция unite_sets(bool mn1[],bool mn2[],bool mn_rez[])

// Назначение: Объединение двух множеств,

// состоящих из целых чисел от 0 до mm-1

// Вход: bool mn1[] - первое множество;

// bool mn2[] - второе множество;

// Выход: bool mn_rez[] - объединение множеств mn1 и mn2.

// Возвращает: нет.

void unite_sets (bool mn1[],bool mn2[],bool mn_rez[]) {

int i;

for (i=0;i<mm;i++) mn_rez[i]= mn1[i] || mn2[i];

}

 

// Функция intersect_sets(bool mn1[],bool mn2[],bool mn_rez[])

// Назначение: Пересечение двух множеств, состоящих из целых чисел от 0 до mm

// Вход: bool mn1[] - первое множество;

// bool mn2[] - второе множество.

// Выход: bool mn_rez[] - пересечение множеств mn1 и mn2.

// Возвращает: нет.

void intersect_sets (bool mn1[],bool mn2[],bool mn_rez[]) {

int i;

for (i=0;i<mm;i++) mn_rez[i]= mn1[i] && mn2[i];

}

 

// Функция subtract_sets(bool mn1[],bool mn2[],bool mn_rez[])

// Назначение: Разность двух множеств, состоящих из целых чисел от 0 до mm-1

// Вход: bool mn1[] - первое множество;

// bool mn2[] - второе множество.

// Выход: bool mn_rez[] - разность множеств mn1 и mn2.

// Возвращает: нет.

void subtract_sets (bool mn1[],bool mn2[],bool mn_rez[]) {

int i;

for (i=0;i<mm;i++) mn_rez[i]= mn1[i] &&!mn2[i];

}

 

// Функция s_subtract_sets(bool mn1[],bool mn2[],bool mn_rez[])

// Назначение: Симметрическая разность двух множеств,

//состоящих из целых чисел от 0 до mm-1

// Вход: bool mn1[] - первое множество;

// bool mn2[] - второе множество.

// Выход: bool mn_rez[] - симметрическая разность множеств mn1 и mn2.

// Возвращает: нет.

void s_subtract_sets (bool mn1[],bool mn2[],bool mn_rez[]) {

int i;

for (i=0;i<mm;i++) mn_rez[i]= (mn1[i] &&!mn2[i]) || (mn2[i] &&!mn1[i]);

}

 

int main (void) {

setbuf (stdout, NULL); // Отменить буферизацию стандартного

// устройство вывода, т.е. консоли.

create_keybrd_set("a=",a);

create_keybrd_set("b=",b);

create_keybrd_set("c=",c);

printf ("Исходные данные:\n");

print_set(" a=",a);

print_set(" b=",b);

print_set(" c=",c);

printf ("Результаты:\n");

unite_sets(a,c,r1);

print_set(" r1=",r1);

subtract_sets(r1,b,r2);

print_set(" r2=",r2);

s_subtract_sets(a,c,r3);

print_set(" r3=",r3);

intersect_sets(r2,r3,r1);

print_set(" f1=",r1);

printf ("Работа программы завершена.\n");

return EXIT_SUCCESS;

}

 

Для разработки программ в данном лабораторном практикуме используется среда Wascana Eclipse C/C++ IDE for Windows Developers, с которой можно более детально ознакомиться на сайте (http://code.google.com/a/eclipselabs.org/p/wascana/). Рассмотренная программа и результаты ее работы в данной среде представлены на рис.Л2.

 

 


Контрольные вопросы к защите

Список контрольных вопросов совпадает с вопросами для повторения темы 1.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 560; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.