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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2008, 23:37   #1
Serzhi1
Пользователь
 
Регистрация: 23.12.2008
Сообщений: 12
По умолчанию Не работает сортировка

Здравствуйте. Нужна ваша помощь по C++(Borland 5.02). Условия задачи состоит в следующем: есть структура, которая состоит из ФИО, Группы, Номера зачетки, Года рождения, Телефона. Нужно сделать сортировку по ФИО. Я значит сделал, но(что не удивительно для меня) оно как всегда не работает. Подскажите кто чем может

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

struct stud{
char pib[50];
char group[10];
char zalik[15];
int rik;
char telephone[10];};

void vvod(stud *a, int n);
void vivod(stud *a, int n);

int main(){
const int n=2;
stud a[n];
vvod(a,n);
vivod(a,n);
getch();
return 0;}

void vvod(stud *a, int n)
{for (int i=0;i<n;i++)
{
cout<<"\n\n\nVvedite PIB\n";
cin>>a[i].pib;
cout<<"Vvedite gruppu\n";
cin>>a[i].group;
cout<<"Vvedite nomer zachetnoj knizhki\n";
cin>>a[i].zalik;
cout<<"Vvedite god\n";
cin>>a[i].rik;
cout<<"Vvedite telephone\n";
cin>>a[i].telephone;
}}

void vivod(stud *a, int n)
{

int i,j;
char x[20];

for(i=0;i<n;i++){
for(j=(n-1);j>i;j--){
 if(a[j-1].pib[0]>a[j].pib[0]){
  x[20]==a[j-1].pib;
  a[j-1].pib==a[j].pib;
  a[j].pib==x[20];
 }
}
cout<<a[i].pib;
}
}
Модератор: тег CODE юзаем для оформления кода

Последний раз редактировалось MaTBeu; 23.12.2008 в 23:42.
Serzhi1 вне форума Ответить с цитированием
Старый 23.12.2008, 23:38   #2
Serzhi1
Пользователь
 
Регистрация: 23.12.2008
Сообщений: 12
По умолчанию

Точнее работает, но не сортирует.
Serzhi1 вне форума Ответить с цитированием
Старый 23.12.2008, 23:46   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Для сравнения строк используется функция strcmp. Но она сравнивает строки по длине. Если вам нужно по алфавиту, то нужно (в самом простом варианте) просто проверять первую букву каждого ФИО. Можно проверять по ASCII-кодам. Так будет проще всего. А дальше обычная сортировка пузырьком.
MaTBeu вне форума Ответить с цитированием
Старый 23.12.2008, 23:55   #4
Serzhi1
Пользователь
 
Регистрация: 23.12.2008
Сообщений: 12
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Для сравнения строк используется функция strcmp. Но она сравнивает строки по длине. Если вам нужно по алфавиту, то нужно (в самом простом варианте) просто проверять первую букву каждого ФИО. Можно проверять по ASCII-кодам. Так будет проще всего. А дальше обычная сортировка пузырьком.
Нужно по алфавиту
Код:
a[j-1].pib[0]<a[j].pib[0]
- это я беру не первую букву фамилии? Если нет, то как докапаться до нее? Насколько мне известно, если тип char, то оно должно само по ASCII-кодам сравниваить. Но вот не работает...а сортировку я делал вроде бы и так методом пузырька.
Serzhi1 вне форума Ответить с цитированием
Старый 24.12.2008, 00:04   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Смотря как вы вводите это самое ФИО. Если сначала фамилию, то так, как вы пишете будет правильно.
MaTBeu вне форума Ответить с цитированием
Старый 24.12.2008, 00:10   #6
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от Serzhi1 Посмотреть сообщение
Здравствуйте. Нужна ваша помощь по C++(Borland 5.02). Условия задачи состоит в следующем: есть структура, которая состоит из ФИО, Группы, Номера зачетки, Года рождения, Телефона. Нужно сделать сортировку по ФИО. Я значит сделал, но(что не удивительно для меня) оно как всегда не работает. Подскажите кто чем может
Что это?
Код:
  x[20]==a[j-1].pib;
  a[j-1].pib==a[j].pib;
  a[j].pib==x[20];
== - это оператор сравнения, а не присваивания. И, вообще, сама идея твоей перестановки элементов никуда не годится.

Нужно переставлять полностью все содержимое структуры, а не одного поля.
Код:
stud temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
como вне форума Ответить с цитированием
Старый 24.12.2008, 00:13   #7
Serzhi1
Пользователь
 
Регистрация: 23.12.2008
Сообщений: 12
По умолчанию

Да. Сначала фамилию. Оно компилирует..запускается но не сортирует
Я 1 курс, так что не смейтесь с ошибок
я еще щас увидел что по моему решению должна менятся только фамилия а не вся информация о студенте. Но тем не менее даже она не меняется.
Serzhi1 вне форума Ответить с цитированием
Старый 24.12.2008, 00:18   #8
Serzhi1
Пользователь
 
Регистрация: 23.12.2008
Сообщений: 12
По умолчанию

Цитата:
Сообщение от como Посмотреть сообщение
Что это?
Код:
  x[20]==a[j-1].pib;
  a[j-1].pib==a[j].pib;
  a[j].pib==x[20];
== - это оператор сравнения, а не присваивания. И, вообще, сама идея твоей перестановки элементов никуда не годится.

Нужно переставлять полностью все содержимое структуры, а не одного поля.
Код:
stud temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
Да просто я еще не достаточно шарю и иногда приходится методом тыка делать.. так вот при "=" выводит ошибку Lvalue required(49,14) и (50,12), а при "==" работало но не правильно...поэтому наверно я забыл исправит назад)
Serzhi1 вне форума Ответить с цитированием
Старый 24.12.2008, 00:25   #9
Serzhi1
Пользователь
 
Регистрация: 23.12.2008
Сообщений: 12
По умолчанию

Код:
stud temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
Вот это помогло и все заработало! Спасибо вам!
Serzhi1 вне форума Ответить с цитированием
Старый 24.12.2008, 00:36   #10
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от Serzhi1 Посмотреть сообщение
Код:
stud temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
Вот это помогло и все заработало! Спасибо вам!
У каждого сообщения такая кнопочка есть: отправить отзыв. Хорошим сообщениям рекомендуется оставлять положительные отзывы
como вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Проблема с UserForm. То работает, то НЕ работает Maxx Microsoft Office Excel 6 19.11.2008 14:51
Плохо работает сортировка Lady_olga БД в Delphi 11 04.06.2008 23:10
TDBgridEh -не работает Сортировка adminhl БД в Delphi 0 01.04.2008 20:40
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16