SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
Модуль 1: Базовые понятия языка программирования С++
Темы лекции: Структура программы на языке С++.
Практическое задание: Структура программы на языке С++.
Тренер: Игорь Шкулипа, к.т.н.
C++ Базовый. Занятие 4
http://www.slideshare.net/IgorShkulipa 2
Структура программы на С++
Директивы препроцессора
Объявление глобальных переменных
Описания функций
Функция main
{
Операторы функции main
}
http://www.slideshare.net/IgorShkulipa 3
Препроцессор
Препроцессирование - это процесс, на вход которого подаётся
текст (текстовый файл) и на выходе формируется текст. Во время
работы препроцессор занимается тем, что видоизменяет исходный
текстовый файл. И только после этого изменённый текстовый файл
в дальнейшем попадает в компиляцию. Команды препроцессора (их
называют директивами) начинаются на символ #, который должен
первым непробельным символом в строке. К директивам
препроцессора, относятся директивы:
#include, #define, #undef, #if, #else, #elif, #endif, #ifdef,
#ifndef, #error, #warning, #line, #pragma
http://www.slideshare.net/IgorShkulipa 4
Директива #include
#include “имя файла”
#include <имя файла>
Если имя файла указано в кавычках, то поиск файла осуществляется в
соответствии с заданным маршрутом, либо в текущем каталоге. Если
имя файла задано в угловых скобках, то поиск файла производится в
стандартных директориях операционной системы, задаваемых
переменной окружения PATH (‘C++Directory’/include).
#include “/home/user/lab4/header.h”
#include “../header.h”
#include <header.h>
http://www.slideshare.net/IgorShkulipa 5
Заголовочные файлы
Заголовочный файл *.h содержит
заголовки функций и классов.
Пример: файл functions.h
double sum(double, double);
double mul(double, double);
double dif(double, double);
double div(double, double);
Заголовочный файл подключается в
основную программу и на этапе
компиляции этого достаточно.
На этапе сборки:
● Среда разработки сама находит
нужные файлы реализации и
подключает их.
● В сценарии сборки (make - файл)
необходимо указать все файлы.
Файл программного кода *.cpp
содержит реализации функций и
классов.
Пример: файл functions.cpp
#include “functions.h”
double sum(double a, double b)
{
return a+b;
}
double mul(double a, double b)
{
return a*b;
}
double dif(double a, double b)
{
return a-b;
}
double div(double a, double b)
{
return a/b;
}
http://www.slideshare.net/IgorShkulipa 6
Наиболее используемые заголовочные файлы
ALLOC.Н Функции динамического выделения памяти
ASSERT.H Определяет макрос assert() (ANSI С)
BIOS.H Функции ROM-BIOS
CONIO.H Функции для работы с экраном
CTYPE.H Функции для работы с символами (ANSI С)
DIR.H Функции для работы с каталогами
ERRNO.H Определяет коды ошибок (ANSI С)
FSTREAM.H Файл определений ввода/вывода (С++)
GRAPHICS.Н Графические функции
IO.Н UNIX-подобные процедуры ввода/вивода
IOMANIP.H Определяет манипуляторы ввода/вывода (С++)
IOSTREAM.H Определяет классы потоков ввода/вывода (С++)
LIMITS.Н Определяет различные, зависящие от реализации, пределы (ANSI С)
LOCALE.Н Функции, зависящие от стран и языков (ANSI С)
МАТН.Н Разные определения, используемые математической библиотекой (ANSI С)
PROCESS.H Функции spawn() и ехес()
SETJMP.H Нелокальные переходы (ANSI С)
SHARE.H Совместное использование файлов
SIGNAL.H Определяет величины сигналов (ANSI С)
STDARG.H Списки аргументов длин переменных (ANSI С)
STDDEF.H Определяет некоторые общеупотребительные константы (ANSI С)
STDIO.H Объявления для стандартных потоков ввода/вывода (ANSI С)
STDLIB.H Различные определения (ANSI С)
STRING.H Обработка строк (ANSI С)
STRSTREA.H Классы потоков ввода/вывода на базе массивов
TIME.H Функции системного времени
http://www.slideshare.net/IgorShkulipa 7
Makefile
Makefile (сценарий сборки) — это набор инструкций для программы
make, которая помогает собирать программный проект.
цель: зависимости
[tab] команда
Пример: Программа содержит несколько файлов
• main.cpp
• functions1.h
• functions2.h
• functions1.cpp
• functions2.cpp
1. g++ main.cpp functions1.cpp functions2.cpp -o main_result
2. make –f ./main_make_file
http://www.slideshare.net/IgorShkulipa 8
Содержимое main_make_file
#CC указывает компилятор, используемый для сборки
CC=g++
#CFLAGS лежат флаги, которые передаются компилятору
CFLAGS=-c
#Основная цель сборки
all: main_result
#Как получить main_result
main_result : main.o functions1.o functions2.o
$(CC) main.o functions1.o functions2.o -o main_result
#Как получить main.o
main.o: main.cpp
$(CC) $(CFLAGS) main.cpp
#Как получить functions1.o
functions1.o: functions1.cpp
$(CC) $(CFLAGS) functions1.cpp
#Как получить functions2.o
functions2.o: functions2.cpp
$(CC) $(CFLAGS) functions2.cpp
#Очистка
clean:
rm -rf *.o main_result
http://www.slideshare.net/IgorShkulipa 9
Директива #define
Директива #define определяет так называемые макросы.
Если мы определим
#define CON10 10
то в процессе работы препроцессора все вхождения сочетания
“CON10” будут в текстовом виде заменены на “10”.
Макрос для возвращения максимума двух чисел:
#define MAX(a,b) ((a>b)?(a):(b))
http://www.slideshare.net/IgorShkulipa 10
Директива #undef
Для того, чтобы отменить макрос, существует директива #undef. Как
только препроцессор встречает такую директиву, он "забывает"
определённый ранее макрос и больше не заменяет его.
#define N 20 // определяем макрос “N”
int a[N];
#undef N // здесь препроцессор “забудет” макрос "N"
void main ()
{
int N;
N++;
}
http://www.slideshare.net/IgorShkulipa 11
Директивы условной компиляции #if и #endif
#define DEBUG 1
#if DEBUG == 1
void debug_print()
{
cout<<“Debug moden”;
}
#endif
void main()
{
#if DEBUG == 1
debug_print();
#endif
...
}
http://www.slideshare.net/IgorShkulipa 12
Директивы #if, #else, #elif, #endif, #ifdef, #ifndef
#if <условие>
...
#endif
#if <условие>
...
#else
...
#endif
#if <условие>
...
#elif <условие>
...
#elif <условие>
...
#else
...
#endif
#ifdef LINUX
код для Линукс
#endif
#ifndef LINUX
код НЕ для Линукс
#endif
http://www.slideshare.net/IgorShkulipa 13
Директивы #error и #warning
#if defined LINUX
...
#elif defined WINDOWS
...
#elif defined MACOS
...
#else
#error “Unknown Operating System”
#endif
#warning работает так же, как #error,
но выдает не ошибку, а
предупреждение
http://www.slideshare.net/IgorShkulipa 14
Директива #line
Директива #line изменяет содержимое __LINE__ и __FILE__, которые являются
зарезервированными идентификаторами в компиляторе. В первом из них
содержится номер компилируемой в данный момент строки кода. А второй
идентификатор — это строка, содержащая имя компилируемого исходного
файла.
В общем виде директива #line выглядит таким образом:
#line номер "имя_файла"
где номер — это положительное целое число, которое становится новым значением
__LINE__, а необязательное имя_файла — это любой допустимый идентификатор
файла, становящийся новым значением __FILE__.
Директива #line в основном используется для отладки и специальных применений.
Например, следующий код определяет, что счетчик строк будет начинаться с 100, а
оператор printf() выводит номер 102, потому что он расположен в третьей строке
программы после оператора #line 100:
#include <stdio.h>
#line 100 // установить счетчик строк
int main(void) // строка 100
{ // строка 101
printf("%dn",__LINE__); // строка 102
return 0;
}
http://www.slideshare.net/IgorShkulipa 15
Директива #pragma
Директива #pragma — это определяемая реализацией директива,
которая позволяет передавать компилятору различные
инструкции. Например, компилятор может поддерживать
трассировку выполнения программы или создание
параллельных ветвей программы (OpenMP). Тогда эти
возможности можно указывать в директиве #pragma.
Возможности этой директивы и относящиеся к ней подробности
должны быть описаны в документации по компилятору.
15
http://www.slideshare.net/IgorShkulipa 16
Аргументы функции main()
В языке C++ заданы два встроенных аргумента функции main: argc и
argv.
void main(int argc, char *argv[])
Аргумент argv типа char - указатель на массив строк. Каждый элемент
массива указывает на аргументы командной строки. Один параметр
отделяется от другого пробелами.
⚫ argv[0] - полное имя запущенной программы
⚫ argv[1] – первый аргумент после имени программы
⚫ argv[2] – второй аргумент после имени программы
⚫ argv[argc-1] – последний аргумент после имени программы
⚫ argv[argc] - NULL
argc – количество аргументов, включая имя самой программы
16
http://www.slideshare.net/IgorShkulipa 17
Лабораторная работа №4.
Создать консольный калькулятор, который выполняет арифметические действия
над числами в:
◾ Десятичной системе исчисления
◾ Двоичной системе исчисления
◾ Шестнадцатеричной системе исчисления
◾ Восьмеричной системе исчисления
Реализовать меню для управления вычислениями.
Реализовать меню с помощью массива указателей на функции.
Реализовать функции для перевода из одной системы в другую.
Реализовать все арифметико-логические операции - + - * / % | ^ ~ & >> <<, а
так же операции извлечения квадратного корня, тригонометрические функции,
функцию факториала и макросы максимума и минимума.
Реализовать ввод чисел в формате строк (char* или string) с последующим
переводом строк в числа.
Разбить программу на логические модули и оформить каждый модуль в отдельные
.h и .cpp файлы.
Создать makefile для сборки всего проекта и собрать его с помощью утилиты make
Темы для самостоятельного изучения: Работа со строками в С++.
◾ тип char*, заголовочный файл string.h
◾ тип std::string, заголовочный файл string

Mais conteúdo relacionado

Mais procurados

C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3Technopark
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.Igor Shkulipa
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli typesmcroitor
 
Глава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в JavaГлава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в Javametaform
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8Technopark
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 
C++ осень 2013 лекция 6
C++ осень 2013 лекция 6C++ осень 2013 лекция 6
C++ осень 2013 лекция 6Technopark
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.Igor Shkulipa
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
 
Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...corehard_by
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 

Mais procurados (20)

C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
Cpp/cli types
Cpp/cli typesCpp/cli types
Cpp/cli types
 
Глава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в JavaГлава 3: примитивные типы и операции с ними в Java
Глава 3: примитивные типы и операции с ними в Java
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
лек5 6
лек5 6лек5 6
лек5 6
 
C++ осень 2013 лекция 6
C++ осень 2013 лекция 6C++ осень 2013 лекция 6
C++ осень 2013 лекция 6
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программирование
 
Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 

Destaque

C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant ScienceVijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant Sciencevijay bhosekar
 
Capitulo IV análisis de resultados
Capitulo IV análisis de resultados Capitulo IV análisis de resultados
Capitulo IV análisis de resultados Ida Morán
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
C# Desktop. Занятие 03.
C# Desktop. Занятие 03.C# Desktop. Занятие 03.
C# Desktop. Занятие 03.Igor Shkulipa
 
Production diary 2
Production diary 2Production diary 2
Production diary 2Laila Jaleel
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
Production diary 7
Production diary 7Production diary 7
Production diary 7Laila Jaleel
 
Production diary 3
Production diary 3Production diary 3
Production diary 3Laila Jaleel
 
σχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουσχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουMANOLIS MORAITIS
 
Brochure – Massey University Business School
Brochure – Massey University Business SchoolBrochure – Massey University Business School
Brochure – Massey University Business SchoolRick Petford
 
Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaila Jaleel
 
Happily_Disconnected
Happily_DisconnectedHappily_Disconnected
Happily_DisconnectedAmber Perkins
 
Bollywood Movie Poster
Bollywood Movie PosterBollywood Movie Poster
Bollywood Movie PosterAkash Hossain
 
Vijay Bhosekar_ Published Article_ Organic Agriculture
Vijay Bhosekar_ Published Article_ Organic AgricultureVijay Bhosekar_ Published Article_ Organic Agriculture
Vijay Bhosekar_ Published Article_ Organic Agriculturevijay bhosekar
 

Destaque (20)

HG
HGHG
HG
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant ScienceVijay Bhosekar_ Research Article_ Frontiers in Plant Science
Vijay Bhosekar_ Research Article_ Frontiers in Plant Science
 
Capitulo IV análisis de resultados
Capitulo IV análisis de resultados Capitulo IV análisis de resultados
Capitulo IV análisis de resultados
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
C# Desktop. Занятие 03.
C# Desktop. Занятие 03.C# Desktop. Занятие 03.
C# Desktop. Занятие 03.
 
Production diary 2
Production diary 2Production diary 2
Production diary 2
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
Inma
InmaInma
Inma
 
Production diary 7
Production diary 7Production diary 7
Production diary 7
 
Production diary 3
Production diary 3Production diary 3
Production diary 3
 
σχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένουσχέδιο προσέγγισης λογοτεχνικού κειμένου
σχέδιο προσέγγισης λογοτεχνικού κειμένου
 
Brochure – Massey University Business School
Brochure – Massey University Business SchoolBrochure – Massey University Business School
Brochure – Massey University Business School
 
Laura mulvey’s male gaze theory
Laura mulvey’s male gaze theoryLaura mulvey’s male gaze theory
Laura mulvey’s male gaze theory
 
MME 2016
MME 2016MME 2016
MME 2016
 
Catalog AdPro
Catalog AdProCatalog AdPro
Catalog AdPro
 
Happily_Disconnected
Happily_DisconnectedHappily_Disconnected
Happily_Disconnected
 
Bollywood Movie Poster
Bollywood Movie PosterBollywood Movie Poster
Bollywood Movie Poster
 
Vijay Bhosekar_ Published Article_ Organic Agriculture
Vijay Bhosekar_ Published Article_ Organic AgricultureVijay Bhosekar_ Published Article_ Organic Agriculture
Vijay Bhosekar_ Published Article_ Organic Agriculture
 

Semelhante a C++ Базовый. Занятие 04.

C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
C++ теория
C++ теорияC++ теория
C++ теорияtank1975
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Cтиль программирования
Cтиль программированияCтиль программирования
Cтиль программированияConstantin Kichinsky
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Levon Avakyan
 
лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)djbelyakk
 
язык програмирования
язык програмированияязык програмирования
язык програмированияOlegmingalev1997
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.Igor Shkulipa
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.Igor Shkulipa
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Dmitri Soshnikov
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP languageVladimir Burdaev
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинIT61
 

Semelhante a C++ Базовый. Занятие 04. (20)

C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Cтиль программирования
Cтиль программированияCтиль программирования
Cтиль программирования
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей. Программирование как способ выражения мыслей.
Программирование как способ выражения мыслей.
 
лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)лекции спрг 6_семестр (1)
лекции спрг 6_семестр (1)
 
язык програмирования
язык програмированияязык програмирования
язык програмирования
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
C# Desktop. Занятие 16.
C# Desktop. Занятие 16.C# Desktop. Занятие 16.
C# Desktop. Занятие 16.
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...Функциональное программирование для разработки распределённых, облачных и веб...
Функциональное программирование для разработки распределённых, облачных и веб...
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
лек13 4
лек13 4лек13 4
лек13 4
 
The basic design of the PHP language
 The basic design of the PHP language The basic design of the PHP language
The basic design of the PHP language
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
 

Mais de Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03. Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 

Mais de Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 

C++ Базовый. Занятие 04.

  • 1. Модуль 1: Базовые понятия языка программирования С++ Темы лекции: Структура программы на языке С++. Практическое задание: Структура программы на языке С++. Тренер: Игорь Шкулипа, к.т.н. C++ Базовый. Занятие 4
  • 2. http://www.slideshare.net/IgorShkulipa 2 Структура программы на С++ Директивы препроцессора Объявление глобальных переменных Описания функций Функция main { Операторы функции main }
  • 3. http://www.slideshare.net/IgorShkulipa 3 Препроцессор Препроцессирование - это процесс, на вход которого подаётся текст (текстовый файл) и на выходе формируется текст. Во время работы препроцессор занимается тем, что видоизменяет исходный текстовый файл. И только после этого изменённый текстовый файл в дальнейшем попадает в компиляцию. Команды препроцессора (их называют директивами) начинаются на символ #, который должен первым непробельным символом в строке. К директивам препроцессора, относятся директивы: #include, #define, #undef, #if, #else, #elif, #endif, #ifdef, #ifndef, #error, #warning, #line, #pragma
  • 4. http://www.slideshare.net/IgorShkulipa 4 Директива #include #include “имя файла” #include <имя файла> Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, либо в текущем каталоге. Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых переменной окружения PATH (‘C++Directory’/include). #include “/home/user/lab4/header.h” #include “../header.h” #include <header.h>
  • 5. http://www.slideshare.net/IgorShkulipa 5 Заголовочные файлы Заголовочный файл *.h содержит заголовки функций и классов. Пример: файл functions.h double sum(double, double); double mul(double, double); double dif(double, double); double div(double, double); Заголовочный файл подключается в основную программу и на этапе компиляции этого достаточно. На этапе сборки: ● Среда разработки сама находит нужные файлы реализации и подключает их. ● В сценарии сборки (make - файл) необходимо указать все файлы. Файл программного кода *.cpp содержит реализации функций и классов. Пример: файл functions.cpp #include “functions.h” double sum(double a, double b) { return a+b; } double mul(double a, double b) { return a*b; } double dif(double a, double b) { return a-b; } double div(double a, double b) { return a/b; }
  • 6. http://www.slideshare.net/IgorShkulipa 6 Наиболее используемые заголовочные файлы ALLOC.Н Функции динамического выделения памяти ASSERT.H Определяет макрос assert() (ANSI С) BIOS.H Функции ROM-BIOS CONIO.H Функции для работы с экраном CTYPE.H Функции для работы с символами (ANSI С) DIR.H Функции для работы с каталогами ERRNO.H Определяет коды ошибок (ANSI С) FSTREAM.H Файл определений ввода/вывода (С++) GRAPHICS.Н Графические функции IO.Н UNIX-подобные процедуры ввода/вивода IOMANIP.H Определяет манипуляторы ввода/вывода (С++) IOSTREAM.H Определяет классы потоков ввода/вывода (С++) LIMITS.Н Определяет различные, зависящие от реализации, пределы (ANSI С) LOCALE.Н Функции, зависящие от стран и языков (ANSI С) МАТН.Н Разные определения, используемые математической библиотекой (ANSI С) PROCESS.H Функции spawn() и ехес() SETJMP.H Нелокальные переходы (ANSI С) SHARE.H Совместное использование файлов SIGNAL.H Определяет величины сигналов (ANSI С) STDARG.H Списки аргументов длин переменных (ANSI С) STDDEF.H Определяет некоторые общеупотребительные константы (ANSI С) STDIO.H Объявления для стандартных потоков ввода/вывода (ANSI С) STDLIB.H Различные определения (ANSI С) STRING.H Обработка строк (ANSI С) STRSTREA.H Классы потоков ввода/вывода на базе массивов TIME.H Функции системного времени
  • 7. http://www.slideshare.net/IgorShkulipa 7 Makefile Makefile (сценарий сборки) — это набор инструкций для программы make, которая помогает собирать программный проект. цель: зависимости [tab] команда Пример: Программа содержит несколько файлов • main.cpp • functions1.h • functions2.h • functions1.cpp • functions2.cpp 1. g++ main.cpp functions1.cpp functions2.cpp -o main_result 2. make –f ./main_make_file
  • 8. http://www.slideshare.net/IgorShkulipa 8 Содержимое main_make_file #CC указывает компилятор, используемый для сборки CC=g++ #CFLAGS лежат флаги, которые передаются компилятору CFLAGS=-c #Основная цель сборки all: main_result #Как получить main_result main_result : main.o functions1.o functions2.o $(CC) main.o functions1.o functions2.o -o main_result #Как получить main.o main.o: main.cpp $(CC) $(CFLAGS) main.cpp #Как получить functions1.o functions1.o: functions1.cpp $(CC) $(CFLAGS) functions1.cpp #Как получить functions2.o functions2.o: functions2.cpp $(CC) $(CFLAGS) functions2.cpp #Очистка clean: rm -rf *.o main_result
  • 9. http://www.slideshare.net/IgorShkulipa 9 Директива #define Директива #define определяет так называемые макросы. Если мы определим #define CON10 10 то в процессе работы препроцессора все вхождения сочетания “CON10” будут в текстовом виде заменены на “10”. Макрос для возвращения максимума двух чисел: #define MAX(a,b) ((a>b)?(a):(b))
  • 10. http://www.slideshare.net/IgorShkulipa 10 Директива #undef Для того, чтобы отменить макрос, существует директива #undef. Как только препроцессор встречает такую директиву, он "забывает" определённый ранее макрос и больше не заменяет его. #define N 20 // определяем макрос “N” int a[N]; #undef N // здесь препроцессор “забудет” макрос "N" void main () { int N; N++; }
  • 11. http://www.slideshare.net/IgorShkulipa 11 Директивы условной компиляции #if и #endif #define DEBUG 1 #if DEBUG == 1 void debug_print() { cout<<“Debug moden”; } #endif void main() { #if DEBUG == 1 debug_print(); #endif ... }
  • 12. http://www.slideshare.net/IgorShkulipa 12 Директивы #if, #else, #elif, #endif, #ifdef, #ifndef #if <условие> ... #endif #if <условие> ... #else ... #endif #if <условие> ... #elif <условие> ... #elif <условие> ... #else ... #endif #ifdef LINUX код для Линукс #endif #ifndef LINUX код НЕ для Линукс #endif
  • 13. http://www.slideshare.net/IgorShkulipa 13 Директивы #error и #warning #if defined LINUX ... #elif defined WINDOWS ... #elif defined MACOS ... #else #error “Unknown Operating System” #endif #warning работает так же, как #error, но выдает не ошибку, а предупреждение
  • 14. http://www.slideshare.net/IgorShkulipa 14 Директива #line Директива #line изменяет содержимое __LINE__ и __FILE__, которые являются зарезервированными идентификаторами в компиляторе. В первом из них содержится номер компилируемой в данный момент строки кода. А второй идентификатор — это строка, содержащая имя компилируемого исходного файла. В общем виде директива #line выглядит таким образом: #line номер "имя_файла" где номер — это положительное целое число, которое становится новым значением __LINE__, а необязательное имя_файла — это любой допустимый идентификатор файла, становящийся новым значением __FILE__. Директива #line в основном используется для отладки и специальных применений. Например, следующий код определяет, что счетчик строк будет начинаться с 100, а оператор printf() выводит номер 102, потому что он расположен в третьей строке программы после оператора #line 100: #include <stdio.h> #line 100 // установить счетчик строк int main(void) // строка 100 { // строка 101 printf("%dn",__LINE__); // строка 102 return 0; }
  • 15. http://www.slideshare.net/IgorShkulipa 15 Директива #pragma Директива #pragma — это определяемая реализацией директива, которая позволяет передавать компилятору различные инструкции. Например, компилятор может поддерживать трассировку выполнения программы или создание параллельных ветвей программы (OpenMP). Тогда эти возможности можно указывать в директиве #pragma. Возможности этой директивы и относящиеся к ней подробности должны быть описаны в документации по компилятору. 15
  • 16. http://www.slideshare.net/IgorShkulipa 16 Аргументы функции main() В языке C++ заданы два встроенных аргумента функции main: argc и argv. void main(int argc, char *argv[]) Аргумент argv типа char - указатель на массив строк. Каждый элемент массива указывает на аргументы командной строки. Один параметр отделяется от другого пробелами. ⚫ argv[0] - полное имя запущенной программы ⚫ argv[1] – первый аргумент после имени программы ⚫ argv[2] – второй аргумент после имени программы ⚫ argv[argc-1] – последний аргумент после имени программы ⚫ argv[argc] - NULL argc – количество аргументов, включая имя самой программы 16
  • 17. http://www.slideshare.net/IgorShkulipa 17 Лабораторная работа №4. Создать консольный калькулятор, который выполняет арифметические действия над числами в: ◾ Десятичной системе исчисления ◾ Двоичной системе исчисления ◾ Шестнадцатеричной системе исчисления ◾ Восьмеричной системе исчисления Реализовать меню для управления вычислениями. Реализовать меню с помощью массива указателей на функции. Реализовать функции для перевода из одной системы в другую. Реализовать все арифметико-логические операции - + - * / % | ^ ~ & >> <<, а так же операции извлечения квадратного корня, тригонометрические функции, функцию факториала и макросы максимума и минимума. Реализовать ввод чисел в формате строк (char* или string) с последующим переводом строк в числа. Разбить программу на логические модули и оформить каждый модуль в отдельные .h и .cpp файлы. Создать makefile для сборки всего проекта и собрать его с помощью утилиты make Темы для самостоятельного изучения: Работа со строками в С++. ◾ тип char*, заголовочный файл string.h ◾ тип std::string, заголовочный файл string