- 참치군
- ?
- stalk.io
- :: 2013년, 스리는 여섯살
- 웹 강좌
- 점프 투 파이썬
- 요니나의 대학생 재테크
- This is CS50
- 애자일 이야기
- isao의 IT,게임번역소
- 소프트웨어 이야기
- Color Scripter
- 어디를 가든지 마음을 다해 가라
- VisuAlgo
- 서울대 평생교육원
- 몽환
- RegExr: Learn, Build, & Test R…
- Hello, Stranger :D
- I Like Exploit
- Z3alous Security Story
- Project Euler
- Blog
- pieces of code
- window 쪼물딱 거리기
- IT - Informatics Alphabet
- rop
- 국제 정보교육센터 I2sec 대구 1기
- This is the moment. :)
- blackmoon
- z3alous는 세상에 소리 z3alous~
- Acord
- FORENSIC-PROOF
- 어셈블리
- Outsider's Dev Story
- Open Tutorials
- 코드라이언
- 컴퓨터 그래픽스와 3D 프린팅
- HACKABILITY
- Lee, Jae-Hong
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 버퍼오버플로우
- Debug
- BOF
- 피보나치
- 소켓
- 블루블랙
- 레지스터
- 공간복잡도
- 시간복잡도
- Wireshark
- 동대구
- Packet
- 호출규약
- 염색
- Visual Studio
- ubuntu
- Hello World
- 파이썬
- 창의공학설계
- 추상데이터타입
- Calling Convention
- C언어
- 컴파일러
- 베이스
- 오지총
- 알고리즘
- 발표
- 탈색
- 디버깅
- 펌
- Today
- Total
c0smicb0y
시스템 프로그래밍 팀프로젝트 3 본문
내가 만들부분은 다 만들었고 앞으로 설명할 부분은 팀원들이 만든 부분이다.
일단 내가 만든 프로그램에 팀원들이 붙인 기능은
1. 파일입출력을 통한 문자 출력
2. 타이머를 통한 타수 측정
3. 현재페이지에서 끝까지 작성했을때 다음페이지로 넘어가기
이렇게 세가지이다.
먼저 파일입출력은 그리 어렵지 않게 구현하였다.
1 2 3 4 | if ((rfp = fopen("TheLittlePrince.txt", "r")) == NULL){ //파일 열기 perror("file open err"); exit(1); } | cs |
FILE 포인터 변수인 rfp에 fopen으로 TheLittlePrince.txt라는 파일을 읽어오게 하였다.
그런다음
1 2 3 4 5 6 | while (!feof(rfp)){ //파일 읽기 fread(compare1, sizeof(char) * COMPARE, 1, rfp); comp = sampletext(compare1); //이 부분은 compare에 글자 넣고 화면에 표시하는 것 ... } | cs |
rfp를 읽으면서 compare1 배열에 집어넣고 그것을 화면에 표시하고 다음페이지로 넘어가서 또 이걸 반복하고 rfp가 끝이 나올때까지 계속 반복하는 부분이다. 다음페이지로 넘어가는 부분은 지금은 생략되어 있다. 배열에 집어넣고 그걸 화면에 표시하는 부분만 표시되어 있다. 이것으로 파일입출력은 끝이다.
타이머를 통한 타수 측정도 그리 어렵지 않게 구현되었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | #include <time.h> #include <sys/time.h> ... void TypePractice() { ... //time time_t start = 0, end = 0; float gap = 0; float tasu = 1; time_t temp = 0; int k = 0; float persent = 0; int total = 0; int tot = 0; int red = 0; int typing = 0; int remain = 0; float per; ... time(&start);//시작 시간 설정 while (!feof(rfp)){ ... total += comp; if (c != ESC) tot += comp; while (c != ESC && i < comp) { if (next != 1) c = getchar(); //입력받음 if ((c == '\r') || (next == 1)) { ... if (c == '\r'){ red += BUFFER; red -= i%BUFFER; if (COMPARE != comp && line == (comp/BUFFER)*2+1+2+3){ red -= BUFFER; red += comp%BUFFER; } ... } ... } else { if (c != 127) { //backspace가 아닐 때 ... if (buffer1[i%BUFFER] == compare1[i]) { //틀렸다가 맞는 경우를 위한 처리 ... } else { //글자가 틀렸을때 ... red++; } i++; //인덱스 증가 typing++; if (c == ESC) remain = comp - i; } else { //지울 때 if ((i%BUFFER) != 0) { if (buffer1[i%BUFFER - 1] != compare1[i - 1]) red--; ... i--;//인덱스 감소 typing--; ... } } ... } } ... } ... time(&end);//끝 시간 설정 gap = end - start; // 걸린 시간 tasu = 60 * (typing / gap); //타자 속도 temp = end; // // 정확도 계산 if (c == ESC) red += remain; per = (float)tot - (float)red; per /= (float)tot; per *= 100; // 타자검정 clear(); move(1, 1); printw("\ttime : %.1f\n", (float)gap); // 걸린시간 출력 printw("\tta-su :%.1f\n", tasu);// 타수 출력 printw("\taccuracy :%.1f\n", per);// 정확도 printw("\ttotal: %d %d| ", total,tot); printw("typing: %d | ", typing); printw("typing error: %d", red); ... } | cs |
time.h에 있는 현재 시간을 기록하는 time(time_t) 함수를 이용하여 타자연습이 시작될때와 끝날때 시간을 각각 기록하여 그 차를 구하여 타자연습하는데 걸린 시간을 구하고, 타수는 인덱스로 쓰인 i가 전역변수처럼 쓰인것인데 i가 입력라인이 바뀌면 0으로 초기화 되지만, 그렇지 않은 typing 변수를 하나 더 만들어서 지금까지 입력한 글자수를 셀 수 있도록 했다. 그러므로 타수는 1분당 입력갯수임으로 속도같은 개념이니 현재까지 입력한 갯수(거리같은 개념)을 걸린 시간으로 나누어 60을 곱하면 되겠다. 정확도를 위해 red변수를 통하여 handling 해놓았는데 팀원말로는 너무 예외적인 경우가 많아서 하드코딩을 했다고한다. 정확도까지 바라지는 않았는데 이래저래 만들어놓았다. 인덱스에서 맞고 틀림에 따라 좀 다르게 처리한 변수라고 보면 편리하겠다.
그리고 마지막으로 현재페이지에서 끝까지 작성하였을때 다음페이지로 넘어가는 부분이다. 파일입출력을 하는 부분에서 그냥 거의 다 만들어졌다고 봐도 무방한데 일단 코드를 보자.
1 2 3 4 5 6 | while (!feof(rfp)){ //파일 읽기 fread(compare1, sizeof(char) * COMPARE, 1, rfp); comp = sampletext(compare1); ... clear(); } | cs |
이렇게 해서 프로그램을 실행하면
예전에 만든 타자연습과 동일하게 실행되지만, 파일에서 텍스트를 읽어와서 화면에 표시하였고, 페이지의 끝까지 입력하면 다음페이지로 넘어간다.
그리고 중간에 프로그램을 종료하거나 끝까지 완료하면
이런 화면이 뜨면서 자신이 의 타수와 정확도, 입력한 글자, 틀린글자 등등을 알 수 있다.
'진행한 프로젝트 > 시스템 프로그래밍' 카테고리의 다른 글
시스템 프로그래밍 팀프로젝트 4 (16) | 2015.01.09 |
---|---|
시스템 프로그래밍 팀프로젝트 2 (0) | 2015.01.07 |
시스템 프로그래밍 팀프로젝트 1 (0) | 2014.11.25 |