Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Часть 1 – Объектно-ориентированное программирование структур данныхСтр 1 из 13Следующая ⇒
МЕТОДИЧЕСКИЕ УКАЗАНИЯ к выполнению лабораторных работ по дисциплине Лабораторная работа №1
Тема: Представление чисел в ЭВМ и операции над ними в языке C#
Цель: изучение возможностей MS Visual Studio для создания консольного приложения и программирования на объектно-ориентированном языке C#.
Теоретические положения
Создание проекта.
Запустить Microsoft Visual Studio и выполнить команду «Создать проект…», как показано на рисунок 1, или нажать комбинацию клавиш <Ctrl+Shift+N>. Рисунок 1 Стартовое окно Microsoft Visual Studio
На экране появится диалоговое окно «New Project» (рисунок 2), где следует задать необходимые параметры проекта: тип проекта (Project types), шаблон (Templates), имя проекта (Name), расположение во внешней памяти (Location) и наименование решения (Solution Name). Флажок Create directory for solution оставить включенным. Рисунок 2 Диалоговое окно задания параметров нового проекта
В результате выполненных действий в окне проводника Solution Explorer появится структура созданного проекта и откроется модуль Program.cs (рисунок 3).
Теперь можно приступать к программированию.
Пример 1. Простейшая программа на языке C# выглядит следующим образом:
using System;
namespace Lab_1 { class Program { static void Main(string[] args) { // Вывод предложения на экран System.Console.WriteLine("Привет, C#!\n"); Console.ReadKey(); } } }
Рисунок 3 Созданный проект в развернутом виде
Анатомия программы. Пространство имен в С# представляет собой совокупность связанных типов. Некоторые пространства имен, например, System, очень велики и могут включать более 100 разного рода типов; другие пространства имен, например, System.Timers, содержат всего по несколько типов. Типы DateTime и Math входят в пространство имен System. Использование пространств имен (также называемых пакетами, библиотеками или интерфейсами прикладного программирования, API от Application Programming Interface) — это практическая реализация концепции повторного использования, принципа, чрезвычайно поощряемого в современной программной инженерии. В качестве имени пространства имен может служить любой допустимый идентификатор, имя также может содержать точки. Пространства имен могут содержать внутри себя вложенные пространства имен, классы, структуры, и пр.
Программа в примере начинается с заявления, что она собирается использовать пространство имен System, в частности, класс System.Console, содержащий методы для работы с консолью. Внутри пространства имен Lab_1 объявляется класс Program вместе с его содержимым вслед за открывающей фигурной скобкой. Имена файла и программы (т. е. имя класса) не обязательно должны совпадать, хотя обычно они или одинаковы, или схожи. В языке C# отсутствуют глобальные переменные и функции, поэтому все объявления переменных и функций должны находиться внутри объявления класса (количество классов неограниченно). В структуре класса прежде всего вводится метод Main, являющийся стартовой точкой (точкой входа) в приложение. Функция должна быть объявлена как статическая, так как в этом случае для вызова функции не требуется создавать объект класса. Содержательные действия программы ограничивается выводом на экран некоторого текста и ожидания нажатия любой клавиши. Вывод осуществляется с помощью метода Console.WriteLine; для ожидания нажатия клавиши используется метод Console.ReadKey. В языке C# нет заголовочных файлов. Все методы для работы с консолью содержатся в классе Console пространства имен System. Метод вызывается оператором принадлежности (.). Иными словами, чтобы вызвать WriteLine() объекта Console, следует написать Corsole.WriteLine(…), поставив вместо многоточия выводимую строку. Запуск программы осуществляется выполнением команды меню Debug ® Start Debugging, или нажатием клавиши F5. Если в компилятор не обнаружил ошибок, то на экран выводится консольное окно с результатом работы программы (рисунок 4). Рисунок 4 Консоль с результатами выполнения программы
Лабораторная работа №2
Тема: Программирование алгоритмов с ветвлением, вычисление математических выражений Цель: изучение основных арифметических и логических операций C# а также структурных операторов ветвления Теоретические положения C# - это язык, который основывается на семействе "C"-подобных языков (С, C++, Java) поэтому многие его механизмы работают по схожему принципу, например, операторы. В С# существуют четыре основных класса операторов: арифметические, логические, операторы сравнения, побитовые, а также несколько дополнительных, которые используются для ряда специальных ситуаций.
Арифметические операторы
Все перечисленные выше операторы, кроме % работают точно так же как в C/C++. В C# оператор деления по модулю может применяться как к целочисленным данным, так и к значениям с плавающей точкой. В С/С++ этого делать нельзя было. using System;class Sample{ public static void Main() { try{ int a=5,b=2; double c = 19.67, d=3; Console.WriteLine("Результат {0}%{1}={2}",a,b,a%b); Console.WriteLine("Результат {0}%{1}={2}",c,d,c%d); } catch(Exception ex){ Console.WriteLine(ex.Message); } Console.Read(); }}Операторы сравнения
Логические операторы
Результатом выполнения операторов сравнения и логических операторов являются значения типа bool(true/false).Например: using System;class Sample{ public static void Main() { try{ int a=2,b=3; if((a==2)&&(b==3)){ Console.WriteLine("Это видно на экране 1!!!"); } if(a>31){ Console.WriteLine("Это не видно на экране 2!!!"); } bool b1=false,b2=false; if(b1^b2){ Console.WriteLine("Это не видно на экране 3!!!"); } b1=true; b2=false; if(b1^b2){ Console.WriteLine("Это видно на экране 4!!!"); } } catch(Exception ex){ Console.WriteLine(ex.Message); } Console.Read(); }}Пример показанный ниже это ошибка на этапе компиляции, так как в С# невозможно неявное преобразование от int к bool. int a = 7; if(a){ // Так нельзя в C#, а в С++ можно Console.WriteLine("Ошибка!!!"); }И Даже любимая логическая ошибка программистов на C++ для С# превратится в ошибку на этапе компиляции, по причине, указанной выше. int a = 7; if(a=8){ // В этой строке ошибка на этапе компиляции Console.WriteLine("Ошибка!!!"); }Побитовые операторы Как и в C/C++ они работают непосредственно с конкретными битами своих операндов.Операндами побитовых операторов могут быть только целочисленные значения.
Они выполняют те же операции, что и их булевы логические эквиваленты.Отличие состоит в том, что побитовые операторы работают с операндами на уровне битов, впрочем это информация не должна являться для вас новостью, так как вы уже сталкивались с ними в C/С++. Давайте рассмотрим пример их использования: using System;class Sample{ public static void Main() { try{ int a = Convert.ToInt32(Console.ReadLine()); // Проверка на четность if((a&1)==1) Console.WriteLine("Нечетное значение"); else Console.WriteLine("Четное значение"); int b = 2,c=5; int f = b|c; // На Экране 7 Console.WriteLine(f); int kvadrat = b<<1; int kub = b<<2; Console.WriteLine("Квадрат "+b+" = "+kvadrat); Console.WriteLine("Куб "+b+" = "+kub); } catch(Exception ex){ Console.WriteLine(ex.Message); } Console.Read(); }}Операторы, переменные и литералы вместе образовывают выражения. Как и в С++ для улучшения читабельности программы выражения могут содержать символы табуляции и пробелы. Кроме того в выражениях можно использовать круглые скобки для повышения приоритета операторов внутри них.
Оператор ветвления. В C# поддерживаются многие операторы условий и циклов, применяемых в C++, поэтому рассмотрим только отличия. Оператор условия if-else внешне выглядит, как в C++: if (условие) { ... } else if (условие) { ... } ... else { ... } Однако, в C# выражение в скобках должны иметь тип bool. Это означает, что выражения типа if(a) /* a не имеет тип bool) */ и if(a = 5) будут вызывать ошибку компиляции. Таким образом C# позволяет избежать известной ошибки, связанной с потерей одного знака = внутри оператора условия.
Тринарный условный оператор: условие? выражение 1 /*условие истинно*/: выражение 2 /*условие ложно*/
Пример 2. Пусть необходимо вычислить значение функции y: Некорректные ситуации при вычислении возможны, если: , , . Фрагмент кода C#, который реализует вычисление функции, представлен ниже. int a, b, x; double y; a = 7; b = 10; x = -10; y = Math.Pow(x, 2); // Вычисление y = x^2 if ((x == 0) || (b <= 0) || (b == y)) { Console.WriteLine("Вычисление невозможно!"); } Else { y = (a * y - b) / Math.Log10(b / y); Console.WriteLine("Значение y: {0}", y); } Console.ReadKey();
В этой программе вначале объявляются переменные a, b, x типа int, а также переменная y типа double. При объявлении переменных для них резервируется место в оперативной памяти, а идентификаторы (имена) переменных представляют собой ссылки на соответствующие места в памяти. Так, например, идентификатор b является ссылкой на область памяти размером 2 байта (для типа данных int), а идентификатор y является ссылкой на область памяти размером 4 байта (для типа данных double). Далее следует 4 операции присваивания на основе оператора присваивания (=). Первые три операции присваивания обеспечивают инициализацию переменных a, b, x. Фактически при этом в области памяти, связанные с этими переменными заносятся указанные справа от оператора присваивания “=” константы (в примере числа 7,10, –10). Четвертая операция присваивания отличается от первых трех тем, что в правой части записано выражение, значение которого вычисляется и присваивается указанной слева переменной y. Можно сказать также, что переменная y инициализируется значением выражения. В этом выражении Math — наименование класса пространства имен System, который содержит методы для вычисления математических функций, таких как Pow (возведение в степень) или Log10 (вычисление десятичного логарифма), и др.
Структурный оператор ветвления if … else предназначен здесь для проверки возможности вычисления,чтобы исключить ошибки выполнения (например, деление на ноль). Этот оператор рассматривается подробно в теоретических положениях к лабораторной работе №2.
Перечень математических функций, которые могут быть использованы при вычислении значений заданных функций:
Некоторые приемы упрощенного решения вычислительных задач:
Задание
1. Создать консольное приложение так, как показано в примере 1. 2. Запустить программу и убедиться в корректности ее выполнения. 3. Дополнить функцию Main кодом, который вычисляет значение математической функции y в соответствии с индивидуальным заданием из табл. 2 и выводит его на консоль. Значения аргументов задать явным присваиванием констант. При невозможности вычисления вывести на консоль сообщение. 4. Составить блок-схему алгоритма функции Main. 5. Выполнить контрольный просчет и сделать вывод.
Таблица 2. Варианты заданий к лабораторной работе №2
Содержание отчета: - тема, цель, задание, в том числе индивидуальная часть и номер варианта; - листинг программы; - консольное окно с результатами работы программы; - блок-схема алгоритма; - контрольный просчет; - вывод по работе.
Лабораторная работа №3
Тема: Программирование алгоритмов циклической структуры
Цель: изучение возможностей C# для программирования алгоритмов циклической структуры.
Теоретические положения
Форматирование вывода
Применяется для форматирования данных, выводимых в поток при помощи методов Write() или WriteLine(), в частности, для аккуратного выравнивания данных в таблице (в т.ч. контроль числа выводимых десятичных разрядов). Выполняется с использованием форматирующей строки, которая содержит всю информацию о выводимых элементах текста, а также шаблон для каждой указываемой далее переменной, причем каждый шаблон может содержать спецификацию формата. Например, форматированный вывод аккуратно выровненной таблицы значений функции y от варьируемого аргумента x можно выполнить таким предложением вывода:
Console.WriteLine("{0,4} {1,8:f2}", x, y);
которое означает «Взять нулевой выводимый элемент и записать его с выравниванием вправо в четырех столбцах, после чего взять первый выводимый элемент и записать его с выравниванием вправо в следующих восьми столбцах в формате с фиксированной точкой и двумя десятичными знаками». В результате получится красивая ровная таблица:
0 0.00 10 3.16 20 4.47 30 5.48 … Форматирующий параметр является первым параметром вызова Write или WriteLine, которая имеет, таким образом, альтернативную форму:
Console.WriteLine("текст{формат0}текст{формат1}текст…"элемент0, элемент1, …);
Элементами вывода могут быть любые переменные С#, для которых может существовать спецификация формата. Спецификации формата формат0, формат1,... описаны ниже. Текстовые вставки текст не обязательны. В качестве формата может также выступать отдельная символьная строка. Для правильной работы метод WriteLine должен содержать столько же спецификаций формата, сколько затем указано выводимых элементов. Спецификации формата заключаются в фигурные скобки и нумеруются от ноля. Форматы и элементы должны соответствовать друг другу. Спецификация формата: { N, M: s } N — указывает на позицию элемента в списке выводимых переменных после того, как строка формата будет передана в метод Write; позиции элементов нумеруются от 0. М — задает ширину области, в которую будет помещено форматированное значение. Если М отсутствует или отрицательно, значение будет выровнено влево, иначе — вправо. s — является необязательной строкой форматирующих кодов, которые используются для управления форматированием чисел, даты и времени, денежных знаков и т. д. Параметр s носит название спецификатора формата. В системе.NET имеются три стандартных типа спецификаторов формата: для чисел, объектов даты/времени и для перечислимых объектов. Таблица 3. Примеры числовых спецификаторов форматов
Спецификатор G при использовании его с числами обладает наибольшей гибкостью. Он подстраивается к типу получаемого им значения и не принимает в расчет спецификаторы точности. Им удобно пользоваться, если требуется вставлять числа в текст. Для таблиц он не так удобен. Для того чтобы выровнять числа и десятичные точки, следует использовать F или даже R. Спецификатор R формирует строку примерно так же, как F или Е, но имеет то дополнительное преимущество, что формируемая им строка при вводе может быть преобразована в точности в то число, из которого она получена, поэтому он удобен для сериализации. Спецификатор N удобен для представления больших чисел, потому что он делит число на группы из трех цифр, хотя во многих странах вставляемую им запятую приходится преобразовывать в пробел (см. ниже). Спецификатор Е также удобен для представления больших чисел, a D полезен в тех случаях, когда во всех числах должно быть одно и тоже число цифр, как, например, в банковских счетах. Область использования спецификатора денежных единиц очевидна, однако может возникнуть необходимость в его дополнительной настройке. Спецификатор Р может привести к ошибке, так сначала он умножает значение на 100. Спецификатор X предназначен для представления шестнадцатеричных чисел и часто используется с фиксированным числом цифр, когда слева вставляются лидирующие ноли.
Операторы цикл ов
Цикл с предусловием: while (условие) { ... }
Цикл с постусловием: do { ... }while (условие);
Параметрический цикл: for (инициализация; условие; приращение) { ... }
Во всех циклах, как и в операторе if, условие должно иметь тип bool. Оператор досрочного перехода к следующей итерации: continuous. Оператор досрочного выхода из цикла: break.
Задание
Составить блок-схему алгоритма и программу на языке C#, реализующую такие операции в соответствии с индивидуальным заданием, выбираемым из таблицы 4:
| № шага | x | y | y _min | n_min | y _max | n_max |
Содержание отчета: - тема, цель, задание; - листинг программы; - консольное окно с результатами работы программы; - блок-схема алгоритма; - ручной просчет; - вывод.
Контрольные вопросы
Таблица 4 Варианты индивидуальных заданий для лабораторной работы №3
double pi = Math.PI Лабораторная работа №4
Тема: Алгоритмизация обработки одномерных массивов. Цель: изучение возможностей C# для программирования алгоритмов обработки одномерных массивов и освоение технологий составления и тестирования программ
Теоретические положения Массив — это индексированный набор объектов одного типа. Массив может хранить элементы любого типа, но для всех элементов массива тип должен быть одним и тем же. Объявление массивов Объявление массивов имеет следующий синтаксис: Тип[] имя-массива. Например: int[] myIntArray; Квадратные скобки ([ ]) сообщают компилятору С#, что определяется массив, а тип указывает тип элементов этого массива. В примере, приведенном выше, myIntArray является целочисленным массивом. Экземпляр массива создается ключевым словом new. Например: myIntArrsy = new int[5]; Это объявление отводит память для массива, состоящего из пяти целых чисел. В языке С# массивы относятся к ссылочным типам, объекты которых создаются в куче. Соответственно, массив myIntArray находится в куче. Элементы массива размещаются в соответствии с их типами. Целочисленный тип относится к размерным типам, поэтому элементы массива myIntArray будут иметь размерный тип, а не упакованный целочисленный тип. Массив элементов, имеющих ссылочный тип, будет содержать только ссылки на элементы, размещенные в куче. Значения по умолчанию Когда создается массив элементов, имеющих тип значения, каждый элемент первоначально содержит значение, устанавливаемое по умолчанию для данного типа (см. таблице 5). Вышеуказанное объявление создает массив из пяти целых, причем каждому элементу присваивается нулевое значение, устанавливаемое по умолчанию для переменных типа int. Таблица 5 Базовые типы и их значения по умолчанию
В отличие от массивов с элементами размерных типов, элементы массива, имеющие ссылочный тип, не инициализируются значениями по умолчанию. Вместо этого им присваивается значение null. Если попытаться обратиться к элементу массива, элементы которого имеют ссылочный тип до его явной инициализации, будет вызвано исключение. Цикл foreach Данный оператор позволяет перебрать все значения в массиве или в классе-коллекции. Например, если arr - массив, а N - его длина, то вывести на экран значения элементов массива можно следующими способами (рассматриваются циклы for и foreach): for(int i = 0; i < N; i++) Console.WriteLine("{0} ", arr[i]); и foreach(int i in arr) // знать длину массива не обязательно Console.WriteLine("{0} ", i);
Примечание: параметр цикла в блоке операторов, следующих за foreach, доступен только для чтения. foreach(int i in arr) // знать длину массива не обязательно i++; // Ошибка
Лабораторная работа №5
Тема: Алгоритмизация обработки символьных строк. Пользовательский функции
Цель: освоение составления и тестирования алгоритмов и программ обработки символьных строк с использованием регулярных выражений и функций пользователя.
Теоретические положения Библиотека System.String
Некоторые члены типа данных System.String, которые могут быть полезны при выполнении лабораторной работы, представлены в табл. 7 (подробности см. в MSDN).
Таблица 7. Стандартные функции библиотеки System.String для обработки строк
Пользовательские функции
Функции в С# — это средство, позволяющее выполнять некоторые участки кода в произвольном месте приложения. Они позволяют делать программу более удобочитаемой, и группировать вместе логически связанные между собой части программ. Функцию можно представить себе как повторно используемый код. Параметры и возвращаемое значение функции вместе называются заголовком, или сигнатурой функции. Синтаксис кода для простейшей функций консольного приложения будет выглядеть следующим образом:
static void <имяФункции>() { ... }
Ключевое слово static имеет отношение к понятиям объектно-ориентированного программирования, и гарантирует выполнение функции. Ключевое слово void (отсутствует) указывает, что функция не возвращает никакого значения. Если функция должна возвращать вовне какие-либо данные, то синтаксис следующий:
static <возвращаемыйТип> <имяФункции>() { ... return <возвращаемоеЗначение>
}
Единственным ограничением в данном случае является требование того, ЧТО <возвращаемоеЗначение> ДОЛЖНО иметь ТИП <возвращаемыйТип> ИЛИ же должна существовать возможность его неявного преобразования в этот тип.
В простейшем случае это может выглядеть следующим образом:
static double getVal() { return 3.2; }
Если же функция должна принимать извне какие-либо данные, то необходимо задать: список принимаемых функцией параметров в ее описан
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-09-26; просмотров: 69; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.111.85 (0.212 с.) |