본문 바로가기
반응형

코딩98

[C++ 코딩문제] 소수 출력 문제 정수 N을 입력받고 N 이하의 소수를 출력하시오. 정답 - 이전 글인 소수판별 문제 답에서 확장함 - decideN 클래스 내에서 정의된 num 이 소수인지 판단하는데, 특정 값을 입력받아 소수인지 판단하는 함수가 필요했으므로 decideN2를 정의함 - num 보다 작은 수들에 decideN2 를 적용하고 소수일 경우 출력되게 함. #include using namespace std; class myprime { private: int num; public: myprime(const int num); int decideN(); // num이 소수인지 판단 int decideN2(int n); // 입력된 n이 소수인지 판단 void NumPrime(); // num이하의 소수 출력 }; mypri.. 2022. 8. 29.
[C++ 코딩문제] 소수 판별 문제 정수 N 을 입력받고 N이 소수인지 아닌지 판별하시오. (함수 대신 클래스를 사용하시오) 정답 - 소수면 1, 아니면 0이 출력 되도록 함. - 객체지향에 익숙해지기 위해 클래스를 사용했음 - 입력된 값을 num 이라고 하고. 2부터 (num-1)까지의 정수로 num을 나눈 나머지를 구함. 만약 나머지가 0이라면 약수가 존재하는 것이므로 소수아님. #include using namespace std; class isprime { private: int num; public: isprime(const int num); int decideN(); }; isprime::isprime(const int N) { num=N; } int isprime::decideN() { int a=0; if (num==1.. 2022. 8. 26.
[C++] 입력받기 C++에서 숫자가 문자를 입력받는 함수는 cin 입니다. 아래와 같이 사용합니다. int a; cin>>a; 아래는 숫자를 입력받고 입력받은 숫자를 출력하는 예시입니다. #include using namespace std; int main() { int a; cin>>a; cout 2022. 8. 26.
[C++ 클래스의 이해] 2. 생성자란 무엇인가 생성자는 클래스에서 객체를 생성할 때 초기화를 편하게 해주는 함수입니다. 생성자를 이용하면 객체 생성과 초기화를 동시에 할 수 있습니다. 객체 생성 시 맴버변수들은 private 으로 분류하는 것이 일반적입니다. private 맴버들은 외부에서 접근하는 것이 불가능하기 때문에 값을 초기화 해주는 함수를 정의해야 했습니다. 상황을 이해하기 위해 예시를 하나 가져옵시다. 아래는 지난시간에 사용한 예시입니다. 이해를 돕는데 불필요한 코드는 생략했습니다. 주석 표시 부분을 보시면 됩니다. class tp { private: char company[20]; char prod_name[20]; float volume; public: void SetValue(const char * cp,const char* pr_n.. 2022. 8. 19.
[C++] 클래스와 구조체의 차이 클래스와 구조체의 차이를 설명하기 위해 구조체를 하나 선언하겠습니다. struct person { char sex; int age; char job[20]; float height; float weight; }; 헬스장 회원정보를 저장하는 구조체입니다. 회원 한명의 구조체변수를 선언하는 방법은 아래와 같습니다. 이를 '초기화'라고 부릅니다. 초기 값을 입력했기 때문입니다. int main() { struct person kim={'M',28,"teacher",178,68}; }; 클래스는 구조체에서 몇가지 기능을 추가한 것이라고 할 수 있습니다. 선언방법은 아래와 같이 동일합니다. struct 대신 class 라고 적으면 됩니다. class person { char sex; int age; char jo.. 2022. 8. 18.
[C++] 구조체 안에 함수 정의하기 구조체 만들기 예제로 사용할 구조체를 하나 만들어봅시다. 헬스클럽 회원 구조체입니다. 회원 한명의 구조체 변수도 선언해주었습니다. #include using namespace std; struct person { char name[20]; char sex; int age; char job[20]; float height; float weight; }; int main() { person id1={"김지영",'F',23,"학생",164,56}; } 구조체 안에 함수 정의하기 구조체 안에 함수를 하나 추가할 것입니다. 체질량지수(BMI) 를 계산하는 함수입니다. 체질량지수는 자신의 몸무게(kg)를 키의 제곱(m)으로 나눈 값입니다. 구조체 안에 함수를 선언하면 아래와 같습니다. 코드에서 구조체 부분만 적었습.. 2022. 8. 18.
[C++] 메모리 구조 (코드, 데이터, 힙, 스택) 먼저 알기 : 저장장치 컴퓨터의 저장장치에는 램과 하드디스크가 있습니다. 컴퓨터에서 램과 하드디스크 용량을 확인하는 방법을 먼저 알아봅시다. 먼저 램입니다. 내컴퓨터에서 우클릭을 하고 속성에 들어가보면 '설치된 RAM' 옆에 값이 써있을겁니다. 저는 16GB라고 써있네요. 이 값이 램의 용량입니다. 하드디스크 용량은 내컴퓨터를 더블클릭해서 열면 알 수 있습니다. 장치 및 드라이브에 표시된 드라이브들이 하드디스크입니다. 램과 하드디스크를 구분하는 아주 좋은 예가 있습니다. 책상과 캐비넷 예시입니다. 램은 책상이고 하드디스크는 케비넷입니다. 케비넷에서 필요한걸 꺼내서 책상에 올려놓고 작업하듯, 하드디스크에서 원하는 프로그램을 램에 올려놓고 작업하게 됩니다. 책상이 클 수록 이것저것 더 많이 올려놓고 작업 할.. 2022. 8. 17.
[C++] 참조자가 함수의 매개변수인 경우 (call-by-reference) 함수를 호출하는 두가지 방식은 아래와 같습니다. Call-by-value Call-by-reference Call-by-value 는 입력된 변수의 값만 복사하여 매개변수에 저장하는 방식입니다. Call-by-reference 는 입력된 변수의 주소값을 전달받아, 함수 밖에 선언된 변수를 조작할 수 있게 합니다. Call-by-reference 는 아래와 같이 포인터를 이용하여 매개변수를 정의합니다. int myfun(int* var1) { 함수내용 } 참조자를 이용하여 동일한 기능 구현이 가능합니다. 함수를 아래와 같이 선언하여도 위와 동일한 의미를 갖습니다. int myfun(int &var1) { 함수내용 } 참조자를 함수의 매개변수로 사용하여 함수에 변수를 입력하면 변수의 값을 변경하는 함수를 만.. 2022. 8. 17.
[C++] 포인터 변수와 const 포인터 변수에도 const 선언을 하여 상수로 만들 수 있습니다. 이번 글의 목적은 아래 네가지 선언을 구분하는 것입니다. 1) const int a=3; 2) int a=3; const int* pa=&a 3) int a=3; int* const pa=&a 4) int a=3; const int* const pa=&a 1번은 a라는 변수를 변경이 불가능하도록 만든 것입니다. a=5 등 a에 다른 값을 대입할 경우 에러가 발생합니다. 2번은 int* pa 앞에 const가 붙어 있습니다. pa를 상수화 한 것은 아니고 *pa 를 상수화 한 것입니다. 따라서 *pa=5 등 *pa 에 다른 값을 대입할 경우 에러가 발생합니다. 3번은 pa 앞에 const가 붙어 있습니다. pa를 상수화한 것이고, pa에는 .. 2022. 8. 17.
[C++] 구조체란 무엇인가 구조체가 필요한 이유 문자형과 숫자형 자료형만 있는 상황을 떠올려봅시다. 변수에는 문자 하나 또는 숫자 하나만 입력이 가능합니다. 10명의 키 데이터를 입력하고 싶다고 합시다. 숫자형 자료형만 있다면 변수 10개를 선언해야 합니다. 이와 같이 비슷한 자료를 편하게 저장하기 위해 만든 자료구조가 '배열'입니다. 배열을 이용하면 아래와 같이 10명의 키를 쉽게 입력할 수 있습니다. int height[10]={187,167,176,...}; 만약 서로 다른 형태의 자료를 묶어서 관리하고 싶은 경우는 어떻게 해야 할까요? 예를 들면 각 사람 별로 성별, 나이, 직업, 키, 몸무게를 묶어서 관리하고 싶은 것입니다. 이런 상황을 위해 만들어진 자료구조가 구조체입니다. 구조체 정의하기 구조체는 일종의 서식이기 때문.. 2022. 8. 16.
[C++] 함수의 인자로 배열을 입력하는 법 배열의 이름에는 배열의 주소가 저장되어 있습니다. 더 정확이 말하면 배열 첫 원소의 주소 입니다. 따라서 배열 이름은 포인터입니다. 함수에서 배열을 입력받으려면 매개변수를 포인터형으로 선언하면 됩니다. 배열의 이름을 입력하면, 배열의 첫번째 원소를 반환하는 함수는 아래와 같습니다. int my_fun(int* arr) { return arr[0]; } int* arr 을 보면 매개변수를 포인터형 변수로 선언한 것을 알 수 있습니다. 실제로 함수를 사용해봅시다. #include using namespace std; int my_fun(int* arr) { return arr[0]; } int main() { int arr[3]={10,20,30}; printf("%d",my_fun(arr)); } //출력.. 2022. 8. 16.
[C++] 함수의 인자전달 방식 함수의 인자전달 방식을 이해하기 위해 문제를 하나 풀어봅시다. 아래 코드의 출력 결과는 얼마일까요? #include using namespace std; void my_fun(int arg1) { int* B=&arg1; *B=3; } int main() { int A=5; my_fun(A); printf("%d",A); } 출력 결과는 얼마일까요? 5입니다. arg1 자리에 A가 입력될 때, A라는 변수의 값만 복사되어 입력됩니다. arg1=5 가 되는 것입니다. B는 arg1의 포인터이므로 *B에 3을 입력하면 agr1이 3으로 수정될 뿐이지 A가 바뀌지는 않습니다. 2022. 8. 16.
[C++] 함수의 값으로 주소를 입력받는 방법 함수에 입력값으로 변수이름을 입력하고 연산을 수행하여도 변수 자체의 값을 바꿀 수는 없습니다. 변수로 부터 값만 전달 받고, 전달받은 값을 이용하여 연산을 하기 때문입니다. 그러나 함수의 입력값으로 변수이름이 아니라 주소를 입력받으면, 함수에서 변수에 직접 접근이 가능해집니다. 먼저 함수 입력값으로 변수 이름을 입력받는 예시를 봅시다. #include using namespace std; int my_fun(int var1) { return var1=var-1; } int main() { int A=5; printf("%d \n",my_fun(A)); printf("%d",A); return 0; } //결과 //4 //5 함수에서 1을 빼는 연산을 수행해도 A값 자체가 바뀌지는 않습니다. 함수를 통해 .. 2022. 8. 16.
[C++] 함수선언을 하면 좋은 이유 함수의 선언은 코드 앞부분에서 컴파일러에게 '나는 이런 함수들을 사용할것이다' 라고 알려주는 것입니다. 코드 앞부분에 함수를 선언하지 않고도 얼마든지 코딩을 할 수 있지만 함수의 정의 순서를 고려해야 하는 번거로움이 있습니다. 예를 들어 A라는 함수를 정의하고 B라는 함수를 정의했다고 합시다. 이때 A라는 함수 안에 B라는 함수를 사용할 수가 없습니다. B가 A보다 뒤에 정의 되었기 때문입니다. 이를 해결하려면 A와 B의 자리를 바꿔야합니다. 함수의 선언은 이러한 번거로움을 해결해줍니다. 함수의 선언 방법을 예시를 통해 알아봅시다. 두 수를 더한 값을 출력해주는 함수와 두 수를 곱한값을 출력해주는 함수를 선언하고 main 함수에서 사용하는 예시입니다. #include using namespace std;.. 2022. 8. 16.
[C++] 문자열이란 무엇인가 (문자열은 배열이다) 숫자와 문자입력 복습 C++에서 숫자와 문자는 하나의 메모리 공간에서 정의됩니다. 예를들어 3이라는 숫자를 정수형태로 정의하고 싶으면 아래와 같이 입력하면 됩니다. int a=3; 위와 같이 선언하면 메모리 공간에서 4바이트 만큼의 공간이 확보되고 a라는 이름이 붙습니다. 4바이트의 공간은 32비트이고 각 비트에 0 또는 1이 채워지면 3을 표현합니다. 문자를 입력할 때는 어떨까요. b라는 문자를 아래와 같이 입력했다고 합시다. char mychar='c'; char은 1바이트 공간을 차지하므로 메모리 공간에 1바이트 만큼의 공간이 확보되고 mychar 이라는 이름이 붙습니다. 1바이트는 8비트이므로 8비트 공간을 0 또는 1로 채워야 하는데요. c는 문자입니다. 문자를 숫자로 어떻게 나타낼까요. 컴퓨터.. 2022. 8. 12.
[C++] 배열의 원소를 포인터로 접근하기 ar[i]=*(ar+i) 배열의 원소에 접근하여 값을 변경하는 등의 행위를 포인터를 이용하여 수행하는 방법을 알아봅시다. 배열을 하나 정의합시다. int ar[3]={1,2,3}; 배열의 첫번째 원소에 접근하는 방법은 두 가지가 있습니다. 하나는 배열의 인덱싱을 이용하는 방식입니다. 아래와 같습니다. ar[0] 다른 하나는 포인터를 이용하는 방식입니다. 아래와 같습니다. *ar 아래 코드를 출력해보면 결과가 1로 동일합니다. cout 2022. 8. 12.
[C++] 참조자란 무엇인가 참조자는 어떤 변수의 메모리 공간에 붙은 또 다른 이름입니다. 쉽게 말하면 같은 대상을 여러 이름으로 부르고 싶은 경우에 사용합니다. 직접 코딩하며 이해해봅시다. int a=3; int &a2 = a; a2는 a와 같은 메모리 공간을 갖게 됩니다. 변수 a에 해당되는 메모리 공간에 a2라는 이름이 하나 더 생긴 것입니다. 아래와 같이 출력하면 둘 다 2이 출력됩니다. cout 2022. 8. 12.
[C++] 포인터에서 p와 *p의 차이 포인터 변수를 하나 선언해봅시다. int a=3; int *p=&a; p에는 a의 주소가 저장됩니다. int *p 에서 *p가 어떤 의미를 갖는 것은 아닙니다. int* 가 의미를 갖습니다. 포인터 자료형이라는 뜻입니다. int* p라고 쓰는 것이 의미를 더 잘 표현합니다. *p 가 단독으로 사용되는 경우도 있습니다. 이때는 p가 가리키는 변수가 됩니다. *p 는 a입니다. 직접 출력하여 확인해봅시다. #include using namespace std; int main() { int a=3; int *p=&a; cout 2022. 8. 11.
[C++] goto 문 (가리키는 곳으로 가시오) goto 문은 게임에서 '포탈'과 비슷합니다. 포탈 두개를 열어놓고 한 포탈에서 다른 포탈로 이동합니다. 예를들어 아래 코드를 실행하면 hello 는 출력되지 않고 world 만 출력됩니다. goto 문을 만나는 순간 portal1 로 이동하기 때문입니다. #include using namespace std; int main() { goto portal1; cout 2022. 8. 11.
[C++] continue 문 (다음번 순서로 넘어가시오) 반복문에서 continue 문을 만나면 다음번 순서로 넘어갑니다. for 문 안에 if문이 들어있는 경우를 예로 들어봅시다. #include using namespace std; int main() { for(int i=1; i 2022. 8. 11.
[C++] while 반복문 while 문은 조건식을 만족할 경우 명령어가 반복해서 실행되는 반복문입니다. 아래와 같은 형식으로 사용합니다. while(조건식) { 명령 } 예제를 통해 이해해봅시다. int i=1; while(i 2022. 8. 11.
[C++] for 반복문 for 문은 조건식을 만족할 경우 명령어가 반복해서 실행되는 반복문입니다. 아래와 같은 형식으로 사용합니다. for(초기식 ; 조건식 ; 제어식) { 명령 } 위 코드만 보고 이해하기 어려울 것이므로 한가지 예제를 통해 이해해봅시다. for(int i=1; i 2022. 8. 11.
[C++] switch 문 스위치라는 이름에 스위치문이 어떤 기능을 하는지 힌트가 담겨 있습니다. 스위치를 하나 떠올려 보면 스위치에는 버튼이 있습니다. 우리가 원하는 버튼을 누르면 해당 기능이 실행됩니다. 스위치 문도 똑같습니다. 아래와 같은 형식으로 사용합니다. switch(버튼이름) { case 버튼1: 명령 break; case 버튼2: 명령 break; case 버튼3: 명령 break; default: 명령 break; } 버튼이름에 원하는 버튼을 입력하면 됩니다. 버튼이름에 버튼1을 입력하면 버튼 1의 명령이 수행되는 방식입니다. default 는 입력된 값에 해당되는 버튼이 없는 경우 실행됩니다. 생략이 가능합니다. break 는 switch 문을 빠져나오는 명령어입니다. 2022. 8. 11.
[C++] if~else if~else 조건문 if문은 조건식이 참일 경우 명령문을 실행합니다. 아래와 같은 형식으로 사용합니다. if(조건식) { 명령문 } 조건식이 거짓일 경우에 무언가를 실행하고 싶다면 else 문을 추가하면 됩니다. 아래와 같은 형식으로 사용합니다. if(조건식) { 명령문 } else { 명령문 } 만약 조건식을 여러개로 분기시키고 싶다면 else if 문을 추가하면 됩니다. 아래와 같은 형식으로 사용합니다. if(조건식1) { 명령문 } else if(조건식2) { 명령문 } else if(조건식3) { 명령문 } else { 명령문 } elseif 문은 원하는대로 추가할 수 있습니다. 2022. 8. 11.
[C++] 자료형의 메모리 크기 확인 (sizeof) C++에서는 char, int, float, double 등 다양한 자료형을 제공합니다. 각 자료형이 차지하는 메모리 크기가 궁금한 경우 sizeof 함수를 통해 확인할 수 있습니다. 아래와 같은 형식으로 사용합니다. sizeof(자료형) 실제 코드를 통해 확인해봅시다. #include using namespace std; int main() { cout 2022. 8. 11.
[C++] 변수의 메모리 크기 확인 (sizeof) 아래와 같은 변수를 선언했다고 합시다. int a=3; 이 변수의 메모리 크기를 확인하려면 sizeof 함수를 사용하면 됩니다. 아래와 같이 사용합니다. sizeof(a) 실제 코드로 결과를 확인해봅시다. #include int main() { int a=3; std::cout 2022. 8. 11.
[C#] 논리 연산자 논리연산자는 논리연산을 수행합니다. 논리연산은 부울연산이라고도 부르는데 참,거짓 두개의 값을 이용한 연산입니다. C#에서는 true, false라는 부울 자료형이 있어서 이들 사이에 연산이 수행됩니다. 논리연산은 세가지가 있습니다. 아래 표를 통해 알아봅시다. 2022. 8. 11.
[C++] 논리연산자 논리연산자는 논리연산을 수행합니다. 논리연산은 부울연산이라고도 부르는데 참,거짓 두개의 값을 이용한 연산입니다. C++에서는 true, false라는 부울 자료형이 있어서 이들 사이에 연산이 수행됩니다. 논리연산은 세가지가 있습니다. 아래 표를 통해 알아봅시다. 2022. 8. 11.
[C언어] 논리연산자 논리연산자는 논리연산을 수행합니다. 논리연산은 부울연산이라고도 부르는데 참,거짓 두개의 값을 이용한 연산입니다. C언어에서는 True, False라는 부울 자료형이 없기 때문에 참은 1, 거짓은 0을 사용합니다. C언어에서 1뿐만 아니라 0이 아닌 모든 값은 참입니다. 논리연산은 세가지가 있습니다. 아래 표를 통해 알아봅시다. 2022. 8. 11.
[C#] 비교연산자 C#의 비교연산자는 두 값의 크기를 비교합니다. 비교 결과가 참일 때는 True을, 거짓일 때는 False 를 반환합니다. 아래 표로 확인해봅시다. 2022. 8. 11.
반응형