프로그래밍/C,C++

[명품 C++ programming]2,3장 실습문제

수학가형 2022. 1. 6. 17:12

단원:

2. C++프로그래밍의 기본

3. 클래스와 객체

 

[실습 2.6]문자열을 2개 입력받고 두 개의 문자열이 같은지 검사하는 프로그램을 작성하라. 만일 같으면 "같습니다", 아니면 "같지 않습니다"를 출력하라.

코드:

#include<iostream>
#include<string>
 
int main()
{
std::string PW1;
std::string PW2;
 
std::cout << " 암호를 입력하세요.\n";
std::getline(std::cin, PW1);
std::cout << " 암호를 다시 한번 입력하세요.\n";
std::getline(std::cin, PW2);
 
if (PW1 == PW2
        std::cout << "맞았습니다.\n";  else
        std::cout << "틀렸습니다.\n";
 
return 0;
}

실행 결과:

 

 

[실습 3.5]랜덤 수를 발생시키는 Random 클래스를 만들자. Random 클래스가 생성자, next(), nextInrange()의 3개의 멤버 함수를 가지도록 작성하고 main()함수와 합쳐 하나의 cpp파일에 구현하라.

코드:

#include<iostream>
#include<cstdlib>
#include<ctime>
 
/*
srand((unsigned)time(0));  //실행시마다 seed 재생성
int n = rand();  //0에서 RAND_MAX(32767) 사이의 랜덤 정수 생성
*/
 
using namespace std;
 
class Random
{
public:
Random();
int next();
int nextInrange(int x, int y);
};
 
Random::Random()
{
 
}
 
int Random::next()
{
int out;
out = rand();
 
return out;
}
 
int Random::nextInrange(int x, int y)
{
int r = 0;
r = rand();
 
return (r % 3) + 2;  //3으로 나눈 나머지는 항상 0~2까지의 값을 가지므로 거기에 2를더함.

}
 
 
 
int main()
{
 
srand((unsigned)time(NULL));
 
 
Random r;
cout << "-- 0에서 " << RAND_MAX << "까지의 랜덤 정수 10" << endl;
for (int i = 0; i < 10; i++)
{
        int n = r.next(); //0에서 RAND_MAX(32767) 사이의 랜덤한 정수
        cout << n << " ";
}
 
cout << endl << endl << "-- 2에서 " << "4까지의 랜덤 정수 10 --" << endl;
for (int i = 0; i < 10; i++)
{
        int n = r.nextInrange(2, 4); //2에서 4 사이의 랜덤한 정수
        cout << n << " ";
}
cout << endl;
 
}

결과:

 

 

[실습 3.12]컴퓨터의 주기억장치를 모델링하는 클래스 Ram을 구현하려고 한다. Ram클래스는 데이터가 기록될 메모리 공간과 크기 정보를 가지고, 주어진 주소에 데이터를 기록하고(write), 주어진 주소로부터 데이터를 읽어 온다(read).

교재의 실행 결과를 참고하여 Ram.h, Ram.cpp, main.cpp로 헤더와 cpp를 분리하여 프로그램을 완성하라.

코드-Ram.h:

#include<iostream>
 
class Ram
{
        char mem[100 * 1024];  //100kb 메모리. 번지가 바이트이므로 char 사용
        int size;
 
public:
        Ram(); //mem 배열을 0으로 초기화하고 size 100*1024 초기화
        ~Ram(); //"메모리 제거됨" 문자열 출력
        char read(int address);  //address 주소의 바이트 메모리 리턴
        void write(int address, char value);  //address 주소에 바이트로 value 저장
};

코드-Ram.cpp:

#include"Ram.h"
 
Ram::Ram()
{
        Ram::size = 100 * 1024;
 
        for (int i = 0; i < size; i++)
        {
               mem[i] = 0;
        }
}
 
Ram::~Ram()
{
        std::cout << "메모리 제거됨";
}
 
char Ram::read(int address)
{
        return mem[address];
}
 
void Ram::write(int address, char value)
{
        mem[address] = value;
}

코드-main.cpp

#include"Ram.h"
 
int main()
{
        Ram ram;
        ram.write(100, 20);  //100번지에 20 저장
        ram.write(101, 30);  //101번지에 30 저장
 
        char res = ram.read(100) + ram.read(101);  //20+30=50
        ram.write(102, res);  //102번지에 50 저장
        std::cout << "102번지의 = " << (int)ram.read(102) << std::endl;  //102 번지값 출력
}

실행 결과:

 


문제 소스:

책정보, 명품 C++ Programming : 네이버 책 (naver.com)

 

명품 C++ Programming

C++는 1979년 BJARNE STROUSTRUP에 의해 “C WITH CLASSES”라는 이름으로 시작되었지만, 지금은 시스템 소프트웨어, 응용 소프트웨어, 게임, 임베디드 소프트웨어, 모바일 프로그램 등 소프트웨어의 전 분

book.naver.com