IOS/계산기 프로젝트
7. 후위식으로 이루어진 데이터 배열을 연산하여 결과를 추출
7. 후위식으로 이루어진 데이터 배열을 연산하여 결과를 추출
2017.11.261. 중위식을 전용 데이터 배열로 변환 2. 중위식으로 이루어진 전용 데이터 배열을 후위식으로 이루어진 전용 데이터배열로 변환 3. 후위식으로 이루어진 데이터배열을 연산하여 결과를 추출 후위식으로 이루어진 데이터배열을 연산하는 일만 남았습니다. 개발 계획서에 있지만, 다시한번 원리를 설명드리자면 이렇습니다. 후위식까지 처리가 되었다면 배열에는 다음과 같은 값들이 담겨있습니다. | 값,10 | 값,20 | 덧셈기호,+ | 위의 값이 후위표기이며, 풀어쓰면 다음과 같습니다. 10 20 + 스택을 이용하여 다음처럼 계산합니다. 1. 데큐의 끝까지 반복한다.2. 숫자일경우 스택에 삽입한다.3. 연산자일경우 스택의 두 값들을 뺀다 (차례대로 opr2, opr1이라합시다)* 스택은 후입선출의 구조이기 때문에 opr..
6. 중위식 데이터 배열 -> 후위식 데이터 배열로 변환
6. 중위식 데이터 배열 -> 후위식 데이터 배열로 변환
2017.11.261. 중위식을 전용 데이터 배열로 변환 2. 중위식으로 이루어진 전용 데이터 배열을 후위식으로 이루어진 전용 데이터배열로 변환 3. 후위식으로 이루어진 데이터배열을 연산하여 결과를 추출 이번 포스트에는 2번의 내용을 담습니다. 간단하게 설명을 드리자면 이 로직에는 두가지의 자료구조가 있습니다. 스택과 데큐입니다(데큐는 배열, 큐로 대체가 가능합니다) 처음부터 끝까지 순회 하면서, 조건이 없는 숫자들은 일단 데큐에 넣습니다. 그리고 연산자들은 스택에 넣습니다. 괄호는 왼쪽괄호는 스택에 넣고, 오른쪽 괄호가 나올때까지 스택의 값들을 데큐에 넣습니다. +, - 기호의 경우는 스택이 비거나, 왼쪽 괄호가 나올때까지의 값들을 데큐에 넣은 후 해당 위치의 기호를 스택에 넣습니다. * / 기호의 경우는 스택이 비거나..
5. 중위식 문자열 -> 전용 데이터 배열로 변환(파싱)
5. 중위식 문자열 -> 전용 데이터 배열로 변환(파싱)
2017.11.26자료구조들이 구현 되었으니, 이제 스택을 이용하여 식을 계산하는 함수를 구현하는일이 남았습니다. 우선 간략한 순서는 다음과 같습니다. 1. 중위식을 전용 데이터 배열로 변환 2. 중위식으로 이루어진 전용 데이터 배열을 후위식으로 이루어진 전용 데이터배열로 변환 3. 후위식으로 이루어진 데이터배열을 연산하여 결과를 추출 이 포스트에서는 1. 중위식을 전용 데이터 배열로 변환 하는 부분을 다룹니다. 중위식으로 이루어진 문자열을, 이전 포스트에서 작성하며 설명한 계산기 전용 데이터로 변환하여 배열에 담는과정인데, 설명드리자면 순서는 다음과 같습니다. 1. 문자열 전체를 처음부터 순회합니다1. 해당 위치의 문자의 타입을 판별합니다2. 문자의 타입이 마이너스 기호일 경우에는 유효성 검사를 통해서 음수표시인지, 연..
4. 계산기 함수에 이용하는 열거형과 데이터
4. 계산기 함수에 이용하는 열거형과 데이터
2017.11.26일반적으로 계산기는 문자를 파싱해서 중위표기된 식을 후위표기된 식으로 변환 후 각 문자를 판별해서 연산을 합니다. 제가 만드려는 계산기는 미리 데이터를 정의해서, 그 데이터의 값이 연산자인지, 값인지를 판별하여 후에 있는 수고를 조금 덜어주는 방식으로 만듭니다. 구조는 다음과 같습니다. type -> 값의 타입을 정의합니다.(계산기 열거형)value -> 값을 저장합니다.(문자열) 오직 생성자만 있는 구조체입니다. 계산기 열거형의 종류는 다음과 같습니다. value -> 값입니다. 계산기이므로 수가 들어갑니다.dot -> 점입니다. 소수점인경우입니다.operator -> 순서대로 곱셈,나눗셈,덧셈,뺄셈 기호입니다.Paren -> 왼쪽괄호, 오른쪽 괄호입니다.delimiter -> 구분자입니다etc -> ..
3. 데큐 구조체
3. 데큐 구조체
2017.11.26사실 스택 계산기에 데큐는 크게 필요 없습니다. 다만 개인적으로 배열의 Insert[0] 이게 귀찮기도 하고, 처음에 생각을 잘못해서 일단 구현을하고 조금씩 쓰면서 만들어 두었습니다. 실제로 제가 구현하려는 계산기에 데큐 -> 배열로 100% 치환이 됩니다.(데큐, 배열의 자료구조를 아시는분들은 당연히 아시겠지만, 데큐 -> 배열로 치환은 다 됩니다) 일단 코드는 스택과 크게 차이가 없습니다. Pop할때 앞부분을 뺄지, 뒷부분을 뺄지만 정하게 되어있으며, 앞부분은 큐와 같고 뒷부분은 스택과 같습니다. 삽입은 오직 뒤에서만 이루어집니다. 그리고 추가로, 배열 데큐를 치환하는 연산을 추가했습니다. 12345678910111213141516171819202122232425262728293031323334353..
2. 스택 구조체
2. 스택 구조체
2017.11.23C++에서는 구조체와 클래스의 차이가 거의 없습니다. 구조체는 기본값이 public, 클래스는 기본값이 private인것 외에 차이는 거의 없다고 들었습니다. 그래서 보통 개념적으로만 구분을 했었죠. 클래스는 정말 객체지향의 의미로 하나의 객체의 요구사항들을 정의할때 이용하는것이었고, 구조체는 단순한 값들의 묶음(레코드?)을 이용할때만요(틀릴수도 있겠지만 개인적으론 그렇게 이용했습니다) 하지만 스위프트에서는 조금 다릅니다. 대표적으로 스위프트에서의 클래스는 참조, 구조체는 복사의 의미를 가지고 있습니다. 스위프트 클래스A를 B로 가져오면, B=A가 됩니다. 1234567891011121314151617181920212223242526public Class MyClass{ public var integer..
2. 스택 클래스
2. 스택 클래스
2017.11.22스택은 가장 기본적인 자료구조중 하나입니다. 가장 늦게 삽입한 값이 가장 빨리 나오는 구조로써, 이를 후입선출이라 합니다. A,B,C순서대로 입력을 하고 다시 출력을 하면 C,B,A가 나오는 구조입니다. 스위프트에서 구현할 스택에 필요한것들은 다음과 같습니다. 속성 stack -> 템플릿 배열입니다. 자료를 보관합니다.length -> 스택이 가지고있는 값의 수를 나타냅니다. 사실 Swift에 자체적인 count가 있지만, 개인적으로 따로 만들어 씁니다. 연산 Push -> 스택에 값을 삽입할때 이용합니다. 스택의 크기가 반환됩니다.Pop -> 스택의 맨 마지막 값을 제거하는 동시에 반환합니다.IsEmpty -> 스택이 비어있는지를 확인합니다. 주로 반복작업을 할때 호출합니다.GetLength -> 스택..
1. 개발 계획(수정)
1. 개발 계획(수정)
2017.11.21금일부터 스위프트를 이용한 IOS 앱 개발 스터디를 시작했습니다. 스터디에서 서로의 실력과 페이스를 맞추기 위하여, 연습용 간단한 앱을 선정하여 만들어보기로 했습니다. 제가 잽싸게 계산기를 만들겠다고 선점을 해서 간단한 계산기 프로젝트를 맡았습니다. 개인적으로 언어를 처음 익힐때 예제를 따라하지 않고, 항상 남들 "Hello, World!" 치듯이 저는 기념비적으로 계산기를 만들어 봅니다. 개인적으로 책을 따라하면 재미가 없더라구요.. 본론으로 가보자면 거창하게 코코아 프레임웍까지 공부할 목적은 아니고, (물론 당연히 UI구현하면서 필수적이지만, 계산기 UI는 정말 간단하기에..) 스택을 이용한 계산기 라이브러리를 구현 후 그것을 IOS용 프레임웍인 코코아 프레임웍으로 이식할 생각입니다. 급하지않은 목표..