[Powered by Google Translate] [제 4] [이하 편안한] [네이트 Hardison] [하버드 대학] [이 CS50 수 있습니다.] [CS50.TV] 좋아, 섹션으로 환영합니다. 이번 주 섹션에서 우리는 몇 가지 할 수있는 것. 우리는 먼저 뉴스 레터를 살펴 문제점 세트 2가는거야 시저와 Vigenère 문제 세트하는 것입니다. 그리고 우리는 퀴즈 0 리뷰에 뛰어들 것 우리가 얘기 한 내용 recapping 시간이 조금 지출 강의의 각에있어서, 우리는 또한 몇 가지 문제를 할거야 전년도 퀴즈에서. 그 너희들이 그 일에 대한 준비를 할 수있는 좋은 방법이 방법입니다. 시작하려면, 좋은 솔루션의 몇 부팅 한 이전 문제 집합에 대해, 문제는이 공간으로, 2를 설정합니다. 모두들이 링크를 누르면 경우 그리고 당신은 내 이름을 클릭하고 첫 번째 수정을 클릭하면 당신은 내가보고있는 일입니다 caesar.c를 볼 수 있습니다. 진짜로 빨리 이것에 대해 얘기합시다. 이건 그냥 샘플 솔루션입니다. 이 완벽한 솔루션을 필요는 없습니다. 이 작성하는 방법에는 여러 가지가 있습니다 하지만 강조하고 싶어하는 몇 가지 방법이 있습니다 내가 생각하는 내가 등급 않았을 본 일반적인 실수 이 솔루션은 취급 매우 좋은 일을하지 않습니다. 첫 번째는 상단에 헤더 주석 어떤 종류의 문제가 있습니다. 1 호선 7을 통해 당신은 자세한 내용을 참조하십시오 이 프로그램은 정확히 무엇을하고있다. 당신이 C 코드를 작성하는 좋은 표준 연습 프로그램은 하나의 파일이나 포함되어 관계없이 경우 이 여러 개의 파일을 통해 분할 여부에 어떤 종류의 것입니다 상단에있는 코멘트를 오리엔테이션. 이 밖에 나가서 현실 세계의 코드를 작성 사람들도 있습니다. 그들은 저작권 정보를 올려 놓으 곳입니다. 다음은 # 포함입니다. 선 16 일이 # 우리가 약간에 돌아 오면하는 정의가 있습니다. 그리고 일단 기능은, 한 번 주 시작을 시작합니다 이 프로그램은 모두 하나의 함수에 포함 되었기 때문에 일어이 매우 관용과 C 프로그램의 전형적인 매우 먼저 할 일은 명령 줄에 소요 그게 바로 확인하는 인자 -입니다 인자 개수를 들어, argc. 바로 여기서 우리는이 프로그램이 정확히 두 인수를 기대하고 있습니다 것을 볼 수 있습니다. 기억 특별한 하나 첫 번째 인수는이 즉, 항상 실행되고있는 프로그램의 이름입니다 실행 파일의 이름입니다. 그리고이 무엇을이 프로그램을 실행 한 사용자를 방지합니다 더 많거나 적게 인수. 우리가 당장 확인하려는 이유는 우리가 실제로 여기에 안정적이 argv 배열에 액세스 할 수 없습니다 우리는 얼마나 큰 알아보지까지. 내가 본 일반적인 오류 중 하나는 사람들이 즉시 가고 싶니 그리고 손잡이 변수는 argv [1]. 그들은 밖으로 배열의 키 인수를 가져했고, 난 그 확인하려면 어떻게 그리고 그들은뿐만 아니라 다음 시험으로 argc에 대한 테스트를 할 첫 번째 인자는 실제로 동시에 정수했습니다 여부 그리고 그게 공급 아무런 인수가없는 경우에 있기 때문에 작동하지 않습니다 당신은 없다 인수를 쥐어하거나 없다 하나를 잡기 위해 시도됩니다. 당신이주의해야하는 또 다른 큰 것은, 항상 도움이 오류 메시지가 어떤 종류의를 인쇄 할 방향 그들에게 사용자가 있습니다. 당신이 갑자기 그것이 충돌 모든 실행 프로그램을 것 같군 당신은 팝업과 같이 말한다이 말도 안되는 대화 상자를 어쩌면 끔찍하게 암호화 뭔가를 당신에게 오류 코드 또는 그런 일을 할 수 있습니다 그건 의미가 없습니다. 당신이 정말로 도움이 무언가를 제공 할 곳입니다 그리고 그들이 실행할 때 사람들이 "오,"얼굴 손바닥 갈 수 있도록 사용자를 타겟으로. "내가 어떻게해야 정확히 알아. 나는이 문제를 해결하는 방법을 알고." 메시지를 인쇄하지 않는 경우 다음 실제로 결국 사용자가 이동 떠나는하면 소스 코드를 검토 문제가있는 건지 알아 봅시다합니다. 당신은 다른 오류 코드를 사용하는 일부 시간도 있습니다. 여기 방금 오류가 발생했습니다 말 하나를 사용 오류가 발생했습니다, 오류가 발생했습니다. 큰 프로그램, 다른 프로그램에 의해 호출됩니다 종종 프로그램, 다른 경우에 특별한 오류 코드의 일종을 반환합니다 프로그래밍 방식으로 의사 소통을하는 당신이 달리 겠어 단지에 대한 좋은 영어 메시지를 사용합니다. 좋아. 우리가 아래 일 때, 우리가 열쇠를 뽑아 볼 수 있습니다. 우리는 키가 맞는 있는지 확인하기 위해 테스트합니다. 우리는 사용자로부터 메시지가 나타납니다. 이 우리가 커버하는 걸과 루프 반면 우리가이 일에 할 이유는 어떻게 약간의 비트하지만 판명 당신이 컨트롤 D를 입력하면 당신은 터미널에서 해당 GetString 프롬프트 때 실제로 무엇을은 특수 문자를 전송합니다 프로그램. 그것은 ELF 나 파일 문자의 끝이라고. 그리고이 경우에, 우리의 메시지 문자열이 null이됩니다 그래서 우리가 자체 설정 문제에 대해 검사 무언가 아니 었습니다. 우리가 계속해서 그러나, 이제 우리는 포인터에 대해 이야기하기 시작 한 힙에와 동적 메모리 할당, 혹시 네가 함수가있을 때마다 널 (null)을 확인 값이 무슨 짓을하는 습관에 휘말리고 싶지 볼만한 물건이기 때문에 null을 반환합니다. 이는 주로 설명을 보려면 여기를합니다. 하지만 당신은 미래에 GetString를 볼 때, 그러니 4 설정 문제에서, 당신은 마음이를 유지하는 것이 좋습니다. 다시, 우리가 아직 적용하지 않았으므로 중 3 설정 문제에 대한 문제가 아닙니다. 마지막으로, 우리는 우리가 주 암호화 루프까지이 부분에 도착 여기 무슨 일 몇 가지가 있습니다. 첫째, 우리는 전체 메시지 문자열 자체를 통해 반복. 여기 우리는 상태 나 strlen 전화를 유지 한 하는 당신의 숫자가 지적한 갈 수있는 좋은 방법이 아닙니다. 그것은, 또한 좋은 건 아니야이 경우에서 변 우리는 메시지 자체의 내용을 수정하고 부분적으로 있기 때문에 내부 루프, 우리는 10 자 길이의 메시지가있는 경우 처음으로 우리는 루프 나 strlen 무슨 일을 반환합니다 그렇게 할? 10. 하지만 우리가 다음 메시지를 수정하는 경우, 우리는 다섯째 문자를 수정 말 우리는, 5 위치에 \ 0 문자에 던져 다음 반복에 나 strlen (메시지)는 무슨 짓을 반환하지 않습니다 우리는 반복 처음으로, 우리가 널 (null) 종료에 던져 있기 때문에하지만 대신 5를 반환합니다 그리고 문자열의 길이가 정의됩니다 그 \ 0의 위치로. 이 경우, 우리가 장소에 수정 있기 때문에 갈 수있는 좋은 방법입니다. 그러나이 암호화 실제로 의외로 간단 것을 알 당신이 계산이 맞다 얻을 할 수 있습니다. 필요한 그 모든 당신이보고있는 여부 편지를 확인하는 것입니다 대문자 또는 소문자입니다. 우리는 그 일에 대한 확인해야하고 우리가 확인하지 않아도 이유 이 알파 케이스 때문입니다 문자가 대문자 또는 경우 경우는 소문자입니다 다음은 확실히 알파벳 문자입니다 우리는 대문자와 소문자 숫자가 없기 때문입니다. 우리가 할 - 게다가이 조금 있습니다 까다로운- 우리는 표준 황제 암호화 방식을 수정 한입니다 우리는 문제 세트 사양에 준. 여기서 다른 것은 우리가 차감 것입니다 대문자의 경우 수도에 A, 그리고 나서 우리는 자본을 추가 마지막에 백업합니다. 난 당신이 몇 가지가 코드에서이 작업을 완료 한 후 알아요. 너희가 제출이 짓을 한거야? 당신이 한 짓. 당신은이 무엇을 Sahb를 설명 할 수 있습니까? 당신이 바로 후 모드 짓을하기 때문에 이것 좀 빼는 방법으로 당신은, 당신이 위치 [기침]을 얻을 있도록 방법을 그것을 꺼내해야합니다. 그리고 나중에 다시 추가하여 당신이 원하는 하나 이상의 바뀌었다. 네, 맞아요. Sahb는이라고 뭐 우리는 추가 할 때 우리의 메시지와 함께 우리의 주요 그리고 MOD, 그 MOD 그 NUM_LETTERS하여, 먼저 해당 0-25 범위에 우리의 메시지를 확장하지 않을 경우, 그러면 우리는 정말 이상한 번호를 치울 수 있습니다 때문에 우리가 메시지를 [I]을 보면보고있는 가치 우리는 일반 텍스트 메시지의 i 번째 문자를 볼 때, 값이 65-122 범위에 어디 선가 소문자 Z까지 대문자의 ASCII 값을 기준으로. 그래서 우리는, 26 또는 NUM_LETTERS하여이 항목을 MOD 때 그 때부터 우리 # 여기까지 오른쪽 상단에 정의 그런 우리에게 0-25 범위에 값을 포기할 것, 그리고 우리는 그 백업 확장 할 수있는 방법이 필요합니다 하고 해당 ASCII 범위에서 얻을. 할 수있는 가장 쉬운 방법은 모든을 확장하는 것입니다 0-25 범위에있는 시작합니다 그리고 마지막에 다시 모든 걸 바꿔 주죠. 난 사람들이로 실행 본 또 다른 일반적인 오류는 있습니다 당신은 실제로 바로이 확장을하지 않는 경우 그리고, 말해 봐요, 당신은 함께 메시지와 키를 추가하고 당신이 그들을 추가 그와 숯불 변수로, 문제 is 메일을 보낸 이후로 [I] 시작은 비교적 큰 숫자입니다와 - 이 대문자하다면 적어도 65 일을 기억 문자 당신은 큰 키, 말, 100과 같이, 경우 그리고 당신이 오버플로를받을거야 서명 숯불로 함께 지난 2를 추가합니다. 당신은 127보다 큰이에요 값을받을거야 이는 숯불 변수가 보유 할 수있는 최대 값입니다. 당신이 시작 뭐 그런 짓을 할만한 이유를 다시보기 때문이다. 어떤 사람들은 경우 다른 일을하고 테스트하여이 경우 주위에 이 오버 플로우 올라가더라도 그 일을하기 전에 확인하려면, 하지만이 방법은 그 주위를 가져옵니다. 그리고이 솔루션에서 우리는 매우 끝 부분에 전체 문자열을 출력한다. 다른 사람들은 한 번에 문자를 출력한다. 모두 굉장합니다. 이 시점에서, 어떤 질문이 이것에 대해 어떤 의견을합니까? 원하는 일, 당신이 마음에 안 가지? 질문이 있었다. 아마 당신의 설명을하는 동안 그것을 그리워하지만,이 프로그램은 어떻게하나요 텍스트의 길이로 키를 연결하기위한 공간을 건너 뛰? 이것은 단지 황제 암호입니다. >> 아, 미안, 그래. 네, 우리가 그렇게를 볼 수 있습니다. 시저 암호에서 우리는 그 주위에 가지고 있으니까 우리는 문자를 뒤집어 졌죠. 사람들이 대문자 또는 소문자라면 우리는 그들을 회전. 당신들은 이것에 대해 아주 좋아요? 이 집에 복사 해 주시기 바랍니다, 가져 너희들이 쓴 비교. 물론 너무 그것에 대해 질문을 보내 주시기 바랍니다. 또, 문제가있는 이곳 목표 설정 걸 깨닫게 너희들이 문제 세트에 완벽한 코드를 작성하도록 유도하지 않습니다. 이 학습 경험입니다. 그래. 위로하려면 루프가 동일하면 null을하는 동안, 그래서 널 그냥 아무 의미도없는, 그냥 입력을 때렸어요? 널은 특별한 포인터 값 우리가 말을 할 때 우리는 널 (null)을 사용하여 우리는 아무것도를 가리키는 포인터 변수가 있습니다. 그리고 일반적으로 의미이 변수이 메시지 변수 우리가 CS50 특별한 문자열 형식을 사용하기 때문에, 빈, 그리고 여기에, CS50 문자열 유형은 무엇입니까? 그게 다윗이 강의에서 후드를 다시 꺼냈다 때인지 본 적이 있나요? 이 펑키 - 그건 포인터이야, 그렇죠? 그래, 좋아. >>이 숯불 *입니다. 그리고 정말 우리는이를 대체 할 수 여기에 숯불 * 메시지와 함께, 그래서 GetString 함수가 성공적으로 사용자의 문자열을하지 않으면은, 이 문자열을 구문 분석 할 수 있으며, 하나의 사건하는이 문자열을 구문 분석 할 수 없습니다 있는 사용자가 유형의 파일 문자, 제어 D,의 끝을 경우 어떤은 일반적 게 아니에요하지만, 그런 일이 일어날 경우 다음 함수는 말하는 방법으로이 null 값을 반환합니다 "이봐, 난 문자열을받지 못 했어." 우리가 메시지를 = null이 넣어하지 않으면 어떻게, 무슨 일이 일어날 아직 일하지 않은 무언가가 뭔가요? 왜 여기에 문제가 될까요? 나는 우리가 메모리 누수에 대한 강의에서 잠시 얘기를 알고 때문입니다. 네, 그런 짓을의하자, 그리고 어떻게 된건 지 확인합시다. 바질의 질문은 우리가 실제로이없는 경우 어떤 일이 벌어지는 지했습니다 이 메시지가 = null을 테스트? 맨 위로 스크롤 보자. 당신들은이 일을 댓글을 달 수 있습니다. 사실, 개정에 저장됩니다. 이 일 월요일 수정 3 될 것입니다. 당신이 프로그램을 실행하려면 어떻게해야하면, 당신이 여기이 톱니 바퀴 아이콘을 클릭 할 것 같습니다 그리고 당신은에 인수를 추가해야합니다. 우리가 명령 줄 인수를 전달하고자부터 당신은 열쇠 인수를 제공해야합니다. 난 여기 그에게 3 번을 주겠어. 나는 3 좋아해요. 이제 다시 축소 프로그램을 실행할 수 있습니다. 그것은 건축, 컴파일, 실행있어. 여기 우리는 간다. 이 메시지가 기다리고있어. 내 안부 - 어디에 뭔가를 입력하면 그가요? 오, 내 프로그램이 실행하는 데 시간이 너무 오래 걸립니다. 내가 너무 오래 우리 한테 조롱했다. 여기갑니다. 지금은 인사에 입력합니다. 우리는 적절하게 암호화 것을 볼 수 있습니다. 우리가 널 (null)을 반환하는 프롬프트 GetString을 수행하면 이제 어떻게됩니까? 명심 해, 우리가 그랬던 말했다 동시에 제어 D를 눌러. 여기까지 스크롤합니다. 우리는 다시 실행합니다. 건물. 자, 일 났네. 지금은 컨트롤 D를 쳤을 때 나는 opt/sandbox50/bin/run.sh 말합니다이 라인 세그먼트 오류를​​ 가지고. 너희들은 그 전에 본 적이 있나요? [학생] 왜 노 >> 죄송 있나요? [학생] 왜이 사건에 핵심 덤프가 없습니다? 코어 덤프는 - 질문은 여기있는 이유가 없음 코어 덤프입니다? 질문이있을 수 있지만 핵심 덤프 파일입니다 그는 하드 드라이브에 저장됩니다. 이 경우 우리는 핵심 덤프 기능을 사용 중지 한 실행 서버에 있도록 우리는 사람들이 오류있는 독방 감금하지 않습니다 및 핵심 덤프의 톤을 구축. 하지만 당신이 하나를 얻을 수 있습니다. 코어 덤프, 당신이 자주 사용 중지 할 수있는 것들 아르 그리고 가끔은 자신이 할. 분류 오류, 질문에 대한 답변을하기 위해, 바질, 우리가 포인터를 액세스하려 답니다 그 어떤 것도 가리 키도록 설정되지 않았습니다. 빙키가하려고 할 때 비디오에 빙키 기억 아무를 가리키는되지 않은 포인터를 액세스 갈까? 이 경우 필자는 기술적으로 포인터가 뭔가를 가리키는 같아요. 그것은 기술적으로 0 0,,를 가리키고있어 하지만이 접근 할 수없는 세그먼트에 있어야 정의 프로그램에 의해, 그래서 당신은 분류 오류를 당신이 메모리에 액세스하지 않았기 때문에 올바른 세그먼트에 힙 세그먼트 또는 스택 세그먼트 또는 데이터 세그먼트처럼. 좋아. 시저에 대한 질문 더 있습니까? 의는 이동하세요. 정말 신속하게 일 월요일 수정이를 살펴 보자. 그 Vigenère입니다. 여기 Vigenère의 우리는 다시 왜냐하면 너무 빨리 이걸 통과합니다 Vigenère와 황제는 매우 비슷합니다. 헤더 댓글이 전에이며, 이 마법의 숫자를 사용하지 않도록하기 전에 # 정의입니다. 좋은 점은 우리가 이동하고 싶어 떠는 것 뿐이 그와 같은 다른 글자 나 뭐. 오히려 모든 26의 코드를 변경 수동으로 이동하지보다 우리는 27으로 변경하거나 드롭 다운 수 우리는 서로 다른 알파벳, 서로 다른 언어를 사용하는 경우. 다시 말하지만, 우리는 인자 개수의 검사를 해 와 정말 거의 템플릿으로이 소요될 수 있습니다. 당신이 쓰는 거의 모든 프로그램이이 -해야 라인은 명령 줄 소요하는 경우 인수를 일부 순서 그건 처음에이 같은 읽습니다. 그건 니가 원하는 첫 번째 정신 테스트 중 하나입니다. 여기에 우리는 우리가 확실되었다 셨나요? 키워드는 유효하고, 우리가했던 것을 두 번째 확인했습니다. 우리는 argc와 2에서이 분리되는 다시 확인합니다. 이 경우에 우리가 이렇게해서 하나가했습니다 대신합니다 내가에를 사용하는 우리는 전체 문자열의 유효성을 검사하고 싶어 과 질서에 실제로 문자로 문자를 가야하는 질문 문자열여. 거기에 무언가를 전화 할 좋은 방법은 없습니다 심지어 예를 들어,해서 0을 반환 때문에 이 정수를 구문 분석 할 수없는 경우에도 작동하지 않도록. 다시 말하지만, 정확하게 사용자가 말하는 좋은 메시지가 무슨 일이 있었는지. 그럼 여기서 다시, 우리는 또한이 사건을 처리 곳 제어 D 무작위 문자의 사용자 유형입니다. 그리고 샬롯 우리는 공간을 건너 뛰려면 관리하는 방법에 대해 질문 이전했습니다 여기 문자열 인치 이것은 우리가 마이 스페이스 프로그램 무슨 짓을했는지와 유사한 가지였다 우리는 섹션에서 한,이 방법은 작동하는 우리가 본 적이 문자의 수를 추적한다는 것입니다. 우리가 문자로 문자를 통해 걸어으로 우리는, 메시지 문자열을 통해 걸어 우리는 루프에 대한의 일환으로 인덱스를 추적하고 우리는 또한 추적 글자 수 있으므로 비 특수 문자, 비 숫자, 비 공백 우리는 별도의 변수에 본 적이있다. 그리고이 솔루션은 키를 수정 실제 key 정수를 받고, 그 즉시 해당을 수행하기 위해, 그런 다음 실제 메시지 문자를 암호화하는가는 바로 전에. 너무 완벽하게 잘 했어 몇 가지 해결책이 있습니다 키의 유효성에 대해 테스트 할 때 그 키를 수정합니다. 확인하는 외에 그 성격과 키워드 알파벳 문자는 또한 정수로되었을 0-25 범위에서 다음 루프에이 일에에 해당 나중에 수행 할 필요가 건너 뛰합니다. 다시,이 정말 동일한 코드입니다 여기를 클릭하십시오 우리는이 시점에서 황제에 사용되는. 당신은 동일한 일을하고있어, 실제 트릭은 알아 냈어 될 수 있도록 정수에 키워드를 설정하는 방법. 한가지 우리가 여기서 한 것을 작은 조밀입니다 우리가이 구문을 반복입니다, 난 당신이 전화를 할 수 있죠 라인 58, 59, 61 3 차례에 걸쳐. 누군가가 정확히이 문구가 무슨 일을하는지 설명 할 수 있습니까? 당신이 말한 것처럼 캐릭터에 액세스있어. 그래,, 키워드에있는 [안 들리게] 캐릭터 만 함께 이동하기 때문에 때문에 본 글자의 수입니다 당신이 편지를 본 후 키워드 효율적으로 공간과 그 일을 건너 겁니다. 네, 맞아요. 당신이 근처에 다시 이동하도록 그리고 일단 당신이 지금 MOD 키워드를 비워 봤어요. 그렇지. 그건 완벽한 설명입니다. 어떤 케빈 말은 우리가 키워드로 색인을 생성하려는 것입니다. 당신이 가만히 있으면 우리는, num_letters_seen 문자 받기를 원하는 하지만 num_letters_seen는 키워드의 길이를 초과 할 경우, 우리가 적절한 범위에 다시 방법은 우리가 모듈로 연산자를 사용합니다 효과적으로 주변에 줄 바꿈합니다. 예를 들어, 짧은에서처럼, 우리의 키워드, 베이컨입니다 그리고 5 글자 길이입니다. 그러나 우리는이 시점에서 우리 일반 텍스트로 6 글자를 본 적이 6 암호화. 우리는 num_letters_seen에 액세스 끝장 날 것이다 어떤은 키워드의 모드 길이, 5, 6입니다 그래서 우리는 우리가 할 일은 우리가집니다하므로 1을 받고,됩니다 그 시점에서 Google의 키워드의 첫 문자 내부에 액세스 할 수 있습니다. 좋아, Vigenère에 대한 질문 우리는 넘어 가기 전에? 당신들은 이것에 대해 아주 좋아요? 좋아요, 좋아. 나는 너희들이 코드를 볼 수있는 기회가 발생했는지 확인하려면 우리는 좋아 보인다고 생각하고 배울 수있는 기회를 갖고 있습니다. 이것은 우리가, 당분간 공백을 사용할 것입니다 마지막이 될 것입니다 우리는 지금 전환에 갈거야, 난 cs50.net/lectures에 가고 그래서 우리는 퀴즈 검토 약간의 작업을 수행 할 수 있습니다. 제가 퀴즈 검토를 시작하기 위해 생각하는 가장 좋은 방법 이 강좌 페이지에 와서하고, cs50.net/lectures, 이번 주 제목의 각 아래에, 그래서 제가, 주 0 여기 보면 나는 우리가 우리가 주 0에 적용되는 주제 목록을하신 것으로 알고 있습니다. 이러한 주제의 당신에게 익숙하지 않은 보인다면 당신은 확실히 강의 노트와 가능 돌아 가서 샅 샅히 뒤져하는 것이 좋습니다 당신이 원하는 경우에도 강의를 통해 탈지, 다시보기 해당 주제의 각에게 무슨 일이 일에 대한 느낌을 얻을 수 있습니다. 나는 또한 우리가 확보 한 멋진 자원의 올해 하나를 말할 것이다 우리가 만든이 반바지입니다, 당신은 주 0 살펴보면, 우리는 커버 주제를 모두 없지만, 우리는 그중에 몇 있어요 까다들 중 일부는, 그래서이 반바지를 보며 속도를 당신을 얻을 수있는 좋은 방법이 될 것입니다. 특히, 내가 그 짓을하기 때문에 하단에있는 3 플러그인에 넣어거야. 하지만 당신은 바이너리로 어려움을 겪고있는 경우, 비트, 마법, 그런, 이진 시작 수있는 훌륭한 장소입니다. ASCII도 볼 좋은 또 다른 하나입니다. 내가 너무 느린거야 경우에도 1.5x 속도로 저를 볼 수 있습니다. 그건 검토 한 이후, 그렇게 해 주시기 바랍니다. 정말 신속하게 시작하기 위해, 우리는이 퀴즈 문제의 몇 통과 할거야 빨리 만이 통과 쳔합니다. 예를 들어, 내가 보드에 바로 여기 한 문제를 16 살펴 보도록하겠습니다. 우리는 이진이 다음과 같은 계산이있어 우리는 어떤 작품을 보여주고 싶어. 좋아, 난이에게 기회를 주겠어. 당신들은, 종​​이와 함께 따라야한다 그리고 우리는 신속하게이 작업을 수행합니다. 우리는 바이너리에 다음과 같은 계산을 수행 할. 나는 00,110,010있어. 그리고 내가 00,110,010에 추가 할거야. 수학를 들어, 집에서 따라 다음과 같은 천재 이 효과적으로 2로 곱한 수 있습니다. 의 시작하자. 우리가해야 할 것과 같은 추가 알고리즘을 따릅 우리가 함께 십진수 숫자를 추가 할 때. 진짜 유일한 차이는 우리가 루프 다시 주변을 그 일단 1 할 + 1 대신 일단 10까지 있습니다. 우리가 정말 신속하게, 오른쪽에서 시작되는 경우, 첫 번째 숫자 야? [학생] 0. >> [네이트 H.] 0. 좋아요, 두 번째 숫자? [학생] 1. [네이트 H.]는 1인가? 1 + 1은? [학생] 10. [네이트 H.] 맞아, 난 함께 추가 2 사람 아래 오른쪽 작성하는 자리 뭐? [학생] 1, 0, 또는 0 한 다음 1을 수행합니다. [네이트 H.] 0과 정확히, 1을 가지고 다니십시오. 다음의 최대, 바질, 당신은 차례 다. 세 번째는 무엇입니까? >> [바질] 1. [네이트 H.] 1, 좋아요. 케빈? [케빈] 0. >> [네이트 H.] 0, 샬롯? [샬롯] 0. >> [네이트 H. 그래, 내가 어떻게해야 하죠? [학생] 1. [네이트 H.] 내가 어떻게해야 하죠? 그리고 나서 한을 가지고 다니십시오. 완벽한 Sahb? >> [Sahb] 이제 1을 갖추고 있습니다. [네이트 H.] 그리고 난 여기 아무 일이나해야하나요? [Sahb] 그런 다음 1 이월 때문에 1이 다음 하나. [네이트 H.] 좋아, 그래서 여기에 우리가 마무리 할 수​​ 있습니다. 좋아. [학생] 0 + 0 = 0 있습니까? 0 + 0 = 0. 1 + 1, 네가 말한 것처럼, 0 10, 또는 1이 아니라. 10 나에게 10 숫자 10을 의미하기 때문에 그릇된 명칭이며, 그리고 우리가 그것을 쓸 때 우리가 그것을 대표하는 방법의 차이 일 뿐이죠. 우리는 1, 0으로 숫자 2를 대표하고, 숫자 10은 조금씩 다를 수 있습니다. 바이너리에 대한 좋은 종류의은 무엇입니까 정말 많은가 없습니다 것입니다 당신이 배워야 가지 경우. 0 + 0 = 0, 0 + 1 = 1가 있어요 1 + 1은 0이며, 다음 1을 가지고 그리고 당신은 오른쪽에서 세 번째 열에서 현재 볼 수 있습니다 우리는이 1, 1, 1했다. 그리고 1 + 1 + 1은 1입니다 그리고 당신은 다른 일을 가지고 다니십시오. 당신은 바이너리 또한 일을 할 때, 아주 간단합니다. 나는 정신이 스스로를 확인하려면 다음의 몇 가지 작업을 수행 할 당신은이 때문에 들어가기 전에 아마도 우리가 퀴즈에 표시됩니다 것을. 지금뿐만 아니라이 다음 하나를 수행 까. 문제 17를하자. 우리는 10 진수로 다음과 같은 이진 숫자로 변환거야. 나는 10100111001있어. 제가했던 이진 비디오에 기억 나는 예를 몇으로 걸어, 그리고 내가 어떻게 보여 당신은 십진수에서 일을 할 때 모든 작동합니다. 당신은 소수점 표현에서 작업 할 때 나는 우리가 생각 거기에 우리의 삶에이 시점에서 그렇게 유창 그 그것은 실제로 작동 방식의 메커니즘을 통해 광택하는 매우 간단합니다. 전 그 번호 137이있는 경우 그러나 빠른 뉴스 레터를 살펴을 할 수 이 진정한 의미와 다시이 십진수에 표현 - 진수의 숫자 137은 내가 1 × 100 + 3 × 10 + 7 × 1을 의미합니다. 이 모든 화면에 머무는 것입니다. 그리고 당신은 여기에 숫자를 살펴보면 100, 10, 1, 당신은 그들이 실제로 10의 모든 힘이 있다고 참조하십시오. 나는 제로로 10 ², 10 ¹, 10가 있습니다. 우리는 바이너리에서 일을 비슷한 종류의이 를 제외하고 우리의 기본, 우리가 말하는 10 2 대신합니다. 제가 아래에 내려 쓴이 10 초, 이 10 ², 10 ¹, 제로, 10 ~ 10, 우리의 기지입니다 그리고 지수, 0, 1, 2, 우리가 글을 쓰는 수의 숫자의 위치가 암시되어 있습니다. 우리가 보면 1이 1 2 위치에 있습니다. 3 1 위치에 있으며, 7 0번째 위치에 있습니다. 그래서 우리가 기지 아래의 다양한 지수를 방법입니다. 이 사 - 실제로 모든 후, 당신은 알아요? 우리는 내 취소 버튼이 어떻게 - 어디 갔었 어거야? 자, 일 났네. 나는이 일을 취소 사랑해. 그 후 필자는 최소한 나를 위해 생각 이진 숫자로 변환을 시작하는 가장 쉬운 방법 베이스가 16 또는 16 진수 이 아닌 10이 가서 쓰다 것입니다 상단에있는 내 바이너리 번호를 숫자의 모든 기지와 지수. 우리가 바로 다시 왼쪽에서 시작하면 어긋나의 종류, 그입니다 여기 검은 색으로 다시 변경됩니다, 우리는 0번째 위치로 2가 그리고 우리는 2가 ¹, 2 ², 다음 2 3 5 2 ~ 4, 2, 6, 7, 8, 9, 10. 내가 알아 작성한이 숫자는 모두 지수입니다. 이제 막 공간에 대한 최초의 3 여기 기지를했다. 이 시점에서 나는 진행거야 그리고 난 실제로 삭제거야 괜찮 으면 우리가 십진수했다는 소식입​​니다. 당신은 모든 것을있어. 제가 확신 온라인 시청하시는 분들은 원하는 경우 나 되감기 할 수 있습니다. 펜으로 전환. 이제 우리 할 수​​있는 건 - 경우에 너희들이 2 네 능력에 속도를 완전히 위로 없습니다 것은 그거 정말 괜찮아요. 이 발생합니다. 이해합니다. 나는 I 2의 모든 힘을 알고 있어야 들었는데 어디 한 번 면접을했다 까지를 통해 2 30. 내가 가진 직업 아니 었습니다. , 어쨌든 당신들 가서 수 있으며, 여기에서 수학을 하지만 이진과 함께 정말 이해가되지 않는 그리고 않으며, 어느 진수 또는 진수를 이해할 수 없습니다 당신은 0을 어디에 있었는지 계산을 할 수 있습니다. 당신은 내가 여기, 여기, 여기, 여기, 여기, 여기, 0 0 0 0 0 0이 볼 수 있습니다. 왜 실제 수학을 할 이해하지 않을 수 있습니다 그 자리에 (2)의 적절한 힘을 계산하기 위해? 샬롯가 말한대로 정확히,이 0이됩니다. 2의 거듭 제곱을 계산하면 강한 정장이 아닌 경우뿐만 아니라 자신에게 시간을 절약 할 수 있습니다. 이 경우 우리는 0-2를 위해 계산 할 필요가 있는데,? [학생] 1. [네이트 H.] 1, 2, 3도 있죠 -? [학생] 8. >> [네이트 H.] 8. 2 4? [학생] 2. 죄송합니다, 하나입니다. [네이트 H.]는 2 4 정확히 16입니다. 2 5, 케빈? >> 32. [네이트 H.] 32, 2 8? [학생] 32 X 8, 256. [네이트 H.] 좋아요. 그리고 2 10? [학생] 1024. [네이트 H.] 네, 1024. 일단 우리는 그들 모두를 요약 할 수 있습니다이 숫자있어. 그리고는 몇 가지 작업을 수행하기 위해 정말 중요한 곳입니다. 하나는 느리게 가서 작업을 확인합니다. 당신은이 번호의 끝 부분에 1이 말할 수 그래서 확실히, 나의 결과로 홀수를해야합니다 다른 모든 사람들도 숫자가 될 것 때문에 가 이진 숫자 있다는 것을 감안하면. 당신이 테스트에서이 시점이 오게되면해야 할 또 다른 점은 그리고 당신이 멀리 한번 작성한 당신은 시간이 없어 이 문제가 가치가있는 포인트의 수 좀 봐. 이 문제는, 당신이 볼 수 - 경우 수 있기 때문에 정말 내 노트북​​에 다시 뒤집기 신속하게 - 이 문제는 2 점의 가치이기 때문에,이 또한 일종의 없습니다 당신은 정말 시간이 촉박 한 경우가 지르해야합니다. 하지만 우리는 아이 패드로 다시 전환됩니다, 우리는 정말 빨리 갈 거에요. 처음의 작은 숫자를 좋아하고 그런 일이 쉽게 찾을 때문입니다. 그들은 아주 쉽게 같이 할 때문에 32과 8을 좋아, 우리는 50을. 16 일 17를 얻을 수 있습니다. 이 우리는 57을 그리고 우리는이 나머지를, 그래서 우리는 156 57 할 수 있습니다. 이리와. 이봐, 음, 어디 보자. 우리는 57, 256, 1024했다. 이 시점에서, 난 차라리 그냥 통과 할. 나는 단서가 없습니다. 나는 분명이에 읽어해야합니다. 7, 6, 4, 당신은 17를. 1, 5, 5, 2, 13. 그런 다음 3을하고, 다음에 1을. 1337. 부활절 달걀, 누구? 사람이 번호를 알아 보시겠습니까? 크리스는 숫자를 인식합니다. 그것은 크리스 무엇을 의미합니까? [크리스] Leet. 이 보면 Leet, 그래서이 leet 것 같습니다. 해커 때문에. 중간 또는 퀴즈, 오히려에 그런 얘기 해보세요. 당신이 그런 얘기를보고 궁금 경우 "허" 그 뭔가를 의미 할 수 있습니다. 모르겠어요. 데이비드을 생각할 때 좋아 하잖아 그것은 정신이 확인 할 수있는 좋은 방법입니다. 괜찮 마찬가지로, 난 무슨 일이 일어나고 있는지 볼 수 있습니다. 그 주 0/Week 한 물건을입니다. 우리는 지금 우리의 노트북로 다시 전환하는 경우 축소 및 기타 몇 가지. 우리가 문제를 세트로 많이 해왔있는 ASCII있다. 자본 A.의이 개념은 정말 무엇입니까? 이 10 진수 정수를 알고. 65, 그것은 ASCII 표에에 매핑 할 수있어 그는 컴퓨터를 기록하는 방법 때문에입니다 그리고 그건 우리가 실제로 쓰기로 빠져 나갈 수 있었어요 방법 문자 자본과 문자를 소문자 당신이했던 짓이 솔루션과 문제 세트의 일부 인치 몇 가지 다른 사항. 우리는 성명, 부울 표현, 조건, 루프, 변수와 쓰레드있어. 이러한 모든 대부분 이해하던가요? 이 용어 중 일부는 시간에 좀 희한합니다. 나는 세미콜론으로 끝나는 대부분의 뭔가로 문을 생각하고 싶어요. 이러한 X로 제표 = 7, 변수를 설정, 아마도 X = 7했다. 아마도 x는 또한 숫자 7을 저장할 수있는 타입이다 그래서, 정수 또는 가능한 부동 또는 짧은 또는 문자입니다 그런 일. 부울 표현식은 동일이 대역을 사용하는 그리고 쿵는보다 큰 미만, 같음 또는 동일하지 보다 작거나 물건을 모든 종류와 같은. 조건 다음 경우 다른 문입니다. 당신이 경우에 해당하지 않고 다른을 가질 수 없습니다 것을 기억합니다. 마찬가지로 경우에 해당하지 않고 다른을 가질 수 없습니다. 루프는, 우리가 당신을 망치 된 한 루프의 3 종류의 기억 섹션 및 문제 세트의 마지막 몇하십시오. 당신이 사용자 입력을 입었을 때 상태 않습니다 사용하여, 특정 조건 때까지 루프에 해당하는 동안 사용 필요한 경우 다음 루프에 대해 그 사용 경우 현재 루프의 반복되는 알 것은 내가 그 일에 대해 생각하는 방법입니다. 아니면 내가 뭔가를하고자하는 문자열의 각 문자에 대해를 수행하는 경우, 그 요소로 뭔가를하길 원한다 배열의 각 요소에 대한. 스레드와 이벤트. 이러한 우리는 C에서 그렇게 명시 적으로 포함되지 않은 하지만 처음부터이 기억나요. 이 서로 다른 스크립트를 갖는 개념이다. 이것은 또한 이벤트를 방송의 개념입니다. 어떤 사람들은 처음에 자신​​의 프로젝트에 방송을 사용하지 않았다 그 때문에 전혀 상관이 하지만 이것들은, 동시성이라는 큰 문제를 처리하는 2 가지 방법입니다 이것은 어떻게 프로그램을 실행 시키려면 어떻게해야합니다 또는 겉으로는 같은 시간에 실행? 다른 작업도 실행하는 동안 다른 작업은 실행할 수 있습니다. 이렇게하면 운영 체제가 작동 것 같습니다 방법입니다. 이 예를 들어, 왜하더라도이 내 브라우저가 실행 있고, 또한 Spotify를 활성화하고 노래를 재생할 수 있습니다. 그 이해하는 개념 일 더. 나는 짧은 스레드에서 살펴 것 그에 대한 자세한 내용은하려는 경우. 어디 보자, 내가 거기 있었을 텐데 생각 다음 중 하나이에 문제가 발생했습니다. 다시, 나는 스레드와 이벤트 우리가 C에 충당 할 수있는 일이 아닌 생각 그것은 크게 스크래치보다 더 어려운해서. 당신이 거기에 대해 걱정하지만, 확실히 개념을 이해해서는 안됩니다 무슨 일이야 이해합니다. 우리가 이동하기 전에 주에 대한 질문이 0 물질? 모두 꽤 기분이 괜찮은? 이해 변수와 어떤 변수는? 움직여. 주 1. 특히 적용되지 않은 현재 일 정도 퀴즈 검토 반드시도에 대해 생각하는 더 많은 개념적 사항은 다음과 같습니다. 첫 번째는 소스 코드, 컴파일러와 객체 코드가 무엇인지의 개념입니다. 누구 없어요? 바질. 되어 개체 코드 - 내가 소스 코드는 그 소리에 넣어 무슨 말은, 와 객체 코드는 무엇 그 소리는 컴퓨터가 프로그램을 읽을 수 있도록 만들어 내입니다. 그렇지. 소스 코드는 실제로 최대 입력하는 C 코드입니다. 개체 코드는 그 소리에 나가 무엇입니다. 그렇게 바이너​​리 형식으로 0s와 1 초입니다. 이 오브젝트 파일의 무리를 할 때 어떤 일이 생기하는 것은, 당신이 프로젝트 또는 여러 소스 코드 파일을 사용하는 프로그램을 컴파일하는 말 어떤 규칙에 의해. C 파일 확장자가 주어집니다. 우리가 caesar.c, vigenère.c이 이유입니다. 당신이 자바 프로그램을 작성할 경우 그들에게 확장을 제공합니다. 자바합니다. 파이썬 프로그램은 확장되어 있습니다. 평을 자주. 일단 여러. C 파일을 가지고 당신이 그들을 컴파일합니다. 꽝이 바이너리 둘 다에서 침을 뱉. 만 1 프로그램을 래, 그럼 때문 당신은이 개체의 모든 함께 파일을 링커 링크를 한 실행 파일로. 이렇게하면 CS50 라이브러리를 사용할 때 어떤 예를 들어, 일에 있습니다. CS50 라이브러리는 것이 모두입니다. H 헤더 파일 당신이 읽고, # includecs50.h 그. 그리고 또한 특별한 바이너리 라이브러리 파일의 그는 0s와 1 초입니다 컴파일 된 그리고 - 내가 플래그는, 우리의 공백으로 돌아가서 경우 ​​우리가 정말 빨리 찾아 우리는 그 소리 명령을 볼 때 여기 무슨 일이야에서, 우리가 가진 건이 여기에 우리의 소스 코드 파일입니다. 이러한 컴파일러 플래그의 무리입니다. 그리고 가장 마지막에이 - 난 플래그 링크에 이 두 라이브러리의 실제 이진 파일, CS50 도서관과 다음 수학 라이브러리를 제공합니다. 파일 '목적의 각 유형을 이해 컴파일 과정에서 할 수 할 수 당신이 원하는 것 일입니다 적어도 높은 수준의 개요를 제공합니다. 개체 코드가 나오는 인치 소스 코드가 제공됩니다. 개체 코드 파일을 함께 링크, 당신은 아름답고, 실행 파일을. 좋아. 여러 개의 지점에서 오류를 얻을 수있는 곳이 있습니다 컴파일 과정 인치 이 곳, 예를 들어,이 연결 플래그를 빼 내면됩니다 귀하의 코드를 실행하면 CS50 깃발, 당신​​은, 스페이스에서 생략하거나 당신이 연결 단계에서 오류가 발생합니다 곳이에요 그리고 링커는 이봐 요, 당신은 기능 GetString 호출 "라고합니다 그 CS50 도서관에 있어요. " "당신은 CS50 도서관에서이 말 했어요,, 나는 거기에 코드를 찾을 수 없습니다." 당신이에 연결해야 할 곳이야, 그는 별도입니다 컴파일러 오류에서 컴파일러는 문법과 그런 얘기를보고되기 때문입니다. 이 때 무슨 일이 일어나고 있는지 알고 좋아. 기타 사항에 대해 알고 있습니다. 난 당신이 확실히 요르단에 의해 수행 typecasting에 짧은 살펴 싶은 말 것 ints는 후드 아래에 어떤 이해하려면, 본네트 아래에있는 것만 문자입니다. 우리가 ASCII에 대해 이야기하고 우리가 실제로 ASCII 표를 보면, 무슨 짓을은 후드의 모양에 따라 우리를 제공합니다 컴퓨터가 실제로 자본을 나타내는 방법에 대해 A와 숫자 7 와 쉼표와 물음표. 컴퓨터는 또한 대표하는 특별한 방법이 있습니다 정수로 숫자 7. 그것은 부동 소수점 숫자로 숫자 7을 대표 할 수있는 특별한 방법이 있습니다 그리고 그것들은 매우 다릅니다. Typecasting은 컴퓨터가 "이봐, 난 당신이 변환 할 말하는 방법입니다 한 표현에서 다른 표현으로. " 왜 우리는 살펴하지 않습니다. 나는 또한 도서관에 짧고 컴파일러에 짧은 살펴 것입니다. 컴파일 과정에 대한 그 이야기, 어떤 라이브러리가 있으며, 당신이 요청받을 수 있다는 이러한 질문 중 일부를 통해 이동합니다. 주 1 자료에 질문이 있으십니까? 당신이 커버하고 싶은 부담스러운 듯 여기에 주제가 있습니까? 우리가 얻을 수 있도록이 이전 주제의 대부분을 폭파하려고 포인터와 재귀의 수행 약간. 생각? 충당 할 있나요? 어쩌면 초콜렛 시간? 당신들은 그것을 통해 노력하고 있습니다. 내 커피에 술을 마시고 계속거야. 주 2. 행운을 빌어 줘, 좋은 전화. 주에서 2 우리는 기능에 대해 조금 더 이야기. 처음 몇 문제 세트에서 우리는 정말 전혀 기능을 쓰지 않았어요 어떤 기능이 아닌 다른? 정확히 [학생] 메인. >> 메인. 그래서 우리는 주요 입고있는 다른 의상을 봤어요. 이 인수도도지지 않습니다하는 사람도 있고 우리는 그냥 괄호 사이에 빈 공간을 말 다음, 우리는 명령 줄 인수를 사용하고 싶어 다른 하나가 당신이 INT argc와 argv가 문자열 배열을 어디에서 우리가 본대로, 그건 나 이제 우리가 실제로인지 숯불 *로 문자열을 노출 한 우리는 숯불 * 변수는 argv와 다음 괄호로 쓰기 시작할 거에요. 문제 설정 3에서, 너희는 함수의 무리를 본 그리고 함수의 무리 구현, 그릴, 스크램블을 다하겠습니다. 프로토 타입은 모든 당신을 위해 작성되었습니다. 정말 신속하게 기능과 함께 이야기하고 싶습니다 당신이 함수를 작성 할 때마다 세 부분이 그들에게 있다는 것을이다. 당신은 함수의 반환 유형을 지정해야합니다. 당신은 함수의 이름을 지정해야하고, 다음을 지정해야합니다 인수 목록이나 매개 변수 목록입니다. 예를 들어, 경우 정수의 무리를 요약하는 함수를 작성했다 그리고 나에게 내 반환 형식이 될 무엇의 합계를 반환 나는 정수를 요약 한 후 합계를 반환하고 싶어? 경우 그런 다음 함수의 이름입니다. 제가 가서 녹색으로 작성하는 경우,이 부분은 반환 유형입니다. 이 부분의 이름입니다. 그리고 괄호 사이에 제가 인수되는 곳입니다 자주 때로는 매개 변수에 대한 매개 변수라고 인수로 약자. 하나가 있다면, 당신은 단지 하나를 지정합니다. 여러 개의이있는 경우에는 쉼표로 각각 구분합니다. 각 인수에 대해 당신이 할 2 가지를 제공하는 아르 - 케빈? [케빈] 당신은 입력 한 다음 이름을 부여해야합니다. 그리고 이름, 이름은 사용 할거야하는 이름입니다 합 기능 내에서 해당 인수를 참조하려면, 현재 작성하고있는 함수 내. 아시다시피, 전 요약 갈 수 있을지, 예를 들어 투 -에 대한 필요가 없습니다 정수 - 누구의 배열은 정수 배열을, 말 그리고 나도 나 자신에게 중괄호을주지 없습니다 - 나는 합계 함수에 배열을 전달한다 때 나는 인수 목록의 첫 번째 위치에 전달합니다. 하지만에 전달하는 배열 이름 도착지를 할 필요가 없습니다. 도착지는 내가 함수의 본문 내에서 해당 인수를 참조하는 방법 될 것입니다. 우리가 고려하는 데 필요한 다른 것은, 이 함수에서 약간의 차이가 있습니다,하지만 난 그게 중요한 것 같아요 C에 내가이 같은 함수를 작성 할 때이다 어떻게이 배열에 얼마나 많은 요소를 알 수 있습니까? 이 어려운 질문에 다소 있습니다. 우리는 지난 주 섹션에이 사실을 조금 했어요. 어떻게 C에서 배열 내부 요소의 수를 알 수 있습니까? 방법이 있습니까? 그것은 알 방법이 없다는 밝혀졌다. 따로 안에 그것을 통과해야합니다. 당신이 할 수있는 트릭이 있습니다 당신은 배열이 선언 된있는 동일한 기능에 경우 그리고 당신은 스택 배열 최선을 다하고 있습니다. 당신은 동일한 기능에 있으면 그건에만 사용할 수 있습니다. 일단 다른 함수에 배열을 전달하거나 배열을 선언 한 경우 하고 힙에 그 배열을 넣어, 당신은 malloc을 사용  과 물건의 종류 다음, 모든 게 백지가 있습니다. 그럼 당신은 실제로 주위를 통과해야 특별한 인자 또는 다른 매개 변수 배열이 얼마나 큰 말. 이 경우에는, 죄송 해요,이 화면을거야 쉼표로 난을 사용 싶어 - 여기 그리고 난 다른 인수에 전달 할  와 길이에 대한 INT 렌 전화하십시오. 퀴즈에있을거야 한가지 무언가라는 특정 기능을 작성하거나 구현을 요구하고 있습니다. 우리는 당신에게 프로토 타입을 제공하지 않을 경우, 여기이 모든 게, 이 모든 혼란은 함수 선언이나 함수의 프로토 타입이라고합니다 이가 주어지지가 당신이 아래로 체포하고 싶어한다고 첫 번째 일 중 하나입니다 바로 퀴즈에 당신을 위해. 내가 배운 또 다른 트릭은 그 우리가 당신에게 기능에 대한 프로토 타입을 제공 할 말, 우리는, "어이, 당신이 그것을 쓸 수있어." 당신이 퀴즈에 가지고있는 중괄호 내부 당신은 반환 유형이 있다는 것을 발견하면 발생할 경우 그 반환 유형 함수가 아무것도 반환하지 않는 것을 의미 무효, 이외의 다른 무언가이다 다음 확실히하고 싶은 한 가지가 쓰기 is 함수의 끝 부분에 return 문 일종의. 우리가 빈에서 작성 싶어서 돌아 가기,이 경우에, 우리는 빈을 올려 놓을 게요. 그러나 당신은 어떻게이 문제를 접근해야 돼 대해 올바른 방법으로 생각하십니까? 그리고 당신이 값을 반환해야 할 것을 상기시켜줍니다 함수의 호출자 있습니다. 그래. >> [학생] 우리가 퀴즈에 코드를 쓸 때 스타일이 적용됩니까? 들여 쓰기와 그런 얘기 등? >> [학생] 그래. 아니, 많이. 나는, -이 많은 우리가 당일에 퀴즈에 명확히 될만한 뭔가 생각 하지만 일반적으로에 대한 걱정은 # 포함하고 그런거, 그것은 외부의 일종 이죠. [학생]는 당신의 손으로 쓴 코드를 주석해야하나요? 당신이 손으로 쓴 코드를 주석해야합니까? 당신은 일부 신용 카드에 대해 걱정되면 댓글 달기는 항상 좋은 하거나 학년에 의도를 전달하고 싶습니다. 하지만 다시, 퀴즈 자체와 퀴즈 날에 명확히합니다 하지만 난 당신이 아니, 의견을 작성해야한다고 생각하지 않습니다. 일반적으로,하지만 확실히 것들 않는 곳 당신은 좋아하는 의사를 전달할 수 "내가 함께 갈 곳 야,이입니다." 그리고 때때로 일부 신용 도움을 수 있습니다. 좋아. 바질. [바질] INT 랭, 말, 선언의 차이점은 무엇입니까 함수 내에서 변수를 선언 대 인수 또는 매개 변수에서? 와우, 커피 기관을했다. [바질] 우리가 인자에 넣어하고자하는 일처럼. 네, 좋은 질문입니다. 당신은 어떻게 인자에 넣어하고자하는 일 선택하려면 어떻게해야합니까 만약 당신이 함수의 내부에 어떻게해야 일 대? 이 경우 우리는 인자로 다음을 모두 포함 그들은 합계 기능을 사용할 것입니다 누구든지있는 것이니까 그 일을 지정해야합니다. 합 기능은, 우리가 얘기처럼, 알 수있는 방법이 없습니다 그것의 발신자 또는 사람에게서 얼마나 커지 배열이 합계 기능을 사용하고 있습니다. 그렇게 배열이 얼마나 큰 알 방법이 없습니다. 우리가 인자로 여기이 길이 통과하는 이유 그렇게 우리가 기본적으로 함수의 호출자을 말하고 있다는 것을이기 때문입니다 합 기능을 사용할 것입니다 누구든지 "이봐 요, 당신은 우리에게 배열을 제공해야합니까뿐만 아니라 ints, 당신은 얼마나 큰 당신이 우리입니다 제공 한 배열 우리에게 얘기를 해. " [바질] 자 모두 명령 줄 인수 될 것인가? 아뇨, 그건 당신이 함수에 전달한다고 실제 인수입니다. 내가 여기서 새로운 페이지를 보자. [바질]는 이름처럼 통과 - 것 [네이트 H.] 내가 INT 메인이있을 경우 (무효) 그리고, 아래쪽에있는 여기 내 반환 0에 내려 간다 그리고 내가 합계 함수를 호출하고 싶을. 내가하고 싶은 말은 INT X = 합계 (); 합 기능을 사용하려면 제가 요약 할 두 배열에 통과해야 와 배열의 길이는,이 곳이 어디 내 말은, ints의 배열을 가지고 가정 사실은 말 INT numbaz [] = 1, 2, 3, 거기 구문을 해킹 사용 종류 그리고 내가 어떻게하는 것이 합에 나는에 전달하려는 것 numbaz과 3 번 모두 "자, 여기가 당신이 합계 할 배열입니다."합계 기능을 알려주는 "다음은 크기입니다." 그게 말이나 돼? 그 질문에 대한 답변이 있습니까? 여러 가지 방법으로 우리가 주와 함께하는 일 평행하지 우리가 명령 줄 인수를이있을 때. 카이사르 암호문 같은 프로그램은 예를 들어, 그 필요 명령 줄 인수가 아무 것도 할 수 없을 것입니다. 당신이 어떤 키 사용하기를 말하지 않으면이 암호화하는 방법을 알고하지 않을 또는 당신이 암호화 싶은 문자열을 말하지 않으면 말야. 우리는 2 개의 다른 메커니즘이있어 위치를 입력하라는 메시지에 대해, 이쪽은 사용자의에서 정보를 주셔서, 사용자의에서 입력을 복용하십시오. 문제는 1 세트에 대해 우리는이 GetInt, GetString, GetFloat 방법을 보았다 입력을하라는 메시지를, 그는 표준 입력 스트림을 사용하여 이름이야. 그것은 약간의 차이가 있습니다. 그것은 반대로 한 번에 할 수있는 뭔가가 이 프로그램이 실행 시작할 때 프로그램을 호출합니다. 당신이 프로그램 실행을 시작할 때 명령 줄 인자가 모두 지정됩니다. 우리는 사람들의 두 혼합 있었어요. 우리가 함수에 인수를 사용하는 경우 많은 주에 명령 줄 인자 같은거야. 당신은 당신이 그것을 말할 필요 기능을 호출 때입니다 그것은 그 작업을 수행하기 위해 필요로 정확히. 에서와 확인하는 당신이 여가 시간에 그것을 바라 보는 또 다른 좋은 일 그리고이에서 설명 된 범위의 개념 퀴즈는 -이었다 와 전역 변수 대 지역 변수. 에게 관심을 지불 마십시오. 우리는이 다른 것들에지고있어 이젠 주 3에 우리는 검색 및 정렬에 대해 얘기 시작했다. 적어도 CS50에서 검색 및 정렬 많이는 컴퓨터 과학 분야의 많은 이론 부분의 일부를 소개합니다. 검색의 문제, 정렬의 문제 큰 캐 노니 컬 문제입니다. 어떻게 정수 수십억의 배열에서 특정 번호를 찾으려면 어떻게해야합니까? 어떻게 전화 번호부 안에 특정 이름을 찾을 수 있습니까 그는 노트북에 저장된거야? 그래서 우리는 점근 실행 시간의 개념을 소개 정말 얼마나 오랫동안 이러한 문제가 얼마나 어려운 수량화하는 것은, 얼마나 오랫동안 그들이 해결하는 데. 2011의 퀴즈, 나는 생각에 나는 이점 생각하는 문제가 이 사람이 문제가 12있는 매우 빨리 덮어 버렸습니다. 노 O, 그것은 오메가입니다. 여기 가장 빠른 실행 시간에 대해 얘기하고 특정 알고리즘 및 다음 느린 가능한 런타임. 이 오메가와 O 단지 바로 가기입니다. 그들은 말에 notational 바로 가기이야 얼마나 빨리 최선의 경우에 의지의 알고리즘 실행, 방법과 최악의 경우에 느린 우리의 알고리즘은 실행됩니다? 이들 중 몇을하자,이 또한 적용되었습니다 제가 매우 추천 점근 표기법에 짧은 인치 잭슨은 정말 훌륭한 일을 했어. 이진 검색을 통해, 우리는 알고리즘로서 이진 검색에 대해 이야기 우리는 일반적으로는 큰 O.의 관점에서 이야기 큰 O는 무엇입니까? 이진 검색의 가장 느린 가능한 런타임은 무엇입니까? [학생] N ²? 닫기, 그와 유사한 같아요. 그것은 훨씬 빨리보다입니다. [학생] 이진? >> 네, 이진 검색 할 수 있습니다. [학생]이 로그 N입니다. 로그인 N 무슨 뜻 이죠 따라서 n을 로그? 그것은 그것을 각각의 반복을 절반. 맞아요, 그래서 느린 가능한 경우에, 당신이 정렬 배열이 있으면 말 만 정수와 번호가 찾고 두 배열의 배열 또는 매우 마지막 요소의 첫 요소입니다. 단, 이진 검색 알고리즘은 중간 요소를보고하는 방식으로 작동 그게 당신이 찾고있는 일치하는지보고. 그 다음, 큰 경우, 당신이 발견했다. 최선의 경우에, 얼마나 빠르게하는 이진 검색 실행합니까? [학생] 1. 하나는, 1 큰 O 일정한 시간이다. 그래. [학생] 질문이 있습니다. 당신이 N의 로그인 말할 때, 바로,베이스 2와 관련하여 말인가요? 예, 그래서는 다른 것입니다. 우리는 로그 n을 말 내가 고등학교 때 엔 항상 로그 기지 ​​10라고 생각 했었습니다. 네, 네 있으므로,베이스 2 일반적으로 우리가 사용하는 것입니다 로그온합니다. 당신도를 검색하는 경우 다시, 이진 검색으로 돌아 간다 맨 끝에서 요소 나 처음의 요소 당신이 중간에 시작하고 있기 때문에 다음은 폐기 중 이분의 일하면 당신이 찾고있는 기준을 충족하지 못하는, 당신은 다음 반 다음 반 다음 절반 이동합니다. 나는 백만 정수 배열에서 가장 큰 요소를 찾고 있어요 경우 나는 1 만 회 대부분의 로그에서이 반으로 줄어들거야 드디어 테스트하고 요소가 내가 찾는 것을 볼 전에 , 가장 큰 또는 배열의 가장 높은 색인에 그리고 1 백만 배의 로그인 n의 로그를 취할 것입니다. 버블 정렬. 너희들은 버블 정렬 알고리즘을 기억하십니까? 케빈, 당신은 내게 버블 정렬 알고리즘에서 무슨 일이 있었는지에 대한 간단한 뉴스 레터를 살펴을 제공 할 수 있습니까? [케빈] 기본적으로이 목록에 모든 걸 뚫어. 그것은 처음 두 본다. 첫 번째는 두 번째가 스왑을보다 큰 경우. 그럼 두 번째 및 세 번째, 같은 일, 스왑을 비교 세 번째와 네 번째, 완전히 아래로. 큰 숫자가 마지막까지 따라합니다. 그리고 그러나 많은 루프 후이 완료됩니다. 맞아요, 그래서 뭐가 케빈이 말한 건 우리가 더 큰 숫자를 보게 될거야 있다는 것입니다 배열의 끝으로 거품까지. 이것이 우리의 배열 인 경우 예를 들어,이 예제를 통해 우리가 걸어 줄래? [케빈] 당신은 2를, 3됩니다. 3은 2보다 더 큰, 그래서 그들을 교환. [네이트 H.]는 오른쪽, 그래서 우리는이를 교환하고, 그래서 우리는, 3, 4 6 2 받고, 9. [케빈] 그럼 당신은 3, 6을 비교합니다. 3는 6보다 작은, 그래서 당신은 그들을 떠나 4 6보다 작은이기 때문에, 6, 4, 당신이 그들을 교환 할. [네이트 H.] 네, 그래서 2, 3, 4, 6, 9를. [케빈] 그리고 9 6보다 더 큰, 그래서 당신은 그것을 두십시오. 그리고 당신은 다시 한 번 돌아 갈거야. 저는이 시점에서 [네이트 H.]를 못해? >> [케빈] 번호 그리고 왜이 시점에서 완료하지 이유는 무엇입니까? 내 배열이 정렬됩니다 것 같은데 때문입니다. 나는보고있어. [케빈] 다시 한 번 가서 더 이상 스왑가 있는지 확인 당신은 완전히 중단 할 수 있습니다 전에. 맞아요, 그래서 당신은을 통해 계속되며 스왑이 없는지 확인해야합니다 이 시점에서 할 수 있는지 확인하십시오. 당신이 말한 것처럼 우리가 결국 것을 정말 운이 좋았어 만 1 ~ 패스를 만들기 위해 필요하고 우리는 정렬하고 있습니다. 그러나 일반적인 경우에는이 작업을 수행하는, 우리가 실제로 다시 이상이 작업을 수행해야합니다. 그리고 사실,이 최선의 가지 경우의 예였다 처럼 우리는이 문제에 보았다. 우리는 최선의 사건 습니 것을 보았다. 우리는 배열 1 회 통과했다. 이 알고리즘에 대한 최악의 경우는 무엇입니까? [케빈] N ². 그리고 그 표정은 무엇을 좋아합니까? 어떤 배열 모습 그런 식으로 N 개의 ² 시간을 걸릴거야까요? [케빈] [안 들리게] 정렬. 나는 어레이 (9), 7, 6, 5, 2, 가지고 정확히 그래, 그러니 경우 먼저 9까지 거품이 모든 방법을 평가한다면. 한 반복 한 후 우리는 7, 6, 5, 2, 9이있을 것이다. 그런 다음 7까지 거품, 6, 5, 2, 7, 9 등 등등한다면. 우리는 전체 배열 n 번 통과해야 할 당신은 실제로 이것보다 조금 더 정확한 얻을 수 있습니다 일단은 마지막으로 가능한 위치로까지 9 모든 방법을 이동 한 때문 우리는 다시 요소 비교해야 할 적이 없다는 것을 알고 있습니다. 일단 우리는 7 품어 시작 우리는 7 바로 9 이전되면 우리가 중지 수 있다는 것을 알고 우리는 이미 여기에 9를 비교 한 때문입니다. 당신은 똑똑한 방법으로이 작업을 수행하는 경우는, 그런 것 같아요 정말 시간이 많이 없습니다. 당신은 모든 가능한 [안 들리게] 조합을 비교 할 수 없어 매번 당신은 각각의 반복을 통해 이동합니다. 그러나 아직 우리가이 상단 바운드에 대해 이야기 할 때 우리는 말의 뜻 당신은 N 쳐다 보는거야 ² 비교가 모든 방법으로. 우리는 시간에 조금 짧은 모이기 시작부터 돌아 가자, 그리고 당신이 확실히이 테이블의 나머지 부분을 통과해야한다고 것 모든을 작성하십시오. 예를 생각하십시오. 콘크리트 예를 생각하십시오. 그래서 할 정말 편리하고 유용합니다. 한번립니다. 이 테이블의 종류입니다 당신은 컴퓨터 과학에 통과 당신은 정말이의 마음을 알고 시작해야합니다. 이는 인터뷰에 들어가 질문의 종류입니다. 이것들은 알고 좋은 일들 종류의 아르 와 정말 생각하는 방법을 알아 냈어, 그 가장자리의 경우 생각 버블에 대한 최악의 배열을 정렬하는 알고 그와 함께 정렬하는 것은 반대 순서에 하나입니다. 포인터. 가 포인터에 대해 조금 얘기합시다. 지난 몇 분 후에 우리가 여기 있습니다 이런 일이 I / O 그게 좀 새로운 파일과 함께 뭔가 알아. 우리는 포인터에 대해 우리가 포인터에 대해 얘기 할 수있는 이유를 이야기 할 때 우리가 C에서 작업에, 때문입니다 우리는 가장 현대적인 프로그래밍 언어에 비해 매우 낮은 수준에 정말입니다. 우리는 실제로 메모리에 변수를 조작 할 수 그들이 실제로 RAM에 위치한 곳으로 파악. 일단 당신이 볼 운영 체제 수업을에 갔어요 그 사람들은 다시 추상화의 종류입니다. 그래서 실제로 경우 없습니다. 우리는 우리의 이러한 세부 사항을 숨기고 있어요 가상 메모리있어. 당신은 프로그램을했을 때 지금 당신은 그렇게 생각할 수 예를 들어, 시작 때 시저 암호 프로그램을 실행 정말 신속하게, 내 아이 패드로 다시 전환됩니다 이 경우 매우 시작 프로그램에,,, 말 것을 노트북에 RAM의 4기가바이트, 이 덩어리를 따로 설정되면, 우리는이 RAM 전화 할께. 그리고, 우리가 0에 전화를하고있는 곳에서 시작 그리고 우리는 4 기가 바이트 부를 수있는 장소에 끝납니다. 정말 쓸 수 없습니다. 이봐 요, 그이 해킹되어 있습니다. 프로그램이 실행되면 운영 시스템은 RAM을 새겨 그리고 살기 프로그램의 다른 부분에 대해 서로 다른 세그먼트를 지정합니다 여기에이 지역은 무인의 땅 종류입니다. 당신은 멀리 여기 좀을 갈 때 당신은 실제로있는 곳이 있어요 곳 프로그램 생활에 대한 코드입니다. 그 실제 바이너리 코드는 해당 실행 파일은 실제로 메모리에로드됩니다 당신은 프로그램을 실행하고,이 코드 세그먼트에 거주합니다. 프로그램이 실행으로 그리고 프로세서는이 코드 세그먼트을보고 파악하기 위해 다음 명령어는 무엇인가? 제가 실행해야 할 코드의 다음 행은 무엇입니까? 이 데이터 세그먼트는, 그리고이 곳 그 문자열 상수입니다 사용 된 것으로 저장됩니다. 그리고 멀리까지 힙라는 곳이 있어요. 우리는 malloc을 사용하여 거기에 메모리를 액세스 다음 프로그램의 상단을 향해 스택이있어 우리가 처음의 대부분은 친 것 어디서 고. 이 규모 나 아무 것도하지 않는 것입니다. 이 많은 매우 기계 따라 달라집니다 시스템이 따라 운영하지만,이 일이 최대 청크 분할하기 비교적 방법입니다. 당신은 프로그램을 실행하고라는 X-변수를 선언 할 때 나는이 아래에 또 다른 상자를 그릴거야,이 역시 RAM 될 것입니다. 그리고 볼거야. 우리는이 방금 RAM의 작은 섹션을 나타냅니다 가변 라인을 그려 줄께요 그리고 모든 우리는 상단에 그려하지는 않습니다. 나는 X라는 정수 변수를 선언하는 경우 그리고 내가 실제로 걸어 매핑입니다 내 프로그램의 심볼 테이블에 저장되는 그건 내가 그린 한 메모리의 영역에 이름 X를 연결 여기에 수직 막대 사이. I는 x = 7 할거 프로그램에 코드 한 줄이있는 경우 프로세서는 알고 "오, 그래, 나도 알아 메모리에이 위치에서의 x의 삶." "내가 가서 거기에 7을 써야 겠어." 어떻게이 메모리에 어떤 위치 알 수 있습니까? 음, 모든 컴파일 시간에 다 됐어. 변수의 각 가게 곳 컴파일러는 할당을 담당 그리고 특별한 매핑을 만들거나 오히려 점을 연결 상징하고 가고있어, 변수의 이름 사이 하고 메모리에서 살고있는 곳. 그러나 우리가 실제로뿐만 아니라 우리의 프로그램에 액세스 할 수 있는지 밝혀졌다. 우리가 데이터 구조의 일부에 대해 얘기 시작하면이 중요 도착 그건 우리가 나중에 소개 할거야하는 개념이다. 하지만 지금은 당신이 알 수는 내가이 위치에 x를 포인터를 만들 수 있다는 것입니다. 예를 들어, 나는 포인터 변수를 만들 수 있습니다. 우리는 포인터 변수를 생성 할 때 우리는 스타 표기법을 사용합니다. 이 경우,이 내가 정수에 대한 포인터를 만들거다 말합니다. 단지 다른 같은 형식입니다. 우리는 그것을 Y와 같은 변수를 제공 그리고 우리는 주소, 주소가 동일 설정합니다. 이 경우, 우리는 x를 가리 키도록 Y를 설정할 수 있습니다 이 앰퍼샌드와 함께 우리가 할 x의 주소를 취하여, 그리고 우리가 가리 Y를 설정합니다. 우리 RAM 보면이 본질적으로 무엇인가 않습니다 이 별도의 변수를 만듭니다. 마치 Y 전화 할거야 및 코드의 라인은 실행시 실제로, 우리는 일반적으로 화살표로 그려 약간 포인터를 만들거야 그리고는 x를 가리 키도록 Y 설정합니다. 예. X 이미 포인터 인 경우 [학생]은, 당신은 할 것 INT * Y = X 대신 앰퍼샌드를 갖는? 예. x는 이미 포인터 인 경우 당신은 서로 같은 두 포인터를 설정할 수 있습니다 이 경우 y는, X 가리 안 하지만를 가리키는 어떤 x에 지정됩니다. 불행하게도, 우리는 시간이 없어. 나는이 시점에서 말하는대로, 우리는이 오프라인 얘기 할 수 하지만 저는이 문제를 통해 # 14 작업을 시작 말 것입니다. 당신은 당신으로 채워 약간의는 이미 여기에있다 볼 수 있습니다. 우리는이 포인터를 선언 할 때 당신은 그렇게을 볼 수 INT * X와 * y, 그리고 변수 옆에있는 *를 가리키고주의는 작년 이루어졌다 것이었다. 그것은이 우리가 올해 무슨 짓과 유사하다고 밝혀졌다. 당신은 포인터를 선언 할 때 당신은 *을 쓸 곳 중요하지 않습니다. 그러나 우리는 유형 옆에있는 *를 작성했습니다 매우 분명 당신은 포인터 변수를 선언한다는 만드는 그 때문입니다. 당신은 2 포인터를 선언하는 것은 우리에게 두 상자를 제공합니다 것을 알 수 있습니다. 여기 malloc와 같은 X를 설정할 때 무슨 말을하는 것은 힙에 메모리를 따로 설정되어 있습니다. 바로 여기이 작은 상자,이 원은 힙에 자리 잡고 있습니다. X는을 가리키고 있습니다. y는 여전히 아무 가리키는되지 않습니다. 얻으려면 메모리를 - 투 X에 숫자 인 42를 저장 우리가 뭘 표기법을 사용해야합니까? [학생] * X = 42. 맞아요, * X = 42. 그 화살표를 따라 거기에 42 던져 의미합니다. 여기에 우리가 y와 x를 설정 우린 어디로 Y X를 가리키고 있습니다. 다시 말하지만,이 우리가 x에 y를 동일한 설정 위치 케빈 말을 좋아합니다. Y는 X를 가리키는되지 않습니다. 오히려, 그것은 x는뿐만 아니라를 가리키는 무엇을 가리키는있어. 그리고 마지막으로이 마지막 상자에서 우리가 할 수있는 두 가지 경우가 있습니다. 하나는 우리가 * X = 13 말할 수 있습니다. 다른 건 우리가 말하는 알렉스, 당신이 우리가 할 일을 알고 할 수 있습니다? 당신은 말할 수 * X = 13 또는 [학생] 당신은 INT 어떤 말을 수 있습니다. [네이트 H.]이는 정수 변수로 지칭 된 경우 우리가 그렇게 할 수 있습니다. 우리는 또한 * Y = 13 둘 다 같은 곳을 가리키는 있기 때문에, 말을 할 수 그래서 우리는 거기까지 두 변수를 사용할 수 있습니다. 그래. >> [학생] 우리가 INT X 13 말하는 경우처럼 어떤 보이 겠어? 그런 일을하지 않을 X라는 새로운 변수를 선언됩니다. 우리가 여기서 x는 여기 포인터까지 선언 때문에 충돌이있을 것이다. [학생] 우리가 자체로 그 진술이 있다면 그 원의 관점에서 어떻게 생겼 겠어요? 우리는 X가 있다면 = 13 그런 다음에 우리가 상자를 가지고 있고, 오히려 화살을 갖는 것보다 할 상자에서 나오는 우리는 13로 그리는거야. 상자에서 [학생]. 좋아요. 시청 해 주​​셔서 감사합니다, 그리고 퀴즈 공에 행운을 빌어 요. [CS50.TV]