Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ОАИП. Лб №2
.cpp// 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 */
Соседние файлы в предмете Основы алгоритмизации и программирования