C++로 구현한 스택, 배열, 포인터활용 식 연산 프로그램
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

C++로 구현한 스택, 배열, 포인터활용 식 연산 프로그램에 대한 보고서 자료입니다.

목차

1. 주어진 postfix 표기의 식을 입력해서 스택을 사용해서 주어진 식을 연산하는 알고리즘을 완성하고, 실습하시오.
2. 포인터를 사용하여 데이터구조 스택(STACK2)을 구현하고, 다른 연산(-,/)도 포함된 다음의 data를 처리하는 알고리즘으로 수정하여 실습하시오.
3. n개의 양의 정수를 random 함수로 발생한 집단을 X 라 할 때 X를 2 집단 A와 B로 분할해서 A에 속한 원소들의 합 a와 B에 속한 원소들의 합 B를 구한다. 이때 a와 b 의 차이가 주어진 기준값 T보다 작게 X를 나눌 수 있는지를 결정하는 알고리즘을 작성하고 실습하시오. 단, X의 분할은 임의로 하며, n>=10.

본문내용

수와 b_sum()이라는 함수를 만들어서 각 배열에 저장돼 있는 값을 더하였다. 이때 for 문안의 조건에 temp->room[0]과 temp->room[1]를 사용해 i의 시작과 끝을 정해주었다. a_sum()+b_sum()을 해준이유는 X를 다시 나눠줄 때 마다 X안의 값이 변하지 않다는 것을 보여주기 위해 나타내었다.
클래스 안에서 부가적으로 void increment()라는 함수를 만들었는데 이는 각 집단의 숫자들과 숫자들의 개수를 출력할 수 있도록 만들었다. 메인함수에서는 gap이라는 변수를 만들어서 각 집합의 차이를 저장할 수 있도록하였고 com이라는 Comp의 객체를 만들어 쉽게 참조할 수 있도록 하였다. n의 값. 즉, 숫자의 개수를 입력받아 객체com을 통해서 X node에 n개만큼의 난수를 저장하도록 하였고, 반복문 while을 사용하여 n이 10보다 작을 경우 다시 n값을 입력하여 반복하도록 하였다. 10보다 클경우는 먼저 각집단의 합이 큰것에서 작은 것을 빼주어 gap변수 안에 저장하도록 하였고 그 값이 기준값 T보다 작을 경우 각 집단의 정보와 비교연산횟수를 출력하게 하였다. 만약 기준값 T보다 각 집단의 숫자의 합의 차가 클경우에는 비교연산횟수를 위한 변수 cnt를 cnt++하여 증가시키고 다시 T보다 작을때까지 반복 할 수 있도록 작성하였다.
위의 결과에서 볼 수 있듯이 n의 값을 10 이하로 적었을 경우 조건문을 통해 다시 n값을 입력받게 하였고, n은 40으로 T는 200으로하여 각 집단에 난수를 임의로 나누어 각 집단의 합을 4번하여서 위와같은 결과가 출력이 되었다.
정리하자면 X집합안에 n개의 정수를 나눌 때 위치가 섞여서 나누어지고 나누어지는 부분도 임의로 나누어 지므로 입력할 숫자의 개수가 많거나 비교연산수가 적을 때 무한루프를 겪을 가능성을 최소로 하였다.
왼쪽 결과화면은 n을 100으로하고 T를 1로 하였을 때 결과이다
4.

- 이번 실습은 데이터 구조 STACK을 구현하여 소스를 작성하였고, 알고리즘을 효율적으로 작성할 수 있는지 실습하였다. 1번 문제에서는 배열을 사용해 STACK을 구현하였는데 기본적인 소스가 프린터 물에 있어서 구현하는 것에는 문제가 없었다. 다만 메인함수에서 숫자형태의 문자가 입력되면 아스키 코드 값이 입력되므로 변수 x에 저장되는 값을 숫자로 바꾸기 위해 작성된 LINE이 헷갈리긴 하였지만 어렵지 않게 이해 할 수 있었다. 그리고 2번째 문제는 포인터를 사용하여서 다른연산 (-,/)도 할 수 있도록 소스를 작성하는 것이었다. 입력하면 node를 생성해야하고 연산할때는 node 삭제하여서 STACK을 구현해야하였다. 그래서 처음에 생성되는 node를 z와head가 가리키도록 하고 계속 추가될 때 마다 z node로 해주고 삭제될때마다는 temp라는 임시node를 만들어서 head와 z가 가리키는 node를 유지시켜줌 으로써 소스를 작성 하였다. 기본적인 틀은 1과 비슷하여 쉽게 풀 수 있었다. 마지막 3번문제는 먼저 문제를 잘 이해하지 못하여서 걱정했었다. 먼저 어떻게 구현할지 알고리즘을 생각해보았다. X라는 node를 만들어 node안의 공간을 배열로 받아서 구현하는 게 쉬울 것 같았다.(다른 방법도 있긴 하겠지만 이게 최선인 것 같았다...) 또한 하면서 공간을 나눈부분을 같은 클래스의 다른 함수에서도 알아야 되는데 x_node함수 안에 선언된 변수를 다른함수에서 불러올 수 가 없으므로 고민하다가 temp라는 임시 node를 만들어 나눈 부분과 끝 부분을 배열[0],[1]이라는 공간에 저장하여 다른 함수에서 불러서 쓸 수 있도록 하였다. 특히 소스를 작성할 때 수를 생성하는 것과 생성된 수를 X집합에 넣는 부분(다시 호출할 경우 바뀌지 않고 처음에 랜덤숫자 그대로 유지), 그리고 X집합을 나누는 부분(다시 호출할 경우 임의로 나눔)을 랜덤함수를 사용하여서 하였는데 조건이 매우 여러 경우로 나뉘어 지므로 많은 어려움이 있었다. 그래서 책과 인터넷을 찾아보면서 srand()함수의 역할을 알게 되어서 반복 실행될경우 어떠한 조건일 때 랜덤수 고정시켜서 출력을할지 바꿔서 출력을 할지 매우 고민하면서 소스를 작성 하였다. 이렇게 알고리즘을 작성하여서 그룹A와 그룹 B로 나눌 수 있는 경우가 상당히 많아져서 원하는 결과값을 얻을 수 가 있었다.
이번 실습은 처음실습보단 상당히 어려웠다. 그래도 어려운 만큼 코딩실력이나 알고리즘을 구현하는 실력이 많이 늘게 된 것같았다.
  • 가격1,900
  • 페이지수9페이지
  • 등록일2020.12.09
  • 저작시기2007.8
  • 파일형식한글(hwp)
  • 자료번호#1141747
본 자료는 최근 2주간 다운받은 회원이 없습니다.
다운로드 장바구니