Valaki megnézné hogy mi a hiba ebbe a kódba? Egy olyan programot szeretnék írni amely kiírja a képernyőre a 2D tömb azon elemeit amelyek kisebbek a közvetlen szomszédainál. pl .1 2 3 4 5 7 5 8 3 eseten kiírja a (z) 1,3, számokat.
int n;
cout << "Add meg az n erteket ahol (1<=n<=23)" << endl;
cin>>n;
int a[n][n],b[10],minim;
cout<<"Olvasd be az elemeket!"<<endl;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(a[i][j]<a[i][j+1])
if(a[i][j]<a[i][j-1])
if(a[i][j]<a[i-1][j])
if(a[i][j]<a[i+1][j])
b[i]=a[i][j];
}
}
for(int i=0;i<n;i++) {
cout<<endl;
for(int j=0;j<n;j++)
out<<a[i][j]<<" ";
}
cout<<endl;
for(int i=0;i<n;i++)
cout<<b[i]<<" ";
}
Az a és b tömb indexei a következők lehetnek: 0 <= index < n
Ehhez képest te végigmész egy ciklussal rajtuk:
for(int i=0;i<n;i++)
és nézed:
if(a[i][j]<a[i-1][j])
if(a[i][j]<a[i+1][j])
értékeket.
Tehát -1 és n indexet is, miközben egyik sem mutat érvényes memóriaterületre.
A vizsgálatot túlzottn leegyszerűsítetted.
9 esetet kell vizsgálnod - talán ezen ábra segítségével könnyebben érthető:
Az I. esetben 3,
a II. esetben 5,
a III. esetben 3,
a IV. esetben 5,
az V. esetben 8,
a VI. esetben 5,
Az VII. esetben 3,
a VIII. esetben 5,
a IX. esetben 3 feltételt (ugyanis annyi közvetlen szomszédja van) kell ellenőrizned.
Illetve mivel nem ismerjük előre a 2D tömb azon elemeinek számát amelyek kisebbek a közvetlen szomszédainál, ezért azt nem szimpla tömbben tárolnám, hanem - ha már C++ - vektorban.
Ehhez segítség itt:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!