Алгоритм. свойства алгоритмов
Вопрос 1
Алгоритм. Свойства алгоритмов
Алгоритм – точное, понятное предписание исполнителю совершить определенную конечную последовательность действий за конечное число шагов для решения любой конкретной задачи из некоторого класса однотипных задач.
Свойства:
1) Массовость – возможность применять один алгоритм для целого класса однотипных задач.
2) Понятность – алгоритм понятен исполнителю
3) Дискретность – алгоритм разбивается на отдельные шаги
4) Конечность – выполнение алгоритма завершается после выполнения определенного конечного числа шагов
5) Детерминированность – рассчитан на механическое выполнение
6) Результативность – выполнение алгоритма должно привести к достижение определенного результата
Вопрос 2
Формы записи алгоритмов. Этапы решения задач на ПК
Формы записи алгоритмов
1) Словесное описание
2) С помощью псевдо-кодов (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения)
3) Структурограммы (схемы Насси-Шнейдермана)
4)Блок-схемы – предполагает изображение с использованием графических символов – блоков, представляющих собой исполнение определенных действий. В целом блоки образуют схему алгоритма. Соединяются между собой линиями потока. Основное направление линий – сверху вниз и слева направо. Если направление совпадает с основным, то стрелочки на концах линий потока можно не указывать. В противном случае указать обязательно.
Этапы решения задач с помощью ПК
1) Формулировка (постановка) задачи
2) Формализация (математическая постановка задачи)
3) Выбор или разработка метода решения
4) Алгоритмизация (разработка алгоритма)
5) Программирование (запись программ по заданной схеме)
6) Отладка программы
7) Вычисление и обработка результатов
Вопрос 3
История развития языков программирования. Поколения языков.
Язык программирования- формальная знаковая система, предназначенная для записи компьютерных программ.
Первое поколение40-50 гг. Программы писались в машинных кодах, каждая компьютерная команда вводилась в ЭВМ в двоичном виде. В середине 50-х годов, был написан первый ассемблер.
Второе поколение конец 50-х - начало 60-х годов. Был создан символический ассемблер, позволявший писать программы без привязки к конкретным адресам памяти. В него было введено понятие переменной, и он, по сути, стал первым настоящим (хоть и машинно-ориентированным) языком программирования со своим компилятором.
Третье поколение 60-е годы. В это время родились языки, которые называют универсальными языками высокого уровня, с их помощью можно решать задачи из любых областей. Это общеизвестные Фортран, Кобол, Алгол и др.
Четвертое поколение с 1970-х по начало 1990-х. Языки этого поколения предназначены для реализации крупных проектов, повышают их надежность и скорость создания.
Пятое поколение середина 90-х годов. К ним относятся также системы автоматического создания прикладных программ с помощью визуальных средств разработки, без знания программирования. Инструкции вводятся в компьютер в максимально наглядном виде.
Вопрос 4
Основные элементы языков программирования. Языки программирования высокого уровня
Основные элементы языков программирования
Ввод - считывание значений, поступающих с клавиатуры. Вывод - запись информации на экран.
Данные– это константы, переменные и структуры, содержащие числа, текст или адреса.
Операции- присваивание значений, их комбинирование и сравнение значений.
Условное выполнение- выполнение набора команд в случае, если удовлетворяется (является истинным) некоторое условие (если это условие не удовлетворяется, то эти команды пропускаются или же выполняется другой набор команд).
Цикл - некоторый набор команд выполняется повторно или фиксированное число раз, или пока является истинным некоторое условие, или пока некоторое условие не стало истинным.
Подпрограмма- набор команд, который имеет имя и может быть неоднократно вызван из любого места программы по его имени.
Вопрос 5
Введение в .NETFramework
.NET Framework — программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является общеязыковая среда исполнения Common Language Runtime (CLR), которая подходит для разных языков программирования. Функциональные возможности CLR доступны в любых языках программирования, использующих эту среду.
Основной идеей при разработке .NET Framework являлось обеспечение свободы разработчика за счёт предоставления ему возможности создавать приложения различных типов, способные выполняться на различных типах устройств и в различных средах.
Вторым принципом стало ориентация на системы, работающие под управлением семейства операционных систем Microsoft Windows.
Язык С# был с самого начала задуман в качестве языка написания кода для .NETFramework и он полностью ориентирован на библиотеки данной платформы.
Платформа .NETFramework – единственная универсальная база программирования, предназначенная для построения систем широкого спектра. Например: Windows и Web приложения, приложения баз данных, приложения для мобильных и переносных устройств, механизмы поддержки электронной почты и коммерции.
Платформа .NETFramework позволяет решать не только указанные выше задачи межплатформенной переносимости и межъязыкового взаимодействия, но и др. задачи: безопасность, надежность, использование готовых компонентов.
Вопрос 6
Вопрос 7
Консольные приложения
При запуске консольного приложения операционная система создает так называемое консольное окно, через которое идет весь ввод-вывод программы. Внешне это напоминает работу в операционной системе в режиме командной строки, когда ввод-вывод представляет собой поток символов.
Создать проект
Выберем режим Создать проект. В левой части представлены установленные шаблоны. Выберем шаблон VisualC#, после чего средняя часть экрана высветит все доступные для выбранного шаблона типы приложений.
Главное меню, позволяет разработчику воспользоваться различными возможностями управления проектом, решением, получить полную информацию о ресурсах, сборке, классах и многое другое.
Основные окна среды
Нажатием клавиши F4 или выбором из главного меню Вид> Окно свойств (Properties) можно вызвать в нижней правой части экрана соответствующее окно. В окне свойств отображаются важнейшие характеристики выделенного элемента.
Все операции для работы с проектом сконцентрированы в главном меню Проект. При создании решения автоматически присваивается одно и то же имя и проекту и решению, что не всегда удобно.
Основное пространство экрана занимает окно редактора, в котором располагается текст программы, созданный средой автоматически.
Вопрос 8
Запуск программы
Самый простой способ запустить программу — нажать клавишу F5. Если программа написана без ошибок, то фраза промелькнет в консольном окне, которое незамедлительно закроется. Чтобы пронаблюдать его спокойно, следует воспользоваться клавишами Ctrl+F5.
После внесения изменений компилятор может обнаружить в тексте программы синтаксические ошибки.
Вопрос 9
Вопрос 10
Идентификаторы, переменные
Идентификатор — это последовательность букв, цифр и символов подчеркивания. Идентификаторы используются для обозначения имен объектов, используемых в программе. Всё, что применяется в программе, имеет имя.
Для объявления переменной необходимо использовать инструкцию следующего формата:
тип имя_переменной;
Здесь с помощью элемента тип задается тип объявляемой переменной, а с помощью элемента имя_переменной - ее имя. Можно объявить переменную любого допустимого типа. Все переменные в С# должны быть объявлены до их использования. Это - требование компилятора, поскольку, прежде чем скомпилировать надлежащим образом инструкцию, в которой используется переменная, он должен "знать" тип содержащейся в ней информации.
Переменная до использования должна получить значение. Это можно сделать с помощью инструкции присваивания. Можно также присвоить переменной начальное значение одновременно с ее объявлением. Для этого достаточно после имени переменной поставить знак равенства и указать присваиваемое значение. Общий формат инициализации переменной имеет такой вид:
тип имя_переменной = значение;
Вопрос 11
Вопрос 12
Литералы, комментарии
Литералами, или константами, называют неизменяемые величины. В C# есть логические, целые, вещественные, символьные и строковые константы, а также константа null. Например, число 100 является литералом. Символьные литералы заключаются в одинарные кавычки. Например, 'а' и '%' являются символьными литералами
Комментарии предназначены для записи пояснений к программе и формирования документации. Компилятор комментарии игнорирует. Внутри комментария можно использовать любые символы. В C# есть два вида комментариев: однострочные и многострочные.
Однострочный комментарий начинается с двух символов прямой косой черты ( // ) и заканчивается символом перехода на новую строку, многострочный заключается между символами-скобками /* и */ и может занимать часть строки, целую строку или несколько строк. Комментарии не вкладываются друг в друга.
Вопрос 13
Вопрос 14
Вопрос 15
Основные операции C#
Категория | Знак операции | Название | Категория | Знак операции | Название |
Первичные | . х() х[] Х++ Х-- new typeof checked unchecked | Доступ к элементу Вызов метода или делегата Доступ к элементу Постфиксный инкремент Постфиксный декремент Выделение памяти Получение типа Проверяемый код Непроверяемый код | Аддитивные (типа сложения) | + - | Сложение Вычитание |
Унарные | + - ! ~ ++X --X (тип) x | Унарный плюс Унарный минус (арифметическое отрицание) Логическое отрицание Поразрядное отрицание Префиксный инкремент Префиксный декремент Преобразование типа | Сдвига | << >> | Сдвиг влево Сдвиг вправо |
Мультипликативные(типа умножения) | * / % | Умножение Деление Остаток от деления | Отношения и проверки типа | < > <= >= is as | Меньше Больше Меньше или равно Больше или равно Проверка принадлежности типу Приведение типа |
Вопрос 16
Вопрос 17
Методы ввода-вывода
Console.ReadLine(); Чтение текста, введенного в строке пользователем
Значение прочитанного текста присваивают переменной, которая должна быть объявлена заранее или сразу в операторе присвоения
Пример: stringa = Console.ReadLine();
Текст, введенный с клавиатуры, имеет тип string, чтоб перевести его в число, используют метод int.Parse()
Пример: intb = int.Parse(Console.ReadLine());
Console.WriteLine("Palunnimi:"); Печать текста и переход на след. строку
Console.Write("Palunnimi:"); Печать текста без перехода на след. строку
Console.Write(y); здесь у - имя переменной
В скобках может быть текст, обрамленный двойными кавычками или имя переменной (числовые переменные автоматически преобразовываются в текстовые, знак + объединяет текст)
Пример:
int x=23, y=4;
Console.WriteLine("x=" + x + “y=" + y); На экране появится x=23, y=4
Форматированный вывод:
Для вывода на консоль текста вперемешку со значениями переменных можно использовать следующую конструкцию:
int x=23, y=4;
Console.WriteLine("x={0}, y={1}", x, y); На экране появится x=23, y=4
здесь {0} и {1} заменяются значениями переменных, имена которых идут после текста через запятую (число в фигурных скобках означает номер переменной по порядку, начиная с 0)
Вопрос 18
Вопрос 19
Вопрос 20
Вопрос 21
Вопрос 22
Вопрос 23
Операторы цикла. Цикл с постусловием
Эта разновидность циклических структур характеризуется тем, что тело цикла обязательно выполняется хотя бы один раз.
Для организации цикла такой структуры в С# используется специальный оператор цикла do.Цикл с постусловием имеет следующий формат:
do
последовательность операторов
while выражение;
Сначала выполняется простой или составной оператор, образующий тело цикла, а затем вычисляется выражение (оно должно иметь тип bool). Если выражение истинно, тело цикла выполняется еще раз, и проверка повторяется. Цикл завершается, когда выражение примет значение false, или в теле цикла будет выполнен какой-либо оператор передачи управления.
Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз, например, если в цикле вводятся данные и выполняется их проверка. Если же такой необходимости нет, предпочтительнее пользоваться циклом с предусловием.
Вопрос 24
Вопрос 25
Вопрос 26
Операторы управления
В С# есть пять таких операторов:
- оператор безусловного перехода goto;
- оператор выхода из цикла break;
- оператор перехода к следующей итерации цикла continue;
- оператор возврата из функции return;
- оператор генерации исключения throw.
Эти операторы могут передать управление в пределах блока, в котором они использованы, и за его пределы. Передавать управление внутрь другого блока запрещается.
Оператор goto
Оператор безусловного перехода используется в одной из трех форм:
goto метка;
gotocase константное_выражение;
gotodefault;
Оператор break
Оператор break используется внутри операторов цикла или выбора для перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится оператор break.
Оператор continue
Оператор перехода к следующей итерации текущего цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Синтаксис оператора:
return [ выражение ];
Тип выражения должен иметь неявное преобразование к типу функции. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать
Вопрос 27
Вопрос 28
Вопрос 29
Вопрос 30
Вопрос 31
Массивы. Одномерные массивы
Массив - это последовательность элементов одинакового типа, обращение к которым происходит с использованием общего для всех имени. Каждый элемент массива имеет свой порядковый номер (индекс) в последовательности: известно какая величина является в ней первой, какая второй и т.д., и в этом плане массив является упорядоченной последовательностью.
Одномерный массив - это такой массив, для идентификации которого требуется указать значение только одного индекса.
Для объявления одномерного массива используется следующая форма записи:
тип[] имя_массива = new тип [размер];
Формат инициализации одномерного массива имеет следующий вид:
тип[] имя_массива = [val1, val2,…, valN];
Существует несколько вариантов описания массива:
тип[ ] имя;
тип[] имя = new тип [ размерность ];
тип[] имя = { список_инициализаторов };
тип[] имя = new тип [] { список_инициализаторов };
тип[] имя = new тип [ размерность ] { список_ииициализаторов };
Вопрос 32
Вопрос 33
Вопрос 34
Вопрос 35
Вопрос 36
Символьный тип char, описание, примеры
Символьный тип char базируется на стандартном классе Char библиотеки .NET из пространства имен System. Он является встроенным типом языка и предназначен для хранения символов в Unicode.
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
char q;
do
{
Console.WriteLine( "Введитесимвол: ");
q = char.Parse (Console.ReadLine());
if (char.IsLetter(q)) Console.WriteLine("Буква");
if (char.IsUpper(q)) Console.WriteLine("Верхнийрег.");
if (char.IsLower(q)) Console.WriteLine("Нижнийрег.");
if (char.IsControl(q)) Console.WriteLine("Управляющий");
if (char.IsNumber(q)) Console.WriteLine("Число");
if (char.IsPunctuation(q)) Console.WriteLine("Разделитель");
}
while (q!='/');
}
}
}
Вопрос 37
Вопрос 38
Строки типа string, описание, примеры
Тип string предназначен для определения и поддержки символьных строк. Самый простой способ создать объект типа string - использовать строковый литерал:
string str = "С#-строки - это мощная сила.";
Создать строку можно несколькими способами:
strings; //инициализация отложена
stringt = “программа”; //инициализация строковым литералом
string ц= newstring(‘*‘,10); //конструктор создает строку из 10 символов
char[] a = {‘0’,’0’,’0’}; //массив для инициализации строки
stringv = newstring(a); //создание из массива символов
Последовательность символов, составляющих строку, изменить нельзя. Это связано с тем, что строки типа string относятся к так называемым неизменяемым типам данных. Поэтому обращаться к отдельному элементу строки по индексу (например, s[i]) можно только для получения значения, но не для его изменения.
Хотя это кажется серьезным недостатком, на самом деле это не так. Это ограничение позволяет С# эффективно использовать строки. Если понадобится строка, которая должна содержать изменения уже существующей строки, то потребуется создать новую строку. Поскольку неиспользуемые строковые объекты автоматически утилизируются системой сбора мусора.
При описании строковой переменной память под нее отводится по максимуму. При работе же с переменной может использоваться лишь часть этой памяти, реально занятая символами строки в данный момент
Для строк определены следующие операции:
- присваивание (=);
- проверка на равенство (==); (Строки равны, если имеют одинаковое количество символов и совпадают посимвольно)
- проверка на неравенство (!=);
- обращение по индексу ([ ]);
- сцепление (конкатенация) строк (+).
Вопрос 39
Вопрос 40
Форматирование строк
В общем виде формат задается следующим образом:
{n[,m[:спецификатор_формата[число]]}
Здесь n-номер параметра. Параметр m определяет минимальную ширину поля, которое отводится под выводимое значениеСпецификаторы формата для строк
Спецификатор | Описание |
С или с | Вывод значений в денежном (currency) формате. По умолчанию перед выводимым значением подставляется символ доллара ($). Непосредственно после спецификатора можно задать целое число, определяющее длину дробной части. |
D или d | Вывод целых значений. Непосредственно после спецификатора можно задать целое число, определяющее ширину поля вывода. Недостающие места заполняются нулями. |
Е или е | Вывод значений в экспоненциальном формате. Непосредственно после спецификатора можно задать целое число, определяющее длину дробной части. Минимальная длина порядка — 3 символа. |
F или f | Вывод значений с фиксированной точностью. Непосредственно после спецификатора можно задать целое число, определяющее длину дробной части. |
G или g | Формат общего вида. Применяется для вывода значений с фиксированной точностью или в экспоненциальном формате в зависимости от того, какой формат требует меньшего количества позиций. Для различных типов величин по умолчанию используется разная ширина вывода, например, для single - 7 позиций, для byte и sbyte - 3, для decimal – 29. |
N или n | Вывод значений в формате d, ddd, ddd. ddd..., то есть группы разрядов разделяются разделителями, соответствующими региональным настройкам. Непосредственно после спецификации можно задать целое число, определяющее длину дробной части. |
Р или р | Вывод числа в процентном формате (число, умноженное на 100, после которого выводится знак %). |
R или r | Отмена округления числа при преобразовании в строку. |
X или х | Вывод значений в шестнадцатеричном формате. |
Если указан знак #, на этом месте будет выведена цифра числа, если она не равна нулю. Если указан 0, будет выведена любая цифра, в том числе и 0.
Пользовательский шаблон может также содержать текст, который в общем случае заключается в апострофы.
Вопрос 41
Строки типа StringBuilder
В том случае, когда строку все же необходимо изменить, для работы со строками удобно применять другой класс — класс StringBuilder. Данный класс позволяющий изменять значение своих экземпляров, определен в пространстве имен System.Text.
При создании экземпляра обязательно использовать операцию new и конструктор, например:
StringBuilders=newStringBuilder();
В общем случае в конструкторе класса могут присутствовать два вида параметров. Первый вид параметров используется для инициализации строки, второй — для определения объема памяти (размер буфера), отводимой под экземпляр, например:
StringBuilder stud=new StringBuilder (“student”, 50);
ОсновныеэлементыклассаSystem.Text.StringBuilder
Название Вид Описание
Append Метод Добавление в конец строки. Разные варианты метода позволяют добавлять в строку величины любых встроенных типов, массивы символов, строки и подстроки типа string
AppendFormat Метод Добавление форматированной строки в конец строки
Capacity Свойство Получение или установка емкости буфера. Если устанавливаемое значение меньше текущей длины строки или больше максимального, генерируется исключение ArgumentOutOfRangeException
Insert Метод Вставка подстроки в заданную позицию
Length Свойство Длина строки (количество символов)
MaxCapacity Свойство Максимальный размер буфера
Remove Метод Удаление подстроки из заданной позиции
Replace Метод Замена всех вхождений заданной подстроки или символа новой подстрокой или символом
ToString Метод Преобразование в строку типа string
using System;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
string s;
StringBuilder w = new StringBuilder();
w.Append( "снег,лед,гололед,дождь " );
Console.WriteLine(w);
w.Insert(5,"солнце,");
Console.WriteLine(w);
Console.WriteLine("Введитепостроку");
s=Console.ReadLine();
w.Insert(0,s);
Console.WriteLine(w);
w.Replace( ",", ";" );
Console.WriteLine(w);
}
}
}
Вопрос 42
Классы, основные понятия, спецификаторы
Класс является основой языка C#, так как все действия в любой программе на этом языке происходят внутри класса. Класс является типом данных, определяемым пользователем. Он должен представлять собой единую логическую сущность, например, являться моделью реального объекта или процесса.
Общее определение класса:
[атрибуты][спецификаторы] class имя_класса [: предки]
{тело_класса}
Обязательным является только ключевое слово class а также имя (заданное по общим правилам языка) и тело класса (список его членов), заключенное в фигурные скобки. Если класс не содержит ни одного члена, то список класса будет пустым. Например:
class Prim{}
Спецификаторы доступа класса
Таблица1- Спецификаторы доступа класса
№ | Спецификатор | Описание |
public | Доступ не ограничен. | |
protected | Используется для вложенных классов. Доступ только из элементов данного и производных классов. | |
internal | Доступ только из данной программы (сборки). | |
protectedinternal | Доступ только из данного и производных классов или из данной программы (сборки). | |
private | Используется для вложенных классов. Доступ только из элементов класса, внутри которого описан данный класс. |
Вопрос 43
Данные: поля и константы
Данные, содержащиеся в классе, могут быть переменными или константами и задаются в соответствии с уже рассмотренными правилами. Переменные, описанные в классе, называются полями класса. Синтаксис описания элемента данных:
[ атрибуты ] [ спецификаторы ] [ const ] тип имя [ = начальное_значение]
В данном описании обязательными элементами являются типи имя.
Спецификаторы полей и констант класса
№ | Спецификатор | Описание |
new | Новое описание поля, скрывающее унаследованный элемент класса. | |
public | Доступ к элементу не ограничен. | |
protected | Доступ только из элементов данного и производных классов. | |
internal | Доступ только из данной программы (сборки). | |
protectedinternal | Доступ только из данного и производных классов или из данной программы (сборки). | |
private | Доступ только из данного класса. | |
volatile | Поле может изменяться другим процессом или системой. | |
readonly | Поле доступно только для чтения. | |
static | Одно поле для всех экземпляров класса. |
Для констант можно использовать только спецификаторы 1-6. Указание типа доступа необязательно. По умолчанию элементы класса считаются закрытыми (private). Поля, описанные со спецификатором static, а также константы существуют в единственном экземпляре для всех объектов класса, поэтому к ним обращаются не через имя экземпляра, а через имя класса
using System;
namespace ConsoleApplication2
{
class Prim
{
publicintp = 1; //поле данных типа int, доступ неограничен
publicconstdoublez = -5.31; //константа типа double, доступ неограничен
publicstaticstrings = " Prim "; //статическое поле класса, доступ неограничен
double y; //закрытое поле данных типа double
}
class Class1
{
static void Main()
{
Prim a = new Prim(); // созданиеэкземпляракласса prim
Console.WriteLine(a.p); // выводзначенияполя p экземпляракласса a
Console.WriteLine(Prim.z); // выводзначенияконстанты z класса Prim
Console.WriteLine(Prim.s); // вывод значения статическое поля s класса Prim
}
}
}
Вопрос 44
Методы классов
Метод — это функциональный член класса, который реализует вычисления или другие действия выполняемые классом или экземпляром. Методы определяют поведения класса. Он представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Он описывается один раз, а вызываться может столько раз, сколько необходимо. Один и тот же метод может обрабатывать различные данные, переданные ему в качестве аргументов.
Описание метода:
[атрибуты][спецификаторы] тип имя_метода ([параметры])
тело_метода
Тело метода, как правило, представляет собой блок — последовательность операторов в фигурных скобках. Обязательными элементами описание метода являются имя метода, его тип, а также тело метода. Если метод не возвращает никакого значения в его заголовке должен присутствовать тип void а оператор return в теле метода отсутствовать. Поскольку методы — это те члены класса, которые ориентированы на применение пользователями, их спецификатор доступа, как правило, задается public.Пример простейшего метода:
publicdoubleGety()
{
returny;
}
Вопрос 45
Параметры-значения
Параметры-значения указываются в заголовке метода своим типом и именем. Имя параметра может быть произвольным. Параметр-значение представляет собой локальную переменную, которая получает свое значение из вызывающего блока при вызове метода. Заголовок имеющий один параметр-значение целого типа, может выглядеть так:
voidB(intz);
Отличительной чертой параметров-значений является следующее: при вызове метода из ячейки памяти, в которой хранится переменная, передаваемая в метод, берется ее значение и копируется в специальную область памяти. По завершении работы метода область параметров освобождается.
Основное достоинство способа передачи параметров по значению — защита значений переменных в вызывающем блоке от непреднамеренных изменений. Недостаток его — увеличение объема используемой памяти.
Параметры-ссылки
В метод передается ссылка на аргумент, а не сам аргумент. Сама ссылка копируется. Эта ссылка используется для доступа к области памяти, в которой хранится аргумент. Такая передача называется передачей «по ссылке» а параметры, переданные посредством ссылки называются параметрами-ссылками. В такой ситуации метод работает непосредственно с переменной из вызывающего блока, и, следовательно может ее изменить. Способ передачи параметра по адресу устанавливает сам программист в заголовке метода следующим образом:ref тип имя.Параметры-ссылки рекомендуется использовать лишь в тех случаях, когда метод должен возвращать более одной величины.
Выходные параметры-значения
Довольно часто возникает необходимость в методах, которые сами формируют несколько величин, например если в методе создаются объекты или инициализируются ресурсы. В этом случае становится неудобным ограничение параметров-ссылок: необходимость присваивания значения аргументу до вызова метода. Это ограничение снимает спецификатор out. Параметру, имеющему этот спецификатор обязательно должно быть присвоено значение.
При вызове метода перед соответствующим параметром тоже указывается ключевое слово out
В списке параметров записывайте сначала все сходные параметры, затем — все ссылки и выходные параметры.
Вопрос 46
Ключевое слово this
Каждый объект содержит свой экземпляр полей класса. Методы находятся в памяти в единственном экземпляре и используются всеми объектами совместно. Поэтому необходимо обеспечить работу методов нестатических экземпляров с полями именно того объекта, для которого они были вызваны. Для этого в любой нестатический метод автоматически передается скрытый параметр this в котором хранятся ссылка на вызывавший функцию экземпляр. В явном виде параметр this применяется для того, чтобы возвратить из метода ссылку на вызвавший объект, а также для идентификации поля в случае, если его имя совпадает с именем параметра метода.
Class Demo
{Double y;
PublicDemoT() //метод возвращает ссылку на экземпляр
{ Return this;}
Public void Set y (double y)
{This.y=y; // у присваивает значение параметру у}
}
Вопрос 47
Конструкторы. Примеры
Конструктор предназначен для инициализации объекта. Он вызывается автоматически при создании объекта класса с помощью операции new. Имя конструктора совпадает с именем класса. Свойства конструкторов:
- Конструктор не возвращает значение
- Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации.
- Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, полям значимых типов присваивается нуль, полям ссылочных типов — значение null.
- Конструктор вызываемый без параметров называется конструктором по умолчанию.
В класс Prim добавлен конструктор а поля сделаны закрытыми. В программе создаются два объекта с различными значениями полей:
classPrim {
рublicPrim(inta, double у) // конструктор с параметрами
{
this.a = а;
this.y = у;
}
рublicdoubleGetу() // метод получения поля у
{
return y;
}
int a;
double у;
}
class Class1
{ static void Main( )
{
Prim a = new Prim( 10, 0.01 ); // вызовконструктора
Соnsole.WriteLine( a.Gety( ) ); // результат: 0,01
Primb = newPrim( 1. 2.2 ): // вызов конструктора
Соnsole.WriteLine( b.Gety( ) ); // результат: 2,2
}
}
}
Конструктор базового класса называется явным образом в тех случаях, когда ему требуется передать параметры. До этого были конструкторы экземпляра. Существует второй тип конструкторов — статические конструкторы или конструкторы класса. Статический конструктор не имеет параметров, его нельзя вызвать явным образом.
Вопрос 48
Свойства классов
Свойства служат для организации доступа к полям класса. Как правило, свойство связано с закрытым полем класса и определяет методы его получения и установки. Синтаксис свойства:
[атрибуты][спецификаторы] тип имя_свойства
{
[get код_доступа]
[set код_доступа]
}
Чаще всего свойства объявляются как открытые (со спецификатором public) поскольку они входят в интерфейс объекта.
Код доступа представляет собой блоки операторов которые выполняются при получении (get) или установке (set) свойства.
Спецификаторы доступа для отдельной части должны задавать либо такой же, либо более ограниченный доступ, чем спецификатор доступа для свойства в целом. Например если свойство описано как publicего части могут иметь любой спецификатор доступа, а если свойство имеет доступ protectedinternal, его части могут объявляться как internal, protectedилиprivate.
Синтаксис свойства имеет вид:
[атрибуты][спецификаторы] тип имя_свойства
{
[[атрибуты][спецификаторы]get код_доступа]
[[атрибуты][спецификаторы]set код_доступа]
}
С помощью свойств можно отложить инициализацию поля до того момента, когда оно фактически потребуется.
Вообще говоря, свойство может и не связываться с полем. Фактически, оно описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство. В отличие от открытых полей, свойства обеспечивают разделение между внутренним состоянием объекта и его интерфейсом, и таким образом упрощают внесение изменений в класс.
Вопрос 1
Алгоритм. Свойства алгоритмов
Алгоритм – точное, понятное предписание исполнителю совершить определенную конечную последовательность действий за конечное число шагов для решения любой конкретной задачи из некоторого класса однотипных задач.
Свойства:
1) Массовость – возможность применять один алгоритм для целого класса однотипных задач.
2) Понятность – алгоритм понятен исполнителю
3) Дискретность – алгоритм разбивается на отдельные шаги
4) Конечность – выполнение алгоритма завершается после выполнения определенного конечного числа шагов
5) Детерминированность – рассчитан на механическое выполнение
6) Результативность – выполнение алгоритма должно привести к достижение определенного результата
Вопрос 2