Файл: Практикум по информатике рекомендовано в качестве учебного пособия.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 734
Скачиваний: 14
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
53
ЛАБОРАТОРНАЯ РАБОТА № 6.
СТРОКИ
Цель лабораторной работы
: изучить правила работы с элементом управления
ListBox
. Написать программу для работы со строками.
6.1. Строковый тип данных
Для хранения строк в языке C# используется тип string
. Чтобы объявить (и, как правило, сразу инициализировать) строковую перемен- ную, можно написать следующий код: string a =
"Текст"
; string b =
"строки"
;
Над строками можно выполнять операцию сложения – в этом слу- чае текст одной строки будет добавлен к тексту другой: string c = a + " " + b;
// Результат: Текст строки
Тип string на самом деле является псевдонимом для класса
String
, с помощью которого над строками можно выполнять ряд более слож- ных операций. Например, метод
IndexOf может осуществлять поиск подстроки в строке, а метод
Substring возвращает часть строки указан- ной длины, начиная с указанной позиции: string a =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
; int index = a.IndexOf(
"OP"
);
// Результат: 14 (счет с 0)
string b = a.Substring(3, 5);
// Результат: DEFGH
Если требуется добавить в строку специальные символы, это мож- но сделать с помощью escape-последовательностей, начинающихся с обратного слэша:
\"
– Кавычка.
\\
– Обратная косая черта.
\n
– Новая строка.
\r
– Возврат каретки.
\t
– Горизонтальная табуляция.
6.2. Более эффективная работа со строками
Строки типа string представляют собой неизменяемые объекты: после того, как строка инициализирована, изменить ее уже нельзя. Рас- смотрим для примера следующий код:
54 string s =
"Hello, "
; s +=
"world!"
;
Здесь компилятор создает в памяти строковый объект и инициали- зирует его строкой «Hello, », а затем создает другой строковый объект и инициализирует его значением первого объекта и новой строкой
«world!», а затем заменяет значение переменной s
на новый объект.
В результате строка s
содержит именно то, что хотел программист, од- нако в памяти остается и изначальный объект со строкой «Hello, ». Ко- нечно, со временем сборщик мусора уничтожит этот бесхозный объект, однако если в программе идет интенсивная работа со строками, то таких бесхозных объектов может оказаться очень много. Как правило, это не- гативно сказывается на производительности программы и объеме по- требляемой ею памяти.
Чтобы компилятор не создавал каждый раз новый строковый объ- ект, разработчики языка C# ввели другой строковый класс:
StringBuilder
. Приведенный выше пример с использованием этого класса будет выглядеть следующим образом:
StringBuilder s = new
StringBuilder
(
"Hello, "
); s.Append(
"world!"
);
Конечно, визуально этот код выглядит более сложным, зато при ак- тивном использовании строк в программе он будет гораздо эффектив- нее. Помимо добавления строки к существующему объекту (
Append
) класс
StringBuilder имеет еще ряд полезных методов:
Insert
: вставляет указанный текст в нужную позицию исходной строки
Remove
: удаляет часть строки
Replace
: заменяет указанный текст в строке на другой.
Если нужно преобразовать объект
StringBuilder в обычную стро- ку, то для этого можно использовать метод
ToString()
:
StringBuilder s = new
StringBuilder
(
"Яблоко"
); string a = s.ToString();
6.3. Элемент управления
ListBox
Элемент управления
ListBox представляет собой список, элементы которого выбираются при помощи клавиатуры или мыши. Список эле- ментов задается свойством
Items
Items
– это элемент, который имеет свои свойства и свои методы. Методы
Add
,
RemoveAt и
Insert использу- ются для добавления, удаления и вставки элементов.
55
Объект
Items хранит объекты, находящиеся в списке. Объект может быть любым классом – данные класса преобразуются для отображения в строковое представление методом
ToString()
. В нашем случае в качест- ве объекта будут выступать строки. Однако, поскольку объект
Items хра- нит объекты, приведенные к типу object
, перед использованием необхо- димо привести их обратно к изначальному типу, в нашем случае string
: string a = (
string
)listBox1.Items[0];
Для определения номера выделенного элемента используется свой- ство
SelectedIndex
6.4. Порядок выполнения индивидуального задания
З а д а н и е : Написать программу подсчета числа слов в произ- вольной строке. В качестве разделителя может быть любое число про- белов. Для ввода строк использовать
ListBox
. Строки вводятся на этапе проектирования формы, используя окно свойств. Вывод результата ор- ганизовать в метку
Label
Панель диалога будет иметь вид:
Рис. 6.1. Окно программы обработки строк
Текст обработчика нажатия кнопки «Пуск» приведен ниже. private void button1_Click(
object sender,
EventArgs e)
{
// Получаем номер выделенной строки int index = listBox1.SelectedIndex;
56
// Считываем строку в переменную str string str = (
string
)listBox1.Items[index];
// Узнаем количество символов в строке int len = str.Length;
// Считаем, что количество пробелов равно 0
int count = 0;
// Устанавливаем счетчик символов в 0
int i = 0;
// Организуем цикл перебора всех символов в строке while
(i < len)
{
// Если нашли пробел, то увеличиваем
// счетчик пробелов на 1
if
(str[i] ==
' '
) count++; i++;
} label1.Text =
"Количество пробелов = "
+ count.ToString();
}
Индивидуальные задания
Во всех заданиях исходные данные вводить с помощью
ListBox
Строки вводятся на этапе проектирования формы, используя окно свойств. Вывод результата организовать в метку
Label
1.
Дана строка, состоящая из групп нулей и единиц. Посчитать количество нулей и единиц.
2.
Посчитать в строке количество слов.
3.
Найти количество знаков препинания в исходной строке.
4.
Дана строка символов. Вывести на экран цифры, содержащиеся в строке.
5.
Дана строка символов. Сформировать новую строку, в которую включить все символы исходной строки, стоящие на четных местах.
При этом должен быть обратный порядок следования символов по от- ношения к исходной строке.
6.
Сформировать и вывести две новых строки на основе входной строки символов. В первую строку включить все символы, стоящие на четных местах, во вторую – символы, стоящие на нечетных местах в исходной строке.
7.
Дана строка символов, состоящая из произвольных десятич- ных цифр, разделенных пробелами. Вывести количество четных чисел в этой строке.
8.
Дана строка символов. Вывести на экран количество строчных русских букв, входящих в эту строку.
57 9.
Сформировать и вывести три новых строки на основе входной строки символов. В первую строку включить все цифры, во вторую – все знаки препинания: точки, запятые, двоеточия, точки с запятой, вос- клицательные и вопросительные знаки, в третью строку – все остальные символы. Например, входная строка содержит: «выходные дни: 1, 2 ян- варя, 8 марта, 1 мая, 9 мая!», после обработки первая строка будет со- держать: «12819», вторая строка: «:,,,!», третья строка: «выходные дни января марта мая мая».
10.
Дана строка символов. Вывести на экран только строчные рус- ские буквы, входящие в эту строку.
11.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. В каждом слове заме- нить первую букву на прописную.
12.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Удалить первую бук- ву в каждом слове.
13.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Поменять местами i- и j-ю буквы. Для ввода i и j на форме добавить свои поля ввода.
14.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Заменить все буквы ла- тинского алфавита на знак «+».
15.
Дана строка символов, содержащая некоторый текст на рус- ском языке. Заменить все большие буквы «А» на символ «*».
16.
Дана строка символов, содержащая некоторый текст. Разрабо- тать программу, которая определяет, является ли данный текст палин- дромом, т. е. читается ли он слева направо так же, как и справа налево
(например, «А роза упала на лапу Азора»).
17.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Сформировать новую строку, состоящую из чисел длин слов в исходной строке.
18.
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Поменять местами первую и последнюю буквы каждого слова.
19.
Поменять местами первое и второе слово в исходной строке.
20.
Сформировать новую строку, где поменять местами первое и последнее слово из исходной строки.
58
ЛАБОРАТОРНАЯ РАБОТА № 7.
ОДНОМЕРНЫЕ МАССИВЫ
Цель лабораторной работы
: Изучить способы получения случай- ных чисел. Написать программу для работы с одномерными массивами.
7.1. Работа с массивами
Массив – набор элементов одного и того же типа, объединенных общим именем. Массивы в С# можно использовать по аналогии с тем, как они используются в других языках программирования. Однако
С#-массивы имеют существенные отличия: они относятся к ссылоч- ным типам данных, более того – реализованы как объекты. Фактически имя массива является ссылкой на область кучи (динамической памяти), в которой последовательно размещается набор элементов определен- ного типа. Выделение памяти под элементы происходит на этапе ини- циализации массива. А за освобождением памяти следит система сбор- ки мусора – неиспользуемые массивы автоматически утилизируются данной системой.
Рассмотрим в данной лабораторной работе одномерные массивы.
Одномерный массив – это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент име- ет свой номер. Нумерация элементов массива в С# начинается с нуля, то есть если массив состоит из 10 элементов, то его элементы будут иметь следующие номера: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Одномерный массив в С# реализуется как объект, поэтому его соз- дание представляет собой двухступенчатый процесс. Сначала объявля- ется ссылочная переменная на массив, затем выделяется память под требуемое количество элементов базового типа, и ссылочной перемен- ной присваивается адрес нулевого элемента в массиве. Базовый тип оп- ределяет тип данных каждого элемента массива. Количество элементов, которые будут храниться в массиве, определяет размер массива.
В общем случае процесс объявления переменной типа массив и выделение необходимого объема памяти может быть разделен. Кроме того, на этапе объявления массива можно произвести его инициализа- цию. Поэтому для объявления одномерного массива может использо- ваться одна из следующих форм записи: тип[] имя_массива;
59
В этом случае описывается ссылка на одномерный массив, которая в дальнейшем может быть использована для адресации на уже сущест- вующий массив. Размер массива при таком объявлении не задается.
Пример, в котором объявляется массив целых чисел с именем a
: int
[] a;
Другая форма объявления массива включает и его инициализацию указанным количеством элементов: тип[] имя_массива = new тип[размер];
В этом случае объявляется одномерный массив указанного типа и выделяется память под указанное количество элементов. Адрес данной области памяти записывается в ссылочную переменную. Элементы мас- сива инициализируются значениями, которые по умолчанию приняты для данного типа: массивы числовых типов инициализируются нулями, строковые переменные – пустыми строками, символы – пробелами, объ- екты ссылочных типов – значением null
. Пример такого объявления: int
[] a = new int
[10];
Здесь выделяется память под 10 элементов типа int
Наконец, третья форма записи дает возможность сразу инициали- зировать массив конкретными значениями: тип[] имя_массива = {список инициализации};
При такой записи выделяется память под одномерный массив, размер- ность которого соответствует количеству элементов в списке инициализа- ции. Адрес этой области памяти записан в ссылочную переменную. Значе- ние элементов массива соответствует списку инициализации. Пример: int
[] a = { 0, 1, 2, 3 };
В данном случае будет создан массив a
, состоящий из четырех эле- ментов, и каждый элемент будет инициализирован очередным значени- ем из списка.
Обращение к элементам массива происходит с помощью индекса: для этого нужно указать имя массива и в квадратных скобках – его но- мер. Например: a[0]
, b[10]
, c[i]
. Следует помнить, что нумерация эле- ментов начинается с нуля!
60
Так как массив представляет собой набор элементов, объединен- ных общим именем, то обработка массива обычно производится в цик- ле. Например: int
[] myArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for
(
int i = 0; i < 10; i++)
MessageBox
.Show(myArray[i]);
1 2 3 4 5 6 7 8 9 ... 12
7.2. Случайные числа
Одним из способов инициализации массива является задание эле- ментов через случайные числа. Для работы со случайными числами используют класс
Random
. Метод
Random.Next создает случайное число в диапазоне значений от нуля до максимального значения типа int
(его можно узнать с помощью свойства
Int32.MaxValue
). Для создания слу- чайного числа в диапазоне от нуля до какого-либо другого положи- тельного числа используется перегрузка метода
Random.Next(Int32)
– единственный параметр метода указывает верхнюю границу диапазо- на, сама граница в диапазон не включается. Для создания случайного числа в другом диапазоне используется перегрузка метода
Random.Next(Int32, Int32)
– первый аргумент задает нижнюю грани- цу диапазона, а второй – верхнюю.
7.3. Порядок выполнения индивидуального задания
Создайте форму с элементами управления, как показано на рис. 7.1.
Опишите одномерный массив. Создайте обработчики события для кно- пок (код приведен ниже). Данная программа заменяет все отрицатель- ные числа нулями. Протестируйте правильность выполнения програм- мы. Модифицируйте программу в соответствии с индивидуальным заданием.
// Глобальная переменная видна всем методам int
[] Mas = new int
[15];
// Заполнение исходного массива private void button1_Click(
object sender,
EventArgs e)
{
// Очищаем элемент управления listBox1.Items.Clear();
// Инициализируем класс случайных чисел
Random rand = new
Random
();
// Генерируем и выводим 15 элементов for
(
int i = 0; i < 15; i++)
{
Mas[i] = rand.Next(‐50, 50);
61 listBox1.Items.Add(
"Mas["
+ i.ToString() +
"] = "
+ Mas[i].ToString());
}
}
// Замена отрицательных элементов нулями private void button2_Click(
object sender,
EventArgs e)
{
// Очищаем элемент управления listBox2.Items.Clear();
// Обрабатываем все элементы for
(
int i = 0; i < 15; i++)
{ if
(Mas[i] < 0)
Mas[i] = 0; listBox2.Items.Add(
"Mas["
+
Convert
.ToString(i)
+
"] = "
+ Mas[i].ToString());
}
}
Рис. 7.1. Окно программы для работы с одномерными массивами
62
Индивидуальные задания
1.
В массиве из 20 целых чисел найти наибольший элемент и по- менять его местами с первым элементом.
2.
В массиве из 10 целых чисел найти наименьший элемент и по- менять его местами с предпоследним элементом.
3.
Дан массив F, содержащий 18 элементов. Вычислить и вывести элементы нового массива по формуле p i
=
0.13f i
3
–
2.5f i
+
8. Вывести от- рицательные элементы массива P.
4.
В массиве R, содержащем 25 элементов, заменить значения отри- цательных элементов квадратами значений, значения положительных уве- личить на 7, а нулевые значения оставить без изменения. Вывести массив R.
5.
Дан массив A целых чисел, содержащий 30 элементов. Вычис- лить и вывести сумму тех элементов, которые кратны 5.
6.
Дан массив A целых чисел, содержащий 30 элементов. Вычис- лить и вывести сумму тех элементов, которые нечетны и отрицательны.
7.
Дан массив A целых чисел, содержащий 30 элементов. Вычис- лить и вывести количество и сумму тех элементов, которые делятся на 5 и не делятся на 7.
8.
Дан массив A вещественных чисел, содержащий 25 элементов.
Вычислить и вывести число отрицательных элементов и число членов, принадлежащих отрезку
1,2.
9.
Дан массив Z целых чисел, содержащий 35 элементов. Вычис- лить и вывести R
=
S
+
P, где S – сумма четных элементов, меньших 3,
P – произведение нечетных элементов, больших 1.
10.
Дан массив Q натуральных чисел, содержащий 20 элементов.
Найти и вывести те элементы, которые при делении на 7 дают остаток
1,2 или 5.
11.
Дан массив, содержащий 10 элементов. Вычислить произведе- ние элементов, стоящих после первого отрицательного элемента. Вы- вести исходный массив и результат вычислений.
12.
Дан массив, содержащий 14 элементов. Вычислить сумму эле- ментов, стоящих до первого отрицательного элемента. Вывести исход- ный массив и результат вычислений.
13.
Дан массив, содержащий 12 элементов. Все четные элементы сложить, вывести массив и результат.
14.
Дан массив, содержащий 15 элементов. Все положительные элементы возвести в квадрат, а отрицательные умножить на 2. Вывести исходный и полученный массив.
15.
Дан массив, содержащий 14 элементов. Все отрицательные элементы заменить на 3. Вывести исходный и полученный массив.