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

  • Автор темы stigel
  • Дата начала
S

stigel

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

}
 
R

Rififi

#2
stigel

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

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

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

stigel

#4
я для того чтобы когда прога дойдёт до середины масиваона остановилась ведь дальше не надо менять
 
S

stigel

#5
подскажите что надо зделать или как нужно это сделать
 

acorn

PHP Developer
29.08.2004
585
3
#6
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;
}
 
R

Rififi

#9
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]));
 

acorn

PHP Developer
29.08.2004
585
3
#10
Rififi
C++:
 begin != end && begin != --end
т.е. 2 и 3 элементы местами нельзя менять? не пугайте всех своими страшными алгоритмами.
 
R

Rififi

#11
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 есть некое подобие указателей
 

acorn

PHP Developer
29.08.2004
585
3
#12
Rififi
поверьте, в своё время я достаточно пописал на C++, так что мне ваш алгоритм не страшен. я про студента говорю - зачем ему указатели, когда он не может простейшую задачу решить?
 
R

Rififi

#13
Acorn

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

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