편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2022.05.16

    c언어 이진탐색으로 원하는 값의 위치 찾기


    #define _CRT_SECURE_NO_WARNINGS
    #define len 5
    #include<stdio.h>
    
    int binarySearch(int c[], int leng, int key);
    
    int main()
    {
    
    int num[len], i, j;
    
    int temp;
    
    
    
    int ans;
    
    FILE* fp1;
    
    FILE* fp2;
    
        for (i = 0; i < len; i++) {
    
            printf("숫자를 입력하세요 : ");
            scanf_s("%d", &num[i]);
         }
        for (j = 0; j < len; j++) {
            for (i = 0; i < len - 1; i++)
            {
                if (num[i] < num[i + 1])
                {
                    temp = num[i];
                    num[i] = num[i + 1];
                    num[i + 1] = temp;
                }
            }
        }
    
        fp1 = fopen("data1.txt", "w");
        for (i = 0; i < len; i++)
        {
            fprintf(fp1, "%d\n", num[i]);
        }
    
        while (1)
        {
    
            printf("\n찾으려는 숫자를 입력하세요:");
            scanf_s("%d", &ans);
               if (ans == 'q')
            {
                printf("종료합니다");
                break;
            }
            for (i = 0; i < len; i++)
            {
                if (ans == num[i])
                {
                    printf("%d번째 줄에 있습니다", binarySearch(num,len,ans));
                }
            }
    
        } 
    
    
        return 0;
           }
                 int binarySearch(int c[],int leng,int key)
    
          {
            int low = 0;
            int high = leng - 1;
            int mid;
    
        while (low <= high)
        {
            mid = low + (high - low) / 2;
    
            if (key == c[mid])
                return mid;
    
            else if (c[mid] < key)
            {
                low = mid + 1;
            }
            else
                high = mid - 1;
    
        }
    
         return -1;
        }
    

    편집기로 20개의 숫자를 한줄에 하나씩 써서 data.txt 파일을 생성하라.

    단, 크기 순서로 저장하라

    • 키보드로 임의의 숫자를 입력 받아, 이진 검색을 이용하여 그 숫자가 위 화일에서 몇 번쨰 줄에 있는지를 화면에 출력하는 프로그램(버블 소트)을 작성하라. 없으면 없음을 출력하라. 'q'를 입력 할 떄 까지 위 과정을 되풀이 하라.

    이 코드로 실행해보면 줄의 값도 제대로 안나오고 q 입력했을 때 사진처럼 문장이 반복되어 나오네요. 혹시 어느 부분이 잘못됐는지 알 수 있을까요?

    이미지

  • 프로필 최동훈님의 편집
    날짜2022.05.14

    c언어 질문이요!! 이진탐색으로 원하는 값의 위치 찾기


    define _CRT_SECURE_NO_WARNINGS

    define len 5

    include

    int binarySearch(int c[], int leng, int key);

    int main() {

    int num[len], i, j;

    int temp;

    int ans;

    FILE* fp1;

    FILE* fp2;

    for (i = 0; i < len; i++) {
    
        printf("숫자를 입력하세요 : ");
        scanf_s("%d", &num[i]);
     }
    for (j = 0; j < len; j++) {
        for (i = 0; i < len - 1; i++)
        {
            if (num[i] < num[i + 1])
            {
                temp = num[i];
                num[i] = num[i + 1];
                num[i + 1] = temp;
            }
        }
    }
    
    fp1 = fopen("data1.txt", "w");
    for (i = 0; i < len; i++)
    {
        fprintf(fp1, "%d\n", num[i]);
    }
    
    while (1)
    {
    
        printf("\n찾으려는 숫자를 입력하세요:");
        scanf_s("%d", &ans);
           if (ans == 'q')
        {
            printf("종료합니다");
            break;
        }
        for (i = 0; i < len; i++)
        {
            if (ans == num[i])
            {
                printf("%d번째 줄에 있습니다", binarySearch(num,len,ans));
            }
        }
    
    } 
    
    
    return 0;
       }
             int binarySearch(int c[],int leng,int key)
    
      {
        int low = 0;
        int high = leng - 1;
        int mid;
    
    while (low <= high)
    {
        mid = low + (high - low) / 2;
    
        if (key == c[mid])
            return mid;
    
        else if (c[mid] < key)
        {
            low = mid + 1;
        }
        else
            high = mid - 1;
    
    }
    
     return -1;
    }
    

    편집기로 20개의 숫자를 한줄에 하나씩 써서 data.txt 파일을 생성하라.

    단, 크기 순서로 저장하라

    • 키보드로 임의의 숫자를 입력 받아, 이진 검색을 이용하여 그 숫자가 위 화일에서 몇 번쨰 줄에 있는지를 화면에 출력하는 프로그램(버블 소트)을 작성하라. 없으면 없음을 출력하라. 'q'를 입력 할 떄 까지 위 과정을 되풀이 하라.

    이 코드로 실행해보면 줄의 값도 제대로 안나오고 q 입력했을 때 사진처럼 문장이 반복되어 나오네요 ㅠㅠ 혹시 어느 부분이 잘못됐는지 알 수 있을까요?? 이미지