Ruby 프로그래밍 2 loop, 수열 함수 정의 및 호출 반복과 재귀

Slides:



Advertisements
Similar presentations
Ⅰ. 연산자 Ⅱ. 제어 구조. 연산자 : 할당 연산자 - 사용자가 정의한 변수에 임의의 값을 저장하는 기능 strvar = strVar1+ “ Hello ”
Advertisements

파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Chapter 7. 조건문.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Ruby 프로그래밍 1 문자열 입출력 제어구조 looping 함수 정의
제2장 기본 문법 (2) 주제 : 연산자, 조건문, 반복문 수원과학대학 컴퓨터정보과.
6 반복문의 기본 for 문 여러 번 반복하는 작업은 for 문으로!.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
2주차: 변수, 수식, Control Flow.
Part 07 제어 구조 ©우균, 창병모 © 우균, 창병모.
6장. printf와 scanf 함수에 대한 고찰
2007 1학기 11 프로젝트 기초 실습.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
Tail-recursive Function, High-order Function
예제로 배우는 Visual Basic 구구단 작성기로 익히는 반복문
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express Slide 1 (of 27)
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
C 언어 교육 02 주차 – scanf & 반복문과 조건문 교육부장 조하정.
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
어서와 C언어는 처음이지 제15장.
인터넷응용프로그래밍 JavaScript(Intro).
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
프로그래밍 원리 Chapter 05 자바스크립트 기초 신한대학교 IT융합공학부 박 호 균.
2장. 변수와 타입.
6강. 객체지향 프로그램의 시작 객체지향 이전의 프로그래밍 객체지향의 등장 배경과 이해 메소드의 이해
Choi Seong Yun 컴퓨터 프로그래밍 기초 #06 : 반복문 Choi Seong Yun
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
1. 2진 시스템.
Chapter 08. 함수.
17장. 제어문과 내장 함수 제어문 내장 함수 제어문 내장 함수.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
[ 단원 04 ] 반복과 배열.
2nd day Indexing and Slicing
5 함수.
제 15 강 문자와 코드 shcho.pe.kr.
Ruby 프로그래밍 4 자료구조 응용 한국어 정보의 전산 처리
Excel 일차 강사 : 박영민.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Flow Diagram IV While.
7주차: Functions and Arrays
7장. 다양한 형태의 반복문. 7장. 다양한 형태의 반복문 7-1 반복문이란? 반복문의 기능 세 가지 형태의 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 7-1 반복문이란? 반복문의 기능 특정 영역을 특정 조건이 만족하는 동안에 반복.
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
함수, 모듈.
TVM ver 최종보고서
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
어서와 C언어는 처음이지 제21장.
SPL-Duino 블록 편집기 이용하기 전류센서 블록 만들기 SPL-Duino 블록 편집기를 실행합니다.
Ruby Programming 8 Web Crawling 한국어 정보의 전산 처리
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

Ruby 프로그래밍 2 loop, 수열 함수 정의 및 호출 반복과 재귀 한국어 정보의 전산 처리 2017. 4. 26.

사용자로부터 입력받은 정수들의 합, 평균 3 정수들을 command line argument로 제공한 경우 sum = 0 ARGV.each do |i| # ARGV : command line argument로 제공된 문자열들의 Array sum += i.to_i # ARGV Array에 들어 있는 각 문자열 i를 정수로 변환하여 # sum에 더함. end print sum, "\t", sum.to_f / ARGV.length

구구단 출력하기 (1..9).each do |y| #1부터 9까지 (2..9).each do |x| #2단부터 9단까지 print x, "*", y, "=", x*y, "\t“ #이 라인은 8*9=72번 실행됨. end #작은 loop는 9번 반복 실행됨. print “\n“ #이 라인은 9번 반복 실행됨. end loop가 중첩(nesting)될 수 있음. 큰 loop 안에 작은 loop가 내포됨. 큰 loop의 변수의 하나의 값에 대해 작은 loop가 1번 돌아감. 작은 loop 안에 들어 있는 블록은 (큰 loop의 변수의 값의 개수 * 작 은 loop의 변수의 값의 개수)만큼 실행됨.

한글 완성형 2350자 출력하기 # -*- coding: cp949 -*- (0xb0..0xc8).each do |ap| #앞 바이트의 범위. 총 25개 (0xa1..0xfe).each do |dui| #뒤 바이트의 범위. 총94개 print ap.chr, dui.chr, "\n“ #ap, dui를 숫자가 아니라 문자(character)로 출력 #printf "%c%c\n", ap, dui 라고 해도 됨. #25*94=2350번 실행됨. end ruby script 파일의 인코딩을 cp949로 해서 저장해야 함. .chr 메소드는 정수를 (그 정수 값을 code point로 하는) 문자로 변환 .ord 메소드는 문자를 (그 문자의 code point에 해당하는) 정수로 변환

등차수열 출력하기 등차수열: 각 항과 다음 항 사이의 差(공차)가 일정한 수열 puts "등차수열을 출력해 드립니다. 초항, 공차, 상한선을 입력하세요." first = gets.chomp.to_i #초항 diff = gets.chomp.to_i #공차 max = gets.chomp.to_i #상한선 i = first #출력할 수를 나타내는 변수 i를 초항으로 설정 while i <= max do # i가 상한선보다 작거나 같으면 블록을 반복 실행 puts i # i를 출력 i += diff # i에 공차를 더함 end

등차수열 출력하기 command line argument 이용 first = ARGV[0].to_i # 첫째 인자: 초항 diff = ARGV[1].to_i # 둘째 인자: 공차 max = ARGV[2].to_i # 셋째 인자: 상한선 i = first while i <= max do puts i i += diff end

등차수열 출력하기: 유의사항 추가 사용자가 command line argument를 충분히 제공하지 않으면 앞의 code는 제대로 작동하지 않음. 또한 공차가 0이면 loop가 무한히 반복됨. 그럴 경우에는 경고 메시지를 출력하고 프로그램을 조기 종료. if ARGV.length < 3 print "초항, 공차, 상한선을 알려 주세요.“ #경고 메시지 exit # 프로그램 종료 end first = ARGV[0].to_i diff = ARGV[1].to_i if diff == 0 print "공차가 0이면 안 됩니다.“ # 경고 메시지

등차수열: 공차가 음수인 경우 공차가 음의 정수인 등비수열도 수학적으로 가능함. 공차가 음수인 경우에 대비해야 함 if diff > 0 # 공차가 양수 while i <= max do puts i i += diff end else # 공차가 음수 while i >= max do # i가 하한선(max)보다 크면 블록을 반복 실행

등비수열 출력 등비수열: 각 항과 다음 항 사이의 比(공비)가 일정한 수열 if ARGV.length < 3 등비수열: 각 항과 다음 항 사이의 比(공비)가 일정한 수열 if ARGV.length < 3 print "초항,공비,상한선 알려줘." exit end first = ARGV[0].to_i ratio = ARGV[1].to_i max = ARGV[2].to_i if ratio <= 1 print "공비가 1 이하이면 안돼." exit end i = first while i <= max do puts i i *= ratio

등비수열: 공비가 1보다 작은 경우 대비 if ARGV.length < 3 print "초항,공비,상한선 알려줘." exit end first = ARGV[0].to_f ratio = ARGV[1].to_f max = ARGV[2].to_f if ratio == 1.0 or ratio =< 0.0 print "공비가 1, 0, 음수이면 안돼.” i = first if ratio > 1.0 while i <= max do puts i i *= ratio end else # 0.0 < ratio < 1.0 while i >= max do

피보나치(Fibonacci) 수열 n항과 n+1항의 합이 n+2항이 되는 수열 if ARGV.length < 3 print "초항, 제2항, 상한선을 입력." exit end x = ARGV[0].to_i y = ARGV[1].to_i max= ARGV[2].to_i puts x puts y z = x+y while z <= max do puts z x, y = y, z end Ruby는 parallel assignment가 가능하다는 게 특징임. x, y = y, z # y의 값을 x에 할당하고, z의 값을 y에 할당함. (이 순서대 로)

factorial 구하기 1: iterative algorithm n!, factorial(n) : 1부터 n까지의 정수를 모두 곱한 수 if ARGV.length < 1 print "factorial을 구해 드립니다. n을 입력하세요." exit end n = ARGV[0].to_i result = 1 #결과값을 담을 변수를 일단 곱셈의 항등원인 1로 설정 (2..n).each do |i| # 1은 곱하나 마나이므로 2부터 n까지 result *= i # result = result * i와 같음. result에 i를 곱함 print result

factorial 구하기 2: 함수 이용 called code def factorial(n) #함수 정의 result = 1 (2..n).each do |i| result *= i end result #return value #함수의 마지막에 있는 expression을 #evaluate하여 그 값을 return함 calling code if ARGV.length < 1 print "factorial: n을 입력해." exit end require './factorial_func.rb‘ # factorial 함수가 정의된 파일을 불러옴. print factorial( ARGV[0].to_i ) # 첫째 인자를 factorial 함수에 적용

factorial 구하기 2: recursive algorithm n!은 얼마? n * (n-1)!임. (n-1)!은? (n-1) * (n-2)!임. …… 이 논리를 적용하여, factorial 함수 내에서 다시 factorial 함수를 호출 할 수 있음: 재귀 호출(recursive call) def factorial(n) return n if n <= 2 # 종결 조건: 재귀 호출을 중지, 함수를 종료함. n * factorial(n-1) # 재귀 호출: n! == n * (n-1)! end 무한 재귀 호출을 방지하기 위해 종결 조건 필요: n<=2인 경우 함수의 재귀 호출은 수학적 귀납법과 논리 구조가 같음. 수학적 귀납법의 예: 모든 자연수가 ~~의 속성을 가짐을 증명. 1은 ~~의 속성을 가짐. (초기 조건) n이 ~~의 속성을 가지면 n+1도 ~~의 속성을 가짐. (점화식)

순열(permutation), 조합(combination) 순열: n개의 요소 중 m개를 뽑아 일렬로 늘어놓는 방법의 수 nPm = n* (n-1) * (n-2) * …… = n! / (n-m)! └-------m개--------┘ 조합: n개의 요소 중 m개를 뽑는 방법의 수 nCm = n! / ( (n-m)! * m! ) = nPm / m! require './factorial_func.rb‘ # factorial 함수가 정의된 파일 불러옴 n = ARGV[0].to_i # n = 첫째 인자 m = ARGV[1].to_i # m = 둘째 인자 perm = factorial(n) / factorial(n-m) # 순열=n!/(n-m)! comb = perm / factorial(m) #조합=순열/m! print perm, “\t”, comb