|
QSORT |
|
|
|
Oct 21 2007, 09:46
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Народ!Окажите помощ.Не могу одолеть функцию 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);
}
|
|
|
|
|
 |
Ответов
|
Oct 23 2007, 13:16
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
//#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
Ну и ??? Кстати эта строка вставляется автоматически при создании проекта.
|
|
|
|
|
Oct 23 2007, 13:24
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Евгений Германович @ Oct 23 2007, 17:16)  Ну и ??? Кстати эта строка вставляется автоматически при создании проекта. А, понятно, это какие-то особенности конкретного компилятора. Не умеет компилировать stdlib.h без указания устройства, под которое ведется компиляция. Чтобы не портить исходник всякими левыми автоматически сгенерированными хедерами - соответссующее определение наверняка можно вставить в опциях проекта. Вы, вероятно, в первый раз пытаетесь писать на С? Скопируйте для начала какой-нибудь пример, который обычно идет с компилятором, в отдельный каталог. Потом добейтесь его компиляции. Когда будет компилироваться - можно будет дойти до qsort. Так как я с этим компилятором, вероятно, не работал - более подробно объяснить не смогу, как это сделать. То, что такая строка генерируется автоматически при создани проекта, скорее всего, говорит о качестве компилятора. Птому что бэкслеш - это префикс escape последовательности. И так писать include нехорошо, даже если конкретный компилятор и проглатывает.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 23 2007, 13:56
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(Oldring @ Oct 23 2007, 16:24)  А, понятно, это какие-то особенности конкретного компилятора. Не умеет компилировать stdlib.h без указания устройства, под которое ведется компиляция. Чтобы не портить исходник всякими левыми автоматически сгенерированными хедерами - соответссующее определение наверняка можно вставить в опциях проекта.
Вы, вероятно, в первый раз пытаетесь писать на С? Скопируйте для начала какой-нибудь пример, который обычно идет с компилятором, в отдельный каталог. Потом добейтесь его компиляции. Когда будет компилироваться - можно будет дойти до qsort. Так как я с этим компилятором, вероятно, не работал - более подробно объяснить не смогу, как это сделать.
То, что такая строка генерируется автоматически при создани проекта, скорее всего, говорит о качестве компилятора. Птому что бэкслеш - это префикс escape последовательности. И так писать include нехорошо, даже если конкретный компилятор и проглатывает. С самим проектом все нормально не уводите процесс.На Си не впервые,но не профи.Компилятор полное дерьмо,я не смог на нем создать многофайловый прект. Однако вернемся к теме. Текст я не набиваю,а копирую ваш. О какой лишней строке вы говорите? #include "C:\Program Files\PICC\CHUDO\asdf\asd1.h" если про эту то с ней все нормально -многократно проверено.Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова.До кучи я трудился на 2 аппаратах на другом эта строка выглядит по другому но ошибки теже самые.
Сообщение отредактировал Евгений Германович - Oct 23 2007, 14:01
|
|
|
|
|
Oct 23 2007, 14:15
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

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

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(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 ошибок.И предложение откомпилировать текст было адресовано не вам,вы напрасно возмущаетесь. Про пальцы больше относится не ко мне.На конкретно поставленный вопрос одни рассуждения.Текст взят без изменений с самого компилятора.
Сообщение отредактировал Евгений Германович - Oct 23 2007, 14:28
|
|
|
|
|
Oct 23 2007, 14:45
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(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; } } Вот прототип.ВЫ считаете те слова,что были написаны это помощ?
|
|
|
|
|
Oct 23 2007, 14:50
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Евгений Германович @ 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.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 23 2007, 15:20
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(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
|
|
|
|
Сообщений в этой теме
Евгений Германович QSORT Oct 21 2007, 09:46 evc Цитата(Евгений Германович @ Oct 21 2007, 13... Oct 21 2007, 10:51 zltigo Цитата(evc @ Oct 21 2007, 13:51) Нужно уб... Oct 21 2007, 11:05  Евгений Германович Цитата(zltigo @ Oct 21 2007, 14:05) Где у... Oct 21 2007, 11:12   Oldring Цитата(Евгений Германович @ Oct 21 2007, 15... Oct 21 2007, 15:24 Edmundo Цитата(Евгений Германович @ Oct 21 2007, 13... Oct 21 2007, 19:05 zltigo Цитата(Edmundo @ Oct 21 2007, 22:05) но п... Oct 21 2007, 22:22  Edmundo Цитата(zltigo @ Oct 22 2007, 02:22) Еще о... Oct 22 2007, 04:41 Евгений Германович Clean: Deleting intermediary and output files.
Cle... Oct 22 2007, 12:20 zltigo Цитата(Евгений Германович @ Oct 22 2007, 15... Oct 22 2007, 12:33 Евгений Германович Эти ошибки получены при компиляции предложенного в... Oct 22 2007, 14:32 zltigo Цитата(Евгений Германович @ Oct 22 2007, 17... Oct 22 2007, 14:42 Евгений Германович Может вы не в курсе но пробел это тоже строка.
Есл... Oct 23 2007, 12:18 zltigo Цитата(Евгений Германович @ Oct 23 2007, 15... Oct 23 2007, 12:39 Oldring Цитата(Евгений Германович @ Oct 23 2007, 16... Oct 23 2007, 12:51  zltigo Цитата(Oldring @ Oct 23 2007, 15:51) Кста... Oct 23 2007, 13:26   Oldring Цитата(zltigo @ Oct 23 2007, 17:26) С дво... Oct 23 2007, 13:36   zltigo Цитата(Евгений Германович @ Oct 23 2007, 16... Oct 23 2007, 14:07    Евгений Германович Цитата(zltigo @ Oct 23 2007, 17:02) Не об... Oct 23 2007, 14:11     zltigo Цитата(Евгений Германович @ Oct 23 2007, 17... Oct 23 2007, 14:45         Oldring Цитата(Евгений Германович @ Oct 23 2007, 19... Oct 23 2007, 15:24 soshnev Цитата(Евгений Германович @ Oct 23 2007, 17... Oct 23 2007, 13:49 Евгений Германович все проверю,до завтра.
Цитата(Евгений Германович ... Oct 23 2007, 15:43 Oldring Цитата(Евгений Германович @ Oct 23 2007, 19... Oct 23 2007, 16:38  zltigo Цитата(Oldring @ Oct 23 2007, 19:38) Я то... Oct 23 2007, 18:24   Oldring Цитата(zltigo @ Oct 23 2007, 22:24) Имена... Oct 23 2007, 19:16   dxp Цитата(zltigo @ Oct 24 2007, 01:24) Имена... Oct 24 2007, 03:35    zltigo Цитата(dxp @ Oct 24 2007, 06:35) Насчет с... Oct 24 2007, 07:14 Евгений Германович Не ссорьтесь.Я до неприличия упростил программу.Вс... Oct 24 2007, 12:59 Oldring Цитата(Евгений Германович @ Oct 24 2007, 16... Oct 24 2007, 16:11 Евгений Германович Поробую.Кстати почему вы считаете что это для 8 би... Oct 25 2007, 13:11 Oldring Цитата(Евгений Германович @ Oct 25 2007, 17... Oct 25 2007, 13:20  zltigo Цитата(Oldring @ Oct 25 2007, 16:20) Прав... Oct 25 2007, 13:50 Евгений Германович Я ответил,но перепутал адресата,все работало и еще... Oct 25 2007, 14:45 Oldring Цитата(Евгений Германович @ Oct 25 2007, 18... Oct 25 2007, 15:36  Евгений Германович Цитата(Oldring @ Oct 25 2007, 18:36) Я во... Oct 26 2007, 13:39   xemul Цитата(Евгений Германович @ Oct 26 2007, 17... Oct 26 2007, 14:46    Евгений Германович Цитата(xemul @ Oct 26 2007, 17:46) Вам уж... Oct 27 2007, 12:52     Oldring Цитата(Евгений Германович @ Oct 27 2007, 16... Oct 27 2007, 14:21      Евгений Германович Цитата(Oldring @ Oct 27 2007, 17:21) Ну э... Oct 28 2007, 09:37       Oldring Цитата(Евгений Германович @ Oct 28 2007, 12... Oct 28 2007, 09:44        Евгений Германович Цитата(Oldring @ Oct 28 2007, 12:44) соба... Oct 28 2007, 14:00     xemul Цитата(Евгений Германович @ Oct 27 2007, 16... Oct 28 2007, 16:55   Oldring Цитата(Евгений Германович @ Oct 26 2007, 17... Oct 26 2007, 14:49  xemul Цитата(Oldring @ Oct 25 2007, 19:36) ...
... Oct 26 2007, 15:03   Oldring Цитата(xemul @ Oct 26 2007, 19:03) AVR то... Oct 26 2007, 15:37   Евгений Германович Цитата(xemul @ Oct 26 2007, 18:03) AVR то... Oct 27 2007, 10:39    Oldring Цитата(Евгений Германович @ Oct 27 2007, 14... Oct 27 2007, 11:08     zltigo Цитата(Oldring @ Oct 27 2007, 14:08) Дуря... Oct 27 2007, 11:20      Oldring Цитата(zltigo @ Oct 27 2007, 15:20) Не ду... Oct 27 2007, 12:44 Евгений Германович Прочитайте про разрядность команд. Oct 27 2007, 12:20 Евгений Германович PIC C Compiler.Про нт не знаю но вы по моему плохо... Oct 29 2007, 13:49
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|