[Powered by Google Translate] 데이빗 J. MALAN : 좋아,이 CS50이며, 이쪽은 일주일에 두번의 시작합니다. 감사합니다. 우리는 전화와 함께 시작합시다. 617-BUG-CS50를 연결하는 I는 해요. CS50 :이 CS50입니다. 셔틀 버스 보이를 들어, 1을 누르십시오. 다시 시작하려면 9를 누릅니다. 데이빗 J. MALAN : 그럼 그 셔틀 버스 보이, 보도 1 말했다. 그래서 우리는 1 번 버튼을 눌러거야. CS50 : 귀하의 기원은 무엇입니까? 를 들어 쿼드을 누르십시오 1. 메이 키를 누릅니다 2. Boylston 키를 누릅니다 3. 몬트 키를 누릅니다 4. 가상 홀, 보도 5. 다시 시작하려면 0을 누르십시오. 데이빗 J. MALAN : 우리는 쿼드에 1 번 버튼을 눌러됩니다. CS50 : 다음 셔틀이 1시 10분의 PM에이 매우 분 출발하고, 그리고 오후 1시 20분에서 오후 1:30 PM, 오후 1시 40분. 이 CS50입니다. 데이빗 J. MALAN : 그럼이 CS50의 목소리입니다. 그리고 들어, 최종 프로젝트의 종류의 예를 들어 예를 들어, 당신은으로 물어 버릴 수 있습니다 학기의 끝. 예를 들어, 그 shuttleboy.cs50.net가 존재합니다 - 처음 CS51을 복용 한 후 작성하는 실제 프로젝트 다시 제가 학부 때. 그리고 여기에 영감을 선택한 후 다시했다, 그들이 가진 전부였다 인쇄 셔틀 버스 시간표, 그리고는 없었다 온라인으로 물건을 보는 개념. 그리고 한 주말에 비둘기의 일종는을 통해 부어 일정을 인쇄하고, 컴퓨터 프로그램으로 포팅. 당시, 컴퓨터 프로그램이 기록 될 일 C.에 그리고 당신은 실제로에 입력 셔틀 버스 보이하여 실행 우리가 지금까지 해왔 것 점멸하라는 메시지를 표시합니다. 그러나 지난 몇 년간, 그 즉시로 진화거야 메시지는 봇. 그것은에,이 웹 사이트에 최근 발전 있어요 SMS 기반 도구뿐만 아니라이 음성 기반 도구에 있습니다. 그리고이 일의 종류에 암시하는 것입니다 넌 할수있어 학기 말에 자신을 위해. 예를 들어, 거기 셔틀 버스 보이의 SMS 버전은 발생 다음과 같이 작동합니다. 귀하의 휴대 전화, 당신은 41,411로 문자 메시지를 보내고 경우 다음 셔틀 버스 보이를 들어, 특수 기호 sboy을 보내 A와 A가 원산지입니다 B,와 B 다음은이 대상 - 예를 들어, Boylston 공간 쿼드 - 만약 당신이 몇 초 내에 다시 연락해야하는 것은 텍스트입니다 셔틀 남자의 메시지가 당신에게 얘기 정확히 때 몇 셔틀 그 시점에서 그에 갈 점 B. 그리고이로 알려진 무엇보다 일반적인 예입니다 API를 사용하여. 따라서 예를 들어, 여기에, 그냥 shuttleboy.cs50.net입니다 이 실제 웹 기반 화신. 그러나 이것과 다른 앱을 밑줄 데이터는 CS50 개발은 모든 형태로 여기 모든 사람에게 노출되는 API의, 응용 프로그램 프로그래밍 인터페이스. 그리고는 사람들이에 우리가 좋아하는 말하는 멋진 방법 인터넷과 다른 만드는 시간을 보냈습니다 당신이 우리의 데이터를 잡아하기 위해 사용할 수있는 소프트웨어 그런 다음 상단에 자신의 응용 프로그램을 구축 데이터 집합의. 따라서 예를 들어, 여기에 셔틀 버스 보이 API 페이지, 그 기본적으로 CS50 매뉴얼, 문서에 있어야 발생 당신은 데이터 CS50 서버를 물어 갈 수있는 방법. 예를 들어, CSV 파일, 쉼표 익숙한 경우 값을 분리, 이것들이 중 그런 편 신속하고 더러운 엑셀 같은 파일이 있습니다. 그래서 당신은 모든에 모든 데이터에 대한 셔틀 버스 보이를 요청할 수 있습니다 주택 및 GPS 좌표, 그리고받을 께 그렇게 다시, 본질적으로, 스프레드 시트 그 그때 당신은 다음 자신 만의 프로그램으로 읽을 수 있습니다 결과를 생성 셔틀 버스 보이 자체와 같은 일을 할 발생합니다. 그 더 친숙 더 현대적인 데이터 표현에 대한 JSON 자바 스크립트 객체 표기법이 포함되어 있습니다. 무언가를 향해 다시 올 것이다 학기의 끝. 다시 한 번,이 단지 CS50 자신의 API의 몇 가지 중 하나입니다. 그리고 흥미로운 것은, 지금은 페이스 북 요즘입니다 트위터와 구글과 거의 모든 인기있는 웹 사이트에서 당신이 읽고 의미 API, 어떤 종류의가 있습니다 자신의 웹 사이트에서 문서, 당신은에 가입 계정, 그 다음 상단에 소프트웨어를 작성할 수 가 제공하는 어떤 도구 나 데이터를 해당 회사입니다. 몇 년 자신의 교육 친구들과 어느 이 Mac 버전을 썼습니다. 그럼 왼쪽 상단에 현재 맥이라는 제목의 링크에서, 당신은 실제로 수 을 할 자신의 Mac에서 실행하는 맥 OS 위젯을 다운로드 일 같은 가지. 그럼 다음과 같은 데이터 세트의 상단에 건물에 대한 전부에요. 학기의 마지막을 향해 그 자리에하지만 더. 따라서 우선은 어떤 얻을의에, 버그로 실제 빠른에 잠수 가지의 일부에 다시​​ 오늘 예열하고, 생각 우리가 살면서 지난 주를 바라 보았다. 특히, 말, 제가 가서 올려 보자 여기에 예라고 할 수 있습니다. Buggy1.c,이 과정의 웹 사이트에 사용할 수 있습니다 당신은 추면 을 다운로드하여 자신 주위에 찔러 것을 좋아합니다. 하지만 우선은이 비교적 짧은 프로그램에서 여기에 확대, 그리고 기본 빌딩 블록 그 중 일부의 초고속 뉴스 레터를 살펴 우린 단지 당연한 나타나기 시작하려고합니다. 파란 그럼, 9 라인 1에 불과 아르 소프트볼 질문입니다. 그럼 이건 그냥 의견입니다. 그들은 더 기능 의미가 없습니다. 그러나 그들은 기록임을 의미에서 의견이 끝나면 I, 인간, 그 강의와 상당히 자신에 대한 변경 강의, 사실은 기억하는 바로는이 프로그램을 선하여 라인을 통해 읽을 필요없이 수행하고 내 마음에 역사를 재현. 또한, 나 같은 다른 사람이 프로그램을 건네 경우 당신은 그 때문에 이와 같은 의견에, 당신에게 훨씬 분명 하죠 프로그램이 실제로 무엇을하고 있는지, 또는 적어도 어떤 프로그램이해야하는 거있어. 가 올바른지 여부는 모두 또 다른 문제입니다. 이제 C에서 여러 줄 주석으로 기억 그 라인 하나는 여기에 / *, 마술 상징입니다. 이 코멘트의 시작을 나오고 의미합니다. 당신이 마지막 종료에 도달 할 때까지 그리고 더 이상은 상관 없어요 * /, 반대되는 것입니다. 그래서 이곳에서 80 일부 이상한 별이 있다는 사실 왼쪽에서 오른쪽으로하는 것은 단지 미적 세부 사항입니다. 아무런 기능 의미가 없다. 지금 어떻게 줄 11은? 이 일반 시민들의 무엇입니까? 그게 뭐야? 잠재 고객 : 표준을 포함​​합니다. 데이빗 J. MALAN : 좋아, 그래. 그래서 stdio.h 라이브러리를 포함하고 있습니다. 그러니까 무슨 뜻 이죠? 음, 그 파일 안에, stdio.h는의 전체 잡힌 함수 선언 - 즉, 다른 사람이 쓴 코드입니다. 에 선언있어 기능의 완벽한 예를 들어 stdio.h입니다 - 어떤 좋아 지금 쯤? 따라서 printf, 가장 일반적인 것들 중 하나는 확실히 사용하기 초기에 그 라이브러리에서 있습니다. 제가 코드의 라인을 제외하면 꽝는 소리 것입니다 선언하지 않은 기호를 사용하는 방법에 대한 나 한테 뭔가. 때문에 신고되지 않은 뭔가가 아마도 키워드입니다 우리는 printf 보이는 것을 컴파일러에게 알려하지 않은 우리가 선을 포함하지 않는 좋아요. 그리고 더 아래로 지구에, 정말, 그게 무슨 라인의 말씀은 이 서버의에 관계없이 해당 파일 stdio.h를 열어 하드 드라이브 또는 어플라이언스의 하드 드라이브, 복사 - 붙여 넣기 그 바로 내 파일에없이 내 그 수동으로 할 필요. 지금, 우리는 오래 전부터 우리가 시작해서 메인하려면 여기를 내려 무효가 무엇인지 INT과 떨어져 괴롭. 하지만 지금의이 세 줄 살펴 보자 내 15 17까지. 여기 이건 내가 버그로 주장한다. 내 댓글에 선 7 "10을 인쇄해야 말합니다 별표는하지만. "왜이 사실에 인쇄하지 않습니다 10 등 별? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그렇지. 그래서 우리는 0부터 계산하기 시작 것을 확인할 수 있습니다. 그리고이 사실은 프로그래밍 대회이며, 계산하기 시작 더 일반적으로 컴퓨터 과학, 0 대신 1. 그리고이 단지에 대해 사실에서 유래 예를 들어, 우리는 무대에서 8 명까지했을 때 때, 아무도 손을 제기되지 않았습니다, 그들은였다 모든 효율적으로 0이. 그리고 이제, 그래서 컴퓨터 대회이긴하네요 따라서 0부터 카운트를 시작합니다. 그 가장 낮은 번호가 있다면 당신은 바이너리로 표현 할 수 있습니다. 그래서 여기에 우리가 0으로 i를 초기화 시작했습니다. 우리는 0 내가 같은 설정했습니다. 하지만 난 나 나보다 말은, 여기있는이 실수를 한 10 동일. 하지만 내가 그런 다음 0에서 시작하는 경우를 통해, 내가 가서 생각하면 까지 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 사실은 갈거야 I가 사라했기 화면 11 별을 인쇄 와 10 동일. 자, 이제 쉽게 수정 한 다음 무엇입니까? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그냥 미만으로 변경합니다. 당신이 정말로 원한다면, 당신은 할 수 있습니다. 그러나 일반적으로 그가에 찌푸리게있어. 그리고 0부터 계산하기 시작하면 당신이해야할까요 일반적으로에 익숙해 져야 돼. 이제, 그 자체와의 전체 구조는? 루프에 대한이 줄 15 demarks. 따라서에 대한 기능이 없습니다. 이건 그냥 문입니다. 우리는 스크래치에서 본 것처럼 반복 구조입니다. 그리고 세 부분으로 구성됩니다. 에 대한 첫 번째 부분이 있다는 것을 발견 세미콜론의 왼쪽. 두 세미콜론 사이의 중간 부분이 있어요. 그리고 오른쪽에있는 오른쪽 부분이 두 번째 세미콜론의. 이제 이들의 첫 번째 무엇을합니까? 청중 : [INAUDIBLE]. 데이빗 J. MALAN 위로가? 응? 대상 : 초기화. 데이빗 J. MALAN : 초기화. 그래서이 무엇을 의미합니까? 우리는 내가라는 변수를 선언했습니다. 제가 INT i를 지정한 때문에 입력 정수입니다. 그리고 0의 값으로 i를 초기화거야. 그래서 정말 무슨 말을하는 거예요? 그것은 효과적으로 충분히 제공, 헤이 컴퓨터에 말하는거야 그런 다음 메모리, 충분한 RAM, 번호를 기입하고,이 넣어 RAM의 덩어리 번호는 0. 그리고 옆으로, 적어도 내에서 일반적으로 int는 얼마나 크 어플라이언스의? 대상 : 32 비트. 데이빗 J. MALAN : 32 비트. 저에게 그렇지 않으면 4 바이트로 알려진 32 비트, 제공 수단 있도록 그리고 아주 쉽게하는 거기에 값 0을 넣어 때문에 그냥 0으로 모든 비트를 설정하는 것을 의미합니다. 자 이제, 두 번째 부분은 상태입니다. 그리고 조건은 이름에서 알 수 있듯이, 선택하는 일이 또 한번, 또 한번하고 다시는 true 또는 false입니다 여부에 있습니다. 그래서이 단지 코드의 다음 줄을 말하고있는 - 즉 라인 16, 들여 쓰기 유일한 사람이야 그 때문에 아래에 - 오래 전 10 미만이기 때문입니다. 그리고 루프를 통해 각 반복 한 후, 작업을 수행 이 경우에 incrementation, 난 + +. 이제 난 + + 할 필요가 없습니다. 그건 내가 할 수 있어요 -. 내가이 짓을한다면, 어떤 행동거야 이 프로그램의 할? 대상 : 그것은 무한 루프거야. 데이빗 J. MALAN : 그것은 무한 루프 일종의거야, 우리는 부정적인 2,000,000,000 정도 후 행운하지 않는 한. 아마 그냥 그렇게 유한의 자연, 주변에 줄 바꿈합니다 우리가 정수에 할당 한 비트의 수. 그러나 확실히 10보다 훨씬 더 반복하려하고있어 확실히 여기 이상 11 배. 그리고 지금, 마찬가지로 제쳐두고, 실현 제가 + +와 - 단지 구문 설탕입니다. 조금 더 일에 불과 속기 표기법입니다 명시 적으로 다음과 같이 작성 : I = I + 1. 나는 동일입니다 + +. 이건 그냥 가지 말을 더 예뻐 보여요, 전 + +. 이 읽기 더 간결입니다. 그리고 대부분의 사람들이 대신 해. 그러나 이것은 기능적으로 동일합니다 우리가 본 것은. 그래서 짧은에, 여기 빠른 수정은 i를 반복 말을하는 것입니다 모든 길까지 0에서 10 개 미만합니다. 그리고 우리는 실제로 10 별을합니다. 그럼 이렇게 해보자. 저 아래에있는 터미널을 열어 보자. 이 들어 있다는 나를 디렉토리로 가자 그리고 지금은 꽝을 수동으로 컴파일거야. 그리고 입력 buggy1.c로 컴파일거야. 그리고 지금 buggy1, 왜 그러한 파일이나 디렉토리도이 없습니다 buggy1라고? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그래. 그래서 실제로 a.out라고. 방금 꽝을 실행하면 꽝가 어디, 기억 컴파일러, 그리고 당신이 원하는 이름을 지정하지 프로그램에 제공하는, 그것은 a.out에 기본거야. 그래서 실제로 나는이게을한다면 .. - 죄송합니다. 그리고 전혀 - 흑백 문제를 일부 당신은 수정되었습니다 직면했다. 하지만이 일을하게 놔두지. 우린 그 왼쪽에 a.out 있습니다. 그래서 우리는 대신 buggy1의 a.out을 실행해야합니다. 그럼 내가 가서이 해주세요. . / a.out의 입력하십시오. 그리고 분명 무슨 짓을 안 했어? 대상 : 저장합니다. 데이빗 J. MALAN : 내 파일을 저장합니다. 쉽게 제어 S를 누르거나 이동하여 해결되는 파일, 대부분의 프로그램에서 같은 저장합니다. 내가 여기 내려 화면을 취소 다시 실행합니다. 그리고 버그는 여전히있다. 그래서 갈 수 있습니다 - 청중 : 당신은 컴파일되지 않았습니다. 데이빗 J. MALAN : 아, 좋아. 난 컴파일되지 않았습니다. 바보처럼, 난 왜 확인하기 위해 코드를 찾고 있어요. 그래서 그 소리를 buggy1.c, 지금 a.out. 그리고 휴는 저장되었습니다. 더 새 줄이 없기 때문에 그래서 조금 추해 보이 어느 프로그램에서. 그러나 다시, 그냥 미적 세부 사항입니다. 우리가 그를 계산하면 적어도, 우리는 이제 10 등 별을 참조하십시오. 음,이 두 번째 워밍업 예를 들어 무슨 일? 따라서 buggy2에,이 버전도 출력합니다 주장 10 별 (1 줄에 하나씩). 그래서 이번엔 그냥하기 위해, 줄 바꿈 문자가 조금 더 예뻐 것들. 대신 내가받을 것은이 겁니다. 따라서 입력, 내가 그 소리의 buggy2.c 해주세요. 이제 다시 a.out라고. 입력합니다. 이제 겨우 한 새 줄 만 매우 마지막 새 줄을 보게 다음 줄에 내 프롬프트를 이동합니다. 그리고 아직 명확하게 내 말은, 다음 새 줄을 *를 인쇄 했어요 * 다음 새 줄. 하지만, 여기에 버그가 뭐죠? 응? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그렇지. 그래서 파이썬, 들여 쓰기 등의 일부 언어는 달리 사실에, 기능 의미가 C와 같은 언어 - 우리가 보게 될, PHP, 자바 스크립트 - 들여 쓰기는 인간의 이익을 위해 정말입니다. 그래서 라인 16 17 맞춤 한 사실은, 아주 하지만 이곳에 전혀 기능 의미가 없다. 난 둘 다 선이의의 일환으로 실행하려는 경우 루프, 그럼 내가 이런 짓을하면 중괄호에서 그들을 동봉해야합니다. 당신은 그 모서리를 잘라 중괄호 경우 생략 할 수 사건은 뭔가요? 대상 : 하나 줄입니다. 데이빗 J. MALAN : 딱 한 줄입니다. 그래서이 구문 세부의 좋은 종류의 단지 종류 인 것 당신은 두 중, 세 줄을 서면으로 시간을 낭비하지 않습니다 중괄호, 그냥 코드 한 줄을 작성합니다. 하지만 당신은 두 개 이상의 줄이있는 경우, 우리는 실제로이 작업을 수행해야합니다. 그래서 지금 내가이 일을 저장하세요. 내가 진행하고 다시 실행 꽝 보자. 그럼 내가 a.out을 다시 실행하게하고, 지금은 그들에게 한 줄에 하나의를. 이제 a.out 다시 프로그램에 대한 바보 같은 이름의 종류입니다. 어떻게 실제로 저에게 파일 이름을 부여 꽝을 알 수 그 buggy2 자체처럼, 더 많은 사용자 친화적 인거야? 좀 더 명확하게? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 좋아, 그럼 난 실제로 매우 걸릴 수 있습니다 사용자 친화적 바로 가기 불과 쓰기 buggy2을합니다. 이 경우에. C을 지정하고 Enter를 누르하지 않습니다. 그리고 확인이 수행하면이가 나에게 buggy2.c 컴파일합니다 그걸 할 꽝을 요청. 특히,이 꽝를 호출, 그것은, 더 이상을 사용하여 꽝을 실행 명령 줄 인수 또는 내가 실제로 필요한 것보다 스위치. 시간이, 우리는 이러한 다양한 어떤 모든 돌아올거야 암호화 된 hyphenated 표현을 의미합니다. 하지만 지금은, 그냥 나에게 수고를 절약있어 기억 할 필요가 있으며 그 중 모든을 입력 할 필요 다양한 hyphenated 표현. 그리고 그 거꾸로가 궁극적으로 지금은 buggy2을 의미합니다. 제가 수동으로 작업을 수행하려는 경우는, 대신이 작업을 수행 할 수 있습니다 - 그 소리-O buggy2하고 buggy2.c. 그리고 그와 유사하게 나에게 buggy2라는 파일을 제공합니다. 그래서 짧은에 꽝는 컴파일러입니다. 확인이 더를 사용 까봐 사용자 친화적 인 도구입니다 더, 그냥 시작하기 때문에 우리 둘을 간편히 수행 할 수 있습니다. 그리고 우리는 마지막으로 0을 반환합니다. 지금은, 단지,하지만 우리는 그 부분을 괴롭 시작합니다 오늘과 수요일. 이에 관한 질문? 응? 대상 : [안 들리게] 이 따옴표인가요? 데이빗 J. MALAN : OK. 언제 내가 어떤 마법을 짓 따옴표를 입력 있지, 무대 뒤에서 버그를 해결합니다. 우리가에서 많은 얘기 된 것 잊었 할 토론 게시판 - 우리는이 지금 할거야 -는 sudo 얌-Y 업데이트 appliance50합니다. 이런, 오른쪽 쓴거 같은데 저거. 따라서 어플라이언스는 운영 체제와 같습니다. 이 페도라이라는 운영 체제를 실행있어. 때문에 이제 내 인터넷 연결 속도가 느린 때문에, 난 이해가 안가 정말 버렸어요. 우리가에서 뭘하라고하기 때문에는 sudo 얌 업데이트를 실행 문제 세트는, 기본적으로 자동 업데이트를 실행 좋아합니다 맥 OS 또는 Windows 인치 그리고 맨 처음에이를 실행하는 이유 때문에 우리가 어플라이언스를 생성, 나는 문제 세트입니다 엉망, 나는 실수로 프로그램을 모두 보이 당신이 그들을 표시되지 않는 검은 화면에 검은 색, 그입니다 기본적으로. 그러나 어플라이언스의 최신 버전이 해결할 수 있습니다. 제가 인터넷을 한 번 그리고 방학 때하는 문제를 해결합니다 연결. 그래서 따옴표는 매우 신중하게, 내 실수를 숨 깁니다 분명. 다른 질문? 그래? 대상 : 만들에서 온 거죠? [안 들리게] 데이빗 J. MALAN : 좋은 질문입니다. 확인 어디에서합니까? 오래 동안 존재 해왔 리눅스 프로그램 길이 CS50 전에. 그리고 페도라 같은 운영 체제와 함께 제공됩니다. 그것은 CS50 라이브러리에서 온하지 않습니다. 사실, CS50 라이브러리에서 오는 것들 지금까지, 우리가 본 것을 GetString, GetInt, 모든의 역할 그 함수를 가져와, 단어 문자열, 일부에 범위, BOOL 단어입니다. 우리가 CS50에 뛰어 때 우리는 떨어져 애타게합니다 기기 자체. 그럼 네, 여기에 하나 더 질문입니다. 청중은 : 당신이 버그를하고 말했을 때, 어떻게합니까 컴퓨터는 [안 들리게]를 아세요? 데이빗 J. MALAN : 좋은 질문입니다. 그래서 그냥 실행할 때 buggy1을하거나 buggy2을 확인하는 방법 알 수 있겠어요? 당신이 buggy1를 입력다면 기본적으로, 대한 모습을 파일 buggy1.c했다. 그리고 그것은 적절한 꽝 명령을 실행 따라서 a.out라는 기본 출력 파일을 대체. 사실, 우리가 만들 것을 보면, 뭐 - 의이 일을 그만 두지. 우리가 실제로 짓을 버는 보면, buggy2을 이 최신 이미 있습니다. 그래서, 내가 RM 명령을 제거하게 프로그램을 전에 썼다. Y-E-S는 내가 제거 할 것인지 확인하는 메시지가 나타나면 입력. 지금 적용 할 경우,이 매우 긴 줄에서를 발견 이 마지막 것은 여기에,-O buggy2 있어요. 모든 제조업체가 뭘 것은에, 말하자면, 그 인수를 전달합니다 꽝, 그래서 제가 직접 입력 할 필요는 없습니다. 좋아요, 그럼 행정에 대한 간단한 몇 공지 사항. 따라서 섹션에 대해 어떤 공식적으로이 오기 시작했습니다 일요일, 항상 경우, 가지고 싶은 것 하나, 노트북을 갖추고 있습니다. 당신은 노트북이없는 경우로 나에게 연락하지 나에게 이메일을 드롭. 그리고 우리는 워크 플로우를 알아낼 수 있습니다. 어떤 일반적으로 섹션에서 찾을 수 있습니다하는 것은 그들이 일원 것입니다 개념적, 일부 체험. 우리는 구체적으로 질문의 섹션의 일부를 사용합니다 의 일부를 통과 할 수있는 주 문제 세트 강의에서 개념 자료. 그리고 현재 문제 세트에 전부에요. 그리고 우리는 때때로 어떤 체험 활동에 잠수 할것입니다 중은 가끔의, 제출해야합니다 이는 안돼. 예를 들어, 첫 번째 주, 그들은 단지로 의미하는 따뜻한 - 업 운동. 그리고 당신은 그 문제가 그 정말 것을 찾을 수 있습니다. 그들은 반드시 매우 작아서 의미는 있지만 반드시하지 않습니다 쓸 수있는 사소한 프로그램, 자신과의 흥미 진진한 않았지만 좋은 기회에 의 편의에 새로운 기능과 함께, 문법 연습 귀하의 급우 몇이 섹션으로 제시 귀하의 TF뿐만 아니라. 그리고 우리가 시간이 지남에 따라 할 테니, CS50 스페이스라는 도구를 사용합니다 상기 대신 CS50 어플라이언스를 사용하면께요 당신은 할 수 있습니다있는 대신, 브라우저에서 웹 페이지로 이동 섹션 동안 브라우저 창에서 코드를 작성할 수 있습니다. 당신이에서 선택하는 경우 그리고, 당신의 교육 동료는 표시 할 수 있습니다 당신이 당신의 브라우저에서 화면에 입력하는 무엇이든 또는 익명 여부 클래스의 앞쪽 창은, 공개적으로, 그래서 그 또는 그녀는 함께 통과 할 수 반 친구들은 당신이 잘 한 일, 당신은 무슨 뜻인지하지 않았어. 또, 나머지는이 모든 잘 익명 할 수 있습니다 안심하시기 바랍니다. 그러나 훨씬 더를위한 좋은 기회가 될 것 강의 같은 것을보다 상호 작용이 있습니다. 그 동안, 우리는 이러한 일들이 최고라고해야합니다 선택 사항이지만 모든 사람에게 개방되어 섹션, 클래스는 있도록이에 대한 더 많은 이하이 작업을 수행 할 수 있습니다 문제는 하나를 설정합니다. 여기 일정입니다. 이 또한 cs50.net의 홈페이지에 게시되어 있습니다. 해커 관련이있을거야납니다 내일 하나 오후. 그리고 우리는 오늘 하나 내일을 촬영들을 게시 할 것 24 시간 이내 온라인. 당신이이 시간을 할 수 없습니다다면 걱정하지 마십시오. 또, 일정 cs50.net에서 현재 온라인 상태입니다. 자신을 sectioning의 측면에서, 당신은을 잡아 줬어야 당신이 찾아내는하는 과정의 홈페이지로 이동 지시 이메일 섹션 아웃. 생활 변경하여 귀하의 섹션을 변경해야하는 경우는, 없는 문제가 발생했습니다. 같은 URL, cs50.net/section, 단으로 이동 당신이 할 수 있도록 당신은 유사한 양식을 작성합니다 그런 다음 귀하의 환경 설정을 제공합니다. 그리고 우리는 우리가 할 수있는 것과 같이 주 말까지 후속됩니다 숙박이 가능합니다. 지난 주, 우리는 CS50 토론을 사용하여 제안하는 기억 강의에 코스의 토론 도구. 그래서 우리는 질문되었고 40 질문을했다 강의 중에 대답했다. 그게 잘 작동하는 듯, 그래서 우리는 계속됩니다 이 작업을 수행하려고. , 강연 동안, 당신은 편안한 마련을 느낄하지 않는 경우 손이 아닌 문제가 발생했습니다. cs50.net/discuss 이동이 게시, 우리의 교육 중 하나 친구들이 온라인을 답변 또는 인상됩니다 하나의 따라 요청 익명 사용자를 대신하여 손 질문의 성격에. 그리고 의견의 관점에서 일반적으로 psets 될 것이다 일주일 이내에 반환. 섹션 달성하기 위해 다소 시간이 필요하기 때문에 평형, 첫 번째 pset, 0과 1은 조금 될 것입니다 일 정착으로 지연. 그러나 계속오고 주에 해당 주목 해 주시기 바랍니다. 좋아요, 그럼 내 심각한에 놓고 단지 잠시 동안 목소리. 그래서이 실제로 할 수있는 흥미로운 기후입니다 어떤 다른 것들 모두와 함께,이 토론을 갖는 캠퍼스 관련 이에에 무슨 일. 그러나 CS50는 확실히 특정의 역사를 가지고있다 많은이 과정 매년만큼의 주제, 년 광고 - 보드 클래스의 약 3%. 이 최신 올해 2011, CS50 35 학생 광고 - 승선. 이건 내가 생각 명확성의 부족으로 인해하지 않습니다. 이 과정의 강의에서의 페이지가있어서 선이 어디에 설명 성명. 같은 문장은 하나 하나에 반복됩니다 문제는 1면에 설정합니다. 그래서 단지 있도록이 오늘 언급 이주의 사람들. 그리고 다른 일을 시도했습니다. 그리고 우리가 오늘날 생각 ​​한 것에 잠시 시간을내어입니다 실제로 와서 한 과거의 경우 일부 봐요. 보다는 사실은, 다음과 같이 더러운 작은 비밀을 유지 우리가 발견 한 내용을 학생들이 짓을 한 방법과 지적 그와 정말 overarching 동기에 대해 무엇 심지어 이런 대화는 좀. 그 말과 함께, 그래서 라인은 본질적으로 이쪽은 - 강의 당, 당신은 환영, 당신은으로, 권장하는 친구와 이야기. 그래서 이러한 협업을 갖는 전체 임무 야 사무실 Annenberg의 시간에 대한 격려 명 최종 프로젝트는 함께 작동합니다. 실제로 작성하는 시간을 때 그러나 선이 그려집니다 최종 솔루션입니다. 의사 코드에서 말하기, 완전히 좋아, 영어로 말하기, 완전히 괜찮아. 이를 통해 볼 주셔서, 동료에게 pset를 이메일로 보내기 손이 계속 입력하는 화면, 그 선을 넘을뿐만 아니라. 특정 행의 강의로 보이나요. 그러나 일이 불행하게도이 방법을 그림을 그릴 방법 현실은, 웹 사이트 거기 있다는 것을 알고 있습니다 이 클래스 및 다른 많은 클래스에서 솔루션을 갖추고 있습니다. 귀하 또는 귀하의 일부 3 %이 존재 알고있는 사실 우리가이 존재하는지 것을 의미합니다. 웹 사이트가 당신이 그렇게 있다는 사실 실제로 문제 세트를 할 사람을 지불 할 수 있습니다 -이였다 작년에 와서 실제 사건입니다. 이 odesk.com라는 웹 사이트입니다. 그리고 팀은에 게시 된 여기에 사람의 이름이었다 이 웹 사이트는 그의 pset 7 할 사람을 요청 이 경우. 음, odesk.com는 아주 Google이 수 있습니다, 우리는 역시 Google로 검색에 아주 좋아. 여기 역시 사이트가 있습니다 -이 하나가 아닌이야 심한 솔직히. [웃음] 데이빗 J. MALAN :이 사이트에 대한 재미있는 일이 생기면 당신은 정보 페이지를 참조하십시오, 그들은 그들의 기업에 대해 이야기 문화 및 고객 서비스는 최고의 하나입니다 여러분의 과제가 있는지 확인하기 위해 우선 순위 시간에에 돌렸다. 하지만 심각한에 다시 그런 사실은 이러한 사이트 존재도, 우리를 실현의 인식 아르 사이트 이러한 종류의. 그리고 당신에게 어떤 의미를 제공하는 것은 일반적이 형성 소요, 우리는 일반적으로 큰 스캔들이없는 곳 명 대규모의 종류에 협력, 오히려 아르 당신이이 곳은, 무조건이 늦은 밤에 순간입니다 할 일이 많이, 그게 AM 4시입니다, 당신은 소진하고있어 자신에게 생각, 그래, 그냥 내 살펴 보자 룸메이트의 또는 내 친구의 코드 나처럼. 그리고이 발현 불행하게도 학생을 포함 이과 학생 B의 제출 등 제출 것을 컴퓨터에서이 같은, 그 확실히, 과학 수업, 컴퓨터 과학자 매우 간단합니다 소프트웨어를 감지합니다. 당신이 말하자면이있어 곳은 또 다른 일반적인 패러다임입니다 에 어쩌면 이야기, 사람의 옆에 일하고 영어, 잘, 의사. 하지만 실제로 제출하는 시​​간을 제공하고, psets 단지 이메일 또는 보관하거나 같은을 통해 교환하기. 그러나이 사람은 덜 분명하게하기 위해 무슨 일이 있었는지, 다음이 제출 된 거지. 이 역시 여행까지 잘 작성된 조각을하지 않습니다 우리가 실제로 감지 할 소프트웨어처럼 일 이러한 종류의. 그리고 실제로 우리가하는 일은 모두 비교 해봐 소프트웨어입니다 지난 해의의에 대한 올해의 제출 제출은 모든에 대해 우리는에서 발견 거기에 모든 작업 웹 사이트에 대한 인터넷,. 모든 게 아주 자동화입니다. 그래서 우리는 97%에 큰 공정성에 정말이 일을 할 사람 정말 여기에와 기타에서의 엉덩이를하고 있습니다 클래스와 그 노력의 모든 퍼팅 있도록 작업 그들은 궁극적으로 제출 자신입니다. 그리고 한참을 이동할 수 있습니다. 이는 작년 가지 경우 소수입니다. 몇 학생들은 pset 2 동일하게 해당 파일을 제출 pset 3, pset 4, pset 5, pset 6, pset 9. 이 경우,이 퀴즈 0 작년에 두 살 학생들은 많은 사이에 동일하게이 문장을 제출 다른 "유형의 요청 -"점, 점, 점. 그래서, 600 수업 시간에 우리는이를 감지 않았습니다 에 대한 퀴즈를 제출했습니다. 그래서 짧은에,이 - 솔직히, 난 이런 종류의해야 한다는게 정말 싫어 대화 -하지만 이건 정말 고의적 인 노력입니다 올해 그 번호를 운전하려고합니다. 때문에 우리는 말에도 일 이러한 종류의 모든 년 몇을 위해 그것을 dwelled 것에의 현실을 생각 평소보다 초 더 실제로 지적 어떻게 적어도 그렇게 큰 거래하지, 어,처럼 보인다 수도 특정 순간에 다시 생각 모두 공정한 자신과 여기 친구들합니다. 당신은 거기에 같은 질문이면 어디 선 이며, 단지 개인적으로 저에게 문의하시기 바랍니다. 하지만 대답은 완전히에서 강조, 항상 마지막 순간, 늦은 날에 현금. 아니면 늦은 일이 없기 때문에 문제 있다면 솔직히, 개인적으로 저에게 메일을 보내보세요. 우리가 문제를 풀어야합니다. 하시기 바랍니다 위험에 하버드에 여기 시간을 넣어하지 않습니다. 자, 이제 우리가 분위기를 가볍게해야한다고 생각해서 다음 슬라이드로이 포함되어 있습니다. [웃음] 데이빗 J. MALAN :이 웹 사이트는 좋았어요. 난 사실 좀 불안 있어요. 이 하나 있어요. 그리고이 사람은 대단 했어요. 할 때 그래, 그럼 늦은 밤 그 고양이 생각 그 결정. 좋아요, 그럼 다시 더 재미와 덜 심각한 거 같은 조건. 좋아, 그럼 우리는이에 대해 잠시 이야기. 이 아마도 상당히 익숙한 뭔가있다 스크래치의 세계. 그리고 스크래치의 세계에서, 우리는 가끔이 필요하지 도로에 포크를 이동합니다. 이 일이나 여기에 또는 다른 일을. 그리고 우리가이 작업을 수행 할 때, 우리는이 경우, C에 지금 사용할 수 있습니다 다른 구성합니다. 그리고 여기에 우리는 부울 표현되어 있습니다. 예를 들어, 여기 부울 표현, 우리가 OR 같이, 우리는 OR이 조건을 가지고 있다는 의미에서 그런 상태. 우리는 우리가 원하는 것을 의미에서 함께하고, 수 이 조건과 그 조건을 확인하십시오. 그리고 여기에 우리가 지금이 아닌 지금 switch 문이 조건에 해당 종류의 구문과 유사하지만, 우리는 다른 다른 다른 경우의 상응하는 경우, 만약을 수행 할 수 있습니다 단순히 그들에게 사건의 경우를 열거하여 경우와 같은 케이스의 경우로. 그래서 우리는 그 마지막 시간을 보았다. 그리고 우리는 루프 등에 감동 시작했다. 우리는 잠시 전에 다음 중 하나를 보았다. 그러나 다른 반복 구조가 있습니다. 예를 들어,이 사람 여기. 따라서 (조건), 또 한번, 또 한번이 일을 수행하는 동안. 따라서 근본적으로, 무슨 일이 사이에 다른 것 같다 여기 루프이 동안 루프에 대한? 루프이 동안 루프를위한이. 응? 그게 뭐야? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 좋습니다. 따라서 루프 조건에 반면, 명확하게이 자세한 구문입니다. 이 초기화가있어,이 업데이트가 있습니다. 잠시 루프에서이 조건은 있어요. 따라서이에 대한 대비 다운 앞에 서 일종의 것 같습니다 루프, 그건 우리가 변수를하려는 경우 의미하며 우리가 원하는 incrementation을 가지고, 우리는 실제로이 이 물건끼리 알아서. 그럼 내가 가서 gedit를 열 수 있습니다. 제가 기기로 전환 보자. 그러니 그 외양 예를 다른에서 이러한 중 하나 구별한다. 그리고 여기 내 마음 속에, 내가 뭔가를 얘기해야합니다. 내가 특별히 이름이 팀을 언급. 팀은 학생이 할 찾아 보았습니다 실제로 사람이었다 그들에 대한 자신의 숙제. 우리는 특정 섹션에서 아무 팀 없었다. 나는 학생을 공개 않도록 그럼, 실현, 그것은 학생 아니 었습니다. 이 일을 인터넷에서 임의의 사람 이었어요 프록시 작년에 의해. 그래서 우리는 그것도을 찾으십시오. 그래서 여기이 경우, 제가 진행합시다 새 파일을 엽니 다. 파일, 뉴. 여긴 나에게 탭을 제공합니다. 내가 가서로 저장하자 loop.c. 절 가서 저장을 클릭 봅시다. 그리고 여기, 어디 가서 쓰기 시작하자 # 있습니다. 나 확대하자 이제 우리는 INT 메인을 (무효) 할 수 있습니다. 전 <, 지금 (INT I = 0의 날이 어서 가서하자 오, 10, 나는 + +). 그리고 지금은 진행하고 별표를 인쇄합니까 갈거야 내가 이전 했어요. 그리고이 프로그램의 끝 부분에, 우리가가는거야 그냥 내 프롬프트 새 줄을 인쇄 모든 혼란을 바라 보지 않는다. 0을 반환합니다. 구문 올바른 것 같습니다? 지금까지. 그럼 보자. 그래서 내 터미널 창으로 이동, 제가 축소 보자. 내가이 전화를 때문에, 내가 가서 루프를 실행하게 물건 loop.c. 그럼 루프를 확인합니다. OK 컴파일 보인다. 나 루프를 실행하고, 현재 입력 보자. 그리고 10 별을 인쇄 것 같다. 그럼 잠시 루프에이 변환하고 무엇을 알아 보자 문제 우리가 여행을여 종류의. 대신 이것 때문에, 내가있는 동안 나를 여기에 가서 말을 해 10 미만 - 제가 루프를 제거 가자. 좋아, 그럼 우리는 이미 문제가 몇 있습니다. 따라서 조건은 동일하지만 분명히보고 싶어 초기화. 나는 incrementation가 누락하고 있습니다. 제가하려고 할 때 그래서 컴파일러는 가능성 말해봐 이 프로그램을 컴파일? 응? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 좋습니다. 그래서 선언하지 않은 식으로 말거야 - 여기에 경우는, 내가이 변수. 그리고 실제로 선언되지 않은 식별자 나는 중 하나를 사용하십시오. 그리고이 PHP 같은 언어와는 달리하며, 파이썬과 루비는, 그와 자신의 일부가 잘 될 수 어디서 변수를 사용하여 시작, 그냥 수 다짜고짜이 아닌 그들을 선언에 대해 걱정할 필요가 명시 적으로 항상. C와 Java 및 C와 같은 언어 + +, 당신은 할 필요 명시 적으로 슈퍼. 당신은 내가라는 변수를 원하는 경우, 당신은 말 할 필요 변수의 종류는이다. 그래서 우리는이 다음과 같이 해결해야 할거야. 여기 가서 INT i를 입력 할 필요가 겠어하므로, 난 내가라는 변수를 선언했습니다. 이제 한 단계를 생략했습니다. 분명히 그것을 초기화되지 않았습니다했지만, 한번 보자의 그하다면 최소 차종의 꽝 정류장은 불평. 그래서 나는이 프로그램을 리메이크 보자. 좋아, 이제 그냥 불평 다른 이유. "여기 사용하면 변수 '난'은 초기화되지 않은 있습니다." 좋아요, 그럼 그 아주 명시 적입니다. 초기화는 값이 동일한 설정을 의미합니다. 그리고 우리는, 그래서 0을 동일 나 해보자하는 짓도 안했습니다. 이번에는 다시 시도하고 다시 실행 꽝 보자. 이 시간 컴파일. 그리고 난 실행하는 해요. 그러나 큰 무한 루프는, 내가 해냈어 때문에 초기화, 내가 조건을 했어요,하지만 난 본적이 없어요 incrementation 모든 종류의. 그럼 어떻게 incrementation을 할 수 있습니까? 내가 가야하는 것처럼 음, 잠시 루프에서 기분 때문에 많은 처음처럼 루프의 내부를해야 할 와 같은 반복 구조를하는 일주일 예제 양말과 자기 계산으로, 우리는해야 할 일을했을 맨 끝에서 뭔가가 다음 줄로 돌아가 좋아요. 내가 가서 할 경우이 전 + + 여기있어? 의에도이 컴파일되지 보자. 이미 날을 잡을 수있어. 여기 무슨 일이야? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그럼이 확실히 INT 없습니다. 그건 내가 있습니다. 그리고 이전과 같이 중괄호, 들여 쓰기는 충분하지 않습니다. 그래서 지금은이 구성되었습니다. 내가 10 미만 반면 그래서, 별을 인쇄 그럼 난을 증가. 그리고 방법은 루프 작품은를 누르입니다 자마자하는 동안 이 경우 10 호선 것 같습니다 루프의 하단에, 그것은 6 호선으로 돌아 갈거야 그 시점에서 조건이 다시 확인 될 것입니다. 난 여전히 10보다 작다면, 우리는 선에게 8 할 거고 그리고 9 다음에 10에 맞는다, 6으로 돌아가 다시와 또 한번, 또 한번 다시, 너무 오래 전 10 미만이기 때문입니다. 그럼 어서 가자 다시 실행 여기를 확인하십시오. 좋아요, 괜찮아요 컴파일했습니다. 나를 다시 실행 루프 보자. 그리고 이제 실제로 작동 것 같습니다. 여기 더하기 부호와 minuses 어때? 음, 지금까지 실제로 PLO의 전체가 없어요 - 너무 귀엽다. 좋아, 그 있었어요 - 아, 그 사고 였어. 그래, 그러니 루프의로 돌아 가자. 그들은 슈퍼 명시 적이라 루프에 대한 좋은 수 있습니다. 그리고 그들은 작성할 조금 clunky인데도 그게 매우 강력하고 당신이 수행 할 수 있습니다 한 번에 여러 가지. 루프는 가치의 엄청난 양을 가지고 있다고는 없지만 단지 우리가 더 많은 작업을 수행 할 것 아직 때문 느낀다. 우리는 여기서, 초기화를 넣어해야 여기, 업데이트 및 우리가 모든 것을 할 기억해야합니다. 그래서 우리는 동안 루프 실제로 대출하는 시​​간을 볼 수 있습니다 자신 만 다른 상황까지, 다른 데이터 목록 및 해시 테이블과 같은 구조, 우리가 살면서로 연결됩니다 학기 중간. 하지만 지금은로 알려진이 세 번째 유형이있는 걸 알아 DO- 루프 동안. 그리고 우리는이 간단히 봤어요. 그리고이 pset 1 슈퍼 도움이 될 수 있습니다. 그런 다음 일을하고 원하는 시간 확인하는 경우 사용자가 협력, 그리고 그들이하지 않은 경우 다시 해 할 - 루프 논리의 그런 자체적으로하면서. 여기에 위에서 아래로 주문이 암시하고 있는데, 그대로 이렇게 의미 않습니다. 그리고 또 한번, 또 한번이 작업을 수행, 그게 무슨 수 있을까요? 아마 그때 전화 GetInt 또는 GetString 등을 의미 GetInt 또는 GetString의 가치를 확인하고 소리를 질러 사용자에 그들은 그들에게 물어 협력하지 않은 경우 또 한번, 또 한번 다시. 당신은 한 번 뭔가를 할 위치를 그런 다음 몇 가지 조건을 확인하십시오. 그럼 이렇게 해보자. 저 사실 DO-잠시 루프로 지금 변경 보자. 그리고 가서 다음을 수행거야. 그럼 다음을 수행하십시오. 하자의 INT I = GetInt (); 있지만, 먼저 사용자를 알려주지 어떻게. 조금 다른이 시간 그럼. "나에게 정수를 줘." 그래서 그것 때문에 printf 사용합니다. 그리고 지금은 여기에 가서, 나는이 작업을 수행하는거야 제가있는 동안,보다 큰, 보자 - 어디 보자, 내가 그걸 미만 0, 보자, 아니면입니다 10보다 큰. 즉, 단지, 1에서 9까지의 숫자를 원해요 임의로. 그래서 여기로 결합 된 부울 식을 사용 난, 10 미만 0 또는 더 큰 있는지 확인하는의 경우 다시 여기로 루프를 할 것입니다. 그러니 다시이 작업을 수행 - 내가있는 동안보다 0 또는 당신은 10보다 큽니다. 그래서 지금의이 가서 우리가 그렇게 한 후에이 작업을 수행 보자. 잠깐 정신 검사를 수행하자. printf (I, "감사합니다, 전 % d 개입니다"). 그래서이 간단한 프로그램은 정수에 대한 사용자 요청 그것은 어떤 범위 1-9 포함, 안에 확실합니다 그리고 그들에게 상기 무엇 불과하여 사용자를 감사 그냥 좀 정신 수표로 입력. 그러나이 의도 한대로 작동하는지 보자. 내가 여기서 머리를 내려 가서 루프를 다시 실행합니다. 음. "선언하지 않은 식별자 'i'를 사용." 거참 이상 하네. 나는 우리가 그런 해결 알았는데. 동일 증상하지만 다른 코드. 응? 대상 : [안 들리게] 두 내부에, 우리는해야 [INAUDIBLE]. 데이빗 J. MALAN : 그렇지. 그래서 실제로 범위로 알려진 주제로 우리를 이끈다. 그것은 C, 다시, 정말 문자 그대로 당신을 소요 밝혀졌다. 이 같은 짓을하면 당신은 정수를 선언 곳 다음 몇 가지 값을 지정하지만 당신은 그 내부를 중괄호 한 쌍의, 왜 C는 않습니다가, 그렇지 가정 당신 만 내가 존재로 내 알려져있는 32 비트를 원하는 라인의 컨텍스트 내에서 해당 중괄호의 맥락, 9 6. 그래서 난 선언하고, 그 할당 8 호선의 가치, 너는 이외의 얻을로 곱슬 괄호 아래 9 호선, 난에 없습니다 범위, 말하자면합니다. S-C-O-P-E. 그것은 오른쪽 맥락에서 더 이상 없습니다. 이제이 난 없으므로, 우리는 관심도없는 것처럼 그건 아예 선언했다. 따라서이 같은 뭔가를 다음 수정은 무슨 경우 이유는, 내가이 중괄호 안에 선언되어 어느 분명 나쁜 것일까 요? 여기에? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그래. 그래서 우리는 그것을 밖으로 초기화 할 수 있습니다. 그럼 내가 가서 선언 부품된다를 삭제하게 나는 유형을 지정하고, 내가 여기까지하자. 그러니까 줄 5에서, 이제 "나 한테 INT주세요."라고 그것을 내가를 호출합니다. 9 호선에 주목, 내가 이러고 싶지 않아, 왜냐하면 나는 이미 32 비트가 있습니다. 나는 컴퓨터를 요청하지 않으 다른 32 비트. 난 그 같은 32 비트를 사용하고 싶습니다. 그리고 지금 나는 5 호선에 선언되어 있기 때문에, 아직 괜찮을거야 라인 11 라인 12을 사용합니다. 그럼 내가이를 다시 컴파일하는 시도 보자 꽝가 멈 추면 고함. 루프를 확인합니다. 그래서 지금은 기능의 "암시 적 선언입니다 'GetInt'은 C99에서 유효하지 않습니다. "그게 뭐죠? 응? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그래. 이제 난 사실 GetInt을 사용하는이 일이 아닙니다 C. 이것은 CS50에서 유래 랑은 있습니다. 그래서 우리는 여기이 필요합니다. 그리고 제가 프롬프트 다운로 돌아 가자 여기 수 있도록 다시 실행합니다. 자, 드디어. 이제 우리는 저와 다른 오류가 해결되었습니다. 내가 지금 루프를 실행하고 어떻게 보자. "나에게 정수를 줘." 내가 한 11 드리겠습니다. 나는 그것을 -1 드리겠습니다. 나는 그것을 푸 드리겠습니다. 나는 그것을 5 줄 게요. 그리고 지금은 실제로 작동합니다. 그러나 프롬프트 여기에 이​​유 바뀌 었습니다. 왜이 시간 중 하나를 시도하지만 나에게 줄 말 했니 다른 세 번 INT? 왜 행동은 다른가요? 청중은 : 그것을 문자열을 해봐요. 데이빗 J. MALAN : 뭐라고 요? 청중 : 당신은 그것을 문자열을 주었다. 데이빗 J. MALAN : 그래. 그래서 우리는이 오늘 세번째 시도에서 문자열을했다 제가 푸 입력합니다. foo는 문자열입니다. 그것은 분명 INT 없습니다. 그리고 CS50는 GetInt을 구현했습니다하는 방법은 우리 일이 생기면 선택하지 않는 10 개 미만 0 이상 당신을 위해 어떻게 우리가 사전에 알고 있기 때문에 어떤 종류의 당신이 원하는 INT? 그러나 우리는 최소한 적어도 당신을 위해 사용자를 않았습니다 확인할 수 있습니다 정수를 입력? 그리고 그렇지 않다면, 우리는에서 "다시 시도"를 입력하여 사용자의 소리 화면. 이제 우리는 반복있어 프로그램을 갖추고 있습니다. 좋아요. 자,이 중 더 나은 구조의 일종인가요? 그래서이 상황이 좀 지저분를 시작할 곳입니다 여기에 변수를 선언한다는 점을 기억해야한다는 사실 당신은 몇 가지의 안쪽을 사용하려면 중괄호 외부. 그러나 처음에는 약간 이상한 모양 경우에도 눈, 그냥 다시 간단한 로직을 기억 해요. 이 함수이거나 관계없이 C에서 아무것도 사용하려면 이 변수 야,이 기능면을 포함해야 일부 도서관에서, 또는 당신은 그것을 선언해야합니다. 그러나 지금 당신은 사실을 추가주의 할 필요가 그 당신은 바로 범위에 선언하고 있습니다. 당신은 괄호 안에 너무 단단히 그것을 참을 수 없어하고 있습니다. 그럼 내가 실제로 롤백 보자. 우리는 이전의 예를 들어 우리로 돌아가, 내가 가면 돌아 가기 INT를 들어, int는 나는 = 0; 나는 <10; 전 + +, 그리고 이와 같은 printf 별, 다음 닫기 괄호, 그리고 지금을 printf 지금입니다 - 제가하려고 할 때 같은 논리에 따르면, 어떤이 발생합니다 이 프로그램을 컴파일? 대상 : 잘못된 식별자입니다. 데이빗 J. MALAN : 그래서 다른 잘못된 식별자입니다, 선언하지 않은 식별자입니다. 이제 이유는 조금 다릅니다. 가 분명히 더 중괄호하지만 같은 아이디어는, 범위 같은 이야기가 적용됩니다. 당신은 안에 내가 같은 변수를 선언 한 경우 루프의 경우 명시 적으로 둥근를 작성하지 않은 경우에도 중괄호는 아직하다고 지적 그들을 생각하는에 경우 내가 루프의 경우에만 유효 내부입니다. 당신이하는, 다음 줄에 가면이 유효하지 않습니다 이 경우 지금은 10입니다. 따라서 범위와 같은 몇 문제를 해결합니다. 좋아, 질문? 좋아, 그럼이, 사소한 작은 프로그램의 종류입니다 단지 약간의 별을 인쇄합니다. 당신이 여기이 노래를 기억 보자. 이 아이들에 노래를 매우 성가신 노래 학교 버스와 같은. 하지만 그런 일에 대해 좋은 것은, 이건 cyclicity을 가지고 있다는 사실이다 상기는, "벽에 맥주 99 병입니다 맥주의 99 병. , 한 병을 마시고 나면 그 주변을 통과에서 98 병의 맥주 벽. "그리고 그 노래가 그 다음에, 96을 97을 반복 95, 후 94, 모든 방법은 실제로 가지고있는 경우 0으로 내려 지금까지의 버스. 그래서이 있기 때문에 구현의 정렬에 좋은 프로그램입니다 내 하나님, 당신은 단지 몇으로이를 구현 할 수 있다면 코드의 라인은,이에 전체 가사를 뱉어 수 매우 빠르게 노래. 그러나 그 길을 따라, 우리는 일부를 분리 감히 시작할 수 있습니다 이러한 기본 반복 구조와 또한 현재의 우리 스스로를 작성하는 기능을 소개, 값을 반환 우리는 주변에 전달. 하지만 먼저 우리가 왜 우리를 계속 다섯 분을하지 않습니다 여기 깨? 그리고 우리가 돌​​아 오면, 우리는이 노래를 부를 것입니다. 좋아, 그럼 우리는 다시 있습니다. 그리고 우리가 지금이 노래를 불러 말은, 내 말은 프로그램이 아닌 구두로. 그래서 여기 우리는이 중 하나를 구현 한 것입니다 beer1.c을 가지고 특히 노래. 그리고 단지와 그 익숙하지 않은 들어, 명확하게 무엇을 이 일이 같은 날 진행하게 보입니다 그리고 입력 beer1을합니다. 지금 내가 beer1를 실행하게하고, 우리가 볼 수 있습니다 - 얼마나 많은 병 맥주가 될 것이다? 노래가 말한 것 같은 99를 입력합니다. 입력합니다. 그리고 지금 우리는 스크롤하는 경우 - 죄송합니다 - 우리가이 모든 스크롤하면, 우리는 볼 수 있습니다 그 이 실제로 전체 노래를 노래를 했지. 잠깐만 요. 내 스크롤 막대가 엉망이 조금 있습니다. 가 큰 창을 사용하여 보자. beer1 99 그래서 거기 우리는 간다. 그래서 여기에 우리가에 의해 훨씬 더 빨리 노래 노래를 가지고 그게 우리가 된 것보다 컴퓨터. 그래서 여기,하지만 순환 자연을 확인합니다. 그것은 99 다음 99 후 "하나를 다운 받아, 통과 말한다 주위 "를 선택한 다음 98. 그리고 지금은 또 한번, 또 한번 반복합니다. 그래서이 실제로 어떤 종류의에 대한 완벽한 기회입니다 건설 반복. 여기 모서리를 절단있는 것 같아요 것을 확인할 수 있습니다. 나는 벽에 "맥주의 98 병을 말납니다, 97 벽에 맥주 병, "그 너무나 우리는 맥주 한 병에 도착하면, 나는하지 않아요 영어 문법에 대해 걱정합니다. 그러나 우리는 또한 경우 약간의와 함께이 문제를 해결할 수 있습니다 조건, 아마도. 이 번호가 단수 인 경우, 가서 "병"라고 가 복수 달리하는 경우, "병"라고. 하지만 지금은 완전히 그 모서리를 절단거야. 그래서 우리가 여기있어 알아 보자. 그래서 우리는 상단에 간단한 설명이 있어요. I는 다음과 같이이 두 라이브러리를 포함 중 우리는 일반적으로 있었어. 그리고 지금 내가 먼저 아래로 스크롤 해 코드의 실제 라인. 선 17 주에서 개막. 선 21 (20)는 얼마나 많은 병 맥주가 될 것 있어요? 그리고 나서 GetInt를 호출합니다. 그리고 지금은 정신 수표의 비트가 있습니다. 그래서 우리가 지금에 도입 시작하는 대회입니다 더욱 엄격히 사용자의 입력을 확인합니다. 때때로 당신은 다시 메시지를 표시하지 않으 다시 다시. 좋아, 최대 사용자 나사 경우와 협조하지 않습니다. 종료하고 그냥 처리하지 않습니다. 그리고 그게 내가 여기서 뭐하는거야. n은 1보다 작 으면, 그냥, 사용자 지르지거야 "미안 해요, 그건 의미가 없다." 그리고 나는 갈거야 임의로 하나를 반환합니다. 그럼 다시,이 단지에 익숙해 질 수있는 대회입니다. 지금은 믿음에 가져가. 그러나 지금까지 우리는 항상 있기 때문에, 0을 반환 봤는데 우리는 0 존재라는 증거 무엇을 반환했다 구요? 대상 : 성공. 데이빗 J. MALAN : 성공, 다예요. 그래서 지금 우리가 마지막으로 생각하기 시작한다는 비 성공 - - 즉, 코너 케이스, 오류 조건에서 지금은 무한 공급이 있거나 최소한 사십억 내 프로그램에서 잘못 할 수 있습니다 가능한 일. 그리고 그들에게 개인 번호를 지정 시작할 수 있습니다. 지금, 일반적으로 그냥 돌아하기에 충분 0보다 다른 것을. 그래서 우리는 단순히 현재에 대해 1을 반환거야. 그러나 1 반환에 대한 이유는 그렇게 빨리 돌아과 같다 1, 프로그램의 나머지 어떻게 알아? 이 중지됩니다. 그게 전부 야. 그래서 1을 반환한다는 사실은 효과적으로입니다 이 프로그램의 실행을 짧은 circuiting 그 때문에 라인 27 아래 아무 것도 실행을 계속하지 않습니다. 즉시 주요 수익으로, 그게입니다. 사용자가 않다면 좋아, 그렇게 협력 우리는 라인 30에 도달 그들은 합법적 인 번호를 입력하기 때문에, 내입니다 이 곡의 구현입니다. 그래서 먼저 단지를 들어, 줄 바꿈 문자를 출력 미학. 이제 루프에 대한 수 있습니다. 그리고 약간의 일을하고있는 것을 다른 방향. 난 너보다 덜을 수행 할 필요가 없습니다, 제가 + +을 할 필요가 없습니다. 내가 대신 그와 동일한 설정, 변수 i를 초기화 말할 수 N, 사용자가 입력 한 번호는 다음 있으므로, 다음을 수행 제가이 0보다 큰 동안에는, 그럼 - 한 번이 루프 중 하나 반복을 완료했습니다. 그래서 우리는뿐만 아니라 루프에 대한을 사용하여 아래로 셀 수 있습니다. 이제이 printf로 한 거 지금 거의 주입니다. 따라서 인쇄 "벽에 맥주 중 % d 병." 인쇄 "% d 개 맥주 병. "", 한 병을 마시고 나면 그 주변을 전달합니다. "인쇄 "벽에 맥주 % d​​ 개 병." 그래서 아직 % d 개이지만, 인수는 printf 변화하는 것을 확인할 수 있습니다. 제가 99하고 싶은 말 때문에 쉼표이 끝나면, 난, 난이 있습니다. 제가 99하고 싶은 말은 있기 때문에 쉼표이 끝나면, 난, 난이 있습니다. 이 쉼표 후, 난 내가이 있어요 - 1, I가 98을 말하고 싶어서 첫 번째 반복, 등등. 그리고 지금 여기, 난 그냥 어떤 멍청한 발언을 갖추고 있습니다. 그리고 라인 42, 나는 뜻, 국제 대회에서 0을 반환 모든 괜찮습니다. 나는 쳤어 어쩌죠? 여기에 일반적인 실수는 무엇 일 수도? 제가 실수로 잘 말한다면 글쎄, 내가 계산 뭘하고 싶어 0 다운, 내가 벽에 맥주 0 병까요? 내가 무슨 말을 그래서 난 0보다 크거나 같습니다. 나는 다시 컴파일하면 지금 제가보고있는 증상으로, 무슨 일이야 beer1하고 실행할 수 있습니까? 대상 : 아니다. 데이빗 J. MALAN : 네, 부정적인갑니다. 이 오프 별 하나의 오류이며, 매우 일반적인 실수는 할 수 있습니다. 자, 실제로 터미널 창으로 돌아 가서 그렇게 여기, 우리는 한 번에 더 많은을 볼 수 있습니다. 맥주의 99 병을 입력합니다. 닫기,하지만 우리는 너무 멀리 있으므로 약간의 어느 갔다. 우리는 지금 우리가를 누르 같은 것을 너무 멀리 아래로 노래를 노래 음수. 그래서 잘 작동하지 않습니다. 좋아, 그래서 우리는 쉽게 해결 할 수있는로 이동하여 방법은 한 번이었다. 하지만 일부 기회를 위해 이젠 또 뭐지? 개선? 음, 저 beer2.c을 열고 여기로 스크롤하게하고을 이 버전의 봐. 어떻게 다른으로 여러분을 더 놀라게 할것 처음으로 한 일이야 여기에서이 버전에서? 청중 : [INAUDIBLE]. 데이빗 J. MALAN는 : 그래, 그래서 더 이상 내가, 이렇게 발생하지 않기 때문에 내가 뭘, 난 다른 다음에 n에 대한 사용자 요구, 그리고 걸 알아 N에 내가 같은 설정 및 그래서 내가 바꿀 거에요,하지만 난 절대 터치 N 다시. 그래서 도대체 다른 32 할당 당신의 요점이 뭐였 어 비트는 내가 다른 변수를 가질 수 있습니다 그냥 그 ... 그거라고? 따라서이 경우에, 나는 종류의 인식이 필요 디자인 기능입니다. n은 0보다 큰 동안 그리고 지금은 말할거야, 어서 앞서와 같은 printf에 n을 통과, 동일한 노래를 인쇄 두 번째 인수,과 n -이 아래는 두 번째 인수로 1. 그리고 다음이 루프의 각 반복에 앞서 불과 이동 감소 N 자체. 지금, 기능적으로,이 프로그램 동일 될 것입니다. 나는 99에 입력하면, n은 99시에 시작한다. 나는 감소, 감소, 감소, 감소. 나는에 맥주 한 병 "에 모든 길을 내려 간다 벽, 맥주 한 병. , 한 병을 마시고 나면 그 주변을 전달합니다. 나는 벽에 맥주 0 병. "끝했기 때문 상태가 올바른지 얻을. 이 0보다 큰 있습니다. 이 실수를 범하지 않았다. 그럼 어떤 버전 하나 또는 버전 두 사람은 더 나은인가? 그래서 두 murmurings의 무리를 들었어요. 왜 두 개? 그게 뭐야? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 아, 알았어. 그래서이 버전은 하나,, 0 아래 갈거야,하지만 기억하지 않습니다 원래 올바른 버전 중 하나 공 아래로 떨어지지 않았다. 따라서이 올바른 버전입니다 기억 해요. 그래서 적어도 두 올바른 버전을 비교해 보자. 버전의 찬성 인자는 무엇입니까 투가되면, 음, 더 나은? 응? 대상 : 그것은 공간을 적게 사용합니다. 데이빗 J. MALAN : 네, 그래서이 권리를 적은 공간을 사용? 버전 하나는 32 N을위한 비트, 그리고 다른을 사용하는 반면 난 32 비트. 버전 두에만 N에 대한 32 비트를 사용합니다 그게 그렇게 플러스가 될 것 같습니다. 다른 생각? 사람은 하나의 주장을 논쟁하고 싶지합니까? 응? 청중 : 당신은 N에 대한 코드의 여분의 줄을 사용 해요 -. 데이빗 J. MALAN : 아, 그래. 수 있도록 공정입니다. 적어도, 나에게 그냥이 그래서 - 나는이 사실 조금 참 느낌이, 사실을 뜻이지 한 내 논리를 모두 캡슐화를 정렬 할 수 없습니다 루프에 대한 가능한 한 루프에 아름다운 선,. 자, 내가 가지이 N에 압정으로 고정 해 - 루프의 끝에서, 때문에 이 논리적으로 필요합니다. 그러나 가지 나에게 길을 잘못 나오기, 그냥 때문에 , 심지어하지만, 여기까지의 논리로부터 분리 것 다시, 그것은 필요가있다. 다른 생각? 응? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그래. 당신이 대신하는 경우 그래서, 노래의 끝 부분에하고 싶었 다시 노래의 이름을 인쇄? "맥주 99 병을 재생 주셔서 감사합니다"와 같은, 그런 이런 바보? 그러나 중요한 점은, 당신은 원래 값에 대한 액세스를 원하고 있습니다. 당신이 모든에 n을 변형하거나 변경 한 사실 반복되므로 원래의 가치를 파괴 당신은 말에 그럴 수 의미합니다. 지금, 틀림없이, 우리는 명확하게하고 싶지 않아요 이 프로그램 인치 누가 무슨 상관이야? 그러나 아주 유효한 점입니다. 솔직히, 사람은 정말 없습니다 여기에보십시오. 둘 다 동일하게 정확합니다. 나는 어느 쪽이든 확신 할 수있다. 나는 일반적으로 좋은 원리 야, 그런 말을 않을 경우 어떤 값에 대한 사용자 요청하면 변수에 저장 정렬 원칙에의 N처럼, 그냥 아마도 좋은 그 주변에 유지합니다. 그리고 모든 데이터는 당신이 다시하고 다시 변형 할 그냥 자신에게 그 변수의 사본을 제공 당신 원본에 액세스 할 수 있습니다. 당신은 32 더 많은 비트를 소비하고 있지만 현실은이 컴퓨터,,, RAM의 이기가바이트이​​ 일을 좋아했습니다 우리는 32 비트 이상 quibbling거야? 정말로 그렇게 큰 거래. 심지어 반 공연이나있는이 장치에 RAM의 기가바이트, 64 비트 대 32 비트, 하지 그렇게 큰 거래. 물론 오늘날, 그것은 크기에 압도 방법이 될거에요 프로그램 자체의 어느 수백이 될 것입니다 킬로바이트, 그렇지 않으면 몇 메가바이트,이 일. 따라서 합리적인 문제 하나 더 좋아요. 그러나 적어도 그가에 시작합니다 생각 아르 마음을 통과? pset 0에, 우리는 정말로 유일한 기대에도 불구 있기 때문에 정확성, 아니면 적어도 다양한 버그를 disclaiming 우리가 앞으로 이동하면 발생했을 수도, 디자인은 다른 키 양상 수있을거야, 두 코드를 작성 또한 우리는 코드를 평가. 그리고 적어도 이런 상황에 생각 제공합니다. 그리고 뭔가 작품 때문에, 그건 좋은 것은 아닙니다 이 잘 설계입니다 의미하지는 않습니다. 그리고는 교사 친구들 일 중 하나와 문제 세트는 우리가 시간이 지남에 따라 부품을 애타게 도움이 될 것입니다. 음, 약, 여기 말이 버전을의는 뭐야? 저 순간에 여기 좀 섹시한 무언가를 해봅시다. 우선 내가이 제거 보자. 그리고 지금의이 문법 문제를 해결할 보자. 따라서이 버전에서, 나는 문법을 수정하려면 해당하므로, 보다는 삽입구 s은 (는) "병"같은 말 또는 "병"- 그런 모서리를 잘라 싶지 않아 - 나는 또한 동적으로 단어 "병"을 인쇄 할 따라서 오늘이 % s의 자리 표시자를 사용하거나 "병". 그래서 조건부 전의 값이 무엇인지 확인해야합니다. 이 1이라면, 내가는 "병"을 말하려는할만한 경우 다른, 나는 "병"을 말하고 싶습니다. 따라서이 작업을 수행하려고 할 까. 제가 == 1면 다음 날 가서 선언가요 - 내가 문자열이 필요하므로이이기 때문에, 내가 문자열 S1을하자 첫 번째 문자열 내가 지금 관심. 나는 "병"을 말할거야. 그리고, 문자열, 어디 보자 S2 - 내가 순간에 어디로 가야하는지 설명 할게요 - "병." 그래서 노래에, 우리는 수 있어야한다는 기억 잠재적으로 일, 두 개의 서로 다른 단어를 인쇄합니다. 우리가 돌​​아 보지면 우리가 도착하면, 그런 것을 여기에 예를 들어, "벽에 맥주 두 병, 맥주 두 병 하나를 부수고, 제가 원하는 '을 주변에 전달 이 네 번째 줄은 현재의 "맥주 한 병을 말을하고 벽은 병 "또는". 나는 결정해야 그래서, 내가 무슨 말을하고 싶은거야 " "병"? 그러니까, 임의로 말 괜찮은거야 이제라는 변수 S1, 문자열을 선언거야 하나는, 그, 여기에는 여기에 연결을 져야 할 것 같소 그 말은 항상 동일합니다, 그건 단지 때문에 노래의 성격. 그리고 내가 원하는대로 단어 S2 전화해서 결국 여기에 표시됩니다. 지금 그대로, 100에서 99 번,이 될거야 3 복수 있기 때문에, 이러한 경우 모두에서 동일, 2는 복수는 4 복수형. 그러나이 코너 경우, 우리가 어디 두에 도착 후 1, 또는 심지어 한 후 0,이 논리가 필요합니다. 그래서 그 권리를 점점 내 코드에서 시간을 보내고 있습니다. 나는이 작업을 수행하면, "병"과 동일 설정 S1 후, 난 == 1 경우 과 "병"와 같은 S2이 1이 될 것이기 때문에 병,이 0 병에 대한 것입니다. 그리고 여기이 무엇을 나타 냅니까? 분명히 있어야합니다. 이건 그냥 의견입니다. 따라서 단일 라인 주석을 가질 수 있다는 사실은 의미 이런 식으로 코드를 주석 있지만, 다른 일반적인 수 이 패러다임은 너무, 그게 당신이 슈퍼 - 짧은 구문이 있다면 너 자신을보고 싶어하며 넣어 더 많은 읽을 수 있어요 바로 코드의 줄의 끝에서, 당신은 할 수 절대적으로 이런 짓을. 이제 내가이 일을 어쩌지? 제가 1 동일하지 않습니다 다른 경우. 그럼 뱅은 같음 - 느낌표는 "BANG"로 알려져 있습니다. = 1 뱅 했어요. 제가 1 동일하지 않을 경우 그럼, 내가 대신 뭘하고 싶어? 그럼, 난 뭘해야 할 첫 번째 단어? 따라서 문자열 1, 복수 병에 대해 "병"이어야합니다 그리고이 지금뿐만 아니라 복수 "병"입니다. 이 실제로 우리에게를 얻을 수 있다면 우리는 볼 수 있습니다 우리가 가고 싶은 곳. 여기를 아래로 스크롤하면 이제, 나는에 연결해한다는 것을 내가하지만, S1 아니라. 난 내가하고 S1에 연결해거야. 그리고 여기, 나 같은입니다, 1 마이너스입니다 전에,하지만 S2. 즉, 나는 따라 변경할 수있는 영어 단어를 원하는 이 논리 있습니다. 자,이 코드에서 문제가 이미 있습니다. 여기서 게이트에 이미 어떻게 구분합니까? 응? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그렇지. 그래서 이미 범위의 수업을 위반했습니다. 그래서 S1과 S2 선언했지만, 나는 안에 해냈다 그래,이 코드가 작동을 의미합니다 중괄호, 라인 42까지,하지만 최대한 빨리 전화 43 히트로, 무슨 일이 있었 게 없다 더 이상 존재? S1 또는 S2도 ​​- 음, 범위에 더 이상 뭐가되지 같아요. 그래서 우리는이 문제를 해결해야합니다. 그럼 내가 선언을 삭제 보자. 그리고 여기에 변수 이름을두고이 삭제됩니다 여기까지를 삭제합니다. 그리고 라인에 정말 이런 일을 선언해야합니까? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그래, 아마도 바로 여기, 33 살쯤. 문자열 S2 다음 문자열 S1 자합니다. 그리고 밝혀,이 작업을 수행 할 수 있습니다. 당신은 같은 종류의 두 변수를 선언하는 경우 당신은 실제로 쉼표를 사용하여 수행 할 수있는 C. 모든의 그래, 그래서 지금은 두 개의 변수가 - S1과 S2. 나는이에 그들에게 값을 지정 있어요 여기 조건, 또는 여기 인치 그리고 나서 아래를 사용하고 있습니다. 얼마나 잘이 지금은 성공 할까? 음, 여전히 버그가 있지​​만, 적어도 볼까요입니다 얼마나 멀리 우리가 왔죠. 그럼 내가 가서 beer3을 보자. 이 beer3입니까? 네,이 beer3입니다. 그리고 지금은 어서 가서 beer3를 실행할 수 있습니다. 399 99. 우리는 아마도 대부분을 건너 뛸 수 있습니다. 그리고 여기, 이것 좀 봐. "벽에 맥주 한 병, 맥주 한 병이 걸릴 아래 하나 벽에, 맥주 0 병을 주위에 전달합니다. " 하지만이 솔루션의 절반 만에 주목을 받고거야. 의 종류는 여기 망 쳤어. 그래서 제가 동일 할 때 코너의 경우가 발생하는 것 같습니다 어떤 두 값? 대상 : 2, 1. 데이빗 J. MALAN : 2, 1. 그것은 1 안 1 아닙니다. 정말이 노래 중 마지막 두 stanzas입니다. 그래서 내가 대신 뭘하고 싶어? 그래서 제가 == 1 인 경우 어디에 사건을 맡은 것 같습니다 다음 첫 번째 단어는 "병"하지만, 두 번째 단어입니다 "병"입니다. 하지만 여기,이게 == 2로 변경하고 싶습니다. 이 경우, 내가 뭘 원하는 거요 첫 번째 단어는 할 수? 청중 : "병". 데이빗 J. MALAN : 그럼 두 병에 대해 "병". 그리고 여기에서이 단어는 있어야합니다 - 청중 : "병". 데이빗 J. MALAN : "병", 단수. 좋아,가, 축소 여기에 돌아 가자, 할 다시 실행, 다시 실행 beer3를 입력​​ 다시 99. 좋아, "세그먼트 오류 (코어 버려진)." 내가 뭘 잘못 했나? 대상 : 당신은 가치가없는 [INAUDIBLE]. 데이빗 J. MALAN : 아, 우수한 가리 킵니다. 좋아요, 그럼 여기 무슨 일이에요? 세그먼트 결함 그래서, 우리는 실제로 만날 수있을 거예요 이 꽤 미래의 시간, 의도적으로. 그러나 지금,이 사실은 무엇을 의미합니까? 분류 오류는 거의 항상 가지고 있다는 것을 의미 어떻게 든 컴퓨터에 메모리, RAM에 액세스하려고 시도하면, 당신은 실제로 요청하지 않은 자신이 소유하지 않은 것을, 그런 의 운영 체제. 따라서이 경우입니다, 내가 한 일을 알 내 논리에 결함이. 제가 1 동일 경우 S1과 S2의 값을 할당했습니다. 내가 2 동일 경우도 있다고 했어. 하지만 다른의 무한한 수에서 완료하지 않은 가능성 - 특히, 3 또는 4 또는 점, 점, 점, 99. 그래서 한 수정 프로그램은 그냥의 될 수 다른 조건을 갖추고 있습니다. 그리고 날 여기에 가서 S1은 동일한다고 가정 해 보겠습니다 - 여기 무엇을해야하나요? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 때문에 일반적인 경우에 "병",, 그냥 같은 일입니다. 따라서 인용, 인용을 끝 맺다, "병."동일 그래서 복수를위한 병, 그리고 여기까지, 복수 병하십시오. 좋아, 그럼 이제 내 터미널 창으로 돌아 가자 컴파일, 다시 실행합니다. 99. 휴. 그리고 빠른 정신 검사를 해보자 구. 기술적으로, 우리는 확인하려면 다음을 모두 읽어 보길 원하죠 그들은 올바른 만, 살펴합시다 알려진 범인 적어도. 3 병, 2 병, 2 병, 1 병, 1 병, 0 병. 우리는 적어도 지금 그 문제를 해결 한 것 같습니다. 하지만, 여기에 캐치 어떤 신 지독한 혼란하는 것은이 때문입니다 그냥 멍청한를 해결하는 방법 한 문자 문법을 자세히 설명합니다. 그래서이 코너를 잘라하는 이유 종류가 앞서해야 할 그냥 완전히 성가신 때문 이 정도 코드를 작성합니다. 그러나 약간 더 우아한 방법이있을거야 밝혀 정확히 똑같은 일을 표현. 그리고 우리는 다음과 같이이 작업을 수행 할 수 있습니다. 내가 잠시 동안 화면에이를 떠나 보자하고 3 원 연산자로 알려진 것을 소개합니다. 이건 그냥 할 의미 한 라이너의 종류입니다 우리 약속 한 약간의 섹시을 살고있다. 그리고이 다음과 같이 할거야. 나에게 S1라는 문자열을 지정하고 허락 가 다음과 같이 지정합니다. (제가 == 1)? "병", 그렇지 않으면 "병". S2 문자열은 (i == 2) 생각하십니까? "병", 그렇지 않으면 "병". 그래서 여기의 차이는 무엇 그러면입니까? 코드의 두 라인은, 난 주장 할 수 이 모든 혼란을 교체하십시오. 그래서 난 가지 저를 문지른다해서, 그건 엉망 전화 이 코드의 많은 라인이라고 잘못 방법입니다. 잘못 없습니다. 그것은 나쁜 디자인 아닙니다. 마찬가지로이 완벽하게 정확하고 완벽하게 괜찮습니다. 당신이 자신을 표현해야하는 경우 그러나 코딩 지루한 도착 또 한번, 또 한번 다시 간단와 함께 구체적으로 먹을 이와 같은 시나리오. 그럼 C는 다음과 같이 몇 가지 바로 가기가 있습니다. 그래서이 기본적으로 S1라는 문자열을 선언 말하는되어 이 값이나 내가 == 경우이 값 중 하나를 지정합니다 - 미안하지만, 더 명확하게이 말을해야합니다. , 변수 S1를 선언이게 사실이라면 그것에게이 값을 할당합니다. 그렇지 않으면, 그것을이 값을 할당합니다. 따라서 즉,이 중 한 줄 방식의 일종입니다 만약 다른 말을하지만, 길을 따라 할당하고. 내가 한 경우 그럼, 가서이 "병"이라 부릅니다. 과 그리고 다른이, 그 "병"이라 부릅니다. 한편, S2, 내가 2 동일하면 우리가 정의해야하는 두번째 단어, 우리끼리 "병"에 S2 설정합니다. 그렇지 않으면, "병"으로 설정합니다. 그리고 이게 내가 이런 식으로 가서 모두 삭제할 수 있습니다 지금 의미 코드의 해당 라인. 그리고 내가 말할 때, 다소 터무니이 지금입니다 섹시, 그​​것은 문체 감각의 정렬에 야한 게 어디 있어요. 기능적으로,이 코드가 실제로가는 것을 사실 동일한 일을. 그리고 처음에는 암호화를 좀 볼 수는 없었지만 눈은 우리가 전에이 구조 보지 못했기 I 겠죠 가 궁극적으로 훨씬 더 될거야한다고 주장 판독 및 우리 인간이 정렬하기 훨씬 쉬워 지금 당신은 단지 읽을 수 있기 때문에 이해 한 줄에서 코드를 모두. 이 곳이 바로이 있으며, 경우에 여전히 정신에 유사 상태와 다음이이 경우 안에 무슨이 다른 안에 뭐가 것입니다. 하지만 우리는 훨씬 더 우아하게이 작업을 수행 할 수 있습니다. 그리고 지금 내 단말기에 돌아 가면 모두 삭제 갖는 그 라인 불과 두로를 대체, 재 컴파일, 99과 맥주의 재 운영 병, 그 통지 제 문법은 여전히​​ 사실 정확합니다. 그러니 다시 시작하는 일. 맥주 2 병, 맥주 1 병. 괜찮은 것 같군. 그래. 그래서 우리는 훨씬 더 간결 솔루션을 갖추고 있습니다. 역시이 그래서 당신은, C가 더 편안하지 생길 하지만, 첫 번째 pset 또는 둘째 반드시 이러한 구조는 우리가 이런 일을 할 수 있도록 될 수 있다는 걸 더 우아하게. 지금 여기에 다른 일을 할 까. 내가 가서 return1.c을 열어 보자. 이제 그 방법으로 또 다른 문제를 해결하기 위해 시작하자 우리는보다 정교한 코드를 작성 할 수 있습니다. 그래서 여기 그의 인생의 목표를 간단한 작은 프로그램입니다 값을 증가하는 것입니다. 그리고 실제로, 그냥 돌아 단계를합시다. 내가 수동으로 보자. 내가 주를 (무효)를 포함하고 INT하자. 그리고 내가이 increment.c이라고 불러. 내가 뭘 원하는거야? 나는 가서 뭔가 이렇게 말할거야 - 우리는 숫자에게 같은 전화 - 정수 X. 따라서 정수 x는 2 도착, printf x는 % d 개, 새 줄, x입니다. 그래서 지금은 빨리하지만, 익숙한 물건 종류의 입력거야. 그럼 내가 X + +을 할거야. 그런 다음 다시 같은 문장을 인쇄 할거야. 그리고 전 그냥 프로그램을 종료하려면 0을 반환하는거야. 좋아, 그럼 지금이 바로 그 프로그램입니다 증가는 번호입니다. 그것은 먼저 야 후 2 일을 초기화 할, 그리고 있어요 이것을 증가하고 다시 인쇄해야 겠어. 그럼 이제, 매우 간단 프로그램을 증가을 실행합니다. 그러나 이렇게, 나는 큐브의 가치를 원하는 것을 지금 가정 다소 임의의 무언가. 그리고 실제로 x는 그것의 큐브를 얻을 싶어요. 그래서 포로 기능을라는 것을 사용할 수 있지만, 안 그는 아직입니다 정말 알아요. 그래서 난이에게 옛날 방식으로 할거야. X 시간이 X 시간 X 시간 X 같습니다. 그래서 다시 자체를 곱한, 값을 cubing 있어요 그리고 또 한번, 또 한번, 그래서 우리는 힘을 얻을 이 경우 3. 그래서 지금은 인쇄해야합니다 숫자는 우리가 보게 될해야합니다 여기에 - 증가를, 그래서 실제로 정말 증가 아닙니다 더 이상, 우리는 혼자 이름을 떠날 거예요 - 그런 다음 2 8. 이제, 우리는 정제를위한 기회의 시작이 여기 상기 숫자를 곱한의 cubing 일 그 자체로 그 자체로 자체 같은 느낌은 될 수 유용한 사람이 결정 많은 같은 기능이되는 년 전에 - 당신도 알다시피, 어떤 경우 유용의 우리 둘 중 하나가 앉고 그리고 printf 그래서 세계의 나머지가 사용할 수있는, 쓰기 왜 우리는 앉아서, 큐브라는 함수를 작성하지 않습니다 우리가이 cubing을 수행 그래서 우리는 수동으로 할 필요는 없습니다 여기에 값을 cubing의 개념을 구현? 간단한 예를 들어 그래서,하지만이 가서 사용할 수 있도록이있는 등 우리 자신의 기능을 쓸 수있는 기회를 제공합니다. 그럼 지금까지, 우리는 주 사용했습니다, 우리는 다른 사용했습니다 사람들의 기능을하지만, 우리는 우리 자신을 작성하지 않았습니다. 그래서 여기에 우리가 이동합니다. 나는 가서 큐브라는 함수를 작성하는거야. 그리고는 입력을하지 않을 수 없네요. 그래서 그 입력은 정수가 될 것입니다. 그리고 그것을해야 할거야? 그것은 INT 출력을 선언하는거야 = 입력 시간 입력 시간 입력. 그리고 지금 그 출력을 반환하는거야. 그리고 지금은 구체적으로해야합니다. 이 함수는 정수를 반환 예정이다. 그래서 여기 다음 자신의 기능을 작성 할 방법입니다. 먼저의 이름이 결정 기능은 될거야. 그리고 일반적으로 설명 것이 좋습니다, 그래서 다시는 그 큐브 전화하십시오. 그런 다음 당신이 돌아 무슨 지정해야, 무슨 일이야 그 출력은 될거야. 그리고 우리는 아직 많은 옵션이 없습니다. INT, 문자, 무개차, BOOL, 문자열입니다. 내가 원하기 때문에 지금은, 난 INT와 떨어지지거야 정수를 반환합니다. 다음은 입력이있을 경우, 무엇 지정해야합니다. 그리고 큐브가 인수를 가져 오면 사이에 물건을 괄호는, 그 인자 이름을 제공해야한다는 있도록 당신은 실행하거나 작성할으로 당신은 뭔가를 호출 할 수 있습니다 이 기능을, 당신은 그것을 유형을 제공해야하는이 일에 사건이 정수가 될 것입니다. 그래서 짧은에 큐브는 정수 걸립니다 기능입니다 입력 및 반품 출력으로 정수 있습니다. 그래서 그 입력을 어떻게해야합니까? 음, 라인 14, 나라는 변수 출력을 선언, 그리고 그에게 값 입력 시간 입력 시간 입력을 지정합니다. 그리고 나서 출력을 반환합니다. 그럼 어떻게이 이걸 어떻게 사용합니까? 나는 온라인이 강조 문자를 어떻게 변경합니까 7, 당신은 생각해야 하는가? 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 예, X 정말 큐브. 따라서 X는 어떤 값을 가지고 의미하는 변수입니다. 다행히, 그것은 형 정수의입니다. x는 정수이기 때문에 그리고, 나는 그 큐브에 합격 할 수 있습니다. 그리고 값으로 X의 값을 무력화시키고 있어요하더라도 큐브 X의 같은 당신이 지금까지 언제든지 경우 왔습니다 등호와 코드의 줄 오른쪽에있는 물건이 실행됩니다 다음에 할당됩니다 왼쪽에있는 값입니다. 따라서 작업의 순서는 우리가 기대하는 것처럼입니다. 이 정도 작동합니까? 음, 여기로 가자. 내 터미널 창을 열어 보자. 내가 입력 한 증가를 하죠. 함수 '큐브'의 "암시 적 선언에 유효하지 않습니다 일이 그렇게되면서 C99. "옆으로는 C99는 언어 C를 의미합니다 1999 년에 정의되는데,이 버전에 비해 업데이트에서였다 원래 이상 업데이트입니다 1989. 그래서 그 모든 수단입니다. 그럼 그 "암시 적 선언의 무엇을 의미할까요 함수 '큐브'은 (는) 잘못된입니까? "이 바로 여기입니다. 그것은 12 호선에있어. 청중 : [INAUDIBLE]. 데이빗 J. MALAN : 그게 뭔데? 대상 : 전보다 없습니다. 데이빗 J. MALAN : 그것은 전에 없습니다. 그래서이 일이 될거예요. C는 좀 무모, 또는 C 컴파일러가 바보 종류의 수 있습니다. 그들은 정말로 유일한 당신이해야 할 말하는 일을 해요. 그리고 특히, 만, 하단에 코드 톱을 읽고 왼쪽에서 오른쪽으로. 컴파일러, 꽝이 코드를 읽고면, 선 1, 그 이 작업을 수행하는 방법을 계산 한. 오, 여기 주요되어 있습니다. 좋아요, 가서 변수 x를 선언 보자. 내가 뭔가를 인쇄 보자. 선 7, 대체 큐브 무엇입니까? 은 stdio.h에 선언 않아. 그것은 내가 뭘 할 생각이 없다 C. 함께 제공되지 않습니다. 그리고 꽝은 bails하고 오류 메시지와 함께 종료됩니다. 그래서 우리는 몇 가지 방법으로이 문제를 해결할 수 있습니다. 우리는 큐브 방금 곳으로 이동하여 무엇 꽝을 가르 칠 수 선언입니다. 그래서 잘라 주 정상을 붙여 넣기. 지금 메인이 먼저 더 이상없는 것 때문는 걸 알았죠 그래도 기본적으로 실행. 주요 메인입니다. 이 기본 함수 이름입니다. 이 파일에있는 그건 중요하지 않습니다. 내가 사용하기 전에 그러나 적어도 지금은 꽝이 큐브를 볼 수 있습니다. 그럼 꽝 지금 행복 인 경우 보자. 증가를 이번엔를 컴파일 않았다. 나 증가를 실행할 수 있습니다. 그리고 실제로, 그것은 작동하는 것 같군. 자, 결국 어디에서 시나리오 가지고 올 수 이 모든 기능을 넣어 적합하지 않을거야 다른 모든 기능을 위. 당신은 현실이 무한 루프에 꼼짝 못할거야 이 사람은 여기에 있지만이되고 싶은 곳 남자가 있어야합니다. 그래서 항상 작동하지 않습니다. 그래서 고맙게도, C는 더 우아한 솔루션을 제공합니다. 돈이있는 곳 내가이 다시 넣을 거예요, 그건 단지 I 원칙의 문제로서, 선호, 그 주요 항상있을 상단에, 때문에보고 그냥 좋은 건지이 프로그램 기본적으로하지 않습니다. 그리고 내가 여기 어떻게 할게라는 것을 선언합니다 프로토 타입. 나는 그대로가 내 큐브 기능을 다시 선언거야 복사 및 붙여 넣기. 사실, 그 말 그대로 없습니다. 그대로 선 (15) 복사 및 붙여 넣기 최대 6 호선 위. 그것은이에 봤 라인 중요하지 않습니다. 이 라인 (4)에 있어야 발생합니다. 그러나 전에 주요 있어야 않습니다. 그러나 그 차이를 확인합니다. 세미콜론과 4 호선 끝되는데,이, 안녕 의미 꽝은 함수가 존재하는지 그것을 내 말을 정수를 취하고 정수를 반환 큐브를했다. 그러나 나는 그에게 그것은 아직 무엇인지는 말하지 않을 거요. 그냥 내가 결국 당신에게 약속 알아요. 그리고 실제로, 지금이 아래로입니다 괜찮아요. 그래서이 상단에 있기 때문에 다음, 일반적으로 좋다 파일, 당신은 단지 빠른 - 화재, 한 줄을 흔들어 수 각의 기능의 이름이 무엇인지, 왜 자신의 입력은 출력이 무엇인지입니다. 그리고 더 명확하게하기 위해, 입력은 일반적으로 인수를 의미하거나 매개 변수, 동의어. 출력을 무엇을, 리턴 값을 의미합니다 다시 나에게 손. 그래서 여기이 경우 큐브는 상단에 선언하지만되었습니다 구현으로 정의, 그렇지 않으면 하단에 알려져 있습니다. 그래서 지금의 여기 가서이를 다시 실행할 수 있습니다. 그래서 지금 다시 실행 증가, 제가 가서 확인을 다시 실행할 수 있습니다. 그리고 지금은 잘 작동하는 것 같군. 그래서 지금 우리는 같은 아웃 가서 반영 할 수 제 4 버전에 맥주 예를. 그럼 내가 여기 아래로 스크롤 보자. 그리고 가지 지금 마음이 강의를했다는 사실을 확인합니다. 다시는 같은 절을 노래하고 있다는 사실 또 한번, 또 한번, 노래에서 동일한 코러스 라인이 생각 이유는 함수에 인자 그걸 좋아하지 않아? 그리고 실제로이 동기 중 하나 여야합니다. 세계에서 다른 사람이 할 수 있다는 사실 외에 큐브 기능을 사용하는 방법 - 그 뭔가를 고려하여 작성하는 좋은 이유 사용자 정의 기능 - 코드의 덩어리가 만들어 프로그램에있을 경우 귀하 가지가 보내주세요하려는 개념적 의미, 이름 -이 경우, 합창 등 - 다음은 마찬가지로 별도의 함수로 그를 작성할 수 있습니다. 당신은 주에 모든 것을 쓸 필요가 없습니다 그것은 단지 경우 한번 분리하고 이름을 줄 청소기 느낀다. 그래서 여기이 경우에, 나는 꼭대기에 댓글이 표시 그냥 노래이 기능 병의 지정된 번호. 난이 전화를 할 필요가 없다는 여기에 주목 일 입력 및 출력. 사실,이 시간은 단지 병에 대한 내 입력 B를했다. 여기주의 무효 어떤 제안? 그 합창 - 청중 :을 반환하지 않습니다. 데이빗 J. MALAN는 : 값을 반환하지 않습니다. 그리고 실제로, 함수는 값을 반환 할 필요가 없습니다. 그들은 뭔가를 그냥 할 수 있습니다. 그들은 부작용이라는 것을 할 수있는이 일에 경우는 화면에 인쇄의 모든것입니다. 그래서 여기이 코드는, 말 그대로 단지에서 훔친 것을 알 앞의 예. 유일한 차이점은 대신 내로 i를 사용하는 것입니다 변수, 난 지금 내 변수로 B를 사용하고 있습니다. 그래서 여기 B가, 나 여기 B가, 나 B가 여기에 한 마이너스. 그러나 코드는 정확히 동일합니다. 그러나 우리가이 기능을 사용 할 수있는 방법 당신을 보여, 보내줘 앞서 실제로 루프에있을이을 변경할 수 있습니다. 은 (i; 전> N INT I = N - 개). 그래서 우리의 앞의 예에서 도난습니다. 이전, 내가 시작했을 것으로 라인 37에 이 짜증나는 노래를 부르고. 대신, 난 지금의 합창을 부를께요. 완료. 그래서 지금이 루프의 모든 반복에,이 다른 전화를 제가 쓸 수 있었던 기능, 합창. 이 년 전에 다른 사람에 의해 쓰여진되지 않았습니다. 그러나 코러스는 한편, 인쇄 printf를 사용 이 네 줄 알아. 하지만 계속해서 합창을 부르 겠어요 사실 루프는 내가, 맨 끝에서 얻을 수 있다는 뜻 나는 지금까지이 같은 동일한 노래. 그래서 짧은에, 지금 내 코드를 다시 보면, 비록 기능이 동일합니다, 이건 것을 알 더 많은 읽을지기 시작. 확실치는 어떻게 GetInt 구현됩니다. 사실, 난 합창 구현하는 방법을 모르겠어요. 하지만 나에게 중요하지 않습니다. 지금은 분류 할 수 있기 때문에 난 책을 읽고, 인간으로, 상관 없어요 이 위로부터 아래. 그리고 기능은 무엇에 따라 이름 때문에 그래요, 내 코드는 점점 더 읽을 수 있습니다. 그리고 우리 프로그램은 훨씬 더 복잡 얻을로 - 학기 말까지, 당신은 라인의 수백을 쓰고됩니다 PHP와 자바 스크립트와 같은 같은 언어로 코드 - 그게 추적까지보다 훨씬 쉽게 발견됩니다 당신은 무슨 짓을했는지. 그리고 당신이 시작할 때 친구들과 협력하거나 파트너 또는 동료, 당신은 훨씬 더를 작성 할 수 있습니다 이러한 기본을 행사하기 시작하여 대규모 프로그램 빌딩 블록. 그 말과 함께 그런데, 왜 우리는 하루 안 부르세요? 그리고 우리는 수요일에 표시됩니다. [박수 갈채]