1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Сортировка (си)

Тема в разделе "С и С++", создана пользователем d3fToR, 15 май 2012.

Статус темы:
Закрыта.
  1. d3fToR

    d3fToR Гость

    Репутация:
    0
    Такая проблема.. не могу сделать отладку, час сижу уже глаза мозолю, но не получается что-то. Программа компилируется без ошибок, но не сортируется в правильном порядке. Сначало сортирует буквы в слове, например, август - тсугва. И таких слов 12, потом он должен отсортировать их между собой, но из-за того, что справа на лево ( слева на право идет нормально ), не сортируется. Если вы скомпилируете, то там будет сначало 2 столбика, потом один с цифрами и словами, а потом анаграммы этих слов.
    Вообщем, если будут вопросы по коду - спросите!
    Код:
    #include <stdio.h>
    #include "string.h"
    
    
    void sortf(char *mas, int k)
    {
    int i,j,idmin;
    char min;
    for(i=k-2;i>=0;i--)
    {
    min=mas[i]; 
    idmin=i; 
    for(j=i;j>=0;j--)
    {
    if(mas[j]<min) 
    {
    min=mas[j]; 
    idmin=j;  
    }
    }	
    mas[idmin]=mas[i]; 
    mas[i]=min;
    };
    };
    
    
    int srav(char *mas, char *mas2)
    {
    int i,g=0;
    for(i=6;i>=0;i--) 
    {
    if (mas[i]>mas2[i])	 {g= 1; break;}
    else if (mas[i]<mas2[i]) {g=-1; break;}
    }
    return(g); //возращает: 0 - если строки равны  1 - если первая больше второй  -1 - если первая меньше второй	
    }
    
    
    
    
    void fedos()
    {
    int x=12,y=8,z,h,idmin,i,flag,j; //x- кол-во слов, y- кол-во букв( вкл. \0)
    int id[12];
    char str[8];
    char f[12][10]={"бобслей",
    "белорус",
    "радение",
    "зачаток",
    "лесоруб",
    "дарение",
    "досолка",
    "солодка",
    "нереида",
    "драение",
    "бейсбол",
    "заточка"};
    
    char f2[12][10]={"бобслей",
    "белорус",
    "радение",
    "зачаток",
    "лесоруб",
    "дарение",
    "досолка",
    "солодка",
    "нереида",
    "драение",
    "бейсбол",
    "заточка"};
    
    for(i=0;i<x;i++)
    {
    sortf(f2[i],y);
    printf("\n%s \t %s", f[i],f2[i]);
    };
    printf("\n");
    for(i=0;i<x;i++)
    id[i]=i;
    for(i=0;i<x-1;i++)
    {
    strcpy(str, f2[id[i]]);
    idmin=i;
    for(j=0;j<x;j++)
    {
    flag=srav(str, f2[id[j]]);
    if(flag==1)//т.е строка в массиве больше минимума
    {
    strcpy(str, f2[id[j]]);
    idmin=j;
    };
    };
    z=id[i];
    id[i]=id[idmin];
    id[idmin]=z;
    };
    for(h=0;h<12;h++) printf("\n%2i %s",id[h], f2[id[h]]);
    printf("\n");
    for(i=1;i<x;i++) 
    {
    flag=srav(f2[id[i-1]],f2[id[i]]);
    if(flag!=0) printf("\n");
    printf("%s\t", f2[id[i]]);
    }; 
    };
    
    main()
    {
    fedos();
    };
     
  2. ixoyz

    ixoyz Member

    Репутация:
    0
    Регистрация:
    12 май 2012
    Сообщения:
    16
    Симпатии:
    0
    Ошибка во втором цикле сортировки
    Код:
    for(i=0;i<x-1;i++)
    {
    strcpy(str, f2[id[i]]);
    idmin=i;
    for(j=i+1;j<x;j++)
    {
    flag=srav(str, f2[id[j]]);
    if(flag==1)//т.е строка в массиве больше минимума
    {
    strcpy(str, f2[id[j]]);
    idmin=j;
    };
    };
    z=id[i];
    id[i]=id[idmin];
    id[idmin]=z;
    };
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей