Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
#1

Поменять местами две серии в массиве. - C++

30.10.2009, 17:19. Просмотров 2129. Ответов 15
Метки нет (Все метки)

Помогите пожалуйста со следующей задачей.
Задан целочисленный массив размера N. Поменять местами i-ую и j-ую
серии массива. Номера i и j вводятся пользователем.
Использовать дополнительные массивы запрещено.
Если бы не было последнего условия, задача была бы простой. Язык программирования С.
Заранее спасибо всем откликнувшимся.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2009, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поменять местами две серии в массиве. (C++):

Поменять местами две серии в массиве - C++
Помогитие пожалуйста написать программку на С. Задан целочисленный массив размера N. Поменять местами i-ую и j-ую серии массива. Номера i...

Создать одномерный массив, заполнить его случайными числами. Поменять в массиве местами две его половины - C++
Создать одномерный массив и заполнить его случайными целыми числами. Вывести массив. Поменять в массиве местами две его половины (в...

В двумерном массиве поменять местами максимальный и минимальный элемент местами - C++
Написать фрагмент программы для решения следующей задачи.В двумерном массиве поменять местами максимальный и минимальный элемент местами....

Поменять местами две строки матрицы - C++
1 6 7 2 5 8 3 4 9. Язык программирования Си.

Поменять местами две любые строки матрицы - C++
Дан двумерный массив. Составить программу, которая меняет местами две любые строки массива

Двумерный массив: поменять местами две строки - C++
Нужно поменять местами две строки в массиве:строку, которая содержит максимальный элемент матрицы, и строку, содержащую минимальный ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.10.2009, 17:24 #2
Цитата Сообщение от Horrorous Посмотреть сообщение
Поменять местами i-ую и j-ую
серии массива.
Что значит "серии" ?
Массив целочисленный(POD). Значит оператор [] дает доступ к элементу, значит поменять можно элементы.

Поясните.
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 17:28  [ТС] #3
Серия – последовательность одинаковых элементов в массиве. Один элемент – это
тоже серия длиной равной единице.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.10.2009, 18:10 #4
Цитата Сообщение от Horrorous Посмотреть сообщение
Один элемент – это тоже серия длиной равной единице.
Попросил пояснить же...
Так что, поменять один элемент местами со вторым?
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 18:42  [ТС] #5
поменять надо местами эти серии
Пример
массив: 1112334445556
i=2
j=5
результат:1115553344426
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.10.2009, 18:44 #6
О! Понял. Щас.
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 20:57  [ТС] #7
Все еще нуждаюсь в помощи по данной задаче
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.10.2009, 21:05 #8
Horrorous, Упс Я забыл. В общем сделаю(пятницо же )
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 21:20  [ТС] #9
мне прост завтра уже нужна эта задача, так что если можете то сдейте сегодня, а если нет то что ж поделаешь, спс хоть за то что откликнулись
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
30.10.2009, 22:09 #10
Вот, сделано неоптимально и на скорую руку, но для лабораторной сойдёт (:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <algorithm>
#include <functional>
#include <vector>
#include <iterator>
#include <locale>
#include <iostream>
 
template <typename T>
struct finder : public std::unary_function<T, bool>
{
    typedef typename std::iterator_traits<typename T::value_type::first_type>::value_type value_type;
 
    finder(value_type v) : v_(v) {}
    
    bool operator()(const typename T::value_type& v) const
    {
        return *v.first == v_;
    }
 
    const value_type v_;
};
 
template <typename T>
void mutate_sequance(T begin, T end)
{
    typedef typename std::iterator_traits<T>::value_type value_type;    
    
    typedef std::vector<std::pair<T, T> > V;
    V v;
    
    T curr = begin, next;
    for(; (next = std::adjacent_find(curr, end, std::not2(std::equal_to<value_type>()))) != end; curr = ++next)
        v.push_back(std::make_pair(curr, next+1));
 
    v.push_back(std::make_pair(curr, next));
 
    typename V::iterator _1 = std::find_if(v.begin(), v.end(), finder<V>(2));
    typename V::iterator _2 = std::find_if(v.begin(), v.end(), finder<V>(5));
    std::iter_swap(_1, _2);
 
    std::cout << "После:\t";
    for (typename V::const_iterator it = v.begin(); it != v.end(); ++it)
        std::copy(it->first, it->second, std::ostream_iterator<value_type>(std::cout, " "));
    std::cout << std::endl;
}
 
int main()
{
    setlocale(LC_ALL, "");
    int arr[] = {1,1,1,2,3,3,4,4,4,5,5,5,6};
    const size_t N = sizeof(arr) / sizeof(arr[0]);
 
    std::vector<std::pair<const int*, const int*> > v;
 
    std::cout << "До:\t";
    std::copy(arr, arr+N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    mutate_sequance(arr, arr+N);
 
    return 0;
}
Вывод:
До: 1 1 1 2 3 3 4 4 4 5 5 5 6
После: 1 1 1 5 5 5 3 3 4 4 4 2 6
Проверка: http://codepad.org/p6Nf23rx
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 22:14  [ТС] #11
Дело в том что нужно написать программу на С а не на с++, если это возможно не могли бы вы перевести это на C
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
30.10.2009, 22:15 #12
На Си гемора будет много. лень (:
SONNY
8 / 8 / 0
Регистрация: 30.05.2009
Сообщений: 47
30.10.2009, 22:18 #13
так еще можно попробовать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <algorithm>
#include <functional>
 
template<typename _RndIt, typename _Tr = std::iterator_traits<_RndIt> > class Swap_seq
{
public:
    typedef typename _Tr::value_type value_type;
    typedef std::reverse_iterator<_RndIt> Rev_iter;
 
    static void swap_seq( _RndIt first, _RndIt last, value_type v_1, value_type v_2 )
    {
        _RndIt begin_1 = std::find( first, last, v_1 );
        _RndIt end_1 = std::find( Rev_iter(last), Rev_iter(first), v_1 ).base();
        typename _Tr::difference_type count_1 = std::count( first, last, v_1 );
 
        _RndIt begin_2 = std::find( first, last, v_2 );
        _RndIt end_2 = std::find( Rev_iter(last), Rev_iter(first), v_2 ).base();
       typename _Tr::difference_type count_2 = std::count( first, last, v_2 );
 
      if( count_1 > count_2 )
      {
          while( count_1-- != 0 )
              std::swap( *(begin_1++), *(--end_2) );
      }
      else
      {
          while( count_2-- != 0 )
              std::swap( *(begin_1++), *(--end_2) );
      }
 
    }
};
 
int _tmain( int argc, _TCHAR* argv[] )
{
    int coll[] = { 1, 1, 1, 2, 3, 3, 8, 8, 9, 9, 9 };
       const size_t size = sizeof(coll)/sizeof(int);
 
    Swap_seq<int*>::swap_seq( coll, coll + size, 2, 9 );
 
}
ISergey
Maniac
Эксперт С++
1373 / 884 / 52
Регистрация: 02.01.2009
Сообщений: 2,653
Записей в блоге: 1
30.10.2009, 22:19 #14
Цитата Сообщение от Rififi Посмотреть сообщение
Вот, сделано неоптимально и на скорую руку, но для лабораторной сойдёт (:
За такую лабораторную ему экзамен автоматом поставят..
Horrorous
0 / 0 / 0
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 22:23  [ТС] #15
ISergey, эт точно Еще если считать что мы ток массивы на С прошли

Добавлено через 1 минуту
SONNY, боюсь что это тоже на С++ и тоже не подходит, сделайте плиз тоже на С потому что сам я абсолютно ничего не понимаю в том что написано на С++...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2009, 22:23
Привет! Вот еще темы с ответами:

Двумерный массив: поменять местами две строки - C++
В матрице из целых положительных чисел поменять местами две строки: строка, которая содержит максимальный элемент матрицы, и строку,...

Поменять местами две заданные строки матрицы - C++
С++. Дан двумерный числовой массив. Составить программу обмена местами заданных двух его строк.

В матрице поменять местами две строки с заданными номерами - C++
2)Из элементов полученной матрицы, которые лежат на главной диагонали и под ней, сформировать нижнюю треугольную матрицу С; 3)Из...

Поменять местами две средние строки матрицы с первой и последней - C++
Ребят Добрый вечер помогите написать программу на с++, очень нужно у самого в с++ фактически нулевые знания. Буду очень очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.10.2009, 22:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru