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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
#1

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

19.12.2013, 15:59. Просмотров 1437. Ответов 34
Метки нет (Все метки)

Добрый день!
Есть вопросы по некоторым функциям, помогите плиз.

Вот допустим у меня идет сортировка вектора по убыванию, но не пойму как сделать сортировку только нечетных цифр?

Я не пойму как мне удалить из отсортированного вектора, числа которые являются "квадратными".

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
#include <iostream>
#include <ostream>
#include <iomanip>
#include <math.h>
 #include <vector>
#include <iterator>
 
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;
    }
 
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечёт-ные цифры
    {  
        for(int i=0; i<n; i++)
        for(int j=i+1; j<n; j++)    
        if(v1[i]<v1[j])swap(v1[j],v1[i]);
        return; 
    }
int delet (vector<int>v1, int &n) //Удалить из вектора все элементы, которые являют-ся полными квадратами.
    {   
        
    }
int main()
{ 
setlocale(LC_ALL, "Russian"); // функция локализации вызывается только один раз
int n, a, b;
cout<<" Введите Данные:"<< endl;
cout<<" "<< endl;
cout<<" Количество элементов вектора: "<< endl; cin>>n;
cout<<" "<< endl;
cout<<" Диапазон значений: "<< endl; cin>>a>>b;
cout<<" "<< endl;
system ("cls");
std::vector <int> v1; //Объявили вектор в n элементов. ВОЗМОЖНО нужно сразу резервировать и задавать кол-во элементов????
cout<<" Вектор заполнен: "<<endl; show_vector(v1);
cout<<" "<< endl;
for (int i=0;i<n;i++) v1.push_back(f1(n,a,b)); //заполняем вектор n случайными числами
cout<<" "<< endl;
//заполнили вектор и вывели
//задание 1 
BubbleSort(v1,n);
cout<<" Задание.1 Вектор отсортирован: "<<endl; show_vector(v1);
cout<<" "<< endl;
system("PAUSE"); 
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 15:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить из отсортированного вектора, числа которые являются "квадратными" (C++):

Проверить утверждение "результатами вычислений по формуле х^2+х+17, при 0 <=х <= 15, являются простые числа" - C++
Составить программу для проверки утверждения: «Результатами вычислений по формуле х^2+х+17 при 0&lt;=х&lt;=15 являются простые числа». Все...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Наследуемым классом для комплексного числа объявить класс "радиус-вектор", имеющий данные "длина" и "угол" - C++
кто то напишите пожалуйста, вот программа: наследуемым классом для комплексного числа объявить класс &quot;радиус-вектор&quot;, имеющий данные...

Через ООП: Дать для числа наименование: "рубль", "рубля", "рублей"; - C++
Помогите пожалуйста с задачей. Могу сделать ее просто, но надо через ООП и у меня не получается. Дано натуральное число N (N&lt;20),...

Если возможно, упорядочить булевы вектора, или вывести сообщение "Вектора несравнимы" - C++
помогите пожалуйста с задачей: Даны булева вектора a и b длины n. Если возможно, упорядочить их, или вывести сообщение &quot;Вектора...

Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр - C++
Помогите пожалуйста разработать программу на языке программирования С++. Дан массив из N целых чисел, где N&lt;=16, каждое число в диапазоне...

34
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
19.12.2013, 16:20 #2
Насчет сортировки нечетных чисел. Лучше конечно завести новый вектор в котором будут хранится отсотированные нечетные числа иначе у вас будет каша. Я думаю понятно как определить какие числа нечетные. Насчет полных квадратов примерно тоже самое что нечетные числа, так как у вас тип в векторе int то нужно взять корень квадратный из числа и потом снова возвести в квадрат, думаю должно сработать и сравнить с исходным
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
19.12.2013, 16:38 #3
о_О_Кто_здесь, во-первых, почему вас двое? Вы одноклассники?
Во-вторых, сам в первом коде не сортировка пузырьком! В пузырьковой надо сравнивать СОСЕДНИЕ ЭЛЕМЕНТЫ, а не i-й и j-й!
1
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
19.12.2013, 19:30  [ТС] #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
о_О_Кто_здесь, во-первых, почему вас двое? Вы одноклассники?
Во-вторых, сам в первом коде не сортировка пузырьком! В пузырьковой надо сравнивать СОСЕДНИЕ ЭЛЕМЕНТЫ, а не i-й и j-й!
Я один.
хм , насчет пузырька хз. Смысл тот же выходит.
C++
1
2
3
 for(int i=0; i<n; i++)
        for(int j=i+1; j<n; j++)    
        if(v1[i]<v1[j])swap(v1[j],v1[i]);
Добавлено через 1 минуту
Цитата Сообщение от ShadowFirst Посмотреть сообщение
Насчет сортировки нечетных чисел. Лучше конечно завести новый вектор в котором будут хранится отсотированные нечетные числа иначе у вас будет каша. Я думаю понятно как определить какие числа нечетные. Насчет полных квадратов примерно тоже самое что нечетные числа, так как у вас тип в векторе int то нужно взять корень квадратный из числа и потом снова возвести в квадрат, думаю должно сработать и сравнить с исходным
прочитай мой пост лучше. Понятно как сравнить, а как реализовать нет.
0
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
19.12.2013, 21:31 #5
C++
1
2
3
for(int i=0; i<n; i++)
        for(int j=i+1; j<n; j++)    
        if(v1[i]<v1[j])swap(v1[j],v1[i]);
Вот ваша функция сортировки

Теперь просто делаем следующее
C++
1
2
3
4
5
for(int i=count; i<n; i++)
    if (v[i]%2!=0)
        for(int j=i+1; j<n; j++)
            if (v1[i]%2 != 0)      
                 if(v1[i]<v1[j])swap(v1[j],v1[i]);
Вот как то так. Но тут есть одно но, все отсортированные элементы будут находится между неотсортированными четными, по этому и сказал что каша получится. Если такого не хотите то вначале найдите все нечетные числа и запишите их в другой массив, а потом просортируйте его.
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
20.12.2013, 00:15 #6
это всё не пузырёк!!!

Добавлено через 2 минуты
Алгоритмы сортировок
разницу между пузырьком и твоим вариантом видишь?
В пузырьке сравниваются соседние элементы, например
C++
1
if (v1[j + 1] < v1[j])
а у вас вообще какие-то два разных! один i-й, другой j-й
1
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
20.12.2013, 20:27 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
это всё не пузырёк!!!

Добавлено через 2 минуты
Алгоритмы сортировок
разницу между пузырьком и твоим вариантом видишь?
В пузырьке сравниваются соседние элементы, например
C++
1
if (v1[j + 1] < v1[j])
а у вас вообще какие-то два разных! один i-й, другой j-й
может это и не пузырек, но по логике работы программы она сортирует и это важно
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
20.12.2013, 21:12 #8
Цитата Сообщение от ShadowFirst Посмотреть сообщение
может это и не пузырек, но по логике работы программы она сортирует и это важно
если тебе важно "лишь бы сортировало", то специально для тебя подойдёт глупая сортировка. http://ru.wikipedia.org/wiki/%C3%EB%...F0%EE%E2%EA%E0
То, что ты предлагаешь, похоже на сортировку выбором, но при этом постоянно меняются местами элементы вместо того, чтобы ё раз за цикл искать максимальный. Эта не пузырьковая сортировка, не надо заблуждаться!
1
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
20.12.2013, 22:32  [ТС] #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
если тебе важно "лишь бы сортировало", то специально для тебя подойдёт глупая сортировка. http://ru.wikipedia.org/wiki/%C3%EB%...F0%EE%E2%EA%E0
То, что ты предлагаешь, похоже на сортировку выбором, но при этом постоянно меняются местами элементы вместо того, чтобы ё раз за цикл искать максимальный. Эта не пузырьковая сортировка, не надо заблуждаться!
как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечёт-ные цифры
    {  
int tmp;
for(int i = 0; i < n - 1; ++i) // i - номер прохода
        {            
            for(int j = 0; j < n - 1; ++j) // внутренний цикл прохода
                {    
                    if(v1[j+1]>v1[j]) 
                        {
                            tmp = v1[j + 1]; 
                            v1[j + 1] = v1[j]; 
                            v1[j] = tmp;
                        }
                }
        }
    }
0
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
20.12.2013, 22:40 #10
Сообщение от Kuzia domovenok Посмотреть сообщение
если тебе важно "лишь бы сортировало", то специально для тебя подойдёт глупая сортировка. http://ru.wikipedia.org/wiki/%C3%EB%...F0%EE%E2%EA%E0
То, что ты предлагаешь, похоже на сортировку выбором, но при этом постоянно меняются местами элементы вместо того, чтобы ё раз за цикл искать максимальный. Эта не пузырьковая сортировка, не надо заблуждаться!
Внимательнее посмотрите еще раз на код который здесь был предложен вначале, два цикла, а вы указали на глупую сортировку где цикл один, вы что то напутали

Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечёт-ные цифры
    {  
int tmp;
for(int i = 0; i < n - 1; ++i) // i - номер прохода
        {            
            for(int j = 0; j < n - 1; ++j) // внутренний цикл прохода
                {    
                    if(v1[j+1]>v1[j]) 
                        {
                            tmp = v1[j + 1]; 
                            v1[j + 1] = v1[j]; 
                            v1[j] = tmp;
                        }
                }
        }
    }
Как то эта сортировка настораживает хоть и написано название функции пузырьком
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
20.12.2013, 23:45 #11
Цитата Сообщение от ShadowFirst Посмотреть сообщение
Внимательнее посмотрите еще раз на код который здесь был предложен вначале
мда. спасибо, я знаю, какие бывают алгоритмы сортировок. А вот если тебя "настораживает" сортировка пузырьком, это тебе её нужно повторить, не мне. Я изначально указал на ошибку, плюс о_О_Кто_здесь всё верно исправил в твоём коде. А ты, похоже, неуверенно знаешь алгоритм сортировки пузырьком.
1
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
21.12.2013, 00:47 #12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
мда. спасибо, я знаю, какие бывают алгоритмы сортировок. А вот если тебя "настораживает" сортировка пузырьком, это тебе её нужно повторить, не мне. Я изначально указал на ошибку, плюс о_О_Кто_здесь всё верно исправил в твоём коде. А ты, похоже, неуверенно знаешь алгоритм сортировки пузырьком.
Ваша невнимательность поражает, то не мой код, а автора топика, который я подогнал для выполнения его же задания сортировки нечетных элементов. Во вторых мне начальный код нравится больше, хоть это и не сортировка пузырьком, потому что в нем каждый раз количество элементов которые нужно обойти сокращается на 1, а в сортировке пузырьком этого не происходит, так как там начинается каждый раз сначала второй цикл.
1
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
21.12.2013, 18:50  [ТС] #13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
мда. спасибо, я знаю, какие бывают алгоритмы сортировок. А вот если тебя "настораживает" сортировка пузырьком, это тебе её нужно повторить, не мне. Я изначально указал на ошибку, плюс о_О_Кто_здесь всё верно исправил в твоём коде. А ты, похоже, неуверенно знаешь алгоритм сортировки пузырьком.
Не разводите шума из-за такой мелочи.
я исправил, вот так будет как надо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
                    }
            }
    }
}
Kuzia domovenok и ShadowFirst вот так будет правильнее по постановке задачи.
Спасибо за правильное наставление. Теперь нужно выполнить другие 2 задачи в этом задании.
0
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
21.12.2013, 20:17  [ТС] #14
Пытаюсь из отсортированного вектора удалить числа которые являются полными квадратами. Пока не получается

Выходит что-то типо этого:
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
bool zifra2(int a) //вычисляется полные квадраты
{
    int i=0;
    bool res=true;
    if(a<0) a=-a;//если а меньше нуля меня знак. вместе абс
    int z=a%10;// взять новую текущую последнюю цифру
 
    while(kvadrat(i)==a) // пока есть в числе цифры и текущая цифра квадратная
    {
        a/=10; //отбросить последнюю цифру
        z=a%10; // взять новую текущую последнюю цифру
    }
    if(kvadrat(i)<a) res=faulse; 
    else ++i;
    return res;
}
 
void delet (vector<int>&v1, int &n)
{
for (int i=0;i<n; i++)
{
if(zifra(v1[i]))//если квадратное
v1.erase(v1.begin()+i); // удаляем или надо v1.erase(v1.begin(),v1.end(),i,v1.end()); надеюсь на советы.
}// или может сделать надо еще else i++;
return;
}
надеюсь на хорошие советы.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
21.12.2013, 20:21 #15
а где функция zifra? я вижу лишь zifra2
возможно zifra это старая версия
тогда и в delet надо вызов заменить с zifra на zifra2
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2013, 20:21
Привет! Вот еще темы с ответами:

Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр - C++
Дан массив из N целых чисел, где N&lt;=16, каждое число в диапазоне от –32000 до 32000. Удалить из массива числа, которые являются полным...

Проверить утверждение "результатами вычислений по формуле x*x+x+17 при 0 ≤ х ≤ 15 являются простые числа" - C++
Составить программу для проверки утверждения «Результатами вычислений по формуле x*x+x+17 при 0 ≤ х ≤ 15 являются простые числа ». ...

Определить и вывести по три в строке числа из заданного диапазона, которые заканчиваются цифрой "5" - C++
Определить и вывести по три в строке числа из заданного диапазона, которые заканчиваются цифрой &quot;5&quot;.

В тех словах, которые окончиваются сочетанием букв "ть", заменить его окончание на "ил" - C++
дана строка. группы символов, разделенные пробелами и не содержащих пробелов внутри себя, называются словами. в тех словах, которые...


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

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

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