Читайте также:
|
|
Скриншот программы с ненайденным элементом.
Скриншот программы с найденным элементом.
Листинг готовой программы.
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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Рекомендации по использованию методов оптимизации в задачах электроники СВЧ и краткие выводы | | | А) Регістрової адресації. |