CS 전공/논문 쓰기2011. 6. 26. 14:25
SIGMOD Record 2011년 3월호에 실릴 E. Rahm의 글을 보면, 지난 10년간(2000~2009)의 DB쪽 탑 저널과 컨퍼런스에 게재된 논문에 대한 기관/국가별 통계 정보를 제공합니다. 재미난 사실들이 몇가지 있어서 그림 위주로 옮겨봅니다. 조사대항은 SIGMOD, VLDB conference와 TODS, VLDB Journal입니다. 원문은  http://dbs.uni-leipzig.de/file/aumueller2011affiliationanalysis.pdf 에서 다운로드 받을 수 있습니다.

그냥 재미삼아서 한번 보면 좋겠네요.

- 10년 동안에 논문 출판수가 거의 두배가 되었다(188 in 2000 vs. 352 in 2009)


논문당 평균 저자수와 기관 수, 국가 수, 대륙별 통계치이다.
- 평균 2개 기관에서 3명의 저자가 논문을 쓴다고 보면 맞겠다.

- 논문 수에서 미국이 압도적이다. 왜 IT, CS를 미국이 선도하는지에 대한 하나의 증거라고 할 수도 있겠다.



저자들의 세계 분포이다.
-미국읜 New england 지역과, 5대호 주위하고 캘리포니아, 시애틀 쪽에 많은 분포.
- 유럽은 골고루이긴 하나 특히 독일, 스위스가 많고, 그다음 영국, 이탈리아, 그리스 등의 순.
- 중동에서는 이스라엘이 우리나라만큼 논문 내는 듯.
- 아시아에서는 홍콩과 싱가폴의 DB 연구가 아시아를 대표한다고 할정도로 논문 수가 많음 


우리나라의 SIGMOD, VLDB 저자들의 분포.
- KAIST가 제일 많고, 다음 서울대, 서울과 대전 사이에 원 보이는데 이건 아마 수원의 성균관대일 것으로 보이는데 그렇다면 이상원 박사님 팀일 것 같고. 다음에 대구&포항(아마 한욱신 박사님 팀같고).서울 옆의 조그만 점은 강원대 문양세 박사님 팀이 아닐까 합니다.
- 저 원 키우는데 일조하고 싶은데 말이죠 ㅠㅠ


이 그래프는 게재된 논문들에 대한 기관 수와 저자 주의 상관 관계를보이는데 가로가 논문들의 전체 기관 수 세로가 기관 별 평균 저자 수입니다.
-  보면 싱가폴이 제일 높은 위치에 있는데, 이 말인즉 적은 수의 기관에서 상대적으로 많은 사람이 논문이 되었다로 해석하면 될 것이고
- 가장 오른쪽의 미국의 경우 논문 게재자들이 많은 기관들에 포진되어 있다.(저변이 넓다?) 로 해석하면 되겠습니다. 한국은 그려지지가 않았네요.편수나 저자 수가 작아서  et al.로 분류된 듯.
 


이 표는 10년간 가장 많은 논문을 탑 저널,컨퍼런스에 낸 사람들. research paper, industrial paper, demo 로 분류되어 있습니다. 

 - Research는 인도계와 중국계가 잡고 있네요.
- Srivastava가 10년간 39편 ㅠㅠ. 
 

Posted by Bart
CS 전공/논문 쓰기2010. 2. 6. 03:31
 논문을 읽는데 있어 블로그 주인장이 여태까지 여러 분들에게 들은 주요 discipline들이 있는데, 이들을 정리해 보면 다음과 같다.

1) 논문의 내용은 본인이 직접 읽고 판단해야 한다.
논문을 읽다보면 나타나는 수많은 참고 문헌들. 
혹자는 논문에 주어진 참고 문헌들을 읽지 않고 다른 논문에서의 관련 연구들을 보는 것만으로 끝내는 경우도 있는데,  이것은 장님이 코끼리 다리 더듬으면서 이것은 뭐네라고 하는 것과 마찬가지다. 
남이 읽고서 정리한 내용은 그 사람이 이해한 바대로만 쓰여져 있는 것이기 때문이다.

2) 한번 읽은 논문은 그 개념과 주요 내용을 정리하여 기록해 둔다.
  (EndNote, JabRef, Reference Manager 등 많은 도구들이 있다.) 
  암만 기억력이 좋아도 시간이 지나면, 내용은 커녕 예전에 그 논문을 읽었는지도 잊어버린다.

3) 읽을 논문 선정에 있어 Abstract와 Conclusion을 먼저 읽어보라. 
  시간 관계상 모든 논문을 다 읽어볼 수는 없다. 내 분야만 해도 한해에 주요3대 conference에만 출간되는 논문 편수가 800편이 넘는다. 하루에 1개씩 읽어도 도저히 다 못 읽는다. 때문에, 읽어야 할 논문을 선정할 때는 abstract를 먼저 읽어 이 논문이 어떤 문제를 풀려고 하는지를 보고, 다음으로 Conclusion을 보아서 해당 논문이 주어진 문제를 어떻게 풀거나 개선했는지를 파악한다. 이렇게 하면, 논문을 잘못 선정하여 읽다가 보니 '이 산이 아니올시다' 같은 사태를 피할 수 있다.

4) 이해가 안되면 다섯 번은 읽어라.
 여러 학자들이 오랜 기간 동안 고안한 자신들의 복잡한 연구 내용을 12-20 page 의 문서로 작성하는데 들인 시간을 생각해 보라. 그걸 한 번에 읽고 이해하는 것은 당연히 쉬운 일이 아니다. 논문을 한 번에 이해할 수 있는 경우는 경험에 비추어 보면, 이미 그 분야에서 많은 일을 해왔거나 또는 관련하여 많은 논문들을 봐둔 경우 뿐이다. 새 연구 분야의 논문이라면 처음에 그만큼이해하기 어려운 건 당연한 거다. 그러니 한번에 이해하지 못한다 좌절말고, 반복해서 읽어봐라. 

5) 논문에서 설정해 둔 가정이 무엇인지 파악해 두라.
 그 가정을 벗어나는 환경에서 그 논문의 문제 해결 방식은 전혀 쓸모가 없을 수 있다. 때문에 저자들의 가정이 실제 환경에 위배하는지를 잘 파악해 둘 필요가 있다. 

6) 주요 컨퍼런스, 저널에 최근 출간된 논문을 읽어라.
 동일한 연구 주제를 다룬 논문이라도 해당 분야에서 게재되기 제일 까다롭다는 컨퍼런스, 저널에 출간된 논문들을 읽어라. 경쟁이 심하지 않거나, 제출하면 다 게재해주는 컨퍼런스, 저널에 게재된 논문들은 그만큼 연구 방법이나 내용 또한 허술하기 짝이 없다. 물론 주요 컨퍼런스에 게재된 논문 중에서도 연구 방법이 잘못되거나 중요성이 떨어지는 경우도 있지만, 많은 경우에 있어 훨씬 나은 연구 방법과 내용을 보인다. 또한, 같은 연구 주제라도 최신의 연구 방법이나 내용을 습득하기 위해 최근에 출간된 논문을 읽는 편이 좋다.

7) 인용 횟수가 높은 논문을 선택해서 읽어라.
 당신이 봐 두어야 할 논문일 것이다.

8) 주요 컨퍼런스에서 요새 학자들이 무슨 연구들을 하는지 들여다 보라.
 최신의 연구경향을 파악할 수 있다. 오래된 연구 주제들은 이미 남들에 의해 많이 연구되어서, 그만큼 읽어야 할 참고문헌 수는 많으면서 아직 풀리지 않은 문제들의 수는 적다. 때문에 논문 주제를 잡기가 보다 어렵다. 가급적 최신의 연구 주제를 선정한다.

9) 절대 저자가 논문에서 얘기하는 바를 처음부터 믿지 말라.
  논문은 교과서가 아니다. 우수한 컨퍼런스와 저널에 높은 경쟁률을 뚫고 게재된 논문이라도 오류가 있을 수 있다. 일단은 그 논문에 쓰여진 모든 내용에 대해 의구심을 가져야 한다.

10) 잘 쓰여진 논문을 통해, 논문의 스타일과 작성법을 습득하라.
 모방은 창조의 어머니이다. 나중에 본인의 논문 작성 시 도움이 된다. 하지만, 스타일은 참조하되 문장을 베끼지는 말아라(3-4단어 이상이 연속으로 다른 논문의 문장과 일치한다면 표절로 간주된다.)

11) 저자들이 누구인지 보라.
 그 분야에 어떤 사람들이 무슨 일을 하고 있는지 아는 것은 연구 경향 파악과 나중에 혹 있을 자문 의뢰, 공동 연구 등에도 도움이 된다. 
 
Written by bart7449
Posted by Bart
CS 전공/논문 쓰기2009. 12. 24. 08:24


J. Hartman과 S. Koborov 교수 방문 앞에 걸려져 있던 두 개의 조그만 그래프를 그대로 그려봤다.
단순하고 모두가 아는 내용이지만 글을 쓰다보면, 이런 저런 이유로 문장이 길어지고 쓸데없는 말만 많아진다.  요는 최소한의 단어로 독자가 내용을 잘 이해할수록 하며, 이해를 위한 충분한 정보를 제공하면서도 간결하게 쓰는 것이 중요하다.
Posted by Bart
CS 전공/논문 쓰기2009. 9. 27. 16:35
미국애들이 쓰는 용지 크기는 USLetter이고, 한국은 A4이고... 용지 차이로 인해 컴파일시 제대로 
용지 크기에 맞추어서 행간이 적절히 설정이 안되는 문제가 있다.  PDF LaTeX를 이용하여 컴파일 한다면, 아래대로 처리하자. 

아래의 글은 (Andrew J. Norman이 작성한 http://physics.wm.edu/~norman/latexhints/pdf_papersize.html)에서 발췌하였다. 

When compiling a document using pdflatex (under the default installation of teTeX) the papersize (page size) may be set incorrectly if calls to the Vmargin or Vpage packages are used.

The resulting page size will normally be set to an A4 default (210x297mm or roughly 8.24x11.71in) with appropriate margins. This behavior is caused by page defaults both in the pdftex configuration file and in the Vmargin style file. To correct this you should perform the following modification:
In pdftex.cfg ($TEXBASE/texmf/pdftex/config/pdftex.cfg) remove or modify the lines:

page_width 210truemm
page_height 297truemm

So that they correspond to your desired default pagesize. An example entry for letter sized paper would read:

page_width 8.5truein
page_height 11.0truein

Additionally in the Vmargin style file ($TEXBASE/texmf/tex/latex/misc/Vmargin.sty) at or around line 225 you should change the following default settings so that they reflect the correct default paper size and margins:

%
% DEFAULTS:
%
\setpapersize{A4}
\setmarginsrb{35mm}{20mm}{25mm}{15mm}{12pt}{11mm}{0pt}{11mm}

For example changing this to read:

%
% DEFAULTS:
%
\setpapersize{USletter}
\setmarginsrb{1in}{1in}{1in}{1in}{0pt}{0mm}{0pt}{0mm}

Will set up the default page layout to be the standard USLetter (8.5x11.0in) with 1 inch margins and no headers or footers.

It should be noted that for some reason calls to \setpapersize{} that are made within the document seem to be ignored by pdflatex. Even so, it is advised that you include a proper \setpagesize{} and \setmarginsrb{} call so that pagesize can be controlled when building documents with the standard latex package.

If you are constructing your PDF files via conversion of a postscript document that was produced using dvips, then you should additionally check to make sure that your postscript config file ($TEXBASE/texmf/dvips/config/config.ps) is set up to default to a USLetter (8.5in by 11.0in) bounding box. If you see the following: 

@ A4size 210mm 297mm
@+ %%PaperSize: A4

@ letterSize 8.5in 11in

@ letter 8.5in 11in
@+ %%BeginPaperSize: Letter
@+ letter
@+ %%EndPaperSize

In the config.ps file then the A4 bounding box is used incorrectly in place of the letter bounding box, resulting in documents that are typeset to a USLetter layout but are generated with an A4 canvas. To correct the situation comment out the first two A4size lines so that the file appears as: 

% @ A4size 210mm 297mm
% @+ %%PaperSize: A4

@ letterSize 8.5in 11in

@ letter 8.5in 11in
@+ %%BeginPaperSize: Letter
@+ letter
@+ %%EndPaperSize

This will now generate the proper bounding box for letter defaults.

또한, 아래의 방법도 확인해 두자. 아래는 ifpdf 패키지를 이용하여,  PDF TeX로 컴파일 할 경우 용지 크기를 설정한다.

\usepackage{ifpdf}

\ifpdf % set page size.

\setlength{\pdfpagewidth}{8.5in}

\setlength{\pdfpageheight}{11in}

\else

\fi


Posted by Bart
CS 전공/논문 쓰기2009. 9. 7. 07:56

Bar graph는 논문 작성 시 가장 많이 이용되는 그래프 중 하나이다.
파워포인트를 이용하여 바 그래프를 그리다보면, 각 바들을 색깔로 구분을 한다.
하지만 실제 출력되는 논문은 흑백으로 인쇄되는 것이 태반이므로 색깔로 구분해 놓아서는 나중에
가독성이 심하게 떨어지는 문제가 있다. 아래의 그림 참조
(*위의 두 그래프는 Derek Bruening의 홈페이지
http://www.burningcutlery.com/derek)에서 빌려왔다.)

파워포인트에서 위와 같이 바 그래프를 색깔이 아닌 패턴을 통해 구분토록 하기 위해서는
다음과 같이 한다.

1. 해당 그래프를 우 클릭해서 데이터 계열 서식으로 들어간 후, 채우기 메뉴를 선택.
2. 거기에서 네 번째에 있는 그림 또는 질감 채우기 선택 후
3. 마이크로 패턴 파일을 선택, 삽입하고 아래는 쌓기 옵션으로 한다.

마이크로 패턴은 구글 이미지 검색 등으로 micropattern으로 검색하면 왠만한 것들은 나온다.
특히 http://www.fireworkszone.com/page-2-4-1-433.html에서 꽤 많은 마이크로패턴들을 다운받을 수 있다.  기본적인 패턴 3개는 아래 것을 받아 써도 되겠다.


Posted by Bart
CS 전공/논문 쓰기2009. 6. 22. 07:36
공학 논문을 쓸 때는, 워드 프로세서로 작성하기에는 곤란한 수식이나 여러 심볼들의 표현이 자유로운, 그리고 BibTeX를 이용한 서지 정보 작성이 용이한 LaTeX를 주로 이용한다.  그리고, 그림은 보통 JPG가 아닌, EPS 포맷으로 삽입을 시킨다. JPG를 잘 쓰지 않는 이유는 파워포인트 등으로 작업한 그림 파일을 캡쳐에서 jpg로 변환 후 살펴보면, 글자 자체가 이지러져 번져 보인다는 점이다. 장수 제한 때문에 보다 작고 세밀한 폰트를 이용해서 그림을 그려봐도 jpg로 캡쳐를 하면 나중에 번진다는 것이다.(LaTeX 작업을 해본 사람들은 다 한번씩은 경험해 보았을 것이다.) 또한 이렇게 삽입한 jpg를 가지고 LaTeX를 ps 또는 pdf로 변환시켜봐도 pdf 변환시의 제한된 해상도에 따라 또다시 그림의 해상도가 떨어지는 문제가 있다. 그래서 사람들은 보통 이미지 파일을 EPS로 변환시켜 원고에 삽입한다.

EPS를 작성하기 위해서는 Adobe Acrobat (리더 말고) 이 있으면 문제가 없다. 그러나 Adobe Acrobat은 상용이다.
무료 도구로는 ppt2eps라는 툴이 있다. 하지만 이 툴의 문제는, 일단 비스타에서는 자주 에러를 발생시키고, 파워포인트 그림의 크기가 캔버스 만해지거나 그보다 커지면, 사이즈 문제로 인해 제대로 된 eps 파일을 출력하지 못한다는 점이다.

그러던 와중에 후배로부터 PDFCreator(http://sourceforge.net/projects/pdfcreator/)라는 무료 PDF 작성 SW 를 알게 되었다. 보니, EPS 출력을 지원하고 있어 혹시나 싶어 설정을 해보았는데, 아주 제대로된 품질의 EPS를 얻게 되었다.
아래는 경험을 토대로 이의 사용법을 정리한 것이다.

*PDFCrator로 EPS 작성하기*

1) PDFCreator를 다운받아 설치한다.
2) 프린터 설정에서 PDFCreator 를  마우스 오른쪽 버튼 클릭하여 Properties를 선택
    (영문 윈도우라 한글로는 메뉴 명이 먼지 잘 ㅡ.ㅡ 아마도 속성?)

3)  나오는 메뉴 중 우측 하단의 Printing Preference 선택 -> 다음 Advanced(고급) 선택
4)  나오는 메뉴 중 PostScript Option  -> PostScript Output  Option을 Encapsulated PostScript(EPS)로 선택, 
    True Type Font Download option-> Outline으로 선택

5) 파워포인트에서 그림 파일을 긁어서 CTRL+C로 카피
6) Accessaries(보조 프로그램)-> paint(그림판) 열어 초기 셋팅한다. 
   a. 캔버스 크기를 작게 설정:  오른쪽 하단 캔버스 끝을 마우스로 drag해서 가장 작게 만든다.
   b. File -> Page setup을 눌러, Scalining을 원 그림 사이즈의 25~33%로 설정한다.
      (이걸 안하면 EPS 그림이 엄청 커지고, 나중에 LaTeX 태그로 resize도 안된다.

7) CTRL+V로 그림 PASTE
8) PDFCreator로 출력, 출력 시 파일 포맷은 eps로 설정한다.


이렇게 해서 작성된 EPS를 PDF로 뽑아보면 아주 유려한 Figure들을 볼 수가 있다. ^^


'CS 전공 > 논문 쓰기' 카테고리의 다른 글

LaTeX 컴파일 시 용지 크기 설정  (0) 2009.09.27
막대 그래프에 패턴 넣기  (1) 2009.09.07
How To Write Proofs  (1) 2009.03.04
Algorithm2e Too Many Brackets  (2) 2009.02.20
JabRef - Reference Manager  (0) 2008.03.15
Posted by Bart
CS 전공/논문 쓰기2009. 3. 4. 19:43
논문에서 정리와 증명을 넣어야 할 필요가 있어서 논리 전개를 해가던 중 어떤 증명법들이 또 있는지 인터넷에서 자료를 찾아보다가 발견하게 되었다. 꽤나 간결하게 정리되어 있는 듯 싶다. 좋다. 일전에 포스트해둔 용어 정리(http://bart7449.tistory.com/9  참조)와 같이 보아가면, 증명법에 대한 정리와 영어 예문으로는 적절할 듯 싶다.

How To Write Proofs, byLarry W. Cusick 
 
http://zimmer.csufresno.edu/~larryc/proofs/proofs.html
Posted by Bart
CS 전공/논문 쓰기2009. 2. 20. 14:08
어떠한 문제는 누군가가 이미 경험해보았던 문제였을 가능성이 높다...
algorithm 작성에 필요한 이놈의 package가 요놈의 학회 proceeding class하고 붙여놓으면, 요런 뻑이 나던데..
이미 여러 사람이 경험했나보다. 간단한 solution이 웹에 돌아다니고 있다.

As noted here, the algorithm2e LaTeX package conflicts with several others over the use of the algorithm identifier. A common indicator is something like this message:

********************************************************
Package `algorithm2e' Release 3.9 -- october 04 2005 --
- algorithm2e-announce@lirmm.fr mailing list for announcement about releases
- algorithm2e-discussion@lirmm.fr mailing list for discussion about package
subscribe by emailing sympa@lirmm.fr with 'subscribe <list> <firstname name>'
- Author: Christophe Fiorio (fiorio@lirmm.fr)
********************************************************
! Too many }'s.
l.1616     }

To resolve the issues, simply put the following just before the inclusion of the algorithm2e package:

\makeatletter
\newif\if@restonecol
\makeatother
\let\algorithm\relax
\let\endalgorithm\relax
 
Posted by Bart
CS 전공/논문 쓰기2008. 3. 15. 16:10

사용자 삽입 이미지

JabRef Reference Manager

이번에 쓰기로 한 놈은 JabRef라는 GPL 라이센스의 레퍼런스 매니저이다.

열람하고, 인용할 논문들의 수가 많아짐에 따라, 예전에는 구글 데스크탑 설치하고,  파일 이름을 논문제목-학회-년도로 부여하고 검색을 수행하였다.
구글 데스크탑이 PDF 파일에 대한 내용 검색도 되기 때문에, 또 관련된 논문들 찾는데도 (사실은 잊고 있던) 솔찬히 도움이 되었다. 그리고, 논문 내용 정리는 이미지 컷과 객체 참조가 자유로운 MS의 OneNote로 하고....

하지만, 문제는 나중에 논문을 쓰려고 보니, 학회마다 제각각인 인용 스타일....

IEEE,ACM, LNCS 전부다 reference 스타일이 다 틀리고, 또 논문 쓸 때마다 reference list를 작성하느라 아주 귀찮아지기 시작했다.

그러던 차에 EndNote라는 유명한 Reference Manager가 있는 것을 알게 되고, 이게 상용이라 돈주고 사야한다는 걸 알게 되었다.  뭐 과제비로 사자고 하면 되겠지만, 또 보니 Vista용은 아직 나오지 않은 것 같다.

대체를 찾다가, 기억 저편에 놓고 있던 이 JabRef를 다시 깔아서 정리하기 시작했다. JabRef는 Java로 작성된 SW라 Vista에서도 동작이 가능하겠지..

일단 정리된 reference는 나중에 LaTeX 에디터로 보내서 쉽게 reference List를 만들 수 있게 해준다. 내가 사용하는 WinEdt+MikTek 조합에서 잘 물려 돌아간다.
각 reference에 대해서 논문 파일이나 ppt 파일, DOI 정보 등도 여러 개를 입력 시킬 수 있다.

아쉬운 것은 요새 많이 사용하는 google scholar에 대한 web search를 지원하지 못한다.
어차피 google scholar가 BibTex를 지원하기 때문에 UI 상에서 google scholar에 직접 질의하고 그 결과를 bibtext로 가져오게 하면, 노가다성이 일이 줄텐데.. 쯧.

또 한가지 아쉬운 것은 reference에 대한 review 란이 단순 텍스트 만을 지원한다는 점이 많이 아쉽다. OneNote같이 객체 참조가 자유로우면 훨씬 더 좋을 텐데, 보니, bibTex의 한 태그로 review 의 텍스트 값들을 기록한다. 즉 텍스트 이외에는 기록이 안된다는... 저장 포맷의 변경이 없는 한 이부분은 불가능할 것 같다....

아... JabRef + OneNote+ Google Scholar, IEEE Explorer, ACM DL, Citeseer 검색 이면 좋으련만....

Posted by Bart
CS 전공/논문 쓰기2007. 11. 12. 20:52

PSEUDOCODE STANDARD

Pseudocode is a kind of structured english for describing algorithms. It allows the designer to focus on the logic of the algorithm without being distracted by details of language syntax.  At the same time, the pseudocode needs to be complete.  It describe the entire logic of the algorithm so that implementation becomes a rote mechanical task of translating line by line into source code.

In general the vocabulary used in the pseudocode should be the vocabulary of the problem domain, not of the implementation domain.  The pseudocode is a narrative for someone who knows the requirements (problem domain) and is trying to learn how the solution is organized.  E.g.,

Extract the next word from the line (good)
set word to get next token (poor)

Append the file extension to the name (good)
name = name + extension (poor)

FOR all the characters in the name (good)
FOR character = first to last (ok)

Note that the logic must be decomposed to the level of a single loop or decision. Thus "Search the list and find the customer with highest balance" is too vague because it takes a loop AND a nested decision to implement it. It's okay to use "Find" or "Lookup" if there's a predefined function for it such as String.indexOf().

Each textbook and each individual designer may have their own personal style of pseudocode. Pseudocode is not a rigorous notation, since it is read by other people, not by the computer. There is no universal "standard" for the industry, but for instructional purposes it is helpful if we all follow a similar style. The format below is recommended for expressing your solutions in our class.

The "structured" part of pseudocode is a notation for representing six specific structured programming constructs: SEQUENCE, WHILE, IF-THEN-ELSE, REPEAT-UNTIL, FOR, and CASE. Each of these constructs can be embedded inside any other construct. These constructs represent the logic, or flow of control in an algorithm.

It has been proven that three basic constructs for flow of control are sufficient to implement any "proper" algorithm.

SEQUENCE is a linear progression where one task is performed sequentially after another.
WHILE is a loop (repetition) with a simple conditional test at its beginning.
IF-THEN-ELSE is a decision (selection) in which a choice is made between two alternative courses of action.


Although these constructs are sufficient, it is often useful to include three more constructs:
 

REPEAT-UNTIL is a loop with a simple conditional test at the bottom.
CASE is a multiway branch (decision) based on the value of an expression. CASE is a generalization of IF-THEN-ELSE.
FOR is a "counting" loop.
SEQUENCE

Sequential control is indicated by writing one action after another, each action on a line by itself, and all actions aligned with the same indent. The actions are performed in the sequence (top to bottom) that they are written.

Example (non-computer)

Brush teeth
Wash face
Comb hair
Smile in mirror
Example
READ height of rectangle
READ width of rectangle
COMPUTE area as height times width
Common Action Keywords
Several keywords are often used to indicate common input, output, and processing operations.
Input: READ, OBTAIN, GET
Output: PRINT, DISPLAY, SHOW
Compute: COMPUTE, CALCULATE, DETERMINE
Initialize: SET, INIT
Add one: INCREMENT, BUMP
IF-THEN-ELSE

Binary choice on a given Boolean condition is indicated by the use of four keywords: IF, THEN, ELSE, and ENDIF. The general form is:

IF condition THEN
sequence 1
ELSE
sequence 2
ENDIF
The ELSE keyword and "sequence 2" are optional. If the condition is true, sequence 1 is performed, otherwise sequence 2 is performed.

Example

IF HoursWorked > NormalMax THEN
Display overtime message
ELSE
Display regular time message
ENDIF
WHILE

The WHILE construct is used to specify a loop with a test at the top. The beginning and ending of the loop are indicated by two keywords WHILE and ENDWHILE. The general form is:

WHILE condition
sequence
ENDWHILE
The loop is entered only if the condition is true. The "sequence" is performed for each iteration. At the conclusion of each iteration, the condition is evaluated and the loop continues as long as the condition is true.

Example

WHILE Population < Limit
Compute Population as Population + Births - Deaths
ENDWHILE

Example

WHILE employee.type NOT EQUAL manager AND personCount < numEmployees
INCREMENT personCount
CALL employeeList.getPerson with personCount RETURNING employee
ENDWHILE
CASE

A CASE construct indicates a multiway branch based on conditions that are mutually exclusive. Four keywords, CASE, OF, OTHERS, and ENDCASE, and conditions are used to indicate the various alternatives. The general form is:

CASE expression OF
condition 1 : sequence 1
condition 2 : sequence 2
...
condition n : sequence n
OTHERS:
default sequence
ENDCASE

The OTHERS clause with its default sequence is optional. Conditions are normally numbers or characters

indicating the value of "expression", but they can be English statements or some other notation that specifies the condition under which the given sequence is to be performed. A certain sequence may be associated with more than one condition.

Example

        CASE  Title  OF
                Mr      : Print "Mister"
                Mrs     : Print "Missus"
                Miss    : Print "Miss"
                Ms      : Print "Mizz"
                Dr      : Print "Doctor"
        ENDCASE

Example

        CASE  grade  OF
                A       : points = 4
                B       : points = 3
                C       : points = 2
                D       : points = 1
                F       : points = 0
        ENDCASE

REPEAT-UNTIL

This loop is similar to the WHILE loop except that the test is performed at the bottom of the loop instead of at the top. Two keywords, REPEAT and UNTIL are used. The general form is:

REPEAT
sequence
UNTIL condition
The "sequence" in this type of loop is always performed at least once, because the test is peformed after the sequence is executed. At the conclusion of each iteration, the condition is evaluated, and the loop repeats if the condition is false. The loop terminates when the condition becomes true.
 

FOR

This loop is a specialized construct for iterating a specific number of times, often called a "counting" loop.  Two keywords, FOR and ENDFOR are used. The general form is:

FOR iteration bounds
sequence
ENDFOR
In cases where the loop constraints can be obviously inferred it is best to describe the loop using problem domain vocabulary.

Example

FOR each month of the year (good)
FOR month = 1 to 12 (ok)

FOR each employee in the list (good)
FOR empno = 1 to listsize (ok)


NESTED CONSTRUCTS

The constructs can be embedded within each other, and this is made clear by use of indenting. Nested constructs should be clearly indented from their surrounding constructs.

Example

SET total to zero
REPEAT
READ Temperature
IF Temperature > Freezing THEN
    INCREMENT total
END IF
UNTIL Temperature < zero
Print total
In the above example, the IF construct is nested within the REPEAT construct, and therefore is indented.
 
 

INVOKING SUBPROCEDURES

Use the CALL keyword. For example:

CALL AvgAge with StudentAges
CALL Swap with CurrentItem and TargetItem
CALL Account.debit with CheckAmount
CALL getBalance RETURNING aBalance
CALL SquareRoot with orbitHeight RETURNING nominalOrbit

EXCEPTION HANDLING

    BEGIN
        statements
    EXCEPTION
        WHEN exception type
            statements to handle exception
        WHEN another exception type
            statements to handle exception
    END



Sample Pseudocode

"Adequate"

FOR X = 1 to 10

    FOR Y = 1 to 10
        IF gameBoard[X][Y] = 0
            Do nothing
        ELSE
            CALL theCall(X, Y) (recursive method)
            increment counter                 
        END IF
    END FOR
END FOR

"Better"

Set moveCount to 1
FOR each row on the board
    FOR each column on the board
        IF gameBoard position (row, column) is occupied THEN
            CALL findAdjacentTiles with row, column
            INCREMENT moveCount
        END IF
    END FOR
END FOR

(Note: the logic is restructured to omit the "do nothing" clause)


"Not So Good"

FOR all the number at the back of the array
    SET Temp equal the addition of each number
    IF > 9 THEN
        get the remainder of the number divided by 10 to that index
        and carry the "1"
    Decrement one
Do it again for numbers before the decimal
 

"Good Enough (not perfect)"

SET Carry to 0
FOR each DigitPosition in Number from least significant to most significant

    COMPUTE Total as sum of FirstNum[DigitPosition] and SecondNum[DigitPosition] and Carry  

    IF Total > 10 THEN
        SET Carry to 1
        SUBTRACT 10 from Total
    ELSE
        SET Carry to 0
    END IF

    STORE Total in Result[DigitPosition]

END LOOP  

IF Carry = 1 THEN
    RAISE Overflow exception
END IF
 



"Pretty Good"  This example shows how pseudocode is written as comments in the source file. Note that the double slashes are indented.

public boolean moveRobot (Robot aRobot)
{
    //IF robot has no obstacle in front THEN
        // Call Move robot
        // Add the move command to the command history
        // RETURN true
    //ELSE
        // RETURN false without moving the robot
    //END IF
}

Example Java Implementation

  • source code statements are interleaved with pseudocode.
  • comments that correspond exactly to source code are removed during coding.

public boolean moveRobot (Robot aRobot)
{
    //IF robot has no obstacle in front THEN
    if (aRobot.isFrontClear())
    {
        // Call Move robot
        aRobot.move();
        // Add the move command to the command history
        cmdHistory.add(RobotAction.MOVE);
        return true;
    }
    else // don't move the robot
    {
        return false;
    }//END IF
}
 



Document History
Date Author Change
12/2/03
JD
Added Exception Handling and more examples
2/21/03 JD Added "problem domain vocabulary" paragraph.
Modified FOR loop explanation.

출처: www.csc.calpoly.edu/~jdalbey/SWE/pdl_std.html

Posted by Bart