Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> структуры, их сортировка [BC3.1], ну вобщем как отсортировать? 
V
    Опции темы
Веталька
Дата 23.3.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 2.11.2008

Репутация: нет
Всего: 6



нужно написать структуру которая вводит инфу о 5ти студентах(имя,год рожления, средняя оценка за сесию...), и выводит ето дело в порядке средней оценки за сесию, ну структуру создать проблем несоставило, а как ето дело отсортировать?



Код

#include <stdio.h>
#include <conio.h>
#include <string.h>
  struct teacher    {
    char name[20],inc[5],dep[20],sub[20];int ball;
  };
int add();
int print();
int main()
{
      int ch=1;
    while (ch!=0)    {
        clrscr();
        printf("\t €­д®а¬ жлп ® бв㤥­вҐ \n\‚лЎҐаҐвҐ ०Ё¬:\n"
               "1 - ¤®Ў ў«Ґ­Ёп Ё­д®а¬ жлЁ\n2 - ўлў®¤ Ё­д®а¬ жлЁ\n0 - ўл室\n");
        scanf("%d",&ch);
        switch (ch)    {
            case 1: if ((ch=add())==0) return 0;     break;
            case 2: if ((ch=print())==0) return 0;  break;
            case 0: return 0;
            default: printf("ЋиЁЎЄ  ЇаЁ ўў®¤Ґ!!!");
        }
    }
    return 0;
}
int add()
{
      FILE *f=fopen("7.inf","a");
      struct teacher in;
      int ch=1;
    while (ch==1)    {
        clrscr();
        printf("€¬п :");
        scanf("%s%s",in.name,in.inc);
        printf("\n„ в  ஦¤Ґ­Ёп :");
        scanf("%s",in.dep);
        printf("\nѓ®¤ Ї®бвгЇ«Ґ­Ёп ў г­ЁўҐабЁвҐв :");
        scanf("%s",in.sub);
        printf("\n‘।­Ё© Ў « §  бҐбЁо") ;
        scanf("%d",in.ball);
        fprintf(f,"%s %s %s %s\n",in.name,in.inc,in.dep,in.sub);
        printf("1 - „®Ў ўЁвм ҐйҐ\n2 - ­  Ј« ў­го\n0 - ўл室\n");
        scanf("%d",&ch);
    }
    fclose(f);
    return ch;
}

int print()
{
      FILE *f=fopen("7.inf","r");
      struct teacher *p,*p1,*p2,temp;
      int n=0,ch=0;
    clrscr();
    while (fscanf(f,"%s%s%s%s")==4)    n++;
    fseek(f,0L,SEEK_SET);
    p=new struct teacher[n];
    while (fscanf(f,"%s%s%s%s",temp.name,temp.inc,temp.dep,temp.sub)==4)    {
        *(p+ch)=temp;
        ch++;
    }
    fclose(f);
    for (ch=0;ch<n;ch++)    {
        p1=p;
        p2=p+1;
        for (;p2<p+n-ch;p1++,p2++)
            if (strcmp((*p1).name,(*p2).name)>0)    {
                temp=*p1;
                *p1=*p2;
                *p2=temp;
            }
    }
    for (ch=0;ch<n;ch++)
        printf("%-10s%-10s%-10s%-10s\n",p[ch].name,p[ch].inc,p[ch].dep,p[ch].sub);
    delete []p;
    printf("\n1 - ­  Ј« ў­го\n0 -exit\n");
    scanf("%d",&ch);
    return ch;
}


и можно еще вопрос один? вот например если средний бал = 4 как етого студента удалить из файла?

Это сообщение отредактировал(а) Веталька - 23.3.2009, 20:08


--------------------
Ради зачета студент идет на все, даже на лекции........................ 
PM MAIL ICQ   Вверх
Rififi
Дата 23.3.2009, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



Веталька, 
а как ето дело отсортировать?

c++ qsort struct example

PM MAIL   Вверх
Веталька
Дата 23.3.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 2.11.2008

Репутация: нет
Всего: 6



в общем почитал немного, все переделал, вот что получилось 
Код


#include <stdio.h>
#define KST 25

int main(void)
{
 struct student {
   char name [35];
   char grup [10];
   long number;
   double rating;
 } starr[KST] , stud, *pst, *pst1, *pst2;
 int k, kst;
 double inrating;

   printf("kilkist studentiv-");
   scanf("%d",&kst);    getchar();
   puts("\t Dani");
   for (k=0; k<kst; k++)  {
       printf("\n%2d.prizv,name",k+1);
       gets(starr[k].name);
       printf("grup");
       gets((starr+k)->grup);
       printf("num st bilet");
       scanf("%ld",&starr[k].number);
       printf("ser ball");
       scanf("%lf",&inrating); getchar();
       (starr+k) -> rating = inrating;
   }
   for(k=0; k<kst; k++)
      pst1=starr;   pst2=starr+1;
      for( ; pst2<starr+kst-k; pst1++, pst++)
        if (pst1 -> rating < pst2 -> rating) {
          stud=*pst1;
          *pst1=*pst2;
          *pst2=stud;
          }
      }
      puts("\n\t spusok st");
      for(k=0, pst=starr; k<kst; k++, pst++)
          printf("%2d.  %-30.27s%-8s%8ld%8.2lf\n", k+1, pst -> name, pst ->grup, pst -> number, pst -> rating);
          return 0;
 }


но серовно нероботает:(




--------------------
Ради зачета студент идет на все, даже на лекции........................ 
PM MAIL ICQ   Вверх
zim22
Дата 23.3.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Веталька @  23.3.2009,  21:28 Найти цитируемый пост)
в общем почитал немного, все переделал, вот что получилось 

упростите свою задачу до минимума. сделайте так, чтобы программа заработала правильно.
к примеру:
создайте структуру из двух элементов типа int. и отсортируйте её. получилось? усложняйте - добавьте одну переменную типа char и попробуйте снова. 



--------------------
PM MAIL   Вверх
Веталька
Дата 23.3.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 2.11.2008

Репутация: нет
Всего: 6



вот поправил етот код теперь столкнулся с проблемой вывода(я так думаю) мне пишет Floating point error: Domain. изватся неполучается никак, посмотри пожалуста код#include 
Код

<stdio.h>
#define KST 25

int main(void)
{
 struct student {
   char name [35];
   char grup [10];
   long number;
   double rating;
 } starr[KST] , stud, *pst, *pst1, *pst2;
 int k, kst;
 double inrating;

   printf("kilkist studentiv-");
   scanf("%d",&kst);    getchar();
   puts("\t Dani");
   for (k=0; k<kst; k++)  {
       printf("\n%2d.prizv,name",k+1);
       gets(starr[k].name);
       printf("grup");
       gets((starr+k)->grup);
       printf("num st bilet");
       scanf("%ld",&starr[k].number);
       printf("ser ball");
       scanf("%lf",&inrating); getchar();
       (starr+k) -> rating = inrating;
   }
   for(k=0; k<kst; k++)   {
      pst1=starr;   pst2=starr+1;
      for( ; pst2<starr+kst-k; pst1++, pst++)
        if (pst1 -> rating < pst2 -> rating) {
          stud=*pst1;
          *pst1=*pst2;
          *pst2=stud;
          }
      }
      puts("\n\t spusok st");
      for(k=0, pst=starr; k<kst; k++, pst++)
          printf("%2d.  %-30.27s%-8s%8ld%8.2lf\n", k+1, pst -> name, pst ->grup, pst -> number, pst -> rating);
          return 0;
 }


Добавлено через 3 минуты и 13 секунд
сам справилсяsmile

Это сообщение отредактировал(а) Веталька - 23.3.2009, 22:28


--------------------
Ради зачета студент идет на все, даже на лекции........................ 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.