C++/Report

3장 연습문제.

gandus 2010. 4. 2. 22:09

1. 0이 아닌 3개의 좌표값(x1,y1)(x2,y2)(x3,y3)를 입력받아서 삼각형을 만들 수 있는지를 검사하는 프로그램을 작성하라.

 

// (x1,y1), (x2, y2) 두점으로선의기울기는(y2-y1)/(x2-x1) 이다.

#include<iostream>

using namespace std;

void main()

{

int x[4] = {0}; // x좌표저장

int y[4] = {0}; // y좌표저장

double g[3]; // gradient(기울기)

double check; // 0 계산을 방지

 

for(int i=1; i<= 3; i++) // 3개의좌표값을입력받는다.

{

cout<<"x"<<i<<"과"<<"y"<<i<<"의좌표를입력하시오. : ";

cin>>x[i]>>y[i];

} cout<<endl;

 

for(int i=1; i< 3; i++) // 오류를체크

{

check = (double) (x[i+1] - x[i]);

// 정수를 0으로나누면에러나서미리방지.

 

if( check == 0 ) // 0으로 연산시 종류시킨다.

{

cout<<"정수를0으로나누게되어서종료합니다.\n"<<endl;

break;

}

else

{

g[i] = (double) ( (y[i+1] - y[i]) / (x[i+1] - x[i]) );

continue;

}

}

if(g[1] == g[2])

cout<<"삼각형이될수없습니다. !!"<<endl;

else

cout<<"삼각형이될수있습니다. !!\n" << endl;

 

}

2. 0과 1로 되어 있는 2진수를 입력 받아서 10진수로 변환하는 프로그램을 작성하여보자.

여기서 2진수 문자열로 입력받는 것이 아니라 정수로 입력받는다고 가정하라. 따라서 나머지 연산자 %와 나누기 연산자 /를 이용하면 2진수의 각 자리수를 분리할 수 있다.

#include <iostream>

using namespace std;

void main()

{

int num, i=0, j=0, temp;

int bcd=1, arr[200]={0}, result=0;

 

cout<<"2진수(0과1)를입력하시오: "

cin>>num; cout<<endl;

temp = num;// 2진수값저장

 

while(num) // num 을계속초기화하면서0이되면정지한다.

{

arr[i] = num % 10; // 나머지연산자로1값부터하나씩넣음

num = num / 10;

i++;

}

while(i--)

{

result += arr[j] * bcd; // 10진수로변환

bcd*=2; // 자릿수를올린다.

j++;

}

 

cout<<"입력한2진수"<<temp <<" 는10진수로"<<result<<"입니다."<< endl;

}

 

 

3. 사용자로부터 하나의 문자를 입력받아서 문자가 ‘R'이면 사강형의 면적을 계산하고 ’T'이면 삼각형의 면적을, ‘C'이면 원의 면적을 계산한다. 면적을 계산하는데 필요한 숫자들은 사용자로부터 입력받는다.

 

#include<iostream>

using namespace std;

 

#define PI 3.14

 

void main()

{

int width, height, result;

char check=NULL;

 

cout<<"사각형(R), 삼각형(T), 원(C)입니다."<<endl;

cout<<"면적을구할도형을선택하시오. : "

cin >> check; cout<<endl;

 

if(check == 'C' || check == 'c')

{

cout<<"반지름(원) 길이를입력하시오.: " cin>>width;

}

else

{

cout<<"가로,세로(사각형), 밑변,높이(삼각형) 길이를입력하시오. : " cin>>width>>height;

}

 

switch(check)

{

case 'R' :

case 'r' :

result = width * height;

cout<<"사각형의면적은"<<result<<"cm입니다."<<endl<<endl;break

 

case 'T' :

case 't' :

result = width * height /2 ;

cout<<"삼각형의면적은"<<result<<"cm입니다."<<endl<<endl;break

 

case 'C' :

case 'c' :

result = width * width * PI ;

cout<<"원의면적은"<<result<<"cm입니다."<<endl<<endl;break

 

default :

cout<<"잘못입력했습니다. !!!! R, T, C 중입력하시오. "<<endl;break

}

}

  

4. 컴퓨터와 가위, 바위, 보 게임을 하는 프로그램을 작성하라. 컴퓨터는 사용자에게 알리지 않고 가위, 바위, 보 중에서 임으로 하나를 선택한다. 사용자는 프로그램의 입력 안내 메시지에 따라서, 3개 중에서 하나를 선택한다. 사용자의 선택이 끝나면 컴퓨터는 누가 무엇을 선택하였고, 누가 이겻는지, 비겻는지를 알려준다.

 

#include <iostream>

#include <ctime>

#include <cstdlib>

using namespace std;

 

void main()

{

int user, com;

srand((unsigned)time(NULL)); // 시간을기준으로난수생성

 

while(1)

{

com = rand() % 3 +1;

cout<<"가위(1) 바위(2) 보(3) 종료(4) 입력하시오. : "

cin>>user; cout<<endl;

 

if(user == 4) // 프로그램종료

{

cout<<"프로그램을종료합니다."<<endl<<endl;break

}

else if( user != 1 && user != 2 && user != 3 ) // 재입력

{

cout<<"잘못입력했습니다."<<endl<<endl;continue

}

else if(user == com) // 무승부

{

cout<<"컴퓨터vs 사람결과는Draw!!"<<endl<<endl; continue

}

else // 그외처리

{

if(com == 1) // 컴퓨터가위

{

if(user == 2)

cout<<"User 의승리입니다. 축하드립니다^^\n\n"

else if(user == 3)

cout<<"컴퓨터의승리입니다. 다음기회에..\n\n"

}

else if(com == 2) // 컴퓨터바위

{

if(user == 1)

cout<<"컴퓨터의승리입니다. 다음기회에..\n\n"

else if(user == 3)

cout<<"User 의승리입니다. 축하드립니다^^\n\n"

}

else// 컴퓨터보

{

if(user == 1)

cout<<"User 의승리입니다. 축하드립니다^^\n\n"

else if(user == 2)

cout<<"컴퓨터의승리입니다. 다음기회에..\n\n"

}

}

}

}

   

5. 사용자로부터 정수를 입력받아서 각 자리수를 영어로 출력하는 프로그램을 작성하라. 예를 들어서 정수 120이 입력되었다면 화면에 one two zero를 출력한다.

 

#include <iostream>

using namespace std;

 

void main()

{

int num, i=0;

int arr[255]={0};

char cnum[10][6] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

 

cout<<"정수를입력하시오: " cin >> num;cout<<endl;

 

while(num)

{

arr[i] = num % 10;

num = num / 10;

i++;

}

while(i--)

{

cout<< cnum[arr[i]]<<" "

}

cout<<endl;

}