Методические указания ЛР10_примеры__2014 (1079950), страница 4
Текст из файла (страница 4)
На основе этой функции (Swap) выполнить сортировку массива структурныхпеременных по одному числовому значению, используя метод пузырьковой сортировки.17Оптимизацию алгоритма сортировки не проводить. Распечатать массив до и послесортировки.//////// ГЛАВНАЯ ПРОГРАММА// Сортировка массива по одному полю записи////////// МУ п.19////////printf ("Пункт МУ 19 (SORT - pStMas - до):\n");StudPrintMas( pStMas , StudCount);// Сортировка по окладуfor( int k =0 ; k< StudCount - 1 ; k++)for ( int i =0 ; i< StudCount - 1 ; i++ )if ( (pStMas + i)->Oklad > (pStMas + i + 1)->Oklad ) // ВозрастаниеSwapStudent( pStMas + i , pStMas + i + 1 );printf ("Пункт МУ 19 (SORT - pStMas - после Oklad):\n");StudPrintMas( pStMas , StudCount);// Сортировка по имениfor( int k =0 ; k< StudCount - 1 ; k++)for ( int i =0 ; i< StudCount - 1 ; i++ )if ( strcmp((pStMas + i)->Name , (pStMas + i + 1)->Name ) > 0 ) //ВозрастаниеSwapStudent( pStMas + i , pStMas + i + 1 );printf ("Пункт МУ 19 (SORT - pStMas - после Name):\n");StudPrintMas( pStMas , StudCount);// Сортировка по номеруfor( int k =0 ; k< StudCount - 1 ; k++)for ( int i =0 ; i< StudCount - 1 ; i++ )if ( (pStMas + i)->Num > (pStMas + i + 1)->Num ) // ВозрастаниеSwapStudent( pStMas + i , pStMas + i + 1 );printf ("Пункт МУ 19 (SORT - pStMas - после Num):\n");StudPrintMas( pStMas , StudCount);////////Результат работы программы:Пункт МУ 19Запись: ИмяЗапись: ИмяЗапись: ИмяЗапись: ИмяПункт МУ 19Запись: ИмяЗапись: ИмяЗапись: ИмяЗапись: ИмяПункт МУ 19Запись: ИмяЗапись: ИмяЗапись: ИмяЗапись: ИмяПункт МУ 19Запись: ИмяЗапись: ИмяЗапись: ИмяЗапись: Имя(SORT - pStMas= Запись № - 3= Новая= Запись № - 1= Запись № - 4(SORT - pStMas= Запись № - 3= Запись № - 4= Новая= Запись № - 1(SORT - pStMas= Запись № - 1= Запись № - 3= Запись № - 4= Новая(SORT - pStMas= Запись № - 4= Новая= Запись № - 3= Запись № - 1- до):Номер = 6 СтипендияНомер = 2 СтипендияНомер = 7 СтипендияНомер = 0 Стипендия- после Oklad):Номер = 6 СтипендияНомер = 0 СтипендияНомер = 2 СтипендияНомер = 7 Стипендия- после Name):Номер = 7 СтипендияНомер = 6 СтипендияНомер = 0 СтипендияНомер = 2 Стипендия- после Num):Номер = 0 СтипендияНомер = 2 СтипендияНомер = 6 СтипендияНомер = 7 Стипендия====4278.087449.579168.374886.93====4278.084886.937449.579168.37====9168.374278.084886.937449.57====4886.937449.574278.089168.3720.
Разработать функцию сортировки массива структурных переменных по числовомузначению. Проверить ее работу. Распечатать массив до и после сортировки.//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// МУ п.20//////////////////////////////////void StudSortMasNum( Student * pStMas , int StudCount )18{};for( int k =0 ; k< StudCount - 1 ; k++)for ( int i =0 ; i< StudCount - 1 ; i++ )if ( (pStMas + i)->Num > (pStMas + i + 1)->Num ) // ВозрастаниеSwapStudent( pStMas + i , pStMas + i + 1 );…//////// ПРОТОТИП// МУ п.20void StudSortMasNum( Student * pMas , int Razm );…//////// ГЛАВНАЯ ПРОГРАММА////////// МУ п.20////////printf ("Пункт МУ 20 (SORT - функция - до):\n");StudPrintMas( pStMas , StudCount);StudSortMasNum( pStMas , StudCount );printf ("Пункт МУ 20 (SORT - функция - после):\n");StudPrintMas( pStMas , StudCount);//…Результат работы программы:Пункт МУ 20Запись: ИмяЗапись: ИмяЗапись: ИмяЗапись: ИмяПункт МУ 20Запись: ИмяЗапись: ИмяЗапись: ИмяЗапись: Имя(SORT - функция - до):= Запись № - 3Номер == НоваяНомер == Запись № - 1Номер == Запись № - 4Номер =(SORT - функция - после):= Запись № - 4Номер == НоваяНомер == Запись № - 3Номер == Запись № - 1Номер =6270СтипендияСтипендияСтипендияСтипендия====4278.087449.579168.374886.930267СтипендияСтипендияСтипендияСтипендия====4886.937449.574278.089168.3721.
Разработать функцию сортировки файла структурных переменных (записей).Алгоритм функции включает три шага: (1) чтение двоичного файла в массив – уже естьготовая функция; (2) пузырьковая сортировка массива структурных переменных– уже естьготовая функция и (3) перезапись массива в двоичный файл – уже есть готовая функция.Проверить сортировку файлов со структурными переменными.//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// Сортировка массива по окладу по убыванию// МУ п.21/////////////////////////////void StudSortOklad(const char * FileName ){// Чтение из файла в массивStudent * pStudMas;int Razm;StudFileToMas( FileName , &pStudMas , &Razm );// Сортировка массива по окладу по убываниюfor (int i = 0 ; i < Razm - 1 ; i++ )for (int k = 0 ; k < Razm - 1 ; k++ )// Сортировка разные режимы!!!!!!!!!!!!!!!!!!!!!!!!!!!if ( ((Student *)(pStudMas + k))->Oklad > ((Student *)(pStudMas + k +1))->Oklad ) //Убывание курс{ SwapStudent ( pStudMas + k , pStudMas + k+1 ); };//StudMasToFile( FileName , pStudMas , Razm );19};///////////////////////////////////////// Сортировка по имени (дополнительные примеры) МУ п.21//////////////////////////////////////void StudSortName(const char * FileName ){// Чтение из файла в массивStudent * pStudMas;int Razm;StudFileToMas( FileName , &pStudMas , &Razm );///////////////////////////////for (int i = 0 ; i < Razm - 1 ; i++ )for (int k = 0 ; k < Razm - 1 ; k++ )// Сортировка по имениif ( strcmp(((Student *)(pStudMas + k))->Name , ((Student *)(pStudMas + k +1))->Name) > 0 )// Убывание имя{ SwapStudent ( pStudMas + k , pStudMas + k+1 ); };//StudMasToFile( FileName , pStudMas , Razm );};//////////////////////////////////////// Сортировка по номеру (дополнительные примеры) МУ п.21//////////////////////////////////////void StudSortNum(const char * FileName ){// Чтение из файла в массивStudent * pStudMas;int Razm;StudFileToMas( FileName , &pStudMas , &Razm );StudSortMasNum( pStudMas , Razm ); // Использование сортировки в массиве!!!StudMasToFile( FileName , pStudMas , Razm );};/////////////////////////////////////////////////////////…//////// ПРОТОТИП// МУ п.21void StudSortOklad(const char * FileName );void StudSortName(const char * FileName );void StudSortNum(const char * FileName );…//////// ГЛАВНАЯ ПРОГРАММА////////// МУ п.21////////// Сортировка файла (!!!) по одному полю записи/////////////////////////////////////////////////////printf ("СОРТИРОВКА: Работа с функциями Name:\n");StudSortName("BDStud.bin" );StudPrintFile( "BDStud.bin" );/////////////////////////////////////////////////////printf ("СОРТИРОВКА: Работа с функциями Num (убывание):\n");StudSortNum("BDStud.bin");StudPrintFile( "BDStud.bin" );/////////////////////////////////////////////////////printf ("СОРТИРОВКА: Работа с функциями Oklad(возрастание ):\n");StudSortOklad("BDStud.bin" );StudPrintFile( "BDStud.bin" );/////////////////////////////////////////////////////…Результат работы программы:20Пункт МУ 21СОРТИРОВКА:1 - Запись:2 - Запись:3 - Запись:4 - Запись:СОРТИРОВКА:1 - Запись:2 - Запись:3 - Запись:4 - Запись:СОРТИРОВКА:1 - Запись:2 - Запись:3 - Запись:4 - Запись:(SORT - c разными функциями):Работа с функциями Name:Имя = Запись № - 1Номер = 0 СтипендияИмя = Запись № - 3Номер = 5 СтипендияИмя = Запись № - 4Номер = 3 СтипендияИмя = НоваяНомер = 4 СтипендияРабота с функциями Num (убывание):Имя = Запись № - 1Номер = 0 СтипендияИмя = Запись № - 4Номер = 3 СтипендияИмя = НоваяНомер = 4 СтипендияИмя = Запись № - 3Номер = 5 СтипендияРабота с функциями Oklad(возрастание ):Имя = Запись № - 3Номер = 5 СтипендияИмя = Запись № - 4Номер = 3 СтипендияИмя = Запись № - 1Номер = 0 СтипендияИмя = НоваяНомер = 4 Стипендия====2746.36873.441478.016173.89====2746.361478.016173.89873.44====873.441478.012746.366173.8922.
Прочитать 2-ю запись из сформированного файла структурных переменных и еераспечатать с помощью собственной функции./////////////////////////////////////////////////////////////// МУ п.22 чтение одной записи 3-й (0 - 4 )////////Student SFind ;pFBin = _open( "BDStud.bin" , _S_IREAD |_O_BINARY );if ( pFBin != -1 ){long posF = _lseek( pFBin, sizeof(Student) * 2, SEEK_SET ); // Установить новую текущую позициюint nByte = _read( pFBin , &SFind , sizeof(Student));};printf ("Пункт МУ 22:\n");printf ("Чтение из программы (номер = 3):\n");PrintStudent( &SFind );// Закрытие файла_close( pFBin );//…Результат работы программы:1 - Запись: Имя = Новая2 - Запись: Имя = Запись №3 - Запись: Имя = Запись №4 - Запись: Имя = Запись №Пункт МУ 22:Чтение из программы (номерЗапись: Имя = Запись № - 3- 1- 3- 4НомерНомерНомерНомер= 3):Номер =====75578СтипендияСтипендияСтипендияСтипендияСтипендия =====2106.085002.905799.437895.755799.4322.
Создать функцию для чтения записи из сформированного файла структурныхпеременных по номеру и ее распечатать с помощью собственной функции.////////////////////////////////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ////////////////////////////////////////////////// Поиск и выборка одной записи по номеру// МУ п.22.1///////////////////////////////////////////void FindStudNum( const char * FileName , Student * pS , int Numb){Student * pStudMas;int Razm;StudFileToMas( FileName , &pStudMas , &Razm );if ( Numb < 0 || Numb >= Razm ){pS->Name[0] = '\0';21}elsepS->Num = NULL;pS->Oklad = NULL;memcpy( pS , pStudMas + Numb , sizeof(Student) );delete [] pStudMas;};…//////// ПРОТОТИП// МУ п.22.1void FindStudNum( const char * FileName , Student * pS , int Numb);…//////// ГЛАВНАЯ ПРОГРАММА// МУ п.22.1 чтение из функции///////////// - Прочитать запись по номеруprintf ("Чтение из функции (номер = 1):\n");// Student SFind ;FindStudNum( "BDStud.bin" , &SFind , 1);PrintStudent( &SFind );…Результат работы программы:Чтение из функции (номер = 1):Запись: Имя = Запись № - 1Номер =5Стипендия =5002.9022.
Разработать и фрагмент программы для интегральных вычислений в БД (см.варианты в таблице). Интегральные вычисления для вашего файла структурныхпеременных заключаются в последовательном чтении всех записей файла. Из каждой изполученных записей для отдельного параметра выполняется суммирование, подсчет,сравнение и т.д. Шаги выполнения этой задачи могут быть такими: чтение файла вмассив, вычисления по массиву в цикле (например, числа пятерок), обработка результата(например, получение среднего числа пятерок у студента) и распечатка результата.Можно в цикле по шагам читать последовательно все записи и вычислять интегральныехарактеристики.//////// ГЛАВНАЯ ПРОГРАММА// МУ п.22////////double SumStip = 0;Student SIntg;printf ("Пункт МУ 22.2(Интегральные расчеты):\n");pFBin = _open( "BDStud.bin" , _S_IREAD |_O_BINARY );if ( pFBin != -1 ){for ( int i = 0 ; _eof(pFBin) == NULL ; i++ ){int nByte = _read( pFBin , &SIntg , sizeof(Student));SumStip = SumStip + SIntg.Oklad;}_close( pFBin );};printf ( "Фонд зарплаты в цикле = %8.2lf \n" , SumStip );Результат работы программы:Пункт МУ 22.2(Интегральные расчеты):Фонд зарплаты в цикле = 13479.7222.















