Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2009, 20:06   #1
Bella
Пользователь
 
Регистрация: 24.09.2009
Сообщений: 23
По умолчанию Сортировка массива. Язык С

Народ помогите пожалуйста с программой, очень срочно нужно!
Написать программу, которая осуществляет сортировку ряда 3мя видами, после выбора сортировки выбрать направление(по возрастанию или по убыванию), ряд только из чётных элементов.
В принципе всё работает, проблема в том, что программа сортирует какие-то случайные числа, а не выведенный ряд из чётных элементов.
Код:
 void main()
{
 
   int a[10],m,t,c,i,j,a1[10],b[10],min,k,x,y;
   setlocale(LC_ALL, "rus");
   srand(time(NULL));
  for(int i=0;i<10;i++)
  {
    a[i]=rand()%10+1; 
    if (a[i]%2==0)
    printf("%d ",a[i]);     
  
  }
      setlocale(LC_ALL, "rus");
    printf("\nВведите метод сортировки.\n1)пузырьковый метод\n2)метод вставкой\n3)сортировка посредством выбора\n");
    scanf("%i",&m);
    printf("Введите тип сортировки.\n1)по возростанию\n2)по убыванию\n");
    scanf("%i",&t);
    if((m==1)&&(t==1))
    {
        printf("Выбран пузырьковый метод по возростанию\n");
        for (int i=0;i<10;i++)
        {
            for (int j=i;j<9;j++)
            {
                if (a[i]>a[j])
                {
                    c=a[i];
                    a[i]=a[j];
                    a[j]=c;
                }    
            }
            for(int k=0;k<10;k++)
            {
                printf ("%i ",a[k]);
            }printf ("\n");
        }
    }
    if((m==1)&&(t==2))
    {
        printf("Выбран пузырьковый метод по убыванию\n");
        for (int i=0;i<10;i++)
        {
            for (int j=i;j<9;j++)
            {
                if (a[i]<a[j])
                {
                    c=a[i];
                    a[i]=a[j];
                    a[j]=c;
                }    
            }
            for(int k=0;k<10;k++)
            {
                printf ("%i ",a[k]);
            }printf ("\n");
        }
    }
    if((m==2)&&(t==1))
    {
        printf("Выбран метод вставкой по возростанию\n");
        for(i=0;i<10;i++)
        {
            if(i==0)a1[i]=a[i];
            else
            {
                for(j=i;j>=1;j--)
                {
                        if(a[i]<a1[j-1])
                        {
                            a1[j]=a1[j-1];
                            a1[j-1]=a[i];
                        }
                        else if(j==i)a1[j]=a[i];
                }
            } 
            for(int k=0;k<10;k++)
            {
                if(k<=i)
                {
                    printf("%i ",a1[k]);
                }
                else 
                {
                    a1[k]=0;
                    printf("%i ",a1[k]);
                }    
            }
            printf("\n");
        }
          printf("\n");

    }
    if((m==2)&&(t==2))
    {
        printf("Выбран метод вставкой по убыванию\n");
        for(i=0;i<10;i++)
        {
            if(i==0)a1[i]=a[i];
            else
            {
                for(j=i;j>=1;j--)
                {
                        if(a[i]>a1[j-1])
                        {
                         

a1[j]=a1[j-1];
                     

    a1[j-1]=a[i];
                        }
                        else if(j==i)a1[j]=a[i];
                }
                        printf("\n");

            }
            for(int k=0;k<10;k++)
            {
                if(k<=i)
                {
                    printf("%i ",a1[k]);
                }
                else 
                {
                    a1[k]=0;
                    printf("%i ",a1[k]);
                }    
            }
            printf("\n");
        }
    }
    if((m==3)&&(t==1))
    {
        printf("Выбран сортировка посредством выбора по убыванию\n");
        min=a[0];
        k=0;
        for(i=0; i<10; i++)
        {
        for(j=1; j<10; j++)
        {
            if(a[j]>min)
            {
                min=a[j];
                k=j;
            }
        }
        b[i]=min;
        a[k]=NULL;
        for(int k1=0; k1<i; k1++)
        {
            printf("%i ",b[k1]);
        }
        min=a[i];
        k=i;
        printf("\n");
        }
    }
    if((m==3)&&(t==2))
    {
        printf("Выбран сортировка посредством выбора по возростанию\n");
        min=a[0];
        k=0;
        for(i=0; i<10; i++)
        {
            min=a[i];
            k=i;
            for(j=1; j<15; j++)
            {if (a[i]%2==0)
    printf("%d ",a[i]);
                if(a[j]<min)
                {
                    min=a[j];
                    k=j;
                }
            }
            b[i]=min;
            a[k]=123131;
            for(int k1=0; k1<i; k1++)
            {
                printf("%i ",b[k1]);
            }
            printf("\n");
		
        }
    }
	
    getch();
}
Bella вне форума Ответить с цитированием
Старый 24.12.2009, 21:22   #2
Bella
Пользователь
 
Регистрация: 24.09.2009
Сообщений: 23
По умолчанию

ну ответьте пожалуйста кто-нибудь! очень нужно!
Bella вне форума Ответить с цитированием
Старый 24.12.2009, 21:27   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от Bella Посмотреть сообщение
проблема в том, что программа сортирует какие-то случайные числа, а не выведенный ряд из чётных элементов.
Этими случайными числами массив и заполняется. Чем заполняется, то и сортируется. Что значит "выведенный ряд чётных элементов"?
Carbon вне форума Ответить с цитированием
Старый 24.12.2009, 21:37   #4
Bella
Пользователь
 
Регистрация: 24.09.2009
Сообщений: 23
По умолчанию

вот:
Код:
a[i]=rand()%10+1; 
    if (a[i]%2==0)
    printf("%d ",a[i]);
должен эти чётные числа отсортировать, а он сортирует какие-то другие
Bella вне форума Ответить с цитированием
Старый 24.12.2009, 21:56   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Опять же: в массив пишется всё подряд, чётные и нечётные. И неважно, что тут:

Код:
if (a[i]%2==0)
    printf("%d ",a[i]);
Что в массив пишется, то и сортируется.
Нужно сделать цикл, который завершится, как только наберётся нужное число чётных элементов.
Carbon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка массива natasha971929 Помощь студентам 1 14.12.2009 23:49
С:Сортировка массива Crazy_caramel Помощь студентам 1 18.11.2009 23:15
fseek вместо дополнительного массива (язык Си) velvetdust Помощь студентам 3 25.06.2009 21:32
Сортировка массива С/С++ Dagget Помощь студентам 1 16.07.2008 12:18
Сортировка массива Dagmaria Общие вопросы C/C++ 5 05.07.2008 00:23