Shinnara's Blog
Talking with Shinnara :: NaraTalk.com

C Quiz

Computer/Programming/C/C++ 2009/06/17 16:26 by Shinnara

머리가 아파 잠시 웹서핑 도중 발견한 재밌는 문제.
출처:  C Quiz

동아리를 떠들썩하게 만들었던(?) 퀴즈 !

int i, n=20;
for(i =0 ; i < n ; i--)
  printf("-");

위의 코드에서 딱 한 글자만 고쳐서 -가 20번 출력되게 해봅시다

위 홈페이지에서도 두가지 답을 제시하고 있는데요, 제가 생각한 답은 아래와 같습니다.

int i, n=20;
for(i =0 ; -i < n ; i--)
  printf("-");


한 글자를 추가한 것이라서 답이 안될려나요? 하여간 위와 같이 해도 20번의 -가 출력됩니다 ^^







TAG c, Quiz
0 Trackback, 1 Comment

TRACKBACK :: http://naratalk.com/trackback/314 관련글 쓰기

댓글을 달아 주세요

  1. test  댓글주소  수정/삭제  댓글쓰기

    i-- => n--

    2009/06/18 22:37


새로운 막강(?) PC가 제 손에 들어옴에 따라 새롭게 개발 환경을 꾸몄습니다.
윈도우 재 설치(조립 업체에서 이건 해줘서...), 오피스 등등의 프로그램 깔고,
C 개발환경 설치하고 등등.. 며칠의 시간이 흘렀습니다.

그리고 사이드 웍으로 하고 있는 자바 어플리케이션 개발을 위해 Eclipse를 깔고, Subversive plugin 과 Connector를 설치했는데도 Connector가 없다면서 실행이 안되더군요.

구글 신의 도움을 받아 업데이트 사이트를 변경해보았습니다.

http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/

이 사이트에서 최신의 Connector와  SVNKit을 설치하니 정상적으로 동작...^^

이것때문에 하루동안이나 고생했네요.


0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/313 관련글 쓰기

댓글을 달아 주세요


RTEMS 개발환경을 구축하는 과정에서 Window 를 Host로 쓰게 되는 경우, 아래의 링크에 나와 있는 방법을 따르게된다.

MinGW Tools for Windows

대부분의 설명이 친절해서 거의 다 쉽게 설치가 가능한데, RTEMS Tool 설치 과정에서 m4가 맞지 않는다는 메시지를 접하게 된다. 

문제를 살펴보니 m4 압축을 풀게되면 usr/bin/ 밑에 m4 가 깔리게 되는데, 이미 msys/1.0/bin 에 m4 가 있어서 이전의 m4 가 그대로 실행되는 것이다.

이를 위해 usr/bin에 있는 m4를  msys/1.0/bin 에 복사하면 이후로는 같은 문제가 발생하지 않는다.

0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/312 관련글 쓰기

댓글을 달아 주세요


I installed QEMU on Windows XP.  QEMU works very wel on my about 5 years old notebook.

To install Ubuntu on QEMU, I downloaded Ubuntu iso file.

The first step is to make hard disk image.

C:\dev\virtual\qemu-0.9.0-windows>qemu-img create -f qcow ubuntu.img 5G
Formating 'ubuntu.img', fmt=qcow, size=5242880 kB

the last argument 5G is the image size.

And next,

C:\dev\virtual\qemu-0.9.0-windows>qemu -L . -cdrom c:\download\ubuntu-9.04-desktop-i386.iso -hda ubuntu.img -m 256 -boot d

"-m 256" means memory is 256MB.
"-boot d" : boot is done by secondary master.

Ubuntu installation is starting.

If you installed QEMU Acceleration, you can add this argument for the fast operation.

-kernel-kqemu


Useful References:




0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/311 관련글 쓰기

댓글을 달아 주세요


JXL(JExcel API) is a very useful library for handling Microsoft Excel files on Java envrionment. I like JXL because of its simple and intuitive usage. And also it works very well.

During works with JXL, developers want to specify column width. ColumnView is very helpful for this.

JExcel API's FAQ also describes too.

If you want that 1st column has 15 characters width, you can use like this:

sheet.setColumnView(0, 15);


You can also make auto sizable to the 2nd column:

CellView autoSizeCellView = new CellView();
autoSizeCellView.setAutosize(true);
       
sheet.setColumnView(1, autoSizeCellView);


"Auto Size" works well, but the result is not always so good. In some cases, you can face to the undesirable output.



0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/310 관련글 쓰기

댓글을 달아 주세요


Java is a very nice and popular programming language. Groovy is a more graceful one. Groovy makes developers feel free. Even I've been on groovy since just about 1 month ago, Groovy makes me very happy and gives many insperations.

Today, I'll show a simple example of "Java and Groovy Integration". Groovy has a "Groovy script engine", so on runtime, SW could behave more dynamically.  On my point, I'll apply this feature to support the analysis SW. I make the framework to maintain SW and File In/Out. Other developer and researcher compose the analysis routine using Groovy script.

Today's purpose is getting summation from 1 to the designated number using groovy script and adding sum value from Java Class.

Here are source codes:

[MyClass.java]
public class MyClass {

        public int value;
}



[MyScript.groovy]
sum = 0;

1.upto(number) {
    each ->
        sum += each   
}

sum += myclass.value


[ScriptTest.java]
import groovy.lang.*;
import groovy.util.*;
import java.util.*;

public class ScriptTest {

    public static void main(String[] args)throws Exception {

        MyClass myclass = new MyClass();
        myclass.value = 10;
       
        Hashtable<String, Object> variables = new Hashtable<String, Object>();
        variables.put("number", new Integer(10));
        variables.put("myclass", myclass );
       
        GroovyScriptEngine engine = new GroovyScriptEngine(".");   
        Binding binding = new Binding(variables);
        engine.run("src/MyScript.groovy", binding);
       
        System.out.println("Result "+ binding.getProperty("sum"));
       
           
    }

}



Using above, the result is:

Result 65


All works are done successfully.


0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/309 관련글 쓰기

댓글을 달아 주세요


PC를 새로 조립하다보니 알아 두어야 할 게 무지 많네요. 얼마전에 집에서 사용하는 PC 조립할 때는, 예산의 압박으로 인해 정말 가격대비 성능비가 좋은 구성을 했지만, 이번의 경우는 예산이 조금 넉넉한지라 메모리도 DDR3 2GB * 3 = 6 GB를 주문했습니다.

아시다시피 Windows XP (32 bit)는 약 3.25 GB 밖에는 인식을 하지 못합니다. (실제로 해본게 아니어서.. 인터넷에는 3.25 ~ 3.5 까지 의견이 분분합니다. 메인 보드에 따라 다르다는 이야기도 있구요.) 그래서 나머지 부분을 활용할 수 있는 다양한 방법들을 있는데, 결국 Ram Disk를 이용한다는 점에서는 비슷한 것 같습니다.

제가 하고자 하는 것은 이 Ram Disk 영역을 Virtual Memory 로 활용하면 어떨까하고 생각했는데, 같은 생각을 하신 분이 계시네요.

램 디스크에 가상 메모리 설정하기

아직 PC가 오지 않아서 실제로 해보지는 못하지만 어떤 성능을 나타내줄 지 못내 기대가 됩니다^^
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/308 관련글 쓰기

댓글을 달아 주세요


얼마전에 회사에서 새로 사게 될 PC에 대한 CPU 벤치 마크에 대한 글을 올린 적이 있습니다. PC의 여러 부품 중 성능을 결정짓는 가장 중요한 요소가 CPU일 것입니다. 그 다음으로 Memory 와 저장 장치일텐데요, 속도 향상을 위해 고가(?)의 SSD를 구입할 계획에 있습니다. 더불어 1TB 짜리 HDD 두개를 주문하였는데요. 오늘 RAID에 대한 글을 보다가 RAID 0로 HDD를 연결할 경우, 속도가 빨라진다는 내용을 알게되었습니다. 그동안 RAID는 데이터의 안정성 측면에서 도입한다고만 생각하고 있었고 RAID 0 는 그런 측면에서 별 이득이 없다고 생각하고 있었습니다.

또한, 아래 글에서는 SSD를 RAID 0로 묶어서 정말 대단한 속도를 나타냄을 보여줍니다.

RAID 0로 연결한 SSD의 속도

평균 속도 651 MB/sec 에, Access Time은 0.2 msec. 놀랍다는 표현밖에는 할 말이 없습니다. 이런 시스템이라면 정말 날라다닌다는 표현이 어울릴 듯.

아래 글은 좀 오랜된 글이긴 한데, HDD를 RAID 0로 묶었을 때의 속도 측정입니다.

http://www.4club.org/1451

평균 159 MB/sec, Access Time은 6.1 msec 이 나왔네요.


아래 글은 Raptor 4대를 연결하였네요.

http://playwares.com/xe/?document_srl=3581538

평균 323 MB/sec , Access Time 6 msec


http://www.technoa.co.kr/community/MFBoard.tch?pParam=45:35632799:1:1:raid&VIEW


위의 글을 RAID에 대해 자세한 설명을 하고 있습니다.

회사에서 사용할 PC가 며칠 후면 도착할 텐데, 어떤 방식으로 구성할 지 고민해봐야겠습니다.






0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/307 관련글 쓰기

댓글을 달아 주세요


다양한 OS를 체험해보기 위해 Virtual Box 를 사용하고 있는데, 오늘 QEMU에 대한 이야기를 들었습니다. Open Source 가상화 소프트웨어이며 매우 강력하다고 합니다.

QEMU 홈페이지

마찬가지로 무료로 지원이 되는 Virtual Box 도 얼마전 호스트가 32 bit 이더라도 64bit OS를 설치할 수 있도록 지원이 되었는데, 하드웨어가 64bit를 지원해야 가능하다고 합니다. 그런데 QEMU의 경우, 소프트웨어적으로 처리하기때문에 하드웨어의 지원여부가 중요하지는 않다고 합니다.

아직 사용을 해보진 못했지만, 꽤나 흥미롭네요~
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/306 관련글 쓰기

댓글을 달아 주세요


일을 하다보면 PDF로 만들어진 문서를 보거나, PDF 문서를 생성해야 하는 경우가 많이 있습니다. 그런데 이렇게 PDF 자료를 다루다 보면, 무료로 쓸수 있는 PDF Reader로는 여러가지 문제에 직면하게 되는 데요, 그중에 하나가 병합(Merge)문제일 것입니다.

저 역시도 같은 문제를 겪곤 하는데, 작업량이 많지 않다면 Adolix Spilt & Merge PDF 도 괜찮은 선택으로 보여집니다. 무료로 쓸수 있는데 아래와 같은 제약사항이 있습니다.

  • 5개 이하의 문서를 병합
  • 50 페이지 이하의 문서에 대해서만 Spilt 지원

만약 이러한 제약 사항 없이 사용하고 싶으면 $19.95 를 내고 등록하면 됩니다.

이 프로그램은 아래에서 다운 받으실 수 있습니다.

[Download]





TAG merge, PDF, Split
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/305 관련글 쓰기

댓글을 달아 주세요


요즘 회사에서 업무에 사용하는 PC를 교체하기 위해 준비하고 있습니다. 입사하면서 선임자가 쓰던 PC를 받아서 쓰고 있었는데, 다른 동료에 비해 낮은 사양이었습니다. 이번에 고사양으로 부품을 조합해서 구매를 진행 중에 있습니다.

현재 제가 회사에서 사용하는 PC는 Pentium 4 3.0 GHz 에 2GB 메모리, 200G SATA HDD를 달고 있습니다. 새로 사는 PC는 Core i7 920 또는 940 에 4GB 의 메모리, 60G SSD, 1 TB SATA 2 HDD 를 달 예정입니다. 멋진 조합이 아닐 수 없습니다. ^^

그러던 차에, PC를 교체하면 얼마나 빨라질까 하는 궁금증이 생기더군요. 그래서 google에서 CPU Benchmark 결과를 찾아보았습니다. 첫번째로 나온 사이트가 바로,

http://www.cpubenchmark.net/

입니다.

이 사이트는 3만개 이상의 시스템에서 테스트된 500개 이상의 CPU에 대한 통계를 제공하고 있습니다.

Common CPU Chart는 순정 상태(?)의 CPU로 측정된 데이터를 기반으로 순위를 나타내고 있습니다.



위의 그림은 오늘 (2009-04-28) 의 결과치를 나타내는 데, 노란색으로 표시된 것이 새롭게 구매하려는 i7 940, 파란색으로 표시된 것이 현재 사용하는 Pentium 4 3.0GHz 이다. 점수가 무려 13 배에 육박하는 수치이다.

물론 10배이상 빨라진다는 의미로 받아들이면 안되겠지만, 벌써부터 기대되는 건 사실이다. 맘 같아서야 i7 965로 하고 싶지만 CPU 하나에 180만원 이상을 주고 살 수는 없는 노릇이니. 940만 해도 80만원이 넘는다. 웬만한 PC나 넷북 값이 넘는 CPU ^^


 

0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/304 관련글 쓰기

댓글을 달아 주세요


프로그래밍을 하다보면 바이너리 파일을 헥사 형태로 봐야 할 때가 많은데, 무료 에디터에서는 그 기능 지원이 약해서 항상 불만이었답니다. 그러던 차에 HxD라는 프로그램을 알게 되었는데, 꽤 괜찮아보이네요.

[HxD 홈페이지] http://mh-nexus.de/en/hxd/
[HxD 다운로드] http://mh-nexus.de/en/downloads.php?product=HxD

현재 최신 버전은 1.7.7.0 입니다.

한번에 여러개의 파일을 분석이 가능하고, 비교도 됩니다. 또한 메모리에 상주하고 있는 프로그램에 대한 내용도 볼 수 있습니다.

[Tip 1] 만약 Vim 이 깔려있다면 Vim에서도 헥사 모드를 지원한답니다 ^^


 
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/303 관련글 쓰기

댓글을 달아 주세요


 Java를 좋아하는 저에게 Groovy는 꽤나 관심이 가는 놈이었습니다. 하지만 여러가지 사정상 제대로 알기가 어려웠지요. 그러던 차에 "Groovy In Action"이라는 책이 인사이트에서 번역서("프로그래밍 그루비")로 출간이 되었습니다. 새해가 되면서 결심한 것 중의 하나가 "매년 새로운 언어에 대해 알아보자" 였기 때문에 책을 사게 되었습니다.

 짬이 나는 시간에 조금 씩 읽기 때문에 진도가 그리 빠르지는 못합니다. 그래도 제대로된 지도자(?)가 옆에 버티고 있으니 예전보다는 보다 체계적으로 알아간다는 느낌입니다.

 프로그래밍 그루비를 읽다가 클로저와 관련된 부분에서 조금 이상한 부분이 있어서, 책을 번역하신 역자이신 박제권 님과 연락이 되었습니다. 주요 내용은 "클로저 내에서 명시적으로 변수 선언을 해야 하는가"였습니다.

논의 되었던 내용을 간단히 정리하자면,

명시적인 클래스 밖에서는 변수 선언을 생략할 수 있다.


프로그래밍 그루비의 예제 2.5에는 클로저를 이용하여 "짠" 소리가 나는 횟수를 세는 코드가 제시되어 있습니다. 여기서 제가 궁금했던 것은 클로저 내에서 변수 선언 없이 변수를 사용하고 있었는데, 그게 가능한 것인가였습니다.

예를 들어 다음과 같은 코드가 있다고 합시다.

1.upto(10) { number ->
 mynumber = number
 println mynumber
}

위 코드를 shownum.groovy 파일에 저장하여 groovy로 실행하거나  groovysh을 이용하게 되면 정상 동작을 합니다.

그러나 아래와 같이,


class MyClosure{

 public void printNumber(){

   1.upto(10) { number ->
    mynumber = number
    println mynumber
   }
 }

}

(new MyClosure()).printNumber()

라고 하게되면 이는 mynumber가 정의되지 않았다며 에러를 발생하게 됩니다.

반면 다음의 코드는 정상  동작을 합니다.


class MyClosure{

 public void printNumber(){

   1.upto(10) { number ->
    def mynumber = number
    println mynumber
   }
 }

}

(new MyClosure()).printNumber()

1.upto(10) { number ->
 mynumber = number
 println mynumber
}

클래스 내부에서는 def를 이용하여 선언하고, 클래스 밖에서는 def 없이 사용을 하였습니다.

즉, 클래스 내부에서 클로저를 사용할 경우 명시적인 변수 선언이 필요하나, 클래스 밖에서는 그렇지 않아도 된다는 것입니다.

아래와 같이

[getsum.groovy]
total = 0

1.upto(100) { number ->
   total += number
}

println "1+ ... + 100 = $total"

명시적인 변수 선언이 없더라도 1부터 100까지의 합인 5050을 정확하게 표시합니다.

그루비에서 클래스로 감싸여 있지 않은 코드에 대해서는 암묵적으로 파일 이름에 해당하는 클래스를 생성하게 되는 데, 이 과정에서 변수 선언이 없이 사용된 변수에 대한 처리도 이루어지는 것으로 보입니다. (보다 자세한 사항은 Groovy Spec을 찾아봐야 겠습니다.)

결과적으로 프로그래밍 그루비의 예제 2.5에 있는 코드는 스크립트 형태로 실행(명시적인 클래스안에 있지 않은 경우)하는 경우, 올바른 코드입니다.

1 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/302 관련글 쓰기

  1. Subject: 클로저에서의 변수 선언

    Tracked from 그루비 groovy  삭제

    한번 당한 적이 있는 문제였는데도 독자의 질문에 제대로 답하지 못했었다. "Shinnara" 님의 블로그에 "def" 의 헷갈리는 부분에 대해 글이 올라왔다. def 는 어떤 경우에는 꼭 필요하고, 어떤 경우에는 생략할 수 있다. http://naratalk.com/302 을 읽어보시라.

    2009/04/28 17:02

댓글을 달아 주세요


앞의 포스팅을 통해 "최대합 구하기"에 대한 내용을 언급한 바 있습니다. "생각하는 프로그래밍"은 각 컬럼의 마지막에 연습문제를 제시함으로써 정말 "생각"할 수 있는 기회를 주곤 하는데요, 해당 컬럼의 10번 연습문제는 다음과 같습니다.

10. 최대합 대신에 0에 가장 가까운 합을 가지는 부분 벡터를 찾는 것이 목적이라 하자, 여러분이 이 문제를 풀기 위해 디자인 할 수 있는 가장 효육적인 알고리즘은 무엇인가? 어떤 알고리즘 디자인 기법을 적용할 수 있는가? 또 주어진 실수 t에 가장 가까운 합을 가지는 부분 벡터를 찾는다고 하면 어떻겠는가?


책을 읽는 목적이 좀더 효율적인 프로그래밍을 하고, 많은 생각을 하기 위함이라면, 이런 연습문제를 좀더 착실히(?) 풀어볼 필요가 있습니다. 실제로 도움도 많이 될테구요.

나이가 들어서인지 풀릴 듯 하면서도 잘 풀리지가 않았습니다. 가장 효율적인 알고리즘은 앞에서 이야기한 O(n)에 푸는 방법일테니까요.

고민을 하고 있다가, 잠시 차 한잔해야지 하고 밖에 나갔다가 불현듯 떠오르는 생각에 코드를 적어보니, 역시나 되더군요. 아직 많이 녹슬지는 않았나봅니다. ^^

먼저 부분합이 0에 가까워지는 케이스입니다.

min_abs(a,b)를 다음과 같이 정의해보기로 합니다.

int min_abs(int a, int b)
{
   if( abs(a) < abs(b) ) return a;
   else return b;
}


즉, 절대값이 작은 값을 반환하는 함수인데요, 예를 들어 -5 와 3을 입력하면 3이 나오고, -10 과 20을 입력하면 -10이 나오게 됩니다.

위와 같이 min_abs를 정의하고,

minendinghere = x[0]
minsofar = x[0]

for i=[1,n)
  minendinghere = min_abs(minendinghere + x[i], x[i])
  minsofar = min_abs( minsofar, minendinghere)


와 같이 적용하니 정확하게 0 에 가장 가까운 부분합을 표시하게 됩니다.

책에서 주어졌던 숫자 배열인

31, -41, 59, 26, -53, 58, 97, -93, -23, 84


에 대해서 적용해보면

Close to Zero : 4
From 6 To 7
97 -93


97과 -93을 더했을 때 4가 나오며 이 값이 0에 가장 가깝다는 것을 알 수 있습니다.

또한, 문제에서 임의의 실수 t에 가까운 부분합을 찾는 부분이 있는데, 이 역시 간단하게 적용이 가능합니다.
위에서 정의한 min_abs()를 아래와 같이 변경하는 것으로 구현이 가능합니다.

int min_abs(int a, int b)
{  
   if( abs(TARGET_NUMBER - a) <  abs( TARGET_NUMBER - b) ) return a;
   else return b;
}


즐거운 금요일이네요. 모두 행복하세요~

p.s. 연습문제를 더 살펴보니 13번에 다음과 같은 문제가 있네요.

13. 최대합 부분벡터를 찾는 문제에서 실수로 이루어진 n*n 배열이 주어졌고, 직사각형 모양의 부분 배열에 대한 최대합을 구해야 한다. 이 문제의 복잡성은 어느정도인가?

주말 동안 생각해볼 좋은 주제하나 얻었네요~





0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/291 관련글 쓰기

댓글을 달아 주세요


 인사이트에서 번역 출간하여 개발자들에게 좋은 평가를 받고 있는 책인 "생각하는 프로그래밍"을 시간이 날 때마다 짬짬이 보고 있습니다. 주된 내용은 이미 학부때 배운 것들이지만, 10여년의 시간이 지난 지금 다시 읽어보면 감회가 새롭답니다. 덕분에 알고리즘 관련 책들을 다시 뒤적이게 됩니다.
 이 책에는 프로그래밍과 관련된 다양한 내용들이 나옵니다. 총 3부에 걸쳐 15개의 컬럼을 다루고 있는데요, 오늘 다룰 내용은 8번째에 소개되고 있는 "알고리즘 디자인 기법"입니다. 자세한 내용은 책을 참고하시기 바라며, 여기서는 해당 내용을 실제로 구현해보도록 하겠습니다.

풀고자 하는 문제는 다음과 같습니다.

"입력은 n개의 부동소수점 수로 이루어진 벡터 x이고, 출력은 입력된 벡터에 대한 연속적인 부분 벡터 각각의 합 중 최대값이다.(이를 최대합이라 한다)."


즉, 연속된 숫자의 합이 최대가 되는 부분을 찾는 문제입니다. 여기서는 문제를 간단히 하기 위해 정수만을 다루도록 합니다. 책에서는 모두 5가지의 알고리즘을 소개하고 있습니다. O(n^3) 에서부터 O(n)에 이르는 다양한 해법이지요. 자료구조(DS)나 알고리즘을 배우신 적이 있으시다면 O 표기법에 대해 잘 아시리라 믿습니다. 결론적으로 O(n)으로도 문제를 풀수 있고, 프로그램도 무척이나 간단합니다.

책에 나와 있는 코드는 아래와 같습니다.

maxsofar = 0
maxendinghere = 0

for i=[0,n)
  maxendinghere = max(maxendinghere + x[i], 0 )
  maxsofar = max( maxsofar, maxendinghere)


무척이나 간단하죠? 그리고 실제로도 너무나 잘 동작한답니다.  이를 C 코드로 바꾸는 것은 식은 죽 먹기보다 쉬울 것입니다.
그런데, 위의 코드는 단지 최대합만을 표시해줍니다. 어디서부터 어디까지를 더해서 나온 값이라는 부분이 없죠. 그래서 조금 바꾸어보았습니다.

   for(i=0;i<ARRAY_LENGTH;i++)
   {
      /*
      maxendinghere = max( maxendinghere + x[i], 0);
      maxsofar = max(maxsofar, maxendinghere);
      */
     
      if( maxendinghere + x[i] > 0 )
      {
         maxendinghere = maxendinghere  + x[i]; 
         end_here = i;
      } else
      {
         maxendinghere = 0;
         start_here = i+1;
      }
     
     
      if( maxsofar < maxendinghere )
      {
         maxsofar = maxendinghere;
         start_sofar = start_here;
         end_sofar = end_here;          
      }
     
   }

 
위의 코드에서 start_sofar, end_sorfar에 최대합을 이루는 부분의 시작과 끝 값이 들어가게 됩니다.

책에 보면 다음과 같은 10개의 연속값이 있습니다.

31, -41, 59, 26, -53, 58, 97, -93, -23, 84


이에 대해 위의 코드를 적용해서 수행해보면 아래와 같이 나오네요.

Max : 187
From 2 To 6
59 26 -53 58 97


배열 인덱스 2에서부터 6까지를 더하면 187이 나오며, 이 값은 책에 있는 값과 동일합니다.

프로그램을 테스트할 때 사용했던 값들을 좀더 표시해보면,

#define ARRAY_LENGTH 20

int x[ARRAY_LENGTH] = {

   -1,   9,  20, -50,  60,
   10,  23,   4, -10,   5,
   -2, -30,  15,  25,  80,
   65, -90, 150,  80,   4
};

에 대해

Max : 389
From 4 To 19
60 10 23 4 -10 5 -2 -30 15 25 80 65 -90 150 80 4


의 결과가 나옵니다.



0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/290 관련글 쓰기

댓글을 달아 주세요

Write in C

Computer/Programming 2009/02/20 12:44 by Shinnara

점심 시간에 본 정말 재밌는 동영상 하나..

양파님의 블로그에서 본 것인데요, 완전 대박이네요~



발상도 재밌고, 노래도 잘하네요~~

아~ 피아노 치고 싶어라...ㅋㅋ

0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/289 관련글 쓰기

댓글을 달아 주세요

FireFox의 단축키

Computer/Programming 2009/02/05 12:58 by Shinnara

블로그를 돌아다니다 재밌는 정보가 있어서 소개합니다.

파이어 폭스 단축키

KAISTIZEN 님의 블로그인데요, 좋은 글들이 많아 평소에 자주 보게 됩니다. 지금 이 글도 파이어폭스에서 작성 중인데 정말로 '/'를 누르니 문자열 검색을 해주네요. VI에서처럼 '/'를 통해 검색이 되니 참 신기하네요. 사실 별거 아닌데도 말이죠.. ^^

0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/286 관련글 쓰기

댓글을 달아 주세요


 요즘 계속해서 C 코드 파싱 문제를 다루고 있는데요, 그다지 큰 진척이 없다가 정통(?) 방식을 따르기로 마음먹고 Lex와 Yacc에 대한 공부를 해보았습니다. 뭐, 아직까지 제대로 알고 있지는 못하구요, 대강 어떻게 돌아가는 지, 문제가 생기면 어디쯤을 고쳐야 하는지에 대한 대략적인 감만 얻었다고나 할까요? 그래도 작업은 꽤 많이 진척되어서 C 코드에서 원하는 정보를 99% 얻어내고 있답니다. 이와 관련된 내용은 시간을 내어 정리하도록 하고, 오늘은 그 작업에 무지 무지 큰 도움이 된 정보를 소개하고자 합니다.

Lex 와 Yacc을 이용하기 위해서는 Lexical Specification 과 Grammar가 필요한 데요, 다음 링크에서 얻을 수 있습니다.

Lexical Specification
Yacc Grammar

꽤나 잘 정리가 되어 있습니다. 물론 곧바로 쓰기에는 약간 무리가 있는 부분도 있지만, 제가 원하던 작업에는 쉽게 적용이 가능했습니다.

C의 문법을 보면서 ANSI C의 표준에 대해 궁금해서 찾아봤는데, 좋은 자료가 있더군요.

Draft of the C99 standard (PDF)




0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/280 관련글 쓰기

댓글을 달아 주세요


Unix나 Linux의 Console에서 작업을 할 때, 작업 결과로 나오는 텍스트 내용을 저장하기 위해 ">"를 사용하곤 합니다.

하지만 그럴 경우 콘솔에는 해당 내용이 표시되지 않게 되죠. 예를 들어 폴더내의 파일 리스트를 보는 "ls"를 아래와 같이 사용하면

$ ls > list.txt
$


list.txt에 ls의 결과가 저장되게 됩니다.

하지만, 작업이 진행되는 내용을 동시에 보고 싶은 경우도 있지요. 이를 위해 tee 를 사용할 수 있습니다.

$ ls | tee list.txt
a.c
b.c
d.c
$

man 페이지를 보면 이렇게 나와있습니다.

User Commands                                              tee(1)

NAME
     tee - replicate the standard output

SYNOPSIS
  /usr/bin/tee
     /usr/bin/tee [-ai] [file]...

  ksh93
     tee [-ail] [file]...

DESCRIPTION
  /usr/bin/tee
     /usr/bin/tee copies standard input to standard output,  making  a  copy  in zero or more files. tee does not buffer its output. The options determine if  the  specified  files  are overwritten or appended to.

표시된 것처럼 표준 출력으로 나오는 것을 지정된 파일에 복사해주게 됩니다. 내용은 참 간단하지만, 의외로 유용하게 쓰인답니다.





0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/279 관련글 쓰기

댓글을 달아 주세요


 말로만 듣던 VirtualBox를 오늘 다운받아 설치하고, Fedora 를 깔아봤습니다. Fedora를 깔기 전에 Ubutu의 최신 버전을 설치해 봤는데, 별 문제없이 잘 설치되더군요.

 Ubuntu 도 그렇고 Fedora 도 모두 VirtualBox에서 초기의 최대 해상도는 800*600이었습니다. 이를 확장하기 위해서 알아보니 게스트 확장을 설치해야 한다고 합니다. 그래서 설치를 시작했죠.

 VirtualBox의 가상 머신 실행 창의 메뉴에서 "장치 --> 게스트 확장 설치"를 선택합니다. 그러면 설치에 필요한 파일이 담긴 CD가 삽입(실제로는 ISO파일) 됩니다.

 Fedora 10의 Live Image를 받아 Hard Disk에 설치한 경우, 기본적으로 설치되는 내용이 별로 없기 때문에 게스트 확장 설치를 위해서는 몇가지를 추가적으로 설치해주어야 합니다. 저의 경우는 다음과 같은 순서로 설치를 진행했습니다.

GCC 설치
Update System을 이용해서 최신 파일로 변경
DKMS 설치 ( VirtualBox에 보면 DKMS의 설치를 권장하더군요.)
GNU Make 설치

이후 게스트 확장 설치를 실행하고 나서 Reboot을 했습니다.

그 이후부터는 단순히 VirtualBox의 창 크기를 조절하는 것 만으로도 Fedora의 해상도가 자동으로 조절되더군요.

VirtualBox. 참 좋네요 ^^
1 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/278 관련글 쓰기

  1. Subject: 이런기분의 생각

    Tracked from sjjung's me2DAY  삭제

    VirtualBox 에 Fedora 10 설치후 해상도 설정하기

    2009/05/14 10:33

댓글을 달아 주세요

1 2 3 4 5  ... 6 
다...... (264)
Computer/Programming (106)
Links (14)
책 읽는 즐거움 (7)
끄적임 (66)
즐거운 과학 나라 (7)
일본 (5)
Study (4)