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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
viny-puh
Сообщений: n/a
#1

Сжать массив - C++

06.03.2010, 15:09. Просмотров 2358. Ответов 9
Метки нет (Все метки)

Помогите пожалуйста!
Задача: Сжать массив, удалив из него элементы, модуль которых не превышает единицу. Освободившиеся в конце массива элементы заполнить нулями.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2010, 15:09     Сжать массив
Посмотрите здесь:

Сжать массив, выбросив из него отрицательные элементы - массив становится пустым - C++
Задачка такая: Разработать программу, обеспечивающую ввод с клавиатуры целых чисел и сохранение их в одномерном массиве. Ввод...

Сжать массив - C++
Задание: сжать массив, удалив из него вс енулевые элементы! Вот мой первый вариант, он работает, но мне он не нравиться #include...

сжать массив - C++
помогите пожалуйста Сжать заданный массив b1, b2,...,bm отбрасыванием нулевых элементов!решить с и спользованием функций

Сжать и отсортировать массив - C++
Дан массив а (n). Переписать в массив b(n) только положительные элементы массива а, деленные на 3 (со сжатием, без пустых элементов...

Найти сумму элементов и сжать массив - C++
Условие в одномерном массиве, состоящем из n-действительных элементов, вычислить: 1) номер минимального по модулю элемента массива; ...

Сжать массив путём удаления нулей - C++
Нужно написать программу которая сжимает массив путём удаления нулей (если они есть), не используя вспомагательный массив. Буду очень...

Сжать массив отбрасыванием нулевых элементов - C++
помогите пожалуйста создать динамический массив и Сжать заданный массив b1, b2,...,bm отбрасыванием нулевых элементов!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Norby
65 / 65 / 2
Регистрация: 12.03.2008
Сообщений: 392
06.03.2010, 16:41     Сжать массив #2
Что конкретно не получается? Задача-то элементарная.
Spoofi
8 / 8 / 1
Регистрация: 25.12.2009
Сообщений: 18
06.03.2010, 19:15     Сжать массив #3
Скорее всего проблема в сжатии массива... Дам подсказку - по условию задачи не сказано, что нельзя использовать дополнительный массив, значит создайте такойже по размеру массив, заполните его нулями.

В 1 массиве предположим, что уже заменены нулями элементы, чей модуль не превышает 1. Тогда через цикл записывайте все не нулевые элементы массива А в массив Б. И все, дальше уже что душе угодно с ними делать можно.
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
06.03.2010, 19:26     Сжать массив #4
Можно обойтись и без использования второго массива, просто переместить в конец массива все элементы кторые по модулю больше 1 а затем присвоить им 0;
А вообще мне кажется что человек просто хочет чтоб ему написали готовый код=);
Я писать не буду может захочет подумать, но если что скажи поможем с кодом.

Добавлено через 3 минуты
Единственное замечание, это то что не совсем ясно из условия, если в исходном массиве содержатся элементы равные нулю, их надо считать элементами массива( модуль нуля тоже не превосходит единицу ), и оставить на местах, или же их тоже нужно "сжать"?
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
06.03.2010, 19:27     Сжать массив #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "math.h"
#include <iostream>
int main()
{
    int a[] = { 1, 0, -3, 4, -2, 2, 8, 9};
    std::cout << "Before: " << std::endl;
    for (int i = 0; i < 8; i++)
        std::cout << a[i] << "\t";
    int count = 0;
    for (int i = 0; i < 8; i++)
    {
        if ( abs(a[i]) > 1 ) // оставим те модуль которых превышает единицу
            a[count++] = a[i];
    }
    for (int i = count; i < 8; i++) // оставшееся заполняем нулями
        a[i] = 0;
    std::cout << std::endl << "After: " << std::endl;
    for (int i = 0; i < 8; i++)
        std::cout << a[i] << "\t";
return 0;
}
Без второго массива
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
06.03.2010, 19:50     Сжать массив #6
Немного не так, я думаю что нужно использовать масив элементов с плавающей точной а не целых чисел, поскольку если я не ошибаюсь модуль числа это само число со знаком плюс, если брать массив целых чисел то условию будет соответствовать только ноль( и плюс минус еденица если в условии имеется ввиду включительно единицу );
Но если даже брать целые числа и плюс минус еденицу включительно, то код все равно немного не правильный, в строке
C++
1
2
3
4
5
        for (int i = 0; i < 8; i++)
        {
                if ( abs(a[i]) > 1 ) // оставим те модуль которых превышает единицу
                        a[count++] = a[i];
        }
count=0 изначально тоесть первый элемент "затирается"(даже если он не превышает 1 по модулю) элементом больше 1 по модулю!
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
06.03.2010, 20:18     Сжать массив #7
count=0 изначально тоесть первый элемент "затирается"(даже если он не превышает 1 по модулю) элементом больше 1 по модулю!
Before:
2 0 -3 4 -2 2 8 9
After:
2 -3 4 -2 2 8 9 0
Вроде ничего не затирается...
Модуль это модуль. Программно так:
C++
1
number>=0 ? number : -number
Немного не так, я думаю что нужно использовать масив элементов с плавающей точной а не целых чисел
C++
1
float a[] = { 2, 0, -3, 4, -2, 2, 8, 9};
int на float заменить, и все будет тоже самое )
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
06.03.2010, 20:42     Сжать массив #8
но всё равно, ведь то что по модулю больше одного должно быть в конце массива и равным нулю...
тоесть если брать массив float
Before:
0.2 -0.78 -3.4 4.0 -0,9 2.0
то должно быть
After:
0.2 -0.78 -0.9 0.0 0.0 0.0
Это собственно и получается сжатие и заполнение свободных элементов нолями, как я понимаю... или я не прав?

Добавлено через 6 минут
Цитата Сообщение от insideone Посмотреть сообщение
Вроде ничего не затирается...
давай посмотрим внимательнее
C++
1
2
3
4
5
6
        int count = 0;  // count инициализируется нулём. ок
        for (int i = 0; i < 8; i++)  // условие. ок
        {
                if ( abs(a[i]) > 1 ) // оставим те модуль которых превышает единицу. ок
                        a[count++] = a[i]; // а это ли не запара?
        }
// а это ли не запара?
допустим первый элемент удовлетворяющий условию abs(a[i]) > 1 был в массиве четвёртым тоесть i=3
и что мы имеем?
C++
1
a[1] = a[3] // где теперь a[1]?
ведь если первый элемент подходящий под условию четвертый (i=3) то значит все элементы до него удалятся не должны ( в том числе и a[1]) а у тебя он "затирается" a[3] получается...
insideone
Модератор
Автор FAQ
3638 / 916 / 49
Регистрация: 10.01.2010
Сообщений: 2,468
06.03.2010, 21:05     Сжать массив #9
Before:
0.2 -0.78 -3.4 4.0 -0,9 2.0
то должно быть
After:
0.2 -0.78 -0.9 0.0 0.0 0.0
Цитата Сообщение от viny-puh Посмотреть сообщение
удалив из него элементы, модуль которых не превышает единицу
Если я правильно понял это условие то надо оставить те числа которые больше единицы по модулю. Если нет... надо переписать условие и все дела

Цитата Сообщение от Amarted Посмотреть сообщение
a[1] = a[3] // где теперь a[1]?
a[1] был проверен в цикле ранее оставлен или нет - решает условие... условие здесь главное
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2010, 21:24     Сжать массив
Еще ссылки по теме:

Сжать массив-как это сделать? - C++
Здравствуйте, у меня вот тут задание такое есть,не знаю как сделать. Задача: Сжать массив,удалив из него все элементы,модуль которых...

Сжать массив, выбросив нулевые элементы - C++
Добрый день, уважаемые мастера, прошу помочь решить две задачи. 1) Составить программу решения задачи на С ++, использовать процедуры...

Сжать одномерный массив целых чисел - C++
Есть одномерный массив целых чисел от 0 - 65 535. Необходимо создать класс который сожмет этот массив, но при этом будет доступно обращению...

Сжать массив путем вычеркивания нулевых элементов - C++
Имеется целочисленный массив из n элементов,сжать массив путем вычеркивания нулывех элементов, если таких нет то вывести сжатие невозможно....

Вычислить сумму элементов массива, сжать массив - C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: — сумму элементов массива с нечетными номерами; — сумму...


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

Или воспользуйтесь поиском по форуму:
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
06.03.2010, 21:24     Сжать массив #10
Всё я тебя понял, если учитывать то что ты понял условие "удалив из него элементы, модуль которых не превышает единицу" как то что надо оставить элементы по модулю больше единицы тогда твой код ясен;
Но насколько меня учили в школе НЕ ПРИВЫШАЮШИХ единицу это значит НЕ БОЛЬШЕ единицы и тогда просто надо поменять условие abs(a[i]) > 1 на abs(a[i]) < 1 либо <= 1 если единицу тоже учитывать.
я не много по другому написал, но смысл в общем тот же.
Yandex
Объявления
06.03.2010, 21:24     Сжать массив
Ответ Создать тему
Опции темы

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