Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!
Két dimenziós sakkozás - C programozás
404_pagenotfound
kérdése
167
/***********************************************************************
* A PROGRAMBAN NEM SZEREPELHETNEK AZ ALÁBBI SOROK:
* #include <string.h>
* #include <math.h>
***********************************************************************/
#include <stdio.h>
#include <stdlib.h>
/***********************************************************************
************************************************************************
** ETTŐL A PONTTÓL DOLGOZHATSZ A FELADATOKON
************************************************************************
***********************************************************************/
/*
1. feladat (10 pont)
A feladat egy fuggveny megirasa, amely parameterul var
egy karakterekbol allo, ket dimenzios, negyzetes (8×8-as) tombot,
illetve egy karakterre mutato pointert.
A fuggveny egy karakterre mutato pointert ad vissza.
A tomb egy sakktablat szimbolizal, amin sakkbabuk vannak
(gyalog: 'G'; bastya: 'B'; huszar: 'H'; futo: 'F'; kiraly: 'K';
vezer: 'V'; ures mezo: 'U'). Tudjuk, hogy pontosan egy kiraly
van a tablan, a tobbi babubol akarmennyi lehet (akar tobb is,
mint egy hagyomanyos sakk-keszletben, de az is lehet, hogy nulla).
A fuggveny feladata, hogy meghatarozza a kiraly helyet, es
visszaadja azt (tehat annak a tombelemnek a cimet kell visszaadnia,
aminek az erteke 'K'). Ezen kivul ossze kell szamolnia, hany
bastya tudja leutni a kiralyt. (A bastyak nem tudnak atugrani
a tobbi babun.) Ezt az erteket a parameterben kapott pointerben
kell visszaadni. A pointereknek helyet foglalni, illetve
a foglalt helyet felszabaditani nem kell/szabad!
Kodold le C nyelven a fuggvenyt! A fuggveny fejlecen ne valtoztass!
A fuggveny inputjai az elso parameter, outputja a masodik parameter
es a visszateresi ertek. A fuggveny nem vegez IO muveleteket!
*/
char* sakktabla(char tabla[8][8], int* utniKepesBastyak) {
}
/***********************************************************************
************************************************************************
**
** EZEN A PONTON TÚL NE VÁLTOZTASS SEMMIT SEM A FÁJLON!
**
************************************************************************
***********************************************************************/
void call_1()
{
int mod;
if (fscanf(stdin, "%d\n", &mod) != 1) {
fprintf(stderr, "HIBA: Nem olvasható adat (mod)!\n");
return;
}
const int meret = 8;
char tomb[meret][meret];
for (int i = 0; i < meret; i++){
for (int j = 0; j < meret; j++){
if (fscanf(stdin, "%c ", &tomb[i][j]) != 1) {
fprintf(stderr, "HIBA: Nem olvasható adat (tomb[%d][%d])!\n", i, j);
return;
}
}
}
char *eredmeny = NULL;
int *bastyak = (int*)malloc(sizeof(int));
*bastyak = -1;
eredmeny = sakktabla(tomb, bastyak);
switch (mod) {
case 1:
if (eredmeny != NULL) {
fprintf(stdout,"A mutatott mezon allo babu: %c\n", *eredmeny);
} else {
fprintf(stdout,"K:NULL\n");
}
break;
case 2:
if (bastyak != NULL) {
fprintf(stdout,"Utni kepes bastyak szama: %d\n", *bastyak);
} else {
fprintf(stdout,"B:NULL");
}
break;
default:
if (eredmeny != NULL) {
fprintf(stdout,"A mutatott mezon allo babu: %c\n", *eredmeny);
} else {
fprintf(stdout,"K:NULL\n");
}
if (bastyak != NULL) {
fprintf(stdout,"Utni kepes bastyak szama: %d\n", *bastyak);
} else {
fprintf(stdout,"B:NULL");
}
break;
}
if (bastyak != NULL) {
free(bastyak);
bastyak = NULL;
}
}
void test_1()
{
int *bastyak = (int*)malloc(sizeof(int));
char *eredmeny = NULL;
struct {char tomb[8][8]; int eredmeny;} testlist[3] = {
{{
"UUUBUUUU",
"UUUUUUBU",
"UUUUUUUU",
"UUUKUUBB",
"UUUUUUUU",
"UUUUUBUB",
"UBUBUUUU",
"UUUUUBUU",
}, 3},
{{
"UUUBUUUU",
"UUUUUUBU",
"UUUUUUUU",
"BUUKUUUU",
"UUUUUUUU",
"UUUUUBUB",
"UBUUUUUU",
"UUUUUBUU",
}, 2},
{{
"UUUBUUUU",
"UUHUUUBU",
"UUHUUUUU",
"UFUKUUVB",
"UUUUUUUU",
"UUUGUBUB",
"UBUBUUUU",
"UUUUUBUU",
}, 1},
};
for (int i = 0; i < 3; ++i) {
*bastyak = 1 << 10, eredmeny = NULL;
eredmeny = sakktabla(testlist[i].tomb, bastyak);
if (eredmeny == NULL) {
fprintf(stderr, "HIBA: a visszatérési érték NULL pointer!\n");
free(bastyak);
bastyak = NULL;
return;
}
if (bastyak == NULL) {
fprintf(stderr, "HIBA: a bástyák száma NULL pointer!\n");
return;
}
if (*eredmeny != 'K' || *bastyak != testlist[i].eredmeny) {
fprintf(stderr, "HIBA\n");
for (int k = 0; k < 8; ++k) {
for (int l = 0; l < 8; ++l) {
fprintf(stdout, "%c ", testlist[i].tomb[k][l]);
}
fprintf(stdout, "\n");
}
fprintf(stdout, "\telvárt eredmény: 'K' %d\n\tkapott eredmény: %c %d\n",
testlist[i].eredmeny, *eredmeny, *bastyak
);
free(bastyak);
bastyak = NULL;
return;
}
}
if (bastyak != NULL) {
free(bastyak);
bastyak = NULL;
}
}
*utniKepesBastyak = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (tabla[i][j] == 'K') {
for (int e = i + 1; e < 8; e++) {
if (tabla[e][j] == 'B') {
*utniKepesBastyak += 1;
break;
} else if (tabla[e][j] != 'U') {
break;
}
}
for (int e = i + 1; e < 8; e++) {
if (tabla[i][e] == 'B') {
*utniKepesBastyak += 1;
break;
} else if (tabla[i][e] != 'U') {
break;
}
}
for (int e = i - 1; e >= 0; e--) {
if (tabla[e][j] == 'B') {
*utniKepesBastyak += 1;
break;
} else if (tabla[e][j] != 'U') {
break;
}
}
for (int e = i - 1; e >= 0; e--) {
if (tabla[i][e] == 'B') {
*utniKepesBastyak += 1;
break;
} else if (tabla[i][e] != 'U') {
break;
}
}
return &tabla[i][j];
}
}
}
}
=====[ pontosítás ]=========================
Mivel az oldal MathJax-nak nézett egy részt a forráskódodból, a freopen() függvényhívás sorát valamint a következő 3 sort kikommenteztem. A többit a GCC elfogadta. (Mivel nem értettem pontosan az egész működését, szándékos hibával ellenőriztem, hogy tényleg lefut a teszt és fennakad a hibán.)
bash-5.1$ cc -o ket_dimenzios_sakk ket_dimenzios_sakk.c
bash-5.1$ ./ket_dimenzios_sakk -t
bash-5.1$ sed -i '/utniKepesBastyak/s/1/2/' ket_dimenzios_sakk.c
bash-5.1$ cc -o ket_dimenzios_sakk ket_dimenzios_sakk.c
bash-5.1$ ./ket_dimenzios_sakk -t
HIBA
U U U B U U U U
U U U U U U B U
U U U U U U U U
U U U K U U B B
U U U U U U U U
U U U U U B U B
U B U B U U U U
U U U U U B U U
elvárt eredmény: 'K' 3
kapott eredmény: K 6
404_pagenotfound:
Sajnos ez nem lett jó, de azért próbálkozok vele megbírkózni, ha nem megy akkor nem megy
1 éve0
VF:
Részleteznéd azt a „nem lett jó”-t? -t kapcsolóval futtatva a tesztprogramot nem jelzett hibát.
1 éve0
404_pagenotfound:
nem nagyon akarja írni a több visszajelzést de próbálom még kifejteni
1 éve0
404_pagenotfound:
1 Próbálkozás: ------------------------------------------------------------------------------- Fordítási hiba! További információk a compile.txt állományban olvashatók. ------------------------------------------------------------------------------- Összpont: 0
1 éve0
404_pagenotfound:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o: in function `_start': (.text+0x20): undefined reference to `main' collect2: error: ld returned 1 exit status
1 éve0
VF:
Ez durva. És ha nem változtatsz semmit az eredeti forráskódon, akkor lefordítja? (Hozzácsaptam pár szót a válaszomhoz, bár nem hinném, hogy segít.)
1 éve0