PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2016/11/26 09:36:27
Name 2시퇴근
Subject [질문] C++ 질문드립니다.
안녕하세요

전공은 상경계열이나, 프로그래밍을 배우고 싶어서 방통대를 등록해서 다니고있습니다.
C++ 과제를 해야하는데... 아직 잘 이해되지 않는 부분이 많으나 주변에 물어볼사람이 없네요

과제의 간략 내용은 다음과 같습니다.

- 아래 내용을 클래스를 설계해서 프로그램을 작성
1. 음식점을 등록(10개 한정)
2. 등록된 음식점을 선택하여 1~5점 점수 등록
3. 등록된 곳 중 무작위로 추천(식당이름, 평점, 점수별 인원 출력)
4. 등록된 곳 중 평점 3점 이상 음식점 중 무작위로 추천

<Guide.h>
  class Guide
     { private:
           char name[10];  //음식점 배열
           int score[100];   //점수 배열
        public:
            void insert()   //음식점 등록
            void print()    //등록된 음식점 출력
            void eval()    //평점 등록
            void recom() //음식점 추천
            void grecom() //3점이상 음식점 추천

위와 같이 설계하려하는데 음식점과 점수를 각각의 배열로 등록하는게 맞을지,
기초가 모자라는지 구현이 안되네요.
염치는 없지만, 과제를 좀 더 진행할 수 있도록 원리에 대한 힌트라도 주시면 감사하겠습니다.


통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
AngelGabriel
16/11/26 09:48
수정 아이콘
일단 설계는 제대로 하신것 같습니다만?

다만 문제가 될 소지가 있는 이야기라면, 점수 등록이 음식점과 1:1 매칭을 하는지, 아니면 음식점 1 : 점수 등록 다수의 1대 다 매칭인지가 좀 모호하긴 합니다. 그에 따라서는 음식점 클래스 밑에 별도의 가변 배열(STL에서 지원하는 List나 Vector 컨테이너 쓰면 되지만요.)을 써야 할 필요성이 있긴 하겠네요. 물론 1:1 대응이면 상관없다고 봅니다.
2시퇴근
16/11/26 09:56
수정 아이콘
음식점과 점수는 1:다 매칭입니다. 말씀해주신 List 나 Vector는 아직 배우지 않았습니다..
이걸 어떻게 매칭 시켜야할지 감이 안서네요... 빠른 답변 감사드립니다.
AngelGabriel
16/11/26 10:02
수정 아이콘
너무 어렵게 접근하시는것 같습니다;;;
일단 지금 그대로 진행해보시고 안 되시면 또 한번 물어보는 식으로 진행해 보시길 바랍니다. 쉬운 것도 한번에 뚝딱 되는거 아니니까요.
2시퇴근
16/11/26 10:57
수정 아이콘
넵.. 공부를 많이 못했더니 저부분 진행하는것도 힘드네요. 감사합니다!
16/11/26 10:32
수정 아이콘
제가 이해한 게 맞다면 yelp 같은 시스템이겠네요? 등록된 음식점이 10개 있고, 음식점마다 임의의 수의 사람들이 평점을 주는데, 예컨대 12명은 1, 14명은 2, 40명은 3, 53명은 4, 1명은 5점을 을지면옥에다 주는, 그런 식이요.

저라면 대충 음식점을 위한 클래스를 만들고 그 위에 가이드 클래스를 올릴 것 같습니다.
class Restaurant {
public:
Restaurant (std::string &name);
const bool register (const int score, const int nPersons = 1);
const double avrScore () const; // average score
void print (std::string &print_msg) const; // filling print_msg with a printable message
private:
/**
* scoreCount[i-1] is the number of persons who rate i to this restaurant
* int array might be OK here but better improve with using a hash table
*/
int scoresCount[5];
};

가이드 클래스의 private은..
Restaurant *restaurants[10];
정도가 좋겠네요. 음식점이 몇 개일지는 런타임에 결정됩니다 6개만 등록하면 음식점이 6개만 존재해야 하는데
Restaurant restaurants[10];
이렇게 하면 두 개의 문제가 생깁니다. 하나는 음식점이 항상 10개 존재한다는 거고, 두번째는 가이드 클래스가 만들어질 때, 음식점 클래스도 default constructor (Restaurant::Restaurant (void))를 call해서 만든다는 거구요.

그래서 가이드의 컨스트럭터에서 restaurants[10]의 모든 엘리먼트를 NULL로 초기화 하시고, 음식점 하나 하나 등록할 때마다 아직도 NULL인 슬롯을 찾고, 그런 게 있다면 new Restaurant (name)으로 하나 만들어 거기다 집어넣고, 가이드의 컨스트럭터에서 NULL이 아닌 restaurants array의 엘리먼트를 모두 delete 해주시면 됩니다. 안 해주셔도 이 정도 사이즈와 라이프 타임의 프로그램엔 문제가 없습니다.

물론 더 나은 방법은 stl에 있는 hash table과 함께 binary search tree 같은 걸 쓰는 건데... 이 경우에는 operator overloading도 필요하고 여러 가지로 복잡하니까 제가 권해드리는 방법은 음식점의 포인터 배열을 가이드에 넣고, 음식점이 그 엘리먼트에 존재하지 않으면 항상 NULL이 되게 관리하시는 거에요.
AngelGabriel
16/11/26 10:53
수정 아이콘
저런 간단한 수준 만드는데 포인터까지 쓰도록 요구하던가요? 덜덜;;
2시퇴근
16/11/26 10:59
수정 아이콘
상세한 답변 감사드립니다.
써주신 내용을 이해하기에도 벅찬 제 실력이네요 ㅜㅜ
좀 더 공부하겠습니다.
감사합니다.
16/11/27 01:52
수정 아이콘
그럼 가이드 클래스 부분을 아래 revel님 추천 대로 stl vector나 deque를 이용해서 하세요. 레스토랑 등록할 때 이미 등록된 건지 아닌지 봐야 하는데, 그건 이름을 비교해서 같으면 등록된 것으로 처리하시면 될 것 같습니다.
16/11/26 11:05
수정 아이콘
AngelGabriel님이 추천하신대로 stl의 list나 vector를 이용해서 구현하시는 게 가장 편하실 것 같습니다. stl 사용하는 게 그리 어렵지 않으니 list와 vector 등을 먼저 공부하시는 게 좋을 듯 싶네요.
Supervenience
16/11/28 09:47
수정 아이콘
Stl 쓰셔도 좋고.. 배운 내용 안에서 해결하시려 한다는 가정 하에 음식점 배열이라 되어있는 char name [10]이 틀린것 같습니다. char name[10][100] 정도로 만드셔야 할 것 같습니다
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
95676 [질문] 영화 티켓 나눔을 하고 싶은데 어떻게 하는게 좋을까요? [34] 살려야한다2369 16/12/30 2369
95675 [질문] 배드민턴 강습 초보자에게는 어떤 라켓이 좋을까요? [6] B와D사이의C2481 16/12/30 2481
95674 [질문] 엑셀 매크로 안내 책 추천 부탁드립니다. 복말전도2784 16/12/30 2784
95672 [질문] 스타벅스 하얀색 프리퀀시 필요하신 분 드릴게요 [18] 눈물보다빨리2409 16/12/30 2409
95671 [질문] TV(셋톱연결) + 모니터 겸용 TV(모니터)? 추천 부탁드립니다. (FHD/UHD) The Warrior2394 16/12/30 2394
95670 [질문] 인스타그램 피드를 설정할 수 있나요? cs6956 16/12/30 6956
95669 [질문] 일정 어플을 일정 시간에만 커놓고싶습니다. [9] cs3192 16/12/30 3192
95668 [질문] 새해 정동진 일출 어떨까요 [1] 도들도들3079 16/12/30 3079
95667 [질문] 블로그 게시물 찾기 혹은 사진찾기 가사노바2198 16/12/30 2198
95666 [질문] 삼성전자 지배구조에대한 질문입니다. [15] 레스터3453 16/12/30 3453
95665 [질문] 서울에서 급하게 핫팩 구매 어디서 해야할까요? [12] 휘안3363 16/12/30 3363
95664 [질문] [게임] 플레이타임 10시간 미만짜리 게임 추천부탁드립니다. [18] 히스조커5047 16/12/30 5047
95663 [질문] 중고나라 사기(?)를 친거 같습니다.ㅠㅠ [10] 파라4197 16/12/30 4197
95662 [질문] 여행하기 좋은 사막은 어디가 있나요? 자연경관 좋은 곳 [11] 칼퇴추구자2668 16/12/30 2668
95661 [질문] 돈을 잘못입금했는데 당사자가 전화 문자를 무시하네요.. [15] 고양사람4487 16/12/30 4487
95660 [질문] 돈내고 사서 쓸만한 유료 어플 추천부탁드립니다(안드) [7] Secundo6468 16/12/30 6468
95658 [질문] 강남이나 건대근처 장어 맛집 추천 좀 부탁드리겠습니다. [2] 기다리다3076 16/12/30 3076
95657 [질문] [직장상담]스카웃 제의를 받았는데, 가야할까요? [20] Ciara.5370 16/12/30 5370
95656 [질문] 노트북 선택 질문입니다. [5] 天飛4161 16/12/30 4161
95655 [질문] 부팅USB에 os설치파일을 2개 넣을수 있나요? [2] Han Ji Min4532 16/12/30 4532
95654 [질문] 중고그래픽카드 가성비제품 추천해주세요 [11] 히오스10695 16/12/30 10695
95653 [질문] 모니터 배송왔는데 평이 안 좋습니다.바꿀까요? [4] 세오유즈키3582 16/12/30 3582
95652 [질문] Osu 노래 찾습니다 [7] 이블린3129 16/12/30 3129
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로