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

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

Войти
Регистрация
Восстановить пароль
 
8Reset8
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 59
#1

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

13.06.2013, 20:04. Просмотров 386. Ответов 7
Метки нет (Все метки)

Заданный вектор Т, который состоит из 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 20:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора (C++):

Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора - C++
Дано вектор В, состоящий из N действительных чисел. Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые...

Одномерный массив. Найти наименьший элемент, все нулевые элементы заменить значением этого элемента - C++
Ребят,помогите,пожалуйста, с массивом,вот задание: В массиве найти наименьший элемент.Вывести на дисплей полученное значение.После...

Нулевые элементы массива заменить на единицы - C++
В одномерном динамическом массиве: 1 шаг. преобразование исходного массива . Нулевые элементы заменить на единицы. 2 шаг. Заполнение...

Все отрицательные элементы массива уменьшить в двое, а все нулевые элементы заменить на... - C++
Задан массив М, состоящий из К строк и N столбцов. Все отрицательные элементы уменьшить в двое, а все нулевые элементы заменить на – 0.1.

Все нулевые элементы матрицы заменить на единицу - C++
Условие: Все нулевые элементы заменить на единицу! Во второй строке у меня там изменённый масив но там выводит нули одни! Почему? ...

Заменить нулевые элементы массива суммой элементов - C++
Заменить нулевые элементы массива суммой элементов, значения которых кратны некоторому целому значению x (x, как и массив, вводится с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
13.06.2013, 20:08 #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;
}
0
8Reset8
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 59
13.06.2013, 20:15  [ТС] #3
а с помощью масива можно это сделать?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
13.06.2013, 20:16 #4
а это по вашему что?
C++
1
vector<double> vec {1.5, 9.1, 0, 6.7, 0, -9};
0
8Reset8
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 59
13.06.2013, 20:25  [ТС] #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;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
13.06.2013, 20:50 #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);
}
1
8Reset8
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 59
13.06.2013, 20:53  [ТС] #7
ёмаё, а нет листингов проще, чтоб легко было розобраться))

Добавлено через 44 секунды
неужели нельзя вообще переделать то что я скидал ))
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
13.06.2013, 21:16 #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 секунды
учитывая, что ТС вроде бы что-то делал
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2013, 21:16
Привет! Вот еще темы с ответами:

Найти первый и последний нулевые элементы заданного массива и вывести их индексы - C++
В массиве несколько нулевых элементов. Найти первый и последний нулевые элементы. Вывести их индексы. Как это сделать?

Нулевые элементы массива заменить средним арифметическим всех элементов - C++
Задание: Создать числовой массив A. Каждый элемент, равный нулю, заменить средним арифметическим всех элементов. Вывести на экран...

Ввести массив и заменить все нулевые элементы последним элементом массива - C++
Прошу помочь, искал на форуме, но подходящего не нашел. Мне нужно ввести массив и заменить все нулевые элементы последним элементом массива.

В матрице A(m,n) все не нулевые элементы заменить обратными по величине и противоположными по знаку - C++
Вот задание: В матрице A(m,n) все не нулевые элементы заменить обратными по величине и противоположными по знаку. #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.06.2013, 21:16
Ответ Создать тему
Опции темы

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