T ve A'dan oluşan bir char matris verilen ev ödevi olarak işlev yapmam gerekir. Bu, söz konusu matris üzerinde bulunan adaların sayısını döndürür. İspanyolca su. Henüz yapabileceğim tek bir problem daha var, parametre olarak verdiğim matrisi değiştirebilirim. Fonksiyonumu çağırmadan ve yenisini göndermeden önce matrisi kopyalamayı düşündüm ama bunu yapamadım. Başlığın söylediği gibi, herhangi bir çeşit kütüphane işlevi (ör., Strcopy) ile kesinlikle buna ihtiyacım var. Her ihtimale karşı kodumu geçmek gerekir:Kütüphane işlevleri olmadan kopyalanan char matrix (char **)
int islands(char** map, int col, int row){
char** aux = map;//I don't think this line does anything
int cont = 0;
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
char c = aux[i][j];
if (aux[i][j] =='T') {
cont++;
deleteLand(aux, i,j, col, row);
}
}
}
int a = cont;
return cont;
}
void deleteLand(char** map, int t1,int t2, int col, int row) {
map[t1][t2] = 'A';
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (!(i==0 && j ==0)&&(t1 + i >= 0 && t1 + i < col) && (t2 + j >= 0 && t2 + j < row)) {
if (map[t1 + i][t2 + j] == 'T') {
int tc = t1+i;
int tr = t2 + j;
deleteLand(map, tc,tr,col,row);
}
}
}
}
}
Ve döner dair bir örnek: Girişi: ([ 'T', 'T', 'A' 'A', 'A', 'T' 'A', 'A', 'A' 'T', T ', 'A'], 3, 4) döndürür: 2
yeterince açıktır umut. Ayrıca, bunu yazarken, girişte matrisin değerini kaydedip tekrar çıkışta kaydedebileceğimi fark ettim ama sanırım pratik olarak aynı olurdu.
bir matris yaygın 2B dizi eşanlamlıdır: Ben de copyStr göndeririz yüzden kütüphane işlevlerini kullanamazsınız önce belirtildiği gibi
Ve. "Char" gibi bir şey "char" işaretçisini gösterir. Böyle bir yapı için kullanılamaz. Bir 2D dizisine ihtiyacınız varsa, birini kullanın: int (* array2d) [COLS] '. – Olaf
Bu bana sadece satırlarımdan biri vermez miydi? –
@BrunoVezoli * Kesinlikle kütüphane işlevi olmadan buna ihtiyacım var * - Yani hiçbir şey kendi fonksiyon kütüphanenizi yaratmanızı engeller, yani kendi “strcpy”, vs.. Daha sonra bunları ayakkabı çekmeye çalışmak yerine büyük programda kullanabilirsiniz. "deleteLand" işlevinin tamamı bunun içinde. – PaulMcKenzie