Вариант 14
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Определить самую длинную последовательность цифр (если они есть) в тексте. Слова разделены пробелами и знаками препинания.
Вариант 15
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Определить количество букв А в последнем слове каждого предложения. Слова разделены пробелами и знаками препинания.
Вариант 16
Текст состоит из предложений, разделенных точкой, вводится с клавиатуры, его длина не превышает 1000 символов. Определить количество предложений и количество слов в каждом предложении, разделенных пробелами и знаками препинания.
Вариант 17
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Определить количество символов, отличных от букв и пробелов. Слова разделены пробелами и знаками препинания.
Вариант 18
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Определить оканчивающиеся на гласные буквы слова в каждом предложении. Слова разделены пробелами и знаками препинания.
Вариант 19
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Определить слова, у которых первая и последняя буквы совпадают. Слова разделены пробелами и знаками препинания.
Вариант 20
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Определить пары слов, у которых последняя буква первого слова совпадает с первой второго слова в каждом предложении. Слова разделены пробелами и знаками препинания.
Вариант 21
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Все слова текста написать с прописной буквы. Слова разделены пробелами и знаками препинания.
Вариант 22
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Удалить из текста повторяющиеся слова. Слова разделены пробелами и знаками препинания.
Вариант 23
Составить программу ввода с клавиатуры текста и замены в нем всех слов, начинающихся на А, словами, заканчивающимися на а (или А), которые есть в тесте. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Слова разделены пробелами и знаками препинания.
Пример программы, которая считает максимальное количество пробелов между словами в тексте, вводимом с клавиатуры. Размер текста не более 1000 символов.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace ConsoleApplication1
static void Main(string[] args)
{
Console.WriteLine("Введите текст :");
//Получение стандартного потока ввода
Stream stream = Console.OpenStandardInput();
byte [] bytes = new byte[1000];
//Считывание байт из потока (макс. количество 1000)
int length = stream.Read(bytes, 0, 1000);
//Декодирование полученных байт в текст
char [] chars = Encoding.UTF7.GetChars(bytes, 0, length);
string Text = new string(chars);
//Удаление последних двух
//символов (перевода каретки, и конца строки
Text = Text.Remove(Text.Length - 2, 2);
int max = 0; int space = 0;
//Поиск максимального кол-ва пробелов
for(int i = 0; i < Text.Length; i++)
{
if(Text[i] == ' ') space++;
else space = 0;
if(space > max) max = space;
}
Console.WriteLine("Максимальное кол-во пробелов : {0}", max);
Console.ReadLine();
}
Текст состоит из предложений, разделенных точкой. Текст вводится с клавиатуры, его длина не превышает 1000 символов. Определить слова, у которых первая и последняя буквы совпадают. Слова разделены пробелами и знаками препинания.
static void Main(string[] args) {
Console.WriteLine("Введите текст :");
// Получение стандартного потока ввода
Stream stream = Console.OpenStandardInput();
// Объявляем массив байт, в который запишем поток
byte[] bytes = new byte[1000];
/ Считывание байт из потока (макс. количество 1000)
int length = stream.Read(bytes, 0, 1000);
// Декодирование полученных байт в текст, 866 - кодовая страница консоли в windows
string str = Encoding.GetEncoding(866).GetString(bytes,0, length);
// Инициализируем массив разделителей строки
char[] stringSeparators = new char[] { '.', ':', ' ', ';' ,',', '?', '!', '\n','\r'};
//Инициализируем массив строк на подстроки по разделителям
string[] result = str.Split(stringSeparators);
Console.Write("Результат: ");
// Рабочая переменная; true: если найдены подстроки, удовлетворяющие заданию
// false: такие подстроки не найдены
bool isres = false;
for (int i = 0; i < result.Length; i++)
{
if (result[i] != " " && result[i] != "")
{
int lengthStr = result[i].Length;
if (result[i][0] == result[i][lengthStr - 1])
{
isres = true; Console.Write(result[i] + "; ");
}
}
}
if (isres) Console.WriteLine();
else Console.WriteLine("нет");
}
Целью выполнения лабораторной работы является получение навыков построения диаграммы классов и овладение технологией объектно-ориентированного программирования (ООП).
Класс - это тип данных, задающий реализацию некоторой абстракции данных, характерной для задачи, в интересах которой создается программа. Класс не только составная единица программы, но и важная содержательная часть.
Класс часто становятся модулем - единицей построения программной системы.
Абстракция данных, выделенная для конкретной предметной области реализуется в виде класса.
Синтаксис класса:
[<атрибуты>] class <имяКласса>[:<списокРодителей>]
{
<телоКласса>
}
Таблица 9
Атрибут |
Значение |
Отсутствует либо internal |
Класс доступен только в рамках текущего проекта |
Public |
Класс доступен отовсюду |
abstract или internal abstract |
Класс доступен только в рамках текущего проекта, не допускает создания экземпляров, может наследоваться |
sealed или internal sealed |
Класс доступен только в рамках текущего проекта, допускает создания экземпляров, не может наследоваться |
public abstract |
Класс доступен отовсюду, не допускает создания экземпляров, может наследоваться |
public sealed |
Класс доступен отовсюду, допускает создания экземпляров, не может наследоваться |
Обычно класс имеет атрибут доступа internal - значение по умолчанию.
class myClass
{ тело_класса }
В теле класса могут быть определены его члены:
константы;
поля и свойства;
методы, в том числе конструкторы и деструкторы;
события;
делегаты;
интерфейсы;
классы.
Каждый член имеет модификатор доступа, принимающий одно из четырех значений:
public - общий, член, доступный из любого кода;
private – частный, доступный только из того кода, который является составной частью данного класса;
protected – защищенный, доступный только из кода, являющегося составной частью данного класса или из производного класса;
internal – внутренний, доступный только внутри проекта (модуля), в котором он определен.
По умолчанию член класса имеете доступ private
Поля, свойства и методы могут быть описаны также с помощью ключевого слова static. В этом случае они будут статическими членами данного класса, а не экземпляров объектов.
Поля класса синтаксически являются обычными переменными (объектами) языка. Их описание удовлетворяет обычным правилам объявления переменных.
Свойства и поля обеспечивают доступ к данным, хранящимся в объекте. Для свойств и полей можно установить режим чтения/записи.
Для организации доступа к состоянию лучше использовать свойства, а не поля.
Независимо от значения атрибута доступа, все поля доступны для всех методов своего класса.
Если поля класса A должны быть доступны для методов класса B, являющегося потомком класса A, то эти поля следует снабдить атрибутом protected (защищенные).
Если поля должны быть доступны для методов классов B1, B2, …, дружественных к классу A, то эти поля следует снабдить атрибутом internal, а все дружественные классы поместить в один проект (assembly). Такие поля называются внутренними или дружественными.
Если некоторые поля должны быть доступны для методов любого класса B, которому доступен сам класс A, то эти поля снабжаются атрибутом public. Такие поля называются общедоступными или открытыми.
Для полей может использоваться ключевое слово readonly, означающее, что значение поля может быть задано только в процессе выполнения конструктора или при начальном присваивании:
class myClass
{
public readonly int MyInt=17;
}
Доступ к статическим полям может осуществляться из класса, в котором они описаны (MyClass.MyInt), но не через экземпляр объектов этого класса:
class myClass
{
public static int MyInt;
}
Для полей можно использовать слово const. Члены, описанные как const, являются по определению статическими, поэтому модификатор static не нужен.
Основная структура свойства включает модификатор доступа, за которым идет имя типа, имя свойства и 1 или оба блока set и get, в которых содержится код обработки свойства.
public int MyIntProp
{
get
{
//код для получения значения свойства
}
set
{
//код для задания значения свойству
}
}
Блок get должен обладать возвращаемым значением того же типа, что и само свойство.
private int myInt; //частное поле
public int MyInt //открытое свойство
{
get
{
return myInt;
}
set
{ }
}
Блок set присваивает значение полю: используется ключевое слово value, чтобы сослаться на значение, полученное от пользователя
private int myInt;
public int MyInt
{
get
{
return myInt;
}
set
{ myInt=value; }
}
Необходимость свойства проявляется, когда требуется контроль за корректрностью значений, например:
public int MyInt //свойство
{
get
{ return myInt;
}
set
{ if ( value >= 0 && value <= 10 )
myInt=value;
}
}
Методы класса синтаксически являются обычными процедурами и функциями языка. Содержательно методы определяют ту самую абстракцию данных, которую реализует класс.
class MyClass
{
public string GetString()
{
return “Это строка”;
}
}
Методы содержат описания операций, доступных над объектами класса. Два объекта одного класса имеют один и тот же набор методов.
Каждый метод имеет модификатор доступа, принимающий одно из четырех значений: public, private, protected, internal. Атрибутом доступа по умолчанию является атрибут private.
При определении метода можно задавать ключевые слова:
virtual – метод может быть переопределен;
abstract – метод должен быть переопределен (допускается только в абстрактных классах;
override – метод переопределяет метод базового класса,
extern – определение метода где-то в другом месте.
public class MyBaseClass
{
public virtual void DoSomething()
{
//базовая реализация
}
}
public class MyDerivClass : MyBaseClass
{
public override void DoSomething()
{
//переопределение базовой реализации
}
}
Когда конструктор класса создает новый объект, то в памяти создается структура данных с полями, определяемыми классом.
У класса могут быть поля, связанные не с объектами, а с самим классом. Эти поля объявляются как статические с модификатором static. Статические поля доступны всем методам класса. Независимо от того, какой объект вызвал метод, используются одни и те же статические поля, позволяя методу использовать информацию, созданную другими объектами класса.
Аналогично полям, у класса могут быть и статические методы, объявленные с модификатором static. Такие методы не используют информацию о свойствах конкретных объектов класса - они обрабатывают общую для класса информацию, хранящуюся в его статических полях.
В классе могут быть объявлены константы.
Константы фактически являются статическими полями, доступными только для чтения, значения которых задаются при инициализации. Однако задавать модификатор static для констант запрещено.
Конструктор - неотъемлемый компонент класса. Нет классов без конструкторов. Конструктор позволяет создавать объекты класса. Его имя совпадает с именем класса.
Если программист не задал конструктор класса, то к классу автоматически добавляется конструктор по умолчанию - конструктор без аргументов.
Если программист сам создает один или несколько конструкторов, то автоматического добавления конструктора без аргументов не происходит.
В большинстве случаев нет необходимости описывать соответствующие классу конструкторы и деструкторы, поскольку объект базового класса System.Object обеспечивает их реализацию по умолчанию.
Добавить в класс конструктор можно так:
class MyClass
{
public MyClass()
{ //код конструктора
}
}
Конструктор обладает тем же именем, что и класс, не имеет параметров (это конструктор по умолчанию) и является общим, что позволяет создавать экземпляры класса.
Можно использовать частный конструктор по умолчанию, что означает, что экземпляры класса не могут создаваться этим конструктором
class MyClass
{
private MyClass()
{ //код конструктора
}
}
Можно задать конструктор с параметрами
class MyClass
{
public MyClass()
{ //код конструктора
}
public MyClass(int myInt)
{ //код конструктора не по умолчанию
}
}
Количество задаваемых конструкторов не ограничено.
В зависимости от контекста и создаваемого объекта, может требоваться различная инициализация его полей. Перегрузка конструкторов обеспечивает решение этой задачи.
Конструктор может быть объявлен с атрибутом private. В этом случае внешний пользователь не может воспользоваться им для создания объектов. Но это могут делать методы класса, создавая объекты для собственных нужд со специальной инициализацией.
В классе можно объявить статический конструктор с атрибутом static. Он вызывается автоматически - его не нужно вызывать стандартным образом. Точный момент вызова не определен, но гарантируется, что вызов произойдет до создания первого объекта класса. Такой конструктор может выполнять работу, которую нужно выполнить один раз: связаться с базой данных, заполнить значения статических полей класса, создать константы класса, выполнить другие подобные действия. Статический конструктор, вызываемый автоматически, не должен иметь модификаторов доступа.