본문 바로가기
대학/어서와 C++은 처음이지!

[어서와 C++은 처음이지!] chapter 03. 연습문제

by JJO.A 2022. 10. 4.

 PROGRAMMING EXERCISE(p.160)

10. “동전 던지기를 시뮬레이트하는 프로그램을 작성한다. 프로그램이 동전을 100번 던지고 동전의 각면이 나타나는 횟수를 세어 출려한다. 난수를 발생하여서 0 또는 1을 반환 하는 filp() 함수를 작성하여 사용하라. 프로그램이 동전 던지기를 올바르게 시뮬레이트 하는 경우, 동전의 각 면이 대략 절반정도 나타난다.

 

코드

#include<iostream>
#include<cstdlib>
#include<time.h>
using namespace std;
int flip();
	int main() {
		int frontCnt = 0, backCnt = 0;
		for (int i = 0; i < 100; i++) {
			int fliptemp = flip();	//함수 값을 변수에 저장
			//cout << fliptemp << endl;

			if (fliptemp == 1) frontCnt++;	//함수 반환 값이 1인 경우 앞면으로 간주
			else if (fliptemp == 0)backCnt++;	//함수 반환값이 0인 경우 뒷면으로 간주
		}
		cout << "동전의 앞면: " << frontCnt << endl;
		cout << "동전의 뒷면:" << backCnt << endl;
	}
	int flip() {
		srand((unsigned int)time(NULL));	//시드값을 현재 시간으로 지정
		return rand()%2;	//0과 1 사이의 값을 반환
	}

 

실행화면

 

실행횟수를 100으로 설정한 경우

PROGRAMMING EXERCISE(p.160) 10번

실행횟수를 1000000000으로 설정한 경우

PROGRAMMING EXERCISE(p.160) 10번


PROGRAMMING EXERCISE(p.163)

12. 사용자로부터 받은 문자열에서 각각의 문자가 나타나는 빈도를 계산하여 출력하는 프로그램을 작성하시오.

 

코드

#include<iostream>
#include<string>
using namespace std;
int main() {
	int counter[256] = { 0 };
	string s;

	cout << "문자열을 입력하시오.:";
	getline(cin, s);

	for (int i = 0; i < s.size(); i++) {
		counter[s[i]]++;
		
	}
	for (int i = 0; i < 128; i++) {
		if(counter[i]!=0)
		cout << (char)i << " : " << counter[i] << endl;
	}
	
}

 

실행화면

PROGRAMMING EXERCISE(p.163) 12번

 

PROGRAMMING EXERCISE(p.163) 12번


PROGRAMMING EXERCISE(p.164)

13. 사용자로부터 암호를 입려받는다. 사용자의 암호가 해킹에 대하여 안전한지의 여부를 검사한다. 만약 암호 안에 대문자, 소문자, 숫자가 모두 들어있으면 안전한 암호로 간주한다. 만약 사용자의 암호가 3가지 종류의 문자를 다 가지고 있지 않으면 프로그램은 보안을 위하여 더 강한 암호를 고려하라고 제안한다.

 

코드

#include<iostream>
using namespace std;
int main() {
	string password;
	int large = 0, small = 0, number = 0;

	cout << "암호를 입력하시오." << endl;
	cin >> password;

	//대문자 판별
	for (int i = 0; i < password.size(); i++) {
		if (isupper(password[i]) != 0)	//-> 대문자이면 [isupper : 대문자가 아니라면 0을 반환]
			large = 1;
		if (islower(password[i]) != 0 )	//-> 소문자이면 [islower : 소문자가 아니라면 0을 반환]
			small = 1;
		if (isdigit(password[i]) !=0)	//0~9까지의 숫자가 있을 경우  [반환값이 문자이면 0을 반환]
			number = 1;
	}
	if ( large == 1 && small ==1 && number ==1)
		cout << "안전합니다." << endl;
	else
		cout << "안전하지 않습니다." << endl;
	
	
}

실행화면

PROGRAMMING EXERCISE(p.164) 13번