Важная информация
Показано с 1 по 3 из 3

Тема: Сортировка

  1. #1 Сортировка 
    Новичок
    Регистрация
    30.10.2018
    Сообщений
    2
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Здравствуйте, столкнулся с такой проблемой, при сортировке меняется местоположение имени в алфавитном порядке, но номер телефона и дата рождения не меняют своё место. Например, Кирилл - телефон - 89125, дата рождения 12.2.1990, Антон - телефон - 89546, дата рождения 1.5.1983. После сортировки Антон станет на первом месте с телефоном и датой рождения Кирилла и наоборот, как это сделать?

    C++ Code:
    1.  
    2. #include <iostream>
    3. #include <string>
    4. using namespace std;
    5. struct Note
    6. {
    7. string name;
    8. unsigned long int tele;
    9. int bday[3];
    10. };
    11. int main()
    12. {
    13. setlocale(0, "rus");
    14. const long int size=3;
    15. Note blocknote[size];
    16. int i,month;
    17. int n=0;
    18. int count=0;
    19. string hold;
    20. for(n=0;n<size;n++)
    21. {
    22. cout<<"Vvedite name ";
    23. cin>>blocknote[n].name;
    24. cout<<"Vvedite telefon ";
    25. cin>>blocknote[n].tele;
    26. cout<<"Vvedite daty rozhdeniya (3 chisla) ";
    27.         cin>>blocknote[n].bday[0]>>blocknote[n].bday[1]>>blocknote[n].bday[2];
    28.         cout<<endl;
    29.     }
    30.  
    31.     for (int pass=size-1;pass>0;pass--)
    32.     {
    33.      for(int n=0;n<pass;n++)
    34.      if (blocknote[n].name>blocknote[n+1].name)
    35.      {
    36.      hold=blocknote[n].name;
    37.      blocknote[n].name=blocknote[n+1].name;
    38.      blocknote[n+1].name=hold;
    39.      }
    40.     }
    41.  
    42. cout<<"Vvedite month ";
    43. cin>>month;
    44. cout<<endl;
    45. for(n=0;n<size;n++)
    46. {
    47. if(blocknote[n].bday[1]==month)
    48. {
    49. cout<<"Name "<<blocknote[n].name<<endl;
    50. cout<<"Telefon "<<blocknote[n].tele<<endl;
    51. cout<<"Data rozhdeniya "<<blocknote[n].bday[0]<<"."<<blocknote[n].bday[1]<<"."<<blocknote[n].bday[2]<<endl;
    52. cout<<endl;
    53. }
    54. else
    55. count++;
    56. }
    57. if (count==size)
    58. cout<<"Takih net"<<endl;
    59.     return 0;
    60. }
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Ну а как ты хочешь? - ты переставляешь имена, они переставляются:
    C++ Code:
    1. hold=blocknote[n].name;
    2. blocknote[n].name=blocknote[n+1].name;
    3. blocknote[n+1].name=hold;

    А все остальное остается на месте.
    Не вникал в алгоритм, но исправить можно так:
    C++ Code:
    1. for (int pass=size-1;pass>0;pass--) {
    2.   for(int n=0;n<pass;n++) {
    3.     if (blocknote[n].name>blocknote[n+1].name) {
    4.       swap(blocknote[n], blocknote[n+1]);
    5.     }
    6.   }
    7. }
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (31.10.2018), Free Admin (31.10.2018), YClaw (31.10.2018)

  4. #3  
    Новичок
    Регистрация
    30.10.2018
    Сообщений
    2
    Сказал(а) спасибо
    1
    Поблагодарили 0 раз(а) в 0 сообщениях
    Большое спасибо за помощь
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 16.11.2017, 12:52
  2. указатели и сортировка
    от anshelika в разделе C/C++
    Ответов: 1
    Последнее сообщение: 07.01.2014, 21:34
  3. Ответов: 4
    Последнее сообщение: 01.04.2012, 10:08
  4. Ответов: 7
    Последнее сообщение: 09.12.2011, 16:06
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •