Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
30 / 30 / 9
Регистрация: 15.03.2010
Сообщений: 146
1

Что за ошибка???

23.03.2010, 20:46. Показов 498. Ответов 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....если такие имеются=)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2010, 20:46
Ответы с готовыми решениями:

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

Что это за ошибка, когда маткад не понимает, что такое у
Помогите плиз не понимаю что за ошибка маткад не понимает что такое у

Подскажите, что не правильно: компилятор пишет, что ошибка есть
Подскажите, что не правильно: компилятор пишет, что ошибка естьprogram name; var...

Ошибка компилятора. Что сделать, что бы среда работала?
http://i064.***********/1210/33/00be8b0c26e9t.jpg Что сделать что бы среда работала нормально?

5
230 / 227 / 65
Регистрация: 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);
}
0
30 / 30 / 9
Регистрация: 15.03.2010
Сообщений: 146
23.03.2010, 21:14  [ТС] 3
вот что я вставляю в первый вектор
C++
1
2
3
int r1=f2.front();
        int r2=f2.back();
        int r=r2-r1;
0
230 / 227 / 65
Регистрация: 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
1
30 / 30 / 9
Регистрация: 15.03.2010
Сообщений: 146
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++;
        }
    }
0
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
23.03.2010, 22:10 6
вставьте просто после f1.insert(iter,r);
iter++;
Да не обязательно его выкидывать. Просто у вас, скажем было 10 елементов. А вы вставили 11-ый. А итератор на прежнем месте остался. По этому iter++ перенесет его на один эллемент вперед, чтобы не зацикливать программу.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2010, 22:10

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка 678:удаленный компьютер не отвечает.что это?что нужно сделать чтобы работало?
ЧТО ЭТО?КАК С ЭТИМ БОРОТЬСЯ?

Ошибка CL.exe завершилась с кодом 2 Что это за ошибка и как исправить?
Ошибка появилась, но не могу понять как ее исправить. #include &lt;iostream&gt; using namespace...

Ошибка MEM.ALL ERR: hMem08 - что это за ошибка?
В моём проекте спустя часа 2-3 появляется вылазит ошибка вида: MEM.ALL ERR: hMem08 = 7AB7608,...

Доработка программы, нужно что бы после того как юзер введет вместо числа что то другое вылезала ошибка
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; int main(void) { SetConsoleOutputCP(1251); ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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