Отчет по практике по программированию

Отчет по практике по предмету «Программирование»
Информация о работе
  • Тема: Отчет по практике по программированию
  • Количество скачиваний: 5
  • Тип: Отчет по практике
  • Предмет: Программирование
  • Количество страниц: 27
  • Язык работы: Русский язык
  • Дата загрузки: 2021-11-10 20:32:48
  • Размер файла: 615.68 кб
Помогла работа? Поделись ссылкой
Информация о документе

Документ предоставляется как есть, мы не несем ответственности, за правильность представленной в нём информации. Используя информацию для подготовки своей работы необходимо помнить, что текст работы может быть устаревшим, работа может не пройти проверку на заимствования.

Если Вы являетесь автором текста представленного на данной странице и не хотите чтобы он был размешён на нашем сайте напишите об этом перейдя по ссылке: «Правообладателям»

Можно ли скачать документ с работой

Да, скачать документ можно бесплатно, без регистрации перейдя по ссылке:

СОДЕРЖАНИЕ


Динамические массивы        3

Связный список        4

Стэк        6

Очереди        7

Множества        9

Хеш-таблицы        12

Словарь        14

Библиотеки        16








Вариант №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('*');

                        }

                        }

                    }

                }

            }

    }

}




Техника анализа классов эквивалентности:


Классы эквивалентности:


  1. Допустимые значения:


    1.  От -2147483647 до 214748364



Тест 1:



  1. Недопустимые значения:


    1. От - ∞ до -2147483647


Тест 2:



    1. От 2147483647 до + ∞  

Тест 3:















    1.  Деление на 0


Тест 4:



    1. Буквы


Тест 5:





1.4 Пустые поля

Техника анализа граничных значений


Граничное значение







Значение перед границей











Значение после границы










Таблица принятия решений:


Условие

Значение 1

Значение 2

Значение 3

Значение 4

Значение 5

Значение 6

Значение 7

Ввод корректных в первое поле

+

-

+

-

+

-

-

Данные не введены в первую строку

-

+

-

+

-

-

-

Ввод корректных в второе поле

+

-

-

+

-

-

-

Данные не введены во вторую строку

-

+

+

-

-

-

-

Во второй строке стоит 0

-

-

-

-

+

-

-

Ввод некорректных в первое поле ( за диапазоном )

-

-

-

-

-

+

-

Ввод некорректных в второе  поле ( за диапазоном )

-

-

-

-

+

+

-

Ввод некорректных в первое поле (буквы)

-

-

-

-

-

-

+

Ввод некорректных в второе  поле (буквы)

-

-

-

-

-

-

+

Действие






Вычисление произведено успешно

+

-

-

-

-

-

-

Выдаётся ошибка "Ошибка! Введите данные для вычисления"

-

+

+

+

-

-

-

Выдаётся ошибка

"Ошибка! В строке введены символы(буквы), введите числа"

-

-

-

-

-

-

+

Выдаётся ошибка "Число выходит из диапазона от -2147483647 до 2147483647"

-

-

-

-

-

+

-

Выдаётся ошибка "Ошибка! Деление на ноль"

-

-

-

-

+

-

-