에러는 없는데 실행시 출력결과가 모두 안뜨고 오류나요.
바름
문제1의 결과는 print_a 로
문제2의 결과는 print_b 로..
문제3의 결과는 print_c로 출력합니다.
그런데 문제2의 출력값이 이상하네요..이것도 가능하시면 좀 고쳐주세요
print_b의 출력값을 결정하는 함수는rankingNptr인데요 여기서
아래와 같은 소스가 이상한거 같습니다.문제1의 결과는 print_a 로
문제2의 결과는 print_b 로..
문제3의 결과는 print_c로 출력합니다.
그런데 문제2의 출력값이 이상하네요..이것도 가능하시면 좀 고쳐주세요
print_b의 출력값을 결정하는 함수는rankingNptr인데요 여기서
아래와 같은 소스가 이상한거 같습니다.
------------------------------------------------------------------
int n, x;
//┌----한배열안에서 요소가 큰순서대로 재배열한다-----┐
for(x=1;x6;x++){
for(n=0;n5;n++){
if(g_sum[n]g_sum[n+1])
{
change(&ranking[n],&ranking[n+1])int n, x;
//┌----한배열안에서 요소가 큰순서대로 재배열한다-----┐
for(x=1;x6;x++){
for(n=0;n5;n++){
if(g_sum[n]g_sum[n+1])
{
change(&ranking[n],&ranking[n+1])
---------------------------------------------------------
[문제]
5명의 중간,기말 성적을 합쳐 sum[5]배열에 저장한후
1.sum배열을 순서대로 출력하고(100점,30점...)
2.sum배열의 순대로 5명의 학번(rank={1,2,3,4,5})를 출력하고
(ex:100점,30점,80점 일때- 1번,3번,2번)
3.rank[5]배열을 가리키는(주소값을갖는) rankptr[5]포인터배열을 이용해 1번과 똑같이 출력합니다.
(ex: 출력하기위한 연산순서: rankptr-ptr-sum )
문제발생
에러는 하나도 안나는데 실행해보면 결과가 이상하고 오류같은게 뜹니다.
아래 빨강색 표시된곳을 바꾸니깐 결과값이 이상하게 됐습니다.
(배열 rankptr는 rank배열의 주소값을 갖는 포인터배열입니다. 즉 포인터를 가지고 있는 배열입니다.
또 파랑색으로 표시한곳은 이상하다고 생각한 곳입니다.
또 print_c 이함수도 좀 체크해주세요..
잘못된것이 있으면 고쳐주세요..
급합니다 ㅠㅠ 부탁드릴게요
다 못하시겠으면 몇개라도 해주세요
꼭 부탁드립니다.//━━━━━━━━━━━━━━━━━━━선언 시작━━━━━━━━━━━━━━━━━━//
#includeiostream
using namespace std;
void rankingNptr(int * const ,int * const ,int * const );//등수 정하고(3번 1등 4번2등...), rankptr로 rank 배열을 가리키게함/*☆*/
void sum(int * const ,int * const ,int, int * const );//sum (중간고사 , 기말고사, 요소수(5명),합을저장할 배열 )/*★*/
void change(int * const, int * const);/*★*/
void print_a(int);//번호순대로 성적(sum)을 찍음 1번 _점/*★*/
void print_b(int);// 성적순으로 성적(sum)을 찍음 1등 _점
void print_c(int,int);// print_c: rankprt에 있는 정보를 시작점으로 하여 rank 정보를 이용하여 grade 배열의 정보를 프린트 합니다.
// 결과는 print_a와 같으나 절차가 다름니다.(rankptr-rank-sum)//━━━━━━━━━━━━━━━━━━━함수 정의 시작━━━━━━━━━━━━━━━━//
/*☆*/
void rankingNptr(int * const g_sum, int * const ranking, int * const rankingptr ){//포인터배열을 받는 rankingptr가변수인데요 틀렸으면 고쳐주세요.
//sum,rank,rankptr 배열 받음;
int n, x;
//┌----한배열안에서 요소가 큰순서대로 재배열한다-----┐
for(x=1;x6;x++){
for(n=0;n5;n++){
if(g_sum[n]g_sum[n+1])
{
change(&ranking[n],&ranking[n+1]);//학번을 바꿔줌으로써 몇번이 몇등인지 알수있다.
}
}
}
//└-------------------------------------------------------------------------┘
//┌----rankptr로 rank 배열을 가리키게함------------┐
for(n=0;n5;n++)
{
rankingptr[n] = ranking[n];//rank 의 주소를 rankptr이 갖음
}//rankingptr이 ranking배열의 주소값을 갖게하려고 했습니다.틀렸으면 고쳐주세요..
//└----------------------------------------------------------------┘
}//END rankingNptr(int a[])/*★*/
// 한 배열속의 2개의 요소의 위치를 바꾸는 함수
void change(int * const a, int * const b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}// END change(int a[n],int a[n+1])/*★*/
//중간 기말의 합을 지정한 배열에 배정하는 함수
void sum(int * const m_grad, int * const l_grad, int n, int * const set_sum)//중간고사배열,기말고사배열,요소의 개수,합 배정할 배열명
{
int x;
//int *m,*l;
for(x=0 ; xn ; x++)
{
set_sum[x]= m_grad[x] + l_grad[x];
}// sum 배열에 중간,기말의 합을 배정함
}/*★*/
//번호순대로 성적을 출력 시키는 함수
void print_a(int * const g_sum){
int n;
cout번호순으로 성적을 출력.endl;
for(n=0;n5;n++)
{
coutn+1번. g_sum[n]점endl;
}
}// END print_a()/*★*/
//번호순대로 성적을 출력 시키는 함수
void print_b(int * const ranking){
int n;
cout성적순으로 학번을 출력.endl;
for(n=0;n5;n++)
{
coutn+1등. ranking[n]번endl;
}
}// END print_b()
//번호순대로 성적을 출력 시키는 함수
/*print_c :재배열된 rank 의 주소값을 갖는 포인터배열rankptr에서 값들(2,4,5,1,3)을 조건문(if)를이용해서 (1,2,3,4,5)로 나열시킨뒤 이 값을 차례로 sum[n]배열의 n에 대입해(sum함수가아닙니다) sum값을 얻어낸다.그후 그값들을 출력한다. 결국 순차대로 sum을 출력한다.*/
void print_c(int * const s_rankingptr,int * const s_sum){
int x, n, a[5];
for(x=0;x5;x++){
for(n=0;n5;n++){
if(s_rankingptr[n]s_rankingptr[n+1])/*포인터배열인 rankptr이 갖고있는 값을 비교하려고합니다. 혹시 *를 붙여서써야되나요?*/
{change(&s_rankingptr[n],&s_rankingptr[n+1]);}
}
}
for(n=0;n5;n++){
a[n]=(s_rankingptr[n]-1);
coutn+1번.s_sum[a[n]]점endl;
}
}
//━━━━━━━━━━━━━━main함수시작━━━━━━━━━━━━━━━━━━━━━//int main()//메인 함수 함수 입력 순서.
{
int m_grad[5]={10,40,20,50,30};//중간고사 성적 저장할 배열
int l_grad[5]={40,70,10,20,30};//기만고사 성적 저장할 배열
int rank[5]={1,2,3,4,5};
int *rankptr[5];
int get_sum[5];//{50,110,30,70,60}
//┏print_a┓
sum(m_grad, l_grad, 5, get_sum);//중간,기말의 합을 구한뒤
print_a(get_sum);//그합을 학번대로 출력한다.(1번. 50점,2번. 110점...)
//┏print_b┓
rankingNptr(get_sum,rank,* rankptr );// 합,번호,번호의 주소를 가리키는 포인터 배열
print_b(rank);
//┏print_c┓
print_c(*rankptr,get_sum);//int * const s_rankingptr,int * const s_grad
return 0;
}