Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Документ'
Нормативный акт, устанавливающий обязательные вопросы, содержащиеся в характеристике, отсутствует. Характеристика составляется в произвольной форме, ...полностью>>
'Программа'
Программа социально-экономического развития Удмуртской Республики на 2005 - 2009 годы (далее - Программа) представляет собой стратегический программн...полностью>>
'Доклад'
Леонтьев Д.А. Психологические ресурсы преодоления стрессовых ситуаций: к уточнению базовых конструктов Психология стресса и совладающего поведения ...полностью>>
'Документ'
Теперь, когда впервые после 1996 года опять встала проблема выбора стратегии дальнейшего развития страны, обострилась борьба и в сфере идеологии. В ч...полностью>>

1. основы алгоритмизации

Главная > Документ
Сохрани ссылку в одной из сетей:

ВВЕДЕНИЕ

Наиболее важными вехами последних 15-20 лет в создании программ на языках высокого уровня являются методологии структурного и объектно-ориентированного программирования. Параллельно с ними сравнительно давно используется метод «автоматного» программирования, позволяющий в основу проектирования программы заложить алгоритм – конечный автомат в виде диаграммы состояний или таблицы последовательных переходов и выходов. В отличие от традиционных алгоритмов, включающих два вида компонент: условие и действие, конечный автомат дополнительно включает такую компоненту, как состояние.

На сегодня доминирующим языком программирования, без сомнения, является язык Си++. Это объясняется тем, что любой код, написанный на Си, чрезвычайно гибкий и легко переносится на различные платформы. В Си и Си++ входит много полезных особенностей – простота, объектная ориентированность и многое другое. Ввиду своего очень удобного объектно-ориентированного дизайна, данные языки являются хорошим выбором для быстрого конструирования различных компонентов – от высокоуровневой бизнес-логики до системных приложений, использующих низкоуровневый код.

Четкие границы между Си и Си++ в пособии не проводились, поскольку для начального освоения этого языка условности, связанные с разграничением, не являются столь необходимыми. Если нет специальных оговорок, будем подразумевать язык Си. При использовании специфических функций Си++ это будет оговариваться особо.

1. ОСНОВЫ АЛГОРИТМИЗАЦИИ

1.1. Алгоритм и программа

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

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

Сначала всегда разрабатывается алгоритм действий, а потом он записывается на одном из языков программирования. Текст программы обрабатывается специальными служебными программами – трансляторами. Языки программирования – это искусственные языки. От естественных языков они отличаются ограниченным числом «слов» и очень строгими правилами записи команд (операторов). Совокупность этих требований образует синтаксис языка программирования, а смысл каждой конструкции – его семантику.

1.2. Свойства алгоритма

1. Массовость: алгоритм должен применяться не к одной задаче, а к целому классу подобных задач (алгоритм для решения квадратного уравнения должен решать не одно уравнение, а все квадратные уравнения).

2. Результативность: алгоритм должен приводить к получению результата за конкретное число шагов (при делении 1 на 3 получается периодическая дробь 0,3333(3), для достижения конечного результата надо оговорить точность получения этой дроби, например, до 4 знака после запятой).

3. Определенность (детерминированность) – каждое действие алгоритма должно быть понятно его исполнителю (инструкция к бытовому прибору на японском языке для человека, не владеющего японским языком, не является алгоритмом, так как не обладает свойством детерминированности).

4. Дискретность – процесс должен быть описан с помощью неделимых операций, выполняемых на каждом шаге (т. е. шаги нельзя разделить на более мелкие шаги).

Алгоритмы можно представить в следующих формах:

1) словесное описание алгоритма,

2) графическое описание алгоритма,

3) с помощью алгоритмического языка программирования.

1.3. Компиляторы и интерпретаторы

С помощью языка программирования создается текст, описывающий ранее составленный алгоритм. Чтобы получить работающую программу, надо этот текст перевести в последовательность команд процессора, что выполняется при помощи специальных программ, которые называются трансляторами. Трансляторы бывают двух видов: компиляторы и интерпретаторы. Компилятор транслирует текст исходного модуля в машинный код, который называется объектным модулем за один непрерывный процесс. При этом сначала он просматривает исходный текст программы в поисках синтаксических ошибок. Интерпретатор выполняет исходный модуль программы в режиме оператор за оператором, по ходу работы переводя каждый оператор на машинный язык.

1.4. Языки программирования

Разные типы процессоров имеют разный набор команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. Языком самого низкого уровня является язык ассемблера, который просто представляет каждую команду машинного кода в виде специальных символьных обозначений, которые называются мнемониками. С помощью языков низкого уровня создаются очень эффективные и компактные программы, так как разработчик получает доступ ко всем возможностям процессора. Так как наборы инструкций для разных моделей процессоров тоже разные, то каждой модели процессора соответствует свой язык ассемблера, и написанная на нем программа может быть использована только в этой среде. Подобные языки применяют для написания небольших системных приложений, драйверов устройств и т. п.

Языки программирования высокого уровня не учитывают особенности конкретных компьютерных архитектур, поэтому создаваемые программы на уровне исходных текстов легко переносятся на другие платформы, если для них созданы соответствующие трансляторы. Разработка программ на языках высокого уровня гораздо проще, чем на машинных языках.

2. ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКА СИ

2.1. Структура программы на Си

Директивы препроцессора управляют преобразованием текста программы до ее компиляции. Исходная программа, подготовленная на Си в виде текстового файла, проходит 3 этапа обработки:

1) препроцессорное преобразование текста;

2) компиляция;

3) компоновка (редактирование связей или сборка).

После этих трех этапов формируется исполняемый код программы. Задача препроцессора – преобразование текста программы до ее компиляции. Правила препроцессорной обработки определяет программист с помощью директив препроцессора. Директива начинается с #. Например,

1) #define – указывает правила замены в тексте.

#define ZERO 0.0 – означает, что каждое использование в программе имени ZERO будет заменяться на 0.0.

2) #include <имя заголовочного файла> – предназначена для включения в текст программы заголовочных файлов, поставляемых вместе со стандартными библиотеками. Каждая библиотечная функция Си имеет соответствующее описание в одном из заголовочных файлов. Список стандартных заголовочных файлов определен стандартом языка. Употребление директивы include не подключает соответствующую стандартную библиотеку, а только позволяет вставить в текст программы описания из указанного заголовочного файла. Подключение кодов библиотеки осуществляется на этапе компоновки, т.е. после компиляции. Хотя в заголовочных файлах содержатся все описания стандартных функций, в код программы включаются только те функции, которые используются в программе.

После выполнения препроцессорной обработки в тексте программы не остается ни одной препроцессорной директивы.

Некоторые заголовочные файлы:

  • ALLOC.H – функции для работы с памятью

  • CONIO.H – функции консольного ввода-вывода

  • DIR.H – работа с файлами и каталогами

  • IO.H – функции для работы с файлами

  • IOSTREAM.H – библиотека Си++ потоков ввода/вывода

  • COMPLEX.H, MATH.H – математические функции

  • STDIO.H – стандартная библиотека ввода-вывода

  • STDLIB.H – библиотека стандартных функций

  • STRING.H – функции для работы со строками

  • TIME.H – функции для работы с датой и временем

Программа представляет собой набор описаний и определений и состоит из набора функций. Функции – это строительные блоки языка, самостоятельные единицы программы, спроектированные для решения конкретных задач. Обычно функции в программе повторяются несколько раз. Среди функций всегда должна быть функция с именем main. Без нее программа не может быть выполнена.

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

тип <имя_функции> (список параметров);

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

После определения прототипа размещаются заголовок и тело функции. Чаще всего заголовок функции совпадает с ее прототипом. Тело функции – это последовательность определений, описаний и исполняемых операторов, заключенных в фигурные скобки. Определения, описания и операторы заканчиваются точкой с запятой. После фигурных скобок точка с запятой не ставится.

Определения вводят объекты (объект – это именованная область памяти, частный случай объекта – переменная), необходимые для представления в программе обрабатываемых данных. Примерами являются:

float x; //объявление переменной

int y = 10; // объявление переменной и ее инициализация

Описания уведомляют компилятор о свойствах и именах объектов и функций, описанных в других частях программы.

Операторы определяют действия программы на каждом шаге ее исполнения.

Пример программы печати строки на Си:

#include <stdio.h>

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

void main(void)

{ //начало

printf (“Hello! “);

//вызов стандартной функции printf( ) из заголовочного файла stdio.h, //выводящей на экран информацию

} //конец

2.2. Типы данных

Типы данных характеризуют размер области памяти, которую будет занимать данное.

Тип данных

Определение

Размер, бит

char

символьный

8

int

целое, обычно соответствующее естественному размеру целых в используемой машине

16

float

с плавающей точкой одинарной точности

32

Продолжение таблицы

double

с плавающей точкой двойной точности

64

long double

с плавающей точкой максимальной точности

80

long

целый увеличенной длины

32

short int (short)

целый уменьшенной длины

16

signed int (signed)

знаковый, то есть целое со знаком

16

unsigned int (unsigned)

беззнаковый, то есть целое без знака

16

void

отсутствие значения

2.3. Переменные

Переменная – это именованная область памяти. Определение переменных: тип список_имен_переменных, где имена переменных – произвольно выбранная последовательность символов, разделенных запятыми, тип – тип данных (int, double, ...). Все переменные должны быть описаны до их использования.

Например:

char symbol, l;

int n9, number;

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

auto – автоматиче ская,

extern – внешняя,

static – статическая,

register – регистровая.

Например:

static int a;

register int b;

Если ключевого слова перед спецификацией типа локальной переменной при ее объявлении нет, то по умолчанию она принадлежит классу auto.

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

Автоматические переменные хранятся в оперативной памяти машины. Регистровые (register) переменные хранятся в регистрах процессора. Доступ к переменным, хранящимся в регистровой памяти, гораздо быстрее, чем к тем, которые хранятся в оперативной памяти. В остальном автоматические и регистровые переменные аналогичны. Регистровая память процессора невелика, и если доступных регистров нет, то переменная становится автоматической.

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

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

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

Простые переменные (не массивы или структуры) можно инициализировать при их описании, добавляя вслед за именем знак равенства и константное выражение.

2.4. Константы

Константа – это значение, которое не может быть изменено. Константы могут быть любого базового типа данных.

Символьная константа

Символьная константа – это один символ, заключенный в одинарные кавычки: char 'x'. Некоторые символы могут быть представлены как символьные константы с помощью управляющих последовательностей.

'\n'

новая строка

'\t'

табуляция

'\0'

нулевой символ

'\\'

обратная косая черта

'\''

одинарная кавычка

Продолжение таблицы

'\r'

возврат каретки (курсора) к началу строки

'\a'

сигнал-звонок

'\"'

кавычка

'\b'

возврат на одну позицию

'\f'

перевод (прогон) страницы

'\v'

вертикальная табуляция

'\?'

знак вопроса

Целые и вещественные константы

Целые константы бывают: десятичные, восьмеричные (последовательность цифр не содержит цифр старше 7 и начинается с 0) и шестнадцатеричные (последовательность шестнадцатеричных цифр, перед которой записаны символы 0x или 0X).

Вещественные константы состоят из целой части, десятичной точки, дробной части и показателя десятичной степени "e" или "E". Целая или дробная части, показатель степени или десятичная точка могут опускаться. Например:

44. 3.14 44е0 .14 0.0

Константы перечислимого типа

Константы могут вводиться с помощью перечисления:

enum тип перечисления {список именованных констант}

enum – служебное слово, вводящее перечисление, тип перечисления – название, список именованных констант – разделенная запятыми последовательность имен констант или вида

имя константы = значение константы.

Константное выражение

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

#define maxline 1000

char line[maxline + 1];

или

seconds = 60 * 60 * hours;

Строковая константа

Строковая константа – это последовательность, состоящая из нуля или более символов, заключенных в двойные кавычки, как, например,

"i am a string"

Кавычки не являются частью строки, компилятор автоматически помещает в конец каждой строки нуль-символ '\0', следовательно для хранения строки требуется на одну ячейку памяти больше.

Именованные константы

Вводятся как

const тип имя константы = значение константы;

const показывает, что определяемый объект имеет постоянное значение, тип – тип данных, имя константы – произвольный символ (последовательность символов), значение константы должно соответствовать её типу.

Например

const double E = 2.72;

const f = 7;

(по умолчанию присваивается тип int)

2.5. Операции

Знак операции – это символ или комбинация символов, которые сообщают компилятору о необходимости произвести определенные арифметические, логические или другие действия.

Арифметические операции



Скачать документ

Похожие документы:

  1. Основы алгоритмизации

    Документ
    Исполнитель - это устройство управления, которое выполняет алгоритм. Возможности любого исполнителя ограничены. Он может выполнять только заданный набор команд, называемых допустимыми действиями ис­полнителя или системой команд исполнителя.
  2. Основы алгоритмизации и программирования (11 ч)

    Документ
    Простые и составные условия. Основные алгоритмические конструкции: ветвление, повторение. Запись основных алгоритмических конструкций на языке программирования.
  3. «Основы алгоритмизации и объектно-ориентированного программирования на языке Gambas»

    Тезисы
    Тема «Алгоритмизация и программирование» начинается на всех ступенях средней школы, но на разном уровне. В начальной школе происходит знакомство на интуитивном уровне с понятиями алгоритма, алгоритмических конструкций, основ алгебры логики.
  4. Рабочая программа дисциплины Программирование и основы алгоритмизации (Наименование дисциплины) (2)

    Рабочая программа
    Целью дисциплины «Программирование и основы алгоритмизации» является формирование у студентов знаний об основных принципах алгоритмизации и теории алгоритмов, программе и программировании, а также формирование практических навыков
  5. Методические указания к лабораторной работе по курсу «Информатика» Основы алгоритмизации и программирования на языке Pascal

    Методические указания
    В соответствующую графу записать математическое выражение на языке Pascal и нажать ОК. Если выражение введено не верно, то на экране появится соответствующая запись.

Другие похожие документы..