Двумерный массив на С++, Проверка на правильность написания кода |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Двумерный массив на С++, Проверка на правильность написания кода |
Екатерина |
13.06.2011 19:41
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
Всем добрый вечер!
Есть задание к лабораторной работе Написать функцию, для поиска максимального элемента в указанной строке двумерного массива. Сдвинуть в двумерном массиве все строки циклически вправо на количество элементов равное максимальному элементу в этой строке. Могу я попросить специалистов проверить правильность написания кода? #include <stdio.h> Слегка терзают смутные сомнения... |
Krjuger |
13.06.2011 20:27
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Ну лично у меня был массив 10х10 а потом выводится 7х10,это уже наводит на мысли.... Максимум считает вроде верно,и возник вопрос,как сдвигать циклически только по строке либо циклически по всей матрице(имеется в виду что последний элемент последней строки снате первым элементом первой строки или все таки последней строки).И да сдвиг производится неправильно)))Если рассматривать и первый вариант и второй.
Кстати вы не зачемали,что несмотря на рандом при каждом запуске числа в матрице у вас получаются каждый раз одинаковые,здесь дела обстоят как в паскале там без строчки randomize; в начале программы тоже каждый раз одни числа.Собственно сдесь тоже есть этот аналог рандомайза.Но тут уже зависит от компилятора.Если борландовский,то
Если микрософтовский,то
Да и еще ваша программа сдвигает не ВСЕ строки,а только те,что находятся ДО введенной пользователем. Сообщение отредактировано: Krjuger - 13.06.2011 20:42 |
Krjuger |
13.06.2011 21:04
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
В общем когда ответиш на мои вопросы,я постараюсь помоч,если первый вариант верный(слвиг только по строке),то работоспособный вариант у меня уже есть.
|
Екатерина |
13.06.2011 21:59
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
Ну я всё-таки склонна думать что сдвигать циклически только по строке. Смысл задания больше похож всё-таки на этот вариант.
А вы метко подметили что числа в массиве каждый раз одинаковые. Я это тоже заметила, но не стала придавать этому большое значение. Массив создался - уже хорошо. Да, действительно у меня борландовский компилятор |
IUnknown |
13.06.2011 22:22
Сообщение
#5
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Екатерина, это не С++, это чистый С... На С++ эта задача решается в 5 строк с использованием std::vector как матрицы, + std::rotate для сдвига вектора. Максимум в векторе находится через max_element... Это так, на всякий случай.
|
Krjuger |
13.06.2011 23:01
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Ну собственно я немного переделал ваше.
И как подмечено ранее это чистый С,все прелести С++ не используются и я бы еще избавился на вашем месте от #include <tchar.h> ну и сообветственно переделал строку int _tmain(int argc, _TCHAR* argv[]) так как библиотека подключается только ради _TCHAR типа, а argc и argv[] вообще никак в вашей программе не используются и поэтому в их наличии нет необходимости,посоветовать,как переделать не буду,так как не знаю, как в борланде это делается.У меня в визуал студио можно убрать библиотеку и заменить описываемую строку на int main(). Пример имеет более наглядный пример,чем производительный,сдесь последовательно каждый раз во всем матрице происходит сдвиг на 1,конешно же можно избавиться от тройного цикла...Но я решил пока оставить так. И на будущее обычно координаты у матрици обозначают i,j так еще с математических обозначений повелось и придерживаться таких канонов неплохо было бы)))Это конешно же не обязательно,но так легче разбираться если некоторые стандартизированные вещи есть. Сообщение отредактировано: Krjuger - 13.06.2011 23:08 |
IUnknown |
14.06.2011 9:07
Сообщение
#7
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата Но тут уже зависит от компилятора.Если борландовский,то <...> Если микрософтовский,то <...> А если использовать "плюсы" - то им по барабану, какой у тебя компилятор, майкрософтовский, борландовский, или от Интела, а может вообще Cameau, или GCC... Используй то, что определено в пространстве имен std, и проблемы разных компиляторов сразу куда-то улетучиваются.В общем, если интересно, как это может выглядеть - вот так: #include <vector> Сообщение отредактировано: IUnknown - 14.06.2011 9:08 |
Екатерина |
14.06.2011 11:41
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
СПАСИБО!!! Программа вроде работает как надо. Правда у меня по моему "куку поехала" - мне почему-то кажется что сдвиг получается не вправо, а влево. Добавила randomize(); матрица при каждом запуске стала меняться!
int NeedString=0; //необходимая строка - строка с которой работаем От библиотеки #include <tchar.h> не смогла избавиться. Котику IUnknown должна сказать что вектора мы, к сожалению, ещё не проходили, поэтому пока для меня дремучий лес. Очень благодарна вам за профессиональные подсказки. |
Krjuger |
14.06.2011 12:31
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
А вы их и не пройдете,принципы работы с вектором такие же как и с обычным одномерным массивом,просто некоторые действия уже реализованы в библиотеке,а точнее все основные действия,которые чаще всего используются.Никто не будет вас обучать каждой библиотеке и работе с ней.Так что все это уже идет на уровне самообучения.
Замените
на
И удали соответствующую библиотеку. |
IUnknown |
14.06.2011 13:39
Сообщение
#10
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Просто заменить _tmain на main может быть недостаточно. Все зависит от настроек проекта. Если проект НЕюникодный (т.е., Project->Options->_TCHAR maps to установлено в char), то все будет нормально после такой замены. Если же там выбрано wchar_t, то линкер будет против...
|
Екатерина |
14.06.2011 16:50
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
Ой... не то сморозила.
Сообщение отредактировано: Екатерина - 14.06.2011 17:04 |
Екатерина |
14.06.2011 17:14
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 24 Пол: Женский Реальное имя: Екатерина Репутация: 0 |
Всё замечательно работает! Спасибо! Замена
int _tmain(int argc, _TCHAR* argv[])на просто int main() оправдала себя на все 100. А проект создавался обычным образом: File-> New -> Other -> Console Application -> C++ -> OK |
Krjuger |
14.06.2011 17:56
Сообщение
#13
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Да не, все его создают обычным образом просто настройки могут быть разные изначально и от этого может зависеть то,что написал IUnknown ранее.
|
IUnknown |
14.06.2011 18:00
Сообщение
#14
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Чем быстрее ты научишься ЧИТАТЬ, а не просматривать ответы, тем проще тебе будет... Я что, где-то говорил о том, что важно как проект был СОЗДАН? Покажи, где именно. Я сказал, что важно, является ли проект юникодным. При создании ты указываешь тип проекта - консольное приложения. Что там у тебя выбрано в настройках Билдера, какой проект по умолчанию будет создаваться, Unicode или ANSI - это мне неизвестно. Но если ты считаешь, что ВСЕГДА будет столь же просто избавиться от _tmain, то тебя ждут разочарования. Это далеко не всегда так.
Хотя... Можешь продолжать в том же духе, не читая того, что пишут, а только бегло просматривая... Зачем тебе, в конце концов, понимать, откуда вдруг возьмется проблема, о которой я написал? Тебе ж это не нужно, у тебя ж один раз все отработало, да? |
Текстовая версия | 27.04.2024 18:00 |