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

Удалить из отсортированного вектора, числа которые являются "квадратными" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка операторов http://www.cyberforum.ru/cpp-beginners/thread1048447.html
Создайте класс Fraction (обыкновенная дробь), в котором реализовать перегрузку: оператора суммирования дробей, оператора суммирования дроби и целого числа, оператора умножения, деления, вычитания дробей, а также дроби и целого числа, оператора ~ для сокращения дроби, логических операторов ==, >=, <=. #include "stdafx.h" #include <iostream> #include <cmath> #include "Windows.h" class...
C++ Вычисление тангенса с заданой точностью Задача. Решить уравнение x*tg(x)=a методом половинного деления с заданой точностью е=0,0001. Спасибо заранее. http://www.cyberforum.ru/cpp-beginners/thread1048422.html
Вызов функции C++
#include "stdafx.h" #include <locale> #include <iostream> using namespace std; class Bankomat { public: Bankomat(){}; ~Bankomat(){};
C++ SF алгоритм
Можете предоставить мне самый простой, понятный любому школьнику код SF алгоритма. Я не знаю, что такое SF алгоритм, но подозреваю, что это хэш функция
C++ Циклы.Посчитать количество чисел http://www.cyberforum.ru/cpp-beginners/thread1048363.html
Посчитать количество чисел от a до b(a и b вводятся с клавиатуры), у которых все цифры разные(не используя массива).Помогите пожалуйста! Вот набросок:int a, b, p, v, n = 0; int n0 = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0, n8 = 0, n9 = 0; cin >> a >> b; for (int i = a; i <= b; i++){ p = i % 10; if (p == 0)n0++; if (p == 1)n1++; if (p == 2)n2++; if (p == 3)n3++;
C++ Запуск консольного приложение на форме Имеется ли возможность запустить консольное приложение по нажатию кнопки на форме? (В приложении windows forms) Хотелось бы, что бы кнопка не просто вызывала окно консоли, а чтобы консоль встраивалась в форму, если такое вообще возможно конечно. подробнее

Показать сообщение отдельно
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
12.01.2014, 15:29  [ТС]
Добрый день!
Вот, вернулся к данным заданиям.
Опять нуждаюсь в ваших советах.

Я немного переделал код

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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <iostream>
#include <ostream>
#include <iomanip>
#include <math.h>
#include <ctime>            // для генерации случайных чисел начиная с произвольного числа
 #include <vector>
#include <iterator>
#include <algorithm>
 
#include <cstdlib> 
using namespace std;
 
int f1 (int n, int a, int b) //генерация чисел
    {   int total;
        for(int i=0; i<n; i++) 
             {
                 total = a + rand() % ( b - a + 1 ); //генерация случайных чисел в диапазоне а б
                 
             }
        return total;
    }
 
void show_vector( vector<int>&v1) //    Написать функцию, выводящую на экран элементы вектора – в столбик с указанием индекса или в стро-ку через пробел без указания индекса
    {
        vector<int>::iterator it; //Объявляем итератор
        for (it=v1.begin();it!=v1.end();it++)
        cout<<" "<<*it; //с помощью итератора выводим элементы вектора на экран
        cout<<endl;
        return;
    }
 
bool zifra(int a)
{
    bool res=true;
    if(a<0) a=-a;
    int z=a%10;
    while(a>0 && z%2!=0) // пока есть в числе цифры и текущая цифра нечётная
    {
        a/=10; //отбросить последнюю цифру
        z=a%10; // взять новую текущую
    }
    if(a>0) res=false; // искать есть где -- попалась чётная цифра
    return res;
}
 
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечётные цифры
{  
int tmp;
int n1=n-1;
for(int i = 0; i < n1; ++i) // i - номер прохода
    {            
        for(int j = i; j < n; ++j) // внутренний цикл прохода
            {    
                if(zifra(v1[i]) &&  zifra(v1[j]) && v1[i]<v1[j]) 
                    {
                        tmp = v1[j ]; 
                        v1[j ] = v1[i]; 
                        v1[i] = tmp;
                    }
            }
    }
}
 
bool kvadrat(double a)//поиск квадратного числа
{ 
bool res=true; //всегда правда
double b=sqrt(abs(a));//проверка условия
if (b==(int(b))); //если целое значит к=квадрат
else res=false; //если лож значит не квадратное число
return res; //возвращаем правду
}
bool kvadrat2(double a)//поиск квадратного числа для копирования их в вектор 2. т.е. своего рода обман, т.к. предикат должен быть истинным. По другому не знаю как реализовать. 
{ 
bool res=false; //всегда лож
double b=sqrt(abs(a));//проверка условия
if (b==(int(b))); //если целое значит к=квадрат
else res=true; //если правда значит не квадратное число
return res; //возвращаем правду
}
 
void delet (vector <int> &v1, vector<int> &v2) //Удалить из вектора все элементы, которые являют-ся полными квадратами.
{   
remove_copy_if( v1.begin(), v1.end(), std::back_inserter(v2), kvadrat2); //нужно скопировать квадратные числа в вектор два) я думаю, сделал это не совсем верно. Или не совсем верный способ. пришлось делать отдельный поиск квадрата с ложным значением и.к. предикат должен быть истинным.
v1.erase(remove_if(v1.begin(), v1.end(), kvadrat),v1.end()); //удаление квадратных чисел из вектора 1
 return;
}
 
 
/*
 
int maxV1(vector<int> &v1) //поиск максимального числа, впринцепи работает, но не смог применить, пробовал разные варианты, а так же поиска макс элемента сразу вовремя вставки.
{ 
int max=0;
for(int i=0;i<v1.size();i++)
{
   if(max<v1[i])
   max=v1[i];  
}
return max;
}
*/
bool zifra2(int a) 
{
    a = abs(a);
    return (a>9 && a<100);
}
 
void vstavka( vector <int> &v1, vector <int> &v3) //вставляем Максимальное число перед элементами 2 вектора(квадратные числа)
{
int max=0;
for(int i=0;i<v1.size();i++)
if(max<v1[i])
 max=v1[i]; 
 
 
 
std::vector<int>::iterator it;
    for(it=v3.begin(); it!=v3.end(); it++)
    {
    
    v3.insert(it,max);
     } 
}
 
 
int main()
{ 
setlocale(LC_ALL, "Russian"); // функция локализации вызывается только один раз
    int n, a, b;
    srand((unsigned)time(NULL));   // для генерации случайных чисел начиная с произвольного числа
    cout<<" Задание по варианту:"<< endl;
    cout<<" "<< endl;
    cout<<" 1) Отсортировать по убыванию те элементы вектора, кото-рые содержат только нечётные цифры"<< endl;
    cout<<" "<< endl;
    cout<<" 2) Удалить из вектора все элементы, которые являются полными квадратами."<< endl;
    cout<<" "<< endl;
    cout<<" 3) Перед элементами второго вектора, являющимися двузначными числами, вставить наибольшее по модулю число из первого вектора "<< endl;
    cout<<" "<< endl;
    cout<<" Введите Данные:"<< endl;
    cout<<" "<< endl;
    cout<<" Количество элементов вектора: "<< endl; cin>>n;
    cout<<" "<< endl;
    cout<<" Диапазон значений: "<< endl; cin>>a>>b;
    cout<<" "<< endl;
    system ("cls");
std::vector <int> v1, v2, v3; //Объявили вектор в n элементов. ВОЗМОЖНО нужно сразу резервировать и задавать кол-во элементов????
for (int i=0;i<n;i++) v1.push_back(f1(n,a,b)); //заполняем вектор n случайными числами
cout<<" "<< endl;
//заполнили вектор и вывели
cout<<" Вектор 1 заполнен: "<<endl; 
cout<<" "<< endl;
show_vector(v1);//вывод на экран
cout<<"  "<< endl;
//задание 1 
BubbleSort(v1,n);//сортировка
cout<<" Вектор 1 отсортированы только нечетные числа: "<<endl; 
cout<<" "<< endl;
show_vector(v1);//вывод на экран
cout<<" "<< endl;
cout<<" -------------------------------------------- "<< endl;
//задание 2
delet(v1,v2);//удаляем квадратные числа из вектора 1 
cout<<" Удалены квадратные числа: "; 
show_vector(v1);cout<<endl; //вывод на экран
cout<<" --------------------------------------------- "<< endl;
cout<<" Скопированы квадратные числа: ";
show_vector(v2);cout<<endl;//вывод на экран
cout<<" --------------------------------------------- "<< endl;
//задание 3
//cout<<maxV1(v1)<<endl;//максимальное число
cout<<" --------------------------------------------- "<< endl;
v3.assign(v2.begin(),v2.end());//скопировали в вектор 3 вектор 2, чтобы его больше не трогать.
cout<<" Скопирован вектор 2 в вектор 3: ";show_vector(v3);cout<<endl;//вывод на экран
cout<<" --------------------------------------------- "<< endl;
vstavka(v1,v3);//вставка
cout<<" Перед элементами 2 вектора было вставлено max число вектора 1: ";
show_vector(v3);cout<<endl;//вывод на экран
system("PAUSE"); 
return 0;
}
1) У меня вопрос по поводу копирования квадратных чисел в вектор 2. Я реализовал, но через заднее место имхо.
2) Мне нужно перед элементами 2 вектора (т.е. скопированные квадратные числа) вставить максимальное число вектора 1. Найти я его смог, а применить нет.
как это сделать?
Мне говорили делать не через интератор, а через find.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru