1. 다음은 색의 3요소인 red,green, blue로 색을 추상화한 Color 클래스를 선언하고 활용하는 코드이다. 빈칸을 채워라. red, green, blue는 0~255의 값만 가진다.

#include <iostream>
using namespace std;

class Color {
	int red, green, blue;
public:
	Color() { red = green = blue = 0; }
	Color(int r, int g, int b) { red = r; green = g; blue = b; }
	void setColor(int r, int g, int b) { red = r; green = g; blue = b; }
	void show() { cout << red << ' ' << green << ' ' << blue << endl; }
};

int main() {
	Color screenColor(255, 0, 0);
	Color* p;
	p = &screenColor;
	p->show(); // cout << p->show() (X)
	Color colors[3];
	p = colors;

	p[0].setColor(255, 0, 0);
	p[1].setColor(0, 255, 0);
	p[2].setColor(0, 0, 255);

	for (int i = 0; i < 3; i++) {
		p[i].show();
	}
}

2. 정수 공간 5개를 배열로 동적 할당받고, 정수를 5개 입력받아 평균을 구하고 출력한 뒤 배열을 소멸시키도록 main() 함수를 작성하라.

#include <iostream>
using namespace std;

int main() {
	int* p = new int[5];
	int sum = 0;
	
	cout << "정수 5개 입력>>";
	for (int i = 0; i < 5; i++) {
		cin >> p[i];
	}

	for (int i = 0; i < 5; i++) {
		sum += p[i];
	}
	
	cout << "평균 " << (float)sum / 5 << endl;
	
	delete[] p;

}

3. string 클래스를 이용하여 빈칸을 포함하는 문자열을 입력받고 문자열에서 'a'가 몇개 있는지 출력하는 프로그램을 작성해보자.

 

(1) 문자열에서 'a'를 찾기 위해  string 클래스의 멤버 at()나 []를 이용하여 작성하라.

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	int count = 0;

	cout << "문자열 입력>>";
	getline(cin, s, '\n');

	for (int i = 0; i < s.length(); i++) { // s.length() 대신 s.size() 가능
		if (s[i] == 'a') // s[i] 대신 s.at(i) 가능
			count++;
	}

	cout << "문자 a는 " << count << "개 있습니다." << endl;

}

 

(2) 문자열에서 'a'를 찾기 위해 string 클래스의 find() 멤버 함수를 이용하여 작성하라. text.find('a',index);는 text 문자열의 index 위치부터 'a'를 찾아 문자열 내 인덱스를 리턴한다. 

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	int count = 0, index = 0;

	cout << "문자열 입력>>";
	getline(cin, s, '\n');
	
	index = s.find('a');
	while (index != -1) {
		count++;
		index = s.find('a', index + 1);
	}

	cout << "문자 a는 " << count << "개 있습니다." << endl;

}

4.

 

다음과 같은 Sample 클래스가 있다.

class Sample {
	int* p;
	int size;
public:
	Sample(int n) {
		size = n;
		p = new int[n];
	}
	void read();
	void write();
	int big();
	~Sample();
};

 

다음 main() 함수가 실행되도록 Sample 클래스를 완성하라.

int main() {
	Sample s(10);
	s.read();
	s.write();
	cout << "가장 큰 수는 " << s.big() << endl;
}

 

 

void Sample::read() {
	for (int i = 0; i < size; i++) {
		cin >> p[i];
	}
}

void Sample::write() {
	for (int i = 0; i < size; i++) {
		cout << p[i] << ' ';
	}
	cout << endl;
}

int Sample::big() {
	int max = p[0];
	for (int i = 1; i < size; i++) {
		if (max < p[i])
			max = p[i];
	}
	return max;
}

Sample::~Sample() {
	delete[] p;
}

 

 

전체 코드 

#include <iostream>
#include <string>
using namespace std;

class Sample {
	int* p;
	int size;
public:
	Sample(int n) {
		size = n;
		p = new int[n];
	}
	void read();
	void write();
	int big();
	~Sample();
};

void Sample::read() {
	for (int i = 0; i < size; i++) {
		cin >> p[i];
	}
}

void Sample::write() {
	for (int i = 0; i < size; i++) {
		cout << p[i] << ' ';
	}
	cout << endl;
}

int Sample::big() {
	int max = p[0];
	for (int i = 1; i < size; i++) {
		if (max < p[i])
			max = p[i];
	}
	return max;
}

Sample::~Sample() {
	delete[] p;
}

int main() {
	Sample s(10);
	s.read();
	s.write();
	cout << "가장 큰 수는 " << s.big() << endl;
}

5. string 클래스를 이용하여 사용자가 입력한 영문 한 줄을 입력받고 글자 하나만 랜덤하게 수정하여 출력하는 프로그램을 작성하라. 

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
	srand((unsigned)time(NULL));
	string s;
	int index;
	cout << "아래에 한 줄을 입력하세요.(exit를 입력하면 종료합니다)" << endl;
	while (true) {
		cout << ">>";
		getline(cin, s, '\n');
		if (s.compare("exit") == 0) // s == "exit" 도 가능 
			break;

		index = rand() % s.length();
		cout << s[index] << endl;
	}

}

6. string 클래스를 이용하여 사용자가 입력한 영문 한 줄을 문자열로입력받고 거꾸로 출력하는 프로그램을 작성하라.

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	cout << "아래에 한줄을 입력하세요.(exit를 입력하면 종료합니다.)" << endl;
	while (true) {
		cout << ">>";
		getline(cin, s, '\n');
		if (s == "exit") break;

		for (int i = (s.length() - 1); i >= 0; i--) {
			cout << s[i];
		}
        
		cout << endl;
	}
}

 


7. 다음과 같이 원을 추상화한 Circle 클래스가 있다. Circle 클래스와 main() 함수를 작성하고 3개의 Circle 객체를 가진 배열을 선언하고, 반지름 값을 입력받고 면적이 100보다 큰 원의 개수를 출력하는 프로그램을 완성하라. Circle 클래스도 완성하라.

class Circle {
	int radius;
public:
	void setRadius(int radius);
	double getArea();
};

#include <iostream>
#include <string>
using namespace std;

class Circle {
	int radius;
public:
	void setRadius(int radius);
	double getArea();
};

void Circle::setRadius(int radius) {
	this->radius = radius;
}

double Circle::getArea() {
	return 3.14 * radius * radius;
}

int main() {
	Circle arr[3];
	int radius, count = 0;

	for (int i = 0; i < 3; i++) {
		cout << "원 " << i+1 << "의 반지름 >> ";
		cin >> radius;
		arr[i].setRadius(radius);
	}

	for (int i = 0; i < 3; i++) {
		if (arr[i].getArea() > 100)
			count++;
	}
	
	cout << "면적이 100보다 큰 원은 " << count << "개 입니다." << endl;

}

8. 실습 문제 7의 문제를 수정해보자. 사용자로부터 다음과 같이 원의 개수를 입력바독, 원의 개수만큼 반지름을 입력받는 방식으로 수정하라. 원의 개수에 따라 동적으로 배열을 할당받아야 한다.

#include <iostream>
#include <string>
using namespace std;

class Circle {
	int radius;
public:
	void setRadius(int radius);
	double getArea();
};

void Circle::setRadius(int radius) {
	this->radius = radius;
}

double Circle::getArea() {
	return 3.14 * radius * radius;
}

int main() {
	Circle* p;
	int radius, count = 0, n;

	cout << "원의 개수 >> ";
	cin >> n;
	p = new Circle[n];

	for (int i = 0; i < n; i++) {
		cout << "원 " << i+1 << "의 반지름 >> ";
		cin >> radius;
		p[i].setRadius(radius);
	}

	for (int i = 0; i < n; i++) {
		if (p[i].getArea() > 100)
			count++;
	}
	
	cout << "면적이 100보다 큰 원은 " << count << "개 입니다." << endl;

}

9. 다음과 같은 Person 클래스가 있다. Person 클래스와 main() 함수를 작성하여, 3개의 Person 객체를 가지는 배열을 선언하고, 다음과 같이 키보드에서 이름과 전화번호를 입력받아 출력하고 검색하는 프로그램을 완성하라.

class Person {
	string name;
	string tel;
public:
	Person();
	string getName() { return name; }
	string getTel() { return tel; }
	void set(string name, string tel);
};

 

#include <iostream>
#include <string>
using namespace std;

class Person {
	string name;
	string tel;
public:
	Person();
	string getName() { return name; }
	string getTel() { return tel; }
	void set(string name, string tel);
};

Person::Person() {

}

void Person::set(string name, string tel) {
	this->name = name;
	this->tel = tel;
}


int main() {
	Person arr[3];
	string name, tel;

	cout << "이름과 전화 번호를 입력해 주세요" << endl;
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
		cout << "사람 " << i + 1 << ">> ";
		cin >> name >> tel;
		arr[i].set(name, tel);
	}
	cout << "모든 사람의 이름은 ";
	for (int i = 0; i < 3; i++) {
		cout << arr[i].getName() << ' ';
	}
	cout << endl;
	cout << "전화번호 검색합니다. 이름을 입력하세요>>";
	cin >> name;

	for (int i = 0; i < 3; i++) {
		if (name == arr[i].getName()) {
			cout << "전화번호는 " << arr[i].getTel() << endl;
			break;
		}
	}
}

10. 다음에서 Person은 사람을, Family는 가족을 추상화한 클래스로서 완성되지 않은클래스이다.

 다음에서 Person은 사람을, Family는 가족을 추상화한 클래스로서 완성되지 않은 클래스이다.

class Person {
	string name;
public:
	Person(string name) { this->name = name; }
	string getName() { return name; }
};

class Family {
	Person* p;
	int size;
public:
	Family(string name, int size);
	void show();
	~Family();
};

 

다음 main()이 작동하도록 Person과 Family 클래스에필요한 멤버들을 추가하고 코드를 완성하라.

int main() {
	Family* simpson = new Family("Simson", 3);
	simpson->setName(0, "Mr. Simpson");
	simpson->setName(1, "Mrs. Simpson");
	simpson->setName(2, "Bart Simpson");
	simpson->show();
	delete simpson;
}

 

#include <iostream>
#include <string>
using namespace std;

class Person {
	string name;
public:
	Person(){}
	Person(string name) { this->name = name; }
	string getName() { return name; }
	void setName(string name);
};

class Family {
	Person* p;
	int size;
	string name;
public:
	Family(string name, int size);
	void show();
	void setName(int index, string name);
	~Family();
};


void Person::setName(string name) {
	this->name = name;
}

Family::Family(string name, int size) {
	this->name = name;
	this->size = size;
	p = new Person[size];
}

void Family::show() {
	cout << name << "가족은 다음과 같이" << size << "명 입니다." << endl;
	for (int i = 0; i < size; i++) {
		cout << p[i].getName() << '\t';
	}
}

void Family::setName(int index, string name) {
	p[index].setName(name);
}

Family::~Family() {
	delete[] p;
}


int main() {
	Family* simpson = new Family("Simson", 3);
	simpson->setName(0, "Mr. Simpson");
	simpson->setName(1, "Mrs. Simpson");
	simpson->setName(2, "Bart Simpson");
	simpson->show();
	delete simpson;
}

11. 다음은 커피자판기로 작동하는 프로그램을 만들기 위해 필요한 두 클래스이다.

 

clc # command window 지우기
whos  # 작업 공간의 변수들 확인하기
clear 변수명 # 해당 변수를 지울때 사용 , 실행 후 workspace에 없음
(% 와 #)  # 한줄 주석

배열의 정의 

, 또는 ' ' 공백을 이용하여 열을 구분

; 을 통해서 행을 구분

>> A = [1 2 3]
A =

   1   2   3

>> B = [4; 5; 6]
B =

   4
   5
   6
   
>> C = [1 2 3; 4 5 6]
C =

   1   2   3
   4   5   6

size() 함수

size() 함수를 활용하여 각 배열의 행과 열의 크기를 알 수 있음

>> size(A)
ans =

   1   3

>> size(B)
ans =

   3   1
   
>> size(C)
ans =

   2   3

 


zeros(), ones()

배열의 요소를 모두 zeros()의 경우 0, ones()의 경우 1을 갖는 방법.

zeros(row, col)

>> zeros(3,3)
ans =

   0   0   0
   0   0   0
   0   0   0

>> ones(2,1)
ans =

   1
   1

 


배열의 연산

 

: (콜론)

: 연산자를 활용하여 연속된 값의 생성인덱싱에 사용되는 범위 지정을 할 수 있음

시작값:증가값:끝 (이상: : 이하) (증가값이 1일 경우 생략 가능)

 

배열의 정의

>> a = [-1:0.1:1]
a =

 Columns 1 through 5:

  -1.0000  -0.9000  -0.8000  -0.7000  -0.6000

 Columns 6 through 10:

  -0.5000  -0.4000  -0.3000  -0.2000  -0.1000

 Columns 11 through 15:

        0   0.1000   0.2000   0.3000   0.4000

 Columns 16 through 20:

   0.5000   0.6000   0.7000   0.8000   0.9000

 Column 21:

   1.0000
>> a = [1:2:6 -1 0]
a =

   1   3   5  -1   0

 

인덱싱

인덱스를 셀때 다른 언어와 달리 첫번째 요소의 인덱스는 1부터 시작한다

>> a = [1:2:6 -1 0]
a =

   1   3   5  -1   0

>> a(1)
ans = 1

>> a(3:5)
ans =

   5  -1   0

 


+ (더하기), - (빼기)

배열과 스칼라의 연산

배열에 스칼라를 더하거나 빼면 배열의 모든 요소에 연산이 적용

>> a = [1 2 3; 4 5 6]
a =

   1   2   3
   4   5   6

>> a + 2
ans =

   3   4   5
   6   7   8

>> a - 2
ans =

  -1   0   1
   2   3   4

 

배열과 배열의 연산

같은 크기의 배열끼리 요소별 연산 수행
배열끼리 더하거나 빼려면 두 배열의 크기(차원)가 같아야 함. 다를 경우 오류

>> a = [1:2:6 -1 0]
a =

   1   3   5  -1   0

>> b = [1 2 3 4 5]
b =

   1   2   3   4   5

>> a + b
ans =

   2   5   8   3   5

>>  a - b
ans =

   0   1   2  -5  -5

*(곱셈), / (나눗셈)

배열과 스칼라 연산

배열에 스칼라를 곱하거나 나누면 배열의 모든 요소에 연산이 적용

>> a = [1 2 3; 4 5 6]
a =

   1   2   3
   4   5   6

>> a * 2
ans =

    2    4    6
    8   10   12

>> a / 2
ans =

   0.5000   1.0000   1.5000
   2.0000   2.5000   3.0000

 

배열과 배열 연산

    1) 요소별 연산 ( .* , ./, .\)

같은 크기의 배열끼리 각 요소별 연산을 수행.  ./ 와 .\은 동일함

(문장 끝의 ; 차이: ;이 있으면 출력 생략, 없으면 출력)

>> a = [1 2 3; 4 5 6];
>> b = [10 20 30; 40 50 60];
>> a .* b
ans =

    10    40    90
   160   250   360

>> a ./ b
ans =

   0.1000   0.1000   0.1000
   0.1000   0.1000   0.1000

 

    2) 행렬 연산

        (1)  * 곱셈 (A * B)

A의 열 개수와 B의 행 개수가 같아야함 (A의 행 개수와 B의 열 개수가 같은 경우 X)

 

만약 A가 (m × n) 행렬이고, B가 (p × q) 행렬이라면,
A * B가 정의되려면 반드시 A의 열 개수 n과 B의 행 개수 p가 같아야 함

  • A (m × n) * B (p × q)
  • 행렬 곱셈 가능 조건: n = p (A의 열 개수 = B의 행 개수)
  • 결과 행렬의 크기: (m × q)
>> A = [1 2 3; 4 5 6]; # (2X3)
>> B = [10; 20; 30]; # (3X1)
>> C = A * B 

C =       #(2X1)

   140
   320

 

 

         (2) / 나눗셈 ( A / B |  A \ B)

 

오른쪽 나눗셈

A / B = A * inv(B) 즉, A * B의 역행렬임

그렇다면 행렬 곱셈과 마찬가지로 A의 열과 B의 행의 크기가 같아야 하며, 연산 후 결과값의 행의 크기는 A와, 열의 크기는 B와 동일해야한다.  이때, 역행렬은 늘 행과 열의 크기가 같으므로 

A (m x n) / B (n x n) = C(m, n) 이 된다

 

 

왼쪽 나눗셈

A \ B = inv(A) * B 즉, A의 역행렬 * B 이다.

그렇다면 위와 마찬가지로 행렬 조건과 역행렬의 조건을 고려한다면

A (n, n) \ B(n,p) = C(n,p) 이 된다.


 

역행렬


^(제곱)

스칼라 제곱 ( .^) 

곱셈과 나눗셈은 스칼라와 연산할때 .이 필요 없지만 제곱 연산자는 있어야함

>> t = 0:0.1:10;

>> y = t ^ 2;
error: for x^y, only square matrix arguments are permitted and one argu
ment must be scalar.  Use .^ for elementwise power.

>> y = t .^ 2;

 


선형 그래프

plot() 선 그래프

plot(x값, y값) 

xlabel() , ylabel() 각각 x축과  y축의 label 추가

>> t = 0:0.1:10;
>> y = t .* t;

>> plot(t, y)
>> xlabel("time")
>> ylabel("t^2")

 


반복문

for i  = 최소값:증감값:최대값
명령어
endfor

 

>> for i = 1:3:5
i
endfor
i = 1
i = 4


>> v = [1,2,3,4,5]
v =

   1   2   3   4   5

>> for i = 1:1:5
v(i) = i
endfor
v =

   1   2   3   4   5

v =

   1   2   3   4   5

v =

   1   2   3   4   5

v =

   1   2   3   4   5

v =

   1   2   3   4   5


>> for i = 1:1:5
v(6-i) = i
endfor
v =

   1   2   3   4   1

v =

   1   2   3   2   1

v =

   1   2   3   2   1

v =

   1   4   3   2   1

v =

   5   4   3   2   1

 

이중 for문

for i = 1:3
  for j = 1:3
    p(i,j) = 3 * (i-1) + j
   endfor
endfor



p =

   1   2   3
   4   5   6
   7   8   9

p =

   1   2   3
   4   5   6
   7   8   9

p =

   1   2   3
   4   5   6
   7   8   9

p =

   1   2   3
   4   5   6
   7   8   9

p =

   1   2   3
   4   5   6
   7   8   9

p =

   1   2   3
   4   5   6
   7   8   9

p =

   1   2   3
   4   5   6
   7   8   9

p =

   1   2   3
   4   5   6
   7   8   9

p =

   1   2   3
   4   5   6
   7   8   9

 

sin() 사인 함수

sin(90)의 결과가 1이 아닌 이유: 인자의 단위가 라디안이기 때문이다 따라서

해당 인자를 r(각도) * 90 / 180 으로 입력해야 원하는 각에 대한 값이 나온다. 

>> sin(90)
ans = 0.8940
>> sin(90 * pi / 180)
ans = 1

 exp() 함수

exp(x) 은 e^x의 값이다

>> exp(1)
ans = 2.7183

사용자 정의 함수

function 반환변수 = 함수이름(매개변수)
    반환변수 = 함수 코드;
endfunction

 % sum function

 function returnValue = sum(a,b)
   returnValue = a + b;
 endfunction
 
 
 >> sum(1,2)
ans = 3

01. 연습문제의 첫 줄에는 100과 200의 합을 출력하기 위한 방법을 보여주고 있다. print() 함수와 + 연산을 이용하여 200, 300, 400의 합을 결과와 같이 화면에 출력해보자. 이때 print() 함수 내부에 들어갈 알맞은 값을 적어라.

 

print( 100, '+', 200, '=', 300 )

 

print(200, '+', 300, '+', 400, '=', 900)

02. 밑줄 친 부분에 알맞은 대입문을 사용하여 width 변수에는 30, height 변수에는 60 값이 출력 되도록 하라.

 

width = 30
height = 60

03. 위의 코드에서 width와 height 변수를 두개의 줄에 걸쳐 선언하지 말고 한 줄에 할당하는 동시 할당문을 사용하여 width 변수에는 30, height 변수에는 60 값이 출력되도록 하라.

width, height = 30, 60

04. width와 height라는 변수에 각각 40,20 값을 할당한 후 이 두 변수를 이용하여 곱셈 연산자를 적용한 후 다음과 같이 삼각형의 면적(area)을 구하는 프로그램을 작성하라.

 

1) 이 프로그램을 get_triangle_area.py 이름의 코드로 작성한 후 수행시켜라.

2) 이 프로그램을 대화창에서 작성하여 수행시켜라.

3) width와 height 변수를 동시 할당문으로 40, 20을 할당하는 프로그램을 작성하라.

width, height = 40, 20
tri = width * height / 2
print("삼각형의 면적 :",tri)

05. 정사각형의 면적을 구하기 위하여 사용자로부터 밑변의 길이를 정수로 입력받아서 다음과 같이 출력하라 

w = int (input ("정사각형의 밑변을 입력하시오 : "))
print("정사각형의 면적 :", 40 * 40)

06. print() 함수와 + 연산을 9개 사용하여 1에서 10까지 정수의 합을 다음과 같이 출력해보자.

print("1에서 10까지의 합 :",1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10)

07. print() 함수와 * 연산을 9개 사용하여 10!을 다음과 같이 출력해보자.

print("10! = ", 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8  * 9  * 10)

08. 섭씨온도를 화씨온도로 변환하는 식은 다음과 같다.

fahrenheit = (9/5) * celsius + 32

 

이 식을 바탕으로 섭씨온도를 0도에서 50도까지 10도 단위로 증가시키면서 이에 해당하는 화씨온도를 다음과 같이 출력하는 프로그램 cel2fah.py를 작성하라.

print("섭씨 화씨")

celsius = 0
fahrenheit = (9/5) * celsius + 32
print(celsius,"   ", fahrenheit)

celsius += 10
fahrenheit = (9/5) * celsius + 32
print(celsius,"  ", fahrenheit)

celsius += 10
fahrenheit = (9/5) * celsius + 32
print(celsius,"  ", fahrenheit)

celsius += 10
fahrenheit = (9/5) * celsius + 32
print(celsius,"  ", fahrenheit)

celsius += 10
fahrenheit = (9/5) * celsius + 32
print(celsius," ", fahrenheit)

celsius += 10
fahrenheit = (9/5) * celsius + 32
print(celsius," ", fahrenheit)
print("섭씨 화씨")

for celsius in range (0,51, 10):
    fahrenheit = (9/5) * celsius + 32
    print("%-3d  %5.1f"%(celsius, fahrenheit))

 


09. 앞서 다룬 섭씨온도를 화씨온도로 변환하는 식을 바탕으로 사용자로부터 섭씨온도를 입력받아서 다음과 같이 화씨온도로 출력하라

celsius = int(input("섭씨온도를 입력하세요 : "))
fahrenheit = (9/5) * celsius + 32
print("섭씨",celsius,"도는 화씨",fahrenheit, "도 입니다.")

10. 사용자로부터 반지름 값을 입력받아서, 이 반지름을 가진 원의 둘레와 면적을 다음과같이 출력하라. 이 값을 구하기 위하여 PI = 3.141592라는 변수를 사용하라.

PI = 3.141592
radius = int(input("원의 반지름을 입력하세요 : "))
print("원의 둘레 =", PI * 2 * radius, end = ", ")
print("원의 면적 =", radius ** 2 * PI)

11. print() 함수를 사용하여 다음과 같은 내용을 출력하라

print("It's really hot!")
print("I said \"Hello!\" to him")
print('He said "What\'s there?"')
print("Newline character is \\n, Tab character is \t.")
print("Working directory is C:\\workspace\\mywork.")
string = """It's really hot!
I said "Hello!" to him.
He said "What's there?"
Newline character is \\n, Tab character is \\t.
Working direcotry is C:\\workspace\\mywork."""
print(string)

2.1 (변수)는 컴퓨터의 메모리 공간에 이름을 붙이는 것으로 여기에 정수, 실수, 문자열 등의 자료값을 저장할 수 있다.

 

2.2 파이썬의 =연산자는 '같다'의 등호의 의미가 아니라 '= 연산자 오른쪽의 값을 읜쪽의 변수에 저장하라'는 의미이다. 이 연산자 =를 (대입연산자) 혹은 (할당연산자)라고 한다.

 

2.3 파이썬에서는 x,y = 100, 200과 같이 한 줄에 여러 개의 변수를 선언하고 이 변수에 값을 동시에 할당할 수도 있는데, 이를 (동시 할당문)이라 한다.

 

2.4 변수의 이름은 (식별자)의 일종이다. "홍길동", "김철수" 등의 이름이 사람을 구별하듯이 (식별자)는 변수와 변수들을 구별하는 역할을 한다.

 

2.5 파이썬은 미리 기능을 정의해 둔 코드를 필요에 따라 편리하게 호출하여 사용할 수 있다 이와 같이 프로그래밍 언어에서 미리 정의한 기능을 (함수)라고 한다.

 

2.6 컴퓨터의 데이터는 그림과 같이 컴퓨터에 있는 핵심적인 부품인 메인 메모리에 저장된다. 이렇게 메모리에 데이터를 저장한 곳의 위치를 (메모리 주소)라고 한다.

 

2.7 프로그램에서 사용할 수 있는 데이터의 종류를 (자료형)이라고 한다.

 

2.8 파이썬에서 사용할 수 있는 가장 단순한 기본 자료형은 4가지 종류가 있다. 첫 번째는 1이나 2와 같은 (정수형)이다. 두 번째는 3.14와 같은 (실수형)이다. 세 번째는 'Hello'와 같은 (문자열)이다. 마지막으로 네 번째는 참과 거짓을 나태는 (부울)형이다.

 

2.9 파이썬에서 변수의 자료형을 알려면 변수의 이름에 (type()) 함수를 적용하면 된다.

 

2.10 객체+.+명령()형식의 구조에서 객체가 .연산자로 구분된 명령을 내릴 때 이 명령을 (메소드)라고 부른다.

 

2.11 변수는 수학에서 유래한 개념이다. 수학에서 변수는 변할 수 있는 양을 표현하기 위해 사용되는 기호이다. 이 기호는 하나의 특정한 값이 아니라 혀용되는 모든 값을 표현하기 위해 사용된다. 이와 상대되는 개념이 (상수)이다. (상수)는 값이 고정되어 있는 수이다. 

1번과 2번은 패스

 

03. 다음 파이썬 코드의 출력결과는 무엇인가? 직접 코드를 수행한 후 그 결과를 적어라.

( 문자열을 연결할시 + 는 string 타입만 연결 할 수 있다.)


04. 다음 코드들은 어떤 오류를 출력하는가? 실행 시 나타나는 오류를 적고 이 오류를 수정한 후 수행해 보자.


05. 'I love Python!!'을 5줄에 걸쳐 모두 5번 출력하는 코드를 만들어 보자. 이 코드를 포함한 파일을 welcome5.py라고 정하고 이 코드를 파이선 인터프리터에서 수행시켜 보자.

print("I love Python!!")
print("I love Python!!")
print("I love Python!!")
print("I love Python!!")
print("I love Python!!")
print("I love Python!!\n" * 5)

06. print() 함수를 여러 번 사용하여 다음과 같은 출력이 되도록 하여라. 이를 위하여 triangle.py라는 프로그램을 작성한 후 수행시켜 보자. (두 번째 방법은 지금 몰라도 된다)

print("*")
print("**")
print("***")
print("****")
print("*****")
print("******")
for  i in range(6):
    for j in range(i+1):
        print('*', end = "")
    print("")

07. 다음 그림 1), 2)를 터틀 그래픽을 사용하여 그리도록 하자.

1) 밑변과 높이가 각각 100인 직각 이등변 삼각형(힌트: 한 변이 1인 직각이등변 삼각형의 대각선의 길이는 약 1.414이다.)

import turtle

t = turtle.Turtle()
t.shape('turtle')

t.forward(100)
t.left(135)
t.forward(141.4)
t.left(135)
t.forward(100)

turtle.done()

 

2) 두 개의 겹쳐진 정삼각형(힌트: LAB 1-2의 코드에서 거북이의 이동 경로 마지막에 거북이가 오른쪽에 갈 수 있도록 t.right(120)을 추가한 후 t.forward(100)을 입력해 보자.)

import turtle
t = turtle.Turtle()
t.shape('turtle')

t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.forward(100)
t.right(120)
t.forward(100)
t.right(120)
t.forward(100)

turtle.done()

08. 파이썬 대화창을 이용하여 다음과 같은 수식 계산을 해 보도록 하자. 이 계산의 결과 값은 무엇ㅇ니가?


09. 파이썬 대화창을 이용하여 다음과 같은 수식 계산을 해 보도록 하자. 이 계산의 결과 값은 무엇인가?


10. 파이썬 대화창을 이용하여 다음과 같은 수식 계산을 해 보도록 하자. 이 수식을 화면에 출력하도록하자.

 

 

(1) 1에서 10까지 정수의 합

 

(2) 반지름의 길이가 5인 원의 둘래(이때 원주율 파이는 3.14로 두고 계산할 것)

 

(3) 한 변의 길이가 20인 정사각형의 둘레

 

(4) 한 변의 길이가 20인 정사각형의 면적

 

(5) 높이가 10이고 밑변이 30인 직사각형의 둘레

 

(6) 높이가 10이고 밑변이 30인 직사각형의 면적

 

(7) 높이가 20이고 밑변이 30인 이등변 삼각형의 면적


11. 파이썬 대화창을 이용하여 3!, 4!, 5!, 6!, 7!을 구하여 출력해보자

print(3 * 2 * 1)
print(4 * 3 * 2 * 1)
print(5 * 4 * 3 * 2 * 1)
print(6 * 5 * 4 * 3 * 2 * 1)
print(7 * 6 * 5 * 4 * 3 * 2 * 1)

12. fact_print.py라는 이름의 파이썬 스크립트 파일을 만들어서 3!, 4!, 5!, 6!, 7!을 구하여 화면에 출력해보자. 위의 1.11번 문제에서 사용한 코드를 활용하도록 하자.

print(str(3)+"! = ", 3 * 2 * 1)         # print(3"! = ", 3 * 2* 1) 안됨
print(str(4)+"! = ", 4 * 3 * 2 * 1)
print(str(5)+"! = ", 5 * 4 * 3 * 2 * 1)
print(str(6)+"! = ", 6 * 5 * 4 * 3 * 2 * 1)
print(str(7)+"! = ", 7 * 6 * 5 * 4 * 3 * 2 * 1)
for i  in range(3, 8):
    r = 1
    for j in range (1, i+1):
        r *= j
    print(f"{i}! = {r}")

 

1.1 (데이터 과학)은 데이터에서 과학적 방법으로 정보나 지식을 추출하는 학문이다. 이를 위해서는 통계학, 컴퓨터 과학, 그리고 데이터가 발생하는 영역과 관련된 학문 분야의 이론과 기술을 융합적으로 사용하여야 한다.

 

1.2 튜링 상 수상자인 짐 그레이 박사는 뉴턴 이후로 실험 과학과 이론 과학이 주류 과학의 두 축이었다고 주장하였는데, 최근 수십년 동안은 컴퓨터를 이용한 계산 과학이 과학 연구의 방법론으로 자리를 잡았다고 분석했다. 그리고 그는 과학의 네 번째 패러다임으로 (데이터 중심의 과학)이 등장하고 있다고 보았다.

 

1.3 데이터 수집과 정제에 전문적 역량을 가진 사람들을 통칭하여 (데이터 엔지니어)라고 할 수 있다.

 

1.4 최근에는 데이터를 이용하여 기계를 학습시키는 인공지능 기술이 더욱 각광을 받고 있다. 이를 위한 학습 모델ㅇ르 구축하고 데이터를 기반으로 모델을 훈련시킨 뒤에 학습된 모델을 배포하는 일을 전문적으로 하는 사람들을 (기계 학습 엔지니어)라고 부를 수 있다.

 

1.5 컴퓨터에서 사용하는 용어인 (프로그램)이란 컴퓨터가 해야 할 일을 미리 기록해놓은 작업 지시서 같은 것이다. 우리가 많이 사요용하는 파워포인트나 카카오톡 같은 것들이 모두 (프로그램)이다.

 

1.6 컴퓨터가 수행하는 명령은 0000111100100111...과 같은 이진수 값으로 된 명령이다. 이렇게 기게가 곧바로 이해할 수 있는 명령을 (기계어)라고 한다.

 

1.7 프로그램을 작성하기 위해 사람이 이해하기 쉽게 만든 언어를 (프로그래밍 언어)라고 하며, 이 언어를 이용해 프로그래머가 원하는 일들을 작성한 것을 소스 코드라 한다.

 

1.8 파이썬은 (귀도 반 로섬)이 1991년에 개발한 대화형 프로그래밍 언어로 최근 많은 인기를 얻고 있다. 그는 취미로 파이썬을 만들었지만 파이썬은 아주 인기 있는 범용 프로그래밍 언어가 되었다.

 

1.9 파이썬에서는 프로그래머가 한 줄의 명령어 문장을 입력하고 엔터키를 치면 명령 해석기가 이 명령을 실행한다. 이와 같이 명령을 해석하고 실행하는 프로그램을 파이썬 (인터프리터)라고 한다.

 

1.10 파이썬이나 C 언어와 같은 컴퓨터 프로그래밍에서 문자의 모음을 (문자열)이라고 한다.

 

1.11 (print())는 파이썬의 대표적인 내장함수로 괄호 안의 값을 화면에 출력하는 역할을 한다.

 

1.12 (주석)은 소스 코드에 붙이는 설명글과 같은 것이다. (주석)은 프로그램이 하는 일을 설명하는 목적으로 주로 사용되며 실행에는 영향을 미치지 않는다.

 

1.13 파이썬은 프로그램을 처음 익히는 초보자를 위한 재미있는 그림 그리기 기능을 제공한다. 이 기능을 수행하는 대표적인 것이 바로 (터틀 그래픽)이다. 

24년도 1학년, 상반기에 진행한 프로젝트입니다. 

24년도 1학년, 여름

 

 

해당 팀 프로젝트의 PSOL입니다.

https://yh-phd.notion.site/6-da34d8ef6735439a919a8f29a94d658d

 

6팀 | Notion

팀 프로그램 PSOL: 문제 해결 역량 기반 프로젝트 주제 설정

yh-phd.notion.site


 

 


https://chatgpt.com/g/g-mci3j9hqF-agroguardian

 

ChatGPT - AgroGuardian

식물 병해충 진단 서비스

chatgpt.com

 

 

이 프로젝트는 주제만큼은 마음에 들었지만, 결과가 만족스럽지는 않았다. 당시의 매우 촉박한 시간으로 인해 어쩔수 없었던 것이긴 하지만 아쉬움이 크게 남는 것은 어쩔수 없다.  다음에 다시 GPTs와 api 기능을 활용하여 제대로 된 GPTs를 제작하고 싶다. 

+ Recent posts