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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
MeghaNik
0 / 0 / 0
Регистрация: 07.08.2011
Сообщений: 5
#1

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

28.08.2011, 22:23. Просмотров 1067. Ответов 6
Метки нет (Все метки)

В общем задача: нужно найти все простые числа в динамическом массиве, удалить их, сместить оставшиеся элементы на 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++ Найти сумму первых 20 и 10 членов массива
Верно ли, что 2 массива отличаются не более, чем порядком следования членов C++
C++ Найти количество и сумму тех членов данного массива, которые делятся на 5 и не делятся на 7
Заменить значения членов массива на значение одной из элементарных функций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
28.08.2011, 22:45     Смещение членов массива #2
нули внутри списка чисел встречаться могут?
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
28.08.2011, 22:53     Смещение членов массива #3
std::remove_if - для удаления
std::fill - для заполнения нулями

Добавлено через 1 минуту
Ну, или реализацию посмотри, там же по ссылкам.
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
583 / 521 / 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++ Найти сумму и число членов массива, принадлежащих отрезку [3;7] и все члены, меньше двух, заменить нулями.
Инициализация массива структур и форматированный вывод значений её членов C++
C++ Для заданной матрицы найти такие k и n, что сумма членов k-го столбца совпадает с суммой членов n-й строки
C++ найти сумму 10-ти членов следующих общих членов,которые даны снизу
C++ найти сумму 10-ти членов следующих общих членов,которые даны снизу

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

Или воспользуйтесь поиском по форуму:
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
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     Смещение членов массива
Ответ Создать тему
Опции темы

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