본문 바로가기

프로그래밍226

C++ ] vector 사용법 vector 사용법 HTML 삽입 미리보기할 수 없는 소스 1. 기본 생성자: 요소의 타입을 지정하지 않으면 빈 벡터가 생성 std::vector vec; // 빈 벡터 생성 2. 초기화 리스트: 중괄호를 이용해 초기 값을 지정 std::vector vec = {1, 2, 3}; // 값이 {1, 2, 3}인 벡터 생성 3. 크기 지정: 생성 시, 초기값이 지정된 요소의 개수를 지정 std::vector vec(5); // 크기가 5이고 모든 값이 0인 벡터 생성 std::vector vec(5, 2); // 크기가 5이고 모든 값이 2인 벡터 생성 4. 복사 생성자: 다른 벡터를 복사하여 생성 std::vector vec1 = {1, 2, 3}; std::vector vec2(vec1); // vec1.. 2023. 3. 31.
C++ ] STL 과 컨테이너 HTML 삽입 미리보기할 수 없는 소스 C++ 언어에서 사용되는 기본 라이브러리로, C++ 컴파일러에 의해 제공된다. 표준 라이브러리는 std 네임스페이스 안에 있는 여러 클래스와 함수를 포함하, STL은 표준 라이브러리의 일부이다. HTML 삽입 미리보기할 수 없는 소스 STL(Standard Template Library)은 C++ 표준 라이브러리의 일부로서, 데이터 구조와 알고리즘을 구현한 템플릿 클래스들의 집합이다. STL은 C++ 개발자들이 높은 수준의 추상화를 이용하여 복잡한 작업을 더 간결하게 표현할 수 있도록 돕는데, 크게 아래와 같은 세 가지 부분으로 구성된다. 1. 컨테이너(Container) 데이터 구조를 구현한 클래스의 집합. 이를 통해 개발자들이 데이터를 쉽게 저장하고 관리할 수 .. 2023. 3. 25.
범위기반 for문, 문자열에서 문자 반복 C++의 범위기반 for문은 C#에서의 foreach와 같으며 사용법은 아래와 같다. for(data type elem : data list) { // do something with elem variable } array, vector, string 등 순회가 가능한 데이터 리스트는 범위기반 for문을 사용해 반복할 수 있다. 일반 for문에 비해 안전하고 간단하지만 index 정보가 없다는 단점이 있다. 문자열에서 문자 반복하기 string 클래스의 length(), size() 메소드를 사용해 일반 for문을 돌릴 수 있지만 아래와 같이 범위기반 for문을 쓸 수도 있다. for (char c : s) for (char& c : s) 위 두 for문의 차이는 위에 것은 s의 element를 c에 복.. 2023. 3. 25.
Python ] import (상위/하위/동일 폴더, 다른 경로) 모듈 가져오기(import) 파이썬의 표준라이브러리와 아나콘다를 설치하며 같이 설치된 라이브러리들은 환경변수 path에 추가되었기 때문에 따로 경로 지정없이 import 할 수 있으며 동일 폴더 내에 있는 파일도 마찬가지다. 예를 들어, 현재 작업 폴더 내에 module.py라는 파일이 있고 이를 import하려면 다음과 같은 방법을 사용할 수 있다. import 모듈 import 모듈 as 별칭 모듈에서 필요한 함수 또는 클래스만 import 하기 from 모듈이름 import 함수이름 from 모듈이름 import 클래스이름 from math import pi, sqrt 상위 폴더 모듈 import 하기 from .. import 모듈 하위 폴더 모듈 import 하기 from 폴더명 import 모.. 2023. 3. 25.
Python ] if __name__ == '__main__': if __name__ == '__main__': 은 왜 필요할까? 파이썬 코드를 모듈 형태로 가져올 때와, 스크립트 형태로 직접 실행할 때를 구분하기 위한 용도로 사용된다. 파이썬 코드를 작성할 때, 일반적으로 함수나 클래스를 정의한 후 다른 코드에서 이를 임포트하여 사용한다. 이 때, 모듈로 작성된 코드가 다른 코드에서 임포트되었을 때에는 그 모듈의 __name__ 속성 값은 모듈의 이름이다. 하지만, 직접 실행할 때에는 __name__ 속성 값이 '__main__'으로 지정된다. 따라서, if __name__ == '__main__': 구문 아래 현재 스크립트가 직접 실행될 때에만 실행되는 코드 블록을 작성하면, 이 구문을 사용하여 스크립트를 모듈 형태로 가져올 때와, 직접 실행할 때 각각 다른 동작.. 2023. 3. 25.
C ] atoi 함수 구현 #include int myatoi(char* str) { int sign = 1; int sum = 0; while (*str == ' ') { str++; } if (*str == '-') { sign = -1; str++; } while (*str) { int num = *str - '0'; // 0x30 if (num >= 0 && num 2023. 3. 25.
C ] isalpha, isupper, islower, isdigit, isxdigit, isalnum, isspace, ispunct, isprint, isgraph, iscntrl, isascii, 함수 구현 int my_isalpha(int c) { return (c >= 'A' && c = 'a' && c = 'A' && C = 'a' && C = '0' && c = 'A' && c = 'a' && c = 0 && c = 32 && c = 0 && c 2023. 3. 25.
C#, WinForms ] 계산기 구현 STATE에 따라 버튼 이벤트가 다르게 동작해야 하기 때문에 어떻게 할까 고민하다 아래 4가지로 정의해서 구현해봄 IDLE COMPLETE_FIRST_NUMBER OPERATOR_INSERTED COMPLETE_SECONDE_NUMBER 지금 C#문법 배우는 중이고 일단 돌아가는거 보자 하고 막 만들어서 컨트롤 이름도 안바꿈.. namespace cal { public partial class Form1 : Form { enum state_t { IDLE, COMPLETE_FIRST_NUMBER, OPERATOR_INSERTED, COMPLETE_SECOND_NUMBER } state_t currentState = state_t.COMPLETE_FIRST_NUMBER; public Form1() { In.. 2023. 2. 25.
C#, WinForms ] label의 너비를 초과하는 글자 자르기 Graphics 객체를 사용해 사이즈를 구하고, 레이블 너비를 초과한 경우 Substring 메서드 사용해서 마지막 글자 지워버림 Substring 첫번째 매개변수는 추출할 문자열의 시작 인덱스, 두번째 매개변수는 추출할 문자열의 길이임. 초과되지 않게 주의 Graphics g = this.label1.CreateGraphics(); SizeF textSize = g.MeasureString(this.label1.Text, this.label1.Font); if(this.label1.Width < textSize.Width) { this.label1.Text = this.label1.Text.Substring(0, this.label1.Text.Length - 1); } 2023. 2. 25.
C# ] decimal 과 double 의 차이 C#에서 실수를 저장할 수 있는 변수로 double과 decimal이 자주 사용됨. double은 부동소수점 방식을 이용하고, decimal은 고정소수점 방식을 이용함 - double은 64비트(8바이트)크기에, 약 15~16 자리의 유효숫자를 가진다. decimal에 비해 연산이 빠르기에 대부분의 경우 사용됨. - decimal은 128비트(16바이트)크기에 28~29 자리의 유효숫자를 가진다. 정밀한 계산이 필요한 금융, 세금, 과학 등의 분야에서 사용됨. double d = 1.1 + 2.2; // d = 3.3000000000000003 decimal m = 1.1M + 2.2M; // m = 3.3 double의 경우 비교연산을 사용하면 예상 결과 나오지 않는다. 이는 double 은 이진수로 .. 2023. 2. 25.
C#, WinForms ] MessageBox 속성 private void button2_Click(object sender, EventArgs e) { MessageBox.Show("Do you want to delete?", "DELETE", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); } 2023. 2. 25.
C#, WinForms ] textBox 크기에 맞춰서 Font Size 조절하기, resize the font to fit in the texBox Graphics g = textBox1.CreateGraphics(); SizeF textSize = g.MeasureString(textBox1.Text, textBox1.Font); float scale = Math.Min(textBox1.Width / textSize.Width, textBox1.Height / textSize.Height); float fontSize = textBox1.Font.Size * scale; textBox1.Font = new Font(textBox1.Font.FontFamily, fontSize, textBox1.Font.Style); textBox 컨트롤의 Graphics object를 구함 text와 font를 매개변수로 넣고 sizeF 구조체로 너비와 높이 구함.. 2023. 2. 25.
C#, WinForms ] 천 단위로 콤마 넣기, separate Numbers with commas string.Format("{0:#,##0}", num); 사용 예시. label의 textChanged Event처리 함수 "."으로 끝나는지, 소숫점을 포함하는지, 정수인지 구분하여 처리. string의 Replace()와 Split() 메서드 사용 if(this.label1.Text.EndsWith(".")) { string numStr = this.label1.Text.Replace(",", "").Replace(".", ""); if (decimal.TryParse(numStr, out decimal num)) { string formattedStr = string.Format("{0:#,##0}", num); this.label1.Text = formattedStr + "."; } } else.. 2023. 2. 25.
C#, WinForms ] 정수인지 실수인지 확인하기, Integer / Real number 구분 Math.Floor() 함수를 사용하면된다. 내림한게 원래 값과 같으면 정수, 아니면 실수이다. double result = first + second; if(Math.Floor(result) == result) { this.label1.Text = string.Format("{0:#,##0}", result); } else { this.label1.Text = string.Format("{0:#,##0.########################}", result); } 2023. 2. 25.
C# ] 문자 또는 문자열 집합 중 하나라도 포함하고 있는지 확인하기 Contains 또는 IndexOfAny 사용 가능 Contains() 는 특정 문자열 또는 문자열 배열중 하나가 문자열 내에 존재하는 존재하는지 여부를 검사하여 bool을 반환. string str = "Hello, World!"; string[] keywords = {"World", "Universe"}; if (str.Contains(keywords[0])) { Console.WriteLine("The string contains the keyword: " + keywords[0]); } if (!str.Contains(keywords[1])) { Console.WriteLine("The string does not contain the keyword: " + keywords[1]); } Index.. 2023. 2. 25.
C#, WinForms ] 버튼 속성. 테두리색 및 굵기, 클릭시 배경색 변경하기 FlatStyle - Flat 설정 FlatAppearance - BorderColor 로 테두리색 변경 FlatAppearance - BorderSize 로 테두리 굵기 변경. 0으로 하면 테두리 없앰 FlatAppearance - MouseDownBackColor 로 클릭시 버튼 배경색 변경 FlatAppearance - MouseOverBackColor 로 마우스가 올라왔을 때 배경색 변경 2023. 2. 25.
C#, WinForms ] OpenFileDialog, 이미지 pictureBox에 로드하기 private void button1_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Image Files (*.bmp;*.jpg;*.jpeg;*.png)|*.BMP;*.JPG;*.JPEG,*.PNG"; dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); if(dialog.ShowDialog() == DialogResult.OK) { textBox1.Text = dialog.FileName; pictureBox1.SizeMode = PictureBoxSizeMode.S.. 2023. 2. 22.
C#, WinForms ] textBox박스의 focus 없애기/주기 focus 없애는 방법 Properties - TabStop False로 설정 또는 Form Load 시 this.ActiveControl = null; focus 주는 방법 Form Load 시 this.ActiveControl = textBox1; 또는 textBox1.Focus(); 2023. 2. 21.
C#, WinForms ] 문자열 앞에 (심벌)@사용 @ 심벌을 문자열 앞에 사용하면, 해당 문자열 안의 Escape 문자를 무시하고 문자 그대로 인식하도록 한다. 예를 들어, Backslash를 한번 지정하면 이는 Escape문자로 인식되기 때문에 2개의 Backslash를 사용하게 되는데, @ 심벌을 문자열 시작 부호전에 사용하면, Backslash를 그대로 Backslash로 인식하게 한다. 예시1. string filename = "C:\\Temp\\1.txt"; string filename = @"C:\Temp\1.txt"; 예시2. this.textBox1.Text = duration.ToString(@"hh\:mm\:ss\.fff"); this.textBox1.Text = duration.ToString("hh\\:mm\\:ss\\.fff");.. 2023. 2. 21.
DateTime 문자열 서식지정자 주의 : 날짜 및 시간 형식은 Locale 설정에 따라 달라질 수 있다. https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings Custom date and time format strings Learn to use custom date and time format strings to convert DateTime or DateTimeOffset values into text representations, or to parse strings for dates & times. learn.microsoft.com Format specifier Description Examples "d" Th.. 2023. 2. 21.
C#, WinForms ] 스탑워치, Stopwatch 클래스, DateTime 구조체, Timer 활용 using System.Diagnostics; //... private Stopwatch stopwatch = new Stopwatch(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // textBox 초기값 this.textBox2.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); this.textBox2.Text = ""; } private void button1_Click(object sender, EventArgs e) { // Stopwatch, Timer 스타트 stopwatch.Start(); this.timer1.St.. 2023. 2. 20.
C ] vprintf, vsprintf, vsnprintf 차이 int vprintf(const char * __restrict _format, va_list _ap); int vsprintf(char * __restrict _string, const char * __restrict _format, va_list _ap); int vsnprintf(char * __restrict _string, size_t _n, const char * __restrict _format, va_list _ap); 셋 다 마지막 매개변수로 가변인수 목록이 담긴 포인터를 받는다는 공통점이 있지만 vprintf는 콘솔로 출력하고 vsprintf와 vsnprintf는 버퍼로 출력한다는 차이점이 있다. vsprintf와 vsnprintf의 차이점은 vsnprintf는 버퍼의 크기를 지정해서 .. 2023. 2. 17.
.NET Framework, .NET, Windows Forms 란 .NET 이란? .NET은 Linux, macOS, Windows, iOS, Android 등을 다양한 유형의 애플리케이션을 구축하기 위해 Microsoft에서 만든 오픈 소스 개발자 플랫폼이다. .NET Framework와 달리 Windows 프로그램 개발에 한정되지 않고 크로스 플랫폼 개발을 지원한다. .NET Framework 란? .NET Framework는 Windows에서 애플리케이션을 빌드하고 실행하기 위한 소프트웨어 개발 프레임워크이다. ❗ .NET Framework의 릴리즈 중단과 .NET으로의 통합 .NET Framework는 4.8이 마지막 버전이며 더이상의 릴리즈는 없다. 이미 .NET Framework 4.x 일부 버전은 지원이 중단된 상태이다. 이후 .NET Framework는 .. 2023. 2. 3.
컴파일러 워닝 "was set but never used" 해결법 변수를 선언하거나 함수를 정의하고 사용하지 않으면 컴파일러가 "was set but never used" 경고를 낼 때가 있다. 다음과 같이 캐스팅하면 된다. void never_call() { (void)abc; } 2023. 1. 31.
#ifdef 와 #if defined() 의 차이 #ifdef 와 #if defined() 는 항목이 하나일 땐 동일하다. #ifdef A #if defined(A) 차이점은 #if defined() 만 아래처럼 여러 항목을 비교할 수 있다고, #ifdef 는 이런 표현이 불가능하다. #if defined(A) && (defined(B) || defined(C)) 출처 : https://zoosso.tistory.com/1201 2023. 1. 31.
WinForms ] GroupBox, Panel, TabControl 속성 GroupBox 컨트롤의 그룹으로 GroupBox를 생성 후 드래그앤드랍으로 원하는 컨트롤을 GroupBox 안에 위치시키면 된다. GroupBox 안에있는 컨트롤들의 속성을 각각 변경할 수 있지만 예를들어 GroupBox의 ForeColor를 red 로 지정하면 안에있는 컨트롤들이 ForeColor를 상속받는다. Panel Panel 은 GroupBox와 유사하게 컨트롤을 그룹핑하는데 쓰인다. TabControl TabControl 은 많은 컨트롤을 적은 공간에 그룹핑하여 표시하는 데 유용하다. TabControl 안에 GroupBox 또는 Panel을 넣을 수 있다. 화살표버튼을 눌러 탭 추가/제거가 가능하다. 또한 페이지 안쪽을 클릭하면 TabPage 컨트롤의 속성을 설정할 수 있고 페이지 바깥쪽을.. 2023. 1. 31.
WinForms ] ProgressBar, PictureBox, NumericUpDown, TrackBar 속성 ProgressBar 사용자에게 진행 상황을 알려줄 수 있는 컨트롤이다. Maximum 과 Minimum 속성을 통해 상한과 하한을 설정할 수 있다. Value 속성으로 현재 값을 지정할 수 있다. Style 은 세 종류가 있는데 Blocks 와 Continuous 가 우리가 일반적으로 아는 Progress Bar이고 둘 은 윈도우10 이상에선 차이가 없는 듯 하다. Style에서 Marquee 를 선택하면 아래와 같은 애니매이션을 볼 수 있다. Marquee 같은 경우 속성에서 속도도 설정 가능하다. PictureBox 컨트롤을 추가하고 화살표를 눌러 이미지를 선택한다. 크기 모드에서 Normal / StretchImage / AutoSize / CenterImage / Zoom 중 하나를 선택할 수 .. 2023. 1. 29.
C#, WinForms ] PictureBox 위의 Label 배경색 투명하게 설정하기 디자이너에서 단순히 label의 BackColor를 Transparent 로 지정되도 투명하게 오버레이되지 않는다. 방법은 label 의 Parent 속성을 label 뒤에 있는 컨트롤로 변경해주는 것이다. label1.Parent = pictureBox1; label1.BackColor = Color.Transparent; 단, label을 생성하면 디폴트 Parent 속성이 Form 인데 PictureBox로 바꾸었으니 Location 위치도 바꾸어 주어야 한다. (0, 0)이 PictureBox의 좌상단이다. 2023. 1. 29.
WinForms ] 체크박스, 라디오버튼 속성 Text AutoSize 이 값을 False로 하면 체크박스의 크기를 조절할 수 있다. 그리고 컨트롤의 CheckAlign / TextAlign 을 제대로 사용하기 위해 이 값이 False로 되어있어야 한다. CheckAlign Checked & CheckState True로하면 체크박스의 초기값을 체크된 상태로 할 수 있다. CheckState의 Interminate 은 ThreeState를 사용하는 것으로 사용자가 아무런 클릭을 하지 않았을 때의 상태를 말하는 것인데, 그냥 Checked or Unchecked 의 TwoState를 사용하는 것이 낫다. Cursor Enabled Appearance 확인란의 모양을 버튼모양으로 바꿀 수 있다. Image ImageAlign TextAlign Font .. 2023. 1. 16.
WinForms ] 콤보박스, 리스트박스 속성 아이템 추가 DropDownStyle DropDown : 사용자가 커서를 두고 직접 입력할 수 있으며, 옵션을 선택할 수도 있다. DropDownList : 사용자가 입력할 수 없고, 아이템을 선택할 수만 있다. Simple의 경우 아래처럼 콤보박스의 길이를 늘려 아이템이 다 보이게끔 할 수 있다. DropDownHeight 드롭다운의 픽셀 단위 높이이다. 예를들어 기본값에서 50픽셀로 줄이면 아래와 같이 표현된다. Sorted 이 값을 True로하면 콤보박스의 항목인 문자열을 알파벳 순으로 정렬할 수 있다. 한번 정렬를 하고나면 Sorted를 다시 False로 바꿔도 정렬된 순서가 그대로 남는다. ListBox 는 드롭다운이 없는 콤보박스와 같다. 2023. 1. 15.