Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг готовой программы.

Читайте также:
  1. В2. Стоимостные показатели производственной программы.
  2. Ведомость 60-АПК аналитического учета движения готовой продукции, реализации товаров, продукции и услуг
  3. Ведомственные антикоррупционные программы.
  4. Возможно составление индивидуальной экскурсионной программы.
  5. Глава 4. Простые (линейные) программы. Операторы ввода-вывода. Переменные величины
  6. Доходов кабельных сетей поступает от абонентов (арендная плата) и от подписчиков на специализированные платные программы.
  7. Ж. Расчет складов готовой продукции.

Скриншот программы с ненайденным элементом.

Скриншот программы с найденным элементом.

Листинг готовой программы.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

 

namespace Steckiy_SPO_Var21

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

}

string[] file;

string element;

string [,] mass = new string[10,10];

private void Form1_Load(object sender, EventArgs e)

{

for (int y = 0; y < 10; y++)

{

for (int k = 0; k < 10; k++)

mass[k, y] = " ";

}

listBox1.Items.Clear();

 

 

}

int mesto;

int kollis = 0;

public void Write(string element) // функция записи элемента в таблицу

{

char bykva1, bykva2;

bykva1 = element[element.Length - 1];

bykva2 = element[element.Length / 2 - 1];

mesto = ((int)bykva1 + (int)bykva2)%10;

if (mass[mesto, 0] == " ")

{

mass[mesto, 0] = element;

}

else //коллизия

{

for (int j = 0; j < 10; j++)

{

if (mass[mesto, j] == " ")

{

kollis++;

mass[mesto, j] = element;

 

Sort();//функция сортировки возникаюшая после записи

break;

}

}

}

listBox1.Items.Add(element);

}

 

private void button1_Click(object sender, EventArgs e) //загрузка файла

{

for (int y = 0; y < 10; y++)

{

for (int k = 0; k < 10; k++)

mass[k, y] = " ";

}

listBox1.Items.Clear();

 

file = File.ReadAllLines("1.txt");

for (int i = 0; i < file.Length; i++)

{

element = file[i];

Write(element);// запись элемента в таблицу

}

vivod();

label3.Text = "Колличество коллизий: " + kollis.ToString();

}

public void Sort() //функция сортировки для создания упорядоченного списка

{

string per, per2,vrem;

char el,el2;

int i = 0;

int j = 1;

while (i < 9)

{

 

while(j<10)

{

per = mass[mesto, i];

el = per[0];

per2 = mass[mesto, j];

el2 = per2[0];

if (mass[mesto, j] == " ")

break;

m1: if (el > el2)

{

vrem = mass[mesto, i];

mass[mesto, i] = mass[mesto,j ];

mass[mesto, j ] = vrem;

}

else if (el == el2)

{

el = per[1];

el2 = per2[1];

goto m1;

}

j++;

}

i++;

j = i + 1;

}

 

}

public void vivod() // функция вывода содержимого таблицы

{

for (int y = 0; y < 10; y++)

{

for (int k = 0; k < 10; k++)

{

if (mass[y, k]!=" ")

listBox2.Items.Add(y.ToString()+"."+k.ToString()+" "+mass[y,k]);

}

}

}

string found;

int srav = 0;

private void button2_Click(object sender, EventArgs e) // при нажатии на кнопку "Найти!" мы начинаем Логарифмический поиск

{

found = textBox1.Text; // загружаем элемент в переменную

bool nay = false; // изначально переменная отвечающая за результат поиска =false то есть не найдена.

int n = 10; // колличесвто элементов

int prov; // переменная которая поможет поиску

char bykva1, bykva2; // буквы

bykva1 = found[found.Length - 1];// берём последнюю букву

bykva2 = found[found.Length / 2 - 1]; // берём центральную букву так как сказано по заданию

mesto = ((int)bykva1 + (int)bykva2) % 10; // определяем место в таблице символов

int b1 = 0;

if (mass[mesto, 0] == found) // если у нас элемент не найден в первоначальной таблице, то возникает коллизия в которой мы применяем ЛОГАРИФМИЧЕСКИЙ ПОИСК

{

nay = true; // если элемент совпал, то мы нашли его

}

else // если же не совпал, то начинаем поиск

{

m2: if (n!= 1 && (n/2)<11)//проверка, чтобы наш центр поиска был больше 1 и меньше 11, то есть не выходил за рамки таблицы

{

prov = n / 2 + 1; // первый элемент в поиске, мы берём по формуле N/2+1, то есть из центра таблицы

if (mass[mesto, prov] == found) // сравниваем элементы

nay = true; // если нашли то правда

else

{

bykva1 = mass[mesto, prov][0]; // если не нашли то сравниваем бувы искомого слова и того которое находится на этой позиции

bykva2 = found[0];

if (bykva1 == bykva2) //если слова начинаются с одной буквы, тогда смотрим по 2 букве

{

b1++;

bykva1 = mass[mesto, prov][b1];

bykva2 = found[b1];

}

 

if (bykva1 > bykva2 || mass[mesto, prov] == " ")//если мое слово выше, тогда мы N делим пополам, к примеру было 10 стало 5 и центр поиска сместился влево

{

n = n / 2;

srav++;

goto m2;// возвращаемся к метке сравнения слов

}

else if (bykva1 < bykva2) // если слово больше того которое находится в таблице, тогда центр смешаем вправо

{

n += n / 2;

srav++;

goto m2;// возвращаемся к метке сравнения слов

}

}

 

}

}

if (nay) //в зависимости от переменной мы находим слово или нет

label5.Text = "Элемент найден!";

else label5.Text="Элемент не найден!";

label4.Text ="Колличесвто сравнений: "+srav.ToString();

 

}

}

}

 


Дата добавления: 2015-11-14; просмотров: 44 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Рекомендации по использованию методов оптимизации в задачах электроники СВЧ и краткие выводы| А) Регістрової адресації.

mybiblioteka.su - 2015-2024 год. (0.012 сек.)