자기 계발 리스트 120

[CS50] 문자열과 배열

C뿐 아니라 많은 프로그래밍 언어들은 문자열을 저장하기 위해 string 자료형을 사용했습니다. 문자열이라는 단어는 문자가 나열되어있다. 즉 배열되어있다.라는 의미로 추측해볼 수 있는데요. 이런 관점에서 string 자료형이 C에서 어떻게 정의되어있는지 배열과 관련해서 공부해보도록 하겠습니다. string은 말 그대로 문자(char)의 배열이었습니다. 만약 string s = "HI!"; 로 정의되어 있다면 s는 문자열이기 때문에 메모리상에 'H', 'I', '!'로 저장되어 있을겁니다. 그런데 사실 문자열은 저번 포스팅에서 설명했듯이 길이가 정해져 있지 않기때문에 메모리의 크기 역시 정해져있지 않습니다. 그럼 string이 연속으로 정의되어있다면 어떻게 구분할까요?? 그래서 string에는 종단 문자인..

CS 기초/배열 2021.08.08

[CS50] 배열

지금까지 특정 자료형의 변수를 선언하면 컴퓨터 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 됩니다. 이번 포스팅에서는 메모리상에서 여러값을 연이어 저장하는 방법을 공부해보도록 하겠습니다. C에는 여러가지 자료형과 그에 맞는 메모리의 크기가 있습니다. - char : 1byte - bool : 1byte - int : 4byte - float : 4byte - long : 8byte - double : 8byte - string : 알 수 없음(길이에 따라 다르다) 이러한 데이터들은 RAM이라고 하는 컴퓨터 하드웨어에 저장이 됩니다. 이제 여러값을 연이어 저장해서 사용하기 위해서는 먼저 배열이란 단어에대해 알아야합니다. 배열이란? 번호(인덱스)와 번호에 대응하는 데이터들로 이루어진 자료구조이다.(출처..

CS 기초/배열 2021.08.07

[CS50] 코드의 디자인

규모가 큰 프로그램을 작성하게 되면 본인 혼자가 아니라 여러 사람들이 함께 작업을 진행하게 됩니다. 이때는 내가 기여한 부분이 프로그램에 오류를 발생시키지 않도록 주의해야 합니다. 또한 같은 코드를 작성했다고 하더라도 어떻게 디자인하는지에 따라 상대방이 코드를 이해하고 수정하는 속도가 달라질 수 있기 때문에 이러한 부분도 신경 써줘야 합니다. 따라서 이번 포스팅에서는 코드의 정확성과 디자인을 어떻게 관리하는지에 대해서 공부해보도록 하겠습니다. 본 포스팅에서 나오는 코드의 사용은 CS50 강의를 위해서 작성되었다고 합니다. CS50 IDE를 제외한 다른 IDE에서는 사용이 불가능할 수 있습니다. check50 ~/ $ check50 cs50/problems/hello (cs50/problems 경로에 있는..

CS 기초/배열 2021.08.06

스트롱리프트 8주차 중간 인바디 측정

어김없이 돌아온 인바디 측정일입니다. ㅎㅎㅎ 보통은 스트롱리프트 주에 맞춰서 n주차 끝이나 시작일에 인바디 측정일이 맞춰졌었는데 이번에는 휴가도 다녀오고 개인적인 사정으로 운동을 며칠 쉬었더니 안 맞았네요;; 물론 다녀와서 운동을 보통 때보다 더 열심히 하드 하게 한건 맞는데 사실 이렇게 운동도 쉴 때 쉬고 휴가 갔다 오면서 먹을 것도 많이 먹어서 이번 달 인바디는 큰 기대를 안 했습니다. 결과는 7월 -> 8월 한 달간 신체변화 저번 달보다 체중은 조금 늘었지만 골격근량이 늘고 체지방이 조금 빠졌더라구요 ㅎㅎ 생각지도 못하게 신체변화가 좋게 나와서 좀 놀라긴 했습니다. 트레이너분께 말씀드리니까 그동안 많이 안 먹고 있었던 것 같다고 하시더라구요 ㅎㅎㅎ 저는 보통 하루에 두 끼 정도 먹는데(식단도 밸런스..

운동log 2021.08.06

[CS50] 디버깅

저번 포스팅에서는 소스코드를 작성하고 실행하기 위한 컴파일링을 해줬는데 만약에 컴파일링을 할 때 코드의 오류가 있거나 결과가 우리 의도와 다를 땐 어떻게 해야 할까요? 이런 것을 '버그'라고 하는데 오늘은 버그를 효과적으로 찾고 그에 따른 해결방법에 대해 공부해보겠습니다. 이번 포스팅에서는 버그와 디버깅이라는 단어를 알면 본문 내용을 이해하기 쉬울 겁니다. 우선 버그(Bug)란? 소프트웨어가 예상하지 못한 잘못된 결과를 내거나, 오류가 발생하거나, 착오나 오작동이 발생하는 등의 문제를 뜻한다. 보통 프로그램의 소스코드나 설계 과정에서의 오류 때문에 발생한다. (출처: 위키백과) 디버깅(Debugging)이란? 디버그(Debug)라고도 하며 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나..

CS 기초/배열 2021.08.05

[CS50] 컴파일링

지금까지 C 코드를 작성하고 실행하기 위해서는 '컴파일링' 이라는것을 해줘야 합니다. 그렇다면 컴파일링이 무엇인지, 컴파일링을 하면 구체적으로 어떤 단계를 거쳐서 컴퓨터가 해석 가능하게 변하는지를 공부해보도록 하겠습니다. 우선 컴파일링이란 컴파일 하는 과정을 말하며, 사용자가 작성한 소스코드를 컴퓨터가 이해할 수 있도록 0과 1로 구성된 바이너리 언어 파일로 바꿔주는 것을 말합니다. #include int main(void){ printf("hello, world\n"); } 이 코드를 실행하려면 clang hello.c로 컴파일 하고, ./a.out 명령을 통해 프로그램을 실행하게 되는데 프로그램을 실행할 때 아래의 4 단계를 거칩니다. (단어가 이해가 안 된다면 영어단어 그대로 보셔도 됩니다.) 1...

CS 기초/배열 2021.08.04

[CS50] 하드웨어의 한계

컴퓨터는 프로그램을 구동하기 위해서 다양한 물리적 장치를 이용합니다. 그중 하나가 아래 보이는 메모리 혹은 램이라는 것으로 프로그램이 필요한 정보가 저장되는 곳입니다. 이러한 램의 용량은 유한하기 때문에 때로는 프로그램에서 의도하지 않은 오류가 발생하기도 합니다. 지금까지는 의도적이던 아니던 사용자의 실수로 인해 에러가 발생했는데 램(RAM : Random Access Memory)은 유한한 크기의 비트만 저장할 수 있기 때문에 때로는 컴퓨터에서 부정확한 결과를 나타내기도 합니다. 그렇다면 어떠한 예시가 있는지 알아봅시다. 부동 소수점 부정확성 x / y의 결과를 출력하는 코드를 작성해보겠습니다. #include #include int main(void){ float x = get_float("x : "..

CS 기초/C언어 2021.08.03

[CS50] 사용자 정의 함수, 중첩 루프

프로그래밍을 하다 보면 반복적으로 같은 코드를 작성해야 할 때가 있는데, 이때 코드를 여러 번 쓰는 게 아니라 함수 형태로 지정해두면 코드를 간결하게 사용이 가능합니다. 더불어 하나의 루프로 수행하기 힘든 작업을 중첩 루프를 사용해 해결하는 방법도 공부해보도록 하겠습니다. 만약 "에취!"라고 세번 말하는 C 프로그램을 작성할 때 가장 간단한 방법은 단순히 3번 출력하게 만들어주는 것입니다. #include int main(void){ printf("에취!\n"); printf("에취!\n"); printf("에취!\n"); } 그렇다면 이것을 좀 더 간단하게 코딩해본다면 어떻게 될까요? 지난 시간에 배운 루프를 사용하면 더 간단히 표현할 수 있습니다. #include int main(void){ for(..

CS 기초/C언어 2021.08.02

헬린이의 스트롱리프트 7주차 마무리

어느덧 7주 차를 마무리하는 날이 왔습니다. ㅎㅎㅎ 6주 차와 7주 차의 텀이 있는 이유는 이번 주에 휴가를 다녀오는 바람에.... 운동을 홈트 정도 가볍게 한 거 말곤 없어서 늦었습니다.... 확실히 운동은 안하다가 하면 힘에 부치는 게 확실히 느껴져서 반성하게 되더라고요..... 이제 8월 접어들어서 다음 주면 인바디도 다시 찍어야 되는데 말이죠(저는 인바디를 매달 7~10일 사이에 찍고있습니다.) 휴가 다녀와서 이번주 스트롱리프트 해본 바로는 다음 주 인바디는 솔직히 별로 기대가 안되네요.. ㅋㅋㅋㅋㅋ 몸이 무겁다는게 어떤 건지 오래간만에 훅 느껴본 일주일이었습니다. 그래도 다행히 무게가 떨어지지는 않은 것 같지만 그렇다고 늘지도 않았습니다. 그냥 현상유지만 간신히 하고 있습니다. ㅎㅎ 현재 7주 ..

운동log 2021.08.02

[CS50] 자료형, 형식 지정자, 연산자

C는 정수형이나 문자열 이외에도 다양한 데이터 타입이 정의되어 있는데 어떠한 타입이 있는지, 또 그것을 다양한 연산자를 통해 조건문이나 반복문으로 설정해 값을 계산하는 방법을 공부해보도록 하겠습니다. 먼저 데이터 타입으로 정의되어 있는 것 - int : 특정 크기 또는 특정 비트까지의 정수 (예) 1, 5, 40, -4, 0 - long : 더 큰 크기의 정수 - float : 부동소수점을 갖는 실수 (예) 3.14, 0.0, -29.34 - double : 부동소수점을 포함한 더 큰 실수 - char : 문자 하나 (예) 'a', 'B', '?' - string : 문자열 - bool : 불리언 (예) true, false, 1, 0, yes, no 그렇다면 왜 다양한 데이터 타입이 필요할까요? 기본적..

CS 기초/C언어 2021.08.01