Советы и лайфхаки

Основы программирования на c – Скачать Основы программирования на языке С-C++ (Н.В. Вознесенская, И.Н. Полунина)

Содержание

основы программирования на С++

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

ОСНОВЫ

ПРОГРАММИРОВАНИЯ НА C++

Учебно-методическоепособие для вузов

Составитель Ю.А. Крыжановская

Издательско-полиграфическийцентр Воронежского государственного университета

2008

Утверждено научно-методическимсоветом факультета ПММ 15 июня 2007 г., протокол № 10

Учебно-методическоепособие подготовлено на кафедре технической кибернетики и автоматического регулирования факультета прикладной математики, информатики и механики Воронежского государственного университета.

Рекомендуется для студентов 5 курса д/о факультета прикладной математики, информатики и механики.

Для специальности 010200 – Прикладная математика и информатика

2

Содержание

Введение ………………………………………………….………………………3

Структура программы……………………………………………………………3

Управляющие операторы ………………………………………………………10

Массивы и строки ………………………………………………………………13

Функции .…………………………………………………………………………15 Указатели ………………………………………………………………………..18 Структуры………………………………………………………………………..19 Знакомство с классами С++…………………………………………………….20 Задания …………………………………………………………………………..21 Литература ………………………………………………………………………23

Введение

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

Самое существенное улучшение по сравнению с языком С (явившимся основой для создания С++) касается концепции объектно-ориентированногопрограммирования.

Структура программы

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

Все программы на С++ должны начинаться с функции, называемой main(). В программе должен всегда присутствовать один и только один оператор с именем main, который указывает главные операторы программы – часть программы, которая выполняется первой.

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

Следом за main() вводятся инструкции. Инструкции могут быть представлены в виде стандартных команд и имен функций, содержащихся в библиотеках или написанных вами самостоятельно.

3

Функция состоит их четырех частей: типа возвращаемого значения, имени, списка параметров и тела функции. Первые три части составляют

прототип функции.

Список параметров заключается в круглые скобки и может содержать ноль или более параметров, разделенных запятыми. Тело функции содержит последовательность исполняемых инструкций и ограничено фигурными скобками ({}).

Точка с запятой является разделителем и отмечает конец инструкции. С++ является языком свободного формата. Это означает, что не имеет значения, где будут помещены ограничители и начало строки. Но для того, чтобы сделать программу более читабельной, принято следовать определенным правилам:

•помещать функцию main() на отдельной строке;

•помещать фигурные скобки на отдельных строках;

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

Команды и имена функций всегда пишутся маленькими буквами. Заглавные буквы обычно употребляются для задания имен констант и макроопределений.

Комментарии

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

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

Символы // можно использовать для того, чтобы закомментировать символы /* или */, а символами /* можно закомментировать //.

Оператор #include

При создании программ на C++ можно использовать операторы и определения, которые обеспечивает компилятор. При компиляции программы оператор #include заставляет компилятор включить содержимое заданного файла в начало вашей программы.

Файлы с расширением h, включаемые в начало (или заголовок) вашей программы, называются заголовочными файлами. Заголовочные файлы со-

4

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

Каждая создаваемая на C++ программа начинается с одного или нескольких операторов #include.

Замечание: Не стоит изменять содержимое заголовочных файлов. Это может привести к ошибкам компиляции в каждой создаваемой программе.

Использование void

Как только программа становится более сложной, ее нужно разделить на небольшие более легко управляемые части-функции.Если программа использует функцию, функция выполняет свою задачу и затем возвращает свой результат программе.

Для указания того, что функция не возвращает значения или не имеет значений, передаваемых в нее, используется слово void. Большинство простых программ на C++ не возвращают выходное значение статуса операционной системе. В этом случае следует размещать слово void перед main, как показано ниже:

void main () // Программа не возвращает значение

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

void main (void) // Программа не использует аргументы // командной строки

Ввод и вывод

Для вывода сообщения используется cout и двойной знак «меньше» (<<), называемый оператором вставки, как показано ниже:

cout << «Привет!»;

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

В C++ можно использовать с cout специальные символы для вывода табуляции или новой строки и даже для воспроизведения звука, легко отображать числа в десятичном, восьмеричном или шестнадцатеричном формате.

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

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

Ниже приводится пример простейшей программы:

#include <iostream.h> using namespace std; void main(void)

5

{

cout << «Привет!»;

}

Здесь iostream – стандартный заголовочный файл библиотеки ввода/вывода. Эта библиотека содержит информацию о потоке cout, используемом в этой программе. #include является директивой препроцессора, заставляющей включить в нашу программу текст из заголовочного файла iostream.

Если программа использует выходной поток cout, пользователь может перенаправить вывод программы с экрана дисплея в файл или на принтер. Подобным образом входной поток cin соответствует стандартному вводу операционной системы. В результате, если программа использует cin для выполнения операций ввода, пользователь может перенаправить ввод программы с клавиатуры на файл. Следующая программа CIN_LONG.CPP использует cin для чтения значения типа long (о типах см. раздел ниже):

#include <iostream.h> void main(void)

{

long value;

cout << «Введите большое число и нажмите Enter: «; cin >> value;

cout << «Было введено число » << value << endl;

}

Переменные

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

 

 

 

Тип

 

Хранимые значения

 

 

 

Char

 

Значения в диапазоне от –128до 127. Обычно используется для

 

хранения букв алфавита

 

 

 

 

 

int

 

Значения в диапазоне от –32768 до 32 767

 

 

 

unsigned

 

Значения в диапазоне от 0 до 65 535

 

 

 

Long

 

Значения в диапазоне от –2147 483 648 до 2 147 483 647

 

 

 

Float

 

Значения в диапазоне от –3.4×10–38 до 3.4 × 1038

 

 

 

Double

 

Значения в диапазоне от 1.7 × 10–308 до 1.7 × 10308

 

 

 

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

тип_переменной имя_переменной;

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

float salary, income_tax, retirement_fund;

6

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

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

asm

auto

break

case

catch char

class

const

Default

delete

do

double

Else

enum

extern float

Friend

goto

if

inline

int

long

new

operator

protected public

register return

short signed

sizeof static

Switch

template this

throw

try

typedef union unsigned

void

volatile

while

continue for

private

struct

virtual

Фрагмент следующей программы сначала объявляет переменные, а затем использует оператор присваивания, чтобы присвоить переменным значения:

#include <iostream.h> void main(void)

{

int age; float salary; age = 32;

salary = 25000.75;

cout << «Служащему » << age << » года (лет)» << endl; cout << «Оклад составляет $» << salary << endl;

}

Манипулятор endl не просто выводит данные (символ перехода на новую строку), но и производит сброс буфера вывода.

Замечание: Значения, присваиваемые переменным, не должны содержать запятые (например, 25,000.75 и 238,857). Если включить запятые, компилятор будет генерировать и выводить сообщения о синтаксических ошибках.

C++ позволяет также присваивать значение во время объявления переменной, например:

int age = 32;

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

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

7

глобальным именем) область видимости простирается от точки описания до конца файла, в котором появилось описание. Описание имени в блоке может скрывать (прятать) описание во внутреннем блоке или глобальное имя. Это значит, что можно переопределять имя внутри блока для ссылки на другой объект. После выхода из блока имя вновь обретает свое прежнее значение. Например:

int

x;

 

// глобальное x

f() {

x;

// локальное x прячет глобальное x

int

x = 1;

// присвоить локальному x

{

int x;

// прячет первое локальное x

 

}

x = 2;

// присвоить второму локальному x

 

 

// присвоить первому локальному x

x = 3;

}

 

 

// взять адрес глобального x

int* p = &x

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

int x; f()

{

int x = 1; // скрывает глобальное x ::x = 2; // присваивает глобальному x

}

Но возможности использовать скрытое локальное имя нет.

Константы

C++ дает возможность записи значений основных типов: символьных констант, целых констант и констант с плавающей точкой. Кроме того, ноль (0) может использоваться как константа любого указательного типа, и символьные строки являются константами типа char[]. Можно также задавать символические константы. Символическая константа – это имя, значение которого не может быть изменено в его области видимости. В C++ имеется три вида символических констант:

1)любому значению любого типа можно дать имя и использовать его как константу, добавив к его описанию ключевое слово const;

2)множество целых констант может быть определено как перечисление;

3)любое имя вектора или функции является константой.

8

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

Операция

Назначение

Пример

+

Сложение

total = cost + tax;

Вычитание

change = payment — total;

*.

Умножение

tax = cost * tax_rate;

/

Деление

average = total / count;

Следующая программа использует cout для вывода реультата нескольких простых арифметических операций:

#include <iostream.h> void main(void)

{

cout << «5 + 7 = » << 5 + 7 << endl; cout << «12 — 7 = » << 12 — 7 << endl;

cout << «1.2345 * 2 = » << 1.23.45 * 2 << endl; cout << «15 / 3 = » << 15 / 3 << endl;

}

Обратите внимание, что каждое выражение сначала появляется в кавычках, которые обеспечивают вывод символов (например, 5 + 7 =) на экран. Затем программа выводит результат операции и символ новой строки.

Следующая программа выполняет арифметические операции, используя переменные:

#include <iostream.h> void main(void)

{

float cost =15.50; // Стоимость покупки

float sales_tax = 0.06; // Налог на продажу 6% float amount_paid = 20.00; // Деньги покупателя float tax, change, total; // Налог, сдача, счет tax = cost * sales_tax;

total = cost + tax;

change = amount_paid — total;

cout << «Стоимость покупки: $» << cost << «\tHaлor: $» << tax << «\tОбщий счет: $» << total << endl;

cout << «Сдача покупателю: $» << change << endl;

}

Так как увеличение значения переменной представляет собой обычную операцию в программах, в C++ есть операция увеличения— двойной знак плюс (++). Эта операция обеспечивает быстрый способ прибавления единицы к значению переменной. Существует операция быстрого уменьшения (––).

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

++variable; variable++;

Так как первый оператор появляется до переменной, он называется

префиксным оператором увеличения. Аналогично этому, второй оператор появляется после переменной и называется постфиксным оператором уве-

9

личения. Вам необходимо знать, что C++ трактует эти два оператора поразному. Например, рассмотрим следующий оператор присваивания:

current_count = count++;

Этот оператор присваивания указывает C++ присвоить текущее значение count переменнойcurrent_count. В дополнение к этому постфиксный оператор увеличения заставляет C++ увеличить текущее значениеcount. Использование постфиксного оператора в этом случае делает показанный выше оператор эквивалентным следующим двум операторам:

current_count = count; count = count + 1;

Теперь рассмотрим следующий оператор присваивания, который использует префиксный оператор увеличения:

current_count = ++count;

В этом случае оператор присваивания указывает C++ сначала увеличить значение count, а затем присвоить результат переменнойcurrent_count. Использование префиксного оператора увеличения делает показанный выше оператор эквивалентным следующим двум операторам:

count = count + 1; current_count = count;

C++ также поддерживает префиксный и постфиксный операторы уменьшения. Они работают так же, как и соответствующие операторы увеличения, с той лишь разницей, что они уменьшают значение переменной на 1.

Другие операторы С++

 

 

 

Операция

 

Функция

 

 

 

%

 

Взятие по модулю или остаток; возвращает остаток целочислен-

 

ного деления

 

 

 

 

 

~

 

Дополнение; инвертирует биты значений

 

 

 

&

 

Побитовое И

 

 

 

|

 

Побитовое, включающее ИЛИ

 

 

 

^

 

Побитовое, исключающее ИЛИ

 

 

 

<<

 

Сдвиг влево; сдвигает биты значения влево на указанное количе-

 

ство разрядов

 

 

 

 

 

>>

 

Сдвиг вправо; сдвигает биты значения вправо на указанное коли-

 

чество разрядов

 

 

 

 

 

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

Управляющие операторы

Представление об if-else

По мере усложнения программы будут проверять разные условия и выполнять один набор операторов, если условие истинно, и другой набор, если

10

studfiles.net

НОУ ИНТУИТ | Основы программирования на C#

Форма обучения:

дистанционная

Стоимость самостоятельного обучения:

бесплатно

Доступ:

свободный

Документ об окончании:

Уровень:

Специалист

Длительность:

28:26:00

Студентов:

27383

Выпускников:

1126

Качество курса:

4.31 | 3.69

В учебном курсе представлено полное описание языка C#. Подробно рассматриваются классы, структуры, интерфейсы, делегаты. Особое внимание уделяется наследованию и универсальным классам.

Рассматривается среда разработки Visual Studio .Net и классы библиотеки FCL каркаса Framework .Net. Изложение сопровождается большим числом примеров. В учебном курсе представлено полное описание языка C#. Оно включает рассмотрение встроенных типов данных, управляющих структур языка, процедур, рекурсии, строк, массивов. Основное внимание уделяется классам, структурам, интерфейсам, делегатам, событиям. Особое внимание уделяется изучению отношений между классами – наследованию и встраиванию. Подробно рассмотрена универсальность и ограниченная универсальность классов – новинка, появившаяся в последней версии C#. Изучение основ программирования на C# ведется с позиций объектной технологии, где понятие класса рассматривается как тип данных и как модуль – архитектурная единица построения программных систем. Обсуждаются вопросы корректности программных систем, их устойчивости, повторного использования и расширяемости. Рассматривается среда разработки Visual Studio .Net, классы библиотеки FCL, организация интерфейса в Windows-проектах, рисование в формах, создание семейства графических классов. Изложение сопровождается большим числом примеров.

ISBN: 978-5-9556-0050-5

Теги: .net, deserialize, icloneable, objective-c, xml-отчет, арифметические преобразования, библиотеки, выходной аргумент, интерфейсы, клиенты, обратная ссылка, отладка, охраняемые блоки, программирование, процедуры, регулярные выражения, спецификации, статический контроль типов, схема без возобновления, экземпляры делегата, элементы

Предварительные курсы

Дополнительные курсы

 

2 часа 30 минут

Visual Studio .Net, Framework .Net
Бренд .Net. Visual Studio .Net — открытая среда разработки. Каркас Framework .Net. Библиотека классов FCL — статический компонент каркаса. Общеязыковая исполнительная среда CLR — динамический компонент каркаса. Управляемый код. Общеязыковые спецификации CLS и совместимые модули.

Язык C# и первые проекты
Создание языка. Его особенности. Решения, проекты, пространства имен. Консольные и Windows-приложения C#, построенные по умолчанию.

Система типов языка С#
Общий взгляд. Система типов. Типы-значения и ссылочные типы. Встроенные типы. Сравнение с типами C++. Типы или классы? И типы, и классы! Преобразования переменных в объекты и vice versa. Операции «упаковать» и «распаковать». Преобразования типов. Преобразования внутри арифметического типа. Преобразования строкового типа. Класс Convert и его методы. Проверяемые преобразования. Управление проверкой арифметических преобразований.

Преобразования типов
Преобразования типов. Преобразования внутри арифметического типа. Преобразования строкового типа. Класс Convert и его методы. Проверяемые преобразования. Управление проверкой арифметических преобразований.

Переменные и выражения
Объявление переменных. Синтаксис объявления. Инициализация. Время жизни и область видимости. Где объявляются переменные? Локальные и глобальные переменные. Есть ли глобальные переменные в C#? Константы.

Операторы языка C#

Операторы языка C#. Оператор присваивания. Составной оператор. Пустой оператор. Операторы выбора. If-оператор. Switch-оператор. Операторы перехода. Оператор goto. Операторы break, continue. Операторы цикла. For-оператор. Циклы while. Цикл foreach.

Процедуры и функции — методы класса

Процедуры и функции — две формы функционального модуля. Чем отличаются эти формы? Процедуры и функции — это методы класса. Описание методов (процедур и функций). Синтаксис. Атрибуты доступа. Формальные аргументы. Статус аргументов. Тело методов. Вызов процедур и функций. Фактические аргументы. Семантика вызова. Поля класса или аргументы метода? Поля класса или функции без аргументов? Проектирование класса Account. Функции с побочным эффектом. Перегрузка методов.

Корректность методов. Рекурсия
Корректность метода. Спецификации. Триады Хоара. Предусловие метода. Постусловие метода. Корректность метода по отношению к предусловию и постусловию. Частичная корректность. Завершаемость. Полная корректность. Инвариант цикла. Вариант цикла. Подходящий инвариант. Корректность циклов. Рекурсия. Прямая и косвенная рекурсия. Стратегия «разделяй и властвуй». Сложность рекурсивных алгоритмов. Задача «Ханойские башни». Быстрая сортировка Хоара.

Массивы языка C#
Общий взгляд на массивы. Сравнение с массивами C++. Почему массивы C# лучше, чем массивы C++. Виды массивов — одномерные, многомерные и изрезанные. Динамические массивы.

Класс Array и новые возможности массивов
Семейство классов-массивов. Родительский класс Array и наследуемые им интерфейсы. Новые возможности массивов в C#. Как корректно работать с массивами объектов?

Строки C#. Классы String и StringBuilder
Строки C#. Класс String. Изменяемые и неизменяемые строковые классы. Классы Net Framework, расширяющие строковый тип. Класс StringBuilder.

Регулярные выражения

Регулярные выражения. Пространство RegularExpressions и его классы. Регулярные выражения и языки. Теория регулярных выражений. Практика применения регулярных выражений. Разбор текстов и поиск по образцу. Свойства и методы класса Regex и других классов, связанных с регулярными выражениями. Примеры применения регулярных выражений.

Классы
Две роли класса в ООП. Синтаксис описания класса. Поля и методы класса. Конструкторы и деструкторы. Статические поля и методы. Статические конструкторы. Поля только для чтения. Закрытые поля. Стратегии доступа к полям класса. Процедуры свойства. Индексаторы. Примеры.

Структуры и перечисления
Понятие развернутого и ссылочного типа. Структуры — реализация развернутых классов. Синтаксис структур. Сравнение структур и классов. Встроенные структуры. Перечисление — частный случай класса. Особенности перечислений. Примеры.

Отношения между классами. Клиенты и наследники

Классы. Отношения между классами. Отношение клиенты — поставщики. Отношение наследования. Единичное наследование. Родители и наследники. Предки и потомки. Что наследуют потомки. Что могут изменить потомки. Одностороннее присваивание. Контроль типов и связывание — статическое и динамическое. Полиморфизм. Проектирование классов. Абстрактные классы. Классы поведения.

Интерфейсы. Множественное наследование

Интерфейсы как частный случай класса. Множественное наследование. Проблемы. Множественное наследование интерфейсов. Встроенные интерфейсы. Интерфейсы IComparable, ICloneable, ISerializable. Поверхностное и глубокое клонирование и сериализация. Сохранение и обмен данными.

Функциональный тип в C#. Делегаты
Новое слово для старого понятия. Функциональный тип. Функции высших порядков. Вычисление интеграла и сортировка. Два способа взаимодействия частей при построении сложных систем. Функции обратного вызова. Наследование и функциональные типы. Сравнение двух подходов. Класс Delegate. Методы и свойства класса. Операции над делегатами. Комбинирование делегатов. Список вызовов.

События
Классы с событиями. Общий взгляд. Класс Sender и классы Receivers. Класс Sender. Как объявляются события? Делегаты и события. Классы с событиями, допускаемые .Net Framework. Класс EventArgs и его потомки. Входные и выходные аргументы события. Класс Receiver. Обработчик события. Встраивание объекта Sender. Связывание обработчика с событием. Отключение обработчика. Взаимодействие объектов sender и receiver. События — поля или процедуры-свойства? Динамическое связывание событий с их обработчиками.

Универсальность. Классы с родовыми параметрами
Наследование и универсальность — взаимно дополняющие базовые механизмы создания семейства классов. Родовые параметры универсального класса. Синтаксис универсального класса. Родовое порождение экземпляров универсального класса. Методы с родовыми параметрами. Ограниченная универсальность — ограничения, накладываемые на родовые параметры. Виды ограничений. Ограничение универсальности — это свобода действий. Примеры. Родовые параметры и частные случаи классов: структуры, интерфейсы, делегаты. Универсальность и Framework .Net.

Отладка и обработка исключительных ситуаций
Корректность и устойчивость. Cпецификация системы. Корректность и устойчивость программных систем. Исключительные ситуации. Обработка исключительных ситуаций. Жизненный цикл программной системы. Три закона программотехники. Отладка. Создание надежного кода. Искусство отладки. Отладка и инструментальная среда Visual Studio .Net.

Организация интерфейса и рисование в формах
Организация интерфейса. Шаблоны форм. Заселение формы элементами управления. Классы элементов управления. Примеры классов. Класс ListBox. Наследование форм. Организация меню, главное меню. Инструментальные панели с кнопками. Рисование в формах. Классы рисования. Кисти и перья.

www.intuit.ru

Основы программирования на языке Си.

134

Содержание.

1. Лекция: Общее знакомство.

-Происхождение языка Си.

-Достоинства языка Си.

-Будущее языка Си.

-Использование языка Си.

-Использование текстового редактора для подготовки программ.

-Исходные и выполняемые файлы. Примеры простой программы.

-Пример простой программы на языке Си.

-Структура простой программы.

2. Лекция: Данные, символьные строки, директива #define

-Основные типы данных.

-Описание различных типов, переменные и константы.

-Символьные строки.

-Препроцессор языка Си.

3. Лекция: Операции.

-Основные операции.

-Дополнительные операции.

-Перечень операций языка Си.

4. Лекция: Операторы.

-Выражения.

-Простейшие выражения.

-Операторы.

-Составные операторы.

5. Лекция: Преобразование типов.

-Эквивалентность типов.

-Преобразование типов.

-Неявное преобразование типа.

-Арифметические преобразования.

-Явное преобразование типов.

-Синтаксис типов.

6. Лекция: Функции и переключение ввода-вывода.

-Ввод и вывод одного символа.

-Буферы.

-Чтение одной строки.

-Чтение файла.

-Переключение и работа с файлами.

7. Лекция: Выбор вариантов.

-Выбор вариантов.

-Оператор if.

-Расширение оператора if.

-Операции отношения.

-Логические операции.

-Операция условия: ?:.

-Множественный выбор.

8. Лекция: Циклы и другие управляющие средства. Структурное программирование.

-Цикл с предусловием.

-Цикл со счетчиком.

-Цикл с постусловием.

-Другие управляющие операторы.

-Структурное программирование.

9. Лекция: Функции.

-Создание и использование функций.

-Аргументы функции.

-Возвращение значений.

-Локальные переменные.

-Нахождение адресов.

-Указатели, первое знакомство.

-Функции с переменным количеством аргументов.

10. Лекция: Классы памяти и разработка программ.

-Классы памяти и область действия.

-Автоматические переменные.

-Внешние переменные.

-Статические переменные.

-Внешние статические переменные.

-Регистровые переменные.

11. Лекция: Препроцессор языка Си.

-Общие сведения.

-Символические константы: #define.

-Использование аргументов с #define.

-Макроопределение или функция?

-Включение файла #include.

-Условная компиляция.

12. Лекция: Массивы и указатели.

-Указатели и массивы.

-Массивы.

-Указатели.

-Динамические объекты.

-Создание динамических объектов.

-Доступ к динамическим объектам.

-Строки — дополнительные сведения о связи между указателями и массивами.

-Инициализация массивов и классы памяти.

-Функции.

-Операции с указателями.

13. Лекция: Символьные строки и функции над ними.

-Строковые константы.

-Массивы символьных строк и их инициализация.

-Массив и указатель: различия.

-Указатели и строки.

-Ввод-вывод строк.

-Обработка строк.

14. Лекция: Структуры.

-Определение структурных переменных.

-Доступ к компонентам структуры.

-Поля битов в структурах.

-Объединения.

-Перечисления.

­­-Переменные структуры.

-Указатели структуры.

-Массив структур.

-Переименования типов.

15. Лекция: Библиотека языка Си и файлы ввода-вывода.

-Библиотека языка Си содержит множество функций и макроопределений.

-Библиотеки меняются от системы к системе, но есть ядро функций (стандартная библиотека).

-Распределение памяти.

16. Лекция: Функции в примерах.

-Функция получения случайных чисел.

-Поиск узлов из простых чисел.

-Матрица инцидентности.

-Структуры данных.

-Работа с файлами.

-Все операции со стеком.

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

1. Лекция: Общее знакомство.

-Происхождение языка Си.

-Достоинства языка Си.

-Будущее языка Си.

-Использование языка Си.

-Использование текстового редактора для подготовки программ.

-Исходные и выполняемые файлы. Примеры простой программы.

-Пример простой программы на языке Си.

-Структура простой программы.

Происхождение языка Си.

Язык программирования Си был разработан и реализован в 1972 году сотрудником фирмы AT&T Bell Laboratories Денисом Ритчи. Прообразом языка Си для Д. Ритчи послужил язык Би, разработанный Кеном Томпсоном. Он является результатом эволюционного развития языков BCPL (Richards, M., «BCPL: A. Tool for Compiler Writing and System Programming», Proc. AFIPS SJCC, 34, 557-566, 1969) и Би (Johnson, S. C., and B. W. Kernighan, «The Programming Language B», Comp. Sci. Tech. Rep. No. 8, Bell Laboratories. 1973). Основным достоинством языка Си по сравнению с языками BCPL и Би является введение в него типов данных. Язык Си был разработан во время создания операционной системы UNIX (OC UNIX). Развитие языка Си продолжалось и после окончания его разработки и касалось, в частности, проверки типов данных и средств, облегчающих перенос программ в другую среду. Например, разработка проекта переноса OC UNIX на компьютер Interdata 8/32 привела к некоторым добавлениям в язык Си, а именно, к включению в язык таких средств, как объединение (union). Позднее были сделаны попытки включения в язык Си средств абстрагирования данных. В настоящее время рассматривается проект стандарта ANSI C — стандарт языка Си Американского национального института и the C Programming Language — Reference Manual, AT&T Bell Laboratories. С языка Си разработаны совместимые по входному языку трансляторы для 40 типов вычислительных систем, начиная от 8-разрядных микропроцессоров и кончая CRAY-1 — одним из самых мощных в настоящее время суперкомпьютеров. В ходе работ по созданию Мобильного Транслятора с языка Си сам он был переработан для повышения мобильности написанных на нем программ.

studfiles.net

Основы программирования: C++

Основы программирования: C++

Кувшинов Д.Р.

2017–2018

Цель курса — ознакомить студентов с технологиями программирования с учётом профессиональной специализации и заложить базовые навыки, позволяющие разрабатывать программное обеспечение (ПО). В процессе требуется освоить базовую часть языка C++ в качестве основного языка программирования. Язык C++ выбран по двум причинам: дидактической и практической.

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

Практическая причина проистекает из широты применения C++. Данный язык популярен там, где требуется сочетание низкоуровневых и высокоуровневых свойств, а также высокая производительность результирующего программного обеспечения — низкая задержка при получении результата (важно, например, для игр) или большой объём вычислений, которые можно выполнить за единицу времени (важно для научно-технических задач). Кроме того, доступно большое количество программных компонент, разработанных на C++. Компиляторы C++ существуют для большинства платформ, по распространённости поддержки языков программирования на различных платформах C++ занимает второе место (после C).

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

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

Замечание. В тексте используются различные символы Юникода, например, ℝ для обозначения множества действительных чисел или символ ≡ для обозначения тождества. При неудачном стечении обстоятельств (отсутствии в системе шрифтов с широкой поддержкой Юникода) ряд символов может не отображаться, в этом случае рекомендуется установить такой шрифт (например см. список).


Знаком ⌛ помечены планируемые разделы, не включенные в текущую версию.

Теоретическая часть

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

Онлайн-справочник (на английском, русский вариант в основном получен машинным переводом).

Онлайн-компиляторы: IdeOne, C++ Shell, WandBox, Godbolt.

Блог “ISO C++” (на английском).

Лабораторные работы

Задания для выполнения на лабораторных занятиях.

Самостоятельные работы

Задания для самостоятельного выполнения.

Компьютер — идеальный бюрократ.

Главное правило: работать начинать надо сразу, сдавать всё в установленный срок.

Предусмотрено два типа работ: лабораторные и самостоятельные (7 в осеннем семестре и 6 в весеннем семестре).

Правила оценивания лабораторных работ

  1. Каждая работа (результат выполнения одного варианта задания) оценивается независимо от остальных работ. Работа выполняется и представляется преподавателю на лабораторном занятии.
  2. Оценка за каждую работу выставляется в диапазоне от 1 (“присутствовал на занятии”) до 4 (“работа выполнена”) баллов.
  3. Финальный результат вычисляется как сумма результатов по всем работам. Максимальное значение этой суммы составляет 28 баллов.

Правила оценивания самостоятельных работ

  1. Каждая работа (результат выполнения одного варианта задания) оценивается независимо от остальных работ. Работа может выполняться как на занятиях, так и дома, однако для получения оценки её необходимо представить лично.
  2. Оценка выставляется в процентах от “идеального выполнения” и вычисляется как произведение трёх величин (коэффициентов): полноты, качества и срока исполнения (см. ниже).
  3. Для каждой работы в течение семестра назначается свой крайний срок сдачи.
  4. Коэффициент срока исполнения выбирается из четырёх возможных значений:
    • 1.0 в случае исполнения работы в срок,
    • 0.84 — менее двух недель сверх срока,
    • 0.67 — менее трёх недель сверх срока,
    • 0.5 — три и более недель сверх срока.
  5. Полнота оценивается в диапазоне [0, 1] как степень соответствия предъявляемым в формулировке задания требованиям.
  6. Качество оценивается в диапазоне [0.5, 2] с точки зрения качества предъявленного исходного кода (в частности, оценка может быть понижена за слишком неряшливое оформление и использование бессмысленных названий), эффективности используемых алгоритмов, разумности выбранных программных решений.
  7. Финальный результат вычисляется как сумма произведений “процентных” оценок работ за семестр на их фиксированные “стоимости” в баллах (указаны в начале описания каждой самостоятельной работы).

Итоговый результат за семестр

  1. Итоговый результат за семестр вычисляется как сумма баллов за лабораторные работы, самостоятельные работы и работу на практических занятиях (по 2 балла за выполнение одного задания у доски).
  2. Для допуска к экзамену необходимо набрать 40 баллов или выше.
  3. При получении более 100 баллов в БРС выставляется 100 баллов, а остаток делится на два и переносится в следующий семестр.

Аттестация в середине семестра

Для получения аттестации требуется набрать 24 балла.

C и C++

  • С.Прата. Язык программирования C++. Лекции и упражнения. 6-е изд. — М.: Вильямс, 2012. — 1244с.
  • Б.Эккель. Философия C++. Введение в стандартный C++. 2-е изд. — СПб.: Питер, 2004. — 572с.
  • Б.Керниган, Д.Ритчи. Язык программирования Си. 3-е изд., испр. — СПб.: «Невский Диалект», 2001. — 352с.
  • С.Прата. Язык программирования C. Лекции и упражнения. 5-е изд. — М.: Вильямс, 2006. — 960с.
  • Б.Страуструп. Программирование. Принципы и практика использования C++. 2-е изд. — М.: Вильямс, 2016. — 1328с.
  • А.Степанов, П.Мак-Джоунс. Начала программирования. — М.: Вильямс, 2011. — 272с.
  • Д.Роуз, А.А.Степанов. От математики к обобщенному программированию. — М.: ДМК Пресс, 2015. — 264с.

Теоретические основы

Алгоритмы

  • Н.Вирт. Алгоритмы и структуры данных. — М.: Мир, 1989. — 360с.
  • Дж.Макконнелл. Основы современных алгоритмов. 2-е изд. — М.: Техносфера, 2004. — 368с.

Архитектура компьютера

  • Ч.Петцольд. Код. — М.: Русская Редакция, 2001. — 512с.
  • Э.Таненбаум, Т.Остин. Архитектура компьютера. 6-е изд. — СПб.: Питер, 2013. — 816с.
  • Д.Харрис, С.Харрис. Цифровая схемотехника и архитектура компьютера. 2-е изд. — русск. перев. при поддержке Imagination Technologies (электронное издание), 2015. — 1662с.

C и C++ II

  • Б.Страуструп. Язык программирования C++, специальное издание. — М.: Бином-Пресс, 2011. — 1136с.
  • B.Stroustrup. The C++ Programming Language. 4th ed. — Addison-Wesley, 2013.
  • М.Уилсон. C++: практический подход к решению проблем программирования. — М.: КУДИЦ-ОБРАЗ, 2006. — 736с.
  • Б.Эккель, Ч.Эллисон. Философия C++. Практическое программирование. — СПб.: Питер, 2004. — 608с.
  • С.Мейерс. Эффективное использование C++. 3-е изд. — Питер, ДМК Пресс, 2006. — 300с.
  • С.Мейерс. Наиболее эффективное использование C++. — М.: ДМК Пресс, 2000. — 304с.
  • С.Мейерс. Эффективное использование STL. — СПб.: Питер, 2003. — 224с.
  • С.Мейерс. Эффективный и современный C++. 42 рекомендации по использованию C++11 и C++14. — М.: Вильямс, 2015. — 304с.
  • Н.Джосаттис. Стандартная библиотека C++: Справочное руководство. — М.: Вильямс, 2014. — 1136с.
  • Г.Саттер. Решение сложных задач на C++. — М.: Вильямс, 2008. — 400с.
  • Г.Саттер. Новые сложные задачи на C++. — М.: Вильямс, 2005. — 272с.
  • А.Александреску. Современное проектирование на C++. — М.: Вильямс, 2008. — 336с.
  • Э.Уильямс. Параллельное программирование на С++ в действии: практика разработки многопоточных программ. — М.: ДМК Пресс, 2014. — 672с.

Алгоритмы II

  • Р.Седжвик. Алгоритмы на C++. — М.: Вильямс, 2016. — 1056с.
  • А.Ахо, Дж.Хопкрофт, Дж.Ульман. Структуры данных и алгоритмы. — М.: Вильямс, 2003. — 384с.
  • Т.Кормен, Ч.Лейзерсон, Р.Ривест, К.Штайн. Алгоритмы: построение и анализ. 3-е изд. — М.: Вильямс, 2013. — 1324с.
  • Д.Кнут. Искусство программирования. 3-е изд. Тома 1–4. — М.: Вильямс, 2007.
  • Р.Миллер, Л.Боксер. Последовательные и параллельные алгоритмы. — М.: БИНОМ, 2006. — 406с.
  • Н.Вирт. Построение компиляторов. 2-е изд. — ДМК Пресс, 2014. — 192с.
  • А.Ахо, М.Лам, Р.Сети, Дж.Ульман. Компиляторы: принципы, технологии и инструментарий. 2-е изд. — М.: Вильямс, 2008. — 1184с.

Разработка ПО

  • Ф.Брукс. Мифический человеко-месяц или Как создаются программные системы. — СПб.: Символ-Плюс, 2010. — 304с.
  • Р.Мартин. Быстрая разработка программ: принципы, примеры, практика. — М.: Вильямс, 2004. — 752с.
  • Р.Мартин. Чистый код: создание, анализ и рефакторинг. — СПб.: Питер, 2010. — 464с.
  • Г.Буч. Объектно-ориентированный анализ и проектирование. 3-е изд. — М.: Вильямс, 2008. — 720с.
  • Э.Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — СПб.: Питер, 2012. — 368с.
  • С.Макконнелл. Совершенный код. 2-е изд. — М.: Русская Редакция, 2010. — 896с.
  • R.Nystrom. Game Programming Patterns.

HTML-файлы сгенерированы с помощью системы Pandoc.

Дата последнего обновления: 2018.09.13 (v1-r324).

Кувшинов Д.Р. © 2015

teccxx.neocities.org

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *