Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 13.04.2009
Сообщений: 38

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

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

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста со следующей задачей.
Задан целочисленный массив размера N. Поменять местами i-ую и j-ую
серии массива. Номера i и j вводятся пользователем.
Использовать дополнительные массивы запрещено.
Если бы не было последнего условия, задача была бы простой. Язык программирования С.
Заранее спасибо всем откликнувшимся.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2009, 17:19
Ответы с готовыми решениями:

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

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

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

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

Поясните.
0
0 / 0 / 1
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 17:28  [ТС]
Серия – последовательность одинаковых элементов в массиве. Один элемент – это
тоже серия длиной равной единице.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.10.2009, 18:10
Цитата Сообщение от Horrorous Посмотреть сообщение
Один элемент – это тоже серия длиной равной единице.
Попросил пояснить же...
Так что, поменять один элемент местами со вторым?
0
0 / 0 / 1
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 18:42  [ТС]
поменять надо местами эти серии
Пример
массив: 1112334445556
i=2
j=5
результат:1115553344426
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.10.2009, 18:44
О! Понял. Щас.
0
0 / 0 / 1
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 20:57  [ТС]
Все еще нуждаюсь в помощи по данной задаче
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
30.10.2009, 21:05
Horrorous, Упс Я забыл. В общем сделаю(пятницо же )
0
0 / 0 / 1
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 21:20  [ТС]
мне прост завтра уже нужна эта задача, так что если можете то сдейте сегодня, а если нет то что ж поделаешь, спс хоть за то что откликнулись
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
30.10.2009, 22:09
Вот, сделано неоптимально и на скорую руку, но для лабораторной сойдёт (:

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
0
0 / 0 / 1
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 22:14  [ТС]
Дело в том что нужно написать программу на С а не на с++, если это возможно не могли бы вы перевести это на C
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
30.10.2009, 22:15
На Си гемора будет много. лень (:
0
8 / 8 / 5
Регистрация: 30.05.2009
Сообщений: 47
30.10.2009, 22:18
так еще можно попробовать

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 );
 
}
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
30.10.2009, 22:19
Цитата Сообщение от Rififi Посмотреть сообщение
Вот, сделано неоптимально и на скорую руку, но для лабораторной сойдёт (:
За такую лабораторную ему экзамен автоматом поставят..
1
0 / 0 / 1
Регистрация: 13.04.2009
Сообщений: 38
30.10.2009, 22:23  [ТС]
ISergey, эт точно Еще если считать что мы ток массивы на С прошли

Добавлено через 1 минуту
SONNY, боюсь что это тоже на С++ и тоже не подходит, сделайте плиз тоже на С потому что сам я абсолютно ничего не понимаю в том что написано на С++...
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
31.10.2009, 00:14
Лучший ответ Сообщение было отмечено как решение

Решение

Вроде так..
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
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdlib.h>
 
int find_f(int x, int *arr, int size){
    int i;
    for( i = 0; i < size; ++i)
        if(arr[i] == x)
            return i;
    return -1;
}
int find_l(int x, int *arr, int size){
    int i;
    for( i = size - 1; i >= 0; --i)
        if(arr[i] == x)
            return i;
    return -1;
}
 
int count_(int p, int *arr){
    int count = 0;
    int *_p = arr + p;
    while(*_p == *(arr + p)){
        ++count;
        ++_p;
    }
    return count;
}
 
void shift_right(int e, int pos, int *arr, int size){
    int buff, i;
    int pos_e = find_f(e, arr, size);
    int count_e = count_(pos_e, arr);
    pos += (count_(pos, arr) - 1); 
    for( i = 0; i < count_e; ++i){
        while(arr[pos - i] != e){
            buff = arr[pos_e];
            arr[pos_e] = arr[pos_e + 1];
            arr[pos_e + 1] = buff;
            ++pos_e;
        }
        pos_e = find_f(e, arr, size);
    }
}
void shift_left(int e, int pos, int *arr, int size){
    int buff, i;
    int pos_e = find_f(e, arr, size);
    int count_e = count_(pos_e, arr);
    for( i = 0; i < count_e; ++i){
        pos_e = find_l(e, arr, size);
        while(arr[pos + i] != e){
            buff = arr[pos_e];
            arr[pos_e] = arr[pos_e - 1];
            arr[pos_e - 1] = buff;
            --pos_e;
        }
    }
}
int main(){
 
    int arr[] = {1, 1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6};
    int size = sizeof(arr)/sizeof(arr[0]);
    int _i = 2, _j = 5, i;
    int pos_j = find_f(_j, arr, size),
        pos_i = find_f(_i, arr, size);
    
    shift_left (_j, pos_i, arr, size);
    shift_right(_i, pos_j, arr, size);
 
    for( i = 0; i < size; ++i){
        printf("%d ", arr[i]);
    }
 
    printf("\n");
    return 0;
}
Результат
i = 2, j = 5;
1 1 1 5 5 5 3 3 4 4 4 2 6 6
i = 4, i = 6;
1 1 1 2 3 3 6 6 5 5 5 4 4 4
i = 1, j = 5
5 5 5 2 3 3 4 4 4 1 1 1 6 6
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2009, 00:14
Помогаю со студенческими работами здесь

Поменять местами две части массива
Помогите не понимаю почему не меняет местами правильно. Задача поменять две части как на рисунке (черный цвет) нарезаем как правильно...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru