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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

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

не получается немного прога, помогите, пожалуйта, как исправить.
Сформировать структуру STUDENT для хранения следующей информации:

· фамилия и инициалы;

· номер группы;

· успеваемость (массив из пяти элементов).



Подготовьте массив указателей на STUDENT на 50 элементов.

Считайте все записи из файла "6.dat" .

Для чтения каждой отдельной записи осуществите динамический захват памяти.

Соответствующий адрес храните в массиве указателей.

Выполните сортировку данных по алфавиту (по фамилии) - причем сортировать потребуется только указатели в массиве.

Выведите отсортированнный массив.


Код:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
#include<string.h>

using namespace std;

void main()
 { setlocale(0,"");
 struct STUDENT
 {
 char FamiliaIO[20];
 int nomer_gruppi;
 int yspevaem[5];
 } s1,*s[50];




       FILE *f1 = fopen("6.dat","a+b");

       while (true)
       {        
       puts("Введите фамилию или 0 (конец ввода)");
   scanf("%s",&s1.FamiliaIO);
   if (s1.FamiliaIO[0] == '0') break;
   puts("номер группы");
   scanf("%i",&s1.nomer_gruppi);
    puts("успеваемость, 5 оценок");
 for(int i=0;i<5;i++)
 scanf("%i", &s1.yspevaem[i]);
 fwrite(&s1,sizeof(s1),1,f1);
   }
   fclose(f1);
    
       puts("Файл 6.dat записан\n");
   //        чтение из файла
   f1 = fopen("6.dat","rb");
       //while(true)
   
   for (int i = 0; i<50; i++)
   {   s[i] = new STUDENT;
   fread(s[i],sizeof(STUDENT),1,f1);    // тут считывает  адрес, как сделать 
   if(feof(f1)) break;                  //что б считывало информацию
   }
   STUDENT *x;bool r=false;
   
  for(int i=0; i<50;i++)
  {
   if(strcmp(s[i]->FamiliaIO, s[i+1]->FamiliaIO)>=0) r=true;
   else 
   {
   while (strcmp(s[i]->FamiliaIO, s[i+1]->FamiliaIO)<0)
   {
     
   x=s[i+1];
   s[i+1]=s[i];
   s[i]=x;
     
   }
   }
  }
  
  printf("Фамилия ИО     номер группы     успеваемость\n");
   for(int i=0;i<50;i++)
   {
   printf ("%s ",s[i]->FamiliaIO);
   printf("%i",s[i]->nomer_gruppi);
   for(int i=0;i<5;i++)
   printf("%i", s[i]->yspevaem[i]);
   }
       fclose(f1);

   delete[] s;
   getch();
}

Последний раз редактировалось Stilet; 18.02.2013 в 12:06.
nati_94 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры, указатели, строки, с++ Arantir# Помощь студентам 5 29.10.2012 13:22
Динамические структуры. указатели. записи. паскаль. Владисла8 Фриланс 4 14.05.2012 17:36
Структуры через указатели ensoleille Помощь студентам 2 21.02.2011 14:10
Структуры и указатели. Geg[C/c++] Помощь студентам 3 30.09.2009 12:13
Структуры и указатели phpcreator Помощь студентам 1 09.09.2009 17:57