C# uzmanlari konuya
2
●222
- 13-07-2023, 00:52:56
using System; using System.Collections.Generic; using System.Windows.Forms; namespace BellekOrganizasyonu { public partial class Form1 : Form { private const int MemorySize = 16; // Bellek boyutu (MB) private bool[] memoryBlocks; // Belleği temsil eden dizi private List<int> programNumbers; // Program numaralarını tutan liste public Form1() { InitializeComponent(); memoryBlocks = new bool[MemorySize]; programNumbers = new List<int>(); } private void btnGoster_Click(object sender, EventArgs e) { lbBellek.Items.Clear(); for (int i = 0; i < MemorySize; i++) { if (memoryBlocks[i]) lbBellek.Items.Add("X"); else lbBellek.Items.Add(""); } } private void btnEkle_Click(object sender, EventArgs e) { int uzunluk, pozisyon; if (int.TryParse(tbxUzun.Text, out uzunluk) && int.TryParse(tbxPoz.Text, out pozisyon)) { if (uzunluk <= 0 || uzunluk % 1 != 0) { MessageBox.Show("Geçersiz uzunluk değeri!"); return; } if (pozisyon < 0 || pozisyon >= MemorySize) { MessageBox.Show("Geçersiz pozisyon değeri!"); return; } if (pozisyon + uzunluk > MemorySize) { MessageBox.Show("Uygun değil. Yeterli boş alan yok!"); return; } for (int i = pozisyon; i < pozisyon + uzunluk; i++) { if (memoryBlocks[i]) { MessageBox.Show("Uygun değil. Yeterli boş alan yok!"); return; } } for (int i = pozisyon; i < pozisyon + uzunluk; i++) { memoryBlocks[i] = true; } int programNumber = programNumbers.Count + 1; programNumbers.Add(programNumber); cmbProgram.Items.Add(programNumber); MessageBox.Show("Bellek tahsisi yapıldı."); } else { MessageBox.Show("Geçersiz giriş değerleri!"); } } private void btnBestfit_Click(object sender, EventArgs e) { int uzunluk; if (int.TryParse(tbxUzun.Text, out uzunluk)) { if (uzunluk <= 0 || uzunluk % 1 != 0) { MessageBox.Show("Geçersiz uzunluk değeri!"); return; } int bestFitPosition = -1; int bestFitSize = int.MaxValue; int currentSize = 0; int bestFitIndex = -1; for (int i = 0; i < MemorySize; i++) { if (memoryBlocks[i]) { currentSize = 0; } else { currentSize++; if (currentSize >= uzunluk && currentSize < bestFitSize) { bestFitSize = currentSize; bestFitPosition = i - currentSize + 1; bestFitIndex = i; } } } if (bestFitPosition == -1) { MessageBox.Show("Uygun değil. Yeterli boş alan yok!"); return; } for (int i = bestFitPosition; i < bestFitPosition + uzunluk; i++) { memoryBlocks[i] = true; } int programNumber = programNumbers.Count + 1; programNumbers.Add(programNumber); cmbProgram.Items.Add(programNumber); MessageBox.Show($"Bellek tahsisi yapıldı. En uygun pozisyon: {bestFitIndex + 1}"); } else { MessageBox.Show("Geçersiz giriş değeri!"); } } } }