|
|
|
|
#include <iostream.h>
#include <math.h>
void main()
{
int mass[5];
mass[0]=1;
mass[1]=7;
mass[2]=4;
mass[3]=2;
mass[4]=7;
int a, b, c, d;
a=0;
b=0;
d=5; //длинна массива
while (1)
{
b = a + 1;
while (1)
{
if (mass[b] < mass[a])
{
c = mass[b];
mass[b]=mass[a];
mass[a]=c;
}
if (b==d)
{
break;
}
++b;
}
if (d<=a)
{
break;
}
a++;
}
a=0;
cout << mass[0] << "\n";
cout << mass[1] << "\n";
cout << mass[2] << "\n";
cout << mass[3] << "\n";
cout << mass[4] << "\n";
cin >> a;
}
|
Почему-то в mass[3] в конце сортировке откуда-то берется цифра 5-ть, с чем это связано - понять не могу. | |
|
|
|
|
|
|
|
для: гость
(28.03.2007 в 05:33)
| | Неверные условия завершения работы циклов. Правильнее будет примерно так:
...
for (; a<d; a++)
{
for (b=a+1; b<d; b++)
{
...
}
}
...
|
А ещё совет - запустите программу в отладчике и выполните её всю по шагам - очень помогает разобраться. | |
|
|
|
|
|
|
|
для: гость
(28.03.2007 в 05:33)
| | может тут
while (1)
{
if (mass[b] < mass[a])
{
c = mass[b];
mass[b]=mass[a];
mass[a]=c;
}
if (b==d)
{
break;
}
++b;
}
|
if 'ы надо поменять местами так как сравниваются if( mass[ 5 ] < mass[ a ] ) | |
|
|
|
|
|
|
|
для: гость
(28.03.2007 в 05:33)
| | Так и не нашел где там была ошибка переписал это же немножко по другому, кроме того сделал их как функции, вссе работает ,счастлифф неизмерно)
Еще один вопрос - есть ли функция возращающая размер массива? насколько я понял Си не следит за концом массива))
#include <iostream.h>
#include <math.h>
////////
sort_mass (int mass[], int mass_leng, int mass_vozr)
{
int a, b, c, d;
a=0;
b=0;
c=0;
d=mass_leng; /
while (a != d)
{
b=a+1;
while (b != d)
{
if (mass_vozr==0)
{
if (mass[a] > mass[b])
{
c=mass[a];
mass[a]=mass[b];
mass[b]=c;
}
}
else
{
if (mass[a] < mass[b])
{
c=mass[a];
mass[a]=mass[b];
mass[b]=c;
}
}
++b;
}
++a;
}
}
//////////
print_mass ( int mass_name[], int mass_leng)
{
int c=0;
while (c != (mass_leng))
{
cout << mass_name[c] << "\n";
++c;
}
}
//////////
void main()
{
int mass[6];
mass[0]=1;
mass[1]=8;
mass[2]=4;
mass[3]=2;
mass[4]=7;
mass[5]=3;
sort_mass (mass,6,0);
print_mass(mass,6);
getchar();
}
|
| |
|
|
|
|
|
|
|
для: Гость
(29.03.2007 в 12:44)
| | >Еще один вопрос - есть ли функция возращающая размер массива? насколько я понял Си не
>следит за концом массива))
Да, C не следит за границей массива... Если дело происходит не внутри функции, т.е. вы имеете дело не с безликим указателем, а с массивом, то можно воспользоваться конструкцией
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << sizeof(arr)/sizeof(arr[0]) << endl; |
| |
|
|
|