|
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);
}
|
|
|
|
|
 |
Ответов
(1 - 60)
|
Oct 21 2007, 11:12
|

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

|
Цитата(zltigo @ Oct 21 2007, 14:05)  Где убрать, а где и добавить парочку  . Еще с вызовом функции ознакомиться. В общем Автору следует c "Hello World!" и учебником для начала "побороться", пожалуй  . Вообщето это текст примера из PIC C int compar(const void *arg1,const void *arg2) Ну убрал результат ?Кстати чем гнуть пальцы продемонстрируйте интеллект.
|
|
|
|
|
Oct 21 2007, 19:05
|

Мастер
   
Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474

|
Цитата(Евгений Германович @ Oct 21 2007, 13:46)  Народ!Окажите помощ.Не могу одолеть функцию qsort.что бы не пробовал,кроме ошибок ничего. Ув. Евгений Германович, вы все-таки прислушайтесь к призывам, и почитайте труды достойных мужей по C/C++. Не сочтите это пожелание за наезд, ни в коем случае. А код лучше записать так (не компилировал, может опечатался, но пытался внимательно  ): Код #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 21 2007, 22:22
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Edmundo @ Oct 21 2007, 22:05)  но пытался внимательно  ): Еще одну ";" надо добавить  . Ну а вообще это так: Код #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)  продемонстрируйте интеллект. Интелект это слишком, интеллект это Вам потом потребуется. Пока нужны банальные знания самых основ языка  'C' и основ английского, дабы понять сообщения компилятора.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 22 2007, 04:41
|

Мастер
   
Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474

|
Цитата(zltigo @ Oct 22 2007, 02:22)  Еще одну ";" надо добавить  . Да, виноват, промахнулся... Цитата(zltigo @ Oct 22 2007, 02:22)  Ну а вообще это так... Ну, это уже оптимизация и стилизация
--------------------
شامل
|
|
|
|
|
Oct 22 2007, 12:20
|

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

|
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
НУ и....?Вы думаете я от нечего делать обратился.Тот текст,что я вытащил-это пример из хелпа.
Сообщение отредактировал Евгений Германович - Oct 22 2007, 12:22
|
|
|
|
|
Oct 22 2007, 14:32
|

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

|
Эти ошибки получены при компиляции предложенного вами текста программы.#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 22 2007, 14:34
|
|
|
|
|
Oct 23 2007, 12:18
|

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

|
Может вы не в курсе но пробел это тоже строка. Если вы выставляете текст программы ,то немешало бы вначале его проверить. 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 ); }
|
|
|
|
|
Oct 23 2007, 12:39
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Евгений Германович @ Oct 23 2007, 15:18)  Это ваш текст. Нет. Это Ваш. Мой на одну строку кода меньше  Код #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 ); } Цитата Может вы не в курсе но пробел это тоже строка. Обалдеть! А мужики-то не знают  . Ну и где в приведенном мной ранее тексте 24 строка, хоть с пробелами, хоть нет. Цитата Если вы выставляете текст программы ,то немешало бы вначале его проверить. Я способен написать исходник и много большего объема без ошибок, тем более, без синтаксических  . Ищите проблемы с набиванием текста у себя.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
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:26
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(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" Препроцессоры на практике разбираются со всем.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Oct 23 2007, 13:49
|
Частый гость
 
Группа: Новичок
Сообщений: 119
Регистрация: 26-08-05
Пользователь №: 7 989

|
Цитата(Евгений Германович @ 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 модели и т п "лабуда". Посмотрите опции компиляции модели или компилятора...
|
|
|
|
|
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:07
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Евгений Германович @ Oct 23 2007, 16:56)  Откомпилируйте свой текст сами и будете неприятно удивлены.Пока у вас одни слова. Не обижайтесь, но я не буду заниматься ерундой компилируя совершенно очевидные вещи. Если угодно, то можете считать, что я откомпилировал и ошибок не получил  Цитата(Oldring @ Oct 23 2007, 16:36)  Поэтому там именно строка. Кстати, старые С компиляторы не кушали с одинарными бэкслешами. Это потом появились слишком умные в рассчете на типичные ошибки неопытных программистов. Дело обстоит с точностью до наоборот - возьмите, например BCC 1992 года (можете и более поздние 3.1 ) и попробуйте ему скормить любой двойной слэш.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
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:45
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Евгений Германович @ Oct 23 2007, 17:11)  Вы похоже весьма опасаетесь получить отрицательный результат.Не бойтесь. Отнюдь  имею абсолютную уверенность в компиляции сего любым компилятором  Цитата Как говорил Ф Энгельс или К Маркс не ошибается тот кто ничего не делает. Это не классики, это народная мудрость. Причем я знаю и другие русские пословицы и поговорки, на мой взгляд много много более подходящие по теме  Цитата Кстати на Турбо Си подобный текст тоже не проходит. Надоело. Сильно надоело. Делаем 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 И исполняемый файл (тоже в приложении). Финита ла комедиа....
Прикрепленные файлы
TEST.rar ( 4.79 килобайт )
Кол-во скачиваний: 30
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
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
|
|
|
|
|
Oct 23 2007, 16:38
|

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

|
Цитата(Евгений Германович @ 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. Я точно не уверен - но кажется получение адреса функции без амперсанда появилось в языке не сразу.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 23 2007, 19:16
|

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

|
Цитата(zltigo @ Oct 23 2007, 22:24)  Имена массивов, структур и функций отродясь были адресами - не верите, спросите у Ритчи  Вы скорее всего правы - в тонкой синей книжечке, которой у меня под рукой уже давно нет  кажется именно так и было. Но амперсанд я бы все равно попробовал поставить и посмотреть на результат в такой сиуации. Мало ли какие ошибки допустили программисты компилятора? Цитата(Евгений Германович @ Oct 23 2007, 19:43)  все проверю,до завтра. { qsort( nums, sizeof(nums)/sizeof(int), sizeof(int), compar );это строка 13 Кстати, если нужно отсортировать пяток чисел - лучше вместо библиотечной qsort использовать самописный классический пузырек. Всего двойной вложенный цикл. И горадо быстрее будет работать, и код будет компактнее, что на 8-битках может быть существенным. В CRTL от MS для Win32 в qsort короткие последовательности длины меньше 8 сортируются пузырьком - так быстрее.
--------------------
Пишите в личку.
|
|
|
|
|
Oct 24 2007, 12:59
|

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

|
Не ссорьтесь.Я до неприличия упростил программу.Вся проблема в самой функции 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 это слово компар.Мне кажется перед компар нужно воткнуть какоето извращение. Мне в этом компиляторе при передаче параметров пришлось весьма нестандартно описывать указатели.
|
|
|
|
|
Oct 25 2007, 15:36
|

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

|
Цитата(Евгений Германович @ Oct 25 2007, 18:45)  Я ответил,но перепутал адресата,все работало и еще один вариант из предложенных но ... Что такое gcc У меня проц микрочиповский пик18.Си которые для них это хайтекси и с18 но у меня их нет. Я вообще говоря с пиками дела никогда не имел и особо не хотел бы  Но мне казались что они когда-то были восьмибитниками. Они как-то поддержали 16-битный режим? GCC: http://gcc.gnu.org/Но пики кажется не поддерживает - по крайней мере, я про это ничего не помню. P.S. Вы меня обмануть пытаетесь! http://ww1.microchip.com/downloads/en/Devi...c/DS-39630d.pdf8-битник да еще и с Гарвардовской архитектурой! Нет ничего хуже для C компиляторов
--------------------
Пишите в личку.
|
|
|
|
|
Oct 26 2007, 13:39
|

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

|
Цитата(Oldring @ Oct 25 2007, 18:36)  Я вообще говоря с пиками дела никогда не имел и особо не хотел бы  Но мне казались что они когда-то были восьмибитниками. Они как-то поддержали 16-битный режим? GCC: http://gcc.gnu.org/Но пики кажется не поддерживает - по крайней мере, я про это ничего не помню. P.S. Вы меня обмануть пытаетесь! http://ww1.microchip.com/downloads/en/Devi...c/DS-39630d.pdf8-битник да еще и с Гарвардовской архитектурой! Нет ничего хуже для C компиляторов  Нет не пытаюсь мин длина команды 12 бит, у 18 пиков 16 бит те шина данных 16бит.У 24 пиков не знаю. А по данным конечно байт.Для си может и нет но прирост скорости по сравнению с нейманом впечатляет.За ссылку спасибо но аглицким не владею.
Сообщение отредактировал Евгений Германович - Oct 26 2007, 13:43
|
|
|
|
|
Oct 26 2007, 15:03
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Oldring @ Oct 25 2007, 19:36)  ... 8-битник да еще и с Гарвардовской архитектурой! Нет ничего хуже для C компиляторов  AVR тоже на Гарварде, а вроде бы и ничего. У PIC16 и младше одна из самых больших неприятностей (для меня) - один-единственный регистр косвенной адресации, что при нарезке ОЗУ на банки 256 байт - хороший повод застрелиться (компилятору С и его разработчикам  ). Дык что можно требовать от ядра 20 с лишним -летней давности? PIC18 имеют 3 регистра косвенной адресации с поддержкой и пре- и пост-инкремента/декремента. Нарезка ОЗУ осталась, но уже не так мешает. PIC24 в этом плане гораздо приятней  Не, не так. PIC24 приятней во всех планах сравнений с PIC16/PIC18. 2 Евгений Германович Если Вы хотите начать работать с PIC'ами, то начинайте сразу с PIC24 - сбережете кучу времени, денег, нервов,...
|
|
|
|
|
Oct 27 2007, 10:39
|

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

|
Цитата(xemul @ Oct 26 2007, 18:03)  AVR тоже на Гарварде, а вроде бы и ничего. У PIC16 и младше одна из самых больших неприятностей (для меня) - один-единственный регистр косвенной адресации, что при нарезке ОЗУ на банки 256 байт - хороший повод застрелиться (компилятору С и его разработчикам  ). Дык что можно требовать от ядра 20 с лишним -летней давности? PIC18 имеют 3 регистра косвенной адресации с поддержкой и пре- и пост-инкремента/декремента. Нарезка ОЗУ осталась, но уже не так мешает. PIC24 в этом плане гораздо приятней  Не, не так. PIC24 приятней во всех планах сравнений с PIC16/PIC18. 2 Евгений Германович Если Вы хотите начать работать с PIC'ами, то начинайте сразу с PIC24 - сбережете кучу времени, денег, нервов,... А вам не приходилось писать для 1816 ве 35 32 байта озу из них 16 стек. Про разрядность не согласен микрочип свои творения гордо именует 16 разрядными шина данных то 16 разрядов.На 24 пик нет рускоязычной документации.
|
|
|
|
|
Oct 28 2007, 09:37
|

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

|
Цитата(Oldring @ Oct 27 2007, 17:21)  Ну это Вам нужно думать как обойти глюки конкретного компилятора. Не работают нормальные указатели на функции - не пользуйте, благо сортировка - это не то, что сложно запрограммировать самостоятельно. Мы в этой ситуации, не имея доступа к конкретному глюкале и не желая этим доступом обзаводиться, Вам можем только рассказать, почему со всякими пиками такой анал по части компиляторов. Ищите способ, предусмотренный разработчиками кимпилятора: раз qsort в библиотеке есть - значит указатели на функции каким-то образом поддерданы. Вы попробовали поставить амперсанд перед compar? Если не знаете что такое амперсанд - спросите. Это символ '&' . Прежде чем сюда обратиться я немало перепробовал .Амперсанд я втыкал первым,но я всегда считал,что & это собака.
|
|
|
|
|
Oct 28 2007, 16:55
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Евгений Германович @ Oct 27 2007, 16:52)  Вообще то делят не шины а память. Очепятался. Естественно, разделенная память. Цитата Уже не к вам а к остальным,вы бы подумали какую гадость воткнуть в QSORT дабы она заработала. Да ничего втыкать не надо. Я так и не понял, каким компилятором Вы пользуетесь. Применительно к ht picc могу сказать, что прототип qsort в stdlib.h описан, но самой реализации функции в библиотеках нет. Вместо этого дается sources\qsort.c, который можно попытаться включить в проект (придется еще включить sources\malloc.c). Компилятор все это благополучно прожует и создаст требуемые .obj. Останется подобрать контроллер с подходящей по объему RAM, чтобы линкеру понравилось, и решить, стОит ли оно того. Цитата А классификацию пиков по длине шины команд я встречал и не раз,это не мое изобретение. Угу, первенство принадлежит фирме Microchip. Изначально у нее были только контроллеры с 12-битной длиной команд; потом мозгов у контроллеров стало больше, размерность команд пришлось увеличить до 14 бит, еще более потом - до 16. Контроллеры в каждом семействе Microchip условно делила на low-, mid- и high-range по объему мозгов и составу периферии. Но это было давно. Сейчас - просто подбор по требуемым параметрам. А в своих чартах Microchip всегда указывала в графе "Architecture" 8 бит для PIC16/PIC18. 16 бит в этой графе стали актуальны относительно недавно.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|