[완료]C언어로 월별 및 시간으로 전체의 누적을 구하려고 하는데 잘 안되서 이렇게 질문합니다.
월별 및 시간으로 전체의 누적을 구하려고 하는데 잘 안되서 이렇게 질문합니다.
일단 시간은 제외하고 월별만 코딩을 했습니다.
데이터는 2001년부터 2002년까지 이며, 이중 월별로 1월은 몇개, 2월은 몇개의 형식으로 나타내려고 합니다.
코딩 한번 봐주세요..ㅠ
---------------------------------
-- DATA --
2002-12-26 23:41
2002-12-17 8:44
2002-12-16 18:21
2002-12-12 21:42
2002-12-10 7:42
2002-12-07 16:43
2002-12-05 11:01
2002-12-05 10:05
2002-11-13 21:46
2002-11-06 21:48
2002-10-28 11:50
2002-10-25 4:06
2002-10-23 10:30
2002-10-20 4:22
2002-10-19 21:31
2002-10-16 19:48
2002-10-04 2:06
2002-09-19 3:10
2002-09-16 7:36
2002-09-15 16:40
2002-08-13 16:07
2002-08-10 21:47
2002-08-06 21:37
2002-08-06 7:32
2002-07-17 6:50
2002-07-12 8:17
2002-07-09 4:01
2002-07-02 1:49
2002-06-23 11:12
2002-06-07 22:24
2002-05-29 18:22
2002-04-17 7:52
2002-04-14 12:29
2002-04-01 7:46
2002-03-25 18:10
2002-03-25 5:31
2002-03-22 11:28
2002-03-17 9:26
2002-03-12 20:04
2002-03-08 2:09
2002-03-07 23:30
2002-02-28 22:26
2002-02-07 9:31
2002-02-03 22:44
2002-01-17 20:16
2002-01-17 6:28
2002-01-08 8:18
2002-01-07 17:10
2002-01-04 0:33
2001-11-30 11:18
2001-11-24 16:10
2001-11-21 10:49
2001-11-13 6:15
2001-11-09 13:54
2001-10-28 22:27
2001-10-01 3:35
2001-09-24 9:33
2001-09-19 8:47
2001-09-15 2:32
2001-09-13 6:07
2001-09-07 8:42
2001-08-24 11:12
2001-08-20 21:04
2001-08-06 23:46
2001-07-27 10:04
2001-07-26 19:55
2001-07-23 17:29
2001-07-15 20:01
2001-06-29 11:21
2001-06-17 1:04
2001-06-16 21:26
2001-06-13 13:53
2001-06-09 0:36
2001-05-28 7:25
2001-05-27 20:24
2001-05-27 15:25
2001-05-25 0:06
2001-05-16 1:09
2001-05-05 19:23
2001-05-05 11:21
2001-04-21 2:30
2001-04-17 2:42
2001-04-16 22:50
2001-03-19 22:16
2001-03-07 8:27
2001-03-06 0:23
2001-02-28 12:46
2001-02-19 8:27
2001-02-14 1:02
2001-02-10 17:47
2001-02-08 16:59
2001-01-29 11:44
--------------------------
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int main (int argc, char **argv) { int i, j, k, n; int dummy; double *mon, *hr; int count[12] = { 0 }; mon = (double *)malloc(n*sizeof(double)); hr = (double *)malloc(n*sizeof(double)); n = 501.; k = 0; i = 0; j = 0; for (i=0; i<n; i++) { scanf("%d-%lf-%d %lf:%d", &dummy, &mon[i], &dummy, &hr[i], &dummy); printf("%.0lf %.0lf\n", mon[i], hr[i]); } for (j=0; j<12; j++) for (k=0; k<n; k++) { printf("%.0lf", mon[i]); if(mon[i] == j+1) { count[j] ++; } // printf ("%d : %d\n", j+1, count[j]); } printf ("%d : %d\n", j+1, count[j]); }
뭐가 어떻게 안되는데요?
뭐가 어떻게 안되는데요?
피할 수 있을때 즐겨라! http://melotopia.net/b
값이 출력이 안되서요..
값 츌력이 원하는대로 안되서요....
음 ..
코딩이 익숙치 않으면, 먼저 저 코드를 말로 풀어서 한 줄 한 줄 적어 보세요.
그리고 그대로 했을 때 문제가 풀리는 지 검토하고, 문제가 있다면, 알고리즘 수정.. 다시 구현.. 반복..
이 과정만 꼼꼼히 연습해도 스스로 많은 문제를 해결할 수 있을 겁니다.
다른 사람 손으로 문제를 해결했다 하더라도, 그 원인을 발견하나 해결하는 방법을 모르면 아무 소용 없죠.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
일단 n에 값이 들어가기 전에 사용했네요.
일단 n에 값이 들어가기 전에 사용했네요. malloc부분을 n=501뒤로 옮기셔야 할 거예요. 그리고 n=501.으로 썼는데, n은 int형인데 501.은 double형이므로 뭔가 안맞죠?
scanf로 사용자 입력을 직접 받을거면 그냥 눈으로 보고 사람이 파싱하는게 더 빨라요. 즉, 애초에 이건 몇월 몇시다 이렇게 입력하는게 더 낫다는 겁니다. 자동화 하고 싶으면 파싱 루틴을 만드세요.
2중 for루프에서 for는 바로 다음에 있는 문장 1개만 반복하니까 {...}괄호를 사용해서 명확하게 반복해야 할 부분을 지정하세요.
컴파일러가 최적화를 해줄지 어떨지는 모르겠지만, 이 설계대로라면 2중 루프를 12*501번 돌아야 하네요. 더 최적화해서 501번만 돌도록 할 수도 있습니다. 엄밀히 말해서, for구문이 3개 들어가 있는데, 1개만 써도 됩니다.
수치 출력에 %lf를 사용했는데 갯수 세는거라면 정수를 사용하는게 더 낫지 싶네요.
math.h는 쓸일이 없어보이니까 빼도 될 거라고 생각합니다.
피할 수 있을때 즐겨라! http://melotopia.net/b
만드신 코드를 수정해봤습니다.
데이터를 a.txt 파일로 만들고. 아래와 같이 코딩합니다.
- n 변수 위치를 상위 코드로 올리기
- fscanf로 파일 읽기
- mon[n]을 mon[k]로 바꾸기
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
mon 과 hr을 double로
mon 과 hr을 double로 사용하시네요..
뒷부분의 if(mon[i] == j+1) 에서 괴로운 일이 생길수도 있습니다.
int로 사용하고, count[mon]++ 로 하세요..
대략
이렇게 하시면 될듯..
댓글 달기