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. 14. 22:38

#include<stdio.h>

#include<math.h>

int main()

{

FILE *in;

FILE *out;

int ant_max,ant_min;

int table;

int size,ant;

int j,i;

int arr[1000]={0,}; //위치저장

int p; //개미들 위치입력

int min,c_min; //짧은시간, 중간

int temp1,temp2,temp3;

int t4,t5;

int center;


in=fopen("in.txt","r");

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


fscanf(in,"%d",&table);



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

{

while(!feof(in))

{

fscanf(in,"%d %d", &size,&ant);

printf("%d %d\n",size,ant);

center=size/2;

printf("중앙 %d\n",center);


c_min=size;

min=size;

for(j=0;j<ant;j++)

{

t4=t5=temp1=temp2=temp3=0; //초기화


fscanf(in,"%d",&p);

arr[j]=p;

printf("%d\n",arr[j]);

//////////////////////////////////

//작은개미 위치

temp1=arr[j]; //0<-개미거리

temp2=size-arr[j]; //반대쪽 거리

if(temp1<temp2)

temp3=temp1;

else

temp3=temp2;


if(min>temp3)

min=temp3; //작은개미 위치

///////////////////////////////////

//중간개미 위치

temp1=abs(center-arr[j]); //중간거리 비교


if(c_min>temp1) //가까운에 저장

c_min=temp1;



}

//짧은시간 = 길이 - 중간개미

//긴시간   = 길이 - 작은개미


printf("%d %d\n",center-c_min,size-min);

fprintf(out,"%d %d\n",center-c_min,size-min);



}

}

fclose(in);

fclose(out);

}

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

fflush 함수  (0) 2017.06.19
달력 1~12월 다 찍어내기  (0) 2017.06.17
c언어 꿀팁  (0) 2014.10.14
조건부 컴파일 #if #elif #else #endif  (0) 2013.10.09
2차원 배열 포인터  (0) 2012.09.18

달력

☆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

fflush 함수

☆C언어 2017. 6. 19. 16:28

* int fflush(FILE * stream);

stream에 stdout이 들어가는 경우 :

출력 버퍼를 비운다. stdout의 경우 비운다는게 버리는게 아니라 '목적지(모니터에 출력)로 보내라.' 뜻이다. 그래서 이 경우는 '즉시 출력'을 의미한다. 


stream에 stdin이 들어가는 경우 :

입력 버퍼를 비운다. stdin의 경우 비운다는게 말 그대로 버린다는 뜻이다. '목적지에 도달시키지 말고 버려라.'



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

개미 문제(틀림)  (0) 2017.11.14
달력 1~12월 다 찍어내기  (0) 2017.06.17
c언어 꿀팁  (0) 2014.10.14
조건부 컴파일 #if #elif #else #endif  (0) 2013.10.09
2차원 배열 포인터  (0) 2012.09.18

괄호 검사

☆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

달력 1~12월 다 찍어내기

☆C언어 2017. 6. 17. 01:42

#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;//요일

int m_week[13];

int calendar[13][7][8]={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);

m_week[1]=total_day%7;

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

{

total_day+=day[i];

m_week[i+1]=total_day%7;

}

// week=total_day%7;


int num_count=1;

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

{

// printf("%d월\n",j);

int k=1,q=1;

num_count=1;

for(int i=1;i<=42;++i) //5*7다 돌림

{

if(num_count>day[j]) //날짜 다찍으면 탈출

break;

if(i<=m_week[j])

{

calendar[j][k][q]=0;

// printf("%2d",calendar[j][k][q]);

}

else

{

calendar[j][k][q]=num_count++;

// printf("%2d",calendar[j][k][q]);

}

q++;

if(i%7==0)

{

k++; //열증가

q=1; //행초기화

// printf("\n");

}


}


}


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

int s=1; //달


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

{

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

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

{

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

{

printf("%s",weekname[e]);

}

printf("\t\t");

}

printf("\n");

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

{

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

{

if(calendar[s][x][y]==0)

printf("  ");

else

printf("%2d",calendar[s][x][y]);

}

printf("\t\t");


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

{

if(calendar[s+1][x][y]==0)

printf("  ");

else

printf("%2d",calendar[s+1][x][y]);

}

printf("\t\t");


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

{

if(calendar[s+2][x][y]==0)

printf("  ");

else

printf("%2d",calendar[s+2][x][y]);

}







printf("\n");

}

s=s+3;

}



fclose(out);


}



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

개미 문제(틀림)  (0) 2017.11.14
fflush 함수  (0) 2017.06.19
c언어 꿀팁  (0) 2014.10.14
조건부 컴파일 #if #elif #else #endif  (0) 2013.10.09
2차원 배열 포인터  (0) 2012.09.18

바이너리 파일 핸들링

☆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