Форум: Форум C++Разное
Новые темы: 00
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите найти ошибку в сортировке массивов
 
 автор: гость   (28.03.2007 в 05:33)   письмо автору
 
 


#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-ть, с чем это связано - понять не могу.

  Ответить  
 
 автор: oleg_alexeev   (28.03.2007 в 08:26)   письмо автору
 
   для: гость   (28.03.2007 в 05:33)
 

Неверные условия завершения работы циклов. Правильнее будет примерно так:

...
for (; a<d; a++)
{
  for (b=a+1; b<d; b++)
  {
    ...
  }
}
...


А ещё совет - запустите программу в отладчике и выполните её всю по шагам - очень помогает разобраться.

  Ответить  
 
 автор: rty   (28.03.2007 в 12:20)   письмо автору
 
   для: гость   (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 ] )

  Ответить  
 
 автор: Гость   (29.03.2007 в 12:44)   письмо автору
 
   для: гость   (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();
}

  Ответить  
 
 автор: cheops   (29.03.2007 в 13:27)   письмо автору
 
   для: Гость   (29.03.2007 в 12:44)
 

>Еще один вопрос - есть ли функция возращающая размер массива? насколько я понял Си не
>следит за концом массива))
Да, C не следит за границей массива... Если дело происходит не внутри функции, т.е. вы имеете дело не с безликим указателем, а с массивом, то можно воспользоваться конструкцией
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << sizeof(arr)/sizeof(arr[0]) << endl;

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования