You need to enable JavaScript to run this app.

Skip to main content

C# Asal Sayı Programı

C# Asal Sayı Programı

Posting Freak
C# Asal Sayı Programı
Kullanılan C# kavramları : Asynchronous Threading, Windows Forms, Components, Exception Handling, etc // Prime Numbers. © 2005 Halil Özgür - halil.ozgur [at] gmail.com

using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Threading;
using System********s.Forms;

namespace isPrime
{
/// <summary>
/// isPrimeForm : Main and the only Form.
/// </summary>
public class isPrimeForm : System********s.Forms.Form
{
#region Declarations, Ctor & Dispose()

private System.Threading.Thread PrimeTesterThread;
private delegate void testCompleteHandler(bool isPrime,ulong catched);
private event testCompleteHandler testComplete;

private System.Threading.Thread RangeTesterThread;
private delegate void rangeTestCompleteHandler();
private event rangeTestCompleteHandler rangeTestComplete;

private decimal number = 0m , rangeStart = 0m , rangeEnd = 0m , ct = 0m;
private string firstLine = "";

private System********s.Forms.GroupBox groupBoxInput;
private System********s.Forms.ProgressBar progressBar;
private System********s.Forms.TextBox textBoxInput;
private System********s.Forms.Button buttonClear;
private System********s.Forms.TabControl tabControl;
private System********s.Forms.TabPage tabPageSingle;
private System********s.Forms.TabPage tabPageRange;
private System********s.Forms.TextBox textBoxRangeStart;
private System********s.Forms.TextBox textBoxRangeEnd;
private System********s.Forms.Label labelRangeTo;
private System********s.Forms.Label labelRangeFrom;
private System********s.Forms.LinkLabel linkLabel;
private System********s.Forms.Label labelInfoSingle;
private System********s.Forms.Button buttonTest;
private System********s.Forms.Button buttonStart;
private System********s.Forms.TextBox textBoxRangeResults;
private System********s.Forms.TextBox textBoxStatusSingle;
private System********s.Forms.Button buttonCancelRange;
private System********s.Forms.ProgressBar progressBarRange;
private System********s.Forms.Button buttonSave;
private System********s.Forms.SaveFileDialog saveFileDialog;
private System********s.Forms.Label labelNumberCount;
private System********s.Forms.CheckBox checkBoxNC;
private System********s.Forms.Button buttonCancel;

public isPrimeForm()
{
InitializeComponent();
this.testComplete += new testCompleteHandler(this.testHandler);
this.rangeTestComplete += new rangeTestCompleteHandler(this.rangeTestHandler);
}

protected override void Dispose( bool disposing )
{
if ( this.PrimeTesterThread != null )
this.PrimeTesterThread.Abort();
if ( this.RangeTesterThread != null )
this.RangeTesterThread.Abort();
base.Dispose( disposing );
}
#endregion
#region Windows Form Designer generated code
private void InitializeComponent()
{
// ...
// InitializeComponent() kısmı.
// ...
}
[STAThread]
static void Main()
{
Application.Run(new isPrimeForm());
}
#endregion

private void isPrimeForm_Load(object sender, System.EventArgs e)
{
this.Size = new Size( 327 , 295 );
}

private void buttonTest_Click(object sender, System.EventArgs e)
{
string msg;
if ( validateInput( this.textBoxInput.Text , out this.number , out msg ) )
{
this.buttonClear.Enabled = this.buttonTest.Enabled = this.textBoxInput.Enabled = false;
this.buttonCancel.Enabled = true;
this.CancelButton = this.buttonCancel;
this.labelInfoSingle.Text = "[ ESC = cancel ]";
this.tabPageSingle.Cursor = Cursors.WaitCursor;
this.firstLine = this.number.ToString( "N0" ) + "\r\n\r\n";
this.textBoxStatusSingle.Text = firstLine + "Testing...";
this.progressBar.Value = 0;
this.progressBar.Show();
this.progressBar.Select();
this.PrimeTesterThread = new Thread(new ThreadStart(this.primeTestThreadStart));
this.PrimeTesterThread.Start();
}
else
{
this.textBoxStatusSingle.Text = msg;
this.textBoxInput.Focus();
}
}

private void buttonStart_Click(object sender, System.EventArgs e)
{
string msg;
if ( this.validateInput( this.textBoxRangeStart.Text , out this.rangeStart , out msg )
&& this.validateInput( this.textBoxRangeEnd.Text , out this.rangeEnd , out msg ) )
{
this.textBoxRangeStart.Enabled = this.textBoxRangeEnd.Enabled = this.buttonSave.Enabled
= this.buttonStart.Enabled = this.textBoxRangeResults.Enabled = false;
this.buttonCancelRange.Enabled = true;
this.tabPageRange.Cursor = Cursors.WaitCursor;
this.textBoxRangeResults.Clear();
this.labelNumberCount.Show();
this.progressBarRange.Value = 0;
this.progressBarRange.Show();
this.progressBarRange.Select();
this.RangeTesterThread = new Thread(new ThreadStart(this.rangeTestThreadStart));
this.RangeTesterThread.Start();
}
else
this.textBoxRangeResults.Text = msg;
}

private void buttonCancel_Click(object sender, System.EventArgs e)
{
this.PrimeTesterThread.Abort();
this.textBoxStatusSingle.Text = this.firstLine + "Canceled.";
this.testEnd();
}

private void buttonCancelRange_Click(object sender, System.EventArgs e)
{
this.RangeTesterThread.Abort();
this.textBoxRangeResults.AppendText( "Canceled.\r\n" );
this.rangeTestEnd();
}

private void buttonClear_Click(object sender, System.EventArgs e)
{
this.textBoxInput.Text = "";
this.textBoxInput.Focus();
}

private void testHandler(bool isPrime,ulong catched)
{
this.BeginInvoke(new testCompleteHandler(this.test_Complete) ,
new Object[] { isPrime , catched } );
}

private void rangeTestHandler()
{
this.BeginInvoke(new rangeTestCompleteHandler(this.rangeTest_Complete));
}

private void test_Complete(bool isPrime,ulong catched)
{
this.PrimeTesterThread.Abort();
if ( isPrime )
this.textBoxStatusSingle.Text = firstLine + "PRIME.";
else if ( catched > 0 )
this.textBoxStatusSingle.Text = firstLine + "NOT Prime, divisible to " + catched.ToString("N0");
else
this.textBoxStatusSingle.Text = firstLine + "NOT Prime.";
this.testEnd();
}

private void rangeTest_Complete()
{
this.RangeTesterThread.Abort();
this.rangeTestEnd();
}

private void testEnd()
{
this.PrimeTesterThread = null;
GC.Collect();
this.buttonClear.Enabled = this.buttonTest.Enabled = this.textBoxInput.Enabled = true;
this.buttonCancel.Enabled = false;
this.CancelButton = this.buttonClear;
this.tabPageSingle.Cursor = Cursors.Default;
this.labelInfoSingle.Text = "[ ENTER = test , ESC = clear ]";
this.progressBar.Hide();
this.textBoxInput.Focus();
}

private void rangeTestEnd()
{
this.textBoxRangeResults.AppendText( "Number Count : " + this.ct.ToString( "N0" ) + "\r\n" );
this.RangeTesterThread = null;
GC.Collect();
this.buttonStart.Enabled = this.textBoxRangeStart.Enabled = this.buttonSave.Enabled
= this.textBoxRangeEnd.Enabled = this.textBoxRangeResults.Enabled = true;
this.buttonCancelRange.Enabled = false;
this.labelNumberCount.Hide();
this.tabPageRange.Cursor = Cursors.Default;
this.progressBarRange.Hide();
this.textBoxRangeStart.Focus();
}

private void primeTestThreadStart()
{
ulong result = this.primeTest( this.number );
switch ( result )
{
case 1:
this.testComplete( true , 1 );
break;
default:
this.testComplete( false , result );
break;
}
}

private void rangeTestThreadStart()
{
ulong result;
decimal start = 0m , end = this.ct = 0m;

if ( this.rangeStart < 2 )
start = 1;
else
start = this.rangeStart;

if ( this.rangeEnd < 2 )
end = 1;
else
end = this.rangeEnd;

if ( start > end )
{
decimal temp = start;
start = end;
end = temp;
}

this.textBoxRangeResults.AppendText( "Prime numbers between " + this.rangeStart.ToString("N0") + " and " + this.rangeEnd.ToString("N0") + " :\r\n" );
decimal numbers = (decimal)Math.Ceiling( ((double)((this.rangeEnd - this.rangeStart)/50)) );
decimal step_r = ( (numbers)%2 == 0 ? numbers + 1 : numbers );
start--;
while ( end > start++ )
{
result = this.primeTest(start);
if ( result == 1 )
{
this.textBoxRangeResults.AppendText( start.ToString( "N0" ) + "\r\n" );
this.ct++;
if ( this.checkBoxNC.Checked )
this.labelNumberCount.Text = "Number Count :\r\n" + ct.ToString("N0");
}
if ( start % step_r == 0 )
this.progressBarRange.PerformStep();
}
this.rangeTestComplete();
}

private ulong primeTest( decimal n )
{
if ( n < 2 )
return 0;
if ( n == 2 || n == 3 )
return 1;
if ( n % 2 == 0 )
return 2;
else
{
ulong end = (ulong)Math.Ceiling( Math.Sqrt( (double)n ) ) + 1;
ulong step = ( (end/60) % 2 == 0 ? end/60 + 1 : end/60 );
for ( ulong i = 3 ; i <= end ; i += 2 )
{
if ( n % i == 0 )
return i;
if ( i % step == 0 )
this.progressBar.PerformStep();
}
return 1;
}
}

private bool validateInput( string s , out decimal n , out string errMsg )
{
n = 0m;
errMsg = null;
if ( s.Length == 0 )
{
errMsg = "\r\nENTER A NUMBER TO TEST";
return false;
}
try
{
n = Convert.ToDecimal(s);
}
catch ( System.FormatException )
{
errMsg = "ENTER A POSITIVE INTEGER,\r\nNOT A STRING Wink";
return false;
}
catch ( System.OverflowException )
{
errMsg = "ENTER AN INTEGER\r\nBETWEEN 2^96 and - (2^96)";
return false;
}
return true;
}

private void linkLabel_LinkClicked(object sender, System********s.Forms.LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("mailto:[email protected]?subject=about isPrime");
}

private void tabControl_SelectedIndexChanged(object sender, System.EventArgs e)
{
if ( this.tabControl.SelectedIndex == 0 )
{
this.Size = new Size( 327 , 295 );
this.textBoxInput.Focus();
}
else
{
this.Size = new Size( 336 , 368 );
this.textBoxRangeStart.Focus();
}
}

private void buttonSave_Click(object sender, System.EventArgs e)
{
this.saveFileDialog.ShowDialog();
}

private void saveFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
StreamWriter sw = new StreamWriter( this.saveFileDialog.FileName );
sw.Write( this.textBoxRangeResults.Text );
sw.Close();
}

private void textBoxes_DragEnter(object sender, System********s.Forms.DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}

private void textBoxes_DragDrop(object sender, System********s.Forms.DragEventArgs e)
{
((TextBox)sender).Text = e.Data.GetData(DataFormats.Text).ToString();
}

}
}
[Resim: 114ld.jpg]



Ben göremem daha uzun boyunu
Ahret derler kısaltamam yolunu
Bugün Sahı Merdan sarsın oglunu
Yetis Ya Üseyin baban gidiyo

İçerik sağlayıcı paylaşım sitesi olarak hizmet veren Pir Zöhre Ana Forum sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.K'nın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Sitemiz hakkında yapılacak tüm hukuksal şikayetleri İletişim bağlantısından bize ulaşıldıktan en geç 3 (üç) gün içerisinde ilgili kanunlar ve yönetmenlikler çerçevesinde tarafımızca incelenerek, gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.