- •Содержание
- •Глава 1. Основные принципы разработки алгоритмов и программ 8
- •Глава 2. Знакомство с технологией .Nет 30
- •Глава 3. Установка visual studio. Консольные приложения 42
- •Глава 4. Введение в язык c# 52
- •Глава 5. Операции и выражения. Программы линейной структуры 67
- •Глава 6. Программирование ветвящихся процессов 85
- •Глава 7. Программирование циклических процессов 92
- •Предисловие
- •Введение
- •Глава 1. Основные принципы разработки алгоритмов и программ
- •1.1 Этапы решения задач на эвм
- •1.1.1 Постановка задачи
- •1.1.2 Формализация или математическая постановка задачи
- •1.1.3 Выбор или разработка метода решения
- •1.1.4 Разработка алгоритма
- •1.1.5 Программирование
- •1.1.6 Отладка
- •1.1.7 Вычисление и обработка результатов
- •1.2 Формы записи алгоритмов
- •1.2.1 Словесное описание
- •1.2.2 Запись алгоритма с помощью схем
- •1.2.3 Псевдокоды
- •1.2.4 Способ записи на языке программирования
- •1.3 Свойства, которыми должны обладать алгоритмы
- •1.4 Характеристики качества программного продукта
- •1.5 Технология программирования хороших программ
- •1.5.1 Способы проектирования алгоритмов и программ
- •1.5.2 Основные идеи структурного программирования
- •При разработке алгоритма нужно руководствоваться следующими рекомендациями:
- •1.5.3 Дополнительные рекомендации
- •1.6 Контрольные вопросы
- •Глава 2. Знакомство с технологией .Nет
- •2. 1 Причины появления новой платформы и нового языка
- •2.2 Платформа .Nет Framework
- •2.3 Интегрированная среда разработки Visual Studio
- •2.3.1Общеязыковая среда выполнения clr
- •2.3.2 Новации Visual Studio 2010
- •2.4 Основные понятия объектно-ориентированной технологии
- •2.4.1 Инкапсуляция
- •2.4.2 Полиморфизм
- •2.4.3 Наследование
- •2.4.4 Классы
- •Контрольные вопросы
- •Глава 3. Установка visual studio. Консольные приложения
- •3.1 Установка Visual Studio
- •3.2 Разработка приложений
- •3.2.1 Консольные приложения
- •3.2.1.1 Создание проекта. Основные окна среды
- •Контрольные вопросы
- •Глава 4. Введение в язык c#
- •4.1 Историческая справка
- •4.2 Основы языка с#
- •4.2.1 Алфавит языка
- •4.2.2 Лексемы языка, директивы препроцессора и комментарии
- •4.3 Типы данных
- •4.3.1 Классификация типов данных
- •4.3.2 Встроенные типы данных
- •4.3.2.1 Целые типы
- •4.3.2.2 Вещественные типы
- •4.3.2.3 Логический тип
- •4.3.2.4 Символьный тип
- •4.3.2.5 Финансовый тип
- •4.3.3 Литералы
- •4.4 Переменные
- •4.4.1 Объявления переменных
- •4.4.2 Инициализация переменных
- •4.4.3 Область видимости переменных
- •4.5 Именованные константы
- •Контрольные вопросы
- •Глава 5. Операции и выражения. Программы линейной структуры
- •5.1 Выражения
- •5.1.1 Операции
- •5.1.1.1 Арифметические операции
- •5.1.1.2 Операции отношения, сдвига с#
- •5.1.1.3 Поразрядные и логические операции с#
- •5.1.1.4 Операции присваивания
- •5.1.1.5 Условная операция
- •5.2 Преобразование и приведение типов
- •5.2.1 Присвоение переменной одного типа значения другого типа
- •5.2.2 Явное преобразование типа
- •5.2.3 Преобразование типов в выражениях
- •5.3 Класс Math
- •Математические функции можно использовать только с величинами числовых типов. Углы тригонометрических функций должны быть представлены в радианах.
- •5.4 Линейные алгоритмы и программы
- •5.4.1 Простейшие способы вывода
- •5.4.2 Простейшие способы ввода с клавиатуры
- •5.5 Примеры
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 6. Программирование ветвящихся процессов
- •6.1 Условные операторы
- •6.2 Алгоритмы и программы разветвленной структуры
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
- •Глава 7. Программирование циклических процессов
- •7.1 Понятие цикла
- •7.2 Операторы управления
- •7.2.1 Оператор goto
- •7.2.2 Специальные операторы управления
- •7.2.3 Операторы циклов
- •7.3 Программирование вычислительных процессов усложненной структуры
- •7.3.1 Итерационные циклы
- •7.3.2 Вложенные циклы
- •Контрольные вопросы
- •Варианты заданий для самостоятельной работы
1.5 Технология программирования хороших программ
В недалеком прошлом, когда ОП (оперативная память) была дорогой, а ЭВМ работали намного медленнее, хорошими программистами считались те, кто мог писать наиболее эффективные программы. Им приходилось использовать нестандартные решения, получая хитроумные программы, которые трудно было читать и понимать через некоторый промежуток времени даже самому автору. Изменения, которые вносились со временем в программу, еще больше усложняли ее.
Учитывая, что затраты на содержание программистов растут быстрее, чем производительность, пришлось обратить внимание на сам процесс работы программистов. Выяснилось, что большую часть времени программисты тратят на нахождение и исправление логических ошибок, на модификацию существующих программ в связи с изменением условий. Следовательно, рост продуктивности программирования возможен благодаря существенному увеличению надежности программ и облегчению их модификации.
Практика программирования показала необходимость научно обоснованной методологии разработки и документирования алгоритмов и программ. Такой методологией, зародившейся в начале 70-х годов и получившей широкое распространение, является структурное программирование.
Структурное программирование (СП) позволяет избавиться, с одной стороны, от плохой структуры программ, с другой – позволяет создавать такие программы, которые можно было бы понимать, сопровождать, модифицировать без участия автора.
Программирование – это написание, корректирование и тестирование программ.
Структурное программирование – это проектирование, написание, тестирование программы в соответствии с заранее определенной дисциплиной. В структурном программировании важными факторами являются форма и дисциплина. Главное в нем:
-
нисходящая разработка;
-
непосредственно структурное программирование.
Идея структурного программирования принадлежит Дейкстре. Основное внимание его было сосредоточено на том, какими должны быть структуры программ, чтобы без значительных усилий можно было бы находить доказательства их правильности. Разработанные им положения позволили создавать структурированные программы, которые имеют последовательную организацию и легко читаются сверху вниз. Структурированные программы облегчают процесс документирования, так как текст программы уже несет основную информацию о задаче.
Более того, оказалось, что структурированные программы это и наиболее эффективные программы. Вообще эффективность программы определяется качеством транслятора. А хорошие трансляторы позволяют получить более эффективные программы при трансляции именно структурированных программ.
1.5.1 Способы проектирования алгоритмов и программ
Наибольшее распространение получили три способа проектирования алгоритмов и программ – восходящий, нисходящий, встречный.
Восходящее (снизу вверх) проектирование использует идею выделения достаточно крупных подалгоритмов и модулей, каждый из которых реализует определенные функции.
Выбор модулей определяется различными соображениями: функциональной законченностью, размерами, однородностью структур данных и др. Для выделенных модулей составляются спецификации, определяется связь по входу и выходу. Далее каждый модуль алгоритма автономно разрабатывается и проверяется. После разработки модулей с учетом связей по входу и выходу осуществляется объединение в подсистемы, которые подвергаются контролю. Испытанные подсистемы объединяются в программную систему, которая подвергается комплексной проверке.
Следовательно, восходящее проектирование начинается с уровня базовых понятий и развивается путем формирования на их основе абстрактных понятий и, наконец, приводит к таким понятиям, в терминах которых выражается решение всей задачи.
Основными недостатками восходящего способа проектирования являются:
-
сложность процесса объединения отдельных модулей в алгоритм;
-
трудность исправления ошибок, допущенных на ранних стадиях разработки;
-
сложность контроля разработки и прогноза завершения.
Нисходящее (сверху вниз) проектирование начинается с постановки задачи, которую требуется решить, и развивается далее путем разбиения ее на подзадачи. В конечном счете, это приводит к таким подзадачам, решение которых легко выразить в терминах базовых конструкций. Процесс проектирования включает в себя следующие действия:
-
производится декомпозиция общей задачи на точно определенные подзадачи;
-
доказывается, что если каждая подзадача решена корректно и полученные решения взаимосвязаны, то первоначальная задача будет решена корректно.
Процесс декомпозиции повторяется для подзадач, и доказывается корректность для выполненного разбиения. Этот процесс повторяется до получения подзадач настолько простых, что решение выражается базовыми конструкциями.
Такой способ проектирования алгоритмов и программ в виде иерархической структуры позволяет решать громоздкие и сложные задачи. При нисходящей разработке появляется возможность проверки алгоритма или проверки и отладки программы с самого начала разработки и тем самым создается ситуация выявления ошибок на ранних стадиях проектирования программ.
Так как модули программ разрабатываются сверху вниз, то вместо модулей нижнего уровня используются программные заглушки. Они требуются только для того, чтобы позволить модулю верхнего уровня проверить взаимодействие с модулем нижнего уровня. Программная заглушка содержит входные и выходные операторы и выдает сообщения о своем выполнении.
При разработке программы с использованием нисходящего проектирования не требуется проведения комплексной отладки, которая занимает при других методах разработки 2540% от общего времени разработки программы. При этом разработка всей программы продвигается быстрее, чем разработка компонентов нижних уровней. Может выясниться, что отдельные компоненты не выполняют возложенные на них функции (например, обеспечение требуемой точности и времени вычисления).
Реальная стратегия разработки алгоритмов и программ почти всегда представляет собой разумное сочетание нисходящего и восходящего способов проектирования (встречное проектирование).