2014-12-10 10 views
1

PAscal에 문제가 있습니다. 나는 소수하지만 결과를 계산하려면 : 내 코드입니다 : 내가 3 싶어하지만 난이 얻을이 배열에 대한파스칼의 배열에서 소수를 계산하십시오.

Program arrayToFunction; 
const 
size = 5; 
type 
    a = array [1..size] of integer; 
var 
aNumbers: a = (1, 7, 3, 4, 5); 
iCountNumbers: integer; 
function countPrimeNumbers(var arr: a) : integer; 
    var 
    i :0..size; 
    sum,j,count: integer; 
    begin 
    sum := 0;count:=0; 
    for i := 0 to size do 
    begin 
     for j := 2 to arr[i] do 
      begin 
       if(arr[i] mod j = 0) then sum:=1; 
      end; 
     if(sum=0) then count:=count+1; 

    end; 
countPrimeNumbers := count; 
end; 
begin 
iCountNumbers := countPrimeNumbers(aNumbers) ;*) 
    writeln('Numbers: ', iCountNumbers); 
    readln; 
end. 

... 내 문제가 어디 있는지 이해가 안 돼요. 도와주세요

+0

주된 문제는'sum' 변수를 다시 초기화하지 않는다는 것입니다. 그래서'sum' 값이 1이되면 항상 1이됩니다.'sum : = 0;'if (sum = 0) then count : = count + 1;'. 그러나 코드에도 오류가 있습니다. 예를 들어 배열 인덱스는 1부터 시작하지만 'for i : = 0 to size do' 루프는 0부터 시작하므로 첫 번째 반복에서'arr [i]'에 오류가 발생합니다. – Abelisto

+0

나는 파스칼 (34 세)을 한 지 오래되었지만 인덱스는 0부터 시작합니다. 그리고 둘 다 사용합니다. 그래서 문제가 무엇인지 짐작할 수 있습니다. – Vorsprung

+1

이것은 디버거를 사용하는 법을 배울 수있는 좋은 시간입니다. Free Pascal, Pascal Script, Turbo Pascal을 동시에 사용하는 것은 거의 불가능합니다. 왜냐하면 그들이 작성한 코드와 아무데도 호환되지 않기 때문입니다. 실제로 질문에 * 적용되는 태그 만 추가하십시오. 비슷한 것으로 보이는 태그를 무작위로 추가하지 마십시오. 이 경우에는 '파스칼'과 '프리 패스'또는 '파스칼'과 '터보 - 파스칼'(그러나 전부는 아님)처럼 보일 것입니다. –

답변

4

type a = array [1..size] of integer;을 가졌지 만 for i := 0 to size을 사용하여 배열을 반복합니다. 아래 첨자는 선언 된 범위와 일치해야합니다.

루프를 입력하기 전에 sum := 0;을 설정했지만 다시 0으로 설정하지 마십시오. 비소임을 찾으면 sum := 1;을 설정하고 그대로 유지합니다. 비 (非) 소수를 발견하면 절대로 전성기를 발견하지 못합니다.

두 개의 소수는 arr[0]에 있으며, 1은 arr[1]입니다. 은 소수가 아니지만 코드는 결론을 내릴 것입니다. 은 소수이지만, 결국 코드 자체가 나눌 수 있음을 알게되므로 코드는 그렇지 않다고 생각할 것입니다.

+0

내 코드를 편집 할 수 있습니까? 편집했지만 작동하지 않습니다. –

+0

잠깐, 내가 당신을 위해 프로그램을 작성하길 원하십니까? 이게 숙제가 아니라고 확신 할 수 있니? – ganbustein

+1

@Harea : 아니오, 여기 아무도 프로그램 *을 수정할 것입니다. 문제를 해결하기 위해 필요한 정보를 얻었습니다. 이제 사용하는 것은 여러분의 몫입니다. –

관련 문제