반응형
#include<stdio.h>
#define W 1024
#define H 768
#define head 54

FILE *fp1, *fp2; // 파일 처리용 구조체 변수  
unsigned char R[H][W], G[H][W], B[H][W];
void bmp_open(char s[20], char t[20]){ 
	fp1 = fopen(s,"rb"); // 바이너리 읽기 모드로 파일 열기 
	fp2 = fopen(t,"wb"); // 바이너리 쓰기 모드로 파일 열기  
}

void bmp_close()
{
	fclose(fp1);
	fclose(fp2);
}

void head_copy()
{
	unsigned char t;
	for(int i=0; i<head; i++)
	{
		t = getc(fp1); //gets() : 1byte를 입력받는 함수 
		putc(t,fp2); //puts() :1byte를 출력하는 함수  
	}
}

void bmp_read()
{
	for(int i=0; i<H; i++){ // 열 
		for(int j = 0; j<W; j++){ //행 
			B[i][j] = getc(fp1);
			G[i][j] = getc(fp1);
			R[i][j] = getc(fp1);
		}
	}
}

void bmp_write()
{
	for(int i=0; i<H; i++){
		for(int j = 0; j<W; j++){
				B[i][j] = getc(fp1);
				G[i][j] = getc(fp1);
				R[i][j] = getc(fp1);
			}
	}
}

void filter(float r, float g, float b)
{
	for(int i=0; i<H; i++){
		for(int j = 0; j<W; j++){
				B[i][j] = (int)(B[i][j]*b/100);
				G[i][j] = (int)(G[i][j]*g/100);
				R[i][j] = (int)(R[i][j]*r/100);
			}
	}
	
	for(int i=0; i<H; i++){
		for(int j = 0; j<W; j++){
				putc(B[i][j], fp2);
				putc(G[i][j], fp2);
				putc(R[i][j], fp2);
			
			}
	}
}

int main(){
	bmp_open("rgb.bmp", "filter.bmp");
	head_copy();
	bmp_read();
	
	filter(10, 20, 80); // r,g,b percentage 
	bmp_write();
	bmp_close();
}

반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

리스트,스택, 큐의 삽입, 삭제  (0) 2019.09.06
재귀함수  (0) 2019.08.30
피보나치 수열 값 출력하기  (0) 2019.08.30
상항식, 하향식 재귀  (0) 2019.08.23
별찍기  (0) 2019.08.23
반응형

리스트(list) 

- 하나의 연결 관계에 따라 자료들을 한 줄로 연결시킨 형태로 추상화된 자료구조이다.

- 자료 저장을 위해 메모리상의 연속된 공간을 할당해야 한다는 점에서 배열과 유사한 점이 있다.

- 자료들을 이동시킬 필요가 없이 연결관계만 재구성해 주면 되는 장점이 있다.

#include<stdio.h>
#include<list>
std::list<int>L;
void view(){
	std::list<int>::iterator p;
	for(p=L.begin(); p!=L.end(); p++)
		printf("%d", *p); //*p: 정수 리스트의 p위치에 있는 값
	printf("\n");  
}
int main()
{
	std::list<int>::iterator q;
	
	for(int i=1; i<=3; i++)
	 	L.push_back(i); // 마지막 원소 다음에 자료 i 삽입(연결)
	view();
	
	q = L.begin();
	q++;
	
	L.insert(q,4);
	view();
	
	L.push_back(5);
	view();
	
	q++;
	L.erase(q);
	view();
}
/*
123
1423
14235
1425

--------------------------------
Process exited after 0.02025 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

2. 스택(stack)

- 가장 나중에 입력된 자료에 가장 먼저 접근하고, 가장 먼저 저아도니 자료에는 가장 마지막에 접근하도록 설계된 후입선출(LIFO: Last In First Out) 형태로 추상화된 자료구조이다.

- 자료들을 쌓아 올리는 구조.

- 삽입삭제가 한곳에서만 이루어짐.

#include<stdio.h>
#include<stack>
std::stack<int>S;	// 정수형 스택 S 선언

int main(){
	for(int i=1; i<=3; i++)
	{
		S.push(i);		 //스택S의 가장 위에 i추가
	}
	for(int i=1; i<=2; i++)
	{
		printf("%d ", S.top());  //스택 S의 가장 위 자료값 출력 
		S.pop(); // 스택 S의 가장 위에 있는 자료 삭제
	}
	printf("\n"); 
	
	S.push(4); 
	S.push(5);
	while(!S.empty()){ // 스택S가 비어있지 않는 동안
		printf("%d ", S.top()); 
		S.pop(); // 
	}
	printf("\n");
}
/*
3 2
5 4 1

--------------------------------
Process exited after 0.02122 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

std::stack<int>S;

<stack>을 참조하여 스택을 선언하기 위해서 std::stack<스택에 저장될 자료형>스택이름; 을 사용

 

3. 큐(queue)

- 먼저 입력된 자료에 가장 먼저 접근하고, 가장 나중에 저장된 자료에는 가장 마지막에 접근하도록 선입 선출(FIFO: Fisrt In, First Out) 형태로 추상화된 자료구조이다. 

#include<stdio.h>
#include<queue>
std::queue<int>Q;

int main()
{
	for(int i=1; i<=3; i++)
	{
		Q.push(i);		
	}
	for(int i=1; i<=2; i++)
	{
		printf("%d ", Q.front()); //가장 처음값 출력
		Q.pop();
	}
	printf("\n");
	
	Q.push(4);
	Q.push(5);
	while(!Q.empty()){
		printf("%d ", Q.front());
		Q.pop();
	}
	printf("\n");
}
/*
1 2
3 4 5

--------------------------------
Process exited after 0.01674 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

큐에 저장된어 있는 값을 확인하기 위해서는 큐에 저장된어 있는 값을 순서대로 꺼내면서 확인해 보아야 함.

반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

이미지 프로세싱  (0) 2019.09.06
재귀함수  (0) 2019.08.30
피보나치 수열 값 출력하기  (0) 2019.08.30
상항식, 하향식 재귀  (0) 2019.08.23
별찍기  (0) 2019.08.23
반응형

 

*별출력하고 홀수값 출력하기 

#include<stdio.h>
void recur2(int y);
void recur1(int x);
int main(void){
	recur1(9); //recur(9)함수 호출 
	return 0;
}
void recur1(int x){ 
	if(x) 
		recur2(x-1); //recur2(x-1)호출
	printf("%d", x);
}
void recur2(int y){ // y가 x-1이므로 
	printf("*"); 
	if(y)
		recur1(y-1); //recur1(y-1)출력
}
/*
*****13579
--------------------------------
Process exited after 0.01646 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

함수와 값 더해서 출력하기 

#include<stdio.h>
int f(int a, int b){
	if(a<=0) // a가 0보다 작거나 같으면 b를 되돌려준다
		return b;
	else //만약 a가 0보다 크다면 f(a-1, b*2)+b 함수를 실행시킨다. 
		return f(a-1, b*2) + b; // a가 0보다 같거나 작아질때까지 반복한다.
}
int main(){
	int a, b;
	scanf("%d %d", &a, &b);
	printf("%d",f(a, b));
}
/*
2 2
14
--------------------------------
Process exited after 2.262 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

 

#include<stdio.h>
int rever(char a[], int s, int d){
	if(s < d){ //s가 d보다 작다면 
		char t;
		t = a[d]; a[d] = a[s]; a[s] = t; //t에 a[d]를 저장 a[d]에  a[s]값 저장 
		rever(a, s+1, d-1); //함수 호출 
	}
}
int main(){
	char k[4]={'a','b','c','d'};
	rever(k, 0, 3); // 함수호출 
	for(int i=0; i<4; i++)
	{
		printf("%c",k[i]); //배열 출력 
	}
	return 0;
}
/*
dcba
--------------------------------
Process exited after 0.02256 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

문자열 역순으로 출력하기 

반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

이미지 프로세싱  (0) 2019.09.06
리스트,스택, 큐의 삽입, 삭제  (0) 2019.09.06
피보나치 수열 값 출력하기  (0) 2019.08.30
상항식, 하향식 재귀  (0) 2019.08.23
별찍기  (0) 2019.08.23
반응형
#include<stdio.h>
int fib1(int n){
	if(n<=1)
		return n;
	else
		return fib1(n-1) + fib1(n-2);
}

int fib2(int n){
	int k;
	int ary_fib[n+1];
	ary_fib[0] = 0;
	if(n > 0){
		ary_fib[1] = 1;
		for(k=2; k<=n; k++)
			ary_fib[k] = ary_fib[k-1] + ary_fib[k-2];
	}
	return ary_fib[n];
}
int main()
{
	int a;
	scanf("%d",&a);
	printf("%d\n",fib1(a));
	printf("%d",fib2(a));
}
/*
4
3
3
--------------------------------
Process exited after 1.285 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

리스트,스택, 큐의 삽입, 삭제  (0) 2019.09.06
재귀함수  (0) 2019.08.30
상항식, 하향식 재귀  (0) 2019.08.23
별찍기  (0) 2019.08.23
switch-case와 while문, 함수를 사용한 사칙연산 계산기  (0) 2019.08.21
반응형

상향식 재귀 

#include<stdio.h>
int n;
void f(int k)
{
	if(k>n) return;
	printf("*");
	f(k+1);
}

int main()
{
	scanf("%d", &n);
	f(1);
}
/*
5
*****
--------------------------------
Process exited after 1.411 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

하향식 재귀 

#include<stdio.h>
int n;
void f(int k)
{
	if(k<=0) return;
	f(k-1);
	printf("*");
}

int main()
{
	scanf("%d", &n);
	f(n);
}
/*
5
*****
--------------------------------
Process exited after 1.411 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

하향식 재귀 

반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

재귀함수  (0) 2019.08.30
피보나치 수열 값 출력하기  (0) 2019.08.30
별찍기  (0) 2019.08.23
switch-case와 while문, 함수를 사용한 사칙연산 계산기  (0) 2019.08.21
두점의 중점  (0) 2019.08.21
반응형
#include <stdio.h>
int n;
void f(int k)
{
   for (int i=1;i<=n-k;i++)
      printf (" ");
   for (int j=1;j<=k;j++)
      printf ("*");
   printf ("\n"); 
}
int main()
{
   scanf ("%d",&n);
   for (int i=1;i<=n;i++)
      f(i);
}
반응형
반응형
#include<stdio.h>

int plus(int a, int b){
	return a+b;
}
int minus(int a, int b){
	return a-b;
}
int mu(int a, int b){
	return a*b;
}
int di(int a, int b){
	return a/b;
}

int main()
{
	
	while(1){
		int a = 0;
		int b = 0;
		char c;
		printf("종료를 원하신다면 0 + 0 를 입력해주세요\n");
		printf("숫자를 입력하세요 : ");
		scanf("%d %c %d", &a, &c, &b);
		printf("결과를 출력합니다 : ");
		
		switch(c){
			case '+': 
				printf("%d %c %d = %d\n\n",a, c, b, plus(a,b)); break;
			case '-': 
				printf("%d %c %d = %d\n\n",a, c, b, minus(a,b)); break;
			case '*': 
				printf("%d %c %d = %d\n\n",a, c, b, mu(a,b)); break;
			case '/': 
				printf("%d %c %d = %d\n\n",a, c, b, di(a,b)); break; 
			default :
				printf("다시 입력하세요 :"); break;
		}
		if(a==0 && c == '+' && b==0){
			printf("계산기를 종료합니다."); 
			break;
		}
	}
}

먼저 연산자들을 함수로 선언해놨습니다.

그런 후에 switch-case문으로 경우를 나눠놨고, while문을 이용하여 계속 계산을 진행할 수 있게 해 두었습니다!

그리고 if문을 사용해 프로그램을 종료시켰습니다. 

 

scanf("%d", n);

%d뒤에 띄어쓰기 있으면 무한루프에 빠져서 절대 못나옵니다ㅠ 

(저는 이거 발견하는데 몇시간 걸렸습니다ㅠㅠ 처음에는 다 그런 거겠죠ㅜㅜ?)

 

반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

상항식, 하향식 재귀  (0) 2019.08.23
별찍기  (0) 2019.08.23
두점의 중점  (0) 2019.08.21
별찍기 개수 만큼 출력  (0) 2019.08.19
택시 거리 계산하기  (0) 2019.06.19
반응형
#include<stdio.h>
struct point {float x; float y;};
point f(point p, point q)
{
	point t;
	t.x = (p.x + q.x)/2;
	t.y = (p.y + q.y)/2;
	
	return t;
}

int main(){
	point a,b,t;
	scanf("%f %f", &a.x, &a.y);
	scanf("%f %f", &b.x, &b.y);
	
	t = f(a,b);
	
	printf("%.3f %.3f\n", t.x, t.y);
}

/*
3.1 1.4
4.1 1.5
3.600 1.450

--------------------------------
Process exited after 10.97 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

별찍기  (0) 2019.08.23
switch-case와 while문, 함수를 사용한 사칙연산 계산기  (0) 2019.08.21
별찍기 개수 만큼 출력  (0) 2019.08.19
택시 거리 계산하기  (0) 2019.06.19
성적 입력하기  (0) 2019.06.19
반응형
#include <stdio.h>

int n;

void f(int k)
{
    int i, j;       
    for (i = 0; i < n; i++)        
    {
        for (j = 0; j < n-i; j++)  
        {
            printf(" ");
        }
        for (k = 0; k <=i; k++){
        	 printf("*");
		}      
        printf("\n");     
    }                  
}

int main()
{
	scanf("%d", &n);
	int i;
	for (i = 0; i < n; i++)        
    {
    	f(i);
    	break;
	}
}
반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

switch-case와 while문, 함수를 사용한 사칙연산 계산기  (0) 2019.08.21
두점의 중점  (0) 2019.08.21
택시 거리 계산하기  (0) 2019.06.19
성적 입력하기  (0) 2019.06.19
2차원 누적합 만들기  (0) 2019.06.12
반응형
#include<stdio.h>
struct point
{
	int x;
	int y;
};

int main()
{
	point p1, p2;
	int d=0;
	
	scanf("%d %d", &p1.x, &p1.y);
	scanf("%d %d", &p2.x, &p2.y);
	
	d+=(p1.x>p2.x)?(p1.x-p2.x):(p2.x-p1.x);
	d+=(p1.y>p2.y)?(p1.y-p2.y):(p2.y-p1.y);
	
	printf("%d\n", d);
}
/*
1 2
3 5
5

--------------------------------
Process exited after 21.98 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

두점의 중점  (0) 2019.08.21
별찍기 개수 만큼 출력  (0) 2019.08.19
성적 입력하기  (0) 2019.06.19
2차원 누적합 만들기  (0) 2019.06.12
문자shift  (2) 2019.05.31

+ Recent posts