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; namespace Search { public partial class Form1 : Form { int[] pole = new int[100000]; int pocet = 0; int index = 0; int index_n = 0; int key = 0; int key_n = 0; StringBuilder sb = new StringBuilder(); Random generator = new Random(); bool Start = false; //Algoritmus normální public static int Nase_BinarySearch(int[] array, int vlevo, int vpravo, int klic) { int stred; while (vlevo <= vpravo) { stred = (vlevo + vpravo) / 2; if (klic == array[stred]) { return stred; } else { if (klic < array[stred]) { vpravo = stred - 1; } else { vlevo = stred + 1; } } } return -1; } public Form1() { InitializeComponent(); } private void textBox_gen_KeyPress(object sender, KeyPressEventArgs e) { if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || (e.KeyChar == 8))) { e.KeyChar = Convert.ToChar(0); } } private void textBox_key_KeyPress(object sender, KeyPressEventArgs e) { if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || (e.KeyChar == 8))) { e.KeyChar = Convert.ToChar(0); } } private void Form1_Load(object sender, EventArgs e) { textBox_gen.Text = ""; textBox_gen.Focus(); textBox_key.Text = ""; textBox_data.Clear(); listBox_vystup.Items.Clear(); sb.Clear(); } private void button_vymaz_Click(object sender, EventArgs e) { textBox_gen.Text = ""; textBox_gen.Focus(); textBox_key.Text = ""; textBox_data.Clear(); listBox_vystup.Items.Clear(); sb.Clear(); Start = false; } private void button_gen_Click(object sender, EventArgs e) { sb.Clear(); textBox_data.Clear(); listBox_vystup.Items.Clear(); Start = false; pocet = 0; try { if (textBox_gen.Text == "") { MessageBox.Show("Musíte zadat počet dat!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox_gen.Focus(); return; } else { pocet = Convert.ToInt32(textBox_gen.Text); } } catch (OverflowException) { MessageBox.Show("Zadejte číslo do 100000!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox_gen.Text = ""; textBox_gen.Focus(); return; } if (pocet <= 100000) { for (int i = 0; i < pocet; i++) { pole[i] = 0; } for (int i = 0; i < pocet; i++) { pole[i] = generator.Next(10, 1000000); } Array.Sort(pole, 0, pocet); char pad = ' '; Start = true; for(int i = 0; i < pocet; i++) { sb.AppendLine("["+i.ToString().PadLeft(5,pad)+"] = "+pole[i].ToString().PadLeft(8,pad)); } textBox_data.Text = sb.ToString(); } else { MessageBox.Show("Zadejte číslo do 100000!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox_gen.Text = ""; textBox_gen.Focus(); return; } } private void textBox_gen_TextChanged(object sender, EventArgs e) { textBox_data.Clear(); listBox_vystup.Items.Clear(); sb.Clear(); Start = false; } private void button_1_Click(object sender, EventArgs e) { string vystup = ""; if ((textBox_key.Text == "") || (Start == false)) { MessageBox.Show("Musíte zadat klíč!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { try { key = Convert.ToInt32(textBox_key.Text); } catch (OverflowException) { MessageBox.Show("Klíč je mimo oblast zadaných dat!\n Zadejte jiný klíč!", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox_key.Text = ""; textBox_key.Focus(); return; } index = Array.BinarySearch(pole, 0, pocet, key); if (index < 0) { vystup = " KLÍČ NENALEZEN! (metoda Array.BinarySearch)"; listBox_vystup.Items.Add(""); listBox_vystup.Items.Add(vystup); } else { vystup = " INDEX KLÍČE v setříděném poli = " + index.ToString() + " (metoda Array.BinarySearch)"; listBox_vystup.Items.Add(""); listBox_vystup.Items.Add(vystup); } } } private void textBox_key_TextChanged(object sender, EventArgs e) { listBox_vystup.Items.Clear(); } private void button_2_Click(object sender, EventArgs e) { string vystup = ""; if ((textBox_key.Text == "") || (Start == false)) { MessageBox.Show("Musíte zadat klíč!", "Varování", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { try { key_n = Convert.ToInt32(textBox_key.Text); } catch (OverflowException) { MessageBox.Show("Klíč je mimo oblast zadaných dat!\n Zadejte jiný klíč!", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox_key.Text = ""; textBox_key.Focus(); return; } index_n = Nase_BinarySearch(pole, 0, pocet, key); if (index_n < 0) { vystup = " KLÍČ NENALEZEN! (metoda Array.BinarySearch)"; listBox_vystup.Items.Add(""); listBox_vystup.Items.Add(vystup); } else { vystup = " INDEX KLÍČE v setříděném poli = " + index_n.ToString() + " (metoda Nase_BinarySearch)"; listBox_vystup.Items.Add(""); listBox_vystup.Items.Add(vystup); } } } } }