1

Тема: Динамічні масиви(С++)

Потрібно написати функцію(яка приймає динамічний масив і його розмір) що видаляє всі парні елементи масиву.
Я її написав, але вона неправильна(деколи пропускає парні елементи). Допоможіть виправити.

void MyFunc1(int*arr,int&size)
{
    for(int i = 0; i < size; i++)
    {
        if(arr[i] % 2 == 0)
        {
            size--;
            for(int j = i; j < size; j++)
            {
                arr[j] = arr[j + 1];
            }
        }
    }
}

2

Re: Динамічні масиви(С++)

Можете пояснити в чому ідея "size--" ?

Подякували: FakiNyan, varkon2

3 Востаннє редагувалося FakiNyan (31.10.2017 12:21:37)

Re: Динамічні масиви(С++)

0x9111A написав:

Можете пояснити в чому ідея "size--" ?

типу видалили ж 1 елемент, то зменшуємо розмір масиву на 1, і підтягуємо решту елементи до початку масиву

4

Re: Динамічні масиви(С++)

size - це розмір масиву

5

Re: Динамічні масиви(С++)

якщо знаходимо елемент з парним числом то масив зменшуємо на 1

6 Востаннє редагувалося FakiNyan (31.10.2017 12:39:50)

Re: Динамічні масиви(С++)

а, ну тут зрозуміло

на прикладі масиву

2, 4, 6, 8

Цей масив має size - 4

1. Перевіряємо елемент під індексом 0
2. 2 % 2 == 0? Так
3. На місце 2 ставимо 4, тепер елемент під номером 4 має індекс 0, і дорівнює поточному індексу
4. Підтягуємо решту елементів
5. Інкрементуємо індекс, і тепер він дорівнює 1

Тобто виходить так, що 4, котру ми підтягнули на індекс 0, тепер не перевіряється, адже слідуюча ітерація починається з індексу 1

Рішення під спойлером, але спробуйте здогадатись самі

Прихований текст

після внутрішнього циклу, коли підтягуєте елементи, потрібно декрементувати змінну i

Подякували: Mirek70981

7

Re: Динамічні масиви(С++)

Зрозумів. Thank you