본문 바로가기
개인공부/C++ 기초플러스

C++ Primer 10 Exercise

by 하고싶은건많은놈 2023. 2. 19.

01

// acount.h

#ifndef ACOUNT_H_
#define ACOUNT_H_

#include <string>

class Acount
{
	private :
		std::string name;
		std::string acount_num;
		double balance;

	public :
		Acount(const std::string & client, const std::string & num, double bal = 0.0);
		void show(void) const;
		void deposit(double cash);
		void withdraw(double cash);
};

#endif
// acount.cpp

#include <iostream>
#include "acount.h"

Acount::Acount(const std::string & client, const std::string & num, double bal)
{
	name = client;
	acount_num = num;
	balance = bal;
}

void Acount::show() const
{
	using std::cout;
	using std::endl;

	cout << "계좌 정보를 출력합니다.\n";
	cout << "name : " << name << endl;
	cout << "acount : " << acount_num << endl;
	cout << "balance : " << balance << endl;
}

void Acount::deposit(double cash)
{
	balance += cash;
}

void Acount::withdraw(double cash)
{
	balance -= cash;
}
// useaccnt.cpp

#include <iostream>
#include <cctype>
#include "acount.h"

int main()
{
	using namespace std;

	Acount ac("ABC", "1234-5678", 100);
	ac.show();

	ac.deposit(1000);
	ac.show();
	
	ac.withdraw(500);
	ac.show();

	return 0;
}

02

// name.h

#ifndef NAME_H_
#define NAME_H_

#include <string>

using std::string;

class Person
{
	private:
		static const int LIMIT = 25;
		string lname;
		char fname[LIMIT];
	public:
		Person() {lname = ""; fname[0] = '\0';};
		Person(const string & ln, const char * fn = "Heyyou");
		void Show() const;
		void FormalShow() const;
};

#endif
// name.cpp

#include <iostream>
#include "name.h"

Person::Person(const std::string & ln, const char * fn)
{
	lname = ln;
	strcpy(fname, fn);
}

void Person::Show() const
{
	std::cout << fname << " " << lname << std::endl;
}

void Person::FormalShow() const
{
	std::cout << lname << ", " << fname << std::endl;
}
// usename.cpp

#include <iostream>
#include "name.h"

int main()
{
	using namespace std;

	Person one;
	Person two("Smythecraft");
	Person three("Dimwiddy", "Sam");

	one.Show();
	one.FormalShow();
	cout << endl;

	two.Show();
	two.FormalShow();
	cout << endl;

	three.Show();
	three.FormalShow();
	cout << endl;

	return 0;
}

03

// golf.h

#ifndef GOLF_H_
#define GOLF_H_

class Golf
{
	private:
		static const int Len = 40;
		char fullname[Len];
		int handicap;
	public:
		Golf();
		Golf(const char * fn, const int hc);
		int setgolf();
		void sethandicap(int hc);
		void showgolf() const;
};

#endif
// golf.cpp

#include <iostream>
#include "golf.h"

Golf::Golf()
{
}

Golf::Golf(const char * fn, const int hc)
{
	strcpy(fullname, fn);
	handicap = hc;
}

int Golf::setgolf()
{
	using std::cout;
	using std::cin;

	char name[50];
	cout << "이름을 입력하세요 : ";
	cin.getline(name, 49);

	if (name[0] == '\0')
	{
		cout << "입력을 종료합니다.\n";
		std::cin.clear();
		return 0;
	}

	int hc;
	cout << "핸디캡을 입력하세요 : ";
	cin >> hc;
	cin.get();
	
	Golf temp(name, hc);
	*this = temp;

	return 1;
}

void Golf::sethandicap(int hc)
{
	handicap = hc;
}

void Golf::showgolf() const
{
	using std::cout;
	using std::endl;

	cout << "이름 : " << fullname << endl;
	cout << "핸디캡 : " << handicap << endl;
}
// usegolf.cpp

#include <iostream>
#include "golf.h"

int main()
{
	Golf arr[4];
	int i;

	for (i = 0; i < 3; i++)
	{
		if (arr[i].setgolf() == 0)
			break;
	}

	arr[0].sethandicap(100);

	for (int j = 0; j < i; j++)
		arr[j].showgolf();

	return 0;
}

04

// sales.h

#ifndef SALES_H_
#define SALES_H_

namespace SALES
{
	class Sales
	{
		private:
			static const int QUARTERS = 4;
			double sales[QUARTERS];
			double average;
			double max;
			double min;
		public:
			Sales();
			Sales(const double ar[], int n);
			void setSales();
			void showSales() const;
	};
}

#endif
// sales.cpp

#include <iostream>
#include "sales.h"

double cal_mean(const double ar[], int n);
double cal_max(const double ar[], int n);
double cal_min(const double ar[], int n);

namespace SALES
{
	Sales::Sales()
	{
	}

	Sales::Sales(const double ar[], int n)
	{
		int small = n < 4 ? n : 4;
		int big = n > 4 ? n : 4;

		for (int j = 0; j < big; j++)
		{
			if (j < small)
				sales[j] = ar[j];
			else
				sales[j] = 0;
		}
		average = cal_mean(sales, small);
		max = cal_max(sales, small);
		min = cal_min(sales, small);
	}

	void Sales::setSales()
	{
		using std::cout;
		using std::cin;

		double temp_sales[QUARTERS];

		for (int i = 0; i < 4; i++)
		{
			cout << i + 1 << "분기 판매액을 입력하세요 : ";
			cin >> temp_sales[i];
		}
		average = cal_mean(temp_sales, 4);
		max = cal_max(temp_sales, 4);
		min = cal_min(temp_sales, 4);

		Sales temp(temp_sales, QUARTERS);
		*this = temp;
	}

	void Sales::showSales() const
	{
		using std::cout;

		cout << std::endl;
		for (int i = 0; i < 4; i++)
			cout << i + 1 << "분기 판매액은 " << sales[i] << "$ 입니다.\n";
		cout << "평균은 " << average << "$ 입니다.\n";
		cout << "최대값은 " << max << "$ 입니다.\n";
		cout << "최소값은" << min << "$ 입니다.\n";
	}
}

double cal_mean(const double ar[], int n)
{
	double sum = 0;
	for (int i = 0; i < n; i++)
		sum += ar[i];
	return sum / n;
}

double cal_max(const double ar[], int n)
{
	double max = 0;
	for (int i = 0; i < n; i++)
	{
		if (max < ar[i])
			max = ar[i];
	}
	return max;
}

double cal_min(const double ar[], int n)
{
	double min = INT_MAX;
	for (int i = 0; i < n; i++)
	{
		if (min > ar[i])
			min = ar[i];
	}
	return min;
}
// sales_main.cpp

#include <iostream>
#include "sales.h"

int main(void)
{
	SALES::Sales arr1;
	arr1.setSales();
	arr1.showSales();

	double ar[3] = {1.1, 2.2, 3.3};

	SALES::Sales arr2(ar, 3);
	arr2.showSales();

	return 0;
}

05

// stack.h

#ifndef STACK_H_
#define STACK_H_

struct customer{
	char fullname[35];
	double payment;
};

typedef customer Item;

class Stack
{
	private:
		enum {MAX = 10};
		Item items[MAX];
		int top;

	public:
		Stack();
		bool isempty() const;
		bool isfull() const;
		bool push(const Item & item);
		bool pop(Item & item);
		void total_sum(int & total) const;
};

#endif
// stack.cpp

#include <cstring>
#include "stack.h"

Stack::Stack()
{
	top = 0;
}

bool Stack::isempty() const
{
	return top == 0;
}

bool Stack::isfull() const
{
	return top == MAX;
}

bool Stack::push(const Item & item)
{
	if (top < MAX)
	{
		strcpy(items[top].fullname, item.fullname);
		items[top++].payment = item.payment;
		return true;
	}
	else
		return false;
}

bool Stack::pop(Item & item)
{
	if (top > 0)
	{
		item = items[--top];
		return true;
	}
	else
		return false;
}

void Stack::total_sum(int & total) const
{
	total += items[top].payment;
}
// usestack.cpp

#include <iostream>
#include "stack.h"

int main(void)
{
	using namespace std;
	Stack st;
	Item temp;
	char ch;
	int total = 0;

	cout << "지불 내역을 추가하려면 A, 상환 처리하려면 P, \n"
		 << "종료하려면 Q를 입력하십시오.\n";
	while (cin >> ch && toupper(ch) != 'Q')
	{
		while (cin.get() != '\n')
			continue;
		if (!isalpha(ch))
		{
			cout << '\a';
			continue;
		}
		switch (ch)
		{
			case 'A':
			case 'a': cout << "지불할 고객의 이름을 입력하십시오 : ";
					  cin.getline(temp.fullname, 35);
					  cout << "지불할 금액을 입력하십시오 : ";
					  cin >> temp.payment;
					  if (st.isfull())
					  	cout << "스택이 가득 차 있습니다.\n";
					  else
					  	st.push(temp);
					  break;
			case 'P':
			case 'p': if (st.isempty())
					  	cout << "스택이 비어있습니다.\n";
					  else {
						st.pop(temp);
						st.total_sum(total);
						cout << "#" << temp.fullname << " 고객의 상환 처리가 완료되었습니다.\n";
						cout << "현재까지의 수입은 " << total << "원입니다.\n";
					  }
					  break;
		}
		cout << "지불 내역을 추가하려면 A, 상환 처리하려면 P, \n"
			 << "종료하려면 Q를 입력하십시오.\n";
	}
	cout << "총 수입은 " << total << "원입니다.\n";
	cout << "프로그램을 종료합니다.\n";
	return 0;
}

06

// move.h

#ifndef MOVE_H_
#define MOVE_H_

class Move
{
	private:
		double x;
		double y;
	public:
		Move(double a = 0, double b = 0);
		void showmove() const;
		Move add(const Move & m) const;
		void reset(double a = 0, double b = 0);
};

#endif
// move.cpp

#include <iostream>
#include "move.h"

Move::Move(double a, double b)
{
	x = a;
	y = b;
}

void Move::showmove() const
{
	std::cout << "x : " << x << std::endl;
	std::cout << "y : " << y << std::endl;
}

Move Move::add(const Move & m) const
{
	double newx;
	double newy;

	newx = x + m.x;
	newy = y + m.y;

	Move newmove(newx, newy);
	return newmove;
}

void Move::reset(double a, double b)
{
	x = a;
	y = b;
}
// usemove.cpp

#include <iostream>
#include "move.h"

int main(void)
{
	using namespace std;
	Move a;
	Move b(11.11, 22.22);

	a.showmove();
	b.showmove();
	Move c = a.add(b);

	c.showmove();
	c.reset();
	c.showmove();
	
	return 0;
}

07

// plorg.h

#ifndef PLORG_H_
#define PLORG_H_

class Plorg
{
	private:
		static const int LIMIT = 20;
		char name[LIMIT];
		int ci;
	public:
		Plorg();
		Plorg(const char * newname);
		void change_ci(int num);
		void show() const;
};

#endif
// plorg.cpp

#include <iostream>
#include "plorg.h"

Plorg::Plorg()
{
	strcpy(name, "Plorga");
	ci = 50;
}

Plorg::Plorg(const char * newname)
{
	strcpy(name, newname);
	ci = 50;
}

void Plorg::change_ci(int num)
{
	ci = num;
}

void Plorg::show() const
{
	std::cout << "name : " << name << std::endl;
	std::cout << "CI : " << ci << std::endl;
}
// useplorg.cpp

#include <iostream>
#include "plorg.h"

int main(void)
{
	using namespace std;
	Plorg a;
	Plorg b("newplorg");

	a.show();
	b.show();

	a.change_ci(100);
	b.change_ci(1000);

	a.show();
	b.show();
	
	return 0;
}

08

// list.h

#ifndef LIST_H_
#define LIST_H_

typedef int Item;

class List
{
	private:
		static const int MAX = 10;
		Item items[MAX];
		int top;
	public:
		List();
		bool isempty() const;
		bool isfull() const;
		void add(const Item &);
		void show() const;
		void visit(void (*pf)(Item &));
};

#endif
// list.cpp

#include <iostream>
#include "list.h"

List::List()
{
	top = 0;
}

bool List::isempty() const
{
	return top == 0;
}

bool List::isfull() const
{
	return top == MAX;
}

void List::add(const Item & item)
{
	if(top < MAX)
		items[top++] = item;
}

void List::visit(void (*pf)(Item &))
{
	for(int i = 0; i < top; i++)
		pf(items[i]);
}

void List::show() const
{
	if(isempty())
		std::cout << "리스트가 비어있습니다.\n";
	else
	{
		for(int i = 0; i < top; i++)
			std::cout << "Item #" << i + 1 << ": " << items[i] << "\n";
	}
}
// uselist.cpp

#include <iostream>
#include "list.h"

void sqr(int & x){ x *= x; };

int main(void)
{
	List lst;
	int tmp;
	std::cout << "숫자를 입력하십시오 (q 입력시 종료됩니다) : ";
	while(std::cin >> tmp)
	{
		lst.add(tmp);
		if(lst.isfull()) break;
		std::cout << "숫자를 입력하십시오 (q 입력시 종료됩니다) : ";
	}
	lst.show();
	lst.visit(sqr);
	lst.show();

	return 0;
}

'개인공부 > C++ 기초플러스' 카테고리의 다른 글

C++ Primer 11 Exercise  (0) 2023.02.19
C++ Primer 11  (0) 2023.02.19
C++ Primer 10  (0) 2023.02.19
C++ Primer 09 Exercise  (0) 2023.02.19
C++ Primer 09  (0) 2023.02.19

댓글