반응형
/*
* http://sosal.tistory.com/
* made by so_Sal
*/
인풋파일에 담겨져있는 데이터를 읽어와 통계를 내려고 합니다.
다음은 각 데이터 파일에 해당하는 레코드 구성 정보입니다.
==================================== 예제 1 ====================================
/*
* Users.dat 로 부터 '총인원' '남성' '여성' 의 수와
* '남성평균나이' '여성평균나이' 전체평균나이' 를 구한다.
*/
#include<iostream>
#include<cstring>
#include<string>
#include<iomanip>
#include<unistd.h>
#include<fcntl.h>
using namespace std;
double N=0,F=0,M=0,Fage=0,Mage=0;
void tok(char* str)
{
char* ID;
char* Gender;
char* Age;
char y[32],m[32],d[32];
ID = strtok(str, "#");
Gender = strtok(NULL, "#");
Age = strtok(NULL, "#");
if(strcmp(Gender,"F")==0){
N++;F++;
Fage+=atoi(Age);
}
else{
N++;M++;
Mage+=atoi(Age);
}
}
int main(void){
char buf[256];
int n;
FILE* fd = fopen("./users.dat","r+");
while(1){
if(fgets(buf,sizeof(buf),fd)==NULL)
break;
tok(buf);
}
cout<<"총인원:"<<N<<endl;
cout<<"남자:"<<M<<"여자"<<F<<endl;
cout<<"남자평균 나이:"<<Mage/M<<endl;
cout<<"여자평균 나이:"<<Fage/F<<endl;
cout<<"전체평균 나이:"<<(Mage+Fage)/(M+F)<<endl;
fclose(fd);
return 0 ;
}
==================================== 예제 1 ====================================
==================================== 예제 2 ====================================
/*
* MovieLens Data를 이용하여 아래와 같은 정보를 출력한다.
*
* 첫 번째 사용자 ID를 입력하세요 : 1
* 첫 번째 사용자 ID를 입력하세요 : 1
* 두번째 사용자 ID를 입력하세요 : 2
*
* 사용자 1과 2가 공통으로 본 영화리스트 입니다.
* -Shadows (Cienie) (1988)
* - Bad Boys (1995)
* - Othello (1995)
* …..
*
* 첫번째 사용자 ID를 입력하세요 : the end
* (종료)
*/
#include<iostream>
#include<cstring>
#include<iomanip>
#include<unistd.h>
#include<fcntl.h>
using namespace std;
#define NUM_MOVIE 1000
class user{
private:
int id,index,list[NUM_MOVIE];
FILE* fd;
public:
user(int _id):id(_id){index=0;};
int getid(){return id;};
int getindex(){return index;};
int getlist(int _index){return list[_index];}
void listing();
};
class movie{
private:
int index;
int same[NUM_MOVIE];
FILE* fd;
public:
movie(){index=0;};
void compare(user,user);
void printMovie();
void swap(int *a,int *b);
void bubble();
};
int main(){
char check[10];
int ID[2];
FILE* fd;
user* ID_1;
user* ID_2;
movie* list;
int trash;
while(1){
cout<<"첫 번째 사용자 ID를 입력하세요:";
cin.getline(check,10);
if(strcmp(check,"the end") == 0)
break;
ID[0] = atoi(check);
cout<<"두 번째 사용자 ID를 입력하세요:";
cin>>ID[1];
cin.ignore();
ID_1 = new user(ID[0]);
ID_2 = new user(ID[1]);
list = new movie();
cout<<"사용자"<<ID[0]<<"와 "<<ID[1]<<"가 공통으로 본 영화리스트 입니다."<<endl;
ID_1->listing(); // ID_1의 영화 목록
ID_2->listing(); // ID_2의 영화 목록
list->compare(*ID_1,*ID_2);
list->printMovie(); // 공통된 영화 출력
delete ID_1;
delete ID_2;
delete list;
}
cout<<"종료"<<endl;
}
void user::listing(){
char buf[256],*tmp;
int compare;
fd=fopen("./ratings.dat","r");
while(fgets(buf,sizeof(buf),fd)){
tmp = strtok(buf,"#");
compare=atoi(tmp);
if(compare == id){
tmp = strtok(NULL,"#");
list[index] = atoi(tmp);
index++;
}
}
}
void movie::compare(user ID_1,user ID_2){
for(int i=0;i<ID_1.getindex();i++){
for(int j=0;j<ID_2.getindex();j++){
if(ID_1.getlist(i) == ID_2.getlist(j)){
same[index] = ID_1.getlist(i);
index++;
}
}
}
}
void movie::printMovie(){
char buf[256],*tmp;
int compare,i=0;
bubble();
fd=fopen("./movies.dat","r");
while(fgets(buf,sizeof(buf),fd)){
tmp=strtok(buf,"#");
compare=atoi(tmp);
if(compare == same[i]){
tmp = strtok(NULL,"#");
cout<<setprecision(5)<<same[i]<<"-";
cout<<tmp<<endl;
i++;
}
if(i==index)
break;
}
}
void movie::swap(int *a,int *b){
int tmp;
tmp = *b;
*b = *a;
*a = tmp;
}
void movie::bubble(){
for(int i=0;i<index;i++){
for(int j=0;j<index-(i+1);j++){
if(same[j] > same[j+1])
swap(&same[j],&same[j+1]);
}
}
}
==================================== 예제 2 ====================================
==================================== 예제 3 ====================================
/*
* 첫 번째 사용자 ID를 입력하세요 : 1
* 두번째 사용자 ID를 입력하세요 : 2
* 기준 평점값을 입력하세요 : 3
*
* 사용자 1과 2가 공통으로 본 영화리스트 입니다.
* - Shadows (Cienie) (1988)
* - Othello (1995)
* …..
*
* 첫번째 사용자 ID를 입력하세요 : the end
* (종료)
*/
#include<iostream>
#include<cstring>
#include<iomanip>
#include<unistd.h>
#include<fcntl.h>
using namespace std;
#define NUM_MOVIE 1000
class user{
private:
int id,index,value,list[NUM_MOVIE];
FILE* fd;
public:
user(int _id,int _star):id(_id),value(_star){index=0;};
int getid(){return id;};
int getindex(){return index;};
int getlist(int _index){return list[_index];}
void listing();
};
class movie{
private:
int index;
int same[NUM_MOVIE];
FILE* fd;
public:
movie(){index=0;};
void compare(user,user);
void printMovie();
void swap(int *a,int *b);
void bubble();
};
int main(){
char check[10];
int ID[3];
FILE* fd;
user* ID_1;
user* ID_2;
movie* list;
int trash;
while(1){
cout<<"첫 번째 사용자 ID를 입력하세요:";
cin.getline(check,10);
if(strcmp(check,"the end") == 0)
break;
ID[0] = atoi(check);
cout<<"두 번째 사용자 ID를 입력하세요:";
cin>>ID[1];
cout<<"기준 평점값을 입력하세요:";
cin>>ID[2];
cin.ignore();
ID_1 = new user(ID[0],ID[2]);
ID_2 = new user(ID[1],ID[2]);
list = new movie();
cout<<"사용자"<<ID[0]<<"와 "<<ID[1]<<"가 공통으로 본 영화리스트 입니다."<<endl;
ID_1->listing();
ID_2->listing();
list->compare(*ID_1,*ID_2);
list->printMovie();
delete ID_1;
delete ID_2;
delete list;
}
cout<<"종료"<<endl;
}
void user::listing(){
char buf[256],*tmp,*tmp1;
int compare,star;
fd=fopen("./ratings.dat","r");
while(fgets(buf,sizeof(buf),fd)){
tmp = strtok(buf,"#");
compare=atoi(tmp);
if(compare == id){
tmp = strtok(NULL,"#");
tmp1 = strtok(NULL,"#");
star = atoi(tmp1);
if(star >= value){
list[index] = atoi(tmp);
index++;
}
}
}
}
void movie::compare(user ID_1,user ID_2){
for(int i=0;i<ID_1.getindex();i++){
for(int j=0;j<ID_2.getindex();j++){
if(ID_1.getlist(i) == ID_2.getlist(j)){
same[index] = ID_1.getlist(i);
index++;
}
}
}
}
void movie::printMovie(){
char buf[256],*tmp;
int compare,i=0;
bubble();
fd=fopen("./movies.dat","r");
while(fgets(buf,sizeof(buf),fd)){
tmp=strtok(buf,"#");
compare=atoi(tmp);
if(compare == same[i]){
tmp = strtok(NULL,"#");
cout<<setprecision(5)<<same[i]<<"-";
cout<<tmp<<endl;
i++;
}
if(i==index)
break;
}
}
void movie::swap(int *a,int *b){
int tmp;
tmp = *b;
*b = *a;
*a = tmp;
}
void movie::bubble(){
for(int i=0;i<index;i++){
for(int j=0;j<index-(i+1);j++){
if(same[j] > same[j+1])
swap(&same[j],&same[j+1]);
}
}
}
==================================== 예제 3 ====================================
ㅇ
'Programing > C- programing' 카테고리의 다른 글
C++ string을 이용한 이진수 변환 (2) | 2012.09.12 |
---|---|
C++ STL vector 프로그래밍 (0) | 2012.09.12 |
소수 판별 프로그램 소스 (2) | 2011.02.12 |
최대공약수 최소공배수 gcd lcm 소스코드 (0) | 2011.02.12 |
C++ - 포함과 상속 (2) | 2010.12.28 |