Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Как создать свой сайт и заработать?" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование с нуля - это совсем просто! 26) Чулки, Фанта и структурное программирование Дейкстры
Информационный Канал Subscribe.Ru |
Программирование с нуля - это совсем просто!26) Чулки, Фанта и структурное программирование Дейкстры
Кстати, пожалуйста указывайте в своих письмах хотя бы имя.
С каждым вытаскиванием сочетание белых и черных чулок может быть любым (в пределах 20 штук каждого цвета)
Ответ на задачку о чулках:
В задаче по чулкам выводы такие:
a)lyubogo tsveta-3 raza Правильные ответы такие: 3, 22, 5, 7, 22, 24, 11, 26. Далее - присланные решения алгоритма расчета цены на Фанту. Сказать по правде, я сам не знаю, как она правильно решается :) Привожу все ответы, поэтому определите сами, верен ваш вариант или нет. Если кто-то сможет дать оценку правильности различным решениям, будет замечательно!
n = 5 ( k - m )
имеем следующее решение
Мне лично не очень нравится мое решение, т.к. получается простой перебор всех значений, но может быть, в этом есть какое-то «рациональное зерно»?
1. Имеются исходные данные: к – стоимость фанты и m – стоимость бутылки.
Значит,нам нужно декларировать переменные:
У меня огромная радость и невероятное облегчение. Я справилась с этой фантой, правда я не уверенна, что запись правильная,
но не суть. Главное я это сделала!!!!!!!! :-). А попозже Лена прислала и программу!
program Project1;
В задаче про друзей-любителей "Фанты" алгоритм такой:
Пришлось помучится над заданием, в общем, думаю, ответ будет такой: Что касается алгоритма, словесного написания инструкции. Тут, гляжу, вольности определенные наметились :) Некоторые начинают уж слишком общие вещи за один шаг выполнять. Ну типа задача "найти минимальное число из трех значений", и некоторые так "алгоритм" записывают:
1. Ввести три числа a, b, c. Надо комментировать, в чем ошибка? Самое важное. Хотя инструкция словесная, пользоваться в ней можно все равно ограниченным числом команд. Это: ввод и вывод значений, расчет формул, завершение работы. Условное разветвление - если условие, то - и сразу группу команд. Иначе - тоже группу команд. Вот так как-то:
...
Иначе
п. 9 Многократное выполнение группы пунктов разрешено, либо заданное число раз, либо до некоторого условия. п. 12. Записать в n число 1.
п. 13. Пока значение n меньше 100, выполнять: п. 14 ... Здесь выполняется, пока n < 100, группа команд 13.1, 13.2, 13.3. Как выполнится многократно, начнется 14-й пункт, но не раньше. Или так:
п. 22. Выполнять, пока x-координата ежика меньше 100: п.23 ... Доказано математически - с помощью условной команды, команды многократного выполнения группы других команд (так называемый цикл), и команды вычисления некоторого значения (присваивание) можно запрограммировать ЛЮБОЙ алгоритм. Хоть автоматизация бухгалтерии, хоть игра в шахматы. Никаких других команд больше не нужно. В языках программирования их побольше немного, но только для удобства так сделано. А достаточно этих трех. А мы еще добавим команду завершения работы алгоритма.
п. 99.
п. 100 В прошлом примере с инструкцией, когда две одинаковых цифры надо было определить в числе, если помните, инструкция эта записывалась немного по другому. В частности, была в ней такая , гадкая :) команда, как Перейти к п. XXX. Оператор перехода так называемый. Вроде бы вещь полезная на первый взгляд, а на самом деле крайне вредная! Никогда им не пользуйтесь! Как только логика программы усложняется, от перехода только вред один остается. Потому что ненаглядно получается, неясно, что, как, почему. Выполнялась-выполнялась программа, и вдруг бах! - надо куда-то совсем в сторону уходить. Чуть посложнее код создается, и переход его почти всегда портит. Этоо уже методологические вещи. Как правильно алгоритмы составлять. Лучше сразу учиться делать это качественно, оптимально. Есть такое классическое, фундаментальное! структурное программирование, предложенное легендарной личностью в программировании Э. Дейкстрой. Его идея в том, что программа всегда выполняется последовательно, блок за блоком, группа за группой. А внутри каждый блок тоже представляется в виде последовательных команд. То есть нельзя взять, и из одной группы в другую перескочить. Поэтому структура программы получается очень стройной и прозрачной. Сделал одно, другое, третье - и результат. А не так, чтобы сделал одно, потом другое, потом вдруг прыгнул опять к первому, потом сразу на четвертое, оттуда на второе... Поэтому в наших алгоритмах-инструкциях использовать команду перехода к другому пункту ЗАПРЕЩЕНО! Ясно? Тогда перепишем ее примерно следующим макаром: 1. Ввести два числа a, b. 2. В x записать сумму a + b.
3. Если в числе x меньше двух цифр, то 4. В n записать число 2. 5. Выполнять следующую группу команд, пока значение n меньше или равно числу цифр в числе x.
5.1 Если цифра числа x с номером n равна цифре с номером n-1, то 5.2 Увеличить значение n на 1. 6. Напечатать "нет". 7. Завершить алгоритм. Обратили внимание, что в данном тексте происходит только прямое, последовательное выполнение групп команд? А раньше из-за команд перехода к разным пунктам логика алгоритма была плохо понятной. С ежиками алгоритмы конечно нагляднее получаются :) Ну я буду стараться подбирать, подходящие задачки. Еще несколько заданий на условный оператор. 6. Решаем квадратное уравнение. Помните, как? y = ax2 + by + c.
Дискриминант сначала считаем: Корни:
x1 = (-b+ корень из (d))/2a; Если дискриминант меньше нуля, то корней быть не может. Также, если a = 0. Вроде :) Если D = 0, то будет одно решение. Корень в Дельфи так считается - sqrt( ); x := sqrt( 2*2 ); В Си - она также записывается, библиотеку math.h только надо подключить.
7. Есть параллелепипед :) со сторонами x, y, z. Надо выяснить, войдет ли он хоть как-нибудь :) в паз размером w, h. Собственно, те, кто добрался до данного упражнения и делает программки, уже готовый программист. Раз вы разобрались с типами данных, переменными, оператором присваивания и условным оператором, то дальше уже будет в основном техника программирования. Оператор цикла остается (в следующем занятии), но это уже проще, чем раньше, будет в изучении. На машине можно ездить, вспотев и вцепившись ручками в руль, а можно - расслабившись и поглядывая по сторонам, ведя автомобиль автоматически. Но и в первом случае человек уже едет ! Неуверенно, плохо (пока!), но ЕДЕТ. Можете себя поздравить :) (c) 2004 Сергей Бобровский bobrovsky@russianenterprisesolutions.com
Школа программирования с нуля
Все предыдущие выпуски базового курса тут:
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.prognull |
Отписаться |
В избранное | ||