Вступление
Вот рассылка обрела новый дизайн. Выразить своё мнение по этому поводу можно в разделе Голосование |
ТеорияВ прошлый раз, мы написали программку для подсчёта корней уравнения. Вот её текст:
Однако у тех, кто знает математику может возникнуть вопрос: А что если дискриминант отрицательный? Да для этого случая он положительный, но в общем ? if условие then Давайте разберём его по полочкам или шкафам, у кого как :) ЕСЛИ условие ТО Т.е. если условие истинно, то выполняется оператор1, а если ложно, то оператор2. Как же нам узнать истинно условие или нет? Для этого существуют операторы сравнения:
Замечательно теперь мы можем проверить дискриминант с 0: if D < 0 then Вторая часть (начиная с else) может отсутствовать. Например такой код: a := 2; Но немного изменив текст: a := 2; Однако, что делать если нам нужно написать не одну стрчку (a := a + 3), а сразу 5??? Тогда нам нужно выделить эти операции в блок, начало которого отмечается словом begin, а конец end. Т.е. например так:
Очень часто может потребоваться использовать вложенные операторы условия. Как например понимать такую запись: if a > 3 then А теперь внимание вопрос: к какому if относится в данном случае else?? минута пошла :)) Правильный ответ: ко второму! if a > 3 then второй else относится к первому if :)))
Теперь вновь о точках с запятой :((( Это тема довольно-таки запарная: if условие then На сегодня с теорией покончено! |
ПрограммаЕсли программа из этого выпуска выдаёт ошибку, тогда читайте здесь: Что делать, если эта программа не запустилась? Ну а сегодня мы сделаем полную програму решения квадратных и заодно линейных уравнений.
Однако сначала - мат.часть. "Даже самая маленькая практика стоит большой теории!" - прочитал в учебнике по физике :) x1,2 = - b ± (b2 - 4ac)1/2 2a
Если это выполненно, то значит мы можем воспользоваться формулой (*) для вычисления корней.
Оно конечно длинновато, но того стоит! Директива подключения модуля (uses - использовать) - т.е. мы хотим использовать функции модуля CRT - это модуль для создания красивостей программ - цвет, звук, окошки (типа как у BP), экран (в текстовом режиме). Вот я и решил использоать какие-то функции из него и поэтому "сказал" компилятору, что было бы не плохо подключить его, что бы компилятор знал, какие функции там содержатся. Описание функций модуля CRT можно найти следующим образом: Shift+F1 - CRT Unit - появится окошко с общими словами о модуле и ссылками на константы и функции модуля. Модуль - это отдельный файл с функциями. Например вам не хочется по сто раз в каждой программе писать одну и туже функцию, тогда вы создаёте модуль с этой функцией и просто подключаете его к программе с помощью uses! О том, как делать модули мы поговорим позже.
ClrScr; - вызываем функцию очистки экрана (CLeaR SCReen - очистить экран), что бы не осталось инфы от других программ! Заметьте, что функция не получает параметров и поэтому просто пишется её имя! Эта функция из модуля CRT (!) { Поругаемся на пользователя :))) } Функция Sound (HZ) - заставляет пищать спикер с частотой HZ в герцах. Кстати любопытная информация, которой не содержится в help'e к паскалю, а вычитал я её из help'a по С: Около одной из птицеферм в Австралии был комп, которы издавал звук с частотой 7 Гц. Однако 7 Гц - это резонансная частота черепа цыплёнка и соответственно все цыплята умерли :(( (Вот она - идея звукового оружия) Но не стоит пытаться повторить этот эксперимент: 7 Гц эта частота, кажется называется ультразвуком, не слышима человеком! К тому же там же написанно, что некоторые компьютеры неспособны воспроизводить эту частоту! Соответственно нам нужно сделать задержку между вызовами Sound и NoSound. Для этого есть специальный "остановщик" выполнения программ - функция Delay (MilliSeconds) - параметр, как вы догадались указывает на сколько милли секунд нужно остановить выполнения программы, после истечения 2000 мс программа продолжит своё выполнение, однако что бы спикер запищал мы должны послать только один "сигнал", что мы и делаем функцией Sound! Получив сигнал спикер начинает пищать как бы отдельно от программы! Он так и будет пищать до тех пор, пока мы не вызовем функцию NoSound! Ну и ещё одно в предпоследней строке мы вызываем функцию ReadLn без параметров. Что бы это значило? А значит это, что нам до балды, что введёт пользователь - главное, что бы он нажал ENTER!!! На этом неизвестные функции закончились.
Отладка - краткий курс молодого отладчика :) Нажмите F8 (Пошаговая отладка) - строчка begin выделится цветом (отсюда начинается наша программа)! дальше нажимая F8 мы перейдём к строчке ClrScr; т.е. мы сделали один шаг в нашей программе! Проследить, что же было с экраном за время шага можно нажимая Alt+F5 (во время первого шага (begin - ClrScr;) - копирайты борланда, во время второго (ClrScr; - writeLn) - экран очистится, т.е. вызов функции очистки прошёл успешно). Обратите внимание, что дойдя до строчки, где что-то требуется ввести мы увидим рабочий экран программы, т.к. её выполнение приостанавливается на это время. Жмите F8 и вводите числа, пока мы не дойдём до первого if. Если вы ввели а не 0, то вы заметите, что мы сразу проскочим большой кусок программы и перейдём на выполенения условия else, а если а = 0, то else вы не увидите! Когда эта подсветка исчезнет значит программа закончилась! Что бы прервать программу в середине отладки, если вам известен результат, нажмите Ctrl+F2. Итак это только одна из возможностей Отладчика. Остальные мы изучим после. Однако поэкспериментируйте с различными числами, посмотрите по каким веткам идёт программа.
|
Как научиться читать программы ?Читать программы, особенно чужие, это всегда очень сложно. Если вы новичок в этом деле, то вот несколько советов, которые взяты из личного опыта:
Эта последовательность действий похожа на процесс работы компилятора, только если он не понимает строку, то выдаёт сообщение об ошибке. Например прочитаем нашу программу из этого выпуска:
Вы можете подумать следующее: "Гм, очевидно это программа! И если не врёт имя, то она решает квадратные уравнения!"
"Это что-то новое, наверное, раскажут ниже. Пока пропустим"
"Ага! Это точно переменные!"
"Выглядит страннова-то, догадываюсь, что лучше этот кусок пропустить." .....................
"Это какие-то технические подробности, в них лучше пока не суваться" ..............
"Причудливое сочетание ! Наверное так надо."
"Понятно, дискриминант считается по этой формуле!" ..................
"Ну вот уже и конец :( А ведь я только разошёлся... посмотрю ка я ещё разик, те непонятные строчки! " Если у вас есть принтер, то тексты программ лучше печать - так удобнее их читать. Программу лучше вводить своими руками - так всё быстрее запомнится. Посмотрите программы из рассылки смотрите сначала целиком, выделяйте непонятные моменты. Потом читайте комментарии и постарайтесь решить все вопросы. Если они всё же остались, то пишите - вам обязательно ответят. |
Что делать, если программа не запустилась?Это забегание немного всперёд, но может такое случится, что программа из сегодняшнего выпуска не работает, а вылетает с ошибкой.Ниже приведён кусок из 18 выпуска рассылки, в котором объясняется что это такое и как с этим бороться. [13.12.02] Ну и главная новость: на сайте появился патч к BP. Поводом к его появлению послужило такое письмо: цитата Александр 12.12.2002 Получил только что очередной выпуск вашей рассылки (от 11 декабря) и увидел в нем строку "Error 202: Stack overflow error." Это напомнило мне об одной проблеме, которая преследует владельцев современных компьютеров при создании программ на Паскале. Это та самая ошибка 200, которая вылезает неизвестно почему в самый неподходящий момент.Runtime error 200 (Division by zero) возникает из-за ошибки в процедуре delay. Даже, если эта процедура не вызывается, она возникает при инициализации CRT. Суть этой ошибки в том, что время измерялось через производительность процессора, которая сейчас очень увеличилась. Патч выложен по линку: http://www.ibp7.narod.ru/bp7p.zip (30 кб). Перед установкой обязательно почитайте файл t7tplfix.doc, там даны инструкции к инсталяции и FAQ (на аглийском). Если возникнут вопросы по поводу работы или установки патча - пишите. |
ГолосованиеКак вы заметили дизайн рассылки несколько изменился. Вот нам и интересно узнать в лучшую или в худшую сторону для вас он изменился. Выразить своё мнение можно здесь. |
ПослесловиеВот выпуски и пошли чаще. Надеюсь, что на содержании это не отразится. Если есть вопросы, то пишите - mailto:ibp7@yandex.ru Следующий выпуск ждите приблизительно во вторник.
|