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

Поменять начало и конец

21.01.2014, 19:43. Показов 2399. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
дан массив из m+n элементов. начало массива это a[0]..a[m], конец массива это a[m+1]..a[m+n]. написать функцию, котороая меняет начало и конец местами
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2014, 19:43
Ответы с готовыми решениями:

начало и конец подпоследовательности
Дано натуральные число n и целые числа а1, а2 ... аn. Для последовательности а1, а2 ... аn...

Змейка. Начало и конец.
Решил написать Змейку с нуля. Не хотелось бы никуда подглядывать и копировать чужие идеи - хочется...

начало и конец цикла в коде.
Вот программа по определению магического квадрата из матрицы, заданной в txt файле. #include...

Введите начало и конец отрезка
Здравствуйте! Возникла проблема! В int program мне нужно проверить начало и конец отрезка на то,...

21
Заблокирован
21.01.2014, 20:20 2
Выбор m как происходит?
0
0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 22
21.01.2014, 20:32  [ТС] 3
Ev_Hyper, m и n самому вводить
0
Заблокирован
21.01.2014, 20:35 4
Элементы массива задаются программно или пользователи их вводит?

Правильно ли я вас понял, есть массив

>>m?
3
>>n?
6

2 3 4 0 9 7 6 3 -2 3

В итоге:
9 7 6 3 -2 3 2 3 4 0
0
0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 22
21.01.2014, 20:42  [ТС] 5
Ev_Hyper, массив задается программно
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Правильно ли я вас понял, есть массив
>>m?
3
>>n?
6
2 3 4 0 9 7 6 3 -2 3
В итоге:
9 7 6 3 -2 3 2 3 4 0
да
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.01.2014, 20:48 6
Цитата Сообщение от ffynjy Посмотреть сообщение
дан массив из m+n элементов. начало массива это a[0]..a[m], конец массива это a[m+1]..a[m+n].
ты старательно описал массив m+n+1
посмотри тему про циклический сдвиг массива, это как раз твой вариант
Функция циклического сдвига массива
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.01.2014, 20:49 7
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
#include <iostream>
 
void reverse(int *a, const int size)
{
    for (int i=0; i < size/2; i++)
    {
        int tmp = a[i];
        a[i] = a[size - 1 - i];
        a[size - 1 - i] = tmp;
    }
}
 
int main()
{
    int m, n;
    std::cin >> m >> n;
    int* a = new int[m*n];
    std::cout << "Before:\n";
    for (int i=0; i < m*n; i++)
    {
        a[i] = i+1;
        std::cout << a[i] << " ";
    }
 
    swap(a, m*n);
    std::cout << "\nAfter:\n";
    for (int i=0; i < m*n; i++)
        std::cout << a[i] << " ";
 
    delete[] a;
    std::cout << std::endl;
}
1
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.01.2014, 20:53 8
Цитата Сообщение от MrGluck Посмотреть сообщение
swap
я бы назвал reverse
все таки разворачиваешь массив а не переставляешь элементы
0
MrGluck
21.01.2014, 20:55
  #9

Не по теме:

Переименовал, изначально от функции другого хотел (то, что фактически внутри цикла описано), потом заленился и написал лишь одну функцию.

0
ValeryS
21.01.2014, 21:04
  #10

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Переименовал,
ага :)
Цитата Сообщение от MrGluck Посмотреть сообщение
void reverse(int *a, const int size)
Цитата Сообщение от MrGluck Посмотреть сообщение
swap(a, m*n);
напиши заново
я так понял редактировать уже не можешь

0
0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 22
21.01.2014, 21:14  [ТС] 11
Цитата Сообщение от MrGluck Посмотреть сообщение
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
#include <iostream>
 
void reverse(int *a, const int size)
{
    for (int i=0; i < size/2; i++)
    {
        int tmp = a[i];
        a[i] = a[size - 1 - i];
        a[size - 1 - i] = tmp;
    }
}
 
int main()
{
    int m, n;
    std::cin >> m >> n;
    int* a = new int[m*n];
    std::cout << "Before:\n";
    for (int i=0; i < m*n; i++)
    {
        a[i] = i+1;
        std::cout << a[i] << " ";
    }
 
    swap(a, m*n);
    std::cout << "\nAfter:\n";
    for (int i=0; i < m*n; i++)
        std::cout << a[i] << " ";
 
    delete[] a;
    std::cout << std::endl;
}
Твоя программа не меняет конец с началом местами,а просто переворачивает массив
(то есть 1,2,3,4 заменяется 4,3,2,1)
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.01.2014, 21:25 12
Цитата Сообщение от ffynjy Посмотреть сообщение
Твоя программа не меняет конец с началом местами,а просто переворачивает массив
(то есть 1,2,3,4 заменяется 4,3,2,1)
так выражайтесь четче - поменять конечный элемент с начальным.
И пусть тогда мой код будет для вас примером, ибо меняя местами все элементы в массиве, поменять лишь два из них - частный случай и делается гораздо легче.
0
0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 22
21.01.2014, 21:39  [ТС] 13
MrGluck, например m=3 и n=2 массив получается 1,2,3,4,5 и далее надо поменять элементы до m c элементами от m+1 до n, то есть должно получится 4,5,1,2,3
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.01.2014, 21:48 14
Цитата Сообщение от ffynjy Посмотреть сообщение
например m=3 и n=2 массив получается 1,2,3,4,5 и далее надо поменять элементы до m c элементами от m+1 до n, то есть должно получится 4,5,1,2,3
это и есть циклический сдвиг
ссылку смотрел которую я в 6 посте скинул?
0
0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 22
21.01.2014, 23:11  [ТС] 15
ValeryS,
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
void swap(int *a, const int size, int m)
{
int k = 0;
while (k <= m)
{
for (int i = 0; i < size; i++)
{
int tmp = a[i];
a[i] = a[size - 1 ];
a[size - 1] = tmp;
}
k++;
}
}
 
int main()
{
int m, n;
cin » m » n;
int* a = new int[m+n];
cout « "Before:\n";
for (int i = 0; i < m+n; i++)
{
a[i] = i + 1;
cout « a[i] « " ";
}
 
swap(a, m+n,m);
cout « "\nAfter:\n";
for (int i = 0; i < m+n; i++)
cout « a[i] « " ";
 
delete[] a;
cout « endl;
программа вроде работает, может попроще как-то можно?
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.01.2014, 23:18 16
Цитата Сообщение от ffynjy Посмотреть сообщение
программа вроде работает, может попроще как-то можно?
попроще нет
у тебя как раз самая простая реализация
сдвигаешь массив m раз
эффективней да
смотри тему которую я тебе указал
0
0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 22
21.01.2014, 23:25  [ТС] 17
ValeryS, только у меня при одинаковых значениях m и n не правильно работает, как можно исправить?
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.01.2014, 23:36 18
Цитата Сообщение от ffynjy Посмотреть сообщение
while (k <= m)
вот у тебя ошибка
даже при m равном 0 у тебя один сдвиг произойдет
а не должен
C++
1
while (k < m)
0
0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 22
21.01.2014, 23:40  [ТС] 19
ValeryS, спасибо, но теперь ошибка при m>n
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
21.01.2014, 23:49 20
и циклический сдвиг на один элемент по другому можно написать
Цитата Сообщение от ffynjy Посмотреть сообщение
for (int i = 0; i < size; i++)
{
int tmp = a[i];
a[i] = a[size - 1 ];
a[size - 1] = tmp;
}
C++
1
2
3
4
int tmp=a[size-1];// сохраняем последний элемент
for(int i=0;i<size-1;i++) 
 a[i+1]=a[i];// в цикле переносим значения в следующий элемент
a[0]=tmp;// в первый запихиваем значения последнего
Добавлено через 5 минут
Цитата Сообщение от ffynjy Посмотреть сообщение
ValeryS, спасибо, но теперь ошибка при m>n
а так и будет
представь что тебе нужно сдвинуть массив из двух элементов на 20
здесь нужно предусмотреть
если m<n то сдвиг влево иначе сдвиг вправо на m-n
0
21.01.2014, 23:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2014, 23:49
Помогаю со студенческими работами здесь

Добавление числа в начало и конец
Дано число n Добавить по единице вначале и в конце записи числа n. как добавить единицу в конце...

Вставить символы в начало и конец строки
Дана строка символов. Сформируйте новую строку, начинающуюся с символа а (вводится с клавиатуры) и...

Четные в начало массива, нечетные - в конец
четные в начало массива выводит, а вот нечетные не хочет.. пишет вместо них какие-то тысячные...

Вставка элемента в середину массива, в начало и в конец
Написал для начала массива и конца, а в средину не пойму как вставить, теоретически понимаю что ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru