Здравствуйте, уважаемые
подписчики!
Это письмо желательно читать в броузере
или развернуть на весь экран, тогда легче ориентироваться и приятнее
читать!
Клуб начинающих программистов
|
Уважаемые друзья!
Недавно вышло так, что я потерял довольно много почты, в
частности ваши письма по поводу КНП. Огромная просьба - кто
писал мне и с кем я переписывался по поводу КНП со времени
выхода прошлого выпуска, отправьте ваше письмо еще раз по
адресу ed1@mailru.com?subject=KNP.
Обращаю ваше внимание, что в поле "Тема" желательно указывать
слово KNP.
Ну а теперь о самом клубе. Знаете, чем больше я о нем думаю,
тем больше мне кажется, что это не такая уж и удачная идея.
Дело в том, что судя по Вашим отзывам я не увижу достаточного
количества информации, необходимой для сайта. Я не хочу сказать,
что мало почты: но это в основном мнения. (Отдельное спасибо
всем, кто все же согласился учавствовать в создании сайта).
Всвязи с этим я решил немного пересмотреть идею КНП, однако
не крайне кардинально. Подробнее в следующих выпусках, пока
жду от вас повторных писем (равно как и писем вообще), пишите!
А сейчас о вакансиях. Напомню: ожидаются любые предложения
по участию в проекте, идеи и заготовки. Кроме того, появилась
некоторая потребность в людях, желающих непосредственно учавствовать
в создании сайта. В частности, я хотел бы увидеть наработки
дизайна. Есть возможности? Пишите!
Также хочу сделать несколько комментариев по поводу Библиотеки программиста.
Просто невороятное количество писем (наверное больше, чем
вопросов) по поводу нескачиваемости файлов, особенно ПАСКАЛЯ.
Однако скачивается! Можете даже прочитать восторженное сообщение
посетителя на форуме сайта. Что могу сказать?
Сайт всеже переезжает на другую платформу, сейчас работа
по переделке идет на всю катушку (отсюда и некоторая задержка
в выпусках). По секрету скажу, что довольно много на сайте
будет переделано. В частности, изменения коснутся дизайна
и структуры; на первых порах планируется около 50 МБТ новой
информации. Хостинг, в принципе, я уже выбрал, но все же есть
желание услышать мнение людей, интересующихся этим. Возможно,
у кого-нибудь есть какие-то рекомендации? Буду рад услышать
любые мнения о Российском БПХ.
В прошлом выпуске мы изучили несколько параметров тэга BODY,
самые основные и необходимые. Думаю, вы помните, я говорил
что существуют еще несколько параметров, которые нам предстоит
изучить. Сегодня я расскажу еще о двух, которые имеют некоторые
особенности в различных броузерах. Собственно, сегодня мы
в первый раз коснемся проблем совместимости разных броузеров,
а именно Internet Explorer и Natscape Navigator.
Всем понятно, что когда создается сайт, он должен тестироваться
в разных программах. Ведь броузеры посетителей весьма и весьма
различны, а желание чтобы сайт видели таким, каким он создается
есть всегда. Но, к сожалению, не всегда удается сделать полноценный
дизайн, который бы одинаково отображался в разных программах.
То одна таблица будет выглядеть не так, то другая...
Это естественно и в большинстве случаев не страшно. Однако
всегда необходимо, чтобы самые основные части сайта везде
были одинаковы. Это, например расположение элементов на экране,
ширина или высота а иногда и просто их видимость.
Почти всегда это возможно без дополнительных усилий, за
исключением тех случаев, когда тэги, выполняющие те или иные
действия в разных броузерах выглядят по разному. Тогда приходиться
прописывать сразу несколько тэгов, указывающих одно и то же,
но для разных броузеров. К таким тэгам и относяться некоторые
параметры BODY, которые мы сегодня изучим.
Что же это за параметры? На сегодня их немного. С помощью
этих параметров мы научимся устанавливать границы окна в броузере,
иначе поле отступа от края. Очень похожая возможность имеется
в Word (да и в WordPad, и вообще в многих редакторах). Итак,
подробнее о таких тэгах.
Вы наверняка сами создавали гипертекстовые странички, при
этом, я уверен, замечали, что текст выводиться на некотором
расстоянии от края. Мне даже задавали вопросы, как можно изменять
это расстояние.
А делается это просто, всего с помощью двух параметров тэга
BODY. При этом один из них указывает величину отступа сверху
и снизу окна, а другой - слева и справа.
Как раз у этих параметров и есть особенность совместимости
броузеров. В IE и NN они называются по-разному. Привожу названия
эитх параметров для различных броузеров:
Internet Explorer:
- TOPMARGIN="число" - отступ сверху и снизу окна
IE. Помните, этот параметр абсолютный ноль для Netscape
Navigator.
- "число" - это просто цифра. Здесь 0 - самое минимальныо
значение, то есть все элементы документа будут вплотную прижаты
к краям окна.
- LEFTMARGIN="число" - отступ слева и справа. 0 - минимальное
значение, текст и другие элементы не будут иметь никакого
отсупа.
Netscape Navigator:
- MARGINHEIGHT="число" - отступ сверху и снизу окна
NN. Этот параметр никак не воспринимается броузером IE.
- "число" - это просто цифра. Здесь 0 - самое минимальныо
значение, то есть все элементы документа будут вплотную прижаты
к краям окна.
- MARGINWIDTH="число" - отступ слева и справа. 0 -
минимальное значение, текст и другие элементы не будут иметь
никакого отсупа. Параметр не воспринимается Internet Explorer.
Вот такие два параметра. А как же их использовать, спросите
вы? Совместимость с каким броузером выбрать? Все очень просто.
Если вы решили вручную установить отступ от границ экрана,
то пишите всегда оба типа этих параметров. Вот пример (устанавливаем
отступ равным нулю):
<BODY LEFTMARGIN="0"
TOPMARGIN="0" MARGINWIDTH="0" MARGINHEIGHT="0">
Теперь границы будут выглядеть как мы хотим в обеих броузерах.
Совместимость полностью соблюдена!
Вот собственно и все. По моему, ничего сложного в этом нет
и мы продолжаем дальше.
Следующий подраздел расскажет вам о тэгах заголовков, которые
иногда очень удобно использовать и уже совсем точно о них
нельзя не знать.
Да, сегодняшний урок получается не очень интересным. Никакой
дополнительной практики, новые тэги простые и не требующие
понимания. Хотя есть ли в HTML что-нибудь, требующее глубокого
понимания и размышлений? Возможно, но это уже не относиться
к тэгам. Бывают моменты, когда несколько сложно что-нибудь
организовать соответсвующим образом, то одно не получается,
то другое.... Тэги же всегда простые и особого понимания не
требуют. Однако их нужно много знать, чтобы создавать удачные
страницы.
Итак, сегодня я расскажу вам о шести новых тэгах, позволяющих
выделять заголовки в документе. Это довольно полезная возможность
и я советую использовать ее при необходимости.
Что же такое заголовки? Давайте посмотрим на примере какой-нибудь
газеты. У каждой статьи есть свой заголовок, как бы главный
- он обычно больше всех по размеру и находиться в самом начале
статьи. Далее по тексту встречаются подзаголовки и даже (если
так можно выразиться) подподзаголовки. При это можно разделить
их на уровни: главный заголовок статьи - это 1-й уровнь заголовков,
подзаголовки - это второй уровень, встречающиеся подподзаголовки
- это 3-й уровень и т.д.
Разобрались? Такая же история и в HTML документе. Допустим,
мы создаем туже статью, но уже верстаем ее на гипертексовом
языке, например для какого-нибудь ON-LINE журнала. При этом
нам нужно оформить статью следующего содержания:
НОВОСТИ НЕДЕЛИ
ПОНЕДЕЛЬНИК
В этот день произошло мноооого
интересных событий.
Рассказывать о них подробно
не будем, ну их в баню....
ВТОРНИК
Ну а этот день был
еще интересней. Хотя и
о нем мы тоже промолчим, больно
времени не много. Да и размер
рассылки сильно ограничен...
Это, конечно, очень примерно :))
Обратите внимание, здесь есть заголовки, разделим их на
уровни:
НОВОСТИ НЕДЕЛИ
Заголовок 1-го уровня;
ПОНЕДЕЛЬНИК
Заголовок 2-го уровня
ВТОРНИК
Заголовок 2-го уровня
При имеющихся у нас знаниях при оформлении такой статьи
можно было бы придумать оформление по принципу изменения шрифтов:
увеличивать их размер и т.д., до и после заголовков делать
абзацный отступ и прочее.
Но это совсем не обязательно, так как есть специальные тэги,
облегчающие нам жизнь в таких условиях. При этом они сами
устанавливают отступ от текста, сами соответсвенно увеличивают
шрифт для разных уровней и т.д. Вот они, эти тэги:
- <H1> - </H1> - тэги заголовка 1-го
уровня. Он самый большой и имеет значительный отступ.
Как вы видите, тэг <H1> имеет завершающую пару:
все, что будет написано внутри <H1> и </H1>
и будет заголовком 1-го уровня. Остальные тэги работают
по тому же принципу:
- <H2> - </H2> - заголовок 2-го уровня.
- <H3> - </H3> - заголовок 3-го уровня.
- <H4> - </H4> - заголовок 4-го уровня.
- <H5> - </H5> - заголовок 5-го уровня.
- <H6> - </H6> - заголовок 6-го уровня.
Ну вот они, все наши тэги заголовков. Заметили, их целых
шесть штук? Это дает возможность использовать подходящий тэг
в нужной ситуации. Редко бывают статьи с вложенностью заголовков
более 6-ти уровней.
Ну а теперь примера ради давайте переделаем нашу импровизированную
статью с применением новых изученных тэгов. Вот HTML код:
<HTML>
<HEAD>
<TITLE>Статья
"Новости недели"</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFA" topmargin=3 leftmaring=3
marginwidth=3 marginheight=3>
<P><FONT FACE=VERDANA>
<H1>НОВОСТИ
НЕДЕЛИ</H1>
<H2>ПОНЕДЕЛЬНИК<H2>
<FONT size="2">
<DD>В этот день произошло
мноооого
интересных событий.
<DD>Рассказывать о них
подробно
не будем, ну их в баню....
</FONT>
<H2>Вторник<H2>
<FONT size="2">
<DD>Ну а этот день был
еще интересней. Хотя и
о нем мы тоже промолчим, больно
времени не много.
<DD> Да и размер рассылки
сильно ограничен...
</FONT>
<P>
<FONT size="1"><B>
По всем вопросам недели смело пишите на:
<A HREF="mailto:ed1@mailru.com">ed1@mailru.com</A>,
Эдуарду Дмитриеву.
</FONT></B>
</BODY>
</HTML>
|
Вот такая вот небольшая статья. Назвать так ее так, конечно,
нельзя, зато она хорошо демонстрирует новые тэги. Ну а теперь
новое задание.
Многие просят меня поставить какой-нибудь план, то есть
запланировать сейчас конечную цель, придумать какой-нибудь
проект, после чего уже двигаться к его осуществлению. Да,
вы правы. Я в этом вопросе решил поступить немного по-своему,
с чем и связано следующее ДЗ.
Хочу сделать необходимые комментарии, прежде, чем задать
ДЗ. Эта работа является контрольной по пройденному материалу
и призвана направить вас на выпонение конкретного задания.
Она включает в себя все возможности, пройденные нами. Выполнить
ее крайне желательно.
Эта работа будет приниматься на проверку. Выполнив ее,
сохраните файл с расширением .html или .htm, после чего составьте
письмо следующего содержания и в вложите в него свой файл:
Имя: Эдуард
E-mail: ed1@mailru.com
Оценка рассылки: [отлично] - [хорошо] - [удовлетворительно]
- [плохо] - [ужасно] (выберите свой вариант)
Комментарий: Напишите необходимый комментарий
(елси считаете нужным)
Дата: 14 ноября
|
В теме письма укажите HTML-DZ. И отправьте письмо
на ed1@mailru.com?subject=HTML-DZ
(при отправке письма с данной ссылки необходимая тема подставляется
автоматически).
Большая просьба отправлять именно такие письма! Это совсем
не сложно, поверьте! Зато внесет ясность в мои действия, позволит
более продуктивно работать и вести собственную статистику.
Итак, задание:
Необходимо создать полноценный HTML документ, применяя тэги
оформления шрифта и форматирования текста. Отдельные части
документа выделите заголовками. Вверху создайте навигационную
панель с переходами к разделам документа (с применением внутренних
ссылок).
А составить необходимо следующий документ:
Опишите план небольшого Интернет-сайта, как вы себе его
представляете. Здесь нужно хорошо подумать: какую информацию
надо изложить для лучшего восприятия Вашего проекта. Кстати,
это совершенно не сложно. Просто представте, какой сайт Вы
хотите увидеть и расскажите об этом.
Для примера привожу небольшой план такого
документа (пункты - это фактически заголовки разных уровней):
Библиотека программирования на Паскале
- О проекте (расскажите, что это за сайт - для кого, зачем
создан и т.д.);
- Разделы сайта;
- Книги и документация; (расскажите, какого направления
книги содержатся в этом разделе);
- Исходные тексты, примеры кода; (что это значит?
что посетитель сможет здесь увидеть? Архивы? ON LINE
примеры?)
- Уроки по Паскалю (что это за уроки? Для кого? Уровень
уроков? Рассказывайте, не стесняйтесь!)
- Заметки по языку (Шо цэ такэ? (укр.));
- Новости проекта (что за новости? опишите раздел)
- Гостевая книга (напишите, что можно оставить сообщение
автору и другим постетителям...)
- Проекты сайта; (что ожидает данный сайт в будущем, то
есть какой в идеале проект вы видите? Поделитесь с посетителями);
- Аудитория сайта; (на какую преимущественно аудиторию
сайт расчитан?)
- ...... все, что вам еще придет в голову рассказать о
проекте.
- Оставьте свои ссылки, почту и т.д.
На первый взгляд может показать сложным. Не пугайтесь! Это
всего лишь рассказ, а не руководство к созданию сайта. Вы
ведь наверняка часто бываете на разных сайтах, видите их достоинства
и недостатки. Вот и представьте, что вы сами создаете сайт,
а ведь перед тем как начать его строительство, необходимо
определиться с планом проекта? Так ведь? Вот и попробуйте
выполнить такую задачу. Только скажу сразу: не пытайтесь соорудить
что-нибудь грандиозное! Вы наверняка еще никогда не делали
сайт, так что начните с минимума. Да и тот пример, что я вам
привел - это всего лишь пример и я очень советую избрать другую
тематику.
Изобретайте!
Ну а чтобы вам было легче сориентироваться в непосредственном
создании такого документа (ссылки, о которых я упоминал и
т.д.), а также лучше понять задание, я смастерил такой документ.
За недостатком времени он вышел крайне примерным в плане информативности,
но всеже он рабочий и более функциональный, чем вышеописанный
план. Посмотреть его вы сможете на сайте http://www.plib.f2s.com/
в разделе "Уроки для начинающих программистов >>
Домашние задания".
Хочу сделать еще комментарий. На что направлено это задание?
Конечно, на непосредственное написание гипертекста. Но кроме
этого, я уже начинаю готовить вас к строительству сайта, вырабатывать
столь необходимый навык для Интернет-дизайнера: планирование
проекта. Ведь знания одних тэгов мало, нужно уметь "придумывать"
проект. Уверяю вас, это очень и очень важно. Учитесь, начинайте
с нуля. Сейчас самое время.
И посмотрите мой пример на сайте, возможно, это вам поможет
скоординироваться.
Дерзайте!
А теперь итог: зачем это нужно? Дело в том, что данное задание
не пройдет просто так. Я обязательно выберу несколько самых
интересных и перспективных работ (возможно, довольно много),
после чего мы вместе выберем лучшую. Как это сделать (осуществить
коллективный выбор) я уже знаю, но пока промолчу. Все интереснее
будет :))
Итак, общими усилиями будет выбрана лучшая работа. И что
дальше? А дальше мы поступим так: примем выбранный план как
руководство к действию и я вас начну учить всему необходимому
для создания такого проекта. В конечном итоге мы все вместе
соорудим выбранный проект, разместим его в Сети по завершению
работы и, конечно, узнаем целую кучу нового материала.
Тогда уже коснемся таких вещей как раскрутка и т.д.
Надеюсь, все получится и будет интересно!
Также очень надеюсь, что я все изложил понятно и вы поддержите
эту идею.
В прошлом выпуске мы окончательно завершили тему циклов,
теперь двигаемся дальше. Сегодня мы с вами начнем большую
и довольно сложную тему, которая откроет вам новые возможности
программирования на Паскале. Итак, чем же мы будем сегодня
заниматься?
Сегодня мы серьезно вернемся к изучению различных типов
данных. Мы с вами завершили довольно большой этап обучения
и теперь перейдем к другому, не менее важному. Изучать мы
будем вещественные типы или числа с плавающей запятой. Сразу
хочу сделать некоторые уточнения, которые вам необходимо учесть
в дальнейшем.
Хочу заметить, что вам уже самим придется кое в чем поразбираться.
Будет очень много нюансов, на которых я не то, чтобы не могу
останавливаться, но просто запутаю вас. Кроме того, размер
и периодичность рассылки довольно ограничены, поэтому я постараюсь
давать в выпусках как можно больше информации. В небольшой
ущерб объяснениям.
Ну а теперь, пожалуй, будет уместно начать непосредственное
изучение новых типов данных.
Не знаю, обращали ли вы серьезное внимание на известные
нам типы. Если да, то знаете, что они довольно разнообразны
и подходят под все случаи жизни. Например, WORD - хранит тот
же диапазон, что и Integer, но без отрицательной стороны.
Она как бы прибавляется к нему в качестве положительной, в
два раза увеличивая возможное значение типа выше нуля.
Тип Byte - экономит нам память. Тип LongInt - позволяет
при необходимости использовать числа огромного диапазона значений.
И т.д. Их достоинства и недостатки можо перечислять бесконечно.
Возможно, я и уделю когда-нибудь этому внимание в выпуске.
Вполне возможно.
Ну а сейчас я хочу, чтобы вы вспомнили, что за числа умеют
хранить известные нам типы. Да, они все разные по диапазону
и размеру, но они все целые. Невозможно в переменную
типа Integer записать значение 3.14 (пи) или 182.1555. Мы
не можем этого сделать.
Но понятно, что в программировании нельзя ограничиться только
целыми значениями. Возьмем даже такой примитивный пример:
решение квадратных уравнений. Эту задачу невозможно выполнить
без вещественных чисел. В большинстве случаев в них возникает
необходимость. И естественно, они существуют в Паскале.
Как и целых, вещественных типов тоже довольно много. Они
разнообразны и в их разнообразии лежит тот же принцип, что
и у целых: по возможности использвать числа меньшего диапазона
для экономии памяти и оптимизации программы. Еще раз напомню,
именно поэтому в Паскале (как в многих других серьезных языках)
существует целая шкала целых и вещественных типов.
Надо заметить, что вещественные типы необходимо использовать
даже более рационально, чем целые. Они обычно занимают в памяти
больший размер (целая часть+значения после запятой) и дольше
вычисляются.
Итак, привожу таблицу всех вещественных типов языка Turbo
PASCAL 7.0:
Тип |
Диапазон |
Значащие цифры |
Размер, байт |
Real |
2.9x10^-39 .. 1.7x10^38 |
11-12 |
6 |
Single |
1.5x10^-45 .. 3.4x10^38 |
4 |
6 |
Double |
1.5x10^-45 .. 3.4x10^38 |
15-16 |
8 |
Extended |
3.4x10^-4932 .. 1.1x10^4932 |
19-20 |
10 |
Comp |
-2^63 + 1 .. 2^63 - 1 |
19-20 |
8 |
Здесь значок "^" обозначает степень. Думаю, вы знаете (помните)
такую запись чисел. Если не знаете, что делать... на математику
у нас времени нет. Ограничусь самым минимальным комментарием:
К примеру, запись типа Real: 2.9x10^-39 .. 1.7x10^38
обозначает следующее:
Минимальной границей типа является число 2.9 * 10 в степени
-39. Число получается оччччень большое (точнее наоборот,
маленькое :)) - я имел ввиду длинное). И писать его в обычном
виде довольно нудно.
Таже история и с максимальной границей типа: 1.7 * 10
в степени 38. Число опять длинное. На сей раз действительно
большое, даже громадное!
Если это для вас сложно, найдите учебник математики, точно
не помню за какой класс.... за 7-ой кажется, и почитайте данную
тему. А мы двигаемся дальше.
Итак, мы определились с вещественными типами. Теперь нужно
немного подучиться работе с ними. Давайте начнем с простого
ввода и вывода этих чисел. Напишем небольшую программку:
Program N1;
var
A: Real;
B: Single;
C: Comp;
begin
Write('Введите число вещественного типа REAL:
');
Readln(A);
Write('Введите число типа Single:
');
Readln(B);
Write('Введите число типа Comp (большое такое...
не поскупитесь на значение):
');
Readln(C);
Writeln('Real: ', A);
Writeln('Single: ', B);
Writeln('Comp:
', C);
Readln;
end.
|
Запустите программу. При вводе чисел используйте точку как
разделитель целой и дробной части:
178.13
Именно точку, а не запятую!
Вы видите, что творит Паскаль? Он выводит ужасные числа,
пририсовывая к ним экспоненту. Зачем? Может, вы не хотите
видеть на своем мониторе такое некрасивое число? Я вас пониманию.
Для этого как раз и существует форматный вывод процедуры Write.
Что же это такое?
Форматный вывод - это задание диапазона вывода. То есть
мы сразу в процедуре Write (Writeln) определяем, сколько распечатывать
знаков до точки и после нее.
К примеру, мы хотим, чтобы целая часть выводилась по максимуму
пятью цифрами, а дробная - двумя. Чтобы реализовать это, мы
припишем к переменной, стоящей в процедуре два числа, разделив
их двоеточием:
Write('Real: ', A:5:2);
Теперь у нас будет выводиться в более читабельном виде.
Измените в программе эти значения по своему усмотрению. Вполне
нормально, не так ли?
Ну а я с превеликим сожалением констатирую, что это все
про форматный вывод. Думаю, многие не до конца поняли всю
суть. Это ничего, после небольшой тренировки вы без труда
разберетесь. Уверяю вас, попробуйте! Сотрите написанную мной
программу и напишите свою! Посмотрите, как влияет форматный
вывод на представление чисел на экране. Сразу же разберетесь,
точно вам говорю.
Переходим к манипулированию с вещественными числами. Следующей
будет программа, производящая действия с новыми типами, ну
а пока я покажу, что же можно с ними делать:
- Умножение - вещественные типы могут быть умножены.
Знак: "*".
- Сложение - обычное сложение. Знак: "+".
- Вычитание - они могут вычитаться друг из друга:
"-".
- Деление - непосредсвенное деление, с остатком
и т.д. Знак: "/".
То есть все действия как и с целыми, за исключением деления.
Важное замечание: в качестве одного из элементов
в арифметических операциях может быть и целый тип. Пример:
Program N1;
var
A,B: Real;
C: Integer;
begin
...
A := A * C;
A := A / C;
A := C / A;
A := A - C;
A := B / C;
A := A * B / C;
B := (C / A - B) * C;
... и так далее
end.
|
Помните об этом. Не зацикливайтесь на различиях целых и
дробных чисел, ищите сходства и возможности совместимости.
Ну а теперь примера ради давайте напишем программу, манипулирующюю
с целыми и дробными числами, а также использующюю форматный
вывод.
Думаю, программа, печатающая цикл из вещественныз чисел
от 1.00 до 1.90 с шагом в 0.1 будет уместной.
Program N2;
var
A,Step: Single;
I: Byte;
begin
Writeln;
For I := 0 to 9 do
begin
Step := I * 0.1;
A := 1 + Step;
Writeln(A:5:2);
end;
Readln;
end.
|
Разобрались? Хочу сделать несколько комментариев к программе.
1. Еще раз обращаю ваше внимание на то, что целая
часть отделяется от дробной точкой, а не запятой.
2. Напоминаю, что целые типы совместимы с дробными
(Почему?), но не наоборот:
Step := I * 0.1; , где I: Byte, Step: Single;
3. Видите, я использую тип Single? Из всей таблицы
вещественных типов я выбрал именно этот. Думаю, вы уже догадались,
почему. Ведь как и у целых типов, у вещественных есть свой
диапазон и всегда нужно выбирать наиболее маленький тип. Я
пользуюсь тем, что Single меньше других, а значения у нас
не большие и с успехом использую его.
Ну а теперь я думаю, вы полностью разобрались с вещественными
типами данных и пора написать новую программу. На сей раз
посложнее и более функциональную. Итак, что же мы будем делать?
А давайте напишем программу решения квадратных уравнений.
Кстати, она полезна не только для написания, но и для использования.
Итак, мы определились. С чего начнем? С определения квадратного
уравнения. (Извиняюсь, конечно, но меня терзают смутные сомнения,
что кто-нибудь, да не знает, что это такое... Говорю по собственным
наблюдениям!!)
Усложнять мы не будет, на этом этапе сделаем все по минимуму.
Давайте вспомним вид квадратного уравнения (^ - это степень):
Ax^2 + Bx + C = 0, A<>0.
А корни находятся так:
X 1,2 = (+,- B - sqrt(D)) / 2A,
D = B^2 - 4AC.
Не пугает вид такой формулы? На самом деле здесь все элементарно:
X 1,2 - это X1 и X2. Соответсвенно находим их сложением
и вычитанием дискриминанта.
- +,- B - это +B и -B.
- sqrt - функция Паскаля, извлекающая корень.
- D - Это дискриминант. Он имеет правила:
- D > 0 » X1 <> X2;
- D = 0 » X1 = X2;
- D < 0 » Жаль, но корней у нас нету...
Вот так мы с вами и разобрались, что же такое квадратное
уравнение. Я хочу обратить ваше внимание на возникшие по ходу
рассуждения условия: A <> 0, а также правила, связанные
с дискриминантом. Естественно, при вводе А нужно его соответсвующе
проверить. Также сначала надо найти дискриминант и выдать
соответсвующие данные.
Вот программа, выполняющая эти действия:
Program N3;
var
A,B,C: Real;
X1,X2: Real;
D: Real;
begin
Writeln('Программа решения квадратных уравнений.
Welcome!');
Write('Введите A:
');
Readln(A);
if A = 0
then
begin
Write('Нельзя, чтобы
A было равно нулю!
');
Readln;
Halt;
end;
Write('Введите B:
');
Readln(B);
Write('Введите C:
');
Readln(C);
Writeln('Решаем уравнение: ',A:5:2,'x^2
+',B:5:2,'x +',C:5:2,' = 0
');
Writeln;
D := B*B-(4*A*C);
if D < 0
then
begin
Write('D меньше нуля!
Так нельзя...
');
Readln;
Halt;
end;
X1 := (B*-1) + sqrt(D);
X1 := X1 / (2*A);
X2 := (B*-1) - sqrt(D);
X2 := X2 / (2*A);
Writeln('D: ',D:5:2);
Write('X1: ',X1:5:2, ' X2:
',X2:5:2);
Readln;
end.
|
Посмотрите внимательно на эту программу. В ней появились
новые для вас слова:
- Halt;
Эта процедура производит немедленный выход из программы
в любой ее точке. То есть эта процедура попросту останавливает
программу. В нашем варианте она вызывается при возникновенни
недопустимых условий (см. текст программы), прерывая работу.
- Sqrt;
Это функция получения квадратного корня.
- В качестве параметра к процедуре ставиться число типа REAL.
- Как результат от своей работы функция также возвращает тип
REAL (это и понятно, корень очень часто не бывает целым),
поэтому не забывайте присваивать ее только переменным REAL.
Сама по себе программа довольно проста и я думаю, вам не
составит труда в ней разобраться. Для демонстрации удачного
решения попробуйте ввести следующие данные:
При таких данных ответ будет: X1 := -0.50, X2 := -2;
Кроме того, у меня к вам есть задание:
Постарайтесь сделать данную программу интерактивной:
пусть при возникновении недопустимых условий программа
не завершает работу по HALT, а начинается сначала;
при удачном выполнении спрашивает, 'Сначала? (Y/N): '
и принимает соответсвующее решение: завершает работу или
начинается сначала.
Ну вот собственно и все на сегодня. В этом выпуске мы прошли
довольно много нового и полезного материала, который определенно
расширит ваши возможности в программировании. Кроме того,
обратите внимание, что наши программы становятся все больше
и сложнее. Это радует, так как является показателем продвижения.
Думаю вы тоже так считаете.
Ну а я с вами прощаюсь до следующего выпуска и настоятельно
советую позаниматся. На данном этапе обучения самостоятельная
подготовка очень важна.
|
Можно
ли на Паскале написать операционную систему?
|
|
Используя Word, сохраняю программу с расширением
html и открываю файл в Internet Explorer. Вижу тот же
самый файл со всеми тегами как если бы я смотрела его
в Word. Что делать?? |
Дело в том, что Word сохраняет сраницы не в простом
текстовом формате, а создает документ именно в таком
виде, в каком Вы его видите на экране.
При этом все тэги тоже отображаются так, как Вы
их набирали. То есть попросту они "экранируются".
Пользуйтесь "Блокнотом"! (Notepad).
|
|
Можно
ли предложить в Вашу рассылку примеры заданий, какие-нибудь
статьи? Вы публикуете такой материал? |
Да, буду рад. Опубликую авторский материал (задачи,
описания и т.д) со всеми копирайтами.
|
|
Мы будем
когда-нибудь изучать ООП (объектно-ориентированное программирвание?)
|
Да, будем обязательно. Те, кому интересная эта тема
- имейте это ввиду.
|
На этом прощаюсь,
до следующего выпуска!
|
|
|