Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Введение. Написание хороших программ требует ума, вкуса и терпения

Написание хороших программ требует ума, вкуса и терпения.

Б. Страуструп.

Курс «Программирование» имеет две основные цели:

1. получить представление о программировании как науки и как творческом процессе, познакомиться с основными конструкциями языков программирования и способами записи алгоритмов решения задач с их помощью. Подчеркиваю, что в рамках решения этой задачи речь идет не о конкретном языке программирования, а об основных концепциях. Разумеется, иллюстрация этих конструкций будет приводиться на конкретном языке программирования (языке С), но изучение синтаксиса конкретного языка – не является целью лекционных занятий;

2. научиться работать в интегрированной среде программирования, составлять, отлаживать, тестировать и документировать программы хотя бы на одном из языков программирования (на практических занятиях мы будем работать в среде MS Visual Studio, изучать синтаксис языка С).

 

Прежде всего, попытаемся разобраться в таких понятиях как программа и программирование.

Энциклопедический словарь Брокгауза и Эфрона 1898 года издания трактовал понятие программа как «краткое изложение того, что должно быть исполнено». Разумеется, никакого отношения к вычислительным методам такое определение не имело, однако в основе своей понимание программы как предварительного составления некоторого плана действий не противоречит современному понятию сущности программирования.

Большая советская энциклопедия (1975 г.) определила программу как «упорядоченную последовательность действий для ЭВМ, реализующую алгоритм решения задачи», а программирование – и как «процесс составления программы для ЭВМ» и как научную дисциплину, «изучающую программы для ЭВМ и способы их написания, проверки и улучшения».

Никлаус Вирт (создатель языка Паскаль, названного в честь Блеза Паскаля 17 век) определил программу следующим образом: «Программа – это конкретное, основанное на некотором реальном представлении и строении данных, воплощение абстрактного алгоритма». (Книга «алгоритмы + структуры данных = программы»). Сегодня, когда мир вступает в информационную эпоху, программа в большинстве случае рассматривает как товар (роль Б. Гейтса!), а программирование превратилось в отрасль, которая производит самую передовую в технологическом аспекте продукцию, востребованную современной цивилизацией.

Необходимо четко осознавать, что фактически, программа – это последовательность команд процесса ЭВМ, реализующая алгоритм решения некоторой задачи.

В современном мире большинство программ создаются с помощью интегрированной система программирования (IDEIntegrated Development Environment). Это программная система, содержащая

- текстовый редактор (где создается исходный текст программы на языке программирования),

- транслятор (программу, формирующую объектные модули на основе исходного текста),

- редактор связей (программу, формирующую исполняемый модуль на основе объектных),

- библиотеки функций и классов,

- отладчик.

К сожалению, в России на рынке программного обеспечения наблюдается весьма плачевная картина (исключение - бухгалтерские программы, игры). Так было не всегда. В СССР существовала мощная школа программирования (Киев, Москва, Новосибирск, Минск), которая не отставала от американской, а по ряду параметров и превосходила ее. В начале 60-х годов именно в СССР была создана самая производительная в Европе и одна из самых лучших машин в мире БЭСМ, имеющая оригинальную архитектуру. Но в конце 60-х годов руководство СССР приняло ошибочное решение начать производство машин, архитектура которых повторяла архитектуру IBM-360. После этого началось отставание по элементарной базе. Отечественные программы необходимо было вместить в меньший объем памяти и заставить работать на процессорах с меньшей производительностью. А потом была перестройка. Однако школа русского программирования сохранила свое неповторимое лицо. И я смею надеяться, что именно вы будете тем поколением, которое возродит российский рынок программного обеспечения.

Несомненно, что программирование это творческий процесс. Поэтому нельзя научить программированию, можно лишь научить учиться программированию, дать элементарные знания, привить навыки.

Как научиться писать хорошие программы? Точно также как научиться писать хорошую прозу. Существует два совета:

1. Знай, что хочешь сказать

2. Тренируйся. Подражай хорошему стилю.

Также как в случае с естественными языками огромную пользу приносит знание, по крайней мере, двух языков программирования.

 

Языки программирования относятся к искусственным языкам. Искусственный язык отличается от естественного происхождением и наличием очень ограниченного количества лексем и строгих правил записи выражений.

Язык программирования служит двум целям: он предоставляет программисту инструмент для описания подлежащих выполнению действий и набор концепций, которыми оперирует программист, обдумывая, что можно сделать.

Первая цель в идеале требует языка близкого к компьютеру, чтобы все важные и элементы компьютера управлялись просто и эффективно способом, достаточно очевидны для программиста. Язык С создавался, отталкиваясь именно от этой идеи. Вторая цель в идеале требует языка, близкого к решаемой задачи, чтобы концепции решения могли быть выражены понятно и непосредственно. Эта идея привела к появлению на основе синтаксиса языка С таких современных языков программирования как С++, С#, Java. Сегодня языки С++(расширение языка С), и С-подобные языки С# и Java являются самыми распространенными из языков программирования. Они используется сотнями тысяч программистов практически во всех прикладных областях.

Язык С был разработан в начале 1970-х годов сотрудниками копмании Bell Labs Кеном Томпсоном и Денисом Ритчи как развитие языка Би. Несмотря на то, что Си не разрабатывался для новичков, он числе широко используется для обучения основам программирования. Это вызвано, прежде всего его свойствами:

- ясен для обучения основным концепциям,

- эффективен и гибок для реализации проектов,

- синтаксис языка является основой для многих современных языков программирования, поддерживающих сложным концепции и методы.

Тема 1. Структура программы на языке С и схема подготовки исполняемой программы

Основная программная единица на языке С - это текстовый файл с расширением.с (в языке С++ с раcширением.cpp), который может быть создан в любом текстовом редакторе. Процесс перевода программы в машинные коды состоит из следующих этапов. Сначала программа передается препроцессору, который выполняет директивы, содержащиеся в ее тексте (например, включение в текст так называемых заголовочный файлов, в который содержатся описания используемых в программе элементов). Например,

#include <stdio.h>

вставляет в текст программы текст из заголовочного файла stdio.h.

 
 

В результате препроцессор изменяет исходный текст программы. Сформированный таким образом текст программы (полный текст программы) поступает на компиляцию. Компилятор (один из видов транслятора), во-первых, выделяет из поступившего текста программы лексемы, а затем на основе грамматики языка распознают смысловые конструкции языка, такие как выражения, операторы, блоки операторов. В результате работы компилятора либо выдается сообщение о синтаксических ошибках, либо в случае их отсутствия формируется объектный модуль программы с расширением.obj. Объектный модуль отправляется на компоновку. Компоновщик (или редактор связей) дополняет объектный модуль нужными библиотечными функциями, обращение к которым содержится в любой программе и, если необходимо, объединяет с другими объектными модулями и формирует исполняемый модуль программы с расширением.exe.

 

Для того чтобы описать структуру программы, написанной на C, рассмотрим простейшую программу, выводящую на экран строку Hello, world.

// Program1.cpp

#include <stdio.h>

void main()

{

printf("%s","\nHello, world\n");

}

В первой строке данной программы находится однострочный комментарий. Комментарий – это текст программы, который не анализируется компилятором и служит для пояснений текста. В С++ комментарии могут быть заданы двумя способами. В С комментарии могут быть заданы двумя способами. Для однострочных комментариев используют символы //, как в нашем примере. Для многострочных комментариев можно использовать символы /*, */, между которыми и должен находится сам текст комментария. В тексте комментария могут содержаться любые символы, а вся последовательность символов эквивалентна символу пропуска (например, символу пробела). Комментарии одного типа не могут быть вложенными, однако можно использовать символы // для того, чтобы закомментировать символы /*… */, а символами /*…*/можно закомментировать //. В приведенном комментарии указано имя файла, в котором хранится исходный текст программы

Во второй строке программы помещена команда препроцессора (директива) #include, позволяющая подключить стандартные библиотеки функций используемого компилятора или оттранслированные модули, написанные самим программистом. Директива #include имеет два формата:

#include <имя_файла>

#include “имя_файла”.

В первом случае имя_файла определяет текстовый (заголовочный) файл, содержащий прототипы (описания) той или иной группы стандартных для данного компилятора функций. Например, в нашем случае директива #include <stdio.h> обеспечивает включение стандартных функций ввода даннях с клавитуры и вывода на экран. Если программист хочет использовать в своей программе такие стандартные функции как косинус (cos), синус (sin), степень числа (pow), то он должен использовать директиву #include <math.h>, для использования функции ожидания ввода любого символа с клавиатуры без отображения на экране, то есть функции задержки экрана (getch) – директиву #include <conio.h>, функцию конкатенации строк (strcat)– директиву #include <string.h>. Если в программе, например, используется функция cos (функция вычисления косинуса), но не указана директива #include <math.h>, то на этапе компиляции возникнет ошибка.

Если имя_файла после директивы #include указано в кавычках, это означает, что используется не стандартный заголовочный файл, а файл, созданный самим программистом.

Третья строка программы является заголовком функции с именем main. Функция – это поименованная часть программы, выполняющая одну логическую подзадачу. Каждая программа должна содержать функцию с именем main, и работа программы начинается с выполнения этой функции. Перед именем main помещено служебное слово void – спецификатор типа, указывающий, что функция main в данной программе не возвращает никакого значения. Круглые скобки после main требуются в связи с синтаксисом заголовка любой функции и содержат список параметров. В нашем примере параметры не нужны и этот список пуст.

Тело любой функции в языке С – это заключенная в фигурные скобки последовательность описаний и операторов. Каждое описание и оператор заканчивается символом ‘;’. В данном примере в теле функции main нет явных описаний, а есть только один оператор

printf ("%s","\nHello, world\n");

 

В соответствии с информацией, содержащейся в файле stdio.h, printf является именем функции, который обеспечивает вывод информации на экран монитора. (Поэтому, если строка #include <stdio.h> будет отсутствовать в программе, то имя printf будет воспринято как неизвестное на этапе компиляции программы). Параметр функции "%s" означает, что на экран будет выводится строка. В нашем примере это строковая константа "\nHello, world\n". Строковая константа в языке С –это последовательность символов, заключенная в двойные кавычки. В строке символ обратной косой черты ‘\’, за которым следует другой символ, обозначает один специальный символ, в данном случае, ‘\n’ является символом новой строки. Таким образом, выводимые символы в данном случае состоят из символа перевода строки, символов Hello, world и еще одного символа перевода строки.

<== предыдущая лекция | следующая лекция ==>
Предметный указатель | Общие сведения о программах, лексемах и алфавите
Поделиться с друзьями:


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


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



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




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