2012-09-14 4 views
0

사용자가 사용자 지정할 수있는 매개 변수가있는 함수 GenChar을 기반으로 길이가 [0 .. 100] 인 임의의 문자열을 반환하는 함수 GenString을 작성하고 싶습니다. 사용자 정의 GenChar 기능에 전달하여 한 사용자가 모든 a s의 문자열을 생성하고자하는 경우, 그는 항상 a을 반환하는 함수에 전달에 의해 다른 사용자가 임의의 알파벳 히브리어 단어를 생성 할 수 있다고 할 수있다Free Pascal에서 임의의 문자열을 작성하려면 어떻게합니까?

무작위 히브리어 글자를 반환합니다.

보조 정리 1 : 전달 함수 이 반환하는 모든 유형의 배열을 생성하는 함수 GenArray을 작성하고 싶습니다. Free Pascal에서이 작업을 수행 할 수 있습니까?

보조 정리 2 : Free Pascal에 QuickCheck 포트를 연결하려고합니다.

+0

'GenString' 함수를 만들고'GenChar' 함수 프로토 타입을 정의하십시오. 내가 놓친 게 있니? – Jay

+0

네, GenString 함수를 만드는 데 어려움이 있습니다 **. GenString 함수에 대한 예제 코드를 제공 할 수 있습니까? – mcandre

답변

6

다음은 예입니다. 국제 문자가 언급되었으므로 유니 코드 문자열이 사용됩니다.

//The functions 

type 
    TGenChar = function: widechar; 

function GenString(MaxLength: integer; GenChar: TGenChar): widestring; 
var 
    i: integer; 
begin 
    if MaxLength < 1 then 
    MaxLength:= 1; //minimum length is 1 
    setlength(result, random(MaxLength+1)); 
    for i:= 1 to length(result) do 
    result[i]:= GenChar; 
end; 


//The usage example (remember to call randomize somewhere in your program) 

var 
    SampleCharSet: widestring= 'ABCxyz'; 

function SampleGenChar: widechar; 
begin 
    result:= SampleCharSet[random(length(SampleCharSet))+1]; 
end; 

function GetRandomStringSample: widestring; 
begin 
    result:= GenString(100, SampleGenChar); 
end; 
+1

메인 프로그램의 초기화 섹션이 아닌 다른 곳으로 * 또는 콘솔 프로그램의 ** ** 시작 ** 직후에 무작위 화 * 절대 * 호출 할 필요가 없습니다! – Thomas

+0

일반적으로'Randomize'는 프로그램 시작시 한 번만 호출해야하지만, 콘솔 프로그램에는 아무런 해가 없으며 스레드 안전하지 않은 문제를 제외한 다른 곳에서 호출하는 것은 해롭지 않습니다. 더 설명해 주시겠습니까? – Jay

+0

Randomize는 현재 시간을 사용하여 내부 PRNG를 일반적으로 밀리 초의 정확도로 시드합니다. 프로그램마다 여러 번 무작위 화를 호출하면 (특히 StringList에 대해 여러 임의의 문자열을 생성한다고 가정 할 때) 동일한 시간 값을 사용하여 PRNG를 두 번 시드하여 동일한 결과를 얻을 위험이 있습니다. 물론 이것은 GetRandomStringSample 함수가 샘플 함수 일 뿐이므로 사용자의 의도는 아닙니다. – Thomas

관련 문제