Cézár kódolás segitségkérés,hogy lehet?
Hogy lehet C#-ban megoldani hogy Cézár kódolással ne csak a 26 angol betűt hanem a számjegyeket is számolja?Illetve ha felkiáltójel stb.van azt hagyja figyelmen kivül?
Array s egyéb függvények nélkül szeretnem
Nem tudom, mert nem értem a problémát. Azokat a karaktereket veszed figyelembe vagy negligálod, amelyeket csak akarod, nem? Mutasd be a programodat, hogy lássuk, mivel kísérletezel.
P.S.: Az array nem függvény, hanem a tömböt jelenti angolul.
static void Main(string[] args)
{
string text = "Hello! World! 99";
string cipherText = Encipher(text, 22);
string plainText = Decipher(cipherText, 22);
Console.WriteLine(text);
Console.WriteLine(cipherText);
Console.WriteLine(plainText);
Console.ReadLine();
}
private static char Cipher(char ch, int kulcs)
{
if (!char.IsLetterOrDigit(ch))
return ch;
char offset = char.IsUpper(ch) ? 'A' : 'a';
return (char)((((ch + kulcs) - offset) % 26) + offset);
}
public static string Encipher(string input, int kulcs)
{
string output = string.Empty;
foreach (char ch in input)
output += Cipher(ch, kulcs);
return output;
}
public static string Decipher(string input, int key)
{
return Encipher(input, 26 - key);
}
}
}
A gond hogy ha a számokat is be akarom rakni,azoknál már szétesik az egész s nem fordítja vissza..Lehet tömbökkel kéne szórakozni?
Nem ertem, miert nem kezeled kulon a betuket es szamokat?
Ha adott karakter 48-57 intervallumba esik, akkor szam, ha 65-90-be, akkor nagybetu, ha 97-122-be, akkor pedig kisbetu. Ennek megfeleloen kodolod oket, a tobbihez meg nem nyulsz.
Így például jónak tűnik:
private static char Cipher(char ch, int key)
{
if (!char.IsLetterOrDigit(ch)) return ch;
char offset;
if (char.IsDigit(ch))
offset = '0';
else
offset = char.IsUpper(ch) ? 'A' : 'a';
return (char)((((ch + key) - offset) % 26) + offset);
}
Nekem egyre inkább úgy tűnik, hogy logikai bukfenc van abban az ötletben, hogy a dekódolást ugyanaz a metódus végezze, mint amelyik a sifrírozást, ami szintén nem egészen van rendben, ugyanis az angol ábécé 26 betűje nemigen hozható egyszerűen algoritmizálható kapcsolatba a 10 számjeggyel - emiatt a számjegyek önálló életet élnek a programon belül, például az eltolás mértékétől függően hol betűkké, hol más karakterekké alakulnak. Amikor ezután újra ugyanezen metódussal próbálod visszaalakítani, akkor az első esetben a betűknek kijáró offset miatt nem számjegyek, hanem egyéb betűk lesznek belőlük, a másodikban pedig módosítatlanul térnek vissza, hiszen a betűkön és számjegyeken kívüli értékeket békén hagyod. De valami alapjaiban sem stimmel azzal, hogy harminchat jelet akarsz huszonhatféle lehetőségként értelmezni.
Ami az eltolást intéző bonyodalmas kifejezést illeti, úgy látom, hogy a próbán belül azért működik egyáltalán (ha jól-rosszul is), mert a 26 vagy annál kisebb mértékű eltolás esetén a visszaalakításkor a képletben szereplő 𝗰𝗵+𝗸𝘂𝗹𝗰𝘀-𝗼𝗳𝗳𝘀𝗲𝘁 is 26-nál kisebb értéket ad, amelynek az egészosztása 0-t eredményez, tehát a modulo értéke maga a 𝗰𝗵+𝗸𝘂𝗹𝗰𝘀-𝗼𝗳𝗳𝘀𝗲𝘁. Az éppen 26-os eltolás is speciális eset, mert ott a modulo 0 lesz, tehát valójában nincs eltolás. Az érték növelésével viszont kezdődnek a bajok. Próbáld ki mondjuk 68 vagy 123 eltolással, és a karakterek hamar átcsúsznak a kezelhetetlen tartományba. Ez az elképzelés nagyobb részt erősen zsákutca-gyanús, szerintem érdemes lenne másfelé elindulnod. Mondjuk, kijelölhetnél különböző értékhatárokat a számjegyek és a betűk eltolására, aztán ennek az alapján a visszaállítást is többféle metódussal oldanád meg – de őszintén szólva, nekem mégiscsak valami tömbös megoldás tűnne egyszerűbbnek.
Köszönöm!
Akkor egyszerübb egy tömbbe raknom a tartomanyt majd s beadott szövegnel sima kivalasztás tétele s úgy csúsztat:-)
Elég szánalmas, hogy egy OE mérnökinfós egy ilyen ócska feladatot nem képes magától megoldani. Mindjárt leadom a megoldásom moodle-n és beküldöm ide is :)
Ha normálisan tanulnátok a kikúrt anyagokat, akkor nem kellene túlbonyolítani a feladatot minden szarral meg itt kérdezgetni. De nem...
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!