- •Лабораторная работа 1
- •По дисциплине «Высокоуровневые методы информатики и программирования»
- •Введение в интегрированную среду разработки Microsoft Visual Studio .Net 2008
- •Введение
- •Описание решаемой учебной задачи
- •Начальное знакомство с программированием
- •Разработка программ в среде ms vs .Net
- •Создание проекта
- •Общее описание среды разработки
- •Ввод и редактирование программного кода
- •Автоматическая проверка правильности текста
- •Получение справочной информации
- •Автоматизированная поддержка набора текста
- •Ввод кода программы
- •Построение сборки и запуск ее на выполнение Процедура построения исполняемой программы
- •Запуск сборки на выполнение
- •Обработка синтаксических ошибок
- •Тестирование и отладка программ
- •Подготовка тестовых заданий
- •Методы поиска ошибок (отладки)
- •Пошаговое выполнение программы
- •Просмотр значений переменных
- •Основные вспомогательные классы Класс Console
- •Класс Math
Описание решаемой учебной задачи
В качестве учебной задачи, на примере которой будут рассматриваться правила разработки программ в среде Visual Studio .NET 2008, будет использоваться задача расчета площади круга.
Как известно для расчета площади круга Sкр используется формула:
Sкр = π × r 2;
Алгоритм решения данной задачи очень простой:
Начало работы.
Вывод сообщения пользователю о вводе радиуса круга.
Ввод пользователем с клавиатуры радиуса круга, для которого требуется вычислить площадь.
Вычисление площади круга.
Вывод на экран вычисленной площади круга.
Завершение работы.
Начальное знакомство с программированием
Разработка программы в среде MS VS.NET будет показываться на примере конкретных практических действий:
Как создать проект.
Как добавить программный код в существующий метод.
Как ввести данные с клавиатуры в программу.
Как вывести сообщения на экран.
Данных сведений будет достаточно для разработки простых программ в среде MS VS .NET даже без предварительного изучения объектно-ориентированного программирования (ООП). Опыт разработки алгоритмов для решения учебных задач даст реальную основу для перехода к успешному освоению объектно-ориентированного программирования.
В ООП все данные (переменные) и обрабатывающие их процедуры и функции объединяются в классы. Переменные класса называются полями, а функции и процедуры – методами класса. Перед использованием класса необходимо дать его описание. По описанию класса можно создать его реализацию – объект (иногда еще говорят – экземпляр класса), в котором для входящих в класс полей будет выделена память. В этой памяти можно будет хранить значения полей объекта и выполнять их обработку. По описанию класса можно создавать любое необходимое количество объектов.
В качестве примера класса можно привести программный код:
using System;
namespace LabWork1 {
class Program{
static void Main(){
Console.Write("Введите радиус круга:");
string s = Console.ReadLine();
double r = Convert.ToDouble(s);
double p = Math.PI * r * r;
Console.WriteLine("Площадь круга = {0}", p);
Console.ReadLine();
return;
}
}
}
В первой строке примера программы указано, какое пространство будет использоваться. Пространства имен – это способ объединения в группы связанных классов. Ключевое слово namespace объявляет пространство имен, с которым должны связываться все описанные в нем классы. Утверждение using указывает на пространство имен, которое должен просматривать компилятор для поиска любого класса, который используется в коле программы, но который не описан в текущем пространстве имен. Это утверждение аналогично утверждению import на языке Java.
Причиной использования утверждения using в приведенной программе является то, что в ней используются классы из библиотеки FCL, которые включены в пространство имен System. Использование утверждения using System; позволяет ссылаться на классы System.Console и System.Conver, как Console и Convert, без указания пространства имен. В стандартном пространстве имен System содержится большинство используемых типов данных платформы .NET. Важно понимать, что все реализуемое с помощью языка C# основывается базовых классах .NET. Сам язык C# не имеет встроенных операторов ввода – вывода, также как и встроенных типов, а полностью основывается на классах .NET.
В следующей строке программы объявляется новое пространство имен LabWork1, в котором описывается один класс Program:
namespace LabWork1 {
class Program{
. . .
}
}
Полным именем данного класса является LabWork1.Program. Как и в языке Java, весь код программы C# должен содержаться только внутри классов. Описание классов в C# состоит из ключевого слова class, за которым стоит название класса и пара фигурных скобок (блок). Весь код, связанный с классом должен записываться между этими фигурными скобками. В классе Program описан только один метод с именем Main() (отметим, что первая буква имени это большая M ):
static void Main() { ... }
Данный метод запускается автоматически (является точкой входа) при запуске программы на выполнение. Он может возвращать целое значение (int) или не возвращать ничего (void). Данный метод C# соответствует методу main() в языках C++ и Java. Описание методов в C# имеет следующую структуру:
[модификаторы] тип_результата имя_метода ([параметры]){
// содержание метода
}
Здесь квадратные скобки указывают не обязательные элементы описания. Модификаторы используются для задания некоторых особенностей методов, например, таких как откуда и как данный метод может вызываться. В примере программы используются два модификатора: public и static . Модификатор (режим доступа) public означает, что данный метод может быть доступен из методов любых классов. Модификатор static указывает, что данный метод не связан с конкретным экземпляром класса и может вызываться без использования ссылки на экземпляр. Это является важным, для запуска программы на выполнения без создания экземпляра конкретного класса. В примере задан тип результата void (означает, что никакого результата нет) и для метода Main() не описаны передаваемые параметры.
И, наконец, рассмотрим сами операторы метода Main(). Первый оператор выполняет вывод подсказки с помощью метода Write() класса Console:
Console.Write("Введите радиус круга:");
Данный метод выводит строку текста на экран в консольное окно, но не переводит курсор на начало следующее строки. Для ввода данных пользователя используется метод ReadLine()того же класса Console для получения данных с клавиатуры (при этом сразу же объявляется переменная s типа string):
string s = Console.ReadLine();
Пользователь может ввести число (для отделения дробной части используется запятая, например: 2,5) и нажать клавишу Enter. Метод ReadLine()возвращает текстовую строку (тип string). Для того, чтобы получить из текстовой строки s вещественное значение для переменной r (которая также объявляется в данной строке, например, как тип double) используется метод ToDouble(s)класса Convert:
double r = Convert.ToDouble(s);
Полученное значение радиуса используется для вычисления величины площади круга, которое сохраняется в переменной p:
double p = Math.PI * r * r;
Отметим, что для вычисления используется значение числа “пи”, которое можно получить из статического класса System.Math библиотеки FCL. Для вывода вычисленного значения используется метод WriteLine() со строкой форматирования:
Console.WriteLine("Площадь круга = {0}", p);
И, наконец, для того, чтобы консольное окно не закрылось автоматически после выполнения программы, используется метод ReadLine(), который приостанавливает выполнение программы до нажатия клавиши Enter:
Console.ReadLine();
После этого выполняется оператор return, который вызывает завершение работы метода. Обычно данный оператор возвращает результирующее значение, но так как у данного метода указан тип void в заголовке, то никакого значения не возвращается. В этом случае данный оператор можно было и не записывать.
Для сравнения – схожая программа на языке Java
import java.util.Scanner;
class Program
{
private static final double PI = 3.1416;
public static void main ( String [] args )
{
System.out.print ( "Введите радиус круга:" ) ;
Scanner keyboard=new Scanner ( System.in ) ;
double r = keyboard.nextDouble();
double p = PI * r * r;
System.out.print ("Площадь круга = ") ;
System.out.println( p ) ;
}
}