Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
7 / 7 / 4
Регистрация: 06.02.2010
Сообщений: 131
1

Вставляем 0 элемент

17.01.2012, 15:23. Показов 1520. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Помогите пожалуйста с решением задачи:
данн массив размера N, вставить 0:
1)перед каждым 3м положительным
2)после каждого 3го положительного
3)перед каждым 4м отрицательным
4)после каждого четвертого отрицательного
Заранее спасибо!

Добавлено через 2 часа 10 минут
Помогите хотяб с 1м, остальное я по аналогии сделаю
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2012, 15:23
Ответы с готовыми решениями:

Вывести содержимое списка в следующем порядке: первый элемент, последний элемент, второй элемент, предпоследни
#include <iostream> #include <list> #include <iterator> void output(std::list<int> myList,...

Строки. Как найти в слове первый элемент? Второй элемент, последний элемент?
как найти в слове первый элемент?Второй элемент,последний элемент.С помощью каких операторов это...

Вставляем картинку в Delphi
Добрый день, Можно ли вставить картинку в свою программу, т.е фон, а на нем уже кнопки делать,...

Вставляем текстуру через SFML
Здравствуйте форумчане. Программа работает без ошибок но когда вставляю текстуру sf::Texture...

20
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
17.01.2012, 15:25 2
Цитата Сообщение от crazygor1 Посмотреть сообщение
Помогите хотяб с 1м,
а в чем именно проблема? Смещаешь все элементы, на место старого, где начал смещать пишешь 0. Примеров полно на форуме.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 16:16 3
1.
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
template<typename T, size_t N>
class IsNthPositive : public std::unary_function<T, bool>
{
public:
    IsNthPositive():
    m_counter()
    {
    }
    
    bool operator()(const T& arg)
    {
        if (T() < arg)
            ++m_counter;
        
        if (m_counter == N)
        {
            m_counter = 0;
            
            return true;
        }
        
        return false;
    }
    
private:
    size_t m_counter;
};
 
int main()
{
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    
    std::vector<int>::iterator pos = vec.begin();
    
    while ((pos = std::find_if(pos, vec.end(), IsNthPositive<int, 3>())) != vec.end())
        pos = vec.insert(pos, 0) + 2;
    
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "  "));
    
    return 0;
}
2
7 / 7 / 4
Регистрация: 06.02.2010
Сообщений: 131
17.01.2012, 18:07  [ТС] 4
Можно коментов немного плиз
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 18:16 5
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
// Функтор, срабатывающий на n-том положительном элементе
// Параметры шаблона:
// - T - тип проверяемых элементов
// - N - номер положительного элемента, на котором должен сработать функтор
template<typename T, size_t N>
// Должен наследоваться от std::unary_function
class IsNthPositive : public std::unary_function<T, bool>
{
public:
    // В конструкторе счётчик обнуляется
    IsNthPositive():
    m_counter()
    {
    }
    
    // Основной оператор, проверяющий условие
    bool operator()(const T& arg)
    {
        // Если передан положительный элемент - увеличиваем счётчик
        if (T() < arg)
            ++m_counter;
        
        // Если отсчитали нужное количество элементов - обнуляём счётчик и
        // возвращаем true
        if (m_counter == N)
        {
            m_counter = 0;
            
            return true;
        }
        
        // В противном случае (насчитано элементов меньше N) возвращаем false
        return false;
    }
    
private:
    // Счётчик элементов
    size_t m_counter;
};
 
int main()
{
    // Создаём и заполняем вектор с клавиатуры (конец ввода - Ctrl+X)
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    
    // Первая позиция поиска - начальный элемент вектора
    std::vector<int>::iterator pos = vec.begin();
    
    // До тех пор, пока не достигли конца вектора - продолжаем поиск по условию
    // и запоминаем найденную позицию
    while ((pos = std::find_if(pos, vec.end(), IsNthPositive<int, 3>())) != vec.end())
        // вставляем 0 в найденную позицию, дальнейший поиск начинаем через две
        // позиции (пропускаем вставленный элемент и следующий, поскольку
        // следующий как раз является третьим, а нам надо начать отсыёт с
        // четвёртого)
        pos = vec.insert(pos, 0) + 2;
    
    // Выводим результирующий вектор
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "  "));
    
    return 0;
}
1
7 / 7 / 4
Регистрация: 06.02.2010
Сообщений: 131
17.01.2012, 18:23  [ТС] 6
а чему равен arg?
то есть для отрицательных просто сделать
if (T() > arg)
++m_counter;
?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 18:24 7
crazygor1, да, или
C++
1
if (arg < T())
1
7 / 7 / 4
Регистрация: 06.02.2010
Сообщений: 131
17.01.2012, 18:31  [ТС] 8
При нажатии контрл+икс выдаёт ошибку
Машинный код" завершилась с кодом 0 (0x0).
Что это может быть?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.01.2012, 18:35 9
C++
1
std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
не для Ctrl+X, а для Ctrl+Z
т.к. EOF с консоли считывается при нажатии Ctrl+Z
а при нажатии Ctrl+X приложению посылается сигнал SIGINTR
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 18:36 10
crazygor1, это не ошибка. Программа отработала прекрасно, ошибок нет. Запускайте программу из консоли, и всё будет прекрасно.
0
7 / 7 / 4
Регистрация: 06.02.2010
Сообщений: 131
17.01.2012, 18:38  [ТС] 11
Что для Ctrl+Z то и Ctrl+X одна ошибка
у меня 10я студия
создал вин32 консоль всё правильно?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 18:40 12
crazygor1, запускайте программу по Ctrl+F5.

Добавлено через 1 минуту
retmas, кстати да, промахнулся))
1
7 / 7 / 4
Регистрация: 06.02.2010
Сообщений: 131
17.01.2012, 23:40  [ТС] 13
Ребят, а как сделать что бы я вводил допустим в начале 1, 2,3 или 4 и оно исполняло определенную функцию, например первая эта:
C++
1
2
3
4
5
6
7
8
9
10
11
// До тех пор, пока не достигли конца вектора - продолжаем поиск по условию
    // и запоминаем найденную позицию
    while ((pos = std::find_if(pos, vec.end(), IsNthPositive<int, 3>())) != vec.end())
        // вставляем 0 в найденную позицию, дальнейший поиск начинаем через две
        // позиции (пропускаем вставленный элемент и следующий, поскольку
        // следующий как раз является третьим, а нам надо начать отсыёт с
        // четвёртого)
        pos = vec.insert(pos, 0) + 2;
    
    // Выводим результирующий вектор
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "  "));
Вторая эта:
C++
1
2
3
4
5
6
7
8
9
10
11
// До тех пор, пока не достигли конца вектора - продолжаем поиск по условию
    // и запоминаем найденную позицию
    while ((pos = std::find_if(pos, vec.end(), IsNthPositive<int, 4>())) != vec.end())
        // вставляем 0 в найденную позицию, дальнейший поиск начинаем через две
        // позиции (пропускаем вставленный элемент и следующий, поскольку
        // следующий как раз является третьим, а нам надо начать отсыёт с
        // четвёртого)
        pos = vec.insert(pos, 0) + 3;
    
    // Выводим результирующий вектор
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "  "));
и тд.
Спасибо!
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.01.2012, 23:51 14
crazygor1, пишете 4 функции, в каждой код в соответствии с заданием, каждая принимает заполненный вектор. В функции main после создания и заполнения вектора вставляете код вроде такого:

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
int v;
 
std::cout << "Enter number of task: ";
std::cin >> v;
 
switch (v)
{
case 1:
    task1(vec);
    
    break;
    
case 2:
    task2(vec);
    
    break;
    
case 3:
    task3(vec);
    
    break;
    
case 4:
    task4(vec);
    
    break;
    
default:
    std::cout << "Incorrect input!" << std::endl;
    
    break;
}
1
7 / 7 / 4
Регистрация: 06.02.2010
Сообщений: 131
18.01.2012, 01:31  [ТС] 15
А если ошибка что идентификатор task1 не найден, их нужно обьявить?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
18.01.2012, 01:35 16
crazygor1, я же сказал, нужно написать функции, соответствующие заданиям. Под помощью на форуме подразумевается, что тот, кому помогают, хоть немного думает сам.
0
7 / 7 / 4
Регистрация: 06.02.2010
Сообщений: 131
18.01.2012, 01:42  [ТС] 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
// Функтор, срабатывающий на n-том положительном элементе
// Параметры шаблона:
// - T - тип проверяемых элементов
// - N - номер положительного элемента, на котором должен сработать функтор
template<typename T, size_t N>
// Должен наследоваться от std::unary_function
class IsNthPositive : public std::unary_function<T, bool>//перед каждым 3м положительным
{
public:
    // В конструкторе счётчик обнуляется
    IsNthPositive():
    m_counter()
    {
    }
    
    // Основной оператор, проверяющий условие
    bool operator()(const T& arg)
    {
        // Если передан положительный элемент - увеличиваем счётчик
        if (T() < arg)
            ++m_counter;
        
        // Если отсчитали нужное количество элементов - обнуляём счётчик и
        // возвращаем true
        if (m_counter == N)
        {
            m_counter = 0;
            
            return true;
        }
        
        // В противном случае (насчитано элементов меньше N) возвращаем false
        return false;
    }
    
private:
    // Счётчик элементов
    size_t m_counter;
};
template<typename T, size_t N>
class IsNthNegative : public std::unary_function<T, bool>//перед каждым 4 отрицательным
{
public:
    // В конструкторе счётчик обнуляется
    IsNthNegative():
    m_counter()
    {
    }
    
    // Основной оператор, проверяющий условие
    bool operator()(const T& arg)
    {
        // Если передан отрицательный элемент - увеличиваем счётчик
        if (T() > arg)
            ++m_counter;
        
        // Если отсчитали нужное количество элементов - обнуляём счётчик и
        // возвращаем true
        if (m_counter == N)
        {
            m_counter = 0;
            
            return true;
        }
        
        // В противном случае (насчитано элементов меньше N) возвращаем false
        return false;
    }
    
private:
    // Счётчик элементов
    size_t m_counter;
};
 
int main()
{
        int v;
 
    std::cout << "Enter number of task: ";
    std::cin >> v;
     // Создаём и заполняем вектор с клавиатуры (конец ввода - Ctrl+X)
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    // Первая позиция поиска - начальный элемент вектора
    std::vector<int>::iterator pos = vec.begin();
    switch (v)
    {
    case 1:
        task1(vec);
        {
    // До тех пор, пока не достигли конца вектора - продолжаем поиск по условию
    // и запоминаем найденную позицию
    while ((pos = std::find_if(pos, vec.end(), IsNthPositive<int, 3>())) != vec.end())
        // вставляем 0 в найденную позицию, дальнейший поиск начинаем через две
        // позиции (пропускаем вставленный элемент и следующий, поскольку
        // следующий как раз является третьим, а нам надо начать отсыёт с
        // четвёртого)
        pos = vec.insert(pos, 0) + 2;
    
    // Выводим результирующий вектор
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "  "));
        }
        break;
    
    case 2:
        task2(vec);
        {
    // До тех пор, пока не достигли конца вектора - продолжаем поиск по условию
    // и запоминаем найденную позицию
    while ((pos = std::find_if(pos, vec.end(), IsNthNegative<int, 4>())) != vec.end())
        // вставляем 0 в найденную позицию, дальнейший поиск начинаем через две
        // позиции (пропускаем вставленный элемент и следующий, поскольку
        // следующий как раз является третьим, а нам надо начать отсыёт с
        // четвёртого)
        pos = vec.insert(pos, 0) + 3;
    
    // Выводим результирующий вектор
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "  "));
        }
        break;
    
    case 3:
        task3(vec);
    
        break;
    
    case 4:
        task4(vec);
    
        break;
    
    default:
        std::cout << "Incorrect input!" << std::endl;
    
        break;
    }
   
    
    
    
    return 0;
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
18.01.2012, 01:46 18
crazygor1, в С/С++ нельзя описывать одни функции внутри других. Вы должны отдельно описать эти функции, а в main'е просто вызывать их .Короче говоря, сделайте хоть что-то сами - наберите в гугле "функции с++".
0
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
18.01.2012, 01:50 19
silent_1991,
alex@mbook ~/abs/fifo $ cat vel.c
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(int argc, char ** argv){
        int some()
        {
                return 5;
        }
 
        printf("%d\n", some());
        return 0;
}
alex@mbook ~/abs/fifo $ gcc vel.c
alex@mbook ~/abs/fifo $ ./a.out
5
alex@mbook ~/abs/fifo $
ЧЯДНТ?
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
18.01.2012, 01:54 20
NoMasters, да-да, давненько уже на С не писал, забыл об этих тонких отличиях))
0
18.01.2012, 01:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2012, 01:54
Помогаю со студенческими работами здесь

[Mac OS][Посылка текста на сервер] Если копируем и вставляем текст из Word98 в IE5.0 for Mac -->
То в тексте записаном скриптом на сервере мы получим замен символов : ',',-,-- знаки вопросов...

Определить минимальный элемент, его номер в массиве, заменить этот элемент элемент числом 1000
1. Задать массив А с помощью генератора случайных чисел положительными и отрицательными числами....

В каждой строке найти минимальный элемент, и если этот элемент не равен 0, то разделить на него каждый элемент
Дана матрица А размером m*n, в каждой строке найти минимальный элемент, и если этот элемент не...

Найти средний элемент, минимальный элемент и максимальный элемент матрицы
Здравствуйте,помогите решить задачу. Задана двумерная матрица размерностью 12x12 элементов...

Структура "Информация": - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить элемент перед элемент
Структура &quot;Информация&quot;: - носитель; - объем; - название; - автор. Удалить первый элемент с...

Создать новый массив, найти наименьший элемент 3-го столбца, поменять местами наименьший элемент 3-го столбца и элемент a23
1 Создать новый одномерный массив , каждый элемент которого равен среднему арифметическому...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru