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

rotate left - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
TXLib.h
 Аватар для TXLib.h
3 / 3 / 0
Регистрация: 01.12.2010
Сообщений: 68
06.02.2011, 16:37     rotate left #1
Подскажите, плз, а то туплю - как сделать так, чтобы значения всех ячеек массива сдвинулись влево, а самая 1-ая ячейка(0-ая) стала последней?

К примеру, с такой последовательностью:

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
#include "TXLib.h"
 
int main ()
 
{
    txCreateWindow (500, 500);
const int SIZE = 30;
    int x [SIZE] = {1};
    int i = 1;
    while (i < SIZE)
        {
            assert (0 <= i && i < SIZE);
            assert (0 <= i - 1 && i - 1 < SIZE); 
            x [i] = x[i - 1] + 1;
            
           if (x [i] > 3)
           {
            x[i] = 1;
           }
           
           i++;
           
        }
        
     i = 0;
     while (i < 30)   
        {
            printf ("%d \n", x [i]);
            
            i++;
        } 
        
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
06.02.2011, 16:51     rotate left #2
Есть хорошая функция std::rotate, подумайте о ней.

C++
1
2
3
int a[10] = {1,2,3,4,5,6,7,8,9,10};
 
std::rotate(a,a + 1,a + 10);
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
06.02.2011, 17:33     rotate left #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
#include<iostream>
#include<cassert>
#include<cstdio>
#include<algorithm>
using namespace std;
 
int main(){
    const int SIZE = 30;
    int x [SIZE] = {1};
    int i = 1;
    while (i < SIZE){
            assert (0 <= i && i < SIZE);
            assert (0 <= i - 1 && i - 1 < SIZE);
            x [i] = x[i - 1] + 1;
            if (x [i] > 3){
                x[i] = 1;
            }
            i++;
    }
    i = 0;
    rotate(x, x+1, x+SIZE);
    while (i < 30){
        printf ("%d \n", x [i]);
        i++;
    }
}
TXLib.h
 Аватар для TXLib.h
3 / 3 / 0
Регистрация: 01.12.2010
Сообщений: 68
11.02.2011, 15:24  [ТС]     rotate left #4
И всё-таки я сделал по-своему.

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
#include "TXLib.h"
 
int main()
{
    txCreateWindow (500, 500);
    const int SIZE = 20;
    int x [SIZE] = {};
    int i = 0;
    int f = 0;
    int l = SIZE - 1;
    
    while (i < SIZE)
    {
          x [i] = rand () % 100 * 100 + i;
          i++;
    }
 
    while (i < SIZE)
    {
          x [i] = x [i - 1];
          x [f] = x [l];
          i++;
    }
    i = 0;
    
    while (i < SIZE)
    {
          printf ("x [%d] = %d \n", i, x [i]);
          i++;
    }
}
Получилась, конечно, полная лажа. Подскажите нубу, почему не происходит сдвиг на моей собственной программе. Спс.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
11.02.2011, 16:19     rotate left #5
после первого while i становится =20
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
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
 
int main()
{
    //txCreateWindow (500, 500);
    const int SIZE = 20;
    int x [SIZE];
    int i = 0;
    int f = 0;
    int l = SIZE - 1;
    while (i < SIZE){
          x [i] = rand () % 10 + i;
          printf ("x [%d] = %d \n", i, x [i]);
          i++;
    }
    f=x[l];
    i=l;
    while (i>0){
          x [i] = x [i - 1];
          i--;
    }
    x[0]=f;
    i = 0;
    while (i < SIZE){
          printf ("\nx [%d] = %d ", i, x [i]);
          i++;
    }
}
Yandex
Объявления
11.02.2011, 16:19     rotate left
Ответ Создать тему
Опции темы

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