[Powered by Google Translate] [제 3] [이하 편안한]
>> [네이트 Hardison] [하버드 대학]
>> [이 CS50 수 있습니다.] [CS50.TV]
>> 좋다, 시작하자.
CS50의 주 4에 오신 것을 환영합니다.
너희가 웹 브라우저를 열고 pset 3 열 경우는,
CS50로 출격, 우리는 갈 시작할 거에요
이 질문의 섹션을 통해.
바로 지난 주처럼, 우리는 CS50 공간에서 일하게 될거야
당신은 또한뿐만 아니라 그 올리 있을지
당신이 가서 내가 상단에 여기에있어 한이 링크를 방문하십시오.
그것은 시작하는 시간이다.
우리는 여기서 우리의 작은 안부 프로그램이 있어요. 미친 아무것도.
오늘 당신들을 어떻게해야할까요 첫 번째 것들 중 하나는 몇 가지 솔루션을 통해 시작한다
문제 세트 1 예를 들어, 솔루션의 종류에
그냥 당신이 코드 직원의 종류 쓰는 일에 대한 느낌을 얻을 수
코드 다른 학생들 종류의 쓰기 무엇,
난 그게 이상하다는 건 알지 때문이 당신이 살펴
당신은 문제 집합에 솔루션을 제출하고 의견을 때
자신의 버전을하지만, 가끔 다른 사람들이 알아 냈어하는 것이 좋습니다
특히 멋진 아르들이보고.
대부분의 경우, 내가 정말 너희들이 생산하는 솔루션 깊은 감명을 받았습니다.
전 아직 문제 세트 거 고요를보고 시작하지 않은,하지만 그들은 처음 그런 건 경우
그것은 아무것도하지만 좋은 일을 의미합니다.
>> 내 개정을 보면, 어디, 일 월요일 수정 1에서 모든 길을 시작하게
우리는 마리오 솔루션에 대해 간략히 살펴거야.
당신이이 일을하면, 우리는 제시 할 것 같군 이러한 프로그램이 정확합니다.
, 거기에 문제가있는 정확성의 문제가 아니었다 아니라
우리는 다른 디자인 문제에 대해 조금 얘기하고 싶어요
그 여기에 사용되었다.
솔루션에 대한 흥미 로웠 것들 중 하나
이 파운드 정의라는이 새로운 구조를 사용하는 것입니다,
때때로 또한 해시 정의라고.
내가 여기에 확대 봅시다.
# 정의는 프로그램에서 이러한 숫자에 이름을 부여 할 수 있습니다.
마리오의 피라미드의 경우, 최대 높이
23보다는 내에서 23 댔 코드
우리는 하드 코딩 23로 그를 참조거야 -
대신이 그 번호로 이름 MAX_HEIGHT을 제공합니다
그래서 여기 내 DO-동안 루프에서 해당
당신은 실제로 MAX_HEIGHT을 참조 할 수 있습니다
대신 23 번을 생각할 때
[학생] 그렇게 할 수있는 이점이 무엇입니까?
그건 좋은 질문이야.
하나는 가독성이다.
이 # 정의를 사용의 장점은 가독성이다.
내가이 코드를 읽고있을 때, 나는 무슨 일이 일어나고 있는지 볼 수 있습니다.
>> 나는 우리가 테스트하고있는 것으로이 조건에서 볼 수 있습니다
높이 우리는 또한 정의 수 <0, 존재
최소 높이 또는 분 높이 여야합니다.
다른 장점은 그때 볼 줄의 나머지 부분을 읽을 수 있다는 것입니다
우리는 또한, 높이가 최대 높이보다 큰 아니라는 것을 확인하기 위해 확인한다는
우리는 높이가 최대 높이보다 큰 동안 계속해서 때문입니다.
다른 장점은 - 내가 조금 축소 - 여기
이 프로그램을 실행하고, 지금 23와 함께 말을 실행하는 경우
그냥 그렇게 모든 23 행을 출력합니다.
그러나, 나는 최대 높이를 변경하고 싶어 말
지금은 피라미드의 최대 높이를 제한하려는
펑키했다 만 말하는 사람이 될 수 있습니다.
# 포함 , # MAX_HEIGHT을 정의
오고 우리가 10 동등을 설정하는 원한다고.
지금이 시점에서 내가했던 모든이 한 위치에서 변경했습니다.
나는 12 시도하고 입력하면 난 지금 코드를 다시 컴파일하고, 수
나 다시하라는 메시지가 표시됩니다.
이 경우, 우리는 한 번만 MAX_HEIGHT를 사용하고 있습니다.
그것은에 갈 번거 로움 큰 일 아니야
필요한 경우와 동안 루프에서 변경합니다.
하지만 당신이 동일한 마법 번호를 참조하는 프로그램
반복해서,이 # 메커니즘을 정의하는 것은 정말 편리합니다
당신은의 파일 - 당신이 넣는 일반적됐다고을 상단에서 한 시간을 변경할 수 있기 때문에
그리고 변화는 파일의 나머지 부분을 통해 percolates.
>> 내가 생각하는 본 과제에 유의하고 싶어 다른 것들, 정말 좋은 보았다
하나는 변수의 명명했다.
당신은 우리가 행과 높이 소위라는 정수 변수를 가지고 한 여기를 참조하십시오.
공백 해시는, 코드가 좀 더 읽을 수 있도록하는 데 도움이
조금 더 이해하기 것을 실제로 무슨 일 수 있습니다.
이 사용하는 반면에, 무작위 편지를 말
모두 또는 듣기 힘든 얘기 라.
제가 지적합니다 마지막으로 한가지는 for 루프에 해당합니다
자주 반복자 변수, 당신은 루프에 대해에서 사용하는 이러한 카운터,
그 후 K 표준과 내가하고 J 중과를 시작하는 기존 및이에요
당신이 더 많은 변수가 필요하면 거기에서 무슨 일,
이 단지 컨벤션 있습니다.
컨벤션 많이 있습니다.
당신이 사용하고있는 프로그래밍 언어에 따라 달라집니다.
그러나 C에서, 우리는 일반적으로 전을 시작합니다.
이 말은, 사용하는 이해가되지 않는 A 또는 B
상황에 따라 다릅니다.
이 하나는 기록이다.
지금 일 월요일 수정이를 끌어 경우, 당신은 또 다른 마리오를 볼 수 있습니다
이 하나는 우리가 본 다른 하나와 유사한
하지만 멋진 무언가 종류를 않습니다.
우리가 루프의 내부에서 바로 여기이 부분을 보면
그들은 바로이 라인에 여기 어떤 미친 찾는 구문을 사용하고 있습니다.
이것은 3 원 연산자라고합니다.
그것은 한 줄에 응축 경우 다른 문입니다.
조건은 괄호 안에이 부분입니다.
이 말에 것과 J <높이된다면 ... - 난 - 1.
그리고 그 내용 블록이 될 경우는 공간이 무엇입니까
다음 다른이 될 일의 내용이 #입니다.
그것은 본질적으로이 변수에 공간을 할당있어.
그것은 블록 변수의 내용에 공백을 태우고
이 조건이 충족되는 경우, 상태가 충족되지 않은 경우는,
다음 블록 변수는 #이를 얻을 수 있습니다.
그리고, 물론, 대신 전체 문자열을 구축
그리고 마지막에 모든 출력이 솔루션은 한 번에 한 문자를 출력합니다.
정말 멋진.
>> 볼 수있는 일의 또 다른 커플. 우리는 욕심으로 이동합니다.
우리가 욕심 보면 지금이 아니면,이 첫 번째 솔루션
# 꽤 정의 다음을 사용합니다.
우리는이 프로그램의 서로 다른 숫자의 각각에 대해 정의 된 한 상수를있어.
우리는 달러 당 센트 한, 분기, 천, 5 센트, 그리고 동전 한이 있고
지금 우리는 아래로 스크롤 코드를 읽으면
우리는 표준 일 - 동안 루프 인쇄 모든것을 볼 수 있습니다.
이 문제의 요점의 종류가 실현 된 그
당신은 정수로는 사용자에서 읽을 수있는 수레를 변환하는 데 필요한
정확하게 계산을 수행,이 그 이유 일입니다
부동 소수점 숫자로, 우리는 간단하게 강의에 대한 이야기​​와 같은,
정확하게 숫자 라인에있는 모든 단일 값을 표현하기 위해 수 없습니다
무한 여러 값도 3.1 세 사이의 말은이 때문입니다.
당신은 3.01와 3.001과 3.0001을 가질 수, 당신은 계속 할 수 있습니다.
당신이 돈을 작업 할 때마다 그것은 밝혀, 당신은 자주 변환 할
정수 형식으로 있도록 동전과 물건의 종류를 잃는 게 아니야.
그와 라운딩을하는 것이 핵심이었다.
이 솔루션은 완벽하게 간단 훌륭한 알고리즘을 사용
이는 먼저 분기하여 남은 센트의 수를 감소
그런 다음 천으로 다음 센트면, 그럼 페니로,
그리고 동전마다의 수에 추가.
>> 제가 축소 및 개정 4로 이동 한 우리가 볼 수있는 또 다른 방법,
매우 비슷 시작하지만, 대신 사용 사업부와 모드를 가지고
여기에 센트의 수를 계산합니다.
이것은 분기의 수는 25으로 나눈 센트의 수와 동일합니다
우리가 정수 나누기를하고 있기 때문에이 작동 이유는,
그래서 폐기 된 나머지입니다.
[학생] 우리는 검색을 언급해야하나요?
정말 따라 달라집니다.
[학생] 당신은 여기에 코드보다 더 많은 주석하고 있습니다.
네, 그래서이 문제에 철학을 변화의 무리가 있습니다.
내 개인 철학은, 코드가 정말 사실 때문입니다
코드처럼 실제로 컴퓨터에서 실행 할 수있어
그래서 코드는 많은 주석으로 필요로하지 않도록 최대한 읽을 수 있어야합니다.
그 말은 당신이 수학적으로 까다로운의 종류 일을 할 때, 말
또는 알고리즘, 그것은 그 당신이 할 수 있도록하여 댓글을 잘
코드를 읽고 사람에게 여분의 차원, 여분의 레이어를 추가합니다.
이러한 해결책에서, 종종 더 많이 왜냐하면 댓글을 달았 아르
우리는 그들을 배포 할 수 있도록하려는 사람들이 애들을 데리러 수 있습니다
그리고 아주 쉽게 읽어보십시오.
그러나 확실히,이 무거운 것을 동의 할 것이다.
[학생]하지만 의심, 무거운 갈 때?
의심, 무거운 이동합니다.
어떤 사람들은 가끔 그런 식으로 반환 0 또는 말을합니다.
나는 말도 안되는 코멘트 그게 생각합니다.
분명 그건 일어나고있는 일이지.
나는 나 한테 말 영어 필요가 없습니다.
때때로 사람들은 같은 걸 쓸 것 "kthxbai을!"
그래서 귀엽기뿐만 아니라하지 -
그 댓글을 점 여부의 차이를 만들수 없어.
그 가지 의견은 하, 하입니다.
좋아.
>> 이 시점에서, 질문 3 섹션을 설정 문제에 대한 작업을 시작하자.
너희들은 다시이 일을하면,
지난 주와 마찬가지로, 우리는이 섹션의 반바지를 볼 수 없어요.
우리는 당신들이 자신의 시간에 그 일을하게 놔두지하고 질문에 대해 얘기하자.
그러나 지금은이 섹션에서 우리는 더 많은 시간을 보내고거야
코딩 기본 덜 얘기를
우리가 지난 주에했던 것처럼, 대신, 우리는 더 많은 초점을거야
이론의 조금 더, 그래서 이진 검색에 대해 얘기하고 분류.
강의와 함께 다음과 같은 한 분들부터,
누가 나 한테 그 차이가 무엇의 뉴스 레터를 살펴을 제공 할 수
이진 검색 및 선형 검색 사이?
무슨 일이야? 그래.
정렬 목록에서 모든 요소를​​ 통해 선형 검색 검색
하나 하나 하나 하나 하나,
및 이진 검색은, 2 그룹으로 목록을 분리
당신이 검색하고 키 값이 경우 수표는 중간 값보다보다 크거나 작
당신은 발견하고보다면, 그것은 아래 목록을 가서
그리고 다시 분할 같은 기능을 수행
모든 길 아래로는 값 자체에 같도록 중간 지점을 발견 할 때까지.
맞아.
>> 우리가 왜 상관이야?
왜 우리는 선형 검색 대 이진 검색에 대해 이야기합니까?
그래.
당신은 문제의 크기를 두 배로 만약 그렇다면 이진은 훨씬 빨리입니다
그것은 오히려 두 배 많은보다 한 걸음 만 더 걸립니다.
그렇지.
좋은 해답이 있습니다.
선형 검색을 많이 한 번에 하나의 요소를 확인합니다
우리는 강의의 가장 첫날에 본으로
데이비드는 자신의 전화 번호부 예를 통해 들어갔을 때
한 번에 전화 책의 한 페이지를 찢어 지죠
그리고, 다시 이상 이상 이상 그 일을 계속
그것은 그에게 전화 번호부에있는 사람을 찾을 수 정말 시간이 오래 걸릴 거예요
물론,하지 않는 한, 그는 알파벳의 처음에 사람을 찾고있었습니다.
이진 검색을 통해, 당신은 훨씬 빨리 갈 수
그리고 두 번 빠르게 또는 3 배 빠르게 또는 4 배 빠른 속도로만큼 없습니다.
그러나 문제는 작아 빠르고 훨씬 작은옵니다.
이 설명하기 위해, 우리는 무슨 일이 벌어지고 있는지에 대해 얘기 시작합니다
우리는 이진 검색을 쓸 때.
손에 문제는 내가 숫자의 배열이있는 경우
, 1, 2, 3, 5, 7, 23, 45, 78, 12,323을 말
그 후 0s의 장자 후 9
대신 우리는 무엇 정말 빠르게 파악 할 수 있도록 할
숫자의 배열입니다.
나는이 약간 바보와 약간의 인위적인 보인다는 거 알아요
지금이 때문입니다.
우리는 거기에 매우 많은 요소가없는 배열을 가지고
그리고 당신이 중 하나를 묻는다면 파악할지 여부를
23 배열에, 당신이 너무 빨리 할 수
그냥이에서이기는 및 예 또는 아니오 말하지로.
이라면 고려해야 할 아날로그는 말 상상된다
10,000 행 20,000 행이있는 Excel 스프레드 시트.
물론, 당신은 명령 F 또는 제어 F을 수행하고 무언가를 찾아 볼 수 있습니다.
당신은 또한, 필터 및 검색 물건을 사용할 수 있습니다
하지만 선으로 선으로 해당 파일 라인을 통해 볼한다면,
그것은을 찾아 당신에게 시간이 오래 걸릴 것입니다.
곳도 전화 번호부 예에서처럼 가지입니다
아무도는 한 번에 전화 번호부하다 페이지를 통해 보이는 없습니다.
일반적으로, 그들은 중간에 열어 요
또는 전화 책과 사전 곳의 많은의 경우
당신은 실제로는 첫 글자에 조율 한
그 첫 글자로 이동하다가 열이 겪고 시작합니다.
>> 이름을 다시 생각 나게 해요. >> 샘 있습니다.
샘.
샘 말처럼, 그 선형 검색 과정은 정말 늦어 질 전망입니다
대신 이진 검색과 함께,이 작품 방법입니다
우리가 우리의 검색 알고리즘의 반복을 통해 갈 때마다,
우리는 본질적으로 반으로 목록을 나눌 것이다
두 개의 작은 목록에.
그리고 루프의 다음 반복에, 우리는 다시 나누어됩니다
다른 작은 목록에.
당신이 볼 수 있듯이, 문제는 점점 작아지고 있으며 작은 계속
우리는 매번 목록의 폐기 절반을 유지 때문입니다.
이 방법 폐기 작동합니까?
우리가 컴퓨터라면 그냥 거듭 말씀 드리지만, 우리는 할 수있는 것
우리는이 목록에서 5 번 검색, 말 한
우리가 중간에 번호를 선택할 것입니다.
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 숫자가 있기 때문에이 목록 중간에
우리는 4 위치 또는 5 위치에 하나의 수를 선택 할
우리는 목록의 중간에 전화 해.
중간에 번호를 선택합니다.
샘 말처럼 그 번호가 동일하면, 우리는 볼 수 테스트합니다
우리가 얻을하고자하는 번호 또는 원하는 수 있습니다.
이 같은이라면, 우리가 찾았습니다. 우리는 이겼다.
그 같지 않음이라면, 케이스의 몇 있습니다.
두 경우는, 어느 숫자는 우리가보고있는 수보다 더 큰 수 있다고 아르
아니면 미만입니다.
가 더 있다면, 우리는 오른쪽으로 이동합니다.
덜 있다면, 우리는 왼쪽으로 이동합니다.
그리고 우리는 다시 전체 과정을 반복
오른쪽 절반하거나 목록의 왼쪽 이분의 일 중 하나에.
>> 오늘의 섹션의 첫 번째 문제는 알아 내기 위해서입니다
어떻게 우리가 실제로 C 코드에서이 표현을 시작할 수 있습니다.
여기 의사있어.
그게 우리가 일을 시작합니다 내가는 새로운 공간을 찾아 볼게요
우리가 저장이 노트를 가지고 있도록,이 버전을 저장
우리는이 모든을 삭제 한 다음 복사하여 문제 세트에서 붙여 넣기합니다
우리의 공간에이 정보, 그리고 희망이 침입하지 않습니다.
좋아요.
당신 부하들이 그렇게한다면, 당신의 새로운 공간에이 코드를 복사하여 붙여 넣기
빈 하나에.
가 다니엘을 시도해 보자. 이 프로그램을 컴파일하고 실행하면 작동합니까?
번호 >>은 무슨 말을하는 거예요?
이 컨트롤이 아닌 무효 함수의 끝 부분에 도달 말합니다.
그래, 내가 그것을 실행 해 보자.
당신들은 전에 본 적있어? 이 무슨 뜻인지 알고 계십니까?
좋아,이 조금 해부 보자.
당신이 말한 것처럼, 열 1 우리가 오류를 가지고 9 호선에 file.c에서 말하는거야
그리고는 오류 경고 및 반환 형식이 경고에서 형태소 분석 있다고 말한다.
뭔가 말이 반환 유형,에게 무슨 일이있는 것 같습니다.
우리는 비 무효 기능이 있고, 어떤 우리가 기능이있어 의미
그 빈 공간을 반환하지 않습니다.
무효 기능은 다음과 같습니다 그 하나입니다 :
무효 foo ()가, 그리고 반환 타입이 무효이기 때문에이 무효입니다,
그 말은 우리가 여기에 뭔가가 있다면
반환 한 것처럼, 우리는이에 대한 컴파일러 오류 겠어요.
그러나, 우리는 비 무효 기능을 갖추고 있습니다.
이 경우 비 무효 기능은 검색 기능입니다
이 BOOL의 반환 형식이 때문입니다.
이 컨트롤이 아닌 무효 함수의 끝에 도달한다는거야 때,
검색 return 문이없는 때문입니다.
이 유형 BOOL 물건을 반환 없어.
>> 우리는 그 문제를 해결할 수 있으며, 당신들은 어떻게 생각 하나
검색은 기본적으로 반환해야합니까?
어떻게 검색의 기본 반환 값이어야합니다?
우리가 마지막에 넣을 수 일이지.
샬롯, 당신은이 않는 -?
참 또는 거짓? >> 참이거나 거짓입니다.
어떤 사람?
false를 반환합니다. 모르겠어요.
거짓? 한번 해보자.
왜 반환 거짓 말을하는거야? 그거 좋은 직관입니다.
[샬롯] 난 몰라요.
이것이 우리의 기본이 될 것이기 때문에 우리는이 경우에 false를 반환하는 것
어떤 이유로 목록이 비어 있거나 바늘 인 경우
우리는 존재하지 않는 찾고.
그런 다음 맨 끝에서 경우 ​​우리는이 함수에서 사실 이전에 반환하지 않는
우리는 항상이 함수가 아니, 그 배열에없는 말 것 알아요.
이 건초 더미에 없습니다.
우리가 컴파일하고 실행하면 이제 우리가 살펴볼 수 있도록 저를 저장하고, 그것을이 - 보자.
우리가 컴파일하고 프로그램을 실행하면 이제 구축합니다.
우리는 우리의 작은 프롬프트를.
제가 충돌하는 경우 4 - 어 - 어.
아무 인쇄 없습니다. 만사가 잘 끝난 것 같습니다.
우리는 이것을 작성해야 해
우리는 조금 전에 의사의 알고리즘에 대해 얘기.
어디 보자,이 저장
나는 다시 그 알고리즘을 당겨 버릴거야.
의이 사람을 밟아 요. 아뇨.
저기입니다.
우리가 어떻게이 작업을 수행합니까?
어떻게이 코드를 시작하기위한 좋은 전략이 될까요?
당신은 한 가운데에있는 숫자를 선택해야합니다.
우리가 어떻게 배열의 중간에 번호를 선택해야합니까?
방법은?
2로 나누어 [학생] 나 strlen.
나 strlen 2로 나눈 값입니다. 그건 잘 아는 사람입니다.
배열의 특별한 종류 나 strlen 작동합니다.
배열의 어떤 종류가?
문자열 배열, 문자 배열.
그것은 우리가 적용 할 개념의 동일한 종류의입니다
우리가 문자의 배열이 없기 때문에 우리는 나 strlen을 사용할 수 없습니다.
우리는 ints의 배열을 갖추고 있습니다.
그러나 나 strlen 우리를 위해 무엇을합니까?
당신은 우리에게 도착하는지 알아?
[학생] 나 strlen은 우리에게 길이를 얻을 수 있습니다.
그건 정확히 우리에게 길이를 얻을 수 있습니다.
나 strlen 우리를 위해 배열의 길이를 얻을 수 있습니다.
>> 어떻게 우리는 우리의 이진 검색 프로그램에 해당하려면 어떻게해야합니까?
어떻게 배열의 길이를 얻었 을까?
[학생] 나 strlen?
당신은 나 strlen과 적절한 형식이 C 문자열 배열의 길이를 얻을 수 있습니다.
문제는,하지만 우리는 문자열 배열을 가지고 있지 않다는 것입니다.
우리가이 코드를 다시 확인하면, 우리는이 정수 배열을 갖추고 있습니다.
어떻게 우리는 얼마나 오래 알 수 있습니까?
[학생]가 INT 리터 나 뭐 같은 엔드 포인트에 대한 동등한 하나입니까?
실제로 없다 아웃이 변 등 방법으로, 이쪽은
C에 대해 알고 그냥 좋은 것들 중 하나
배열의 길이를 얻을 수있는 방법은 없다는 것을
내가 당신에게 모든 배열 인 경우.
이 문자열에서 작동하는 이유, 그 이유 나 strlen 작품
이 문자열이 제대로 포맷을하면,
그것은 매우 끝 부분에 특별한 \ 0 문자를해야합니다.
>> 당신이 잘못 서식이 지정된 문자열이있는 경우 당신은 또한 상상할 수
어떠한 \ 0 문자가 없습니다 다음, 그 일 전체가 작동하지 않습니다.
[학생]는 당신이 \ 0을 추가 할 수 있습니까?
이 경우 수.
우리는 \ 0 어떤 종류의를 추가 할 수 있습니다
또는 다음 문자를 뜻하고 어떤 종류의가 있다고 사용합니다.
하지만 그게 잘 작동하지 않을거야
\ 0 문자 유형에 있기 때문에
여기 우리는 ints있어.
우리가 특별한 값을 사용한다면 다른 점은
-1과 같은 배열의 끝을 표시하는
그리고 우리는 우리의 정수 배열에 -1을 저장하지 않습니다 수 있습니다.
우리는 붙어 거에요.
그것은 밝혀 그 길이를 얻을 수있는 유일한 방법
C에서 배열의 실제를 기억하는 것입니다
당신은 그걸 설정하고 다음 배열과 주변을 통과 할 때
그래서 나는 일을 할거야 함수가있을 때마다
정수 또는 수레의 배열 또는 두 배 또는 어떤이,
나는 또한,이 함수에게 배열의 길이를 줄 필요가
그리고 우리가 검색 기능에 여기까지 해낸 게 맞아요.
당신은 우리 마을은 우리가 배열에 통과 할 때 우리가 한 일을, 보면
우리는 또한 길이, 크기를 전달합니다.
단지, 우리가이 변수를 호출 한 일이
이 매개 변수 또는 인수입니다.
이것은 함수의 인수 목록이나 매개 변수 목록을 호출
이러한도 인수 또는 매개 변수라고합니다.
사람들은 서로 다른 시간에 서로 다른 용어를 사용합니다.
가끔 그들에게 자신을 교류.
그것은 너무 여기에 변수가 유사라는 것을 어떻게
이 # 여기서 정의합니다.
하지만 그들은 같은 일 아니야.
대문자는 상관하지 않습니다.
>> 여기에 무슨 일을 보면, 우리는 선언
우리가 숫자라고 한 우리 INT 배열.
우리는 우리의가 # 맨 위에 정의하기 위해 해당의 크기를 드렸습니다.
그것은 8거야.
그리고 우리는 다음 아래의 검색 기능을 호출 할 때
우리는 우리가하라는 메시지가되는, 우리가 검색 할 수에 전달
사용자의 잊어 버렸어요.
우리는, 배열이 숫자를 전달
그리고 우리는 또한, 배열의 크기에 통과해야
그리고 크기 8의 값이 저장됩니다
또는이 정수라는 변수 크기로 통과 시켰습니다.
우리는 배열의 크기만큼의 공간을 확보한다.
우리는 우리가 이전에 무슨 말을하는지로 돌아가, 지금 경우
나는 미시 우리가해야할 일을하면 배열의 길이를 얻을이라는 점을 왔다고 생각
2로 나누면, 그리고 우리에게 중간 지점을 제공합니다.
어디 봅시다.
누군가가이 작성하고 자신의 공간에 저장 할 수 있습니까?
어떻게 라일라는?
당신이이 일에 작성 할 수 있습니까?
당신이 배열의 길이를 타고 중간 지점을 어디에서 첫 번째 행을 작성
하고 새 변수에 저장합니다.
내가 몇 초를 제공합니다. 준비 됐어?
[학생 들리게]
물론, 중간 지점을 계산 수
검색 기능 내부의 건초 더미 배열의
건초 더미 배열의 길이를 사용하여 어느 크기 변수?
여기에 까다로운 아무것도.
[라일라] 단 크기 / 2 단지
그리고 그것을 저장하고, 상단에 여기까지 저장 버튼을 누르면
우리는 그걸 당겨 버릴거야.
좋아요.
우리는 간다. 짱이다.
>> 으로,이 컴파일 되나요?
[라일라] 아니, 더 있어야합니다.
[네이트] 그래, 우리가 무엇을해야합니까?
[라일라] INT 중간 지점이나 뭐처럼.
짱이다. 그래, 그게, int는 중간 지점 = 크기가하자.
이 컴파일 되나요?
의이 댓글을 삭제하고 비켜 보자.
이것에 대해 어떻게 컴파일하지 않습니다?
우리는, 정수와 아무 짓도 안하는데
그래서 우리는 그 또는 그런 짓을 인쇄해야합니다.
네, 맞아요.
우리는 사용하지 않는 변수를 얻을 수 있습니다.
다른이에 대해 안 먹힌다?
당신이 샘 무언가를했다 생각합니다. 세미콜론.
그래, 난 그 세미콜론 누락되었습니다.
이 용어의 과정에 걸쳐 일정한 일이 생길거야.
내가 할게 마지막으로 한가지는 내가 양쪽에 일부 공백을 올려 놓으입니다
여기에서이 연산자, 우리가 어떻게 일반적이야 이후
우리의 스타일 가이드에 따라.
우리는 배열의 중간 지점에있어.
우리는 알고리즘으로 기억 지금 경우,
우리가 중간 지점을 한 번 짓을 할 수 밖에 없었던 그 두 번째 단계는 무엇 이었습니까?
[학생]가 더 있으면 [안 들리게].
그래, 우리가 비교 일종의해야하고, 우리가 무엇을 비교하는거야?
당신은보다 큰 경우이다. 를 참조 그 문장에서 그게 뭐야?
그 중간 지점보다 더 큰면 올라 오는 숫자는, 다음 배열에 올라가?
맞아요, 그래서 숫자가 오면 우리​​ -
바늘은, 그래서 우리는 바늘로 비교
우리는 바늘에 대해 무엇을 비교하는거야?
바늘이 우리가 원하는 때문입니다.
우리는 중간 지점에 도착을 비교하고 있습니다.
>> 그러나 확인하는 것이 비참하게
바늘 =의 중간 지점에 있다면?
그게 말이나 돼?
누가 반대합니까?
만약의이에게 해를 줘 보자 (바늘 == 중간).
[학생] printf 당신은 그걸 발견 마십시오.
[네이트] Printf ( "우리는 발견 \ N!");
그렇지 않으면 - 난 여기에 다른 일을 시작하려고.
난 항상 if와 주변에 괄호를 넣어 시작 할거야
왜냐하면 우리는 더 많은 물건을 추가하는 경우
우리는 컴파일러를하지 않습니다.
네, 샘. 당신 말도 일리가있어.
문제는 중간 지점에서 배열의 위치를​​ 나타냅니다 있다는 것입니다
하지만 당신은이 배열의 해당 위치에있는 값을 표현하기 위해 수 있습니다.
그건 좋은 점입니다.
모든 사람들이 샘 말 들었어?
그는 그 중간 지점에있는 그대로 말했다
배열의 단지 위치를 나타냅니다,하지만 배열의 실제 요소 아닙니다.
지금 당장 서면으로 코드에 대해 생각한다면,
우리가 여기이 배열 보면, 그, 그건 8 요소를 가지고
중간 지점이 기능에 놓이게 될 것의 가치는 무엇인가?
[학생] 4.
[네이트] 4.
우리는 4 번에 보면 -
그리고 우리는이 코드를 실행하고 여기에 약간 슬픈 얼굴을 넣을 수 있습니다
우리가이 코드를 실행 IT-하면 우리는 못 찾아서
로가 업로드, 바로 지금이고, 건물은, 저를 아래로 스크롤 해
우리는 숫자 4를 살펴보면,
우리는 찾았는데, 우리는 printf 예이 알아 내지 못 했어.
한 가지 이유는 우리가 TRUE를 반환하지 않은 것입니다,
하지만 우리는 정말 숫자 4를 찾았습니까?
그리고 샘은 말을하지 않습니다.
우리가 뭘 찾았나요?
우리는 정말 우리가 여기까지 배열 보면 중간 지점을 발견
그것은, 우리가보고있는 인덱스 4에 요소 될거야
어느 23입니다.
>> 우리가 어떻게 실제로 중간 지점에서 해당 요소를 어떻게해야합니까
뿐 아니라 중간 지점 자체?
[학생] 우리는 숯불이나 뭐 입력해야합니까?
그냥 궁금해서 묻는 건데, 그게 무슨 소용이지?
당신은 좀 더 말씀해 할 수 있습니까?
당신은 번호로 위치를 변환해야
그래서 당신은해야하는데 몇 가지 연결 -이게 숯불하다고 생각하지만되지 않을 수 있습니다.
네, 좋은 지적이야.
우리는 문자, 이러한 문자로이 변환 순위 많이 해 봤는데
처음 두 문제 세트 인치
여기,이 거의 비슷하다고 밝혀
그 말이 경우, 문자열 내에서 i 번째 문자를 액세스.
여기 우리는 중간 지점 요소를 액세스 할.
어떻게 그렇게 우리합니까?
케빈, 당신은 어떻게 그런 수있는 방법이 있나요?
당신은 건초 더미 할 수있는, 오픈 브래킷, 중간은 브래킷을 마감했다.
당신은 우리를 위해 쓰기 할 수 있습니까?
여기에 저장, 우리는 그 기회를 당겨 버릴거야.
우리는,이 9 호선보고
우리는, 우리는 중간 지점에 바늘을 비교하지 않으려는 인식하고
대신, 우리는 바늘을 비교하려면
우리 건초 더미 배열에서 위치 중간 지점에있는 요소.
좋아.
우리는 간다.
그래, 그게 꽤 잘 하는군, IF (바늘 == 건초 더미 [중간]).
우리가 발견했다.
이제 우리는 조금 업 코드 - 병원을 다시 실행하는 경우
, 그것은 컴파일, 그건 실행, 이제 우리는 4 살펴보면
지금 우리가 실제로 23 번을 받고 있기 때문에 우리는 그것을 찾을 수 없습니다.
우리는 값 23을 받고있어, 우리가 우리의 바늘로 비교하는거야.
하지만 그건 좋아. 그것은 올바른 방향으로 단계입니다.
>> 우리가 뭘 하려는지입니다.
우리는 배열의 위치에 대해 바늘을 비교하려고하지
오히려 배열의 실제 요소에 대한.
우리는 알고리즘의 다음 단계에서 지금 다시 보면,
다음 단계는 무엇인가?
라일라는 이미 짧게 언급.
[학생]는 이동 방법을 결정 후보다 크거나 미만이고 있는지 확인합니다.
[네이트] 그래, 어떻게 그렇게 우리 하죠?
이 버전을 저장 일부 - 내가에 넣을 수 있습니다,
그리고 당신은 그렇게 할 것입니다 몇 줄에 넣어 경우.
네, 샬롯. >> 질문이 있습니다.
우선하기 때문에 1 -가 중간 지점에 있어야하지 않나요
그것은 실제로 우리가 찾고있는 문자 야, 우리는 4 넣어하면, 인덱스 0 거죠?
그래, 다른 문제가 그와 함께 -은
어떤 가능성이 일어나고 결국 것입니다 때문에 대단한 함정
우리가 움직 유지하고있는 경우, 우리가 만약 처음에 조정하지 않습니다?
난 우리가 일을 결국 수 있었는지에 액세스하려는
배열의 8 위치에서 요소
어떤이 경우에 존재하지 않습니다.
우리는 사실을 회계 어떤 종류의 작업을 수행하기를 원할 것입니다
우리는 제로 색인을 의미합니다.
[샬롯] 죄송 해요, 중간 지점 뜻 - 대괄호 1.
우리가 그렇게 할 수 있습니다.
우리는 잠시이 문제에 돌아올거야.
일단 우리가 실제 루핑까지 시작
우리가이 역할을하게 나타납니다 때입니다.
당분간은, 우리는이 작업을 수행 할 수는 있지만 완전히 맞아.
제로 색인을 생성 우리가 설명 할 필요가 효과를 써야합니다.
어디 봅시다.
>> 어떻게보다 더 큰 미만 -?는
[학생] 나는보다 더 큰 적은 부분​​보다 작업을 수행하는 방법을 얻을.
난 그냥 당신이 건초 더미의 중간 지점보다 작거나보다 큰 것을 발견하면 인쇄할지 아니 었습니다.
난 여기 절약 할 수 있습니다 무엇 두었 -
[네이트] 그래, 당신이 당신이 가진 것을 저장하고, 우리는 그것을 올려 드리겠습니다.
우리는 간다.
[학생] 그리고 내가 몰랐 일에 물음표를 넣어.
[네이트] 아주 좋아요.
우리가 아직도 모르는 없기 때문에 우리는 여기 질문 흔적을 찾았어요
우리는 아직 어떻게 할 거냐.
우리는 어떻게 - 죄송합니다, 우리는 몇 가지 괄호 우리의 모든 펑키이있어 할 것입니다.
이러한 치아 교정기를 수정합니다.
우리는 간다.
그래서 우리는, 우리의 알고리즘에 따라 어떻게할까요
우리는 바늘을 찾을 수없는 경우 어떻게해야합니까?
바늘은 우리가보고있는 것보다 더 적은 것을 경우 말해봐. 케빈.
만 왼쪽 이분의 일 봐.
좋아, 그래서 우리는 말합니다 여기에 댓글 올려 놓을 게요 "왼쪽 이분의 일을 봐."
바늘이 중간 지점에있는 건초 더미보다 더 크다면, 우리는 어떻게할까요?
[학생] 그런 다음 오른쪽 절반보세요.
오른쪽 절반을 봐 "오른쪽 절반 봐."
너무 초라한.
좋아, 그럼이 시점에서, 만사가 아주 좋은 찾고 있습니다.
서면으로 코드의 문제는 무엇인가?
[학생] 당신은 절반에 대한 끝점이 없습니다.
네, 우리는 절반에 대한 끝점이 없습니다.
우리는 또한 한 번만를 통해 갈 수 있습니다.
우리는 하나의 중간 지점 보는거야.
어느 요소가있다, 또는 그렇지 않아.
이 완료하기 위해, 우리는 반복 어떤 종류의 작업을 수행해야합니다.
우리는 우리가 발견 할 때까지 계속 같은 말만해야
우리가 좁혀 마지막으로, 그것을 발견하기 때문에 두 요소는 거기에있다
누군가가 거기에 우리는 모든 일을 보았다 한 게 아니니까
배열의 해당 절반 및 아무것도 거기에없는 것으로 나타났습니다.
>> 우리가이 반복이 계속 한 때마다, 우리는 사용하는거야?
[학생] 루프.
루프의 일종. 예.
[학생] 우리는 DO-동안 루프를 수행하고있는 동안 해당 작업을 수행하고이 수
바늘 내가 그와 함께가는 곳에서는 평등 - 난하지 않습니다.
그러나 같은 일이 그렇게 오래가 동일한 값을 해당 사용자 입력하지 않는 한.
그래, 어디 보자, 어떻게 자체를 작성 있을까요?
당신 생각 DO-동안 루프를 사용하게했다.
시작을 어디서하나요?
오른쪽 크기 / 2 후 [학생].
[네이트] 좋아, 우리는 무엇을해야하지?
우리는 나중에 경우에 작성됩니다.
우리는 무엇을 어떻게 할 건데?
[학생] 우리가 경우 부분에있는 모든 물건을 해보고 싶지 않아?
[네이트]이 모든 일을, 좋아.
복사 및 붙여 넣기.
오, 이런.
보자의 경우이 작품을, 우리는 탭이 끝날를 할 수 있는지는.
아름다운.
너희들이 가지고 있도록 그래, 우리는이를 저장합니다.
좋아, 우리는이 작업을 수행하려고하는 동안 -
이 후했다 동안 조건은 무엇입니까?
[학생] 바늘이 동일하지 않지만, 그래서 느낌표처럼.
하지만 그런 일이 아직 정확히 모르겠습니다.
[네이트] 그래, 할 한 방법입니다.
샘, 당신은 코멘트를해야합니까?
[샘] 나는 비디오를 바라 보았다 때 기억,
우리가에 대한 의사 짓을 할 때, 같은 중 하나의 스크린 샷을했다
맥스와 분 사이의 관계가 발생했습니다.
나는 맥스가 분 때보 다 작다면 같은 생각.
알았어요.
[샘] 또는 최대이 그런 분이라도 미만이 아닌 경우처럼,
그건 당신이 모든 검색 한 의미 때문입니다.
>> 그래, 어떻게하면 맥스와 분을 나타내는 것 같은 소리입니까?
변경하려고 [샘] 값이 - 정수
우리는 중간 지점을 넣는에 상대적으로.
그렇지.
[샘] 그 시점에서, 무슨 일이 [안 들리게] 맥스와 분을 계산합니다.거야
중간 지점이 최대 및 최소 생각입니다.
그 사람들을 이해합니까?
우리는 어떻게 우리가이 반복 할 수있는 것을보고 시작한다면,
당신은 우리가 어떻게 - 동안 루프의 어떤 종류를 사용하고자하는 완전히 맞아.
우리가이 배열의 지점에 무슨 일이 일어나고 있는지 기억한다면 내 생각
과 실제로 일어나는 일 - 전 이상 쓸 거에요 - 여기
이진 검색의 최초의 반복에, 우리는이 -
나는 시작을 나타 내기 위해 B와 전자를 사용하는거야.
그리고 우리의 배열의 끝.
우리는 시작이 여기 네 오른쪽 것을 알고
우리는 끝이 108에 것을 알고있다.
우리가 15 번째를 검색하고 말해.
우리가이 일을 처음처럼 우리는 전에 보았던
중간는 16 또는 23이 될 것입니다
우리가 일을 계산하는 방법에 따라 다릅니다.
고르게 중간에 나누어 때문에하는 것은 우리에게이 공간을 줄 거라
16 23 사이에, 우리는 균등하게 나누어 할 수 없습니다
하거나 분할하고 진정한 중간을 얻을 수 있습니다.
우리는 16 보겠습니다.
우리는 "우리가 찾고 야, 16> 15."실현됩니다
다음 배열의 왼쪽 이분의 일를보고
우리가 일을 끝낼 거라고 버리는 것입니다
전체 상단 부분
그리고 "자, 이제 엔드 포인트는 여기에 될 것입니다."라고
우리 루프의 다음 반복, 우리는 지금이 배열보고,
효과적으로 왜냐하면 지금이 부분을 폐기 것으로
우리는 시작과 끝의 차이로 중간 지점을 복용하는 경우,
우리는 우리의 중간 지점 8로 찾기
어떤 우리가 다음 우리가 찾고있는 수에 관계에 위치가 표시 8 테스트 할 수 있습니다,
15, 15 이상이라는 것을 알게
그래서 우리는 목록의 오른쪽 부분으로 이동해야
우리가 인간이고, 우리가 볼 수 있기 때문에있는 우리는 알아요.
우리는 우리가 찾아 어디에서 오른쪽 부분이 될 것입니다 알고
하지만 컴퓨터는 우리가 무슨 짓을할지 우리가 실제로드립니다이며, 알고하지 않습니다
이 가서, 이제 시작과 끝이
동일한 곳이며,, 중간 지점이 지점에서 목록에있는 유일한 번호가됩니다하므로
어떤은 15이며, 우리가 찾았습니다.
즉,이 모든 최대 및 최소 표기법이가는 곳에 대해 설명해 주실 않습니다
파악하기 위해 배열의 끝점 추적을 지키는
일의 범위를 좁힐하는 방법?
>> 이 지금 15 동일하지 않는다면 어떻게 될까요?
우리가 대신 15, 찾고 있다면,이 숫자는 16 계셨습니까?
우리는 오, 더 큰입니다 "라고 대답 하시 겠네요.
우리는 왼쪽으로 돌아 가고 싶어요. "
그리고 우리는, 오른쪽에 우리의 전자를 이동 할
에서 그 시점 우리가 충돌 될 종점을 갖추고 있습니다.
그것은 더 이상 요소를 검색 할 수 없을 것입니다
이제 우리는 우리의 종점과 시작 지점을 가지고 있기 때문에
우리의 최대와 최소, 지금은 뒤집혀 있습니다.
우리는 전체 배열을 통해 검색 할 수 있습니다. 우리는 아무 것도 찾을 수 없습니다.
우리가 좋아요, 우리가이 알고리즘을 중지 할거야 "하고 싶은 말하려는 시점입니다.
우리는 아무것도 발견되지 않았습니다. 우리는 여기에없는 거 알아. "
이 어떻게가는거야?
[학생]는 정확히 어떻게 컴퓨터가 끝을 전환합니까?
어떻게 끝은 시작하기 전에 됐을까?
끝은 시작 전에 종료
때문에 우리가이 작업을 수행 할 때마다 할 수있는 것있는 수학의.
우리가 바꿔 치기 할 방법은 처음 보면 우리가 스왑을 할 수 있습니다
우리는 4에 시작과 끝이있는 곳
모든 108에서 멀리 우리의 중간 지점은 16에서, 말 -
우리가 15를 찾고 15 경우는이 다시 재설정 갈거야
우리는 16를 체크 할 때 우리가 한 짓을 것을 알고 있으며 더 큰 걸보고
그리고 목록의 전체 오른쪽 부분을 삭제하고 싶어
우리는 우리가해야 할 원하는 것은 바로이 전자를 이동 것을 보았다.
효과적으로 전자는 중간 지점 전에 하나에 옮겨 졌어.
마찬가지로, 우리는 알고리즘의 반복을 언제
그리고 중간 지점은, 8에 있었어요
우리는 8 <15, 그래서 우리는 B를 이동하고 싶다고 발견
중간 과거 하나입니다.
자, 시작과 끝이 15에서 함께에 있습니다.
>> 우리는 다른 값이 아닌 15을 찾기 위해 일어난하려면
또는이 15 대신 16 였다면
우리는 전자 우리가 중간 지점 전에 하나를 이동하려는 것으로 나타났습니다 것입니다.
이제 e는 b보다 적은이 뒤집힌 것입니다.
의 우리가 실제로이 알고리즘을 코딩 결국 어떻게 통과 보자.
우리는 우리가이 중간 지점 계산을 할 알아요.
우리는 시작과 배열의 끝을 추적 할 수도 알
현재 배열의 그래서 우리가 알아낼 수
목록의 왼쪽 절반이며, 목록의 오른쪽 절반입니다. 곳
우리는 시작과 끝 중 하나와 함께하는 작업을 수행
또는 우리는 그들을 분, 최대 호출 할 수 있습니다.
이 시간을 시작하고 종료 사용합니다.
우리는 여기 예를 들어 되돌아 보니 우리가 시작하면, 경우,
우리 사업의 시작은 자연으로 배열의 처음으로 설정되었습니다.
어떤 색인이 였죠? 우리 무엇을해야 시작해야하나요?
다니엘.
[다니엘] 건초 더미 [0].
[네이트] 그래, 우리가 모래 사장과 동일을 설정할 수 있습니다 [0].
문제는,하지만이 우리에게 첫 번째 요소의 위치를​​하지 수 있다는 것입니다.
그것은 우리에게 첫 번째 위치에서 첫 번째 요소 또는 실제 값의 색인을 제공합니다.
[학생] 그 0.20로 변환합니까?
[네이트]이게 할 것입니다 것은 - 잘되고, 그 어떤 변환을 수행하지 않습니다.
그런 일이 할 것 것은 그 시작에 4를 저장 것입니다
다음은 시작에 대한 비교하기 위해 최선을 될 것입니다
시작은 4의 값을 개최되기 때문에
이는 우리 배열의 시작입니다
그러나 우리는 배열의 인덱스를 추적 할
같은 값에 반대.
우리는 실제로 그런 식으로, 0을 사용합니다.
배열 샬롯의 끝을 보려면 조금 일찍 올려 가져 왔어.
우리가 계정에 제로 색인을 생성 할게요 곳입니다.
>> 샬롯, 배열의 마지막 뭐죠?
끝의 색인은 무엇입니까?
[샬롯] 크기 - 1.
예, 우리는 어떤 크기를 사용해야합니까?
우리는 자본의 크기 나 소문자 크기를 사용합니까?
자본 크기입니다.
이 경우, 우리는 자본 크기를 사용할 수 있습니다.
우리는이 함수는 휴대용되고 싶어하는 경우
그리고, 다른 프로그램에서이 기능을 사용
우리는 실제로 소문자 크기를 사용할 수 있습니다.
이거 너무 좋아요.
1 -하지만 샬롯은 우리가 크기를하고자하는 완전히 권리입니다.
에서이 시점 -
[학생] 당신이 대문자 크기를 사용할 수있는 방법입니까?
우리가 대문자 크기를 사용할 수 있다는 어떻습니까?
그것은 이러한 # 정의는 것이 밝혀 것은 정말이며,
그 말이 있으면 후드 아래, 같은 텍스트, 찾기 및 바꾸기.
귀하의 코드를 컴파일 전처리 단계
컴파일러의, 파일지나
그리고, 사방 자본 크기를 작성한 찾습니다
그리고 그냥 그렇게 8 문자 그대로 그 텍스트를 대체합니다.
그런 의미에서이 변수에서 매우 다릅니다.
이 메모리에서 공간을 차지하지 않습니다.
이 간단한 텍스트 교체 속임수이다.
이 경우, 우리는 크기를 사용하려고하고 있습니다.
여기에서 우리는 반복 어떤 종류의를 어떻게 처리 할 건가
우리는 우리의 DO-동안 루프와 함께 오른쪽 궤도에있어.
상태가 더 이상 보유하지 않습니다 때까지 우리는 뭔가를하고 싶어요
우리가 이전에 본대로, 우리는 보았다 그 조건
우리가 끝을 원하지 않는 참이었습니다
시작보다 작아야합니다.
>> 이것은 우리의 정지 조건이다.
이 경우, 우리는 같은 중지 선언하고 싶다 "이봐 요, 우리가 아무 것도 발견되지 않았습니다."
이 표현하기 위해, 우리는 루프의 어떤 종류를 사용하고 싶습니다 않습니다.
이 경우는, 루프,하는 동안 루프 DO-잠시 루프는?
우리는 여기서 DO-동안 루프를 갖추고 있습니다.
그 접근 방식 같은 사람 있습니까?
당신은 우리가 다른 접근 방법을 시도해야한다고 생각하십니까?
케빈, 어떤 생각?
우리가 최대 알고 있기 때문에 우리는 잠시 루프를 가질 수
시작 어쨌든의 분보다 더 큰 것입니다.
네, 어떻게해야 더 초기화가 필요가 없습니다.
당신이 뭔가를 초기화해야 할 때 이러한 수행 - 동안 루프가 아주 좋아요
여기를 반면 테스트하기 전에
우리는 모두 시작과 끝을 초기화 유지 할 수 없어 알
루프의 매 라운드.
우리는 우리가 그들을 초기화 할 알고, 그럼 우리의 상태를 확인합니다.
이 경우, 사실은 간단한 동안 루프와 함께 갈거야.
그것은 어떻게 - 동안 루프가 매우 자주 사용되는 밝혀졌다.
장소의 많은도 않는 가르치지도 않는 루프 동안.
그들은 사용자 입력을 처리하기위한 좋은거야, 자, 우리가 지금까지 그 많은 봤습니다.
그러나 일반 및 루프가 훨씬 더 일반적인하는 동안.
그것은이 조건이 같은 서면 것이 밝혀
정말 우리에게 많은 좋은 일을하고, 왜 그래야하지 않습니다?
미안 해요, 난 당신의 이름을 알고하지 않습니다.
난 제리입니다. >> 죄송합니다?
이 B-O-R-U-I입니다.
아, 그래.
내 목록에 표시되지 않습니다.
아, 의미가 있기 때문에 - 아, 그건.
당신은 의도로 동안 루프가 작동하지 않을 수 있습니다 이유에 대한 생각을해야하나요
같은 상태로 작성된?
당신은에 이후 모든 물건을 원하는 것 [제리]는 무슨 뜻 -?
그래, 그 중 하나가 나였 어.
우리는 완전히 사실 동안 루프로이 물건을 모두 넣어해야 할 수도 있습니다.
좀 더 문제가되는 다른 문제는,하지만이 조건이 작동하지 않는 것입니다.
[학생] 당신은 그것을 대칭해야합니다.
오른쪽,이 조건은 이제까지 처음 우리가 얘기하는 방법 사실이 없습니다.
끝 <이 시작 될 때까지 우리는 뭔가를하고 싶어요
하지만 우리는 잠시 뭔가를하길 원한다
≤ 끝을 시작합니다.
>> 논리의 반전이있다.
난 그 실수 모든 시간을 만드는 죄를 저질렀 어.
[학생] 왜보다 작거나 같아야해야합니까?
우리가 가지고있는 경우 당신을 기억 않기 때문에
어디가 하나의 요소는이었고, 우리는 하락했다
우리는 우리의 배열의 단지 15 봤나?
그리고 우리의 시작과 끝은 같은 요소습니다.
우리는 그 사건을 처리하도록해야 할.
우리는보다 직선 적은 짓을했다면,
우리는 2 요소 배열로 내려받을 수 있습니다 것입니다.
일단 우리는 우리의 요소라면, 우리는 그것을 찾을 수 없었어요, 그 마지막 요소에 도착.
당신이 말한 것 같은 지금 여기, 우리는 정확히 할 수 있습니다.
우리는 바로 우리 동안 루프의 중간에 물건을 plopping 시작할 수 있습니다.
우리는 우리의 중간 지점에 털썩 수 있습니다.
문 경우 우리는이 모든 걸릴 수 있습니다
을이 몰라 동안 루프 끌어
에 털썩 그들을
, 약간 그런 짓을 청소
내가 가서이 수정을 저장합니다.
그리고이 시점에서, 우리는 아주 가까이 접근하고 있습니다.
샘.
2분의 1 - 나는 당신이 또한 INT 중간 지점주세요 = 크기가 같아요.
2분의 1 - 그게, 크기, 알았어.
우리가 라인에 대해 변경해야 할 게 있나요?
그건 좋은 지적했다.
>> 크기는 무엇입니까? 우리는 어느 크기를 변경 있습니까?
같은 라인을 유지하기 위해, 우리는 크기를 변경해야합니다.
우리는 크기에게 우리가 루프의 주위에 갈 때마다 변경해야합니다.
그러나 우리가 조금 일찍 예제를 겪고 때 기억
우리는 4시에 시작했다
그리고 마지막 108에서 각국 방법?
우리가 어떻게 중간 지점을 계산 했죠?
우리는 크기를 사용습니까?
아니면 우리가 시작하는 대신 종료를 사용 했지?
그것은 끝과 시작의 차이입니다.
정확히 얼마나 정확히 나는 샬롯을 그 말을 새겨해야하나요?
제발 끝내 - 시작합니다.
1 - 당신은 작업을 수행 할 필요가 없습니다 것입니다
1 월말에 포함되어 있으며 이미 시작되었습니다 -이 때문입니다.
[네이트] 좋아, 당신은 완전히 맞아.
그 때문에 1 - - 1이 포함 된 우리는 할 필요가 없습니다
우리가 최종 변수를 초기화 할 때를 차지했다.
>> 내가이 줄은 이해 할 구문해야 할 게 있나요?
[학생] 플러스. >>를 시작 플러스 시작?
끝에서 학생].
그는 절반 길이를 계산 때문입니다.
당신은 시작를 추가해야합니다.
[네이트]이 우리를 위해 무엇을 계산까요?
우리는 루프의 첫 반복에 말에 대해 생각한다면,
끝 위치 지수 7가 될 것입니다.
시작이 위치 0에 있습니다.
명심 해, 우리가 어느 찾고
위치 3 위치 4.
우리가이 수학을 보면, 그냥 좀 더 확실한 만드는
여기 숫자를 넣어, 우리는, 7, 0이
그래서 7-0 후 / 2
정수 나누기에 3 그입니다.
그럼 우리는 우리의 시작 다시 추가해야하나요?
이 경우에는하지 않습니다.
시작은 0이기 때문에 최초의 반복에, 괜찮을 것입니다.
하지만 진행으로, 우리는 필요한 모든 정말 할
끝 - 시작 / 2.
가 다른 트릭은 여기, 그리고 그 즉 우선 순위 중 하나입니다.
[학생] 우리는 괄호를해야하나요?
[네이트] 맞아요, 우리는 이러한 괄호를 넣어하지 않은 경우 때문이다,
다음이 줄은 대신 해석 될 것이다
(끝) 등 - (시작 / 2), 우리는 확실히 원하지 않는된다.
이러한 우선 순위 규칙을 좀 봐주세요.
[학생] 왜 종료되지 않습니다 + 시작?
왜 종료되지 않습니다 + 시작?
[학생] 왜 않나요?
왜 +겠습니까?
당신이 옳은 것 같아요.
[학생]는 평균이기 때문에?
[네이트] 최종 + 시작, 당신은 완전히 맞아.
와우, 난 정말 쳤어. 당신이 옳아 요.
우리가 마이너스을하고 있다면, 우리는 뼈를 다시 시작을 추가 할 것
이 경우, 우리가 두의 평균을 가져올 매우 맞아요
그래, 저들을 낮출 반대로를 추가 할 않습니다.
[학생]는 당신이 끝을 한 경우 또한 일 것이다 - 시작 / 2 + 시작합니다.
우리가 할 - 난 그렇게 믿을 겠지.
>> 예를 들어, 우리가 시작을 찾고 있던 경우,
우리는 여기로 이동
15.
지금 시작은 2 순위에 있습니다.
최종 위치 7에 있습니다.
우리가 그것들을 뺍 경우 5를.
2로 그렇게 나누어, 우리는이를.
그리고 우리는 2에서 다시 추가
그는 4 위치에 우리를 얻을
바로 여기입니다되는데,이 중간입니다.
[학생] 우리는 포장 처리해야하나요?
어떤 의미에서 우리는 포장 처리해야하나요?
만약 금액을 차이
우리가이 일을하는 방법에 따라도 숫자가 아닙니다.
그런 다음 컴퓨터가 2.5 때인지 혼동됩니다;
당신은 왼쪽이나 중간 지점 인 결정하기 위해 오른쪽으로 이동하려면 어떻게해야합니까?
알았어요.
그것은, 그 정수 나누기로 밝혀
우리는 이런 부동 소수점을받지 않습니다.
우리는 소수를 이해 못해.
그것은 완전히 삭제있어.
당신은 컴퓨터가 두 개의 정수 변수를 나누어있는 경우
그리고, 하나는 7이며, 다른 하나는 2
당신은 결과로 3.5를 얻을 수 없습니다.
호텔은 3을 받게됩니다.
나머지는 폐기 될 것입니다, 그래서 효과적으로입니다 반올림 -
너희들은 수학에 해당 대해 잘 알고있는 경우가 아닌 원형 아니라 바닥,
어디서 완전히 소수점을 버리고
그래서 당신은 기본적으로 가장 가까운에 내려 버리는거야
가장 가까운 정수로 전체 위치.
[학생]이 (가) 당신이 7 요소의 배열이있는 경우 때문에 그런데 그건 문제입니다
해당이 자동으로 대신 4의 중간 지점의 3 요소를 해결합니다.
우리가 어떻게 그 처리합니까?
그것은 문제가있어, 왜냐면 우리는 7의 배열이 있다면,
그 대신 4의 3을 선택합니다.
당신은 좀 더 설명해 주 시겠어요?
[학생] 너 때문에 그 다음 4 요소를 칠 요소가있는 경우
오른쪽 중간 것입니까?
하지만 인덱스 0이에 대해 코멘트를 기억하십시오.
[학생] 그래, 위치 3인치 그 중간이 될 것입니다.
그래.
아, 그래. 난 당신이 무슨 뜻인지 참조하십시오.
우리가이 전체 개념에 익숙해 등 이상 이네요
소수점을 잊어 버리기.
그건 좋은 점입니다.
가이 일을 마저 보자.
우리는 우리의 중간 지점 계산했습니다.
>> 우리는 바늘의 중간 값과 동일 있는지 확인하기 위해 테스트하고 있습니다.
우리는 우리가 그것을 발견 프린트하고 있지만, 정말, 우리는이 상황에서 어떻게할까요?
우리가 발견 한, 우리는 호출자가 우리가 발견되었음을 알려 싶습니다.
우리는 부울 입력 된 기능이에요 함수있어.
우리가 갈 준비하는 우리의 기능의 호출자에게 신호하는 방법
우리는 "야,이 사실입니다."라고되어 있습니다
우리가 어떻게, 케빈 그 짓을 할 수 있나?
당신은 머리를 끄덕하고 있습니다. >> [케빈] 추가 반환 사실.
[네이트] 정확히 사실 반환합니다.
이제 같이 아니라면, 어떻게 우리는 왼쪽 이분의 일 이것 봐라?
어떤 아이디어?
스텔라, 좋은 아이디어 없어?
당신은 끝을위한 새로운 위치를 설정해야합니다.
그래.
끝 - 그래서 우리는 중간 지점의 위치를​​해야합니다.
좋아요.
우리는 마지막에 새로운 위치를 설정해야
왼쪽 이분의 일 볼 수 있습니다.
이것은 우리가 어디에서 전에 얘기 한 것에 대해이었습니다
이 예제로 계속.
나는 여기 시작했습니다 그리고 난 끝이 여기있는 모든 방법을 제공합니다.
>> 우리가 15을 찾는다면 다시, 우리의 중간 지점은 16시입니다
우리는 죄송합니다, 16 크다 "알고 있습니다.
우리는 왼쪽 절반으로 이동하고 싶습니다. "
우리는 다음 15의 끝을 이동 것
우리는 중간 지점에서 하나를 데리고가 그런 짓을
우리의 새 끝으로 그 설정합니다.
우리가 오른쪽 절반보고 싶다면 마찬가지로, 그 방법을 우리 하죠?
당신은 아이디어가 있습니까?
[학생] 당신은 + 1 중간 점을 시작으로 설정합니다.
[네이트] 좋아요.
그리고 지금은 경우에 우리는 아무것도 발견하지 않는 것이
그건 우리에게의 담당을합니까?
다니엘은 우리에게의 처리됩니까?
[다니엘] 번호
[네이트] 우리는 전체 배열을 통과하고 우리가 아무것도 찾을 수없는 경우,
곳을 처리 할 것이다, 또는 우리가 알아서해야하나요?
[다니엘] 동안 조건.
[네이트] 네, 동안 조건, 맞아요.
우리가 아무것도 발견하지 않은 경우는 전체 배열 통과 처리됩니다.
이 동안 루프가 종료됩니다.
우리는이 조건을 발생하지 않았을 것입니다
우리는 False를 반환 할 수 있습니다.
우리는 또한 다음과 같이 여기에이 경우 남길 수 있습니다
이 문장은 사실 경우에 때문에,
우리의 기능은, 반환
그래서 우리는이 시점에서 중단이 기능이 기본적으로드립니다
우리는 TRUE를 반환합니다.
그런데이 구조와 여기에 어떻게됩니까?
이 완전히 작동, 또는 거기에 어떤 논리적 결함이됩니까?
>> 거기에 어떤 논리적 결함이 설정되어있는 방법이 있습니다.
그것은 무엇을 할 수 있을까요?
[학생] 당신은 왜 필요한가요 -와 + 1 초?
그래서 우리의 새로운 왼쪽 반 오른쪽 절반으로 우리의 배열을 설정합니다.
[학생]하지만 이유가없이 할 수 없습니다 - 1S와 + 1 초?
[네이트] 우리는 중간 지점에 동등한를 설정할 수 있습니다?
어떻게 그것에 대해 문제가있을 수 있을까요?
[학생] 난 당신이 이미 선택 된 값을 확인 때문이 비효율적 인 것 같아요.
[네이트] 정확히 그래, 그러니 샘 완전히 권리입니다.
당신은 끝을 설정하고이 중간 지점에 동등한 시작하면
대신 - 1 reflectively + 1,
미래의 어떤 시점에서 우리는 다시 중간 지점을 확인하게 될 겁니다.
[학생] 내가 내가 그런 일을 저질렀다 다음 pset를 시작하고,
어디 + 1을 깜빡하고, 그 무한 루프에 갇혀 있어요.
네, 어떤 점에서 때문에 시작과 끝받을 수 없다는
실제로 겹쳐합니다.
좋아.
가 하나 더 논리적 결함, 그리고이 확실히 있어야합니다
다른 경우.
왜있을 수 있을까요?
>> - 않은 경우에는 당신이 케빈을 볼이 다른이 아니라면 그 이유는?
[케빈] 그래요, 당신이 끝 지점을 변경하는 때문입니다.
[네이트] 그렇지.
우리는 종점을 변경하고
그리고이 - 우린 같은 기록되는 경우는 사이 - 공간을
는이 사건을 검사합니다.
이 성공한다면이 사건은, 함수의 중단을 것이다.
그런 다음, 다음 사건을 검사합니다
이 성공한다면, 그것은 끝점을 조정합니다
다음은 계속 진행하여이 사건을 검사합니다.
그러나이 시점에서, 우리는 검사 계속 싶지 않아.
다행히, 우리는 여기에 중간 지점을 다시 설정하지 않은
우리는이 사건이 성공하지 않습니다 알아요.
하지만 우리는 확실히 다른를 표시 할 것인지 거기에 경우
심지어 그 수도 -이 경우
우리는 중간 지점을 조정하지 때문에, 그 차이를 느끼게 되죠?
아니, 있기 때문에 이런 경우는 배타적입니다.
다시 말하지만, 미안하게됐다.
우리는, 내 생각이 다른이 경우에는 필요하지 않습니다.
우리는 그것을 시도하고 실행하고 어떻게 볼을 제공 할 수 있습니다.
건물 오류가 발생했습니다.
여기에서 이러한 침대, 전자의를 떠난 때문에 때문일 수 있습니다.
나는 상단에있는 최대 더 이상이 있습니까?
그렇게 보이지 않습니다.
우리는 축소 구축
거기에가는, 그래서 지금 우리는 15를 검색하는 경우
예.
나 확대하자
15 네. 우리는 다시 실행할 수 있습니다.
, 소스 코드를 업로드 구축 실행할 수 있습니다.
우리는 13 살 무언가를 검색 할 수 있습니다
우리는 출력 무슨 일이 있으므로 된게 아니 못 우리 그.
이 목록에없는이기 때문에 즉, 잘 됐네.
>> 우리는 시간이 지금입니다.
그게 이번 주를 위해거야.
가입하고 나중에 참조 주셔서 감사합니다.
>> [CS50.TV]