23.10.20 (금) 24일차
오늘부터 객체지향프로그래밍(C++) 시작
C++ 3일, MFC 3일, 프로젝트(MFC로 RFID 만드는 시스템) 2일 예정
C++도 AI 개발이 가능. 하지만 에러 잡기가 파이썬보다 훨씬 까다로움..
C++에서는 numpy 행렬이 어려움. (numpy: 데이터를 선가공하는 것)
여러 개의 모듈이 섞여 있어 소켓을 거쳐 stream에 전달해줘야 하기 때문에 cin, cout을 사용하는 것.
하지만 printf를 쓸 수는 있음.
오버로딩과 오버라이딩의 차이
오버로딩 (Overloading) (함수 중복)
C언어에서 하나의 함수는 하나의 기능만을 구현해야 한다. 한편 자바에서는 하나의 메소드 이름으로 여러 기능을 구현할 수 있다.
오버로딩은 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메소드를 정의할 수 있다.
오버라이딩 (Overriding)
오버라이딩은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것이다. 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야 하는 경우 오버라이딩을 할 필요가 생긴다.
등호(=)의 의미
한 번에 데이터버스에 담아서 보낼 수 있는 양. C언어는 반드시 왼쪽 오른쪽의 형이 동일해야 함.
sln -> vcxproj ->cpp
바퀴가 달린 이동 로봇이 위의 그림과 같이 회전할 경우, 좌/우 바퀴의 회전 수에 차이가 발생한다. 조건이 다음과 같이 주어졌을 때, 두 바퀴 각각의 회전 각도를 계산하시오.
[조건]
도로의 폭 : 1m
두 바퀴 사이의 거리 : 0.7m
회전 각도 : 90도
출력 예제
소스 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#define PI 3.14
#define ROAD 1
#define DIFFWHEEL 0.7
#define ANGLE 0.25
double spin(int rad, int dir)
{
float l_rad;
float r_rad;
static int flag = 0;
l_rad = (ROAD - DIFFWHEEL) / 2;
r_rad = l_rad + DIFFWHEEL;
if (flag == 1)
{
if (dir == 1)
{
return 2 * l_rad * ANGLE;
}
else if (dir == 2)
return 2 * r_rad * ANGLE;
}
flag++;
flag %= 2;
if (dir == 1)
{
return 2 * r_rad * ANGLE;
}
else if (dir == 2)
return 2 * l_rad * ANGLE;
printf("after flag: %d, %.2f %.2f\n", flag, l_rad, r_rad);
}
int main()
{
int rad; // 바퀴의 지름
int d; // 회전 방향
int sec; // 회전 시간
float l_spin_cnt;
float r_spin_cnt;
float right = 0;
float left = 0;
float time = 0;
printf("바퀴의 지름을 입력하세요(0.1m): ");
scanf("%d", &rad);
printf("회전 방향을 입력하세요(1: 좌 2: 우): ");
scanf("%d", &d);
printf("회전 시간을 입력하세요(s): ");
scanf("%d", &sec);
r_spin_cnt = spin(rad, d);
l_spin_cnt = spin(rad, d);
printf("1. 우측 바퀴 회전수 : %.2f바퀴, 회전량 : %.2f도\n", r_spin_cnt, r_spin_cnt * 360);
printf("2. 좌측 바퀴 회전수 : %.2f바퀴, 회전량 : %.2f도\n", l_spin_cnt, l_spin_cnt * 360);
printf("3. 0.1초당 회전 각도 출력 : \n");
printf("time : right - left\n");
for (int i = 0; i <= 10 * sec; i++)
{
printf("%.2f : %.2f - %.2f\n", time, right, left);
time += 0.1;
right += r_spin_cnt * 360 / (10 * sec);
left += l_spin_cnt * 360 / (10 * sec);
}
}