루프와 카운트 Looping and counting

Slides:



Advertisements
Similar presentations
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 실 습실 습 2.
Advertisements

Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 실 습실 습 1.
3. 자료형. 담당교수 : 이 성 우 C++ 프로그래밍 상수와 변수 (3) 1. 변수 (variable)  프로그램 수행 도중에 자료  변수를 위해 은 변하지 않음  선언 시에 반드시 그. ※ 저장 정보의 구성 ① 정보의 종류 ② 저장 값 ③ 저장 위치 int Num.
5 장 조건과 반복 ②. Contents Counting and Looping [while 문 사용 ] Powers of 2 [while 문 사용 ] More Guessing [do 문 사용 ] Election Day [do 문 사용 ] Finding Maximum &
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
C 언어 컴퓨터학과 C 언어 ( STS ) (Chap5. Selection-Making Decisions ) C 언어.
윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 01. C 언어 기반의 C++ 1.
Vision System Lab, Sang-Hun Han
명품 C++ 8장 상속.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
제 1장 C 언어의 소개.
C++ Espresso 제2장 제어문과 함수.
강좌명 : C++프로그래밍 (C++ Programming)
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
8. 객체와 클래스 (기본).
4장: 자료형과 수식.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
명품 C++ 8장 상속.
제15장 STL과 람다식 STL의 개념을 이해하고 사용할 수 있다. 람다식을 이해하고 사용할 수 있다.
C++ Espresso 제6장 생성자와 소멸자.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
명품 C++ 7장 프렌드와 연산자 중복.
Chapter 4 – 연 산 자 Outline 4.1 산술 연산자 4.2 관계 연산자 4.3 동등 연산자 4.4 논리 연산자
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
Chapter 1 C++ 기초 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
C++ Programming: chapter 7 – inheritence
Chapter 3 Flow of Control
배열이란? 배열의 선언? - 배열과 포인터의 관계? 문자열이란? 문자배열 연결 리스트
스택(Stack) 김진수
프로그램과 데이터의 구조화 Organizing programs and data
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
4주차: Data Types and Functions
13. 연산자 오버로딩.
5장 조건과 반복 ②.
제2장 데이터 및 수식.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
제 3 장 연산자 (Operators).
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
문자열 처리하기 working with Strings
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
5. 논리적 자료표현 : 구조체.
Chapter 06 연산자 기본.
C++ Espresso 제13장 입출력과 파일처리.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
새로운 타입 정의하기 Defining new types
3주차: Control Flow and Others
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
DataScience Lab. 박사과정 김희찬 (화)
PHP 기초문법 PHP를 공부하는데 있어 가장 기초가 되는 PHP기초문법에 대해서 배워 봅니다.
Presentation transcript:

루프와 카운트 Looping and counting Chapter 2 루프와 카운트 Looping and counting

출력을 융통성 있게 만들기 인사말 테두리에 빈 행 개수를 임의로 출력하기 예 1. 예 2. Please enter your first name: Estragon ******************** * * * Hello, Estragon! * 항 행 비우고, 한 칸 비우고 Please enter your first name: Estragon ********************** * * * Hello, Estragon! * 두 행 비우고, 두 칸 비우고 지역변수에 각 라인을 저장하지 않고, 각 출력문자를 독립적으로 생성해 보자

전체 구조 그대로 사용해도 되는 부분 #include <iostream> #include <string> ******************** * * * Hello, Estragon! * #include <iostream> #include <string> int main( ) { // 이름을 입력 받음 std::cout << “Please enter your first name: ”; std::string name; std::cin >> name; // 출력할 메시지를 구성 const std::string greeting=“Hello, ”+name +“!”; // 인사말 출력 부분.. // 이 부분을 다시 작성해야 합니다 return 0; } ********************** * * * Hello, Estragon! * ************************ * * * Hello, Estragon! *

임의 개수의 행 출력하기 행의 개수만큼 출력 const int pad = 1; // 인사말 주위의 빈 행 개수 const int rows = pad * 2 + 3; // 출력할 총 행(row) 개수 행의 개수만큼 출력 ******************** * * * Hello, Estragon! * // 입력과 출력을 구분하는 행 출력 std::cout << std::endl; // rows 만큼의 행을 출력 int r=0; // 불변식: 지금까지 r개의 행을 출력함 while(r != rows) { // 하나의 행을 출력 ++r; }

while 문 while (condition) statement Bool type 매번 condition을 검사해서 true인 경우 statement를 반복 실행 condition(조건식)은 bool타입으로, true(참) 또는 false(거짓) 값을 가짐 statement는 구문(statement) 또는 블록(block) block은 중괄호 { }로 묶인 0개 이상의 구문 Bool type bool flag=true; if (flag) { … } bool flag2 = 1; // ERROR! 유효한 값은 true 또는 false while (condition) { statement1 statement2 }

while문과 for문 for statement while statement for(init-statement; condition; expression) { statement } for(r=0; r != rows; ++r) { // 하나의 행을 출력 } init-statement while(condition) { statement expression; } r=0; while(r != rows) { // 하나의 행을 출력 ++r; }

증가 연산자와 상등 연산자 증가연산자(increment operator) ++ r++; // r = r + 1; ++r; 감소연산자(decrement operator) -- r--; // r = r - 1; --r; 상등 연산자(equality operator) == r==0은 r의 값이 0과 같은지 판별하여, 같으면 true값을 가지고, 다르면 false값을 가짐 부등 연산자(inequality operator) != r!=rows 는 r 값이 rows값과 같지 않으면, true값을 가짐.

if 문 if(condition) statement1 if(condition) statement1 else statement2 condition을 평가하여 true(참)이면 statement1을 수행 if(condition) statement1 else statement2 condition 을 평가하여 true(참)이면 statement1을 수행, false(거짓)이면 statement2를 수행 if (condition) { statement1 } if (condition) { statement1 } else { statement2

논리 연산자 r == 0 || r == rows -1 || c==0 || c == cols -1 논리합 연산자(logical-or operator) || condition1 || condition 2 두 조건식 중의 어느 하나라도 true이면 연산결과는 true이다 왼쪽 결합 우선: condition1을 평가하고, condition2를 평가함 단축평가(short-circuit evaluation): condition1이 참이면, condition2를 평가하지 않고 연산 결과를 true로 결정함. 논리연산자는 관계연산자 보다 우선순위가 낮다 관계 연산자(relational operator): <, >, <=, >=, ==, != 관계연산자는 산술연산자 보다 우선순위가 낮다. 산술연산자(arithmetic operator): +, -, *, / , % p.76 참조: 연산자 우선순위

size_type string::size_type ******************** * * * Hello, Estragon! * size_type std::string은 std라는 네임스페이스의 string임 string::size_type은 size_type이 string클래스로부터 왔음 string::size_type std::string 타입은 string이 담을 수 있는 최대 문자 개수를 저장할 수 있는 타입의 이름으로 size_type을 정의하고 있다. size_type은 unsigned 타입으로, 음수 값을 저장하지 못함. string::size_type cols = greeting.size() greeting의 문자 개수가 얼마든 간에 상관없이 저장하기 위함 const std::string::size_type cols = greeting.size() + pad*2 + 2; 빈 칸을 앞뒤로 ‘*’을 양쪽에

using 선언 std::의 반복적인 사용을 축약 또는 using namespace std; using std::cout; using std::cin; using std::endl; using std::string; 또는 using namespace std; using 선언을 하면, 그 다음부터는 cout은 std::cout을 의미한다.

행 출력하기 string::size_type c = 0; // 불변식: 지금까지 현재 행에 c개의 문자를 출력함 while (c != cols) { // 하나 이상의 문자를 출력 // c값을 조정하여 불변식을 유지 } 얼마나 많은 문자들을 한 행에 출력할지 계산한 후 while문을 이용하여 한 행을 출력 1) 경계문자 ‘*’ 출력하기 2) 비 경계문자 출력하기 ******************** * * * Hello, Estragon! *

1) 경계 문자 출력하기 첫 행(r==0)과 마지막 행(r==rows-1)은 모두 ‘*’을 출력 string::size_type c = 0; // 불변식: 지금까지 현재 행에 c개의 문자를 출력함 while (c != cols) { if (r == 0 || r == rows - 1 ||c == 0 || c == cols - 1) { // 경계에 있다면 cout << "*"; ++c; } else { // 하나이상의 비경계 문자들을 출력 // c값을 조정하여 불변식을 유지 ******************** * * * Hello, Estragon! * 첫 행(r==0)과 마지막 행(r==rows-1)은 모두 ‘*’을 출력 첫 열(c==0)과 마지막 열(c==cols-1)은 ‘*’을 출력

2) 비경계 문자 출력하기 논리곱 연산자(logical-and operator) && if (r == pad + 1 && c == pad + 1) { // 인사말을 출력할 차례라면 cout << greeting; c += greeting.size(); } else { cout << “ ”; ++c; } ******************** * * * Hello, Estragon! * 논리곱 연산자(logical-and operator) && condition1 && condition 2 두 조건식이 모두 true일 때 연산결과는 true 이다 복합-대입(compound-assignment) += c += greeting.size(); // c = c + greeting.size();

테스트 합치기 for (int r = 0; r != rows; ++r) { string::size_type c = 0; while (c != cols) { if (인사말을 출력할 차례라면) { cout << greeting; c += greeting.size(); } else { if(경계에 있다면) cout << “*”; else cout << “ ”; ++c; } cout << endl;

완전한 테두리를 갖는 프로그램 #include <iostream> #include <string> using namespace std; int main() { cout << "Please enter your first name: "; // ask for the person's name string name; // read the name cin >> name; // build the message that we intend to write const string greeting = "Hello, " + name + "!"; // the number of blanks surrounding the greeting const int pad = 1; // the number of rows and columns to write const int rows = pad * 2 + 3; const string::size_type cols = greeting.size() + pad * 2 + 2; // write a blank line to separate the output from the input cout << endl;

// write `rows' rows of output // invariant: we have written `r' rows so far for (int r = 0; r != rows; ++r) { string::size_type c = 0; // invariant: we have written `c' characters so far in the current row while (c != cols) { // is it time to write the greeting? if (r == pad + 1 && c == pad + 1) { cout << greeting; c += greeting.size(); } else { // are we on the border? if (r == 0 || r == rows - 1 || c == 0 || c == cols - 1) cout << "*"; else cout << " "; ++c; } cout << endl;