Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритмизация, (задача по массивам) 
:(
    Опции темы
Sergio
Дата 16.10.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Написать программу меняющую порядок следования элементов массива на противоположный (то есть первый элемент становится последним, а последний - первым; второй элемент становится предпоследним, а предпоследний - вторым и так далее) и выводящую результирующий массив на экран.
Вот код который я написал:
Код
int r=0;
int A[5]= {1,2,3,4,5};

 for (int x=0,y=4; r<6, x++; y++)
  {
   A[x]=A[y]-A[x];
    A[y]=A[y]-A[x];
     A[x]=A[x]+A[y];
      r=r+2;
  }

 for (int l=0; l<5; l++)
  {
   cout<<A[l]<<endl;
  }


Результат выводит всё ровно 1,2,3,4,5  А мне нужно 5,4,3,2,1. Помогите розобратся.

P.S. Код может быть на первий взгляд и странный.... Но я хотел решить задачу без вмешательства другого массива.

Это сообщение отредактировал(а) Sergio - 16.10.2006, 22:28
PM MAIL ICQ   Вверх
Daevaorn
Дата 16.10.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Sergio, 
Код

#include <algorithm>
#include <iostream>

int main()
{
    int A[]= { 1, 2, 3, 4, 5, 6 };
    int count = sizeof( A )/ sizeof( int );
    
    for( int i = 0; i < count / 2; ++i )
        std::swap( A[ i ], A[ ( count - 1 ) - i ] );

    for (int i = 0; i < count; ++i)
    {
        std::cout<< A[ i ] << std::endl;
    }
    return 0;
}


Добавлено @ 22:39 
Ещё проще
Код

#include <algorithm>
#include <iostream>

int main()
{
    int A[]= { 1, 2, 3, 4, 5 };
    int count = sizeof( A )/ sizeof( int );
    
    std::reverse( &A[ 0 ], &A[ 0 ] + count );

    for( int i = 0; i < count; ++i)
    {
        std::cout<< A[ i ] << std::endl;
    }
    return 0;
}

PM MAIL WWW   Вверх
Kuvaldis
Дата 16.10.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Sergio, 
имхо так
Код

int x, y;
int A[]= {1,2,3,4,5,6,7};
int size = sizeof(A) / sizeof(int);

 for (x = 0, y = size - 1; x < size / 2; x++, y--)
  {
     A[x]=A[y]-A[x];
     A[y]=A[y]-A[x];
     A[x]=A[x]+A[y];
  }
 for (int l = 0; l < size; l++)
  {
   std::cout<<A[l] << " ";
  }


Т.е. цикл до " середина / целочисленное деление на 2" Ты иначе два раза меняешь местами. Сначала поменял, а потом - в первоначальное положение smile 

Это сообщение отредактировал(а) Kuvaldis - 16.10.2006, 23:29


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Dov
Дата 16.10.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(Sergio @  16.10.2006,  22:26 Найти цитируемый пост)
Помогите розобратся.


Цитата(Sergio @  16.10.2006,  22:26 Найти цитируемый пост)
for (int x=0,y=4; r<6, x++; y++)


1. 
Код
for (int x=0,y=4; r < 4; x++, y--)

2. 
Код
for (int x=0,y=4; x < y; x++, y--)





--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
bsa
Дата 17.10.2006, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



странные у вас реализации...
Код
#inclide <iostream>
int A[] = { 1, 2, 3, 4, 5 };
main()
{
     const int n = sizeof(A) / sizeof(A[0]);
     int f,l;
     for(f = 0, l = n-1; f < l; ++f, --l) {
          const int x = A[f];
          A[f] = A[l];
          A[l] = x;
     }
     for(int i = 0; i < n; ++i)
          std::cout << a[i] << ", ";
     std::cout << std::endl;
}
Как вариант:
Код
#inclide <iostream>
#include <algorithm>
int A[] = { 1, 2, 3, 4, 5 };
main()
{
     const int n = sizeof(A) / sizeof(A[0]);

     int f,l;
     for(f = 0, l = n-1; f < l; ++f, --l)
          std::swap(A[f], A[l]);

     for(int i = 0; i < n; ++i)
          std::cout << a[i] << ", ";
     std::cout << std::endl;
}
Кстати, это уже было.  : smile 

Это сообщение отредактировал(а) bsa - 17.10.2006, 15:46
PM   Вверх
Sergio
Дата 17.10.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Kuvaldis,  не могу понять что такоэ sizeof , и зачем вот это 
Код
int size = sizeof(A) / sizeof(int);


PM MAIL ICQ   Вверх
JackYF
Дата 17.10.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



RTFM: sizeof(переменная) либо sizeof(тип) возвращает соотвественно размер переменной/типа в байтах.

А вышенаписанный код вычисляет размер массива, на что намекает его название.
( Размер, занимаемый всем массивом делится на размер одной его ячейки ).

Добавлено @ 18:07 
Также sizeof может применяться и к любому выражению.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
jnb
Дата 17.10.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 4.10.2006

Репутация: нет
Всего: 1



Цитата(Sergio @ 17.10.2006,  17:58)
Kuvaldis,  не могу понять что такоэ sizeof , и зачем вот это 
Код
int size = sizeof(A) / sizeof(int);


количество элементов массива = размер массива / размер одного элемента
PM MAIL   Вверх
ДобренькийПапаша
Дата 18.10.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



самая нормальная реализация у господина bsa. А остальное велосипеды ненужные, хотя, конечно, всё это просто очень.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Earnest
Дата 20.10.2006, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Если уж спользовать стандартную библиотеку, так использовать: 
Код

std::reverse (A, A + sizeof(A) / sizeof(A[0]));



--------------------
...
PM   Вверх
JackYF
Дата 20.10.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Earnest, тоже вариант  smile
Короткое и отнюдь не самое медленное решение проблемы.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Daevaorn
Дата 20.10.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Earnest @  20.10.2006,  19:39 Найти цитируемый пост)
std::reverse (A, A + sizeof(A) / sizeof(A[0]));

JackYF, 
кхе. 2 пост этой темы smile 

PM MAIL WWW   Вверх
JackYF
Дата 20.10.2006, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Извини,
Daevaorn, бывает. Просто тема уже несколько дней продолжается, я уже только на последние сообщения смотрел.

Еще раз приношу свои извинения.

 smile P.S. То же самое, наверное, справедливо и для 
Earnest


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.