|
Как последовательно вытаскивать биты из массива? |
|
|
|
Dec 26 2010, 12:11
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Вобщем,нужно для светодиодного табло,на сдвиговые регистры пихать биты из массива,я так понимаю-нужно с конца массива поочередно брать биты. На си, например массив Код unsigned char code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C}; Как их вытащить? На си код хотелось бы увидеть.
|
|
|
|
|
 |
Ответов
(1 - 89)
|
Dec 26 2010, 12:26
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(kurtis @ Dec 26 2010, 17:18)  Код size_t i; unsigned char some_value;
for (i=0; i<sizeof(code)/sizeof(code[0]); i++) { some_value = code[i]; // some_value = *(code + i); /* альтернативный вариант */ } БИТЫ не прочитали. Код size_t i; unsigned char some_value;
for (i=0; i<sizeof(code)/sizeof(code[0]); i++) { some_value = code[i]; // some_value = *(code + i); /* альтернативный вариант */ for(j=0;j<8;j++) push_bit( (code[i]&(1<<j))?1:0 ) }
|
|
|
|
|
Dec 26 2010, 12:35
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Код size_t i; -а что это? Компилятор CVAVR ругается на это.
|
|
|
|
|
Dec 26 2010, 13:02
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Пробую в Протеусе, матрица на 1 букву 8х8 светодиодов, вот с этим кодом горят все светодиоды,что то не то. Код unsigned char counter;
unsigned char code[]={0x38}; int i; unsigned char some_value;
DDRD=0x0F;
RESET=1; //линия сброса отключена for (i=0; i<sizeof(code)/sizeof(code[0]); i++) { some_value = code[i]; for (counter = 0; counter < 64; counter++){ // цикл DS = some_value; //записываем в линию данных //Дергаем ногой чтоб пропихнуть бит в регистр SH_CP = 1; SH_CP = 0; } //Дергаем ногой и защёлкиваем данные ST_CP = 1; ST_CP = 0; }
|
|
|
|
|
Dec 26 2010, 13:16
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено for(j=0;j<8;j++) push_bit( (code[i]&(1<<j))?1:0 )
|
|
|
|
|
Dec 26 2010, 13:35
|

Пользователь забанен
    
Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492

|
Цитата(Xenia @ Dec 26 2010, 21:36)  .. если массив у вас такой короткий.  ..Тот задумчивый и кроткий, У кого массив короткий. Нет сомнений за душой, У кого массив большой.
--------------------
It's me
|
|
|
|
|
Dec 26 2010, 13:45
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Юмор я понимаю, но мне проблему решить..
|
|
|
|
|
Dec 26 2010, 13:50
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(мега16 @ Dec 26 2010, 18:16)  Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено for(j=0;j<8;j++) push_bit( (code[i]&(1<<j))?1:0 ) push_bit - функция которую. вам нужно написать что-то вроде static void push_bit(char in) { strob = 0; //сигнал строба в 0 data_out = in; // BIT (1 нога процессора) должна опустится в 0 если на входе 0. Или подняться в 1, если на входе функции не 0. strob = 1; // по фронту строба сдвигули бит дальше. } Про оператор (condition)? val_for_true:val_for_false посмотрите в книжке про С. Я не помню как оно называется. Цитата(мега16 @ Dec 26 2010, 18:45)  Юмор я понимаю, но мне проблему решить.. Лучше решите проблему как сделать ее дешевле в Китае.
|
|
|
|
|
Dec 26 2010, 14:04
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Да уж,это слишком сложно для меня
|
|
|
|
|
Dec 26 2010, 14:12
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Пойти изучать Баском АВР чтоли, все таки для себя самому сделать охота..
|
|
|
|
|
Dec 26 2010, 14:23
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею. На JAVA для АВР компилятор есть чтоли?
|
|
|
|
|
Dec 26 2010, 14:31
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(мега16 @ Dec 26 2010, 19:23)  Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею. Все просто. (code[i]&(1<<j))?1:0 Разберем. code[i] Это просто берем значение с индексом i из массива (вектора) code. (1<<j) Напишите прогу (для ПС) for (int i=0;i<10;i++) printf ( " i= %i 1<<i= %i\n" i, (1<<i)); Полученные 10 значений переведите в бинарную форму из десятичной. Потом сами догадаетесь что значит 1<<i Ну а & просто http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%86%D0%B8%D1%8FВ С, переменная истинна, если хоть один бит в ней не равен 0. Цитата На JAVA для АВР компилятор есть чтоли? На java можно писать для более хорошо оплачиваемых вещей, кроме как AVR.
|
|
|
|
|
Dec 26 2010, 14:56
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Цитата Приведите код который у вас выводит байт в порт Код for (counter = 0; counter < 64; counter++){ // цикл DS = 1; //записываем в линию данных 1 //Дергаем ногой чтоб пропихнуть бит в регистр-отправляем через порт на сдвиговые регисты SH_CP = 1; SH_CP = 0; } //Дергаем ногой и защёлкиваем данные ST_CP = 1; ST_CP = 0; -отправляются 64 бита и горят все светодиоды Ах да,вы про байт,я про бит
Сообщение отредактировал мега16 - Dec 26 2010, 14:36
|
|
|
|
|
Dec 26 2010, 15:01
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(kurtis @ Dec 26 2010, 19:57)  Код #include <limits.h>
typedef unsigned char my_type;
my_type code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C};
int main() { unsigned int i, j;
DDRD = 0x0F; RESET = 1;
for (i=0; i<sizeof(code)/sizeof(code[0]); i++) { for (j=0; j<(sizeof(my_type)*CHAR_BIT); j++) { if (code[i] & j) { DS = 1; } else { DS = 0; } SH_CP = 1; SH_CP = 0; }
}
ST_CP = 1; ST_CP = 0;
return 0; } Это чё?
|
|
|
|
|
Dec 26 2010, 15:28
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
ВОТ СПАСИБО- это работает !
|
|
|
|
|
Dec 28 2010, 02:45
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Блин,работает,но неправильно вытаскивает байты.
|
|
|
|
|
Dec 28 2010, 03:59
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(kurtis @ Dec 26 2010, 22:57)  Код for (i=0; i<sizeof(code)/sizeof(code[0]); i++) { for (j=0; j<(sizeof(my_type)*CHAR_BIT); j++) { if (code[i] & j) { В последней строчке надо Код if (code[i] & (1 << j)) {
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Dec 28 2010, 07:03
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Почему же так? Код my_type code[]={11111111,00000000,11110000,11100111};
|
|
|
|
|
Dec 28 2010, 07:19
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(мега16 @ Dec 28 2010, 12:03)  Почему же так? Код my_type code[]={11111111,00000000,11110000,11100111};  11110000 это десятичное число. И причем my_type должно быть 32 бита. Лучше сделайте себе файлик, #define BIN0000_0000 0x00 #define BIN0000_0001 0x01 #define BIN0000_0010 0x02 #define BIN0000_0011 0x03 и инклюдьте его туда где вам нужно что-то в бинарном виде рисовать.
|
|
|
|
|
Dec 28 2010, 12:58
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Ну все ясно,работает правильно,вот в интернете шрифт нашел-попробовал,буква "А"-отражается нормально,правда повернуто-ну это понятно-шрифт для бегущего луча-т.е. для динамической индикации,я хочу собрать схему со статической.Главное-нормально работает код,все равно самому шрифт сделать придется,потому что 8 рядов светодиодов мало,хочу 16 сделать. Вот пример буквы "А"- Код my_type code[]={0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00};  Спасибо большое всем.
Сообщение отредактировал мега16 - Dec 28 2010, 23:30
|
|
|
|
|
Jan 5 2011, 08:47
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Продолжаю тему. Решил так организовать вывод символов на табло- для каждого символа функция показанная выше, символы ,какие надо вывести, записываю в массив(очень желательно в еепром,так как туда можно будет потом писать снаружи через усарт), вытаскиваю из массива символы и подставляю функции,соответствующие символам. Если так- Код char mass[]={"a,b,c"}; -все нормально выводит, а если- Код eeprom char mass[]={"a,b,c"}; -то ничего не происходит, не могу понять.. Вот такой код- Код void read_stroka(){unsigned int i; for(i=0; i<sizeof(mass); i++){ switch(mass[i]){ case 'a': cifra0(); break; case 'b': cifra1(); break; case 'c': cifra2(); break; } } }
Сообщение отредактировал мега16 - Jan 5 2011, 08:50
|
|
|
|
|
Jan 5 2011, 08:53
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Хм, а попонятнее можно,как же мне быть?
|
|
|
|
|
Jan 6 2011, 12:33
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Вообще то CVAVR работает с EEPROM прозрачно- Код eeprom chap x; x=1; y=x; -это нормально работает, а вот с массивом- нет, или Протеус это не понимает, на железе не проверял.
|
|
|
|
|
Jan 8 2011, 02:36
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
CVAVR на uint8_t ругается.
|
|
|
|
|
Jan 8 2011, 08:45
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Ругается все равно.
|
|
|
|
|
Jan 8 2011, 14:21
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
На другом форуме посоветовали- надо объявить массив eeprom глобальным, с необходимым размером, без инициализации. В main присвоить нужные значения элементам. И так работает.
|
|
|
|
|
Jan 9 2011, 16:35
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Проблема решена уже.
|
|
|
|
|
Jan 24 2011, 05:20
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Упростил так- Код void bits(){unsigned int i,j; for (i=0; i<32; i++) { for (j=0; j<8; j++) { if (mass[i] & (1 << j)) {DS = 1;} //записываем в линию данных else {DS = 0;} }}} Работать то работает, но хочется конкретно понять, а именно вот эту часть- Код if (mass[i] & (1 << j)) Если на словах сказать-получается так- Если первый байт(к примеру) равен 1 и следующий бит равен 1, то...,но как может быть байт равен единице,там же 8 битов. И вообще, можно ли вытащить биты без двух циклов, у меня там всегда 32 байта по 8 битов, так что можно так- Код for (i=0; i<256; i++) { или не можно? Я так по всякому пробовал-но не получается.
|
|
|
|
|
Jan 24 2011, 05:49
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Код code[i]&(1<<j))?1:0 Очень понравилось. Прям как типичный индусский код: Код if(x == true) return true; else return false; Я уж не говорю о том, что многоразрядные сдвиги в AVR отсутствуют и потому выражения типа 1<<j кодируются крайне неэффективно. Впрочем, для тех, кто начинал с Паскаля, это простительно, их мозг безнадежно изуродован Паскалем и им просто не может прийти в голову написать так: Код for (j = 1; j != 0; j <<= 1) { if (mass[i] & j)
Сообщение отредактировал 777777 - Jan 24 2011, 05:56
|
|
|
|
|
Jan 24 2011, 05:58
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Если первый байт(к примеру) равен 1 и следующий бит равен 1, то...,но как может быть байт равен единице,там же 8 битов ну так операция & же, а ещё сдвиг 1 влево на j бит (1 << j). Дальше сами.... По Вашему посту видно, что Вы абсолютно не поняли смысл этого Код if (mass[i] & (1 << j)) Цитата Я уж не говорю о том, что многоразрядные сдвиги в AVR отсутствуют и потому выражения типа 1<<j кодируются крайне неэффективно. Тогда что же, 8 раз & с заранее заготовленными масками? типа if( mass[j] & masks[j] ).. правда 8 байт памяти коту под хвост... а на асме что-то типа test bit есть? а интринсик? может вообще тогда можно красиво сделать..
--------------------
The truth is out there...
|
|
|
|
|
Jan 24 2011, 06:30
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Да я паскаль вообще не знаю,вообще я охриненно начинающий любитель,никто мне не преподавал ничего,вот сижу и учусь в свободное время,это же не запрещается.
|
|
|
|
|
Jan 24 2011, 07:57
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893

|
Ну так-можно ли вытаскивать байты в одном цикле for ?
|
|
|
|
|
Jan 24 2011, 09:45
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
У меня была проблема в другом-сдвигать сдвигать цепочку в 160 байт 4 строки (5000 диодов)! Тут каждый такт на счету, иначе даже на 16Мгц лажа. Пришлось ассм-вставку делать CODE #asm OUT 0x15,R19 ; выводим SBI 0x18,0 ; SBI 0x12,5 ; защелкиваем CBI 0x18,0 ; CBI 0x12,5 ; ROR R19 ; сдвигаем #endasm ,выделяя для данных весь порт (благо дофига свободных было)-сам вывод в PORTx.0, и потом 8 раз include  #include <shift.asm> #include <shift.asm> ........
|
|
|
|
|
Jan 24 2011, 13:11
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(GetSmart @ Jan 24 2011, 11:46)  Это же ветка для начинающих. Поэтому им и дают советы Цитата(GetSmart @ Jan 24 2011, 11:46)  И Паскаль неплохой язык. Уймитесь, люди. Только программистов приучает к дубовости и неповоротливости мышления и в результате им даже в голову не может прийти, что переменная цикла совсем не обязательно должна увеличиваться от нуля до N, а может делать что угодно, вплоть до того, что ее вообще может не быть.
|
|
|
|
|
Jan 24 2011, 16:36
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(777777 @ Jan 24 2011, 18:11)  Только программистов приучает к дубовости и неповоротливости мышления и в результате им даже в голову не может прийти, что переменная цикла совсем не обязательно должна увеличиваться от нуля до N Да успокойтесь уже. Все уже поняли, что вы -- Настоящий Разработчик, вы умеете ставить резистор последовательно со светодиодами, знаете, как надо развести АЦП, чтоб не требовалась фильтрация, и пишете на Си. А то, что критикуемого вами паскаля вы не знаете, и конструктива в ваших сообщениях - кот наплакал, -- это ничего, главное что вы побуждаете начинающих расти, не даёте им сбиться с пути. Продолжайте в том же духе, я мысленно вам аплодирую.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jan 24 2011, 16:57
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Настала пора инквизиции? :-) Цитата Товарищ Сталин был большой любитель кино. И лично смотрел каждый новый фильм перед тем как пустить фильм в прокат. Однажды ему показывают новую картину про то как на одной из совецких строек орудовал шпион-диверсант... Сталин посмотрел кино и говорит: "С точки зрения идеологии фильм не выдерживает критики... поэтому надо расстрелять режиссера, сценариста, всех актеров, занятых в съемке, всю массовку и весь киноперсонал..." Главный режиссер с бледным как простыня лицом: "Товарищ Сталин, может быть внести изменения в сценарий??? Допустим, шпион проникается духом совецких рабочих, перевоспитывается и становится передовиком???" Сталин подумал, затянулся трубкой и говорит: "... ну или так..." Кто за то чтобы расстрелять 7777777 на месте?
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jan 24 2011, 17:19
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
... Кен Томпсон признал следующее - затем Деннис и Брайан разработали по-настоящему извращенный диалект Паскаля, назвав его "A". Когда мы обнаружили, что другие действительно пытаются писать программы на A, мы быстро добавили еще парочку хитрых примочек, создав B, BCPL, и, наконец, Си. Мы остановились, добившись успешной компиляции следующего: for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2); ...  PS.Шютка здесь http://www.fssr.ru/hz.php?name=News&fi...le&sid=1043
Сообщение отредактировал OlegNZH - Jan 24 2011, 17:27
|
|
|
|
|
Jan 24 2011, 17:27
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(AHTOXA @ Jan 24 2011, 19:36)  Да успокойтесь уже. Все уже поняли, что вы -- Настоящий Разработчик, вы умеете ставить резистор последовательно со светодиодами, знаете, как надо развести АЦП, чтоб не требовалась фильтрация, и пишете на Си. А то, что критикуемого вами паскаля вы не знаете, и конструктива в ваших сообщениях - кот наплакал, -- это ничего, главное что вы побуждаете начинающих расти, не даёте им сбиться с пути. Продолжайте в том же духе, я мысленно вам аплодирую. Что с вами? У вас butthurt? Вы паскалист и шокированы, что на Си можно написать Код for (j = 1; j != 0; j <<= 1) { if (mass[i] & j) Я могу только посочувствовать...
|
|
|
|
|
Jan 24 2011, 17:43
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(777777 @ Jan 24 2011, 22:27)  Я могу только посочувствовать... Себе посочувствуйте.. Паскаль придумал Профессионал с большой буквы в 100! раз продвинутее вас. Идите нервно курить в сторонке  Кстати, когда Паскаль был придуман, никакого Си не существовало в помине.
Сообщение отредактировал GetSmart - Jan 24 2011, 17:47
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jan 24 2011, 17:44
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(777777 @ Jan 24 2011, 22:27)  Я могу только посочувствовать... И это говорит человек, который не знает, что такое 1l в записи (1l<<15)? Сочувствие здесь из нас двоих как раз вызываете вы. Видно, что человек нахватался понемногу отовсюду, и сразу же возомнил себя крутым спецом. От этого и чрезмерная категоричность суждений, и неадекватные оценки, и поспешные выводы. Надеюсь, что это временно, и когда-нибудь вы поймёте, как глупо себя вели. И да, просто JFYI: циклы в паскале не обязательно начинаются с нуля. Кроме того, битовой маске совершенно не обязательно быть переменной цикла: Код var j, k : byte; begin j := 1; for k := 1 to 8 do begin if mass[i] and j then do_something; j := j shl 1; end; end;
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jan 25 2011, 05:53
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(AHTOXA @ Jan 24 2011, 20:44)  И это говорит человек, который не знает, что такое 1l в записи (1l<<15)?  Да, представь себе, я в таких случаях пишу 1L чтобы те, кто будут читать мою программу, не спутали ее с вертикальной чертой и не думали, что означает этот синтаксис. Мелочь, конечно, но... Цитата(AHTOXA @ Jan 24 2011, 20:44)  И да, просто JFYI: циклы в паскале не обязательно начинаются с нуля. Кроме того, битовой маске совершенно не обязательно быть переменной цикла: Это называется "перевернуть с ног на голову". Си как раз тем и лучше паскаля, что там битовая маска может быть переменной цикла! А паскалю это недоступно - приходится водит еще одну абсолютно ненужную переменную. Да, можете считать это чем угодно, но могу еще раз повторить: паскаль - ненавижу за его дубовость и неповоротливость и будь моя воля, я бы запретил изучение программирования по паскалю.
|
|
|
|
|
Jan 25 2011, 05:54
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(GetSmart @ Jan 24 2011, 21:43)  Паскаль придумал Профессионал с большой буквы в 100! раз продвинутее вас. Идите нервно курить в сторонке  Кстати, когда Паскаль был придуман, никакого Си не существовало в помине. Ну, во-первых, Си придумали тоже отнюдь не дилетанты. Во-вторых, Паскаль и Си появились примерно в одно и то же время. И в-третьих, цели создания языков были разные. Если Паскаль был создан в целях обучения программированию, то Си - для упрощения создания системного программного обеспечения (ОС, компиляторов и т.д. и т.п.). Наконец, создатели обоих языков являлись профессионалами в своих областях. У каждого из языков есть свои достоинства и свои недостатки. Так что спорить тут не о чем. Или нет?
|
|
|
|
|
Jan 25 2011, 06:00
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(GetSmart @ Jan 24 2011, 20:43)  Кстати, когда Паскаль был придуман, никакого Си не существовало в помине. Алгол был придуман еще раньше - и что из этого? Только то, что паскаль оказался на помойке позже алгола. Цитата(GetSmart @ Jan 24 2011, 20:43)  Паскаль придумал Профессионал с большой буквы в 100! раз продвинутее вас. Идите нервно курить в сторонке  Этот профессионал - типичный лузер, который, понимая, что K&R обошли его на порядок, тем не менее дергается и пытается что-то доказать, хотя постоянно остается догоняющим.
|
|
|
|
|
Jan 25 2011, 06:07
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(AHTOXA @ Jan 24 2011, 21:44)  И это говорит человек, который не знает, что такое 1l в записи (1l<<15)? Сочувствие здесь из нас двоих как раз вызываете вы. Видно, что человек нахватался понемногу отовсюду, и сразу же возомнил себя крутым спецом. От этого и чрезмерная категоричность суждений, и неадекватные оценки, и поспешные выводы. Надеюсь, что это временно, и когда-нибудь вы поймёте, как глупо себя вели. И да, просто JFYI: циклы в паскале не обязательно начинаются с нуля. Кроме того, битовой маске совершенно не обязательно быть переменной цикла: Код var j, k : byte; begin j := 1; for k := 1 to 8 do begin if mass[i] and j then do_something; j := j shl 1; end; end; А как данный код соотносится с выделением бита? Кстати, оператор shl в стандартном Паскале вообще отсутствовал.
|
|
|
|
|
Jan 25 2011, 06:07
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(_Bill @ Jan 25 2011, 08:54)  Ну, во-первых, Си придумали тоже отнюдь не дилетанты. Кто бы спорил. Цитата(_Bill @ Jan 25 2011, 08:54)  И в-третьих, цели создания языков были разные. Если Паскаль был создан в целях обучения программированию, то Си - для упрощения создания системного программного обеспечения (ОС, компиляторов и т.д. и т.п.). Ошибаетесь. Поначалу это были конкурирующие языки с одним и тем же назначением. Но после того, как стало ясно, что паскаль сливает по всем параметрам, Вирт, чтобы не потерять рынок, начал заливать, что он, мол, с самого начала создавал его для обучения. На самом же деле для обучения он как раз и не подходит, так как отучает студета от гибкости, заталкивает его в узкие рамки и поэтому когда он переходит на Си, он просто не знает о том, что тех рамок уже нет, что можно сделать быстрее и проще. Цитата(_Bill @ Jan 25 2011, 08:54)  У каждого из языков есть свои достоинства и свои недостатки. Так что спорить тут не о чем. Или нет? С таким же успехом можно доказываль, что у Мерседеса и Жигулей есть свои достоинства и свои недостатки и спорить тут не о чем.
|
|
|
|
|
Jan 25 2011, 06:10
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(777777 @ Jan 25 2011, 10:53)  Мелочь, конечно, но... Да-да, я в курсе. "Крутой Профессионал С Большой Буквы ™" Цитата Это называется "перевернуть с ног на голову". Си как раз тем и лучше паскаля, что там битовая маска может быть переменной цикла! А паскалю это недоступно - приходится водит еще одну абсолютно ненужную переменную. Это называется - "по теме (помочь новичку) было сказать нечего, зато умею ненавидеть паскаль". А ведь на самом деле непонимание было совершенно не связано с паскалем (как это потом явно подтвердил сам автор темы). Но вы продолжили поносить паскаль... Цитата Да, можете считать это чем угодно, но могу еще раз повторить: паскаль - ненавижу за его дубовость и неповоротливость и будь моя воля, я бы запретил изучение программирования по паскалю. Вы уже показали, что не знакомы с предметом своей ненависти, зачем же продолжать позориться? Ведь с каждым вашим постом становится всё более очевидным, что вы поёте с чужих слов, в надежде показаться "Профессионалом С Большой Буквы". Поверьте, это тщетные старания, настоящего профессионала видно не по его крутым суждениям, а по его практическим знаниям. А этого у вас, увы, пока не замечено. Цитата(_Bill @ Jan 25 2011, 10:54)  Так что спорить тут не о чем. Или нет? Вообще-то сравнение шло не "автор паскаля vs авторы си", а "777777 vs автор паскаля". Как думаете, кто более профессионален?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jan 25 2011, 06:26
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(777777 @ Jan 25 2011, 10:07)  Кто бы спорил.
Поначалу это были конкурирующие языки с одним и тем же назначением. Но после того, как стало ясно, что паскаль сливает по всем параметрам, Вирт, чтобы не потерять рынок, начал заливать, что он, мол, с самого начала создавал его для обучения. На самом же деле для обучения он как раз и не подходит, так как отучает студета от гибкости, заталкивает его в узкие рамки и поэтому когда он переходит на Си, он просто не знает о том, что тех рамок уже нет, что можно сделать быстрее и проще. Совсем нет. Когда Вирт придумал Паскаль и стал его использовать в своей преподавательской деятельности, для языка и компилятора не существовало. Компилятор с Паскаля появился позже, когда возникла необходимость в реально работающих программах. Если говорить о целях, то Паскаль являлся сильно типизированным языком, со строгой проверкой типов. Это позволяло избегать двусмысленностей в конструкциях. Си же напротив, многое возлагал на самих программистов, изначально в Си отсутствовала проверка типов. При этом многие конструкции языка были ориентированы на упрощение кодирования и генерирования более эффективного кода. PS: Интересно отметить, что первый компилятор с Паскаля появился на "больших" машинах типа CDC и IBM. А первый компилятор с Си был написан для мини-ЭВМ типа Interdata, PDP. Это тоже о многом говорит.
|
|
|
|
|
Jan 25 2011, 06:29
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(777777 @ Jan 25 2011, 11:14)  Нечего? То есть писать (1<<j) - это по-вашему нормально? Пусть компилятор генерирует цикл сдвигающий единицу, ничего страшного? Да, это нормально. Для начинающего вполне допустимо жертвовать производительностью в пользу наглядности. Сначала надо понять, как это работает вообще, а уже потом заниматься оптимизацией. Цитата(777777 @ Jan 25 2011, 11:14)  Вообще-то сравнение шло "паскаль" vs "си", а все осталное - ваши фантазии и попытки перехода на личности. Вообще-то речь шла вот об этой цитате: Цитата(GetSmart @ Jan 24 2011, 22:43)  Себе посочувствуйте.. Паскаль придумал Профессионал с большой буквы в 100! раз продвинутее вас. Идите нервно курить в сторонке  и в ней речь идёт именно о сравнении вас и автора паскаля.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jan 25 2011, 06:45
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(777777 @ Jan 25 2011, 11:14)  Вообще-то сравнение шло "паскаль" vs "си", а все осталное - ваши фантазии и попытки перехода на личности. Чтобы открыто критиковать, а точнее просто срать на Паскаль, нужно сперва придумать что-то сравнимо значимое. А то это похоже это на лай дворняжки. Лично вы - никто в сравнении с теми, кто придумывал и Паскаль, ну и Си в придачу. А уж периодически читая чушь, которую вы пишете в других ветках мне захотелось хотя бы в этой ветке высказаться о вашем уровне суждений. Цитата(_Bill @ Jan 25 2011, 10:54)  Так что спорить тут не о чем. Или нет? Наш/мой спор ведь не об этом. Так что есть.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jan 25 2011, 06:47
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(AHTOXA @ Jan 25 2011, 09:29)  Вообще-то речь шла вот об этой цитате: Жаль что это не моя цитата Цитата(AHTOXA @ Jan 25 2011, 09:29)  и в ней речь идёт именно о сравнении вас и автора паскаля. Вот именно - речь идет о переходе на личности
|
|
|
|
|
Jan 25 2011, 06:56
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(GetSmart @ Jan 25 2011, 09:45)  Чтобы открыто критиковать, а точнее просто срать на Паскаль, нужно сперва придумать что-то сравнимо значимое. Забавное суждение. Значит вы пользуетесь плохими инструментами, покупаете бракованные микросхемы и для разводки плат выбираете худшую программу потому что сами даже такого не можете сделать? Я-то стараюсь выбрать лучшее, даже когда сам не могу сделать и худшее. Цитата(GetSmart @ Jan 25 2011, 09:45)  А уж периодически читая чушь, которую вы пишете в других ветках мне захотелось хотя бы в этой ветке высказаться о вашем уровне суждений. А надо было там, где эта "чушь" была. А сейчас это действительно выглядит как лай дворняжки.
|
|
|
|
|
Jan 25 2011, 07:05
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(777777 @ Jan 25 2011, 11:56)  А надо было там, где эта "чушь" была. А сейчас это действительно выглядит как лай дворняжки. Всё нормально. Здесь она была самая большая. Цитата(777777 @ Jan 25 2011, 11:56)  Забавное суждение. Значит вы пользуетесь плохими инструментами, Дальше этой дури читать смысла нет. С самого начала Паскаль активно использовался в обучении программированию. И тут приходит супер-мега-профи 777777 и говорит всем, что они недоумки. Если это мега-открытие, до которого не додумались тысячи-десятки/сотни людей, то за это полюбому надо вручить Нобеля
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jan 25 2011, 18:15
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Код (1 shl j) компилер обязан привести в нормальный вид на авр тоже? Ну не знаю...Мне кажется наоборот - не приведут в нормальный вид за редким исключением....
--------------------
The truth is out there...
|
|
|
|
|
Jan 25 2011, 18:21
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(sigmaN @ Jan 25 2011, 22:15)  на авр тоже? Ну не знаю...Мне кажется наоборот - не приведут в нормальный вид за редким исключением.... И на AVR тоже. Просто оператор shl в Паскале не является стандартным. Это - расширение.
|
|
|
|
|
Jan 26 2011, 07:11
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(sigmaN @ Jan 25 2011, 22:15)  на авр тоже? Ну не знаю...Мне кажется наоборот - не приведут в нормальный вид за редким исключением.... Причем тут целевая машина? Посмотрите, например, PMP pascal - очень прилично для пиков. Есть где-то для армоводов - зачат, но до половой зрелости как до луны пешком. Кстати, Керниган когда писал свое "за что я не люблю паскаль" - в основном говорил о негибком FOR, и о том, что внутри блока низзя объявлять переменные, ... а, ну и о том, что нет статических переменных. Извините за кривой почерк оффтоп
|
|
|
|
|
Jan 26 2011, 12:32
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(sigmaN @ Jan 26 2011, 12:54)  а тут получается надо сдвигать более чем на один бит. Все, я понял. Вы просто вырвали из приведенного контекста (1 shl j), в то время как я привел цикл, для того, чтобы сказать, что компилер увидит, что переменная цикла "монотонно" возрастает и в выражении сдвига кроме нее других переменных нету, и просто заменит на операцию сдвига на 1 разряд в каждой итерации цикла. Вот я и говорил, что в Winavr такое уже есть, по факту гуанокод оптимизировался именно так.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|