Q&A

  • 반복문(for)사용에 관한 질문입니다.
영상처리에 관해 공부하는 학생인데요
c에서
for(i=1, l=1; i<255, i<255; i++, l++){
  for(j=1, k=1; j<255, k<255; j++, k++){
      buf[0]=pDoc->m_InImg[i-1][j-1];
      buf[1]=pDoc->m_InImg[i-1][j];
      buf[2]=pDoc->m_InImg[i-1][j+1];
      buf[3]=pDoc->m_InImg[i][j-1];
      buf[4]=pDoc->m_InImg[i][j];
      buf[5]=pDoc->m_InImg[i][j+1];
      buf[6]=pDoc->m_InImg[i+1][j-1];
      buf[7]=pDoc->m_InImg[i+1][j];
      buf[8]=pDoc->m_InImg[i+1][j+1];
      xgrad = abs( (buf[2]+2*buf[5]+buf[8]) - (buf[0]+2*buf[3]+buf[6]));
      ygrad = abs( (buf[6]+2*buf[7]+buf[8]) - (buf[0]+2*buf[1]+buf[2]));
      temp=xgrad+ygrad;
      if(temp>255){
        pDoc->m_OutImg[l][k]=0;
        cnt++;
      }
      else        pDoc->m_OutImg[l][k]=255;
   }
}
위 코드 부분에서 for(i=1, l=1; i<255, i<255; i++, l++)이 부분이 어떻게 수정가는 한지요?? 델파이를 공부한지 얼마되지않아서....
여러가지로 해봤는데도 안돼네요T.T
답변 주시면 감사하겠습니다.
2  COMMENTS
  • Profile
    장신귀 2003.11.10 17:52
    이렇게 해보시죠.

    procedure for2while;
    var
      i,j,k,l:integer;
    begin
      i:=1;l:=1;
      while (i<255) and (l<255) do
      begin
        //
        //
        inc(i);inc(l);
      end;
    end;


  • Profile
    이중철 2003.11.10 20:22
    C에서는 for문을 그와 같이 쓸것이라면 차라리 While문 쓰는게

    좋을것 같아요

    다른 모든언어 어셈블리어 포함해서 for문은 단순증가 함수 이거든요
    (어셈블에서는 카운터 레지스터 사용이 for문임)

    즉, 카운터 레지스터에 등록된 횟수만큼 반복하는 식인데

    C는 매번 비교검증하는 루틴이 들어가야 하는 Overload가 있어요

    이와같은 경우의 처리는 다른 언어들은 While이나 Repeat를 쓰라고

    권장하는데 유독 C는 그것이 없죠

    그와같은 C의 for 루틴은 모두 While문으로 대체하세요

    델파이의 강력한 반복처리의 속도를 경험하실려면 될 수 있으면 반복문은

    for로 쓰시고요

    참고로 델파이의

    for i := 0 to 255 do 는

    CPU의 CX레지스터에 256으로 셋팅 했다는 말입니다.

    그 횟수만큼 begin end에 있는 문장을 처리하라는 뜻입니다.

    C의 아래문장은 내부적으로 While문과 같아요 계속 비교하는

    오버로드가 있음.

    for(i=1, l=1; i<255, i<255; i++, l++){