C/C++ 예제

시삽: 레드플러스 님 
게시판 이동:
 제목 : 그룹(GROUP) 알고리즘
글번호: 252
작성자: 레드플러스
작성일: 2006/04/19 오전 10:53:10
조회수: 4237
// 그룹(GROUP) 알고리즘
#include 
#include 

//[!] Input data
struct Record
{
	char ProductName[6];    // 상품명
	int	Quantity;           // 판매량
}record[10];

//[!] Output data
struct Output
{
	char ProductName[6];    // 상품명
	int Quantity;           // 판매량
}output[10];

void main(void)
{
	//[1] Init
	FILE *inData;
	FILE *outData;
	char buffer[10];
	char tempbuff[4];
	int count = 0;
	int i = 0;
    int j = 0;
    struct Record temp;

	int subTotal = 0;		// 그룹소계
	int groupCount = 0;		// 그룹수

	//[2] Input
	inData = fopen("C:\\Temp\\abc1229.txt", "rt");
	outData = fopen("C:\\Temp\\abc1229_.txt", "wt");
	
	if (inData == NULL || outData == NULL)
	{
		perror("파일을 열 수 없습니다.");
		exit(1);
	}

	while (!feof(inData))
	{
        memset(buffer, 0, 10); // 버퍼 초기화 
		fgets(buffer, 10, inData);
        if (strlen(buffer) > 2) // 예외처리 : 버퍼에 담기 데이터가 있다면...
        {
            printf("크다\n"); 
            strncpy(record[count].ProductName, buffer + 0, 5);
    	    record[count].Quantity = atoi(strncpy(tempbuff, buffer + 5, 3)); 
	        count++;
        }
	}

	printf("입력 후 데이터 : \n");
	for(i = 0;i < count;i++)
	{
		printf("%s %d\n", record[i].ProductName, record[i].Quantity);
	}

	//[2] Process
	//[A] Sort
	for(i = 0;i < count - 1;i++)
	{
		for(j = i + 1;j < count;j++)
		{
			if(strcmp(record[i].ProductName, record[j].ProductName) > 0)
			{
				temp = record[i];
				record[i] = record[j];
				record[j] = temp;
			}
		}
	}
	printf("정렬 후 데이터 : \n");
	for(i = 0;i < count;i++)
	{
		printf("%s %d\n", record[i].ProductName, record[i].Quantity);
	}

	//[B] Group
	for(i = 0;i < count;i++)
	{
		subTotal += record[i].Quantity;//그룹소계
        // 상품명이 다르면, 새로운 상품명으로 이동
		if(strcmp(record[i].ProductName, record[i+1].ProductName) != 0)
		{
			strcpy(output[groupCount].ProductName, record[i].ProductName);
			output[groupCount].Quantity = subTotal;//그룹소계
			groupCount++;		//그룹수 증가
			subTotal = 0;//그룹소계 초기화
		}
	}

	//[3] Output
	printf("처리 후 데이터 : \n");
	for(i = 0;i < groupCount;i++)
	{
		printf("%s %d\n", output[i].ProductName, output[i].Quantity);
        fprintf(outData, "%s %d\n", output[i].ProductName, output[i].Quantity);
	}

	//[4] Dispose
	fclose(inData);
	fclose(outData);
}

/*
abc1229.txt파일의 내용
--------------------
RADIO  5
TV     6
PHONE  3
RADIO  2
PHONE  2
TV    10
PHONE 11
TV     7
PHONE  4
*/
 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트

(댓글을 남기려면 로그인이 필요합니다.)

관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 12. 메모리 관리 - 레드플러스 2005-07-26 5075
  11. C언어를 사용한 기초(현업) 알고리즘 - 레드플러스 2005-07-26 5782
  11.1. 예제. 합계(Sum), 카운트(Count), 평균(Avg) 알고리즘 : 합... - 레드플러스 2005-08-02 4923
  11.1.1 예제. 반올림, 올림, 내림 - 레드플러스 2005-11-25 7796
  카운트알고리즘.c - 레드플러스 2014-05-21 3459
  합계평균알고리즘.c - 레드플러스 2014-05-21 3611
  11.2. 예제. 최대값과 최소값 알고리즘 : 최대값최소값.c - 레드플러스 2005-08-02 12593
  11.2.1. 예제. 파일 처리를 사용한 합계/평균/최대값/최소값 - 레드플러스 2005-11-25 6197
  11.2.2 예제. 포인터를 사용한 최대값 알고리즘 - 레드플러스 2007-02-02 4426
  최댓값최솟값알고리즘.c - 레드플러스 2014-05-21 3946
  11.3. 예제. 오름차순 정렬 알고리즘 : 오름차순정렬.c - 레드플러스 2005-08-02 13204
  11.4. 예제. 선택 정렬(Selection Sort) 알고리즘 : 알고리즘_선택정... - 레드플러스 2005-08-02 5002
  선택 정렬(Selection Sort) 알고리즘 설명 엑셀 파일 선택정렬연습.xls(16 KB) 레드플러스 2005-08-08 5263
  선택 정렬(Selection Sort) 알고리즘 설명 텍스트 파일 - 레드플러스 2005-11-28 4709
  11.4.2. 예제. 선택 정렬(Selection Sort) 알고리즘 : 회전별 데이... - 레드플러스 2007-01-19 4430
  Re : 11.4.2. 예제. 선택 정렬(Selection Sort) 알고리즘 : 설... 선택정렬알고리즘설명.xls(14 KB) 레드플러스 2007-01-19 4025
  11.5. 예제 : 버블 정렬(Bubble Sort) 예제 : 알고리즘_버블정렬.c - 레드플러스 2005-08-05 6494
  11.6. 예제. 스위치를 사용한 버블 정렬 : 알고리즘_스위치사용버블정렬.c - 레드플러스 2005-08-05 5211
  11.7. 예제. 순위 구하는 프로그램 : 알고리즘_순위.c - 레드플러스 2005-08-06 5469
  11.13. 병합(MERGE) 알고리즘 - 레드플러스 2006-04-18 5018
현재글 그룹(GROUP) 알고리즘 - 레드플러스 2006-04-19 4237
  수열(Sequence) - 레드플러스 2006-04-24 3994
  11.10.1 수열(Sequence) : 1/2 - 2/3 + 3/4 - 4/5 + ... - 레드플러스 2007-01-16 4146
  가까운 값(근사값;NEAR) 알고리즘 - 레드플러스 2006-10-19 12618
  11.12. 최빈값(Mode) 알고리즘 - 레드플러스 2006-10-19 6628
  최빈값(Mode) 알고리즘 최빈값알고리즘설명.xlsx(11 KB) 레드플러스 2009-05-28 8687
  11.8. 순차 검색 알고리즘 - 레드플러스 2006-10-19 5810
  11.9. 이분(이진) 검색 알고리즘, 이진 탐색, 이진 검색 - 레드플러스 2006-10-19 5978
  11.10. 배수의 정렬 - 레드플러스 2007-01-26 4600
  11.11. 순서도(Flow Chart) : 알고리즘을 그림으로 표현하기 순서도(Flow Chart).ppt(32 KB) 레드플러스 2007-01-26 8730
  11.14. 예제. 기본적인 알고리즘 코드 : 피보나치수열.c - 레드플러스 2007-02-15 5306
다음글 10. 파일 처리 - 레드플러스 2005-07-26 5671
 
손님 사용자 Anonymous (손님)
로그인 Home