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

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

Войти
Регистрация
Восстановить пароль
 
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
#1

Дан массив 49 элементов. Сделать перестановку чисел в 1ой и последней семерке - C++

12.04.2013, 20:11. Просмотров 478. Ответов 9
Метки нет (Все метки)

Подскажите, пожалуйста, как сделать перестановку чисел в семерке. Т.е. число в 0 индексом поменять с 6, 1 - с 5ым, 2ое с 4м, 3 остается неизменным. Тоже самое в последней семерке.

Я пытался решить, как-то неправильно выходит:

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
# include <iostream>
# include <stdlib.h>
# include <time.h>
using namespace std;
 
void main ()
{
    srand (time(NULL));
 
    const int size=49;
    int arr[size];
    int i, temp;
 
    //генерация чисел массива
    for (i=0; i<size; i++)
        arr[i]=rand()%50;
    cout<<"Massive\n"<<arr[i];
 
    //перестановка элементов
    for (i=0; i<size/7; i++)
        temp=arr[i*7];
    arr[i*7]=arr[i*7-5];
 
    cout<<"\nChanged massive\n:"<<"\n"<<arr[i];
 
    for (i=0; i<size; i++)
        cout<<arr[i];
        
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 20:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дан массив 49 элементов. Сделать перестановку чисел в 1ой и последней семерке (C++):

Дан массив В[0:n-1] целых чисел и числа x и y , где x<y. на основе элементов массива В сформировать массив D[0:m-1] - C++
Нужен полный текст программы, заранее благодарен

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

Дан массив целых чисел. Сделать задание с использованием пользовательских функций - C++
Дан массив целых чисел. Все его элементы: a) увеличить в 2 раза б) умножить на последний элемент в) увеличить на число B ...

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

Дан массив натуральных чисел А[m,n] и число а. Вывести этот массив на экран, вычислит количество элементов равных а и вывести их индексы - C++
Дан массив натуральных чисел А и часло а. Вывести этот массив на экран, обчислить количество элементов равных а и вывести их индексы. ...

Дан двухмерный массив целых чисел. Определить сумму элементов больших 30 - C++
Дан двухмерный массив целых чисел. Определить сумму элементов больших 30

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
12.04.2013, 20:38 #2
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iterator>
 
using namespace std;
 
int random()
{
    return rand() % 90 + 10;
}
 
int main()
{
    setlocale(LC_CTYPE, "");
    srand((time(0)));
    vector<int> vec(49);
    generate(vec.begin(), vec.end(), random);
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
    reverse(vec.begin(), vec.begin() + 7);
    reverse(vec.rbegin(), vec.rbegin() + 7);
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
    return 0;
}
Если нужна функция, реализующая перестановку, то вот она:
C++
1
2
3
4
5
6
7
8
template <class T>
void _reverse(T beg, T en)
{
    while ((beg!=en) && (beg!=--en)) {
        swap(*beg, *en);
        beg++;
    }
}
2
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
14.04.2013, 19:49  [ТС] #3
Цитата Сообщение от Olivеr Посмотреть сообщение
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iterator>
 
using namespace std;
 
int random()
{
    return rand() % 90 + 10;
}
 
int main()
{
    setlocale(LC_CTYPE, "");
    srand((time(0)));
    vector<int> vec(49);
    generate(vec.begin(), vec.end(), random);
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
    reverse(vec.begin(), vec.begin() + 7);
    reverse(vec.rbegin(), vec.rbegin() + 7);
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
    return 0;
}
Если нужна функция, реализующая перестановку, то вот она:
C++
1
2
3
4
5
6
7
8
template <class T>
void _reverse(T beg, T en)
{
    while ((beg!=en) && (beg!=--en)) {
        swap(*beg, *en);
        beg++;
    }
}
Спасибо Oliver, но ничего не понятно. Функции и векторы для реализации этой задачи не подойдут. Это далеко вперед. Нужно ее попроще решить.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
14.04.2013, 20:39 #4
ashta, а что Вам мешает в том коде заменить вектор на массив? Тем более, функцию перестановки я Вам написал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <class T>
void _reverse(T *beg, T *en)
{
    while ((beg!=en) && (beg!=--en)) {
        swap(*beg, *en);
        beg++;
    }
}
 
int main()
{
 
    int arr[7] = {1,2,3,4,5,6,7};
    _reverse(arr, arr+7);
    for (size_t i = 0; i!=7; i++)
        cout << arr[i] << " ";
 
    return 0;
}
1
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
14.04.2013, 21:08  [ТС] #5
Цитата Сообщение от Olivеr Посмотреть сообщение
ashta, а что Вам мешает в том коде заменить вектор на массив? Тем более, функцию перестановки я Вам написал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <class T>
void _reverse(T *beg, T *en)
{
    while ((beg!=en) && (beg!=--en)) {
        swap(*beg, *en);
        beg++;
    }
}
 
int main()
{
 
    int arr[7] = {1,2,3,4,5,6,7};
    _reverse(arr, arr+7);
    for (size_t i = 0; i!=7; i++)
        cout << arr[i] << " ";
 
    return 0;
}
Да, но происходит сортировка в обратном направлении. А нужно поменять местами числа 0 с 6 элементом, 2 с 5ым и тд. Средний остается на своем месте. + такую же замену в последней семерке сделать.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
14.04.2013, 21:39 #6
Цитата Сообщение от ashta Посмотреть сообщение
Да, но происходит сортировка в обратном направлении. А нужно поменять местами числа 0 с 6 элементом, 2 с 5ым и тд. Средний остается на своем месте. + такую же замену в последней семерке сделать.
Какая сортировка?) Функция меняет переставляет значение, как Вы и написали.
Гляньте сами подставив массив:
C++
1
int arr[7] = {55,2,1,6,8,7,-22};
0
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
14.04.2013, 22:22  [ТС] #7
Цитата Сообщение от Olivеr Посмотреть сообщение
Какая сортировка?) Функция меняет переставляет значение, как Вы и написали.
Гляньте сами подставив массив:
C++
1
int arr[7] = {55,2,1,6,8,7,-22};

http://screencast.com/t/8DreaQ19akL
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
14.04.2013, 22:24 #8
ashta, ну вот переставьте элементы 1,2,3,4,5,6,7 как Вы писали выше и выйдет 7,6,5,4,3,2,1
0
ashta
6 / 6 / 1
Регистрация: 28.08.2012
Сообщений: 65
14.04.2013, 22:29  [ТС] #9
Цитата Сообщение от ashta Посмотреть сообщение

)))) все, просто неудачный пример. все работает, спасибо

Добавлено через 2 минуты
Только по условию 49 элементов и нужно сделать перестановку в 1ой и последней семерке. Мне все равно не подойдет Ваше решение.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
14.04.2013, 22:31 #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
template <class T>
void _reverse(T *beg, T *en)
{
    while ((beg!=en) && (beg!=--en)) {
        swap(*beg, *en);
        beg++;
    }
}
 
int main()
{
    srand(time(0));
 
    int arr[49];
    for (size_t i = 0; i!=49; i++)
        arr[i] = i;
    _reverse(arr, arr+7);
    _reverse(arr+49-7,arr+49);
    for (size_t i = 0; i!=49; i++)
        cout << arr[i] << " ";
 
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 22:31
Привет! Вот еще темы с ответами:

Дан массив натуральных чисел. Найти сумму элементов, кратных данному K - C++
Дан массив натуральных чисел. Найти сумму элементов, кратных данному K #include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; ...

Дан массив действительных чисел. Найти сумму элементов с четными номерами и произведение элементов с нечетными номерами - C++
Дан массив действительных чисел. Найти сумму элементов с четными номерами и произведение элементов с нечетными номерами.

Дан массив целых чисел. Определить количество четных элементов и количество элементов, оканчивающихся на цифру 5 - C++
Дан массив целых чисел. Определить количество четных элементов и количество элементов, оканчивающихся на цифру 5 с++

Дан массив a(n), сформированный датчиком случайных чисел на интервале (-10, 170). Из элементов массива А - C++
Дан массив А(N), сформированный датчиком случайных чисел на интервале (-10, 170). Из элементов массива А,кратных 6, сформировать массив B. ...


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

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

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