반응형

6.6> 동일한 크기의 배열을 변환하는 다음 2개의 static 멤버 함수를 가진 ArrayUtility2 클래스를 만들고 이 클래스를 이용하여 아래 결과와 같이 출력하도록 프로그램을 완성하라.

<코드>

#include <iostream>

 

using namespace std;

 

class ArrayUtility2{

public:

        static int* concat(int s1[], int s2[], int size);

        //s1 s2 연결한 새로운 배열을 동적 생성하고 포인터 리턴

        static int* remove(int s1[], int s2[], int size, int& retSize);

        //s1에서 s2 있는 숫자를 모두 삭제한 새로운 배열을 동적 생성하여 리턴, 리턴하는

        //배열의 크기는 retSize 전달. retSize 0 경우 NULL 리턴

};

int* ArrayUtility2::concat(int s1[], int s2[], int size){

        int *p=new int[size*2]; //동일한 크기의 배열이므로 size *2 배열을 동적 생성

        for(int i=0;i<size;i++){

               p[i]=s1[i]; //0~4 인덱스는 s1 초기화

               p[i+size]=s2[i]; //5~9 인덱스는 s2 초기화

        }

        return p; //동적배열을 가리키는 주소 리턴

}

int* ArrayUtility2::remove(int s1[], int s2[], int size, int& retSize){

        int i; int j; int count=0; //빼기 배열 만들 사용할 카운터

        for(i=0;i<size;i++){

               for(j=0;j<size;j++){

                       if(s1[i]==s2[j]){

                              s1[i]=NULL; //s2 원소를 s1 일일이 비교하여 같으면 NULL 교체

                              break; //어차피 1번겹치든 2번겹치든 빼는 것은 한번이기 때문에 break 가능

                       }

               }

        }

        for(i=0;i<size;i++){

               if(s1[i]!=NULL)

                       retSize++; //원소값이 NULL 아니면 retSize 증가

        }

        if(retSize==0) return NULL; //retSize 0이면 NULL포인터 리턴

        int *p=new int[retSize]; //retSize 크기의 인트형 배열 동적 할당

        for(i=0;i<size;i++){

               if(s1[i]!=NULL){ //s1[i] NULL 아니면

                       p[count]=s1[i]; //p[count] 대입

                       count++;

               }

        }

        return p; //동적배열을 가리키는 주소 리턴

}

int main(void){

        int x[5];

        int y[5];

        int i;

        int *conc; //합친 배열 주소 받음

        int *del; // 배열 주소 받음

        int size=sizeof(x)/sizeof(x[0]); //(4*5)/4=5

        int retSize=0; //초기화 안하고 참조에 쓰면 오류생김

        cout<<"정수를 5 입력하라. 배열 x 삽입한다>>";

        for(i=0;i<5;i++){cin>>x[i];} //배열 입력

        cout<<"정수를 5 입력하라. 배열 y 삽입한다>>";

        for(i=0;i<5;i++){cin>>y[i];}

        conc=ArrayUtility2::concat(x,y,size); //합친 배열

        for(i=0;i<size*2;i++){cout<<conc[i]<<" ";} //출력

        cout<<endl;

        del=ArrayUtility2::remove(x,y,size,retSize); // 배열

        cout<<"배열 x[]에서 y[] 결과를 출력한다. 개수는 "<<retSize <<endl;

        for(i=0;i<retSize;i++){cout<<del[i]<<" ";} //출력

        cout<<endl;

        return 0;

}

 

<결과창>




반응형
반응형

6.12> 겜블링 게임을 만들어보자. 두 사람이 게임을 진행한다. 두 사람의 이름은 처음에 키보드를 통해서 입력 받는다. 게임에 참여하는 사람은 Person클래스로 작성하도록 하라. 각 사람이 번갈아 가면서 게임을 진행한다. 각 사람이 자기 차례에서 <Enter> 키를 입력하면 프로그램은 3개의 난수를 발생시키고 이 3개의 숫자가 모두 같은 지 판단한다. 동일하다면 승자가 되며 게임을 끝낸다. 게임은 끝날 때까지 두 사람이 번갈아 가면서 진행한다. 숫자의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 때문에 편리를 위해 숫자의 범위는 0~3까지만 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package SecondHW;
import java.util.*//스캐너 사용 위한 임포트
class Person{String name;} //Person 클래스와 그 원소 문자열 name
public class Gembling {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in); //스캐너객체 s
        Person p1=new Person(); //Person 객체 를가리키는 레퍼런스 변수 p1
        Person p2=new Person(); //Person 객체 를가리키는 레퍼런스 변수 p2
        int rand[]= new int[3]; //사이즈3의 인트형 배열 rand
        int round=1//int형변수 round 선언 및 1로 초기화
        int who=0//int형변수 who 선언 및 0으로 초기화
        System.out.print("플레이어1의 이름을 입력하세요: ");
        p1.name=s.nextLine(); //p1.name을 nextLine으로 받음(개행문자 미포함)
        System.out.print("플레이어2의 이름을 입력하세요: ");
        p2.name=s.nextLine();//p2.name을 nextLine으로 받음(개행문자 미포함)
        while(true){
            who=round%2//who는 round를 2로나눈 나머지 즉 홀수면 p1, 짝수면 p2
            if(who==1){
                System.out.print(p1.name + "님 차례입니다. 엔터 입력>>");
            }
            else if(who==0){
                System.out.print(p2.name + "님 차례입니다. 엔터 입력>>");
            }
            String check=s.nextLine(); //문자열 check를 nextLine으로 받음(nextLine은 개행 미포함)
            //즉 엔터만 치면 빈 문자열이 됨.
            if(check.isEmpty()){  // isEmpty : 스트링길이0이면true, 아니면 false
                for(int i=0;i<3;i++//3번 반복
                {    rand[i]=(int)(Math.floor(Math.random()*4)); 
                // 균일한 확률을 위해 곱하기 4한 후 내림 사용
                    System.out.print(rand[i]+" ");} //각 원소 출력
                System.out.println();} //3개 출력후개행문자 출력
            if((rand[0]==rand[1])&&(rand[1]==rand[2])) //0번,1번,2번 원소가 전부 같으면
            {if(who==1){ //p1일때
                System.out.println(p1.name+"님의 승리입니다 축하합니다!" );
                break;} //승리축하문자 출력후 루프 탈출
            else if(who==0){//p2일때
                System.out.println(p2.name+"님의 승리입니다 축하합니다!" );
                break;}} //승리축하문자 출력후 루프 탈출
            round++//승리하지못했을시 round증가시키고 루프 반복
        }}}
 
cs






반응형

'컴퓨터 & 프로그래밍 & 전자공학 > JAVA' 카테고리의 다른 글

학점 계산  (0) 2017.06.19
가장 큰 수  (0) 2017.06.19
가위바위보  (0) 2017.06.19
대문자 개수 세기  (0) 2017.06.19
메소드 오버라이딩  (0) 2017.06.18
반응형

4.4 다음 두 개의 static 메소드를 가진 ArrayUtility2 클래스를 만들어보자. ArrayUtility2 클래스를 이용하는 테스트용 프로그램도 함께 작성하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package HW1_JAVA;
class ArrayUtility2{//s1과 s2를 연결한 새로운 배열 리턴
    static int[] concat(int s1[], int s2[]){ //int형배열을 리턴으로하는 메소드 concat(인자 int형배열 2개)
        int conc[]=new int[s1.length+s2.length]; //s1과 s2 길이를 더한 길이를 갖는 인트형 배열 conc
        int i; //int 형 변수 i 선언
        for(i=0;i<conc.length;i++//i=0부터 conc의 길이보다 작을 때까지 반복
        {
            if(i<=4//i가  4 이하이면 conc[i]에 s1[i] 대입
            conc[i]=s1[i];
            else    //i가 5이상이면 conc[i]에 s2[i-5] 대입
            conc[i]=s2[i-5];
        }
        return conc;}  //conc 배열 리턴
    static int[] remove(int s1[], int s2[]){ //s1에서 s2 배열의 숫자를 모두 삭제한 새로운 배열 리턴
        int i; int j; //인트형 변수 i,j 선언
        int s3[]=new int[s1.length]; //s1.length의 길이를 갖는 배열 s3 선언
        LABEL : for(i=0;i<s1.length;i++//i는 0부터 s1.length 미만까지 반복
        {
            for(j=0;j<s2.length;j++//j는 0부터 s2.length 미만까지 반복
            {
                if(s1[i]==s2[j])  //s1[i]와 s2[j]가 같으면 루프 중단 후 LABEL로 점프(증가식은 진행됨)
                    continue LABEL;
            }
            s3[i]=s1[i]; //s3[i]에 s1[i] 대입
        }
        return s3;} } //배열 s3 리턴
public class ArrUse {
    public static void main(String[] args) {
        ArrayUtility2 ut=new ArrayUtility2(); //ArrayUtility2 class의 객체와 레퍼런스 변수 선언
        int a[]={1,2,3,4,5}; //int형 배열 a 선언 및 초기화
        int b[]={3,4,5,6,7}; //int형 배열 b 선언 및 초기화
        int c[]=new int[a.length+b.length]; //int형 배열 c 선언
        int d[]=new int[a.length]; //int형 배열 d 선언
        int i; //int형 변수 i 선언
        c=ut.concat(a, b); //배열 c에 concat 메소드의 리턴값 대입
        d=ut.remove(a, b); //배열 d에 remove 메소드의 리턴값 대입
        for(i=0;i<c.length;i++//i=0부터 c.length 미만까지 반복
        {
            System.out.print(c[i]+" "); //c[i]와 띄어쓰기 출력
        }
        System.out.println(); // 개행문자 출력
        for(i=0;i<d.length;i++//i=0부터 d.length 미만까지
        {
            if(d[i]!=0//int형 배열은 0으로 자동초기화 되기 때문에 출력안하려면 논리판별
            System.out.print(d[i]+" "); //d[i]와 띄어쓰기 출력
        }}}
 
cs






반응형

'컴퓨터 & 프로그래밍 & 전자공학 > JAVA' 카테고리의 다른 글

추상 클래스  (0) 2017.06.18
상속 클래스  (0) 2017.06.18
직사각형 클래스  (0) 2017.06.18
돈 단위 나누기  (0) 2017.06.18
2차원 배열  (0) 2017.06.18
반응형

3.7>4x42차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 랜덤하게 생성하여 정수 16개를 배열에 저장하고 2차원 배열을 화면에 출력하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package HW1_JAVA;
public class Two_Dimensinal_Array { //Two_Dimensinal_Array class 선언
    public static void main(String[] args) {
        int darr[][]=new int[4][4]; //4 * 4 사이즈의 인트형 이차원배열 darr 선언
        int i=0int j=0//int 형 변수 i,j 선언 및 초기화
        for(i=0;i<4;i++)  //i는 0부터 3까지 반복
        {
            for(j=0;j<4;j++//j는 0부터 3까지 반복
            {
                darr[i][j]=(int)Math.round(Math.random()*9+1);
                //random메소드는 0.0이상0.1미만난수 반환 round메소드는 반올림
                System.out.print(darr[i][j]+"    "); //darr[i][j]출력 후 탭키 입력
            }
            System.out.println(); //개행문자 입력
        }
    }
}
 
 
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > JAVA' 카테고리의 다른 글

직사각형 클래스  (0) 2017.06.18
돈 단위 나누기  (0) 2017.06.18
정수 오름차순 정렬기  (0) 2017.06.18
하위 문자 모두 출력하기  (0) 2017.06.18
직사각형 충돌  (0) 2017.06.18
반응형

정적 지역 변수가 사용되는 하나의 용도는 함수가 처음 호출될 때 초기화를 딱 한번만 수행하는 것이다.

inited는 정적 변수이기 때문에 다음번의 호출에서도 그 값을 유지한다. 따라서 초기화 코드는 함수가 처음 호출될 때 한번만 실행된다. 이러한 구조를 사용하여 맨 처음 호출되는 경우에만 초기화를 수행하는 난수 발생 함수 get_random()을 작성하여 테스트하라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void get_random(void);
int main(void)
{
    get_random();
    get_random();
    get_random();
return 0;
}
void get_random(void)
{
    static int inited = 0;//한번만 초기화 됨
    if(inited==0)
    {
    inited=1;
    srand((unsigned)time(NULL));
    }
    printf("%d\n", rand());
}
cs




반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

입출금 프로그램  (0) 2016.08.04
조화 수열(harmonic series)  (0) 2016.08.04
주사위 던지기  (0) 2016.08.03
연산 횟수를 세는 계산기  (0) 2016.08.03
메뉴 시스템 만들기  (0) 2016.07.29

+ Recent posts