본문 바로가기

Programming/ C++

(C++) 성적 입/출력 다차원 프로그램

728x90
반응형

picture from Shutterstock

 

전에 만든 성적 입/출력을 다차원으로 만들어 더욱 편하게 코딩을 할 수있게 하였습니다.

 

(메인 함수)

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
#include<iostream>
using namespace std;
 
void input(char(*p_name)[10], int(*p_score)[4], float *p_avg, int num);
void output(char(*p_name)[10], int(*p_score)[4], float *p_avg, int num);
 
int main() {
    int num = 0;
    int sel = 0;
    int (*score)[4= NULL//포인터의 초기화
    char (*name)[10= NULL;
    float *avg = NULL;
 
 
 
    //메인 반복문
    while (sel != 3) {
        cout << "무엇을 하시겠습니까?" << endl;
        cout << "1. 입력\t" << "2. 출력\t" << "3. 종료" << endl;
        cin >> sel;
        switch (sel) {
        case 1cout << "몇명의 성적을 입력하시겠습니까?" << endl;
            cin >> num;
            name = new char[num][10];
            score = new int[num][4];
            avg = new float[num];
 
            input(name, score, avg, num); break//정보 입력
 
        case 2: output(name, score, avg, num); break//정보 출력
 
        case 3delete[] name;
            delete[] score;
            delete[] avg;
            cout << "종료합니다" << endl;
            exit(-1);
 
        defaultcout << "잘못된 입력입니다" << "\n" << endl;
        }
    }
 
}
cs
메인함수입니다. 전의 코딩과 별반 다를게 없으나, 메모리 동적할당(24~26)을 다차원으로 하였습니다.

(이전 코드와 비교)

1
2
3
4
5
6
7
 
        case 1cout << "몇명의 성적을 입력하시겠습니까?" << endl;
                cin >> num;
                name = new char[num * 10];
                score = new int[num * 4];
                avg = new float[num];
 
cs

 

 

 

(입력 함수)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void input(char (*p_name)[10], int (*p_score)[4], float *p_avg, int num) { //정보 입력
    for (int i = 0; i < num; i++) {
        cout << "이름을 입력하세요" << endl;
        cin >> p_name[i];
        p_score[i][3= 0;
        for (int j = 0; j < 3; j++) {
            cout << "성적을 입력하세요(국어, 영어, 수학)" << endl;
            cin >> p_score[i][j];
            p_score[i][3+= p_score[i][j];
        }
        p_avg[i] = p_score[i][3/ 3.f;
    
    }
}
cs

입력함수입니다. 매개변수를 다차원으로 받아 데이터 할당을 더욱 쉽게 할 수 있도록 하였습니다.

(이전 코드와 비교)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void input(char *p_name, int *p_score, float *p_avg, int num) { //정보 입력
    for (int i = 0; i < num; i++) {
        cout << "이름을 입력하세요" << endl;
        cin >> p_name ;
        p_score[3= 0;
        for (int j = 0; j < 3; j++) {
            cout << "성적을 입력하세요(국어, 영어, 수학)" << endl;
            cin >> p_score[j];
            p_score[3+= p_score[j];
        }
        p_avg[0= p_score[3/ 3.f;
        p_name += 10;
        p_score += 4;
        p_avg += 1;
    }
}
 
cs

 

 

 

(출력 함수)

1
2
3
4
5
6
7
8
9
void output(char (*p_name)[10], int (*p_score)[4], float *p_avg, int num) { //정보 출력
    for (int i = 0; i < num; i++) {
        cout << "이름 : " << p_name[i] << endl;
        for (int j = 0; j < 4; j++) {
            cout << "\t" << p_score[i][j];
        }
        cout << "\t" << p_avg[i] << endl;
    }
}
cs

출력함수입니다. 입력과 마찬가지로 매개변수를 다차원으로 받아 편하게 출력할 수 있도록 합니다. 또한 코드의 길이도 짧아집니다.

 

(이전 코드와 비교)

1
2
3
4
5
6
7
8
9
10
11
12
void output(char *p_name, int *p_score, float *p_avg, int num) { //정보 출력
    for (int i = 0; i < num; i++) {
        cout << "이름 : " << p_name << endl;
        for (int j = 0; j < 4; j++) {
            cout << "\t" << p_score[j];
        }
        cout << "\t" << *p_avg << endl;
        p_score += 4;
        p_name += 10;
        p_avg += 1;
    }
}
cs

 

이전 코드와 비교했을 겨우 다차원으로 프로그래밍 했을 때 코드도 짧아지고 데이터 할당도 더 편하게 할 수 있는것을 알 수 있습니다.  

반응형