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

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

Войти
Регистрация
Восстановить пароль
 
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
#1

Что за ошибка??? - C++

23.03.2010, 20:46. Просмотров 381. Ответов 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
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
#include <iostream>
#include <vector>
#include <cmath>
#include <ctime>
#include <algorithm>
using namespace std;
void out(int n, vector<int> &f1)
{
    int q;
    cout<<"\nВведите параметр вывода\n1-в столбик\n2-в строку\nВвод:";cin>>q;
    switch(q)
    {
        case 1: 
            {
                for(int i=0; i<n;i++) 
                    cout<<i<<":"<<f1[i]<<endl;
                break;
            }
        case 2: 
            {
                for(int i=0; i<n;i++) 
                {
                    cout<<i<<":"<<f1[i]<<" ";
                }
                break;
            }
        default: break;
    }
    cout<<endl;
}
void sort_f1(int n, vector<int> &f1,vector<int> &f2)
{
    int x, t, m, Z, k=0;
    vector<int>::iterator iter;
    cout<<"\nЗадание №1:\nОтсортировать по возрастанию только элементы вектора, начинающиеся цифрой Z\n";
    cout<<"Введите число Z:";cin>>Z;
    for (iter=f1.begin(); iter!=f1.end(); iter++) 
    { 
        x=abs(*iter);
        t=abs(x);
        for (m=0; x/10!=0; m++)
            x/=10;
        for (int g=0 ; g<m; g++)
        {
            t/=10;
        }
        if (t==Z)
        {
            f2.push_back(*iter);
            k++;
        }
    }
    cout<<"\nЭлементы,начинающиеся на Z: "; 
    for(int i=0; i<k;i++)
    {
        cout<<f2[i]<<" ";
    }
    sort(f2.begin(),f2.end());
    m=f1.size();
    for( int i=0; i<k; i++)
    {
        for( int j=0; j<m; j++)
        {
            if(f2[i]==f1[j])
            {
                x=f1[j];
                f1[j]=f1[m-1];
                f1[m-1]=x;
                f1.pop_back();
                --j;
                m=f1.size();
            }
        }
    }
    f1.insert( f1.end(),f2.begin(),f2.end());
    cout<<"\nУпорядоченныe элементы Z в векторе: ";
    for(int i=0; i<n;i++)
    {
        cout<<f1[i]<<" ";
    }
    f2.clear();
}
void varik(vector<int>&f1,vector<int>&f2)
{
    int a,b;
    cout<<"\n\nЗадание №2:\nУдалить из вектора все эле-менты, принадлежащие не-которому диапазону";
    cout<<"\nЗадайте диапазон [a;b](через пробел)! Элементы вектора, принадлежащие этому\nдиапазону, будут удалены: ";cin>>a>>b;
    vector<int>::iterator iter;
    int m=f1.size(), x;
    for( int i=0; i<m; i++)
    {
        if(f1[i]>=a && f1[i]<=b)
        {
            x=f1[i];
            f2.push_back(x);
            f1[i]=f1[m-1];
            f1[m-1]=x;
            f1.pop_back();
            --i;
            m=f1.size();
        }
    }
    sort(f2.begin(),f2.end());
 
    cout<<"Получившийся вектор: ";
    for(iter=f1.begin(); iter!=f1.end();++iter)
    {
        cout<<*iter<<" ";
    }
}
void eee(vector<int>&f1,vector<int>&f2)
{
    cout<<"\n\nЗадание №3:\nПеред каждым числом, являющимся полным квадратом, вставить в первый вектор разность между минимумом и максиму-мом во втором векторе";
    vector<int>::iterator iter;
    int r1=f2.front();
    int r2=f2.back();
    int r=r2-r1;
    cout<<"\n\n";
    for(iter=f1.begin(); iter!=f1.end();++iter)
    {
        double x=*iter;
        double x1=floor(sqrt(x));
        double x2=ceil(sqrt(x));
        if ((x2-x1)==0)
        {
            f1.insert(iter,r);
        }
    }
}
int main()
{
    setlocale(0, "russian");
    srand((unsigned)time(NULL));
    vector<int> f1;
    vector<int> f2;
    int a,b,n;
    cout<<"Задайте количество элементов в векторе:";cin>>n;
    cout<<"Задайте диапазон значений[a;b](через пробел):";cin>>a>>b;
    for(int i=0; i<n;i++)
    f1.push_back(rand()%(b-a+1)+a);
    out(n,f1);
    sort_f1 (n,f1,f2);
    varik(f1,f2);
    eee(f1,f2);
 
system("pause");
return 0;
}
проблема с 3им заданием, а именно вот с этим
C++
1
2
3
4
5
6
7
8
9
10
for(iter=f1.begin(); iter!=f1.end();++iter)
    {
        double x=*iter;
        double x1=floor(sqrt(x));
        double x2=ceil(sqrt(x));
        if ((x2-x1)==0)
        {
            f1.insert(iter,r);
        }
    }
в цикле никак не хочет работать...скажите почему?? и что означает эта ошибка??
второй диапазон лучше задавать без включения туда полных квадратов 4, 9, 16, 25....если такие имеются=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2010, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что за ошибка??? (C++):

Что такое перегрузка оператора? Что у меня в коде за ошибка? - C++
Что же я написал?? Что оно не компилится? Что значит error C2275: Superclass: недопустимое использование этого типа в качестве выражения ...

Ошибка что то типа не объявленный идентификатор,и типа невозможно преобразовать CStringW в там что..то - C++
Даже не знаю как сказать... короче есть база а Access,которую я подключил к проекту MFC,и в этой базе всего одно поле с текстовым типом...

Что за ошибка - C++
Добрый день... Пишу программку считывания изображения из .dcm формата... В первый раз использую чужие библиотеки... Решил протестить их...

что за ошибка? - C++
вот прога#include&lt;iostream.h&gt; main() { int i; struct str { char *fn; int cl; int sc; }; str st;

Что за ошибка? - C++
Доброго времени суток! Передо мной стоит ужасающая, но вместе с тем и потрясающая задача: за неделю освоить базы, основы плюсов....

что за ошибка? - C++
1&gt;mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file &quot;..\Debug\123.exe&quot;. @&gt;F5AA =5 &lt;&gt;65B...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
23.03.2010, 21:06 #2
так а в чем ошибка? Программа выдает не те значения? Если в этом, то скорей всего потому, что у вас в задании написано
"вставить в первый вектор разность между минимумом и максиму-мом во втором векторе"
а вы в первый вектор вставляете разницу из первого вектора.

C++
1
2
3
4
5
6
for(iter=f1.begin(); iter!=f1.end();++iter)     // вот здесь, по идее должно быть for(iter=f2.begin(); iter!=f2.end();++iter) 
{
        double x=*iter;
        ...
        f1.insert(iter,r);
}
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
23.03.2010, 21:14  [ТС] #3
вот что я вставляю в первый вектор
C++
1
2
3
int r1=f2.front();
        int r2=f2.back();
        int r=r2-r1;
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
23.03.2010, 21:20 #4
так вы же пишете
C++
1
for(iter=f1.begin(); iter!=f1.end();++iter)
то есть
iter берете из f1
и потом вставляете его же в f1
а надо из f2
в f1
При этом вы увиличиваете размер вектора f1, и цикл будет длиться вечно если хоть раз сработает условие, когда x1-x2==0
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
23.03.2010, 22:02  [ТС] #5
ну так написано же ведь "...вставить в первый вектор..."
"Перед каждым числом(в первом векторе), являющимся полным квадратом, вставить в первый вектор разность между минимумом и максимумом во втором векторе"

напишите как должно быть плз

Добавлено через 32 минуты
все спс разобрался=))
прост выкинул этот итератор вонючий...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    int r1=f2.front();
    int r2=f2.back();
    int r=r2-r1;
    cout<<"\nРазность: "<<r<<endl;
    int m=f1.size();
    for(int i=0; i<m; i++)
    {
        double x=f1[i];
        double x1=floor(sqrt(x));
        double x2=ceil(sqrt(x));
        if ((x2-x1)==0)
        {
            f1.insert(f1.begin()+i , r );
            i++;
            m++;
        }
    }
Добавлено через 11 секунд
все спс разобрался=))
прост выкинул этот итератор вонючий...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    int r1=f2.front();
    int r2=f2.back();
    int r=r2-r1;
    cout<<"\nРазность: "<<r<<endl;
    int m=f1.size();
    for(int i=0; i<m; i++)
    {
        double x=f1[i];
        double x1=floor(sqrt(x));
        double x2=ceil(sqrt(x));
        if ((x2-x1)==0)
        {
            f1.insert(f1.begin()+i , r );
            i++;
            m++;
        }
    }
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
23.03.2010, 22:10 #6
вставьте просто после f1.insert(iter,r);
iter++;
Да не обязательно его выкидывать. Просто у вас, скажем было 10 елементов. А вы вставили 11-ый. А итератор на прежнем месте остался. По этому iter++ перенесет его на один эллемент вперед, чтобы не зацикливать программу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2010, 22:10
Привет! Вот еще темы с ответами:

Что за ошибка ?! - C++
Не могу понять почему не компилится проект?!

Что за ошибка ? - C++
Помогите с ошибкой разобраться #include&quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;fstream&gt; #include&lt;math.h&gt; ...

что за ошибка? - C++
вот програма #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using std::cout; using std::endl; class GradeBook { public: void...

что за ошибка??? - C++
#include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; #include &lt;D:\\alex\\head-files\\mathem.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.03.2010, 22:10
Ответ Создать тему
Опции темы

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