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

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

Войти
Регистрация
Восстановить пароль
 
OverDozero
99 / 99 / 6
Регистрация: 07.04.2011
Сообщений: 522
#1

Сжатие массива путем поиска элементов меньше заданного значения - C++

24.06.2014, 22:11. Просмотров 510. Ответов 4
Метки нет (Все метки)

Доброго времени суток всем.
Задача:
Задан одномерный целочисленный массив. Исключить из него все элементы, значения которых меньше заданного А
Проблема с сжатием массива
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
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
 int a=0,n=0,V=0;//размерность n число a
 int mas=0; 
 int i,j;
 int newraz=0;
 int main ()
  {
    printf("Vvedite razmernost massiva:");
     scanf("%d",&n);
    printf("Vvedite 4islo 'A':");
     scanf("%d",&a);
    printf("Vyberete tip zapolneniya massiva\n");
    printf("'1'-avtomati4esloe zapolnenie massiva\n");
    printf("'2'-ru4noe zapolnenie massiva\n");
    printf("Tip:");
    scanf("%d",&V);//тип заполнения массива
    int *arr=new int[V];
    srand(time(NULL));
    if (V==1) {for (i=0;i<n;i++){
      arr[i]=rand()%99-25;
      printf("%d\n",arr[i]);
      }
    }
    if (V>=2){for (i=0;i<n;i++){
  printf("Vvedite '%d' 3lement massiva:",i+1);
  scanf("%d",&mas);
  arr[i]=mas;}}
      //поиск нужного значения а
    for (i=0;i<n;i++)
    {if (arr[i]<a){
       arr[i]=arr[i++];
       newraz++;}}//новый размер массива
    for (i=0;i<newraz;i++)
       printf("%d",arr[i]);
 getch();
// delete []arr;//освобождаем память
  return 0;
 }
Не могу реализовать именно часть сжатия.В чем ошибка?
И вывод сжатого массива не выходит.Выводит только 1 значение.Видимо ошибка в самом сжатии
delete []arr;-правильно освобождаю память динамического массива?
Спасибо за ответ!
P.S.В гугле искал сжатие массивов.Все не то.Мне не надо заменить элементы на другие,их просто надо сдвинуть

Добавлено через 9 минут
Ошибка в коде
C++
1
int *arr=new int[V]
должно быть
C++
1
int *arr=new int[n]
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2014, 22:11     Сжатие массива путем поиска элементов меньше заданного значения
Посмотрите здесь:

Вычисление среднего геометрического значения элементов заданного массива C++
Ограничить снизу значения тех элементов массива, значения которых меньше среднего для последовательности C++
определить количество элементов двумерного массива,которые меньше среднего арифметического значения всех элементов своей строки C++
C++ Удалить из массива все элементы, которые меньше среднеарифметического значения всех элементов исходного массива
Описать функцию поиска максимального значения среди элементов линейного массива C++
C++ В матрице А (mxn) найти найти сумму элементов по колонкам, значения которых по модулю меньше заданного числа К
Определить номера строк, среднее арифметическое элементов которых меньше заданного значения C++
Найти сумму элементов массива значения которых меньше заданного числа C++
C++ Определить, сколько элементов стека имеют значения меньше среднего значения от всех элементов и удалить их
Получить из заданного массива новый путем удаления из него всех повторяющихся элементов C++
Вывести числа, имеющие значения меньше максимального и больше среднего значения всех элементов массива C++
C++ Определить количество элементов массива значения которых больше заданного числа

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
24.06.2014, 22:25     Сжатие массива путем поиска элементов меньше заданного значения #2
C++
1
2
3
4
for (i=0;i<n;i++)
    {if (arr[i]<a){
       arr[i]=arr[i++];
       newraz++;}}//новый размер массива
Тут ошибка, после нахождения элемента, меньше заданного нужно переместить все остальные на 1 позицию влево, у вас просто на место этого элемента записывается значение соседнего справа элемента, должно быть так:

C++
1
2
3
4
5
6
for (i=0;i<n;i++)
    {if (arr[i]<a){
        for(j=i;j<n-1;j++)
       arr[j]=arr[j+1];
       n--;
}}
А один элемент у вас выводится потому, что переменную newraz вы инициализируете только в начале нулем, и потом в цикле наращиваете. На самом деле можно обойтись и без этой переменной, просто использовать в последующем цикле вывода n :

C++
1
2
 for (i=0;i<n;i++)
       printf("%d",arr[i]);
OverDozero
99 / 99 / 6
Регистрация: 07.04.2011
Сообщений: 522
24.06.2014, 22:40  [ТС]     Сжатие массива путем поиска элементов меньше заданного значения #3
Ввожу вручную-размерность 5.ЧИсло А 78
и забиваю массив -1 -2 -3 5 90
Выводит сжатый -2 5 90
Хотя должен брать только 90.Все значения меньше А не должны выводиться
BatonPro
30 / 30 / 24
Регистрация: 21.06.2014
Сообщений: 81
24.06.2014, 22:51     Сжатие массива путем поиска элементов меньше заданного значения #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Пропустил этот момент в коде, вот так должно работать:

C++
1
2
3
4
5
6
7
for (i=0;i<n;i++)
    {if (arr[i]<a){
        for(j=i;j<n-1;j++)
       arr[j]=arr[j+1];
       n--;
       i--;
}}
OverDozero
99 / 99 / 6
Регистрация: 07.04.2011
Сообщений: 522
25.06.2014, 05:42  [ТС]     Сжатие массива путем поиска элементов меньше заданного значения #5
Потом уже заметил что I не уменьшаю после n.Спасибо!Помогли!Понял свою ошибку
Готовый код.Может понадобиться кому-то
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
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
 int a=0,n=0,V=0;//Г°Г*çìåðГ*îñòü n ÷èñëî a
 int mas=0; 
 int i,j;
 int main ()
  {
    printf("Vvedite razmernost massiva:");
     scanf("%d",&n);
    printf("Vvedite 4islo 'A':");
     scanf("%d",&a);
    printf("Vyberete tip zapolneniya massiva\n");
    printf("'1'-avtomati4esloe zapolnenie massiva\n");
    printf("'2'-ru4noe zapolnenie massiva\n");
    printf("Tip:");
    scanf("%d",&V);//ГІГЁГЇ Г§Г*ïîëГ*ГҐГ*ГЁГї Г¬Г*Г±Г±ГЁГўГ*
    int *arr=new int[n];
    srand(time(NULL));
    if (V==1) {for (i=0;i<n;i++){
      arr[i]=rand()%99-25;
      printf("%d\n",arr[i]);
      }}
    if (V>=2){for (i=0;i<n;i++){
  printf("Vvedite '%d' 3lement massiva:",i+1);
  scanf("%d",&mas);
  arr[i]=mas;}}
    for (i=0;i<n;i++)
    {if (arr[i]<a){
       for(j=i;j<n-1;j++)
       arr[j]=arr[j+1];
       n--;
       i--;}}
    printf("Sgatiy massiv:");
    for (i=0;i<n;i++)
       printf("%d ",arr[i]);
  getch();
 delete []arr;//îñâîáîæäГ*ГҐГ¬ ГЇГ*ìÿòü
  return 0;
 
 }
Yandex
Объявления
25.06.2014, 05:42     Сжатие массива путем поиска элементов меньше заданного значения
Ответ Создать тему
Опции темы

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