ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS50] Computer Science Week1 Problem Set 1: C
    MOOC/edx.org 2015. 2. 3. 02:08
    반응형

    두 번째 과제인데 목표는 아래와 같다.

     

    Get comfortable with Linux.

     

    Start thinking more carefully.

     

    Solve some problems in C.

     

    리눅스의 경우 CS50에서 자체적으로 제작한 리눅스를 사용하고 있다. (우분투 기반인듯하다.)

     

    그리고 가상머신인 VMware 11버전 또한 CS50 수강생들 한정으로 무료로 제공해주고 있다. (이 부분에서 CS50에서 꽤 많은 신경을 썼다는 생각이 들었는데 이런 유료 프로그램까지 어떻게 계약을 따냈을까 하는 생각에서 신기했다. 90$안에 있을 거라는 생각은 덤)

     

    이후에는 VMware 설치와 각종 설정 안내법들이 나와 있는데 엄청 섬세하게 알려주는 바람에 해석을 못할 경우 뭔가 이렇게 많이 해야 하나 생각이 들 정도로 상세하게 글을 작성해두었다.

     

    gedit 이라는 프로그램을 실행시켜서 hello.txt를 작성 후 저장 안내법까지 엄청 상세하게 나와있다.

     

    그리고 해당 디텍토리의 리스트를 보여주는 ls 명령어

     

    make 명령어를 통하여 디버깅하는 방법

     

    위에서 설정한 hello.c 파일을 체킹하는 방법이 있는듯하다. edx에서 check50 2014.fall.pset1.hello hello.c 라는 명령어를 통하여 파일을 업로드하고 제대로 만들었는지 확인을 하는듯한데 신기하다고 생각하였다.

     

    정상적으로 완료되었을 경우 prompt에서

    :) hello.c exists

    :) hello.c compiles

    :) prints "hello, world\n"

     

    라는 문구가 노출된다.

     

    이후 과제는 #를 이용하여

     

    jharvard@appliance (~/dropbox/pset1): ./mario

    height: 8

    ##

    ###

    ####

    #####

    ######

    #######

    ########

    #########

     

    요렇게 만드는게 내용인데 초심자에게는 좀 어렵지 않나 생각이 들었다.

     

    #include <stdio.h>

    #include <cs50.h>

     

    int main(void) {

     

    int height = 0;

    bool correctInput = false;

     

    printf("Height: ");

    do {

    height = GetInt();

    if(height < 0 || height > 23) {

    printf("Retry: ");

    correctInput = false;

    } else {

    correctInput = true;

    }

    } while (correctInput == false);

    int spaces = height - 1;

    int hashes = 2;

    for (int x = 0; x < height; x++) {

    for (int s = 0; s < spaces; s++) {

    printf(" ");

    }

    for (int h = 0; h < hashes; h++) {

    printf("#");

    }

    printf("\n");

    spaces--;

    hashes++;

    }

    return 0;

    }

     

    요렇게 구성해서 문제를 해결하였다.

     

    그리고 다시 edx 서버에 업로드하여 체킹하는 명령어인

     

    check50 2014.fall.pset1.mario mario.c

    를 입력하면

     

    :) mario.c exists

    :) mario.c compiles

    :) rejects a height of -1

    :) handles a height of 0 correctly

    :) handles a height of 1 correctly

    :) handles a height of 2 correctly

    :) handles a height of 23 correctly

    :) rejects a height of 24

    :) rejects a non-numeric height of "foo"

    :) rejects a non-numeric height of ""

     

    요렇게 완료문구가 나온다.

     

    이후에 greedy.c 라는 과제가 나오는데

     

    #include <stdio.h>

    #include <cs50.h>

    #include <math.h>

     

    #define QUARTER 25;

    #define DIME 10;

    #define NICKEL 5;

     

    int main(void)

    {

    // Variable declarations

    float given_amount = 0;

    int cent_amount = 0;

    int quarter_count = 0;

    int dime_count = 0;

    int nickel_count = 0;

    int leftover = 0;

    int coin_count = 0;

    //Input handling

    do

    {

    printf("You gave me: ");

    given_amount = GetFloat();

    //If given amount is zero or less then zero checked

    if(given_amount == 0||given_amount <= 0)

    printf("Number Should be greater then Zero EG:10\n:");

    }

    while(given_amount <= 0);

     

    // Given amount is convert to cents

    cent_amount = (int)round(given_amount*100);

     

    // Quarters

    quarter_count = cent_amount / QUARTER;

    leftover = cent_amount % QUARTER;

    // Dimes

    dime_count = leftover / DIME;

    leftover = leftover % DIME;

    // Nickels

    nickel_count = leftover / NICKEL;

    leftover = leftover % NICKEL;

    // Leftover at this stage is pennies

    coin_count = quarter_count + dime_count + nickel_count + leftover;

    // Pretty print

    // printf("You get %d coins: %d quarters, %d dimes, %d nickels and %d pennies.\n", coin_count, quarter_count, dime_count, nickel_count, leftover);

    //Required output:

    printf("%d\n", coin_count);

    return 0;

    }

    로 작성하여 해결이 가능하다.

     

    똑같이

     

    check50 2014.fall.pset1.greedy greedy.c 로 채킹하여보면

     

    :) greedy.c exists

    :) greedy.c compiles

    :) input of 0.41 yields output of 4

    :) input of 0.01 yields output of 1

    :) input of 0.15 yields output of 2

    :) input of 1.6 yields output of 7

    :) input of 23 yields output of 92

    :) input of 4.2 yields output of 18

    :) rejects a negative input like -.1

    :) rejects a non-numeric input of "foo"

    :) rejects a non-numeric input of ""

     

    이렇게 완료되었다고 나온다.

     

    이로써

     

    hello.c, mario.c, greedy.c 3개의 파일을 제출하면 Week1 과제가 마무리된다.

    반응형

    댓글

Designed by Tistory.