Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите написать программу, которая будет превращать двумерный массив в одномерный

Ответить
Настройки темы
C/C++ - Помогите написать программу, которая будет превращать двумерный массив в одномерный

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png Безымянный.png
(7.3 Kb, 8 просмотров)
Собственно, задача заключается в том, что бы превратить двумерный массив (он должен быть динамическим и пользователь вводит каждый элемент) в одномерный путём считывания его элементов по часовой стрелке (как на картинке). Размерность задаётся пользователем, впрочем, как и элементы. Так вот, проблема именно с этим считыванием. Как его сделать правильно?? Я пробовал с помощью строк (string), но ничего не получилось (хотя, казалось бы, учёл всё что можно). Прошу помощи! Вот мой код:

Код: Выделить весь код
#include<iostream>;
#include<cstring>

using namespace std;

int main(){
	int m,n;
	float provnch=0.25,provch=0.75,prov1,prov2;
	string str1;
	cin>>m;
	cin>>n;
	char**arr1=new char *[m];						//Задаём двумерный массив. Он должен быть квадратным!! Да, я знаю что не сделал условие, мол, если пользователь
	for (int i=0;i<m;i++) arr1[i]=new char [n];		//введёт разное число строк и столбцов, но то для экономии времени. Так что считаем эту матрицу квадратной (m=n).
	for (int i=0;i<m;i++) for (int j=0;j<n;j++) cin>>arr1[i][j];
	for (int i=0;i<m;i++){
		for (int j=0;j<n;j++) cout<<arr1[i][j]<<" ";
		cout<<endl;
	}
	prov1=(m-1)*0.5+0.25;
	prov2=(m-2)*0.5+0.75;
	for (int f=0,g=0,v=-2,d=-1,q=-2,p=1,x=0,y=0;1;m--,n--,x++,y++,p++,q++,d++,v++,g++,f++){ //Эта куча счётчиков нужна для корректного осуществления поворотов.
		for (int j=f;j<n;j++){					//Если вы сами проследите за всем процессом на листочке бумаги, то убедитесь, что всё с этими счётчиками верно.
			str1.push_back(arr1[x][j]);
			if (provnch==prov1) break;
		}
		for (int i=p;i<m;i++) {             //4 цикла означают 4 поворота (ведь нам надо по часовой стрелке квадратный массив, значит - всего 4 поворота)
			str1.push_back(arr1[i][n-1]);   //Общий цикл нужен для корректировки этих поворотов (что бы не попадали прошлые символы снова) и для пары общих счётчиков
		}
		for (int j=n+q;j>d;j--){
			str1.push_back(arr1[m-1][j]);
			if (provch==prov2) break;
		}
		for (int i=m+v;i>g;i--){
			str1.push_back(arr1[i][y]);
		}
		provnch++; //Эти 2 последние переменные - вообще отдельная тема. Просто если вы попробуете провести операцию, которую требуют в задаче, то заметите, что для этого
		provch++; //надо обрезать выполнение главного цикла (так как всё доходит до последнего элемента и что бы дальше не щло выполнение иначе будут ошибки).
	}             //Собственно, я думал, что ошибка из-за этого. Сделал эти 2 переменные - всё равно не работает. Кстати, почему эти переменные имеют именно такой вид?
system ("pause"); //Если посмотреть "на бумаге", как должна работать прога, то можно заметить, что остановка должна осуществляться на х.25 итерации(для нечётных m и n)
return 0; //и на х.75 итерации (для чётных), где х - количество целых итераций. Ну тип я так записал дробь. 1.25(для 3х3), 2.75(для 6х6). Если нарисовать эти матрице на листочке, и сделать то, о чём требуют в задаче, то вы поймёте о чём я.
}
Посмотрите, что не так. Или предложите иной способ решения, только с использованием только массивов и строк (никаких доп файлов, доп функций и т.д., так как это ещё не изучали). Ещё раз -- хелп ми плизз!

Отправлено: 22:25, 15-10-2015

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Iska,
Цитата Iska:
как вход, так и выход, могут быть где угодно, не только во внешней стене »
На приведённой для иллюстрации игрушке внешняя стена самого лабиринта – слева от текущего положения шарика.

-------
Mikhail Zhilin


Отправлено: 14:01, 18-10-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите написать программу, которая будет превращать двумерный массив в одномерный

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Помогите отсортировать двумерный массив (С++) Luda-tin Программирование и базы данных 4 15-05-2012 08:57
C/C++ - [решено] Помогите исправить (двумерный массив) на С++ Luda-tin Программирование и базы данных 2 13-05-2012 22:53
Разное - Помогите с задачей на одномерный массив Ksyha2121 Тест-форум 0 01-12-2011 20:44
Assm - [решено] одномерный массив в ассемблере igor7 Программирование и базы данных 7 03-06-2010 22:51
Помогите написать на Delphi маленькую программу! ИМХО, будет интересна многим! AlexKan Автоматическая установка Windows 2000/XP/2003 10 24-08-2006 19:48




 
Переход