Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: помогите с поиском ответа ( C си)

Пт ноя 12, 2010 11:15:57

lix писал(а):UPD: да. поспешил mpz_init_set_str нужна


mpz_init_set_str (mpz_ptr x, const char *str, int base) :)

трулляля. только вот ошибку все еще выдает, а хочется из ide компилить

Re: помогите с поиском ответа ( C си)

Пт ноя 12, 2010 12:39:16

Кислый писал(а):в ide выдает эту непонятную ошибку


в какой иде? в настройках проекта надо указать что используется библиотека gmp. ну или в опциях линкеру.

Re: помогите с поиском ответа ( C си)

Пт ноя 12, 2010 12:59:56

Code::Blocks IDE
gmp - системная либа.
а вот где ключик -lgmp прописать ?

Re: помогите с поиском ответа ( C си)

Пт ноя 12, 2010 13:06:36

Кислый писал(а):Code::Blocks IDE
gmp - системная либа.
а вот где ключик -lgmp прописать ?


ниразу не видел эту среду. вот что нашел http://wiki.codeblocks.org/index.php?title=FAQ#Q:_I_would_like_to_compile_a_project_using_some_non-standard_libraries._How_can_I_indicate_to_CodeBlocks_that_these_libraries_and_include_files_exist.3F

Re: Вопросы по С/С++ (СИ)

Сб ноя 13, 2010 15:53:10

lix,
Код:
mpz_init_set_str (mpz_ptr x, const char *str, int base)


base это у нас система счисления. верно ? т.е. :
base = 10, и можно использовать символы 0..9
base = 16, и можно использовать символы 16-иричной системы 0..F
а если мне нужно закодить например слово MAMA, то чему должно равняться base ? по логике вещей base = 256. да вот незадача.. выводит ошибку вроде
Исключение в операции с плавающей точкой

Re: Вопросы по С/С++ (СИ)

Сб ноя 13, 2010 17:14:26

хмм.. max base = 32 :?

Re: Вопросы по С/С++ (СИ)

Сб ноя 13, 2010 18:40:12

я не понял, нафиг это все надо? gmp - это либа для работы с очень большими числами, например, для криптографии. кодировать этим слова... малость не то применение.

надо еще раз трэд прочитать...

Re: Вопросы по С/С++ (СИ)

Сб ноя 13, 2010 19:30:17

ну дык.. не я это придумал. если в либе есть соответствующие функции (rsa) то почему бы и не воспользоваться ?

Re: Вопросы по С/С++ (СИ)

Сб ноя 13, 2010 20:21:01

Кислый писал(а):ну дык.. не я это придумал. если в либе есть соответствующие функции (rsa) то почему бы и не воспользоваться ?


нет в gmp rsa, в ней есть функции, позволяющие реализовать rsa (умножение, деление по модулю). надо использовать другую либу, например openssl.

Re: Вопросы по С/С++ (СИ)

Сб ноя 13, 2010 20:48:03

ВАЖНО и с ВАФОСОМ : вот давайте не будем спорить.. :))

Re: Вопросы по С/С++ (СИ)

Сб ноя 13, 2010 22:05:36

Кислый писал(а):ВАЖНО и с ВАФОСОМ : вот давайте не будем спорить.. :))

да пожалуйста :)
только в мануале к gmp я не нашел ни одной функции прямо относящейся к шифрованию.

Re: Вопросы по С/С++ (СИ)

Вт ноя 16, 2010 20:46:33

Извините, за "новое слово в языке Си" :))) :))) :))) но возможно ли как нибудь, применение русских букв в CИ, в частности в #define
например
Код:
 #define   Ё  14
#define   Ж  16
#define   И  18
#define   К  20

text [4] = {Ё,Ж,И,К}


Наверное бред, но нужно закодировать кучу массивов содержащих русский текст, и былобы очень удобно "задефинить" все русские буквы, а потом просто собирать массивы русскими буквами

Re: Вопросы по С/С++ (СИ)

Вт ноя 16, 2010 23:00:08

O-LED писал(а):Извините, за "новое слово в языке Си" :))) :))) :))) но возможно ли как нибудь, применение русских букв в CИ, в частности в #define
например
Код:
 #define   Ё  14
#define   Ж  16
#define   И  18
#define   К  20

text [4] = {Ё,Ж,И,К}


Наверное бред, но нужно закодировать кучу массивов содержащих русский текст, и былобы очень удобно "задефинить" все русские буквы, а потом просто собирать массивы русскими буквами

насколько я в курсе, нет компиляторов для AVR, поддерживающих подобные дефайны, хотя по слухам для компьютера MS VC такой финт допускет...

но скажите, зачем вам это?! ведь строка в Си инициализируется самым тривиальным способом:
Код:
char text[] = "ЁЖИК";

Re: Вопросы по С/С++ (СИ)

Вт ноя 16, 2010 23:20:29

чему тогда у меня будет равно например text[2] ???

Re: Вопросы по С/С++ (СИ)

Вт ноя 16, 2010 23:27:55

O-LED писал(а):чему тогда у меня будет равно например text[2] ???

ну едрен-батон! вы Си хоть мало-мало изучали? если char text[] = "ЁЖИК"; то text[2] равно 'И'

Re: Вопросы по С/С++ (СИ)

Ср ноя 17, 2010 00:34:27

Так я в Си самоучка, учусь не по нотам а на слух, там подслушаю, там подсмотрю)))))
про такую возможность объявления переменных не знал.
А скажите, как тогда мне лучше объявить массив в котором используются только элементы с 192 по 223, а остальные не нужны (у знаков А-Я код 192-223) ?
Спасибо.


зы. какую книгу по Си для микроконтроллеров порекомендуете??

Re: Вопросы по С/С++ (СИ)

Ср ноя 17, 2010 01:09:36

ARV писал(а):
Код:
text [4] = {Ё,Ж,И,К}

...
но скажите, зачем вам это?! ведь строка в Си инициализируется самым тривиальным способом:
Код:
char text[] = "ЁЖИК";
Кстати, если строго, то полным аналогом посимвольной инициаизации со скобками { } будет
Код:
char text[4] = "ЁЖИК";

Код:
char text1[4] = {Ё,Ж,И,К}; // тут 4 можно было и не указывать, всё равно было бы 4
char text2[] = "ЁЖИК"; // тут в массиве будет ограичитель '\0' и будет 5 элементов массива
char text3[4] = "ЁЖИК"; // а тут ограничителя не будет, массив размером 4 элемента
Иногда удобно, экономит место.
O-LED писал(а):А скажите, как тогда мне лучше объявить массив в котором используются только элементы с 192 по 223, а остальные не нужны (у знаков А-Я код 192-223) ?
Ну как-то так:
Код:
enum { start_char = 'А', end_char = 'Я', total_chars = end_char - start_char +1 };
const char array[total_chars] = { ... };

inline char get_from_array( char ch)
{
    if( ch < start_char || ch > end_char ) return ch; // при уверенности в том, что не передадут «запредельное», эту строку можно и убрать
    return array[ ch - start_char ];}
Задумчиво, но иначе никак не сэкономить на массиве. Это не паскаль, чтобы границы индекса массива указать. Хотя паскаль тут только строки текста программы сэкономит, в коде лучше не будет.

O-LED писал(а):зы. какую книгу по Си для микроконтроллеров порекомендуете??
И чернила для 8-го класса.
Сначала нужна книжка по языку С, чтобы в голове порядок был. Потом в документации на конкретнй компилятор смотреть его расширения и отклонения от стандарта.
Кстати, у тех компьютеров, на которых С рождался, было 64 килобайта адресного пространства, после вычета зоны устройств оставалось максимум 56К под код и данные, а на целевой машине могло оказаться и 8К. atmega64 уже больше имеет, чем тогда было максимум, atmega8-atmega16 имеют столько, сколько тогда было в типичной управляющей машинке.

Re: Вопросы по С/С++ (СИ)

Ср ноя 17, 2010 07:36:52

avreal писал(а):
Код:
char text1[4] = {Ё,Ж,И,К}; // тут 4 можно было и не указывать, всё равно было бы 4
char text2[] = "ЁЖИК"; // тут в массиве будет ограичитель '\0' и будет 5 элементов массива
char text3[4] = "ЁЖИК"; // а тут ограничителя не будет, массив размером 4 элемента
Иногда удобно, экономит место.

А Вы проверяли это? А что за компилятор, который позволяет так делать?

По стандарту Си рабочий, в этом примере, только второй массив. В первом нужно символы заключать в одинарные кавычки, а третий ругнётся на размерность. Во все строки, а строка это двойные кавычки, компилятор должен помещать конец строки '\0'.

Re: Вопросы по С/С++ (СИ)

Ср ноя 17, 2010 09:58:43

avreal писал(а):Кстати, если строго, то полным аналогом посимвольной инициаизации со скобками { } будет
Код:
char text[4] = "ЁЖИК";

А как же символ конца строки '\0'?

Re: Вопросы по С/С++ (СИ)

Ср ноя 17, 2010 19:45:56

asteroid7 писал(а):А Вы проверяли это? А что за компилятор, который позволяет так делать?
По стандарту Си рабочий, в этом примере, только второй массив. В первом нужно символы заключать в одинарные кавычки, а третий ругнётся на размерность. Во все строки, а строка это двойные кавычки, компилятор должен помещать конец строки '\0'.
Ой, ну с одинарными кавычками — это просто среди ночи тупо копипастнул и не поправил, извините уж. В добитых своей рукой коментаиях '\0' в кавычки взял, а там — не исправил.

А что касается третьего массива — его обязан делать любой компилятор, претендующий на звание компилятора языка С.

По стандарту ANSI C89 (в более поздних другой номер параграфа, в ISO C99 это параграф 6.7.8 пункт 32, а стандарт ISO C90 == ANSI C89) строка как инициализатор ведёт себя не так, как строка-литерал. В литералах, имеющих тип char*, отсылающий к неявному массиву char[], концевой '\0' гарантируется, в инициализаторах — явно заданный размер массива может «не пустить» этот ноль в массив.
3.5.7 Initialization
...
Finally, the declaration
char s[] = "abc", t[3] = "abc";
defines ``plain'' char array objects s and t whose members are initialized with character string literals. This declaration is identical to
char s[] = { 'a', 'b', 'c', '\0' }, t[] = { 'a', 'b', 'c' };
А вот в C++ так нельзя и это одно из тонких отличий между языками :-)
Ответить