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

Смещение членов массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
MeghaNik
 Аватар для MeghaNik
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 5
28.08.2011, 22:23     Смещение членов массива #1
В общем задача: нужно найти все простые числа в динамическом массиве, удалить их, сместить оставшиеся элементы на 1 позицию влево от удаляемого элемента, а освобождающиеся элементы в конце массива заполнить нулями. Например, если начальный массив 4, 7, 12, 3, 56, то результатом должен быть массив 4, 12, 56, 0, 0.
Так вот, нужно составить алгоритм. Нахождение простых чисел я уже сделал, а вот смещение вместе с удалением не получается.
Прикрепил блок-схему. Нужно чтобы при нахождении первого простого элемента действовало "Vect[i] = Vect[i + 1]" для всех. Как это сделать не пойму.
Вложения
Тип файла: docx Простые числа в массиве.docx (75.6 Кб, 17 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2011, 22:23     Смещение членов массива
Посмотрите здесь:

Смещение элементов одномерного массива C++
Найти максимальный из отрицательных членов массива C++
Получить числа b1, …, b20, где bi - среднее арифметическое всех членов массива А, кроме аi C++
C++ Получить число отрицательных членов последовательности и сумму нулевых членов последовательности
C++ определить число членов ряда, необходимых для расчета с заданной погрешностью суммы членов ряда:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
28.08.2011, 22:45     Смещение членов массива #2
нули внутри списка чисел встречаться могут?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
28.08.2011, 22:53     Смещение членов массива #3
std::remove_if - для удаления
std::fill - для заполнения нулями

Добавлено через 1 минуту
Ну, или реализацию посмотри, там же по ссылкам.
MeghaNik
 Аватар для MeghaNik
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 5
28.08.2011, 23:25  [ТС]     Смещение членов массива #4
Paporotnik, внутри - нет. "0" - это простое число.

rangerx, код - это хорошо, но мне нужен алгоритм.
Илларион
8 / 8 / 0
Регистрация: 05.06.2011
Сообщений: 97
28.08.2011, 23:30     Смещение членов массива #5
Ну у меня есть мысль делать все по очереди.
1). Пока есть простое число делаем обход массива
Если найдено прост. число, ставим vect[i] = vect[i+1] и все значения дальше до конца. vect[sizeof(vect)-j] приравниваем к нулю. j - количество проходов массива
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.08.2011, 23:38     Смещение членов массива #6
если с++, тогда std::stable_partition + std::fill

MeghaNik, такие задачи в стиле С решать очень легко с помощью дополнительного массива.
копируйте туда простые числа, остаток заполните нулями.
по необходимости скопируйте новый массив на место старого (плохо).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2011, 01:46     Смещение членов массива
Еще ссылки по теме:

C++ Найти сумму первых 20 и 10 членов массива
C++ Смещение метода в классе
Верно ли, что 2 массива отличаются не более, чем порядком следования членов C++

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

Или воспользуйтесь поиском по форуму:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
29.08.2011, 01:46     Смещение членов массива #7
Цитата Сообщение от MeghaNik Посмотреть сообщение
rangerx, код - это хорошо, но мне нужен алгоритм.
Ну, так что ты не можешь пару строк кода разобрать и составить алгоритм? Например, удаляем чётные
f - first
r - result

Бежим указателем f от начала до конца массива. Если элемент на который указывает f нечётный, то записываем по адресу r значение того на что указывает f, и перемещаем r одну позицию вперёд. И так до конца.
Код
1) 2 5 3 4 1 
   f  
   r

2) 2 5 3 4 1
     f
   r

3) 5 5 3 4 1
       f
     r   

4) 5 3 3 4 1
         f
       r  

5) 5 3 3 4 1
           f
       r   

6) 5 3 1 4 1
             f
         r
Остались нечётные: 5 3 1
теперь от r и до самого конца всё можно заполнить нулями.
Пример(максимально простой, без указателей)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
#define N 5
 
int main()
{
    int a[N] = { 2, 5, 3, 4, 1 };
 
    int i = 0;
    int r = 0;
 
    // удаляем чётные
    while(i != N)
    {
        if( (a[i] % 2) == 1 )
        {
            a[r] = a[i];
            ++r;
        }
        ++i;
    }
 
    // заполняем нулями освободившиеся позиции
    for(i = r; i < N; ++i)
        a[i] = 0;
 
 
    for(i = 0; i < N; ++i)
        printf("%d ", a[i]);
    putchar('\n');
 
    return 0;
}
Yandex
Объявления
29.08.2011, 01:46     Смещение членов массива
Ответ Создать тему
Опции темы

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