Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сортировка поля структуры по алфавиту  (Прочитано 20204 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Groms
Гость
« : 07-02-2006 14:25 » 

Помогите пожалуйста, первый раз прошу помощи по программированию:
пишу на Borland C++
Итак задачка: имеется программа мною написанная.
Код:
#include <iostream.h>
struct sotr
{
char familia[20];
int day;
int mesac;
int year;
};
void main()
{
sotr sot[128];
int i,a,mes;
cout<<"Введите колличество сотрудников: ";
cin>>a;
for (i=0;i<a;i++)
{
cout<<"\nФамилия сотрудника №"<<i+1<<": ";
cin>>sot[i].familia;
cout<<"\nДень рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].day;
cout<<"\nМесяц рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].mesac;
cout<<"\nГод рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].year;
}
cout<<"\nВведите месяц: ";
cin>>mes;
cout<<"\nНеобходимо поздравить следующих сотрудников:\n";
for (i=0;i<a;i++)
{
if (mes==sot[i].mesac)
cout<<sot[i].familia<<endl;
}
}
Нужно отсортировать фамилии по алфавиту, фамилии будут вводиться маленькими русскими буквами,
я решил попробовать таким образом, но у меня не получается
Код:
#include <iostream.h>
struct sotr
{
char familia[20];
int day;
int mesac;
int year;
};
void main()
{
sotr sot[128];
int i,a,mes;
char *str;
cout<<"Введите колличество сотрудников: ";
cin>>a;
for (i=0;i<a;i++)
{
cout<<"\nФамилия сотрудника №"<<i+1<<": ";
cin>>sot[i].familia;
cout<<"\nДень рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].day;
cout<<"\nМесяц рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].mesac;
cout<<"\nГод рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].year;
}
for (i=0;i<a-1;i++)
{
if (sot[i].familia[0]>sot[i+1].familia[0])
{  
str=sot[i].familia;
sot[i].familia=sot[i+1].familia;
sot[i+1].familia=str;
}
}

}
Помогите пожалуйста, нужно для защиты индивидуалки
PS: в коде желательны комментарии
Записан
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #1 : 07-02-2006 17:24 » new

давай посмотрим на это:
Код:
for (i=0;i<a-1;i++)
{
if (sot[i].familia[0]>sot[i+1].familia[0])

str=sot[i].familia;
sot[i].familia=sot[i+1].familia;
sot[i+1].familia=str;
}
}

Ошибки:
Код:
sot[i].familia[0]>sot[i+1].familia[0]
так ты сравниваешь только первые буквы, а тебе нужно всю фамилию - используй функцию strcmp
Но, если мне не изменяет память, то с русскими буквами не все так просто. Попробуй ввести маленькими латинскими буквами. Если с ними заработает, а с русскими нет, то надо скорее всего писать свою функцию сравнения (но с этим я могу ошибаться)

Код:
str=sot[i].familia;
sot[i].familia=sot[i+1].familia;
sot[i+1].familia=str;
здесь ты меняешь местами указатели на фамилии, а остальные данные почему не сортируешь?
Записан

Удачного всем кодинга! -=x[PooH]x=-
Groms
Гость
« Ответ #2 : 07-02-2006 19:30 » 

PooH
Большое тебе спасибо за помощь, ты меня реально подтолкнул к решению, походу когда рассказывали про эти функции меня как раз на лекции небыло Улыбаюсь
Насколько я проверял, программа нормально работает и с кириллицей
Вот код
Код:
#include <iostream.h>
#include <string.h>
struct sotr
{
char familia[20];
int day;
int mesac;
int year;
};
void main()
{
sotr sot[128];
int i,j,a,m;
char* str;
cout<<"Введите колличество сотрудников: ";
cin>>a;
for (i=0;i<a;i++)
{
cout<<"\nФамилия сотрудника №"<<i+1<<": ";
cin>>sot[i].familia;
cout<<"\nДень рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].day;
cout<<"\nМесяц рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].mesac;
cout<<"\nГод рождения сотрудника "<<sot[i].familia<<": ";
cin>>sot[i].year;
}
for (j=0;j<=a;j++)
{
for (i=1;i<a;i++)
{
if (strcmp(sot[i-1].familia, sot[i].familia)>0)
{

strcpy(str, sot[i-1].familia);
strcpy(sot[i-1].familia, sot[i].familia);
strcpy(sot[i].familia, str);

m=sot[i-1].day;
sot[i-1].day=sot[i].day;
sot[i].day=m;

m=sot[i-1].mesac;
sot[i-1].mesac=sot[i].mesac;
sot[i].mesac=m;

m=sot[i-1].year;
sot[i-1].year=sot[i].year;
sot[i].year=m;
}
}
}
for (i=0;i<a;i++)
{
cout<<sot[i].familia<<endl;
cout<<sot[i].day<<endl;
cout<<sot[i].mesac<<endl;
cout<<sot[i].year<<endl<<endl;
}
}
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines