C# kodumdaki hata nedir?

Mirza1

Hectopat
Katılım
10 Kasım 2021
Mesajlar
118
Merhaba. Aşağıda C# kodumda smebol üretimi 49088 de duruyor fakat ben 456.976 farklı tek haneli sembol üretmek istiyorum, koddaki hata nerede?

C#:
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading.Tasks;

namespace IkiliMetinVeSembolOlusturma
{
 public partial class Form1 : Form.
 {
 private Dictionary<string, string> ikiliMetinSemboller; // İkili metin ile semboller arasındaki ilişki.
 private Dictionary<string, string> sembolToIkiliMetin; // Sembol ile ikili metinler arasındaki ilişki.
 private string filePath = "ikiliMetinlerVeSemboller.txt"; // Sembol ve ikili metinler dosyası yolu.
 private bool sembolUretimiDevamEdiyor; // Sembol üretim durumu.

 private int ikiliMetinIndex = 0; // İlk döngüdeki ilerleme.
 private int kombinasyonIndex = 0; // İkinci döngüdeki ilerleme.

 // İlk döngüde üretilen semboller için bir liste ekliyoruz.
 private List<string> ilkDovgudeUretilenSemboller = new List<string>();

 private string durumFilePath = "sembolDurumu.txt"; // Durumun kaydedileceği dosya.

 private void DurumuKaydet()
 {
 StringBuilder sb = new StringBuilder();
 sb.AppendLine(ikiliMetinIndex.ToString()); // İlk döngüdeki indeks.
 sb.AppendLine(kombinasyonIndex.ToString()); // İkinci döngüdeki indeks.

 // İlk döngüde üretilen sembolleri kaydet.
 foreach (var sembol in ilkDovgudeUretilenSemboller)
 {
 sb.AppendLine(sembol);
 }

 File.WriteAllText(durumFilePath, sb.ToString());
 }

 private void DurumuYukle()
 {
 if (File.Exists(durumFilePath))
 {
 var lines = File.ReadAllLines(durumFilePath);

 if (lines.Length >= 2)
 {
 ikiliMetinIndex = int.Parse(lines[0]); // İlk döngüdeki indeks.
 kombinasyonIndex = int.Parse(lines[1]); // İkinci döngüdeki indeks.

 ilkDovgudeUretilenSemboller.Clear(); // Eski sembolleri temizle.

 for (int i = 2; i < lines.Length; i++)
 {
 ilkDovgudeUretilenSemboller.Add(lines[i]); // İlk döngüde üretilen sembolleri geri yükle.
 }
 }
 }
 }

 // Sembollerin hızlıca kontrol edilmesi için HashSet eklenir.
 private HashSet<string> mevcutSemboller = new HashSet<string>();

 public Form1()
 {
 InitializeComponent();
 ikiliMetinSemboller = new Dictionary<string, string>();
 sembolToIkiliMetin = new Dictionary<string, string>();
 sembolUretimiDevamEdiyor = false;

 // Program açıldığında sembolleri dosyadan yükle.
 if (File.Exists(filePath))
 {
 SembolleriDosyadanYukle();
 mevcutSemboller = new HashSet<string>(ikiliMetinSemboller.Values); // Mevcut sembolleri HashSet'e aktar.
 }
 else.
 {
 using (File.Create(filePath)) { }
 MessageBox.Show("Sembol dosyası bulunamadı, yeni bir dosya oluşturuldu. Sembolleri oluşturmak için Button1'e basın.");
 }

 DurumuYukle();
 }

 private string SembolUret(string metin)
 {
 int hashCode = IkiliMetinHash(metin);
 int maxUnicodeValue = 0x10FFFF;
 int unicodeValue = hashCode % (maxUnicodeValue + 1);
 char sembol;

 // Geçersiz karakterler ve benzersizlik kontrolü.
 do.
 {
 sembol = (char)unicodeValue;
 hashCode = (hashCode + 1) % 456976;
 unicodeValue = hashCode % (maxUnicodeValue + 1);
 }
 while (
 (unicodeValue >= 0xD800 && unicodeValue <= 0xDFFF) ||
 mevcutSemboller.Contains(sembol.ToString()) ||
 !char.IsLetterOrDigit(sembol)
 );

 // Yeni sembolü HashSet'e ekle.
 mevcutSemboller.Add(sembol.ToString());
 return sembol.ToString();
 }

 private async Task SembolUret()
 {
 await Task.Run(() =>
 {
 StringBuilder sb = new StringBuilder();
 int sembolSayisi = ikiliMetinSemboller.Count;

 for (int firstChar = ikiliMetinIndex; firstChar < 26; firstChar++)
 {
 for (int secondChar = (firstChar == ikiliMetinIndex ? ikiliMetinIndex : 0); secondChar < 26; secondChar++)
 {
 string ikiliMetin = ((char)('a' + firstChar)).ToString() + ((char)('a' + secondChar)).ToString();

 if (ikiliMetinSemboller.ContainsKey(ikiliMetin))
 continue;

 string sembol = SembolUret(ikiliMetin);
 ikiliMetinSemboller[ikiliMetin] = sembol;
 sembolToIkiliMetin[sembol] = ikiliMetin;

 sb.AppendLine($"{ikiliMetin}:{sembol}");

 if (checkBox1.Checked)
 File.AppendAllText(filePath, $"{ikiliMetin}:{sembol}\n");

 ilkDovgudeUretilenSemboller.Add(sembol);
 sembolSayisi++;
 UpdateLabel(sembolSayisi);

 if (!sembolUretimiDevamEdiyor)
 {
 ikiliMetinIndex = firstChar;
 return;
 }
 }
 }

 // 2. Döngü: Sembolleri birleştirerek kombinasyon oluşturma.
 for (int i = kombinasyonIndex; i < ilkDovgudeUretilenSemboller.Count; i++)
 {
 for (int j = 0; j < ilkDovgudeUretilenSemboller.Count; j++)
 {
 string birlesikSembol = ilkDovgudeUretilenSemboller[i] + ilkDovgudeUretilenSemboller[j];

 if (!ikiliMetinSemboller.ContainsKey(birlesikSembol))
 {
 string yeniSembol = SembolUret(birlesikSembol);
 ikiliMetinSemboller[birlesikSembol] = yeniSembol;
 sembolToIkiliMetin[yeniSembol] = birlesikSembol;

 sb.AppendLine($"{birlesikSembol}:{yeniSembol}");

 if (checkBox1.Checked)
 File.AppendAllText(filePath, $"{birlesikSembol}:{yeniSembol}\n");

 sembolSayisi++;
 UpdateLabel(sembolSayisi);

 if (!sembolUretimiDevamEdiyor)
 {
 kombinasyonIndex = i;
 return;
 }
 }
 }
 }

 ikiliMetinIndex = 0;
 kombinasyonIndex = 0;

 if (!checkBox1.Checked)
 SaveSembolleriDosyaya();
 });
 }

 private async void button1_Click(object sender, EventArgs e)
 {
 // Checkbox durumunu değiştir.
 checkBox1.Enabled = !checkBox1.Enabled;

 if (!sembolUretimiDevamEdiyor)
 {
 // Sembol üretimini başlat.
 sembolUretimiDevamEdiyor = true;
 button1.Text = "Durdur"; // Buton metnini değiştir.
 await SembolUret(); // Sembol üretim sürecini başlat.
 }
 else.
 {
 // Sembol üretimini durdur.
 sembolUretimiDevamEdiyor = false;
 button1.Text = "Başlat"; // Buton metnini değiştir.

 // Eğer semboller belleğe kaydediliyorsa, dosyaya yaz.
 if (!checkBox1.Checked)
 {
 SaveSembolleriDosyaya();
 }
 }
 }

 private void UpdateLabel(int sembolSayisi)
 {
 // Formun geçerli olup olmadığını kontrol et.
 if (!this.IsDisposed && this.IsHandleCreated)
 {
 // UI güncellemelerini güvenli bir şekilde yap.
 if (label1.InvokeRequired)
 {
 label1.Invoke(new Action(() => label1.Text = $"Üretilen Sembol Sayısı: {sembolSayisi}"));
 }
 else.
 {
 label1.Text = $"Üretilen Sembol Sayısı: {sembolSayisi}";
 }
 }
 }

 private void SaveSembolleriDosyaya()
 {
 StringBuilder sb = new StringBuilder();
 foreach (var kvp in ikiliMetinSemboller)
 {
 sb.AppendLine($"{kvp.Key}:{kvp.Value}");
 }
 File.WriteAllText(filePath, sb.ToString());
 }

 private void button2_Click(object sender, EventArgs e)
 {
 if (ikiliMetinSemboller.Count == 0)
 {
 MessageBox.Show("Semboller yüklenmedi. Önce Button1'e basın veya geçerli bir sembol dosyası yükleyin.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
 return;
 }

 // TextBox1'den metni al.
 string inputText = textBox1.Text;
 List<string> parcalar = new List<string>();

 // Eğer metin 2 haneden uzunsa, iki karakterli parçalara ayır.
 if (inputText.Length > 2)
 {
 for (int i = 0; i < inputText.Length; i += 2)
 {
 // Son bir karakter kalırsa onu ayrı al.
 if (i + 1 < inputText.Length)
 {
 parcalar.Add(inputText.Substring(i, 2));
 }
 else.
 {
 parcalar.Add(inputText.Substring(i, 1));
 }
 }
 }
 else.
 {
 // Metin 2 haneden kısaysa, tamamını bir parça olarak ekle.
 parcalar.Add(inputText);
 }

 // Parçaları sembollere dönüştür.
 List<string> semboller = new List<string>();
 StringBuilder sb = new StringBuilder(); // Sonucu tutmak için StringBuilder.

 foreach (string parca in parcalar)
 {
 if (ikiliMetinSemboller.ContainsKey(parca))
 {
 string sembol = ikiliMetinSemboller[parca];
 semboller.Add(sembol);
 sb.Append(sembol); // Her sembolü yan yana yaz.
 }
 else.
 {
 MessageBox.Show($"'{parca}' için eşleşen sembol bulunamadı.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
 return;
 }
 }

 // Son sembolü TextBox2'ye yaz.
 textBox2.Text = sb.ToString(); // Yan yana sembolleri TextBox2'ye yaz.
 }

 // Button3'e basıldığında sembolü çözüp orijinal metne dönüştüren metot.
 private void button3_Click(object sender, EventArgs e)
 {
 if (sembolToIkiliMetin.Count == 0)
 {
 MessageBox.Show("Semboller yüklenmedi. Önce Button1'e basın veya geçerli bir sembol dosyası yükleyin.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
 return;
 }

 // TextBox3'den sembolü al.
 string inputSembol = textBox3.Text;
 StringBuilder sb = new StringBuilder();

 // Her sembolü orijinal metne dönüştür.
 foreach (char sembol in inputSembol)
 {
 string sembolStr = sembol.ToString();
 if (sembolToIkiliMetin.ContainsKey(sembolStr))
 {
 sb.Append(sembolToIkiliMetin[sembolStr]);
 }
 else.
 {
 MessageBox.Show($"'{sembolStr}' sembolü için eşleşen ikili metin bulunamadı.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
 return;
 }
 }

 // Son ikili metni TextBox4'e yaz.
 textBox4.Text = sb.ToString();
 }

 private void SembolleriDosyadanYukle()
 {
 var lines = File.ReadAllLines(filePath);
 foreach (var line in lines)
 {
 var parts = line.Split(':');
 if (parts.Length == 2)
 {
 string ikiliMetin = parts[0];
 string sembol = parts[1];

 ikiliMetinSemboller[ikiliMetin] = sembol;
 sembolToIkiliMetin[sembol] = ikiliMetin;
 }
 }

 // Durumları sıfırla.
 ikiliMetinIndex = 0;
 kombinasyonIndex = 0;
 }

 private int IkiliMetinHash(string metin)
 {
 int hash = 0;
 foreach (char c in metin)
 {
 hash = (hash * 31 + c) % 456976; // Basit bir hash fonksiyonu.
 }
 return hash;
 }

 private void checkBox1_CheckedChanged(object sender, EventArgs e)
 {
 // Checkbox işaretli ise metni değiştir.
 if (checkBox1.Checked)
 {
 // Checkbox işaretliyken gösterilecek metin.
 checkBox1.Text = "Veriler dosyaya kaydedilecek.";
 }
 else.
 {
 // Checkbox işaretli değilse gösterilecek metin.
 checkBox1.Text = "Veriler sadece bellekte saklanacak.";
 }
 }

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
 {
 // Checkbox seçilmemişse bellekteki sembolleri dosyaya kaydet.
 if (!checkBox1.Checked)
 {
 SaveSembolleriDosyaya();
 }

 // Durumu kaydet.
 DurumuKaydet();

 Application.DoEvents();

 Application.Exit();
 }

 }
}
 

Kodda bazı sözdizimi hataları bulunuyor. İşte düzeltilmiş hali ve yapılan değişiklikler:

yapılan düzeltmeler​

  1. sözdizimi hataları: bazı yerlerde. İle biten ifadeler; olarak düzeltilmiştir.
  2. kapsayıcı sınıf ve form yapısı: form1 sınıfı form sınıfından türetilirken doğru sözdizimi kullanılmadığı için düzeltilmiştir.
  3. gösterim ve eşitleme hataları: dictionary ve hashset nesneleri tanımlanırken uygun sözdizimi uygulanmıştır.

using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading.Tasks;

namespace IkiliMetinVeSembolOlusturma
{
public partial class Form1 : Form
{
private Dictionary<string, string> ikiliMetinSemboller; // İkili metin ile semboller arasındaki ilişki.
private Dictionary<string, string> sembolToIkiliMetin; // Sembol ile ikili metinler arasındaki ilişki.
private string filePath = "ikiliMetinlerVeSemboller.txt"; // Sembol ve ikili metinler dosyası yolu.
private bool sembolUretimiDevamEdiyor; // Sembol üretim durumu.

private int ikiliMetinIndex = 0; // İlk döngüdeki ilerleme.
private int kombinasyonIndex = 0; // İkinci döngüdeki ilerleme.

// İlk döngüde üretilen semboller için bir liste ekliyoruz.
private List<string> ilkDovgudeUretilenSemboller = new List<string>();

private string durumFilePath = "sembolDurumu.txt"; // Durumun kaydedileceği dosya.

private void DurumuKaydet()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(ikiliMetinIndex.ToString()); // İlk döngüdeki indeks.
sb.AppendLine(kombinasyonIndex.ToString()); // İkinci döngüdeki indeks.

// İlk döngüde üretilen sembolleri kaydet.
foreach (var sembol in ilkDovgudeUretilenSemboller)
{
sb.AppendLine(sembol);
}

File.WriteAllText(durumFilePath, sb.ToString());
}

private void DurumuYukle()
{
if (File.Exists(durumFilePath))
{
var lines = File.ReadAllLines(durumFilePath);

if (lines.Length >= 2)
{
ikiliMetinIndex = int.Parse(lines[0]); // İlk döngüdeki indeks.
kombinasyonIndex = int.Parse(lines[1]); // İkinci döngüdeki indeks.

ilkDovgudeUretilenSemboller.Clear(); // Eski sembolleri temizle.

for (int i = 2; i < lines.Length; i++)
{
ilkDovgudeUretilenSemboller.Add(lines); // İlk döngüde üretilen sembolleri geri yükle.
}
}
}
}

// Sembollerin hızlıca kontrol edilmesi için HashSet eklenir.
private HashSet<string> mevcutSemboller = new HashSet<string>();

public Form1()
{
InitializeComponent();
ikiliMetinSemboller = new Dictionary<string, string>();
sembolToIkiliMetin = new Dictionary<string, string>();
sembolUretimiDevamEdiyor = false;

// Program açıldığında sembolleri dosyadan yükle.
if (File.Exists(filePath))
{
SembolleriDosyadanYukle();
mevcutSemboller = new HashSet<string>(ikiliMetinSemboller.Values); // Mevcut sembolleri HashSet'e aktar.
}
else
{
using (File.Create(filePath)) { }
MessageBox.Show("Sembol dosyası bulunamadı, yeni bir dosya oluşturuldu. Sembolleri oluşturmak için Button1'e basın.");
}

DurumuYukle();
}

private string SembolUret(string metin)
{
int hashCode = IkiliMetinHash(metin);
int maxUnicodeValue = 0x10FFFF;
int unicodeValue = hashCode % (maxUnicodeValue + 1);
char sembol;

// Geçersiz karakterler ve benzers
 

Keşke kod bloğuna yazsaydınız markdown bozmuş kodu
 
Kod:
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading.Tasks;

namespace IkiliMetinVeSembolOlusturma
{
    public partial class Form1 : Form
    {
        private Dictionary<string, string> ikiliMetinSemboller; // İkili metin ile semboller arasındaki ilişki.
        private Dictionary<string, string> sembolToIkiliMetin; // Sembol ile ikili metinler arasındaki ilişki.
        private string filePath = "ikiliMetinlerVeSemboller.txt"; // Sembol ve ikili metinler dosyası yolu.
        private bool sembolUretimiDevamEdiyor; // Sembol üretim durumu.

        private int ikiliMetinIndex = 0; // İlk döngüdeki ilerleme.
        private int kombinasyonIndex = 0; // İkinci döngüdeki ilerleme.

        // İlk döngüde üretilen semboller için bir liste ekliyoruz.
        private List<string> ilkDovgudeUretilenSemboller = new List<string>();

        private string durumFilePath = "sembolDurumu.txt"; // Durumun kaydedileceği dosya.

        private void DurumuKaydet()
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(ikiliMetinIndex.ToString()); // İlk döngüdeki indeks.
            sb.AppendLine(kombinasyonIndex.ToString()); // İkinci döngüdeki indeks.

            // İlk döngüde üretilen sembolleri kaydet.
            foreach (var sembol in ilkDovgudeUretilenSemboller)
            {
                sb.AppendLine(sembol);
            }

            File.WriteAllText(durumFilePath, sb.ToString());
        }

        private void DurumuYukle()
        {
            if (File.Exists(durumFilePath))
            {
                var lines = File.ReadAllLines(durumFilePath);

                if (lines.Length >= 2)
                {
                    ikiliMetinIndex = int.Parse(lines[0]); // İlk döngüdeki indeks.
                    kombinasyonIndex = int.Parse(lines[1]); // İkinci döngüdeki indeks.

                    ilkDovgudeUretilenSemboller.Clear(); // Eski sembolleri temizle.

                    for (int i = 2; i < lines.Length; i++)
                    {
                        ilkDovgudeUretilenSemboller.Add(lines[i]); // İlk döngüde üretilen sembolleri geri yükle.
                    }
                }
            }
        }

        // Sembollerin hızlıca kontrol edilmesi için HashSet eklenir.
        private HashSet<string> mevcutSemboller = new HashSet<string>();

        public Form1()
        {
            InitializeComponent();
            ikiliMetinSemboller = new Dictionary<string, string>();
            sembolToIkiliMetin = new Dictionary<string, string>();
            sembolUretimiDevamEdiyor = false;

            // Program açıldığında sembolleri dosyadan yükle.
            if (File.Exists(filePath))
            {
                SembolleriDosyadanYukle();
                mevcutSemboller = new HashSet<string>(ikiliMetinSemboller.Values); // Mevcut sembolleri HashSet'e aktar.
            }
            else
            {
                using (File.Create(filePath)) { }
                MessageBox.Show("Sembol dosyası bulunamadı, yeni bir dosya oluşturuldu. Sembolleri oluşturmak için Button1'e basın.");
            }

            DurumuYukle();
        }

        private string SembolUret(string metin)
        {
            int hashCode = IkiliMetinHash(metin);
            int maxUnicodeValue = 0x10FFFF;
            int unicodeValue = hashCode % (maxUnicodeValue + 1);
            char sembol;

            // Geçersiz karakterler ve benzersizlik kontrolü.
            do
            {
                sembol = (char)unicodeValue;
                hashCode = (hashCode + 1) % 456976;
                unicodeValue = hashCode % (maxUnicodeValue + 1);
            }
            while (
                (unicodeValue >= 0xD800 && unicodeValue <= 0xDFFF) ||
                mevcutSemboller.Contains(sembol.ToString()) ||
                !char.IsLetterOrDigit(sembol)
            );

            // Yeni sembolü HashSet'e ekle.
            mevcutSemboller.Add(sembol.ToString());
            return sembol.ToString();
        }

        private async Task SembolUret()
        {
            await Task.Run(() =>
            {
                StringBuilder sb = new StringBuilder();
                int sembolSayisi = ikiliMetinSemboller.Count;

                for (int firstChar = ikiliMetinIndex; firstChar < 26; firstChar++)
                {
                    for (int secondChar = (firstChar == ikiliMetinIndex ? ikiliMetinIndex : 0); secondChar < 26; secondChar++)
                    {
                        string ikiliMetin = ((char)('a' + firstChar)).ToString() + ((char)('a' + secondChar)).ToString();

                        if (ikiliMetinSemboller.ContainsKey(ikiliMetin))
                            continue;

                        string sembol = SembolUret(ikiliMetin);
                        ikiliMetinSemboller[ikiliMetin] = sembol;
                        sembolToIkiliMetin[sembol] = ikiliMetin;

                        sb.AppendLine($"{ikiliMetin}:{sembol}");

                        if (checkBox1.Checked)
                            File.AppendAllText(filePath, $"{ikiliMetin}:{sembol}\n");

                        ilkDovgudeUretilenSemboller.Add(sembol);
                        sembolSayisi++;
                        UpdateLabel(sembolSayisi);

                        if (!sembolUretimiDevamEdiyor)
                        {
                            ikiliMetinIndex = firstChar;
                            return;
                        }
                    }
                }

                // 2. Döngü: Sembolleri birleştirerek kombinasyon oluşturma.
                for (int i = kombinasyonIndex; i < ilkDovgudeUretilenSemboller.Count; i++)
                {
                    for (int j = 0; j < ilkDovgudeUretilenSemboller.Count; j++)
                    {
                        string birlesikSembol = ilkDovgudeUretilenSemboller[i] + ilkDovgudeUretilenSemboller[j];

                        if (!ikiliMetinSemboller.ContainsKey(birlesikSembol))
                        {
                            string yeniSembol = SembolUret(birlesikSembol);
                            ikiliMetinSemboller[birlesikSembol] = yeniSembol;
                            sembolToIkiliMetin[yeniSembol] = birlesikSembol;

                            sb.AppendLine($"{birlesikSembol}:{yeniSembol}");

                            if (checkBox1.Checked)
                                File.AppendAllText(filePath, $"{birlesikSembol}:{yeniSembol}\n");

                            sembolSayisi++;
                            UpdateLabel(sembolSayisi);

                            if (!sembolUretimiDevamEdiyor)
                            {
                                kombinasyonIndex = i;
                                return;
                            }
                        }
                    }
                }

                ikiliMetinIndex = 0;
                kombinasyonIndex = 0;

                if (!checkBox1.Checked)
                    SaveSembolleriDosyaya();
            });
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            // Checkbox durumunu değiştir.
            checkBox1.Enabled = !checkBox1.Enabled;

            if (!sembolUretimiDevamEdiyor)
            {
                // Sembol üretimini başlat.
                sembolUretimiDevamEdiyor = true;
                button1.Text = "Durdur"; // Buton metnini değiştir.
                await SembolUret(); // Sembol üretim sürecini başlat.
            }
            else
            {
                // Sembol üretimini durdur.
                sembolUretimiDevamEdiyor = false;
                button1.Text = "Başlat"; // Buton metnini değiştir.

                // Eğer semboller belleğe kaydediliyorsa, dosyaya yaz.
                if (!checkBox1.Checked)
                {
                    SaveSembolleriDosyaya();
                }
            }
        }

        private void UpdateLabel(int sembolSayisi)
        {
            // Formun geçerli olup olmadığını kontrol et.
            if (!this.IsDisposed && this.IsHandleCreated
 
Kod:
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading.Tasks;

namespace IkiliMetinVeSembolOlusturma
{
    public partial class Form1 : Form
    {
        private Dictionary<string, string> ikiliMetinSemboller; // İkili metin ile semboller arasındaki ilişki.
        private Dictionary<string, string> sembolToIkiliMetin; // Sembol ile ikili metinler arasındaki ilişki.
        private string filePath = "ikiliMetinlerVeSemboller.txt"; // Sembol ve ikili metinler dosyası yolu.
        private bool sembolUretimiDevamEdiyor; // Sembol üretim durumu.

        private int ikiliMetinIndex = 0; // İlk döngüdeki ilerleme.
        private int kombinasyonIndex = 0; // İkinci döngüdeki ilerleme.

        private List<string> ilkDovgudeUretilenSemboller = new List<string>();
        private string durumFilePath = "sembolDurumu.txt"; // Durumun kaydedileceği dosya.

        private void DurumuKaydet()
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(ikiliMetinIndex.ToString()); // İlk döngüdeki indeks.
            sb.AppendLine(kombinasyonIndex.ToString()); // İkinci döngüdeki indeks.

            foreach (var sembol in ilkDovgudeUretilenSemboller)
            {
                sb.AppendLine(sembol);
            }

            File.WriteAllText(durumFilePath, sb.ToString());
        }

        private void DurumuYukle()
        {
            if (File.Exists(durumFilePath))
            {
                var lines = File.ReadAllLines(durumFilePath);
                if (lines.Length >= 2)
                {
                    ikiliMetinIndex = int.Parse(lines[0]);
                    kombinasyonIndex = int.Parse(lines[1]);

                    ilkDovgudeUretilenSemboller.Clear();
                    for (int i = 2; i < lines.Length; i++)
                    {
                        ilkDovgudeUretilenSemboller.Add(lines[i]);
                    }
                }
            }
        }

        private HashSet<string> mevcutSemboller = new HashSet<string>();

        public Form1()
        {
            InitializeComponent();
            ikiliMetinSemboller = new Dictionary<string, string>();
            sembolToIkiliMetin = new Dictionary<string, string>();
            sembolUretimiDevamEdiyor = false;

            if (File.Exists(filePath))
            {
                SembolleriDosyadanYukle();
                mevcutSemboller = new HashSet<string>(ikiliMetinSemboller.Values);
            }
            else
            {
                using (File.Create(filePath)) { }
                MessageBox.Show("Sembol dosyası bulunamadı, yeni bir dosya oluşturuldu. Sembolleri oluşturmak için Button1'e basın.");
            }

            DurumuYukle();
        }

        private string SembolUret(string metin)
        {
            int hashCode = IkiliMetinHash(metin);
            int maxUnicodeValue = 0x10FFFF;
            int unicodeValue = hashCode % (maxUnicodeValue + 1);
            char sembol;

            do
            {
                sembol = (char)unicodeValue;
                hashCode = (hashCode + 1) % 456976;
                unicodeValue = hashCode % (maxUnicodeValue + 1);
            }
            while (
                (unicodeValue >= 0xD800 && unicodeValue <= 0xDFFF) ||
                mevcutSemboller.Contains(sembol.ToString()) ||
                !char.IsLetterOrDigit(sembol)
            );

            mevcutSemboller.Add(sembol.ToString());
            return sembol.ToString();
        }

        private async Task SembolUret()
        {
            await Task.Run(() =>
            {
                StringBuilder sb = new StringBuilder();
                int sembolSayisi = ikiliMetinSemboller.Count;

                for (int firstChar = ikiliMetinIndex; firstChar < 26; firstChar++)
                {
                    for (int secondChar = (firstChar == ikiliMetinIndex ? ikiliMetinIndex : 0); secondChar < 26; secondChar++)
                    {
                        string ikiliMetin = ((char)('a' + firstChar)).ToString() + ((char)('a' + secondChar)).ToString();

                        if (ikiliMetinSemboller.ContainsKey(ikiliMetin))
                            continue;

                        string sembol = SembolUret(ikiliMetin);
                        ikiliMetinSemboller[ikiliMetin] = sembol;
                        sembolToIkiliMetin[sembol] = ikiliMetin;

                        sb.AppendLine($"{ikiliMetin}:{sembol}");

                        if (checkBox1.Checked)
                            File.AppendAllText(filePath, $"{ikiliMetin}:{sembol}\n");

                        ilkDovgudeUretilenSemboller.Add(sembol);
                        sembolSayisi++;
                        UpdateLabel(sembolSayisi);

                        if (!sembolUretimiDevamEdiyor)
                        {
                            ikiliMetinIndex = firstChar;
                            return;
                        }
                    }
                }

                for (int i = kombinasyonIndex; i < ilkDovgudeUretilenSemboller.Count; i++)
                {
                    for (int j = 0; j < ilkDovgudeUretilenSemboller.Count; j++)
                    {
                        string birlesikSembol = ilkDovgudeUretilenSemboller[i] + ilkDovgudeUretilenSemboller[j];

                        if (!ikiliMetinSemboller.ContainsKey(birlesikSembol))
                        {
                            string yeniSembol = SembolUret(birlesikSembol);
                            ikiliMetinSemboller[birlesikSembol] = yeniSembol;
                            sembolToIkiliMetin[yeniSembol] = birlesikSembol;

                            sb.AppendLine($"{birlesikSembol}:{yeniSembol}");

                            if (checkBox1.Checked)
                                File.AppendAllText(filePath, $"{birlesikSembol}:{yeniSembol}\n");

                            sembolSayisi++;
                            UpdateLabel(sembolSayisi);

                            if (!sembolUretimiDevamEdiyor)
                            {
                                kombinasyonIndex = i;
                                return;
                            }
                        }
                    }
                }

                ikiliMetinIndex = 0;
                kombinasyonIndex = 0;

                if (!checkBox1.Checked)
                    SaveSembolleriDosyaya();
            });
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            checkBox1.Enabled = !checkBox1.Enabled;

            if (!sembolUretimiDevamEdiyor)
            {
                sembolUretimiDevamEdiyor = true;
                button1.Text = "Durdur";
                await SembolUret();
            }
            else
            {
                sembolUretimiDevamEdiyor = false;
                button1.Text = "Başlat";

                if (!checkBox1.Checked)
                {
                    SaveSembolleriDosyaya();
                }
            }
        }

        private void UpdateLabel(int sembolSayisi)
        {
            if (!this.IsDisposed && this.IsHandleCreated)
            {
                if (label1.InvokeRequired)
                {
                    label1.Invoke(new Action(() => label1.Text = $"Üretilen Sembol Sayısı: {sembolSayisi}"));
                }
                else
                {
                    label1.Text = $"Üretilen Sembol Sayısı: {sembolSayisi}";
                }
            }
        }

        private void SaveSembolleriDosyaya()
        {
            StringBuilder sb = new StringBuilder();
            foreach (var kvp in ikiliMetinSemboller)
            {
                sb.AppendLine($"{kvp.Key}:{kvp.Value}");
            }
            File.WriteAllText(filePath, sb.ToString());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (ikiliMetinSemboller.Count == 0)
            {
                MessageBox.Show("Semboller yüklenmedi. Önce Button1'e basın veya geçerli bir sembol dosyası yükleyin.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string inputText = textBox1.Text;
            List<string> parcalar = new List<string>();

            if (inputText.Length > 2)
            {
                for (int i = 0; i < inputText.Length; i += 2)
                {
                    if (i + 1 < inputText.Length)
                    {
                        parcalar.Add(inputText.Substring(i, 2));
                    }
                    else
                    {
                        parcalar.Add(inputText.Substring(i, 1));
                    }
                }
            }
            else
            {
                parcalar.Add(inputText);
            }

            List<string> semboller = new List<string>();
            StringBuilder sb = new StringBuilder();

            foreach (string parca in parcalar)
            {
                if (ikiliMetinSemboller.ContainsKey(parca))
                {
                    string sembol = ikiliMetinSemboller[parca];
                    semboller.Add(sembol);
                    sb.Append(sembol);
                }
                else
                {
                    MessageBox.Show($"'{parca}' için eşleşen sembol bulunamadı.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            textBox2.Text = sb.ToString();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (sembolToIkiliMetin.Count == 0)
            {
                MessageBox.Show("Semboller yüklenmedi. Önce Button1'e basın veya geçerli bir sembol dosyası yükleyin.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string inputSembol = textBox3.Text;
            StringBuilder sb = new StringBuilder();

            foreach (char sembol in inputSembol)
            {
                string sembolStr = sembol.ToString();
                if (sembolToIkiliMetin.ContainsKey(sembolStr))
                {
                    sb.Append(sembolToIkiliMetin[sembolStr]);
                }
                else
                {
                    MessageBox.Show($"'{sembolStr}' sembolü için eşleşen ikili metin bulunamadı.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            textBox4.Text = sb.ToString();
        }

        private void SembolleriDosyadanYukle()
        {
            var lines = File.ReadAllLines(filePath);
            foreach (var line in lines)
            {
                var parts = line.Split(':');
                if (parts.Length == 2)
                {
                    string ikiliMetin = parts[0];
                    string sembol = parts[1];

                    ikiliMetinSemboller[ikiliMetin] = sembol;
                    sembolToIkiliMetin[sembol] = ikiliMetin;
                }
            }

            ikiliMetinIndex = 0;
            kombinasyonIndex = 0;
        }

        private int IkiliMetinHash(string metin)
        {
            int hash = 0;
            foreach (char c in metin)
            {
                hash = (hash * 31 + c) % 456976;
            }
            return hash;
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                checkBox1.Text = "Veriler dosyaya kaydedilecek.";
            }
            else
            {
                checkBox1.Text = "Veriler sadece bellekte saklanacak.";
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!checkBox1.Checked)
            {
                SaveSembolleriDosyaya();
            }

            DurumuKaydet();
            Application.DoEvents();
            Application.Exit();
        }
    }
}
 
Atılan kodları test ettim ve yine 49088 de sebol üretimi duruyor.
 
Atılan kodları test ettim ve yine 49088 de sebol üretimi duruyor.

Dostum benim kodda hata var mı?

Kod:
using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading.Tasks;

namespace IkiliMetinVeSembolOlusturma
{
    public partial class Form1 : Form
    {
        private Dictionary<string, string> ikiliMetinSemboller; // İkili metin ile semboller arasındaki ilişki.
        private Dictionary<string, string> sembolToIkiliMetin; // Sembol ile ikili metinler arasındaki ilişki.
        private string filePath = "ikiliMetinlerVeSemboller.txt"; // Sembol ve ikili metinler dosyası yolu.
        private bool sembolUretimiDevamEdiyor; // Sembol üretim durumu.

        private int ikiliMetinIndex = 0; // İlk döngüdeki ilerleme.
        private int kombinasyonIndex = 0; // İkinci döngüdeki ilerleme.

        // İlk döngüde üretilen semboller için bir liste ekliyoruz.
        private List<string> ilkDovgudeUretilenSemboller = new List<string>();

        private string durumFilePath = "sembolDurumu.txt"; // Durumun kaydedileceği dosya.

        private void DurumuKaydet()
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(ikiliMetinIndex.ToString()); // İlk döngüdeki indeks.
            sb.AppendLine(kombinasyonIndex.ToString()); // İkinci döngüdeki indeks.

            // İlk döngüde üretilen sembolleri kaydet.
            foreach (var sembol in ilkDovgudeUretilenSemboller)
            {
                sb.AppendLine(sembol);
            }

            File.WriteAllText(durumFilePath, sb.ToString());
        }

        private void DurumuYukle()
        {
            if (File.Exists(durumFilePath))
            {
                var lines = File.ReadAllLines(durumFilePath);

                if (lines.Length >= 2)
                {
                    ikiliMetinIndex = int.Parse(lines[0]); // İlk döngüdeki indeks.
                    kombinasyonIndex = int.Parse(lines[1]); // İkinci döngüdeki indeks.

                    ilkDovgudeUretilenSemboller.Clear(); // Eski sembolleri temizle.

                    for (int i = 2; i < lines.Length; i++)
                    {
                        ilkDovgudeUretilenSemboller.Add(lines[i]); // İlk döngüde üretilen sembolleri geri yükle.
                    }
                }
            }
        }

        // Sembollerin hızlıca kontrol edilmesi için HashSet eklenir.
        private HashSet<string> mevcutSemboller = new HashSet<string>();

        public Form1()
        {
            InitializeComponent();
            ikiliMetinSemboller = new Dictionary<string, string>();
            sembolToIkiliMetin = new Dictionary<string, string>();
            sembolUretimiDevamEdiyor = false;

            // Program açıldığında sembolleri dosyadan yükle.
            if (File.Exists(filePath))
            {
                SembolleriDosyadanYukle();
                mevcutSemboller = new HashSet<string>(ikiliMetinSemboller.Values); // Mevcut sembolleri HashSet'e aktar.
            }
            else
            {
                using (File.Create(filePath)) { }
                MessageBox.Show("Sembol dosyası bulunamadı, yeni bir dosya oluşturuldu. Sembolleri oluşturmak için Button1'e basın.");
            }

            DurumuYukle();
        }

        private string SembolUret(string metin)
        {
            int hashCode = IkiliMetinHash(metin);
            int maxUnicodeValue = 0x10FFFF;
            int unicodeValue = hashCode % (maxUnicodeValue + 1);
            char sembol;

            // Geçersiz karakterler ve benzersizlik kontrolü.
            do
            {
                sembol = (char)unicodeValue;
                hashCode = (hashCode + 1) % 456976;
                unicodeValue = hashCode % (maxUnicodeValue + 1);
            }
            while (
                (unicodeValue >= 0xD800 && unicodeValue <= 0xDFFF) ||
                mevcutSemboller.Contains(sembol.ToString()) ||
                !char.IsLetterOrDigit(sembol)
            );

            // Yeni sembolü HashSet'e ekle.
            mevcutSemboller.Add(sembol.ToString());
            return sembol.ToString();
        }

        private async Task SembolUret()
        {
            await Task.Run(() =>
            {
                StringBuilder sb = new StringBuilder();
                int sembolSayisi = ikiliMetinSemboller.Count;

                for (int firstChar = ikiliMetinIndex; firstChar < 26; firstChar++)
                {
                    for (int secondChar = (firstChar == ikiliMetinIndex ? ikiliMetinIndex : 0); secondChar < 26; secondChar++)
                    {
                        string ikiliMetin = ((char)('a' + firstChar)).ToString() + ((char)('a' + secondChar)).ToString();

                        if (ikiliMetinSemboller.ContainsKey(ikiliMetin))
                            continue;

                        string sembol = SembolUret(ikiliMetin);
                        ikiliMetinSemboller[ikiliMetin] = sembol;
                        sembolToIkiliMetin[sembol] = ikiliMetin;

                        sb.AppendLine($"{ikiliMetin}:{sembol}");

                        if (checkBox1.Checked)
                            File.AppendAllText(filePath, $"{ikiliMetin}:{sembol}\n");

                        ilkDovgudeUretilenSemboller.Add(sembol);
                        sembolSayisi++;
                        UpdateLabel(sembolSayisi);

                        if (!sembolUretimiDevamEdiyor)
                        {
                            ikiliMetinIndex = firstChar;
                            return;
                        }
                    }
                }

                for (int i = kombinasyonIndex; i < ilkDovgudeUretilenSemboller.Count; i++)
                {
                    for (int j = 0; j < ilkDovgudeUretilenSemboller.Count; j++)
                    {
                        string birlesikSembol = ilkDovgudeUretilenSemboller[i] + ilkDovgudeUretilenSemboller[j];

                        if (!ikiliMetinSemboller.ContainsKey(birlesikSembol))
                        {
                            string yeniSembol = SembolUret(birlesikSembol);
                            ikiliMetinSemboller[birlesikSembol] = yeniSembol;
                            sembolToIkiliMetin[yeniSembol] = birlesikSembol;

                            sb.AppendLine($"{birlesikSembol}:{yeniSembol}");

                            if (checkBox1.Checked)
                                File.AppendAllText(filePath, $"{birlesikSembol}:{yeniSembol}\n");

                            sembolSayisi++;
                            UpdateLabel(sembolSayisi);

                            if (!sembolUretimiDevamEdiyor)
                            {
                                kombinasyonIndex = i;
                                return;
                            }
                        }
                    }
                }

                ikiliMetinIndex = 0;
                kombinasyonIndex = 0;

                if (!checkBox1.Checked)
                    SaveSembolleriDosyaya();
            });
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            checkBox1.Enabled = !checkBox1.Enabled;

            if (!sembolUretimiDevamEdiyor)
            {
                sembolUretimiDevamEdiyor = true;
                button1.Text = "Durdur";
                await SembolUret();
            }
            else
            {
                sembolUretimiDevamEdiyor = false;
                button1.Text = "Başlat";

                if (!checkBox1.Checked)
                    SaveSembolleriDosyaya();
            }
        }

        private void UpdateLabel(int sembolSayisi)
        {
            if (!this.IsDisposed && this.IsHandleCreated)
            {
                if (label1.InvokeRequired)
                    label1.Invoke(new Action(() => label1.Text = $"Üretilen Sembol Sayısı: {sembolSayisi}"));
                else
                    label1.Text = $"Üretilen Sembol Sayısı: {sembolSayisi}";
            }
        }

        private void SaveSembolleriDosyaya()
        {
            StringBuilder sb = new StringBuilder();
            foreach (var kvp in ikiliMetinSemboller)
                sb.AppendLine($"{kvp.Key}:{kvp.Value}");

            File.WriteAllText(filePath, sb.ToString());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (ikiliMetinSemboller.Count == 0)
            {
                MessageBox.Show("Semboller yüklenmedi. Önce Button1'e basın veya geçerli bir sembol dosyası yükleyin.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string inputText = textBox1.Text;
            List<string>
 
Dostum kodun yarım button2 den sonrası yok?
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…