this 키워드

this 키워드는 객체가 자기 자신을 가리키고 싶을때 사용하는 키워드입니다.
객체외부에서는 객체의 변수나 메소드에 접근할떄는 객체의 이름을 사용한다면, 
객체내부에서는, 자신의 변수나 메소드에 접근할때, this 키워드를 사용합니다.

class Student
{
    private string name;

    public void SetName(string name)
    {
        this.name = name;
    }
}

/*객체의 이해와 객체의 생성필요와 생성이 필요없는경우*/

객체(Object)

객체란 사물과 같은 유형적인것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들을 객체라고
합니다. 프로그래밍에서의 객체는 클래스에 정의된 내용이 메모리에 생성된것을 뜻합니다.
클래스로부터 객체를 만드는과정을 인스턴스화라고 하고, 어떤 클래스로부터 만들어진 객체를
그 클래스의 인스턴스(Instance)라고 합니다.

>객체생성하기
객체를 생성할때는 new 연산자를 사용하면 됩니다. new연산자가 하는 역할은 객체를 생성하고
생성자를 호출하는데 사용됩니다.

---------------------------------------------------------------------------------------------------------
Timer 클래스(new를 통해서 생성)

정의
네임스페이스: System.Timers
어셈블리: System.ComponentModel.TypeConverter.dll
반복 이벤트를 생성하는 옵션으로 설정된 간격 후 이벤트를 생성합니다.

public class Timer : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize
상속 Object -> MarshalByRefObject -> Component -> Timer
---------------------------------------------------------------------------------------------------------

DateTime 구조체(new를 통해서 생성할 필요가 없다)
정의
네임스페이스: System
어셈블리: mscorlib.dll, System.Runtime.dll
일반적으로 날짜와 시간으로 표시된 시간을 나타냅니다.
public struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System.Runtime.Serialization.ISerializable
상속 Object -> ValueType -> DateTime
---------------------------------------------------------------------------------------------------------

ConsoleKeyInfo 구조체(new를 통해서 생성할 필요가 없다)

정의
네임스페이스: System
어셈블리: System.Console.dll
콘솔 키로 표현된 문자와 Shift, Alt 및 Ctrl 보조키의 상태를 포함하여 누른 콘솔 키를 설명합니다.
public struct ConsoleKeyInfo : IEquatable<ConsoleKeyInfo>
상속 Object -> ValueType -> ConsoleKeyInfo

using System;

class Example
{
   public static void Main()
   {
      ConsoleKeyInfo cki; //new 사용하지 않음, 객체생성하지 않아도 사용할수 있는 경우. 이른바 구조체(?)
      // Prevent example from ending if CTL+C is pressed.
      Console.TreatControlCAsInput = true;

      Console.WriteLine("Press any combination of CTL, ALT, and SHIFT, and a console key.");
      Console.WriteLine("Press the Escape (Esc) key to quit: \n");
      do
      {
         cki = Console.ReadKey();
         Console.Write(" --- You pressed ");
         if((cki.Modifiers & ConsoleModifiers.Alt) != 0) Console.Write("ALT+");
         if((cki.Modifiers & ConsoleModifiers.Shift) != 0) Console.Write("SHIFT+");
         if((cki.Modifiers & ConsoleModifiers.Control) != 0) Console.Write("CTL+");
         Console.WriteLine(cki.Key.ToString());
       } while (cki.Key != ConsoleKey.Escape);
    }
}
// This example displays output similar to the following:
//       Press any combination of CTL, ALT, and SHIFT, and a console key.
//       Press the Escape (Esc) key to quit:
//
//       a --- You pressed A
//       k --- You pressed ALT+K
//       ► --- You pressed CTL+P
//         --- You pressed RightArrow
//       R --- You pressed SHIFT+R
//                --- You pressed CTL+I
//       j --- You pressed ALT+J
//       O --- You pressed SHIFT+O
//       § --- You pressed CTL+U

---------------------------------------------------------------------------------------------------------

 

/*3 * 3 배열로 된 테트리스 모양 회전시키기
 *스페이스바를 누르면, 90도씩 회전하는 로직*/

class Program
{
    public static void Main()
    {
        TrisCls nm = new TrisCls();
        nm.running();
    }
}
class TrisCls
{
    //desinition & variables
    const int ARR=3;
    int[,] design = new int[,]
    {
        {0,0,1},
        {1,1,1}, 
        {0,0,1}
    }
    //control
    ConsoleKeyInfo keyinfo;

    public void running()
    {
        int rc;
        while(true)
        {
            keyinfo=Console.ReadKey(true);
            if(keyinfo.Key==ConsoleKey.Escape) break;
            if(keyinfo.Key==ConsoleKey.Spacebar) 
            {
                rc=design_rotation();
                rc=design_rotation();
            }

            draw();
        }
    }
    int design_rotation()
    {
        int tmp;

        tmp = design[0,0];
        design[0,0]=design[0,1];
        design[0,1]=design[0,2];
        design[0,2]=design[1,2];
        design[1,2]=design[2,2];
        design[2,2]=design[2,1];
        design[2,1]=design[2,0];
        design[2,0]=design[1,0];
        design[1,0]=tmp;

        return(1);
    }
    void draw()
    {
        string text="";
        int ii,kk;

        for(ii=0; ii<ARR; ii++)
        {
            for(kk=0; kk<ARR; kk++)
            {
                if(design[ii,kk]==1) text=text+"U";
                else text=text+"_";
            }
            text=text+"\n";
        }
        Console.Write(text);
    }
}



        

#솔류션 + 프로젝트 다수일경우 참조방법

하나의 솔류션에 여러개의 프로젝트 단위로 나누어서 프로그램을 구성하는경우에
DLL파일 참조시에, 프로젝트 단위별로 DLL참조를 해야한다.

프로젝트(1) -> 속성(R) -> 참조경로(1)

프로젝트(1) -> 속성(R) -> 참조경로(2) ex>C:\Program Files\ComponetOne\Studio for WinForms\bin\v4\

위의 이미지에서, 참조경로에 추가를 해주면 됩니다.

C1 배포 & Deploy

컴포넌트원(ComponentOne)를 배포하는 방법에 대한 설명입니다.

배포가 될 때 사용중인 아래의 DLL이 같이 배포된 프로그램의 같은 경로에 포함되어야 합니다.

  • C1.Win.2.dll
  • C1.Win.컨트롤 이름.2.dll/C1.C1 컨트롤 이름.2.dll
  • C1.Win.4.dll
  • C1.Win. 컨트롤 이름.4.dll/C1.C1 컨트롤 이름.4.dll
  • C1.Win. 컨트롤 이름.4.Design.dll/C1.C1 컨트롤 이름.4.Design.dll

DLL에 붙어 있는 숫자 2와 4는 기본적으로 .NET 프레임 워크와 호환성을 나타내며 해당 DLL이 다양한 타입의 호환성을 가지기 때문에 현재는 문제가 되지 않더라도 장래적인 호환성을 위하여 배포하실 때는 2가지 버전의 DLL을 모두 배포하여야 합니다.

예를 들어 C1.Win.FlexGrid.2.dll와 C1.Win.FlexGrid.4.dll을 모두 배포하여야 합니다.

C1.C1Excel.4.5.2 Assembly / C1.C1Excel Namespace

 

C1.C1Excel Namespace | ComponentOne Excel for .NET

 

www.grapecity.com




Class                    Description

  C1XLBook Represents an Excel workbook containing one or more worksheets.
Contains methods for loading and saving XLS files, and exposes a collection of XLSheet objects that represent the individual worksheets.
  ShapeCollection Represents a collection of XLShape objects on an XLSheet.
  Strings Static class containing UI strings used by the designer.
  XLBorderFormatting The border formatting.
  XLCell Represents individual cells in an XLSheet and provides properties for getting and setting the cell Value, Style, and Hyperlink.
  XLCellRange Represents a range of XLCell objects in an XLSheet.
  XLCellRangeCollection Represents a collection of XLCellRange objects on an XLSheet.
  XLColumn Represents a column in a worksheet. This class provides properties for setting the column's width, style, and visibility.

/*

31 characters

Microsoft Excel does not allow worksheet name longer than 31 characters.

*/

/*

Excel Worksheet Naming Rules and Tips
► A worksheet name cannot cannot exceed 31 characters. ► A worksheet name cannot be left blank. ► A worksheet cannot be named history in either lower or uppercase.

*/

 

using C1.C1Excel;

 

namespace Problem

{

    class Program

    {

        public static void Main(string[] args)

        {

            Problem_2021_10_15 nm = new Problem_2021_10_15();

            nm.running();

        }

    }

    class Problem_2021_10_15

    {

        public void running()

        {

            C1XLBook book = new C1XLBook();

            XLSheet sheet = book.Sheets[0];

            sheet.Name="1234567890123456789012345678901";
            //Microsoft Excel does not allow worksheet name longer than 31 characters.

            XLStyle style = new XLStyle();

            style.AlignHorz = XLAlignHorzEnum.Center;

            XLCell cell = sheet[1,0];

            cell.Value="1234567890123456789012345678901";
            //Microsoft Excel does not allow worksheet name longer than 31 characters.

        }

    }

}

/*
 * C# Excel 연동(엑셀 COM 레퍼런스 추가하기)
 */

엑셀 COM 레퍼런스 추가하기

1. 개체추가
일단 C# 에서 엑셀 연동을 하기 위하여는 참조 개체를 추가해야 합니다.
상단 메뉴의 "프로젝트" -> "참조" 로 이동하신 다음 아래와 같은 항목을 찾아서 체크해 줍니다.

앞쪽의 체크박스를 선택해주고 확인 버튼을 눌러주면 된다.

2. 선언
확인을 누르셨으면 이제 해당 레퍼런스를 사용하도록 선언을 해줍니다.

코드 페이지의 제일 윗 부분에 아래와 같이 작성을 해 주겠습니다.

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using Application = Microsoft.Office.Interop.Excel.Application;

두번째 추가한 구문은 현재 열려있는 엑셀 어플리케이션을 확인하기 위한 용도로 사용합니다.

세번쨰 구문은 이후 사용할 Application 이라는 지시어가 현재 C# 컴파일러가 헷깔릴수 있는 용어이기 때문에 특별히 어떤 녀석인지를 지시하도록 작성하였습니다.

3. 코드작성
이제 사용할 준비는 되었고 코드를 작성해 보겠습니다.

아래와 같이 작성이 되면 됩니다. 본인의 비주얼 스튜디오에 복붙 하지 마시고 한번 타이핑 해보시기 바랍니다. 코딩의 재미중에 타이핑 하는 맛도 빼 놓을 수 없기 때문이며 직접 타이핑을 해보는게 좀더 빠르게 익숙해 지기 때문이기도 하죠. 물론 인텔리센스가 도와주기 때문에 사실 몇글자 씩만 적어도 아래에 적어야 될 코드들이 자동으로 나타나서 저처럼 영문 타이핑을 못하는 사람도 쉽게 코딩을 할 수 있습니다.

한번 코드를 보실까요? 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
using Application = Microsoft.Office.Interop.Excel.Application;

namespace excelAutomate
{
    public partial class Form1 : Form
    {
        private Application xlsApp;


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 폼 로딩시에 위에서 정의한 xls App 를 엑셀과 연동해 주겠습니다.
            xlsApp = (Application)Marshal.GetActiveObject("Excel.Application"); // 현재  열려있는 엑셀 어플리케이션이 지정됩니다.
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 버튼을 누르면 텍스트 박스에 엑셀 어플리케이션이 열고 있는 엑셀 파일 명을 표시해 보겠습니다.
            textBox1.Text = xlsApp.ActiveWorkbook.Name;
        }
    }
}

 

 

문제 1

문제 풀이 : Lv1. 숫자 문자열과 영단어

  • 1478 → “one4seveneight”
  • 234567 → “23four5six7”
  • 10203 → “1zerotwozero3”

네오와 프로도가 위와 같이 숫자를 문자열로 바꾸는 게임을 하고 있습니다. 이때 일부 자릿수가 영단어로 바뀌었거나 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어질 때, s가 의미하는 원래 숫자를 return 하는 함수를 완성해 주세요.

제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 “zero” 또는 “0”으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

입출력 예

"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 

 

 

using System;
using System.IO;
using System.Timers;

namespace ProblemPackage
{
    class Program
    {
        public static void Main(string[] args)
        {
            Tris_2021_10_15 nm = new Tris_2021_10_15();

            if(args.Length == 1)
            {
                nm.running(args[0]);
            }
            else
            {
                nm.running("23four5six7");
                nm.running("one4seveneight");
            }
        }
    }
    class Tris_2021_10_15
    {
        string[] english = new string[]
        {
            "zero",
            "one",
            "two",
            "three",
            "four",
            "five",
            "six",
            "seven",
            "eight",
            "nine"
        };
        string[] numeric = new string[]
        {
            "0",
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9"
        };
        const int TRUE=1;
        const int FAIL=0;

        public void running(string text)
        {
            string[] result = new string[100];
            string tmp;
            int kk,ii,ff;

            Console.WriteLine("Problem String------------------------------------------------");
            Console.WriteLine("[" + text + "]");

            kk=0;
            ii=0;
            while(true)
            {
                if(search_string(text)==TRUE)
                {
                    result[kk]=get_string(text);

                    ff=text.Length-result[kk].Length;
                    tmp = text.Substring(result[kk].Length,ff);
                    text="";
                    text=tmp;
                    kk++;
                }
                else
                {
                    result[kk]=get_number(text);

                    ff=text.Length-1;
                    tmp = text.Substring(1,ff);
                    text="";
                    text=tmp;
                    kk++;
                }

                ii++;
                if(text=="") break;
            }

            tmp="";
            for(kk=0; kk<ii; kk++)
            {
                if(result[kk].Length > 1) 
                {
                    for(ff=0; ff<10; ff++)
                    {
                        if(result[kk].CompareTo(english[ff])==0)
                        {
                            tmp = tmp + numeric[ff];
                            break;
                        }
                    }
                }
                else tmp = tmp + result[kk];
            }

            Console.WriteLine("Result String------------------------------------------------");
            Console.WriteLine("[" + tmp + "]");
        }
        int search_string(string str)
        {
            int kk,ii,ff;

            for(kk=0; kk<str.Length; kk++)
            {
                ii = (str.Substring(kk,1)).CompareTo("a");
                ff = (str.Substring(kk,1)).CompareTo("z");

                if(ii==0) return TRUE;
                if(ff==0) return TRUE;

                if(ii == 1 && ff == -1)
                {
                    return TRUE;
                }

                ii = (str.Substring(kk,1)).CompareTo("0");
                ff = (str.Substring(kk,1)).CompareTo("9");

                if(ii==0) return FAIL;
                if(ff==0) return FAIL;

                if(ii == 1 && ff == -1)
                {
                    return FAIL;
                }
            }
            return -1;
        }
        string get_number(string str)
        {
            return(str.Substring(0,1));
        }
        string get_string(string str)
        {
            int ii,kk;
            int max,min;
            string min_final_str;
            string max_final_str;

            max=-999;
            min=999;

            min_final_str="";
            max_final_str="";
            for(kk=0; kk<10; kk++)
            {
                ii = str.IndexOf(english[kk]);

                if(ii < 0) continue;

                if(max < ii)
                {
                    max=ii;
                    max_final_str = str.Substring(ii,english[kk].Length);
                }
                if(min > ii)
                {
                    min=ii;
                    min_final_str = str.Substring(ii,english[kk].Length);
                }
            }
            return(min_final_str);
        }
    }//end of class
}//end of nameapace

/*console 3*3 tris game source
 *cmd>type *.cs | findstr formattext
*/

using System;
using System.IO;
using System.Timers;

namespace ____java_is_package
{
    class Program
    {
        public static void Main(string[] args)
        {
            ____tris_overloading_cls nm = new ____tris_overloading_cls();
            nm.running();
        }
    }

    class ____tris_overloading_cls
    {
        //properties
        const int TRUE=1;
        const int FAIL=0;
        const int D_RIGHT=1000;
        const int D_LEFT=1001;
        const int D_DOWN=1002;
        const int MAPY=22;
        const int MAPX=22;
        const int ARR=3;
        const int MAXDESIGN=10;

        int xpos,ypos,hyun_design,next_design;
        int[,] tris=new int[MAPY,MAPX];
        int[,] design=new int[ARR,ARR];
        int[,,] realdesign=new int[,,]
        {
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
            {{1,1,1},{1,1,1},{1,1,1}},
        };

        Timer tm;

        //method
        void draw_tris()
        {
            string formattext="";
            string spacetext="                                          ";
            int ii,kk;

            for(ii=0; ii<MAPY-1; ii++)
            {
                formattext=formattext+spacetext;
                for(kk=1; kk<MAPX-1; kk++)
                {
                    if(tris[ii,kk]==1) formattext=formattext+"U";
                    else formattext=formattext+"_";
                 }
                 formattext=formattext+"\n";
             }
             Console.SetCursorPosition(0,0);
             Console.Write(formattext);
        }

        int common_check(int direction)
        {
            int[,] tris_tmp=new int[MAPY,MAPX];
            int ii,kk,ff;

            for(ALL)for(ALL)tris_tmp[ii,kk]=tris[ii,kk];
            for(ARR)for(ARR)if(design[ii,kk]==1) tris_tmp[ypos+ii,xpos+kk]=0;

            if(direction==D_RIGHT) xpos++;
            if(xpos+2>MAX-1) xpos--; //Array's MAX-1 Access Possible

            if(direction==D_LEFT) xpos--;
            if(xpos+0<0) xpos++ //Array's 0 Access Possible

            if(direction==D_DOWN) ypos++;

            for(ARR)for(ARR)if(design[ii,kk]==1) tris_tmp[ypos+ii,xpos+kk]=1;

            ff=0;
            for(ARR)for(ARR)if(tris_tmp[ypos+ii,xpos+kk]>1) ff++;

            if(ff > 0) 
            {if(direction==D_RIGHT) xpos--;
            if(direction==D_LEFT) xpos++;
            if(direction==D_DOWN) ypos--; return(FAIL)}
            else
            {
                for(ALL)for(ALL)tris[ii,kk]=tris_tmp[ii,kk];}
            }
            return(TRUE);
        }     
        void init()
        {
            int ii,kk;

            tm=new Timer();
            tm.Elapsed += new ElapsedEventHandler(____time_tick);
            tm.Interval=500;
            tm.Start();

            for(ALL)for(ALL)tris[ii,kk]=0;
            for(ii=0; ii<MAPY; ii++) tris[ii,0]=1; tris[ii,MAPX-1]=1;
            for(kk=0; kk<MAPX; kk++) tris[MAPY-1,kk]=1;

            xpos=MAPX/2; ypos=0; score=0;
            Random rr=new Random(); hyun_design=rr.Next() % MAXDESIGN; next_design=rr.Next() % MAXDESIGN;

            for(ARR)for(ARR) design[ii,kk]=realdesign[hyun_design,ii,kk];
            for(ARR)for(ARR) tris[ypos+ii,xpos+kk]=design[ii,kk];

            Console.Clear(); draw_tris();
        }
        int enter_check()
        {
            int ii,kk,rc;

            while(true)
            {
                rc=common_check(D_DOWN);
                if(rc==FAIL) break;

                draw_tris();
            }
            while(true)
            {
                if(check_horizon()==FAIL) break;
            }
            xpos=MAPX/2; ypos=0;
            hyun_design=next_design;
            Random rr=new Random(); next_design=rr.Next() % MAXDESIGN;
            for(ARR)for(ARR) design=realdesign[hyun_design];
            for(ARR)for(ARR) tris[ypos+ii,xpos+kk]=design[ii,kk];
            draw_tris();
            return(TRUE);
        }
        void ____time_check(object sender, ElapsedEventArgs e)
        {
            int ii,kk,rc;

            draw_tris();
            rc=common_check(D_DOWN);
            if(rc==FAIL)
            {
                if(ypos==0) stop();
                else
                {
                    while(true)
                    {
                        //no detect!!, while loop break!!
                        //no detect!!, while loop break!!
                        if(check_horizon()==FAIL) break;
                    }
                }
                xpos=MAPX/2; ypos=0;
                hyun_design=next_design;
                Random rr=new Random(); next_design=rr.Next() % MAXDESIGN;
                for(ARR)for(ARR) design[ii,kk]=realdesign[hyun_design,ii,kk];
                for(ARR)for(ARR) tris[ypos+ii,xpos+kk]=design[ii,kk];
            }
        }
        public void running()
        {
            int rc; ConsoleKeyInfo keyinfo;
            init();
            while(true)
            {
                keyinfo=Console.ReadKey(true);
                if(keyinfo.Key==ConsoleKey.RightArrow) rc=common_check(D_RIGHT);
                if(keyinfo.Key==ConsoleKey.LEFTArrow) rc=common_check(D_LEFT);
                if(keyinfo.Key==ConsoleKey.Escape) break;
                if(keyinfo.Key==ConsoleKey.Enter) rc=enter_check();
                draw_tris();
            }
            stop();
        }
        void draw_tris()
        {
            int ii,kk;
            string formattext="";

            for(ii=0; ii<MAPY-1; ii++)
            {
                for(kk=1; kk<MAPX-1; kk++)
                {
                    if(tris[ii,kk]==1) formattext=formattext+"U";
                    else formattext=formattext+"_";
                }
                formattext=formattext+"\n";
            }
            Console.SetCursorPosition(0,0);
            Console.Write(formattext);
        }
        void delete_column(int x, int y)
        {
            int ii;

            for(ii=y; ii>=1; ii--)
            {
                tris[ii.x]=tris[ii-1,x];
            }
        }
        int check_horizon()
        {
            int ii,kk,idx,horizon;

            horizon=MAPX-3;
            for(ii=0; ii<MAPY-1; ii++)
            {
                idx=0;
                for(kk=1; kk<MAPX-2; kk++)
                {
                    if(tris[ii,kk]==tris[ii,kk+1]) idx++;
                    else break;
                }
                if(idx==horizon)
                {
                    for(kk=1; kk<MAPX-1; kk++) delete_column(ii,kk);
                    score++;
                    return(TRUE);
                }
            }
            return(FAIL);
        }
    }//end of class
}

 

#테트리스.디버깅.단계(1)-Console출력및 테스트

using System;
using System.IO;
using System.Timers;

namespace tris_is_package
{
    class Program
    {
        public static void Main(string[] args)
        {
            tris_is_overloading_debug nm = new tris_is_overloading_debug();
            nm.running();
        }
    }
    class tris_is_overloading_debug
    {
        //Definition
        const int D_RIGHT =2000;
        const int D_LEFT =2001;
        const int D_DOWN =2002;
        const int MAPY =18;
        const int MAPX =18;
        const int MAXDESIGNARR=4;
        const int MAXDESIGN=7;
        //Properties
        int rc;
        int xpos,ypos;
        int[,] tris = new int[MAPY,MAPX];
        int[,] design = new int[MAXDESIGNARR,MAXDESIGNARR];
        int[,,] realdesign = new int[,,]
        {
            {{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}},
            {{0,0,0,0},{0,1,1,0},{0,1,1,0},{0,0,0,0}},
            {{0,0,0,0},{0,1,0,0},{1,1,1,0},{0,0,0,0}},
            {{0,0,1,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}},
            {{0,1,0,0},{0,1,1,0},{0,0,1,0},{0,0,0,0}},
            {{0,0,0,0},{0,1,0,0},{0,1,1,1},{0,0,0,0}},
            {{0,0,0,0},{0,1,1,1},{0,1,0,0},{0,0,0,0}}
        };

        DateTime nw;
        Timer tm;
        ConsoleKeyInfo keyinfo;

        //Method
        public tris_is_overloading_debug(){}
        public void running()
        {
            init();

            while(true)
            {
                keyinfo=Console.ReadKey(true);

                if(keyinfo.Key==ConsoleKey.RightArrow)
                {
                    rc=check_t_tris(D_RIGHT,ref ypos,ref xpos);
                    if(rc != 0){stop(); Environment.Exit(0);}
                }
                if(keyinfo.Key==ConsoleKey.LeftArrow)
                {
                    rc=check_t_tris(D_LEFT,ref ypos,ref xpos);
                    if(rc != 0){stop(); Environment.Exit(0);}
                }
                if(keyinfo.Key==ConsoleKey.DownArrow)
                {
                    rc=check_t_tris(D_DOWN,ref ypos,ref xpos);
                    if(rc != 0){stop(); Environment.Exit(0);}
                }
                if(keyinfo.Key==ConsoleKey.Escape) break;

                logg("Key", keyinfo);
            }

            stop();
        }
        void init(){}
        void stop(){}
        int check_t_tris(int direction, ref int y, ref int x){}
        void ____time_tick(object sender, ElapsedEventArgs e){}
        //overloading
        //overloading
        void logg(string msg)
        {
            nw=DateTime.Now;

            Console.WriteLine(">>Pos:[" + ypos.ToString("000") + "," + xpos.ToString("000") + "]" +
            " Event:" + msg);
        }
        void logg(string msg, ConsoleKeyInfo keytmp)
        {
            nw=DateTime.Now;

            Console.WriteLine(">>Pos:[" + ypos.ToString("000") + "," + xpos.ToString("000") + "]" +
            " KeyName:[" + keytmp.Key.ToString() + "]" +
            " Event:" + msg);
        }
        void logg(string msg, bool idx)
        {
            nw=DateTime.Now;
            Console.Write("[" + msg + "]");
        }
    }
}

#File Attach

debug_console_tris.cs
0.01MB

#데이타 읽고,쓰기 속성 선언및 사용방법(get/set)
#데이타 읽고,쓰기 속성 선언및 사용방법(get/set)

namespace ____java_is_package
{
    class Program
    {
        public static void Main(string[] args)
        {
            ____dataclass nm = new ____dataclass();

            nm.Index=1000;
            Console.WriteLine(">>" + nm.Index.ToString("00000000"));
        }
    }
    class ____dataclass
    {
        public int Index
        {get; set;}
    }
}


/*-----------------------------------------------------------------
1. 오버로딩 (Overloading)
"이름은 같지만 그냥 다른 함수"입니다.

2. 오버라이딩 (Overriding)
"부모에게 물려받아 변형한 함수"입니다.
상속의 개념이 들어갔으며 객체지향의 핵심 특징인 "다형성"과 밀접한 관련이 있습니다.

Ex)protected override void WndProc(ref Message m){}
---------------*/

/*
 * Console Time Handling & Log Overloading(Object Language Needed)
 */
using System;
using System.IO;
using System.Timers;

namespace ____java_is_package
{
    class Program
    {
        public static void Main(string[] args)
        {
            ____java_is_basic_class pro = new ____java_is_basic_class();
            pro.running();
        }
    }
    class ____java_is_basic_class
    {
        DateTime now;ConsoleKeyInfo keyinfo;Timer tm;
        int xpos,ypos;

        //function method overloading,--------------------------------
        //function method overloading,--------------------------------
        void Log(string msg){}
        void Log(string msg, ConsoleKeyInfo keytmp)
        {
            now=DateTime.Now;
            Console.WriteLine("KeyName:[" + keytmp.Key.ToString() + "]");
        }


        public void running(){}
        void Init()
        {
            tm = new Timer();
            tm.Elapsed += new ElapsedEventHandler(____time_tick_1);
            tm.Elapsed += new ElapsedEventHandler(____time_tick_2);
            tm.Elapsed += new ElapsedEventHandler(____time_tick_3);
            tm.Interval = 1000;
            tm.Start();
        }
        void Stop()
        {
            tm.Stop();
            tm.Elapsed -= ____time_tick_1;
            tm.Elapsed -= ____time_tick_2;
            tm.Elapsed -= ____time_tick_3;
        }
        void ____time_tick_1(object sender, ElapsedEventArgs e){}
        void ____time_tick_2(object sender, ElapsedEventArgs e){}
        void ____time_tick_3(object sender, ElapsedEventArgs e){}
    }
}


/*---------------------------------------------------------------
 * C#
 * public enum ConsoleKey

 * 사용방법
ConsoleKeyInfo keyinfo;
while(true)

    keyinfo=Console.ReadKey(true);
    if(keyinfo.Key==ConsoleKey.Escape) break;
}
-----------------------------------------------------------------*/

ConsoleKey.A 65 A 키입니다.
ConsoleKey.Add 107 더하기 키(숫자 키패드의 더하기 키).
ConsoleKey.Applications 93 애플리케이션 키(Microsoft Natural 키보드)입니다.
ConsoleKey.Attention 246 ATTN 키입니다.
ConsoleKey.B 66 B 키입니다.
ConsoleKey.Backspace 8 백스페이스 키입니다.
ConsoleKey.BrowserBack 166 브라우저 뒤로 키입니다.
ConsoleKey.BrowserFavorites 171 브라우저 즐겨찾기 키입니다.
ConsoleKey.BrowserForward 167 브라우저 앞으로 키입니다.
ConsoleKey.BrowserHome 172 브라우저 홈 키입니다.
ConsoleKey.BrowserRefresh 168 브라우저 새로 고침 키입니다.
ConsoleKey.BrowserSearch 170 브라우저 검색 키입니다.
ConsoleKey.BrowserStop 169 브라우저 중지 키입니다.
ConsoleKey.C 67 C 키입니다.
ConsoleKey.Clear 12 지우기 키입니다.
ConsoleKey.CrSel 247 CRSEL(CURSOR SELECT) 키입니다.
ConsoleKey.D 68 D 키입니다.
ConsoleKey.D0 48 0 키입니다.
ConsoleKey.D1 49 1 키입니다.
ConsoleKey.D2 50 2 키입니다.
ConsoleKey.D3 51 3 키입니다.
ConsoleKey.D4 52 4 키입니다.
ConsoleKey.D5 53 5 키입니다.
ConsoleKey.D6 54 6 키입니다.
ConsoleKey.D7 55 7 키입니다.
ConsoleKey.D8 56 8 키입니다.
ConsoleKey.D9 57 9 키입니다.
ConsoleKey.Decimal 110 점 키(숫자 키패드의 점 키).
ConsoleKey.Delete 46 Del(Delete) 키입니다.
ConsoleKey.Divide 111 나누기 키(숫자 키패드의 나누기 키).
ConsoleKey.DownArrow 40 아래쪽 화살표 키입니다.
ConsoleKey.E 69 E 키입니다.
ConsoleKey.End 35
ConsoleKey.Enter 13 Enter 키입니다.
ConsoleKey.EraseEndOfFile 249 ERASE EOF 키입니다.
ConsoleKey.Escape 27 Esc(ESCAPE) 키입니다.
ConsoleKey.Execute 43 실행 키입니다.
ConsoleKey.ExSel 248 EXSEL(EXTEND SELECTION) 키입니다.
ConsoleKey.F 70 F 키입니다.
ConsoleKey.F1 112 F1 키입니다.
ConsoleKey.F10 121 F10 키입니다.
ConsoleKey.F11 122 F11 키입니다.
ConsoleKey.F12 123 F12 키입니다.
ConsoleKey.F13 124 F13 키입니다.
ConsoleKey.F14 125 F14 키입니다.
ConsoleKey.F15 126 F15 키입니다.
ConsoleKey.F16 127 F16 키입니다.
ConsoleKey.F17 128 F17 키입니다.
ConsoleKey.F18 129 F18 키입니다.
ConsoleKey.F19 130 F19 키입니다.
ConsoleKey.F2 113 F2 키입니다.
ConsoleKey.F20 131 F20 키입니다.
ConsoleKey.F21 132 F21 키입니다.
ConsoleKey.F22 133 F22 키입니다.
ConsoleKey.F23 134 F23 키입니다.
ConsoleKey.F24 135 F24 키입니다.
ConsoleKey.F3 114 F3 키입니다.
ConsoleKey.F4 115 F4 키입니다.
ConsoleKey.F5 116 F5 키입니다.
ConsoleKey.F6 117 F6 키입니다.
ConsoleKey.F7 118 F7 키입니다.
ConsoleKey.F8 119 F8 키입니다.
ConsoleKey.F9 120 F9 키입니다.
ConsoleKey.G 71 G 키입니다.
ConsoleKey.H 72 H 키입니다.
ConsoleKey.Help 47 도움말 키입니다.
ConsoleKey.Home 36 HOME 키입니다.
ConsoleKey.I 73 I 키입니다.
ConsoleKey.Insert 45 Insert 키입니다.
ConsoleKey.J 74 J 키입니다.
ConsoleKey.K 75 K 키입니다.
ConsoleKey.L 76 L 키입니다.
ConsoleKey.LaunchApp1 182 애플리케이션 1 시작 키(Microsoft Natural 키보드)입니다.
ConsoleKey.LaunchApp2 183 애플리케이션 2 시작 키(Microsoft Natural 키보드)입니다.
ConsoleKey.LaunchMail 180 메일 실행 키(Microsoft Natural 키보드)입니다.
ConsoleKey.LaunchMediaSelect 181 미디어 선택 키(Microsoft Natural 키보드)입니다.
ConsoleKey.LeftArrow 37 왼쪽 화살표 키입니다.
ConsoleKey.LeftWindows 91 왼쪽 Windows 로고 키(Microsoft Natural 키보드)입니다.
ConsoleKey.M 77 M 키입니다.
ConsoleKey.MediaNext 176 미디어 다음 트랙 키입니다.
ConsoleKey.MediaPlay 179 미디어 재생/일시 중지 키입니다.
ConsoleKey.MediaPrevious 177 미디어 이전 트랙 키입니다.
ConsoleKey.MediaStop 178 미디어 중지 키입니다.
ConsoleKey.Multiply 106 곱하기 키(숫자 키패드의 곱하기 키).
ConsoleKey.N 78 N 키입니다.
ConsoleKey.NoName 252 나중에 사용하기 위해 예약된 상수입니다.
ConsoleKey.NumPad0 96 숫자 키패드의 0 키입니다.
ConsoleKey.NumPad1 97 숫자 키패드의 1 키입니다.
ConsoleKey.NumPad2 98 숫자 키패드의 2 키입니다.
ConsoleKey.NumPad3 99 숫자 키패드의 3 키입니다.
ConsoleKey.NumPad4 100 숫자 키패드의 4 키입니다.
ConsoleKey.NumPad5 101 숫자 키패드의 5 키입니다.
ConsoleKey.NumPad6 102 숫자 키패드의 6 키입니다.
ConsoleKey.NumPad7 103 숫자 키패드의 7 키입니다.
ConsoleKey.NumPad8 104 숫자 키패드의 8 키입니다.
ConsoleKey.NumPad9 105 숫자 키패드의 9 키입니다.
ConsoleKey.O 79 O 키입니다.
ConsoleKey.Oem1 186 OEM 1 키(OEM 특정)입니다.
ConsoleKey.Oem102 226 OEM 102 키(OEM 특정)입니다.
ConsoleKey.Oem2 191 OEM 2 키(OEM 특정)입니다.
ConsoleKey.Oem3 192 OEM 3 키(OEM 특정)입니다.
ConsoleKey.Oem4 219 OEM 4 키(OEM 특정)입니다.
ConsoleKey.Oem5 220 OEM 5 키(OEM 특정)입니다.
ConsoleKey.Oem6 221 OEM 6 키(OEM 특정)입니다.
ConsoleKey.Oem7 222 OEM 7 키(OEM 특정)입니다.
ConsoleKey.Oem8 223 OEM 8 키(OEM 특정)입니다.
ConsoleKey.OemClear 254 지우기 키(OEM 특정)입니다.
ConsoleKey.OemComma 188 국가/지역별 키보드의 OEM 쉼표 키입니다.
ConsoleKey.OemMinus 189 국가/지역별 키보드의 OEM 빼기 키입니다.
ConsoleKey.OemPeriod 190 국가/지역별 키보드의 OEM 마침표 키입니다.
ConsoleKey.OemPlus 187 국가/지역별 키보드의 OEM 더하기 키입니다.
ConsoleKey.P 80 P 키입니다.
ConsoleKey.Pa1 253 PA1 키입니다.
ConsoleKey.PageDown 34 &lt;Page Down&gt; 키입니다.
ConsoleKey.PageUp 33 Page Up 키입니다.
ConsoleKey.Pause 19 Pause 키입니다.
ConsoleKey.Play 250 재생 키입니다.
ConsoleKey.Print 42 인쇄 키입니다.
ConsoleKey.PrintScreen 44 Print Screen 키입니다.
ConsoleKey.Process 229 입력기 프로세스 키입니다.
ConsoleKey.Q 81 Q 키입니다.
ConsoleKey.R 82 R 키입니다.
ConsoleKey.RightArrow 39 오른쪽 화살표 키입니다.
ConsoleKey.RightWindows 92 오른쪽 Windows 로고 키(Microsoft Natural 키보드)입니다.
ConsoleKey.S 83 S 키입니다.
ConsoleKey.Select 41 선택 키입니다.
ConsoleKey.Separator 108 구분 기호 키입니다.
ConsoleKey.Sleep 95 컴퓨터 절전 키입니다.
ConsoleKey.Spacebar 32 스페이스바 키입니다.
ConsoleKey.Subtract 109 빼기 키(숫자 키패드의 빼기 키).
ConsoleKey.T 84 T 키입니다.
ConsoleKey.Tab 9 Tab 키입니다.
ConsoleKey.U 85 U 키입니다.
ConsoleKey.UpArrow 38 위쪽 화살표 키입니다.
ConsoleKey.V 86 V 키입니다.
ConsoleKey.VolumeDown 174 볼륨 작게 키(Microsoft Natural 키보드)입니다.
ConsoleKey.VolumeMute 173 볼륨 음소거 키(Microsoft Natural 키보드)입니다.
ConsoleKey.VolumeUp 175 볼륨 크게 키(Microsoft Natural 키보드)입니다.
ConsoleKey.W 87 W 키입니다.
ConsoleKey.X 88 X 키입니다.
ConsoleKey.Y 89 Y 키입니다.
ConsoleKey.Z 90 Z 키입니다.
ConsoleKey.Zoom 251 확대/축소 키입니다.

#비고)Makefile

CC=gcc
SRC=./
EXE=./
INC=./
CFLAGS=-DSERCMD - DDEBUG -DLOGGING -I.
LIBS = -lcrypt -lnsl -lm

BIN=$(EXE)
all: $(BIN)/sample \

.c.o:
    $(CC) $(CFLAGS) -c -g $*.c

#sample.c R_Option.c R_Future.c 가 모두 존재할경우에 Object는 아래와 같이 명시를 해줘야 한다.
$(BIN)/sample: sample.o R_Option.o R_Future.o
    $(CC) -o $@ sample.o  R_Option.o R_Future.o (LIBS) -s

clean:
    rm *.o

#구조체안에 선언되어진 함수 실행하기(함수를 구조체 변수로 갖는경우)
#구조체안에 선언되어진 함수 실행하기(함수를 구조체 변수로 갖는경우)

#명령인자에 따른 각각의 함수로 분기하는 경우에 사용되는 형태의 코드기법입니다.
#명령인자에 따른 각각의 함수로 분기하는 경우에 사용되는 형태의 코드기법입니다.

#주로 통신시에 서버와 클라이언트에서 주고받는 데이타에 따른 서버의 함수를 실행하고자 할때에 자주 사용됩니다.

#include<stdio.h>
#include<string.h>

#define SERCMD

typedef struct ser_map_t
{
    char *cpMethod;
    int (*fpProc)(char *, char *, char *);
}ser_map_t;

#ifdef SERCLI
int icsLoginClient (char *,char *,char *);
int icsDynBigSel (char *,char *,char *);
int icsCmdOsp (char *,char *,char *);
#endif

#ifdef SERCMD
int icsCmdOspMain(char *,char *,char *);
#endif

static ser_map_t ser_map_ims[] = 
{
#ifdef SERCLI
    { "login_client", icsLoginClient },
    { "dynbigsel", icsDynBigSel },
    { "cmd_osp_check", icsCmdOsp },
#endif
#ifdef SERCMD
    { "cmd_osp_check_s", icsCmdOspMain },
#endif
    { NULL,NULL }
};

int
icsCmdOspMain(char *Rcomm, char *Param, char *cppMsg)
{
    return(0);
}

int main(void)
{
    int iRet, kk, Tot;
    char *Rcomm, *Param, *cppMsg, method_cmd[100];

    memset(method_cmd,0x00,sizeof(method_cmd));    
    strcpy(method_cmd, "cmd_osp_check_s");

    Tot=(sizeof(ser_map_ims)/sizeof(ser_map_t))-1;
    for(kk=0; kk<Tot; kk++)
    {
        if(strcmp(method_cmd, ser_map_ims[kk].cpMethod)==0)
        {
            iRet=ser_map_ims[kk].fpProc(Rcomm,Param,cppMsg);
            printf("[%s]:[%d]\n",ser_map_ims[kk].cpMethod, iRet);
        }
    }
    return(0);
}

 

 

 

static ser_map_t ser_map_ims[] = 
{
#ifdef SERCLI
    {"cmd_ops_check", icsCmdOsp},
#endif

#ifdef SERCMD
    {"cmd_osp_check_s", icsCmdOspMain},
#endif
    {NULL,NULL}
};

위에서 SERCLI와 SERCMD는 위 코드전에 선언이 되어져 있어야 한다. 아래와 같이.
#define SERCLI
#define SERCMD

만약에 아무리 찾아봐도 없다면(???????)

Makefile을 열어보면 답을 알수 있다. 
------------------------------------------------------------------------------------------------------------
#define, -D옵션, CFLAGS, avr-gcc에서 Makefile의 CFLAGS, 인수(매개변수)가 있는 사용자 정의 함수
------------------------------------------------------------------------------------------------------------

CFLAGS=-DSERCMD 로 선언이 되어 있으면, 굳이 소스코드에 넣지 않아도 컴파일시에 반영이 되도록 할수 있다.

비고)Makefile

CC=gcc
SRC=./
EXE=./
INC=./
CFLAGS=-DSERCMD - DDEBUG -DLOGGING -I.
LIBS = -lcrypt -lnsl -lm

BIN=$(EXE)
all: $(BIN)/sample \

.c.o:
    $(CC) $(CFLAGS) -c -g $*.c

$(BIN)/sample: sample.o
    $(CC) -o $@ sample.o (LIBS) -s

clean:
    rm *.o

 


#컴파일과정에서 코드추가 가능(#define PIE 3.1416을 대신할수 있다.)
#컴파일과정에서 코드추가 가능(#define PIE 3.1416을 대신할수 있다.)

비고) Makefile 사용시에는 CFLAGS를 추가해서 구성할수 있다.

#include<stdio.h>
int main()
{
    int radius;
    float circumference;

    radius=5;
    circumference = (radius + radius) * PIE;

    printf("The circumference of circle is %7.2f \n", circumference);
    return(0);
}

>gcc -o sample sample.c
>PIE undeclared(first use in this function)
컴파일과정에서 코드추가 가능(#define PIE 3.1416을 대신할수 있다.)
>gcc -DPIE=3.1416 -o sample sample.c

가장 많이 사용하는 경우는 전처리기일것이다.

int main()
{
#ifdef INFO_DEBUG
printf("error ,mmmm1\n");
#endif

#ifdef ERROR_DEBUG
printf("error ,mmmm2\n");
#endif

printf("program terminated,mmmm\n");
}

gcc -o sample sample.c
or
gcc -DINFO_DEBUG -DERROR_DEBUG -o sample sample.c

닷넷 프레임워크

닷넷 프레임워크(.NET Framework, 이전 이름: 닷넷)는 마이크로소프트에서 개발한 윈도우 프로그램 개발 및 실행 환경이다. 
네트워크 작업, 인터페이스 등의 많은 작업을 캡슐화하였고, 
공통 언어 런타임(Common Language Runtime)(CLR)이라는 이름의 가상 머신 위에서 작동한다.

닷넷 프레임워크의 구조

.NET 프레임워크의 가장 중요한 콤포넌트는 공통 언어 기반(Common Language Infrastructure)이다. 
다른 말로 CLI라고 한다. 
CLI를 둔 목적은 애플리케이션의 개발과 실행 시 언어에 종속적이지 않은 플랫폼을 제공하기 위해서이다. 
예외 처리, 가비지 콜렉션, 보안, 호환 등을 위한 소프트웨어 콤포넌트를 포함한다. 
마이크로소프트가 구현한 CLI를 일컬어, 공통 언어 런타임(Common Language Runtime, CLR)이라고 한다.

 



#YYYY-MM-DD HH:MM:SS 에서 MM이 변경되면 출력
#YYYY-MM-DD HH:MM:SS 에서 MM이 변경되면 출력
#YYYY-MM-DD HH:MM:SS 에서 MM이 변경되면 출력

using System;
using System.IO;
using System.Timers;

namespace ____trigia_pyeongchon
{
    class Program
    {
        public static void Main(string[] args)
        {
            ___proud_hill pro = new ___proud_hill();

            pro.running();
        }
    }

    class ___proud_hill
    {
        ConsoleKeyInfo keyinfo;
        int xpos,ypos;
        Timer tm;
        string ____old_month, ____now_month;

        public void running()
        {
            tm = new Timer();
            tm.Interval = 1000;

            xpos=ypos=2;

            ____old_month="INIT";
            ____now_month="INIT";

            tm.Elapsed += new ElapsedEventHandler(__time_tick);
            tm.Start();

            Logging("Start");

            while(true)
            {
                keyinfo = Console.ReadKey(true);

                if(keyinfo.Key == ConsoleKey.RightArrow) xpos++;
                else
                if(keyinfo.Key == ConsoleKey.LeftArrow) xpos--;
                else
                if(keyinfo.Key == ConsoleKey.UpArrow) ypos++;
                else
                if(keyinfo.Key == ConsoleKey.DownArrow) ypos++;
                else
                if(keyinfo.Key == ConsoleKey.Escape) break;

                if(keyinfo.KeyChar=='+')
                {
                    tm.Stop();
                    tm.Interval += 10;
                    tm.Start();
                }
                else
                if(keyinfo.KeyChar=='-')
                {
                    tm.Stop();
                    tm.Interval -= 10;
                    tm.Start();
                }

                Logging("Key");
            }
            tm.Stop();
            tm.Elapsed -= __time_tick;

            Logging("Stop");
        }

        void __time_tick(object sender, ElapsedEventArgs e)
        {
            ypos++;

            Logging("Time");
        }

        void Logging(string msg)
        {
            DateTime now;

            now = DateTime.Now;

            ____now_month = now.ToString("mm");
            if(____now_month != ____old_month)
            {
                if(____old_month !="INIT" )
                {
                    Console.WriteLine("Minute is changed!!!!!, KeyBoard HIT is needed!!");
                }
            }

            Console.WriteLine("Debug>>Time:" + now.ToString("yyyy-MM-dd hh:mm:ss") + 
                  " YYYY:" + now.ToString("yyyy") + 
                  " MM:" + now.ToString("MM") + 
                  " mm:" + now.ToString("mm") + 
                  " Pos:[" + ypos.ToString("000000") + "," + xpos.ToString("000000") + "]" +
                  " Interval:" + tm.Interval + 
                  " Event:" + msg);
            ____old_month = ____now_month;
        }
    } //end of class
} //end of namespace





    

+ Recent posts