Lerne rot13 (war: Möchte 2d Spiele programmieren)

Schnelle objektorientierte, kompilierende Programmiersprache.
lolliger
Beiträge: 36
Registriert: Sa Mär 05, 2011 1:01 pm

Re: Lerne rot13 (war: Möchte 2d Spiele programmieren)

Beitrag von lolliger » Sa Mär 12, 2011 11:21 am

Vielen Dank, ja du konntest mir helfen. :D
Wenn ich jetzt das Programm

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int i;
char asciiwert[1];
char verschluesselt[500];

void rot13 ( char const * text, unsigned int l, char * asciiwert )
{
    for (i=0;i<l-1;i++)
    {
        char asciiwert = text[i];

        if ( (asciiwert >='a' && asciiwert <='m') || (asciiwert >='A' && asciiwert <='M') )
        verschluesselt[i]=asciiwert+13;

        else if ( (asciiwert >='n' && asciiwert <='z') || (asciiwert >='N' && asciiwert <='Z') )
        verschluesselt[i]=asciiwert-13;

        else
        verschluesselt[i]=asciiwert;
    }

}


int main ( int argc, char* argv[] )
{

    int i, l, j;
    char text[500];


    printf("Bitte einen Text eingeben, der (de)kodiert werden soll:\n");

    for (j=1;j<argc;j++)
    {
        if ( !strcmp(argv[j],"proggen.org") )        printf("cebttra.bet");
    }

    l=strlen(text);

    rot13(text,l,asciiwert);

    printf("\n\nVerschl\x81sselter Text:\n%s\n",verschluesselt,argc);



    return 0;
}
mit dem Parameter proggem.org öffne, dann zeigt es mir cebbtra.bet an.
Mir ist klar, dass das noch nicht das Ziel ist, aber das Grundprinzip, oder?
Was muss ich jetzt noch tun???
Tschuldige, wenn ich es manchmal nicht so schnell verstehe. Bin halt noch ein Anfänger! ;)

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Lerne rot13 (war: Möchte 2d Spiele programmieren)

Beitrag von cloidnerux » Sa Mär 12, 2011 12:45 pm

Tschuldige, wenn ich es manchmal nicht so schnell verstehe. Bin halt noch ein Anfänger!
Zum Programmieren reicht ein gesunder Menschenverstand, auch wenn niemand so recht sagen kann, was das denn sein soll...
Mir ist klar, dass das noch nicht das Ziel ist, aber das Grundprinzip, oder?
Was muss ich jetzt noch tun??
Das Grundprinzip schon, den du hast es inzwischen geschafft, den eingegebenen Parameter zu nutzen, aber du hast noch nicht ganz verstanden wie.
Das Programm soll von einem eingegebenen Text(als Parameter, wir erinnern uns..) als rot13 verschlüsselten Text ausgeben.
Das bedeutet, du sollst den Text entgegen nehmen, es deiner rot13 Funktion vorwerfen und am Ende wieder ausgeben.
-> wenn ich das Programm mit

Code: Alles auswählen

rot13 blablabla
aufrufe, soll es mir den rot13 Verschlüsselten Text von "blablabla" ausgeben.
Vielen Dank, ja du konntest mir helfen.
Freut mich :)
Redundanz macht wiederholen unnötig.
quod erat expectandum

lolliger
Beiträge: 36
Registriert: Sa Mär 05, 2011 1:01 pm

Re: Lerne rot13 (war: Möchte 2d Spiele programmieren)

Beitrag von lolliger » Sa Mär 12, 2011 5:55 pm

Ok! :D
Es klappt mit diesem Programm:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int i;
char asciiwert[1];
char verschluesselt[500];

void rot13 ( char const * text, unsigned int l, char * asciiwert )
{
    for (i=0;i<l;i++)
    {
        char asciiwert = text[i];

        if ( (asciiwert >='a' && asciiwert <='m') || (asciiwert >='A' && asciiwert <='M') )
        verschluesselt[i]=asciiwert+13;

        else if ( (asciiwert >='n' && asciiwert <='z') || (asciiwert >='N' && asciiwert <='Z') )
        verschluesselt[i]=asciiwert-13;

        else
        verschluesselt[i]=asciiwert;
    }

printf("\n\nVerschl\x81sselter Text:\n%s",verschluesselt);
}


int main ( int argc, char* argv[] )
{

    int i, l, j;
    char text[500]="", leerzeichen[2]=" ";


    for (j=2;j<argc;j++)
    {
        if ( !strcmp(argv[1],"rot13") )
        strcat(text,argv[j]);
        strcat(text,leerzeichen);
        l=strlen(text);

    }

    rot13(text,l,asciiwert);

    return 0;
}
Was sagst du dazu?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Lerne rot13 (war: Möchte 2d Spiele programmieren)

Beitrag von Xin » Sa Mär 12, 2011 6:23 pm

lolliger hat geschrieben:Was sagst du dazu?
Beim letzten Programm hatte ich das Gefühl, dass Du mich verarschen willst und war für cloidnerux Antwort dankbar...

Das ganze sieht ja schon ganz gut aus, bis auf die Tatsache, dass Du weiterhin nicht sauber einrückst (Leute, die ich persönlich unterrichte, bekommen den Code unkommentiert zurück, weil ich mich weigere mir den Code anzusehen. Diese Regel führe ich bei Dir jetzt auch mal ein. Also rücke anständig ein, was bedeutet, dass alle Befehle, die von if abhängen auch entsprechend eingerückt sind oder der Code geht mich nix an, ok?).

Der rot13-Code ist soweit in Ordnung, bis auf die Tatsache, dass Du mein letztes Posting wieder ignoriert hast. Die Funktion verschlüsselt - aber sie gibt nichts aus!

Die for-Schleife in der Main-Funktion ist falsch. Gib mal "./a.out rot14 1 2 3 4 5" ein.
Nach der Ausgabe wäre ein Newline schön gewesen, ich habe den verschlüsselten Text nämlich erst nicht gefunden. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

lolliger
Beiträge: 36
Registriert: Sa Mär 05, 2011 1:01 pm

Re: Lerne rot13 (war: Möchte 2d Spiele programmieren)

Beitrag von lolliger » Sa Mär 12, 2011 7:19 pm

Xin hat geschrieben:Beim letzten Programm hatte ich das Gefühl, dass Du mich verarschen willst und war für cloidnerux Antwort dankbar...
Tschuldige, habs einfach nicht gerafft! :oops:
Xin hat geschrieben:Das ganze sieht ja schon ganz gut aus, bis auf die Tatsache, dass Du weiterhin nicht sauber einrückst (Leute, die ich persönlich unterrichte, bekommen den Code unkommentiert zurück, weil ich mich weigere mir den Code anzusehen. Diese Regel führe ich bei Dir jetzt auch mal ein. Also rücke anständig ein, was bedeutet, dass alle Befehle, die von if abhängen auch entsprechend eingerückt sind oder der Code geht mich nix an, ok?).

Der rot13-Code ist soweit in Ordnung, bis auf die Tatsache, dass Du mein letztes Posting wieder ignoriert hast. Die Funktion verschlüsselt - aber sie gibt nichts aus!

Die for-Schleife in der Main-Funktion ist falsch. Gib mal "./a.out rot14 1 2 3 4 5" ein.
Nach der Ausgabe wäre ein Newline schön gewesen, ich habe den verschlüsselten Text nämlich erst nicht gefunden. ^^
Erledigt:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int i;
char asciiwert[1];
char verschluesselt[500];

void rot13 ( char const * text, unsigned int l, char * asciiwert )
{
    for (i=0;i<l;i++)
    {
        char asciiwert = text[i];

        if ( (asciiwert >='a' && asciiwert <='m') || (asciiwert >='A' && asciiwert <='M') )
        verschluesselt[i]=asciiwert+13;

        else if ( (asciiwert >='n' && asciiwert <='z') || (asciiwert >='N' && asciiwert <='Z') )
        verschluesselt[i]=asciiwert-13;

        else
        verschluesselt[i]=asciiwert;
    }

}


int main ( int argc, char* argv[] )
{

    int i, l, j;
    char text[500]="", leerzeichen[2]=" ";


    for (j=2;j<argc;j++)
    {
        if ( !strcmp(argv[1],"rot13") )
        {
            strcat(text,argv[j]);
            strcat(text,leerzeichen);
            l=strlen(text);
        }

    }

    rot13(text,l,asciiwert);
    printf("\nVerschl\x81sselter Text:\n%s\n",verschluesselt);


    return 0;
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Lerne rot13 (war: Möchte 2d Spiele programmieren)

Beitrag von Xin » Sa Mär 12, 2011 7:41 pm

Solange die rot13 so aussieht... da sind auch ifs. Ich brauche keine Klammern, aber die Einrückung muss sein.

Die Sache ist im Prinzip durch - Du bist fertig mit dem Projekt "rot13". Den Feinschliff kannst Du für Dich machen. :-)

Wenn Du die Nummer eine Portion härter haben willst, kannst Du noch eine rot(x) machen. Da musst Du allerdings Verschlüsseln und Entschlüsseln unterscheiden. Und falsch eingerückten Code will ich von Dir nicht mehr sehen. Die Lektion sollte langsam angekommen sein.

Mit C-Strings/Arrays musst Du sehr sicher sein, wenn Du programmieren können möchtest. Ansonsten habe ich die nächste fiese Aufgabe für Dich und ich gebe Dir sogar die Main vor.

Code: Alles auswählen

 
int main( void )
{
  char const * str = "Dies ist ein String.";
  unsigned int words;

  words = wordCount( str );

  printf( "Der String enthält %d Wörter\n", words );

  return 0;
}
rot(x) oder WordCount? WordCount bitte in einen neuen Thread!
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten