Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

Многократный сдвиг массива влево - C++

04.11.2012, 00:06. Просмотров 472. Ответов 5
Метки нет (Все метки)

У меня есть массив , к примеру :
C++
1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Проходя по нему я проверяю является ли число не четным.Если нет , сдвигаю массив влево и освобождаю память занятую последним числом.

C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0 ; ilosc2 != i ; i++ ) // запускаем счетчик
        {   
            g = p[i];      // считываем число
            k = g%2; // проверяем делится ли оно  на 2
            if (k==1) // если нет 
     {
                for (int b=ш;ilosc2-1!=b;b++)    // сдвигаем массив влево
                {
                    zm2=p[b];
                    p[b-1]=zm2;
                }
                p = (int*)realloc(p,(ilosc2-1)*sizeof(int));// и освобождаем место последнего числа в памяти
В идеале, после прохода массив должен выглядеть так
C++
1
3 5 7 9 11 13 15 17 19 21
Но вся память почему-то не освобождается ,а занимается числом 21
C++
1
3 5 7 9 11 13 15 17 19 21 21 21 21 21 21 21 21 21 21 21 21 -33686019
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 00:06     Многократный сдвиг массива влево
Посмотрите здесь:

Циклический сдвиг массива влево - C++
Дан массив y1, ... , y20. Сформировать массив Z1, ... , Z20, элементы которого соответствуют элементам yi , сдвинутым на одну позицию...

Сдвиг массива влево на n знаков - C++
пишу на C++ не могу найти ошибку в коде. помогите я не очень силен только учусь))) спасибо!!! вот код #include<iostream> ...

Циклический сдвиг массива влево - C++
условие: задан массив целочисленный состоящий из 10 элементов нужно сделать циклический сдвиг влево так чтобы первый максимум стал на...

Циклический сдвиг элементов массива влево - C++
Совершить циклический сдвиг элементов массива влево так, чтобы первый максимальный элемент был на K-месте ( K- вводиться с клавиатуры)

Осуществить сдвиг элементов массива влево на K позиций - C++
Дан массив размера N и целое число K (1 ≤ K < N). Осуществить сдвиг элементов массива влево на K позиций (при этом AN перейдет в AN–K, AN–1...

Циклический сдвиг элементов массива по диагонали влево вниз - C++
Квадратный массив N×N по диагонали влево вверх. //--------------------------------------------------------------------------- ...

Одномерные массивы (циклический сдвиг всех элементов массива на одну позицию влево) - C++
Написать программу, которая делает циклический сдвиг всех элементов массива а1, а2, ..., аn на одну позицию влево, то-есть будет получен...

Сдвиг влево - C++
Напишите программу, которая циклически сдвигает элементы массива влево (0-й элемент становится последним, 1-й становится 0-м, ...,...

Сдвиг символа влево - C++
Помогите осуществить сдвиг символа (буквы) из циклического алфавита на n влево. То есть, например, на вход методу дается буква 'A' и число...

массив, сдвиг влево - C++
нужен код программы, которая сдвигает элементы массива на 1 влево, тоесть было 1 5 6 8 9, стало 5 6 8 9 1 ... через функцию(в main только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
04.11.2012, 00:35     Многократный сдвиг массива влево #2
maSt, какой-то бред пишете, если честно. К тому же, чтобы сдвинуть весь массив влево, достаточно только сместить указатель на головной элемент на 1 вправо. Но вместо выкидывания четных значений будет просто укорачиваться сам массив, и останется левый кусок, длиной N - Nчетных
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.11.2012, 00:56     Многократный сдвиг массива влево #3
Я вас разочарую, но из массива нельзя просто так взять и выкинуть реаллоком элемент из середины. И с конца тоже назвать это выкидываем можно с натяжкой. И ещё нельзя вызывать realloc(), передавая ему другой указатель, а не именно тот, который был выдан malloc() ранее.

И энивей, нечего дёргать этот несчастный массив по одному элементу. Перенесите всё чётные в начало, потом отрежете весь ненужный кусок за один раз.

И не забывайте у себя уменьшать счётичик с количеством элементов массива. А то вы вроде как "удалили" элементы оттуда, но почему-то продолжаете печатать мусор из памяти.
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
04.11.2012, 01:32  [ТС]     Многократный сдвиг массива влево #4
Понял, буду переделывать . Извините если код выглядит как-то "идиотически" я вообще рарбше не имел дела с освобождением памяти, а тут такое задание.
И когда переделаю, то для отрезки ненужной части опять таки использовать realloc или возможно это сделать через free?
Psilon
Master of Orion
Эксперт .NET
5882 / 4779 / 633
Регистрация: 10.07.2011
Сообщений: 14,399
Записей в блоге: 5
Завершенные тесты: 4
04.11.2012, 01:44     Многократный сдвиг массива влево #5
maSt, вы пытаетесь надеть трусы через голову реализовать динамическую структуру данных (список) через статическую (массив)
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
04.11.2012, 01:46     Многократный сдвиг массива влево #6
Да не идиотически, просто, эээ... нелогично. С точки зрения массивов. Если б это был связный список, то флаг в руки.

malloc()/calloc() выделяет вам кусок памяти и выдаёт указатель на его начало. Они же сохраняют в памяти информацию о том, что где выделено, чтобы free() потом могла отработать так, как надо. Или realloc(). Именно поэтому надо в free() или realloc() передавать строго тот же указатель, который вернула malloc(). Там весьма хитрая хореография внутри и не стоит её ломать.

Так что realloc(), если вам надо изменить размер выделенного куска.
Yandex
Объявления
04.11.2012, 01:46     Многократный сдвиг массива влево
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru