이번 2차과제의 첫 문제는
1부터 20사이의 자연수를 난수로 배열에 넣은 후, 4*5배열값에 넣은 후, 행끼리 정렬을 시켜야합니다.
단 이문제에서는 메모리할당은 1번만 일어나야하고, 배열도 하나만 사용해야하고, 추가적인 배열을 사용하면 안됩니다.
이 문제의 조건을 만족하기위해 제가 사용한것은
랜덤함수사용, 시간관련함수사용, 메모리 할당 및 해제, 정렬입니다.
#include<iostream>
#include<stdlib.h>//랜덤
#include<time.h>//매시도 마다 다른값
using namespace std;
int main()
{
int* array_2D;
int* row[4] = { 0,0,0,0 };
array_2D = new int[20];
srand((unsigned int)time(NULL));//매시도마다 다른값
for (int i = 0; i < 20; i++)
{
*(array_2D + i) = rand() % 20 + 0;//랜덤값
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
cout << *(array_2D + 4 * i + j + i) << "\t";//랜덤값 출력
}cout << "\n";
}
cout << "\n";
row[0] = &array_2D[0];
row[1] = &array_2D[5];
row[2] = &array_2D[10];
row[3] = &array_2D[15];
for (int i = 0; i <= 3; i++)//행 오름차순
{
for (int j = 1; j <= 4; j++)//정렬
{
for (int k = j; k >= 1; k--)
{
int save;
if (*(row[i] + k) < *(row[i] + k - 1))
{
save = *(row[i] + k);
*(row[i] + k) = *(row[i] + k - 1);
*(row[i] + k - 1) = save;
}
}
}
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
cout << row[i][j] << "\t";
}cout << "\n";
}
cout << "\n";
delete[]array_2D;//메모리 해제
}
이번에는 저번 1차과제에서 했던 할당과 다르게 malloc free가 아닌 new delete를 사용한것을 볼 수 있습니다.
저는 0~20까지의 랜덤값을 array_2D에 int값 20개가 들어가게 할당을 해주었습니다.
그리고 array_2D에 0, 5,10,15번째 주소값을 각행을 나타내는 row[0],row[1],row[2],row[3]을 준 후, 각 행마다 정렬을 시켰습니다.
여기서 제가 힘들어 했던 부분은 array_2D에 0, 5,10,15번째 주소값을 각행 을 나타내는 row[0],row[1],row[2],row[3]을 주는 부분입니다. (ex : row[0] = &array_2D[0];)
포인터 배열에 관한 자료를 조금 더 찾아보고 공부하겠습니다.
정렬은 구현하기 간단한 버블정렬을 사용했습니다.
결과화면 입니다.
#이 문제의 출처는 kw대학교 컴퓨터정보공학부 2021년 1학기 객체지향 프로그래밍 과제 문제입니다.
2-3 함수포인터 void(*fp)() 사용 (0) | 2021.07.20 |
---|---|
2-2 단어장 만드는 프로그램 (0) | 2021.07.15 |
1-8 뱀게임 (0) | 2021.07.13 |
1-7 1차나 상수식을 검증하는 프로그램 (0) | 2021.07.12 |
1-6 체크섬을 구하는 문제 (0) | 2021.07.09 |
댓글 영역