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

ОАИП. Лб №2

.cpp
Скачиваний:
2
Добавлен:
15.09.2014
Размер:
10.5 Кб
Скачать
// zadacha_so_stryktyrami.cpp : main project file.

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 20
#define SIZE_R 61

/* prototipi funkcii */
void instructions( void );
void proiz1( FILE *dPtr, int razm );
void proiz2( FILE *dPtr, int razm );
void proiz3( FILE *dPtr, int razm );
void resProiz ( FILE *bin1, FILE *bin2, FILE *bin3, FILE *binRes, int razm );
void prProiz1 ( FILE *dPtr );
void prProiz2 ( FILE *dPtr );
void prProiz3 ( FILE *dPtr );
void prResProiz( FILE *binRes );


int main ( void )
{
	int choice; /* vibor polzovatelya */
	int c;

	FILE *b1Ptr; /* ykazatel faila b1.dat */
	FILE *b2Ptr; /* ykazatel faila b2.dat */
	FILE *b3Ptr; /* ykazatel faila b3.dat */
	FILE *bResPtr; /* ykazatel faila bResPtr.dat */

	srand( time( NULL ) ); /* zaceyat generator chisel */

	instructions();

	printf( "\nVibor " );
	scanf( "%d", &choice );

	/* cikl, poka polzovatel ne viberet 5 */
	while( choice != 3 ) {

		switch( choice ) {

			case 1:
				proiz1( b1Ptr, SIZE );
				prProiz1 ( b1Ptr );

				proiz2( b2Ptr, SIZE );
				prProiz2 ( b2Ptr );

				proiz3( b3Ptr, SIZE );
				prProiz3 ( b3Ptr );
					break; /* viiti is switch */

			case 2:
				resProiz ( b1Ptr, b2Ptr, b3Ptr, bResPtr, SIZE );
				prResProiz( bResPtr );
					break;

			default:
				printf( "\nNerrorektni vibor\n\n" );
				instructions();
			break;

		} /* conec switch */

		printf( "\nVibor " );
		scanf( "%d", &choice );

	} /* conec while */

	printf( "Konec vipolneniya programmi" );
	
	c = getchar();
	c = getchar();
	return 0;

} /* conec main */

/* vivesti instrykciy polzovatelya */
void instructions ( void ) 
{
	printf( "Nazmite:\n"
			"   1 dlya sozdaniya 3 failov prymogo dostypa.\n"
			"   2 dlya sozdaniya resulturychego faila.\n"
			"   3 dlya vihoda\n" );

} /* conec instuctions */


/* sozdat fail proizvolnogo dostypa b1.dat */
void proiz1( FILE *dPtr, int razm )
{
	int counter;
	int celoe; /* chislo dlya zapisi v b1.dat */

    /* Esli ne ydaetsya sozdat fail b1.dat - vivesti oshibky */
    if ( ( dPtr = fopen( "b1.dat", "wb" ) ) == NULL ) {
      printf( "Fail b1.dat ne mozhet bit sozdan\n" );
    } /* conec if */

	else {

		/* zapolnit fail b1.dat */
          for ( counter = 1; counter <= razm; counter++ ) {	

             celoe = rand() % 10;		

	         /* peremestit ykazarel faila na nyzhnyi zapis */
             fseek( dPtr, ( counter - 1 ) * sizeof( int ), SEEK_SET  );	

             fwrite( &celoe, sizeof( int ), 1, dPtr );

           } /* conec for */
      
    fclose( dPtr ); /* fclose zakrivaet fail */

    } /* conec else  */ 

	return; 

} /* conec fileProiz */


/*  sozdat fail proizvolnogo dostypa b2.dat */
void proiz2( FILE *dPtr, int razm )
{
	int counter;
	int celoe; /* chislo dlya zapisi v b2.dat */

    /* Esli ne ydaetsya sozdat fail b2.dat - vivesti oshibky */
    if ( ( dPtr = fopen( "b2.dat", "wb" ) ) == NULL ) {
      printf( "Fail b2.dat ne mozhet bit sozdan\n" );
    } /* conec if */

	else {

		/* zapolnit fail b2.dat */
          for ( counter = 1; counter <= razm; counter++ ) {	

             celoe = rand() % 10;		

	         /* peremestit ykazarel faila na nyzhnyi zapis */
             fseek( dPtr, ( counter - 1 ) * sizeof( int ), SEEK_SET  );	

             fwrite( &celoe, sizeof( int ), 1, dPtr );

          } /* conec for */
      
    fclose( dPtr ); /* fclose zakrivaet fail */

    } /* conec else  */ 

	return; 

} /* conec fileProiz */



/* sozdat fail proizvolnogo dostypa b3.dat */
void proiz3( FILE *dPtr, int razm )
{
	int counter;
	int celoe; /* chislo dlya zapisi v b3.dat */

    /* Esli ne ydaetsya sozdat fail b3.dat - vivesti oshibky */
    if ( ( dPtr = fopen( "b3.dat", "wb" ) ) == NULL ) {
      printf( "Fail b1.dat ne mozhet bit sozdan\n" );
    } /* conec if */

	else {

		/* zapolnit fail b3.dat */
          for ( counter = 1; counter <= razm; counter++ ) {	

             celoe = rand() % 10;		

	         /* peremestit ykazarel faila na nyzhnyi zapis */
             fseek( dPtr, ( counter - 1 ) * sizeof( int ), SEEK_SET  );	

             fwrite( &celoe, sizeof( int ), 1, dPtr );

           } /* conec for */
      
    fclose( dPtr ); /* fclose zakrivaet fail */

    } /* conec else  */ 

	return; 

} /* conec fileProiz */


void resProiz ( FILE *bin1, FILE *bin2, FILE *bin3, FILE *binRes, int razm )
{
	/* prototipi funkcii */
	void bubbleSort ( int a[], int size );
	void deleteDybl ( int a[], int size );
	
	int i; /* chetchik */
	int celoe;
	
	bin1 = fopen( "b1.dat", "rb" );
	bin2 = fopen( "b2.dat", "rb" );
	bin3 = fopen( "b3.dat", "rb" );
	binRes = fopen ( "result.dat", "wb"  );

	int masChis [ SIZE_R ];

	/* poka ne konec b1.dat, zapisat chisla v massiv */
	for ( i = 1; i <= razm; i++ ) {

		/* peremestit ykazarel faila na nyzhnyi zapis */    
		fseek( bin1, ( i - 1 ) * sizeof( int ), SEEK_SET  );	

		fread( &celoe, sizeof( int ), 1, bin1 );

		masChis[ i ] = celoe;
	} /* conec for */


	/* poka ne konec b2.dat, zapisat chisla v massiv */
	for ( i = 1; i <= razm; i++ ) {

		/* peremestit ykazarel faila na nyzhnyi zapis */    
		fseek( bin2, ( i - 1 ) * sizeof( int ), SEEK_SET  );	

		fread( &celoe, sizeof( int ), 1, bin2 );

		masChis[ ( i + razm ) ] = celoe;
	} /* conec for */

		/* poka ne konec b3.dat, zapisat chisla v massiv */
	for ( i = 1; i <= razm; i++ ) {

		/* peremestit ykazarel faila na nyzhnyi zapis */    
		fseek( bin3, ( i - 1 ) * sizeof( int ), SEEK_SET  );	

		fread( &celoe, sizeof( int ), 1, bin3 );

		masChis[ ( i + 2 * razm ) ] = celoe;
	} /* conec for */

	bubbleSort( masChis, SIZE_R );
	deleteDybl( masChis, SIZE_R );
	bubbleSort( masChis, SIZE_R );



	/* zapisat otsorirovani massiv v result.dat*/
   for ( i = 1; i <= SIZE_R; i++ ) {	

         /* peremestit ykazarel faila na nyzhnyi zapis */
		fseek( binRes, ( i - 1 ) * sizeof( int ), SEEK_SET  );	
		
		celoe = masChis[ i ];

		if ( celoe != 0 ) {

			fwrite( &celoe, sizeof( int ), 1, binRes );

		} /* conec if */

	} /* conec for */


	fclose( bin1 ); /* fclose zakrivaet fail */
	fclose( bin2 ); /* fclose zakrivaet fail */
	fclose( bin3 ); /* fclose zakrivaet fail */
	fclose( binRes ); /* fclose zakrivaet fail */

} /* conec resProiz */



/* sorirovat massiv pyzirkom */
void bubbleSort ( int a[], int size )
{
	int pass; /* chetchik prohodov */
	int j; /* chetchik sravneni */
	int hold; /* yacheika dlya obmena */

	/* cikl dlya controlya chisla prohodov */
	for ( pass = 1; pass < size; pass++ ) {
		
		/* cikl dlya kontrolya chisla sravnenii */
		for ( j = 0; j < size - 1; j++ ) {

			/* obmenyat elementi esli ih porydok naryshen */
			if ( a[ j ] > a [ j + 1 ] ) {
				hold = a[ j ];
				a[ j ] = a[ j + 1 ];
				a [ j + 1 ] = hold;
			} /* conec if */

		} /* cjnec vnytrennego for */

	} /* conec vneshnego for */

} /* conec bublleSort */


/* vivesti soderzhimoe faila result.dat  */
void prResProiz( FILE *binRes )
{
	int chislo; /* hranit chislo chitannoe is result.dat */
	int i; /* chetchik dlya vivoda novoi stroki */

    /* Esli ne ydaetsya otkrit fail data.dat - vivesti oshibky */
    if ( ( binRes = fopen( "result.dat", "rb" ) ) == NULL ) {
       printf( "Fail result.dat ne mozhet bit otkrit\n" );
    } /* conec if */

    else {

		printf( "Soderzhimoe resulturyishego faila:\n" );
		
		for ( i = 1; i < SIZE_R; i++ ) {

			fseek( binRes, ( i - 1 ) * sizeof( int ), SEEK_SET  );
			fread( &chislo, sizeof( int ), 1, binRes );
			
			if ( chislo != 0 ) {
	
				/* vivesti chisla v forme matrici */
				if ( i % 20 == 0 ) {
					printf( "\n" );
				} /* conec if */
			
				printf( "%3d", chislo );

			} /* conec if */	

		} /* conec for */
	
	
	fclose( binRes ); /* fclose zakrivaet fail */

	} /* conec if else */

	printf( "\n" );

	return; 

} /* conec printFileProiz */


/* ydalit dyblikati is massiva */
void deleteDybl ( int a[], int size )
{
	int i;

	/* esli sosedni chisla ravni, slozhit ih */
	for ( i = 1; i <= size; i++ ) {

		if ( a[ i ] == a[ i + 1 ] ) {
			a[ i ] = a[ i ] + a[ i ];
			a[ i+1 ] = 0;
		}/* conec if */

	} /* conec for */

} /* conec deleteDybl */



/* vivesti soderzhimoe faila proizvolnogo dostypa b1.dat */

void prProiz1 ( FILE *dPtr )
{
	int chislo; /* hranit chislo chitannoe is b1.dat */
	int i; /* chetchik dlya vivoda novoi stroki */

    /* Esli ne ydaetsya otkrit fail data.dat - vivesti oshibky */
    if ( ( dPtr = fopen( "b1.dat", "rb" ) ) == NULL ) {
       printf( "Fail b1.dat ne mozhet bit otkrit\n" );
    } /* conec if */

    else {
		
		printf( "Soderzhimoe pervogo faila:\n\n" );
	   /* prochitat vse chisla is b2.dat */
		for ( i = 1; i <= SIZE; i++ ) {

			fseek( dPtr, ( i - 1 ) * sizeof( int ), SEEK_SET  );
			fread( &chislo, sizeof( int ), 1, dPtr );
			printf( "%3d", chislo );			

		} /* for */
	
	fclose( dPtr ); /* fclose zakrivaet fail */

	} /* conec if else */

	printf( "\n\n" );

	return; 

} /* conec printFileProiz */


/* vivesti soderzhimoe faila proizvolnogo dostypa b2.dat */

void prProiz2 ( FILE *dPtr )
{
	int chislo; /* hranit chislo chitannoe is b1.dat */
	int i; /* chetchik dlya vivoda novoi stroki */

    /* Esli ne ydaetsya otkrit fail data.dat - vivesti oshibky */
    if ( ( dPtr = fopen( "b2.dat", "rb" ) ) == NULL ) {
       printf( "Fail b2.dat ne mozhet bit otkrit\n" );
    } /* conec if */

    else {
		
		printf( "Soderzhimoe vtorogo:\n\n" );
	   /* prochitat vse chisla is b2.dat */
		for ( i = 1; i <= SIZE; i++ ) {

			fseek( dPtr, ( i - 1 ) * sizeof( int ), SEEK_SET  );
			fread( &chislo, sizeof( int ), 1, dPtr );
			printf( "%3d", chislo );			

		} /* for */
	
	fclose( dPtr ); /* fclose zakrivaet fail */

	} /* conec if else */

	printf( "\n\n" );

	return; 

} /* conec printFileProiz */

/* vivesti soderzhimoe faila proizvolnogo dostypa b2.dat */

void prProiz3 ( FILE *dPtr )
{
	int chislo; /* hranit chislo chitannoe is b3.dat */
	int i; /* chetchik dlya vivoda novoi stroki */

    /* Esli ne ydaetsya otkrit fail data.dat - vivesti oshibky */
    if ( ( dPtr = fopen( "b3.dat", "rb" ) ) == NULL ) {
       printf( "Fail b3.dat ne mozhet bit otkrit\n" );
    } /* conec if */

    else {
		
		printf( "Soderzhimoe treteego:\n\n" );
	   /* prochitat vse chisla is b3.dat */
		for ( i = 1; i <= SIZE; i++ ) {

			fseek( dPtr, ( i - 1 ) * sizeof( int ), SEEK_SET  );
			fread( &chislo, sizeof( int ), 1, dPtr );
			printf( "%3d", chislo );			

		} /* for */
	
	fclose( dPtr ); /* fclose zakrivaet fail */

	} /* conec if else */

	printf( "\n\n" );

	return; 

} /* conec printFileProiz */





	






Соседние файлы в предмете Основы алгоритмизации и программирования