СОДЕРЖАНИЕ
Вариант №3
Динамические массивы
Задание 1
Вывести индекс первого элемента массива с заданным значением (например, 10). Вывести массив. Удалить часть массива начиная с заданного. Отсортировать оставшийся массив по возрастанию.
Код:
using System;
using System.Collections;
namespace Задание_1
{
class Program
{
static void Main(string[] args)
{
//Создание и заполнение массива
ArrayList arr = new ArrayList();
Random ran = new Random();
Console.Write("Введите количество чисел в массиве - ");
String number1 = Console.ReadLine();
int number2 = Convert.ToInt32(number1);
Console.Write("Начальный массив - ");
for (int i = 0; i < number2; i++)
{
arr.Add(ran.Next(1,50));
Console.Write("{0}\t", arr[i]);
}
//Сортировка массива и вывод индекса заданного значение
arr.Sort();
Console.WriteLine();
Console.Write("Массив, отсортированный по возрастанию - ");
foreach (int a in arr)
{
Console.Write("{0}\t", a);
}
Console.WriteLine();
Console.Write("Введите число для поиска - ");
String number3 = Console.ReadLine();
int number4 = Convert.ToInt32(number3);
int number5 = arr.BinarySearch(number4);
if (number5 < 0)
Console.WriteLine("В массиве нет такого числа");
else
Console.WriteLine("Индекс числа " + number4 + " - " + number5);
//Удаление заданного диапозона массива
Console.WriteLine("Введите диапозон для удаления из массива(индексы элементов):");
Console.Write("Введите индекс элемента, с которого начнётся удаление - ");
String number6 = Console.ReadLine();
int number7 = Convert.ToInt32(number6);
Console.Write("Введите количество элементов для удаления - ");
String number8 = Console.ReadLine();
int number9 = Convert.ToInt32(number8);
arr.RemoveRange(number7,number9);
Console.Write("Массив после удаления заданного диапозона - ");
foreach (int a in arr)
{
Console.Write("{0}\t", a);
}
Console.WriteLine();
}
}
}
Пример работы:
Связный список
Задание 2
Сформировать список студентов и их возраста. Добавить нового студента перед k-м. Найти студентов с возрастом 17 лет и удалить их из списка.
Код:
using System;
using System.Collections;
using System.Collections.Generic;
namespace Задание1._1
{
class Program
{
static void Main(string[] args)
{
//Создание и заполнение записи
SortedList <string, string>link = new SortedList<string, string>();
link.Add("Иванов","19 лет");
link.Add("Петров", "17 лет");
link.Add("Сидоров", "18 лет");
link.Add("Бревнов", "17 лет");
link.Add("Коробкин", "20 лет");
link.Add("Бананов", "19 лет");
link.Add("Зимнев", "16 лет");
link.Add("Шилов", "21 лет");
ArrayList arr = new ArrayList();
//Вывод записи в консоль
ICollection<string> keys = link.Keys;
foreach (string s in keys)
Console.WriteLine("Фамилия: {0}, Возраст: {1}", s, link[s]);
Console.ReadLine();
//Удаление элементов
foreach (string s in keys)
{
if (link[s] == "17 лет")
{
arr.Add(s);
}
}
for (int i = 0; i < arr.Count; i++)
{
link.Remove(arr[i].ToString());
}
//Вывод записи после удаления
foreach (string s in keys)
Console.WriteLine("Фамилия: {0}, Возраст: {1}", s, link[s]);
Console.ReadLine();
}
}
}
Пример работы:
Стэк
Задание 1
Сформировать стэк из p символов. Проверить наличие в стэке символа ‘z’. Подсчитать количество. Вывести вершину стэка не удаляя ее. Извлечь последовательность из стэка и сформировать из нее динамический массив.
Код:
using System;
using System.Collections;
using System.Collections.Generic;
namespace Задание2._1
{
class Program
{
static void Main(string[] args)
{
//Cоздание, заполнение и вывод стека в консоль
var mystack = new Stack <char>();
mystack.Push('a');
mystack.Push('b');
mystack.Push('c');
mystack.Push('d');
mystack.Push('e');
mystack.Push('f');
mystack.Push('g');
mystack.Push('h');
Console.Write("Исходный стек: ");
foreach (char s in mystack)
Console.Write(s + ", ");
Console.WriteLine("\n");
//Поиск элемента в стеке
int k = 0;
bool p = mystack.Contains('z');
if (p == false)
{
Console.WriteLine("В стеке нет заданного символа");
Console.WriteLine();
}
else
{
foreach (char s in mystack)
{
if (s == 'z')
k++;
}
Console.WriteLine("В стеке " + k + " символов 'z'");
Console.WriteLine();
}
//Подсчёт количества элементов в стеке
Console.WriteLine("В стеке " + mystack.Count + " элементов");
Console.WriteLine();
//Вывод вершины стека
Console.WriteLine("Вершина стека - " + mystack.Peek());
Console.WriteLine();
//Извлечение последовательности из стека и помещение её в динамический массив
ArrayList arr = new ArrayList();
foreach (char s in mystack)
{
arr.Add(s);
}
Console.WriteLine("Вывод элементов стека через динамический массив:");
for (int j = 0; j < arr.Count; j++)
{
Console.Write("{0}\t", arr[j]);
}
Console.WriteLine();
}
}
}
Пример работы:
Очереди
Задание 2
Сформировать очередь из p символов. Проверить наличие в очередь символа ‘z’. Подсчитать количество.
Код:
using System;
using System.Collections.Generic;
namespace Задание2._2
{
class Program
{
static void Main(string[] args)
{
//Объявление и заполнение очереди
Queue<char> qe = new Queue<char>();
Random ran = new Random();
for (int i = 0; i < 10; i++)
{
qe.Enqueue(Convert.ToChar(ran.Next('a','z')));
}
Console.Write("Очередь - ");
foreach (char a in qe)
{
Console.Write(a + ", ");
}
Console.WriteLine();
Console.WriteLine();
//Поиск элемента в очереди
int k = 0;
foreach (char a in qe)
{
if (a == 'z')
k++;
}
if (k == 0)
Console.WriteLine("В очереди нет элемента 'z'");
else
Console.WriteLine("В очереди " + k + " элементов 'z'");
Console.WriteLine();
//Подсчёт количества элементов в очереди
Console.WriteLine("В очереди " + qe.Count + " элементов");
Console.WriteLine();
}
}
}
Пример работы:
Множества
Задание 1
Задать множество А случайным образом из k элементов, каждый из элементов взять из диапазона [0, m] (повторяющиеся элементы удалить). Задать случайным образом элемент из диапазона [0, m+n], проверить, входит ли этот элемент во множество А. Найти кардинальное число множества А, найти кардинальное число булеана множества А.
k = 12; m = 16; n =4.
Код:
using System;
using System.Collections.Generic;
namespace Задание3._1
{
class Program
{
static void Main(string[] args)
{
//Создание, заполнение и вывод в консоль множества
SortedSet<int> A = new SortedSet<int>();
Random ran = new Random();
int k = 12;
for (int i = 0; i < k; i++)
{
int number1 = ran.Next(0, 16);
bool number2 = A.Contains(number1);
if (number2 == false)
A.Add(number1);
else
k++;
}
Console.Write("Элементы множества - ");
foreach (var l in A)
{
Console.Write("{0}\t", l);
}
Console.WriteLine();
Console.WriteLine();
//Задание элемента и поиск его в множестве
int number3 = ran.Next(0, 20);
Console.Write("Число, задаваемое рандомом для поиска - ");
Console.WriteLine(number3);
bool number4 = A.Contains(number3);
if (number4 == false)
Console.WriteLine("В множестве нет такого элемента");
else
Console.WriteLine("В множестве есть такой элемент");
Console.WriteLine();
//Вывод характеристик множества
Console.WriteLine("Кардинальное число множества(мощность множества/количество элементов множества) - " + A.Count);
Console.WriteLine("Кардинальное число булеана множества - " + Math.Pow(2,Math.Abs(A.Count)));
}
}
}
Пример работы:
Задание 2
Составить множество А из букв фамилии, множество В – из букв имени, множество С – из букв отчества (повторяющиеся элементы удалить). Найти: объединение множеств А, В и С, пересечение множеств А, В и С, разность А\В, разность В\А.
Код:
using System;
using System.Collections;
using System.Collections.Generic;
namespace Задание3._2
{
class Program
{
static void Main(string[] args)
{
//Создание и заполнение множеств
SortedSet<char> A = new SortedSet<char>();
SortedSet<char> B = new SortedSet<char>();
SortedSet<char> C = new SortedSet<char>();
SortedSet<char> D = new SortedSet<char>();
A.Add('Б');
A.Add('О');
A.Add('Н');
A.Add('Д');
A.Add('И');
A.Add('К');
Console.Write("Исходное множество А - ");
foreach (char d in A)
{
Console.Write(d + " ");
}
Console.WriteLine("");
B.Add('А');
B.Add('Р');
B.Add('Т');
B.Add('Ё');
B.Add('М');
Console.Write("Исходное множество B - ");
foreach (char d in B)
{
Console.Write(d + " ");
}
Console.WriteLine("");
C.Add('В');
C.Add('Л');
C.Add('А');
C.Add('Д');
C.Add('И');
C.Add('М');
C.Add('И');
C.Add('Р');
C.Add('О');
C.Add('В');
C.Add('И');
C.Add('Ч');
Console.Write("Исходное множество C - ");
foreach (char d in C)
{
Console.Write(d + " ");
}
Console.WriteLine("");
//Объдинение элементов множества А,B и С
A.UnionWith(B);
A.UnionWith(C);
Console.Write("Объединение множеств A,B и С - ");
foreach (char f in A)
{
Console.Write(f + " ");
}
Console.WriteLine("");
//Пересечение элементов множества A,B и С
B.IntersectWith(A);
B.IntersectWith(C);
Console.Write("Пересечение множеств A,B и С - ");
foreach (char f in B)
{
Console.Write(f + " ");
}
Console.WriteLine("");
//Разность А и В
A.Clear();
A.Add('Б');
A.Add('О');
A.Add('Н');
A.Add('Д');
A.Add('И');
A.Add('К');
B.Clear();
B.Add('А');
B.Add('Р');
B.Add('Т');
B.Add('Ё');
B.Add('М');
A.ExceptWith(B);
Console.Write("Пересечение множеств A и B - ");
foreach (char f in A)
{
Console.Write(f + " ");
}
Console.WriteLine("");
//Разность B и A
B.ExceptWith(A);
Console.Write("Пересечение множеств A и B - ");
foreach (char f in B)
{
Console.Write(f + " ");
}
Console.WriteLine("");
}
}
}
Пример работы:
Хеш-таблицы
Задание 1
Организовать хеш-таблицу с открытой адресацией, используя любую хеш-функцию h(k), M - размер хеш-таблицы. Организовать процедуру поиска по ключу в этой хеш-таблице. Результат поиска - номер ячейки с найденным ключом или сообщение о ненайденном ключе и значении.
Код:
using System;
using System.Collections;
namespace Задание4._1
{
class Program
{
static void Main(string[] args)
{
Hashtable hs = new Hashtable();
Console.Write("Введите размер хеш-таблицы - ");
String number1 = Console.ReadLine();
int number2 = Convert.ToInt32(number1);
for (int i = 0; i < number2; i++)
{
Console.Write("Ключ - ");
String number3 = Console.ReadLine();
Console.Write("Значение - ");
String number4 = Console.ReadLine();
Console.WriteLine("");
hs.Add(number3,number4);
}
ICollection keys = hs.Keys;
foreach (string s in keys)
Console.WriteLine(s + ": " + hs[s]);
Console.Write("Введите ключ поиска - ");
String number5 = Console.ReadLine();
int a = 0;
int k = 0;
foreach (string s in keys)
{
k++;
if (s == number5)
{
a++;
Console.WriteLine("Ключ с данным значением храниться в ячейке №" + k);
}
}
if (a == 0)
Console.WriteLine("Заданный ключ не найден");
}
}
}
Пример работы:
Словарь
Задание 2
Дана строка s. Подсчитайте и выведите на экран сколько раз используется каждый символ в строке, используя словарь для хранения этой информации. Заглавные и строчные буквы считать одинаковыми.
Строка S - Коллекция – это массив, хеш-таблица, список, стек, множество
Код:
using System;
using System.Collections;
using System.Collections.Generic;
namespace Задание4._2
{
class Program
{
static void Main(string[] args)
{
String S = "Коллекция – это массив, хеш-таблица, список, стек, множество";
for (int i = 0; i < S.Length; i++)
{
if (char.IsUpper(S[i]))
S = S.Replace(S[i],char.ToLower(S[i]));
}
Stack st = new Stack();
Dictionary<char, int> dr = new Dictionary<char, int>();
int k = 1;
bool tr;
for (int i = 0; i < S.Length; i++)
{
tr = st.Contains(S[i]);
if (tr == false)
{
st.Push(S[i]);
for (int j = i + 1; j < S.Length - 1; j++)
{
if (S[i].Equals(S[j]))
{
k++;
}
}
dr.Add(S[i],k);
//Console.WriteLine("В строке символ " + S[i] + " всречается " + k + " раз");
k = 1;
}
else
if (tr == true)
continue;
}
//Первый столбик - рассматриваемый символ
//Второй столбик - столько раз рассматриваемый символ повторяется в строке
foreach (KeyValuePair<char, int> keyValue in dr)
{
Console.WriteLine(keyValue.Key + " - " + keyValue.Value);
}
}
}
}
Пример работы:
Библиотеки
Задание 1
По варианту создать три функции в библиотеке и приложение, использующее библиотеку. Вывод сообщения о изготовителе процессора, его серии, частоте.
Код из библиотеки:
using System;
namespace lib
{
public class Class1
{
public String manufacturer;
public int serial_number;
public String frequency;
}
}
Код из класса:
using System;
using lib;
namespace cl_4_lib
{
class Program
{
static void Main(string[] args)
{
Class1 info = new Class1 { manufacturer = "intel", serial_number = 1212312, frequency = "4.2 Ghz" };
Console.WriteLine("Производитель процессора - " + info.manufacturer);
Console.WriteLine("Серийный номер процессора - " + info.serial_number);
Console.WriteLine("Частота процессора - " + info.frequency);
}
}
}
Результат работы:
Тестирование “Black Box”
Код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if ((textBox1.Text == "") || (textBox2.Text == ""))
MessageBox.Show("Ошибка! Введите данные для вычисления");
else
{
String g = textBox1.Text, h = textBox2.Text;
Regex regex = new Regex(@"[a-zA-Zа-яА-Я](\w*)");
MatchCollection matches1 = regex.Matches(g);
MatchCollection matches2 = regex.Matches(h);
if ((matches1.Count > 0) || (matches2.Count > 0))
MessageBox.Show("Ошибка! В строке введаны символы(буквы), введите числа");
else
if ((Convert.ToInt64(textBox1.Text) > 2147483648) || (Convert.ToInt64(textBox1.Text) < -2147483648) || (Convert.ToInt64(textBox2.Text) > 2147483648) || (Convert.ToInt64(textBox2.Text) < -2147483648))
MessageBox.Show("Число выходит из диапозона от -2147483647 до 2147483647");
else
{
Int64 a = Convert.ToInt64(textBox1.Text) + Convert.ToInt64(textBox2.Text);
{
if ((a > 2147483648) || (a < -2147483648))
{
MessageBox.Show("Слишком длинное число");
}
else
{
label3.Text = Convert.ToString('+');
textBox3.Text = Convert.ToString(a);
}
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{
if ((textBox1.Text == "") || (textBox2.Text == ""))
MessageBox.Show("Ошибка! Введите данные для вычисления");
else
{
String g = textBox1.Text, h = textBox2.Text;
Regex regex = new Regex(@"[a-zA-Zа-яА-Я](\w*)");
MatchCollection matches1 = regex.Matches(g);
MatchCollection matches2 = regex.Matches(h);
if ((matches1.Count > 0) || (matches2.Count > 0))
{
MessageBox.Show("Ошибка! В строке введаны символы(буквы), введите числа");
}
else
{
if ((Convert.ToInt64(textBox1.Text) > 2147483648) || (Convert.ToInt64(textBox1.Text) < -2147483648) || (Convert.ToInt64(textBox2.Text) > 2147483648) || (Convert.ToInt64(textBox2.Text) < -2147483648))
MessageBox.Show("Число выходит из диапозона от -2147483647 до 2147483647");
else
{
Int64 a = Convert.ToInt64(textBox1.Text) - Convert.ToInt64(textBox2.Text);
if ((a > 2147483648) || (a < -2147483648))
{
MessageBox.Show("Слишком длинное число");
}
else
{
textBox3.Text = Convert.ToString(a);
label3.Text = Convert.ToString('-');
}
}
}
}
}
private void button3_Click(object sender, EventArgs e)
{
if ((textBox1.Text == "") || (textBox2.Text == ""))
MessageBox.Show("Ошибка! Введите данные для вычисления");
else
{
String g = textBox1.Text, h = textBox2.Text;
if (Convert.ToInt64(h) == 0)
{
MessageBox.Show("Ошибка! Денление на ноль");
}
else
{
Regex regex = new Regex(@"[a-zA-Zа-яА-Я](\w*)");
MatchCollection matches1 = regex.Matches(g);
MatchCollection matches2 = regex.Matches(h);
if ((matches1.Count > 0) || (matches2.Count > 0))
{
MessageBox.Show("Ошибка! В строке введаны символы(буквы), введите числа");
}
else
{
if ((Convert.ToInt64(textBox1.Text) > 2147483648) || (Convert.ToInt64(textBox1.Text) < -2147483648) || (Convert.ToInt64(textBox2.Text) > 2147483648) || (Convert.ToInt64(textBox2.Text) < -2147483648))
MessageBox.Show("Число выходит из диапозона от -2147483647 до 2147483647");
else
{
Int64 a = Convert.ToInt64(textBox1.Text) / Convert.ToInt64(textBox2.Text);
if ((a > 2147483648) || (a < -2147483648))
{
MessageBox.Show("Слишком длинное число");
}
else
{
textBox3.Text = Convert.ToString(a);
label3.Text = Convert.ToString('/');
}
}
}
}
}
}
private void button4_Click(object sender, EventArgs e)
{
if ((textBox1.Text == "") || (textBox2.Text == ""))
MessageBox.Show("Ошибка! Введите данные для вычисления");
else
{
String g = textBox1.Text, h = textBox2.Text;
Regex regex = new Regex(@"[a-zA-Zа-яА-Я](\w*)");
MatchCollection matches1 = regex.Matches(g);
MatchCollection matches2 = regex.Matches(h);
if ((matches1.Count > 0) || (matches2.Count > 0))
{
MessageBox.Show("Ошибка! В строке введаны символы(буквы), введите числа");
}
else
{
if ((Convert.ToInt64(textBox1.Text) > 2147483648) || (Convert.ToInt64(textBox1.Text) < -2147483648) || (Convert.ToInt64(textBox2.Text) > 2147483648) || (Convert.ToInt64(textBox2.Text) < -2147483648))
MessageBox.Show("Число выходит из диапозона от -2147483647 до 2147483647");
else
{
Int64 a = Convert.ToInt64(textBox1.Text) * Convert.ToInt64(textBox2.Text);
if ((a > 2147483648) || (a < -2147483648))
{
MessageBox.Show("Слишком длинное число");
}
else
{
textBox3.Text = Convert.ToString(a);
label3.Text = Convert.ToString('*');
}
}
}
}
}
}
}
Техника анализа классов эквивалентности:
Классы эквивалентности:
- Допустимые значения:
- От -2147483647 до 214748364
Тест 1:
- Недопустимые значения:
- От - ∞ до -2147483647
Тест 2:
- От 2147483647 до + ∞
Тест 3:
- Деление на 0
Тест 4:
- Буквы
Тест 5:
1.4 Пустые поля
Техника анализа граничных значений
Граничное значение
Значение перед границей
Значение после границы
Таблица принятия решений:
Условие |
Значение 1 |
Значение 2 |
Значение 3 |
Значение 4 |
Значение 5 |
Значение 6 |
Значение 7 |
Ввод корректных в первое поле |
+ |
- |
+ |
- |
+ |
- |
- |
Данные не введены в первую строку |
- |
+ |
- |
+ |
- |
- |
- |
Ввод корректных в второе поле |
+ |
- |
- |
+ |
- |
- |
- |
Данные не введены во вторую строку |
- |
+ |
+ |
- |
- |
- |
- |
Во второй строке стоит 0 |
- |
- |
- |
- |
+ |
- |
- |
Ввод некорректных в первое поле ( за диапазоном ) |
- |
- |
- |
- |
- |
+ |
- |
Ввод некорректных в второе поле ( за диапазоном ) |
- |
- |
- |
- |
+ |
+ |
- |
Ввод некорректных в первое поле (буквы) |
- |
- |
- |
- |
- |
- |
+ |
Ввод некорректных в второе поле (буквы) |
- |
- |
- |
- |
- |
- |
+ |
Действие |
|||||||
Вычисление произведено успешно |
+ |
- |
- |
- |
- |
- |
- |
Выдаётся ошибка "Ошибка! Введите данные для вычисления" |
- |
+ |
+ |
+ |
- |
- |
- |
Выдаётся ошибка "Ошибка! В строке введены символы(буквы), введите числа" |
- |
- |
- |
- |
- |
- |
+ |
Выдаётся ошибка "Число выходит из диапазона от -2147483647 до 2147483647" |
- |
- |
- |
- |
- |
+ |
- |
Выдаётся ошибка "Ошибка! Деление на ноль" |
- |
- |
- |
- |
+ |
- |
- |