c++ q

☆C언어/소스 2018. 9. 19. 01:56

//기본적인 큐라 효율이 쓰래기

#include<iostream>

using namespace::std;


template<typename T>

class Queue

{

enum { cap = 10 };

T arr[cap];

int front;

int rear;


public:


Queue() :front(0), rear(0) {};


void Push(T num)

{

arr[rear = (rear + 1) % cap] = num;

}

void Pop()

{

cout << arr[front=(front+1)%cap] << endl;

}

bool Empty()

{

return front == rear;

}

};


int main()

{


Queue<int> q;



q.Push(10);

q.Pop();

q.Empty();

q.Push(20);

q.Push(30);


q.Pop();

q.Pop();

q.Pop();



}

'☆C언어 > 소스' 카테고리의 다른 글

8-3 연습문제  (0) 2018.09.18
문자열 숫자 쉽게 숫자로 바꾸기  (0) 2017.12.25
'q' 입력시 종료  (0) 2017.11.21
달력  (0) 2017.11.13
괄호 검사  (0) 2017.06.17

8-3 연습문제

☆C언어/소스 2018. 9. 18. 22:32

#include <iostream>

#include <cstring>

using namespace std;


class Employee

{

private:

char name[100];

public:

Employee(const char * name)

{

strcpy(this->name, name);

}

void ShowYourName() const

{

cout << "name: " << name << endl;

}

virtual int GetPay() const

{

return 0;

}

virtual void ShowSalaryInfo() const

{  }

};


class PermanentWorker : public Employee

{

private:

int salary;

public:

PermanentWorker(const char * name, int money)

: Employee(name), salary(money)

{  }

int GetPay() const

{

return salary;

}

void ShowSalaryInfo() const

{

ShowYourName();

cout << "salary: " << GetPay() << endl << endl;

}

};


class TemporaryWorker : public Employee

{

private:

int workTime;

int payPerHour;

public:

TemporaryWorker(const char * name, int pay)

: Employee(name), workTime(0), payPerHour(pay)

{  }

void AddWorkTime(int time)

{

workTime += time;

}

int GetPay() const

{

return workTime * payPerHour;

}

void ShowSalaryInfo() const

{

ShowYourName();

cout << "salary: " << GetPay() << endl << endl;

}

};


class SalesWorker : public PermanentWorker

{

private:

int salesResult;    // 월 판매실적

double bonusRatio;    // 상여금 비율 

public:

SalesWorker(const char * name, int money, double ratio)

: PermanentWorker(name, money), salesResult(0), bonusRatio(ratio)

{  }

void AddSalesResult(int value)

{

salesResult += value;

}

int GetPay() const

{

return PermanentWorker::GetPay()

+ (int)(salesResult*bonusRatio);

}

void ShowSalaryInfo() const

{

ShowYourName();

cout << "salary: " << GetPay() << endl << endl;

}

};


class EmployeeHandler

{

private:

Employee * empList[50];

int empNum;

public:

EmployeeHandler() : empNum(0)

{ }

void AddEmployee(Employee* emp)

{

empList[empNum++] = emp;

}

void ShowAllSalaryInfo() const

{


for (int i = 0; i<empNum; i++)

empList[i]->ShowSalaryInfo();


}

void ShowTotalSalary() const

{

int sum = 0;


for (int i = 0; i<empNum; i++)

sum += empList[i]->GetPay();


cout << "salary sum: " << sum << endl;

}

~EmployeeHandler()

{

for (int i = 0; i<empNum; i++)

delete empList[i];

}

};


int main(void)

{

// 직원관리를 목적으로 설계된 컨트롤 클래스의 객체생성

EmployeeHandler handler;


// 정규직 등록

handler.AddEmployee(new PermanentWorker("JUN", 2000));

handler.AddEmployee(new PermanentWorker("LEE", 3500));


// 임시직 등록

TemporaryWorker * alba = new TemporaryWorker("Jung", 1800);

alba->AddWorkTime(5); // 5시간 일한결과 등록

handler.AddEmployee(alba);


// 영업직 등록

SalesWorker * sell = new SalesWorker("Hong", 2000, 0.2);

sell->AddSalesResult(7000); // 영업실적 7000

handler.AddEmployee(sell);


// 이번 달에 지불해야 할 급여의 정보

handler.ShowAllSalaryInfo();


// 이번 달에 지불해야 할 급여의 총합

handler.ShowTotalSalary();

return 0;

}

'☆C언어 > 소스' 카테고리의 다른 글

c++ q  (0) 2018.09.19
문자열 숫자 쉽게 숫자로 바꾸기  (0) 2017.12.25
'q' 입력시 종료  (0) 2017.11.21
달력  (0) 2017.11.13
괄호 검사  (0) 2017.06.17

문자열 숫자 쉽게 숫자로 바꾸기

☆C언어/소스 2017. 12. 25. 23:24

#include<stdio.h>


int main()

{

int n,i,sum=0;

char str[101];


scanf("%d",&n);

scanf("%s",&str);



for(i=0;i<n;++i)

{

sum+=str[i]-'0';         // 아스키 코드 값을 뺀다 '3' - '0'이 3이되는 원리

}


printf("%d",sum);




return 0;

}

'☆C언어 > 소스' 카테고리의 다른 글

c++ q  (0) 2018.09.19
8-3 연습문제  (0) 2018.09.18
'q' 입력시 종료  (0) 2017.11.21
달력  (0) 2017.11.13
괄호 검사  (0) 2017.06.17

'q' 입력시 종료

☆C언어/소스 2017. 11. 21. 21:37

#include<stdio.h>


int main()

{

int a,b;


while(1)

{


scanf("%d",&a);

if(getchar()=='q')

{

printf("종료");

return 0;

}

// fflush(stdin);

scanf("%d",&b);

printf("%d %d\n",a,b);


}


return 0;

}

'☆C언어 > 소스' 카테고리의 다른 글

8-3 연습문제  (0) 2018.09.18
문자열 숫자 쉽게 숫자로 바꾸기  (0) 2017.12.25
달력  (0) 2017.11.13
괄호 검사  (0) 2017.06.17
바이너리 파일 핸들링  (0) 2017.06.15

달력

☆C언어/소스 2017. 11. 13. 21:53

#include<stdio.h>


int m_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

char *week[7]={"일","월","화","수","목","금","토"};



int main()

{

int year,month,day;

int total;

int Ly;

int start[13];//각달 요일번호

int all_day[13][45]={0,};

int num1,num2,num3; //각출력 넘버

int num=1; //저장넘버


int s=1;//출력달번호

year=2012;

month=12;


//윤달 확인

if( (year%4==0) && ((year%400==0) || (year%100!=0)) )

m_day[2]=29;

else

m_day[2]=28;


//요일 계산

Ly=year-1;

total=(Ly+(Ly/4)-(Ly/100)+(Ly/400)+1);    //최근 +  -  +  +1


start[1]=total%7;

for(int i=1;i<12;i++)

{

total=total+m_day[i];

start[i+1]=total%7;

}


for(int m=1;m<13;m++)

{

printf("%d월\n",m);

printf("일월화수목금토\n");

num=1;

for(int i=1;i<=42;++i)

{

if(i<=start[m]) //공백2개다

printf("  ");

else

{

all_day[m][i]=num++;

printf("%2d",all_day[m][i]);

}


if(i%7==0 && i!=1)

{

printf("\n");

}

//마지막 찍히면 브래이크

if(num>m_day[m])

break;

}

printf("\n");


}


for(int i=0;i<4;i++)

{

printf("%d월\t\t\t%d월\t\t\t%d월\n",s,s+1,s+2);

printf("일월화수목금토\t\t일월화수목금토\t\t일월화수목금토\n");

num1=num2=num3=1;


for(int x=1;x<7;++x)

{

for(int j=1;j<8;++j)

{

if(all_day[s][num1]==0)

printf("  "); //공백 두개다

else

printf("%2d",all_day[s][num1]);

num1++;


}

printf("\t\t");


for(int j=1;j<8;++j)

{

if(all_day[s+1][num2]==0)

printf("  ");

else

printf("%2d",all_day[s+1][num2]);

num2++;


}

printf("\t\t");


for(int j=1;j<8;++j)

{

if(all_day[s+2][num3]==0)

printf("  ");

else

printf("%2d",all_day[s+2][num3]);

num3++;


}

printf("\n");



}

s+=3;


}







return 0;

}

'☆C언어 > 소스' 카테고리의 다른 글

문자열 숫자 쉽게 숫자로 바꾸기  (0) 2017.12.25
'q' 입력시 종료  (0) 2017.11.21
괄호 검사  (0) 2017.06.17
바이너리 파일 핸들링  (0) 2017.06.15
달력 문제  (0) 2017.06.14

괄호 검사

☆C언어/소스 2017. 6. 17. 18:48

조건 1: '(', ')' 이둘의 갯 수가 같아야 한다.

조건 2: 첫번째에 ')'이 오면 안되고 마지막에는 '(' 이 오며 안된다.

조건 3: 앞의 '(' 뒤에  ')'이 더 많이 있으면 안된다.


#include<stdio.h>

#include<string.h>

int main()

{

char in[100];

int a=0,b=0; //(,),각 갯수

int size;

printf("괄호 입력 : ");

scanf("%s",in);

size=strlen(in);

printf(" 크기 : %d\n",size);


//괄호수 체크

for(int i=0;i<size;i++)

{

if(in[i]=='(')

a++;

else if(in[i]==')')

b++;

else

printf("잘못된거 들어왔다");

}

if(a!=b)

{

printf("괄호 수가 안맞다 \n");

return 0;

}


//앞뒤 체크

if(in[0]!='(' || in[size-1]!=')')

{

printf("앞 뒤 괄호 잘못적음");

return 0;

}


//괄호 순서 검사

for(int i=0;i<size;i++)

{

if(in[i]=='(')

a--;

else

b--;

if(a>b)

{

printf("괄호 순서 에러");

return 0;

}

}

printf("Yes");

}

'☆C언어 > 소스' 카테고리의 다른 글

'q' 입력시 종료  (0) 2017.11.21
달력  (0) 2017.11.13
바이너리 파일 핸들링  (0) 2017.06.15
달력 문제  (0) 2017.06.14
3n+1  (0) 2013.06.27

바이너리 파일 핸들링

☆C언어/소스 2017. 6. 15. 10:56

#include<stdio.h>

#include<string.h>

#include<stdlib.h>


int main(void)


{


FILE *in,*out;

char name[100]={'0',}; //읽을 파일 이름

char *data;

char buf[100]; //버퍼

char new_file_name[100]={'0',}; //파일 이름


char file_name[100]={'0',}; //쓸파일 이름

int file_num=0; //파일번호 숫자형

int size=0; //나눌 파일 크기


char ch; //읽어오는글자1바이트씩



//파일 이름

printf("input file name : ");

gets(name);


//파일 사이즈

printf("file size : ");

scanf("%d",&size);


//파일 읽기

in=fopen(name,"rb");

//생성파일크기

data=(char*)malloc(sizeof(char)*size+1);



strncpy(file_name,name,5); //문자열 5개 복사

//이제 반복생성 준비


while(!feof(in))

{

sprintf_s(buf,sizeof(buf),"%s%d",file_name,file_num++); //생성파일이름 번호 후 증가

out=fopen(buf,"wb");

if(!feof(in))

{

fread(data,size,1,in); //바이트 단위 읽기

fwrite(data,size,1,out); //바위트 단위 쓰기

}

fseek(out,0L,SEEK_END);

printf("파일의 길이: %d\n",ftell(out));

}





fclose(in);

fclose(out);




return 0;


}



'☆C언어 > 소스' 카테고리의 다른 글

달력  (0) 2017.11.13
괄호 검사  (0) 2017.06.17
달력 문제  (0) 2017.06.14
3n+1  (0) 2013.06.27
3n+1 재귀함수  (0) 2013.06.27

달력 문제

☆C언어/소스 2017. 6. 14. 00:49

#include<stdio.h>

int month[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};

int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

char *weekname[7]={"일","월","화","수","목","금","토"};

int main(void)

{


int y=0,m=0;//년월일

int L_y=0;//작년

int total_day;//일수계산

int week=0;//요일

FILE *out; //출력파일


out=fopen("out.txt","w");




//입력

printf("Input Year : ");

scanf("%d",&y);

printf("Input month : ");

scanf("%d",&m);



//윤년계산

if((y%4==0)&& ((y%100!=0)||(y%400)))

day[2]=29;

else

day[2]=28;


//요일 계산

L_y=y-1;

total_day=(L_y+(L_y/4)-(L_y/100)+(L_y/400)+1);

for(int i=1;i<m;i++)

total_day+=day[i];

week=total_day%7;


/////////출력///////////


//년,월 출력

printf("<%d_%02d>\n",y,m);


//요일 출력

for(int i=0;i<7;i++)

printf("%7s", weekname[i]);

printf("\n");


//공백 출력

for(int i=0;i<week;i++)

{

printf("%7c"," ");

}


for(int i=1;i<=day[m];++i)

{

if(week%7==0)

printf("\n");

printf("%7d",i);

week++;

}


fclose(out);


}



'☆C언어 > 소스' 카테고리의 다른 글

괄호 검사  (0) 2017.06.17
바이너리 파일 핸들링  (0) 2017.06.15
3n+1  (0) 2013.06.27
3n+1 재귀함수  (0) 2013.06.27
최소의 동전수 (재귀)  (0) 2013.06.23

3n+1

☆C언어/소스 2013. 6. 27. 17:55

//어떤 정수 n에서 시작해, n이 짝수면 2로 나누고, 홀수면 3을 곱한 다음 1을 더한다.

//이렇게 해서 새로 만들어진 숫자를 n으로 놓고, n=1 이 될때까지 같은 작업을 계속 반복한다.

//예를 들어, n=22이면 다음과 같은 수열이 만들어진다.

//

//22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

//

//n이라는 값이 입력되었을때 1이 나올때까지 만들어진 수의 개수(1을 포함)를 n의 사이클 길이라고 한다.

//위에 있는 수열을 예로 들면 22의 사이클 길이는 16이다. i와 j라는 두개의 수가 주어졌을때,

//i와 j사이의 모든 수(i, j포함)에 대해 최대 사이클 길이를 구하라.

#include<stdio.h>

int main()

{

// FILE *in=fopen("input.txt","r");

// FILE *out=fopen("output.txt","w");

int i=0,j=0,

su1=0,su2=0; //숫자 범위

int count=0; //숫자 개수 함수 호출수

int arr[1000][2]={0,}; //배열

int min=0,max=0; //계산한 사이클, 최대 사이클

int cc=0; //숫자범위가 앞에가 클때 ex)100 1

// while(EOF!=fscanf(in,"%d %d",&su1,&su2))

while(EOF!=scanf("%d%d",&su1,&su2))

{

// printf("%d %d " ,su1,su2);

// arr[count][0]=su1;

// arr[count++][1]=su2;

// }

// printf("\n카운트 : %d\n ",count);

// for(i=0;i<count;++i)

// {

// func(arr[i][0],arr[i][1]);

cc=0;

if(su1>su2)

{

int temp=su2;

su2=su1;

su1=temp;

cc=1;

}

max=0; //초기화

for(j=su1;j<=su2;++j)

{

int num=j;

int cycle=1;

while(num!=1)

{

if(num%2)

{

//홀수

num=num*3+1;

}

else

{

//짝수

num=num/2;

}

++cycle;

}

if(max<cycle)

max=cycle;

}

//출력

if(cc==1)

printf("%d %d %d\n",su2,su1,max);

else

printf("%d %d %d\n",su1,su2,max);

}

// fclose(in);

// fclose(out);

return 0;

}

'☆C언어 > 소스' 카테고리의 다른 글

바이너리 파일 핸들링  (0) 2017.06.15
달력 문제  (0) 2017.06.14
3n+1 재귀함수  (0) 2013.06.27
최소의 동전수 (재귀)  (0) 2013.06.23
c언어 숫자 변수에 문자입력시 출력  (0) 2012.10.10

3n+1 재귀함수

☆C언어/소스 2013. 6. 27. 17:54


//어떤 정수 n에서 시작해, n이 짝수면 2로 나누고, 홀수면 3을 곱한 다음 1을 더한다.

//이렇게 해서 새로 만들어진 숫자를 n으로 놓고, n=1 이 될때까지 같은 작업을 계속 반복한다.

//예를 들어, n=22이면 다음과 같은 수열이 만들어진다.

//

//22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

//

//n이라는 값이 입력되었을때 1이 나올때까지 만들어진 수의 개수(1을 포함)를 n의 사이클 길이라고 한다.

//위에 있는 수열을 예로 들면 22의 사이클 길이는 16이다. i와 j라는 두개의 수가 주어졌을때,

//i와 j사이의 모든 수(i, j포함)에 대해 최대 사이클 길이를 구하라.

#include<stdio.h>

int func(int num,int cycle)

{

// printf("함수 ( %d ) ", num);


if(num==1)

return cycle;

if(num%2)

{

//홀수

return func(num*3+1,++cycle);

}

else

{

//짝수

return func(num/2,++cycle); 

}


return 0;

}

int main()

{

// FILE *in=fopen("input.txt","r");

// FILE *out=fopen("output.txt","w");

int i=0,j=0,

su1=0,su2=0; //숫자 범위

int count=0; //숫자 개수 함수 호출수

int arr[1000][2]={0,}; //배열

int min=0,max=0; //계산한 사이클, 최대 사이클


// while(EOF!=fscanf(in,"%d %d",&su1,&su2))

while(EOF!=scanf("%d%d",&su1,&su2))

{

// printf("%d %d " ,su1,su2);

arr[count][0]=su1;

arr[count++][1]=su2;

// printf("\n카운트 : %d\n ",count);

for(i=0;i<count;++i)

{

// func(arr[i][0],arr[i][1]);

max=0; //초기화

if(arr[i][0]>arr[i][1])

{

su1=arr[i][1];

su2=arr[i][0];

}

else

{

su1=arr[i][0];

su2=arr[i][1];

}

for(j=su1;j<=su2;++j)

{

min=func(j,1);

if(max<min)

max=min;

}

//출력

printf("%d %d %d \n",arr[i][0],arr[i][1],max);

}

}

// fclose(in);

// fclose(out);

return 0;

}



'☆C언어 > 소스' 카테고리의 다른 글

달력 문제  (0) 2017.06.14
3n+1  (0) 2013.06.27
최소의 동전수 (재귀)  (0) 2013.06.23
c언어 숫자 변수에 문자입력시 출력  (0) 2012.10.10
사다리  (0) 2012.09.12