Содержание
-
Цель работы ……………………………………………………..3
-
Теория ……………………………………………………………4
-
Текст программы ………………………………………………..5
-
Блок-схемы ……………………………………………………....7
-
Тест ……………………………………………………………..12
-
Руководство пользователю…………………………………….13
-
Список используемой литературы…………………………….14
Цель работы.
Написать программу на С++ Turbo, определяющую свойства на конечных множествах пар, т. е. определяющую является ли заданное отношение функцией. Если да – то какой: инъективной, сюръективной или биективной.
Теория.
Функцией F называется множество такое что найдется не более одного элемента вида называется всюду определенной.
Отношения
n-мерным отношением R на непустом множестве А называется подмножества
Если то говорят что отношение R выполняется для n элементов из множества А (обозначение
Если то говорят, что отношение n не выполняется.
Пусть f: А → В. Тогда функция f называется:
Инъективной, или инъекцией, если b=f(a1)&b = f(a2) => a1 = a2 (двум одинаковым значениям функции соответствуют два одинаковых значения аргумента);
Сюръективной, или сюръекцией, если V b Є A b = f(a) (значение функции пробегает все значения заданного множества);
Биективной, или биекцией, если она инъективна и сюръективна.
Текст программы.
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
void main()
{int n, j, i, j1, j2,fl, ymin, ymax, i1, i2;
int a[100][100];
cout<<"Programma opredeljaet, javljaetsa li otnoshenie funkciey i esli da, to kakoy"<<endl;
cout<<"Skolko elementov? ";
cin>>n;
cout<<endl<<"Vv. diapazon znacheniy funkcii ";
{cin>>ymin>>ymax;
if (ymin>ymax) {i=ymin; ymin=ymax; ymax=i;}
}
cout<<"Vv. znachenija argumenta (x)"<<endl;
for (i=0; i<n; i++)
cin>>a[0][i];
cout<<endl<<"Vv. znachenija funkcii (y)"<<endl;
for (i=0; i<n; i++)
cin>>a[1][i];
fl=0;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{if (i==j) j++;
if (a[0][i]==a[0][j]) {fl=1; j1=i; j2=j; i=n; j=n;}
}
if (fl==0 || a[1][j1]!=a[1][j2]) {cout<<endl<<"sootnoshenie ne javljaetsya funkciey"<<endl; getch(); exit(1);}
if (a[1][j1]==a[1][j2])
{cout<<endl<<"sootnoshenie javljaetsya funkciey";
/////////////////////////////////////////////////////////
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{if (i==j) j++;
if (a[1][i]==a[1][j])
if (a[0][i]!=a[0][j])
{i=n; j=n; fl=0;}
}
if (fl==0) cout<<endl<<"funkcija ne in`ektivna";
else cout<<endl<<"funkcija in`ektivna";
//////////////////////////////////////////////////////////
i2=n;
do{i=0;//flagok
i2--;
for (j=0; j<i2; j++)
if (a[1][j]>a[1][j+1])
{i1=a[1][j];
a[1][j]=a[1][j+1];
a[1][j+1]=i1;
i=1;
}
}while (i==1);
j=1;
if (a[1][0]==ymin && a[1][n-1]==ymax)//
{j=0;
for (i=0; i<n; i++)
if (a[1][i+1]-a[1][i]<=1) j=0;
else {j=1; i=n;}
}
if (j==0) cout<<endl<<"funkcija sur`ektivna";
if (j==1) cout<<endl<<"funkcija ne sur`ektivna";
/////////////////////////////////////////////////////
if (fl==1 && j==0) cout<<endl<<"funkcija biektivna";
else cout<<endl<<"funkcija ne biektivna";
}
getch();
}
Блок-схема.
Fl = 1;j1 = i;
j2 = j;
i = n;
j = n
Тест.
Количество элементов: 7
Ввести диапазон значений: 1 6
Ввести х: 2 3 4 3 5 1 6
Ввести у: 4 1 3 1 2 6 5
Результат: соотношение является функцией.
Функция инъективная, сюръективная и биективная.
Количество элементов: 5
Ввести диапазон значений: 1 5
Ввести х: 1 3 2 1 5
Ввести у: 2 3 1 5 4
Результат: соотношение не является функцией.
Количество элементов: 6
Ввести диапазон значений: 1 6
Ввести х: 1 3 2 5 4 3
Ввести у: 2 1 3 4 6 1
Результат: соотношение является функцией. Функция инъективна, не сюръективна, не биективная.
Руководство пользователю.
-
Ввести количество элементов в строке.
-
Ввести диапазон значений функции. Т. е. ее минимальное значение и максимальное.
-
Ввести значения аргумента (икс).
-
Ввести значения функции (игрик).
-
Нажать Enter.
Список используемой литературы.
-
Новиков Ф.А. Дискретная математика для программистов. Учебник для вузов. 2006г.
-
Кук Д., Бейз Г. Компьютерная математика. 1990 г.
-
Белоусов А.И., Ткачев С.Б. Дискретная математика. 2002 г.