JavaRush /Java Blog /Random-KO /Harvard CS50: 1주차 과제(강의 3 및 4)
Masha
레벨 41

Harvard CS50: 1주차 과제(강의 3 및 4)

Random-KO 그룹에 게시되었습니다
Harvard CS50: 1주차 과제(강의 3 및 4) - 1친구 여러분, 세미나 노트 에서 기본 이론 정보를 얻을 수 있습니다 . 거기에서는 C의 기본 사항 외에도 특수 클라우드 IDE CS50에 연결하는 방법(작업을 실행하고 확인하려면 이 작업을 수행해야 함)을 설명하고 기본적으로 필요한 Linux 명령 및 언어 구조를 설명합니다. 강의에 제시된 자료와 C에 대한 참고 사항이 충분하지 않은 경우 다른 소스를 참조하세요. 예를 들어, 이 기사 마지막 부분에 나열된 항목이 있습니다. " 추가 자료 " 주제에서
  • 첫 주 목표
  • IDE CS50
  • 명령줄 및 워크벤치 업데이트
  • IDE에서 작업
  • 안녕하세요, C님!
  • 버그?
  • 유효성 검사: check50 테스트
  • C 기초: 스크래치와의 비교
  • C의 기본 데이터 유형
  • 라이브러리 C
  • 안녕하세요 C 다시: 가장 간단한 프로그램의 구문 분석
  • C의 I/O에 대해 좀 더 자세히 알아보기
이 주제의 자료:
  • 검증된 데이터 항목: cs50.h 라이브러리의 특수 기능
  • 작업 1. 물 소비량의 스마트 계산
  • 과제 2. 마리오가 함께해요!
  • 작업 3. 변화를 가져올 시간
  • 코드를 검증하고 점수를 받는 방법
  • 코드 리소스
  • 추가 문헌

검증된 데이터 항목: cs50.h 라이브러리의 특수 기능

이 강좌를 더욱 편리하게 만들기 위해 우리는 특히 사용자가 입력한 데이터를 처리하는 데 매우 유용한 기능을 갖춘 특수 라이브러리 CS50을 개발했습니다.
  • GetString()사용자가 입력한 문자열을 읽습니다.

  • GetInt()사용자가 입력한 문자열을 읽고 정수가 포함되어 있는지 확인합니다.

  • GetFloat()사용자가 입력한 문자열을 읽고 부동 소수점 숫자가 포함되어 있는지 확인합니다.

  • GetLongLong()사용자가 입력한 문자열을 읽고 긴 실수가 포함되어 있는지 확인합니다.

작업 1. 물 소비량의 스마트 계산

Harvard CS50: 1주차 과제(강의 3 및 4) - 2논리적입니다. 샤워를 오래할수록 이 과정에 더 많은 물이 소비됩니다. 얼마인지 알아볼까요? 샤워기가 거의 열리지 않더라도 분당 약 6리터의 물이 흘러나옵니다. 그리고 이것은 여러분이 마실 물 12병입니다. 일반적으로 한 사람이 샤워를 하는 시간은 약 10분 정도이며, 씻으려면 총 120개의 반리터 병이 필요합니다. 꽤 많이! . water.c_ ~/workspace/pset1_ 프로그램은 시간에 따라 샤워에 사용되는 물병의 수를 계산해야 합니다. 그건:
  1. 프로그램은 사용자에게 샤워에 보낸 시간(분)을 묻습니다.
  2. 사용자가 양의 정수를 입력합니다.
  3. 프로그램은 사용자가 사용한 병의 수를 표시합니다.
username:~/workspace/pset1 $ ./water
minutes: 10
bottles: 120
단순화를 위해 이번에는 사용자가 항상 분 수를 올바르게 입력한다고 가정합니다. 즉, 입력한 숫자가 양수인지 정수인지 확인하지 않습니다. 나중에 수표 쓰는 법을 배우겠지만 지금은 이것으로 충분합니다. 프로그램이 올바르게 실행되고 있는지 확인하려면 check50,터미널에 다음 줄을 입력해야 합니다.
check50 2015.fall.pset1.water water.c
그리고 코스 직원이 작성한 프로그램이 어떻게 작동하는지 보려면 water다음 명령을 실행하십시오.
~cs50/pset1/water

과제 2. 마리오가 함께해요!

Harvard CS50: 1주차 과제(강의 3 및 4) - 3세계에서 가장 유명한 배관공을 아시나요? Nintendo의 도움으로 가상의 콧수염이 있고 빨간 모자를 쓴 약간 통통한 남자는 여러 세대의 게이머들에게 영웅이 되었습니다. 우리가 누구에 대해 이야기하고 있는지 모르신다면, 여기 1985년 고전 게임에 대한 링크가 있습니다 . 저를 믿으세요. 여전히 훌륭하고 확인해 볼 가치가 있습니다! 스마트폰이나 오프라인 에뮬레이터용 클래식 Super Mario 버전을 찾을 수도 있습니다. 일반적인 개발을 위해서는 이 모든 것이 필요합니다. 안타깝게도 아직 작업이 아닙니다. 그리고 임무는 이것이다. 첫 번째 Mario 레벨이 끝나면 모든 플레이어는 다음과 같은 반 피라미드를 보았습니다 mario.c. ~/workspace/pset1. 우리 프로그램은 여러분이 보는 것과 유사하지만 그래픽 없이 콘솔에 직접 반 피라미드를 그릴 것입니다. 각 블록은 해시 아이콘(#)으로 구성됩니다. 아직 방법을 찾지 못하더라도 제 말을 믿으세요. 쉽습니다. 문제를 더욱 흥미롭게 만들기 위해 0부터 23까지의 음수가 아닌 정수를 사용하여 반 피라미드의 높이를 설정하는 기능을 추가해 보겠습니다. 그림에서 피라미드의 높이는 가장 높은 위치에 있는 것으로 간주되며, 즉, 8과 같습니다. 사용자가 번호를 잘못 입력한 경우 다시 한 번 요청해야 합니다. 그런 다음 (printf 피라미드를 사용하여) 생성하십시오. 아래 예와 같이 반 피라미드의 왼쪽 하단 모서리를 터미널 창의 왼쪽 모서리와 정렬하도록 주의하세요. 밑줄 친 텍스트는 사용자가 직접 입력한 내용입니다.
username:~/workspace/pset1 $ ./mario

height: 8
       ##
      ###
     ####
    #####
   ######
  #######
 ########
#########
가장 오른쪽에 있는 두 열의 높이가 같습니다. 아직 파이프, 구름 및 Mario 자신을 생성할 가치가 없습니다 =). 적어도 이 작업에서는요. 사용자가 잘못된 데이터를 입력한 경우(숫자를 입력하지 않았거나 1보다 작거나 23보다 큰 숫자를 입력한 경우) 프로그램은 아래 예와 같이 데이터를 다시 입력하도록 요청해야 합니다. 여기서 밑줄 친 텍스트는 무엇입니까? 사용자가 키보드로 입력했습니다. 입력된 문자열을 읽으려면 를 사용하십시오 GetInt. 잘못된 입력을 확인하는 데 도움이 될 수 있지만 모든 경우에 해당되는 것은 아닙니다.
username:~/workspace/pset1 $ ./mario
Height: -2
Height: -1
Height: foo
Retry: bar
Retry: 1
##
프로그램을 컴파일하려면 터미널에 다음 줄을 입력하세요.
make mario
또는 더 투명하지만 더 긴 버전:
clang -o mario mario.c -lcs50
그런 다음 실행을 위해 프로그램을 실행하십시오.
./mario
프로그램이 올바르게 실행되고 있는지 확인하려면 다음을 실행하십시오 check50.
check50 2015.fall.pset1.mario mario.c
코스 도우미 버전의 Mario로 플레이하려면 다음 줄을 입력하십시오.
~cs50/pset1/mario

작업 3. 변화를 가져올 시간

Harvard CS50: 1주차 과제(강의 3 및 4) - 4위도에서는 이것을 본 적이 없지만 미국에서는 사진에 표시된 장난감이 있는 것 같습니다. 실린더는 직경이 다른 동전용으로 설계되었으며 스프링 메커니즘에 의해 방출됩니다. , 장치 자체를 어린이 계산원의 벨트에 부착할 수 있습니다. 그런데 누군가가 계산원에게 고액의 청구서를 지불하면 어떻게 될까요? 거스름돈을 위해 동전을 세는 것이 얼마나 어려운 일인지 상상해 보십시오. 발행되는 코인의 수를 최소화하기 위해 소위 "탐욕스러운" 알고리즘을 사용할 수 있습니다. NIST(National Institute of Standards and Technology)에서 정의한 대로, 이는 문제 해결의 각 단계에서 항상 최적의 솔루션(해당 단계의 전체에서 얻은)도 최적일 것이라고 가정합니다. 무슨 뜻이에요? 계산원이 고객에게 41센트의 잔돈을 빚지고 있고 그의 허리띠에는 25, 10, 5, 1센트 단위의 잔돈을 위한 동전 실린더가 있다고 가정해 보겠습니다. "탐욕스러운" 알고리즘에 따라 계산원은 첫 번째 단계에서 즉시 최대 금액을 제공하려고 합니다. 이 시점에서 가장 좋은 해결책은 25펜스를 주는 것입니다. 41-25 = 16. 지불해야 할 금액이 16펜스 남았습니다. 분명히 25펜스는 너무 많아서 10이 남습니다. 16-10 = 6. 이제 동일한 원리를 사용하여 5펜스를 주고 1을 줍니다. 따라서 구매자는 25, 10, 5펜스와 1펜스. 돈을 발행하기 위한 "탐욕스러운" 단계별 지침은 이 경우뿐만 아니라 미국 통화 단위(및 유럽 연합)에도 최적인 것으로 나타났습니다. 즉, 계산원이 모든 종류의 동전을 충분히 가지고 있으면 알고리즘이 가장 잘 작동합니다. 즉, 가능한 모든 경우에서 최소 개수의 동전을 발행합니다. 그렇다면 거스름돈을 제공하는 데 필요한 최소 코인 수는 얼마입니까? 이것이 우리의 세 번째 과제입니다. greedy.c디렉터리에 파일을 만듭니다 ~/workspace/pset1. 주어진 값: 25, 10, 5, 1센트 단위의 동전 프로그램은 다음을 수행해야 합니다.
  1. 사용자에게 거스름돈을 얼마나 주어야 하는지 물어보세요.
  2. 이를 수행할 수 있는 최소 동전 수를 계산하십시오.
메모:GetFloat입력에는 CS50 라이브러리의 함수를 사용하고 printf출력에는 표준 I/O 라이브러리의 함수를 사용합니다 . 또한 프로그램은 입력의 정확성을 확인해야 합니다. GetFloat사용자가 점으로 구분된 달러와 센트 단위의 값을 입력할 수 있도록 를 사용하도록 요청했습니다 . 예를 들어, $9.75의 빚이 있는 경우 사용자는 9.75를 입력해야 하지만 $9.75 또는 975는 입력할 수 없습니다. 사용자가 의미 있는 숫자를 입력하는지 확인해야 합니다. 음수가 아니라고 가정해 보겠습니다. 함수 자체는 이에 GetFloat도움이 되지 않습니다 . 사용자가 잘못된 입력을 하면 이를 다시 입력하고 올바른 데이터로만 프로그램을 실행하도록 요청해야 합니다. 부동 소수점 숫자에 내재된 부정확성에 주의하세요. 예를 들어 0.01은 로 직접 표현할 수 없습니다 float. 아래 코드를 사용하여 소수점 50자리와 같은 형식화된 출력을 사용해 보십시오.
float f = 0.01;
printf("%.50f\n", f);
그건 그렇고, 무엇이든 계산하기 전에 전체 금액을 센트로 변환하고 동시에 에서 로 변환하는 것이 논리적이므로 float많은 int오류와 어려움을 피하는 데 도움이 될 것입니다. 자동 코드 분석기가 문제를 올바르게 확인할 수 있도록 하려면 프로그램 출력의 마지막 줄에 최소 동전 수(뒤에 \n 문자가 있는 정수) 이외의 다른 정보가 포함되어 있지 않은지 확인하십시오(연구하는 사람들 JavaRush는 여기서 말하는 내용을 잘 알고 있습니다 =)). 다음은 프로그램 결과가 어떻게 나타나는지에 대한 예입니다.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
0.41
4
부동 소수점 숫자의 특성을 고려하면 0을 무시하고 .41 형식으로 숫자를 입력할 수 있습니다. 물론 프로그램에서 잘못된 데이터 전체를 입력할 가능성이 있는지 확인하려는 사용자에게는 다음과 같은 내용이 표시됩니다.
username:~/workspace/pset1 $ ./greedy
O hai! How much change is owed?
-0.41
How much change is owed?
-0.41
How much change is owed?
foo
Retry: 0.41
4
이러한 요구 사항과 위에서 본 예를 기반으로 하면 코드에 일종의 루프가 포함될 가능성이 높습니다. 애플리케이션을 테스트하는 동안 루프가 멈추지 않는다는 것을 알게 되면 ctrl-c 조합을 사용하여(경우에 따라 여러 번) 프로그램 실행을 중단할 수 있습니다. 당신은 이미 프로그램을 컴파일하고 실행하는 방법을 알고 있습니다. 프로그램이 올바르게 작동하는지 확인하려면 유틸리티를 사용하여 check50터미널에 다음 줄을 입력하십시오.
check50 2015.fall.pset1.greedy greedy.c
그리고 코스 어시스턴트가 만든 이 프로그램을 가지고 플레이하고 싶다면 다음 명령어를 쓰세요:
~cs50/pset1/greedy

코드를 검증하고 점수를 받는 방법

  1. 옵션 1

    최종 성적이 아닌 코드의 정확성을 확인하는 것이 중요한 경우, 명령어를 사용하여 확인하고 수정할 수 있습니다.

    check50 2015.fall.pset1.name name.c

    CS50 IDE의 터미널 라인에 입력되었습니까? name작업 파일의 이름은 어디에 있습니까?

  2. 옵션 2

    성적을 받고 싶다면(기본적으로 check50을 실행하는 것과 동일하지만 결과를 기억하고 일부 양식을 영어로 작성하는 경우 다음 단계를 따르세요.)

    • 2단계 중 1단계

      1. 애플리케이션이 준비되면 CS50 IDE에 로그인합니다.
      2. CS50 IDE의 왼쪽 상단에 있는 터미널 창이 아닌 파일 브라우저 내에서 hello.c 파일(pset1 디렉터리에 있는 파일)을 마우스 왼쪽 버튼으로 클릭하거나 마우스 오른쪽 버튼으로 클릭하고 다운로드를 클릭합니다. 브라우저에 hello.c가 로드된 것을 확인해야 합니다.
      3. water.c에 대해 반복합니다.
      4. Mario.c에 대해 반복합니다.
      5. greyy.c에 대해 반복합니다.
      6. 별도의 탭이나 창에서 CS50 제출 에 로그인합니다 .
      7. 창의 왼쪽 하단에 있는 제출을 클릭하세요.
      8. 나타나는 창의 문제 세트 1에서 새 제출 업로드를 클릭합니다.
      9. 나타나는 창에서 파일 추가...를 클릭합니다. 파일 열기라는 창이 나타납니다.
      10. hello.c가 다운로드된 위치로 이동합니다. 일반적으로 다운로드 폴더나 다운로드를 위해 기본적으로 할당된 폴더에 있습니다. hello.c를 찾으면 한 번 클릭하여 표시한 다음 열기를 클릭하세요.
      11. 파일 추가...를 다시 클릭하면 파일 열기 창이 다시 나타납니다.
      12. 이제 같은 방법으로 water.c 파일을 찾으세요. 그것을 클릭한 다음 열기(또는 "열기")를 클릭하십시오.
      13. 이제 mario.c를 찾으세요. 또한 같은 방식으로 클릭하여 엽니다.
      14. greyy.c 파일과 모든 것이 동일합니다.
      15. 업로드 시작을 클릭하여 CS50 서버에 파일 업로드를 시작합니다.
      16. 나타나는 화면에 선택한 파일 없음이라는 창이 표시됩니다. 마우스 커서를 화면 왼쪽으로 이동하면 다운로드한 파일 목록이 표시됩니다. 각각을 클릭하시면 각각의 내용을 확인하실 수 있습니다. (다른 버튼이나 아이콘을 클릭할 필요가 없습니다). 확인을 위해 파일을 보낼 준비가 되었다고 확신한다면 모든 작업이 끝났다고 생각하세요! 코드를 직접 다시 확인하거나 문제를 수정하려면 CS50 제출로 돌아가서 이 단계를 반복하세요. 원하는 만큼 다시 보낼 수 있습니다. 가장 최근 제출물만 평가됩니다.
  3. 2/2단계(=인 경우 평가에 필요하지 않음)

    이제 https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x 로 이동하여 특별한 양식을 찾아보세요. 그 안에는 몇 가지 이론적 질문에 답한 다음 그 아래에 있는 제출을 클릭해야 합니다.

별표가 있는 질문은 필수입니다:
  • 좋아, 이게 나오는 걸 봤어야 했는데! 몇 문장으로 설명하자면, 도서관이란 무엇일까요? * (도서관이 무엇인지 간략하게 설명해주세요)
  • 단 몇 문장으로, #include <cs50.h> 프로그램 위에 이를 작성할 때 어떤 역할을 합니까? *(일부 프로그램 상단에 나타나는 #include <cs50.h> 줄의 역할은 무엇인가요?)
  • 문제 세트 0: 스크래치에 대략 몇 시간을 소비했다고 생각하시나요?
  • 문제 세트 1: C에 대략 몇 시간을 소비했다고 생각하시나요?
  • 지금까지 CS50x에 대해 어떻게 생각하시나요? *(현재 CS50에 대한 귀하의 의견은 좋아요 또는 싫어요 옵션을 선택해 주세요)
  • CS50s Facebook 그룹(http://www.facebook.com/groups/cs50)을 통해 급우나 교직원에게 도움을 요청하셨나요? *(페이스북 그룹에서 다른 학생이나 조교에게 도움을 요청한 적이 있습니까?)
  • http://www.reddit.com/r/cs50의 CS50s Subreddit을 통해 급우나 교직원에게 도움을 요청한 적이 있습니까? *(Subreddit을 통해 다른 학생이나 보조자에게 도움을 요청한 적이 있습니까?)
  • @cs50 또는 #cs50을 사용하여 Twitter를 통해 반 친구나 교직원에게 도움을 요청한 적이 있나요? *(트위터에서 @cs50 또는 #cs50을 사용하여 다른 학생이나 조교에게 도움을 요청한 적이 있습니까?)
친구 여러분, 질문이 있으시면 이 가이드 아래의 댓글에 적어주세요. 정보에 대한 초대를 받을 수 있는 JavaRush 레벨 5에 도달하지 않은 경우 그렇게 하는 것이 좋습니다. 무료이고 흥미롭고 별로 어렵지 않습니다.

코드 리소스:

  1. 3강

    http://cdn.cs50.net/2015/fall/lectures/1/w/src1w.zip

  2. 4강

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f.zip

    http://cdn.cs50.net/2015/fall/lectures/1/f/src1f/

추가 문헌

http://cpp.com.ru/kr_cbook - 언어 저자인 Brian Kernighan과 Dennis Ritchie가 쓴 C에 ​​관한 고전 책의 러시아어 버전입니다. 좁은 범위에서는 K&R로 널리 알려져 있습니다. 그러나 번역은 최신판이 아닙니다. 처음 세 장을 읽어보세요. 필요한 것보다 자료가 조금 더 많지만 문제를 해결하는 데는 충분합니다. https://computer.howstuffworks.com/c.htm 은 CS50 작성자가 권장하는 리소스입니다. 영어로. 페이지 1-7, 9, 10.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION