12 svar
319 visningar
Farbrorgul 408
Postad: 8 maj 2021 14:30

Kryptera text uppgift

Skriv en metod static string krypt(string t, int k) som krypterar texten med en slumpnyckel( det betyder att du byter ut bokstäver i texten mot andra som finns på plats bokstav + slumpnyckel, t.ex. om jag har a i texten och nyckel är 2, så blir det c istället för a i det krypterade texten).
Skriv en metod som  dekrypterar texten.
Anropa metoder i ett program, fråga efter texten, slumpa slumpnyckeln i programmet.
Slumpnyckel ska  ge vid varje körning en annan kryptering.

Jag har försökt lösa denna första uppgift (kryptera texten) men förstår inte varför jag får fel. Jag har använt mig av unicode för att få fram bokstäverna och deras positionering.

static string krypt(string t, int k)
        {
            int uniStart = 97;
            char[] uniList = new char[25];
            for (int i = 0; i < uniList.Length; i++)
            {
                uniList[i] = (char)uniStart;
                uniStart++;
            }

            char[] bokstavsLista = t.ToCharArray();

            string output = "";

            for (int i = 0; i < bokstavsLista.Length; i++)
            {

                for (int j = 0; j > i; j++)
                {
                    if (bokstavsLista[i] == uniList[i])
                    {
                        output += uniList[i + 2];
                    }
                }
            }

            return output;
Flezer 25 – Fd. Medlem
Postad: 8 maj 2021 14:56

Kan du beskriva med text vad du försöker göra i for-looparna?

Farbrorgul 408
Postad: 8 maj 2021 16:03 Redigerad: 8 maj 2021 16:06
Flezer skrev:

Kan du beskriva med text vad du försöker göra i for-looparna?

static string krypt(string t, int k)
        {
            int uniStart = 97;
            char[] uniList = new char[25];

            // Ger varje element i uniList bokstäverna från a-z
            for (int i = 0; i < uniList.Length; i++)
            {
                uniList[i] = (char)uniStart;
                uniStart++;
            }
            
            // Skapar en lista med varje enskild bokstav från text-strängen
            char[] bokstavsLista = t.ToCharArray();

            string output = "";

            // Kollar vilka bokstäver som finns i bokstavsLista (texten) som också finns i Unicode-listan
            for (int i = 0; i < bokstavsLista.Length; i++)
            {

                for (int j = 0; j > i; j++)
                {
                    if (bokstavsLista[i] == uniList[i])
                    {
                        // Byter bokstaven mot bokstaven som är 2 tecken framåt i Unicode-listan
                        bokstavsLista[i] += uniList[i + k];
                    }
                }
            }

            // Lägger in varje utbytt bokstav i en sträng
            foreach (char bokstav in bokstavsLista)
            {
                output += bokstav;
            }

            // Returnerar strängen
            return output;
Laguna Online 30472
Postad: 8 maj 2021 17:03

Vad blir det för fel? 

Farbrorgul 408
Postad: 8 maj 2021 20:41
Laguna skrev:

Vad blir det för fel? 

Det kommer ingen text. Blir helt tomt när jag startar programmet.

Laguna Online 30472
Postad: 8 maj 2021 21:00

Det kan ju bero på hur den här funktionen anropas.

Farbrorgul 408
Postad: 8 maj 2021 22:03
Laguna skrev:

Det kan ju bero på hur den här funktionen anropas.

Har provat att anropa metoden med t.ex. krypt("Hejsan", 5); men inget händer.

Laguna Online 30472
Postad: 8 maj 2021 22:05

Funktionen returnerar en sträng. Vad gör du med den? 

Farbrorgul 408
Postad: 8 maj 2021 22:07
Laguna skrev:

Funktionen returnerar en sträng. Vad gör du med den? 

Haha dum man är. Okej nu fungerar det med Console.WriteLine(krypt("Hejsan", 5)) men då kommer det bara fram Hejsan. Alltså är det något med metoden som är fel...

Laguna Online 30472
Postad: 8 maj 2021 22:22

j > i är inte sant för j = 0, så looparna gör ingenting.

Stoppa in write på intressanta saker lite här och där så du ser vad som händer. 

Farbrorgul 408
Postad: 8 maj 2021 22:33
Laguna skrev:

j > i är inte sant för j = 0, så looparna gör ingenting.

Stoppa in write på intressanta saker lite här och där så du ser vad som händer. 

            // Kollar vilka bokstäver som finns i bokstavsLista (texten) som också finns i Unicode-listan
            for (int i = 0; i < bokstavsLista.Length; i++)
            {

                for (int j = 0; j > uniList.Length; j++)
                {
                    if (bokstavsLista[i] == uniList[j])
                    {
                        // Byter bokstaven mot bokstaven som är k tecken framåt i Unicode-listan
                        bokstavsLista[i] += uniList[j + 2];
                        Console.WriteLine(bokstavsLista[i]);
                    }
                }
            }

Sant. Ändrade lite i koden nu. Men if-satsen blir aldrig true. Varför blir det så?

Farbrorgul 408
Postad: 8 maj 2021 22:39
Laguna skrev:

j > i är inte sant för j = 0, så looparna gör ingenting.

Stoppa in write på intressanta saker lite här och där så du ser vad som händer. 

           string t = "Hejsan";
            char[] storaBok = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
            char[] småBok = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };

            // Skapar en lista med varje enskild bokstav från text-strängen
            char[] bokstavsLista = t.ToCharArray();

            string output = "";

            // Kollar vilka bokstäver som finns i bokstavsLista (texten) som också finns i Unicode-listan
            for (int i = 0; i < bokstavsLista.Length; i++)
            {

                for (int j = 0; j > storaBok.Length; j++)
                {
                    if (bokstavsLista[i] == storaBok[j])
                    {
                        // Byter bokstaven mot bokstaven som är k tecken framåt i Unicode-listan
                        bokstavsLista[i] += storaBok[j + 2];
                        Console.WriteLine(bokstavsLista[i]);
                    }

                    else if (bokstavsLista[i] == småBok[j])
                    {
                        // Byter bokstaven mot bokstaven som är k tecken framåt i Unicode-listan
                        bokstavsLista[i] += småBok[j + 2];
                        Console.WriteLine(bokstavsLista[i]);
                    }
                }
            }

            // Lägger in varje utbytt bokstav i en sträng
            foreach (char bokstav in bokstavsLista)
            {
                output += bokstav;
            }

            Console.WriteLine(output);

            Console.ReadKey();

Testade en ny variant nu, fungerade inte heller...

Smörbulten 8
Postad: 9 maj 2021 20:56 Redigerad: 9 maj 2021 22:02

Halloj,

Kolla lite noggrannare på villkoret i din inre for-loop.

for (int j = 0; j > storaBok.Length; j++)

En for-loop itereras så länge villkoret är true. 

Svara
Close