C++ programban kérhetek segítséget? Nem tudok rájönni mi a hiba.
Nagyon kezdő vagyok még, egy mátrixos számológépet szeretnék csinálni, ami összead, szoroz, ilyesmi. Komplex számokkal dolgozok, csináltam egy struktúrát hozzájuk, illetve definiáltam a komplex számok szorzását. Ezzel elvileg nincs baj, de itt a kód:
(v-vel jelöltem a szám valós részét, és k-val a képzetes részt)
komplex sz(komplex a, komplex b)
{
komplex c;
c.v=(a.v*b.v) - (a.k*b.k);
c.k=(a.k*b.v) + (a.v*b.k);
return c;
}
Ez a függvény.
Ez pedig a mátrixszorzás:
komplex AB[a1][b2];
for (int i=0; i<a1; i++)
{
for(int j=0; j<b2; j++)
{
AB[i][j].v=0;
AB[i][j].k=0;
}
}
for (int i=0; i<a1; i++)
{
for (int j=0; j<b2; j++)
{
for(int k=0; k<a2; k++)
{
AB[i][j].v=AB[i][j].v+sz(A[i][k],B[k][j]).v;
AB[i][j].k=AB[i][j].k+sz(A[i][k],B[k][j]).k;
}
}
}
De rossz értékeket ad vissza és nem tudok rájönni hogy miért. Valaki?
Első ránézésre jónak tűnik.
De miért nem lehet normális változóneveket használni, miért egybetűs, és miért nem írsz összeadást, ha már szorzást igen?
És hogy ellenőrizted le az eredményt? Mondjuk szorozz be két skalárt és teszteld le úgy, majd 2x1 stb.?
összeadás is, meg kivonás is van és még sok egyéb de azokat nem éreztem idevágónak. A jelölést lehet megváltoztatom, igazad van.
Egyébként az a problémám, hogy ha külön használom a szorzás függvényt 2 komplex számra akkor jó eredményt kapok. De a mátrixszorzásnál ha 1x1-es "mátrixokat" próbálok összeszorozni akkor rossz eredményt ad és még mindig nem értem mi lehet a hiba sajnos.
Pasteld valahová az egész kódot, ebben szerintem nincs hiba.
De ha van, akkor majd más biztos megtalálja, én 2 percig néztem, elég volt :D.
Az idevágó rész, de ebből az eleje viszonylag lényegtelen, csak bekérdezés. Később azon is tovább akarok javítani, de előbb működjön jól a program.
120. sortól kezdődik a lényegi rész, a szorzás függvény pedig a main után van kifejtve.
setlocale(LC_ALL,"Hun");
ez véletlen lemaradt a linkben szereplő programról :)
Ez C++ -ban nem szokás: typedef struct { double v, k; } komplex;
Ez pedig szintén csúnya: "Az ""A"" mátrix méretei:", meg az összes ehhez hasonló.
komplex A[a1][a2] expression did not evaluate to a constant (Ez csak VS alatt)
"string tmp;
getline(cin, tmp, '\n');" Nem így szokás kiüríteni a buffert
Javaslom a nyelv elsajátítását egyszerűbb feladatokkal, illetve a debugger használatának megtanulását amivel soronként tudsz lépkedni a kódon, és észreveszed a hibát benne.
Köszönöm!
Egy féléves kurzus keretein belül tanultam valamennyit, ezeket amiket kiemeltél a kurzus alapján írtam. A typedef-et, illetve a "string tmp; getline(cin, tmp, '\n');" részt, nem tudtam, hogy ez így nem jó.
"A typedef-et, illetve a "string tmp; getline(cin, tmp, '\n');"
Ezek működnek, csak C++ -ban nem szokás így. a typedefes megoldás sima C-ben használatos, a getline helyett pedig std::cin.ignore -t szokták.
A kiíratás sem hibás szintaktikailag csak szerintem nem azt csinálja amit akartál volna.
Értem köszönöm. Mindig jó tapasztalatból hallani valamit és nem olyat, amit tömegeknek oktatnak. Egyébként ott az aposztróf nekem jó, vagyis azt akartam, hogy idézőjelbe tegye.
Holnap pedig próbálom megoldani a problémám!
typedef helyett mit kellene akkor?
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!