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

Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора - C++

Восстановить пароль Регистрация
 
8Reset8
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 59
13.06.2013, 20:04     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора #1
Заданный вектор Т, который состоит из n действительных чисел. Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора. Напечатать заданный и превращен векторы

Сделайте попроще и побыстрей если можно.

 Комментарий модератора 
Называйте темы информативно.


Добавлено через 42 минуты
Надо сделать масивом, я вот набросал чето(билиберда полная) исправте если можете и скиньте полный листинг))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream.h>
#include <math.h>
int main()
{
const int n=5;
int B[n],C[n],i;
for(int i=0;i<5;i++)
{
cout<<"Enter B["<<i<<"]=:"; cin>>B[i];
}
for(int i=0;i<5;i++)
{
if (B[0]==0)&(B[1]==0)
B[i]=B[i+2];
B[i]=B[i+3];
else cout<<"nemozhlivo vikonat";
}
for(int i=0;i<5;i++)
{
Cout<<B[i]<<" "<<endl;
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 20:04     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
Посмотрите здесь:

Все отрицательные элементы массива уменьшить в двое, а все нулевые элементы заменить на... C++
В матрице A(m,n) все не нулевые элементы заменить обратными по величине и противоположными по знаку C++
Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора C++
Одномерный массив. Найти наименьший элемент, все нулевые элементы заменить значением этого элемента C++
Необходимо заменить нулевые элементы матрицы вещественных чисел размерностью 5 на 5 ее максимальным элементом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
13.06.2013, 20:08     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора #2
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
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
int main ()
{
    vector<double> vec {1.5, 9.1, 0, 6.7, 0, -9};
    copy( begin(vec), end(vec), ostream_iterator<double>(cout, ", ") );
 
    int i = 0, j = 0;
    while (i < vec.size() && vec[i]) ++i;
    while (j < vec.size() && !vec[j]) ++j;
    if (i != vec.size() && j != vec.size()) {}
        vec[i] = vec[j];
 
    while (++i < vec.size() && vec[i]);
    while (++j < vec.size() && !vec[j]);
    if (i < vec.size() && j < vec.size())
        vec[i] = vec[j];
 
    cout << endl;
    copy( begin(vec), end(vec), ostream_iterator<double>(cout, ", ") );
    return 0;
}
8Reset8
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 59
13.06.2013, 20:15  [ТС]     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора #3
а с помощью масива можно это сделать?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
13.06.2013, 20:16     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора #4
а это по вашему что?
C++
1
vector<double> vec {1.5, 9.1, 0, 6.7, 0, -9};
8Reset8
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 59
13.06.2013, 20:25  [ТС]     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора #5
Такое задание только одномерным масивом, и без
C++
1
2
3
 while (i < vec.size() && vec[i]) ++i;
    while (j < vec.size() && !vec[j]) ++j;
    if (i != vec.size() && j != vec.size()
а цыклами фор и простенькими условиями(без if (i < vec.size() && j < vec.size())
)
буду очень благодарен если кто сможет реализировать.

Добавлено через 2 минуты
Допустим, если можно переделать с того что я кидал)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream.h>
#include <math.h>
int main()
{
const int n=5;
int B[n],i;
for(int i=0;i<5;i++)
{
cout<<"Enter B["<<i<<"]=:"; cin>>B[i];
}
for(int i=0;i<5;i++)
{
if (B[0]==0)&(B[1]==0)
B[i]=B[i+2];
B[i]=B[i+3];
else cout<<"nemozhlivo vikonat";
}
for(int i=0;i<5;i++)
{
Cout<<B[i]<<" "<<endl;
system("pause");
return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
13.06.2013, 20:50     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора #6
Цитата Сообщение от 8Reset8 Посмотреть сообщение
(билиберда полная)
читаю: билдер полная. по-Фрейду

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
 
template <typename InputIterator>
void myReplace(const InputIterator &beg, const InputIterator &end)
{
    typedef typename InputIterator::value_type type;
    InputIterator
        first0  = std::find_if(beg, end, std::bind2nd(std::equal_to<type>(), 0) ),
        second0 = std::find_if(first0+1, end, std::bind2nd(std::equal_to<type>(), 0) ),
        first   = std::find_if(beg, end, std::bind2nd(std::not_equal_to<type>(), 0) ),
        second  = std::find_if(first+1, end, std::bind2nd(std::not_equal_to<type>(), 0) );
 
    if (first != end && first0 != end)
        *first0 = *first;
    if (second != end && second0 != end)
        *second0 = *second;
}
 
 
int main()
{
    typedef std::vector<double> vec_d;
    typedef std::ostream_iterator<double> output_d;
    vec_d v = {1, 2, 6, 0, 1, 7, 0, 4};
    auto print_v = [](const vec_d &vec)
    {
        std::copy(vec.cbegin(), vec.cend(), output_d(std::cout, " ") );
        std::cout << std::endl;
    };
 
    print_v(v);
    myReplace(v.begin(), v.end());
    print_v(v);
}
8Reset8
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 59
13.06.2013, 20:53  [ТС]     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора #7
ёмаё, а нет листингов проще, чтоб легко было розобраться))

Добавлено через 44 секунды
неужели нельзя вообще переделать то что я скидал ))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 21:16     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
Еще ссылки по теме:

C++ Заменить нулевые элементы массива суммой элементов
Ввести массив и заменить все нулевые элементы последним элементом массива C++
Нулевые элементы массива заменить средним арифметическим всех элементов C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
13.06.2013, 21:16     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора #8
Можно ГСЧ из С++11 еще прикрепить

По делу: все делается в один цикл, несколько флагов, которые говорят, установлены ли значения позиций для нужных переменных. Нам нужно узнать 4 позиции. Далее обычный свап, если нет выхода за рамки

Добавлено через 17 минут
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
43
44
45
46
47
48
#include <iostream>
 
void myReplace(double *arr, const int size)
{
    int first0, first, second0, second;
    first0 = first = second0 = second = -1;
 
    for (int i=0; i < size; i++)
    {
        if (arr[i] == 0)
        {
            if (first0 == -1)
                first0 = i;
            else if (second0 == -1)
                second0 = i;
        }
        else if (arr[i] != 0)
        {
            if (first == -1)
                first = i;
            else if (second == -1)
                second = i;
        }
    }
 
    if (first0 != -1 && first != -1)
        arr[first0] = arr[first];
    if (second0 != -1 && second != -1)
        arr[second0] = arr[second];
}
 
int main()
{
    const int N = 5;
    double A[N] = {1.2, 0, 4.6, 0, 1.8};
 
    std::cout << "Before:\n";
    for (int i=0; i < N; i++)
        std::cout << A[i] << " ";
    std::cout << std::endl;
 
    myReplace(A, N);
 
    std::cout << "After:\n";
    for (int i=0; i < N; i++)
        std::cout << A[i] << " ";
    std::cout << std::endl;
}
Добавлено через 23 секунды
учитывая, что ТС вроде бы что-то делал
Yandex
Объявления
13.06.2013, 21:16     Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
Ответ Создать тему
Опции темы

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