목록Development/C & C++ (45)
컴공생의 다이어리
문제 문자열을 읽고 문자의 빈도를 계산하는 프로그램을 작성하시오. 예를 들어, ALL이 총 문자 수이고 N가 문자 'a'의 수이면 문자 'a'의 빈도는 N / ALL 으로 계산할 수 있다. 입력 문자열은 대소 문자를 구분하지 않는다. 코드 #include #include using namespace std; int main(){ char buf[50] = { 0, };//문자열 int count[26] = { 0 , };//A ~ Z cout = 'A' && *p
문제 주어진 범위 (-30 ≤ 𝑥 ≤ 30, 𝑥는 정수)에서 2차 함수의 최대 값과 최소값을 찾는 프로그램을 작성하시오. 2 차 함수의 계수 a, b, c는 사용자로부터 입력된다. 이때 a는 0이 아니다. 코드 #include using namespace std; double Max(double a, double b, double c){//최대값 double y; //y=f(x) double max = c;//max를 c로 초기화(c는 y절편) for (int x = -30; x
문제 네 가지 기능(배열의 정보 추가, 삭제, 검색 및 정렬)이있는 프로그램을 작성하시오. 배열은 크기 2 * 6 (행 * 열) 정수 유형의 2 차원 배열이다. 첫 번째 열에는 학생 ID가 포함되고 두 번째 행에는 해당 수학 점수가 포함된다. 프로그램이 시작되면 배열이 비어 있다. 사용자의 명령에 따라 반복적으로 수행되는 기능으로 'End'를 입력하면 프로그램이 종료된다. 네 가지 기능 각각에 대한 기능을 만드시오. Append(추가) : 사용자가 입력한 학생 ID와 수학 점수 쌍을 배열 끝에 추가한다. 추가하고 나서 배열을 2차원 모양으로 인쇄한다. Delete(삭제) : 사용자가 입력한 학생 ID와 일치하는 학생ID와 수학 점수 쌍을 삭제한다. 삭제 한후 배열을 2차원 모양으로 인쇄한다. Search..
문제 교통 카드 잔액에 관한 프로그램을 작성하시오. 교통 카드의 초기 잔액은 20000원이다. 운임은 고정 요금이 아닌 거리 규칙에 따라 측정 및 공제된다. 기본 요금은 40km에 720원, 추가 요금은 41km부터 8km당 80원이다. 프로그램은 각 이동 거리를 입력하여 카드의 최종 잔액을 출력한다. 최소 이동 거리는 4km, 최대 이동 거리는 178km이다. 입력 값이 위에서 언급 한 범위를 벗어나면 현재 잔액을 인쇄하고 프로그램을 종료한다. 더 이상 공제되지 않으면 이동할 수 없으므로 현재 잔액을 인쇄하고 프로그램을 종료하시오. 그리고 ‘-1’을 입력하면 프로그램을 종료하시오. 코드 #include using namespace std; int main(){ int ib = 20000;//초기 잔액 ..
문제 도형을 별표(=asterisk)와 다이아몬드로 그리는 프로그램을 작성하시오. 프로그램은 도형의 크기(N)를 입력으로 사용한다. N은 5에서 29사이의 홀수이며, 올바른 입력을 한다면 별표와 다이아몬드를 그릴 문자를 각각 입력해 출력하시오. 코드 #include using namespace std; void Ast(int ast, char c)//asterisk function { int k = (ast - 1) / 2; for (int i = 0; i < k; i++) { for (int j = 0; j < i; j++) cout
배열이나 벡터 같은 연속된 자료 구조에서는 데이터 중간에 자료를 추가하거나 삭제하는 작업이 매우 비효율적이다. 그래서 연결 리스트와 같은 형태의 자료 구조를 사용한다. 기본적인 연결 리스트를 구성하려면 포인터를 하나 가지고 있어야 하고, new와 delete 연산자를 이용해 메모리를 할당하고 해제할 수 있어야 한다. c++에서는 배열에 대한 래퍼 클래스 std::array를 제공하듯이 연결리스트에 대한 래퍼 클래스인 std::forward_list 클래스를 제공한다. std::forward_list std::forward_list는 기본적인 연결 리스트의 성능을 유지하면서 추가적인 기능을 제공한다. 성능 유지를 위해 std::forward_list는 전체 리스트의 크기를 반환하거나 또는 첫 번째 원소를 ..
reserve(n) 함수 reserve 함수는 필요 없이 메모리가 재할당 되는 것을 방지한다. 이 함수를 사용함으로 인해 재할당 횟수 를 최소화 시켜준다. 컨테이너 용량을 최소 n크기 만큼 잡아놓고 쓰기 때문에 그 용량을 넘지 않는 이상 재할당을 발생하지 않는다. resize(n) 함수 resize 함수는 컨테이너 개수를 무조건 n으로 맞추고 더 넣거나 넣지 않거나 하더라도 size()는 무조건 n개로 설정된다. 할당된 개수보다 요소가 더 많을 경우 끝에 있는 요소는 버려진다. shrink_to_fit() 함수 여분의 메모리 공간을 해제하는 용도로 사용된다. 이 함수를 호출하면 벡터의 용량이 벡터 크기와 같게 설정된다. 벡터 크기가 더 이상 변경되지 않을 때 사용하면 유용한다. www.yes24.com/..
std::vector는 std::array나 c/c++에서 지원하는 배열의 문제 중 하나인 고정크기 문제를 해결한다. 배열의 경우 한번 정해지면 고정이라 수정하기가 어렵지만 벡터는 동적 배열 구조 클래스이기 때문에 초기화 과정에 데이터의 크기를 제공하지 않아도 된다. 예를들어 배열의 경우 크기를 10으로 선언하면 10이 최대이며 더 늘릴 수가 없기 때문에 초기에 넉넉히 공간을 잡아줘야 한다. 하지만 벡터의 경우 처음에 크기를 10으로 선언해도 나중에 필요에 따라서 추가하거나 줄일 수 있다. vector의 선언 및 초기화 아래는 벡터(vector)를 선언하고 초기화하는 방법이다. vector 변수명 벡터 생성 vector 변수명(숫자) 숫자만큼 벡터 생성 후 0으로 초기화 vector 변수명(숫자, 변수1..
std::array c++의 std::array는 메모리를 자동으로 할당하고 해제하며, 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿이다. 아래는 int타입의 std::array 배열을 선언한 후, 원소 값을 설정하거나 화면에 출력하는 코드이다. #include #include using namespace std; int main() { //크기가 3인 int 타입 배열 생성 std::array arr1; arr1[0] = 1;//첫번째 원소를 1로 설정 std::cout
for문은 배열을 반복할 때 편리하고 유연한 방법을 제공하지만, 조금 복잡하고 실수로 인해 오류가 발생하기 쉽다. C++에서는 범위 기반 for문(range-based for statement)이라는 새로운 유형의 루프를 도입하여 더 간단하고 안전하게 배열 등의 모든 요소를 반복하는 방법을 제공한다. 범위 기반 for문(range-based for statement) for(element_declaration : array) statement; 범위 기반 for문은 위와 같은 문법 형태를 가진다. 루프는 각 array의 요소를 반복해 element_declaration에 선언된 변수에 현재 배열 요소의 값을 할당한다. 최상의 결과를 얻으려면 element_declaration이 배열 요소와 같은 자료형이..