본문 바로가기
코스웨어/15년 스마트컨트롤러

20150226-22번-여지윤 - 함수 , 전,반파 정류 회로

by 알 수 없는 사용자 2015. 2. 26.
728x90
반응형

1~4교시

☆S/W★

● 함수


- 함수중에서 printf 나 scanf 에 있는뒤에 F는 Function (함수)의 약자이다.


- 함수의 종류는 무궁무진하게 많이 있으며 , 다 알기 어려울정도로 많이 가지고 있다.


- 함수도 각각 쓰이는 단어들이 다른데


C언어에서는 Function

Java에서는 Method

Assembly에서는 Precedure


라고 읽는다


□ 프로그램을 출력하기전 입력코드를 Assembly 표현


- Assembly 파일을 열기 위해서는 우리가 처음에 배웠던 호출 명령어를 알아야 한다


- cl /Fa (파일이름).c 를 호출하면 되는데 우선적으로 cl /P를 입력하여 전처리 파일을 호출해야한다.





- Assembly 파일을 봤을때 5번라인에서 printf 를 호출한다는 명령어가 있다. 그리고 Assembly에서는 언더바를 사용해여 표기 한다.


□ 재귀호출


- 재귀 호출은 main함수를 반복적으로 사용하여 불러내는 호출 방법이다.


- 하지만 재귀 호출은 CPU에 큰 손상을 입힐 위험이 크기 때문에 가능한한 사용하지 않는것이 좋다.





- 위와 같이 iNum이 1일 경우에 는 main()을 쓴다고 되어 있다.


- 만약 iNum에 1을 입력하면 프로그램은 이 코드를 한번 더 입력하며 scanf에서 대기를 하고 있는것이다.


- 숫자를 입력하세요 에서 1을 100번 입력 한후 다른 숫자를 입력하게 되면 다른 숫자가 한번 입력된 이후에 99가 100번 출력 하게 된다.


□ Visual Studio 의 Debug를 이용해서 알아보기


- 아까와 같은 함수를 Visual Studio 에 입력한다





- 우선 처음으로 7번에 Break Point를 걸어준 후 실행한다


- 실행을 하게 되면 scanf에 화살표가 표시 되고 거기서 F10을 한 번 더 실행하면 숫자를 입력이 가능하다.





- scanf 에서 숫자 1을 입력하게 되면 if문으로 넘어가게 되는데 iNum의 값이 1인지 확인을 하는 작업에서 브레이크가 걸린다.


- 여기서 맞으면 iNum = 1이 성립이 되므로 main함수로 돌아 가게 된다.





- 아까 말했듯이 1이 성립했기때문에 main함수로 다시 넘어가게 된다.


- 여기서 주의 할 점은 F10을 사용 하는것이 아닌 F11을 사용한다.


- F10 은 함수를 쫓아가기만 할뿐 실행을 하지 않는다.


- F11 은 함수를 쫓아가서 실행을 하기 때문에 만약 F10을 눌렀다면 printf로 넘어 갔을것이다.





- 이후 다시 F10을 이용하여 scanf 까지 넘어 간 이후 0을 써넣은 뒤에서 F10을 누르면 다시 if문으로 넘어가 비교를 한다.





- iNum의 값이 틀리기 때문에 printf로 와서 iNum은 0이라는 값을 출력을 해준다


- 그리고 return 99에서 아까 받았던 첫번째 main함수로 넘어 가게 된다.





- 두번째 main 함수에서 0이라는것을 확인 했기 때문에 첫번째 함수에서도 그대로 0이 적용 된다.


- 그러므로 0이 2번 입력이 되며 main 에서 99가 같이 딸려 오게 된다.


- return 값은 애초에 윈도우로 넘겨서 출력하라고 하지만 윈도우는 return값을 버리기 때문에 애초에 출력이 되지 않지만 첫번째 함수로 넘겼기 때문에 99라는 숫자가 iNum에 존재한다.





- 마지막까지 출력을 하게 되면 99라는 숫자가 같이 입력이 된다.


- 그리고 함수를 호출 한 만큼 return값은 증가 한다.


- 함수가 첫번째와 두번째로 넘어 갔는지 확인 하는 방법은 watch를 이용하여 알아보면 편리하다.





- 그림에서 보면 첫번째와 두번째의 주소가 각각 다른것을 확인 할 수 있다.


● 함수의 선언


- 여태까지 함수는 1개만 호출하여 사용하기도 했다 하지만 함수는 여러개를 호출이 가능하게 할수가 있다.


- 예시를 들어보면





- 우선 Smart라는 함수를 지정한후 return 값을 iNum으로 지정한다.


- iNum을 지정한후 다시 main함수로 넘어가 또 다른 코드를 하나 쓴다.


- 여기서 iNum이 중복이 되지 않게 조심해야 하며 num값을 입력해준후 처음과 같이 smart함수를 지정해준다.


- 우선적으로 실행하는건 main함수부터 실행을한다 14번 라인에서 smart함수로 넘어가 smart함수를 입력받는다.


- 그러면 scanf 에서 숫자를 입력하게 되며 다시 main함수로 넘어 오게 된다.


- 즉 , 메인 함수는 필요할때마다 smart함수를 호출하며 main 함수에서 여러번 실행하지 않아도 된다.


- return 값은 처음 선언한 함수값과 일치해야한다. (예 : int smart에 int iNum일 경우 return iNum / float smart에 float fNum일경우 return fNum 이런식으로 같아야한다)


□ 응용편





- 이렇게 숫자와 실수를 입력 할 수 있다.


- 주의해야 할 점은 함수를 입력할때 안의 코드와 전부 일치 해야하는 점이다.


□ 전달인자와 반환값이 모두 있는 경우


- 전달인자와 반환값이 모두 있는 경우는 가장 일반적인 함수의 형태이다


- 예시를 한번 들어보면





- 위의 그림과 같이 표시하게 되면 7과 13이 나온다.


- 여기서 int add에 있는 int iNum1과 int iNum2, 그리고 main함수에 있는 int result는 각각 다른 변수이다. 이것을 지역함수라고 부른다.


- result = add (3,4)라는 뜻은 main함수의 result값이 add함수의 값과 일치하다는것을 알수 있다.

 그렇기 때문에 iNum1은 3, iNum2의 값은 4가 되는것을 알 수 있다.


- 그렇게 덧셈 결과를 보면 7이 나오게 된다. 즉, main함수에서 add함수를 호출 한 셈이 된것이다.


- 두번째 결과도 마찬가지고 add (5,8)을 main함수에서 호출을 하게 된다. main함수에서 초기값을 지정해주면 add함수에서는 초기값이 계속 변형이 되어 나온다.



5~8교시

★H/W☆


- AC 220V 에서는 단상 2선식을 쓴다

↑ 단상 2선식의 도면


- 380V 에서는 3상 4선식을 사용한다.


↑ 3상 4선식 도면


- AC -> DC를 정류 회로 라고 하며 , 정류회로의 핵심적인 부품은 Diode (다이오드) 이다.


- 다이오드의 핵심 기능 : 전류를 한쪽 방향으로만 흘리게 한다.


- 캐패시터의 역할 : 충전 or 방전


● 전파 정류 회로와 반파 정류 회로의 차이점


- 반파정류 회로를 한 번 그렸던적이 있었지만 전파 정류 회로도는 실제로 그려본 적이 없었다 . 차이점을 눈으로 확인해보면


↑ 전파 정류 회로도



↑ 반파 정류 회로도



- 합쳐보면 이렇게 나온다.


□ 반파정류와 전파정류에 캐패시터를 넣어보면



- 위와 같이 평활 캐패시터를 설치하면 전파정류회로도의 LED는 항상 켜져 있다.


- 아래의 반파정류의 LED는 깜빡거리게 된다.


- 전파 정류 회로 중에도 종류가 있는데 그 종류중 하나가 브릿지 전파 정류 회로 이다.


↑ 브릿지 전파 정류 회로도


- 차이점은 트랜스포머를 사용할때엔 일반 전파 정류 회로를 사용하고, 사용하지 않을때에는 브릿지 전파 정류 회로를 사용한다.

 


□ DC -> AC로 변환하는 법


- DC에서  발진을 하며 , 주파수를 60Hz로 맞춘후 트랜스를 연결 하면 된다. 주로 차량용 인버터가 그 원리이다.


□ 변압기 (Transformer) 의 원리




- 변압기는 공간을 통해 전기에너지를 전달할 수 있는 간단한 장치이다. 1차 코일에 자기장의 변화가 생기면 2차코일에 전압이 유도 된다.


- 1차 코일과 2차코일 내에 철심을 넣으면 자기장은 철심에 집중되어 자기장의 변화에 더 민감하게 반응하게 된다.


- 만약 2차 코일에 감은 도선의 수가 1차코일의 반이면 출력전압도 반으로 줄어든다.


- 반대로 2차코일에 감긴 횟수가 1차코일 보다 많으면 2차코일의 전압이 1차 코일보다 커진다.




오늘 하루도 수고 하셨습니다

728x90