C,C++/PROJECT

Day02-04. C++ 2차원 포인터 활용. 성적관리 프로그램 ver1.0

너래쟁이 2018. 3. 6. 14:34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
 
void main()
{
 int a[2][3]={6,5,4,3,2,1};
 int i,j;
 int (*p)[3];
 
 p=a; //초기화
 
 for(i=0;i<2;i++)
 {
  for(j=0;j<3;j++)
  {
   cout<<a[i][j]<<"\t"<<p[i][j]<<"\n"
   cout<<*(a[i]+j)<<"\t"<<*(p[i]+j)<<"\n";
   cout<<*(*(a+i)+j)<<"\t"<<*(*(p+i)+j)<<"\n";
  }
  cout<<endl;
 }
}
cs



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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include<iostream>
using namespace std;
 
//함수 프로토타입 선언
void input(char (*name)[10],int (*score)[4],int num);
void oper(int (*score)[4],float *avg,int num);
void output(char (*name)[10],int (*score)[4],float *avg,int num);
 
void main()
{
 char (*name)[10];
 int (*score)[4];
 float *avg;
 int num;
 
 cout<<"몇 사람 :";
 cin>>num;
 
 name=new char[num][10];
 score = new int[num][4];
 avg = new float[num];
 
 input(name,score,num);
 oper(score,avg,num);
 output(name,score,avg,num);
 
 delete []name;
 delete []score;
 delete []avg;
}
void output(char (*name)[10],int (*score)[4],float *avg,int num)
{
 int i,j;
 
 system("cls");
 for(i=0;i<num;i++)
 {
  cout<<name[i]<<"\t";
  for(j=0;j<4;j++)
  {
   cout<<score[i][j]<<"\t";
  }
  cout<<avg[i]<<endl;  
 }
}
 
void oper(int (*score)[4],float *avg,int num)
{
 int i,j;
 for(i=0;i<num;i++)
 {
  score[i][3]=0;
  for(j=0;j<3;j++)
  {
   score[i][3+= score[i][j];
  }
  avg[i] =score[i][3]/3.f;   
 }
}
 
void input(char (*name)[10],int (*score)[4],int num)
{
 int i,j;
 
 for(i=0;i<num;i++)
 {
  cout<<"Name input :";
  cin>>name[i]; // *(name+i)
 
  for(j=0;j<3;j++)
  {
   if(j==0cout<<"Kor input :";
   else if(j==1cout<<"Eng input :";
   else  cout<<"Mat input :";  
 
   cin>>score[i][j];
   // *(score[i]+j),*(*(score+i)+j)
  }
 
 }
}
 
 
cs


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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream> 
 
using namespace std;
 
// 함수 선언부 (3. 입력 4. 연산 5. 출력)
void input(char (*name)[10], int (*score)[4], int num);
void oper(int (*score)[4], float *avg, int num);
void output(char (*name)[10], int (*score)[4], float *avg, int num);
 
void main()
{
    char (*name)[10];
    int (*score)[4];
    float *avg;
    int num;
 
    // 1. 인원수?
    cout << "인원수 : ";
    cin >> num;
 
    // 2. 메모리 할당
    name = new char[num][10]; // 한 행의 크기가 10인데 num개 만큼 메모리 할당
    score = new int[num][4]; // 한 행의 크기가 4인데 num개 만큼 메모리 할당
    avg = new float[num];
 
    // 3. 입력
    input(name, score, num);
    
    // 4. 연산
    oper(score, avg, num);
 
    // 5. 출력
    output(name, score, avg, num);
 
    // 6. 해제
    delete[] name;
    delete[] score;
    delete[] avg;
}
 
// 3. 입력
void input(char (*name)[10], int (*score)[4], int num)
{
    int i, j;
 
    for (i = 0; i<num; i++)
    {
        cout << "\nName input : ";
        cin >> *(name+i); // ==name[i]
 
        for (j = 0; j < 3; j++)
        {
           if(j==0cout<<"Kor input :";
           else if(j==1cout<<"Eng input :";
           else  cout<<"Mat input :";  
 
            cin >> *(*(score + i) + j); 
                 // == score[i][j] 
                 // == *(score[i]+j)
        }
 
        // 포인터 기준점 이동
        name += 10
        score += 4;
    }
}
 
// 4. 연산
void oper(int (*score)[4], float *avg, int num)
{
    for (int i = 0; i < num; i++)
    {
        *(*(score+i)+3= 0// 쓰레기값 초기화
 
        for (int j = 0; j < 3; j++)
        {
            // 합계 구하기
            *(*(score+i)+3+= *(*(score + i)+j);
        }
 
        // 평균 구하기
        *(avg + i) = *(*(score +  i) + 3/ 3.f;
 
        // 포인터 기준점 이동
        score += 4;
    }
}
 
// 5. 출력
void output(char (*name)[10], int (*score)[4], float *avg, int num)
{
 
    int i, j;
    for (i = 0; i < num; i++) {
 
        // 이름 출력
        cout <<"이름 : "<<*(name+i)<<"\n";
 
        // 국영수 합계 출력
        for (j = 0; j < 3++j) {
            cout << *(*(score + i)+j) << " ";
        }
        j = 3;
        cout <<"\n합계 : "<< *(*(score + i)+j)<< endl;
 
        
        // 평균 출력
        cout << "평균 : "<<*(avg + i) <<"\n" << endl;
        
        // 포인터 기준점 이동
        name += 10;
        score += 4;
    }
}
 
 
cs