C#排序

C# Programming (2012-2013 1stTerm)

Assignment 2

Deadline: 10thOctober, 2012

Task

In this assignment, your task is to develop a GUI-based application to show all the prime numbers between two numbers (inclusively) input by the user. A prime number is greater than one and it has no divisor other than one and itself.  You have to design the user interface of your program.

The user will input two integer numbers.  The input is valid when it is an integer number. You cannot assume that the user input is always valid.  For example, the user may enter letters instead of numbers as the input. Float number input is also not valid.  If the input is invalid (the checking is performed when the user clicks a button, which will be described later), your program has to (1) show a message box saying that the user input is invalid and (2) clear all the input entered by the user.  Nevertheless, you can assume that the numbers entered by the user contain at most 4 digits.

Be careful that negative integer numbers are also valid input. For example, [-5,5] includes prime results: 2, 3, 5.In addition, the first input number may be smaller, equal or larger than the second input.

The user will choose to display the prime numbers in either ascending order or descending order.

The user will click a button and the program will output all the prime numbers between the two numbers inclusively.  If there is no prime number within the range, your program will output a message to tell the user that there is no prime number.  Note that having no prime numbers within the range is not considered invalid input.

Assessment Scheme

· Correctness 80%

· User interface design 10%

E.g. clarity, convenience

· Program readability 10%

E.g. comments, indentation, meaningful variable names

C#排序

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.Collections;
using System.Text.RegularExpressions;

namespace CSjob2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        const int  M =  10000;
        int[]  numB = new int[M ] ;
        int k = 0;
        int startNum;
        int endNum;

        private void button1_Click(object sender, EventArgs e)
        {
            showTextBox.Clear();
            try                                                  //textbox转换int格式
            {
                startNum  = Convert.ToInt32(startNumBox.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("数据输入有误!");
                startNumBox.Clear();
                endNumBox.Clear();
                return;

            }
            try
            {
                endNum  = Convert.ToInt32(endNumBox.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("数据输入有误!");
                startNumBox.Clear();
                endNumBox.Clear();
                return;

            }
            if (startNum == endNum || (startNum < 0 && endNum < 0))
            {
                MessageBox.Show("此区间无素数!");
                startNumBox.Clear();
                endNumBox.Clear();
                return;
            }
            if (startNum > endNum)
            {
                int temp;
                temp = endNum;
                endNum = startNum;
                startNum = endNum;
            }
            if ( endNum > 0 && startNum < 0)
            {
                startNum = 2;
            }
            if (startNum == 1)
                startNum = 2;

            if (endNum < 10000)//计算素数(假设最大数小于10000)
            {
                for (int i = startNum ; i <= endNum; i++)
                {
                    
                    bool b = true;
                    for (int j = 2; j < i; j++)
                    {

                        if (i % j == 0)
                        {
                            b = false;
                            break;
                        }
                    }
                    if (b)
                    {     k++;      //记录质数个数。
                        string prime = Convert.ToString(i);
                        numB[k-1 ]=Convert .ToInt16 (prime ) ;
                        showTextBox.Text += prime  + '\n';

                    }
                  
                  
                }
            }

        }

//算一次之后需退出才能算第二次,否则前一次的结果会和此次的结果共同显示在showTextBox里


        private void radioButton1_CheckedChanged(object sender, EventArgs e)//做升序
        {
            if (radioButton1.Checked)
            showTextBox.Clear();
            asc(numB);
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked)
            showTextBox.Clear();
            desc(numB);
        }

        private void asc(int[]  p)//升序排列函数
        {
            
            int T=0;
            for (int m = 0; m < M; m++)
            {
                if (p[m] != 0)
                { T++; }
            }
            int N = T ;
            int[] a = new int[N];

            for (int i = 0; i < N; i++)
                a[i] = Convert.ToInt32(p[i]);      
            for (int i = 0; i < N - 1; i++)          //冒泡法升序排列
            {  
                for (int j = 0; j < N - 1 - i; j++)
                {
                    if (a[j] > a[j + 1])
                    {
                        int temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
                }
            }
                for (int m = 0; m < T ; m++)
                {
                    string b = Convert.ToString(a[m]);
                    showTextBox.Text += b + '\n';
                }
        }

      private void desc(int [] p)
        {
            
            int T = 0;
            for (int m = 0; m < M; m++)
            {
                if (p[m] != 0)
                { T++; }
            }
            int N = T;
            int[] a = new int[N];
            for (int i = 0; i < N; i++)
                a[i] = Convert.ToInt32(p[i]);
            for (int i = 0; i < N - 1; i++)      //冒泡法降序排列
            {
                for (int j = 0; j < N - 1 - i; j++)
                {
                    if (a[j] < a[j + 1])
                    {
                        int temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
                }
            }
            
                for (int m = 0; m < T   ; m++)
                {
                    string b = Convert.ToString(a[m]);
                    showTextBox.Text += b + '\n';
                }
        }
        

        private void exit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void reset_Click(object sender, EventArgs e)
        {
            startNumBox.Clear();
            endNumBox.Clear();
            showTextBox.Clear();
        }

    }
}

Testing Platform

We will test your program in the following platform:

· Windows XP

· Visual c# 2008/2010 Express 

If you develop your project in other platforms, please DO test it in the platform mentioned above  before submitting it.

Submission

Late submissions within one day can only receive 70% of the marks.  Late submissions more than one day will not be graded.

你可能感兴趣的:(排序,C#)