*윤*
Bronze개인
팔로워0 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 5
검색어 입력폼
  • Gaussian filter(C언어) 평가B괜찮아요
    1. 프로그램 소개1.1 프로그램 내용[ C-programming of a Gaussian filter ]- 주어지는 raw 포맷의 그림파일을 파일 입출력을 이용해 버퍼에 저장한다.- 3*3, 5*5, 9*9의 Gaussian 마스크가 주어진다.- 각각의 마스크와 버퍼에 저장된 데이터와 convolution 한다.- convolution 한 결과 값에 마스크 가중치 합을 나눠준다.- Gaussian filter 처리된 데이터를 파일출력을 통해 raw포맷으로 저장한다.1.2 배경 지식1.2.1 RAW file formatRAW 파일 포맷은 촬영된 영상이 카메라 내부에서 필터링이나 어떠한 조정도 거치지 않은 상태, 즉 CCD나 CMOS부터 바로 전달된 영상에 대한 정보를 저장하고 있다. 이러한 점에서 RAW 파일을 디지털 네거티브라 부른다.[RAW 파일의 장점]TIFF 파일 포맷과 비교해 볼 때 RAW 이미지 파일은 압축되지 않은 TIFF 파일보다 용량이 작으며 카메라를 통한 어떠한 처리도 거치지 않은 , 즉 CCD나 CMOS를 통해 직접 전해진 데이터를 가지고 있다는 것이다. TIFF의 경우 카메라 내부에 설정된 선예도, 채도, 대비에 영향을 받는다.이러한 점에서 볼 때 jpg 파일보다 RAW 파일 포맷이 유용하다는 것을 알 수 있다. 촬영된 이미지를 사용자가 최대한 조작할 수 있다는 것은 필름을 사용하던 때의 암실작업과 맞먹는 것이라 할 수 있다.1.2.2 Gaussian FilterKarl Friedrich Gauss 가 제안한 Gaussian 분포는 모든 과학 분야에서 가장 보편적이며, 실험 오차 측정 등에 많이 쓰여지는 분포이다. 이 Gaussian 분포를 영상처리에 적용한 것이 바로 Gaussian filtering인데, 정규 분포 또는 임의의 확률 분포의 성질을 가지고 생성된 잡음을 제거하기 위한 목적으로 사용된다.2차원 Gaussian 분포 함수는 순환 대칭 특징을 가진다(마스크로 회선한 스무딩 결과는 방향이 같다.)Gaussian filter를 영상처리에 적용하면 스무딩 효과를 가지게 되는데 스무딩의 정도는 Gaussian 마스크의 표준편차로 작동한다.1.3 가정Raw file을 입력으로 받아 Gaussian smoothing filtering을 거쳐 Raw file로 출력한다.image 한 장을 in_buffer[HEIGHT][WIDTH]에 저장하고, 주어진 3*3, 5*5, 9*9 MASK 를 씌워 주변 pixel과 Convolution 하고, 가중치 합으로 나눠 평균값으로 해당 pixel을 채운다.입력과 출력의 Image data를 저장할 buffer가 있다고 가정하고, 각 픽셀마다 Gaussian filter를 적용시키며 mask가 씌워지지 않는 외곽부분은 mask의 값을 0으로 처리한다고 가정한다.2. 소스코드/* -----------------------------------------------------------[Filename : Gaussian.c용 도 : 입력된 영상데이터를 Gaussian filter 처리하는 프로그램사용방법 : 컴파일 - $ gcc -o gaussian gaussian.c실행 - $ ./ gaussian운영체제 : Linux (Redhat 9.0)Date : 2009.09.21작 성 자 : 김윤녕알고리즘 : Gaussian smoothing filter 알고리즘------------------------------------------------------------*/#include #define Y_size 512 //Height#define X_size 512 //Width#define MASK_SIZE 9//Mast size & Window sizevoid mask_def();void window_def(int y,int x);int convolution();unsigned char in_buffer[Y_size][X_size]; //입력 raw 파일을 받아 저장하는 image bufferunsigned char out_buffer[Y_size][X_size];//Gaussian filter 연산을 하여 출력할 raw data를 저장하는 image bufferunsigned int window[MASK_SIZE][MASK_SIZE];//x,y값이 증가하면서 바뀌어질 3*3 window 9개의 pixelunsigned int mask[MASK_SIZE][MASK_SIZE];//Gaussian filter mask//3*3 Maskunsigned int mask_3[3][3] = {{1,2,1},{2,4,2},{1,2,1}};//5*5 Maskunsigned int mask_5[5][5] = {{1,1,2,1,1},{1,2,4,2,1},{2,4,8,4,2},{1,2,4,2,1},{1,1,2,1,1}};//9*9 Maskunsigned int mask_9[9][9] = {{1,1,1,2,2,2,1,1,1},{1,1,2,2,4,2,2,1,1},{1,2,2,4,8,4,2,2,1},{2,2,4,8,16,8,4,2,2},{2,4,8,16,32,16,8,4,2},{2,2,4,8,16,8,4,2,2},{1,2,2,4,8,4,2,2,1},{1,1,2,2,4,2,2,1,1},{1,1,1,2,2,2,1,1,1}};int main(){int y=0,x=0,i=0,j=0;int mask_sum=0;//mask 들의 합.FILE *fp_in;FILE *fp_out;fp_in = fopen("lena.raw","rb");//입력파일 포인터fp_out = fopen("out_3.raw","wb");//출력파일 포인터mask_def();//MASK_SIZE 에 따라 변하는 MASK 정의.for(i=0 ; i
    공학/기술| 2009.11.27| 8페이지| 1,000원| 조회(2,420)
    미리보기
  • c언어 최대공약수,최소공배수
    과목명고급프로그래밍및실험분반1담당교수이현석 교수님학과전자통신공학과학번2005709278이름김윤녕6주차: Recursion 이용해서 최대공약수 구하기1. 과제설명■ 다음 출력결과가 나오도록 프로그램을 작성 하시오? 최대공약수를 구하는 프로그램을 recursion 방식을 이용하여 작성 하시오.? 최소기능- 재귀 방식으로 구현? 추가기능- 재귀 방식을 이용하여 최소공배수 구하는 프로그램 구현2. 이론1. 함수C언어에서는 적어도 main()이라는 함수가 있어야 하며 그 외에 많은 함수를 가질 수 있다. 간단한 프로그램은 main()이라는 하나의 함수로도 충분히 만들어낼 수 있다. 하지만 프로그램의 구조가 좀 더 복잡해지면 함수가 여러 개 쓰이게 되며 여러 개의 파일로 이루어지게 된다. 프로그램을 효율적으로 작성하기 위해서는 이렇게 여러 개로 만든 함수가 필요하며 복잡한 프로그램일수록 더욱 더 필요하다.[함수의 데이터 형]함수명([인수 리스트]){[변수 선언;][문장;]}함수의 호출은 호출 함수를 실행하는 것을 말하며, 이는 이미 작성한 특정한 기능을 수행하는 실행 함수를 수행시키는 것을 의미한다. 표현형식은 다음과 같다.함수명(인수1,……,인수n);즉, 원하는 함수의 이름 다음에 괄호를 붙이고 그 안에 인수의 값을 주면 되는데, 인수가 없는 함수의 경우라도 괄호는 절대로 생략 할 수 없다. 예를 들어 func() 함수를 사용하고자 할 때는 다음과 같이 사용하면 된다.func();프로그래머가 작성한 실행 함수를 호출하는 과정과 반환하는 과정은 다음과 같다.-함수의 인수전달 : 호출 함수에서 실행 함수로 인수를 전달한다.-함수의 실행 : 작성된 실행 함수를 실행한다.-함수의 실행 결과 반환값이 있으면 호출 함수에 반환값을 전달하고 호출 함수로 돌아간다.2. 재귀함수재귀함수란 자기자신을 다시 호출하는 함수를 일컫는데 자기가 자기 자신을 부르는 것을 재귀호출(Recursive call) 또는 함수의 순환(Recursiion)이라고 한다.재귀함수는 스택이라는 메모리를 매우 많이 소비한다. 특히 지역변수인 자동변수가 많은 재귀함수일 경우 더욱 많은 메모리를 사용한다. 실행 중 너무 많은 재귀함수를 잘못 사용하게 되면 컴퓨터가 작동을 중지하거나 프로그램에 이상이 발생할 수도 있다. 따라서, 재귀함수를 사용함으로써 보통 함수를 사용했을 때보다 더 속도가 느려지거나 프로그램을 이해하기 어려운 상태로 만드는 경우가 있으므로 재귀함수를 사용할 때는 항상 주의해야 한다.3. 함수간의 데이터 전달호출함수는 기본적으로 인수를 통해서 피호출 함수에게 인수값을 전달하고, 피호출 함수에서는 그 실인수의 값을 가인수로 받아 계산과 처리를 한 다음, 그 결과값을 호출함수에게 되돌려 준다. 이 때 되돌려 주는 문장을 제어하기 위해서 return문을 사용한다.3.1 return문return; - return값 없이 호출한 함수로 되돌아 간다.return식; 또는 return(식); - 실행된 결과 값을 가지고 호출한 함수로 되돌아간다.피호출 함수 내에서 하나의 값을 되돌려 주는 함수를 return문이라고 하는데, 이것은 두 가지 용도로 사용된다. 첫 번째는 함수 내에서 return문을 만나면 현재의 실행 위치와 관계없이 무조건 실행을 종료시키고 호출한 함수로 실행을 옮긴다. 두 번째는 함수 내에서 처리한 결과값을 상수, 변수 또는 식을 통해서 호출한 함수로 되돌려준다.한편 return문의 괄회 내 식의 형식과 함수형은 반드시 일치되어야 하며, 함수의 형을 정의하지 않으면 컴퓨터는 int형으로 간주한다. 또 변수나 식의 값을 소괄호로 반드시 묶을 필요는 없지만 시각적으로 묶어두는 것이 좋다.3.2 call by value값에 의한 함수호출(call by value)는 C언어에서 가장 일반적인 인수 전달 방법으로 실인수의 실제 값이 가인수에 전달된다. 따라서 호출함수에서 피호출 함수에게 값을 주는 방식으로 피호출 함수에서 인수 값을 바꾸더라도 호출 함수에게는 전혀 영향을 받지 않으므로 호출 함수와 호출된 함수(피호출 함수) 각각의 모듈로서 독립성을 유지할 수 있다. 따라서 문자처리에 매우 효율적이다.3.3 call by refrence피호출 함수에서 return문의 값 두 개를 동시에 호출 함수에게 되돌려 줄 수가 없다. 일반적으로 피호출 함수 내에서 두 개 이상의 복수 개 return값을 호출함수에게로 되돌려 주어야 할 경우가 필요하다. 이와 같이 복수 개의 값을 되돌려 주려면 주소(address)를 사용하는 참조에 의한 함수 호출(call by reference)방법을 사용해야 한다.call by reference 방법이란, 인수 전달 방법이 실인수에 해당되는 주소를 대응되는 가인수로 보내는 방법이다. 즉 인수 값을 전달하는 것이 아니라 인수의 주소(address)를 전달하는 방법이다. 따라서 호출함수의 실인수와 피호출 함수의 가인수는 서로 양방향으로 전달이 가능하다.3.4 void형 함수모든 함수는 return문을 사용하여 값을 반환(return값)으로 하고, 만약 return문이 없으면 0을 그 함수의 반환 값으로 한다. 그러나 함수의 선언을 void로 지정하면 함수는 값을 되돌리지 않고 제어만 되돌린다. void형은 데이터형을 갖지 않는 함수형으로 피호출 함수 내에서 처리한 결과 값을 되돌려주지 않는다. void 형에서 함수를 호출할 때는 함수만 단독적으로 사용해야 하며 void로 선언된 함수는 수식에서 사용될 수 없다.* 스택(stack)스택이란 메모리공간을 사용하는 방법중의 하나이다.스택(stack)은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다. 끝먼저내기 목록(Pushdown list)이라고도 한다.스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸시(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 하는데, 이 때 꺼내지는 자료는 가장 최근에 보관한 자료부터 나오게 된다. 이처럼 나중에 넣은 값이 먼저 나오는 것을 LIFO 구조라고 한다.이를테면, a부터 b와 c를 순서대로 넣은 다음 자료를 하나씩 꺼내면 c부터 b와 a의 순서로 나오게 된다. S를 스택, x를 데이터 요소(element)라고 하자. 그러면 스택에서는 아래와 같은 중요한 연산이 존재하는 것을 알 수 있다.S.top(): 스택의 가장 윗 데이터를 넘겨준다. 만약에 비었다면 이 연산은 정의불가 상태다.S.pop(): 스택의 가장 윗 데이터를 지우고 그 값을 넘겨준다. 스택이 비었다면 연산 정의불가 상태.S.push(): 스택의 가장 윗 데이터로 x를 넣는다.S.empty(): 스택이 비었다면 참을 주고,그렇지 않다면 거짓이 된다.또한, 스택연산을 목록(list) 연산으로 표현할 수도 있다.S.top(): S.retrieve(S.first())S.pop(): S.top(),S.delete(S.first())S.push():S.insert(x,pNull)S.empty():S.first()==pNull컴퓨터에서 포인터라고 하는 자료의 위치 표시자와 넣고 빼는 명령어를 사용해서 스택을 이용한다. 주로 함수를 호출할 때 인수의 전달 등에 이용된다. LIFO의 특징을 이용하여 역폴란드 표기법을 이용한 프로그래밍 언어인 포스(Forth) 등에서도 이용된다.3. 소스코드 설명int max (int a, int b){if (b%a==0)//두번째 입력받은 값이 첫번째 입력받은 값으로 나누어 떨어지면return a; //첫번째 입력받은 값을 리턴한다.else//나머지가 0이 아니면return max(b, a%b); //재귀호출의 입력을 b, a%b로 넣어준다.}최대공약수를 구하는 함수이다. 입력받은 데이터 a,b에 대하여 b%a==0이면, 즉 b가 a로 나누어 떨어진다면 간단하게 a 값이 최대공약수가 된다. 만약 그렇지 않다면 그러한 경우가 나올 때까지 재귀호출을 한다. 예를 들어 입력한 데이터 a,b가 12, 15라면 15%12 = 3이기 때문에 max(15,12)를 리턴하여 다시 max함수를 호출한다. 또, 12%15 = 12이기 때문에 max(12,3)을 호출한다. 이런식으로 max(12,15)[max(15,12)[max(12,3)[max(3,0)]]]까지 가게 되고 0%3=0이므로 if문이 성립된다. 따라서 max함수는 3값을 메인 함수로 리턴하게 된다.int min (int a, int b){return a*b/max(a,b);}최소공배수를 구하는 함수이다. 최소공배수는 간단하게 구현될 수 있었다.두 수의 곱을 max함수에서 구한 최대공약수로 나눠주면 최소공배수가 된다. 최소공배수 값을 리턴하여 메인함수에서 출력하게 된다.4. 실행결과 및 설명두 수를 입력받아 최대공약수와 최소공배수를 출력하는 함수이다.5. 고찰수업시간에 Recursion에 대한 내용을 배웠지만 교수님이 설명해주신 함수를 이해하는데 오랜 시간이 걸렸다. Recursion이란 재귀함수로 함수 안에서 자기 함수를 다시 불러오는 것이었다. 계속해서 자기함수를 재귀호출하여 더 이상의 재귀호출이 일어나지 않는 종료 조건문(이번 프로젝트에서는 if(b%a==0)인 순간)을 만나게 되면 리턴 받은 값을 가지고 메인 함수로 가는 것이었다. 즉 재귀호출을 하면 수업시간에 배운 스택에 하나씩 쌓아 두었다가 LIFO(Last Input First Output)의 원리로 나중에 쌓은 데이터를 제일 먼저 꺼내는 식이다.
    프로그램소스| 2009.07.31| 6페이지| 1,000원| 조회(1,420)
    미리보기
  • c언어로 달력만들기 평가B괜찮아요
    과목명고급프로그래밍및실험분반1담당교수이현석 교수님학과전자통신공학과학번2005709278이름김윤녕4주차: 09 달력만들기1. 과제설명console화면에 다음과 같은 출력이 나오도록 09년 달력을 만든다.[최소기능]- 입력받은 달의 09년 달력을 출력.- 요일과 날짜가 모두 정상적으로 출력.[추가기능]- 년도와 달을 입력받음.(윤년 정확히 계산)- 입력받은 년도의 공휴일 수를 계산, 출력.2. 이론(1)함수C언어에서는 적어도 main()이라는 함수가 있어야 하며 그 외에 많은 함수를 가질 수 있다. 간단한 프로그램은 main()이라는 하나의 함수로도 충분히 만들어낼 수 있다. 하지만 프로그램의 구조가 좀 더 복잡해지면 함수가 여러 개 쓰이게 되며 여러 개의 파일로 이루어지게 된다. 프로그램을 효율적으로 작성하기 위해서는 이렇게 여러 개로 만든 함수가 필요하며 복잡한 프로그램일수록 더욱 더 필요하다.[함수의 데이터 형]함수명([인수 리스트]){[변수 선언;][문장;]}함수의 호출은 호출 함수를 실행하는 것을 말하며, 이는 이미 작성한 특정한 기능을 수행하는 실행 함수를 수행시키는 것을 의미한다. 표현형식은 다음과 같다.함수명(인수1,……,인수n);즉, 원하는 함수의 이름 다음에 괄호를 붙이고 그 안에 인수의 값을 주면 되는데, 인수가 없는 함수의 경우라도 괄호는 절대로 생략 할 수 없다. 예를 들어 func() 함수를 사용하고자 할 때는 다음과 같이 사용하면 된다.func();프로그래머가 작성한 실행 함수를 호출하는 과정과 반환하는 과정은 다음과 같다.-함수의 인수전달 : 호출 함수에서 실행 함수로 인수를 전달한다.-함수의 실행 : 작성된 실행 함수를 실행한다.-함수의 실행 결과 반환값이 있으면 호출 함수에 반환값을 전달하고 호출 함수로 돌아간다.(2) 배열배열(array)란 같은 데이터형을 가진 여러 개의 데이터가 메모리 안에 쭉 나열되어 있는 것을 말한다. 배열의 요소인 각각의 데이터는 일련번호로 구분되는데 이 번호를 인덱스(index)라 한다. 인덱스를 지정하. 그러나 주어진 조건식의 값에 따라 여러 개의 경우 중에서 어느 한 경우로 제어를 옮겨서 수행하고자 할 때는 다중 선택문인 switch문을 사용하면 편리하다. 따라서, switch문은 다중 분기를 요구하는 경우에 사용하는 제어문이다.switch(정수(또는,수식)){case 상수-1 : 명령문-1;break;case 상수-2 : 명령문-2;break;...default : 명령문-n;break;}위의 switch문 기본 형식에서 break문은 switch문의 실행을 종료시키는 역할을 한다. switch문의 실행중에 break문을 만나면 해당되는 switch문 내부의 문장을 더 이상 실행 하지 않고, switch문 다음에 나타나는 문장을 실행한다.(4) 반복문1) for문for문은 반복되는 명령문을 수행하는데 있어서 반복되는 횟수나 방법을 지정함으로써 일정한 범위를 반복적으로 수행한다.for문은 초기값을 가지고 조건식을 비교하여 조건식이 참이면 다음 명령문을 실행 한 후 증가값을 증가시키고, 거짓이라면 for문을 빠져 나간다. for문의 초기값과 증가값은 수식으로 나타낼 수도 있다.for(초기값;조건식;증가값)명령문;다음 명령문;2) while문c언어에서 가장 기본적인 반복(loop)문은 while문으로 우선 주어진 조건을 비교하여 참 인 경우에 다음 명령문을 반복 실행하고, 거짓이면 while문을 빠져나간다. 만일 처음부 터 조건식이 거짓이라면 명령문은 한번도 실행되지 않는다.while(조건식)명령문;다음 명령문;3) do - while문do - while 문은 우선 루프 내의 명령문들을 한 번 실행한 다음에 조건식을 검사하여 참이면 루프 내의 명령문들을 조건식이 거짓일 때까지 반복 실행한다. for문이나 while문 은 조건식의 판단이 끝난 후에 명령문이 실행되지만 do - while 문은 명령문을 먼저 실 행한 후 조건식의 판단이 do -while 문 끝에서 이루어지므로 그 안에 있는 명령문들은 적어도 한번은 실행된다는 것이 다르다.do{명령문;다음 명령문;한 달중에 한 날짜를 입력받아 그 날짜의 요일을 출력해주는 수식이다. 입력받은 날짜와 그 달의 첫 번째 요일에 해당하는 정수를 더해 7로 나눈 다음 1을 빼주면 그 날짜의 요일이 나온다. 공휴일의 수를 계산하기 위해 이 과정부터 한 단계씩 해결해 나갔다.Total_Red_day = Sunday + Red_day_not_sunday - (a[0] + a[1] + a[2] + a[3]);달의 공휴일 수를 계산하는 수식이다. 이 전에 먼저 일요일의 수를 계산하여 일요일을 제외한 공휴일의 수를 더한 다음 일요일과 공휴일이 겹치는 날을 빼면 한 달의 총 공휴일 수가 나오게 된다.fflush(stdin);키보드 입력 버퍼를 지워주는 함수이다. 저번 과제에서도 썼던 함수인데 문자열을 입력받고 단일 문자를 입력 받았을 때 키보드의 입력버퍼로 인해 같은 결과가 두 번 씩 출력되는 것을 방지할 수 있었다. 이번에도 달력이 두 번씩 출력되어 이 함수를 사용하였더니 해결할 수 있었다.exit(0);exit 함수는 프로그램을 종료할 때 사용한다. 프로그램 구동 중 메인 함수를 return 해서프로그램을 종료 할 수도 있지만 그렇게 하지 못할 경우에 사용한다.※ exit(0)과 exit(1)의 차이exit 에 들어가는 parameter는 status code로서 0이면 success, 1이나 non-zero value이면 failure를 나타낸다. 이는 해당 프로그램을 실행시킨 상위 프로세스(Shell 이나 다른 프로그램)의 wait 에 status code를 전달하게 된다. 따라서 어떤 프로그램이 다른 프로그램을 호출 또는 실행한 후에 그 프로그램의 실행/종료 상태에 따라서 어떤 action을 해야 할 때 사용할 수 있다./usr/include/stdlib.h 에 보면 이렇게 되어 있다.#define EXIT_SUCCESS 0 /* Successful exit status. */#define EXIT_FAILURE 1 /* Failing exit status. */4. 실행결과 및수업시간에 진도 나가는 것도 if문, for문, 배열까지 너무 빨리 나가서 과제가 부담스러웠다. 그래서 먼저 1달 달력을 만들어 보고, 1년으로 확장했다. for문과 if문을 사용하여 한 달을 만들었다. 그리고 과제 tip에 나온 식을 사용하여 기준 일을 설정하고 그 기준일로부터의 총 일수를 표현하는 변수를 만들어 한 달의 시작요일을 설정 할 수 있었다.요일을 나타내는 배열을 처음에 [6][7]로 하였더니 이니셜라이저가 너무 많다는 에러메시지가 나왔다. 그래서 [10][10]으로 해주었더니 제대로 동작하였다. 2차원 배열을 사용해 요일을 출력하여 2차원 배열의 개념을 이해할 수 있었다.문제는 윤년을 계산하는 것이었다. 윤년이라면 2월의 총 일수가 29일이 된다. 인터넷을 검색하여 소스를 참고하였다. 그래서 윤년을 계산하는 함수를 따로 만들어 함수 호출을 이용하였다.if문으로 둘로 나누어 연도와 달을 입력받아 기준일보다 전, 기준일보다 후로 나누어서 1년만이 아닌 모든 연도의 달력을 출력할 수 있게 하였다. 그리고 적절히 exit(); 함수를 사용해 일반적인 값이 아닌 다른 값이 나오면 프로그램을 종료시키도록 설정하였다.입력받은 달의 공휴일의 수를 나타내기 위해 먼저 요일을 출력하는 기능을 추가하였다. 그리고 그 달의 일요일의 수를 찾아내고 공휴일을 입력받는다. 일요일의 수는 4,5중 하나 이기 때문에 쉽게 할 수 있었고 일요일과 공휴일이 겹치는지 나타내는 식을 만드는데 어려움이 있었다. 각 경우에 대해 대입해봐서 일반적인 식을 도출 할 수 있었다. 그렇게 한 달의 공휴일 수를 나타냈으나 1년의 공휴일의 수를 나타내진 못했다. 1년의 공휴일의 수도 이처럼 비슷하게 입력을 해놓고 일요일의 수와 겹치는지만 확인하면 될 것 같다.저번 달, 다음 달, 작년, 내년으로 이동할 수 있는 기능을 추가 하였다. 이 기능은 switch문으로 일정한 값을 입력받아 그 값에 따라 달력을 출력하게 하였다. 여기서 scanf()로 입력을 받았더니 같은 달이 두 번 출력되었고, 이동하는_sunday; //일요일을 뺀 한 달의 공휴일 수int a[4] = {0,0,0,0};// 일요일과 공휴일이 겹치면 1이되는 변수int Total_Red_day;//일요일을 포함한 한 달의 공휴일 수int Move = 0; // 저번달, 다음달, 작년, 내년으로 움직이는 변수.//=============================== 입력받는 부분 ==================================//printf("연도를 선택해주세요 : ");scanf("%d", &year);if (year == 0) // 입력한 연도가 0이면 종료시킨다.exit(0);printf("달을 선택해주세요 : ");scanf("%d", &month);if (month < 1 || month > 12) // 입력한 달이 1 ~ 12중에 없으면 종료시킨다.exit(0);while(1){// 초기화day = 0;Sum_of_Day = 0;Sunday = 0;//============================== Move하는 기능 추가 ==================================//switch (Move){case '2': // 작년으로 이동year -= 1;break;case '4': // 저번 달로 이동if (month == 1){month = 12;year -= 1;}elsemonth -= 1;break;case '6': // 다음 달로 이동if (month == 12){month = 1;year += 1;}elsemonth += 1;break;case '8': // 내년으로 이동year += 1;break;case '0': // 나가기exit(0);default:;}//============================== 윤년, 총일 수 계산 ===================================//// 기준연도 이후if (year >=YEAR){for (i = year ; i >= YEAR ; --i){if(i > YEAR){Day_< 0)
    프로그램소스| 2009.07.31| 12페이지| 1,000원| 조회(1,468)
    미리보기
  • MIPS Processor multi cycle(verilog) 평가A+최고예요
    1. 프로젝트소개Project #3 : Multicycle sMIPS 설계1. 목적 : 이번 프로젝트는 본 과목의 최종 단계인 Single Cycle sMIPS 프로세서를 설계 하는 것이다. 이를 통해 범용 프로세서 중 하나인 RISC Machine을 이해하며, 설계 과정 중 필요한 툴의 사용법을 익힌다. 이 프로젝트의 핵심 내용은 다음과 같다.- Verilog HDL 언어의 습득- Xilinx ISE Webpack Tool(혹은 Altera Quartus Tool)의 사용법 습득- FPGA 환경에서의 디지털 로직 설계 개념 이해 및 설계된 로직의 합성과 검증 과정 확인- 범용 32-bit RISC Machine에 대한 이해2. 내용 : 본 프로젝트의 수행 과정은 아래와 같다.Xilinx ISE 툴(혹은 Altera Quartus)을 이용하여 Verilog HDL 언어로 sMIPS를 완성한다. 그리고 기능 레벨 시뮬레이션(Behavioral Simulation)을 수행하여 원하는 결과를 얻을 때 까지 코드를 수정한다. 로직 합성(Synthesis), 배치 및 배선(Place&Routing) 과정을 수행한 후 타이밍 시뮬레이션 (Timing simulation) 을 수행하여 FPGA의 환경에서의 지연을 감안한 실제 수행 결과를 확인한다. 원하는 결과를 얻을 때 까지 이전의 과정을 반복한다. 이때 각 과정은 실제의 디지털 로직 설계의 기본이 되며 , 다음 프로젝트를 위해서도 필수적이므로 약간의 시간을 투자하더라도 직접 수행하고, 각 과정들에 대한 이해 및 이에 따른 여러 해결 방법을 익히도록 노력한다.이 프로젝트에서 사용하는 툴은 Xilinx ISE Webpack(혹은 Altera Quartus)이며, 기능 레벨 및 타이밍 검증 방법은 Xilinx ISE Webpack(혹은 Altera Quartus)에서 제공하는 Test Bench Waveform이나 Verilog Test Fixture를 사용하여 수행하도록 하며, 합성과 배치 및 배선은 Xilinx ISE(혹은 Altera Quartus)에서 제공하는 것을 사용한다.(1) Verilog HDL로 sMIPS 설계(2) 기능 레벨 시뮬레이션 (Functional Simulation)(3) 합성 과 배치 및 배선 (Synthesis and Place&Routing)(4) 타이밍 시뮬레이션 (Timing Simulation)(5) 설계된 sMIPS에 새로운 명령어 추가2. Verilog 소스코드(※ ori, bne를 추가한 코드)/*--------------------------------------------------------------------------------Title : 32-bit sMIPS single cycle processor(added bne, ori instruction)File : top_plus.v--------------------------------------------------------------------------------Author : Kim Yoon NyungOrganization : Kwang woon UniversityCreated : 2009.5.20Last update : 2009.5.25Platform : WINDOWS XPSimulators : Quartus II web edition 9.0Synthesizers : Quartus II web edition 9.0--------------------------------------------------------------------------------*///Multi cycle sMIPS TOP level modulemodule sMIPS_multi(input clk, reset,output [31:0] mem_adr, aluresult, mem_write_data, srca,srcb, instr,output [31:0] mem_read_data,pc,output [4:0] reg_write_adr,output [31:0] reg_write_data,output memwrite);//wire memwrite;//control signal//instantiate processor and memoriesmem Memory(clk, memwrite, mem_adr, mem_write_data, mem_read_data);mips MIPS(clk, reset, memwrite, mem_adr, mem_write_data,aluresult,srca,srcb,instr, mem_read_data,pc,reg_write_adr,reg_write_data);endmodule//Memory modulemodule mem(input clk, memwrite,input [31:0] adr, writedata,output [31:0] readdata);reg [31:0] RAM[0:63]; //memory model declarationassign readdata =RAM[adr[31:2]];//word alignedinitialbegin$readmemh("memfile.dat",RAM);//read instructions in memfile.dat (hexa mode)endalways@(posedge clk)if(memwrite)RAM[adr[31:2]]
    프로그램소스| 2009.07.31| 23페이지| 1,500원| 조회(1,680)
    미리보기
  • 32bit ALU(연산기) 베릴로그(Verilog) 소스코드, 시뮬레이션 분석, 블록다이어그램, 고찰
    1. 프로젝트소개Project #1 : ALU (Arithmetic Logic Unit) 설계1.1. 목적: 본 과목에서 최종적으로 수행할 MIPS 프로세서의 설계를 위한 첫 번째 단계로, Verilog HDL 언어로 32비트 ALU(Arithmetic Logic Unit)을 설계한다. 이를 통해 범용 프로세서의 핵심 코어인 32비트 ALU의 구조 및 동작을 이해한다. 그리고 설계 과정 중 필요한 툴의 사용법을 익힌다. 이 프로젝트의 핵심 내용은 다음과 같다.- Verilog HDL 언어의 습득- Xilinx ISE Webpack Tool (혹은 Altera Quartus Tool) 의 사용법 습득- FPGA 환경에서의 디지털 로직 설계 개념 이해 및 설계된 로직의 합성과 검증 과정 확인- 범용 32 비트 ALU에 대한 이해2. 내용: 본 프로젝트의 수행 과정은 아래와 같다.Xilinx ISE 툴 (혹은 Altera Quartus)을 이용하여 Verilog HDL 언어로 32비트 ALU를 완성한다. 그리고 기능 레벨 시뮬레이션(Behavioral Simulation)을 수행하여 원하는 결과를 얻을 때 까지 코드를 수정한다. 로직 합성(Synthesis), 배치 및 배선(Place&Routing) 과정을 수행한 후 타이밍 시뮬레이션 (Timing simulation) 을 수행하여 FPGA의 환경에서의 지연을 감안한 실제 수행 결과를 확인한다. 원하는 결과를 얻을 때 까지 이전의 과정을 반복한다. 이때 각 과정은 실제의 디지털 로직 설계의 기본이 되며 , 다음 프로젝트를 위해서도 필수적이므로 약간의 시간을 투자하더라도 직접 수행하고, 각 과정들에 대한 이해 및 이에 따른 여러 해결 방법을 익히도록 노력한다.이 프로젝트에서 사용하는 툴이 Xilinx ISE Webpack 일 경우, 기능 레벨 및 타이밍 검증 방법은 Xilinx ISE Webpack에서 제공하는 Test Bench Waveform이나 Verilog Test Fixture를 사용하여 수행하도록 하며, 합성과 배치 및 배선은 Xilinx ISE에서 제공하는 것을 사용한다. Altera(사)의 Quartus II를 사용할 경우에도 비슷한 기능이 있으므로 동일한 순서로 실행하면 된다. 각 툴에 대한 Web Edition 구축이나 사용 방법에 대해서는 과목 게시판을 통해 서로 도움을 주고받기 바란다.2. Verilog 소스코드2.1 Verilog 소스코드/*--------------------------------------------------------------------------------Title : 32-bit Arithmetic Logic UnitFile : alu_32bit.v--------------------------------------------------------------------------------Author : Kim Yoon NyungOrganization : Kwang woon UniversityCreated : 2009.4.25Last update : 2009.4.25Platform : WINDOWS XPSimulators : Quartus II web edition 9.0Synthesizers : Quartus II web edition 9.0--------------------------------------------------------------------------------*///Top modulemodule alu_32bit (input [31:0] Ain, Bin, //inputinput [3:0] F, //control inputinput clk, //clockoutput [31:0] Yout); //outputwire [31:0] S, Bout; //S : 덧셈,뺄셈 결과, Bout : 뺄셈일 경우 Bout = ~B 가 된다.wire [31:0] A, B; //입력값 Ain, Bin이 FF을 거친후 A, B가 된다.reg [31:0] Y; // 출력에서의 FF으로 입력되는 값.FF F1 (.D(Ain),.clk(clk), .Q(A)); // critical path를 알아보기 위해FF F2 (.D(Bin),.clk(clk), .Q(B)); // 입력과 출력에 FF을 배치한다.FF F3 (.D(Y), .clk(clk),.Q(Yout)); // 입력에서 각각 거치고 출력나올 때 거치게 된다.assign Bout = F[3] ? ~B : B;assign S = A + Bout + F[3];//control input F[3]이 1이면 뺄셈연산을 하므로 Bout은 2‘s complement를 취해준다. (비트를 반전시키고 1을 더해줌) 덧셈일땐 F[3]이 0이므로 S = A + B 가 된다. 따라서 control input F[3]에 의해 덧셈, 뺄셈을 수행할 수 있다.always @ (*) begincase (F[2:0])3'b000 : Y
    프로그램소스| 2009.07.22| 12페이지| 1,500원| 조회(1,632)
    미리보기
전체보기
받은후기 3
3개 리뷰 평점
  • A+최고예요
    1
  • A좋아요
    0
  • B괜찮아요
    2
  • C아쉬워요
    0
  • D별로예요
    0
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 05월 18일 월요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
10:47 오전
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감