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

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

Войти
Регистрация
Восстановить пароль
 
Ferz137
1 / 1 / 0
Регистрация: 08.01.2014
Сообщений: 17
#1

Этап в задаче по одномерным массивам - C++

25.01.2014, 08:48. Просмотров 270. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void zeroElementsDelete(int *array, size_t *arraySize)
{
       size_t zeroCounter(0);
       for (size_t i=0; i < *arraySize; i++)
       {
           if (!(*(array+i)))
           {
                zeroCounter++;
           }
           else
           {
               *(array+ i - zeroCounter) = *(array+i);
           }
        }
*arraySize -=zeroCounter;
}
Не могу разобраться что каждый из этих операторов делает, особенно не понятно условие с указателем (!(*(array+i))). Помогите ,пожалуйста, разобраться в этом
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2014, 08:48     Этап в задаче по одномерным массивам
Посмотрите здесь:

Два задания по одномерным массивам. C++
C++ решите программы по одномерным массивам на языке С++
Задания по одномерным массивам. C++
C++ Вопрос по одномерным массивам.
задача по одномерным массивам C++
Задача по одномерным массивам C++
C++ Написать функцию, которая по двум заданным одномерным массивам вычисляет двумерный массив и возвращает его максимальный элемент
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.01.2014, 09:24     Этап в задаче по одномерным массивам #2
Цитата Сообщение от Ferz137 Посмотреть сообщение
(!(*(array+i)))
начинаем рассматривать изнутри, т.е. самое вложенное выражение: array+i.
т.к. array является указателем на начальный эл-т массива, то array+i будет указывать на i-ый элемент массива.
Далее идет *, т.е. разыменование адреса. Получение значения по этому адресу. В данном случае - значение элемента с индексом i в массиве array.
Ну и в итоге идет оператор !, инверсия. Т.е. если элемент был равен 0, то получим 1(истина), если не равен 0, то получим 0(ложь).
Ferz137
1 / 1 / 0
Регистрация: 08.01.2014
Сообщений: 17
25.01.2014, 10:14  [ТС]     Этап в задаче по одномерным массивам #3
C++
1
2
3
4
5
6
7
8
zeroCounter++;
}
else
{
*(array+ i - zeroCounter) = *(array+i);
}
}
*arraySize -=zeroCounter;
А в этих можете кратко описать что делает программа?
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.01.2014, 10:24     Этап в задаче по одномерным массивам #4
C++
1
zeroCounter++;
Инкремент переменной zeroCounter. Т.е. увеличение на единицу.
C++
1
*(array+ i - zeroCounter) = *(array+i);
значение i-ого элемента приваивается (i-zeroCounter)-ому элементу.
C++
1
*arraySize -=zeroCounter;
Уменьшение значения, которое расположено по адресу arraySize на zeroCounter.
Равносильно такому коду:
C++
1
*arraySize = *arraySize - zeroCounter;
Ferz137
1 / 1 / 0
Регистрация: 08.01.2014
Сообщений: 17
25.01.2014, 10:29  [ТС]     Этап в задаче по одномерным массивам #5
Спасибо
Ferz137
1 / 1 / 0
Регистрация: 08.01.2014
Сообщений: 17
26.01.2014, 13:02  [ТС]     Этап в задаче по одномерным массивам #6
До меня всё-равно не доходит где в этом этапе задачи функция,которая выбрасывает найденные нулевые элементы в массиве
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2014, 13:10     Этап в задаче по одномерным массивам
Еще ссылки по теме:

Следующий этап изучения!? C++
По двум заданным одномерным массивам формируется третий, содержащий в начале элементы первого, а в конце – элементы второго массива. C++
Задача по одномерным массивам C++
лаба по одномерным и многомерным массивам C++
C++ Как написать этап компиляции?

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.01.2014, 13:10     Этап в задаче по одномерным массивам #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Ferz137 Посмотреть сообщение
До меня всё-равно не доходит где в этом этапе задачи функция,которая выбрасывает найденные нулевые элементы в массиве
Вот эта строка, которая выполняется в цикле:
C++
1
*(array+ i - zeroCounter) = *(array+i);
Ненулевые элементы "сдвигаются" в начало массива.
А потом игнорируются лишние элементы.
C++
1
*arraySize -=zeroCounter;
Yandex
Объявления
26.01.2014, 13:10     Этап в задаче по одномерным массивам
Ответ Создать тему
Опции темы

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