Szyfr Cezara w C

0

Dziś napisałem taki temat... i został on przeniesiony do kosza... ale chyba za brak zrozumiałości :). Więc napisze jeszcze raz.

W języku C muszę napisać program do szyfrowania szyfrem Cezara. Mam pomysł, żeby najpierw wpisać treść wiadomości do zaszyfrowania w pliku tekstowym, który odczytam przez program. Później za pomocą (miałem pomysł na switch ale już widziałem, że źle myślałem :)) więc nie wiem jak zrobić operacje szyfrowania. Ale po zaszyfrowaniu, zaszyfrowaną wiadomość zapisać w drugim pliku tekstowym. Czyli

  1. Odczyt pliku z tekstem. 2. Zaszyfrowanie tekstu z tego odczytanego pliku. 3. Zapis zaszyfrowanej wiadomości w drugim pliku txt. Ale jak już pewnie zauważyliście, nie najlepiej u mnie z programowaniem. Więc muszę was prosić o porady, pomoc, wyjaśnienie co mam zrobić... Byłbym bardzo wdzięczny
0
mikebarca napisał(a)

Więc muszę was prosić o porady, pomoc, wyjaśnienie co mam zrobić... Byłbym bardzo wdzięczny

Do napisania Cezara wystarczy podstawowa znajomość operacji sterujących i znajomości strumieni. Oczekujesz że ktoś wyłoży Ci tutaj na forum te zagadnienia mimo że masz je ładnie wytłumaczone w wielu kursach?

0

jakie strumienie?

void szyfrCezara(char *text, int shift) {
    int corection = 'z'-'a'+1;
    assert(shift < corection && -shift < corection );

    if(shift<0)
         corection = -corection;
    
    for(; *text; ++text) {
        if(isupper(*text)) {
             *text += shift;
             if(!isupper(*text)) {
                  *text +=corection;
             }
        }
        if(islower(*text)) {
             *text += shift;
             if(!islower(*text)) {
                  *text +=corection;
             }
        }
    }
}
0
MarekR22 napisał(a)

jakie strumienie?

No, do samego szyfru rzecz jasna nie są potrzebne, ale by obsłużyć zewnętrzne pliki tekstowe no to już są niezbędne ;)

0

No tak... przykład otrzymałem, dzięki... ale niestety pierwszy raz widzę coś takiego jak: assert, isupper, islower... Nie potrzebuje definicji, tyle mogę sam znaleźć i spróbować ogarnąć. Ale mam iść w kierunku tych poleceń, które wymieniłem... można może jakoś prościej może... nie musi to być szczyt programowania tylko prosto działający program szyfrujący na poziomie takiego początkującego jak ja... No ale mam już jakieś podstawy i kierunek działań.

0

to są wszystko elementy standardowej biblioteki ANSII C. Sorry, ale dałem ci gotowca szyfru cezara. Nie ma mowy bym dał ci gotowca całego programu. I tak już naruszyłem zasadę niepomagania leniom (nie pokazałeś, żebyś zrobił sam cokolwiek).

0

Nie proszę o gotowca... to nie miało by sensu. Ale skoro czegoś nie miałem na zajęciach to myślę, że nauczyciel by w ten sposób tego nie widział. Więc tylko was pytam czy nie ma bardziej banalnego sposobu, choćby wieloma pętlami. Co do tego, że nic nie pokazałem tutaj to oczywiście mogę wrzucić kod programu gdzie napisze printf ("Witam, Szyfruje wiadomości"); ale tyle co na chwilę obecną mogę zdziałać... podam jeszcze jakąś zmienną. Gdybym wiedział coś o tym to bym napisał... [???]

0

Dobra pokaże, że sam też chce coś zrobić... Na razie nie wiem jak zrobić do tego operacje szyfrowania...

http://www.imagic.pl/files//16084/./szyfr.png</image>

0

w pisaniu jakiegokolwiek algorytmu bardzo pomocne są schematy blokowe lub wypisanie sposobu działania w "ludzkim języku" punkt po punkcie. Jeśli w taki sposób rozpiszesz sobie problem, to wtedy możesz użyć najprostszego c++ i z dumą na twarzy pokazać zakończone zadanie.

0

ToLower do wykorzystania przez Ciebie.

#include <stdio.h>
int ToLower(int c);

void main()
{
	int c;
	printf("Tester ToLower, wpisuj znaki, koniec poprzez podanie 0\n");
	while((c=getchar()) != '0') putchar(ToLower(c));

}
int ToLower(int c)
{
	if((c >= 65) && (c <= 90)) return c+32;
	else return c;
}

user image

korzystając z :
http://www.danshort.com/ASCIImap/

Aby napisać ToUpper robisz analogicznie, z tym że zakresy w ifie są zmienione na zakresy od 'a' do 'z' i zamiast dodawać 32 odejmujesz.
islower i isupper chyba też sobie będziesz już potrafił napisać.

PS:
Proponował bym inne środowisko niz DevCPP (poznaje po kolorowaniu składni)

1 użytkowników online, w tym zalogowanych: 0, gości: 1