• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

Различни компајлери?!

  • Ја почнал/а темата
  • #1

loverboy

Intern
6 февруари 2008
147
11
Решавам проблеми на USACO, и точно ја решив задачата, ги дава точните резултати на сите тест примери кај мене, без да го премине временскиот лимит и меморија, ама кога ја пратив на online judge ми кажува
> Run 1: Execution error: Your program (`checker') exited with
signal #11 (segmentation violation [maybe caused by accessing
memory out of bounds, array indexing out of bounds, using a bad
pointer (failed open(), failed malloc), or going over the maximum
specified memory limit]). The program ran for 0.000 CPU seconds
before the signal. It used 2712 KB of memory.
Таму се работи под Линукс платформа и не е толку комплицирана програмата за да работи со еден а да не работи со друг компајлер. Јас користам DevCpp. Еве го кодот од програмата

Код:
#include<iostream>
using namespace std;

int dver(int i,int j,int N) {
  return(i+j-1);
}

int dhor(int i,int j,int N) {
  return(N-(i-j));
}

int main() {
  int H[14],V[14],DH[28],DV[28];
  int rez[14],p,i,j,N,va=0,counter=0;
  
  cin>>N;
  
  for (i=1;i<=N;i++) {
    H[i]=0;
    V[i]=0;
  }
  
  for (i=1;i<=2*N-1;i++) {
    DH[i]=0;
    DV[i]=0;
  }
  
  rez[1]=1;
  rez[2]=0;
  // 0=not valid,1=valid
  va=0;
  H[1]=1;
  DV[1]=1;
  DH[N]=1;
  // level p is given position
  p=2;
  
  while (p>0) {
    // if the position is valid
    if (va==1) {
      if (p<N) {
        p=p+1;
        rez[p]=0;
        va=0;
      } else {
        counter++;
        if (counter<=3) {
          for (i=1;i<=N;i++) {
            cout<<rez[i]<<" ";
          }
          cout<<"n";
        }
        va=0;
        // delete the traces
        H[rez[p]]=0;
        DV[dver(p,rez[p],N)]=0;
        DH[dhor(p,rez[p],N)]=0;
      }
    } else {
      // if the position is not valid
      if (rez[p]==N) {
        p=p-1;
        va=0;
        if (p>0) {
          // delete the traces
          H[rez[p]]=0;
          DV[dver(p,rez[p],N)]=0;
          DH[dhor(p,rez[p],N)]=0;
        }
      } else {
        rez[p]=rez[p]+1;
        if (H[rez[p]]==0) {
          if ((DV[dver(p,rez[p],N)]==0)&&(DH[dhor(p,rez[p],N)]==0)) {
            va=1;
            // add traces
            H[rez[p]]=1;
            DV[dver(p,rez[p],N)]=1;
            DH[dhor(p,rez[p],N)]=1;
          }
        }
      }
    }
  }
  cout<<counter<<"n";
  return 0;
}
Ако знае некој што има искуство во C++ да ми помогне да сфатам зошто кажува memory violation на тој компајлер иако кај мене работи одлично. Инаку дебагирав малку и можеби проблемот е некаде во првиот else дел од while циклусот. Поздрав
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Oдамна не сум чачкал C++ a и тешко ми е да тумачам туѓ код. Него... ај во првите 2-3 реда од кодов...

int dver(int i,int j,int N) {
return(i+j-1);
}

Зашто стои тука N како влезен параметар кога не го користиш?
 
  • Ја почнал/а темата
  • #3

loverboy

Intern
6 февруари 2008
147
11
Хмммм...

Знам дека не го користам, ама го ставив во случај при модифицирање на програмата да ми затреба тој параметар. Проблемот е зашто кај мојот компајлер работи точно, а во друг (под Линукс платформа) ми кажува memory violation. Овој проблем се јавува кога сакам да пристапам до поле надвор од границите, или ако неразумно користам поинтери (а овде не користам поинтери)... Ја пратив и како C програма, но и така ми кажува грешка. Не знам дали да ја напишам и во Pascal, да пробам, за секој случај... Ама многу ме интересира ако некој знае нешто повеќе за овој проблем "memory violation". Инаку во моето решение користам brute force (оптимизиран) за да го пронајдам бараниот број на комбинации.
 
  • Ја почнал/а темата
  • #4

loverboy

Intern
6 февруари 2008
147
11
Фала, LOL :)

Благодарам на сета помош. Се снајдов сам. :)
Програмчето сега ми работи перфектно, си ја најдобв грешката, и не ја кажувам грешката, пошто никој не е заинтересиран за тоа, хехе.
Поздрав, ако воопшто некој чита
:D
:bye1:
 

Нови мислења

Последни Теми

Статистика

Теми
43,562
Мислења
823,372
Членови
28,067
Најнов член
Dacmac92
На врв Дно