Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2013, 23:31   #1
_Лето_
Пользователь
 
Регистрация: 04.11.2013
Сообщений: 23
По умолчанию Массивы: переворот, сдвиг вправо, перестановка

Здравствуйте. Не могу разобраться с задачками. Пожалуйста, помогите.
1) 12345 - 54321
PHP код:
#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
PHP код:
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

{
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;
}

Как эта программа работает?
_Лето_ вне форума Ответить с цитированием
Старый 29.11.2013, 15:12   #2
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Цитата:
Сообщение от _Лето_ Посмотреть сообщение
Здравствуйте. Не могу разобраться с задачками. Пожалуйста, помогите.
1) 12345 - 54321
PHP код:
#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
PHP код:
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

{
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;
}

Как эта программа работает?
Какая странная у вас программа(функция) инверсии строки, вот нормальная функция реверсии:
Код:
void revers (int *mas, int size) {
    int count = size;
    for (int i = 0; i < size/2; i++) {
        int buff = mas[i];
        mas[i] = mas[--count];
        mas[count] = buff;
    }
}
Ну это в принципе и все.
Так дополнительная информация для работы с другими типами данных можно просто написать в виде шаблона:
Код:
template <typename Temp>
void revers (Temp *mas, int size) {
    int count = size;
    for (int i = 0; i < size/2; i++) {
        Temp buff = mas[i];
        mas[i] = mas[--count];
        mas[count] = buff;
    }
}
Сдвиг влево;
Код:
template <typename Temp>
void toLeft (Temp *mas, int size, int how) {
    if (how == size) return;
    if (how > size) how = how%size;
    int count = size;
    for (int i = 0; i < how; i++) {
        Temp buffNumber = mas[0];
        for(int j = 0; i < size - 1; i++) {
            mas[j] = mas[j+1];
        }
    mas[0] = buffNumber;
    }
}
Сдвиг вправо
Код:
template <typename Temp>
void toLeft (Temp *mas, int size, int how) {
    if (how == size) return;
    if (how > size) how = how%size;
    int count = size;
    for (int i = 0; i < how; i++) {
        Temp buffNumber = mas[size-1];
        for(int j = size-1; i >=0 ; i--) {
            mas[j] = mas[j-1];
        }
    mass[size-1] = buffNumber;
    }
}
Может это и чушь, но это моя чушь и я ее никому не отдам.

Последний раз редактировалось Shad0wF1rst; 29.11.2013 в 15:53.
Shad0wF1rst вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать циклический сдвиг в массиве на к елементов вправо и влево на язеке с++???? zvir Общие вопросы C/C++ 7 13.11.2012 03:37
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз Nekro95 Помощь студентам 12 07.11.2012 22:31
Арифметический сдвиг вправо на n без VBA Romashka) Microsoft Office Excel 3 06.11.2012 18:47
Сдвиг массива вправо на 1 элемент stas45rus Помощь студентам 2 30.08.2011 14:20
сдвиг массива вправо tem_80 Общие вопросы C/C++ 5 01.02.2011 15:21