2013년 3월 30일 토요일

webhacking.kr 1번


1번 들어가면 이런것이 보인다 친절하게 index.phps 라 하니 주소창뒤에 쳐준다.





빨간색 1번보면 유저레벨이 5보다 크면 풀린단다 6이넘어가면 1이랑 똑같다니 5.5정도로 설정해주자



쿠키 user_lv 값을 가볍게 바꿔준다 그리고F5 하면 끝

2013년 3월 25일 월요일

시져 암호화


#include<stdio.h>
#include<string.h>
void main()
{
char psw[100], psw2[100];
int i,a;
scanf("%s",psw);
a=strlen(psw);

for(i=0;i<a;i++)
{
if(psw[i]>87 && psw[i]<91)
{
psw2[i]=psw[i]-23;
}
else if(psw[i]>119 && psw[i]<123)
{
psw2[i]=psw[i]-23;
}
else
psw2[i]=psw[i]+3;
}
for(i=0;i<a;i++)
printf("%c",psw2[i]);
}

2013년 3월 24일 일요일

프로세스 스케줄링

각 프로세스를 얼마만큼 작동시킬 것인가를 운영 체계(OS)에서 제어하는 것



중앙 처리 장치(CPU)는 많은 프로그램(C 프로그램)을 동시에 실행해야 한다. 그러나 보통 CPU는 1대이므로 어떤 프로세스를 일정 시간 실행한 후 그 프로세스를 일시 중단하고 다음 프로세스를 다시 일정 시간 실행하는 식으로 제어를 반복한다.

---------------------------------------------------------------------------------------------

각각 스케줄링 알고리즘의 특징을 알기 전에 스케줄링의 목절을 알아보면 다음과 같은 목적을 고려해서 스케줄링 되어야 한다. 


●  공정한 스케줄링 : 스케줄링할 때 모든 프로세스들은 공평하게 취급되어야 하며 어느 프로세스도 무한정 대기 하는일이 없어야 한다. 

●  처리량 극대화 : 스케줄링할 때 프로세스들의 가능한 한 단위 시간당 처리량을 최대화 한다. 

●  응답 시간 최소화 : 대화식 사용자에게는 가능한 최대한 응답 시간을 빠르게 한다. 

●  반환 시간 예측 가능 : 시스템의 부하에 관계없이 일정한 작업은 같은 시간 내에 같은 비용으로 실행, 완료되어 반환시기를
 예측 
가능해야 한다. 
●  균형 있는 자원 사용 : 스케줄링 시 시스템 내의 자원들이 유휴 상태로 놓이지 않게 골고루 사용하게 하고, 유휴 상태의 자원을 사용하는 프로세스에게 더 나은 서비스를 제공 한다. 
●  응답 시간과 자원 이용간의 조화 : 빠른 응답 시간과 자원의 활용도를 고려하여 응용에 따라 적절하게 조화시킨다.

●  우선 순위제를 실시 : 프로세스들에게 우선순위를 부여하여 우선순위가 높을수록 먼저 실행되도록 한다. 

●  페이지 부재를 적게 발생시키는 프로세스에게 더 좋은 서비스를 해준다. 

■ 선점 스케줄링  

선점은 한 프로세스가 CPU를 점유하고 있을 때 다른 프로세스가 현재 프로세스를 중지시키고 자신이 CPU를 차지 할 수 있는 방식이다. 우선순위가 높은 프로세스가 먼저 수행 될 때 유리하고, 빠른 응답시간을 요구하는 시분할 시스템에 유용하다. 하지만
선점 때문에 많은 오버헤드를 초래한다.

□ Round robin 스케줄링

라운드 로빈 스케줄링은 FCFS (First come First service) 방식으로 각 프로세스는 같은 크기의 타임 슬라이스를 할당 받는다.
만약 프로세스가 할당 받은 시간동안 작업을 완료하지 못하면 다음 프로세스로 넘어가고 실행 중이던 프로세스는 준비 완료 리스트의 가장 뒤로 보내진다. 

라운드 로빈 방식의 특징은 다음과 같다. 
 시분할 방식의 시스템에서 효과적이다.  할당 시간의 크기는 시스템의 효과적인 동작에 절대적인 영향을 미친다. 할당 시간이 크면 FCFS 방식과 같다.  할당 시간이 작으면 자주 문맥교환이 발생하므로 오버헤드가 커진다. 

 SRT 스케줄링
준비 큐에 있는 프로세스들 중에서 가장 짧은 시간이 소요된다고 판단되는 프로세스를 먼저 수행 시킨다. 
SJF 방식에 선점 방식을 도입한 방식이라고 생각하면 편하다. 

현재 프로세스가 CPU를 할당 받아 사용중이더라도 남은 처리 시간이 더 짧다고 판단되는 프로세스가 준비 큐에 생기면 언제라도 실행 중인 프로세스는 선점될 수 있다. 또한 수행 중인 각각의 작업들의 실행 시간을 추적 보유하고 있어야 한다. 
□ MLQ 스케줄링

작업들을 여러 종류의 그룹으로 나누어 여러개의 큐를 이용하는 스케줄링 기법이다. 그룹화된 작업들은 각각의 준비 큐에 넣어서 각 큐의 독자적인 스케줄링 알고리즘에 따라서 CPU를 할당 받는다.

● 다단계 큐 알고리즘은 준비 상태 큐를 여러 종류로 분할해 둔다.
● 각 큐는 자신만의 독자적인 스케줄링을 가지고 있다.
● 각각의 서로 다른 작업들이 다른 묶음으로 분류될 수 있을 때 사용되는 알고리즘이다.
● 일괄 처리 작업이 실행 중일지라도 상위 단계 큐에 작업이 들어오면 일괄 처리 작업은 선점 당한다.
● 한 큐에서 다른 큐로의 작업 이동은 불가능 하다.



□ MFQ 스케줄링

새로운 프로세스가 들어오면 높은 우선순위를 할당해 주어 단계1에서 즉시 수행해 주고 점차 낮은 우선순위를 부여하며 단계 n쯤 되는 나중에는 그 작업이 완료될 때까지 라운드 로빈으로 순환된다. 하나의 준비 큐를 통해 여러 피드백 큐를 걸치며 작업을 수행하는 방법이다. 이 방법은 CPU에 대한 요구량에 따라 프로세스들을 분류하는대 이상적인 방법이다.
● 짧은 작업에 유리하다.
● 입출력 장치를 효과적으로 이용하려고 입출력 위주의 작업들에 우선권을 준다.
● 가능한 빨리 작업의 특성을 알고 그것에 맞게 해당 작업을 스케줄링 한다.

● 프로세스가 보다 하위 단계의 큐로 옮겨갈수록 주어진 할당 시간은 점차 크게 설정된다.
 

■ 비선점 스케줄링

비선점은 한 프로세스가 CPU를 할당받으면 다른 프로세스는 할당 받은 프로세스가 작업을 종료할때 까지 CPU를 사용 불가능 한 방식이다. 모든 프로세스의 요구를 공정히 처리할 수 있다. 응답시간이 예측 가능하다. 단 짧은 작업이 긴 작업을 기다리는 경우가 발생 할 수 있다.

□ 우선순위 스케줄링

각 프로세스에게 우선순위를 부여하여 순위가 높은 순서대로 처리하는 방법이다. 우선순위는 보통 프로세스의 특성과 종류에 따라서 각각 다르게 부여될 수 있다. 우선순위 스케줄링은 정적 우선 방법과 동적 우선 방법이 있다.

정적 우선순위 방법 : 실행이 쉽고 상대적으로 오버 헤드는 적지만 주위 여건의 변화에 적응하지 못하고 우선순위를 바꾸지 않는다.

동적 우선순위 방법 : 상항 변화에 잘 적응한다. 구현하기가 복잡하고 오버헤드가 많으나 시스템이 응답도를 증가시켜 주므로 효율성이 있다.

□ 기한부 스케줄링


기한부 스케줄링은 작업들이 명시된 시간이나 기한 내에 완료되게 계획되고 작업들의 결과가 시간내에 구해지면 유용하고 마감 시간이 지난 후에 결과가 구해지면 쓸모가 없게 된다.

● 사용자는 사전에 작업이 요구하는 정확한 자원을 제시해야만 한다. 만약 기한 시간 내에 일을 끝내지 못하면 막대한 손해를 초래한다.
● 시스템은 다른 사용자들에 대한 서비스를 감소시키지 않으면서 기한부 작업을 실행할 수 있어야 한다.
● 시스템은 기한까지 일을 끝내기위해 자원 안배를 주의 깊게 계획해야 한다.
● 만약 많은 기한부 작업들이 동시에 실행된다면 스케줄링이 너무 복잡하게 된다.
● 기한부 스케줄링으로 요구되는 집중적인 자원 운영은 많은 오버헤드가 뒤따른다.

□ FCFS(FIFO) 스케줄링

가장 단순한 방식으로 프로세스들이 대기 큐에 도착한 순서에 따라 CPU를 할당 받는 방식이다. 
이방식은 일단 프로세스가 CPU를 차지하면 완료될 때까지 수행한다. 다른 방식에 비하여 작업 완료 시간을 예측하기가 쉽다. 선점이 불가능하기때문에 수행시간이 긴 프로세스가 할당받은 상태라면 수행시간이 짧은 프로그램이 대기할 경우가 생기고 중요한 작업이 대기하는 상황이 발생할수 있다. 또한 대화식 사용자들에게는 부적합하다.

□ SJF 스케줄링
SJF 방식 (SJN)은 준비큐에서 기다리는 작업중 수행시간이 가장 짧다고 판단되는 것을 가장 먼저 수행하는 스케줄링 방법이다. FCFS 보다 평균 대기 시간을 감소시키지만 큰 작업일수록 FCFS에 비해 예측이 어렵다. 긴 작업보다 짧은 작업일 수록 오버헤드 면에서 볼 때 유리하다. 하지만 이 방법은 수행할 작업이 얼마나 긴 것인지를 정확히 판단 해서 수행해야 하는대 수행시간을 정확히 얻는다는 것이 어렵다. 

□ HRN 스케줄링

이 방법은 SJF의 약점 특히 긴 작업과 짧은 작업 간의 불평등을 어느 정도 보안한 방법이다. 
이 방법도 비선점 스케줄링 방식이므로 한 작업이 CPU를 차지하면 그 작업은 완성될 때까지 실행한다. 
우선순위는  (대기 시간 + 버스트 시간) / 버스트 시간 으로 정한다. 

각각 스케줄링 방법을 표로 정리해보면 다음과 같다. 

2차방정식의 근구하기 알고리즘


#include<stdio.h>
#include<math.h>
#include<stdlib.h>

void main()
{
double a,b,c,x,ans,ans2,d,e;//x=판별식   ans,ans2=답 




printf("ax^2+bx+c 인 이차방정식의 a,b,c를 입력하시오");
scanf("%lf %lf %lf",&a,&b,&c);


x=b*b-4*a*c;  //판별식구하기

if(x==0)  //중근인 이차방정식
{
ans=-b/2*a;
printf("x=%d",(int)ans);
}
if(x>0)
{
d=-b+sqrt(x);
e=-b-sqrt(x);
ans=d/(2*a);
ans2=e/(2*a);
printf("x1=%d  x2=%d",(int)ans,(int)ans2);   

}
system("pause");

}

2013년 3월 22일 금요일

마방진 알고리즘


마방진(magic square)이란 가로,세로, 대각선의 합이 같은 사각형을 말한다.




구현 방법은

시작은 첫행 , 중간열 에서 1 을 두고
행을 감소, 열을 증가하면서 순차적으로 수를 넣어간다.
예외처리 두 가지


입출력 예

입력

9

출력

  8  1  6
  3  5  7
  4  9  2
---------------------------------------------------------

#include<stdio.h>
#include<math.h>
void main()
{
int sq[100][100]={0}; //마방진칸
int i,j; //for문 변수
int a,b=1,num2; // num2=마방진 칸을 제곱근으로 바꿔 배열설정
int x=0,y=0;
double num; //num= 마방진 칸수


do //마방진 입력이 잘못되었으면 재입력
{
printf("마방진의 칸수(홀수의 제곱수_최대 100)를 입력하세요: ");
scanf("%lf", &num);


while((int)num%2==0 || num>100);

num2=sqrt(num); //num 제곱근으로 변경
a=num2/2;
sq[0][a]=b;
x=num2/2;
for(i=0;i<num-1;i++)
{
b+=1;
int yy=y-1;
int xx=x+1;



if(yy<0)     //위로 올라갈곳이없을시 가장아래로 이동

yy=num2-1;    

if(xx>num2-1)  //오른쪽으로 이동이불가능할시 맨왼쪽으로 이동

xx=0;

if(sq[yy][xx]!=0) //이동하려는곳에 숫자가 이미있을경우 아래로 이동
{
y+=1;
if(y>=num2)
y=0;
}
else
{
x=xx;
y=yy;
}
sq[y][x]=b;
}
for(i=0;i<num2;i++)
{
for(j=0;j<num2;j++)
{
printf("%3d",sq[i][j]);

}
printf("\n");
}

}


2013년 3월 21일 목요일

mang0: 선린 Layer7 13기 홈페이지

mang0: 선린 Layer7 13기 홈페이지: aboutapple.or.kr 선린 Layer7 13기 홈페이지

달팽이배열 알고리즘

달팽이배열



입력

3 

출력

    1    2    3
    8    9    4
    7    6    5

------------------------------------------
#include<stdio.h>
 void main()
 {
  int sna[100][100]={0};
  int x=0,y=-1,a=1,num=1,b,i,j,count=0;
  
  do
  {
   printf("크기를 입력하세요: ");
   scanf("%d", &b);
  } 
  while(b<=0 || b>100); //입력받은 b값이 0보다작거나 100보다크면 b를 재입력받는다  
  count = b;
  
  while(count!=0)
  {
   for(i=0;i<count;i++) 
   {
    y+=a;
    sna[x][y]=num++;
   }
  
   count--;
   for(i=0;i<count;i++) 
   {
    x+=a;
    sna[x][y]=num++;
   }
   a*=-1;
  }
  
  for(i=0;i<b;i++) 
  {
   for(j=0;j<b;j++) 
   {
    printf("%3d",sna[i][j]);
   }
   printf("\n");
  }
  
 }
  
 

2013년 3월 20일 수요일

*로 이등변삼각형 그리기 알고리즘

*로 이등변삼각형 그리기


입력



3


출력


  *

 ***
*****


--------------------------------------------------

#include<stdio.h>
void main()
{
 int hi; //삼각형 층수 

 int i,j,k
 printf("삼각형 층수는?");
 scanf("%d",&hi);
 for(i=0;i<hi;i++)
 {
  for(j=hi;j>=i;j--)
  {
   printf(" ");
  }
  for(k=0;k<2*i-1;k++)
  {
   printf("*");
  }
 printf("\n");
 }
}

파스칼삼각형 알고리즘


파스칼삼각형



프로그램 명: pascal_tri

   1
  1 1
 1 2 1
1 3 3 1
다음과 같이 바로 위의 두 숫자를 더한 합이 자신의 숫자가 되는 삼각형을 파스칼 삼각형이라고 한다.

입력

이 파스칼 삼각형의 층수가 주어진다.

출력

층수 까지의 파스칼 삼각형을 출력하여라.

입출력 예

입력

4

출력

   1
  1 1
 1 2 1
1 3 3 1

--------------------------------------------------------------------


#include<stdio.h>
void main()
{

int hi;//삼각형 높이
int tr[100][100]={0};
int i,j,k;

printf("파스칼삼각형의 높이를 입력하시오");
scanf("%d",&hi);

for(i=0;i<hi;i++)
{

for(j=0;j<i;j++)
{
tr[i][j]=0;
}
}
tr[1][1]=1;
for(i=2;i<=hi;i++)
{
for(j=1;j<=i+1;j++)
{
tr[i][j]=tr[i-1][j]+tr[i-1][j-1];//윗줄 왼쪽오른쪽 항의 계산
}
}
for(i=1;i<=hi;i++)
{

{
for(k=1;k<=hi-i;k++)//삼각형 여백
printf(" ");
}
for(j=1;j<=i;j++)
{
printf("%3d",tr[i][j]);//삼각형 출력
}
printf("\n");
}

}