라벨이 프로그래밍 예제인 게시물 표시

C++ 예제 (Tetris, 테트리스 게임)

이미지
개요 이전 게시물과 동일하지만 C++ 언어로 만든 테트리스 게임 입니다. 파이썬 버전과 최대한 동일하게(변수, 함수, 클래스명 등) 만들어져 있으므로 코드 설명은 이전 게시물 참조 바랍니다.

파이썬 예제 (Tetris, 테트리스 게임)

이미지
개요 이번 주제는 Python + PyQt5 로 만든 테스리스 게임입니다. (키보드 화살표 ←, →, ↑(회전), ↓(빨리하강) 로 조작) 예전에 C++ 로 만들어 올려둔 게시물이 있는데, 구글에서 저작권 위반 신고가 들어와 게시물이 삭제(?)되어 현재는 게시글이 없어진 상태입니다. 제가 직접  짠 코드인데 이유는 정확히 모르지만 같이 넣어둔 게임 효과음이 원인이 아닐까 추측합니다.😓 

파이썬 예제 (QTableWidget Copy & Paste)

이미지
개요 최근 QTableWidget Class를 사용하는 중,  Excel 파일 값 복사, QTableWidget에 붙여넣기 QTableWidget의 값 복사 Excel에 붙여넣기 를 할 필요가 생겼습니다. 혹시나 해서, 코드를 따로 작성하지 않고 빈 QTableWidget 을 만들고 엑셀 데이터를 복사( Copy )해 붙여넣기( Paste ) 해보니 역시나 동작하지 않습니다. 세상에 공짜는 없습니다. 😅 아마도 QWidget 에서 Ctrl + C, V 키보드 이벤트 발생을 감지하고, 복사된 클립보드의 내용을 따로 처리해주는 코드가 필요할 것으로 예상됩니다. 간단하게 생각하고 바로 코드를 작성하기 진행하였지만 생각보다 복잡해 그 과정을 정리해 보았습니다.    목표 Copy data from Excel file to QTableWidget   Copy data from QTableWidget to Excel 소스코드 from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTableWidget, QTableWidgetItem from PyQt5.QtCore import Qt import sys QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) class Window(QWidget): def __init__(self): super().__init__() self.initUi() self.resize(400,600) def initUi(self): self.setWindowTitle('Ocean Coding School') self.tw = QTableWidget() row = 10 col = 3 self.tw.set

C++ 예제 (Qt Android 게임개발)

이미지
개요 약 3년 전 C++언어로 Qt, Android 개발환경 구축 을 소개한 글이 있었습니다. 참조 : C++, Qt Android App 개발 (이전 글)   세월이 지나 최근 C++ Qt 환경에서 Android 배포용 앱을 만들다 보니 기존과 변경된 부분이 있어 정리해두고자 합니다. 이 글은 Windows 11 에서  Qt Creator, C++ , Cross Platform 을 활용해 Android Device 용 앱을 개발하고 업로드하는 과정을 담고 있습니다.

파이썬 예제 (엑셀 업무자동화)

이미지
개요 오늘은 파이썬으로 엑셀파일을 분석 해 데이터를 통계화 하고 박스차트 로 표현하는 예제를 만들어 보겠습니다. 

C++ 예제 (동기 vs 비동기)

이미지
개요 이번 주제는 C++ 코드 실행의 Synchronous(동기) vs Asynchronous(비동기) 에 대한 기록입니다. 동기화된 프로그래밍은 어떤 한 작업이 완료될 때까지 다른작업은 수행되지 않고, 비동기는 그 반대입니다.

파이썬 예제 (DragFit, 근사함수 생성기)

이미지
개요 이번 예제는 마우스로 드래그한 좌표를 기반으로 근사함수를 Fitting 하는 예제 입니다.  차트 위 마우스로 선을 그리면 해당 좌표에 적합한 근사함수를 차수에 따라 만들어주는 기능을 가지고 있습니다.  (함수 항의 0.00 은 소수점 표시가 2자리로 고정 되어 그 이하값이 생략되지만 연산에는 반영)  [DragFit 실행화면] 동영상을 통해 차수가 올라갈 수록 보다 적합 해지는 과정을 확인 할 수 있습니다. 참고로 위 예제는 Numpy의 polyfit () 함수 에 의해 데이터 셋을 근사화 하고 있습니다. 좀 더 들여다 보면 polyfit 함수는 3개의 전달인자 x data, y data, deg(차수) 를 전달하면 최소제곱법 을 사용하여 직선의 기울기 와 절편 을 찾을 수 있습니다. 직선의 기울기와 절편은 데이터 셋과 직선 사이의 오차의 제곱합을 최소화 하는 값입니다. 예를 들면 아래의 데이터 셋을 최소제곱법으로 근사하면 아래와 같습니다. import numpy as np # 주어진 데이터 포인트들 x = np.array([1, 2, 3, 4, 5]) y = np.array([3, 6, 5, 8, 10]) z = np.polyfit(x, y, 1) print(z) # z = [1.6 1.6] # 기울기, 절편 # f(x) = 1.6 * x + 1.6 [최소제곱법 예]

파이썬 예제 (Segment Anything Model)

이미지
개요 최근 심화반수업을 수강하는 학원생분을 통해 Meta AI (과거 Facebook ) 에서 발표한 SAM ( S egment A nything M odel) 이라는 기술을 알게되었습니다. 

C++ 예제 (Infix to Postfix)

이미지
개요 안녕하세요. 중위 표기법(infix) 으로 표현된 수식을 후위 표기법(postfix) 로 바꾸는 C++ 계산기입니다.   1. 문자열로 중위표기법 입력 ( A-Z, a-z, 0~9,+,-,*,/,^,(,) )   2. 피연산자 (A-Z, a-z, 0~9) 는 후위식 문자열에 저장   3. 열리는 괄호 '(' 는 Stack에 저장   4. 닫기는 괄호 ')' 만나면 다음 '(' 만나기 전까지 Stack Pop 수행, 후위식 문자열에 저장   5. 연산자는 Stack에 추가 우선순위가 높은 연산자는 Stack Pop 수행, 후위식 문자열에 저장 개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   calc.h #ifndef CALC_H #define CALC_H #include <string> class Calc { public: Calc(const std::string& exp); ~Calc(); private: const unsigned int MAX; std::string infix; int priority(char c); public: std::string infixToPostfix(); int calcPostfix(const std::string& exp); }; #endif // CALC_H   calc.cpp #include "calc.h" #include <iostream> #include <cstring> #include <stack> #include <cmath> using namespace std; Calc::Ca

파이썬 예제 (오목)

이미지
개요 오목게임을 파이썬을 이용해 만들어본 예제입니다. GUI 앱 을 처음 시도해보는 초보가가 공부하기 좋은 예제라고 생각합니다.  

C++ 예제 (이진탐색트리, BST)

이미지
개요 안녕하세요. C++ 자료구조 (Data Structure) 중 검색에 특화된 BST ( B inary S earch T ree)를 구현한 예제입니다. Root 기준으로 작은 값은 왼쪽, 큰값은 오른쪽, 중복허용X 연결리스트 (Linked List) 로 구성 삽입, 순회, 검색, 삭제 가능 노드 삭제 시 자식노드의 수 (0, 1, 2) 에 따라 삭제법이 다름에 유의   Visualization Link : https://www.cs.usfca.edu/~galles/visualization/Algorithms.html   개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   bst.h #ifndef BST_H #define BST_H struct Node { Node(int _v=0, Node *_L=nullptr, Node *_R=nullptr) : v(_v), L(_L), R(_R) {} int v; Node *L, *R; }; class BST { public: BST(); ~BST(); private: Node *pRoot; public: inline Node* root() {return pRoot;} void insert(int v); void preorder(Node *); void inorder(Node *p); void postorder(Node *p); Node* search(Node *p, int v); void remove(int v); private: Node* insert(Node *p, int v); void deleteNode(Node *p); Node* remove(No

C++ 예제 (Stack 자료구조)

이미지
개요 안녕하세요. C++ 자료구조 (Data Structure) 의 가장 기본인 Stack 을 구현한 예제입니다. 마지막에 들어간 값이 먼저 나오는 LIFO (Last In First Out) 구조. 배열 (Array) 로 구성 Push, Pop 이 일어날 때 배열의 값이동(X), 인덱스 (top) 이동(O) 생성자에서 동적할당하는 클래스는 복사생성자, 대입연산자를 따로 정의 ( Queue 예제를 참조 하여 Do it yourself. 아래 예제에서 생략) 개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   stack.h #ifndef STACK_H #define STACK_H const int MAX = 5; class Stack { public: Stack(int _size=MAX); ~Stack(); public: void push(int v); int pop(); void print(); inline int length() {return size;} private: bool isFull(); bool isEmpty(); private: int top, size; int *p; }; #endif // STACK_H stack.cpp #include "stack.h" #include <iostream> #include <cstring> using namespace std; Stack::Stack(int _size) : top(0), size(_size), p(nullptr) { cout << "Contructor" << '\n'; p = new int[size];

C++ 예제 (Queue 자료구조)

이미지
개요 안녕하세요. C++ 자료구조 (Data Structure) 의 가장 기본인 Queue 를 구현한 예제입니다. 먼저 들어간 값이 먼저 나오는 FIFO (First In First Out) 구조. 배열 (Array) 로 구성 Push, Pop 이 일어날 때 배열의 값이동(X), 인덱스 (head, tail) 이동(O) 생성자에서 동적할당하는 클래스는 복사생성자, 대입연산자를 따로 정의 개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   queue.h #ifndef QUEUE_H #define QUEUE_H const int MAX = 5; class Queue { public: Queue(int _size=MAX); ~Queue(); Queue(const Queue& other); Queue& operator=(const Queue& other); private: int size; int head, tail; int *p; public: void print(); void push(int v); int pop(); }; #endif // QUEUE_H queue.cpp #include "queue.h" #include <iostream> #include <cstring> using namespace std; Queue::Queue(int _size) : size(_size), head(0), tail(0), p(nullptr) { cout << "Constructor" << '\n'; p = new int[size]; memset(p

파이썬 예제 (아웃룩, eMail Client)

이미지
개요 이번에 소개할 예제는 MS 아웃룩 (Outlook)과 비슷하게 만들어본 이메일 클라이언트 입니다. 예제로서 소개하기 위해 아웃룩처럼 복잡한 기능은 빼고, IMAP을 지원하는 이메일 계정에 접속해 메일을 읽어 오는 기능까지만 구현하였습니다. 로그인 부분에서 다수의 이메일 계정을 입력하면 추가로 탭을 구성하고 메일수신이 가능합니다. 먼저 전자메일 서버에 로그인 해야 합니다. 대부분 전자 메일 서버는 IMAP을 지원 하며, 서버에 2단계 인증 및 앱 비밀번호 를 미리 등록해 두어야 합니다. (앱 비번은 로그인 비번 X, 전자메일 전용 비밀번호 O) [ 예) Goggle 보안 - 2단계 인증, 앱 비밀번호 생성 ] 해당 전자메일 전용 앱 비밀번호를 이용해 로그인을 시도합니다. [eMail Account] 전자메일 서버 로그인 후, 읽어들인 전자메일을 QTableWidget 에 표시. [eMail Contents]   유의 사항 본인 메일서버의 IMAP 기능을 활성 화 시킨 후 적용하기 바랍니다. POP3는 지원하지 않으며, IMAP SSL (TLS X)만 읽을 수 있도록 설정해 두었습니다. TLS 암호화를 사용하는 분은 소스코드의 로그인 부분만 수정하면 됩니다. SMTP는 향후 추가할 계획입니다. 예제에서 테스트된 메일 서버는 Naver, Google Gmail 입니다. 

C++ 예제 (동적메모리 할당, 배열)

이미지
개요 C++ 배열을 이용한 동적메모리 할당 (Dynamic Allocation) 구현 예제 입니다. 런타임 에 메모리를 어떻게 관리하는지 공부해 봅시다. 최초 5개의 정수형 배열을 Heap 영역에 동적할당하고, 저장공간이 부족한 경우 2배로 배열의 크기를 늘려가는 방식입니다. [배열의 동적할당] 동작 순서 1. 처음 배열 5개를 생성하고, 데이터를 삽입 2. 데이터가 5개를 초과하면 새로운 배열을 2배 크기(10개)로 동적할당     3. 기존 배열의 데이터를 새 배열로 복사 후 신규 데이터는 새 배열에 저장 4. 기존 배열 (5개) 을 삭제하고 새 배열의 주소를 포인터에 저장 소스코드 #include <iostream> #include <cstring> using namespace std; int main() { int size = 5; int pos = 0; int *p = new int[size]; memset(p, 0, sizeof(int)*size); while (true) { cout << "Input number(Exit:0): "; int n; cin >> n; if (n==0) break; if(pos>=size) { size *= 2; int *p2 = new int[size]; memset(p2, 0, sizeof(int)*size); for(int i=0; i<size/2; i++)

파이썬 예제 (Matplotlib mouse event)

이미지
개요 이번 주제는 Matplotlib 의 마우스 이벤트 처리 에 대해 살펴보겠습니다. 차트를 그리는 예제는 많은데 그려진 차트에 마우스, 키보드 등 이벤트를 처리하는 코드는 찾기가 어려워 공부삼아 만들어 보았습니다. 먼저 완성된 결과물은 아래와 같습니다.   이 예제에서 다루는 Matplotlib Mouse Event 는 다음과 같습니다. Pressed           (Matplitlib callback 이용) Released         (Matplitlib callback 이용) Move             (Matplitlib callback 이용) ContextMenu   (PyQt5 callback 이용) 아래와 같이 차트위 마우스 이벤트 발생시 해당 좌표가 출력되며, 수직선을 변경된 위치로 옮겨 그려주도록 구성하였습니다. [예제 프로그램 실행화면]

파이썬 예제 (multiprocessing)

이미지
개요 안녕하세요. 오늘은 파이썬의 multiprocessing (프로세스 기반 병렬처리) 에 대해 살펴보려고 합니다. 아시다시피 파이썬은 GIL ( G lobal I nterperter L ock) 메커니즘으로 구현되어 있으며, 이로인해 얻은 이점도 ( Thread-Safe ) 있지만, Multi-Thread 기반 병렬처리에서 많은 손해를 봅니다.   잠깐 상상해 볼까요. 만약 1부터 1억까지 모든 수가 나열된 수열이 있고, 이를 모두 더한 합을 구하고 싶습니다. 싱글쓰레드, 멀티쓰레드, 멀티프로세싱 모두 답은 얻을 수 있지만 무엇이 가장 빠를까요? 자세한 내용은 뒤에 소개하겠습니다.   우선 이해를 돕기위해 Application , Proecss, Thread 개념을 간단히 살펴보고 진행하겠습니다. Application (앱) 줄여서 앱(App) 이라고 부르며, 어떤 목적을 가지고 실행중인 프로그램 입니다. 하나 이상의 Proecss 로 구성됩니다. 아래 그림 예시에서 게임앱은 2개의 프로세스 가 서로 통신 ( IPC , 프로세스간 통신) 하며 실행되고 있고 엑셀앱은 단일 프로세스 로 실행중인 모습입니다. 앱은 1개이상의 프로세스로 구성될 수 있습니다. 그리고 프로세스는 1개의 메인쓰레드를 (실행흐름) 갖지만, 별도로 N개의 쓰레드를 생성해 구성할 수도 있습니다. [App, Process, Thread 관계] Process (프로세스) 실행중인 앱을 구성하는 단위(Task) 이며, 1개 이상의 프로세스가 모여 앱을 구성합니다. 하나의 앱은 꼭 1개의 프로세스가 아니라 다수의 프로세스로 구성될 수도 있다는 의미입니다. 예를 들어 게임이라면 아군이동, 적군이동, 코드가 프로

파이썬 예제 ( installEventFilter 처리 )

이미지
개요 Qt 의 Class를 이용 앱 제작시,  QWidget 에서 상속받은 컨트롤 ( QListWidget, QTableWidget, QLineEdit 등) 클래스의 이벤트 처리를 위해 서브 클래싱 (Subclassing) 을 자주 사용하게 됩니다. 예를 들면, 화면위젯에 생성된 리스트위젯에 키보드가 눌러졌는지 등을 체크하기 위해서 말이죠. 하지만, 매번 컨트롤의 이벤트를 감지하기 위해 서브클래싱을 이용하는 것은 피곤한 절차입니다. 왜냐하면 상속받은 클래스를 따로 만들고, 해당 이벤트 처리 함수를 매번 오버라이딩 (Overriding) 하는 소모적인 작업이 뒤따르기 때문입니다.

C++ 예제 (T-Rex Game)

이미지
개요 이전 게시물인 파이썬기반 T-Rex 게임의 C++ 버전 입니다. 동작방식은 기존의 파이썬 버전 (PyQt) 과 동일하며, Qt 기반으로 작성되어 있습니다. [ C++로 만든 T-Rex Game ]  

파이썬 예제 (T-Rex Game)

이미지
개요 안녕하세요. 요즘 자전거 타는 재미에 빠져 오랜만에 글을 올리는것 같네요. 이번시간에는 구글 크롬 웹브라우저 에 내장되어 인터넷 연결이 원활하지 않을때 실행되는 T-Rex Game 을 파이썬으로 만들어 보았습니다. 심화반 수업을 듣는 학원생 중, 이 게임을 주제로 진행하는 친구들이 많은데 참조바랍니다. [ T-Rex Game 실행화면 ] 실행화면은 아래 동영상 참조 바랍니다.  

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)