реклама на сайте
подробности

 
 
> QSORT
Евгений Германов...
сообщение Oct 21 2007, 09:46
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 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);

}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Евгений Германов...
сообщение Oct 23 2007, 13:16
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 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

Ну и ???
Кстати эта строка вставляется автоматически при создании проекта.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 13:24
Сообщение #3


Гуру
******

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



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


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

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

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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 13:56
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 14:15
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 14:24
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 14:25
Сообщение #7


Гуру
******

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



Цитата(Евгений Германович @ Oct 23 2007, 18:24) *
Вы весьма невнимательны .текст не мой я уже писал об этом.Без инклудов не получится.


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

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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 14:45
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 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;
}
}
Вот прототип.ВЫ считаете те слова,что были написаны это помощ?
Go to the top of the page
 
+Quote Post
Oldring
сообщение Oct 23 2007, 14:50
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 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.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Oct 23 2007, 15:20
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Евгений Германович   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


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01548 секунд с 7
ELECTRONIX ©2004-2016