замена элементов масива местами

Тема в разделе "Общие вопросы по С и С++", создана пользователем stigel, 3 янв 2011.

  1. stigel

    stigel Гость

    Репутация:
    0
    нужно поменять местами все элементы масива первый с последним( это значит первый на последнее место, а с последнего на первое и так все оставшиеся) нет привязки к размеру масива. посмотрите что здесь не так
    Код (C++):
     int n;
    int m[]={3,2,7,5,1,8,2};


    int z=n/2;
    int i;
    for(i=0; i; i++,n--){
    int t=m[i];
    m[i]=m[n];
    m[n]=t;

    }
     
  2. Rififi

    Rififi Гость

    Репутация:
    0
    stigel

    посмотрите что здесь не так

    дохрена всего

    в переменной n содержится мусор, переменная z ХЗ зачем, цикл - бесконечный, выход за пределы массива, сама прога - неправильная.
     
  3. acorn

    acorn PHP Developer
    Web Team

    Репутация:
    0
    Регистрация:
    29 авг 2004
    Сообщения:
    585
    Симпатии:
    3
    stigel
    for(i=0; i!=n; i++,n--)
     
  4. stigel

    stigel Гость

    Репутация:
    0
    я для того чтобы когда прога дойдёт до середины масиваона остановилась ведь дальше не надо менять
     
  5. stigel

    stigel Гость

    Репутация:
    0
    подскажите что надо зделать или как нужно это сделать
     
  6. acorn

    acorn PHP Developer
    Web Team

    Репутация:
    0
    Регистрация:
    29 авг 2004
    Сообщения:
    585
    Симпатии:
    3
    stigel
    блин, да я ведь тебе уже написал.. а так да, откуда взялась переменная n и зачем z непонятно. вот этот код должен работать:

    Код (C++):
     
    int n = 7; //кол-во элементов в массиве, не помню какая функция за это отвечает :[
    int m[]={3,2,7,5,1,8,2}; // сам массив

    int t;
    for(int i=0, int j=n; i < j; i++, j--)
    {
    t = m[i];
    m[i] = m[j];
    m[j] = t;
    }
     
  7. hosm

    hosm * so what *

    Репутация:
    0
    Регистрация:
    18 май 2009
    Сообщения:
    2.445
    Симпатии:
    8
    мб, так:
    int n= sizeof(m) / sizeof(int);
     
  8. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Не могу сказать что неправильно, но обычно это делается так:
    Код (C++):
    n = sizeof( array ) / sizeof( array[0] );
     
  9. Rififi

    Rififi Гость

    Репутация:
    0
    stigel

    Код (C++):
    void array_reverse(int* begin, int* end)
    {
    for (; begin != end && begin != --end; ++begin)
    {
    int tmp = *begin;
    *begin = *end;
    *end = tmp;
    }
    }

    ...

    int m[]={3,2,7,5,1,8,2};
    array_reverse(m, m + sizeof(m)/sizeof(m[0]));
     
  10. acorn

    acorn PHP Developer
    Web Team

    Репутация:
    0
    Регистрация:
    29 авг 2004
    Сообщения:
    585
    Симпатии:
    3
    Rififi
    Код (C++):
     begin != end && begin != --end
    т.е. 2 и 3 элементы местами нельзя менять? не пугайте всех своими страшными алгоритмами.
     
  11. Rififi

    Rififi Гость

    Репутация:
    0
    Acorn

    т.е. 2 и 3 элементы местами нельзя менять?

    что означает эта фраза я не понял. функция реверсирует любые массивы

    Код (C++):
    #include <locale>
    #include <algorithm>
    #include <iostream>
    #include <iterator>

    template <typename T, size_t N>
    std::ostream& operator<< (std::ostream& os, const T (&arr)[N])
    {
    std::copy(arr, arr + N, std::ostream_iterator<T>(os, " "));
    return os;
    }

    void array_reverse(int* begin, int* end)
    {
    for (; begin != end && begin != --end; ++begin)
    {
    int tmp = *begin;
    *begin = *end;
    *end = tmp;
    }
    }

    template <typename T, size_t N>
    void test(T (&arr)[N])
    {
    std::cout << (const char*) "Normal:\t\t" << arr << std::endl;
    array_reverse(arr, arr+N);
    std::cout << (const char*) "Reversed:\t" << arr << std::endl;

    std::cout << std::endl;
    }

    int main()
    {
    setlocale(LC_ALL, "");

    int m1[] = {1};
    int m2[] = {1,2};
    int m3[] = {1,2,3};
    int m4[] = {1,2,3,4};

    test(m1);
    test(m2);
    test(m3);
    test(m4);

    return 0;
    }
    http://codepad.org/1kz8yjnr

    не пугайте всех своими страшными алгоритмами.

    ну может для скриптовика оно и страшно... ;) хотя и в php есть некое подобие указателей
     
  12. acorn

    acorn PHP Developer
    Web Team

    Репутация:
    0
    Регистрация:
    29 авг 2004
    Сообщения:
    585
    Симпатии:
    3
    Rififi
    поверьте, в своё время я достаточно пописал на C++, так что мне ваш алгоритм не страшен. я про студента говорю - зачем ему указатели, когда он не может простейшую задачу решить?
     
  13. Rififi

    Rififi Гость

    Репутация:
    0
    Acorn

    зачем ему указатели

    а как эту задачу решить без использования указателей?
     
  14. acorn

    acorn PHP Developer
    Web Team

    Репутация:
    0
    Регистрация:
    29 авг 2004
    Сообщения:
    585
    Симпатии:
    3
    Rififi
    а мой алгоритм чем плох?
     
Загрузка...

Поделиться этой страницей