>> [음악 연주]
데이비드 J. 마란 : 좋습니다.
이것은 CS50이며,이 일주일이 시작된다.
그래서 우리가이 문제를 오늘을 시작합시다.
버그 물론, 프로그램에 실수
당신은 매우거야 이 개념에 익숙
당신은 프로그램 된 적이없는 경우 전. pset0 지금 PSET1.
그러나의 뭔가를 생각해 보자 처음에는 조금 간단 해요.
나는 그 여기에이 프로그램 미리 입어
나는이 인쇄되어야 함을 주장 printf의 화면을 사용하여 10 개,
그러나 그것은 분명히 어떤 방법으로 버그가 있습니다.
>> 그 사양을 감안할 때 그 그것은 10 개를 인쇄한다
하지만 분명히하지 않는, 어떤 버그 당신이 주장하는 것입니까?
그래?
그래서 하나의 오류에 의해 오프이야, 당신은 무엇을 의미합니까?
확인을 클릭합니다.
우수.
그래서 우리는 지정한 난에 대해 0의 값을 시작한
우리는 10의 n 값을 지정한 그러나 우리는 작거나 같음 이하를 사용했습니다.
그리고 그 이유는 두 가지이다 문자가 아닌 하나의 기호,
수학 책처럼, 당신이하지 않아도됩니다
을 표현하는 방법 하나의 문자에 해당.
>> 그래서 그 미만을 의미하지만 당신이 제로 카운트 시작하면,
하지만 당신은 모든 방법을 계산 10에 이르기까지 평등,
당신은 과정에가는거야 총 11 일을 계산합니다.
그리고 당신은 11 개를 인쇄 할 것입니다.
그래서 이것에 대한 수정 될 수 있을까요?
그래?
>> 그래서 단지보다 적게 조정 아니면 그냥 미만 같
아마도, 내가 주장, 거기에 너무 다른 해결책.
다른 당신은 무엇을 할 수 있는가?
그래?
>> 그래서 1로 같게 시작하고, 작거나 같음 덜 둡니다.
솔직히 나는 주장 것 즉, 일반적인 인간에 대한,
이것은 아마도 더 간단합니다.
1에서 계산 시작 (10)을 통해 계산합니다.
기본적으로 당신이 무슨 뜻인지 않습니다.
>> 그러나 현실에 프로그래밍, 우리가 보았 듯이,
컴퓨터 과학자와 프로그래머 일반적으로 0에서 계산을 시작 않습니다.
그리고 그 한 번 괜찮아요 당신은 그것에 익숙해.
당신의 상태는 일반적으로 것 이하 같은합니다.
그래서 단순히 논리를 오류는 우리가 지금 할 수
해결하고 궁극적으로 다시 컴파일 이것과는 10를 얻는다.
>> 그럼 어떻게 여기에이 버그에 대한?
여기서 다시, 나는이 주장 10 한거야 인쇄의 목표
선이 시간당 한,하지만하지 않습니다.
우리가 제안하기 전에 무엇을 수정이 무엇이며,
내가 컴파일한다면 시각적으로 인쇄 이 프로그램은 당신이 생각 실행할?
그래?
>> 스타.
에 그래서 모든 별 같은 라인은 내가들은 것입니다,
다음 새 라인 문자.
그래서 그 시도 할 수 있습니다.
그래서 버그-1, 입력 확인 나는 그 소리 명령을 참조하십시오
우리는 지난 시간에 이야기하는 것이.
./buggy-1, 참으로 나는 모든 10 별을 볼 I 항에도 동일 라인
내 사양 꼭대기 단지 주석에 내가 한 당을하기위한 코드
선.
하지만이 바로 보인다.
>> 난 지금처럼 15 행이 보인다 다음 스타를 인쇄하고, 라인 (16)
나는 인쇄 해요 것 같습니다 새로운 라인 문자,
그들은 모두 너무 들여있어 나는 분명히 루프 내부 해요.
그래서 스타 일을해서는 안된다, 새로운 라인, 스타, 새로운 라인, 스타, 새로운 라인?
네?
>> 그래, 언어와 달리 같은 파이썬, 당신이 익숙하다면,
들여 쓰기는하지 않습니다 컴퓨터에 문제가.
그것은 단지 인간에게 중요한.
여기 반면에 내가 발명 한 라인을 따라서 15 아름다운 외모 16--,
하지만 컴퓨터는 상관하지 않는다.
컴퓨터에 대한 관심 실제로 중괄호를 갖는
코드 줄 주위.
>> 그래서 그것은 단지처럼 clear--이다 Scratch--이 두 줄의 코드가
실행되어야한다.
그 노란색 스크래치 퍼즐의 일처럼 조각을 다시하고 다시하고 다시.
>> 내가하면 이제 다시 실행이 program-- ./buggy-2 ... 흠.
지금은 오류가 있습니다. '
내가 뭘하는 것을 잊지 않았다?
그래, 그래서 그것을 컴파일하지 않았다.
그래서 버그 -이합니다.
그러한 파일이 없습니다 내가하지 않았기 때문에 실제로 두 번째 버전을 컴파일합니다.
이제 재미 선언되지 않은 2는하지 variable--.
우리는 일을하고 있어요.
이제 버그 - 1-- ./buggy-1-- 및 확인 그들 각각은 동일한 행에있다.
>> 이제 예외가있다 내이되어 제
것을 당신은이 중괄호가 필요합니다.
때 그것은 실제로 OK-- 당신이했습니다 경우 섹션이나 textbooks--에 발견
중괄호를 생략하는 방법?
그래?
>> 정확히.
하나있을 때 라인의 코드가 당신을
와 연관되고 싶지 우리의 첫 번째 예에서와 같이 루프.
그것은 완벽하게 합법적이다 중괄호를 생략합니다
단지 편의 일종의 당신에게 컴파일러에서.
그래?
좋은 질문입니다.
그것은 스타일의 오류로 간주 할 것인가?
우리는 CS50 같이 promote-- 것 스타일 가이드에 대한 URL
그 항상 pset1--에 중괄호를 사용합니다.
물론 당신이 프로그래밍의 새로운면.
현실은 우리가 아니에요입니다 을 금지하는 것
이러한 편의를 수행하십시오.
그러나 당신은 점점하는 경우 사물의 스윙으로,
절대적으로 그냥 항상 곱슬를 사용 당신이 그것의 묘리를 터득 할 때까지 중괄호.
좋은 질문입니다.
>> 좋아.
그래야 다음 버그이었다.
아주 간단한 뭔가 이상.
그리고 아직 당신이 생각하는 것 바로, 매우 초보?
이것은 첫 번째 주의 일종이다 의 언어보고
같은, 당신의 버그를 내부에 참조하십시오.
하지만 현실이 있습니다 실제로 대표
꽤 무서운 문제 즉, 현실 세계에서 일어날 수있다.
>> 그래서 당신의 일부는 기억 있습니다 당신이 기술 뉴스를 따르는 경우에,
또는 어쩌면 적발 월이의 바람
애플이 있다고 지난 해의 모두 아이폰 OS에서 조금 실수를했다
에 운영체제 그들의 전화, 또한
맥 OS, 운영체제 데스크톱과 노트북에.
그리고이 같은 헤드 라인을 보았다.
그리고 그 후, 애플 이 버그를 해결하기 위해 약속,
매우 빠르게, 아이폰 OS에 문제를 해결했다 하지만 궁극적으로 맥 OS에 고정
뿐만 아니라.
>> 지금이 헤드 라인의 아무도 혼자 정말 근본적인 문제가 무엇인지 밝혀,
하지만 버그는 궁극적으로 감소되었다 SSL의 버그, 보안 소켓 계층.
그리고 짧은 긴 이야기를, 이것은 소프트웨어
우리의 브라우저 및 기타 소프트웨어는 무엇을하는 데 사용?
>> 나는 SSL이라고 말했다 경우 참여 때마다 당신을
, HTTPS로 시작하는 URL을 방문 다음 무엇 SSL이 관련 될 수 있는가?
암호화.
그래서 우리는에 대해 이야기 할 것입니다 앞으로 일이.
암호화의 예술 정보를 스크램블링.
>> 그러나 길고도 짧은 이야기, 애플 언젠가는 실수를했다 전
, SSL의 구현에 궁극적으로 구현 소프트웨어
HTTPS 또는 같이 최대의 URL 너무 거기에 연결.
의 결과는 귀하 연결은 잠재적으로 수
가로 챌 수.
그리고 당신의 연결했다 반드시 암호화되지
당신은 사이 나쁜 남자에 있었다면 당신과 대상 웹 사이트 사람
이 기능을 사용하는 방법은 알고 있었다.
>> 이제 애플은 궁극적으로 게시 마지막으로 이것에 대한 수정
그 설명 자신의 수정 사항이 있었다.
안전한 교통 수단의 유효성을 검사하는 데 실패 접속의 신뢰성.
이 문제는에 의해 해결되었다 누락 검증 단계를 복원.
>> 그래서 이것은 매우 손 물결 모양의 설명입니다 단순히 우리가 망쳐 말하는합니다.
말 그대로 하나가 버그했다 코드 라인
자신의 SSL의 구현 및에 당신이 온라인으로 이동하여 검색하는 경우
실제로 찾을 수 있습니다 원본 소스 코드.
예를 들면,이 스크린 샷이다 단지 상당히 큰 파일의 일부
그러나 이것은 분명히라는 기능입니다 SSL은 로그인 서버 키 교환을 확인합니다.
그리고 한 무리의 소요 인수 및 입력.
그리고 우리는 초점을하지 않을거야 이 특징점에 너무 많은,
하지만 당신은 내부의 코드에 초점을 경우 하자 function-- 그 맨 위의
그 확대합니다.
당신은 이미 의심 할 수 어떤 오류가 수도
당신은 아무 생각이없는 경우에도 수 궁극적으로 당신은 무엇을보고 있는지.
기형의 종류가있다 여기있는 무엇입니까?
>> 그래, 난 정말 싫어 이 고토의 모양이 실패합니다.
솔직히, 난 정말 모르는 고토 수단에 실패,하지만 그들 중 두 가지는
다시 다시.
그건 그냥 가지 저를 티 나지 지적으로 잘못된 방향으로,
우리는 확대 참 경우 단지 그 선이 C.이다
>> 그래서 애플 많은 코드 자체가 C로 작성,
이 분명히 정말 equivalent--입니다
하지가 꽤 들여 쓰기 버전,하지만 당신은 인식하는 경우 사실
더 중괄호가 없다는 것을 어떻게 애플은 정말 보이는 코드이었다 썼다
이있다.
그래서 축소하고 그냥했습니다 의미에서 들여 쓰기를 고정
그 어떤 중괄호, 그이 없다면 둘째 고토는 노란색에있어 실패
상관없이 실행하는 것입니다.
그것은과 관련이없는 것 위의 경우 상태.
>> 그래서 심지어 다시, 당신이 경우에 확실히 아는 바로는이 가능성이 수
, 일을 할 알고 이들 각각이 이 라인의 각을 conditions--
매우 중요한 단계이며 검사 과정에서
데이터가 사실 인 경우 암호화.
따라서 이들 중 하나를 생략 단계가 아닌 좋은 생각.
>> 그러나 우리는이 문제를 가지고 있기 때문에 둘째 고토 노란색 실패
때문에 우리는 한 번 일종의 미학적
위치를 왼쪽으로 이동 논리적으로 순간입니다, 무엇을
이 줄을 의미 하는가 그 두번째 고토 아래의 코드
당신이 생각하지?
항상 제외 될 것입니다.
그래서 GOTOS는 일반적으로 눈살을 찌푸리게합니다 우리가 진정으로 가지 않을 이유,
실제로 CS50에 우리는하지 않는 경향이 이 문장 고토을 가르쳐,
하지만 당신은 고토 생각할 수 의미 이동 점프로 실패
코드의 다른 부분.
>> 즉 이상 뛰어 모두이 마지막 줄,
그래서 바보의 결과 그냥 .. 단순 실수
아마 누군가의 결과 복사 및도 하나 붙여 넣기
여러 번 전체이었다 아이폰 OS와 Mac OS의 보안
가로 채기에 취약 꽤 오랫동안 나쁜 놈들에 의해.
애플까지 마지막으로이 고정.
>> 이제 중 일부는 실제로있는 경우 아이폰 OS 또는 Mac OS의 이전 버전을 실행하는
당신은 gotofail.com에 갈 수있는 누군가가 설정하는 것이 웹 사이트입니다
본질적으로 결정 프로그래밍
컴퓨터가 여전히 취약합니다.
그리고 솔직히,이 경우, 그것은 아마 좋은 생각
귀하의 휴대 전화를 업데이트하거나 이 시점에서 당신의 맥.
그러나이 단지 유언 단지 방법 이러한 낮은 레벨의 강세
자세한 내용 및 공정 간단한 아이디어 수 정말
의사 결정에 번역 문제가
이 case--에 affected-- 수백만의 사람들.
>> 관리에 대한 지금 단어.
섹션이 오는 일요일을 시작합니다.
당신은으로 이메일을 받게됩니다 섹션에 대한 주말, 어떤 점에서
resectioning 과정 만약 여러분의 경우 시작됩니다
당신이 지금 가지고있는 실현 새로운 충돌합니다.
그래서이 매년 발생, 우리 올 일에 수용됩니다.
>> 사무실 hours--은 계속 수행 여기이 일정에 눈.
이번 주에 약간의 변경, 특히, 시작 시간
및 위치, 그래서 상담 않는다 그 근무 시간에 향하기 전에
다음 4 일의.
그리고 지금 평가에 단어, 당신은 문제에 뛰어 특히로
일 이후 설정합니다.
>> 사양에 따라서, 이들은 일반적으로
축이되는 함께 우리는 당신의 사업을 평가한다.
범위를 말합니다 무엇 범위 코드 구현
기능이 필요 우리의 사양에 의해.
즉, 얼마나 많은 종 세트는 물린했다.
당신은 그것의 세 번째 했는가, 그것의 절반, 그것의 100 %.
그것은 정확하지 경우에도, 당신은 얼마나 많은 시도 했습니까?
그 수준을 캡처 그래서 노력의 양
되는 오프 비트 문제 설정의 문제.
>> 이 일 Correctness--에 어느 정도, 코드입니다
와 일치하는 우리의 사양 및 버그 무료.
그래서 제대로 작동합니까?
우리는 몇 가지 입력을주는 경우에, 그것을 않습니다 우리가 기대하는 출력을 제공?
디자인 - 지금이 중 첫 번째입니다 특히 질적 인 것,
인간의 판단을 필요로하는 사람.
우리는 직원이 왜 그리고 실제로이입니다 많은 조교 물론
조수.
무슨 정도는 당신입니다 코드는 잘 쓰여진?
>> 그리고 다시는 매우이다 정 성적 평가
그에 당신과 함께 작동합니다 주에서 양방향으로 올 수 있습니다.
되도록하지 얻을 때 숫자 만 득점 아니라
서면 점수, 또는 입력 피드백 또는 영어 단어에 의견을 작성.
즉, 우리가 당신을 구동하는 데 사용할 무엇 실제로 더 나은 코드를 작성하는 방향으로.
그리고 강의와 섹션에서, 우리는 시도 할 것이다 자주 우리가하고 있는데 ...으로 병원을 나온 가리
어떤 프로그램을 만드는뿐만 아니라 정확하고 기능적으로 좋은
뿐만 아니라 잘 설계.
가장 효율적인 그것은, 또는 수 심지어 가장 아름다운이 될 수 있습니다.
>> 어떤 스타일로 우리를 이끈다.
스타일은 궁극적으로 미적 판단.
당신은 좋은 선택 했 당신의 변수 이름?
제대로 코드를 들여 적이 있습니까?
이 때문에 좋은보고, 않습니다, 또 다른 사람을위한 쉬운
당신의 각을 읽어 그 정확성.
>> 지금은 일반적으로 강의 당, 우리는 득점 다섯 점 만점에 이런 일.
그리고 저 점 집 망치하자 세 것이 참으로 좋은 것입니다.
매우 신속하게 사람을 산술 일을 시작합니다.
그들은의 3 아웃을 얻을 때 일부의 pset에 대한 정확성에 5
그들은 빌어 먹을 생각 나는 60 %에 가고 이는 기본적으로 D 또는 E.이다
>> 즉, 방법이 아니다 우리 이 숫자 생각합니다.
셋은 무엇을 참으로 좋은, 그리고 우리 일반적으로 처음에 예상
용어는 당신이지고 있다면 것입니다 어쩌면 three's--의 무리 부부
박람회, fours-- 몇이나 몇 조로, fours--의 커플
그 시작하기 좋은 장소입니다.
그리고 우리를 너무 오래 보는 바와 같이 시간이 지남에 따라 상승세,
당신은 특히 좋은 장소에있어.
>> 우리가 사용하는 식 체중 일이 본질적으로
강의 당이, 이는 단지 우리 것을 의미한다
정확성에 더 많은 무게를 제공합니다.
그것은 매우 자주 정확성이기 때문에 즉, 대부분의 시간이 소요됩니다.
지금 날 믿어.
당신은 적어도 find--합니다 한 pset--에서 당신을
시간의 90 %를 지출 문제의 10 %에서 작동.
>> 그리고 모든 종류의 작동 하나 또는 두 개의 버그를 제외
그는 버그는 그 늦은 밤에 당신을 유지합니다.
사람들은 그들이다 그 일종의을 탈출.
하지만 자고 후, 또는 근무 시간에 참석
또는, 온라인 질문입니다 요청 당신이 100 % 목표에 도착하면,
그 이유는 우리가 무게입니다 대부분의 정확성.
좀 덜 디자인하고, 보다 좀 덜 스타일을.
그러나 mind-- 스타일로 유지 아마도 가장 쉬운 방법입니다
이들의 오프 물린 스타일 가이드에 따라.
>> 그리고 지금, 더 심각한 학문적 정직성에 있습니다.
CS50는 불행한 구별이 광고 보드의 가장 큰 제작자 인
경우 거의 모든 년 역사적.
학생들이 부정 행위를하기 때문 아니다 CS50 더 이상 그래서 다른 클래스보다
하지만 일 때문에 자연에 의해, 이 전자 있다는 사실,
우리가 그것을보고, 사실 사실 우리는 컴퓨터 과학자들은, 아르
나는 우리가 불행하게도 아르 말할 수있다 그것을 감지에 아주 좋아.
>> 그래서이 실질 무엇을 의미 하는가?
그것은 그래서, 강의 당, 과정의 철학
정말 합리적 졸이다 않습니다.
이 라인 사이가 스스로 자신의 일을
그리고 조금 받고 친구 합리적인 도움,
철처에 대한 그 일을 당신의 친구, 또는 그 사람이나 그 여자 코드를 전송
그 또는 그녀는 단순히 수 있으므로 취하거나 권리를 그것을 빌려.
그리고 그 선을 교차 우리는 수업 시간에 그려진 것이다.
>> , 강의 계획서를 참조 궁극적으로 라인
우리는 합리적으로 그리는 것을 불합리한 행동,
하지만 정말 종기을 수행 본질에 이르기까지
당신의 일에 필요의 결국 자신합니다.
지금 그렇게 말한다면, 휴리스틱이있다.
당신이 imagine-- 수로 인해 근무 시간과 영상에서
그리고 동영상은 우리했습니다 도시 따라서 팔리 CS50
실제로 공동으로하기위한 것입니다 등의 협력 및 사회적
가능한 한.
공동으로이 엄격한 때문이다.
>> 하지만이 말과 함께, 발견, 당신이 강의에서 살펴 보 겠지만,
당신은 어떤 문제가있을 때 점이다.
당신은 당신의 코드에서 몇 가지 버그가 있음을 해결할 수없는, 그것은 당신을 위해 합리적인
다른 사람에게 코드를 표시합니다.
심지어 수업 시간에 친구, 친구 근무 시간에 당신 옆에 앉아,
또는 직원의 일원.
그러나 그들은 당신에게 자신의 코드가 표시되지 않을 수 있습니다.
>> 즉, 당신의 question-- 대답
내가 도와 줘요 오, 여기 내 코드 안된다 필요합니다.
이 번 봐, 그리고 당신이 것 그것에서 추론.
지금, 물론, 거기에 방법은 분명 게임
내가 보여 줄게있다이 시스템 질문을 가진 전에 내 코드.
당신은 나에게 내 코드를 보여 질문을 받기 전에.
그러나 다시 강의를 참조 이 라인이 어디의 미세한 세부 사항.
>> 그냥 지금은 그림을 그릴 및 가능한 한 투명 주
우리가 최근에 어디에, 이 광고 보드의 경우의 수
그 CS50은 이상했다 지난 7 년.
14가지 경우이 최근 가을과 함께.
참여 학생들의 관점에서, 그것은 20 일부 홀수 학생이었다
지난 가을.
33의 피크가 발생했습니다 몇 년 전 학생.
누구의 대부분은 불행하게도 아르 더 이상 없습니다 여기 캠퍼스.
>> 의 비율로 참여 학생 클래스는 역사적으로 0 %에서였던
말을 단지 5.3 %에 이 매년 도전이다.
그리고이를 위해 무엇을 우리는 일을 전달한다 수행 할
우리는 단지 FYI--에 비교 dd-- 것을 학생들에 대한 공정성 사람
이에 따라 라인을 따르고 있습니다.
우리는 현재를 비교 할 과거의 모든 임무에 대한 제출
지난 몇 년에서.
>> 우리는 주변에 구글하는 방법도 알고 코드 저장소를 찾을 수
온라인 토론 포럼 온라인 온라인 취업 사이트.
학생이 그것을 찾아 낼 수있는 경우에, 우리는 반드시 할 수 그만큼 우리는 유감스럽게도처럼 찾을 수 있습니다.
그래서 당신은 강의 계획서에 볼 수 있습니다 하지만이 후회 절입니다.
나는 확실히 할 수 감사합니다, 그리고 우리 모두가
직원은 물론 등을 수행하는 데 시간이 지남에 따라이, 또는이 일 자체,
확실히 때 어떤 건지 알아 인생은 당신이 방해가된다
일부 늦은 밤 deadline-- 뿐만 아니라이 클래스에서,
하지만 당신은 another--있을 때 탐, 스트레스
과도한 번호가 다른 일들을 할 수 있습니다.
당신은 어떤 점에서에 할 것 확실히 나쁜, 아마 늦은 생활
밤 결정.
>> 강의 당 그래서, 이 조항이,
만드는 등 그 경우 내 72시간 형편없는 결정, 당신은 그것까지 소유
나에게 손을 내밀고 물론 하나의 헤드
우리는 대화를해야합니다.
우리는 일을 처리합니다 내부적으로 희망
그것은 더 해지고의 교육 순간이나 삶의 교훈,
함께하지 뭔가 특히 급격한 파급 효과
여기에이 차트에 표시 될 수있다.
>> 그래서 매우 심각한 톤입니다.
우리가 몇 가지에 대한 일시 정지하자 초 장력을 깰.
>> [음악 연주]
>> 데이비드 J. 마란 : 좋아, 그래서 어땠어로 자연스럽게 하시나요?
오늘의 주요 주제에.
그 중 첫 번째는 추상화이다.
그 중 또 다른 될 것입니다 솔직히 데이터의 표현
방법을 말하는 정말 건조 방법은 우리는 할 수있다 문제를 해결하고 생각 대해 이동
문제 해결에 대한?
그래서 당신은 스크래치에서 봤어, 당신은했습니다 C와 PSET1에 아마 이미 본
당신은뿐만 아니라 사용할 수있는 함수의 printf처럼,
다른 사람 년의 과거는 당신을 위해 썼다.
당신은 또한 자신의 기능을 쓸 수 있습니다.
>> 그리고 당신은 필요가 없습니다하더라도 PSET1에 솔직히 C에서 이런 짓을하고,
당신은 정말 작성할 필요가 없습니다 당신의 problem-- 때문에 자신의 기능
에서 아마도 어려운 동안 먼저 볼 수 glance--
궁극적으로 해결 될 수있다 코드의 모든 많은 선.
하지만 그 관점에서, 상기와 자신의 함수를 작성,
줄 C는 않습니다 실현 당신이 기능을 제공합니다.
>> 나는 오늘날의 소스 코드에 갈거야 이는 이미 온라인으로 볼 수 있습니다
나는 앞서 열린 갈거야 기능 0.C라는 프로그램까지,
과 기능 제로에 우리는 몇 가지를 볼 수 있습니다.
첫번째 라인 (18)을 통해 23 내 주요 기능입니다.
그리고 지금 우리는 읽기 시작하고 있다는 우리가 즉석에서 작성하지 않을 코드
대신 나는 사전에 서면으로 작성했습니다 또는 문제에서 당신은 설정하는 것이
갖는받을 수 있습니다 사전에 작성되었습니다.
좋은 방법은 시작 누군가 다른 사람의 코드를 읽고
주요 기능을 찾을 수 있습니다.
여기서 해당 항목을 그림 점은 프로그램을 실행이고,
다음 거기에서 논리적으로 따르십시오.
>> 따라서이 프로그램은 명백하게 인화 다음에 콜론 이름.
우리는 다음에서 getString을 사용 CS50 라이브러리
문자열 또는 단어 나 구를 얻을 수 사용자가 키보드에서.
그리고이있다 일 이곳에 PrintName.
>> 지금 PrintName는이 아니다 C. 함께 제공 기능
그것은 표준 io.h.에없는
그것은 CS50.h.에없는
또한 동일한 파일에 오히려이다.
나는 아래로 스크롤하면 주목 bit-- 라인 (25)은 27--합니다
그것은 주석의 단지 꽤 방법 별과 슬래시를 사용하여 코드.
이것은 멀티 라인이다 주석이 단지입니다
푸른 내 설명 이 기능을 수행하는.
>> 31 라인에서 28 때문에, 나는 슈퍼 간단한 함수를 작성했습니다
그의 이름은 PrintName이다.
그것은 얼마나 많은 소요 인수는 말할 것이다?
그래서 한 공방 일이 있기 때문에 괄호 안에 나열 인수.
의 유형은 String입니다.
어느 PrintName 말을하는 것입니다 이 블랙 박스처럼
걸리거나 기능 입력 문자열을 같은.
>> 그리고 그 문자열의 이름 편리 이름이됩니다.
아니 S,하지 N,하지만 이름입니다.
그래서 PrintName이 무슨 일을하지?
그것은 좋은 간단합니다.
그냥 코드의 한 라인으로 printf의,하지만 분명히 그것을
인쇄 아웃 "안녕하세요,"아무개.
어디 아무개 인수에서 비롯됩니다.
>> 지금이 여기에 큰 혁신이 아니다.
정말, 내가 할 수있는 프로그램을 촬영했습니다 한 줄의 코드로 작성되었습니다
여기를 넣어, 무언가로 변경
즉, 약 6 ~ 7 정도 포함 여기 아래 줄의 코드는 모든 방법.
>> 그러나의 연습이다 추상화로 알려진 원칙.
새로운 종류의 내부에 봉입 이름이 기능, 그리고 더 나은
아직 그 이름 그대로 그것이 무엇 말한다.
그게 아니다 printf-- 의미 특히 설명.
난을 만들려면 퍼즐 조각, 또는 나는 경우
함수를 만들려면 즉, 다른 사람의 이름을 인쇄
이 일의 아름다움 즉, 내가 실제로 할 수있다
그 함수의 이름을 지정 그게가 수행하는 작업을 설명합니다.
>> 지금은 입력에 소요되는 I 임의로 이름이라고했습니다,
하지만 너무 멋지고 설명입니다 대신에 조금 더되는
S.와 같은 일반 무효, 지금은 그냥 의미
이 기능은하지 않는 것이 아무것도 날 다시 손.
그것은 getString는 달라요 그 말 그대로 문자열을 날 다시 손
처럼 우리는 종이 조각했다 반 친구들 지난 주와 함께,
오히려 단지 부작용을 갖는다.
그것은 화면에 뭔가를 출력합니다.
>> 하루의 끝에서, 만약 그래서 어떻게해야합니까 함수 공, ./function-0,
우리는 내 이름을 묻는 것을 볼 수 있습니다.
내 이름에서 유형을 다윗을 입력하고.
이왕 다시 그것을 할 경우, 그것은 말할 것 "안녕하세요, 롭."
그래서 간단한 아이디어, 그러나 아마 이 정신에서 추정
프로그램이 얻을로 그 , 조금 더 복잡합니다
당신은 덩어리를 쓰고 싶어요 코드 및 전화 code-- 호출
어떤 설명에 의해 그 code-- PrintName 같은 이름을
C는 우리에게이 기능을 끌 수.
>> 여기에 또 다른 간단한 예입니다.
예를 들어, 나는 최대 열 경우 return.c라고 오늘부터 파일,
내가 여기에 무슨 짓을했는지 알 수 있습니다.
이 주요 기능의 대부분의 printf이다.
내가 먼저 임의로 초기화 숫자 2에 x를 호출 변수입니다.
그때 x는 지금 "인쇄 % 내가 "x의 값에 전달합니다.
그래서 난 그냥 무슨 말인지.
>> 지금은 그냥 대담 해요 printf와 함께 주장.
그 x 값을 큐빙입니다, 그리고 난 함수를 호출하여 이렇게
라는 큐브 전달 인수와의 x,
다음 출력을 절약 변수 자체에서 x.
그래서 x의 값을 건드리지 있어요.
나는를 오버라이드 와 X의 값이 무엇이든
호출 한 결과 이 큐브 함수이다.
그리고 전 그냥를 인쇄 솜털 물건은 여기에 내가 무슨 짓을했는지 말.
>> 그럼 큐브는 무엇인가?
근본적으로 무엇에 주목 여기에 다른.
나는 기능을 부여했습니다 이전과 이름을 입력합니다.
나는 인수의 이름을 지정했습니다.
이 N 대신 이름이라고이 시간, 하지만 내가 원하는 무엇이든 그것을 호출 할 수 있습니다.
하지만이 다르다.
왼쪽이 일.
이전에는 어떤 키워드입니까?
소년.
지금은 분명히 INT입니다.
>> 그래서 아마도이 데려 갈거야?
무효을 의미 함 반면 종류의 죽음, 그리고 그 경우였다.
PrintName는 아무것도 반환하지 않습니다.
그것은 무언가를했지만, 이 날 다시 손을하지 않았다
나는에 넣어 줄 수있는 등호의 왼쪽
같은 I 라인 22 여기에 완료했습니다.
>> 그래서 선 30로 말한다면, 무슨 일이 아마 의미한다는거야
어떤 큐브에 대해 나를 위해 무엇입니까?
그래?
그것은 정수를 반환합니다.
그래서 위해, 나를 다시 손 종이의 인스턴스 조각
어떤이 답을 작성했습니다.
이 제곱, 세제곱 또는 3, 또는 4 cubed-- 내가 전달 무엇이든
그리고 이걸 어떻게 구현 했는가?
음, 그냥 n 번 n 번 N 내가 값을 된 큐브하는 방법이다.
그래서 다시, 슈퍼 간단한 생각하지만, 실증
이제 우리는 함수를 작성하는 방법 실제로 우리를 다시했다
관심을 가질 수있는 값.
>> 마지막으로 예제 하나를 더 살펴 보자 여기에 기능을 하나했다.
이 예에서, 시작 더 강력한 얻을 수 있습니다.
그래서 기능을 하나,이 program-- 통지 궁극적으로
GetPositiveInt라는 함수를 호출합니다.
GetPositiveInt는 아니다 CS50 라이브러리의 기능,
그러나 우리는 우리가 결정 이 존재하고 싶습니다.
>> 그래서 우리는 나중에 파일을 아래로 스크롤하면, 내가 구현에 대해 어떻게 됐는지 알
양의 정수를 얻고, I 더 강력한 말할
이 괜찮은 때문에 줄의 코드 번호입니다.
그냥 바보 아니에요 작은 장난감 프로그램입니다.
실제로 일부 오류 검사 있어요 더 유용한 일을하고.
>> 당신이 연습을 본 적이 없다 경우에 따라서 우리가 PSET1에 내장 한 동영상,
이 유형 것을 알고 정신에는 변함이 C 루프,
일 스크래치의 종류 할 수 있습니다.
그리고 어떻게 이렇게 말한다.
이를 인쇄합니다.
그럼 가서 N-- 얻을 int를 얻고 N에 보관
및 유지는 또 다시이 일을 다시 오랫동안 N 미만으로 하나입니다.
>> 그래서 N 미만이 될 것입니다 단지 인간의 협력이 아니라면.
그 또는 그녀가 입력되는 경우 0 또는 -1 또는 -50에서,
이 루프는 유지하는 것입니다 또 다시 실행.
그리고 결국 나는주의 단순히 값을 반환합니다.
그래서 지금 우리는 기능이 그 좋았을 것
CS50은에서 구현하면 당신을 위해 CS50.h 및 CS50.c,
그러나 여기에서 우리가 지금 할 수있는 이 스스로를 구현합니다.
>> 그러나 몇 가지 주요 사항에이 코멘트.
있는 겁니까 왜 정수를 선언 않았다 N, 29 행에, 당신은 생각 하는가
대신 일을 여기이 어느입니다
더 일관 우리는 지난 주에 무슨 짓을?
그래?
좋은 생각.
그래서 만약 우리가 넣어했다 여기, 우리처럼입니다
또 다시 선언 보관하십시오.
그 자체 때문이다 문제 없습니다, 그 자체,
우리는 단지이 필요하기 때문에 한 번 누른 다음 값
어쨌든 우리는 새로운 하나를 얻을 것입니다.
하지만 좋은 생각.
그래?
>> 닫습니다.
나는 N에 선언했기 때문에 그래서 선 루프 (29)의 외부
그것은을 통해 접근 가능 이 전체 기능.
아니 다른 기능 때문에 N이 곱슬 내부에 여전히
여기 중괄호.
확인 바람에 ....
>> 정확히.
그래서이 점에 더 많은입니다.
우리는 대신에 선언 된 경우 n은 바로 여기에 라인 (32)에,
그것은 추측 때문에 문제입니다 다른 어디에서 나는 그것을 접근 할 필요가?
라인 (34), 및 온 엄지 손가락의 간단한 규칙입니다
당신은 단지 변수를 사용할 수있는 가장 최근의 괄호 안에
하는 당신은 그것을 선언했다.
>> 불행하게도, 라인 (34) 한 라인은 너무 늦기
이미 폐쇄했기 때문에 33 행에 중괄호
즉 해당 라인 (30)에 중괄호.
그래서이 말을하는 방법입니다 이 int 변수 범위가 지정되어 있는지,
그렇게 만 안쪽에, 말하자면 그 중괄호.
그것은 단지 그 밖에 존재하지 않습니다.
>> 그래서 사실은, 내가 할 경우이 잘못, 내가 코드를 저장할 수
로 잘못 기록은 ...
내가 가서 어떻게해야합니까하자 함수 하나, 그리고 notice-- 오류입니다.
선언되지 않은 식별자 n의 사용 바로 여기 35 행에.
그리고 우리는 위로 이동하면, 또한, 또 다른 하나.
선언되지 않은 사용 라인 (34)에 식별자 명.
>> 그래서 컴파일러, 연타, 그 것을 알아 차리지되기 바로
비록 존재하지 않습니다 명확하게 시각적으로있다.
그래서 간단한 수정이를 선언합니다.
>> 지금 나에게로 스크롤 할 수 파일의 맨.
무엇으로 당신을 밖으로 점프 조금 다른 존재
물건에서 우리는 지난 주에보고?
뿐만 아니라 이름을 내가해야합니까뿐만 아니라, 할 나는 일부 날카로운 상단까지 포함해야
내가 할 일이있다 프로토 타입을 호출.
지금 생각하면 몹시 유사한 모습 우리는 27 행에 좀 전에 보았다.
>> 그래서 다른 추론 할 수 내가 이런 짓을 한 이유는 오류 메시지를 표시합니다.
내가 가서 보자 거기에이 줄을 삭제합니다.
그래서 우리는 프로토 타입에 대해 아무것도 몰라.
이 파일을 리메이크.
기능을 확인하십시오.
그리고 지금, 빌어 먹을, 네 오류가 발생합니다.
이제 처음으로 스크롤하자.
>> 함수의 암시 적 선언 양의 정수를 얻을하는 C99에서 유효하지 않습니다.
C99은 1,999 의미 언어의 버전
우리가 실제로 사용하는 것입니다 C.
그래서 이것은 무엇을 의미 하는가?
음 C--보다 구체적 C 꽤 바보 같은 프로그램은 compilers--입니다.
그들은 단지 당신이 걸 알지 그들에게, 그리고 그입니다
지난 주에서 실제로 주제.
>> 문제는 내가 가면 것입니다 여기에 이​​름을 구현하는 방법에 대한,
나는라는 함수를 호출 라인 (20)에 여기에 GetPositiveInt,
이 기능은 기술적으로하지 않습니다 컴파일러가 27 행을 볼 때까지 존재한다.
불행하게도, 컴파일러는 위, 아래, 오른쪽, 왼쪽으로 일을하고,
가 보지 않았기 때문에 그렇게 GetPositiveInt의 구현,
그러나 당신이 노력 본다 여기를 사용하는,
그냥 소리 지르지 bail-- 것 오류와 함​​께 당신은 아마도 message--
애매하고, 실제로 파일을 컴파일합니다.
>> 그래서 소위 프로토 타입까지 여기에 일반적으로 인정 하듯이 중복이다.
말 그대로, 여기 내려 가서 복사 이 붙여, 나는 여기에 넣었습니다.
공허 더 적절한 것, 그래서 우리는거야 문자 그대로 복사하고이 시간을 붙여 넣습니다.
말 그대로 복사하고 붙여 넣기.
정말 그냥 빵 부스러기 등.
>> 컴파일러에 대한 작은 단서.
나는 이것이 무엇을하는지 모른다 아직,하지만 난 당신에게 약속 해요
결국 존재할 것이다.
이에 한테 들었 냐 이유입니다 라인은 16-- 세미콜론으로 끝납니다.
그것은 디자인에 의해 중복이다.
네?
>> 당신은 당신의 라이브러리를 연결하지 않은 경우 오, 좋은 질문을 가까이 대고 있습니다.
샤프는 헤더 파일 흠이 포함되어 있습니다.
해야 거의을 나중에 ... 할 필요 항상 맨 위에 수
대 similar--위한 파일 정확히 같은 이유로, 예.
표준 때문에 io.h를 그대로 줄입니다
이 같은 있지만, 단어의 printf와, 그리고 인수 및 반환 유형.
그리고 날카로운 수행하여 최대 포함 여기, 당신은 말 그대로 무엇이야
내용을 복사하여 붙여 넣기합니다 누군가 다른 상단을 썼다.
이것에 코드를 cluing 이러한 기능이 존재하는 것이 사실.
그래?
>> 물론입니다.
그래서 매우 영리하고 올바른 솔루션이 될 것, 그거 알아?
내가 모르는 프로토 타입은,하지만 난 알고
나는 C 단지 것을 이해하는 경우 바보와는 위에서 아래로 rethinks.
음의이 원하는 무엇을 제공 할 수 있습니다.
그것을 붙여의 그 코드를 잘라 보자 상단, 지금은 아래로 아래 주요 누릅니다.
이것도 문제를 해결하는 것이다.
>> 하지만 당신은 아주 쉽게 가지고 올 수 A가 B를 호출해야하는 시나리오,
어쩌면 B는 A.이 다시 호출 재귀라는 뭔가가있다
그리고 우리는 그에게 올 것이다.
그리고 그것은 나 잘 수도 있고 아닐 수도있다 일,하지만 당신은 확실히 할 수
이 솔루션을 휴식.
>> 그리고 또한, 나는 것 문체 주장
특히 프로그램을 이 길고이 길어질,
그냥 슈퍼 편리 상단에 주요 넣어
이 일이 있기 때문에 대부분의 프로그래머는 걱정 할 것입니다.
그리고 그것은 조금 청소기입니다, 틀림없이, 그에게 방법을 수행하는
나는 원래했다 프로토 타입도
그것은 조금 보이지만 첫눈에 중복.
그래?
죄송합니다, 당신은 더 크게 말을 할 수 있겠습니까?
>> 당신의 위치를​​ 전환하는 경우 구현 및 프로토?
그래서 좋은 질문이다.
이 경우이를 다시 선언 여기의이 어떻게되는지 보자.
나는이 아래로 넣어 그래서 경우 여기, 당신은 말을하는지.
아, 죄송합니다.
큰 소리로?
심지어 큰 소리로.
오, 좋은 질문입니다.
이 기능을 무효화 할 것인가?
알다시피,이 모든 년 후, I 이후 프로토 타입을 넣어 적이 없다.
그럼 함수 일을하자 그 일 후.
>> [중얼]
데이비드 J. 마란 : 아, 잠깐.
우리는 여전히 정상에 모든 것을 넣어해야합니다.
그래서 난 경우의은, 여기를하자 제대로 질문을 이해.
나는 포함한 모든 것을 걸었습니다 주 위의 프로토 타입,
하지만 프로토 타입을 걸었습니다 구현 아래.
>> 내가 일을 할 경우, 내가 받고 있어요 그래서 다시 error--되지 않은 변수 (n).
아, 거기.
감사합니다.
어디 보자, 우리는이 제거.
즉, 다른 버그 그래서 그 무시하자.
의 정말 빨리이 리메이크 보자.
>> 좋아, 그럼 데이터 인수하지 형식 문자열에 사용
오 N--, 그건 왜냐하면 여기이 변경되었습니다.
좋아, 우리가 알고있는 답 아 - 모든 권리 것입니다, 우리가 간다.
아, 긍정적 인 주셔서 감사합니다.
좋아,이 코드를 수정합니다 after--이 특정 버그를 무시
이 작동 었어요 ... 때문에 답변입니다.
>> 그래서 덮어 쓰지 않습니다 당신은 무엇을 그냥 했어요.
나는 컴파일러를 의심 이러한 방식으로 작성된
그것은 당신의 프로토 타입을 무시하는 것이 본체 때문에, 말하자면
함수는 이미이의 높은 최대를 구현되었습니다.
실제로 상담해야 컴파일러의 매뉴얼
다른이 있다면 이해하기 의미하지만, 첫눈에
그냥 시도와 실험에 의해, 영향 없을 것 같다.
좋은 질문입니다.
>> 그럼, 지금 점진 이동하자 거리 부작용으로부터 어느
같은 것을 할 기능은 다음과 같습니다 시각적으로 printf와 함께 화면에,
하지만 값을 반환하지 않습니다.
그리고 그 함수는 반환이 우리와 같은 값은 단지 몇 가지를 보았다.
우리는 이미, 범위의이 개념을 보았다 우리는 또 다시이 표시됩니다.
하지만 지금은 다시, 엄지 손가락의 규칙을 사용
변수는 사용될 수 있다는 가장 최근에 개방 내부
우리와 같은 닫힌 중괄호 특정 예에서 보았다.
>> 그리고 당신은, 지적 ability--가있다
당신은 이러한 문제를 해결할 수 글로벌 변수를 넣어
파일의 맨 위에.
그러나, 거의 모든 경우에서 우리는 그에게 싫은 내색을 것입니다,
실제로도하지 지금은 그 솔루션으로.
그래서 지금, 테이크 아웃이 있다는 것입니다 변수는 범위의이 개념을 가지고있다.
>> 하지만 지금의 다른 살펴 보자 실제로보고의 건조 방법
꽤 흥미있는 약간의 구현 세부 사항.
우리가 어떻게 정보를 나타내는 수 있습니다.
그리고 우리는 이미 보았다 클래스의 첫째 주입니다.
바이너리를 보면, 및 소수점의 자신을 상기.
>> 그러나 C가 가지고있는 지난 주부터 리콜 다른 데이터 타입과 더 큼,
그러나 가장 유용한 것들 지금은이 일 수 있습니다.
어떻게 문자 또는 문자, 한 바이트 또는 8 비트의 총 수 있습니다.
그리고 그 크기 말을하다 문자의 한 바이트이다.
바이트는 8 비트, 그래서이 있음을 의미 우리는 얼마나 많은 문자를 나타낼 수 있습니다.
얼마나 많은 문자 나 키보드의 기호
우리는 한 바이트 또는 8 비트가있는 경우.
다시 주 제로 생각합니다.
당신은 8 비트가있는 경우, 얼마나 많은 총 값
당신은으로 나타낼 수 0과 1의 패턴?
그 이상 보이면.
그래서 256 총 당신이 경우 0부터 세기 시작.
그래서 당신은 팔 bits-- 그래서 우리는 경우가있는 경우 , 다시 여기에 우리의 바이너리 전구를했다
우리는에있는 전구를 켤 수 256 독특한 패턴의에서 끕니다.
>> 지금 이것은 조금 문제가있다.
영어에 대해 너무 많이하지 로맨스 언어, 그러나 확실하게
당신은 소개 할 때,에 대한 예, 아시아 언어, 어떤
같은보다 훨씬 더 기호가 알파벳 26 글자.
우리는 실제로해야 할 수도 있습니다 한 바이트보다.
그리고 고맙게도에서 최근 몇 년 동안 사회가
사용하는 다른 표준 채택 충전 당 바이트 이상.
>> 하지만 지금은 C의 기본에 대한 하나의 바이트 또는 8 비트이다.
정수 한편, 4 개입니다 바이트는 달리 32 비트라고도합니다.
어느 것이 가장 큰 가능한 무슨 의미 수 우리는 정수로 나타낼 수있다
분명히?
억.
그래서 사십억 그쯤이다.
이 32 회 전력, 우리 경우 더 음수을지지 않습니다
그냥 모든 긍정적를 사용 숫자, 그것은 사십억이다
제공하거나 가능성을.
플로트 한편, 다른 유형 그것은 여전히​​ 숫자이다 C. 데이터 타입,
그러나 그것은 실수입니다.
소수점 뭔가.
그리고 그것은 밝혀 C는 4 바이트를 사용
부동 소수점 값을 표현한다.
>> 불행하게도 얼마나 많은 부동 소수점 값은 세계에서 존재?
얼마나 많은 실수가있다?
무한이있다 번호, 그 문제에 대한
정수의 무한 수는있다.
그래서 우리는 가지 이미있어 여기에 스스로 구멍을 파고.
이에 의해 명백하게 computers--에서의 데모 테잎에 C로 작성된 적어도 프로그램
만의 높은 믿을 수있는 사십억은 지려면
및 부동 소수점 값 수 만 분명히
정밀 일부 한정된 금액을 가지고있다.
만 많은 숫자 후 자신의 소수점.
>> 왜냐하면, 물론, 만약 당신은 단지 32 비트를 가지고,
나는 우리가 갈거야 방법을 모른다 아마 진짜 숫자들을 나타내는
패턴의 종류와.
그러나 반드시 유한있다 이러한 패턴의 수,
그래서 여기, 너무, 이것은 문제가있다.
>> 이제 우리는 약간의 문제를 방지 할 수 있습니다.
당신은 플로트를 사용하지 않는 경우, 당신은 두 번을 사용할 수 있습니다
C에있는 당신에게 8 바이트를 제공하는 제로의 방법이 더 가능한 패턴입니다
과 1.
그러나 어느 것입니다, 아직 유한하다 당신이 소프트웨어를 작성하는 경우 문제가 될 수 있습니다
그래픽 또는 공상에 대한 수식입니다.
그래서 당신은 실제로 할 수 있습니다 보다 더 큰 카운트합니다.
긴 long-- 바보 named-- 또한 8 바이트, 64 비트,
이것은, int로 두 배 길이 그것은 긴 정수 값입니다.
>> 재미 fact-- INT는 4 바이트 인 경우 일반적으로 C에서 오랜 기간은 얼마나 되나요?
또한 4 바이트이지만 오래 오래 8 바이트이며,
이것은 역사적인 이유입니다.
>> 하지만 지금은 테이크 아웃 단지 그 데이터를 가지고있다
이다 computer--에 표시 할 전기와 물리적 장치,
그것은 일반적으로 운전하는 것 그 0과 1 ones--
정밀도의 유한 한 양의.
그래서 문제는 무엇인가?
>> 그런데 문제가 있어요 정수 오버 플로우.
다만 C에서, 그러나에 일반적으로 컴퓨터.
예를 들어,이 경우 바이트 가치가 bit--입니다
그래서 이것은 모든 팔 bit-- 경우 있는 번호 하나입니다.
어떤 수는 이것입니다 우리가 가정하면 대표
그것은 이진의 모든 양의 값을입니까?
>> 255, 그리고 256가 있기 때문에, 아니다 제로는 가장 낮은 숫자입니다.
그러므로 255은 가장 높은 하나이지만 문제
내가하고 싶다고 생각합니다 이 변수를 증분하는
8 비트 총 사용 나는 그것을 증가합니다.
>> 그럼 난 추가 마자 이러한 것들의 모든 일,
당신은 아마 그냥 visually-- 상상할 수 decimals-- 사용하여 하나를 들고 같은
뭔가 왼쪽으로 흐를 것입니다.
그리고 실제로, 나는 번호를 추가하는 경우 이 하나, 무슨 바이너리에서 발생
이 제로로 돌아 넘치는 것입니다.
>> 그래서 당신은 int를하지 use-- 경우, 하지만 단일 바이트 정수를 계산합니다
프로그램 내에서, 가능한 한 빨리 default--에 의해 당신이 250에 도달 251, 252, 253, 254,
255-- 0, 255 이후에 온다 이는 아마 무슨이다
사용자가 기대하는 것입니다.
>> 이제 그 사이에 포인트 세상을 떠에, 당신은 또한 유사한 문제가있다.
가장 큰 번호도 너무별로 비록 그 여전히 문제입니다.
그러나 정밀 금액 당신은 나타낼 수있다.
그래서이 예에서 살펴 보자 여기에 오늘날의 소스 code--에서
플로트 0.C합니다.
>> 그리고 슈퍼 것을보세요 간단한 프로그램이
분명히 어떤 값을 출력해야합니까?
이 인쇄 것입니다 베팅 않는 무엇 새 구문의 비트가 비록
여기?
그래서 잘하면 0.1.
그래서 한 10 분의 1에 해당하는 나는 10로 나눈 1 일을 해요 때문이다.
나는 대답을 저장하고있어 변수에 F했다.
즉, 변수는 float 형,의 인 난 그냥 제안 키워드가 존재합니다.
>> 우리는 전에 본, 그러나 한 이 printf와의 깔끔한 방법 가지입니다
얼마나 많은 숫자를 지정할 수 소수점보고 싶어요.
그래서이 표기법은 의미 그 여기 자리입니다.
이는 부동 소수점 대해 야 값, 그리고 아, 그런데,
소수점을 함께 보여 소수점 후 하나의 번호.
그래서 숫자입니다 유효 숫자의,
그래서 당신이 할 수 있음을 말하고있다.
>> 그래서 내가 가서하자 ./float-0, 플로트는 0,
분명히 하나 10로 나눈 0.0이다.
이제 그 이유가 무엇입니까?
>> 그런데 또, 컴퓨터가 복용 나 문자 그대로, 나는 일 작성했습니다
나는 10를 기록한 추측을 무엇을 그 두 가지에 대한 가정 데이터 유형은
값?
INT, 그것은 기술적으로 야 조금 다른 뭔가.
그것은 일반적 하겠는데 그건 궁극적으로 적분 값.
하지 부동 소수점 값.
>> 어떤 그 경우이 말을하는 것입니다 , int 형이고이 int이며
문제는 컴퓨터 인 것을 능력이없는
심지어 소수점을 저장합니다.
당신이 일을 수행 할 때 그래서 분할 열 사용하여 정수에 의해
분자와 모두 분모는 대답은 0.1이어야한다.
그러나 computer-- 때문에 사람들은 integers-- 아르
0.1과 함께 무엇을 해야할지하지 않습니다.
>> 그래서 어떻게 명확하고 있습니까?
단지, 그것을 멀리 던지고 나는 궁극적으로 무엇을보고 있어요
내가 주장 때문 0.0 printf와 나에게 하나의 소수점을 보여줍니다.
그러나 문제는 것입니다 당신이 경우 정수로 정수를 나누고,
당신은 정의에 의해 ... 가질 것 의 정수를 C--.
그리고 그것은하지 않을 것 좋은 편리하게 뭔가
최대로 다시 라운드 등 하나의 위 또는 아래로 가장 가까운.
그것은 절단 것 소수점 이하 다.
>> 그러니 그냥 직관적으로, 아마 수정 무엇입니까?
여기에 간단한 수정은 무엇입니까?
그래?
정확히.
왜 우리는 이러한 취급하지 않습니다 효과적으로 부동 소수점 값
수레 또는 복식로 선회.
그리고 지금은 수 있도록 할 경우 수레-0, 또는 나는 수레-1을 컴파일하는 경우,
이는 동일합니다 어떤 것은 단지 제안되었다.
그리고 지금은 수레-0, 지금은 내 0.1을 얻는다.
>> 지금이 놀랍습니다.
하지만 지금은 할거야 조금 다른 뭔가.
정말 무엇이 들어 있는지 궁금해서 후드 아래에 일어나고,
나는이 작업을 인쇄 할거야 아웃 28 소수점 자리.
정말보고 싶어 0.1000-- infinite--
그 0.1 후 [INAUDIBLE] 27 제로.
>> 우물 인 경우에 보자 난 정말 무엇을 얻을.
수레 - 공 같은 파일을 확인합니다.
./floats-0.
의 극적인 대답을 확대하자.
이 모든 시간, 당신은 생각을 해 봤는데 10으로 나눈 하나는 10 %, 또는 0.1입니다.
그것은 아니다.
적어도 지금까지로 컴퓨터의 우려.
>> 확인하고 똑똑한 자,은 완료한다 10로 나눈 거짓말 하나는 0.1이다.
하지만 그건 아니다하고 똑똑한 테이크 아웃 오늘.
왜 컴퓨터가 생각 하는가 방에있는 우리 모두는 달리,
10로 나눈 1입니다 실제로 미친 가치인가?
분명히 일을 컴퓨터가 무엇입니까?
그게 뭔데?
>> 그것은 그 자체로, 오버 플로우 아니에요.
오버 플로우는 보통 때입니다 당신이 값을 줄 바꿈.
그것은 부정확성이 문제입니다 부동 소수점 값
당신은 단지 32가 어디 또는 어쩌면 64 비트.
그러나 무한이 있다면 실제 숫자들 수
소수점과 숫자 숫자는 확실하게 thereafter--
만약 그들 모두를 나타낼 수 없다.
그래서 컴퓨터가 주신 우리와 가장 가까운
값으로는 사용하여 나타낼 수 있습니다 내가 실제로 원하는 값으로 비트 수,
이는 0.1입니다.
>> 불행하게도, 당신이 경우 수학 작업을 시작하거나,
부동의 이러한 종류를 포함 시작 중요한 programs--에서 소수점 값
금융 소프트웨어, 군사 software-- 아무것도
위치 인식은 아마 꽤 중요합니다.
그리고 당신은 추가 시작 이 같은 숫자 및 시작
해당 소프트웨어를 실행 정말 큰 입력을
또는 시간, 많이에 대한 년의 일 또는 많이,
이 작은 작은 실수 확실히 시간이 지남에 추가 할 수 있습니다.
>> 이제 옆으로, 당신은했습니다 경우 어느 슈퍼맨 세 또는 사무실 공간 볼
당신은 기억 할 수 어떻게 그 사람이 훔쳐
자신의 컴퓨터에서 많은 돈 부동 소수점 값을 이용하여
그리고 작은까지 추가 나머지 잘하면 그 영화
더욱 의미가 있습니다.
이것은 그들이 무엇인지입니다 그 영화에 암시.
사실 대부분의 그 회사는 보이지 않는 것
특정 숫자 후 소수점 자리,
하지만 사람들은 센트의 분수입니다.
그래서 당신은 그들을 추가 시작 당신은 많은 돈을 만들기 위해 시작
귀하의 은행 계좌에서.
그래서 사무실 공간 설명입니다.
>> 지금 불행하게도 넘어 사무실 공간, 거기에
일부 합법적으로 골치 아픈 상당한 영향
이러한 종류의 기본 디자인 결정,
그 이유 중 하나 실제로 우리는 과정에서 C를 사용
당신은 정말이 땅이되도록 컴퓨터의 작동 방식에 대한 이해까지,
어떻게 소프트웨어가 작동하고,하지 당연한 아무것도 가져 가라.
>> 그리고 참으로 불행하게도, 심지어와 그 근본적인 이해
우리 인간은 실수를합니다.
그리고 내가 내가 공유하고자하는 것입니다 이 팔분 비디오는 여기 촬영
인 현대 놀라운 일 에피소드에서 사물이 작동하는 방법에 대한 교육 쇼
즉이 사진을 페인트 의 경우 부적절한 사용
및 이해 부동 소수점 값을
몇 가지 중요한 주도 불행한 결과.
이제 살펴 보자.
[동영상 재생]
- 우리는 이제 공학 "으로 돌아 현대 경이에 재해 ".
컴퓨터.
우리는 모든을 받아 왔어요 종종 실망하는 문제들
데모 테잎 버그, 바이러스 얻고, 작은 가격에 소프트웨어 glitches--
편의를 위해 지불합니다.
그러나 첨단 기술 및 고속에서 군사 및 우주 프로그램 응용 프로그램,
작은 문제 수 재난으로 확대 될 수있다.
>> 1996년 6월 4일에서 과학자들은 준비 무인 아리안 5 로켓을 시작합니다.
그것은 과학 운반했다 위성 설계
정확하게 어떻게 수립 지구의 자기장의 상호 작용
태양 바람과 함께.
로켓에 지어진 유럽​​ 우주국,
그 시설에서 들어 올려 프랑스어 령 기아나의 해안.
>> 에 대한 37초 소 - 비행, 그들은 첫째
눈치 뭔가 잘못 가고 있었다.
노즐은 회전식라고 어떤면에서 그들은 정말 안된다.
비행에 40초 주변, 분명 차량은 문제가 있었다
그들이 만든 때 그건 결정은 그것을 파괴한다.
범위 안전 요원과 엄청난 용기는 버튼을 누르면
이 수 이전과 로켓 폭발 공공의 안전에 위해가된다.
>> -이는 처녀였다 아리안 5의 항해,
그 파괴했다 때문에 결함의 배치
로켓의 소프트웨어에 내장.
에 데리고가 문제 아리안이었다 그이
필요한 번호였다 64 비트, 표현
그들은 변환 원 16 비트 수에 그것.
그들은 수 있다고 가정 매우 큰 될 것되지 않았습니다.
즉, 그 자리에서 대부분의 64 비트 개수는 제로였다.
그들은 틀렸다.
>> 한 교사로서 무능력 소프트웨어 프로그램을 적용합니다
생성 수의 종류 또 다른 실패의 루트에 있었다.
소프트웨어 개발이되었다 새로운 기술의 매우 비용이 많이 드는 부분입니다.
아리안 4 로켓했다 매우 성공적이었다.
을 위해 만든 소프트웨어의 너무 많은 또한 리앙 (5)에 사용 하였다.
>> 년 - 기본 문제 였습니다 아리안 5.
faster-- 빠르게 가속하고 소프트웨어는 차지하지 않았다.
>> 로켓 제나 파괴 거대한 금융 재앙이었다.
모든 인해 분 소프트웨어 오류.
그러나 이것은 첫번째 아니었다 시간 데이터 변환 문제
현대적인 로켓 기술을 괴롭혀했다.
>> 시작과 함께 1991 -in 첫번째 걸프 전쟁,
패트리어트 미사일 비슷한 종류의 경험
수 변환 문제.
그리고 그 결과로 28 사람들 .. 28 미국 soldiers--이 사망했다,
약 백 다른 부상.
때 가정 된 애국, 수신 스커드를 방지하기 위해
미사일을 발사하는 데 실패했습니다.
>> 언제 이라크는 쿠웨이트, 미국을 침공 초기 1991 년 사막의 폭풍을 시작,
패트리어트 미사일 배터리가 배치되었다 사우디 아라비아와 이스라엘을 보호하기
이라크 스커드 미사일 공격.
애국은 미국의 중간 범위 지대공 시스템
레이 시온 회사에 의해 제조.
>> 애국 제나 크기 인터셉터 itself--을
그것은 약 약 20 피트이다 그리고 약 2,000 파운드의 무게.
그리고, 정도의 탄두를 운반 나는 대략 1백50파운드 생각합니다.
그리고 탄두 자체입니다 고성능 폭약, 어떤
그의 주위에 조각을 가지고있다.
그래서 탄두의 케이스입니다 사슴 사냥 용 총알 같은 역할을하도록 설계.
>> 년 - 미사일 탑재된다 컨테이너 당 사,
및 세미 트레일러에 의해 운반된다.
>> 년 - 패트리어트 미사일 시스템 지금 적어도 20 년 전으로 거슬러 간다.
그것은 원래 설계되었습니다 방공 미사일로
적군의 비행기를 격추합니다.
첫번째 걸프 전쟁에서 그 전쟁에 왔을 때,
육군은에 그것을 사용하고 싶었 스커드 미사일이 아닌 비행기를 격추.
이라크 공군이었다 문제 라기보다는,
그러나 육군은 스커드 미사일에 대해 걱정했다.
그래서 그들은하려 애국을 업그레이드합니다.
>> 적을 -Intercepting 마하 5로 여행 미사일
충분히 도전 할 거라고.
그러나 때 애국 서비스로 돌진했다,
육군은 인식하지 않았다 이라크 수정이
자신의 스커드 만든 거의 그것을 불가능합니다.
>> 무슨 일이 있었 스커드 미사일을하다 에서 오는 불안정했다.
그들은 휘청했다.
그 이유는 Iraqis--이었다 600km 밖으로 얻기 위하여
300 킬로미터 범위 missile--의 전면 탄두에서 무게를했다
탄두 경량화.
이제 애국의 올하려고 스커드에서, 외엔의 가장
의 압도적 인 다수 외엔 ... 그냥 스커드에 의해 비행 것입니다.
>> 패트리어트 시스템 운영자 - 일단 애국자가 목표를 놓친 실현
그들은 애국의 탄두를 폭발 그것이 가능하면 사고를 방지하기 위해
지면에 낙하시켰다.
>> - 그건 대부분의 사람들이 본 것을이었다 으로 하늘에서 큰 불 덩어리,
와 같은 오해 스커드 탄두의 도청.
>> 밤 하늘, 애국자에서 - 비록 성공적으로 파괴 될 것처럼 보였다
스커드 미사일은 다란에있을 수 성능에 대해 실수하지 않습니다.
이 패트리어트 미사일의 레이더 시스템 수신 스커드의 손실 트랙
인해 시작되지 않습니다 소프트웨어 결함이다.
>> 그것은 먼저 발견 한 이스라엘을했다 더 이상 시스템이 켜져 있는지,
큰 시간 차이가되었다.
때문에 내장 된 시계 시스템에서의 컴퓨터.
>> 정도 요 이주하기 전에 다란의 비극
이스라엘은에보고 국방부
그 시스템은 시간을 상실 하였다.
여덟 시간 후 실행, 그들은 발견
시스템의가되는 것을 눈에 띄게 덜 정확.
국방부에 의해 반응 애국의 건전지를 모두 이야기
시스템을 떠나지합니다 오랜 시간에.
그들은 오랜 시간이 무엇인지 말하지 않았다.
8시간 10 시간, 천 시간.
아무도 알지 못했다.
>> 년 - 애국 배터리 막사에 배치
다란과 결함이 내부에서 시계는 100 시간 이상에 있었다
2 월 25 일 밤에.
>> - 그것은 정확도로 시간을 추적 의 10 분의 1 초에 대해.
둘째의 지금 십분의 일 흥미있는 수이다
이 표현 될 수 없기 때문에 이진수로 정확하게하는
정확히 표현할 수없는 의미 현대의 디지털 컴퓨터에서.
그것은 믿기 어렵지만, 예를 들어이를 사용합니다.
>> 의가 수 삼분의 일을 보자.
한 셋째는 될 수 없다 정확히 진수로 표현했다.
한 세 번째는 0.333이다 무한대 동안 계속.
와 그렇게 할 수있는 방법은 없습니다 소수의 절대 정확도를 제공한다.
즉, 문제의 정확하게 종류의 그 애국에 일어났다.
이제 시스템이 도망 더 시간 오류가되었다.
>> 작업의 1백시간 듣던, 시간 오류는 약 3 위
초.
그러나 타겟팅 환산 마하 5로 여행 미사일,
그것은 추적 결과 600여 미터의 오류입니다.
그것은 치명적인 오류가 될 것이다 다란의 군인.
>> 스커드 발사했다입니다 무슨 일이 있었 조기 경보 위성에 의해 검출,
그들은 스커드 오는 것을 알고 있었다 자신의 일반적인 방향으로.
가 오는 어디 있는지 몰랐습니다.
이 레이더까지 지금이었다 패트리어트 시스템의 구성 요소
다란을 방어하는 것은 찾아 유지 들어오는 적의 미사일을 추적.
>> 년 - 레이더는 매우 영리했다.
실제로 추적 할 것 스커드의 위치
다음 위치를 예측 아마 것
다음번 레이더는 출력 펄스를 보냈다.
즉 범위 게이트 불렸다.
>> 애국 번 - 그럼 충분한 시간을 가지고 결정
돌아가서 다음을 확인 통과 이 검출 된 객체의 위치
그것은 돌아 간다.
그래서 잘못된로 돌아 갔을 때 장소는 그 다음 어떤 객체를 볼 수 없습니다.
그리고 그것은 어떤 개체가 없다고 결정한다.
오 검출이 있다는 것을 그리고 트랙을 삭제합니다.
>> 년 - 수신 스커드 사라졌다 레이더 화면에서,
초 후, 그것을 막사를 강타.
스커드는 28을 죽였다.
그것은 한 최근 해고 첫번째 걸프 전쟁 당시.
비극으로, 업데이트 된 소프트웨어 다음 날 새벽에 도착했다.
소프트웨어 결함이 있었다 하고 고정 폐쇄
문제가 하나의 장 패트리어트 미사일의 역사.
>> [END VIDEO 재생]
>> 데이비드 J. 마란 : 그 CS50은 여기까지.
우리는 수요일에 당신을 볼 수 있습니다.
>> [음악 연주]