Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 4. 9 вар

.doc
Скачиваний:
57
Добавлен:
19.09.2017
Размер:
150.02 Кб
Скачать

4

1. Постановка задачи

Определить самое длинное и самое короткое слово в предложении, при условии, что каждое слово отделяется от другого пробелом.

2. Описание алгоритма

Чтобы определить самое длинное и самое короткое слово в предложении, требуется вычленить сами слова. Важно учесть следующие свойства слов: 1) между двумя словами обязательно есть пробел; 2) слово может быть слито со знаком препинания. Соответственно, этапы вычленения слов следующие:

1) разделить предложение на подстроки по пробелам (использовать метод Split);

2) убрать с конца каждого слова знаки препинания, если они есть (метод TrimEnd, в который передаётся массив знаков препинания типа char).

В массиве слов ищутся самое короткое и самое длинное слово по следующему принципу. Изначально самым коротким считается первое слово, оно же считается самым длинным. Далее в цикле проверяется каждое слово из оставшихся. Если проверяемое на данной итерации цикла слово короче ранее считавшегося самым коротким, проверяемое слово теперь считается самым коротким; если оно длиннее ранее считавшегося самым длинным, проверяемое слово теперь считается самым длинным. В некоторой мере это можно сравнить с обновлением рекордов: как только показатель превышает рекордный, старый рекорд стирается, и на его место записывается новый. Точно по такой же стратегии решаются многие другие задачи поиска экстремальных значений, например, ищутся минимум и максимум в числовых массивах.

3. Исходный код программы

using System;

namespace Strings

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Введите предложение:");

string source = Console.ReadLine();

string[] words = source.Split(new char[] { ' ' },

StringSplitOptions.RemoveEmptyEntries);

char[] prepin = { '.', '?', ',', ':', '!', ';' };

int i;

Console.WriteLine("Промежуточные данные");

for (i = 0; i < words.Length; i++)

{

words[i] = words[i].TrimEnd(prepin);

Console.WriteLine("Слово [{0}] = {1}", i, words[i]);

}

string Shortest = words[0], Longest = words[0];

for (i = 1; i < words.Length; i++)

{

if (words[i].Length < Shortest.Length)

Shortest = words[i];

if (words[i].Length > Longest.Length)

Longest = words[i];

}

Console.WriteLine("Самое короткое слово: {0}", Shortest);

Console.WriteLine("Самое длинное слово: {0}", Longest);

Console.ReadKey();

}

}

}

Рассмотрим выполнение последнего цикла на примере предложения «Это же самая сложная прога в мире!». В данном случае words={“Это”, “же”, “самая”, “сложная”, “прога”, “в”, “мире”}. Изначально текущий минимум: “Это”, оно же текущий максимум. В табл. 1 представлены подробные данные по этому примеру.

Таблица 1

Пример поиска самого короткого и самого длинного слова

Слово для сравнения

Минимум

Максимум

До сравнения

После

До сравнения

После

же

Это

же

Это

Это

самая

же

же

Это

самая

сложная

же

же

самая

сложная

прога

же

же

сложная

сложная

в

же

в

сложная

сложная

мире

в

в

сложная

сложная

Примечание: если есть несколько самых коротких (или самых длинных) слов, запоминается первое из них.

4. Тестирование

На рис. 1-2 представлены тесты программы:

1) простой тест, основан на разобранном выше примере;

2) сложный тест, содержит много знаков препинания.

Рис. 1. Тестирование: простой тест

Рис. 2. Тестирование: сложный тест