검색결과 리스트
☆C언어/소스에 해당되는 글 14건
- 2018.09.19 c++ q
- 2018.09.18 8-3 연습문제
- 2017.12.25 문자열 숫자 쉽게 숫자로 바꾸기
- 2017.11.21 'q' 입력시 종료
- 2017.11.13 달력
- 2017.06.17 괄호 검사
- 2017.06.15 바이너리 파일 핸들링
- 2017.06.14 달력 문제
- 2013.06.27 3n+1
- 2013.06.27 3n+1 재귀함수
글
c++ q
//기본적인 큐라 효율이 쓰래기
#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 연습문제
#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 |
설정
트랙백
댓글
글
문자열 숫자 쉽게 숫자로 바꾸기
#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;
}
설정
트랙백
댓글
글
'q' 입력시 종료
#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 |
설정
트랙백
댓글
글
달력
#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 |
설정
트랙백
댓글
글
괄호 검사
조건 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 |
설정
트랙백
댓글
글
바이너리 파일 핸들링
#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;
}
설정
트랙백
댓글
글
달력 문제
#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
//어떤 정수 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 재귀함수
//어떤 정수 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 |