В C есть цикл while, а цикл (почти) эквивалентен повторением до цикла, но между ними существует небольшая разница, в то время как обе структуры будет итерации по крайней мере один раз и проверить, нужно ли снова выполнять цикл только в конце, в pascal вы записываете условие, которое необходимо выполнить для завершения цикла (REPEAT UNTIL something) в C вы пишете условие, которое необходимо выполнить продолжить цикл (DO WHILE something). Есть ли причина, почему есть эта разница или это просто произвольное решение?Повторение Паскаля ... до тех пор, пока против C не ... пока
ответ
Я всегда нашел UNTIL петлями назад, но это может быть просто из-за того, что я на фоне C. Есть такие современные языки, как Perl, которые предоставляют оба варианта, но нет особого преимущества для одного из них.
Я лично также считаю, что версия C имеет больше смысла, и я исхожу из фона паскаля, поэтому я обнаружил, что написал неправильное условие в C, как только начал изучать C. – Bob
Я не уверен в исторических влияниях, но, на мой взгляд, C более последователен в том смысле, что if
s требуется условие true для кода для запуска, также как и while
s и do while
s.
и 'for' , в этом отношении. – caf
Нет фундаментальной разницы вообще, и нет преимущества для одного над другим. Это просто «синтаксический сахар» - это изменение синтаксиса языка, которое никак не меняет его поведение. Некоторые люди находят «повторять до тех пор, пока» легче концептуализировать, в то время как другие находят «повторять пока» легче.
Если в C, вы столкнулись с ситуацией, когда «до» не то, что это желание, вы всегда можете просто свести на нет условие:
do {
excitingThings();
} while (!endOfTheWorld());
Это просто произвольное решение. На некоторых языках есть и то, и другое. Оператор QBASIC/VB DO...LOOP поддерживает все четыре комбинации предварительного теста/posttest и WHILE/UNTIL.
Не было никакого «решения», которое каким-либо образом связывает поведение цикла Pascal repeat/until с поведением цикла C do/while, ни преднамеренным, ни произвольным. Это просто две совершенно не связанные проблемы.
В C заявление
while(some_condition);
может быть либо «ничего не делать» петли или, возможно, отделились от «делать ... в то время как» цикл.
do {
statement;
statement;
statement;
lots more statements;
}
while(some_condition);
Использование другого ключевого слова - до - позволяет избежать этой возможной неверной интерпретации.
Не такая проблема в эти дни, когда все включаются во все предупреждения компилятора и прислушиваются к ним, не так ли? Тем не менее, я подозреваю, что большинство программистов-программистов Ветера захотели - в какой-то момент, - что C использовал «до» в этом случае.
Я использую 'while (cond) continue;', чтобы было ясно, что тело цикла пусто. –
@Loadmaster - хорошая идея - я мог бы принять это для своего собственного кода. – Dipstick
@ChrisHarris: Да, пустое выражение (голодная точка с запятой) для тела цикла - это ошибка, ожидающая своего появления. Плохой стиль кода. –
Синтаксис C не требует дополнительных ключевых слов.
В C два ключевых слова do
и while
работают для двух видов петель. Паскалю требуется четыре ключевых слова: while
, do
, repeat
и until
.
Вам понадобится только 1 ключевое слово. 'while' для предварительного условия, либо' repeat', либо 'do' и' until' для postcondition –
С другой стороны, C перерабатывает ключевые слова, что потенциально приводит к путанице. См. Сообщение ChrisHarris –
Проект Pascal был частично мотивирован работой по структурированному программированию 1960-х годов, включая новаторскую работу Эдсгера Дейкстры A Discipline of Programming. Дейкстра (тот же человек, который считал вредным) изобрел методы для создания программ, которые были правильными по конструкции.Эти методы включают в себя способы записи петель, которые фокусируются на постулате , установленном при завершении цикла. Создавая форму repeat... until
, Вирт был вдохновлен Дейкстра, чтобы сделать условие завершения, а не его дополнение, явным в коде.
Я всегда восхищался языки, как Smalltalk и иконы, которые предлагают две синтаксических форм, что позволяет программисту выражать свое намерение ясно, без того, чтобы полагаться на легко пропущенный операторе комплемента. (В значке формы while e1 do e2
и until e1 do e2
; в Smalltalk они block1 whileTrue: block2
и block1 whileFalse: block2
.) С моей точки зрения ни C, ни Pascal не являются полностью построенным, ортогональным дизайном.
Итак, возьмите perl, у него есть даже дополнение 'if', которое является' if', и вы можете разместить их перед заявлением или после него. Но ортогональность perl на самом деле не является преимуществом. –
+1, при условии, что обе формы на языке допускают более читаемый код. – Artelius
- 1. До тех пор, пока цикл не выйдет
- 2. Рубиновое сканирование/до тех пор, пока EOF
- 3. До тех пор, пока Onkey {RIGHT}
- 4. До тех пор, пока в Windows Powershell
- 5. Count элемент до тех пор, пока смещение
- 6. Итерация до тех пор, пока не будет нажата клавиша C
- 7. C# WPF Привязки не обновляются до тех пор, пока MouseOut
- 8. C# Сохранять потоки до тех пор, пока не произойдет событие
- 9. цикл до тех пор, пока капитал не удвоится C#
- 10. Как прокрутить алфавит до тех пор, пока не найдет слово
- 11. До тех пор, пока петля не проверит ячейку в VBA?
- 12. JButton не появляется до тех пор, пока мышь над
- 13. JVM не выходит до тех пор, пока поток не завершится
- 14. Угловая не найдена до тех пор, пока она не понадобится?
- 15. UIPickerView не появляется до тех пор, пока не произойдет прикосновение
- 16. ProgressDialog не отображается до тех пор, пока AsyncTask не завершится
- 17. Клиент GCDAsyncSocket не читает до тех пор, пока не напишет
- 18. Страница не отображается до тех пор, пока BackgroundWorker.RunWorkerAsync не завершит
- 19. Javascript не работает до тех пор, пока не обновится
- 20. onNewIntent() не срабатывает до тех пор, пока телефон не проснется
- 21. Не нажимайте до тех пор, пока не будет отпущена кнопка
- 22. jQuery scrollTop не обновляется до тех пор, пока не прокрутится
- 23. События не работают до тех пор, пока видео не буферизуется
- 24. Метод ожидания до тех пор, пока не будет зафиксировано событие
- 25. Приостановить программу до тех пор, пока не будет нажата клавиша
- 26. делать до тех пор, пока раздел не будет повторяться
- 27. R Функция повтора до тех пор, пока условие не встретилось
- 28. Windows: скопируйте файл до тех пор, пока файл не существует
- 29. Fetch Row до тех пор, пока количество не будет выполнено
- 30. QGraphicsScene mouseMoveEvent не работает до тех пор, пока QGraphicsView wheelEvent
Вот несколько запасных, чтобы скопировать и вставить в ваш код: !!!!!!!!!!!! –
Hellfreezeover: = false; REPEAT UNTIL Hellfreezeover –