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

Вывод массива после сортировки

18.04.2010, 10:39. Просмотров 3124. Ответов 18
Метки нет (Все метки)

У меня не работает правельно вывод массива после сортировки, он такой же как и вводил, помогите.
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
#include <iostream.h>
#include  <conio.h>
#include  <stdlib.h>
class Mass
{
private:
float *PMass;
float Size;
public:
Mass();
~Mass();
void SetSize(float size){Size=size;};
float GetSize()const{return Size;};
void SetMassEL(float,float);
float GetMassEL(float)const;
};
Mass::Mass()
{ float i;
Size=100;
PMass=new float [Size];
}
Mass::~Mass()
{
float i;
for(i=0;i<Size;i++)
 delete[] PMass;
}
void Mass::SetMassEL(float x,float el){PMass[x]=el;}
float Mass::GetMassEL(float x1)const{return PMass[x1];}
void main()
{
Mass*PObject=new Mass;
float i=0,n;
float imin,el,ek,q,w,z,t;
char ch;
clrscr();
//vvod size;
cout<<"SIZE->";
cin>>n;
PObject->SetSize(n);
//vvod masuvy
for(i=0;i<PObject->GetSize();i++)
{cout<<"\n Enter element MASUVy-> ["<<i<<"]=";
cin>>el;
PObject->SetMassEL(i,el);}
cout<<endl<<"Masuv do sort"<<endl;
for(i=0;i<PObject->GetSize();i++)
cout<<PObject->GetMassEL(i)<<" ";
for(i=0;i<PObject->GetSize()-1;i++)
{
for (float j=i+1;j<n;j++)
{
if (PObject->GetMassEL(i)<PObject->GetMassEL(j)) {i=j;}
}
   q=PObject->GetMassEL(i);
q =i ;
i =q;
}
//Vuvod
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
cout<<PObject->GetMassEL(i)<<" ";
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2010, 10:39
Ответы с готовыми решениями:

Предусмотреть подсчет общего количества перестановок и вывод промежуточного массива после каждого цикла сортировки
Нужно предусмотреть подсчет общего количества перестановок и вывод промежуточного массива после...

Вывод структуры после сортировки
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;string.h&gt; #include...

Поэтапный вывод сортировки массива
C меня за помощь 100 рублей на webmoney. скайп komarov.deen icq 3556353 Нужно поэтапно вывести...

Вывод отсортированного массива 2-мя методами сортировки
Пишу на Ideone, задание состояло в сортировке массива 2-мя способами, в моем случае выбором и...

18
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
18.04.2010, 14:24 2
На сколько я понял, то это сортировка?
C++
1
2
3
4
5
6
7
8
9
10
for(i=0;i<PObject->GetSize()-1;i++)
{
for (float j=i+1;j<n;j++)
{
if (PObject->GetMassEL(i)<PObject->GetMassEL(j)) {i=j;}
}
   q=PObject->GetMassEL(i);
q =i ;
i =q;
}
Я так и не понял как вы собирались его отсортировать таким образом, по этому переписал.
Также я не понял, почему индексы в массиве у вас float, вы можете обратится к элементу массива с индексом 2.75?
C++
1
2
3
4
5
6
7
8
9
10
float tmp;
int j;
for(i = 0; i < PObject->GetSize() - 1; ++i)
    for (j = i + 1; j < PObject->GetSize(); ++j) 
        if (PObject->GetMassEL(i) < PObject->GetMassEL(j))
        {
            tmp = PObject->GetMassEL(i);
            PObject->SetMassEL(i, PObject->GetMassEL(j));
            PObject->SetMassEL(j, tmp);
        }
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
18.04.2010, 15:09  [ТС] 3
Заполнять массив мне нада будет целыми, дробовыми цифрами, а дальше еще и символьно. Спасибо что помогли!!
0
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
18.04.2010, 15:11 4
MAQSA, так у вас же не ассоциативный массив и вы обращаетесь по номеру элемента в массиве, т.е. 0, 1, ... , n;, т.е. целое число, а вы почему-то сделали индекс вещественным
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
18.04.2010, 16:13  [ТС] 5
Скажите еще пожалуста, я правельно сделал сортировку методом пузырька
C++
1
2
3
4
5
6
7
8
9
10
for( i = 0; i < PObject->GetSize() - 1;i++)
{
      for( j=PObject->GetSize()-1; j>i; j--)
     if(PObject->GetMassEL(j-1) > PObject->GetMassEL(j))
     {
    tmp = PObject->GetMassEL(j-1);
    PObject->SetMassEL(PObject->GetMassEL(j-1), PObject->GetMassEL(j));
    PObject->SetMassEL(PObject->GetMassEL(j),tmp);
}   
}
0
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
18.04.2010, 17:18 6
MAQSA, похоже на правду
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
18.04.2010, 23:12  [ТС] 7
Но оно не работает так как нужно, вот: 107 строчка.
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
#include <iostream.h>
#include  <conio.h>
#include  <stdlib.h>
class Mass
{
private:
float *PMass;
float Size;
public:
Mass();
~Mass();
void SetSize(float size){Size=size;};
float GetSize()const{return Size;};
void SetMassEL(float,float);
float GetMassEL(float)const;
void SetSort(float q,float i){ q=GetMassEL(i);
q =i ;
i =q;};
};
Mass::Mass()
{ float i;
Size=100;
PMass=new float [Size];
}
Mass::~Mass()
{
float i;
for(i=0;i<Size;i++)
 delete[] PMass;
}
void Mass::SetMassEL(float x,float el){
 
PMass[x]=el;
 
}
float Mass::GetMassEL(float x1)const{return PMass[x1];}
 
void main()
{
Mass*PObject=new Mass;
float i=0,n;
float tmp;
int j;
float r,min,el,ek,q,w,z,t;
char ch,ch1;
clrscr();
//vvod size;
cout<<"SIZE->";
cin>>n;
PObject->SetSize(n);
metka1:clrscr();
cout<<endl<<"1-Randomize";
cout<<endl<<"2-User";
cout<<endl<<"Pliz enter 1 or 2"<<endl<<"==>";
cin.get(ch);
switch(ch)
{
case'1':{
randomize();
for(i=0;i<PObject->GetSize();i++)
{
el=random(10);
PObject->SetMassEL(i,el);
}
break;
}
case'2':
{//vvod masuvy
for(i=0;i<PObject->GetSize();i++)
{cout<<"\n Enter element MASUVy-> ["<<i<<"]=";
cin>>el; PObject->SetMassEL(i,el);
}
break;
}
default:{
cout<<endl<<"ENTER 1 or 2"<<endl;
goto metka1;
}
}
metka2:clrscr();
cout<<"1-Sort Vubor";
cout<<endl<<"2-Sort Bulb"<<endl;
cout<<"==>";
cin.get(ch1);
switch(ch1)
{
case'1':{
cout<<"Sort Vubir"<<endl;
for(i = 0; i < PObject->GetSize() - 1;i++)
    for (j = i + 1; j < PObject->GetSize();j++)
    if (PObject->GetMassEL(i) < PObject->GetMassEL(j))
    {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(j));
        PObject->SetMassEL(j, tmp);
    }
 
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
 cout<<PObject->GetMassEL(i)<<" ";
 
break;
}
case'2':
{
//======================Пузырька================
cout<<"Sort Bulb"<<endl;
for( i = 0; i < PObject->GetSize() - 1;i++)
{
      for( j=PObject->GetSize()-1; j>i; j--)
     if(PObject->GetMassEL(j-1) > PObject->GetMassEL(j))
     {
    tmp = PObject->GetMassEL(j-1);
    PObject->SetMassEL(PObject->GetMassEL(j-1), PObject->GetMassEL(j));
    PObject->SetMassEL(PObject->GetMassEL(j),tmp);
}   
}
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
 cout<<PObject->GetMassEL(i)<<" ";
 
break;
}
default:{
cout<<endl<<"ENTER 1 or 2"<<endl;
goto metka2;
}
}
}
Добавлено через 4 часа 29 минут
Найдите ошибку пожалоста, в сортировке Бульбашки.
0
1 / 1 / 0
Регистрация: 02.11.2009
Сообщений: 75
25.04.2010, 22:38 8
а для буковок похожей штучки, чтоб разобраться, случаем ни у кого не завалялось, нэ?))
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
26.04.2010, 19:40  [ТС] 9
Аналогично цифрам оно будет.

Добавлено через 2 часа 31 минуту
M128K145, подскажи пожалуйста, как сделать вывод каждого шага сортировки массива, т.е. когда меняются цифры местами

Оригинал
Подскажи пожалоста, как сделать вывод кожного кроку сортировки массива, тобто когда меняються цифри местами.
0
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
26.04.2010, 20:01 10
Вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i, j, k, tmp;
for(i = 0; i < n - 1; ++i)
    for(j = 0; j < i; ++j)
    {
        if(mas[j] > mas[j + 1])
        {
            tmp = mas[i];
            mas[i] = mas[i + 1];
            mas[i + 1] = tmp;
        }
        for(k = 0; k < n; ++k)
            std::cout<<mas[k]<<' ';
        std::cout<<std::endl;
    }
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
27.04.2010, 00:35  [ТС] 11
M128K145, Что-то не выходит, я вот как сделал:
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
for(i = 0; i < PObject->GetSize() - 1;i++)
    for (j = i + 1; j < PObject->GetSize();j++)
    if (PObject->GetMassEL(i) < PObject->GetMassEL(j))
    {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(j));
        PObject->SetMassEL(j, tmp);
        }
 
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
 cout<<PObject->GetMassEL(i)<<" ";//Вывод уже отсортированного массиву
 
 cout<<endl<<"Kpok Za Kpokom";
 for(i=0;i<PObject->GetSize()-1;i++)
 for(j=0;j<i;j++)
 {
 if(PObject->GetMassEL(j) > PObject->GetMassEL(j+1))
 {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(i+1));
        PObject->SetMassEL(i+1, tmp);
        }
 cout<<endl;
 for(k=0;k<PObject->GetSize();k++)
   cout<<PObject->GetMassEL(k)<<" ";//вывод покрово
 }
Оно показывает по крокову сортировку, но не правельно. Может быть не тут вставил цикл с умовой? хотя по разному пробувал.
0
1 / 1 / 0
Регистрация: 02.11.2009
Сообщений: 75
27.04.2010, 09:02 12
О, спасибо)))
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
28.04.2010, 10:09  [ТС] 13
Так как сделать?
0
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
28.04.2010, 10:12 14
MAQSA, а можете скриншот приложить?
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
28.04.2010, 17:35  [ТС] 15
Вывод массива после сортировки

а если такой программный код:
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
cout<<endl<<"MACUB Do COPTyBAHH9"<<endl;
for(i=0;i<PObject->GetSize();i++)
cout<<PObject->GetMassEL(i)<<" ";
  //=
for(i = 0; i < PObject->GetSize() - 1;i++)
    for (j = i + 1; j < PObject->GetSize();j++)
    if (PObject->GetMassEL(i) < PObject->GetMassEL(j))
    {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(j));
        PObject->SetMassEL(j, tmp);
        }
cout<<endl<<"Kpok Za Kpokom";
 for(i=0;i<PObject->GetSize()-1;i++)
 for(j=0;j<i;j++)
 {
 if(PObject->GetMassEL(j) > PObject->GetMassEL(j+1))
 {
        tmp = PObject->GetMassEL(i);
        PObject->SetMassEL(i, PObject->GetMassEL(i+1));
        PObject->SetMassEL(i+1, tmp);
        }
 cout<<endl;
 for(k=0;k<PObject->GetSize();k++)
   cout<<PObject->GetMassEL(k)<<" ";
 }
 
cout<<endl<<endl<<"Masuv pisla sort:"<<endl ;
for(i=0;i<PObject->GetSize();i++)
 cout<<PObject->GetMassEL(i)<<" ";
то
Вывод массива после сортировки

Вопщем я что то запутался.
0
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
28.04.2010, 20:31 16
MAQSA, я когда там написал с выводом допустил опечатку. Сравнение и обмен происходит с индексами j, а не i.
Вот сортировка с пошаговым выводом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(i = 0; i < PObject->GetSize() - 1; ++i)
    for(j = 0; j < i; ++j)
    {
        if(PObject->GetMassEL(j) > PObject->GetMassEL(j + 1))
        {
            tmp = PObject->GetMassEL(j);
            PObject->SetMassEL(j, PObject->GetMassEL(j + 1));
            PObject->SetMassEL(j + 1, tmp);
        }
        std::cout<<std::endl;
        for(k = 0; k < PObject->GetSize(); ++k)
            cout<<PObject->GetMassEL(k)<<' ';
    }
Обычная сортировка выглядит так же, только без вывода. И я надеюсь, что вы понимаете, что сортировка с пошаговым выводом и обычная сортировка должны быть разными методами, в противном случае вы просто зря проделаете проверки, потому что массив будет уже отсортирован
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
29.04.2010, 15:36  [ТС] 17
Я догадувался что допустилась опечатка, так как умова была if(j>j+1) а дальше j не использувалося , но все же, я присотрелся так, и оно не делает последний обмен, и выдает результат без последнего обмена.
Так лутче будет сделать простую сортировку, а потом отдельно выберать пошаговою, попробую.

Добавлено через 16 часов 42 минуты
Я розобрался с пошаговым выводом, нашол все ошибки. Спасибо, у меня новый вопрос:
Как сделать рандом выбор символов, у которых ASCII-коды начинаются с [97-122]
char s=random(122); - это будет вывод всех символов до того символа, чей ASCII-код заканчивается на 122, а как сделать єто ограничения?
0
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
29.04.2010, 21:13 18
C
1
char s = 97 + random(25);
0
2 / 2 / 1
Регистрация: 18.04.2010
Сообщений: 119
06.05.2010, 19:41  [ТС] 19
Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2010, 19:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывод отсортированного массива с индексами элементов до сортировки
ЗАДАЧА: известны номера пловцов от 0 до n. Необходимо определить по результатам соренований, какое...

После сортировки массива последний элемент равен 0
#include &lt;iostream&gt; using namespace std; int main() { int a; int n; cin &gt;&gt; n;

Найти количество сравнений после сортировки массива
Нужно чтобы писала количество сравнений после сортировки массива, но я вроде все прописал ...

Определить номера ячеек массива которые после сортировки переместились
есть одномерный массив. вводится с клавиатуры (например 5 3 5 2 3 5) сортировали swap (стал 5 5 5...


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

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

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