Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СиАОД

.CPP
Скачиваний:
5
Добавлен:
01.05.2014
Размер:
7.31 Кб
Скачать
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<dos.h>
#include <time.h>

#define   DEFAULT_LENGTH	10

typedef struct lst{
	int data;
	lst *next;
	lst *prev;
	}list;


// ARRRAY OF ELEMENTS

int *arrayelGenerate()
{
	int *result;
	int i, j = 0;

	result = (int*)malloc(sizeof(int)*DEFAULT_LENGTH);

	for( i = 0; i < DEFAULT_LENGTH; i++)
		result[i] = -1;
	for( i = 0; i < DEFAULT_LENGTH; i++ )
	{
		if( rand()%2)
		{
			result[j] = i;
			j++;
		}
	}
	return result;
}

void arrayelView( int *a )
{
  int i = 0;

		while(  i < DEFAULT_LENGTH && a[i] != -1)
		{
			printf( "%d", a[i] );
			i++;
		}
}

int arrayelSearch( int *pArray, int iItem )
{
	for( int i = 0; i < 10; i++ )
		if( pArray[i] == iItem )
			return 1;
	return 0;
}

int *arrayelAND( int *A, int *B )
{
	int *result;
	int i,j = 0;

	result = (int*)malloc(sizeof(int)*DEFAULT_LENGTH);
	for( i = 0; i < DEFAULT_LENGTH; i++)
		result[i] = NULL;
	for( i = 0; i < DEFAULT_LENGTH; i++)
		if( arrayelSearch( A , i) && arrayelSearch( B, i) )
		{
			result[j] = i;
			j++;
		}
		return result;
}

int *arrayelOR( int *A, int *B )
{
	int *result;
	int i,j = 0;

	result = (int*)malloc(sizeof(int)*DEFAULT_LENGTH);
	for( i = 0; i < DEFAULT_LENGTH; i++)
		result[i] = -1;
	for( i = 0; i < DEFAULT_LENGTH; i++)
		if( arrayelSearch( A , i) || arrayelSearch( B, i) )
		{
			result[j] = i;
			j++;
		}
	return result;
}

int *arrayelModern( int *a, int *b, int *c, int *d)
{
	int *oper1, *oper2, *result;
	oper1 = arrayelAND( a, b);
	oper2 = arrayelOR( oper1, c);
	result = arrayelOR( oper2, d);
	free(a);
	free(b);
	free(c);
	free(d);
	free(oper1);
	free( oper2 );
	return result;

}

//LIST OF ELEMENTS

void AddList( list **st, int data )
{
	if( *st )
	{
		list *l = NULL, *temp = NULL;

		temp = new list;
		temp->data = data;
		temp->next = NULL;
		l = *st;
		while( l->next )
			l = l->next;

		temp->prev = l;
		l->next = temp;
	}

	else
	{
		list *l = NULL;
		l = new list;
		l->data = data;
		l->next = NULL;
		l->prev = NULL;
		*st = l;
	}
}

list *ListGenerate()
{
	list *New = NULL;
	int j = 0;

	for( int i = 0; i < DEFAULT_LENGTH; i++ )
	if( rand()%2 )
	{
		AddList( &New, i);
		j++;
	}

	return New;
}

int SearchListEl( list *A, int elem )
{
	do
	{
		if( A->data == elem )
			return 1;
		A = A->next;
	}
	while( A );
	return 0;
}

list *ListAnd( list *A, list *B )
{
	list *result = NULL;
	int i;

	for( i = 0; i < DEFAULT_LENGTH; i++ )
		if( SearchListEl( A, i) && SearchListEl( B, i) )
			AddList( &result, i );
		return result;
}

list *ListOr( list *A, list *B )
{
	list *result = NULL;
	int i;

	for( i = 0; i < DEFAULT_LENGTH; i++ )
		if( SearchListEl( A, i) || SearchListEl( B, i) )
			AddList( &result, i );
		return result;
}

void ListDel( list **str )
{
	list *l = NULL, *temp = NULL;
	l = *str;

	while( l )
	{
		temp = l;
		l = l->next;
		delete( temp );
	}
	str = NULL;
}

void ListView( list *Begin )
{
	while( Begin )
	{
		printf( "%d", Begin->data );
		Begin = Begin->next;
	}
}

list *ListModern( list **A, list **B, list **C, list **D )
{
	list *result, *oper1, *oper2;
	oper1 = ListAnd( *A, *B);
	oper2 = ListOr( oper1, *C);
	result = ListOr( oper2, *D);
	ListDel( A );
	ListDel( B );
	ListDel( C );
	ListDel( D );
	ListDel( &oper1 );
	ListDel( &oper2 );

	return result;
}

// BIT ARRAY

int *baGenerate()
{
	int *result;

	result = (int*)malloc(sizeof(int)*DEFAULT_LENGTH);
	for( int i = 0; i < DEFAULT_LENGTH; i++ )
		result[i] = random(2);
	return result;
}

void baView( int *Ba)
{
	for( int i = 0; i < DEFAULT_LENGTH; i++ )
		if( Ba[i] == 1 )
			printf( "%d", i );
}

int *baModern( int *A, int *B, int *C, int *D )
{
	int *result = 0;

	result = (int*)malloc(sizeof(int)*DEFAULT_LENGTH);
	for( int i = 0; i < DEFAULT_LENGTH; i++ )
		result[i] = 0;
	for( i = 0; i < DEFAULT_LENGTH; i++)
		result[i] = ( A[i]  && B[i] ) || C[i] || D[i] ;

	free( A );
	free( B );
	free( C );
	free( D );

	return result;
}

//BINERY WORD

long  bwordGenerate()
{
	long a = 0;
	long lb = 0;

	for( int i = 0; i < DEFAULT_LENGTH ; i++ )
	{
		lb = ( rand()%2 );
		a<<= 1;
		a|= lb;
	}
	return a;
}

void bwordView( long a )
{
	long lb = 1;

	for( int i = 0; i < 10; i++ )
	{
		if( a & lb )
		printf( "%d", i );
		lb <<= 1;
	}
}

long  bwordModern( long a, long b, long c, long d )
{
	return  (a&b)|c|d ;
}


void Menu()
{
  clrscr();
  printf("\n1. The array of elements\n\n");
  printf("2. The list of elements\n\n");
  printf("3. The array of bit\n\n");
  printf("4. Binery words\n\n");
  printf("5. Exit ! ! !");

}

void main ()
{

	 list *ListA = NULL, *ListB = NULL, *ListC = NULL, *ListD = NULL, *ListResult = NULL;
	 char Choise;
	 int  *baA, *baB, *baC, *baD, *baResult;
	 int  *arrayelA, *arrayelB, *arrayelC, *arrayelD, *arrayelResult;
	 long bwordA, bwordB, bwordC, bwordD, bwordResult;

	randomize();
	clrscr();
	do
	{
		Menu();
		Choise = getch();

		switch( Choise )
		{
			case '1':

					arrayelA = arrayelGenerate();
					arrayelB = arrayelGenerate();
					arrayelC = arrayelGenerate();
					arrayelD = arrayelGenerate();

					printf("\n\nA: ");
					arrayelView( arrayelA );
					printf("\nB: ");
					arrayelView( arrayelB );
					printf("\nC: ");
					arrayelView( arrayelC );
					printf("\nD: ");
					arrayelView( arrayelD );

					printf("\n\nRESULT: ");
					arrayelResult = arrayelModern( arrayelA, arrayelB, arrayelC, arrayelD );
					arrayelView( arrayelResult );
					free( arrayelResult );
					getch();

					break;

			case '2':
				ListA = ListGenerate();
				ListB = ListGenerate();
				ListC = ListGenerate();
				ListD = ListGenerate();

				printf("\n\nA: ");
				ListView( ListA );

				printf("\nB: ");
				ListView( ListB );

				printf("\nC: ");
				ListView( ListC );

				printf("\nD: ");
				ListView( ListD );

				printf( "\n\nResult is:  " );
				ListResult = ListModern( &ListA, &ListB, &ListC, &ListD);
				ListView( ListResult );
				ListDel( &ListResult );
				getch();

				break;

			case '3':

				baA = baGenerate();
				baB = baGenerate();
				baC = baGenerate();
				baD = baGenerate();

				printf("\n\nA: ");
				baView( baA );

				printf("\nB: ");
				baView( baB );

				printf("\nC: ");
				baView( baC );

				printf("\nD: ");
				baView( baD );

				printf("\n\nResult is: ");
				baResult = baModern( baA, baB, baC, baD );
				baView( baResult );
				free( baResult );
				getch();

				break;

			case '4':

				bwordA = bwordGenerate();
				bwordB = bwordGenerate();
				bwordC = bwordGenerate();
				bwordD = bwordGenerate();

				printf("\n\nA: ");
				bwordView( bwordA );

				printf("\nB: ");
				bwordView( bwordB );

				printf("\nC: ");
				bwordView( bwordC );

				printf("\nD: ");
				bwordView( bwordD );

				printf( "\n\nResult is: " );
				bwordView( bwordModern( bwordA, bwordB, bwordC, bwordD) );
				getch();

				break;
		}
	}while( Choise != '5' );
	printf( "\n\n\t\t\t \1 See you again! \1" );
	getch();

 }