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

Массивы: переворот, сдвиг вправо, перестановка - C++

Восстановить пароль Регистрация
 
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
28.11.2013, 23:05     Массивы: переворот, сдвиг вправо, перестановка #1
Здравствуйте. Не могу разобраться с задачками. Пожалуйста, помогите.
1) 12345 - 54321
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main()
{ // 1234 - 4321
    const int size=5;
    int mas[size]={1,2,3,4,5};
    int a;
    for(int i=0;i<size/2+1;i++)
    {
        a=mas[i];
        mas[i]=mas[size-1-i];
        mas[size-1-i]=a;
    }
    for(int i=0;i<size;i++)
    {
        cout<<mas[i]<<" ";
    }
return 0;
}
С эти вроде все более менее понятно, но если я ставлю size = 4, то он почему то выводит 4231...

2) 1234 - 3412
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 const int size=4;
    int mas[size]={1,2,3,4};
    int a;
    for(int i=0;i<(size-1)/2;i++)
    {
        a=mas[i];
        mas[i]=mas[size-2-i];
        mas[size-2-i]=a;
        mas[i]=mas[size];
        mas[size]=a;
 
 
 
    }
    for(int i=0;i<size;i++)
    {
        cout<<mas[i]<<" ";
    }
return 0;
}
Не могу найти ошибку. Пожалуйста, подскажите.

3) 1234 - 2341 - ?


4) 1234 - 4123
{


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  {
  int mas[] = { 1, 2, 3, 4, 5 }, n = sizeof(mas) / sizeof(mas[0]);
    for (int i = 0; i < n; ++i) 
         cout << mas[i] << ' ';
 
    for (int i = n - 1; i > 0; --i) 
         mas[i] = mas[i - 1];
         mas[0] = 5;
 
    cout << '\n';
    for (int i = 0; i < n; ++i) 
         cout << mas[i] << ' ';
    return 0;
}
Как эта программа работает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2013, 23:05     Массивы: переворот, сдвиг вправо, перестановка
Посмотрите здесь:

Циклический сдвиг вправо C++
круговой сдвиг массива вправо C++
Циклический сдвиг массива влево и вправо C++
Одномерный массив. Циклический сдвиг вправо C++
C++ Сдвиг символов строки вправо
C++ Массивы. Вначале заполнить элементами с четными индексами, а затем — с нечетными. Осуществить сдвиг вправо на k позиций
Сдвиг элементов вектора на единицу вправо C++
Сдвиг числа вправо C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
28.11.2013, 23:18     Массивы: переворот, сдвиг вправо, перестановка #2
Цитата Сообщение от _Лето_ Посмотреть сообщение
for(int i=0;i<(size-1)/2;i++)
* * {
* * * * a=mas[i];
* * * * mas[i]=mas[size-2-i];
* * * * mas[size-2-i]=a;
* * * * mas[i]=mas[size];
* * * * mas[size]=a;
}
ну ты и накрутил
Цитата Сообщение от _Лето_ Посмотреть сообщение
mas[i]=mas[size-2-i];
думаешь это последний элемент
Цитата Сообщение от _Лето_ Посмотреть сообщение
mas[i]=mas[size];
выход за пределы массива
вот тебе функция переворота
C++
1
2
3
4
5
6
7
8
9
void Reverse(int * arr, int sz)
 {
   for(int i=0;i<sz/2;i++)
    {
     int tmp=arr[i];
     arr[i]=arr[sz- i-1];
     arr[sz- i-1]=tmp;
   }
 }
а вообще посмотри тему
Функция сдвига массива
может что возьмешь для себя
Yandex
Объявления
28.11.2013, 23:18     Массивы: переворот, сдвиг вправо, перестановка
Ответ Создать тему
Опции темы

Текущее время: 20:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru