|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите написать программу, которая будет превращать двумерный массив в одномерный |
|
|
C/C++ - Помогите написать программу, которая будет превращать двумерный массив в одномерный
|
Новый участник Сообщения: 2 |
Профиль | Отправить PM | Цитировать
Собственно, задача заключается в том, что бы превратить двумерный массив (он должен быть динамическим и пользователь вводит каждый элемент) в одномерный путём считывания его элементов по часовой стрелке (как на картинке). Размерность задаётся пользователем, впрочем, как и элементы. Так вот, проблема именно с этим считыванием. Как его сделать правильно?? Я пробовал с помощью строк (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 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Normandez, параметрически то задачку решить не пробовали?
Разбить квадраты на подквадраты? Забудьте, что у вас спираль. Считайте значения по периметру. Просто по периметру, по часовой стрелке. Затем уменьшите размер квадрата на 1 и считайте еще раз. Это куча счетчиков - явная ошибка (я даже следить за ней не буду) И уберите работу со строками - вас об этом не просят. Массив - значит массив. Для удобства возьмите числа (все что не оговорено явно, трактуется в пользу студента). Ах, да. Самое главное - дайте переменным нормальные названия! i, j, k - по умолчанию счетчики. Остальное назвать полными именами. Цитата:
|
|
------- Отправлено: 10:52, 16-10-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Спасибки за идею. Действительно, так должно быть проще (через считывание по периметрам). Попробую
|
Отправлено: 22:05, 16-10-2015 | #3 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата lxa85:
|
|
------- Отправлено: 15:16, 17-10-2015 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Drongo:
|
||
Отправлено: 19:57, 17-10-2015 | #5 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 20:59, 17-10-2015 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Drongo:
Лабиринт — Википедия: Цитата:
Скрытый текст
Будем ли мы пользоваться правилом правой руки или левой руки — выход мы не найдём. Но второе — что в этом случае мы, рано или поздно, вернёмся в исходную точку — совершенно верно. |
||
Отправлено: 22:15, 17-10-2015 | #7 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 23:14, 17-10-2015 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Дело в том, что как вход, так и выход, могут быть где угодно, не только во внешней стене. Достаточно только представить, что вход и выход — не на плоскости, а в пространстве.
Вот скажем, была такая игрушка: Скрытый текст
где надо было провести шарик с внешней окружности к центру — помните? |
Отправлено: 02:45, 18-10-2015 | #9 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 13:24, 18-10-2015 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|