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

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

  1. stigel

    stigel Гость

    нужно поменять местами все элементы масива первый с последним( это значит первый на последнее место, а с последнего на первое и так все оставшиеся) нет привязки к размеру масива. посмотрите что здесь не так
    Код (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 Гость

    stigel

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

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

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

    acorn PHP Developer

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

    stigel Гость

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

    stigel Гость

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

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    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 *

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

    lazybiz Well-Known Member
    C\C++ Team

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

    Rififi Гость

    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

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

    Rififi Гость

    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

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

    Rififi Гость

    Acorn

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

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

    acorn PHP Developer

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

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