2017-09-06 2 views
0

수행중인 프로그램의 일반 입력은 5 : 3B2F가됩니다. 모두 같은 줄에 삽입하고 outputwould베이스에 3B2F를 작성하는 5문자 문자열 읽기 및 파스칼 사용 (파스칼)

우리는 두 개의 문자로 그 라인 (베이스 하나, 숫자에 대한 기타)을 읽는 지시 한

문제는 각 개인의 성격을 꿰뚫는 방법을 모르고 동시에 ":"과 "."를 무시하고 네 번째 작업을 수행하는 것입니다. 그리고 나서 "자리"가 ":"을 "." 최대 7 자까지 입력 할 수 있습니다. 또한 임은 기본 내가 예상 문자를 말하는 오류를 얻을 수있을 때 문자로 enrty를 읽고 있지만

SMALLINT를 발견

저는의 초심자 우리는 배열

 num:=0; 
     read(base,digits); 

     while (base <> '$') and (digits < MAXLENGHT) do 
을 사용할 수 없습니다

가 어떻게 자리는 특정 길이)

 begin 
     num:=(num*base)+digit; 

것을 확인합니까 (이 사전 처리는 "숫자"의 각 숫자에 대해 반복해야한다가 (에 대한 exept :와.) 나는 방법을 잘 모릅니다하는 3B2F 부분은 무엇 기지 귀하의 예제와 함께)

 writeln(num); 
     read(base,digits) 
     end; 
+0

':'는 항상 존재합니까? 그렇다면 문자열을 문자열로 완전히 읽고 두 부분으로 나누는 것이 더 쉬워 보입니다. – gammatester

답변

0

을 할 것입니다 5:3B2F? 나는 16을 추측 하겠지만 반드시 정의되어야한다.

문자열로 전체 입력을 읽는다 ( 그 다음 결장 두개의 문자열 (SPLIT. inStr: string;로 말)과 inValue: integer에, 제 말에, 값 제 radix: integer 및 문자열을 변환 val() 함수를 사용 두 번째 부분이 16 진수 일 경우 문자열 앞에 '$'를 추가해야합니다. 그렇지 않으면 'val()'이 문자열에 질식을하거나 틀린 결과를 나타냅니다.

고귀한 학습 과정에서보다 흥미로운 방법은 하나 또는 두 개의 입력을 사용하여 값을 추출하려면 case 문과 함께 repeat - until 루프를 사용하십시오.

// to extract the requested radix 
done := False; 
i := 1; 
repeat 
    c := inStr[i]; 
    case c of 
    '0'..'9': radix := radix * 10 + (ord(c) - Ord('0')); 
    ':'  : done := True; 
    else //Show error invalid input and terminate 
    end; 
    inc(i); 
    // show error if i > n, whatever n is 
until done ; 

// a similar loop and case for cases of characters '0'..'9', 'A'..'F' and 'a'..'f'. 

숙제를 망치지 않기 위해서, 나는 당신이 운동하기 위해 이것을 남겨 둡니다.