Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Инструменты программирования




ЛЕКЦИЯ 6. Программирование

Программные библиотеки Хранение данных, константы, переменные Системы программирования. С выпуском графической операци-онной системы Windows 95 изменился как стиль программирова-ния, так и подход к поставке стандартных программных средств. Теперь программист не может просто взять и написать программу для компьютера — он должен написать ее для определенной опера-ционной системы. Дело в том, что в Windows очень много стан-дартных элементов: окон, меню, кнопок и т. п. Для них в системе уже заготовлены стандартные блоки машинного кода — они хра-нятся в так называемых динамических библиотеках — файлах с расширением имени.DLL. Немало таких файлов поставляется вме-сте с операционной системой Windows. Поэтому программа для Windows выглядит уже не как набор последовательных команд, а как хитросплетение бесчисленных вызовов процедур, хранящихся в библиотеках Windows. Программирование для Windows похоже на программирование по достаточно большому и весьма непростому справочнику. Поэтому, начиная с 1995 г. в состав операционной системы уже не входят интерпретаторы Бейсика. Чтобы изучать программирование для операционной системы Windows, такого простейшего интерпретатора недостаточно — нужны программы нового класса — так называемые системы программирования. Это довольно сложные и дорогостоящие продукты. Их надо приобре-тать и устанавливать отдельно. Считайте, что система программирования — это пакет, в кото-рый входят одновременно: транслятор языка программирования (интерпретатор или компилятор); удобный справочник, позволяющий наглядно оформлять вы-зовы стандартных процедур Windows; программа-редактор, позволяющая удобно записывать исход-ный текст программы и проверять его на наличие ошибок;

стандартные библиотеки с заранее заготовленными блоками, из которых новую программу можно собирать, как из куби-ков. Для одного и того же языка программирования можно выбрать разные системы программирования, подготовленные различными производителями. Так, например, для языка Бейсик существует сис-тема программирования Microsoft Visual Basic. Для языка програм-мирования Паскаль наиболее популярна система программирования Borland Delphi. Существует несколько систем для языка СИ++. Особенно популярны две конкурирующие системы: Microsoft Visual C++ и Borland C++ Builder. Переменные, постоянные. Взаимодействие процессора с оперативной памятью. Процессор компьютера — основной исполнитель вычислений. Он работает совместно с оперативной памятью. Все операции над числами вы-полняются в процессоре, а результаты сохраняются в памяти. На-прямую изменить значение в какой-либо ячейке памяти невозмож-но. Единственный способ — это скопировать хранящиеся данные в процессор, потом их изменить и результат снова скопировать в ту же ячейку памяти. Адресация числовая и символьная. Чтобы процессор мог произ-вольно общаться с любой ячейкой оперативной памяти, у каждой ячейки должен быть собственный уникальный (неповторяющийся) адрес. Существуют два метода адресации: числовой и символьный. Может также применяться двойная система записи адресов: устрой-ства работают с числовыми адресами, а человек — с символьными. Двойная адресация в оперативной памяти. Каждая ячейка памяти компьютера имеет числовой номер. Поскольку в современных ком-пьютерах количество ячеек памяти измеряется десятками и сотнями миллионов, можете представить, сколько цифр входит в их число-вые адреса. Процессор прекрасно отличает одну ячейку от другой, а человеку это не требуется. Когда мы работаем с компьютером и пользуемся какими-то программами, нам совершенно не надо знать, где, в каких ячейках памяти, что и как хранится. Это справедливо для обычных пользователей компьютеров, но программист — не обычный пользователь. Ему необходимо следить

за содержимым ячеек памяти. Если он предусмотрел хранение чис-ла b в одной ячейке, а чисел а и с — в других ячейках, то для вы-числения дискриминанта квадратного уравнения он обязан вызвать числа из всех этих ячеек. Современные программы столь велики, что держать в голове номера всех использованных ячеек и помнить, где что хранится, нет никакой возможности. Здесь на помощь про-граммисту тоже приходят языки программирования. Программист может давать ячейкам памяти символьные адреса (имена), а транс-лятор потом сам заменит их числовыми номерами. Такие символь-ные адреса называются переменными. Благодаря использованию переменных программисты получили возможность записывать ин-струкции компьютеру в виде, близком к тому, как записываются формулы в математике и физике, например так: S = V * Т Особая природа переменных в программировании. Переменные в математике и в программировании выполняют совершенно разную роль. В математике и физике переменными обозначают математи-ческие или физические величины, чтобы удобно и компактно выра-жать законы природы и описывать соотношения между величина-ми. В программировании переменные — это не величины, а адреса, удобная форма для указания на место, в котором хранится числовое значение. Если S = V * Т – это физическая формула, то здесь пока-зана физическая зависимость пройденного пути от времени. Она выражает тот факт, что пройденный путь (переменная 5) прямо пропорционально зависит как от времени движения (переменная Т), так и от скорости движения (переменная V). Теперь посмотрим на программную инструкцию S = V *Т. Это не формула, выражающая соотношение, а указание программе, откуда надо взять данные, что с ними сделать и где сохранить результат. Буквально здесь сказано следующее: «Взять два числа, хранящиеся в ячейках с адресами V и Т, перемножить их между собой, а результат отправить на хранение в ячейку, адрес которой — S». Разница здесь не только в том, что точку (математический знак) заменили звездочкой. Здесь иная сама суть переменных. В физике они выражают физические величины, в математике — некие абстрактные величины, а в программирова-нии — адреса. При трансляции программы вместо них будут автоматически подставлены номера ячеек из той области памяти, в ко-торой программа будет исполняться. Идентификатор переменной. Физически переменная выражает адрес в оперативной памяти компьютера. Она имеет значение и имя. Значение — это та величина, которая хранится по данному ад-ресу, а имя — это набор символов, под которым данная переменная используется в программе. Оно называется идентификатором. По идентификатору компилятор отличает одну переменную от другой и, соответственно, отводит им разные адреса в памяти. Правила записи идентификаторов. В разных языках программи-рования правила записи идентификаторов переменных различны, но в целом они очень похожи. Вот несколько основных общепринятых принципов. 1. В идентификаторе можно использовать как буквы, так и цифры, но начинаться он должен только с буквы. аЗ, abcde, d321, file0015 — разрешенные идентификаторы. 3а, 0015d — неразрешенные идентификаторы. 2. В идентификаторе нельзя использовать пробелы и знаки пре-пинания. Вместо пробела можно использовать символ подчеркива-ния _. Его обычно применяют при создании длинных идентифи-каторов, состоящих из нескольких слов. length_of_circle, end_of_game — разрешенные идентификаторы. 3. В идентификаторе можно использовать только буквы латин-ского алфавита и знак $. Буквы других алфавитов, в том числе рус-ского, не допускаются. Конечно, существуют отечественные языки программирования, позволяющие использовать русские буквы в идентификаторах переменных, но это исключение из общего пра-вила. dlina$, text_0125, radius14 — разрешенные идентификаторы. длина$, texт_0125, радиус14 — неразрешенные идентификаторы. Очень много хлопот программистам доставляют русские буквы, схожие по начертанию с латинскими, такие как «с» и «о». Напри-мер, нельзя сказать, верно ли написан идентификатор СОВЕТ, если неизвестно, какой была раскладка клавиатуры в момент набора. Ес-ли идентификатор записан неверно, интерпретатор предупредит сразу, а компилятор — только во время компиляции программы.

4. Во всех языках программирования есть так называемые ключе-вые слова (в разных языках они разные). Ими записываются опе-раторы языка. Совпадение идентификаторов переменных с этими словами не допускается. 5. В идентификаторах можно использовать как строчные, так и прописные буквы, в том числе вперемешку: A13db_5, AaaaaaaA, — разрешенные идентификаторы. Нередко прописные буквы используют, чтобы объединить не-сколько слов в одно, например: TextBook, GameEnd, DlinaPervoyOkruzhnosti При этом некоторые языки программиро-вания, например Бейсик (Basic) и Паскаль (Pascal) считают одина-ковыми идентификаторы, записанные одинаковыми буквами раз-ных регистров. Например, для Visual Basic INT и int — это одина-ковый идентификатор, который использовать нельзя, потому что он совпадает с именем стандартной функции INT, вычисляющей це-лую часть числа. С другой стороны, в языке СИ++ тоже есть ключе-вое слово int, но там использовать идентификатор INT можно, так как в этом языке строчные и прописные буквы считаются различ-ными. 6. В большинстве современных языков программирования нет ограничения на длину идентификаторов. Поскольку переменная — это только адрес, то от длины идентификатора никак не зависит рас-ход памяти на хранение значения переменной. Поэтому не эко-номьте и не старайтесь давать переменным краткие однобуквенные имена. Никакого выигрыша в расходе оперативной памяти это не дает. Все равно при переводе программы в машинный код вместо переменных (как с длинными именами, так и с короткими) будут подставлены числовые адреса ячеек оперативной памяти. 7. Программисты любят давать переменным содержательные имена, чтобы по имени переменной можно было догадаться, какая величина в ней хранится, например: dlina — длина; radl, rad2 — радиусы первой и второй окружности; temp_t, temp_g — температура тела, температура газа. Постоянные. Кроме идентификатора переменная имеет значение, которое хранится в оперативной памяти. В ходе исполнения про-

граммы оно может меняться, как задумал программист (отсюда и термин переменная). Однако в некоторых случаях программисту удобно использовать величины с неизменным значением — они на-зываются постоянными. Постоянную тоже надо понимать как ад-рес, по которому в оперативной памяти хранится некоторая неизме-няемая величина. Например, если в программе очень часто исполь-зуется число π (3,1415926), то имеет смысл один раз присвоить это значение постоянной Pi=3.1415926 и далее все расчеты выполнять умножением не на число, а на постоянную: с=2 * pi * R Основные типы данных Хранение значений переменных. Для разных типов данных в ра-ботающей программе по-разному выделяется оперативная память. Даже интуитивно понятно, что для хранения числа 0 и числа 1 234 567 890 может потребоваться разный объем памяти. Выделением переменным необходимой памяти занимается транслятор. Одной и той же переменной «а» может быть выделено разное количество ячеек памяти, в зависимости от того, какой тип данных в ней хра-нится. Объявление переменных. Некоторые языки программирования, например Паскаль (Pascal) и СИ++ (C++), требуют, чтобы програм-мист заблаговременно (например, в начале программы) указал, ка-кой тип данных должен храниться в каждой из использованных им переменных. Это называется объявлением переменных. Встретив первое объявление переменной, компилятор сразу отводит ей столько ячеек памяти, сколько нужно для хранения ее возможных значений. Компиляторы некоторых языков программирования, например языка FORTRAN, не требуют от программиста объявления пере-менных, а сами пытаются «догадаться», что имел в виду програм-мист. Если они при этом ошибаются, виноват программист: надо было не полагаться на компилятор, а самому четко объявить пере-менные. В некоторых языках программирования, таких как Бейсик (Basic), тоже не требуется объявлять переменные. Когда интерпре-татор встречает новую, незнакомую переменную, он отводит для нее место в памяти «с запасом». Поскольку современные компьютеры имеют очень большой объем оперативной памяти, ее дополни-тельный расход может быть приемлем. Вот, например, как объявляются переменные в языке Паскаль (Pascal): var dlina: Real; number: Integer; Здесь: var — ключевое слово, с которого начинается объявление (для компилятора оно является сигналом, что дальше идет объявление переменных); dlina и number — это идентификаторы объявляемых переменных (после них ставится двоеточие); real — ключевое слово, означающее, что переменная использует-ся для хранения действительных чисел; integer — ключевое слово, означающее, что переменная служит для хранения целых чисел. Целые числа. С целыми числами компьютеру работать наиболее удобно. Для их хранения требуется не слишком много места, и опе-рации с ними выполняются в десятки раз быстрее, чем с другими типами данных. Тем не менее, даже при такой простоте существует не один, а несколько типов целых чисел. Они могут различаться по тому, может ли число быть отрицательным или только положитель-ным, а также по тому, к какому диапазону оно принадлежит. Одно дело, когда число небольшое — от 0 до 255 (ему отводится один байт), и другое дело, если оно большое, да еще со знаком — от -263 до +263-1 (такому числу для хранения отводится 8 байтов). Для примера скажем, что в языке Паскаль (Pascal) предусмотрено 9 раз-личных типов только для целых чисел. Чуть меньше количество це-лых типов в языке СИ++ (C++). Наиболее часто в языке Паскаль (Pascal) применяется тип Integer, позволяющий хранить более 4 миллиардов целых чисел со знаком: от -2 147 483 648 до +2 147 483 647. На хранение такого числа от-водится 4 байта оперативной памяти. Действительные числа. Для действительных чисел тоже преду-смотрено несколько разных типов, причем в разных языках про-граммирования они могут быть разными. В отличие от целых типов

эти типы различаются не наличием знака числа (действительное число всегда считается имеющим знак) и не диапазоном, к которо-му могут принадлежать значения, а точностью____________, с которой записано действительное число. Для хранения действительных чисел с обычной точностью от-водится 10 байтов в оперативной памяти. При операциях с такими числами возникает ошибка в 7-10 знаке. Например, если сохранено число 123456,789, то в расчетах оно может участвовать, как 123456,7 или как 123456,8. В языке Паскаль (Pascal) переменные этого типа объявляются ключевым словом single, а в языке СИ++ (C++) — ключевым словом float. Для инженерных расчетов обычная точность действительных чи-сел, как правило, достаточна. Но в научных и экономических расче-тах она неприемлема. Например, при расчете денежных сумм, изме-ряющихся миллионами рублей, могут быть потеряны копейки, а ес-ли суммы измеряются миллиардами, то ошибки могут составлять сотни рублей, что недопустимо. Поэтому наиболее часто использу-ются числа двойной точности, на хранение которых расходуется 20 байтов. В языках Паскаль (Pascal) и СИ (C++) этот тип чисел объявляется одинаково — ключевым словом double. Текстовые строки. В оперативной памяти можно хранить также текстовые строки — это особый тип данных. Он называется стро-ковым. Переменные, в которых хранятся строки, также называются строковыми. Для хранения такой переменной в оперативной памя-ти отводится столько байтов, сколько символов входит в строку, включая пробелы, цифры и знаки препинания. В языках Паскаль (Pascal) и СИ++ (C++) такие переменные объявляются с помощью ключевого слова AnsiString. Логические значения. В ходе логических рассуждений люди очень часто прибегают к двум простейшим понятиям: Да и Нет. Под ними могут пониматься любые альтернативы: День — Ночь, Жарко — Холодно, Мальчик — Девочка, Сдан (экзамен) — Не сдан. Ко-нечно, человек, мыслящий только в двух категориях, уподобляется машине, поэтому люди используют также и промежуточные поня-тия, например кроме зимы и лета они различают осень и весну, а от конкретных вопросов, требующих ответа «Да» или «Нет», предпо-читают увильнуть, ответив: «Может быть». Тем не менее, в реальной жизни, а особенно в технике встреча-ются ситуации, когда возможны только два значения: Включено — Выключено; Заряд есть — Заряда нет; Расчет закончен — Расчет не закончен и т. п. Для описания логических значений используют два ключевых слова: True (Истина) и False (Ложь). Что понимать под «истиной», а что под «ложью» — дело программиста. Например, пока расчет по программе не завершен, логическая переменная может иметь значе-ние False, когда нужный результат достигнут, она получит значение True, это станет сигналом для программы завершить работу, выдать результат. Логические данные — самые простые и удобные для компьюте-ра. Для их хранения нужно совсем немного оперативной памяти — достаточно одного бита данных. Поскольку один байт состоит из восьми битов, то в нем можно запомнить до восьми разных логиче-ских значений. Логические операции — самые быстрые. На них процессор тратит времени еще меньше, чем даже на работу с целы-ми числами. Для хранения логических значений программист может исполь-зовать логические переменные. В языке Паскаль (Pascal) они объяв-ляются ключевым словом Boolean, а в языке СИ++ (C++) — словом bool. Специальные типы данных. Выше мы привели лишь основные типы данных, реализованные в большинстве языков программиро-вания. Это далеко не все типы, но для введения в программирование этого пока достаточно. К этому добавим еще, что современные языки программирования позволяют программистам придумывать любые новые типы данных и определять, какие операции с ними возможны, а какие — нет. На-пример, программист, пишущий программу-календарь, может придумать новый тип данных, предназначенный только для хране-ния названий месяцев. Наверное, он запретит для переменных этого типа операции сложения и умножения, потому что непонятно, ка-кой смысл прибавлять к январю февраль или умножать май на сентябрь. Возможно, он придумает и запрограммирует для этого типа какие-то необычные, нужные ему операции.




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 1680; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.