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

Заполнение змейкой, массив не 2D! - C++

Восстановить пароль Регистрация
 
Insar
0 / 0 / 0
Регистрация: 27.03.2011
Сообщений: 6
27.03.2011, 16:18     Заполнение змейкой, массив не 2D! #1
Добрый день всем. вот получил задание по С++ заполнение змейкой, но не такое простое как кажется на первый взгляд( искал на форуме не нашел, и те посты и темы что были про заполнение змейкой мне не подходят). Матрицы как таковой у меня нет, а есть последовательность чисел записываемых в vector<double> data; ну в общем все увидите сейчас.
код полностью мой, но сделать вывод не получается. Может кто что посоветует алгоритм какой нибудь или готовый метод или вообще как это реализовать можно? Заранее благодарю!
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 #include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
 
 
 
using namespace std;
 
int main(){
 double numbers,num;
 int boom;
 vector<double> data;
 cout<<"write count of rotation"<<endl;
 cin>>boom; 
 cout << "write data" << endl;
 cin >> numbers;
 while(!cin.eof()){   
 
data.push_back(numbers);    
   cin>>numbers;
   
 }
 
 
 
 if(abs(sqrt(data.size())-(int)(sqrt(data.size())+0.5))<0.0001){ //проверка, на достаточно кол-во данных для матрицы
    
 rotate(data.begin(),data.begin()+boom,data.end());//ротация поля,данные на выход идут только после ротации так называемой змейки
 
 cout<< "show data" << endl;
 int count=1;
for(int i=0; i<data.size();i++){
 if(i%(int)(sqrt(data.size()))==0 && i>1){// проверка заполненности одного ряда матрицы, переход на новую строку
  cout<<endl;
  count++;
  }
if(count%2==0){  //четные ряды должны заполняться в обратном порядке
//ВОТ ЗДЕСЬ не могу придумать универсальный алгоритм для любой матрицы
 
 //reverse(data.begin()+sqrt(data.size()),data.end()-sqrt(data.size()));// это работает только для матрицы 3 на 3, для остальных нет.
  //cout<< data[data.size()-i-1]<<" ";// тоже только для матрицы 3 на 3((
    cout<< data[i]<<" ";
    }
    else{
      cout << data[i]<<" ";
    }
}
      
    
 }   
 
cout<<endl;
cout<< "bla bla "<< endl;
cout << sqrt(data.size())<<endl; 
 
 cout<<endl;
    return 0;
}
Как должна работать программа:

Задайте количество ротаций:
5
Введите квадратную матрицу(ряд матрицы = ряд введенных чисел): // задаем обычную матрицу
1 2 3 4
4 5 6 7
8 9 0 1
2 3 4 5
Матрица после ротации: // программа сначала делает ротацию а потом выводит данные в матрицу змейкой
1 5 4 3
3 2 1 2
4 7 6 5
0 9 8 4
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2011, 16:18     Заполнение змейкой, массив не 2D!
Посмотрите здесь:

Заполнение матрици змейкой C++
C++ Заполнение матрицы змейкой по диагонали
заполнение матрицы по диагонали змейкой C++
C++ Заполнение змейкой
C++ Заполнение двумерного массива змейкой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
27.03.2011, 16:23     Заполнение змейкой, массив не 2D! #2
Что должно быть после 1 ротации в матрице:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16 ?
Insar
0 / 0 / 0
Регистрация: 27.03.2011
Сообщений: 6
27.03.2011, 16:33  [ТС]     Заполнение змейкой, массив не 2D! #3
после ротации собственно происходит вот что
16 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15 ?
но ротацию я делаю до вывода данных, с помощью aлгоритма rotate.
а вот "переворот" отрезка поля и вывод его в нужное время не получается.
то есть
к примеру вот матрица 3 на 3( это единственное что мне удалось нормально сделать)
Количество ротации 3.

1 2 3
4 5 6
7 8 9

вывод без ротации
1 2 3
6 5 4
7 8 9
вывод с 3 ротациями
4 5 6
9 8 7
1 2 3
IrineK
Заблокирован
27.03.2011, 16:48     Заполнение змейкой, массив не 2D! #4
четные ряды должны заполняться в обратном порядке
Но вы же показываете для 0 ряда:
16 1 2 3
для 2:
8 9 10 11
Нормально они у вас заполняются, без обратного порядка.
Insar
0 / 0 / 0
Регистрация: 27.03.2011
Сообщений: 6
27.03.2011, 16:55  [ТС]     Заполнение змейкой, массив не 2D! #5
эммм, ротация и реверс у меня это разные действия и алгоритмы
Ротация в одномерном массиве это сдвиг по кругу( как будет выглядеть ротация это я и показал), а ниже привел тот варианта который у меня в коде проходит.
то есть получаю на которое нужно сдвинуть массив, потом делаю сдвиг, и потом уже вывожу данные, где мне и нужно на четных рядах вывести числа обратном порядке.
Извиняюсь, за то что возможно не так описал или понял слово ротация. 1 ротация= сдвиг на один индекс вправо.
Количество ротации 3.

1 2 3
4 5 6
7 8 9

вывод змейкой без ротации(без сдвига)
1 2 3
6 5 4
7 8 9
вывод змейкой со сдвигом на 3 элемента
4 5 6
9 8 7
1 2 3
Yandex
Объявления
27.03.2011, 16:55     Заполнение змейкой, массив не 2D!
Ответ Создать тему
Опции темы

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