0 / 0 / 1
Регистрация: 30.07.2012
Сообщений: 59
|
||||||
1 | ||||||
Поменять местами элементы массива, разные по знаку, но одинаковые по модулю04.11.2016, 18:04. Показов 783. Ответов 14
Метки нет (Все метки)
Здравствуйте!
Помогите, пожалуйста с программой. Программа: Дан массив с целыми числами. Нужно найти одинаковые по модулю, но разные по знаку элементы массива и поменять их местами. Программу написал. Работает. Но! Некорректно работает, если массив состоит из нечётного количества элементов. Прилагаются скриншоты корректной и некорректной работы. Никак не могу понять, в чём моя ошибка. Корректно: Некорректно:
0
|
04.11.2016, 18:04 | |
Ответы с готовыми решениями:
14
Поменять местами равные по модулю, но противоположные по знаку элементы. Поменять местами наибольший и наименьший по модулю элементы массива Поменять местами первый и максимальный по модулю отрицательный элементы массива. Поменять местами первый и максимальный по модулю отрицательный элементы массива |
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
||||||
04.11.2016, 18:31 | 2 | |||||
31 строчка
0
|
0 / 0 / 1
Регистрация: 30.07.2012
Сообщений: 59
|
|
04.11.2016, 18:33 [ТС] | 3 |
Да, у меня так было в изначальном варианте.
Но это не изменяет результат работы программы.
0
|
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
||||||
04.11.2016, 18:41 | 4 | |||||
тогда так
1
|
0 / 0 / 1
Регистрация: 30.07.2012
Сообщений: 59
|
|
04.11.2016, 18:51 [ТС] | 5 |
Это работает! Спасибо большое!
*Только, конечно же, следует потом освободить память(это, если кто-то захочет кодом воспользоваться).
0
|
Любитель чаепитий
|
||||||
04.11.2016, 18:57 | 6 | |||||
Не по теме: Когда создают указатель, а пишут, что это динамический массив, в мире грущу я. :resent: Лень было разбираться в коде, поэтому написал свой.
1
|
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
||||||
04.11.2016, 19:03 | 7 | |||||
может добавить еще
1
|
0 / 0 / 1
Регистрация: 30.07.2012
Сообщений: 59
|
|
05.11.2016, 09:19 [ТС] | 8 |
Подскажите, пожалуйста, где именно нужно фиксировать к-е число?
Локальный аргумент не передаётся(у меня не получается реализовать).
0
|
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
||||||
05.11.2016, 09:53 | 9 | |||||
вот в этом куске кода добавляем priz[k]=1;
1
|
0 / 0 / 1
Регистрация: 30.07.2012
Сообщений: 59
|
|
05.11.2016, 09:57 [ТС] | 10 |
Это я понял.
Но ведь условие (k=1) должно сохраняться там-же, где и priz[n]=0. *нужно, чтобы число с индексом k больше не менялось(как и число с индексом n), если уже произвели замену.
0
|
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
|||||||||||
05.11.2016, 10:01 | 11 | ||||||||||
и еще, в это условие попадают и просто равные элементы и не обязательно с разным знаком
"Но ведь условие (k=1) должно сохраняться там-же, где и priz[n]=0"
1
|
0 / 0 / 1
Регистрация: 30.07.2012
Сообщений: 59
|
|
05.11.2016, 10:05 [ТС] | 12 |
Да, я уже произвёл такие изменения. Спасибо.
Программа: Нулевой элемент сравнивается с последующими. Если находит число, удовлетворяющее условие, то меняет нулевой элемент с н-ым. Теперь будет проверяться 1 элемент с последующими. И так далее. Нужно "зафиксировать" оба числа, которые менялись местами. Надеюсь, я понятно объяснил.
0
|
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
||||||
05.11.2016, 10:13 | 13 | |||||
когда вы находите два числа удовлетворяющие условие то меняете знаки и "фиксируете" оба эти числа чтобы в дальнейшем они не участвовали в сравнении
при этом в if достаточно мне кажется указать признак только текущего числа
0
|
0 / 0 / 1
Регистрация: 30.07.2012
Сообщений: 59
|
|
05.11.2016, 10:20 [ТС] | 14 |
Нет, недостаточно
Посмотрите пример: 1. Нулевой элемент сверяется с первым. Оба удовлетворяют условию и меняются местами. 2. Потом программа будет сравнивать первый элемент массива со 2 и 3. Первый меняется с третьим. *мы уже меняли местами первый элемент, поэтому его больше не нужно трогать Как это реализовать?
0
|
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
||||||
05.11.2016, 11:00 | 15 | |||||
ну да в длинном массиве будет наложение, тогда вставить еще проверку
и еще добавить break чтобы после одной перестановки дальше сравнения не шли
0
|
05.11.2016, 11:00 | |
05.11.2016, 11:00 | |
Помогаю со студенческими работами здесь
15
Поменять местами первый и максимальный по модулю отрицательный элементы массива В матрице поменять местами максимальный по модулю и минимальный по модулю четные элементы Поменять местами в одномерном массиве противоположные по знаку элементы (например 7.5 и -7.5), с учетов перестановки каждого элемента не более одного Поменять местами максимальный и минимальный по модулю элементы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |