2017-11-18 2 views
1

최대 10 개의 숫자에 대한 산술 평균 및 표준 편차를 계산하는 프로그램을 만들어야합니다. 또한 사용자가 숫자 0을 입력 할 때 추가 입력이 중지됩니다. 크기가 10 인 배열을 사용하려고 시도했지만 그 다음에는 숫자 합계가 다음과 같이 나뉘어지기 때문에 산술 평균을 계산하는 올바른 방법을 찾지 못했습니다. 매 10 회. 비록 10 개 미만의 숫자를 입력 했는데도. 이 시나리오에서 다른 접근 방식을 사용해야하고 배열을 사용하지 않아야하는지 알고 싶습니다. 참고 : 이것은 과제물이므로 목록을 사용할 수 없습니다.사용자가 1과 10 사이의 숫자를 제공해야한다면 배열 또는 while 루프를 사용합니까?

+0

0은이 배열에 입력 할 수있는 유효한 숫자입니다. 또는 양의 정수만 입력해야합니까? – Christos

+0

양수와 음수의 이중 숫자가 모두 허용되지만 0을 사용하는 경우 프로그램에서 입력이 중지되고 숫자 0을 포함하지 않고 산술 평균 및 표준 편차를 계산해야합니다. – Fihii

+1

그래서 0 이외의 항목 만 합산하고 계산합니다. – Slai

답변

2

당신이 아래의 크기 (10)의 두 배의 배열을 만드는 경우 :

double[] array = new double[10]; 

다음 배열의 모든 항목이 제로 double의 디폴트 값을 갖는다.

사용자가 0을 입력하면 위의 배열에 저장되지 않고 프로그램이 다른 입력을 중지하기 때문에 array의 0이 아닌 값은 평균에 포함되어야하는 값입니다.

당신이 평균을 계산하기 위해, 다음을 시도 할 수 있다고 말했다되고 그건 :

double sum = 0; 
int numbers = 0; 
for(index=0; index<array.Length; index++) 
{ 
    if(array[index]==0) 
    { 
     break; // from this index and above all numbers are zero. 
    } 

    // The current sum of numbers you have processed. 
    sum = sum + array[index]; 

    // The numbers you have processed 
    numbers = numbers + 1; 
} 

double mean; 
if(numbers > 0) 
{ 
    // The user has given at least one non zero number. 
    mean = sum/numbers; 
} 

당신이 위의 표준 편차의 calcuation을 만들 수 기준으로합니다.

+0

주석에 따라 int가 아닌 double이어야합니다. – Marco

+0

@ Marco 좋은 캐치!감사합니다 – Christos

+0

감사합니다! 이것은 평균 계산에 유용합니다. 나는 적어도 하나의 방법을 사용해야 함을 잊어 버렸다. 이 경우 표준 편차를 계산하는 방법을 사용하면 효과가 있다고 생각합니까? – Fihii

1

당신은

제로 변수 "카운터"를 초기화하고 증가 입력 한 전화 번호 수를 추적 할 변수를 사용해야마다 사용자가 0

는 다음의 "를 사용하는 것보다 다른 뭔가를해야만 입력 카운터 "변수의 값을 N (항목 수 또는 관측 수)로 계산하십시오 (예 : 평균값을 구하려면 카운터의 값으로 숫자의 합계를 나눕니다).

0

while 루프를 사용하면 명시 적으로 백 트랙킹하지 않고도 오류를 처리 할 수 ​​있습니다.

다음 입력을 요청하기 전에 사용자 입력을 처리 할 수 ​​있도록 yield return을 사용했습니다. 즉, 애플리케이션의 기능에 반드시 영향을 미치지 않으면 서 (진행 및 메모리 소비와 관련하여) 입력의 개수를 제한없이 가질 수 있습니다. GetInputs().Take(10).TakeUntil(x => x == 0)을 사용하여 원하는 값의 수를 나타낼 수 있습니다.

IEnumerable<int> GetNumbers() 
{ 
    while (true) 
    { 
     try 
     { 
      Console.Write("Enter a number: "); 
      var text = Console.ReadLine(); 
      var value = int.Parse(text); 
      yield return value; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("That'a not a number!"); 
     } 
    } 
} 

은 그것이 열거 가능한 내부 IO를하고있어 이후, 방법에 Console 인라인을 갖는 약간 이상한 느낌,하지만 그건 그냥 날 수 있습니다. 보다 융통성 있고 명시 적으로 만들고 싶다면 print/read as 함수를 삽입 할 수 있습니다.

숫자를 처리하려면 .ToArray();을 사용할 수 있습니다.이 숫자는 사용자가 입력 한 입력의 크기에 비례하여 int [] 배열을 제공합니다.

관련 문제