아래 내용들은 윤성우 저자의 "지피지기 TCP/IP소켓 프로그래밍" 책의 내용을 바탕으로 본인이 읽고 새로 정리한 내용들이니,
다소의 오류가 있을 수도 있습니다.

   

  1. 소켓의 이해.
    1. 서버프로그램.
      서버프로그램의 작동은 크게 x가지 과정으로 나뉜다.
      1. 소켓 생성
        int socket(int domain, int type, int protocol);
        함수를 이용해 소켓을 생성한다.
        (헤더 "sys/type.h", "sys/socket.h")
      2. 소켓 바인딩
        int bind(int sockfd, struct sockaddr *myaddr, int addrlen);
        함수를 이용하여 소켓에 주소 및 포트를 할당한다.
      3. 리스닝
        int listen(int sockfd, int backlog);
        함수를 이용하여 소켓에 연결이 준비한다.
      4. 엑셉트
        int accept(int sockfd, struct sockaddr *addr, int *addrlen);
        함수를 이용하여 클라이언트와 연결한다.
    2. 클라이언트 프로그램.
      클라이언트 소켓의 작동은 크게 x가지 과정으로 나뉜다.
      1. 소켓 생성
      2. 컨넥트
        int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);
        함수를 이용하여 서버와 연결한다.

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

인터넷 쿼리함수(windows용)  (0) 2012.03.10
소켓 프로그래밍의 기초(2)  (0) 2010.02.05

구성 요소 기본 포트 번호

구성 요소

포트

용도

Administration Server

390

표준 HTTP 포트

Application Server

8080

표준 HTTP 포트

443

HTTP over SSL

3700

표준 IIOP 포트

4849

Administration Server 포트

7676

표준 Message Queue 포트

8686

JMX 포트

8181

HTTPS over SSL

Calendar Server

80

표준 HTTP 포트

389

LDAP 포트

443

HTTP over SSL

57997

ENS

59779

DWP

공통 에이전트 컨테이너

10162

JMX 포트(TCP)

10161

SNMP 어댑터 포트(UDP)

10162

트랩용 SNMP 어댑터 포트(UDP)

10163

Commandstream 어댑터 포트(TCP)

Directory Proxy Server

489

LDAP 수신기

Directory Server

389

표준 LDAP 수신기

636

LDAPS over SSL

Instant Messaging

49909

멀티플렉서 포트

49916

보안 모드, Netlet 나가는 포트

49917

보안 모드, Netlet 들어오는 포트

49919

Instant Messaging 서버 대 서버 포트

49999

Instant Messaging 포트

Message Queue

80

표준 HTTP 포트

443

HTTP Over SSL

7676

포트 매퍼

7677

HTTP Tunnelling Servlet 포트

Messaging Server

25

표준 SMTP 포트

80

Messaging Express(HTTP) 포트

110

표준 POP3 포트/MMP POP3 프록시

143

표준 IMAP4 포트/MMP IMAP 프록시

443

HTTP over SSL

992

POP3 over SSL

993

IMAP over SS 또는 MMP IMAP Proxy over SSL

7997

이벤트 알림 서비스 포트

27442

제품 내부 통신을 위해 작업 제어기에서 사용

49994

내부 제품 통신을 위해 감시자가 사용

Portal Server Secure Remote Access

8080

표준 HTTP 포트

443

HTTP over SSL

10443

Rewriter 프록시 포트

10555

Netlet 프록시 포트

49916

보안 모드, Netlet 나가는 포트

49917

보안 모드, Netlet 들어오는 포트

서비스 레지스트리

6060

ServerInstancePort

6443

ServerInstanceSecurePort

6484

ServerJMSPort

6485

ServerIIOPPort

6486

ServerIIOPSecurePort

6487

ServerIIOPMutualAuthPort

6488

AdministrationJMXPort

6489

AdministrationPort

Web Proxy Server

8081

WPS_ADMIN_PORT

8080

WPS_SERVER_PORT

Web Server

80

표준 HTTP 포트

443

HTTP over SSL

8888

표준 관리 포트

'생활 > 공부' 카테고리의 다른 글

호랭이 두마리 입양 완료!!  (0) 2009.11.14
10만원어치 책,,,  (0) 2009.11.12
더미 파일 만들기 생활 2009. 12. 29. 02:32
http://hoshins.egloos.com/3476141

간혹 파일의 크기가 큰 더미 파일이 필요할 때가 있다. 이런때 사용하자.

Windows의 경우:
fsutil file createnew <filename> <size_in_byte>

Linux의 경우:
dd if=/dev/zero of=<filename> <block_size> <count>

'생활' 카테고리의 다른 글

동아리 폐부  (0) 2012.03.10
크롬 확장 scribefire를 써보자  (1) 2012.02.23
Haven and Hearth 시작!  (1) 2011.02.09
[TIP!]windows에서 linux의 하드 링크기능 사용하기  (0) 2010.02.07
임시 파일서버 열어요!!  (0) 2009.03.26

별 찍기

위키책, 위키책

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

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

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

제가 만든것도, 번역한것도 아닙니다.
파일안에 제작자 정보가 있으니 한번씩들러주시길,,,

'생활 > 서버놀이' 카테고리의 다른 글

서버 재설정!!  (0) 2012.05.31
웹프로그래밍 공부하기 좋은 홈페이지,,  (0) 2012.03.10
해킨 삽질을 위한 가이드  (0) 2012.01.08
주절주절,,, 생활/리버스(?) 2009. 11. 18. 00:59
0. 앞머리가 드디어 입술까지 내려오고 있다.
이 머리를 기르는 이유를 다들 물어보고,
지저분하니까 깍으라고들 하는데, 이머리는 나의 그녀꺼다.
그녀가 원하는 모양으로 깍을꺼니까 신경쓰지마!!

1.  요즘 나사가 한 3개쯤 빠진것같다,,,
계속 답답하고, 토할것 같은기분도 수시로 든다,,,
그렇다고 딱히 몸이 안좋아진건 아닌데,,,

2. 학교 동아리 서버를 만들어야 된다.
USB로 페도라를 설치하려고 했는데, 도저히 인식을 못해서,
USB에는 서버 2008 R2를 넣고 DVD에 페도라를 구우려고 했는데
DVD마서 Windows Server 2008 R2를 구워버렸다...

3. 요즘 완전히 잉여가 되고 있는거 같다....

-1. 좋아하는 사람이 생긴것 같다.
근데 친구중 한명이 그애랑 친한 친구가 된것 같다,,
가끔 그애가 매력적이라는 이야기를 하면서 사귀진 않는다고 한다,,,,
어느날은 한숨을 쉬고 있으니까 자기한테 상담하라고 한다,,
어떻게 상담을 할수 있을까?

-2. 담배피는 양이 늘었다. 안피려면 안필수도 있지만
정신적인 의존도가 높아지고 있는거 같다. 마치 고등학교때
술에 쩔어있던 때 처럼,,,

'생활 > 리버스(?)' 카테고리의 다른 글

test  (0) 2010.11.30
토런트 사진,,  (0) 2010.10.27
토런트 사진,,  (0) 2010.10.27
asdf  (0) 2010.03.12
음악 재생기  (0) 2010.03.03

template <typename T>

void BubbleSort2(T arr[], const int size)

{

bool Sorted = true;

for (int i=size; i>0 && Sorted; i--)

{

Sorted = false;

for (int j=0; j<i; j++)

{

if (arr[j] < arr[j-1]) {

T t=arr[j];
arr[j]=arr[j-1];
arr[j-1]=t;

Sorted = true;

}

}

}

}


약간의 트릭을 더해서 만든 정렬이다.

정렬을 한뒤에는 true를 만들어서 그 j에 대해서는 더이성 정렬을 안한다.

정렬이 거의 된 배열에서는 일반 버블보다 월등히 빠른 속도를 보이며,

임의 배열에서는 많은 속도의 향상이 있고

역순배열에서도 약간 속도 향상이 있었다.


'생활 > 알고리즘(?)' 카테고리의 다른 글

버블정렬  (0) 2009.11.15
버블정렬 생활/알고리즘(?) 2009. 11. 15. 01:15
template <class T>
void BubbleSort(T arr[], const int size)
{
for(int i=0; i<size-1; i++)
{
for(int j=0; j<size-1; j++)
{
if(arr[j]>arr[j+1])
{
T t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
}
흠,,,, 뭔가 깨져서 옮겨진것 같지만,,,
소개하자면,, 완전 노가다 알고리즘이다.
처음부터 끝까지 인접한 2개씩 비교하면서 서로 정렬하는거다,,,
조금 개선된 알고리즘도 있으니 좀있다 올리겠다.

'생활 > 알고리즘(?)' 카테고리의 다른 글

버블정렬2  (0) 2009.11.15
엊그제 배송된 페도라 리눅스 책을 보면서 페도라 11을 2대 설치했다.
0

근데 문제는 책에는 페도라 코어 4로 설명이 되있고, 부록으로 설치시디 4장이 들어있다.
하지만 내 책에는 부록으로 시디가 2장밖에 없었다!!!

받자마자 설치파트를 보고 다운받으러 갔다가 페도라 11로 업그레이드 된걸 보고,
처음은 시키는 대로 해야지 라는 생각에 설치시디를 보니 1/4, 2/4만 있고, 3/4, 4/4가 없었다.

혹시 1, 2만 갖고 데모를 써본뒤에 3,4는 알아서 구하라는건가? 싶어 yesXX서점에
바로 문의를 해보고 받은 답변,,
0

일단 페도라 11로 갖고 놀고 있어야지,,, 근데 몇가지 명령어(? 프로그램? )이 빠진건지 사라진건지,,,
코어4는 지원기간도 끝났고,,

P.S. 코어가 무료배포용이라고 했는데, 페도라로 다시 합쳐진건기???

'생활 > 공부' 카테고리의 다른 글

구성 요소 기본 포트 번호  (0) 2009.12.30
10만원어치 책,,,  (0) 2009.11.12
10만원어치 책,,, 생활/공부 2009. 11. 12. 20:58

오늘은 yes**.com에서 주문한 10만원어치 책이 도착했다.
리눅스 서버관리관련 책과, 리눅스 프로그래밍 책을 주문했는데 2일만에 왔으니 빠른편.
012
이 범상치 않은 크기를 보라,,,( 우리방의 임시 쓰레기통이 될듯됨)

개봉샷

012
첫장은 무시,,,,,,,, 역시 큰상자에는 큰 책들이,,,

012
제일 뚜꺼운 실무 바이블책,,, 심지어 상,하 2권,,ㄷㄷ

01

자자 딴건보지말고 컴퓨터책만 98000원,,, 나이거 언제 다보지?

01

다시한번 이 웅장한 뚜께,,(두께가 아님!!)

일주일 만에 완파하고 UPC의 서버를 만들어주마!!

'생활 > 공부' 카테고리의 다른 글

구성 요소 기본 포트 번호  (0) 2009.12.30
호랭이 두마리 입양 완료!!  (0) 2009.11.14
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

지금 기타 공부중입니다.
기숙사라서 제대로 연습할 시간이 없네요..
기즘 공부하려고 책보면서 만들던 tab악보가 있는데,,,
일단 올려놓지만 완성본은 아니니 다운받진 마시길,,,
심심해서 만들었다.
어디더라? 외국의 소스를 무쟈게 많이 저장(?)되있는곳에서
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
도메인 따위 살돈도 없고, 학교에서 밖으로 포트가 열리지도 않으니,,,
주소는 요기,,,>> http://10.62.11.48:8081/
업로드 하실분은 저에게 비밀댓글로 아뒤랑 비번을^^

'생활' 카테고리의 다른 글

동아리 폐부  (0) 2012.03.10
크롬 확장 scribefire를 써보자  (1) 2012.02.23
Haven and Hearth 시작!  (1) 2011.02.09
[TIP!]windows에서 linux의 하드 링크기능 사용하기  (0) 2010.02.07
더미 파일 만들기  (0) 2009.12.29

클래스가 요모냥으로 생겼는데, 간혹가다가 검정색이 놓을수 없는자리에 검정이 놓이고,
파랑(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
메가밍크스,,,, 생활/큐브 2009. 1. 30. 09:18

드디어 풀었습니다.

설 끝나고 잠시 공백동안 갖고 지지고 볶고 했는데,,

3 X 3 X 3 이랑 똑같네요,,

마지막에 좀 헤매긴 했지만,, 3 X 3 X 3 솔루션으로 되네요,,

중,고급 해법이나 찾아볼까?