[음악 연주] 데이비드 J. 마란 : 좋습니다. 이것은 CS50이며,이 주 (2)의 단부이다. 그래서 오늘, 우리는거야 우리의 모습을 계속합니다 우리가 일을 나타내는 방법에 대해 hood-- 멀리 이동 아래 정수와 같은 번호에서 및 부동 소수점 값 문자열에 초점을 맞추고 궁극적으로 더 흥미있는 프로그램. 그러나 우리는 또한 좀 할게요 도메인 별을 문제의 커플 첫번째 할의 암호화를 포함 할, 정보를 스크램블링의 예술, 하는 여기에 위의 내용 참조 라디오 고아 애니의 사진입니다 작년의 비밀 디코더 링. 이것은 실제로 매우 원시적 인 형태이다 및 cryptopgraphy의 어린이 친화 양식 이 반지는 두 disks--을 가지고있다 한 내부와 하나의 외부. 그리고에 의해, 그 중 하나를 수행 할 수 있습니다 회전 본질적으로 같은 글자를 일렬로 다른 문자와 Z를​​ 통해 환언 A. 내지 B 등 말 그대로 알파벳을 회전 할 수 있습니다, 이에 매핑에서 함께 올라오고 문자로 문자가, 만약 그렇다면 당신 비밀 메시지를 보내 원 애니 좋아하는 사람에게, 당신은 쓸 수 다음 회전 메시지 아래로 문자가,있다, 당신은 의미하는 경우 대신 말을 "을"말을 "B"를 당신이 말의 뜻은 "B"를 대신 "C"를 말한다 - 또는 뭔가 좀 더 영리한 거저보다하고, 궁극적 너무 오래 애니는이 디코더가로 반지, 그녀는 메시지를 디코딩 할 수있다. 지금, 당신은, 사실, 기억이 그 수 아주 유명한 영화에서 사용 된 그 동안 광고 nauseum을한다 크리스마스 시즌. 여기서 살펴 보자. 랄 피하고 파커는 "그것을해야 요약에있는 모든 알려진 랄프 파커는 이에 임명된다 어린 고아 애니 비밀의 회원 원과 모든받을 권리가있다 명예와 혜택은 이에 발생. " 랄 피하고 PARKER (나레이션) : 어린 고아 애니 서명. 연대, 피에르 앙드레! 잉크합니다. 명예와 이익, 이미 아홉의 나이에. [음악 연주] [RADIO 잡담] 랄 피하고 파커 : 자. 의 그것과에하자. 난 재즈가 필요하지 않습니다 밀수꾼과 해적에 대한 정보가 포함되어 있습니다. (라디오 방송) : 내일 봐 결론 모험 밤 블랙 해적선의. 지금, 그것은 시간이 애니의위한거야 당신 구성원에 대한 비밀 메시지 비밀 서클의. 아이, 회원 만 기억 애니의 비밀 서클의 애니의 비밀 메시지를 해독 할 수 있습니다. 기억, 애니 당신에 따라 있습니다. B-2에 핀을 설정합니다. 다음은 message-- 12, 11, 2 ... 랄 피하고 PARKER (나레이션) : I 내 첫 번째 비밀 회의입니다. (라디오 방송) : --25, 14, 11, 18, 16-- 랄 피하고 PARKER (나레이션) : 아, 피에르는 큰 음성 오늘 밤이었다. 나는 오늘 밤의 말할 수 메시지가 정말 중요했다. (라디오 방송) : --3, 25. 즉, 애니 자신의 메시지입니다. 아무에게도 말하지 않는 기억하십시오. [PANTING] 랄 피하고 PARKER (나레이션) : 인티 초 후에, 난 에서 유일하게 방에 집 어디 아홉의 소년 개인 정보 보호 및 디코딩에 앉아 있었다. 아. "B." [했네] 랄 피하고 PARKER (나레이션) : 나는 다음에 갔다. "E." 첫 번째 단어는 "수"입니다. 예! 지금은 쉽게오고 있었다. "U." [했네] 랜디 파커 : 아, 랄피을 어서. 난 갈거야! 랄 피하고 PARKER : 나는, 오른쪽 아래 엄마가 될 것입니다. 맙소사. "T." "O." "확인 에. "무엇을"해야합니다 "? 어린 고아 애니는 무엇인가 말하려고? 무엇을 "해야합니다"? 어머니 : 랄 피하고, 랜디 가야했다. 당신은 나와 주시겠습니까? 랄 피하고 PARKER : 좋아, 엄마! 내가 나갈게! 랄 피하고 PARKER (나레이션) : 나는 가까이 지금 얻고 있었다. 긴장은 끔찍했다. 그것은 무엇인가? 행성의 운명 저울에 달아있다. 어머니 : 랄 피하고, 랜디 가야! 랄 피하고 PARKER : 나는 괜찮을거야 출력, 제발 그만! 랄 피하고 PARKER (해설) : 거의 다! 내 손가락이 날아 갔다! 내 마음은 강철 함정이었다. 모든 구멍은 진동. 그것은 거의 분명했다! 예! 예! 예! 예! 랄 피하고 파커 : "확인 당신 Ovaltine을 마실 수 있습니다. " Ovaltine? 싸구려 상업? [음악 연주] 랄 피하고 PARKER : 나쁜 놈들. [하하] 데이비드 J. 마란 : 그 다음이다 그래서 어떤 암호화에서 엿볼 이런것이 될 수 있습니다 작년부터 마신다. 그래서 빠른을 발표합니다. 이 무료 인 경우 금요일 오후 1시 15분에서와 것 CS50 우리와 함께 좋아 점심, 여기에이 URL로 향한다. 우선 첫째 평소 역할이 이루어집니다. 그러나 시간이 지남에 따라, 우리는 확인합니다 참여하고 싶은 대부분의 사람 예약이 많다는 수 있습니다. 그래서 문자열. 우리는 Zamyla-- 누구를 당신은 지금 가장 가능성이 만났다 문제 설정에서 1-- 누구 이름은 따라서 철자가. 그리고 당신은 그녀의 이름을 입력한다고 가정 야 컴퓨터 프로그램에 getString는 같은 것을 사용. 검색하기 위해 그 키 입력 방법 우리는을 나타내는 가야합니까 문자열, 단어, 문단, 또는이 여기 같은 여러 문자? 우리는에 대해 지난 시간에 이야기 정수와 문제 그 정수 오버 플로우가 발생할 및 부동 소수점 값 문제가 정밀도 내에서 발생한다. 문자열로, 우리는 적어도 좀 더 유연성을 strings-- 때문에 단지 현실을 전 세계에 꽤 임의의 길이 될 수 있습니다. 꽤 짧은 꽤 긴. 그러나 그렇다하더라도, 우리는에 갈거야 찾아 컴퓨터가 때로는 수 메모리가 부족하고 심지어 실행 충분히 큰 문자열을 저장합니다. 하지만 지금의 시각화하기 시작하자 이 상자에 뭔가 같은 문자열 여기. 따라서 여섯 예컨대 박스, 이들 각각 문자 또는 대표 "문자를." C-H--r--입니다입니다 - 그래서 "문자는"리콜 C.에 내장 된 데이터 유형 중 하나 그리고 어떤 좋은 것은 당신이 사용할 수 있다는 것입니다 그런 종류의 빌딩 블록으로, 퍼즐 조각, 당신이 경우에,을 형성 우리는 계속해서 더 큰 데이터 유형 "문자열입니다."호출 자, 생각에 대한 유용 이런 식으로 문자열 같은 것들에 대한? 글쎄, 우리가 할 수있는 것이 밝혀 실제로이 구조를 활용 실제로 개별 문자에 액세스합니다 매우 간단한 방법입니다. 내가 가서 만들거야 라는 파일 "stringzero.c" 당신이 원하는 무엇이든하지만 당신은 그것을 호출 할 수 있습니다. 그리고 코스의 웹 사이트에 이미 사전에이 예를 들어, 그래서 당신은 할 필요가 없습니다 모든 것을 입력합니다. 그리고 앞서 갈거야 먼저 주요 int 무효을한다. 그리고 몇 일 이내에, 우리는 떨어져 애타게 시작합니다 그 이유는 무엇 무효가 여기에있다 메인 옆에 등 INT. 하지만 지금의 계속하자 복사 것을 붙여 넣습니다. 나는 S라는 문자열을 선언 할거야. 그리고 난에서 복귀 할거야 에서 어떤 사용자 유형을있는 getString. 이것은 간단하게 될 것입니다 프로그램, 지시 사항, 그냥 맹목적으로 갈거야 사용자가 알고있는 것으로 기대 무엇을 간단하게하기 위해해야​​ 할 일. 지금은 루프를 가지고거야. 그리고 내를위한 루프의 내부에 난 나는 제로를 가져옵니다 INT해야 할 것. 그리고 난, 다시, 그냥 관례 계산을위한 인덱스 변수 하지만 내가 원하는대로이 호출 할 수 있습니다. 난 내가 잘 than-- 이하 할거야 Zamyla의 이름은 여섯 자 이내입니다. 그래서 하드에 갈거야 지금은이 코드가. 그리고 난 + +. 그리고 지금이 곱슬 내부 중괄호 나는, printf의를 할거야 나는 일을 인쇄하려면 한 번에 문자입니다. 그래서위한 %의 C를 사용하려고 해요 아마도 처음. 그리고 나서 각을 인쇄하려면 한 줄에 문자가 있습니다. 그래서 넣어 갈거야 작은 백 슬래시 N이. 닫기 인용. 그리고 지금 내가 여기서 뭔가를하고 싶어요. 나는 밖으로 인쇄 할 문자열에서 특정 문자, 초, 나는 반복 해요로 최대 6에 0에서. 즉, 내가 원하는 S의 i 번째 문자를 인쇄 할 수 있습니다. 지금은이 문제를 어떻게 할 수 있습니까? 그럼 많은 상자처럼 여기이 표현, 가지, 복싱의 개념을 연상 글자, 당신은 마찬가지로 그렇게 할 수 구문 단순히 지정하여 C에서, 나는 문자 i 번째의의의를 인쇄 할 수 있습니다. 대괄호를 사용하여 컴퓨터 키보드 US 키보드에 있는지 일반적으로 리턴 키 위. 그래서 이것은 매우 옳지 않다 아직, 당신은 눈치 챘을 것이다있다. 하지만 난 가지에 갈거야 맹목적으로 여기 점진. 그리고 문자열 공을 할거야. 나는이 작업을 수행하기 전에 그러나,의가 있는지 확인하자 우리 몇 가지 일반적인 실수를 예상 할 수 있습니다. 이 컴파일하는거야? 아니, 사물의 전체 무리를 실종 해요. 도서관 들었어. 그래서 헤더 파일되는 여기서 추가 할 수 있습니다? 그래. 청중 : 당신이 필요로하는 표준 I / O [INAUDIBLE] 데이비드 J. 마란 : 우수. 그래서 표준 I / O가 필요합니다. 무엇 때문에 목적은 I 표준 I / O를 하시겠습니까? printf의하십시오. 그래서 stdio.h에 포함되어 있습니다. 그리고 당신은 또한 내가 포함하는 것이 제안 어떤 이유로 CS50 라이브러리? 문자열을해야합니다. 그래서 우리는 볼 것이다 무엇 CS50의 라이브러리를하고있다 문자열이 개념을 만들 수 있습니다. 하지만 지금, 당신은 생각할 수 그것의 실제의 데이터 유형. 그래서 조금 정리 될 것으로 보인다. 그리고 지금은 앞서 갈거야 실제로 문자열 공을 다하겠습니다. 컴파일 된. 그래서 좋아. 그래서 우리가 할 수있는 확대 나 보자 ./string0 더 밀접하게 무슨 일이 일어나고 있는지를 참조하십시오. 입력합니다. Z는-A-M은-Y는-L-A는 입력합니다. 그리고 우리는 Zamyla의 이름으로 인쇄했습니다. 그래서 꽤 좋다. 그래서 지금의 가서하자 이 프로그램을 다시 실행 및 Daven의 전체 이름을 입력합니다. 깜짝 놀람. 입력합니다. 흠. 우리는 Daven의 인쇄되지 않은 제대로 전체 이름. 지금이에서 명백해야한다 때문에 무엇 회고, 종류의 바보 디자인 결정? 그래, 난 하드 코드 내 루프의 여섯 내부. 지금은했다 만 있기 때문에 나는 Zamyla의 이름을 알고 여섯 글자로 가고 있었다. 그러나 반드시이 없습니다 일반적인 솔루션입니다. 알고 보니 그래서 우리는 동적으로 수 문자열의 길이를 알아낼 strlen 함수라는 함수를 호출하여. 다시 말하지만, 의도적으로 간결 단지라는 이름의 입력하는 것이 더 편리합니다. 하지만 그와 동의어이다 문자열의 길이가 점점. 내 단말기로 다시 갈거야 윈도우와 컴파일러를 다시 실행합니다. 하지만 내게 소리입니다. 암시 적으로 라이브러리 함수를 선언 const-- INT 부호없는 유형으로 strlen 무슨 말이야. 완전히. 그래서, 특히 같은 눈이 침침 이 같은 오류 메시지 포커스 솔직히 처음 몇 단어. 우리는 문제에 알고 라인 (8), 여기에 표시된대로. 그리고 그것은 문자열 0.C에 있습니다. 암시 적 선언 라이브러리 함수 나 strlen. 그래서 일반적으로 것입니다 에러 메시지의 패턴 일. 암시 적으로 뭔가를 선언. 그래서 짧은, I가 보였던 것을 가지고 여기, 8 라인과 관련하여 수행 한. 수 있습니다 어떤 해결책도 될 수 당신은 자신의 strlen 사용한 적이 있다면? 청중 : 다른 라이브러리의 일부? 데이비드 J. 마란 : 부품 다른 라이브러리의. 이 선언 그래서, 말하자면. 그것은 일부 파일에 언급 된 STDIO.H 및 CS50.h. 이외의 어디까지가 정의? 솔직히 말해서, 당신이 중 하나는을에이 당신의 머리 위로 떨어져이 사실을 알고, 또는 당신이 구글과 알아보십시오. 아니면이 사실을 알고, 나는 CS50에 연 단말 프로그램을하는 어플라이언스 단지 큰 전체 화면 버전입니다 무슨 일이 gedit에서의 창의 맨 아래에 있습니다. 그리고이 있다고 밝혀 라는 유사 간결 명령 당신이 입력하는 경우 설명서, 대한 사람 와 함수의 이름, Enter 키를 누르십시오 당신은 매우 다시 연락 할게 비밀 문서. 그것은 그 일반적으로 그냥 텍스트입니다 이 같은 작은 선물을 보인다. 그것은 조금 압도 첫눈에. 하지만 솔직히 나는 갈거야 내 눈이 흐릿하게 단 부분에 초점 나는 순간에 대한 관심. 어떤이있다. 어떤 구조적으로 보이는 뭔가 내가 알고 있어요. 실제로 맨 페이지, 그래서 말하자면, 당신을 말할 것이다 무엇에 헤더는 함수 파일 같은 strlen 함수가 정의됩니다. 그래서 gedit를 이제 다시 갈거야. 내가 먼저 갈거야 및 여기에 # 포함에 추가 하고 파일을 저장합니다. 나는으로 화면을 지울거야 제어 L 당신이 궁금했는데합니다. 그리고 메이크업을 다시 실행하려고 해요 string.0,이 시간을 컴파일합니다. ./string.0 Zamyla. 그 날 가자 일 듯 앞서와 데븐 포트로를 다시 실행하십시오. 입력합니다. 그리고 그 역시 작동하는 것 같았다. 그래서 우리는이보다 조금 더 잘 할 수 하지만, 우리는 정리 정돈을 시작할 수 있습니다 조금입니다. 그리고 사실에 갈거야 이제 한 가지를 소개합니다. 내가 먼저 갈거야 및 다른 파일이 저장합니다. 그리고 내가 전화하려고 해요 이 파일 string1.c 단지 코드와 일치합니다 온라인 찾을 수있을 것이다. 그리고의가에 집중하자 똑같은 코드. 그것은 내가 지금 밝혀 복용하고 종류 부여 사실을 내 노트북​​이, 차례로, CS50 어플라이언스 많은 메모리, 많이 가지고 RAM, 공간의 바이트 많은 있는 나는 문자열을 저장할 수 있습니다. 그러나 현실은 나는 긴 입력 한 경우 충분히, 충분히 키 입력, 나는 이론 유형의 수 더 많은 문자 내 컴퓨터가 아닌 물리적 메모리를 가지고있다. 그리고 이것은 문제가있다. 많은 INT 수 있습니다 만 같은 이론적으로, 너무 높은 카운트 당신은 너무 많은 문자를 벼락 공부를 할 수 있습니다 컴퓨터의 RAM 또는 무작위로 액세스 메모리. 그래서 더 기대했다 이러한 문제에도 그것은 드문 일 수 있습니다하지만 코너의 경우, 말하자면. 자주 발생하지 않는다 일어날 수 있습니다. 이 발생하고 있다면 난 몰라 예측하고 그것을위한 프로그램, 내 프로그램은 무엇을 알고 자 할 수 있습니다. , 무엇을 재부팅, 동결 만요. 뭔가 일어날 것으로 예상. 그래서 내가 할거야 지금, 이제부터는 정말, 지금까지 맹목적으로 I 전에이다 의 같은 변수를 사용하는 의 리턴 값 할당 된 getstring를 같은 몇 가지 다른 기능 나는 있는지 확인하려고 해요 것으로 그 값은 유효합니다. 그래서 내가 읽은에서만 알고 getstring를위한 CS50의 문서, 궁극적으로 우리는 당신을하겠다, 그 getstring를 특수 기호를 반환 모두 NULL, N-U-L-L라고 뭔가 잘못되면, 모자. 그래서 일반적으로, 그것은 문자열을 반환합니다. 그러나 N-U-L-전 ...를 반환, 그렇지 않으면 경우 우리는 결국 정말 그 무엇을 볼 수 있습니다 이 단지 수단을 의미 하든지 뭔가 나쁜 일이. 지금이 훨씬 스크래치처럼, 의미, 나는 C 여기에 조건을 확인할 수 있습니다 의이 같은 NULL을하지 않습니다 경우. 당신은 전에 본 적이 없다 경우에 따라서, 그냥 뜻이 동일하지 않습니다. 그래서 반대입니다 리콜 동일한 같음, 하나의 다른 할당하다, 같다. 의 동일하지 않는 경우에 따라서 NULL 만 다음을 수행 나는이 코드 줄을 실행합니다. 따라서 환언하면, 나는 맹목적으로 다이빙하기 전에 그리고 반복하기 시작 (S) 위에, 그것을 처리 그것의 순서 인 것처럼 자, 내가 먼저 확인하는거야 잠깐, 확실히 아니다입니다 이 특별한 값과 동일, NULL? 이 경우, 나쁜 일이 일어날 수 있기 때문이다. 그리고 지금은 나쁜 일을 가정 당신의 프로그램이 충돌 수단이 일어나고, 당신은 반드시 복구 할 수 없습니다. 그래서 솔직히, 그것은 추악한 보인다. 그것은 가지에 눈에 지금 혼란 있어요. 하지만이 더 될 것입니다 오래 전에 잘 알고. 하지만 제안하는거야 이제 한 다른 개선. 즉, 정확성 할 수있는 개선입니다. 내 프로그램이 있기 때문에, 더욱 정확 드문 경우에 해당 메모리가 부족합니다 , 나는 그것을 처리 할 존재, 난 그냥 아무것도하지 않는 것입니다. 나는 적어도 충돌하지 않습니다. 그러나 여기서 최종 버전을 수행 할 수 있습니다. 그리고 파일은 string2.c을했다. 그 붙여거야 단지 잠시 동안 동일한 코드, 이걸 강조거야 잠시 여기 라인 11. 지금 현실은 스마트 컴파일러입니다 연타는 우리를 위해이 문제를 해결할 수 있었던 것처럼 뒤에서 우리가 지금까지 알지 못하고. 그러나 이제 이것에 대해 생각해 봅시다 근본적으로 문제가있는 디자인으로. 코드 행은 물론이다 말을, 어떤 변수 내가 0을 초기화합니다. 그것은 매우 간단합니다. 그리고 다시이 무엇인가 문, 여기, 내가하고, + +? 우리는 전에 본 있지만, 한 정말 그것에 대해 얘기하지 않았다. 청중 : 난을 증가. 데이비드 J. 마란 : 증가 나. 을 통해 모든 반복에 따라서 이 루프, 매 사이클마다, 당신은 하나 난을 증가하고 있습니다. 그래서 더 큰, 더 큰 가져오고 루프가 종료 될 때까지 더 큰. 어떻게 종료합니까? 그럼이 중간에있다 우리가 전에 사용했던 상태. 당신은 볼과 한 P 세트에서 연습. 그러나이 말은 무엇인가? 그래서 다음 루프를 수행 오랫동안 나는 무엇보다이기 때문에? 청중 : 문자열의 길이입니다. 데이비드 J. 마란 : 문자열의 길이입니다. 그래서 꽤 깨끗하게 변환 그런 의미에서 영어로. 이제 문제는 매번 그 I 이론적으로이 루프를 반복, 나는이 질문을 부탁 해요. 난의의 문자열 길이보다 작은가요? 난의의 문자열 길이보다 작은가요? 지금은 각 반복에 변화? 때문이다. + +의 때문입니다. 그래서 반복 할 때마다 내가 더 큰지고 있습니다. 그러나입니다들 커지고, 또는 작은, 또는 전혀 변경? 번호 디자인면, 하나의 축에 따라서 어떤 따라 우리는 코드를 평가하려고 클래스에서,이 가지 바보 같은 느낌. 말 그대로 아르처럼, 모든 반복에 이 루프의 요청 다시 같은 빌어 먹을 질문 다시, 다시, 문자 그대로 그것은 절대로 변하지 않을된다. 나는의 감동 아니에요 적어도 경우 (S)의 내용을 변경하려고. 그래서 나는이보다 조금 더 잘 할 수 있습니다. 그리고 내가 할거야 것은 아니다 단 하나의 i 변수를 선언 하지만 두 번째 변수는 내가 임의로거야 하지만 통상적으로, N을 호출합니다. n에 동일하게 할당 의 문자열의 길이입니다. 그리고 여기, 내가 갈거야 그래서 영리한 최적화를 수행 하루의 끝에서, 그 말하자면 더 이상 올바른 또는 덜 정확하지 않습니다 이전보다. 그러나 더 나은 디자인입니다. 사실 내가 사용하고 있음 적은 시간, 적은 CPU 사이클, 그래서 같은 대답을, 말하자면 질문하지만, 한 번만. 이 일반에 대한 질문 개선의 원칙, 프로그램의 효율성은 말할? 그래? 관객 : 왜 당신을 [INAUDIBLE]를 사용하세요? 데이비드 J. 마란 : 좋은 질문입니다. 그럼 왜 우리는 말에 + +를 배치해야합니까 I 대신 I의 처음? 이 경우에는 기능적으로 영향을주지는 않습니다. 그리고 일반적으로 나는 경향이있다 후위 연산자를 사용 조금 더 명확 같은 걸 너무 작업이 일어나는 경우에. 그 익숙하지 않은 들어, 다른이 당신이 ++ 나는 할 수있다 문. 이러한 기능적 아르 이 경우의 등가 다른 아무것도 있기 때문에 그 점진 주변. 하지만 당신은 가지고 올 수 케이스 및 코드 라인 하는 그 차이를 만든다. 그래서 일반적으로, 우리는하지 않습니다 심지어이 일에 대해 이야기. 솔직히 때문에, 당신을 만든다 코드 섹시, 그​​리고 종류의 야바위꾼, 적은 문자. 하지만 현실은, 그것은 많이 힘들어합니다 나는 내 마음을 포장도에 대한 생각 가끔 주위, 작업의 순서. 여담으로, 경우에 따라서 정말이 싫어 심지어이 가지 섹시하지만 찾고, 당신은 또한 할 수있는 내가 + = 1, 어떤의 모양은 좋지 버전입니다 후위 점진에 대한 같은 생각. 나는이 당신을 말한다 그것의 재미를해야한다, 하지만 당신은 같은 코드를보고 올 것이다 오래 전에 아름다운 뭔가. [웃음] 데이비드 J. 마란 : 오른쪽? 그래. 중간에 질문. 청중 : 당신은 정수 n을 말을해야합니까? 데이비드 J. 마란 : 당신이 할 정수 n을 말할 필요가 없습니다. 우리는 이미 INT 말했다 때문에 그래서, 당신은 다시 말할 필요가 없습니다. 캐치 N은 가지고 있다는 것입니다 I와 같은 데이터 타입이어야. 그래서 여기에 그냥 편리합니다. 그래. 청중 : 당신은을 통해 갈 수 인쇄 문자의 브래킷 내가 다시? 데이비드 J. 마란 : 물론입니다. 그래서 %의 C, 마지막에서 호출 시간은 단지 자리 표시 자입니다. 그것은 여기에 문자를 넣어 의미한다. 백 슬래시 N, 물론, 단지 수단은 여기에 줄 바꿈을했습니다. , 지금, 잎 있도록 새 구문이 조각. 그리고 이것은 그대로 잡아, 말하는 문자열의 전화를 가서 그 i 번째 문자, 말하자면. 그리고 i 번째 문자를 자꾸 이 때문에 루프의 각 반복에 우리가 인쇄하는 것처럼입니다 아웃, 첫번째의 브래킷 공, 프로그래머는 말할 수있다. 다음의 다음, 브래킷 일이야 브래킷이 후, 다음 3, 4. 그러나 물론 그것은 변수입니다, 그래서 난 그냥 내가 그것을 표현한다. 키,하지만 실현하는 것입니다, 당신은 적이 없다 특히 이 세계에 익숙해 질하고 프로그래밍, 우리 모두의 꼭, 0부터 계산하는 것 이제 0부터 계산 시작합니다. 때문에 문자열의 첫 번째 문자, Zamyla에서 Z는 좋든 나쁘입니다 위치 숫자 0에서 사는 것. 좋아, 내가 데려 오게 여기 Zamyla에 우리 다시 정말 무슨 일이야 참조 후드 아래에. 그래서 형 변환의이 개념이있다. 당신은 실제로있을 수 있습니다 이미 경기 어쩌면 해커 P의 판 하나를 설정합니다. 그러나 형 변환 단지를 말합니다 C에서 능력과 다른 언어 다른 하나의 데이터 유형을 변환하는 방법. 이제 우리는이 방법을 볼 수 있습니다 꽤 직설적? 그래서 시작이, 리콜 영어의 알파벳입니다. 그리고 문맥에서, 기억 같은 주 전 ASCII이다. 미국 표준 코드 정보 교환. 어느 단지 정말로 긴 방법입니다 편지에서 매핑을 말하는 숫자, 숫자에서 문자로. 그래서 여기 M, 점 점을 통해 점, 선까지, 리콜, 최대의 진수 65. 그리고 우리는 이야기하지 않았다 명시 적으로 이것에 대해, 그러나 확실하게 유사한있다 소문자를위한 숫자. 그리고 실제로,이 있습니다. 세계는 몇 년 결정 전 그 작은, 소문자, 97가 될 것입니다. 그리고 작은 B는 것입니다 등 98 등을 할 수 있습니다. 그리고 다른 키에 대한 키보드는있다 비트의 유사한 패턴이 될 것. 또는 동등 진수. 그래서 손을 질문, 다음, 우리는 어떻게 할 수 있습니다 실제로 후드 아래에이 보여? 그래서 나는 다시의 gedit에 가서거야. 그리고 오히려 형보다 처음부터이 일, 내가 먼저 갈거야 및 뭔가를 열 오늘날의 코드에서 ASCII 제로라고. 그리고 ASCII 제로는 다음과 같습니다. 그럼이 문제를 우리의 마음을 포장 할 수 있습니다. 그래서 첫째, 내가 댓글을 달았습니다 좋은 코드. 그것은 말 그대로 때문에 무엇을 기대하라고 말하고, 대문자에 대한 매핑을 표시합니다. 지금은 확실히 모르는 I 뜻으로, 그래서 추론 할 수 있습니다. 영어에서, 어쩌면 다소 일 techie 영어, 어떤 라인 (18)이 나타나지 않습니다 우리를 위해 일을해야 하는가? 그냥 18 라인. 그것은 무엇을 유도이야? 무엇 여기 킥오프거야? 청중 : 루프. 데이비드 J. 마란 : 루프. 그리고 얼마나 많은 시간이다 반복 할 것인가? 청중 : [목소리를 개재] 여섯 번. 데이비드 J. 마란 : 아니 여섯 번. 관객 : 26 번. 데이비드 J. 마란 : 26 번. 네, 죄송합니다. 26 번. 왜? 글쎄, 그건 좀 이상하지만, 나는 65부터 계산 시작했습니다. 어떤 이상한, 그러나 잘못이 아니다. 그것은 말 당 나쁘지 않다. 그리고 내가하고있어 만 왜냐하면, 예를 들면, 나는 가지 기대 해요 그 자본은 65이었다. 지금이없는 가장 우아한 방법은 하드 코드 가지로,이 작업을 수행하는 비의 값이 아무도 없다 지금까지 기억 할 것으로 예상된다. 하지만 지금 난 것을 알 수 65 플러스 (26)이를 하 고입니다. 분명히 나는​​ 심지어 원하지 않기 때문에 내 머리에 연산을 수행 할 수 있습니다. 그래서 컴파일러가 작업을 수행 할 수 있습니다. 하지만 각 루프에 각각의 반복 루프, 나는 내가이 증가하고 있습니다. 그래서 지금이 조금 애매 보인다. 그러나 우리는 기본 구성이 있어야합니다 와 블록이를 이해한다. % C는 문자 단지 자리 표시 자입니다. %의 난 INT에 대한 자리 표시 자입니다. 그리고 이것을 사용하는 것이 밝혀 새 구문이 괄호 때문에 말하고, 데이터 형식 때문에하기 괄호 안의, 나는 치료하는 컴파일러를 강제 할 수 못 정수이지만, 문자 등. 따라서 나에게 문자를 표시 그 번호의 것과 같습니다. 지금 여기로,이 코드 거의 동일하다. 난 그냥 확인하고 싶었 슈퍼 명시 적 사실 나는 97에서 시작하는 걸, 이는 소문자된다. 최대 26 개 이상의 문자를 통해서 전달됩니다. 그리고 나는 다시 하는거죠 해요 내가 캐스팅, 말하자면. 아니면 형 변환 나는, 말하자면. 문자에 대한 INT에서. 그래서 최종 결과가 될 것입니다, 솔직히 정보를 우리는 이미 알고있다. 내가 만들려고 해요 아스키 - 공은 C를 점하지 dot--. 공지 사항, 당신은 아마 것을 만들어 실수를 그냥 실수했던 것처럼. 아스키 - 공을 확인합니다. 지금은 ./ascii-0을거야. 나는 확대, 불행하게도 것 이 화면을 스크롤 할 것입니다. 그러나 우리는 전체 차트 위치를 참조 97에 대한지도, 98 나지도, 우리는 더 위로 스크롤하면 는 물론, 65로 매핑한다. 그래서이 말을 아니라 우리는 무엇을 설교했습니다, 이 등가가 존재이다 실제로 사실 케이스. 그래서이 빠르게 수정. 내가 아스키 - 1.C를 열겠습니다. 그리고 정렬이 영리를 알 의이 명확히. 이 아스키 - 1.C이며, 이 미친 것을 알 수 있습니다. 그리고 이것은 정말 마음에 도달 무슨 컴퓨터가하고있다. 심지어 우리 인간이하고자하지만 나는 편지의 관점에서 계산하지 내가 생각하기 시작하지, 모든 권리 b를, 물리적 객체를 계산하는 사람들을 사용합니다. 당신은 확실히 내가 할 수 있다는 말할 수있다 라는 몇 가지 변수를 초기화 c-- 하지만이 증거를 없애라고 수 있었다 그래서 C는 자본 A.로 초기화된다 하루의 끝에서, 컴퓨터 때문에 당신이 저장하는지 상관하지 않는다, 그것은 단지 당신이 원하는 방법에 관심 그 정보를 제공합니다. 당신은 컴퓨터에 원하는 어떻게 비트의 패턴을 해석? 그래서이 뭔가 내가 아니다 일반적으로 일을 추천 할 것입니다. 그것은 정말 그냥 예입니다 전달 당신은 절대적으로 수 문자의 정수를 초기화합니다. 때문에 아래에 문자의 후드 물론, 0-255 단지 숫자입니다. 그래서 당신은 확실히 할 수 INT의 내부에 넣어. 그리고 어떤이도 됩니다 보여줍니다 우리가 하나에서 변환 할 수 있습니다 여기에, 다른 입력 궁극적으로 같은 일을 인쇄. 그리고 사실, 이것은 내가 online-- 해결됩니다 여기에 다시, 이런 말을했었다. 내가 온라인이 최대를 청소합시다, 우리는거야 필요에 따라 온라인 연습에 참조 어떤이 예정되었다. 확인을 클릭합니다. 이제 포함 그래서 마지막 예 의와 B의 다음 우리는거야 한 단계 물건을 차지합니다. 의와 b 년대와 너무 총액 C의의 와 동등한 그,하자 여기,이 예제를 보도록하자. 또 다른 코드 예제. 우리는거야 하나를 열 것 이미 만들어진, 우리는 이렇게 를 입력 할 필요가 없습니다 모두 처음부터 아웃. 그리고 기대에주의 우리는 여러 헤더를 사용하는 인간에 ​​파일, 우리의 새로운 친구, string.h. 지금이 처음에 보이는 눈 조금 애매. 하지만 우리가 추론 할 수없는 경우 보자 여기에 무슨 일이 일어나고 있는지를 통해. 우선 사용자로부터 문자열을 얻을, 나는 변수에 문자열을 넣어 라고들. 이전에 복사하여 붙여 넣기를. 라인 (22), 나는 분명히 해요 정확히 어떤 일을 내가 반복하고있어, 잠시 전에했던 S의 문자를 통해. 그리고 여기에 새로운 트릭이 사용하는 문자열 길이, 마이너 최적화 N의 문자열 길이를 저장, 오히려 다시 나 strlen 호출하는 것보다, 다시, 다시. 그리고 그냥 내가 n보다 작다는 것을 검사합니다. 지금 여기 일이 얻을 조금 흥미 롭군요. 그러나 그것은 단지 응용 프로그램의 이 같은 새로운 아이디어의. 영어가하는 무엇 내가 표현의 브래킷? 대상 : 각 계산 문자 [INAUDIBLE]. 데이비드 J. 마란 : 각 문자를 계산합니다. 그리고 더 간결하게, 의 브래킷 어떻게 표현? 겠습니까 당신은 말한다. 이 자리에 당신을 넣어하지 않습니다. 청중 : 글쎄 ... 데이비드 J. 마란은 : 말씀이 있다면 .. 바로 그래서 경우 문자열 starts-- Zamyla입니다 청중 : --you과 거래 문자가 separately-- 데이비드 J. 마란 : 좋은. 정확히. 각 괄호 표기를 할 수 있습니다 개별적으로 각각의 문자에 액세스하려면 그래서의 브래킷 0을 될 것입니다 문자열의 첫 번째 문자. 의 브라켓 하나가 될 것입니다 두 번째, 세 번째, 그리고. 그래서 질문 I 부탁 해요, 여기,이 상태에서 무엇입니까? S의 큰의 i 번째 문자입니다 보다 같거나 소문자로? 그리고 여기, 무엇을 의미 하는가 이중 앰퍼샌드와? 청중 (TOGETHER) : 그리고. 데이비드 J. 마란 : 그리고. 그것은이 단지 해당합니다. 그리고 C에 키워드 아니다, 그럴 필요 사용, 귀찮게, 앰퍼샌드 앰퍼샌드. 그리고 이것은 역으로 요구하고있다 문자 i 번째의의의 이하가 z는 소문자로? 그리고 또, 여기 어디 있어요 기본을 이해 의 구현 컴퓨터가 의미가 있습니다. 내가 가진 경우에도, 그 주목 도트 도트 도트 저기, 소문자 Z까지처럼 보인다 최대 최대에 97에서 모든 연속 값. 그리고 대문자에 대한 동일한 65에서 시작. 그래서 테이크 아웃, 다음, 즉, 영어에 당신이 설명하는 방법 24는 무엇을하고 있는지 라인? 그래? 대상 : 24에 그것은 볼 수 확인 것 여부를 각 문자는 소문자입니다. 데이비드 J. 마란 : 그것은 여부를 확인있어 각 문자는 소문자입니다. 그래서 더욱 간결하다 의 소문자의 i 번째 문자? 그게 우리가있어 전부 논리적으로 여기에 표현, 작은 비밀스럽게하지만, 궁극적으로 꽤 직설적. 문자가 소문자 i 번째의의의인가? 그렇다면, 여기 어디 일이다 조금 마음이 굽힘 얻을 잠시만, 그렇다면 이동 앞서와 문자를 인쇄 할 수 있습니다. 그래서 이것은 단지 자리 표시 자입니다, 하지만 어떤 캐릭터? 왜의 브래킷 내가 뭐하는 거지 마이너스 여기이 식? 자, 여기 패턴을 알 수 있습니다. 실제 숫자는 그렇게 중요하지 않습니다. 그러나 97 인 것을 알 수 얼마나 멀리 떨어져 65? 대상 : 32. 데이비드 J. 마란 : 32. 얼마나 멀리 66에서 98? 대상 : 32. 데이비드 J. 마란 : 큰 C에서 작은 C? 32. 그래서 32 홉 (hop)을 거기에 다른 문자를 하나입니다. 그래서 솔직히 나는, 수 그이를 단순화합니다. 하지만 그때 가지 하드 코딩 해요 이러한 낮은 수준의 이해 어떤 독자가 적없는 그 이해하는 것. 그래서 나는 그것을로 일반화하는거야, I 알고있는 소문자가 더 크다. I는 대문자가 알고 작은 값, 아이러니하게도. 하지만이 효과적으로 동일합니다 의 브래킷 전에서 32을 빼 말. 이러한 문맥에 따라서 문자, 문자의 경우 소문자 될 일이 , 나는 32 빼기, 그게 무슨 효과가 않습니다, 수학적으로,에는 소문자? 청중 : Capitalizes-- 데이비드 J. 마란 : 그것을 대문자로. 그리고 실제로이 왜 우리의 프로그램은 제로 투자라고합니다. 이 프로그램 중 하나 문자를 대문자로, 이 경우 검사 후에 실제로 소문자. 그렇지 않으면, 라인 (30)에, 나는 경우 어떻게해야합니까 내가 걸 소문자 아니다 특정에보고 루프의 반복. 그냥 인쇄. 그래서 물건을 변경하지 마십시오 그조차 소문자 아니다. 에 자신을 제한 작은 z까지 약간. 지금 이것은 상당히 비밀이다. 하지만 하루의 끝에서, 본 어떻게 한 번 시간에,이다 일 구현했다. 내가 대신 투자 열면 일, 오 하나님 감사합니다. 함수가있다 상단에라는 그 수 우리가했던 모든 것을 할 매우 낮은 수준에서. 지금 상단 재미있다 이 파일에서 선언되기 때문에, 당신 만이 알 것입니다 설명서를 확인하여, 또는 클래스에, 말, 말되는 그것은라는 파일 ctype.h에 존재합니다. 그래서 이것은 우리의 또 다른 새로운 친구입니다. 그리고 상단에 정확히 수행하기 그 이름이 암시 무엇. 당신은 사이 인수로 전달할 수 있습니다 이러한 괄호 일부 문자. 나는 i 번째 문자를 전달하려고 해요 우리의 멋진 새 표기법을 사용하여이야 대괄호를 포함. 그리고 추측을 반환 무엇인가 상단에 값 분명히 것 할 수? 대문자. 대문자. 그래서 소문자에 전달하면, 희망, 상단에의 정의에 의해, 그것은 반환 것 그렇지 않으면 대문자 A., 그것은에서 소문자가 아니라면 우선, 난 그냥 그것을 밖으로 인쇄 할 수 있습니다. 그리고 실제로, 알 여기 두번째 친구. 다만 상단 존재로, 하지만, 낮은 인 실제로 나에게 그 질문에 응답합니다. 이제이 일을 쓴 누구든지 10 초 전 년, 당신이 뭘 알아? 상단에 구현하고있다 다음과 같은 코드를 사용하여 내립니다. 그러나 다시, 일관성 멀리 추상화의이 아이디어, 종류의, 낮은 수준 구현 세부 사항. 그리고 사람의 어깨에 서 누가 함수를 사용하여, 우리 앞에왔다 상단에 추천하고, 낮은 인 놀라 울 정도로 멋지게 아르 그들이 무슨 말을하는 이름입니다 멋진 패러다임을 채택한다. 이제, 내가 읽는다면 밝혀 에 대한 매뉴얼 페이지 상부에, 말 나는 다른 무언가를 배운다. 그래서 사람 TOUPPER. 그것은 조금 압도. 그러나 예고, 여기의 언급이다 내가 사용한다 헤더 파일. 옆으로,이 때문에로 오해의 소지가 함수 정수 대신 문자를 사용 오류 검사의 이유. 그러나 우리는 아마도 올 거 다시 그까지 앞으로. 그러나 위 회심에, 여기에 주목 가능하면 문자 c를 대문자로. 그래서 매우 간단합니다. 그리고 지금의 좀 더 구체적으로 보자. 의이 부분을 살펴 보자 반환 값에서 매뉴얼 페이지를 참조하십시오. 반환되는 값은 것입니다 변환 된 편지. 또는 C, 만약 변환 , 불가능했다 여기서 c는 일본어 입력된다. 어떤 난에서, 여기에서 알 상단에 대한 인수. 그래서 이것의 테이크 아웃은 무엇입니까? 반환되는 값은 것입니다 변환 된 편지, 또는 c, 원래 문자, 경우 변환은 불가능했다. 무엇을 개선 그러므로 나는 할 수있다 내 코드의 디자인을 만들? 그래? 청중 : 당신은 다른 사람을 제거 할 수 있습니다. 데이비드 J. 마란 : 난 할 수있어 else 문을 제거, 뿐 아니라 else 문. 청중 : 당신은 [들리지 제거 할 수 있습니다. 데이비드 J. 마란 : 난 할 수있어 전체 포크를 제거 도로에, 다른 경우 전부. 그래서 참, 내가 열 수 있습니다 이것의 최종 버전, 경우-2를 활용하는 방법과 눈에 띄지 당신은 섹시 코드는 이제 점점 것이다, 점에서 좀 줄어들 것 7 ~ 그래서 그냥 네 라인, 내가 의도 한 기능 단순히 상단에 호출하여, 의 브래킷 난, 인쇄 전달 밖으로 자리 표시 자 % 코팅과, 특정 문자. 지금 틀림없이, 버그가 있습니다, 또는 버그 적어도 위험 이 프로그램. 그래서 그냥 와서 이전 테이크 아웃에, 나는 아마도 무엇을에서해야 이 프로그램은 좀 더 견고하게하기 위해, 방법이 없습니다 그래서 그것은 할 수 심지어 드문 경우에, 충돌? 청중 :이 NULL이 아니다 있는지 확인합니다. 데이비드 J. 마란 : 그것은 NULL이 아니다 있는지 확인합니다. 그래서 정말이 슈퍼로 만들려면 적절한, 나는 그런 짓을한다 S는 NULL이 아니라면 가서 실행 이 코드 줄, 어떤 내가 할 수있는 그와 같은 들여 쓰기, 다음 친한 괄호에 넣어. 함께이 아이디어의 동점 그래서 좋아. 그래? 청중 : 당신이 사용할 수 대신 while 루프합니까? 데이비드 J. 마란 : 수 나는 할 일 동안 루프를합니까? 청중 : --you가 있는지 확인하려면 당신이 실제로 [들림] 그. 데이비드 J. 마란 : 수 당신은 할 일을하는 동안 사용할 수 있습니까? 짧은 대답, 아니. 당신이하려는거야 또 다른 코너 케이스를 소개합니다. 문자열 길이가 0 인 경우. 예를 들어, 난 그냥 칠 경우 지금 Zamyla를 입력 할 필요없이 입력합니다. 내가 다시 실제 당신을 손에거야 문자열, 우리는 결국 보 겠지만, 즉 제로 문자가 있습니다. 아직 문자열입니다, 그냥 슈퍼 짧다. 그러나 당신이 동안 할 일을 사용하는 경우, 당신은 맹목적으로 갈거야 뭔가를하려고 문자열에 대하여, 아무것도가 않을거야. 청중 : 글쎄, 당신이 그랬다면 할 [INAUDIBLE] 사사 동안 데이비드 J. 마란 : 아 내가 볼, 유지 사용자로부터 문자열을 받고. 그래서 짧은 대답하면 , 그리고 괴롭히는 지킬 수있다 그들에게있어 문자열을 제공합니다 메모리에 들어갈 정도로 짧은. 물론입니다. 난 그냥하지가 선택했다. 그들은 나에게 문자열 I를 제공하지 않을 경우 원하는, 내가 그만 둘거야, 내가 포기하고 있습니다. 그러나 절대적으로, 그 목적을 위해, 당신은 절대적으로 그렇게 할 수 있습니다. 그래서 라이브러리의 헤더 파일이 우리는 지금 여기, 이러한 아르에 익숙. 표준 I / O, CS50.h, string.h, ctype.h, 그리고, 참으로, 다른 사람이있다. 여러분 중 일부는 발견했다 math.h.에서 수학 라이브러리 그러나 나에게, 지금 당신을 소개하자 이 자원이 CS50 직원, 다빈, 롭, 그리고 게이브 특히 함께 넣어했다. 즉, 곧에 연결됩니다 과정의 웹 사이트. 그것은 CS50 참조라고. 당신에게 신속하게 제공 할 다음과 같이 맛이 작동합니다. 나를 reference.cs50.net 가자. 당신은 왼쪽에 볼 수 있습니다 압도적 인 목록을 좌우 C와 함께 기능. 하지만이 순간, 생각이 있다면, 나 strlen 같은 약, 내가 거기를 입력 할 수 있습니다. 이 목록을 필터링 내가 걱정하는 단지 무엇을. 나는 그것을 클릭거야. 그리고 지금에, 왼쪽 당신은 우리가 무슨 희망이 표시됩니다 더 간단 인간이다 방법의 친절한 설명 이 기능이 작동합니다. 문자열의 길이를 반환합니다. 여기 시놉시스, 여기있어 그 방법이야 헤더 파일의 관점에서 그것을 사용 어떤 기능의 관점에서 인수의 관점에서처럼 보인다. 그리고 여기, 반품 문자열의 길이. 하지만 더 편안의 사람들을 위해, 당신은 실제로 더 편안하게 클릭 할 수 있습니다 이 내용 페이지, 지금 변경됩니다 무엇의 기본 값이 될 수 있습니다 당신은 사람이 페이지를 사용하여 얻을. CS50, 환언 참조는 단순화 학생들을위한 직원 설명서 페이지의. 특히, 그 이하 편안 과의 사이 있도록 포장하려고 할 필요가 없습니다 당신의 마음을 주위에 솔직히 일부 상당히 애매한 구문 언젠가 및 문서. 그래서 마음에 계속 일에 와서. 그래서 여기에 다시, Zamyla입니다. 그럼 이제 질문을 물어 보자 좀 더 인간의 접근. 되었습니다 장 덕분에, 더 많은 코끼리를 인쇄 지난 몇 일 동안 논스톱. 우리가 제공 할 수있는 기회를 가질 이들 거리 중 적어도 하나. 우리는 단지 하나의 자원 봉사를 얻을 수 있다면 화면에 그릴까지에 와서. 여기 방법에 대해? 올라 와요. 당신의 이름은 무엇입니까? 알렉스 : 알렉스. 데이비드 J. 마란 : 알렉스. 좋아. 알렉스, 최대 어서. 우리는 볼에 대한있어 당신 여기에서 화면에 필기. 좋아, 만나서 반갑습니다. 알렉스 : 만나서 반가워요. 데이비드 J. 마란 : 좋습니다. 그래서, 슈퍼 간단한 운동. 바로 높지 않다 오늘 코끼리를 얻을. 당신은있는 getString의 역할을하고있다. 그리고 난 당신에게 말할거야 당신이 왔 문자열입니다. 그리고, 당신이 있다고 가정 getstring를 호출하고있다. 그리고 인간은, 나처럼,이 Zamyla, Z-A-M-Y-L-A에 입력했습니다. 그냥 가서에 Zamyla 쓰기 화면 당신은 그것을 얻었다 것처럼 메모리에 어딘가에 저장된다. 몇 일 무슨 떠나 방 괜찮아요 다른 words--는 계속. [웃음] 그래서 Zamyla, 우수. 그래서 지금 생각하면 그, getstring를 다시 호출됩니다. 그러므로, 나는, 당신을 제공 키보드, 다른 이름, 벨린다와 함께. 좋아. 이제 다음 시간에서 getString이다 라고, 나는 게이브 같은를 입력 G-A-B-E. 당신은 정말 취하고있어 심장 랜덤 액세스 메모리. 어떤 모든 것을 끌고있다 완전히 무작위로. 확인을 클릭합니다. [웃음] 알렉스 : 죄송합니다 내 필기 나쁘다. 데이비드 J. 마란 : 아니, 괜찮아요. 어떻게 롭, R-O-B에 대한 정보가 포함되어 있습니다. 확인을 클릭합니다. 좋은. 그래서 나는 당신에게 것입니다 예상하지 않았다 가지 이런 식으로 물건을 배치. 그러나 우리는이 일을 할 수 있습니다. 그래서 당신은 누워에 대해 어떻게 됐어 메모리에 이러한 문자 알아? 즉, 우리는 생각한다면 이 직사각형의 검은 화면 를 나타내는 등 컴퓨터의 RAM 또는 메모리. 그리고 RAM 단지입니다 기억 바이트의 전체 무리, 바이트는 비트의 전체 무리입니다. 그리고 비트는 어떻게 든 아르 일반적으로 구현 어떤 형태로 하드웨어 전기. 그래서의 일종 우리가 얘기했습니다 레이어링 당연한 지금 걸릴 수 있습니다. 당신은 어떻게 했나요 여기서 작성하는 방법 결정 롭 대 게이브 대 Zamyla 대 벨린다? 알렉스 : 난 그냥 그것을했다 당신이 나에게 말했다 것을 주문한다. 데이비드 J. 마란 : 그리고 그게 사실이다. 그러나 당신이 어디를 넣어 적용 벨린다의 이름과 게이브의 이름은? 알렉스 : 아무것도? 데이비드 J. 마란 : [웃음] 그래서 작품을, 괜찮아요. 그래서 컴퓨터는 작은 아르 그것보다 더 질서. 그래서 우리는 거기있어 implement-- 때 때 실제로 우리 그냥 순간은 대한 뭔가를 구현 컴퓨터에있는 getString, Zamyla 꽤 많이 배치 할 수 있습니다 같은 당신이 화면에했다. 그리고주의 키 것입니다 여기에 알렉스가 무슨 짓을했는지, 인 경계 가지가있다 이러한 각각의 단어들 사이, 맞죠? 당신은 작성하지 않은 Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 즉, 어떤 종류의있다 것으로 보인다 경계의, 일종의 임의의 간격 이러한 다양한 단어 사이. 하지만 그 때문에 좋은 우리 인간은 지금 할 수있는 이러한 것을 시각화 네 가지 문자열. 그것은 단지 하나의 시퀀스 아니다 많은 문자. 그래서 컴퓨터, 다음, 한편, Zamyla 같은 문자열이 걸릴 수 있습니다, 그 편지를 각각 넣어 메모리의 바이트 내부. 하지만 그 수는 훨씬 더 큰 것입니다 물론, 여섯 자보다. RAM의 전체 무리가있다. 그래서 이제부터는이 상자의 그리드는 것입니다 어떤 알렉스 단지를 대표하는 화면에 여기 않았다. 그리고 지금, 알렉스, 우리는 당신을 제공 할 수 있습니다 청색 또는 장에서 오렌지 코끼리입니다. 알렉스 : 나는 파란색 코끼리를 취할 것입니다. 데이비드 J. 마란 : 파란색 코끼리. 그래서 큰 박수, 알렉스 여기, 우리가 할 수있는 경우. [박수] 알렉스 : 감사합니다. 데이비드 J. 마란 : 감사합니다. 그래서 테이크 아웃은, 심지어 비록 패턴은 가지 여기, 시간이 지남에 따라 변경 보드에이 있었다 다양한 캐릭터 간의 경계 알렉스는 우리에게있어 그. 이제 컴퓨터, 솔직히, 같은 일을 할 수 있습니다. 그들은 가지 풍덩 수 어디 RAM 문자열. 여기, 여기, 여기, 여기까지 아래로. 그들은 정확하게 할 수 있습니다. 그러나 물론, 그건 아마 가장 좋은 계획. 오른쪽? 나는 알렉스를 묻는 유지하는 경우 이름을 가져, 아마도 그는 거라고 어쩌면까지, 여기에 몇 가지 더 내려 여기, 여기, 여기, 결국 여기. 그러나 좀 더 계획으로, 확실히, 우리는 더 많은 것들을 말끔히를 배치 할 수 있습니다. 그리고 실제로, 그 컴퓨터가하는 일입니다. 하지만 그 댓가가 있다는 것입니다 만약 내가 할 다음 문자열 Zamyla 뭔가 후 벨린다 등 우리가를 작성할 수 있습니다 어디 제안 이 그리드에 대한 B 편지? 어디가는거야? 의 오른쪽에, 아래의 Z, 아래? 첫 번째 본능은 어떤 것입니까? 청중 : Z 아래. 데이비드 J. 마란 : 그래서 Z 아래. 그리고는 예쁘다 간단, 맞죠? 그것은 단정 한 가지, 그것은 우리가하는 일입니다 키보드에 우리가 입력 쳤을 때, 또는 이메일을 할 때 사물의 글 머리 기호 목록. 하지만 현실은 컴퓨터입니다 더 효율적하려고 그리고 많은 확실히 밀어 넣는 가능한 RAM에 데이터, 그래서 당신은 어떤 바이트를 낭비하지 않습니다. 당신이 낭비되지 않도록 모든 화면 부동산. 그리고 문제는,하지만 것입니다 우리는 말 그대로 문자를 넣어 경우 B 후, 우리는 어떻게하려고하는 Zamyla의 이름이 끝나는 위치를 알고 와 벨린다의 이름은 시작? 그래서 그냥, 음, 제안 된 인간이 본질적으로, Enter 키를 누르십시오. 아래에 내려 놔. 아니면 알렉스가했던 것 같이 그냥 쓰기 시작 이전 아래 다음 이름, 그 하나의 아래, 그리고 그 하나 아래. 즉, 시각적입니다. 컴퓨터는 또 다른 시각적 신호를, 하지만 좀 더 간결합니다. 그것은이 펑키 문자입니다. 아마도 백 슬래시 0, 백 슬래시 n의 연상, 등, 지금. 이스케이프 시퀀스. 백 슬래시 0의 방법입니다 열 여덟 제로 비트를 나타내는. 0000 0000. 당신이 그 표현 방법은하지 않는 것입니다 키보드의 숫자 0가 ASCII의 문자입니다 사실 때문이다. 이 숫자처럼 보이지만, 진수는 실제로 그 원형을 나타냅니다 문자 모양, 원형 서체. 한편, 백 슬래시 제로는 문자 그대로 의미 나 여기 여덟 0 바이트를 넣어. 그래서이 다소 임의적이다. 우리는 어떤 패턴을 사용했습니다 수 비트이지만 세계 몇 년 결정 전, 그 표현하기 메모리에 문자열의 끝, 그냥 제로의 전체 무리를 넣어. 우리가 감지 할 수 있기 때문에. 이제 즉, 어떠한 문자 없다 알파벳은 제로로 표현 될 수있다. 하지만, 우리는 이미 본 적이 괜찮아요 우리가 최대의 97에 65을 사용하고있다. 우리는 어디서나하지 않았다 모두 0으로 닫습니다. 컴퓨터의 메모리에 벨린다 그래서 실제로 여기 것입니다. 나는 노란색을 그려 놨 단지 여기에 우리의 관심을 그립니다. 그리고 예고도이 완전히 임의적이다. 나는 그리드로 그려 놨거든요. 마찬가지로, RAM은 그냥 물리적 객체입니다. 그것은 필요가 없습니다 행과 열, 그 자체. 그냥 바이트의 모두 있어요 여하튼 하드웨어로 구현. 그러나 벨린다 난 후 경우 게이브의 이름을 입력, 그는 메모리에 여기 끝날 것 내가 Daven의 이름으로 입력 한 경우, 예를 들어, 그는이 곳에서하는 것입니다. 그리고 나는 계속 할 수 있습니다 더 이름을 작성합니다. 불행하게도, 내가하려고하면 슈퍼 긴 이름 쓰기, 나는 결국 메모리가 부족할 수 있습니다. 이 경우에,이다있는 getString 우리가 말한대로, NULL을 반환 할 것. 그러나 다행히도, 적어도이 시각에 여기에, 우리는 꽤 멀리하지 않았다. 이제 어떻게 좋은 것은이 때문이다 일을 처리의 일반적인 생각 상자에있는 것은 그대로 C의 기능을 대표 및 언어 중 많은 배열로도 알려져 있습니다. 어레이는 데이터의 또 다른 유형이다. 당신이 경우 그것은 데이터 구조이다. 정말 그것의 의미 구조, 가지, 적어도 상자처럼 보이는 마음의 눈에서. 배열은 연속이다 동일한 데이터 형식의 시퀀스 다시 다시 다시 다시합니다. 기타 그래서 문자열 단어, 문자의 배열입니다. 문자의 배열입니다. 그러나 그것은 당신이 할 수 있습니다 밝혀 사물의 다발의 배열. 사실, 우리는 심지어 넣을 수 배열의 숫자. 형태 그래서하는 우리는 시작하는거야 이 데이터를 선언 어레이로 알려진 구조 대괄호를 사용하는 것입니다. 그러나 이러한 대괄호로 가고있다 이러한 맥락에서 다른 의미를 가지고있다. 그리고 다음과 같이 현실을 보자. I가 열려 있다고 가정하자 여기에 새 파일을 백업합니다. 그리고 ages.c.으로 저장 그리고 여기에 내 폴더에이를 저장합니다. 그리고 지금은 앞서 갈거야 뭔가를 입력을 시작합니다 같은 포함 CS50.h 포함 STDIO.H, 주요 무효를 int 형. 그리고 여기 안에, 내가 원하는 첫째 시대라는 int를 가지고 있습니다. 그리고 난을 얻기 위해 그것을 사용하는거야 자신의 나이에 사용자로부터 int 형. 그러나,이 프로그램에 의해 사용되는 의미 어떤 상황에 대해 여러 명. 나는 사람들의 라인을 가지고있다. 그들 모두는 입력 할 필요가 자신의 아마 일부는 내가 모르는 연령, 경쟁 또는 이벤트 그들은에 도착했다고. 그래서 다음 사람, I 다른 변수가 필요합니다. 난 그냥 할 경우 때문에 나이의 getInt를 얻을, 그건 갈은 소지품을 덮어 쓰합니다 이전 사람의 나이. 그래서 좋은 일이 아니다. 내 첫번째 본능 그래서 수 있습니다, 오, 모든 권리, 나는 여러 사람들의를 얻으려면 ages--,의이 age1 부르 자 INT의 age2는 정수를 얻는다 INT의 age3은의 getInt는 가져옵니다. 그리고 지금은 사용하는거야 여기에 몇 가지 의사 코드입니다. 그 숫자 일 경우 할 일. 우리는 다른 일을 위해 떠날거야 무엇을 우리는이 일을하는지 때문에 우리 만 순간에 대한 관심 age1, age2, age3에 대한 정보가 포함되어 있습니다. 불행히도, 난 한 번 이 프로그램을 컴파일 그리고, 실제 사용자의 전면에 넣어 근본적으로 가난한 디자인은 무엇인가 나는 보인다 결정하게 만들었 어? 그래? 청중 : [들리지] 데이비드 J. 마란 : 네, 난 시도하지 않은 얼마나 많은 나이를 알아낼 난 사실 걱정합니까? 여기보다 적은 삼명이있는 경우, 따라서 세 개 미만의 연령, 난 여전히 맹목적으로 삼을 기대하고 있습니다. 하나님은 사명이 표시 금지하고 있습니다. 내 프로그램은 심지어 그들을 지원하지 않습니다. 그래서이, 긴 이야기 짧은, 좋은 습관이 아니다. 오른쪽? 나는 기본적으로 복사하고, 코드를 붙여 단지 조정 변수 이름. 그리고, 나의 하나님, 당신은이 있다면,하지 세 나이, 그러나 10, 100 또는 심지어 6500 학부생, 예를 들어. 특히 될 수 없습니다 우아한 코드 또는 지속. 당신이해야 돼요 프로그램마다 다시 작성 명 변경의 전화 번호. 그래서 감사하게도 우리의 실제에서 오늘 ages.c 파일 우리는 더 영리한 해결책을 가지고 있습니다. 첫째, 빌려 갈거야 우리는 몇 번 사용했습니다 구성 이 얻기 위하여, 루프 동안 수행 방에있는 사람의 수. 난 그냥 다시 사용자를 훼방하려고 해요 다시, 그 또는 그녀 때까지 날 수 있습니다 양의 정수 n 값의 값입니다. 내가 사용하는 수도, 마지막 시간의 긍정적 인 정수를 얻는다. 그러나 우리는이 없습니다 진짜, 내가 나서서 이 아이디어를 다시 구현. 이제 여기까지,이 새로운 마술이다. 주석으로 라인을 27 일에서 라인 (26)이 제안에, 배열을 선언하는 모든 사람의 나이를 저장합니다. 그래서 당신은 하나의 정수를하지 않습니다 얻으려면 이 정수 있지만, 정수의 전체 무리. 특히 n은 정수였다가 N 수도 100이 될 수 있습니다, 세 수, 천 수 있습니다. 구문은 매우 간단하게하는 것입니다 말하자면, 당신은 어떤 데이터 유형을 원하는가? 당신은 전화를 원하는 작업 메모리의 덩어리? 당신은 그리드를 호출 원하는 작업 즉,이 그림으로 보이는? 그리고 여기에 괄호로, 당신은 말 얼마나 큰 당신은 배열이되고 싶어요. 그리고 이전 버전 때 내가 말했다 구문, 여기에 약간 다릅니다 우리는 여전히 괄호를 사용하고, 하지만 배열을 선언하고있을 때, 내부 번호 대괄호 수단 얼마나 큰 어레이가 원하는 않습니다. 대조적으로, 때 우리는의를 사용하고 브래킷 내가 조금 전에, S, A 문자열 문자의 배열, 참으로하지만, 당신이 변수를 선언하지 않을 때, 여기에이 키워드와 같이, 당신은 단순히 있어요 특정 인덱스 특정한 해당 배열에서 요소입니다. 우리가 알고되면, 나머지 이는 간단합니다. 내가 먼저 인쇄 할거야 새로운 경우 사람 수 난의 연령은 무엇입니까. 난 그냥 사람의 번호를 하나의 말을 어디 사람의 두 번째, 사람 수를 세. 그리고 난 그냥 계산을하고 있어요 그래서 같은 일반 명, 우리는이 하나에서 계산 프로그램, 그리고 제로부터. 그럼 난의 getInt를 호출하지만 저장 시대에 대답은 내가 브라켓. 어떤 배열의 i 번째 나이이다. 마지막으로, 반면 우리가 치료되었다 그래서 Zamyla의 이름에 대한 문자 이러한 상자, 등이 있습니다. 지금,이 상자가 나타 32 비트 또는 4 바이트 있는 우리는 저장할 수 있습니다 중간, 중간, INT. 모두의 다시, 동일한 데이터 형식이다. 지금은 뭔가 바보 수행 시간이 지남에 같은 단지 이 프로그램을 작성 정당화한다. 그리고 여기에서 아래로, 다시 반복 지금부터 년 말 배열을 통해, 사람의 번호를 하나의 의지 뭔가 세 이상. 그리고 알아낼 수 있습니다 math-- 내 말은,이 매우 arithmetic-- 복잡하지 않습니다 그냥 자신의 나이에 하나를 추가 할 수 있습니다. 그냥, 다시 이것을 보여주기 위해. 그냥 색인 할 수있는 문자열로, S, 그래서 연령대의 배열로 수 I 지수, 이 같은. 어디이 우리를 복용 될 것입니다? 그래서 우리는 볼 것이다, 궁극적으로 일 몇 가지가 올 수 있습니다. 하나, 모든 시간, 때 자신의 프로그램을 작성, 마리오, 욕심, 신용 등을들 수있다. 당신의 이름을 입력했습니다 프로그램 및 타격십시오. 그리고, 사용자의 입력을 받고. 있는 getString, getInt와 함께, getLongLong 등. 그러나 그 C 지원 밝혀 뭔가 명령 행 호출 우리를 할 것입니다 인수, 실제로 사용자가 입력하는 단어를 얻을, 깜박이는 프롬프트에서, 프로그램의 이름 뒤에. 당신을 올 일에 그래서 시저 같은 것을 입력 할 수 있습니다, 또는 ./caesar 후 번호 13. 우리는 어떻게 작동하는지 볼 수 있습니다. 참에 있기 때문에 문제는 우리가있어,이 설정 당신을 소개 할 예정 작은 선물에 랄피의 연상 지도 제작 이전에 도전한다. 정보를 스크램블링의 예술. 이것은 실제로 매우이며 랄 피하고 무슨 짓을 연상. 이것은 암호화의 예 알고리즘은 R-O-T 13 ROT13을했다. 어떤 단순히 회전을 의미 알파벳 13 곳에서 편지입니다. 당신이 할 경우, 당신은 지금 볼 수 있습니다 익숙한 구절은 아마도 것입니다. 그러나 방법은 우리가 사용하는거야 이는 궁극적으로,보다 일반적이다. P에서는 표준 버전에서,이 설정 당신은 암호의 몇 가지를 구현합니다 시저 호출 한, Vigenere라는 하나. 둘 다 회전 아르 점에서 암호, 당신이 어떻게 든 다른 편지로 한 편지를 켭니다. 그리고 카이사르는 슈퍼 간단합니다. 당신은, 당신이 13를 추가 한 추가 또는 26까지 약간의 수입니다. Vigenere은을에 수행 편지 단위. Vigenere 그래서 같이 당신은 볼 것이다 스펙에 더 안전합니다. 하지만 하루의 끝에서 무엇 , 당신은 구현 될거야, 그리고 P는이 설정 둘 다 사용하는 키는 암호화 및 암호 해독합니다. 선회하는 과정을 참조 일반 텍스트, 일부 원본 메시지, 사이퍼 텍스트에있는 뭔가 암호화됩니다. 그리고 다시 암호를 해독. 해커 판에서, 그 사이에, 당신은있을거야 비슷한 임무를 정신으로, 우리는 당신에게 줄 것이다 곳 일반적인 Linux 또는에서 파일, 맥, 유닉스 시스템이라고 etsy 전체를 포함 암호 사용자 이름과 암호의 무리입니다. 그리고 그 암호는 모두가 암호화 또는 해시되고, 그래서 더 적절하게 말하자면 당신이 사양에서 볼 수있다. 그리고 해커 판에 도전합니다 다음과 같이 입력을 복용하면, 암호를 크래킹. 즉 파악, 무엇 인간의 암호는 사실이었다. 참으로, 암호가 때문에, 일반적으로 일반 텍스트로 저장되지 않습니다, 일반적으로 암호 추측하기 어려운 것을해야한다. 즉, 종종 그렇지 않다. 그리고 내가 무엇을 우리가 할 것이라고 생각하면됩니다 몇 분 결론 특히 눈에 암호를 잘못 선택 영화에서 당신은 사랑스러운 기억 있습니다. 하지 않을 경우, 당신은 임대해야합니다. [동영상 재생] -Helmet, 당신은 악마, 무슨 일이야? 내 딸에게 무슨 짓이야? 을 소개하는 날 -Permit 화려한 젊은 성형 외과 의사, 의사 필립 Schlotkin. 에서 가장 큰 코를 남자 전체 우주와 비벌리 힐스. - 당신의 전. -Nose 작업? 이해가 안 돼요. 그녀는 이미 코 수술입니다. 그것은 그녀의 달콤한 16 본이었다. 아니, 당신이 생각하는 그런게 아니야. 그것은 훨씬, 훨씬 더 나쁘다. 당신은 나에게 제공하지 않을 경우 공기 실드 조합 의사 Schlotkin는 줄 것이다 딸은 그녀의 오래된 코를 백업합니다. - 정말로? Nooooooooooooo. 그거 어디서 났어? - 좋아. 난 말할거야, 말거야. - 아니, 아빠, 아니. 당신은하지 않아야합니다. 넌 바로 내 사랑. 나는 새 코를 그리워합니다. 그러나 나는 그들에게하지 않습니다 조합에 상관없이. 잘 - 아주. 의사 Schlotkin은 최악의 해. - 반갑습니다. 안돼! 잠깐, 잠깐. 내가 말해주지. 내가 말해주지. - 난 잘되기를 알고 있었다. 좋아, 나 한테 줘. 년 - 조합은 하나입니다. - 한. - 한. 둘. 둘. 둘. - 셋. - 셋. - 셋. - 넷. - 넷. - 넷. 다섯. 다섯. 다섯. 조합은 하나입니다 - 그래서, 둘, 셋, 넷, 다섯. 즉, 멍청한 조합이다 나는 내 인생에서들을 수 있습니다. 즉, 물건의 종류 바보는 자신의 수하물에 할 것입니다. , 당신의 전을 고마워요. [REMOTE 클릭] 당신이 무슨 짓을 한거야? - 난 벽을 해제. 아니, 당신은하지 않았다 영화 전체를 해제. - 난 그쪽은 버튼을 잘못 눌렀습니다. - 그럼, 다시 넣어! 다시 동영상을 올려! - 네, 선생님! 네, 알겠습니다. 의는, 아놀드 - 가자. 그레첸 가자. 물론 내가 거에요 이 당신을 청구해야합니다. - 어때요? 그것은 작동 했습니까? 왕이 어디있어? - 그것은, 선생님 일 우리 조합이있다. 잘 했어. 이제 우리는 모든 마지막 숨을 걸릴 수 있습니다 행성 Druidia에서 신선한 공기. 조합은 무엇입니까? 하나, 둘, 셋, 넷, 다섯. 하나, 둘, 셋, 넷, 다섯? 네. - 그건 놀라운. 나는 같은있어 내 수하물에 조합. 에 대한 스페이스 볼 일을 준비 즉시 출발. 네, 알겠습니다. 변경 - 그리고 내 수하물에 조합. [문 닫기의 SOUND] [문 땡그랑 소리가 헬멧을 타격] - 아. [END VIDEO 재생] 데이비드 J. 마란 : 그건은 여기까지 CS50, 우리는 다음 주에 볼 수 있습니다. 내레이터 : 그리고 지금, 깊은 Daven 판햄으로 생각. DAVEN 판햄은 : C로 코딩하다 스크래치보다 훨씬 더. printf와, 스크래치 거짓말이었다. [웃음의 인터뷰 []