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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка по алфавиту, Не работает 
:(
    Опции темы
gfz
Дата 27.12.2005, 01:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define DL_FIO 22
#define DL_MAUTO 10
#define DL_NOM 7
#define STRMAX 200
  struct AUTO
   {
    char fio [DL_FIO];
    char mauto [DL_MAUTO];
    char gosnom [DL_NOM+2];
   };
  struct EL_MAS
   {
    char fio [DL_FIO];
    char gosnom [DL_NOM+2];
   };
void sort (struct EL_MAS ms [],int n);

void AutoFIO (FILE *f);

void AutoKOL (FILE *f);

int main ()
{
 FILE *f;
 char r;
 clrscr ();
 f=fopen ("auto.txt", "r");
 if (f==NULL)
  {
   puts ("fail ne najden\n");
   getch ();
   clrscr ();
   return 1;
  }
 do
  {
   puts("Press any key for use Menu");
   getch();
   clrscr();
   puts ("\n=============================");
   puts ("\n Vyberite punkt menyu");
   puts ("\n 1. Familii vladelcev po marke avto");
   puts ("\n 2. Kolichestvo avto kazhdoj marki");
   puts ("\n 3. Exit");
   puts ("\n=============================\n");
   r=getche ();

   switch (r)
    {
     case '1':clrscr(); AutoFIO (f);rewind(f); break;
     case '2': AutoKOL (f);rewind(f); break;
     case '3': break;
     default: puts ("\n Nado vvodit' nomer ot 1 do 3"); break;
    }
  }
 while (r!='3');
 fclose (f);
 return 0;
}
void AutoKOL(FILE *f)
 {
   struct  AUTO tz;
   int tab[31];int i;
   char mmauto[31][DL_MAUTO];
   memset(tab, 0, sizeof(tab));
   memset(mmauto, ' ', sizeof(mmauto));
   while(fgets((char *)&tz, sizeof(struct AUTO), f))
    {
     tz.mauto[DL_MAUTO-1]='\0';
     for(i = 0; i < 31; ++i)
     if(strcmp(mmauto[i], tz.mauto) == 0)
      {
       tab[i]++;
       break;
      }
     else if(mmauto[i][0] == ' ')
      {
       strcpy(mmauto[i], tz.mauto);
       tab[i] = 1;
       break;
      }
    }
    printf("avto kolichestvo\n==================================\n");
    for( i = 0; i < 31; ++i) {
    if(tab[i] == 0)
    break;
    printf("%s  %d\n", mmauto[i], tab[i]);
 }
    getch();
    clrscr();
}

void AutoFIO (FILE *f)
 {
  int k;
  struct EL_MAS ms [STRMAX];
  int n;
  int i;
  char b[DL_MAUTO];
  struct AUTO tz;
  puts ("vvedite marku avto");
  scanf("%s",b);
  n=0;
  while (n<STRMAX && fgets((char *)&tz, sizeof (tz), f)!=NULL)
   {
    tz.mauto [DL_MAUTO-1]='\0';
    tz.fio [DL_FIO-1]='\0';for(k=0;(tz.mauto[k]!='\0') && k<DL_MAUTO-1;k++)
    if(tz.mauto[k]==' ')
    tz.mauto[k]='\0';
    if (strcmp(tz.mauto,b)==0)
     {
      strcpy (ms[n].gosnom, tz.gosnom);
      strcpy (ms[n].fio, tz.fio);
      n++;
     }
   }
  if (n==0)
   {
    puts ("net avto dannoj marki");
    getch ();
    clrscr ();
    return ;
   }
  else
   {
    sort (ms, n);
    puts ("\n Spisok vladelcev:");
    for (i=0; i<n; i++)
     {
      printf ("\n %d. %s %s", i+1, ms[i].fio, ms[i].gosnom);
      if ((i+1)%22==0)
       {
    puts ("dlya prodolzheniyz nazhmite lyubuyu klavishu");
    getch ();
    clrscr ();
       }
     }
   }
 }

void sort (struct EL_MAS ms [],int n)
 {
  int k, i=0;
  struct EL_MAS s;
  for (k=n-1; k>=1; k--)
  if (strcmp (ms[i].fio, ms[i+1].fio)>0)
   {
    s=ms[i];
    ms[i]=ms[i+1];
    ms[i+1]=s;
   }
 }

Я уже писал эту программу. Но сейчас другой вопрос. Самая концовка:
Код

void sort (struct EL_MAS ms [],int n)
 {
  int k, i=0;
  struct EL_MAS s;
  for (k=n-1; k>=1; k--)
  if (strcmp (ms[i].fio, ms[i+1].fio)>0)
   {
    s=ms[i];
    ms[i]=ms[i+1];
    ms[i+1]=s;
   }
 }

Задача: По введенной марке автомобиля вывести Фамилии (в алфавитном порядке) и госномера машин данной марки. В файле все фамилии по алфавиту. Но если переставить 2 фамилии местами, то вывод по алфавиту не происходит, т.е. массив не сортируется. Помогите решить. Скачать файл (auto.txt), в котором занесены фамилии владельцев, марки автомобилей и гос. номера можно тут http://webfile.ru/692750
З.Ы. Файл отсортирован по алфавиту, поменяйте местами 2 строки. Заранее спасибо.
  Вверх
_hunter
Дата 27.12.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



значит береш дебагер в руки и смотриш что происходит на каждой строке твоей sort() и на выходе из нее


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Chaos A.D.
Дата 27.12.2005, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 16.1.2005
Где: 09 RUS

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



Или как вариант полегче, пишешь функтор для сравнения, и юзаешь std::sort.
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest
PM MAIL   Вверх
adonin
Дата 27.12.2005, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

Репутация: 2
Всего: 5



Вы пытаетесь реализовать сортировку по методу "Пузырька". При реализации данного алгоритма нужно писать 2 вложенных цикла (n раз пробежать по массиву). У Вас в коде только 1 цикл (Вы пробегаете по массиву 1 раз).
Код будет выглядеть так:
Код

void sort (struct EL_MAS ms [],int n)
 {
  int k, i=0;
  struct EL_MAS s;
  for (j=0; j<n; j++)
    for (k=n-1; k>=1; k--)
    if (strcmp (ms[i].fio, ms[i+1].fio)>0)
     {
      s=ms[i];
      ms[i]=ms[i+1];
      ms[i+1]=s;
     }
 }



Это сообщение отредактировал(а) adonin - 27.12.2005, 11:56
--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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