옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

1. 정보모음에 소홀히 하지 말고 설명서를 읽음에 게을리 하지 말지어다.

오늘 필요 없는 정보는 내일 필요하리라. 가장 가치 있고도 저렴한 지식은 책 속에 있느니라. 서점과 동료의 책꽂이에 무엇이 꽂혀 있는지 때때로 살피어라. 무심코 흘렸던 종이 한 장이 너의 근심을 풀어 주었으리라. 설명서는 충분히, 꼼꼼히 읽을지어다. 모든 의문은 설명서를 안 보는데서 생기니라. 그렇더라도 모두 다 읽을 필요는 없느니라. 많은 정보가 능사는 아니니라. 정보의 가치를 찾는 법부터 배우라. 세상엔 너무나 많은 자료와 정보가 넘쳐난다.

알알이 모두 끌어 모을 생각을 하기 보단 정보를 하나로 꿰는 법부터 먼저 배우는것이 너의 근심에서 쉽게 벋어나게 하는 방법이 되리라. 일을 시작하기전에 필요한 정보를 꼼꼼히 먼저 챙기는 법부터 배워라. 너희는 먼저 개발 의뢰서를 꼼꼼히 읽을지어다. 만약 개발 의뢰서가 없다면 발주자에게 요구할 지어다. 개발 의뢰서 없는 프로그램은 존재하지 않으니라.

2. 너의 PC가 안전하다고 믿지 말지어다.

5분 후에 정전이 되고 내일 너의 하드가 맛이 가리라. 그러니 너의 소중한 소스코드는 정기적으로 여러 군데에 단계별로 백업해 두어라. PC는 평상시엔 안전하다. 그런 실수를 저지르는것은 네자신이거나 아니면 외부적인 요인에 기인한다. 항상 백업을 철저히 해두며 백업에 백업까지도 챙겨두라. 그리고 백업을 했다면 리스트를 작성하라. 쓸데없는 백업은 백해 무익하나니 리스트를 항상 유지할 지어다. 너희는 노트를 옆에 끼고 살 지어다. 노트는 너의 생명이며, 너희가 기억하지 못하는 모든것을 상기시켜 줄지어다.

3. 변하는 수를 다룰 때에는 늘 조심할지어다.

정수가 절대로 그 한계를 넘지 않으리라 가정하는 것은 어리석음이라. 127 ,-128 ,255 ,32767 ,-32768 ,65535, 이 숫자들을 너의 골수에 새기어라. 0.0은 0이 아니니 실수는 원래부터 결코 정밀하지 않느니라. 부호 없는 것과 있는 것을 어울리거나 정수끼리 나눌 때에는 늘 조심하여라. 변수는 프로그램의 근원, 프로그램을 작성할때 가장 유의 할것이 바로 변수의 이름 짓기니라. 이름보고도 성격을 알 수 있게 해두라. 그러나 변수는 성질이 더러우니 변수에 성격을 부여할때는 조심스럽게 할지어다. 너희는 코딩하기 이전에 계획을 할 지어다. 이는 프로그래머가 코더가 아닌 것이니라.

4. 무슨 일을 반복시킬 때에는 처음과 끝에 유의할지어다.

너의 컴퓨터는 1보다는 0을 좋아 하니라. 배열의 첨자가 그 범위를 넘지 않을지 손 댈 때마다 따져 보아라. 수식에 1을 더하거나 뺄 때에는 늘 긴장하라. 너의 프로그램은 단지 한 번 덜해서 틀리고 한 번 더해서 다운되느니라. 프로그램을 작성할땐 계산, 판단, 비교를 그 모든걸 컴에게 되도록 맡기지말라. 네손으로 미리 계산하고 그 결과를 사용하는 방법이 최선이니라. 컴퓨터는 의지가 없나니 네가 잘못하든 잘하든 아무런 상관이 없느라. 너희는 머리가 악세사리가 아님을 기억하고 항상 생각하고 항상 노트에 적을 지어다.

5. 항상 모든 경우의 수를 고려하고 섣불리 생략하지 말지어다.

절대로 일어 나지 않을 일은 반드시 일어나고, 가장 드물게 일어날 일이 가장 너를 괴롭히리라. 그러하니 언제나 논리에 구멍이 없는지 꼼꼼히 따져 보고, if를 쓸때에는 else 부터 생각하라. 논리적인 오류는 성급함에서 생기나니 처음엔 항상 원리와 원칙을 지키라. 생각은 네가 하라 그리고 그 결과를 컴에게 시켜라. IF를 쓰기전에 규칙을 세우라. 먼저 IF의 결과에대한 규칙부터 세우고 따져라. 그리고 논리적인 계산을 IF문장안에서 하지 말라. 하나의 IF문장속에 수많은 논리연산은 버그의 원인이니라. 어느 정도의 프로그램에 대한 윤곽이 잡히면 프로토 타입을 만들지어다. 프로토타입은 프로그램에 대한 시뮬레이션이며 발주자의 요구를 빨리 수용 하는 방법이니라.

6. 함수 안에서 매개 변수값은 결코 믿지 말지어다.

지금 그 매개 변수가 결코 가질 수 없다는 값을 내일부터는 가지리라. 그러하니 매개 변수 값이 올바름을 항상 검사할지어다. 그렇더라도 처리 속도가 문제가 되는 경우는 예외이니라. 함수도 하나의 독립적인 프로그램이란것을 잊지말며, 네가 프로그램을 작성할땐 모든 함수가 돼도록이면 독립적으로 돌아가도록 할지어다. 함수의 매계변수는 항상 그옆에 작은 컴맨트와 초기화를 잊지말라. 처음부터 속도문제를 생각하지 말라. 모든 루틴을 최적화 할순 없다. 전체 프로그램중에 단 20%가 전체 실행시간에 80%를 점유한다. 프로토 타입에대한 발주자의 의견을 꼼꼼히 들을 지어다. 이는 발주자에 대한 신뢰도의 척도니라.

7. 오류를 알려 주는 기능은 있는 대로 모두 활용할지어다.

컴파일러의 경고는 모두 켜두어라. 경고는 곧 오류이니라. 오류를 알리는 함수의 결과를 확인하지 않는 우를 범하지 말지어다. 모든 파일 입출력과 모든 메모리 할당은 조만간 실패할 것이라. 컴파일러가 모든 경고기능을 동원해도 알려주지 않는 것은 많다. 중요한 건 오류가 생기기전에 규칙을 지켰는지 생각하라. 파일의 입출력과 메모리의 항당은 항상 쌍으로 생각해서 열었다면 닫아주고 할당받았다면 돌려주라. 프로그램의 매인턴앤스를 게을리하지 말지어다. 이는 프로그램 만드는 일 보다 중요한 일이니라.

8. 한 번의 수정과 재컴파일만으로 연관된 모든 것이 저절로, 강제로 바뀌도록 할지어다.

어떠한 것을 수정했을 때에 연관된 것이 따라서 변하지 않는다면 그것이 곧 벌레이니라. 컴파일러로 하여금 매개 변수 리스트를 완전하게 검사하도록 하고 언젠가 손대야 하거나 따라서 변해야 하는 수치는 전부 매크로로 치환하며, 형 정의를 적극 활용하여라. 이미 완벽한 루틴을 손대지 말라. 프로그램이 무너지는 가장 첫번째이유는 도미노 현상 때문이나니 한번의 수정과 재컴파일로 쓸데없는것을 손대게 하지 말라. 컴파일러가 매개변수 리스트를 챙기지 말게 하라. 프로그램에 들어가기 전엔 미리 함수명과 매개변수 리스트를 만들어라. 너희는 프로그램의 도큐멘트를 만드는일에 게으르지말지어다. 이는 사용자가 너의 프로그램에 대해서는 바보이기 때문이니라.

9. 사용자가 알아서 잘 써 주리라고 희망하지 말지어다.

너의 프로그램은 항상 바보만이 쓰느니라. 사용 설명서를 쓸 때에는 결코 빠뜨리지 말아라. 빠뜨린 만큼 사용자는 너를 괴롭힐 것이니라. 사용자는 나쁜놈이다. 쓸데없는짓을 잘한다. 무식하다. 인간성도 더럽다. 대부분이 바보며 가끔 똑똑한 사람도 있는데 그 놈은 더 하다.모든것을 설명하지 말며 온갇기능을 가진 하나의 프로그램을 작성하려 들지 말라. 많은 기능이 필요한 프로그램은 나누어서 작게 따로 만들어주라. 너희는 공부하는데 게으르지 말지어다. 자고나면 새로운 하드웨어와 새로운 소프트 웨어가 나오기 때문이니라.

10. 매사에 겸손하고 항상 남을 생각할지어다.

가장 완벽한 프로그램일수록 가장 완벽하게 숨은 벌레가 있느니라. 네가 이 세상 최고의 프로그래머라고 떠들며 자만할 때, 옆집 곳간에서는 훨씬 더 뛰어난 것을 묵묵히 만들고 있느니라. 아무렴 프로그래밍은 혼자 잘나서 할 게 아니니, 너로 인해 다른 사람들도 더불어 잘 되면 그 얼마나 좋은 것이냐. 프로그래머는 논리적으로 생각하여야 하지만 프로그램은 비논리적으로 작성하라. 프로그래머가 경지에 들면 누가 누가 잘하는지 알수가 없는 법, 또한 프로그래머로서의 '무지'에 대해서 잊지마라. 프로그래머의 '무지'는 생략하고, 선택하고, 단순화시키고, 명백하게하는 것이니라. 항상 새로운 아이디어와 새로운 생각으로 무장하라. 그리고 나누라 나누는곳에 기쁨있나니 너희는 모든 프로그램에 대해서 위의 프로시줘를 따를 지니라.

 

※ 원작자는 임인건님으로 터보 씨 2.0 정복이라는 매우 유명한 C언어 책을 쓰시고 또한 한라 프로라는 도스용 한글 라이브러리를 만드신 분입니다.

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

dll파일이 필요하다고 뜨면 여기에 쳐보세요.

거의 다 나옴,,,

받아서 압축풀고 readme 는 상콤히 지워주고

system32에 넣으면 됨.

주요 클래스

class CURL
{
private:
 // The default browser
 CString m_strBrowser;
public:
 void Open(LPCTSTR lpszURL, bool bNewWindow = true)
 {
  if (bNewWindow)
   ::ShellExecute(NULL, NULL, GetBrowser(), lpszURL, NULL, SW_SHOWNORMAL);
  else
   ::ShellExecute(NULL, NULL, lpszURL, NULL, NULL, SW_SHOWNORMAL);
 }

 LPCTSTR GetBrowser(void)
 {
  // Do we have the default browser yet?
  if (m_strBrowser.IsEmpty())
  {
   // Get the default browser from HKCR\http\shell\open\command
   HKEY hKey = NULL;
   // Open the registry
   if (::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("http\\shell\\open\\command"), 0,
     KEY_READ, &hKey) == ERROR_SUCCESS)
   {
    // Data size
    DWORD cbData = 0;
    // Get the default value
    if (::RegQueryValueEx(hKey, NULL, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS && cbData > 0)
    {
     // Allocate a suitable buffer
     TCHAR* psz = new TCHAR [cbData];
     // Success?
     if (psz != NULL)
     {
      if (::RegQueryValueEx(hKey, NULL, NULL,
       NULL, (LPBYTE)psz, &cbData) ==
       ERROR_SUCCESS)
      {
       // Success!
       m_strBrowser = psz;
      }
      delete [] psz;
     }
    }
    ::RegCloseKey(hKey);
   }
   // Do we have the browser?
   if (m_strBrowser.GetLength() > 0)
   {
    // Strip the full path from the string
    int nStart = m_strBrowser.Find('"');
    int nEnd = m_strBrowser.ReverseFind('"');
    // Do we have either quote?
    // If so, then the path contains spaces
    if (nStart >= 0 && nEnd >= 0)
    {
     // Are they the same?
     if (nStart != nEnd)
     {
      // Get the full path
      m_strBrowser = m_strBrowser.Mid(nStart + 1, nEnd - nStart - 1);
     }
    }
    else
    {
     // We may have a pathname with spaces but
     // no quotes (Netscape), e.g.:
     //   C:\PROGRAM FILES\NETSCAPE\COMMUNICATOR\PROGRAM\NETSCAPE.EXE -h "%1"
     // Look for the last backslash
     int nIndex = m_strBrowser.ReverseFind('\\');
     // Success?
     if (nIndex > 0)
     {
      // Look for the next space after the final
      // backslash
      int nSpace = m_strBrowser.Find(' ', nIndex);
      // Do we have a space?
      if (nSpace > 0)
       m_strBrowser = m_strBrowser.Left(nSpace);
     }
    }
   }
  }
  // Done
  return m_strBrowser;
 }
};

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

http://codepad.org/fizzbuzz

 

각 코드 아래의 view를 누르면 실재 실행된 결과도 나와있음

 

http://codepad.org/

 

여기는 소스파일 1개짜리 프로그램을 임시로 작동해볼수 있는사이트,

 

P.S. perl의 위력을 보시라,, C++로 복잡하게 짠것을 단 3줄,

'생활 > 프로그래밍' 카테고리의 다른 글

프로그래머 10계명  (0) 2012.03.10
dll 다운로더 필요할진 모르겠지만,,,  (0) 2012.03.10
define 을 이용해서 getter, setter만들기  (0) 2012.03.10
각종 별찍기 문제 (위키펌)  (0) 2009.11.30
AType 작성중  (1) 2009.11.11

getter setter 만들기 참 귀찮았는데 말이죠 

http://eslife.tistory.com/entry/define-%EB%A7%A4%ED%81%AC%EB%A1%9C-%ED%8C%81

 

위 출처의 define매크로를 이용하면 

// SIMPLE_FUNC_IMPL -> Get/Set 함수를자동으로만들어줍니다.

// 1. ret -> return type

// 2. fname -> Get/Set 다음에올함수명

// 3. var -> Get/Set 에대상이되는변수명

#define SIMPLE_FUNC_IMPL(ret, fname, var) \

           ret Get##fname() \

           { \

                     return var; \

           } \

           void Set##fname(ret tmp) \

           { \

                     var = tmp; \

           }

위와같이 하여

 

 

SIMPLE_FUNC_IMPL(bool, Test, m_bTest);

 

이렇게 했을때

 

bool GetTest()
{
return m_bTest;
}
void SetTest(bool tmp)
{
m_bTest = tmp;
}

각각을 만들수 있습니다.

별 찍기

위키책, 위키책

별 찍기 문제는 프로그래밍 입문자에게 제어문과 배열을 접하게 하기 위한 과제로 사용된다. 보통 콘솔 환경에서 순환문을 통해 직접 아스테리스크(*)를 출력하거나 배열을 조작한 후 순환문으로 출력하는 등의 방법이 사용되며, 이 과정을 통해 입문자들은 변수, 제어문 및 배열 등을 직접 다루어보게 된다.

학원이나 대학교에서 신입생을 위한 과제로 출제되며, 일반적으로 기본적인 별 찍기 문제는 다음의 출력을 만들어낼 것을 요구한다.

Result :
*
**
***
****
*****

위 피라미드형은 가장 간단하고 난이도가 낮은 문제이다. 이 외에는 나비형이나 다이아몬드형 등의 응용 문제들이 있으며 해법도 여러 가지가 존재한다.

신학기에 위 문제를 처음 접하는 많은 대학생들이 프로그래밍 포럼에 찾아가 이 문제에 관한 질문을 올려, 신학기엔 많은 포럼들의 게시물 다수가 별 찍기 질문글들로 채워지곤 한다. 여러 포럼에서는 단순히 문제의 해답만을 요구하는 학생들에 대해서 불성실하다는 이유로 부정적인 입장을 보인다.

프로그래밍 커뮤니티 중 하나인 디시인사이드 프로그래밍 갤러리에서는 "새싹밟기"라는 제목으로 일반적으로는 생각하지 못했던 창의적인 별 찍기, 다이아몬드, 전문 별 찍기 솔루션 등이 올라오는 등 여러 가지 방법의 별 찍기 프로그램을 등록하는 것이 하나의 유행이 되기도 했다.

Wikipedia-logo.png 한국어 위키백과에 수록된
별찍기 관련 문서 참고.

차례

[숨기기]

[+/-] 별 찍기에 대한 일반적 접근

일반적인 별 찍기 문제에 대한 접근법으로는 아스태리스크(*)를 모니터에 찍을 수 있는 함수와 제어문을 사용하여 모니터 좌측 상단에서 순차적으로 찍어내리는 방법을 사용한다. 이는 일반적으로 출력이 좌측 상단에서부터 시작되기 때문이다. 이에 대한 일반적인 C 언어의 코드는 다음과 같다. 사용자에 따라 일부 코드에 차이가 있을 수 있음을 밝혀둔다.

#include <stdio.h>

int main(void)
{
int i, j;

for(i = 0; i < 5; i++)
{
for(j = 0; j <= i; j++)
{
putchar ('*');
}
putchar('\n');
}

return 0;
}

그러나 삼각형의 모양이 바뀌어 좌측에 공백이 필요한 경우 일반적으로 " "(공백, 스페이스) 문자를 같이 이용하여 별 찍기 문제를 해결한다. 대표적인 예로는 정삼각형 출력이나 다이아몬드 출력 등이 있다. 이 이외에 별을 화면 중앙이나 그 외 임의의 위치에 출력해야 하는 문제가 존재하기도 한다. 이 경우 일반적으로 출력 커서의 위치를 옮기는 명령을 사용한다. 출력해야 할 도형이 복잡할 경우 - 특히 수학적 도형이나 규칙없는 그림 같은 경우 - 배열을 사용하여 그 정보를 넣은 후 제어문을 통해 배열을 읽어 별을 출력하기도 한다.

이 이외에 별 찍기 문제의 경우 제어문의 심층적 활용이나 아스키 코드의 활용, 재귀함수의 이해 등 여러 분야의 예제로 사용되고 있으며 어떤 경우 디자인 패턴에 관한 예제로 사용되기도 한다.

[+/-] 일반적인 별 찍기

[+/-] 그루비

[+/-] 일반적

(1..5).each { println '*' * it }

[+/-] 웹서비스

GroovySoap 모듈이 필요하다.

서버쪽

StarService.groovy

def getStar() {
def result = (1..5).inject('') { str, it -> str += '*' * it + '\n' }
}

StarServer.groovy

import groovy.net.soap.SoapServer

def server = new SoapServer("localhost", 6980)
server.setNode("StarService")
server.start()

StarServer를 실행한다.

클라이언트쪽

import groovy.net.soap.SoapClient

def proxy = new SoapClient("http://localhost:6980/StarServiceInterface?wsdl")
println proxy.getStar()

호스트 IP가 서버쪽을 향하게 만든 후 실행한다.

[+/-] 루비

puts (1..5).map{ |i| "*" * i }.join("\n")

또는

5.times { |i| puts "*" * (i+1) }

또는

(1..5).each{ |i| puts "*"*i}

[+/-] 루아 스크립트

for i = 1, 5 do
for j = 1, i do
io.write "*"
end
io.write "\n"
end

[+/-] 베이직

For I = 1 To 5
Print String$(I, "*")
Next I

[+/-] 본 어게인 셸 스크립트(BASH)

 #!/bin/bash
for((i=1;i<6;i++))
do
for((j=0;j<i;j++))
do
echo -n '*'
done
echo
done

또는

 #/bin/sh
n=5
for i in `seq 1 $n`;
do
for j in `seq 1 $i`;
do
echo -n '*'
done
echo ''
done

[+/-] 스몰토크

"Dolphin Smalltalk에서 테스트"
i := 0.
[i < 5]
whileTrue:
[
j := 0.
[j <= i]
whileTrue:
[
Transcript show: '*'.
j := j + 1
].

Transcript cr.
i := i + 1
].

[+/-] (좀 더 간단한 버전)

"Squeak에서 테스트"
1 to: 5 do: [ :i |
i timesRepeat: [ Transcript show: '*'].
Transcript cr.
].

[+/-] 스킴

;(plt scheme 의 개발환경 DrScheme에서 language를 standard(R5RS)로 맞춘후 테스트)
(define-syntax when
(syntax-rules ()
((_ e0 e1 e2 ...)
(if e0 (begin e1 e2 ...)))))

(define (print-ntimes n s)
(when (> n 0) (display s) (print-ntimes (- n 1) s)))

(define (star n)
(let loop ((i 1))
(when (<= i n) (print-ntimes i "*") (newline) (loop (+ i 1)))))

(star 5)

[+/-] 자바

[+/-] (일반적)

 package org.wikibooks.ko;
public class PrintStarBasic {
public static void main(String[] args) {
for(int line = 0; line < 5; ++line) {
for(int width = 0; width < line + 1; ++width ) {
System.out.print("*");
}
System.out.println("");
}
}
}

[+/-] (루프 하나와 문자열 이용)

 package org.wikibooks.ko;
public class StarPrinter {
public static void main(String args[]) {
String star ="*****";
for(int i = 0 ; i < star.length() ;i++) {
System.out.println(star.substring(0,i+1));
}
}
}

[+/-] 자바스크립트 (ECMAScript)

XHTML 1.0 표준을 따름

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Printing Star</title>
<script type="text/javascript">
/* <![CDATA[ */
var printStar = function() {
for(var count = 1; count < 6; ++count) {
for(var floor = 0; floor <= count; ++floor) {
if(floor == count) { document.write("<br/>"); }
else { document.write("*"); }
}
}
};
/* ]]> */</script>
</head>
<body onload="printStar()">
</body>
</html>

[+/-] 파이썬

for i in range(1,6):
print "*" * i

[+/-] (한줄)

print "\n".join("*" * i for i in range(1, 6))

[+/-]

[+/-] (일반적)

print "*"x$_."\n" for 1..5

[+/-] (펄 5.10 버전)

say "*"x$_ for 1..5

또는

map{say"*"x$_}1..5

[+/-] (스페셜 버젼)

아래 코드는 모습은 특이하지만 잘 실행된다.

                              ''=~('('."\?".
'{'.('`'|'%').(('[')^
'-').('`'|'!').('`'|(',')).
'"'.'#'.'!'.'/'.('['^'.').("\["^
'(').('['^')').'/'.('`'|'"').("\`"|
')').('`'|'.').'/'.('['^'+').('`'|'%').
('['^')').('`'|',').('!'^'+').('[' ^((
'+'))).('['^')').('`'|')').('`'|'.' ).(
'['^'/').('{'^'[').'\\'.'"'.'*'.'\\' .((
'"')).('['^'#').'\\'.'$'.'_'.'.'.'\\'. '"'.
'\\'.'\\'.('`'|'.').'\\'.'"'.('{'^'[').( "\`"|
'&').('`'|'/').('['^')').('{'^'[').('^'^( ('`')|
'/')).'.'.'.'.('^'^('`'|'+')).('!'^'+').'"'. '}'.')');
$:='.'^'~';$~="\@"| '(';$^=')'^('[');$/=
'`'|'.';$,="\("^ '}';$\='`'|'!';
$:=')'^'}';$~= '*'|"\`";$^=
'+'^"\_";$/= '&'|"\@";
$,='['&'~'; $\=','
^'|';$:='.' ^'~';
$~='@'|'(' ;$^=')'^'[';$/ ='`'|'.';$,='(' ^'}'
;$\="\`"| ( '!');$:= ( ')')^
'}';$~="\*"| ( ( ( ( '`'))));$^='+'^
"\_";$/= ( ( ( ( '&')))
)|'@';$, = (( ( ( ( '[')))
))&"\~"; ( ( ( ( $\))))
=(',')^ '|';$:=('.')^ '~';$~='@'|"\("; $^ =(
')')^ ( ( (
( ( ( ( (
( ( ( (
( ( ( (
( ( ( ( (
( (( '[')) )) )
) ) )
) )
) ) )
) ) )
))))))));( ( ( (
( $/)))))=('`')| (
( '.') );$, = ( (
( ( (( ( (
( ((
( (( '(' )
))))))))))))) ^
( '}');#;#;#; #
;
# ;
#
;
# ;
# ;
# ;
# ;
#;#;#;#;#;#

[+/-] (펄 ppencode)

출처[[1]]

length q bless glob and print chr oct oct oct ord qw q dump q and print chr length q closedir vec and print chr oct oct oct ord qw q dump q and print chr oct oct oct ord qw q dump q and print chr length q continue vec and print chr oct oct oct ord qw q dump q and print chr oct oct oct ord qw q do q and print chr oct oct oct ord qw q dump q and print chr length q binmode glob and print chr oct oct oct ord qw q dump q and print chr oct oct oct ord qw q do q and print chr oct oct oct ord qw q do q and print chr oct oct oct ord qw q do q and print chr length q closedir vec and print chr oct oct oct ord qw q dump q and print chr oct oct oct ord qw q do q and print chr oct oct oct ord qw q do q and print chr oct oct oct ord qw q do q and print chr oct oct oct ord qw q die q and print chr length q closedir vec

[+/-] 포스

: star ( -- ) [char] * emit ;
: stars ( n -- ) 0 ?do star loop ;
: pyramid ( n -- )
cr
0 ?do
i 1 + stars cr
loop
cr
;
5 pyramid

[+/-] C

[+/-] (근성찍기)

 #include <stdio.h>

int main()
{
printf("*\n");
printf("**\n");
printf("***\n");
printf("****\n");
printf("*****\n");
return 0;
}

[+/-] (문자배열을 포인터로 사용)

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

int main()
{
char stars[] = "-*****";
char* p = stars+strlen(stars)-1;
while( *p != '-' )
printf("%s\n", p--);
return 0;
}

[+/-] (재귀호출 사용)

#include <stdio.h>

int PrintStar(int Width,int Height){
int i;
for(i=0;i<width;i++){
printf("*");
} printf("\n");

if(Width==Height) return 0;
else PrintStar(width+1,Heght);
}
int main(){
int First_Width=1;
int Heghit=5;
PrintStar(First_Width,Heghit);
return 0;
}

[+/-] C++

[+/-] (일반적)

#include<iostream>
using namespace std;

int main(void)
{
for(int line = 0; line < 5; line++)
{
for(int width = 0; width <= line; width++)
{
cout << "*";
}
cout << endl;
}

return 0;
}

[+/-] (템플릿 사용)

원래는 TMP(템플릿 메타 프로그래밍)을 하려 하였으나 실패했다.

#include <iostream>

template<int x>
struct Star : public Star<x-1>
{
Star()
{
std::cout << std::string(x, '*').c_str() << std::endl;
}
};

template<>
struct Star<0>
{
//
};

int main(int argc, char * argv[])
{
Star<5> _Star;

return 0;
}

[+/-] C#

using System;
class Star{
public static void Main(){

for (int a=1; a<6; a++){
for (int b=0; b<a; b++){
Console.Write("*");
}
Console.WriteLine("");
}

}
}

[+/-] Common Lisp

(dotimes (j 5)
(dotimes (i (1+ j))
(princ "*"))
(fresh-line))

[+/-] Win32 API (C)

#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("Class");

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;

WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);

hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);

while (GetMessage(&Message,NULL,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;

switch (iMessage) {
case WM_CREATE:
hWndMain=hWnd;
MessageBox(hWnd,TEXT("*\r\n**\r\n***\r\n****\r\n*****\r\n"),TEXT("별찍기"),MB_OK);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

[+/-] 프롤로그(Prolog)

star(0) :- nl.
star(N) :- X is N-1, write(*), star(X).

prymid(1) :- star(1).
prymid(N) :- X is N-1, prymid(X), star(N).

[+/-] 개성있는 별 찍기

별 찍기의 범주 안에 들어가는 개성 있는 방법으로 별을 찍는다.

[+/-] C언어 별 찍기(1)

#include <stdio.h>

int main()
{
printf("*");
return 0;
}

[+/-] C언어 별 찍기(2)

#include <stdio.h>

int main()
{
printf("☆★");
return 0;
}

[+/-] C언어 별 찍기(3)

#include <stdio.h>

int main(void)
{
int n, floor,cnt_star;

n=floor=1;

printf("Enter a Start");
scanf("%d",&cnt_star);

while(n<=cnt_star){
floor=1;
while(n>=floor){
if(n!=floor) printf("*");
else printf("*\n");
floor++;
}
n++;
}

return 0;
}

[+/-] C언어 별 찍기(4)

루프 하나와 ASCII code를 이용하여 출력

#include <stdio.h>

//ASCII code를 이용한 별 찍기.
int main()
{
int star = 0x002A;
int nline = 0x000A;
char out;

int width = 0;
int line = 1;

for (;width < 5; ((line == width)?(out = nline, line++, width = 0):(out = star, width++)), printf("%c", out));

return 0;
}

[+/-] OpenGL(GLUT)

정12면체를 이루는 12개의 오각뿔을 역으로 한 별 모양의 폴리곤을 *로 찍음

#include <GL/glut.h>
#include <stdlib.h>

double vertex[][3] = {
// first pentagon
{-1.00000000, -1.00000000, 1.00000000}, { 0.00000000, -0.61803399, 1.61803399},
{ 0.00000000, 0.61803399, 1.61803399}, {-1.00000000, 1.00000000, 1.00000000},
{-1.61803399, 0.00000000, 0.61803399},

// second pentagon
{ 0.00000000, -0.61803399, 1.61803399}, { 1.00000000, -1.00000000, 1.00000000},
{ 1.61803399, 0.00000000, 0.61803399}, { 1.00000000, 1.00000000, 1.00000000},
{ 0.00000000, 0.61803399, 1.61803399},

// third pentagon
{ 0.00000000, 0.61803399, 1.61803399}, { 1.00000000, 1.00000000, 1.00000000},
{ 0.61803399, 1.61803399, 0.00000000}, {-0.61803399, 1.61803399, 0.00000000},
{-1.00000000, 1.00000000, 1.00000000},

// forth pentagon
{-1.61803399, 0.00000000, 0.61803399}, {-1.00000000, 1.00000000, 1.00000000},
{-0.61803399, 1.61803399, 0.00000000}, {-1.00000000, 1.00000000, -1.00000000},
{-1.61803399, 0.00000000, -0.61803399},

// fifth pentagon
{ 1.00000000, 1.00000000, 1.00000000}, { 1.61803399, 0.00000000, 0.61803399},
{ 1.61803399, 0.00000000, -0.61803399}, { 1.00000000, 1.00000000, -1.00000000},
{ 0.61803399, 1.61803399, 0.00000000},

// sixth pentagon
{-0.61803399, 1.61803399, 0.00000000}, { 0.61803399, 1.61803399, 0.00000000},
{ 1.00000000, 1.00000000, -1.00000000}, { 0.00000000, 0.61803399, -1.61803399},
{-1.00000000, 1.00000000, -1.00000000},

// seventh pentagon
{-1.61803399, 0.00000000, -0.61803399}, {-1.00000000, 1.00000000, -1.00000000},
{ 0.00000000, 0.61803399, -1.61803399}, { 0.00000000, -0.61803399, -1.61803399},
{-1.00000000, -1.00000000, -1.00000000},

// eighth pentagon
{ 0.00000000, 0.61803399, -1.61803399}, { 1.00000000, 1.00000000, -1.00000000},
{ 1.61803399, 0.00000000, -0.61803399}, { 1.00000000, -1.00000000, -1.00000000},
{ 0.00000000, -0.61803399, -1.61803399},

// ninth pentagon
{-1.00000000, -1.00000000, 1.00000000}, { 0.00000000, -0.61803399, 1.61803399},
{ 1.00000000, -1.00000000, 1.00000000}, { 0.61803399, -1.61803399, 0.00000000},
{-0.61803399, -1.61803399, 0.00000000},

// tenth pentagon
{-1.00000000, -1.00000000, 1.00000000}, {-0.61803399, -1.61803399, 0.00000000},
{-1.00000000, -1.00000000, -1.00000000}, {-1.61803399, 0.00000000, -0.61803399},
{-1.61803399, 0.00000000, 0.61803399},

// eleventh pentagon
{ 0.61803399, -1.61803399, 0.00000000}, { 1.00000000, -1.00000000, 1.00000000},
{ 1.61803399, 0.00000000, 0.61803399}, { 1.61803399, 0.00000000, -0.61803399},
{ 1.00000000, -1.00000000, -1.00000000},

// twelveth pentagon
{-0.61803399, -1.61803399, 0.00000000}, { 0.61803399, -1.61803399, 0.00000000},
{ 1.00000000, -1.00000000, -1.00000000}, { 0.00000000, -0.61803399, -1.61803399},
{-1.00000000, -1.00000000, -1.00000000}};

double r = 0;
short cxWidth, nStarWidth;
unsigned char cStar[64 * 64 * 3]; // star buffer
bool bstop = false;

void resize(int width, int height)
{
double rate = (double)nStarWidth;

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glOrtho(-1 * rate, rate, -1 * rate, rate, -1 * rate, rate);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glutPostRedisplay();
}

void display(void)
{
short i, j, k;
double dx = -7.9225, dy = 7.6775, dcw = 0.2475; // proper charactor location
double center[3];

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
glColor3d(0, 0, 0);

glPushMatrix();

glRotated(r, 3, 2, 1);
glScaled(1 / 2.75, 1 / 2.75, 1 / 2.75); // proper scaling

for(i = 0; i < 12; i++) {
center[0] = 0; center[1] = 0; center[2] = 0;
for(j = 0; j < 5; j++) {
center[0] += vertex[i * 5 + j][0];
center[1] += vertex[i * 5 + j][1];
center[2] += vertex[i * 5 + j][2];
}

center[0] = center[0] / 5 * 2;
center[1] = center[1] / 5 * 2;
center[2] = center[2] / 5 * 2;

for(j = 0; j < 5; j++) {
glBegin(GL_TRIANGLES);
glVertex3d(center[0], center[1], center[2]);
glVertex3d(vertex[i * 5 + j][0], vertex[i * 5 + j][1], vertex[i * 5 + j][2]);
glVertex3d(vertex[i * 5 + (j + 1) % 5][0], vertex[i * 5 + (j + 1) % 5][1], vertex[i * 5 + (j + 1) % 5][2]);
glEnd();
}
}

glPopMatrix();

glReadPixels((cxWidth / 2) - 32, (cxWidth / 2) - 32, 64, 64, GL_RGB, GL_UNSIGNED_BYTE, cStar);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1, 1, 1, 1);
for(i = 0; i < 64; i++) {
for(j = 0; j < 64; j++) {
if(!cStar[(i * 64 + j) * 3]) {
glRasterPos2d(dx + dcw * j, dy - dcw * i);
glutBitmapCharacter(GLUT_BITMAP_8_BY_13, '*');
}
}
}

glutSwapBuffers();

if(!bstop) r++;
}

void key(unsigned char key, int x, int y)
{
switch (key)
{
case 27 :
case 'q':
exit(0);
break;
case ' ':
bstop = !bstop;
break;
}

glutPostRedisplay();
}

void idle(void)
{
glutPostRedisplay();
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);

nStarWidth = glutBitmapWidth(GLUT_BITMAP_8_BY_13, '*');
cxWidth = 64 * nStarWidth;

glutInitWindowSize(cxWidth, cxWidth);
glutInitWindowPosition(10, 10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("active star printer");

glutReshapeFunc(resize);
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutIdleFunc(idle);

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);

glutMainLoop();

return EXIT_SUCCESS;
}

[+/-] Fractal 별찍기

Fractal star.jpg

java code라서 어떻게 올릴까 고민중임.

[+/-] Ruby언어 별 찍기 웹 서버

require 'socket'

server = TCPServer.new 'localhost', 80

while(client = server.accept)
client.print "HTTP/1.1 200/OK\r\nContent-type: text/html\r\n\r\n"
client.print "<html><body><h1>*<br>**<br>***<br>****<br>*****</h1></body></html>"
client.close
end

'생활 > 프로그래밍' 카테고리의 다른 글

여러가지 언어로 만들어진 fizzbuzz(대략 3,6,9게임)  (0) 2012.03.10
define 을 이용해서 getter, setter만들기  (0) 2012.03.10
AType 작성중  (1) 2009.11.11
간단한 DLL다운로더!  (0) 2009.08.07
에러 잡았다!!!  (0) 2009.08.07
AdvencedType(AType)라이브러리 작성중,,

일단 AInterger랑 ACharactor, AString만 만들고 있다.
AInterger만 만들고 있는데 현제 구현부분은

operator +-*/=;
friend operator <<, >> 정도,,,
뭐, 점차 만들어지겠지,,,

근데 istream 에서 int만 골라받는 방법없나?
없으면 만들어야되는데,,,,

'생활 > 프로그래밍' 카테고리의 다른 글

define 을 이용해서 getter, setter만들기  (0) 2012.03.10
각종 별찍기 문제 (위키펌)  (0) 2009.11.30
간단한 DLL다운로더!  (0) 2009.08.07
에러 잡았다!!!  (0) 2009.08.07
sdl로 ttt만드는중!!  (1) 2009.04.26
심심해서 만들었다.
어디더라? 외국의 소스를 무쟈게 많이 저장(?)되있는곳에서
URL을 여는 소스를 퍼다가 만들었다.
뭐, 출처 문제도 있고, 내가 서버를 돌리는것도 아니라서,
직다는 안되고, 한번 클릭을 해야 열린다.
솔직히 이런거는 출처를 밝혀야 된다는게 지론이라서,,,

'생활 > 프로그래밍' 카테고리의 다른 글

각종 별찍기 문제 (위키펌)  (0) 2009.11.30
AType 작성중  (1) 2009.11.11
에러 잡았다!!!  (0) 2009.08.07
sdl로 ttt만드는중!!  (1) 2009.04.26
오델로 게임이 업데이트 되었습니다.  (0) 2009.04.12

왠진 모르겠지만 내가만든
graphics 함수에 문제가 있었나보다,,
저기에서
X모양 그릴때  x1, y1인자의 값을 -1 씩 해주니까 실행이 되네,,,
왜지???

'생활 > 프로그래밍' 카테고리의 다른 글

AType 작성중  (1) 2009.11.11
간단한 DLL다운로더!  (0) 2009.08.07
sdl로 ttt만드는중!!  (1) 2009.04.26
오델로 게임이 업데이트 되었습니다.  (0) 2009.04.12
리버시(오델로) 프로그래밍 도와주세요!!  (0) 2009.03.19

그냥 그렇다고,,,




















지금 이모냥이긴 한데,,,
이번주 내로 되겠지?? TTT주제에,,,
http://dcmichael.tistory.com/28  << 여기에서 확인해 주세요

'생활 > 프로그래밍' 카테고리의 다른 글

간단한 DLL다운로더!  (0) 2009.08.07
에러 잡았다!!!  (0) 2009.08.07
sdl로 ttt만드는중!!  (1) 2009.04.26
리버시(오델로) 프로그래밍 도와주세요!!  (0) 2009.03.19
오델로 게임 1.0.0.0버전  (6) 2009.03.19

클래스가 요모냥으로 생겼는데, 간혹가다가 검정색이 놓을수 없는자리에 검정이 놓이고,
파랑(WHITE)가 놓을수 없는 자리에 파랑이 놓이네요,,,

그리고 이거 findreversi함수 좀더 다듬을수 있는걸로 아는데,, 도와주세요!!

'생활 > 프로그래밍' 카테고리의 다른 글

간단한 DLL다운로더!  (0) 2009.08.07
에러 잡았다!!!  (0) 2009.08.07
sdl로 ttt만드는중!!  (1) 2009.04.26
오델로 게임이 업데이트 되었습니다.  (0) 2009.04.12
오델로 게임 1.0.0.0버전  (6) 2009.03.19

이제 막 개발 시작했습니다.
대학와서 젤 처음 해보고 싶었던 게임개발의 첫걸음!!!

개발환경 Visual Studio6 Ent. MFC.

버전정보

0.0.0.0 윈도우 제위치 제 사이즈에 놓고 사각형 보드 그리기 더블버퍼링 구현,,,

0,0,0,1 Othellomap 클래스 제작, 보드에 말놓기, 턴, 각자의 말 갯수등 기본 변수 세팅,,,

0,0,0,2 말을 놓으면 십자방향으로 리버스가 구현.

1,0,0,0 말을 놓으면 사이의 말 뒤집기 대각선구현(예정) 
          돌이 마우스를 따라다님.
          보드 색상, 돌 색상 변경.
          우측 상단에 간단한 게임 정보 표시.

TODO : 아이콘 변경
           인터페이스 생성
           도움말 작성
           세이브기능
           로드기능
           인공지능(VS컴퓨터)
           기타등등

어찌어찌 1,0,0,0이 나왔습니다. 근데 버전은 VS를 업그레이드하며 꼬여버렸다는,,
아직 할일이 많네요,,
...
역시 이번에도 릴리즈만 올립니다. 버그리포팅 환영이고요,
소스는 필요하신분께는 드립니다,,(공부하느라 퍼온 소스들이 주석으로 남아있어서,,,)

'생활 > 프로그래밍' 카테고리의 다른 글

간단한 DLL다운로더!  (0) 2009.08.07
에러 잡았다!!!  (0) 2009.08.07
sdl로 ttt만드는중!!  (1) 2009.04.26
오델로 게임이 업데이트 되었습니다.  (0) 2009.04.12
리버시(오델로) 프로그래밍 도와주세요!!  (0) 2009.03.19