Лекция 9 Опасный код. Общие понятия. Основы использования указателей

Save this PDF as:
 WORD  PNG  TXT  JPG

Размер: px
Начинать показ со страницы:

Download "Лекция 9 Опасный код. Общие понятия. Основы использования указателей"

Транскрипт

1 Лекция 9 Опасный код Общие понятия С С# позволяет программистам писать то, что называется "опасный кодом" (unsafe code). Опасный код это код, который не плохо написан, а код, который не выполняется под полным управлением системы Common Language Runtime (CLR). Язык С# обычно используется для создания управляемого кода. Однако можно написать и "неуправляемый" код, который не подчиняется тем же средствам управления и ограничениям, налагаемым на управляемый код. Такой код называется "опасным", поскольку невозможно проконтролировать выполнение им опасных действий. Таким образом, термин «опасный» означает возможность выполнения действий, которые не являются предметом управления системы CLR. Если опасный код способен вызвать проблемы, то зачем, спрашивается, вообще создавать такой код? Дело в том, что управляемый код не допускает использование указателей. Указатели это переменные, которые хранят адреса других объектов. Следовательно, указатели в некотором роде подобны ссылкам в С#. Основное различие между ними заключается в том, что указатель может указывать на что угодно в памяти, а ссылка всегда указывает на объект "своего" типа. Но если указатель может указывать на что угодно, возможно неправильное его использование. Кроме того, работая с указателями, можно легко внести в код ошибку, которую будет трудно отыскать. Вот почему С# не поддерживает указатели при создании управляемого кода. Тем не менее указатели существуют, причем для некоторых типов программ (например, системных утилит) они не просто полезны, они необходимы. Все операции с указателями должны быть отмечены как "опасные", поскольку они выполняются вне управляемого контекста. Чтобы скомпилировать неуправляемый код, необходимо использовать опцию компилятора /unsafe. Основы использования указателей Указатели это переменные, которые хранят адреса других переменных. Например, если х содержит адрес переменной у, то о переменной х говорят, что она "указывает" на у. Поскольку указатель указывает на некоторую переменную, значение этой переменной можно получить или изменить посредством указателя. Операции, выполняемые с помощью указателей, часто называют операциями непрямого доступа. Объявление указателя Переменные-указатели (или переменные типа указатель) должны быть объявлены таковыми. Формат объявления переменной-указателя таков: тип* имя_переменной; Здесь элемент ТИП означает базовый тип указателя, причем он не должен быть ссылочным. Следовательно, нельзя объявлять указатель на объект класса. Обратите внимание на расположение оператора "звездочка" (*). Он стоит после имени типа. Элемент имя_переменной представляет собой имя переменной-указателя. Рассмотрим пример. Чтобы объявить переменную ip указателем на int-значение, используется следующая инструкция: int* ip; Для объявления указателя на float-значение: float* fp; В общем случае использование символа "звездочка" (*) в инструкции объявления после имени типа создает тип указателя. 1

2 Тип данных, на которые будет указывать указатель, определяется его базовым типом. Следовательно, в предыдущих примерах переменную ip можно использовать для указания на int-значение, а переменную fp на float-значение. Однако помните: не существует реального средства, которое могло бы помешать указателю указывать на "бог-знает-что". Вот потому-то указатели потенциально опасны. В С# оператор " * " распространяется на все объявление, и поэтому при выполнении инструкции int* p, q; создаются два указателя р и q на int-значения. Таким образом, в С# предыдущая инструкция эквивалентна таким двум объявлениям: int * р; int * q; Операторы "*" и "&" С указателями используются два оператора: "*" и "&". Оператор "&" унарный. Он возвращает адрес памяти, по которому расположен его операнд. Например, при выполнении следующего фрагмента кода: int * ip ; int num = 10; ip = # в переменную ip помещается адрес переменной num. Этот адрес соответствует области во внутренней памяти компьютера, которая принадлежит переменной num. Выполнение последней инструкции никак не повлияло на значение переменной num. Итак, переменная ip содержит не значение 10 (начальное значение переменной num), а адрес, по которому оно хранится. Назначение оператора "&" можно "перевести" как "адрес переменной", перед которой он стоит. Следовательно, последнюю инструкцию присваивания можно выразить так: "переменная ip получает адрес переменной num". Второй оператор работы с указателями (*) служит дополнением к первому (&). Это также унарный оператор, но он обращается к значению переменной, расположенной по адресу, заданному его операндом. Другими словами, он указывает на значение переменной, адресуемой заданным указателем. Если (продолжая работу с предыдущим фрагментом кода) переменная ip содержит адрес переменной num, то при выполнении инструкции int val = *ip; переменной val будет присвоено значение 10, являющееся значением переменной num, на которую указывает переменная ip. Назначение оператора "*" можно выразить словосочетанием "по адресу". В данном случае предыдущую инструкцию можно прочитать так: "переменная val получает значение (расположенное) по адресу ip". Оператор "*" также можно использовать с левой стороны от оператора присваивания. В этом случае он устанавливает значение, адресуемое заданным указателем. Например, при выполнении инструкции *ip = 100; число 100 присваивается переменной, адресуемой указателем ip (в данном случае имеется в виду переменная num). Таким образом, эту инструкцию можно прочитать так: "по адресу ip помещаем значение 100". Использование ключевого слова unsafe Код, в котором используются указатели, должен быть отмечен как "опасный" с помощью ключевого слова unsafe. Так можно отмечать отдельные инструкции и методы целиком. Например, рассмотрим программу, в методе Main() которой используются указатели, и поэтому весь метод отмечен словом unsafe. namespace ConsolUnsafe1 2

3 int count = 99; int *p; // Создаем указатель на int-значение. p = &count; // Помещаем адрес переменной count в указатель р. Console.WriteLine("Начальное значение переменной count равно " + *p); *p = 10; // Присваиваем значение 10 переменной count через указатель р Console.WriteLine("Новое значение переменной count равно " + *p); Использование модификатора fixed При работе с указателями зачастую используется модификатор fixed. Он предотвращает удаление управляемых переменных системой сбора мусора. Это необходимо в том случае, если, например, указатель ссылается на какое-нибудь поле в объекте класса. Поскольку указатель "ничего не знает" о действиях "сборщика мусора", то в случае удаления такого объекта этот указатель будет указывать на неверный объект. Формат применения модификатора fixed таков: fixed (type* p = &var) // Использование зафиксированного объекта. Здесь элемент р указатель, которому присваивается адрес переменной. Объект будет оставаться в текущей области памяти до тех пор, пока не выполнится соответствующий блок кода. Инстру к- ция fixed может включать вместо блока кода единственную инструкцию. Ключевое слово fixed можно использовать только в контексте "опасного кода". Используя список элементов, разделенных запятыми, можно объявить сразу несколько фиксированных указателей. Рассмотрим пример использования модификатора fixed: namespace ConsolUnsafe2 Class1 O = new Class1(20); fixed (int* p = &O.num) // Используем модификатор // fixed, чтобы поместить // адрес поля о.num в р Console.WriteLine("Начальное значение поля o.num равно " + *p); *p = 10; // Присваиваем число 10 переменной count через указатель р Console.WriteLine("Новое значение поля o.num равно " + *p); Здесь модификатор fixed защищает объект О от удаления. Поскольку р указывает на поле о.num, то в случае удаления объекта O указатель р некорректно ссылался бы на область памяти. 3

4 Доступ к членам структур с помощью указателей Указатель может ссылаться на объект структурного типа, если он не содержит ссылочных типов. При доступе к члену структуры посредством указателя необходимо использовать оператор "стрелка" (->), а не оператор "точка" (.). Рассмотрим, например, следующую структуру: namespace ConsolUnsafe3 struct MyStruct public int x; public int y; public int sum() return x + y; MyStruct O = new MyStruct() ; //Доступ через указатели MyStruct *p; // Объявляем указатель. p = &O; p -> x = 10; p -> y = 20; Console.WriteLine("Сумма равна " + p->sum()); //Доступ через объект структура O.x = 10; O.y = 10; Console.WriteLine("Сумма = " + O.sum()); Арифметические операции над указателями С указателями можно использовать только четыре арифметических оператора: ++, --, + и - Чтобы лучше понять, что происходит при выполнении арифметических действий с указателями, начнем с примера. Пусть p1 указатель на int-переменную с текущим значением (т.е. p1 содержит адрес 2 000). После выполнения выражения p1++ содержимое указателя p1 станет равным 2 004, а не 2 001! Дело в том, что при каждом инкрементировании указатель p1 будет указывать на следующее intзначение. Поскольку в С# int-значения занимают 4 байта, то при инкрементировании p1 его значение увеличивается на 4. Для операции декрементирования справедливо обратное утверждение, т.е. при каждом декрементировании значение p1 будет уменьшаться на 4. Например, после выполнения инструкции p1-- указатель p1 будет иметь значение 1 996, если до этого оно было равно Итак, каждый раз, когда указатель инкрементируется, он будет указывать на область памяти, содержащую следующий элемент базового типа этого указателя. А при каждом декрементировании он будет указывать на область памяти, содержащую предыдущий элемент базового типа этого указателя. Арифметические операции над указателями не ограничиваются использованием операторов инкремента и декремента. Со значениями указателей можно выполнять операции сложения и вычитания, используя в качестве второго операнда целочисленные значения. Выражение p1 = p1 + 9; 4

5 заставляет p1 указывать на девятый элемент базового типа указателя p1 относительно элемента, на который p1 указывал до выполнения этой инструкции. Несмотря на то, что складывать указатели нельзя, один указатель можно вычесть из другого (в предположении, что они оба имеют один и тот же базовый тип). Разность покажет количество элементов базового типа, которые разделяют эти два указателя. Помимо сложения (и вычитания) указателя и (из) целочисленного значения, а также вычитания двух указателей, над указателями никакие другие арифметические операции не выполняются. Например, с указателями нельзя складывать float- или double-значения. Чтобы понять, как формируется результат выполнения арифметических операций над указателями, выполним следующую короткую программу. Она выводит реальные физические адреса, которые содержат указатель на int-значение (ip) и указатель на float-значение (fp). Обратите внимание на каждое изменение адреса (зависящее от разового типа указателя), которое происходит при повторении цикла. namespace ConsolUnsafe4 int x; int i; double d; int *ip = &i; double *fp = &d; Console.WriteLine("int double\n"); for (x = 0; x < 10; x++) Console.WriteLine((uint)(ip) + " " + (uint)(fp)); ip++; fp++; Как подтверждают результаты выполнения этой программы, арифметические операции над указателями выполняются в зависимости от базового типа каждого указателя. Поскольку любое intзначение занимает четыре байта, а double-значение восемь, то и сами адреса изменяются с учетом этих значений. Для получения информации о размере (в байтах) одного из С#-типов используется оператор sizeof. Формат его применения таков: sizeof(тип) Здесь элемент тип это тип, размер которого мы хотим получить. Оператор sizeof можно использовать только в контексте опасного (unsafe) кода. 5

6 Рис.1. Результат работы программы Сравнение указателей Указатели можно сравнивать, используя операторы отношения ==, < и >. Однако для того чтобы результат сравнения указателей поддавался интерпретации, сравниваемые указатели должны быть каким-то образом связаны. Например, если p1 и р2 указатели, которые указывают на две отдельные и никак не связанные переменные, то любое сравнение p1 и р2 в общем случае не имеет смысла. Но если p1 и р2 указывают на переменные, между которыми существует некоторая связь (как, например, между элементами одного и того же массива), то результат сравнения указателей p1 и р2 может иметь определенный смысл. Рассмотрим пример, в котором сравнение указателей используется для отыскания среднего элемента массива. namespace ConsolUnsafe5 int[] nums = new int[11]; int x; // Находим средний элемент массива, fixed (int* start = &nums[0]) fixed (int* end = &nums[nums.length - 1]) for (x = 0; start + x <= end - x; x++) ; Console.WriteLine("Средний элемент массива имеет номер " + x); Эта программа находит средний элемент, первоначально установив указатель start равным адресу первого элемента, а указатель end адресу последнего элемента массива. Затем, используя возможности выполнения арифметических операций над указателями, мы увеличиваем указатель start на целочисленное значение х, а указатель end уменьшаем на то же значение х до тех пор, пока результат суммирования start и х не станет меньше или равным результату вычитания end и х. 6

7 Одно уточнение: указатели start и end должны быть созданы внутри fixed-инструкции, поскольку они указывают на элементы массива, который представляет собой ссылочный тип данных. Не забывайте, что в С# массивы реализованы как объекты и могут быть удалены сборщиком мусора. Указатели и массивы В С# указатели и массивы связаны между собой. Например, имя массива без индекса образует указатель на начало этого массива. Рассмотрим следующую программу: namespace ConsolUnsafe6 int[] nums = new int[10]; fixed(int* p = &nums[0], p2 = nums) if(p == p2) Console.WriteLine("Указатели р и р2 содержат один и тот же адрес."); Как подтверждают результаты выполнения этой программы, выражение &nums[0] эквивалентно nums. Индексация указателя Указатель, который ссылается на массив, можно индексировать так, как если бы это было имя массива. Этот синтаксис обеспечивает альтернативу арифметическим операциям над указателями, поскольку он более удобен в некоторых ситуациях. Рассмотрим пример: namespace ConsolUnsafe7 int[] nums = new int[10]; // Индексируем указатель. Console.WriteLine("Индексируем указатель подобно массиву."); fixed (int* p = nums) for (int i = 0; i < 10; i++) p[i] = i; // Индексируем указатель подобно массиву. for (int i = 0; i < 10; i++) Console.WriteLine("p[0]: 1", i, p[i]); 7

8 // Используем арифметические операции над указателями. Console.WriteLine("\nИспользуем арифметические операции над указателями."); fixed (int* p = nums) for(int i=0; i < 10; i++) *(p+i) = i; // Используем арифметические // операции над указателями. for(int i=0; i < 10; i++) Console.WriteLine("*(p+0): 1",i,*(p+i)); Рис.2. Результат выполнения программы Как видно по результатам выполнения этой программы, выражение (в котором участвует указатель) в формате *(p + i) можно переписать с использованием синтаксиса, применяемого при индексировании массивов: p[i] При индексировании указателя необходимо помнить следующее. Во-первых, при этом нарушение границ массива никак не контролируется. Следовательно, существует возможность получить доступ к "элементу" за концом массива, если на него ссылается указатель. Во-вторых, указатель не имеет свойства Length. Поэтому при использовании указателя невозможно узнать длину массива. Указатели и строки Несмотря на то что в С# строки реализованы как объекты, к отдельным их символам можно получить доступ с помощью указателя. Для этого достаточно присвоить char*-указателю адрес начала этой строки, используя fixed-инструкцию: fixed(char* p = str ) // 8

9 После выполнения такой fixed-инструкции р будет указывать на начало символьного массива, который составляет эту строку. Этот символьный массив заканчивается символом конца строки, т.е. нулевым символом. Этот факт можно использовать для проверки достижения конца массива. В C/C++ символьные строки реализованы в виде символьных массивов, завершающихся нулевым символом. Таким образом, получив char*- указатель на строку, можно обрабатывать строки практически так же, как это делается в C/C++. Рассмотрим программу, которая демонстрирует доступ к строке с помощью char*- указателя: namespace ConsolUnsafe8 string str = "Это простой тест."; // Направляем указатель р на начало строки str. fixed(char* p = str) // Отображаем содержимое строки str //с помощью указателя р. for(int i=0; p[i]!= 0;i++) Console.Write(p[i]); Console.WriteLine(); Использование многоуровневой непрямой адресации Можно создать указатель, который будет ссылаться на другой указатель, а тот на конечное значение. Эту ситуацию называют многоуровневой непрямой адресацией (multiple indirection), или использованием указателя на указатель. При использовании непрямой адресации можно организовать любое желаемое количество уровней, но, как правило, ограничиваются лишь двумя, поскольку увеличение числа уровней часто ведет к возникновению концептуальных ошибок. Переменную, которая является указателем на указатель, нужно объявить соответствующим образом. Для этого достаточно поставить дополнительный символ "звездочка"(*) после имени типа. Например, следующее объявление сообщает компилятору о том, что q это указатель на указатель на значение типа int : int** q; Необходимо помнить, что переменная q здесь не указатель на целочисленное значение, а указатель на указатель на int-значение. Чтобы получить доступ к значению, адресуемому указателем на указатель, необходимо дважды применить оператор "*", как показано в следующем примере: namespace ConsolUnsafe9 9

10 int x; // Переменная содержит значение, int* p; // Переменная содержит указатель //на int-значение. int** q; // Переменная содержит указатель на указатель //на int-значение. x = 10; p = &x; // Помещаем адрес х в р. q = &p; // Помещаем адрес р в q. Console.WriteLine(**q); // Отображаем значение х. При выполнении этой программы мы получили бы значение переменной х, т.е. число 10. Здесь переменная р объявлена как указатель на int-значение, а переменная q как указатель на указатель на int-значение. И еще: не следует путать многоуровневую непрямую адресацию с такими высокоуровневыми структурами данных, как связные списки, которые используют указатели. Это две принципиально различные концепции. Массивы указателей Указатели, подобно данным других типов, могут храниться в массивах. Вот, например, как выглядит объявление трехэлементного массива указателей на int-значения: int * [] ptrs = new int * [3]; Чтобы присвоить адрес int-переменной с именем var третьему элементу этого массива указателей, запишите следующее: ptrs[2] = &var; Чтобы получить значение переменной var, используйте такой синтаксис: *ptrs[2]; 10

Лабораторная работа 2 Разработка и отладка алгоритмов и программ с использованием указателей

Лабораторная работа 2 Разработка и отладка алгоритмов и программ с использованием указателей Лабораторная работа 2 Разработка и отладка алгоритмов и программ с использованием указателей 1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков работы с указателями. 2. ОСНОВНЫЕ ПОНЯТИЯ Указатель это переменная,

Подробнее

Лекция 2. Основные типы данных

Лекция 2. Основные типы данных Лекция 2 Рыбалка С.А., Шкатова Г.И. Лекции по C++ Основные типы данных Основным средством хранения данных, обрабатываемых программой, являются ячейки памяти. Вся память компьютера является однородной и

Подробнее

Лекции по курсу Алгоритмы и алгоритмические языки, 1 курс, 1 поток, 2010/2011 уч.год.

Лекции по курсу Алгоритмы и алгоритмические языки, 1 курс, 1 поток, 2010/2011 уч.год. Лекция 8 Массивы и указатели 8.1. Указатели 8.1.1. Организация памяти в компьютере массив последовательно пронумерованных (адресуемых) ячеек, которые можно обрабатывать по отдельности, либо группами. Указатель

Подробнее

Тема 1.3 Операции в С

Тема 1.3 Операции в С Тема 1.3 Операции в С Преобразование типов явное и неявное. Операции арифметического типа. Преобразование типа в операции присвоения. Операции логического типа. Одноместные и двуместные операции. Адресные

Подробнее

Ключевые слова языка С#

Ключевые слова языка С# 1 abstract, см. также 11, 55 2 as, см. также 37 Ключевые слова языка С# Модификатор abstract используется при объявлении класса, метода или свойства. Использование модификатора abstract в объявлении класса

Подробнее

Функции ref out определении вызове Main()

Функции ref out определении вызове Main() Функции Функции представляют собой блоки кода, позволяющие выполнять одни и те же операции над различными значениями данных. Функции определяются один раз и могут вызываться из любой точки приложения.

Подробнее

ЛЕКЦИЯ 4 МАССИВЫ И УКАЗАТЕЛИ

ЛЕКЦИЯ 4 МАССИВЫ И УКАЗАТЕЛИ ЛЕКЦИЯ 4 МАССИВЫ И УКАЗАТЕЛИ 1. Массивы Массив это набор однородных элементов фиксированной длины. Память для массивов выделяется одним куском. При инициализации массива записывается тип элементов массива,

Подробнее

Программирование в C++ Преподаватель Колотова Людмила Павловна

Программирование в C++ Преподаватель Колотова Людмила Павловна Программирование в C++ Преподаватель Колотова Людмила Павловна 2 Содержание 9-го занятия по практике Указатели. Адреса и указатели. Указатель на void Указатели и массивы. Указатели и строки Диаграммы UML

Подробнее

1

1 www.vasilev.kiev.ua 1 Указатели и небезопасный код Ну, зачем такие сложности?! из к/ф "Приключения Шерлока Холмса и доктора Ватсона" 2 unsafe /unsafe Пример компиляции файла программы csc /unsafe myprogram.cs

Подробнее

Семинар 4. Дружественные функции. Перегрузка операторов. Динамическое распределение памяти.

Семинар 4. Дружественные функции. Перегрузка операторов. Динамическое распределение памяти. Семинар 4. Дружественные функции. Перегрузка операторов. Динамическое распределение памяти. 1. Дружественные функции Дружественные функции обладает такими же правами доступа к данным класса, как и его

Подробнее

ООП. С++. Вопросы для проверки и закрепления знаний. 7. Проанализируйте ранее разработанные Вами программы

ООП. С++. Вопросы для проверки и закрепления знаний. 7. Проанализируйте ранее разработанные Вами программы ООП. С++. Вопросы для проверки и закрепления знаний. 1. Проанализируйте ранее разработанные Вами программы и ответьте на вопрос: в каких из них наблюдается слабая связь между структурой данных и функционированием

Подробнее

Алгоритмизация и программирование

Алгоритмизация и программирование Алгоритмизация и программирование Программирование на С/С++ (ч.12 указатели) Беркунский Е.Ю., кафедра ИУСТ, НУК eugeny.berkunsky@gmail.com http://www.berkut.mk.ua Указатели Указатель переменная, значением

Подробнее

Одномерные массивы. Лабораторная работа 9

Одномерные массивы. Лабораторная работа 9 Лабораторная работа 9 Одномерные массивы Массивы. Ссылочные типы и null. Часто в программах требуется завести большое количество переменных одного и того же типа. Можно, конечно, написать большое количество

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 8

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 8 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017 Лекция 8 1 Указатели & - операция адресации * - операция разыменования int a = 1; int *p; p = &a; *p = 2; printf ("Значение переменной a = %d\n",

Подробнее

Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы.

Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы. Семинар 5. Статические элементы данных и функции. Наследование. Виртуальные методы. 1. Статическая (static) переменная класса Добавим в определение класса статическую переменную: private: // double x;

Подробнее

Лекция 2. Как выполняются программы на C++

Лекция 2. Как выполняются программы на C++ http://compscicenter.ru 1/21 Лекция 2. Как выполняются программы на C++ Александр Смаль CS центр 15 сентября 2016 Санкт-Петербург http://compscicenter.ru 2/21 Типы данных Целочисленные: 1. char (символьный

Подробнее

int *p, c; char *strdup(char *ptr); int *aptr[20]; p = &c;

int *p, c; char *strdup(char *ptr); int *aptr[20]; p = &c; 1 Занятие 5 1.1 Указатели Рассмотрим важнейший производный тип указательный. Если base это некоторый базовый тип, то тип указателя на тип base имеет своим множеством значений всевозможные адреса памяти,

Подробнее

о значениях и ссылках

о значениях и ссылках 8 Основные сведения о значениях и ссылках Прочитав эту главу, вы научитесь: ¾ объяснять разницу между типом значений и типом ссылок; ¾ изменять способ передачи аргументов в качестве параметров методов

Подробнее

IDK1031 Основы Click to edit Master title style программирования на языке С. Указатели и адреса. Арифметика указателей.

IDK1031 Основы Click to edit Master title style программирования на языке С. Указатели и адреса. Арифметика указателей. IDK1031 Основы Click to edit Master title style программирования на языке С Указатели и адреса. Арифметика указателей. Указатель Указатель переменная, значением которой является адрес. Указатели делают

Подробнее

Тема 14. Динамическая память и указатели.

Тема 14. Динамическая память и указатели. Тема 14. Динамическая память и указатели. 14.1. Динамическая память Большинство элементов программы в программировании в Object Pascal подразделяются на динамические и статические. Статические элементы,

Подробнее

ЛАБОРАТОРНАЯ РАБОТА 29 Создание приложения с разветвленным меню. Динамические массивы

ЛАБОРАТОРНАЯ РАБОТА 29 Создание приложения с разветвленным меню. Динамические массивы ЛАБОРАТОРНАЯ РАБОТА 29 Создание приложения с разветвленным меню. Динамические массивы Цели: научиться применять указатели; научиться работать с динамическими массивами; закрепить умение по обработке ошибок;

Подробнее

struct circle { double x, y, r; int c; }; struct circle c1; struct foo { struct bar { double x; }; int y; struct bar z; }; struct bar t;

struct circle { double x, y, r; int c; }; struct circle c1; struct foo { struct bar { double x; }; int y; struct bar z; }; struct bar t; 1 Занятие 6 1.1 Структуры Ранее мы рассмотрели методы определения и работы с массивами и перечислимыми типами. Теперь рассмотрим определение и использование структур. Структура в языке Си это объединение

Подробнее

ЛЕКЦИЯ 5 ДИНАМИЧЕСКИЕ МАССИВЫ И ПРИМЕРЫ РАБОТЫ С УКАЗАТЕЛЯМИ

ЛЕКЦИЯ 5 ДИНАМИЧЕСКИЕ МАССИВЫ И ПРИМЕРЫ РАБОТЫ С УКАЗАТЕЛЯМИ ЛЕКЦИЯ 5 ДИНАМИЧЕСКИЕ МАССИВЫ И ПРИМЕРЫ РАБОТЫ С УКАЗАТЕЛЯМИ 1. Функция суммирования элементов массива 1.1. Реализация функции суммирования без использования указателей Имеется массив a из 5 элементов.

Подробнее

4.13. Строки. 10 символов char string[11]; "строка в кавычках" Строковая константа - char str[ ] = Counted by compiler! ;

4.13. Строки. 10 символов char string[11]; строка в кавычках Строковая константа - char str[ ] = Counted by compiler! ; -одномерные массивы типа char, заканчивающийся нулевым байтом - '\0 или '\x0 10 символов char string[11]; 4.13. Строки Строковая константа - "строка в кавычках" добавляется '\0 char str[ ] = Counted by

Подробнее

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

Языки и методы программирования. Электронные тесты промежуточного контроля знаний МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ имени академика

Подробнее

Введение в программирование Урок 8: Указатели

Введение в программирование Урок 8: Указатели Введение в программирование Урок 8: Указатели 1 Адреса памяти Память разделена на ячейки, каждая величиной в 1 байт. Эти ячейки пронумерованы, и номер ячейки называется её адресом. Каждой программе выделяется

Подробнее

2.5.3 Операторы. + Сложение - Вычитание, унарный минус * Умножение / Деление % Деление по модулю -- Декремент ++ Инкремент

2.5.3 Операторы. + Сложение - Вычитание, унарный минус * Умножение / Деление % Деление по модулю -- Декремент ++ Инкремент 2.5.3 Операторы В языке Java предусмотрен обширный ряд операторов, предоставляющих программисту возможность полного контроля над построением и вычислением выражений. Большинство операторов относится к

Подробнее

Лекция 9. Терновой Максим Юрьевич к.т.н., с.н.с., доцент кафедры информационнотелекоммуникационных

Лекция 9. Терновой Максим Юрьевич к.т.н., с.н.с., доцент кафедры информационнотелекоммуникационных Технологии программирования Зима-Весна Лекция 9 Терновой Максим Юрьевич к.т.н., с.н.с., доцент кафедры информационнотелекоммуникационных сетей Вопросы, рассматриваемые на лекции 1. Частные (private) элементы

Подробнее

Типы данных и управляющие структуры Java

Типы данных и управляющие структуры Java Типы данных и управляющие структуры Java Евгений Беркунский, НУК eugeny.berkunsky@gmail.com http://berkut.homelinux.com Что такое тип данных? Тип данных: Спектр значений Набор допустимых операций Программа

Подробнее

Программирование в C++ Преподаватель Колотова Людмила Павловна

Программирование в C++ Преподаватель Колотова Людмила Павловна Программирование в C++ Преподаватель Колотова Людмила Павловна 2 Содержание 5-го занятия по практике Структуры. Простая структура. Доступ к полям структуры Структура параметр функции Структура значение

Подробнее

Лабораторная работа 4 Программирование линейных алгоритмов Цель работы: Microsoft Visual Studio Цель работы: Общие сведения:

Лабораторная работа 4 Программирование линейных алгоритмов Цель работы: Microsoft Visual Studio Цель работы: Общие сведения: Лабораторная работа 4 Программирование линейных алгоритмов Цель работы: выработать практические навыки работы с системой Microsoft Visual Studio, научиться создавать, вводить в компьютер, выполнять и исправлять

Подробнее

4 Классы. 4.1 Основы классов

4 Классы. 4.1 Основы классов 4 Классы Класс центральный компонент Java. Поскольку класс определяет форму и сущность объекта, он является той логической конструкцией, на основе которой построен весь язык. Как таковой, класс образует

Подробнее

В.Л. Тарасов Лекции по программированию на C++

В.Л. Тарасов Лекции по программированию на C++ 60 В.Л. Тарасов Лекции по программированию на C++ Лекция 4 Массивы и вектора Массив представляет собой набор последовательно пронумерованных элементов одного типа. Все элементы массива имеют одно имя,

Подробнее

времени выполнения) компилирует ее содержимое в машинный код

времени выполнения) компилирует ее содержимое в машинный код 1. Объектно-ориентированное программирование 1 1.1. Введение в.net и С# Microsoft.NET это платформа для разработки прикладных программ, основанная и ориентированная на Интернет..NET основывается на двух

Подробнее

Введение в С++11 (стандарт ISO/IEC 14882:2011 Вне рассмотрения в рамках курса остаются нововведения для работы с шаблонами:

Введение в С++11 (стандарт ISO/IEC 14882:2011 Вне рассмотрения в рамках курса остаются нововведения для работы с шаблонами: (стандарт ISO/IEC 14882:2011 ) Вне рассмотрения в рамках курса остаются нововведения для работы с шаблонами: ведение понятий лямбда-функций и выражений, внешние шаблоны, альтернативный синтаксис шаблонных

Подробнее

Программирование в C++ Преподаватель Колотова Людмила Павловна

Программирование в C++ Преподаватель Колотова Людмила Павловна Программирование в C++ Преподаватель Колотова Людмила Павловна 2 Содержание 4-го занятия по практике Работа с функциями. Простые и библиотечные функции Передача аргументов в функцию Значение, возвращаемое

Подробнее

Тема 1.1 Базовые типы и агрегаты данных в языке «С»

Тема 1.1 Базовые типы и агрегаты данных в языке «С» Тема 1.1 Базовые типы и агрегаты данных в языке «С» В языке программирования С присутствуют следующие типы данных: Тип Типичный размер в битах Минимально допустимый диапозон значений char 8 от -127 до

Подробнее

Массивы. В ЯЗЫКЕ программирования Java массивы являются объектами ( 4.3.1), создаются динамически ГЛАВА 10

Массивы. В ЯЗЫКЕ программирования Java массивы являются объектами ( 4.3.1), создаются динамически ГЛАВА 10 ГЛАВА 10 Массивы В ЯЗЫКЕ программирования Java массивы являются объектами ( 4.3.1), создаются динамически и могут присваиваться переменным типа Object ( 4.3.2). Все методы класса Object можно вызывать

Подробнее

Объектно-ориентированное программирование 1 (на основе C++/C#). I სემესტრი წელი (დასკვნითი გამოცდის ნიმუში)

Объектно-ориентированное программирование 1 (на основе C++/C#). I სემესტრი წელი (დასკვნითი გამოცდის ნიმუში) Объектно-ориентированное программирование 1 (на основе C++/C#). I სემესტრი. 2017-2018 წელი (დასკვნითი გამოცდის ნიმუში) Question 1 Составленная на языке C# программа начинается и заканчивается: a. Круглыми

Подробнее

Лабораторная работа 9

Лабораторная работа 9 Лабораторная работа 9 Алгоритмизация и программирование ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ УНИВЕРСИТЕТ ФАКУ ЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И МЕХАТРОНИКИ Кафедра информационных технологий и мехатроники

Подробнее

Тема 1.1 Операции в С

Тема 1.1 Операции в С Тема 1.1 Операции в С Операции Операции ранга 1 имеют наивысший приоритет. Операции одного ранга имеют одинаковый приоритет, и если их в выражении несколько, то они выполняются в соответствии с правилом

Подробнее

ГЛАВА 3. Лексические анализаторы. Лексические анализаторы

ГЛАВА 3. Лексические анализаторы. Лексические анализаторы ГЛАВА 3. Лексические анализаторы ГЛАВА 3 Лексические анализаторы Лексические анализаторы (сканеры). Принципы построения сканеров Назначение лексического анализатора Прежде чем перейти к рассмотрению лексических

Подробнее

Тема 1.1 Массивы скалярных данных

Тема 1.1 Массивы скалярных данных Тема 1.1 Массивы скалярных данных Массивы в С++ Массив это структура данных, представленная в виде группы ячеек одного типа, объединенных под одним единым именем. Массивы используются для обработки большого

Подробнее

Урок 4. Циклы и массивы.

Урок 4. Циклы и массивы. Урок 4. Циклы и массивы. О чем урок: циклы while do-while for массивы функции для работы с массивами Смотреть урок: [marafon_4.mp4] Циклы Цикл управляющая конструкция, предназначенная для многократного

Подробнее

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

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

Подробнее

Информационные технологии. Лекция 7

Информационные технологии. Лекция 7 Информационные технологии Лекция 7 Работа с массивами Массив упорядоченный набор однотипных переменных, объединенных одним именем. В качестве типа элементов массива можно использовать все типы: все числовые,

Подробнее

Перегрузка функций и операторов. Виртуальные функции. Концепция полиморфизма.

Перегрузка функций и операторов. Виртуальные функции. Концепция полиморфизма. Студенческая лаборатория МФТИ-Intel Перегрузка функций и операторов. Виртуальные функции. Концепция полиморфизма. Максим Кузнецов maks.kuznetsov@gmail.com 22-23.03.2013 http://ilab.mipt.ru Содержание лекции

Подробнее

Язык Си. Реализация списков с помощью цепочек динамических объектов

Язык Си. Реализация списков с помощью цепочек динамических объектов Язык Си. Реализация списков с помощью цепочек динамических объектов А. А. Вылиток В языке Си нет встроенных типов данных и операций для работы со списками. Программируя на языке Паскаль (в котором также

Подробнее

Обобщения. Основные понятия

Обобщения. Основные понятия Обобщения. Основные понятия Термин «обобщение», по существу, означает параметризированный тип. Особая роль параметризированных типов состоит в том, что они позволяют создавать классы, структуры, интерфейсы,

Подробнее

Тема 9. Типы. Структурированные типы.

Тема 9. Типы. Структурированные типы. Тема 9. Типы. Структурированные типы. В Object Pascal четыре структурированных типа: массивы, записи, множества и файлы. Любой из структурированных типов характеризуется множественностью образующих этот

Подробнее

Перечисления и массивы

Перечисления и массивы Перечисления и массивы 1 Перечислимый тип данных Перечисление отдельный тип-значение, содержащий совокупность именованных констант. Пример: enum Color : long { Red, Green, Blue Базовый класс - System.Enum.

Подробнее

Урок 2. Курс: «Разработка приложений под мобильные устройства на основе Android» Тема: Переменные, типы данных, операторы

Урок 2. Курс: «Разработка приложений под мобильные устройства на основе Android» Тема: Переменные, типы данных, операторы ! Урок 2 Курс: «Разработка приложений под мобильные устройства на основе Android» Тема: Переменные, типы данных, операторы План 1. Типы данных 2. Переменные. Константы и литералы 3. Операторы 1. Понятие

Подробнее

Тема 1.1 Функции в С. Понятие функции

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

Подробнее

ЯЗЫК VBA ОБЗОР ТИПОВ ДАННЫХ VBA

ЯЗЫК VBA ОБЗОР ТИПОВ ДАННЫХ VBA ЯЗЫК VBA Язык VBA является объектно-ориентированным. Это значит, что многие его команды имеют особенный формат. Типичная команда VBA имеет вид: ..< >.

Подробнее

Перегрузка операций. Московский авиационный институт. (технический исследовательский университет) Электронно-вычислительные средства и информатика

Перегрузка операций. Московский авиационный институт. (технический исследовательский университет) Электронно-вычислительные средства и информатика С сайта www.malshakov.ru Московский авиационный институт (технический исследовательский университет) Кафедра 403 Электронно-вычислительные средства и информатика Перегрузка операций студент 1-го курса

Подробнее

Компьютерная Академия Шаг Урок 18. Программирование на C. Оглавление

Компьютерная Академия Шаг Урок 18. Программирование на C. Оглавление Оглавление 1. Краткие сведения из курса двоичной арифметики. Использование нескольких систем исчисления 2. Битовые операции 3. Объединения 4. Битовые поля 5. Домашнее задание 1 Краткие сведения из курса

Подробнее

ЛЕКЦИЯ 4. ТИПЫ ДАННЫХ

ЛЕКЦИЯ 4. ТИПЫ ДАННЫХ ЛЕКЦИЯ 4. ТИПЫ ДАННЫХ Общие сведения о типах... 1 Отсутствие объявлений типов переменных... 2 Автоматическое преобразование типов... 3 Простые типы... 3 Целые числа... 3 Числа с плавающей точкой двойной

Подробнее

Лабораторная работа 4. Массивы и индексаторы Теоретические сведенья 1. Структура массива в С# Массив это коллекция переменных одинакового типа,

Лабораторная работа 4. Массивы и индексаторы Теоретические сведенья 1. Структура массива в С# Массив это коллекция переменных одинакового типа, Лабораторная работа 4. Массивы и индексаторы Теоретические сведенья 1. Структура массива в С# Массив это коллекция переменных одинакового типа, обращение к которым происходит с использованием общего для

Подробнее

Лабораторная работа 1

Лабораторная работа 1 Лабораторная работа 1 Объектно-ориентированное программирование ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ УНИВЕРСИТЕТ ФАКУ ЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И МЕХАТРОНИКИ Кафедра информационных технологий

Подробнее

Алгоритмизация и программирование

Алгоритмизация и программирование Алгоритмизация и программирование Программирование на С/С++ (ч.1 - основы) Беркунский Е.Ю., кафедра ИУСТ, НУК eugeny.berkunsky@gmail.com http://www.berkut.mk.ua Компьютеры для чего? Компьютер это универсальный

Подробнее

Концепции языков программирования

Концепции языков программирования Распределение памяти Распределение памяти 1 Статическое выделение пямяти 2 3 Распределение памяти 1 Статическое выделение пямяти 2 3 Статическое выделение пямяти Выделение памяти на этапе загрузки программы

Подробнее

struct circle { double x, y, r; int c; }; struct circle c1; struct foo { struct bar { double x; }; int y; struct bar z; }; struct bar t;

struct circle { double x, y, r; int c; }; struct circle c1; struct foo { struct bar { double x; }; int y; struct bar z; }; struct bar t; 1 Занятие 6 1.1 Структуры Ранее мы рассмотрели методы определения и работы с массивами и перечислимыми типами. Теперь рассмотрим определение и использование структур. Структура в языке Си это объединение

Подробнее

Лабораторная работа 9. Тема: «Обработка одномерных массивов. Сортировка массивов»

Лабораторная работа 9. Тема: «Обработка одномерных массивов. Сортировка массивов» Лабораторная работа 9 Тема: «Обработка одномерных массивов. Сортировка массивов» 1. Цель работы 1.1 Получение практических навыков в работе с одномерными массивами. 1.2 Знакомство с алгоритмами упорядочения.

Подробнее

YART Studio. Язык программирования C-YART

YART Studio. Язык программирования C-YART YART Studio Язык программирования C-YART Санкт-Петербург 2018 Оглавление C-YART... 3 Типы данных... 3 Комментарии к коду... 3 Структура кода... 3 Переменные, константы и массивы... 4 Математические операторы...

Подробнее

Массивы в Java. Лекция 6

Массивы в Java. Лекция 6 Лекция 6 Массивы в Java Массив это конечная последовательность упорядоченных элементов одного типа, доступ к каждому элементу в которой осуществляется по его индексу. Размер или длина массива это общее

Подробнее

Лабораторная работа 3 Работа с массивами

Лабораторная работа 3 Работа с массивами Лабораторная работа 3 Работа с массивами 1. Цель работы: 1) Получение практических навыков при работе с массивами. 2) Получение практических навыков при работе с указателями. 2. раткие теоретические сведения

Подробнее

Лабораторная работа 7. Строки в С/С++

Лабораторная работа 7. Строки в С/С++ Лабораторная работа 7 Строки в С/С++ 1. Цель работы: 1) Получение практических навыков при работе со строками 2) Получение практических навыков при передаче строк в функции. 2. Краткие теоретические сведения

Подробнее

Лабораторная работа 3 Тема: Структура программы на Си. Функции ввода-вывода.

Лабораторная работа 3 Тема: Структура программы на Си. Функции ввода-вывода. Лабораторная работа 3 Тема: Структура программы на Си. Функции ввода-вывода. Ход выполнения лабораторной работы должен быть отражен в отчете. Отчет должен содержать титульный лист, номера задания, коды

Подробнее

Java переменные, операции

Java переменные, операции Лекция 2 Java переменные, операции Javaпеременные Java является строго типизированным языком. Это означает, что любая переменная илюбое выражение имеют известный тип еще на момент компиляции. В языке Java

Подробнее

Тема 7. Программирование на языке Паскаль. Основные конструкции. Реализация линейной и разветвляющейся структур.

Тема 7. Программирование на языке Паскаль. Основные конструкции. Реализация линейной и разветвляющейся структур. Тема 7. Программирование на языке Паскаль. Основные конструкции. Реализация линейной и разветвляющейся структур. Общие сведения о языке программирования Паскаль Язык программирования Паскаль (Pascal) является

Подробнее

Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP. Осень-Зима 2014.

Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP. Осень-Зима 2014. Web-разработка на PHP-технологиях Курс лекций и семинаров для студентов, желающих научиться основам Web-разработки на PHP Осень-Зима 2014 Лекция 3 PHP Синтаксис языка Переменные, константы, типы данных

Подробнее

Векторы и матрицы При работе в MATLAB необходимо учитывать две существенные особенности реализации арифметических вычислений в этой системе.

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

Подробнее

Структуры в языке C.

Структуры в языке C. Структуры в языке C. Прежде чем говорить о структурах, вспомним массивы. Как вы, наверное, помните, массивы предназначены для хранения однотипных данных. Другими словами каждый элемент массива представляет

Подробнее

int vektor[10]; // вектор из 10 элементов double vektor[10]; // вектор из 10 элементов

int vektor[10]; // вектор из 10 элементов double vektor[10]; // вектор из 10 элементов Тема : знакомство с С (Си) МАССИВЫ, упражнения Содержание: массивы упражнение 1 упражнение 2 Массивы Массивы делятся на одномерные (вектора), двумерные (матрицы), трехмерные и многомерные. Обычно используют

Подробнее

Перегрузка операторов

Перегрузка операторов Перегрузка операторов На самом деле: определение действий операторов для пользовательских типов путём определения функций-операторов Это произведение доступно по лицензии Creative Commons Attribution-ShareAlike

Подробнее

Программирование в C++ Преподаватель Колотова Людмила Павловна

Программирование в C++ Преподаватель Колотова Людмила Павловна Программирование в C++ Преподаватель Колотова Людмила Павловна 2 Содержание 7-го занятия по практике Массивы. Определение массивов. Доступ к элементам массивов. Среднее арифметическое элементов массива

Подробнее

Лекция 2 Разветвляющиеся алгоритмы. Циклические алгоритмы. Выражения

Лекция 2 Разветвляющиеся алгоритмы. Циклические алгоритмы. Выражения Лекция 2 Разветвляющиеся алгоритмы. Циклические алгоритмы. Выражения Программирование, численные методы и информатика Александр Валерьевич Позднеев Кафедра автоматизации научных исследований Факультет

Подробнее

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

Иногда возникает потребность описывать и применять к созданным программистом типам данных операции, по смыслу эквивалентные уже имеющимся в языке 2013 Иногда возникает потребность описывать и применять к созданным программистом типам данных операции, по смыслу эквивалентные уже имеющимся в языке 2 Перегрузка операций предполагает введение в язык

Подробнее

Курс «Язык С++» Симуни Михаил Лазаревич. msimuni.wikidot.com/cpp группа курс "Язык С++" (мат-мех 17)

Курс «Язык С++» Симуни Михаил Лазаревич. msimuni.wikidot.com/cpp группа курс Язык С++ (мат-мех 17) Язык С++ 1 Курс «Язык С++» Симуни Михаил Лазаревич msimuni.wikidot.com/cpp группа курс "Язык С++" (мат-мех 17) simuni@mail.ru 2 Какие темы будут в курсе? Простые вещи указатели, функции, классы, наследование,

Подробнее

Программирование в C++ Преподаватель Колотова Людмила Павловна

Программирование в C++ Преподаватель Колотова Людмила Павловна Программирование в C++ Преподаватель Колотова Людмила Павловна 2 Содержание 6-го занятия по практике Объекты и классы. Простой класс. Определение класса. Вызов методов класса Объекты программы и объекты

Подробнее

ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ

ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем Юрьевич Бинарные файлы Бинарные файлы

Подробнее

Лабораторная работа 1: Основы программирования на языке C#

Лабораторная работа 1: Основы программирования на языке C# Цель: Лабораторная работа 1: Основы программирования на языке C# Целью данной работы является получение базовых навыков программирования на языке высокого уровня C# в среде программирования Microsoft Visual

Подробнее

Содержание: указатели массивы и указатели динамическое размещение массивов глобальные переменные

Содержание: указатели массивы и указатели динамическое размещение массивов глобальные переменные Тема : знакомство с С (Си) УКАЗАТЕЛИ и МАССИВЫ (динамическое размещение) Содержание: указатели массивы и указатели динамическое размещение массивов глобальные переменные Указатели Указатель это адрес памяти,

Подробнее

Основы платформы Microsoft.NET

Основы платформы Microsoft.NET Основы платформы Microsoft.NET Тема: Управление памятью Переменные величины и ссылки...1 Выделение памяти...2 Удаление объектов из памяти...4 Дефрагментация кучи...4 Поколения объектов...5 Деструкторы...7

Подробнее

Языки программирования и методы трансляции

Языки программирования и методы трансляции Языки программирования и методы трансляции Имена, связывание, области видимости 1 Время связывания 2 3 Статические области видимости Динамические области видимости Имя, область видимости и связывание Имя

Подробнее

Методические указания для выполнения лабораторных работ по дисциплине «Объектно-ориентированный анализ и программирование»

Методические указания для выполнения лабораторных работ по дисциплине «Объектно-ориентированный анализ и программирование» МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Владимирский государственный университет имени Александра Григорьевича

Подробнее

Объектно-ориентированное программирование в PHP для начинающих

Объектно-ориентированное программирование в PHP для начинающих Объектно-ориентированное программирование в PHP для начинающих Доброго времени суток, уважаемые читатели нашего блога! Добро пожаловать на первый урок из серии уроков по объектноориентированному программированию

Подробнее

ОПЕРАТОРЫ JAVA. ПРИОРИТЕТ. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРОВ

ОПЕРАТОРЫ JAVA. ПРИОРИТЕТ. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРОВ 1 ОПЕРАТОРЫ JAVA. ПРИОРИТЕТ. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРОВ ы в языке программирования «Java» это специальные символы, которые сообщают транслятору о том, что вы хотите выполнить операцию с некоторыми

Подробнее

13. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ

13. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ 13. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ Статическими называются такие данные, которые не меняют свои размеры в течение всего времени своего существования. Регулярный и комбинированный типы языка Pascal это пример

Подробнее

Лабораторная работа 1

Лабораторная работа 1 Лабораторная работа 1 Цель работы: Научиться работать с основными синтаксическими конструкциями языка Си. Уметь организовывать циклы, выполнять вычисления. 1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 1.1. Переменные и их типы

Подробнее

ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ

ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ Министерство образования Республики Беларусь Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники» Кафедра информатики А.А. Волосевич ИНСТРУМЕНТЫ И СРЕДСТВА ПРОГРАММИРОВАНИЯ

Подробнее

4.13 Список аргументов переменной длины

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

Подробнее

4. Понятие класса. Программа 7. Класс Box

4. Понятие класса. Программа 7. Класс Box 4. Понятие класса Класс определяет новый тип данных, используя который можно определять переменные этого типа, которые называются объектами или экземплярами класса. Объявление класса имеет вид: class classname

Подробнее

Примерные вопросы теста к экзамену по дисциплине «Основы компьютерных информационных технологий»

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

Подробнее

Переменные и операторы

Переменные и операторы Булевы операции Оператор присваивания Условный оператор Циклические операторы Переменные и операторы В этой статье мы приступаем к изучению встроенного языка 1С:Предприятие 8. Исполняемый код содержится

Подробнее

Тема 5. Структура программы, выражения, операции, операторы

Тема 5. Структура программы, выражения, операции, операторы Тема 5. Структура программы, выражения, операции, операторы 5.1. Структура программы. Программы в среде разработки Delphi строятся на принципах модульной компоновки. Модуль это автономно компилируемая

Подробнее

Лабораторная работа 3 Программирование циклических алгоритмов Цель работы: закрепить практические навыки работы с системой Microsoft Visual Studio

Лабораторная работа 3 Программирование циклических алгоритмов Цель работы: закрепить практические навыки работы с системой Microsoft Visual Studio Лабораторная работа 3 Программирование циклических алгоритмов Цель работы: закрепить практические навыки работы с системой Microsoft Visual Studio 2010, научиться правильно использовать различные операторы

Подробнее

ЛЕКЦИЯ 3. Алгоритмы обработки одномерных массивов. построения алгоритмов предназначенных для обработки одномерных массивов.

ЛЕКЦИЯ 3. Алгоритмы обработки одномерных массивов. построения алгоритмов предназначенных для обработки одномерных массивов. ЛЕКЦИЯ 3. Алгоритмы обработки одномерных массивов. Цель лекции : Знакомство с понятием массива. Приобретение навыков построения алгоритмов предназначенных для обработки одномерных массивов. 6. Алгоритмы

Подробнее

Лекции по курсу Алгоритмы и алгоритмические языки, 1 курс, 1 поток, 2010/2011 уч.год.

Лекции по курсу Алгоритмы и алгоритмические языки, 1 курс, 1 поток, 2010/2011 уч.год. Лекция 11 Сортировка 11.1. Сортировка. Постановка задачи. 11.1.1. Сортировка это упорядочение наборов однотипных данных, для которых определено отношение линейного порядка (например,

Подробнее

Опциональные типы данных

Опциональные типы данных 6 Опциональные типы данных Опциональные типы данных это потрясающее нововведение языка Swift, которое вы, вероятно, никогда не встречали в других языках программирования и которое значительно расширяет

Подробнее