Kezdőoldal » Számítástechnika » Programozás » C# "Reverse bits" feladat,...

C# "Reverse bits" feladat, online, Mono-val miért nem működik, ami VS . NET Core 3. 0 alatt jónak tűnik?

Figyelt kérdés

Az uint bináris alakját kellene megfordítani, majd visszaadni az újdonsült uint-et.

A gyakorló oldalon megkapott teszt bemenettel a VS alatt működik, az online felület viszont azt írja nekem, hibás bemenet.


Kérlek, ne bántsatok túlságosan!! :)


https://pastebin (pont) com/sVNnXGKa


Ezt írja az online felület:

Input 00000010100101000001111010011100

Output 15065253 (00000000111001011110000010100101)

Expected 964176192 (00111001011110000010100101000000)


VS-ben megetetem vele ezt az inputot:

string bitUnumber = "00000010100101000001111010011100"; //Convert.ToString(n, 2);

Láss csodát, az output:

964176192


Magát a reverse-t megcsináltam manuálisan is és úgy sem fogadta el.



Mit nézek be nagyon-nagyon csúnyán?


2019. jún. 5. 20:00
1 2
 11/18 anonim ***** válasza:

Én nem nagyon értem, hogy mit vársz itt most tőlünk és főleg min vagy felháborodva.

Előtted van a kód meg a fordítók is, debuggold.

2019. jún. 6. 08:29
Hasznos számodra ez a válasz?
 12/18 anonim ***** válasza:

Keretrendszerek összehasonlítása röviden:

.NET Framework: A régi .NET, aminek az első verzióját 2000 körül fejlesztették. Persze ebből már a 4.x-verziót használják leginkább jelenleg.


Mono: Mivel a fenti .NET Framework csak Windows-on működik ezért elkezdték fejleszteni a Mono-t. Tehát röviden a Mono csak egy cross platform .NET Framework.


.NET Core: Az "új" .NET. A régi .NET Frameworknek a jelenleg aktuális (fő) verziója lesz az utolsó, utána a .NET Core veszi át a helyét. .NET Core-ból is a jelenlegi (preview) fő verzió (3.x) lesz az utolsó. Pontosabban 3.1 lesz idén év vége felé. Az utána megjelenő verziót .NET 5-nek fogják hívni (persze ez Core alapokon fog működni)

2019. jún. 6. 08:31
Hasznos számodra ez a válasz?
 13/18 A kérdező kommentje:

Tehát nem 845, hanem 0000000845 a szám, amit a függvény kap az online oldalon?

Azt átalakítja bináris számmá a felvezető 0-k nélkül, azt megfordítja és vissza tízes számjegyű számmá???



Nagyon jó egyébként, hogy kíváncsi az ember, láthatóan lövése sincs az egészről és támadják meg közlik, hogy valótlanságot állít.



Valószínűleg 5-10 % az esélye, hogy valaha szoftverfejlesztő leszek, de ezt a kategóriát elnézve ezt nem bánom.

2019. jún. 6. 09:21
 14/18 anonim ***** válasza:
0%
Jóvan, fejezd már be a hisztit b#zdmeg.
2019. jún. 6. 09:24
Hasznos számodra ez a válasz?
 15/18 A kérdező kommentje:

A padding 0 gondolom a bevezető 0.



Még mindig fogalmam sincs, hol vannak ilyenek, de mindegy.

Ilyenkor tényleg örülök, hogy amúgy esélytelen számomra ez az egész

2019. jún. 6. 09:42
 16/18 anonim ***** válasza:

A vicces a dologban az, hogy még csak nem is voltak veled bunkók, inkább csak tényszerűek. Hidd el, sokszor láttam már itt bunkó válaszadókat, az egészen más amikor támadnak téged. Itt csak azt támadják, amit állítasz, ami teljesen jogos, mert egy programozó jellemzően igyekszik tényszerűen, és az érveléslogika szabályai szerint kommunikálni. Ha valami nem lehetséges, akkor kifejtik, hogy valótlan amit állítasz. Nem téged hülyéznek le, csak az állításodat támadják meg. És igen, ennek a szakmának jellemzően ilyen a nyelvezete, kerüljük a fölösleges cukormázt.


A problémádra visszatérve:

A pastebin-en mutatott függvény egy uint típusú paramétert vár, tehát nem stringként, hanem integer típusként kapja meg az inputot. És amikor pl ezt a binárisan reprezentált számot:

00000010100101000001111010011100

stringgé alakítod a ToString metódussal, akkor az elején levő 0-k nem lesznek benne a kapott stringben:

10100101000001111010011100


És ha ezt így fordítod meg, akkor már nem a megfelelő értéket fogod kapni. Ezért kell ezeket a 0-kat visszatölteni az elejére, erre a célra alkalmazható a már említett PadLeft metódus, ami a stringet balról kiegészíti a megadott karakterrel úgy, hogy (legalább) adott hosszúságú legyen a string. A PadLeft(32,'0') használatával visszakapod a kívánt stringet:

00000010100101000001111010011100


És ezt így megfordítva már a megfelelő számot fogod megkapni.

2019. jún. 6. 10:28
Hasznos számodra ez a válasz?
 17/18 tabaki ***** válasza:

@#6:

Köszönöm. Igen, pontosan erre gondoltam, csak nem vagyok még hozzászokva, hogy a c#-ban minden hasznos apróságra kész metódus van, képes lettem volna magam megírni...

2019. jún. 6. 10:50
Hasznos számodra ez a válasz?
 18/18 tabaki ***** válasza:

@#13: „Tehát nem 845, hanem 0000000845 a szám, amit a függvény kap az online oldalon?”

Marci legyek, ha értem, hogy honnan rántottad most elő ezt a nyolcszáznegyvenötöt, de éppen fordítva: Tökmindegy, hogy a bevitelkor hány fölösleges nullát írsz elé, azokat a fordító nem veszi figyelembe, és a függvény egyszerűen magát a számot kapja. Egy pillanatra tedd félre a bonyodalmas ReverseBits()-et, és a nullákkal fölcicomázott számodat add át egy sokkal hétköznapibb függvénynek:

Console.WriteLine(0000000845);

Vajon mit fog kiírni?

A kérdésedben szereplő input dettó: A 00000010100101000001111010011100 bepötyögésével a puszta 10100101000001111010011100 értéket adod át a ReverseBits() függvénynek, amit az értelemszerűen a "10100101000001111010011100" stringgé alakít, lelkiismeretesen megfordít, és újra számot csinál belőle. Tökéletesen működik, csak éppen a bemutatott formájában alkalmatlan arra, amit elvárnál tőle, vagyis hogy különbséget tegyen a kezdő nullákkal vagy anélkül bevitt számok között.


@#3: „Miért sportszerűtlenség egy teszt? :D”

Nem a teszttel van a baj, hanem azzal, hogy nem tudod, mit csinálsz. A Visual Studióban lefordított programban kicserélted az inputból nyert stringet egy sajátra, mégpedig arra, amelyiknek a megfordításával a helyes eredménynek kell kijönnie. Ez helyénvaló: Így ellenőrizted, hogy a függvény további része megfelelően működik-e -- és igen. Ezek után viszont elfelejted, hogy ez csak egy próba volt, aminek a kedvéért negligáltad a tényleges inputot, a megváltoztatott függvényt azonosnak tekinted az eredetivel, és azt a következtetést vonod le, hogy az online Mono és a VS eltérése okozza a galibát. Egyébként némely esetben bizonyára jelentősége van a keretrendszerek különbségének, de azért elsősorban magáról a C# nyelvről van szó, leginkább azon belül érdemes kutakodni, ha valami nem úgy üt ki, mint vártad.

2019. jún. 6. 13:59
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!