Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    В именах объектов (классов) USomething и FSomething, что значит U и F ?
     
  2. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    Здравствуйте уважаемые программисты! :)
    Пришёл к вам, как и любой другой новичок с проблемой :dntknw:
    На других форумах либо не могут помочь, либо не хотят. Осталась надежда только на ваш форум.
    Задача на С++. Быстрая сортировка. Написал код. Компилятор не ругается, но результат не выводит. Вот уже 2 часа сижу не могу найти ошибку... Помогите пожалуйста!
    Код (Text):
    1. #include <iostream>
    2. using namespace std;
    3. int a[5]={2,5,1,3,4};
    4.  
    5. void hello()
    6. {
    7.     int i;
    8.     cout << "myArray before sort:";
    9.     for (i=0; i<5; i++) cout << " " << a[i];
    10.     cout << endl;
    11. }
    12.  
    13. void sort(int l, int r)
    14. {
    15.     int i,j,w,x;
    16.     i=l;
    17.     j=r;
    18.     x=a[(l+r)/2];
    19.     do
    20.     {
    21.         while (a[i]<x) i++;
    22.         while (x<a[j]) j--;
    23.         if (i<=j)
    24.         {
    25.             w=a[i]; a[i]=a[j]; a[j]=w; i++; j--;
    26.         }
    27.     }
    28.     while (i>j);
    29.     if (l<j) sort(l,j);
    30.     if (r<i) sort(r,i);
    31. }
    32.  
    33. void end()
    34. {
    35.     int i;
    36.     cout << "myArray after sort:";
    37.     for (i=0; i<5; i++) cout << " " << a[i];
    38.     cout << endl;
    39. }
    40.  
    41. int main()
    42. {
    43.     hello();
    44.     sort(1,5);
    45.     end();
    46.     return 0;
    47. }
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    по алгоритму лень чото разбираться. но в глаза сразу бросается
    Код (Text):
    1. sort(1,5);
    2. лучше напесать наверное
    3. sort(0,4);
     
  4. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    Я уже всяко пробовал и (0,4) тоже... Проблема не в этом...
     
  5. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    Писал программу по алгоритму Вирта из книжки "Алгоритмы и структуры данных".
     
  6. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    Нашёл ещё одну ошибку - но всё-равно не то...
    Код (Text):
    1. if (r<i) sort(r,i);
    2. а надо
    3. if (i<r) sort(i,r);
     
  7. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    shock_X
    Это сортировка Хоара (qsort), как я понял. Она есть в K&R 5.6. Ну и на википедии: http://ru.wikipedia.org/wiki/Быстрая_сортировка
     
  8. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    meduza
    что такое
    ?

    Если имеете ввиду встроенную функцию - то я знаю. Но мне нужно разработать её самому и без указателей и без ссылок...
    С википедии не могу взять по причине описанной выше...
     
  9. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    Керниган, Ритчи "Язык С", раздел 5.6 -- там есть реализация qsort()

    зачем брать? на википедии есть вариант реализации почти как ваш (чуть ниже http://ru.wikipedia.org/wiki/Быстрая_сортировка#C), только имена пепременных другие -- сверьте!
     
  10. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    meduza
    Там циклы другие, но это ерунда.
    Меня смущает переменная m.
    И что это:
    означает?
    И зачем это:
    нужно?

    Неужели я совсем такой нуб...
     
  11. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    meduza
    Да, там тоже самое, что и у меня. НО! Почему у меня то результат не выводится...
    VS 2005 и VS 2008 ошибок не выдают...
     
  12. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    если m>0, то j--, иначе i++

    смена знака

    чтобы чередовать декремент j и инкремент i
     
  13. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    Всё! 4 часа мучений не прошли даром :)
    Я Нашёл ошибку. Всё-таки Википедия помагает :)
     
  14. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    meduza
    Спасибо за пояснения!
     
  15. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Код (Text):
    1. sort(1,5);
    2. ...
    3. i=l; //i=1
    4. j=r; //j=5
    5. ...
    6. while (i>j); //Получается что цикл будет рботать 1 раз.
    торможу....
     
  16. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    в цикле i и j изменяются
     
  17. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    meduza
    Могу выложить исходник, или эта тема не подходит?
     
  18. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    shock_X
    мне не надо ;)
     
  19. shock_X

    shock_X New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2008
    Сообщения:
    40
    meduza
    Да я понимаю, что тебе не надо. Может кому надо будет, вот я и спрашиваю можно ли (нужно ли) выложить исходник. Если можно, то в эту тему или есть специальная? :)
     
  20. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    простите, но я туплю.
    не напомнит ли мне кто-нибудь, корректно ли в С++ такое:
    Код (Text):
    1. class Foo{
    2.   int _x[];
    3. public:
    4.   Foo(int len){
    5.     assert(len > 0);
    6.     for (int i = 0; i < len; ++i){
    7.        _x[i] = i;
    8.     }
    9.   }
    10. };
    т.е. вопрос про инициализацию массивов в С++ при условии что на стадии декларации мы не знаем ск-ко элементов у массива будет.

    ps: про std::vector просьба не упоминать, т.к. вопрос _принципиально_ про инициализацию массивов в С++.