Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2013, 00:54   #1
nati_94
Пользователь
 
Регистрация: 18.02.2013
Сообщений: 25
Вопрос с++ не получается правильно отсортировать динамический массив указателей на структуру по номеру группы

Считайте все записи из файла "6.dat". Для чтения каждой отдельной записи осуществите динамический захват памяти. Предполагается, что к-во записей в файле заранее неизвестно.

Выполните сортировку выбором:
номер группы (по возрастанию)

вроде логика правильная, а работает не так как хочется
Код:
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <ctime>
#include <string>
using namespace std;
void main() {
 setlocale(0,"");

 struct STUDENT
 {
 char FamiliaIO[20];
 int nomer_gruppi;
 int yspevaem[5];
 } *ptr;

 int f=0,flag=0;
 FILE *f1 = fopen("6.dat","rb");                               // открытие файла для чтения
       ptr = new STUDENT[100]; 
   while(ptr!=0)
   {     
   fread(&ptr[f],sizeof(ptr[f]),1,f1);         // чтение из файла
   if(feof(f1)) break;
   f++;flag++;
   }

   STUDENT *x;
   int tmp,  j, pos;

    for(int i = 0; i < flag; i++) // i - номер текущего шага
    { 
        pos = i; 
 tmp = ptr[i].nomer_gruppi;
        for(j = i + 1; j < flag; j++) // цикл выбора наименьшего элемента
        {
 if (ptr[j].nomer_gruppi < tmp) 
            {
               pos = j; 
   tmp = ptr[j].nomer_gruppi; 
            }
        }

 x=&ptr[pos];
        ptr[pos] = ptr[i]; 
        ptr[i] = *x; // меняем местами наименьший с ptr[i]

 }

 printf("Фамилия ИО   номер группы     успеваемость\n");
  int k=0;
  while( k<flag) 
  {    printf("%s   \t", (ptr+k)->FamiliaIO);
   printf("%d  \t",(ptr+k)->nomer_gruppi);                       // вывод на экран
    for(int i=0;i<5;i++)
 printf("%d ",(ptr+k)->yspevaem[i]);
 printf("\n");
           k++;
   
   }


   getch();
}

Последний раз редактировалось Stilet; 07.03.2013 в 09:06.
nati_94 вне форума Ответить с цитированием
Старый 07.03.2013, 09:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ptr = new STUDENT[100];
Это неверное решение. Что если их будет больше чем 100?

Р.S. Кстати попрошу не кросспостить. Это невежливо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не получается правильно осуществить сортировку таблицы в БД JuliaKiK БД в Delphi 11 22.02.2013 22:45
Динамический перелинк группы сайтов на один dmitry 67657 Фриланс 0 14.08.2012 01:52
Не получается настроить правильно роутер ImmortalAlexSan Компьютерное железо 6 06.11.2010 15:12
Не получается отсортировать структуру. В чем проблема понять никак не могу AlEnanechker Помощь студентам 1 25.12.2009 17:02
Не получается отсортировать nec117 Общие вопросы C/C++ 3 27.02.2009 20:42