반응형

1~2번에 쓰이는 단위변환 추상 클래스 Converter입니다.

#include<iostream>
using namespace std;
class Converter {
protected:
	double ratio;
	virtual double convert(double src) = 0; //src를 다른 단위로 변환한다.
	virtual string getSourceString() = 0; //src 단위 명칭
	virtual string getDestString() = 0; //dest 단위 명칭
public:
	Converter(double ratio) { this->ratio = ratio; }
	void run() {
		double src;
		cout << getSourceString() << "을 " << getDestString() << "로 바꿉니다. ";
		cout << getSourceString() << "을 입력하세요>> ";
		cin >> src;
		cout << "변환 결과 : " << convert(src) << getDestString() << endl;
	}
};

 

문제

Converter 클래스를 상속받아 달러를 원화로 환산하는 WonToDollar 클래스를 작성하라. main() 함수와 실행 결과는 다음과 같다.

int main()
{
	WonToDallar wd(1010); //1달러에 10101원
	wd.run();
}

 

결과

원을 달러로 바꿉니다. 원을 입력하세요>> 10000
변환 결과 : 9.90099달러

 

소스코드

#include<iostream>
using namespace std;
class Converter {
protected:
	double ratio;
	virtual double convert(double src) = 0; //src를 다른 단위로 변환한다.
	virtual string getSourceString() = 0; //src 단위 명칭
	virtual string getDestString() = 0; //dest 단위 명칭
public:
	Converter(double ratio) { this->ratio = ratio; }
	void run() {
		double src;
		cout << getSourceString() << "을 " << getDestString() << "로 바꿉니다. ";
		cout << getSourceString() << "을 입력하세요>> ";
		cin >> src;
		cout << "변환 결과 : " << convert(src) << getDestString() << endl;
	}
};
class WonToDallar : public Converter
{
	int krw;
public:
	WonToDallar(int krw) : Converter(krw) { this->krw = krw; }
	virtual double convert(double src) {
		return src / krw;
	}
	virtual string getSourceString() {
		return "원";
	}
	virtual string getDestString() {
		return "달러";
	}
};
int main()
{
	WonToDallar wd(1010); //1달러에 10101원
	wd.run();
}

 

반응형
반응형

문제

비행기 예약 프로그램을 작성하라. 이 문제는 여러 개의 클래스와 객체들을 다루는 연습을 위한 것이다. 클래스 사이의 상속 관계는 없다. 항공사 이름은 '한성항공' 이고, 8개의 좌석을 가진 3대의 비행기로 서울 부산 간 운항 사업을 한다. 각 비행기는 하루에 한 번만 운항하며 비행 시간은 7시, 12시, 17시이다. 비행기 예약 프로그램은 다음의 기능을 가진다.

예약 : 비행시간, 사용자 이름, 좌석 번호를 입력받아 예약한다.
취소 : 비행 시간, 사용자의 이름, 좌석 번호를 입력받고 예약을 취소한다.
예약 보기 : 예약된 좌석 상황을 보여준다.

 

결과

 

힌트

클래스는 AirlineBook, Schedule, Seat 3개이며, main함수는 별도의 cpp파일에 작성한다.

즉, 클래스는 헤더파일로 작성한다.

또한 사용자 입력을 전담하는 Console 클래스를 작성한다.

 

AirlineBook 클래스 - Schedule 객체 3개 생성, 예약 시스템 작동
Schedule클래스  - 하나의 스케쥴을 구현하는 클래스. 8개의 Seat객체 생성. Seat객체에 예약, 취소, 보기 등 관리
Seat클래스 - 하나의 좌석을 구현하는 클래스. 예약자 이름 저장. 좌석에 대한 예약, 취소, 보기 등 관리
Console클래스 - 메뉴를 출력하는 함수, 사용자로부터 메뉴 선택, 비행 시간, 사용자 이름, 좌석 번호 등을 입력받는 멤버 함수들을 구현, 멤버들은 static으로 작성하는 것이 좋다.

 

소스코드

Air.h

#include<iostream>
#include<string>
using namespace std;
class Console {
public:
	static int menu() {
		cout << "예약:1, 취소:2, 보기:3, 끝내기:4>>";
		int inputmenu;
		cin >> inputmenu;
		return inputmenu;
	}
	static int chotime() {
		int inputtime;
		while (true) {
			cout << "07시:1, 12시:2, 17시:3>>";
			cin >> inputtime;
			if (1 <= inputtime && inputtime <= 3)
				break;
			cout << "존재하지 않는 시간대입니다." << endl;
		}
		return inputtime;
	}
	static int setseat()
	{
		int setnumber;
		while (true) {
			cout << "좌석 번호>>";
			cin >> setnumber;
			if (1 <= setnumber && setnumber <= 8)
				break;
			cout << "존재하지 않는 번호입니다." << endl;
		}
		return setnumber;
	}
	static string setname()
	{
		string name;
		cout << "이름 입력>>";
		cin >> name;
		return name;
	}
};

class Seat {
	string name; //예약자 이름
public:
	Seat() { name = "___"; }
	void setname(string name) { this->name = name; } //예약시 이름변경
	void cancelseat() { name = "___"; } //예약 취소시 원래대로
	string getname() { return name; } //예약자 이름출력
};

class Schedule {
	string time;
	Seat* seat;
public:
	Schedule() { seat = new Seat[8]; } //좌석 8개
	~Schedule() { delete[]seat; }
	void settime(string time) { this->time = time; } //시간 이름
	string gettime() { return time; }
	string getname(int seatnumber) { return seat[seatnumber].getname(); }
	void setseat(int seatnumber, string name) { seat[seatnumber].setname(name); }
	void cancle(int seatnumber) { seat[seatnumber].cancelseat(); }
	void showseat() { //좌석 출력
		for (int i = 0; i < 8; i++)
			cout << i+1<<seat[i].getname() << "\t";
		cout << endl;
	}
};

class AirlineBook {
	Schedule* schedule;
public:
	AirlineBook() {
		schedule = new Schedule[3];
		schedule[0].settime("07시 : ");
		schedule[1].settime("12시 : ");
		schedule[2].settime("17시 : ");
	}
	~AirlineBook() { delete[]schedule; }
	void mainmenu();
};


void AirlineBook::mainmenu()
{
	while (true)
	{
		cout << endl;
		int chotime, menu, seat;
		string name;
		menu = Console::menu();
		switch (menu)
		{
		case 1:
			chotime = Console::chotime()-1;
			schedule[chotime].showseat();
			seat = Console::setseat()-1;
			if (schedule[chotime].getname(seat) != "___") {
				cout << "이미 예약된 좌석입니다." << endl;
				break;
			}
			name = Console::setname();
			schedule[chotime].setseat(seat, name);
			break;
		case 2:
			chotime = Console::chotime()-1;
			schedule[chotime].showseat();
			seat = Console::setseat()-1;
			if (schedule[chotime].getname(seat) == "___") {
				cout << "빈 좌석입니다." << endl;
				break;
			}
			name = Console::setname();
			if (schedule[chotime].getname(seat)!=name) {
				cout << "예약자의 이름과 다릅니다." << endl;
				break;
			}
			schedule[chotime].cancle(seat);
			break;
		case 3:
			for (int i = 0; i < 3; i++)
			{
				cout << schedule[i].gettime();
				schedule[i].showseat();
			}
			break;
		case 4:
			cout << "예약 시스템을 종료합니다." << endl;
			exit(1);
			break;
		default:
			cout << "메뉴 잘못 입력" << endl;
			break;

		}
	}
}

 

main.cpp

#include <iostream>
#include <string>
#include "Air.h"
using namespace std;


int main()
{
	AirlineBook* air = new AirlineBook();
	cout << "*** 한성항공에 오신것을 환영합니다. ***" << endl;
	air->mainmenu();
	delete[]air;
}

 

반응형
반응형

문제

다음 그림과 같은 상속 구조를 갖는 클래스를 설계한다.

모든 프린터는 모델명(model), 제조사(manufacturer), 인쇄 매수(printedCount), 인쇄 종이 잔량(availableCount)을 나타내는 정보와 print(int pages) 멤버 함수를 가지며, print()가 호출할 때마다 pages 매의 용지를 사용한다. 잉크젯 프린터는 잉크 잔량(availableInk) 정보와 printInkJet(int pages) 멤버 함수를 추가적으로 가지며, 레이저 프린터는 토너 잔량(availableToner) 정보와 역시 printLaser(int pages) 멤버 함수를 추가적으로 가진다. 각 클래스에 적절한 접근 지정으로 멤버 변수와 함수, 생성자, 소멸자를 작성하고, 다음과 같이 실행되도록 전체 프로그램을 완성하라. 잉크젯 프린터 객체와 레이저 프린터 객체를 각각 하나만 동적 생성하여 시작한다.

 

결과

 

소스코드

#include<iostream>
#include<string>
using namespace std;
class Printer {
	string model;		 //모델
	string manufacturer; //제조사
	int printedCount;	 //인쇄 매수
	int availableCount;  //인쇄 잔량
public:
	Printer(string m, string f, int ac) {
		model = m;
		manufacturer = f;
		availableCount = ac;
	}
	string getmodel() { return model; }				//모델명 리턴
	string getmanufacturer() { return manufacturer; }  //제조사 리턴
	int getavailableCount() { return availableCount; } //인쇄 잔량 리턴

	void print(int pages) {
		printedCount = pages;
		availableCount -= printedCount;
	}

};
class IPrinter : public Printer {
	int availbleInk;	 //잉크 잔량
public:
	IPrinter(string m, string f, int aCount, int aInk) : Printer(m, f, aCount) { availbleInk = aInk; }
	int getIavailableCount() { return getavailableCount(); }
	void printInkJet(int pages) {
		availbleInk -= pages;
		print(pages);
	}
	int getavailbleInk() { return availbleInk; }
	void show() {
		cout << getmodel() << ", " << getmanufacturer()
			<< ", 남은 종이" << getavailableCount() << ", 남은 잉크" << getavailbleInk() << endl;
	}
};
class RPrinter : public Printer {
	int availableToner;	 //토너 잔량
public:
	RPrinter(string m, string f, int aCount, int aToner) : Printer(m, f, aCount) { availableToner = aToner; } //토너 초기화
	int getRavailableCount() { return getavailableCount(); }
	void printLaser(int pages) {
		availableToner -= pages;
		print(pages);
	}
	int getavailableToner() { return availableToner; }
	void show() {
		cout << getmodel() << ", " << getmanufacturer()
			<< ", 남은 종이" << getavailableCount() << ", 남은 토너" << getavailableToner() << endl;
	}
};
int main()
{
	IPrinter IP("Officejet V40", "HP", 5, 10);
	RPrinter RP("SCX-6x45", "삼성전자", 3, 20);
	char q = 'y';
	int printer, pages;
	cout << "현재 작동중인 2대의 프린터는 아래와 같다" << endl;
	cout << "잉크젯 : ";
	IP.show();
	cout << "레이저 : ";
	RP.show();

	while (true) {
		cout << endl;
		cout << "프린터 (1:잉크젯, 2:레이저)와 매수 입력>>";
		cin >> printer >> pages;
		if (!(printer == 1 || printer == 2)) //프리터 1번 또는 2번을 선택하지 않았다면
			cout << "프린터가 존재하지 않습니다." << endl;
		else
		{
			if (printer == 1) { //잉크젯 선택
				if (IP.getIavailableCount() < pages) //용지가 부족할 경우
					cout << "용지가 부족하여 프린트할 수 없습니다." << endl;
				else {
					IP.printInkJet(pages);
					cout << "프린터하였습니다.\n";
				}
			}
			else { //그 외 선택
				if (RP.getRavailableCount() < pages) //용지가 부족할 경우
					cout << "용지가 부족하여 프린트할 수 없습니다." << endl;
				else {
					RP.printLaser(pages);
					cout << "프린터하였습니다.\n";
				}
			}
		}
		IP.show();
		RP.show();
		cout << "계속 프린트 하시겠습니까?(y/n)>>";
		cin >> q; //n이면 루프 종료
		if (q == 'y')
			continue;
		else //그이외에의 값 종료 while(q != 'n')을 쓰셔도 됩니다.
			exit(1); 
	}
}
반응형
반응형

문제

아래와 같은 BaseMemory 클래스를 상속받는 ROM(Read Only Memory), RAM 클래스를 작성하라. BaseMemory에 필요한 코드를 수정 추가하여 적절히 완성하라.

class BaseMemory {
	char* men;
protected:
	BaseMemory(int size) {
		men = new char[size];
	}
};

 

ROM은 읽기 전용 메모리이므로 작동 중에 값을 쓸 수가 없기 때문에, 공장에서 생산할 때 생산자가 요청한 데이터로 초기화하는데 이 작업을 굽는다(burn)라고 한다. 그러므로 ROM은 반드시 생성자에서 burn 작업이 일어나야 한다.

다음은 ROM과 RAM 메모리ㅣ를 생성하고 사용하는 사례이다. ROM의 0번지에서 4번지까지 읽어 RAM 메모리의 0~4번지에 쓰고, 다시 RAM 메모리의 값을 화면에 출력한다. 전체 프로그램을 완성하라.

int main()
{
	char x[5] = { 'h','e','l','l','o' };
	ROM biosROM(1024 * 10, x, 5); //10KB의 ROM메모리, 배열 x로 초기화됨
	RAM mainMemory(1024 * 1024); //1MB의 RAM메모리

	//0번지에서 4번지까지의 biosROM에서 읽어 mainMemory에 복사
	for (int i = 0; i < 5; i++)
		mainMemory.write(i, biosROM.read(i));
	for (int i = 0; i < 5; i++)
		cout << mainMemory.read(i);
}

 

결과

hello

 

소스코드

#include<iostream>
using namespace std;

class BaseMemory {
	char* men;
protected:
	BaseMemory(int size) {
		men = new char[size];
	}
	~BaseMemory() { delete [] men; }
	void setmen(int i, int data) { men[i] = data; }
	char getmen(int i) { return men[i]; }
};
class ROM : public BaseMemory {
public:
	ROM(int Memory, char x[], int size) : BaseMemory(Memory) {
		for (int i = 0; i < size; i++)
		{
			setmen(i, x[i]);
		}
	};
	char read(int i) { return getmen(i); }
};
class RAM : public BaseMemory {
public:
	RAM(int Memory) : BaseMemory(Memory) {};
	char read(int i) { return getmen(i); }
	void write(int i, char data) { setmen(i, data); }
};
int main()
{
	char x[5] = { 'h','e','l','l','o' };
	ROM biosROM(1024 * 10, x, 5); //10KB의 ROM메모리, 배열 x로 초기화됨
	RAM mainMemory(1024 * 1024); //1MB의 RAM메모리

	//0번지에서 4번지까지의 biosROM에서 읽어 mainMemory에 복사
	for (int i = 0; i < 5; i++)
		mainMemory.write(i, biosROM.read(i));
	for (int i = 0; i < 5; i++)
		cout << mainMemory.read(i);
}
반응형
반응형

문제 5, 6번에 적용되는 BaseArray 클래스는 다음과 같다.

class BaseArray {
private:
	int capacity; // 배열의 크기
	int* mem; // 정수 배열을 만들기 위한 메모리의 포인터
protected:
	BaseArray(int capacity = 100)
	{
		this->capacity = capacity; mem = new int[capacity];
	}
	~BaseArray() { delete[]mem; }
	void put(int index, int val) { mem[index] = val; }
	int get(int index) { return mem[index]; }
	int getCapacity() { return capacity; }
};

 

문제

BaseArray 클래스를 상속받아 스택으로 작동하는 Mystack 클래스를 작성하라.

int main()
{
	MyStack mStack(100);
	int n;
	cout << "스택에 삽입할 5개의 정수를 입력하라>> ";
	for (int i = 0; i < 5; i++)
	{
		cin >> n;
		mStack.push(n); //스택에 푸시
	}
	cout << "스택용량:" << mStack.capacity() << ", 스택크기:" << mStack.length() << endl;
	cout << "스택의 모든 원소를 팝하여 출력한다>> ";
	while (mStack.length() != 0) {
		cout << mStack.pop() << ' '; //스택에서 팝
	}
	cout << endl << "스택의 현재 크기 : " << mStack.length() << endl;
}

 

결과

스택에 삽입할 5개의 정수를 입력하라>>1 3 5 7 9
스택 용량 : 100, 스택 크기 : 5
스택의 모든 원소를 팝하여 출력한다>> 9 7 5 3 1
스택의 현재 크기 : 0

 

소스코드

#include<iostream>
using namespace std;
class BaseArray {
private:
	int capacity; // 배열의 크기
	int* mem; // 정수 배열을 만들기 위한 메모리의 포인터
protected:
	BaseArray(int capacity = 100)
	{
		this->capacity = capacity; mem = new int[capacity];
	}
	~BaseArray() { delete[]mem; }
	void put(int index, int val) { mem[index] = val; }
	int get(int index) { return mem[index]; }
	int getCapacity() { return capacity; }
};
class MyStack : public BaseArray {
	int top = -1;
public:
	MyStack(int capacity) : BaseArray(capacity) {};
	void push(int data);
	int capacity();
	int length();
	int pop();
};
void MyStack::push(int data)
{
	if (top >= getCapacity())
	{
		cout << "스택이 가득차있습니다." << endl;
		exit(1);
	}
	put(++top, data);
}
int MyStack::capacity()
{
	return	getCapacity();
}
int MyStack::length()
{
	return top + 1;
}
int MyStack::pop()
{
	if (top <= -1) {
		cout << "스택이 비었습니다.." << endl;
		exit(1);
	}
	return get(top--);
}

int main()
{
	MyStack mStack(100);
	int n;
	cout << "스택에 삽입할 5개의 정수를 입력하라>> ";
	for (int i = 0; i < 5; i++)
	{
		cin >> n;
		mStack.push(n); //스택에 푸시
	}
	cout << "스택용량:" << mStack.capacity() << ", 스택크기:" << mStack.length() << endl;
	cout << "스택의 모든 원소를 팝하여 출력한다>> ";
	while (mStack.length() != 0) {
		cout << mStack.pop() << ' '; //스택에서 팝
	}
	cout << endl << "스택의 현재 크기 : " << mStack.length() << endl;
}
반응형
반응형

변수

변수는 값을 담는 상자이다.

 

A라는 상자가 존재 할 때 내가 원하는 형태의 값을 담을 수 있다

 

A = 5 

 

5라는 값을 A의 상자의 공간에 넣어준다고 해석할 수 있다. 

 

수학의 개념 A = 5

'A는 5다' 라는 개념과 다른 개념이다. 

 

숫자형

정수형 - 0, 1, 2, -3

a = -3	 #a에 -3을 넣는다
print(a) #값 출력
print(type(a)) #a의 자료형 타입 int(integer) 정수형을 의미

실수형 - 0.123, -4.567, 3.9e10

(컴퓨터 지수 표현 방식 e,E 어느 것을 사용해도 무방 e10 = 10^10 -e10 = 10^-10)

f = 0.123	   
print(f)	   
print(type(f)) #float => 실수자료형

 

8진수 - 0o123

 

16진수 - 0x6F

 

사칙연산

x = 3
y = 4
print(x+y)  #더하기
print(x-y)  #빼기
print(x*y)  #곱하기
print(x**y) #제곱
print(x/y)  #나누기
print(x//y) #나누기 : 몫
print(x%y)  #나머지

 

문자열

문자열은 따옴표를 이용해 표현할 수 있으며 그 방법은 4가지 이다.

'파이썬의 세계에 오신걸 환영합니다.'
"파이썬의 세계에 오신걸 환영합니다."
'''파이썬의 세계에 오신걸 환영합니다.'''
"""파이썬의 세계에 오신걸 환영합니다."""
a = "Hello Python" #문자열도 마찬가지로 변수에 담을 수 있다.
print(type(a))     #str 문자열의 자료형을 뜻하는 string의 약자 str을 쓴다.

여러개의 따옴표를 쓰는 이유는 문자열 안에 ' 과 "을 표현하기 위해서이다.

x = 'I say "I love python.".'    #따옴표 안에 따옴표
y = "I say \" I love python.\"." #백슬래시 \ 이용

이스케이프 코드

파이썬은 한줄씩 처리하기 때문에 줄 바꿈이나 탭 등 여러가지 형식으로 만들어주거나 기능이나 문자를 넣을 수 있는 코드이다.

#\n	줄을 바꿀 때 사용
#\t	간격을 줄 때 사용
#\\	문자 \를 표현할 때 사용
#\'	작은따옴표(')를 표현할 때 사용
#\"	큰따옴표(")를 표현할 때 사용
#\r	캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동)
#\f	폼 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동)
#\a	벨 소리(PC 스피커에서 '삑' 소리가 난다)
#\b	백 스페이스
#\000 널 문자

 

문자열 연산

#문자열 연결
a = "Hello"
b = " Python"
a+b #Hello Python

#문자열 곱셈
a = "Python"
a * 3 #문자열 a인 Python을 3번 반복하여 출력한다.

#문자열 길이
a = "Hello Python"
len(a) #12

 

문자열 인덱싱과 슬라이싱

인덱싱 - 하나의 값을 가리킨다

슬라이싱 - 여러개의 값을 잘라낸다.

#인덱싱
a = "Hello Python"
a[0]
# H
a[3]
#l
#문자열의 시작번호는 0번째부터 시작이다.
a[-1]
#n #거꾸로 간다

#슬라이싱
b = a[0]+a[6]
#HP
a[0:4] # => a[:4] 
#Hello
#값을 넣지않으면 끝부분까지라고 생각하면된다. a[4:] => 4번째부터 끝까지

a[0:5:2] #세번째 자리는 간격만큼 건너 출력한다.
#Hlo

 

문자열 포매팅

a = "I want %d oranges." %5 
#여러가지 자료형의 삽입이 가능하다 ex)%d - 5 => %s - five
#변수에 초기화 후 변수 삽입도 가능하다
number = 5
a = "I want %d oranges." % number
a
#I want 5 oranges

#문자열 포맷 코드
#%s	문자열
#%c	문자 1개
#%d	정수
#%f	부동소수
#%o	8진수
#%x	16진수
#%%	Literal % (문자 % 자체)

 

문자열 관련 함수

 

문자열 세기(count)

a = "Hello Python"
a.count('2')
#2 l의 개수

 

문자 위치 탐색1(find)

a = "Hello Python"
a.find('o')
#4 숫자를 0부터 세고 가장 먼저 나온 위치를 반환하기 때문에 Hello의 4번째의 o를 반환한다.
a.find('f')
#-1 존재하지 않으면 -1을 반환한다.

 

문자 위치 탐색2(index)

a = "Hello Python"
a.index('o')
#4 find와 동일하다 하지만 존재하지 않는다면 오류가 발생한다.

 

문자열 삽입(join)

",".join("Hello")
#문자열 Hello 가각 사이에 ','를 삽입한다.

 

소문자->대문자(upper)

a = "Hello Python"
a.upper()
#"hello python"

 

대문자->소문자(lower)

a = "Hello Python"
a.lower()
#"HELLO PYTHON"

 

공백 지우기(strip, rstrip, lstrip)

a = '  hello  '
a.rstrip() #오른쪽 공백 지우기 '  hello'
a.lstrip() #왼쪽 공백 지우기   'hello'
a = '  hello  '
a.strip()  #공백 지우기 'hello'

 

문자열 바꾸기(replace)

a = "Hello Python"
a.replace("Python","C++")
#"Hello C++"

 

문자열 나누기(split)

a = "Hello Python"
a.split() #()공간에 아무것도 쓰지 않으면 공백기준
#['Hello','Python']

#그 외에 기준을 두고 싶으면 '?' ?에 다른 값을 넣어주면 된다
a = "H:i" 
a.split(':')
#['H','i']

 

반응형
반응형

코인을 하던 저는

20살에 접어들면서 운전을 할 수 있게 되고 

차에 대해 관심을 가지게 되었는데요.

 

그 중 자동차와 관련된 코인 중 하나인 아모(AMO) 코인에 대해 알아볼려고 합니다.

 

아모(AMO) 코인이란?

영어로 자동차를 뜻하는 Automobile 에서 따왔으며, 모든 드라이빙 데이터를 공유하는 블록체인 네트워크입니다.

즉,

자동차 데이터 시장에서 자동차의 주행, 주차, 충전, 결제, 통신 등

운전자의 모든 데이터를 공유 및 거래에서 사용되는 가상화폐입니다.

 

그럼 이 데이터를 어디에 쓰느냐?

현 시대에 가장 가치있는 것은 '정보' 이라고 생각합니다.

뭐든지 '얼마나 '정보'를 가지고 또는 알고 있는가?' 에 따라 달라진다고 할 수 있죠.

이 때 우리의 주행데이터를 기반으로 자동차관련 서비스들을 제공할 수 있습니다.

자동차의 내부 데이터(주행 관련), 자동차의 외부 데이터(운전자의 운행 중 사용하는 데이터)

이 두가지를 통해 운전자의 운전과 소비의 습관이나 취향 등을 알 수 있고

이를 통해 자동차회사나 관련 서비스 회사에서 사용자에 맞춘 상품들을 기획하거나

많은 사용자의 운전을 통해 자율주행으로도 이어질 수 있습니다. 

 

아모코인은 아모 마켓에 자신의 자동차 데이터를 업로드 하면, 데이터 소유자의 허가가 있을 시에만

데이터가 거래되며, 거래될 때마다 아모코인으로 보상 받을 수 있습니다.

 

향후 자동차 관련 서비스에 사용 될 수 있겟죠.

 

그럼 이 코인을 만든 회사 아모 랩스(AMO Laps)는 무슨회사냐?

한국의 정보보안 전문업체인 펜타시큐리티시스템의 자회사로서

2007년부터 커넥티드 카, 자율주행차 그리고 전기차를 위한 보안 솔루션을 개발해 왔습니다.

2015년에는 자동차에서 인프라까지 아우르는 자동차 보안 토탈 솔루션 AutoCrypt®를 출시했습니다.

AutoCrypt®(아우토크립트)

협력형 교통지능체계 C-ITS 사업, 자율협력주행 기술개발 사업, 자율주행차 실험도시 조성 사업 등에 참여하며 자돛아 보안 사업의 핵심 역할을 맡고 있습니다.

AMO의 핵심 기술로서 안전한 자동차 환경을 위한 기술을 제공합니다.

 

C-ITS란 무엇이냐

간단히 차량이 주행 중 운전자에게 주변 교통상황과 급정거,

낙하물 등의 사고 위험 정보를 실시간으로 제공하는 시스템 입니다.

운전하시다 보면 현재 교통상황을 검토해서

경로를 재탐색하는 시스템이 바로 이 시스템을 이용한 것입니다.

 

지금까지 아모랩스는

2007

차량과 차량 진단 장치 간 데이터 보안

2011

차량과 모바일 단말기 간 데이터 보안

2012

경찰 순찰차 출동 관리 시스템 보안

2013

WAVE 통신 환경의 V2X 보안

2014

모바일 텔레매틱스 보안

VDMS(차량 데이터 모니터링 시스템)보안

2016

대전광역시-세종시 C-ITS사업 보안인증시스템 구축

2017

전기차 충전 시스템 보안

대전광역시-세종시 보안인증시스템 개선 사업

여주 고속도로 C-ARS 사업 보안인증시스템 구축

화성시 K-City 보안인증시스템 구축

2018

C-ITS 고속도로 보안 솔류션 기획

2019

제주도 C-ITS 프로젝트 참여

서울시 C-ITS 프로젝트 참여

C-ITS 고속도로 보안 솔루션 구축

2021년 계획

 2021년 드디어 데이터를 수집하네요

이 밖에도 중국과 일본에 사업을 추진하고 있습니다.

 

앞서 말했듯이 사실상 데이터들은 자율주행에 필요한 것들입니다.

그럼 자율주행에 상용화됨에 따라 데이터의 가치가 더욱 더 높아질 것입니다.

그리고 그 데이터를 얼마나 잘 지키는가?

바로 보안이 가장 중요합니다.

 

그에 대해 설명을 잘 해주신 영상이 있어 남겨봅니다.

https://www.youtube.com/watch?v=nFCJK40YLoE&t=348s

 

아모코인 차트

총 발행량 196억입니다.

테슬라에서 비트코인을 사용하겠다고 선언한 뒤

폭등으로 18원 까지 올랐으나

이후 계속된 하락장과 악재 

테슬라 비트코인 사용중단으로 인해 

폭락 중입니다.

허나 장기적으로 본다면 나쁘지 않을 것 같습니다.

모두 성투하시길 바랍니다.

 

https://www.amo.foundation/

 

아모랩스 (AMO Labs) 홈페이지 | Discover value in your driving

AMO는 주행 정보와 차량 정보 등 다양한 드라이빙 데이터를 수집하고 활용함으로써 더 나은 차량 환경을 만드는 데이터 플랫폼입니다. AMO Coin은 여러분의 데이터에 가치를 더합니다. 지금 바로, A

www.amo.foundation

 

아모코인 상장거래소

https://www.bithumb.com/trade/order/AMO_KRW

 

No.1 가상자산 플랫폼, 빗썸, 아모코인 거래소

아모코인(AMO)거래소, 아모코인(AMO)가격、아모코인(AMO)시세 정보 제공, 아모코인(AMO) 매매, 아모코인(AMO) 매수, 아모코인(AMO) 매도, 아모코인(AMO) 거래

www.bithumb.com

https://coinone.co.kr/exchange/trade/amo/krw

 

아모코인(AMO) - 코인원(Coinone) 시세 확인 및 거래하기

아모코인(AMO) 거래소, 아모코인(AMO) 시세 정보 제공, 아모코인(AMO) 매매, 아모코인(AMO) 매수, 아모코인(AMO) 매도, 아모코인(AMO) 거래

coinone.co.kr

아모코인 공식 채팅방입니다.

https://open.kakao.com/o/gVFIQnab 비밀번호 : 109629

 

AMO Labs - Official 2.0

#blockchain #amo #pentasecurity #자동차

open.kakao.com

 

반응형
반응형

오늘은 클레이튼 코인에 대해 알아볼려고 합니다.

대부분 사람들은 클레이튼코인은 카카오에 관련되어 있어서

관심을 가지고 투자를 합니다.

하지만 그정도로만 다들 알고 있고, 자세히는 모르시는 분들이 많아서 알아보았습니다.

 

클레이튼이란?

카카오의 블록체인 기술 관련 자회사 그라운드X가 개발한 코인입니다.

클레이튼은 비트코인처럼 하나의 코인이 아닌 이더리움이나 이오스 같이 분산 어플리케이션 디앱을 만들기 위한 중앙 플랫폼입니다.

 

여기서!

분산어플리케이션이란?

'특정 관리자가 없는 어플리케이션으로

여러 마이너들이 어플리케이션의 네트워크를 유지해준다.'

라는 의미입니다. 

하지만 네트워크를 유지하는 역할만 있을뿐 고치거나 관리하지는 못합니다.

 

제일 궁금해 하실 것들

클레이튼의 발행량은 100억개를 시작으로 매년 2.91%씩 증가한답니다.

현 시세는 2021-05-23 23:57 기준 1380원이네요..

(처음 봤을 때 2400원에 봤는데...)

최근들어 악재와 조정이 심각하네요.

거의 2018년 리플의 형태를 보는 것 같네요...

그러나 많은 사람들이 그렇듯이 '카카오'라는 이름 하나 만으로 

장기로 투자 할 가치는 있다고 봅니다.

 

컨소시엄 노드

그라운드X와 함께 클레이튼 플랫폼을 운영 및 활용하는 파트너들입니다.

플랫폼 거버넌스를 달성하고자 하는 공통의 목표를 공유하는 기여자 그룹과  함께 클레이튼을 운영하고 있습니다.

따라서 합의가 필요한 중요 작업은 컨소시엄 노드에서 처리합니다. 

그라운드X는 이 모임을 클레이튼 거버넌스 카운슬이라고 명명했습니다.

 

그냥 쉽게 말해서 클레이튼과 함께 운영하고 이 클레이튼을 활용하는 기업들이라고 생각하시면 됩니다.

 

카카오를 기준으로 많은 회사들이 협력하고 있습니다. 

그 중에는 우리가 잘 알고있는 대기업들도 보입니다.

 

이 밖에도 더 많은 활용처, 개발팀 등 수많은 기업들과 협력하고 있습니다.

단지 카카오뿐만이 아니란거 

 

작년 그라운드 X CEO 한재선님과의 인터뷰자료입니다.

https://www.youtube.com/watch?v=KT-NhmOxqwo

클레이튼은 현재도 여러 사업을 추진하고 있어서 앞으로도 크게 성장할 것으로 봅니다.

하지만 현재는 중국의 암호화폐 강력 규제로 인해 많은 코인들이 피해를 보고 있습니다.

사실상 많은 코인들, 암호화폐라는 이름으로 만들어진 이상

실사용되는 곳이 있어야 가격이 올라갈 것으로 생각됩니다.

즉,

모든 코인은 미래적 가치를 보고 투자하는 것이니 신중히 투자하시길 바랍니다.

 

아래는 그라운드X 홈페이지입니다.

https://www.groundx.xyz/

 

Ground X

The Future Designed by Ground X

www.groundx.xyz

아래는 클레이튼 거래소 입니다.

https://www.bithumb.com/trade/order/KLAY_KRW 빗썸

 

No.1 가상자산 플랫폼, 빗썸, 클레이튼 거래소

클레이튼(KLAY)거래소, 클레이튼(KLAY)가격、클레이튼(KLAY)시세 정보 제공, 클레이튼(KLAY) 매매, 클레이튼(KLAY) 매수, 클레이튼(KLAY) 매도, 클레이튼(KLAY) 거래

www.bithumb.com

https://coinone.co.kr/exchange/trade/klay/krw 코인원

 

클레이튼(KLAY) - 코인원(Coinone) 시세 확인 및 거래하기

클레이튼(KLAY) 거래소, 클레이튼(KLAY) 시세 정보 제공, 클레이튼(KLAY) 매매, 클레이튼(KLAY) 매수, 클레이튼(KLAY) 매도, 클레이튼(KLAY) 거래

coinone.co.kr

 

반응형
반응형

문제 5, 6번에 적용되는 BaseArray 클래스는 다음과 같다.

class BaseArray {
private:
	int capacity; // 배열의 크기
	int* mem; // 정수 배열을 만들기 위한 메모리의 포인터
protected:
	BaseArray(int capacity = 100)
	{
		this->capacity = capacity; mem = new int[capacity];
	}
	~BaseArray() { delete[]mem; }
	void put(int index, int val) { mem[index] = val; }
	int get(int index) { return mem[index]; }
	int getCapacity() { return capacity; }
};

 

문제

BaseArray를 상속받아 큐처럼 작동하는 MyQueue클래스를 작성하라. MyQueue를 활용하는 사례는 다음과 같다.

int main()
{
	MyQueue mQ(100);
	int n;
	cout << "큐에 삽입할 5개의 정수를 입력하라>> ";
	for (int i = 0; i < 5; i++)
	{
		cin >> n;
		mQ.enqueue(n); //큐에 삽입
	}
	cout << "큐의 용량 : " << mQ.capacity() << ", 큐의 크기 : " << mQ.length() << endl;
	cout << "큐의 원소를 순서대로 제거하여 출력한다>> ";
	while (mQ.length() != 0) {
		cout << mQ.dequeue() << ' '; //큐에서 제거하여 출력
	}
	cout << endl << "큐의 현재 크기 : " << mQ.length() << endl;
}

 

결과

큐에 삽입할 5개의 정수를 입력하라>> 1 3 5 7 9

큐의 용량:100, 큐의 크기:5

큐의 원소를 순서대로 제거하여 출력한다>> 1 3 5 7 9

큐의 현재 크기 : 0

 

소스코드

#include<iostream>
using namespace std;
class BaseArray {
private:
	int capacity; // 배열의 크기
	int* mem; // 정수 배열을 만들기 위한 메모리의 포인터
protected:
	BaseArray(int capacity = 100)
	{
		this->capacity = capacity; mem = new int[capacity];
	}
	~BaseArray() { delete[]mem; }
	void put(int index, int val) { mem[index] = val; }
	int get(int index) { return mem[index]; }
	int getCapacity() { return capacity; }
};
class MyQueue : public BaseArray {
	int front, rear;
public:
	MyQueue(int capacity) : BaseArray(capacity) { front = 0; rear = 0; }
	void enqueue(int data);
	int dequeue();
	int capacity();
	int length();
};
void MyQueue::enqueue(int data)
{
	if (rear >= getCapacity()) {
		cout << "큐가 가득찼습니다." << endl;
		exit(1);
	}
	put(++rear, data);
}
int MyQueue::dequeue()
{
	if (front == rear) {
		cout << "꺼낼 데이터가 없습니다." << endl;
		exit(1);
	}
	--rear;
	return get(++front);
}
int MyQueue::capacity()
{
	return getCapacity();
}
int MyQueue::length()
{
	return rear;
}
int main()
{
	MyQueue mQ(100);
	int n;
	cout << "큐에 삽입할 5개의 정수를 입력하라>> ";
	for (int i = 0; i < 5; i++)
	{
		cin >> n;
		mQ.enqueue(n); //큐에 삽입
	}
	cout << "큐의 용량 : " << mQ.capacity() << ", 큐의 크기 : " << mQ.length() << endl;
	cout << "큐의 원소를 순서대로 제거하여 출력한다>> ";
	while (mQ.length() != 0) {
		cout << mQ.dequeue() << ' '; //큐에서 제거하여 출력
	}
	cout << endl << "큐의 현재 크기 : " << mQ.length() << endl;
}
반응형
반응형

문제 3, 4번에 적용되는 2차원 상의 한 점을 표현하는 Point 클래스가 있다.

class Point {
	int x, y;
public:
	Point(int x, int y) { this->x = x; this->y = y; }
	int getX() { return x; }
	int getY() { return y; }
protected:
	void move(int x, int y) {
		this->x = x; this->y = y;
	}
};

 

문제

다음 main() 함수가 실행되도록 Point 클래스를 상속받는 ColorPoint 클래스를 작성하고, 전체 프로그램을 완성하라.

int main() {
	ColorPoint zeroPoint;
	zeroPoint.show();

	ColorPoint cp(5, 5);
	cp.setPoint(10, 20);
	cp.setColor("BLUE");
	cp.show();
}

 

결과

BLACK색으로 ( 0, 0 )에 위치한 점입니다.

BLUE색으로 ( 10, 20 )에 위치한 점입니다.

 

소스코드

#include<iostream>
#include<string>
using namespace std;
class Point {
	int x, y;
public:
	Point(int x, int y) { this->x = x; this->y = y; }
	int getX() { return x; }
	int getY() { return y; }
protected:
	void move(int x, int y) { this->x = x; this->y = y; }
};
class ColorPoint : public Point {
	string color;
public:
	ColorPoint(int x = 0, int y = 0, string color = "BLACK") : Point(x, y) {
		this->color = color;
	}
	void show();
	void setPoint(int x, int y);
	void setColor(string color);
};
void ColorPoint::show()
{
	cout << color << "색으로 ( " << getX() << ", " << getY() << " )에 위치한 점입니다." << endl;
}
void ColorPoint::setPoint(int x, int y)
{
	move(x, y);
}
void ColorPoint::setColor(string color)
{
	this->color = color;
}
int main() {
	ColorPoint zeroPoint;
	zeroPoint.show();

	ColorPoint cp(5, 5);
	cp.setPoint(10, 20);
	cp.setColor("BLUE");
	cp.show();
}

 

반응형

+ Recent posts