№1 Лабораторная работа (2). Отчет по лабораторной работе 1 по Технологиям и методам программирования
![]()
|
|
Содержимое файла Program.cs |
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; namespace programming_technologies_labwork1 { class Program { static void Main(string[] args) { Interface userInterface = new Interface(); userInterface.Run(); } } } |
Содержимое файлаVirtualMemory.cs |
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; namespace programming_technologies_labwork1 { public class VirtualMemory { const string name = "Page"; Page page; long arraySize; long countPage; public VirtualMemory(long arraySize) { if (arraySize <= 0) throw new Exception("Размер массива не может быть отрицательным или равным 0!"); this.arraySize = arraySize; this.countPage = arraySize / Page.size; Page[] pages = new Page[countPage + 1]; for (int i = 0; i <= this.countPage; i++) { pages[i] = new Page(i); BinarySerializble(name + i.ToString() + ".dat" , pages[i]); } } VirtualMemory() { for (int i = 0; i <= countPage; i++) { File.Delete(name + i.ToString() + ".dat"); } } public void writeValue(int index, int value) { if (index >= arraySize) throw new Exception("Индекс за пределами массива!\n"); int numberPage = index/Page.size; page = BinaryDeserializble(name + numberPage.ToString() + ".dat"); if (page.bitmap[index % Page.size] == true) { throw new Exception("В ячейку уже записанно значение!\n"); } else { page.data[index % Page.size] = value; page.bitmap[index % Page.size] = true; } BinarySerializble(name + numberPage.ToString() + ".dat", page); } public int readValue(int index) { if (index >= arraySize) throw new Exception("Индекс за пределами массива!\n"); int numberPage = index / Page.size; page = BinaryDeserializble(name + numberPage.ToString() + ".dat"); return page.data[index % Page.size]; } public void deleteValue(int index) { if (index >= arraySize) throw new Exception("Индекс за пределами массива!\n"); int numberPage = index / Page.size; page = BinaryDeserializble(name + numberPage.ToString() + ".dat"); page.data[index % Page.size] = 0; page.bitmap[index % Page.size] = false; BinarySerializble(name + numberPage.ToString() + ".dat", page); } public void overwriteValue(int index, int value) { if (index >= arraySize) throw new Exception("Индекс за пределами массива!\n"); int numberPage = index / Page.size; page = BinaryDeserializble(name + numberPage.ToString() + ".dat"); if(page.bitmap[index % Page.size] == false) { throw new Exception("В ячейку не было ничего записанно!\n"); } else { page.data[index % Page.size] = value; } BinarySerializble(name + numberPage.ToString() + ".dat", page); } public void printArray() { this.countPage = arraySize / Page.size; for (int i = 0; i <= this.countPage; i++) { page = BinaryDeserializble(name + i.ToString() + ".dat"); Console.WriteLine(""); for (int j = 0; j < Page.size; j++) { if (j % 10 == 0 && j != 0) Console.Write("\n"); Console.Write(page.data[j] + " "); } Console.WriteLine(""); } } public void printBitmap() { long countPage = arraySize / Page.size; for (int i = 0; i <= countPage; i++) { page = BinaryDeserializble(name + i.ToString() + ".dat"); Console.WriteLine(""); for (int j = 0; j < Page.size; j++) { if (j % 10 == 0 && j != 0) Console.Write(""); Console.Write(Convert.ToInt32(page.bitmap[j]) + " "); } Console.WriteLine(""); } } private void BinarySerializble(string path, Page page) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate)) { formatter.Serialize(fs, page); } } private Page BinaryDeserializble(string path) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate)) { return (Page)formatter.Deserialize(fs); } } } } |
Содержимое файла Page.cs |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace programming_technologies_labwork1 { [Serializable] public class Page { public static int size = 128; public int number; public int[] data; public bool[] bitmap; public Page(int number) { this.number = number; data = new int[size]; bitmap = new bool[size]; } } } |
Содержимое файла Interface.cs |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace programming_technologies_labwork1 { class Interface { private VirtualMemory virtualMemory; public Interface() { this.virtualMemory = null; } private void TakeAction(VirtualMemory virtualMemory) { int action, index, value; string menu = "1 - Записать значение по индексу\n2 - Прочитать значение по индексу в переменную\n" + "3 - Удалить значение по индексу\n4 - Перезаписать значение по индексу\n" + "5 - Вывести массив на экран\n0 - Выйти\n"; Console.WriteLine(menu); bool flag = true; while (flag) { action = Convert.ToInt32(Console.ReadLine()); switch (action) { case 1: Console.Write("Индекс = "); index = Convert.ToInt32(Console.ReadLine()); Console.Write("Значение = "); value = Convert.ToInt32(Console.ReadLine()); try { virtualMemory.writeValue(index, value); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("\n" + menu); break; case 2: Console.Write("Индекс = "); index = Convert.ToInt32(Console.ReadLine()); try { value = virtualMemory.readValue(index); Console.WriteLine("Значение = {0}\n", value); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("\n" + menu); break; case 3: Console.Write("Индекс = "); index = Convert.ToInt32(Console.ReadLine()); try { virtualMemory.deleteValue(index); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("\n" + menu); break; case 4: Console.Write("Индекс = "); index = Convert.ToInt32(Console.ReadLine()); Console.Write("Значение = "); value = Convert.ToInt32(Console.ReadLine()); try { virtualMemory.overwriteValue(index, value); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("\n" + menu); break; case 5: virtualMemory.printArray(); break; case 0: flag = false; break; default: Console.WriteLine("Неверные данные\n"); break; } } } private VirtualMemory CreateArray() { VirtualMemory virtualMemory = null; int action = 0; Console.WriteLine("1 - Создать массив\n0 - Выйти\n"); bool flag = true; while (flag) { action = Convert.ToInt32(Console.ReadLine()); switch (action) { case 0: flag = false; break; case 1: Console.WriteLine("Введите размер массива\n"); int arraySize = Convert.ToInt32(Console.ReadLine()); ; try { virtualMemory = new VirtualMemory(arraySize); flag = false; } catch (Exception ex) { Console.WriteLine(ex.Message); } break; default: Console.WriteLine("Неверные данные\n"); break; } } return virtualMemory; } public void Run() { try { virtualMemory = CreateArray(); if (virtualMemory != null) { TakeAction(virtualMemory); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } } |