![]() |
|
Модераторы: bsa |
![]()
|
|
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Заранее прошу прощения, если нужно было не сюда, а в центр помощи, и если невнятно опишу проблему - учу язык всего месяц, да еще и самоучкой... Задачи ищу на просторах инета, и нашел вот такую:
Пользователь вводит матрицу размерностью N*M. Выведете на экран матрицу N*M, элементы которой сдвинуты на один элемент влево относительно исходной матрицы.т.е. первый элемент матрицы будет равен второму элементу исходной матрицы, а последний равен первому. Проблема в сдвиге... С массивом 2*2 проходит вроде как без проблем, а вот с другими...
Были мысли запихнуть в одноменрый массив, сдвинуть, а потом обратно в двумерный, но, это ж, я так понимаю, не верно? Заранее спасибо за любую помощь ) |
|||
|
||||
| gosn1ck |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 18.4.2009 Репутация: 1 Всего: 1 |
и что же вы все пробелы то не любите.... ?
|
|||
|
||||
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Пробелы я люблю... Только здесь нагляднее было в строку, ну да ерунда это...
Да, ваш код работает. Спасибо. Вот только... Делал я так... и на моем коде, если брать массив 4*4, то 4,8 и 12 значения получаются... эм... не знаю, как это правильно сказать... вобщем длинным отрицательным числом (поэтому я и вставлял проверку на равность j)... Потому и обратился за помощью - сам ен могу найти где именно я накосячил ( Если я правильно понимаю, то в какой-то момент j+1 становится равным 4, а такого значения ведь нет... Это сообщение отредактировал(а) Santa12 - 4.6.2009, 14:00 |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Советую поднабраться знаний в сторону отладчиков. Этот вопрос думаю легко бы решился (см. пошаговая отладка). |
|||
|
||||
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Именно поэтому, я и говорю, что ставил проверку на j... Пошагово прошел по всему что можно... Но моих познаний не хватило. в моем случае, при массиве 4*4 в случае: mass[0][3] = mass[0][3+1] -- у меня в этом месте mass[0][3+1] равняется -33686019 а если напрямую копирую код gosn1ck - в этом месте появляется 5, т.е. значение, которое должно быть в mass[1][0] Это сообщение отредактировал(а) Santa12 - 4.6.2009, 14:35 |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Ты сам ответил на свой вопрос.........
Поясняю, в C индексы массивов начинаются с 0, т.е. [0], [1], [2], [3] уже 4 элемента. У тебя: mass[0] [3+1] <---- Добавлено через 1 минуту Если поподробнее, то ты обращаешься к элементу за массивом, который естессно не инициализирован никаким значением. |
|||
|
||||
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Я и говорю про это!!! Ммм... Как объяснить... я знаю, что значения 4 тут не существует, и из-за этого, у меня появляется непонятное число. Именно поэтому, я и ставил проверку J, не равно ли оно 4 (в случае 4*4). Но, при этом:
|
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Ты меняешь каждый элемент i,n на m,0. Ты этого хотел? Сомниваюсь.
n,m - размерность массива ЗЫ Если в голове не можешь проработать задачу делай рисунки - на порядок проще думать. ЗЫ Приводи кусок своего кода в постах, ч-то искать по листингу влом, думаю не только мне. Т.к. двигаешь влево надо скопировать первый элемент заранее. А то он затирается при первой же итерации. В конце копируешь это значение в конец. Это сообщение отредактировал(а) fry - 4.6.2009, 14:58 |
|||
|
||||
| Santa12 |
|
||||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Ок. Значит, попробую еще раз... я создаю динамически массив N*M. Передаю его в функцию, которая его сдвигает на одно значение. Первый элемент я сперва копирую в темп, в конце копирую его в последний элемент массива.
А если я просто беру код gosn1ck
Рисовать - рисую, но в данном случае - не помогло... |
||||
|
|||||
| fry |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Проверка как раз и сделана для того, чтобы этого не случилось, т.е. при j=3 она срабатывает и выполняется то, что я описал в предыдущем посте.
будет возвращать один и тотже элемент, а тебе, по моему, надо всего лишь
Только надо проверять чтобы [i+1] не было за пределами массива (последняя итерация). Кстати, гораздо легче будет если ты будешь создавать массив одномерный. его и сдвигать проще и быстрее работать будет. Конкретный элемент в нем можно искать так: i+j*n. Работать будет быстрее, чем у gosn1ck . Это сообщение отредактировал(а) fry - 4.6.2009, 15:29 |
||||||
|
|||||||
| Santa12 |
|
||||||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
ну, для этого я ее и сделал ;) При этом, в коде gosn1ck все отрабатывает без такой проверки. Почему?
вот примерно об этом я изначально и спрашивал... на последней итерации в этом случае вылетает, все правильно, не могу сообразить, как обработать правильно... сообразил. Изначально в этом и была моя ошибка - стормозил, и начал городить огород...
Я хочу с многомерными массивами разобтаться, не переводя их в одномерные ))) С одномерными, вроде бы уже вопросов и не возникает ))) Что ж, всем спасибо ;) Вопрос решен. Это сообщение отредактировал(а) Santa12 - 4.6.2009, 15:42 |
||||||
|
|||||||
| fry |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Т.е. "не наигралсо". В том варианте, который я описал, не надо ничего переводить, он (2мерный) будет храниться в памяти как 1мерный и усе.
Потому, что у него ошибка: На последней итерации
Вообще лучше не решать задачу разными способами, при том что они заведомо хуже первого, а заняться другой. Еще лучьше поставить более менее реальную задачу и ее решить, а не двигать элементы матрицы в двойном цикле. |
||||||||||
|
|||||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Santa12, в статических многомерных массивах элементы располагаются линейно. Т.е весь массив в памяти занимает непрерывный кусок памяти и за последним элементом одной строки идет первый элемент следующей. Динамические многомерные массивы представлены многоуровнево, т.е 2х мерный массив является массивом указателей на одномерные массивы, которые могут лежать в произвольных местах памяти. Именно из этого расхождения представления и получается различное поведение. Это сообщение отредактировал(а) mes - 4.6.2009, 15:55 |
|||
|
||||
| fry |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 4.10.2006 Репутация: 2 Всего: 3 |
Я и говорил ему о динамическом варианте с линейным расположением элементов. Однако, о каком представлении идет речь если проги работают именно с 2мерным динамическим? ЗЫ И то неправильно. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |