일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 코테
- 코딩테스트
- 프로그래머스
- C언어
- git
- thymeleaf
- 가상면접사례로배우는대규모시스템설계기초
- nestjs auth
- 파이썬
- @Autowired
- 카카오 코테
- C++
- spring boot
- 컴포넌트스캔
- TypeORM
- 스프링
- 알고리즘
- 구조체배열
- 시스템호출
- nestJS
- nestjs typeorm
- 카카오 알고리즘
- Nodejs
- Spring
- @Component
- OpenCV
- python
- AWS
- 카카오
- 해시
Archives
- Today
- Total
공부 기록장 💻
명품 C++ Programming 10장 실습 문제 - 템플릿 함수, 제네릭 클래스, STL vector/map 본문
# Language & Tools/C++
명품 C++ Programming 10장 실습 문제 - 템플릿 함수, 제네릭 클래스, STL vector/map
dream_for 2021. 6. 1. 00:57(명품 C++ Programming 10장)
1.
#include <iostream>
using namespace std;
template <class T>
T biggest(T arr[], int n){
T big=arr[0];
for(int i=1;i<n;i++)
if(arr[i]>big) big=arr[i];
return big;
}
int main(){
int x[]={1,10,100,5,4};
cout<<biggest(x,5)<<endl;
double d[]={3.5, 2.4, 5.5, 9.1, -2.3};
cout<<biggest(d,5)<<endl;
string str[]={"hello", "wow", "every", "apple"};
cout<<biggest(str,4)<<endl;
}
2.
#include <iostream>
using namespace std;
template <class T>
bool equalArrays(T a[], T b[], int n){
for(int i=0;i<n;i++)
if (a[i]!=b[i]) return false;
return true;
}
int main(){
int x[]={1,10,100,5,4};
int y[]={1,10,100,5,4};
double a[]={1.1, 2.3};
double b[]={3.3, 2.3};
if(equalArrays(x,y,5)) cout<<"같다"<<endl;
else cout<<"다르다"<<endl;
if(equalArrays(a,b,5)) cout<<"같다"<<endl;
else cout<<"다르다"<<endl;
}
3.
#include <iostream>
using namespace std;
template <class T>
void reverseArray(T arr[], int n){
for (int i=0;i<n/2;i++){
T tmp=arr[i];
// 1 2 3 4 5
// 1(i==0) <-> 5(i==5-0+-1)
arr[i]=arr[n-i-1];
arr[n-i-1]=tmp;
}
}
int main(){
int x[]={1,10,100,5,4};
for(int i=0;i<5;i++) cout<<x[i]<<' ';
cout<<endl;
reverseArray(x,5);
for(int i=0;i<5;i++) cout<<x[i]<<' ';
}
4.
#include <iostream>
using namespace std;
template <class T>
bool search(T target, T arr[], int n){
for(int i=0;i<n;i++)
if(arr[i]==target) return true;
return false;
}
int main(){
int x[]={1,10,100,5,4};
if(search(100,x,5)) cout<<"100이 x에 포함되어 있다"<<endl;
else cout<<"100이 배열 x에 포함되어 있지 않다"<<endl;
if(search(3,x,5)) cout<<"3이 x에 포함되어 있다"<<endl;
else cout<<"3이 배열 x에 포함되어 있지 않다"<<endl;
}
5.
#include <iostream>
using namespace std;
template <class T>
T* concat(T a[], int sizea, T b[], int sizeb){
T* p=new T[sizea+sizeb];
for(int i=0;i<sizea;i++)
p[i]=a[i];
for(int i=0;i<sizeb;i++)
p[i+sizea]=b[i];
return p;
}
int main(){
double x[]={1.1,2.2,3.3,4.4,5.5};
double y[]={-1, -2, -3, -4};
double *p=concat(x,5,y,4);
for(int i=0;i<9;i++) cout<<p[i]<<' ';
cout<<endl;
delete []p;
}
6.
#include <iostream>
using namespace std;
template <class T>
T* remove(T src[], int sizeSrc, T minus[], int sizeMinus, int& retSize){
T *tmp=new T[sizeSrc+sizeMinus];
int size=0, i,j;
for(i=0;i<sizeSrc;i++){
for(j=0;j<sizeMinus;j++)
if(src[i]==minus[j]) break;
if(j==sizeMinus) tmp[retSize++]=src[i];
}
return tmp;
}
int main(){
double x[]={1.1,2.2,3.3,4.4,5.5};
double y[]={-1, 3.3, 5.5, -4};
int retSize=0;
double *p=remove(x,5,y,4, retSize);
for(int i=0;i<retSize;i++) cout<<p[i]<<' ';
cout<<endl;
delete []p;
}
7.
#include <iostream>
using namespace std;
class Circle{
int radius;
public:
Circle(int radius=1){this->radius=radius;}
int getRadius(){return radius;}
};
template <class T>
T bigger(T a, T b){return a>b?a:b;}
Circle bigger(Circle a, Circle b){
if(a.getRadius()>b.getRadius()) return a;
else return b;
}
int main(){
int a=20, b=50, c;
c=bigger(a,b);
cout<<"20과 50 중 큰 값은 "<<c<<endl;
Circle waffle(10), pizza(30), y;
y=bigger(waffle, pizza);
cout<<"waffle(10)과 pizza(30) 중 큰 것의 반지름은 "<<y.getRadius()<<endl;
}
8.
9.
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> v;
while(true){
int n, sum=0;
cout<<"정수를 입력하세요(0을 입력하면 종료) >> ";
cin>>n;
if(n==0) break;
v.push_back(n);
for(int i=0; i<v.size(); i++){
cout<<v[i]<<' ';
sum+=v[i];
}
cout<<endl<<"평균 = "<<(double)sum/v.size()<<endl;
}
}
10.
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
class Nation{
string nation;
string capital;
public:
Nation(string n, string c){
nation=n;capital=c;
}
string getNation(){return nation;}
string getCapital(){return capital;}
};
int main(){
Nation Kor("대한민국", "서울"), US("미국", "워싱턴"), Japan("일본", "도쿄");
vector<Nation> v;
v.push_back(Kor);
v.push_back(US);
v.push_back(Japan);
cout<<"***** 나라의 수도 맞추기 게임을 시작합니다. *****"<<endl;
while(true){
int get;
cout<<endl<<"정보 입력: 1, 퀴즈: 2, 전체 출력 : 3, 종료: 4 >> ";
cin>>get;
if(get==4) break;
if(get==1){
cout<<"현재 "<<v.size()<<"개의 나라가 입력되어 있습니다."<<endl;
cout<<"나라와 수도를 입력하세요(no no 이면 입력끝)"<<endl;
cin.ignore(1, '\n');
while(true){
string nation,capital;
int check=0;
cout<<v.size()+1<<">>";
getline(cin, nation, ' ');
getline(cin, capital);
if(nation=="no" && capital=="no") break;
for(int i=0;i<v.size();i++){
if(nation==v[i].getNation()){
cout<<"already exists !!"<<endl;
check=1;
break;
}
}
if(check==0){
Nation p(nation, capital);
v.push_back(p);
}
}
}
if(get==2){
while(true){
string capital;
srand(time(NULL));
int ran=rand()%v.size();
cout<<v[ran].getNation()<<"의 수도는?(종료는 exit) >> ";
cin>>capital;
if(capital=="exit") break;
if(capital==v[ran].getCapital()) cout<<"Correct !!"<<endl;
else cout<<"NO !!"<<endl;
}
}
if(get==3){
for(int i=0;i<v.size();i++)
cout<<i<<" : "<<v[i].getNation()<<" "<<v[i].getCapital()<<endl;
}
}
}
cin.ignore(1, '\n') 적절히 사용하기 !
11.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Book{
string title, author;
int year;
public:
Book(string t, string a, int y){
title=t;author=a;year=y;
}
string getAuthor(){return author;}
string getTitle(){return title;}
int getYear(){return year;}
};
int main(){
vector<Book> v;
cout<<"입고할 책을 입력하세요. 년도에 -1을 입력하면 입고를 종료합니다"<<endl;
while(true){
int year;
string title, author;
cout<<"년도>>";
cin>>year;
if(year==-1) break;
cin.ignore(1, '\n');
cout<<"책이름>>";
getline(cin, title);
cout<<"저자>>";
getline(cin, author);
Book b(title, author, year);
v.push_back(b);
}
cin.ignore(1, '\n');
cout<<"총 입고된 책은 "<<v.size()<<"권 입니다."<<endl;
string author;
cout<<"검색하고자 하는 저자이름을 입력하세요>>";
getline(cin, author);
for(int i=0;i<v.size();i++){
if(author==v[i].getAuthor())
cout<<v[i].getYear()<<"년도, "<<v[i].getTitle()<<", "<<v[i].getAuthor()<<endl;
}
int year;
cout<<"검색하고자 하는 년도를 입력하세요>>";
cin>>year;
for(int i=0;i<v.size();i++){
if(year==v[i].getYear())
cout<<v[i].getYear()<<"년도, "<<v[i].getTitle()<<", "<<v[i].getAuthor()<<endl;
}
}
12.
Open Challenge 수정
영어 어휘 테스트 프로그램
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
class Word{
string eng;
string kor;
public:
Word(string eng, string kor){
this->eng=eng;this->kor=kor;
}
string getEng(){return eng;}
string getKor(){return kor;}
};
int main(){
vector<Word> v;
// 미리 몇 개의 단어 뭉치들을 벡터에 삽입한다
Word bunch[5]={Word("stock", "주식"), Word("bear", "곰"), Word("doll", "인형"),
Word("honey", "자기"), Word("painting", "그림")};
for(int i=0;i<5;i++)
v.push_back(bunch[i]);
cout << "***** 영어 어휘 테스트를 시작합니다. ******" << endl;
while(true){
int choice;
cout << endl<< "1. 어휘 삽입 / 2. 어휘 테스트 / 3. 단어장 출력 / 그 외 키 : 프로그램 종료 >> ";
cin >> choice;
if(choice==1){
string english, korean;
cout<<"영어 단어에 exit을 입력하면 입력 끝"<<endl<<endl;
while(true){
cout<<"영어 >> ";
cin >> english;
if(english=="exit") break;
cout<<"한글 >> ";
cin >> korean;
Word new_word(english, korean);
v.push_back(new_word);
}
}
else if(choice==2){
cout<<"영어 어휘 테스트를 시작합니다. 1~4 외 ㄷ른 입력시 종료."<<endl<<endl;
srand(time(0));
while(true){
int eng=rand()%v.size(); // 벡터의 '인덱스'를 랜덤으로 추출
cout<<v[eng].getEng()<<"?"<<endl; // 해당 인덱스의 영어 단어를 출력
int answer=rand()%4; // eng 인덱스 번호에 해당하는 kor의 정답은 answer 번째에 나타날 것
int kor[4]; // 총 4개의 선택지(한국어)
for(int i=0;i<4;i++){
if(i==answer){ // answer번째 i가 나오면 skip
kor[i]=eng;
continue;
}
kor[i]=rand()%v.size(); // kor[i]에 벡터의 인덱스 랜덤으로 저장
if(kor[i] == eng) kor[i]=rand()%v.size(); // answer과 동일하다면 다시 한번 시도
}
// 랜덤으로 뽑은 인덱스에 해당하는 한글 단어 출력 0
for(int i=0;i<4;i++) cout<<"("<<i+1<<")"<<" "<<v[kor[i]].getKor()<<" ";
cout<<":>";
int num; // 1, 2, 3, 4 중 입력 받기
cin>>num; // num에 해당하는 v[kor[num]].getEng() 과 v[eng].getEng()과 같아야함
if(!(num==1||num==2||num==3||num==4)) break;
if(v[eng].getEng()==v[kor[num-1]].getEng()) cout<<"Excellent !! "<<endl<<endl;
else cout<<"No. !!"<<endl<<endl;
}
}
else if (choice==3){
for(int i=0;i<v.size();i++){
cout<<"[ "<<v[i].getEng()<<" : "<<v[i].getKor()<<" ] "<<endl;
}
}
else break;
}
}
함수로 구현:
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
class Word{
string eng;
string kor;
public:
Word(string eng, string kor){
this->eng=eng;this->kor=kor;
}
string getEng(){return eng;}
string getKor(){return kor;}
};
void createList(vector<Word>& v){
// 미리 몇 개의 단어 뭉치들을 벡터에 삽입한다
Word bunch[5]={Word("stock", "주식"), Word("bear", "곰"), Word("doll", "인형"),
Word("honey", "자기"), Word("painting", "그림")};
for(int i=0;i<5;i++)
v.push_back(bunch[i]);
}
void addList(vector<Word>& v){
string english, korean;
cout<<"영어 단어에 exit을 입력하면 입력 끝"<<endl<<endl;
while(true){
cout<<"영어 >> ";
cin >> english;
if(english=="exit") break;
cout<<"한글 >> ";
cin >> korean;
Word new_word(english, korean);
v.push_back(new_word);
}
}
void Test(vector<Word>& v){
cout<<"영어 어휘 테스트를 시작합니다. 1~4 외 다른 입력시 종료."<<endl<<endl;
while(true){
srand(time(0));
int eng=rand()%v.size(); // 벡터의 '인덱스'를 랜덤으로 추출
cout<<v[eng].getEng()<<"?"<<endl; // 해당 인덱스의 영어 단어를 출력
int answer=rand()%4; // eng 인덱스 번호에 해당하는 kor의 정답은 answer 번째에 나타날 것
int kor[4]; // 총 4개의 선택지(한국어)
for(int i=0;i<4;i++){
if(i==answer){ // answer번째 i가 나오면 skip
kor[i]=eng;
continue;
}
kor[i]=rand()%v.size(); // kor[i]에 벡터의 인덱스 랜덤으로 저장
if(kor[i] == eng) kor[i]=rand()%v.size(); // answer과 동일하다면 다시 한번 시도
}
// 랜덤으로 뽑은 인덱스에 해당하는 한글 단어 출력 0
for(int i=0;i<4;i++) cout<<"("<<i+1<<")"<<" "<<v[kor[i]].getKor()<<" ";
cout<<":>";
int num; // 1, 2, 3, 4 중 입력 받기
cin>>num; // num에 해당하는 v[kor[num]].getEng() 과 v[eng].getEng()과 같아야함
if(!(num==1||num==2||num==3||num==4)) break;
if(v[eng].getEng()==v[kor[num-1]].getEng()) cout<<"Excellent !! "<<endl<<endl;
else cout<<"No. !!"<<endl<<endl;
}
}
void printList(vector<Word>& v){
for(int i=0;i<v.size();i++)
cout<<"[ "<<v[i].getEng()<<" : "<<v[i].getKor()<<" ] "<<endl;
}
int main(){
vector<Word> v;
createList(v);
cout << "***** 영어 어휘 테스트를 시작합니다. ******" << endl;
while(true){
int choice;
cout << endl<< "1. 어휘 삽입 / 2. 어휘 테스트 / 3. 단어장 출력 / 그 외 키 : 프로그램 종료 >> ";
cin >> choice;
if(choice==1) addList(v);
else if(choice==2) Test(v);
else if (choice==3) printList(v);
else break;
}
}
728x90
반응형
'# Language & Tools > C++' 카테고리의 다른 글
Comments