HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #31  
Старый 30.12.2009, 18:46
jawbreaker
Участник форума
Регистрация: 07.07.2008
Сообщений: 161
С нами: 9391926

Репутация: 234
По умолчанию

Дружно учим C#:
PHP код:
checked
{
    for (
byte b 0<= 255b++)
    
Console.WriteLine(b);


Последний раз редактировалось jawbreaker; 30.12.2009 в 18:48..
 
Ответить с цитированием

  #32  
Старый 30.12.2009, 19:17
Retimiled
Banned
Регистрация: 24.12.2009
Сообщений: 141
С нами: 8622379

Репутация: 45
По умолчанию

каким образом Algol вывел логическую цепочку от целеноправленного введения for в бесконечны цикл.... до отсутствия реализации for как цельной структуры а не цикла while не понятно (для программиста компилятора это узкоспециализированная задача и реализовывать он ее может в соответствии с быстродействием или оптимизацией памяти, никто же не заставляет его использовать реализацию while)

... по вашей логике все в этом мире сведется к циклу loop (ассемблера) а все остальное от лукавого??????

цикл for в примере algol-а не на миг не ушел от описния Керниган Ричи....(не делали же списиально списифического описания for для шарпа) дак что же задавать вопрос о том "..а почему он не разворачивает конфеты?"

Вопросы переполнения переменных это азы Си 8)))
Школьники многих школ .... где преподают Си вместо Паскаля ВАМ ПОДТВЕРДЯТ ЭТО

для С# не придумывали новый синтаксис ни для 'for' ни для if ни для while или until, используется стандартные функции подходящие под описание языка Си и мне программировать совершенно без разницы на TurboC MSVC Net или шарпе без разницы что касается основных структур языка а если я хочу переполнять .... ПОЧЕМУ РАЗРАБОТЧИК КОМПИЛЯТОРА должен запретить мне в соответствии с синтаксисом переполнять переменную чтоб превратить ее в ноль?

такой прием я видел дважды один раз в реализаци победителя конференции AES - блочном шифровании 2fish...

каждый можете сделать аналог for
и понять разницу
между
while(... ) {.....}
и do {....} while(....);
только тот кто использует for 8))) и сам знает как им пользоваться В СООТВЕТСВИИ С ОПИСАНИЕМ 8))!

Последний раз редактировалось Retimiled; 30.12.2009 в 20:03..
 
Ответить с цитированием

  #33  
Старый 30.12.2009, 22:36
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от Root-access  
Мне это напомнило такой код на с:
Код:
int a[10], i;
for(i=0;i<=10;i++) a[i]=0;
На старых компиляторах он уходил в бесконечный цикл.
Вот и задачка. А ну-ка скажите, почему это происходит?
Кстати, если чуть подправить код, программа и в новых компиляторах будет получаться вечная.
Память под a[] не выделяется?
 
Ответить с цитированием

  #34  
Старый 30.12.2009, 22:41
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от jawbreaker  
Дружно учим C#:
PHP код:
checked
{
    for (
byte b 0<= 255b++)
    
Console.WriteLine(b);

Это конечно здорово, но в подавляющем числе случаев - checked не используется, а описанное поведение является неожиданным для программиста.
 
Ответить с цитированием

  #35  
Старый 30.12.2009, 23:04
Root-access
Участник форума
Регистрация: 18.06.2008
Сообщений: 222
С нами: 9419426

Репутация: 648
По умолчанию

Цитата:
Сообщение от Algol  
Память под a[] не выделяется?

Почему же? Выделяется вполне...
 
Ответить с цитированием

  #36  
Старый 30.12.2009, 23:10
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от Retimiled  
каким образом Algol вывел логическую цепочку от целеноправленного введения for в бесконечны
.....
Из всего этого набора слов (отмечаешь наверное уже ) я так понял ты критикуешь мою фразу о том что "в си-подобных языках нет оператора for в чистом виде" ?
Могу объяснить более подробно, что и имел ввиду:
1) Цикл for в Си действительно органозован через while. И даже не столько в синтаксическом плане, сколько в логическом. На каждой итерации - проверяется некое условие, и выполняется некое действие. По сути - это while, просто синтаксически оформленный иначе. Но, если мы посмотрим на теорию программирования (безотносително к какому-либо языку), то смысл for - совсем другой. Смысл for - повторить свое тело заданное число раз. Причем некоторые языки дают даже более жесткое определение - повторение своего тела определенное и заданное наперед число раз. Именно такое поведение реализуется в Паскале (Школьники многих школ .... где преподают Паскаль вместо Си ВАМ ПОДТВЕРДЯТ ЭТО ). И это правильно, ибо это ближе к изначальному определению for. В Си же (как и во многих других вещах) решили не париться и сделали for через while.
А приведенный выше пример как раз и демонстрирует недостаток такого подхода. В Паскале же этот цикл работает без проблем. Он и не может не работать, ведь смысл конструкции for i:=0 to 255 do; в том, что i последовательно принимает значения от 0 до 255, и никаких i++ тут нет, поэтому и переполнения тут никакого быть не может в принципе. Конечно, где-то там внутри , в откомпилированном exe i++ где-то есть , но отсутсвие побочных эффектов, переполения нам гарантирует компилятор, и мы об этом не должны думать.
Надеюсь понятно изложил? Да и к тому же фразу о том, что в Си по факту нет for - придумал не я. Слышал давно очень, уже и не вспомню откуда

2) Касаемо C#. Да, сишарп по синтаксису близок к Си, но семантика и идеология языка - гораздо ближе к Паскалю, чем к Си. Именно поэтому я и написал что си-подобное поведение шарпа в данном случае не очень ожидаемо.
 
Ответить с цитированием

  #37  
Старый 30.12.2009, 23:12
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от Root-access  
Почему же? Выделяется вполне...
Я просто не пишу на Си, но мне казалось что под массив нужно явно выделить память. Нет ?
 
Ответить с цитированием

  #38  
Старый 30.12.2009, 23:20
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

память под а выделяется. тока она на стеке. а цикл идет <= 10, компиль видимо генерит так, что переменная i лежит за массивом(a[10] указывает на i). таким образом i при значении 10 затирается нулем, с помощью выхода за границы массива. видимо как то так

Цитата:
Фактически for это цикл while, для которого указано условие продолжения (b<=255) и некторый оператор, изменяющий b (b++).
а вот это бред. тогда уж скорее while - это for, у кторого не задан первый и последний параметр типа

Код:
for(; b < 255;){}

Последний раз редактировалось Ra$cal; 30.12.2009 в 23:24..
 
Ответить с цитированием

  #39  
Старый 30.12.2009, 23:23
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от Ra$cal  
память под а выделяется. тока она на стеке. а цикл идет <= 10, компиль видимо генерит так, что переменная i лежит за массивом(a[10] указывает на i). таким образом i при значении 10 затирается нулем, с помощью выхода за границы массива. видимо как то так
Ясно, ну здесь уже проблема с отсутствием контроля границ массива. В шарпе и паскале тут бы выпал эксепшен.
 
Ответить с цитированием

  #40  
Старый 30.12.2009, 23:37
Retimiled
Banned
Регистрация: 24.12.2009
Сообщений: 141
С нами: 8622379

Репутация: 45
По умолчанию

8)) ... ну еще раз повторюсь .... програмисты используют особенности работы for (в Си понимании) .... кароче ВСЕХ С НОВЫМ ГОДОМ !!
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПК как лаборатории для "выращивания" цифровой жизни b1oxa Мировые новости. Обсуждения. 0 05.10.2009 21:54
Sale of ICQ Hertz ICQ - Покупка, продажа 1 28.09.2009 04:27
Фразы о жизни novichok Болталка 10 15.07.2006 21:04



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.