Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QSORT
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Страницы: 1, 2
Евгений Германович
Народ!Окажите помощ.Не могу одолеть функцию qsort.что бы не пробовал,кроме ошибок ничего.
#include <stdlib.h>
int nums[5]={ 2,3,1,5,4};

int compar(const void *arg1,const void *arg2);


{
if ( * (int *) arg1 < ( * (int *) arg2) return –1

else if ( * (int *) arg1 == ( * (int *) arg2) return 0

else return 1;

}








void main() {

qsort ( nums, 5, sizeof(int), compar);

}
evc
Цитата(Евгений Германович @ Oct 21 2007, 13:46) *
...
int compar(const void *arg1,const void *arg2); ...


Нужно убрать точки с запятой, надеюсь понятно почему! smile.gif
zltigo
Цитата(evc @ Oct 21 2007, 13:51) *
Нужно убрать точки с запятой...

Где убрать, а где и добавить парочку sad.gif. Еще с вызовом функции ознакомиться. В общем Автору следует c "Hello World!" и учебником для начала "побороться", пожалуй sad.gif.
Евгений Германович
Цитата(zltigo @ Oct 21 2007, 14:05) *
Где убрать, а где и добавить парочку sad.gif. Еще с вызовом функции ознакомиться. В общем Автору следует c "Hello World!" и учебником для начала "побороться", пожалуй sad.gif.

Вообщето это текст примера из PIC C
int compar(const void *arg1,const void *arg2)
Ну убрал результат ?Кстати чем гнуть пальцы продемонстрируйте интеллект.
Oldring
Цитата(Евгений Германович @ Oct 21 2007, 15:12) *


Тут дело не в qsort, а в многочисленных грамматических ошибках в коде функции compar.
Edmundo
Цитата(Евгений Германович @ Oct 21 2007, 13:46) *
Народ!Окажите помощ.Не могу одолеть функцию qsort.что бы не пробовал,кроме ошибок ничего.

Ув. Евгений Германович, вы все-таки прислушайтесь к призывам, и почитайте труды достойных мужей по C/C++. Не сочтите это пожелание за наезд, ни в коем случае. А код лучше записать так (не компилировал, может опечатался, но пытался внимательно smile.gif):

Код
#include <stdlib.h>
int nums[5]={2,3,1,5,4};

int compar(const void *arg1,const void *arg2)
{
    if (  *((int *) arg1) <  *((int *) arg2)  )
        return –1
    else if (  *((int *) arg1) == *((int *) arg2)  )
        return 0;
    else
        return 1;
}

void main()
{
    qsort(nums, 5, sizeof(int), compar);
}
zltigo
Цитата(Edmundo @ Oct 21 2007, 22:05) *
но пытался внимательно smile.gif):

Еще одну ";" надо добавить sad.gif.
Ну а вообще это так:
Код
#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };

int compar( const void *arg1, const void *arg2 )
{
    return( *(int *)arg1 - *(int *)arg2 );
}

void main()
{
    qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}



Цитата(Евгений Германович @ Oct 21 2007, 14:12) *
продемонстрируйте интеллект.

Интелект это слишком, интеллект это Вам потом потребуется. Пока нужны банальные знания самых основ языка sad.gif 'C' и основ английского, дабы понять сообщения компилятора.
Edmundo
Цитата(zltigo @ Oct 22 2007, 02:22) *
Еще одну ";" надо добавить sad.gif.

Да, виноват, промахнулся...

Цитата(zltigo @ Oct 22 2007, 02:22) *
Ну а вообще это так...

Ну, это уже оптимизация и стилизация a14.gif
Евгений Германович
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Program Files\PICC\CHUDO\asdf\asd1.mcs".
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 28 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 24(24,28): Expecting an identifier
*** Error 48 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 24(25,29): Expecting a (
*** Error 81 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 24(42,46): Expecting a basic type
*** Error 48 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 24(48,52): Expecting a (
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 25(1,2): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(5,11): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(11,12): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(13,14): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(14,15): Expecting a declaration
*** Error 28 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(20,21): Expecting an identifier
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(26,27): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(28,29): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(29,30): Expecting a declaration
*** Error 28 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(35,36): Expecting an identifier
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(41,42): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 26(42,43): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 27(1,2): Expecting a declaration
*** Error 51 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 31(64,70): A numeric expression must appear here
18 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Mon Oct 22 18:20:07 2007

НУ и....?Вы думаете я от нечего делать обратился.Тот текст,что я вытащил-это пример из хелпа.
zltigo
Цитата(Евгений Германович @ Oct 22 2007, 15:20) *
Тот текст,что я вытащил-это пример из хелпа.

И мне и компилятору все едино, из какого места Вы его вытащили. Как минимум, синтаксические ошибки ПРИДЕТСЯ править.
Евгений Германович
Эти ошибки получены при компиляции предложенного вами текста программы.#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };

int compar( const void *arg1, const void *arg2 )
{
return( *(int *)arg1 - *(int *)arg2 );
}

void main()
{
qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
zltigo
Цитата(Евгений Германович @ Oct 22 2007, 17:32) *
Эти ошибки получены при компиляции предложенного вами текста программы.

smile.gif smile.gif smile.gif Ну и какая строка (из максимум пятнадцати!) моего текста имеет номер 24?
Ну а то, что Вы с таким-же успехом, натаскали рядом ничего незначащих для Вас буковок, то это другая проблема.
Евгений Германович
Может вы не в курсе но пробел это тоже строка.
Если вы выставляете текст программы ,то немешало бы вначале его проверить.
Clean: Deleting intermediary and output files.
Clean: Deleted file "asd1.ERR".
Clean Warning: File "C:\Program Files\PICC\CHUDO\asdf\asd1.o" doesn't exist.
Clean: Deleted file "asd1.SYM".
Clean: Deleted file "asd1.LST".
Clean: Deleted file "asd1.PJT".
Clean: Deleted file "asd1.TRE".
Clean: Deleted file "asd1.STA".
Clean: Deleted file "asd1.COF".
Clean: Deleted file "C:\Program Files\PICC\CHUDO\asdf\asd1.mcs".
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 28 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 9(24,28): Expecting an identifier
*** Error 48 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 9(25,29): Expecting a (
*** Error 81 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 9(42,46): Expecting a basic type
*** Error 48 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 9(48,52): Expecting a (
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 10(1,2): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(5,11): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(11,12): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(13,14): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(14,15): Expecting a declaration
*** Error 28 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(20,21): Expecting an identifier
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(26,27): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(28,29): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(29,30): Expecting a declaration
*** Error 28 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(35,36): Expecting an identifier
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(41,42): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 11(42,43): Expecting a declaration
*** Error 43 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 12(1,2): Expecting a declaration
*** Error 51 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 16(64,70): A numeric expression must appear here
18 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Oct 23 18:17:24 2007



Это ваш текст.

#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"



#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };

int compar( const void *arg1, const void *arg2 )
{
return( *(int *)arg1 - *(int *)arg2 );
}

void main()
{
qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
zltigo
Цитата(Евгений Германович @ Oct 23 2007, 15:18) *
Это ваш текст.

Нет. Это Ваш. Мой на одну строку кода меньше smile.gif
Код
#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };
int compar( const void *arg1, const void *arg2 )
{    return( *(int *)arg1 - *(int *)arg2 );
}
void main()
{    qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}

Цитата
Может вы не в курсе но пробел это тоже строка.

Обалдеть! А мужики-то не знают smile.gif.
Ну и где в приведенном мной ранее тексте 24 строка, хоть с пробелами, хоть нет.
Цитата
Если вы выставляете текст программы ,то немешало бы вначале его проверить.

Я способен написать исходник и много большего объема без ошибок, тем более, без синтаксических smile.gif.
Ищите проблемы с набиванием текста у себя.
Oldring
Цитата(Евгений Германович @ Oct 23 2007, 16:18) *
#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"


Удалите этот include и попробуйте скомпилировать.
Кстати, правильно писать #include "C:\\Program Files\\PICC\\CHUDO\\asdf\\asd1.h"
Евгений Германович
//#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"



#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };

int compar( const void *arg1, const void *arg2 )
{
return( *(int *)arg1 - *(int *)arg2 );
}

void main()
{
qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
Clean: Deleting intermediary and output files.
Clean: Deleted file "asd1.ERR".
Clean Warning: File "C:\Program Files\PICC\CHUDO\asdf\asd1.o" doesn't exist.
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 128 "C:\PROGRA~1\PICC\drivers\stdlib.h" Line 23(1,2): A #DEVICE required before this line
1 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Oct 23 19:15:34 2007

Ну и ???
Кстати эта строка вставляется автоматически при создании проекта.
Oldring
Цитата(Евгений Германович @ Oct 23 2007, 17:16) *
Ну и ???
Кстати эта строка вставляется автоматически при создании проекта.


А, понятно, это какие-то особенности конкретного компилятора. Не умеет компилировать stdlib.h без указания устройства, под которое ведется компиляция. Чтобы не портить исходник всякими левыми автоматически сгенерированными хедерами - соответссующее определение наверняка можно вставить в опциях проекта.

Вы, вероятно, в первый раз пытаетесь писать на С? Скопируйте для начала какой-нибудь пример, который обычно идет с компилятором, в отдельный каталог. Потом добейтесь его компиляции. Когда будет компилироваться - можно будет дойти до qsort. Так как я с этим компилятором, вероятно, не работал - более подробно объяснить не смогу, как это сделать.

То, что такая строка генерируется автоматически при создани проекта, скорее всего, говорит о качестве компилятора. Птому что бэкслеш - это префикс escape последовательности. И так писать include нехорошо, даже если конкретный компилятор и проглатывает.
zltigo
Цитата(Oldring @ Oct 23 2007, 15:51) *
Кстати, правильно писать #include "C:\\Program Files\\PICC\\CHUDO\\asdf\\asd1.h"

С двойными слешами перебор, ибо это не сишнная стринг а директива препроцессора, но можно. Вообще-то возможно и #include "C:\\\\Program Files\\\\\\PICC\\CHUDO\\asdf\\asd1.h"
И так:
#include "C:/Program Files\PICC\CHUDO/asdf\asd1.h"
Препроцессоры на практике разбираются со всем.
Oldring
Цитата(zltigo @ Oct 23 2007, 17:26) *
С двойными слешами перебор, ибо это не сишнная стринг а директива препроцессора, но можно.


Не совсем - по стандарту препроцессор работает на потоке лексем, и escape заменяется во время лексического разбора. Поэтому там именно строка. Кстати, старые С компиляторы не кушали с одинарными бэкслешами. Это потом появились слишком умные в рассчете на типичные ошибки неопытных программистов.
soshnev
Цитата(Евгений Германович @ Oct 23 2007, 17:16) *
//#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };

int compar( const void *arg1, const void *arg2 )
{
return( *(int *)arg1 - *(int *)arg2 );
}

void main()
{
qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
Clean: Deleting intermediary and output files.
Clean: Deleted file "asd1.ERR".
Clean Warning: File "C:\Program Files\PICC\CHUDO\asdf\asd1.o" doesn't exist.
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 128 "C:\PROGRA~1\PICC\drivers\stdlib.h" Line 23(1,2): A #DEVICE required before this line
1 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Oct 23 19:15:34 2007

Ну и ???
Кстати эта строка вставляется автоматически при создании проекта.

Эта строка собирается исходя из опций для компиляции модели (напр. в
Borland-C была large, small модели и т п "лабуда".
Посмотрите опции компиляции модели или компилятора...
Евгений Германович
Цитата(Oldring @ Oct 23 2007, 16:24) *
А, понятно, это какие-то особенности конкретного компилятора. Не умеет компилировать stdlib.h без указания устройства, под которое ведется компиляция. Чтобы не портить исходник всякими левыми автоматически сгенерированными хедерами - соответссующее определение наверняка можно вставить в опциях проекта.

Вы, вероятно, в первый раз пытаетесь писать на С? Скопируйте для начала какой-нибудь пример, который обычно идет с компилятором, в отдельный каталог. Потом добейтесь его компиляции. Когда будет компилироваться - можно будет дойти до qsort. Так как я с этим компилятором, вероятно, не работал - более подробно объяснить не смогу, как это сделать.

То, что такая строка генерируется автоматически при создани проекта, скорее всего, говорит о качестве компилятора. Птому что бэкслеш - это префикс escape последовательности. И так писать include нехорошо, даже если конкретный компилятор и проглатывает.

С самим проектом все нормально не уводите процесс.На Си не впервые,но не профи.Компилятор полное дерьмо,я не смог на нем создать многофайловый прект.
Однако вернемся к теме.
Текст я не набиваю,а копирую ваш.
О какой лишней строке вы говорите?
#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h" если про эту то с ней все нормально -многократно проверено.Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова.До кучи я трудился на 2 аппаратах на другом эта строка выглядит по другому но ошибки теже самые.
zltigo
Цитата(Евгений Германович @ Oct 23 2007, 16:56) *
Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова.

Не обижайтесь, но я не буду заниматься ерундой компилируя совершенно очевидные вещи.
Если угодно, то можете считать, что я откомпилировал и ошибок не получил smile.gif




Цитата(Oldring @ Oct 23 2007, 16:36) *
Поэтому там именно строка. Кстати, старые С компиляторы не кушали с одинарными бэкслешами. Это потом появились слишком умные в рассчете на типичные ошибки неопытных программистов.

Дело обстоит с точностью до наоборот - возьмите, например BCC 1992 года (можете и более поздние 3.1 ) и попробуйте ему скормить любой двойной слэш.
Евгений Германович
Цитата(zltigo @ Oct 23 2007, 17:02) *
Не обижайтесь, но я не буду заниматься ерундой компилируя совершенно очевидные вещи.
Если угодно, то можете считать, что я откомпилировал и ошибок не получил smile.gif

Я не обижаюсь Важен результат,а его нет.Могу я считать или нет.Вы похоже весьма опасаетесь получить отрицательный результат.Не бойтесь.Как говорил Ф Энгельс или К Маркс не ошибается тот кто ничего не делает.Кстати на Турбо Си подобный текст тоже не проходит.
Кстати вы говорите о больших Си а это Си для микроконтроллеров.
Oldring
Цитата(Евгений Германович @ Oct 23 2007, 17:56) *
С самим проектом все нормально не уводите процесс.На Си не впервые,но не профи.Компилятор полное дерьмо,я не смог на нем создать многофайловый прект.
Однако вернемся к теме.
Текст я не набиваю,а копирую ваш.
О какой лишней строке вы говорите?
#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h" если про эту то с ней все нормально -многократно проверено.Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова.До кучи я трудился на 2 аппаратах на другом эта строка выглядит по другому но ошибки теже самые.


Вы бы для начала поучились лучше вежливости, прежде чем пальцы растапыривать. Ваша квалификация в программировании очевидно находится на уровне начинающего. Иначе бы вы не задавали подобные вопросы и не сделали бы столько грамматических ошибок в написании одной функции.
Моего текста вы компилировать не можете потому что я ничего не писал. Текст других авторов выглядит нормально.
Ставить себе ваш компилятор и компилировать самому никакого интереса для себя не вижу. Более того, не помню, чтобы был вам что-то должен.
По делу. У вашего компилятора какие-то глюки. Попробуйте скомпилировать один файл без инклудов и вызова функции qsort. То есть одно определение функции compar. Возможно ваш компилятор не понимает ANSI C и нужно выкинуть ключевые слова const.
Евгений Германович
Цитата(Oldring @ Oct 23 2007, 17:15) *
Вы бы для начала поучились лучше вежливости, прежде чем пальцы растапыривать. Ваша квалификация в программировании очевидно находится на уровне начинающего. Иначе бы вы не задавали подобные вопросы и не сделали бы столько грамматических ошибок в написании одной функции.
Моего текста вы компилировать не можете потому что я ничего не писал. Текст других авторов выглядит нормально.
Ставить себе ваш компилятор и компилировать самому никакого интереса для себя не вижу. Более того, не помню, чтобы был вам что-то должен.
По делу. У вашего компилятора какие-то глюки. Попробуйте скомпилировать один файл без инклудов и вызова функции qsort. То есть одно определение функции compar. Возможно ваш компилятор не понимает ANSI C и нужно выкинуть ключевые слова const.
Вы весьма невнимательны .текст не мой я уже писал об этом.Без инклудов не получится.
#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };
int compar( const void *arg1, const void *arg2 )
{ return( *(int *)arg1 - *(int *)arg2 );
}
void main()
{ // qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
17 ошибок.И предложение откомпилировать текст было адресовано не вам,вы напрасно возмущаетесь.
Про пальцы больше относится не ко мне.На конкретно поставленный вопрос одни рассуждения.Текст взят без изменений с самого компилятора.
Oldring
Цитата(Евгений Германович @ Oct 23 2007, 18:24) *
Вы весьма невнимательны .текст не мой я уже писал об этом.Без инклудов не получится.


У вас ругалось на stdlib.h после комментарии первого инклуда. Закомментируйте и его тоже.

P.S. По поводу гнутья пальцев: столько, сколько я за свою жизнь написал и заставил работать сишного кода вы, очевидно, уже никогда не напишете. Да и я уже тоже наверняка еще столько же не напишу. Так что если вам пытаются помочь - умейте быть благодарны. Это у вас проблемы, а не у нас.
Евгений Германович
Цитата(Oldring @ Oct 23 2007, 17:25) *
У вас ругалось на stdlib.h после комментарии первого инклуда. Закомментируйте и его тоже.

P.S. По поводу гнутья пальцев: столько, сколько я за свою жизнь написал и заставил работать сишного кода вы, очевидно, уже никогда не напишете. Да и я уже тоже наверняка еще столько же не напишу. Так что если вам пытаются помочь - умейте быть благодарны.

#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

//#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };
int compar( const void *arg1, const void *arg2 )
{ return( *(int *)arg1 - *(int *)arg2 );
}
void main()
{ // qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
17 ошибок.Попробую отыскать прототип этой функции.Не надо так мрачно пишите хоть в 10 раз больше.


void main()
{ // qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}
typedef signed int (*_Cmpfun)(char * p1,char * p2);

void qsort(char * qdata, int qitems, int qsize, _Cmpfun cmp) {
int m,j,i,l;
short done;
BYTE t[16];

m = qitems/2;
while( m > 0 ) {
for(j=0; j<(qitems-m); ++j) {
i = j;
do
{
done=TRUE;
l = i+m;
if( (*cmp)(qdata+i*qsize, qdata+l*qsize) > 0 ) {
memcpy(t, qdata+i*qsize, qsize);
memcpy(qdata+i*qsize, qdata+l*qsize, qsize);
memcpy(qdata+l*qsize, t, qsize);
if(m <= i)
i -= m;
done = FALSE;
}
} while(!done);
}
m = m/2;
}
}
Вот прототип.ВЫ считаете те слова,что были написаны это помощ?
zltigo
Цитата(Евгений Германович @ Oct 23 2007, 17:11) *
Вы похоже весьма опасаетесь получить отрицательный результат.Не бойтесь.

Отнюдь smile.gif имею абсолютную уверенность в компиляции сего любым компилятором smile.gif
Цитата
Как говорил Ф Энгельс или К Маркс не ошибается тот кто ничего не делает.

Это не классики, это народная мудрость. Причем я знаю и другие русские пословицы и поговорки, на мой взгляд много много более подходящие по теме smile.gif
Цитата
Кстати на Турбо Си подобный текст тоже не проходит.

Надоело. Сильно надоело. Делаем Copy->Paste, добавляем один printf() для наглядности, получаем test.с (см. приложенный архив )
Набираем:
bcc test.c
Получаем:
Код
Borland C++  Version 3.1 Copyright (c) 1992 Borland International
test.c:
Turbo Link  Version 7.1.32.2. Copyright (c) 1987, 1996 Borland International

        Available memory 4155500

И исполняемый файл (тоже в приложении).

Финита ла комедиа....
Oldring
Цитата(Евгений Германович @ Oct 23 2007, 18:33) *
17 ошибок.Попробую отыскать прототип этой функции.Не надо так мрачно пишите хоть в 10 раз больше.


Это не мрачно. Я бы не хотел писать еще столько же - скушно.
Прототип здесь не нужен. Функция нигде не используется. Выкиньте все лишнее из текста. Если есть сомнения - лучше даже не комментируйте, а сотрите. Все инклуды. Может быть функцию main. Вы, кстати, закомментировали stdlib.h но оставили первый хедер. Он вам нужен?

У кривых компиляторов для 8-биток бывают еще тонкости с указателями. Попробуйте для начала скомпилировать функцию

int compar( int arg1, int arg2 )
{
return arg1 - arg2;
}

потом

int compar( int* arg1, int* arg2 )
{
return *arg1 - *arg2;
}


Цитата(Евгений Германович @ Oct 23 2007, 18:45) *
typedef signed int (*_Cmpfun)(char * p1,char * p2);


О!
Компилятор еще не ANSI C. Еще не знает ключевое слово void. Вместо void используйте тип char, выкиньте const.
Евгений Германович
Цитата(Oldring @ Oct 23 2007, 17:50) *
Это не мрачно. Я бы не хотел писать еще столько же - скушно.
Прототип здесь не нужен. Функция нигде не используется. Выкиньте все лишнее из текста. Если есть сомнения - лучше даже не комментируйте, а сотрите. Все инклуды. Может быть функцию main. Вы, кстати, закомментировали stdlib.h но оставили первый хедер. Он вам нужен?

У кривых компиляторов для 8-биток бывают еще тонкости с указателями. Попробуйте для начала скомпилировать функцию

int compar( int arg1, int arg2 )
{
return arg1 - arg2;
}

потом

int compar( int* arg1, int* arg2 )
{
return *arg1 - *arg2;
}
О!
Компилятор еще не ANSI C. Еще не знает ключевое слово void. Вместо void используйте тип char, выкиньте const.

#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };


int compar( char *arg1, char *arg2 )

{ return( *(int *)arg1 - *(int *)arg2 );
}
void main()
{ qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );
}


Clean: Deleting intermediary and output files.
Clean: Deleted file "asd1.ERR".
Clean Warning: File "C:\Program Files\PICC\CHUDO\asdf\asd1.o" doesn't exist.
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 51 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 13(65,71): A numeric expression must appear here
1 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Tue Oct 23 21:16:46 2007
Oldring
Цитата(Евгений Германович @ Oct 23 2007, 19:20) *
*** Error 51 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 13(65,71): A numeric expression must


Посмотрите что у вас записано в 13 строке в позициях с 65 по 71. Внизу в редакторе вероятно написана текущая позиция курсора.
Евгений Германович
все проверю,до завтра.

Цитата(Евгений Германович @ Oct 23 2007, 18:32) *
все проверю,до завтра.

{ qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );это строка 13
Oldring
Цитата(Евгений Германович @ Oct 23 2007, 19:43) *
все проверю,до завтра.
{ qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );это строка 13

А позиции-то? Мне их вручную по буквам считать? Лень как-то...

Цитата(Евгений Германович @ Oct 23 2007, 19:43) *
все проверю,до завтра.
{ qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );это строка 13


Попробуйте поставить амперсанд перед compar. Я точно не уверен - но кажется получение адреса функции без амперсанда появилось в языке не сразу.
zltigo
Цитата(Oldring @ Oct 23 2007, 19:38) *
Я точно не уверен - но кажется получение адреса функции без амперсанда появилось в языке не сразу.

Имена массивов, структур и функций отродясь были адресами - не верите, спросите у Ритчи smile.gif
Oldring
Цитата(zltigo @ Oct 23 2007, 22:24) *
Имена массивов, структур и функций отродясь были адресами - не верите, спросите у Ритчи smile.gif


Вы скорее всего правы - в тонкой синей книжечке, которой у меня под рукой уже давно нет wink.gif кажется именно так и было. Но амперсанд я бы все равно попробовал поставить и посмотреть на результат в такой сиуации. Мало ли какие ошибки допустили программисты компилятора?

Цитата(Евгений Германович @ Oct 23 2007, 19:43) *
все проверю,до завтра.
{ qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );это строка 13


Кстати, если нужно отсортировать пяток чисел - лучше вместо библиотечной qsort использовать самописный классический пузырек. Всего двойной вложенный цикл. И горадо быстрее будет работать, и код будет компактнее, что на 8-битках может быть существенным. В CRTL от MS для Win32 в qsort короткие последовательности длины меньше 8 сортируются пузырьком - так быстрее.
dxp
Цитата(zltigo @ Oct 24 2007, 01:24) *
Имена массивов, структур и функций отродясь были адресами - не верите, спросите у Ритчи smile.gif

Насчет структур не погорячились? smile.gif
zltigo
Цитата(dxp @ Oct 24 2007, 06:35) *
Насчет структур не погорячились? smile.gif

Ага, самое смешное, что написал правильно а потом почему-то спустя полчаса добавил. Бзик какой-то sad.gif.
Евгений Германович
Не ссорьтесь.Я до неприличия упростил программу.Вся проблема в самой функции QSORT
Программу для сортировки я уже написал ипользовав прототип QSORT,но есть жгучее желание добить.
#include "C:\Program Files\PICC\CHUDO\asdf\asd1.h"

#include <stdlib.h>
#define A_SIZE 5
int nums[A_SIZE] = { 2,3,1,5,4 };



//int compar( char *arg1, char *arg2 )

//{
// return( *(int *)arg1 - *(int *)arg2 );
//}
compar()
{
return 1;
}

void main()
{
qsort( nums, sizeof(nums)/sizeof(int), sizeof(int),compar);
}

Clean: Deleting intermediary and output files.
Clean: Deleted file "asd1.ERR".
Clean Warning: File "C:\Program Files\PICC\CHUDO\asdf\asd1.o" doesn't exist.
Clean: Done.
Executing: "C:\Program Files\PICC\Ccsc.exe" "asd1.c" +FH +DF +LN +T -A +M +Z +Y=9 +EA
*** Error 51 "C:\Program Files\PICC\CHUDO\asdf\asd1.c" Line 21(53,59): A numeric expression must appear here
1 Errors, 0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Wed Oct 24 18:50:54 2007


53.59 это слово компар.Мне кажется перед компар нужно воткнуть какоето извращение.
Мне в этом компиляторе при передаче параметров пришлось весьма нестандартно описывать указатели.
Oldring
Цитата(Евгений Германович @ Oct 24 2007, 16:59) *
Мне в этом компиляторе при передаче параметров пришлось весьма нестандартно описывать указатели.


Весьма возможно, хоть и странно в данном случае. Лучше всего посмотреть примеры от этого конкретного компилятора на предмет указателей на функции. У примитивных компиляторов для восьмибиток разработчики нередко экономят на универсальных указателях. Так как у них с адресными пространствами беда - их много разных и несовместимых, и поддержка универсальных указателей нередко недешева. И глюкава. При этом, конечно, получается неполная поддержка языка - но разработчиков часто это мало волнует.

P.S. Кстати, лучше не называйте этот алгоритм сортировки qsort. Этот алгоритм обычно называется shellsort - сортировка Шелла. qsort - это другой алгоритм, обычно применяемый в библиотеках для нормальных процессоров.
Евгений Германович
Поробую.Кстати почему вы считаете что это для 8 битовых,все типы я не смотрел ,но мой проц 16 разрядный.Ваш текст нормально работает,но не у меня beer.gif
Oldring
Цитата(Евгений Германович @ Oct 25 2007, 17:11) *
Поробую.Кстати почему вы считаете что это для 8 битовых,все типы я не смотрел ,но мой проц 16 разрядный.Ваш текст нормально работает,но не у меня beer.gif


Почему-то показалось, что речь идет про 8-битник.
С 16-битниками обычно все лучше. Правда, кривые компиляторы для любых процессоров попадаюся.
Ваш проц не поддержан в gcc? Если поддержан - может оказаться проще сменить компилятор, чем разбираться с глюками этого smile.gif
zltigo
Цитата(Oldring @ Oct 25 2007, 16:20) *
Правда, кривые компиляторы для любых процессоров попадаюся.

В существовании настолько нерабочих не верится совсем, ну а поскольку свой пример вопрошающий не смог даже BCC откомпилить (кстати я в ответ на многочисленные упреки в неумении писать и нежелание "проверять" компилятором выложил компилирующийся пример и..... тишина..), то не верится уже на 99,9999(9)%.
Евгений Германович
Я ответил,но перепутал адресата,все работало и еще один вариант из предложенных но ...
Что такое gcc У меня проц микрочиповский пик18.Си которые для них это хайтекси и с18 но у меня их нет.
Oldring
Цитата(Евгений Германович @ Oct 25 2007, 18:45) *
Я ответил,но перепутал адресата,все работало и еще один вариант из предложенных но ...
Что такое gcc У меня проц микрочиповский пик18.Си которые для них это хайтекси и с18 но у меня их нет.


Я вообще говоря с пиками дела никогда не имел и особо не хотел бы smile.gif Но мне казались что они когда-то были восьмибитниками. Они как-то поддержали 16-битный режим?

GCC:
http://gcc.gnu.org/
Но пики кажется не поддерживает - по крайней мере, я про это ничего не помню.

P.S. Вы меня обмануть пытаетесь!
http://ww1.microchip.com/downloads/en/Devi...c/DS-39630d.pdf
8-битник да еще и с Гарвардовской архитектурой! Нет ничего хуже для C компиляторов smile.gif
Евгений Германович
Цитата(Oldring @ Oct 25 2007, 18:36) *
Я вообще говоря с пиками дела никогда не имел и особо не хотел бы smile.gif Но мне казались что они когда-то были восьмибитниками. Они как-то поддержали 16-битный режим?

GCC:
http://gcc.gnu.org/
Но пики кажется не поддерживает - по крайней мере, я про это ничего не помню.

P.S. Вы меня обмануть пытаетесь!
http://ww1.microchip.com/downloads/en/Devi...c/DS-39630d.pdf
8-битник да еще и с Гарвардовской архитектурой! Нет ничего хуже для C компиляторов smile.gif

Нет не пытаюсь мин длина команды 12 бит, у 18 пиков 16 бит те шина данных 16бит.У 24 пиков не знаю.
А по данным конечно байт.Для си может и нет но прирост скорости по сравнению с нейманом впечатляет.За ссылку спасибо но аглицким не владею.
xemul
Цитата(Евгений Германович @ Oct 26 2007, 17:39) *
Нет не пытаюсь мин длина команды 12 бит, у 18 пиков 16 бит те шина данных 16бит.У 24 пиков не знаю.
А по данным конечно байт.Для си может и нет но прирост скорости по сравнению с нейманом впечатляет.За ссылку спасибо но аглицким не владею.

Вам уже сказали, что PIC'и имеют Гарвардскую архитектуру, т.е. разделенные шины команд и данных. Разрядность шины команд PIC18 16 бит, разрядность шины данных - 8. Это совершенно несекретная информация, доступная на первых страницах даташита на любой PIC.
Oldring
Цитата(Евгений Германович @ Oct 26 2007, 17:39) *
А по данным конечно байт.


Так разрядность обычно меряется как раз разрядностью данных. Точнее, регистров общего назначения.
xemul
Цитата(Oldring @ Oct 25 2007, 19:36) *
...
8-битник да еще и с Гарвардовской архитектурой! Нет ничего хуже для C компиляторов smile.gif

AVR тоже на Гарварде, а вроде бы и ничего.
У PIC16 и младше одна из самых больших неприятностей (для меня) - один-единственный регистр косвенной адресации, что при нарезке ОЗУ на банки 256 байт - хороший повод застрелиться (компилятору С и его разработчикамsmile.gif). Дык что можно требовать от ядра 20 с лишним -летней давности?
PIC18 имеют 3 регистра косвенной адресации с поддержкой и пре- и пост-инкремента/декремента. Нарезка ОЗУ осталась, но уже не так мешает.
PIC24 в этом плане гораздо приятней smile.gif Не, не так. PIC24 приятней во всех планах сравнений с PIC16/PIC18.

2 Евгений Германович Если Вы хотите начать работать с PIC'ами, то начинайте сразу с PIC24 - сбережете кучу времени, денег, нервов,...
Oldring
Цитата(xemul @ Oct 26 2007, 19:03) *
AVR тоже на Гарварде, а вроде бы и ничего.


До некоторой степени ничего. По сравнению с любым фон-неймановским даже 16-битником реализовывать в компиляторе универсальные указатели несравненно сложнее. Несмотря на три пары регистров выделенных для косвенной адресации.
Евгений Германович
Цитата(xemul @ Oct 26 2007, 18:03) *
AVR тоже на Гарварде, а вроде бы и ничего.
У PIC16 и младше одна из самых больших неприятностей (для меня) - один-единственный регистр косвенной адресации, что при нарезке ОЗУ на банки 256 байт - хороший повод застрелиться (компилятору С и его разработчикамsmile.gif). Дык что можно требовать от ядра 20 с лишним -летней давности?
PIC18 имеют 3 регистра косвенной адресации с поддержкой и пре- и пост-инкремента/декремента. Нарезка ОЗУ осталась, но уже не так мешает.
PIC24 в этом плане гораздо приятней smile.gif Не, не так. PIC24 приятней во всех планах сравнений с PIC16/PIC18.

2 Евгений Германович Если Вы хотите начать работать с PIC'ами, то начинайте сразу с PIC24 - сбережете кучу времени, денег, нервов,...

А вам не приходилось писать для 1816 ве 35 32 байта озу из них 16 стек.
Про разрядность не согласен микрочип свои творения гордо именует 16 разрядными шина данных то 16 разрядов.На 24 пик нет рускоязычной документации.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.