Programming Language/C,C++

C++] 명품 C++ 프로그래밍 10장 실습문제 - 1

TwinParadox 2018. 6. 30. 19:49
728x90

개인적으로 C++을 공부할 때 작성해놓았던 코드들 올린다.

혼자 책을 사서 독학하고 그리고 학부생 시절에 복습하면서 했던 문제들이라서

어떤 문제들은 깔끔히 잘 정리되어 있고, 어떤 문제들은 허접한 버그가 있을 수도 있다.

확인은 해뒀지만, 확인하지 못하거나 고려해야 할 버그, 오탈자 등은 댓글을 남겨주시라. 

그간 공부한 것들을 정리하는 블로그이기 때문에 올려놓는다.


지금까지는 실습문제 문제 내용까지 적었지만, 귀찮기도 하고, 굳이 입력할 필요성은 느끼지 않아서 적지 않았다. 차후 게시물을 대대적으로 수정할 때면 추가될지도 모른다.


실습문제 1.

#include <iostream>
using namespace std;
template<typename T> T biggest(T arr[], int size)
{
	T max = arr[0];
	for (int i = 1; i < size; i++)
		if (max < arr[i])
			max = arr[i];
	return max;
}
int main(void)
{
	int x[] = { 1,10,100,5,4 };
	cout << biggest(x, 5) << endl;
	double y[] = { 1.1, 5.1, 10.5, 50.7, 4.0 };
	cout << biggest(y, 5) << endl;
}





실습문제 2.

#include <iostream>
using namespace std;
template<typename T1, typename T2> bool equalArrays(T1 x, T2 y, int size)
{
	for (int i = 0; i < size; i++)
		if (x[i] != y[i])
			return false;
	return true;
}
int main(void)
{
	int x[] = { 1,10,100,5,4 };
	int y[] = { 1,10,100,5,4 };
	if (equalArrays(x, y, 5))
		cout << "같다";
	else
		cout << "다르다";
	cout << endl;

	double a[] = { 1.5, 5.0, 100, 10.0, 4.3 };
	short b[] = { 1,5,70,10,4 };
	if (equalArrays(a, b, 5))
		cout << "같다";
	else
		cout << "다르다";
	cout << endl;
}





실습문제 3.

#include <iostream>
using namespace std;
template<typename T> void reverseArray(T* arr, int size)
{
	T tmp;
	for (int i = 0; i < size / 2; i++)
	{
		tmp = arr[i];
		arr[i] = arr[size - 1 - i];
		arr[size - 1 - i] = tmp;
	}
}
int main(void)
{
	int x[] = { 1,10,100,5,4 };
	reverseArray(x, 5);
	for (int i = 0; i < 5; i++)
		cout << x[i] << ' ';
}





실습문제 4.

#include <iostream>
using namespace std;
template<typename T> bool search(T value, T arr[], int size)
{
	for (int i = 0; i < size; i++)
		if (value == arr[i])
			return true;
	return false;
}
int main(void)
{
	int x[] = { 1,10,100,5,4 };
	if (search(100, x, 5))
		cout << "100이 배열 x에 포함되어 있다.";
	else
		cout << "100이 배열 x에 포함되어 있지 않다.";
}





실습문제 5.

#include <iostream>
using namespace std;
template<typename T> T* concat(T a[], int sizea, int b[], int sizeb)
{
	int sizec = sizea + sizeb;
	T* c = new T(sizec);
	for (int i = 0; i < sizea; i++)
		c[i] = a[i];
	for (int i = sizea; i < sizec; i++)
		c[i] = b[i];
	return c;
}





실습문제 6.

#include <iostream>
using namespace std;
template<typename T> T* remove(T src[], int sizeSrc, T minus[], int sizeMinus, int& retSize)
{
	int cnt = 0, idx = 0;
	bool* check = new bool(sizeSrc);
	for (int i = 0; i < sizeSrc; i++)
		check[i] = false;
	for (int i = 0; i < sizeSrc; i++)
	{
		for (int j = 0; j < sizeMinus; j++)
		{
			if (src[i] == minus[j])
			{
				check[i] = true;
				cnt++;
				break;
			}
		}
	}

	retSize = sizeSrc - cnt;
	T* ret = new T(retSize);
	for (int i = 0; i < sizeSrc; i++)
		if (!check[i])
			ret[idx++] = src[i];
	return ret;
}
int main(void)
{
	int arr[] = { 1,2,3,4,5,6 };
	int rem[] = { 3,6,1 };
	int size = 0;
	int* ptr;
	ptr = remove(arr, 6, rem, 3, size);
	for (int i = 0; i < size; i++)

		cout << ptr[i] << ' ';
}


728x90