언어 자료구조 알고리즘/프로그래밍 실습

제어문 기본 실습 [C#] - 반도체 장비 및 제어시스템 개발자 양성

언제나 휴일 언제나휴일 2021. 5. 12. 16:24
반응형

다음 코드를 참고하세요.

using System;

namespace 콘솔_키_입력
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsoleKey key = ConsoleKey.NoName;
            while(true)
            {
                key = Console.ReadKey(true).Key;
                switch(key)
                {
                    case ConsoleKey.F1: Console.WriteLine("F1"); break;
                }
                if(key == ConsoleKey.Escape)
                {
                    break;
                }
            }
        }
    }
}

1. 사용자가 선택한 키에 따라 공정을 선택 (15분)
F1: 웨이퍼 F2:산화 F3:포토 F4:식각
F5:패키징 F6: EDS F7: 금속배선 F8:박막
ESCAPE을 누르기 전까지 반복하시오.

/* 먼저 작성한 후에 비교해 보세요. */

//1.사용자가 선택한 키에 따라 공정을 선택
//F1: 웨이퍼 F2:산화 F3:포토 F4:식각
//F5:패키징 F6: EDS F7: 금속배선 F8:박막
//ESCAPE을 누르기 전까지 반복하시오.

using System;

namespace _01.메뉴_선택
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsoleKey key = ConsoleKey.NoName;
            while((key = SelectMenu())!= ConsoleKey.Escape)//반복: 메뉴 선택한 키가 ESC가 아니라면
            {
                //선택한 키에 따라 작업 수행
                switch(key)
                {
                    case ConsoleKey.F1: Console.WriteLine("웨이퍼"); break;
                    case ConsoleKey.F2: Console.WriteLine("산화"); break;
                    case ConsoleKey.F3: Console.WriteLine("포토"); break;
                    case ConsoleKey.F4: Console.WriteLine("식각"); break;
                    case ConsoleKey.F5: Console.WriteLine("페키징"); break;
                    case ConsoleKey.F6: Console.WriteLine("EDS"); break;
                    case ConsoleKey.F7: Console.WriteLine("금속배선"); break;
                    case ConsoleKey.F8: Console.WriteLine("박막"); break;
                    default: Console.WriteLine("잘못 선택하셨군요."); break;
                }
                Console.WriteLine("아무 키나 누르세요.");
                Console.ReadKey(true);
            }
        }

        private static ConsoleKey SelectMenu()
        {
            Console.Clear();
            Console.WriteLine("F1: 웨이퍼 F2:산화 F3:포토 F4:식각");
            Console.WriteLine("F5:패키징 F6: EDS F7: 금속배선 F8:박막");
            return Console.ReadKey(true).Key;
        }
    }
}


2.a 10개의 정수를 입력받아 출력하시오.(10분)

/* 먼저 작성한 후에 비교해 보세요. */

using System;

namespace _2.a_10개의_정수를_입력받아_출력하시오
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[10];
            for(int i = 0; i<10;i++)
            {
                Console.Write("{0}번째 정수:",i+1);
                int.TryParse(Console.ReadLine(), out arr[i]);
            }

            foreach(int elem in arr)
            {
                Console.Write("{0} ", elem);
            }
            Console.WriteLine();
        }
    }
}


2.b 10개의 정수를 입력받아 2, 3, 5의 배수가 각각 몇 개인지 출력하시오.(15분)

/* 먼저 작성한 후에 비교해 보세요. */

using System;

namespace _2.b_10개의_정수를_입력받아_2__3__5의_배수가_각각_몇_개인지_출력하시오
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arr = new int[10];
            for (int i = 0; i < 10; i++)
            {
                Console.Write("{0}번째 정수:", i + 1);
                int.TryParse(Console.ReadLine(), out arr[i]);
            }
            int n2 = 0, n3 = 0, n5 = 0;
            foreach(int elem in arr)
            {
                if(elem%2==0)
                {
                    n2++;
                }
                if (elem % 3 == 0)
                {
                    n3++;
                }
                if (elem % 5 == 0)
                {
                    n5++;
                }
            }
            Console.WriteLine("2의 배수:{0}개 3의 배수:{1}개 5의 배수:{2}", n2, n3, n5);
        }
    }
}


2.c 10개의 웨이퍼 제품을 입력받으시오.
    하나의 웨이퍼마다 직경과 제품명을 입력받는다.
    입력받은 전체 제품을 출력한다.(15분)

/* 먼저 작성한 후에 비교해 보세요. */

using System;
/*  2.c 10개의 웨이퍼 제품을 입력받으시오.
    하나의 웨이퍼마다 직경과 제품명을 입력받는다.
    입력받은 전체 제품을 출력한다.(15분, ~15:15)*/
namespace _2.c_10개의_웨이퍼_제품을_입력받으시오
{
    class Wafer
    {
        public double Radius
        {
            get;
        }
        public string Name
        {
            get;
        }
        public Wafer(double radius,string name)
        {
            Radius = radius;
            Name = name;
        }
        public override string ToString()
        {
            return Name;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Wafer[] arr = new Wafer[10];
            for (int i = 0; i < 10; i++)
            {
                arr[i] = MakeWafer(i + 1);
            }
            foreach(Wafer wafer in arr)
            {
                Console.WriteLine("{0}:{1}", wafer.Name, wafer.Radius);
            }
        }

        private static Wafer MakeWafer(int n)
        {
            Console.Write("{0}번째 Wafer", n);
            double radius = 0;
            Console.Write("직경:");
            double.TryParse(Console.ReadLine(), out radius);
            string name;
            Console.Write("제품명:");
            name = Console.ReadLine();
            return new Wafer(radius, name);
        }
    }
}



3. 새롭게 설계한 웨이퍼의 실제 수율을 계산하는 테스트 공정이다. 다음과 같이 동작하게 구현하시오.
   - 단위 테스트 횟수를 입력받아 입력 횟수만큼 반복 수행한다.
   단위 테스트에서는 제조 라인(A~F), 테스트 일련 번호, 설계 최대 칩 수와 
  실제 생산한 정상 칩 수를 입력받아 실제 수율을 계산하여 결과를 출력한다.
   테스트 일련 번호는 순차적으로 부여한다.
   제조라인, 설계 최대 칩 수, 실제 생산한 정상 칩 수는 입력받는다.
   실제 수율 = 실제 생산한 정상 칩 수/설계 최대 칩 수
    - 모든 테스트를 완료하면 테스트 결과를 출력한다.

/* 먼저 작성한 후에 비교해 보세요. */

using System;
/* 
   3. 새롭게 설계한 웨이퍼의 실제 수율을 계산하는 테스트 공정이다. 
   다음과 같이 동작하게 구현하시오.
   - 단위 테스트 횟수를 입력받아 입력 횟수만큼 반복 수행한다.
   단위 테스트에서는 제조 라인(A~F), 테스트 일련 번호, 설계 최대 칩 수와 
  실제 생산한 정상 칩 수를 입력받아 실제 수율을 계산하여 결과를 출력한다.
   테스트 일련 번호는 순차적으로 부여한다.
   제조라인, 설계 최대 칩 수, 실제 생산한 정상 칩 수는 입력받는다.
   실제 수율 = 실제 생산한 정상 칩 수/설계 최대 칩 수 */
namespace _3.새롭게_설계한_웨이퍼의_실제_수율을_계산하는_테스트_공정이다
{
    class Program
    {
        static void Main(string[] args)
        {
            int tcnt = 0;
            Console.Write("테스트 횟수:");
            int.TryParse(Console.ReadLine(), out tcnt);
            for(int t=0;t<tcnt;t++ )
            {
                TestCase(t + 1);
            }
        }
        enum PRO_LINE { PN,PA, PB, PC, PD, PE, PF}
        private static void TestCase(int t)
        {
            PRO_LINE pl = InputProLine();
            if(pl== PRO_LINE.PN)
            {
                Console.WriteLine("잘못 입력하였습니다.");
                return;
            }
            Console.Write("테스트 일련 번호:");
            string pno = Console.ReadLine();
            Console.Write("설계 최대 칩 수:");
            int max_chip = 0;
            int.TryParse(Console.ReadLine(), out max_chip);
            Console.Write("정상 칩 수:");
            int good_chip = 0;
            int.TryParse(Console.ReadLine(), out good_chip);
            Console.WriteLine("실제 수율:{0}", good_chip / (double)max_chip);
        }

        private static PRO_LINE InputProLine()
        {
            Console.WriteLine("생산 라인(A~F)");
            switch(Console.ReadLine())
            {
                case "A":return PRO_LINE.PA;
                case "B": return PRO_LINE.PB;
                case "C": return PRO_LINE.PC;
                case "D": return PRO_LINE.PD;
                case "E": return PRO_LINE.PE;
                case "F": return PRO_LINE.PF;
            }
            return PRO_LINE.PN;
        }
    }
}


4. 실제 수율을 제조 라인 별로 출력하시오.
    라인: 평균 실제 수율 

using System;
//4.실제 수율을 제조 라인 별로 출력하시오.
//    라인: 평균 실제 수율 
namespace _4.실제_수율을_제조_라인_별로_출력하시오
{
    class Score
    {       
        public int MaxChip { get; set; } 
        public int GoodChip { get; set; }
        public Score(int mc, int gc)
        {
            MaxChip = mc;
            GoodChip = gc;
        }
        public double Value
        {
            get
            {
                return GoodChip / (double)MaxChip;
            }
        }
    }
    class Program
    {
        static Score[] scores = new Score[(int)PRO_LINE.PN];
        static void Main(string[] args)
        {
            int tcnt = 0;
            Console.Write("테스트 횟수:");
            int.TryParse(Console.ReadLine(), out tcnt);
            for (int t = 0; t < tcnt; t++)
            {
                TestCase(t + 1);
            }
            for(int i = 0; i<scores.Length;i++)
            {
                Console.Write("{0}:{1}", (PRO_LINE)i, scores[i].Value);
            }

        }
        enum PRO_LINE { A, B, C, D, E, F,PN }
        private static void TestCase(int t)
        {
            PRO_LINE pl = InputProLine();
            if (pl == PRO_LINE.PN)
            {
                Console.WriteLine("잘못 입력하였습니다.");
                return;
            }
            Score score = scores[(int)pl];
            Console.Write("테스트 일련 번호:");
            string pno = Console.ReadLine();
            Console.Write("설계 최대 칩 수:");
            int max_chip = 0;
            int.TryParse(Console.ReadLine(), out max_chip);
            score.MaxChip += max_chip;
            Console.Write("정상 칩 수:");
            int good_chip = 0;
            int.TryParse(Console.ReadLine(), out good_chip);
            score.GoodChip += good_chip;
            
            Console.WriteLine("실제 수율:{0}", good_chip / (double)max_chip);
        }

        private static PRO_LINE InputProLine()
        {
            Console.WriteLine("생산 라인(A~F)");
            switch (Console.ReadLine())
            {
                case "A": return PRO_LINE.A;
                case "B": return PRO_LINE.B;
                case "C": return PRO_LINE.C;
                case "D": return PRO_LINE.D;
                case "E": return PRO_LINE.E;
                case "F": return PRO_LINE.F;
            }
            return PRO_LINE.PN;
        }
    }
}
반응형