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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти наибольший элемент побочной диагонали матрицы http://www.cyberforum.ru/cpp-beginners/thread429838.html
Найдите наибольший элемент побочной диагонали заданной матрицы A(N, N) и выведите на печать всю строку, в которой он находится.
C++ Перевести программу в С++ Вот это нужно оформить в C++ #include <cstring> #include <iostream> using namespace std; bool orly(char *s, char *f) { while(*s && *f) if (*s++!=*f++) return false; http://www.cyberforum.ru/cpp-beginners/thread429788.html
C++ Генерация простых чисел
Всем привет! Кто знает не сложные и быстрые алгоритмы генерации больших простых и псевопростых чисел, тест ферма что работает не стабильно в совокупности с библиотекой CBigNumber. Может есть смысл использовать какие то другие библиотеки или компоненты...посоветуйте, у кого есть какие задумки. Повторюсь что нужен достаточно простой алгоритм, чтобы в течение дня всё написать и отладить
C++ составить программу нахождения максимума из положительных чисел кратных 2
составить программу нахождения максимума из положительных чисел кратных 2,а также сумму всех положительных чисел. числа вводяться с клавиатуры. признак конца ввода -ввод 0. пожалуйста решите на экзамене сижу(
C++ В строке, состоящей из слов и знаков препинания(пробел.:,!?-;),найти слово максимальной длины, не содержащее заданную букву http://www.cyberforum.ru/cpp-beginners/thread429705.html
В строке, состоящей из слов и знаков препинания(пробел.:,!?-;), найти слово максимальной длины, не содержащее заданную букву/
C++ Системы Ребята, выручайтеБ вопрос жизни и смерти Написать на языке С или С++ функцию, удовлетворяющую следубщим требованиям, вызвать её в программе main() 2.1 прототип char* f( char*v1, char*v2, char*r, int n); 2.2 параметры v1, v2 -указатели исходных строк, r - указатель результирующей строки, n - размер результирующей строки 2.3 Назначение: исходные строки являются символьным представлением... подробнее

Показать сообщение отдельно
crazygor1
 Аватар для crazygor1
6 / 6 / 1
Регистрация: 06.02.2010
Сообщений: 131
18.01.2012, 01:42  [ТС]     Вставляем 0 элемент
Ну я вроде бы сделал как функции, что не так не пойму:
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;
}
 
Текущее время: 19:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru