2012-12-02 2 views
1

테이블에 문자가있는 테이블 (62 x 35)을 만들었습니다. 나는 다른 사람에 의해 중간에서 10 x 10 테이블에있는 문자를 대체하는 중이 야. 예를 들어테이블의 문자 바꾸기 - ADA

, 그처럼 보이는 테이블이있는 경우 : (62 X 35) I 파일 포함 (10 × 10)을로드 할 수 있도록하려면

############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 

:

////////// 
////////// 
////////// 
////////// 
////////// 
////////// 
////////// 
////////// 
////////// 
////////// 

을 이 파일의 문자가 이전에 생성 된 표의 문자를 대체합니다.

와 같은 표가 있습니다.
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
##########################//////////########################## 
##########################//////////########################## 
##########################//////////########################## 
##########################//////////########################## 
##########################//////////########################## 
##########################//////////########################## 
##########################//////////########################## 
##########################//////////########################## 
##########################//////////########################## 
##########################//////////########################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 
############################################################## 

나는 무엇을 하려는지는 분명하지 않으므로 자세한 내용을 알고 싶으면 부탁하십시오.

procedure Grid_Pilliers(A: out Grid) is -- creates grid with pilliers -- 
begin 
    for I in 0..31 loop 
     for J in 0..75 loop 
     if (I mod 4 = 1 or I mod 4 = 0) and (J mod 4 = 1 or J mod 4 = 0) then 
      A(I,J) := true ; 
     else 
      A(I,J) := false ; 
     end if ; 
     end loop ; 
    end loop ; 
end Grid_Pilliers ; 


procedure New_Grid_Random_Fill(A : in out New_Grid) is 

    type Numero is range 0 .. 1; 
    package Grid_Random is new Ada.Numerics.Discrete_Random (Numero); 
    use Grid_Random; 
    Random_Number : Numero; 
    G : Generator; 

begin 
    Reset (G); 
    for I in A'Range(1) loop 
     for J in A'Range(2) loop 
     Random_Number := Random (G); 
     A(I,J) := (Random_Number = 1); 
     end loop; 
    end loop; 
end New_Grid_Random_Fill; 
+2

여기에 아다 질문이 없습니다. –

+0

나 같은데. 당신의 질문은 정확히 무엇입니까? 알고리즘을 작성하는 데 어려움이 있습니까? 불분명 한 컴파일러 오류 메시지가 나타 납니까? 문제 설명을 실제 질문으로 바꿀 수 있다면 도움이 될 것이라고 생각합니다. – tvuillemin

+0

질문을 편집하여 현재 접근 방식을 보여주는 [sscce] (http://sscce.org/)를 포함하십시오. [* Fixed-Length String Handling *] (http://www.adaic.org/resources/add_content/standards/05rm/html/RM-A-4-3.html)도 참조하십시오. – trashgod

답변

1

슬라이싱을 사용해야 할 수도 있지만이 예에서는 for-loops 쌍을 사용합니다.

procedure copy_into(Working : in out Grid; subimage : in Grid; 
        Offset_X, Offset_Y : Natural) is 
begin 
-- insert checks for subimage lengths [plus offsets] 
-- to be less than Working's lengths. 

for index_x in subimage'Range(1) loop 
    for index_y in subimage'Range(2) loop 
    Working(index_x+offset_x, index_y+offset_y):= subimage(index_x, index_y); 
    end loop; 
end loop; 
end copy_into; 

는 오프셋을 얻으려면 ... 당신이 Array (Positive Range <>, Positive Range <>) of Character으로 정의 된 테이블 형 ( Grid)가 가정하는 것은 간단하다

offset_x = big_grid_width + small_grid_width/2

offset_y = 높이를 사용합니다.

+0

나는 슬라이스를 사용해야한다고 동의하지 않습니다. 아마도 2 차원 배열과 (따라서) 중첩 된 루프를 사용하는 것이 더 낫다고 생각합니다. 그러나 포스터의 의도가 분별 될 수있는 한 좋은 대답이라고 생각합니다. Ada 2012에서 수표는 전제 조건으로 표현 될 수 있습니다. – debater