Форум программистов, компьютерный форум 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) Хотелось бы, что бы кнопка не просто вызывала окно консоли, а чтобы консоль встраивалась в форму, если такое вообще возможно конечно. подробнее

Показать сообщение отдельно
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
23.12.2013, 01:26     Удалить из отсортированного вектора, числа которые являются "квадратными"
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
Теперь извращаюсь со вставкой в вектор. хм. не получается... ((

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool zifra2(int a) //поиск двухзначного числа
{
    
if(a<0) a=-a; //если число отрицательно перевернем
if(a>9 && a<100) return true; 
else return false;
}
 
void vstavka(vector <int> &v1, vector <int> &v3, int n) // вставка Перед элементами второго вектора, являющимися двузначными числами, вставить наибольшее по модулю число из первого вектора 
{
    for(int i=0; i<n;i++)
    {
        if(zifra2(v3[i])&& v3[i]<abs(v1[i]) ) // что-то типо если число вектора v3 двухзначное и это число меньше по модулю числа из ранее введенных в вектор v1
        {
    v3.insert(v3.begin()+zifra2(v3[i]),v1[i]); //тогда мы перед этим двухзначным числом вставляем то число, которое является больше него по модулю из вектора v1
    
    } 
        
    return;
}
Не могу пока что додуматься до этого. Буду признателен за советы.
У вас функция zifra2 возвращает булево значение, вы не можете его прибавить к итератору, так как тип данных не является число.
И это не все, вам нужно немного пересмотреть свою функцию, предлагаю следующий вариант:

C++
1
2
3
4
5
6
7
8
9
10
11
void vstavka(int maxV1, vector <int> &v3)
{
    std::vector<int>::iterator it;
    maxV1 = abs(maxV1);
    for(it=myvector.begin(); it<myvector.end(); it++)
    {
         if(zifra2(v3[i])&& v3[i]<maxV1) {
         v3.insert(it+1,maxV1);
             it++;
     } 
}
Да и функцию zifra2 немного перепишем:
C++
1
2
3
4
5
bool zifra2(int a) 
{
    a = abs(a);
    return (a>9 && a<100);
}
Объясню что я сделал:
В функции vstavka, я изменил входные параметры, потому, что вы сами написали:
вставить наибольшее по модулю число из первого вектора
по этому на вход достаточно подать уже найденное максимальное число из v1.
и я не совсем понимаю для чего вам нужна n, если это длина вектора v3, то она все равно изменится если мы будем вставлять максимальное число с v1 после числа с v3, которое двухзначное, то есть длина массива v3 будет увеличиваться.

Добавлено через 10 минут
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
Добрый день! почти все выполнил. спасибо за помощь.
ПОка было время раскинул мозгами, по поводу поиска квадратного числа
получилось так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool kvadrat(double a)//поиск квадратного числа
{
    
if(a<0) a=-a;
double b=sqrt(a);
if(b==(int(b))) return true;
else return false;
}
 
void delet (vector <int> &v1) //функция удаления квадрата из вектора
{
    v1.erase(remove_if(v1.begin(), v1.end(), kvadrat), v1.end());
    return;
}
Вроде все правильно находит. Правильно ли я сделал? и можно ли так делать.

Добавлено через 24 минуты
Добрый день! почти все выполнил. спасибо за помощь.
ПОка было время раскинул мозгами, по поводу поиска квадратного числа
получилось так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool kvadrat(double a)//поиск квадратного числа
{
    
if(a<0) a=-a;
double b=sqrt(a);
if(b==(int(b))) return true;
else return false;
}
 
void delet (vector <int> &v1) //функция удаления квадрата из вектора
{
    v1.erase(remove_if(v1.begin(), v1.end(), kvadrat), v1.end());
    return;
}
Вроде все правильно находит. Правильно ли я сделал? и можно ли так делать.
в принципе все хорошо но можно сократить ваш код на пару строчек)))
C++
1
2
3
4
5
bool kvadrat(double a)//поиск квадратного числа
{
double b=sqrt(abs(a));
return (b==(int(b)));
}
И кстати если функция не возвращает значения, то есть стоит возврат типа void не обязательно писать в конце функции return, это делается если нужно выйти из функции по среди ее выполнения, к примеру:
C++
1
2
3
4
5
void findMaxNumber (char *buff, int size) 
{
    if (size < 1) return;
    // Далее идет код для нахождения максимума.
}
Пример высосан из пальца, но надеюсь понятно что я хотел этим сказать.
 
Текущее время: 04:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru