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: Möchte 2d Spiele programmieren

Beitrag von lolliger » Do Mär 10, 2011 10:48 am

Danke für den Tipp. :D
Ist ja eigentlich ganz einfach:

Code: Alles auswählen

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

int main()
{
    int i, l;
    char txt[300];


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

   l=strlen(txt);

   char Text[l];

   strncpy(Text,txt,l+1);

   printf("\n(De)kodierter Text:\n");


   for (i=0;i<l-1;i++)
   {
       char asciiwert = Text[i];

       if ( (asciiwert >='a' && asciiwert <='m') || (asciiwert >='A' && asciiwert <='M') )
       printf("%c",asciiwert+13);

       else if ( (asciiwert >='n' && asciiwert <='z') || (asciiwert >='N' && asciiwert <='Z') )
       printf("%c",asciiwert-13);

       else if ((asciiwert <'a' || asciiwert >'z') || (asciiwert <'A' || asciiwert >'Z'))
       printf("%c",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: Möchte 2d Spiele programmieren

Beitrag von Xin » Do Mär 10, 2011 11:12 am

lolliger hat geschrieben:Danke für den Tipp. :D
Ist ja eigentlich ganz einfach:
Und es ist auf jeden Fall schonmal deutlich kürzer, oder?
lolliger hat geschrieben:

Code: Alles auswählen

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

int main()
{
    int i, l;
    char txt[300];

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

   l=strlen(txt);

   char Text[l];

   strncpy(Text,txt,l+1);

   printf("\n(De)kodierter Text:\n");


   for (i=0;i<l-1;i++)
   {
       char asciiwert = Text[i];

       if ( (asciiwert >='a' && asciiwert <='m') || (asciiwert >='A' && asciiwert <='M') )
       printf("%c",asciiwert+13);

       else if ( (asciiwert >='n' && asciiwert <='z') || (asciiwert >='N' && asciiwert <='Z') )
       printf("%c",asciiwert-13);

       else if ((asciiwert <'a' || asciiwert >'z') || (asciiwert <'A' || asciiwert >'Z'))
       printf("%c",asciiwert);

   }

  return 0;
}
Was sagst du dazu???
Versmaß? Die Einrückung macht man nicht Pi * Daumen. Nicht mal 3, mal 4 Leerzeichen und mal gar keine... Grundsätzlich einen festen Wert.
Weiterhin die Frage: Wozu benutzt Du hier Text und txt? Wozu die Kopiererei?

Wenn es kein A-M ist und auch kein N-Z ist, dann brauchst Du nicht zu fragen, ob es kein A-Z ist ^^
Das ganze jetzt in eine Funktion mit der Signatur

Code: Alles auswählen

void rot13( char const * input, unsigend int inputLength, char * output );
und die Wiese ist grün und statt mit scanf() zu fragen nimm die Parameter von main(). Den Link hatte ich Dir ja schon gegeben.
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 » Fr Mär 11, 2011 10:04 am

Ich
Xin hat geschrieben:Versmaß? Die Einrückung macht man nicht Pi * Daumen. Nicht mal 3, mal 4 Leerzeichen und mal gar keine... Grundsätzlich einen festen Wert.
Weiterhin die Frage: Wozu benutzt Du hier Text und txt? Wozu die Kopiererei?

Wenn es kein A-M ist und auch kein N-Z ist, dann brauchst Du nicht zu fragen, ob es kein A-Z ist ^^
Das ganze jetzt in eine Funktion mit der Signatur

Code: Alles auswählen

Code: Alles auswählen

void rot13( char const * input, unsigend int inputLength, char * output );
und die Wiese ist grün und statt mit scanf() zu fragen nimm die Parameter von main(). Den Link hatte ich Dir ja schon gegeben.
Ich kriege die Signatur der Funktion nicht hin!!!
Der Compiler zeigt mir immer eine Warnung. :cry:
Was mache ich falsch???

Code: Alles auswählen

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


void rot13 (char * const text[300],int i, 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') )
        printf("%c",asciiwert+13);

        else if ( (asciiwert >='n' && asciiwert <='z') || (asciiwert >='N' && asciiwert <='Z') )
        printf("%c",asciiwert-13);

        else
        printf("%c",asciiwert);

    }

}


int main()
{
    int i, l;
    char text[300];


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

    l=strlen(text);


    printf("\n(De)kodierter Text:\n");



    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 » Fr Mär 11, 2011 10:15 am

lolliger hat geschrieben:
Xin hat geschrieben:

Code: Alles auswählen

void rot13( char const * input, unsigend int inputLength, char * output );
Ich kriege die Signatur der Funktion nicht hin!!!
Der Compiler zeigt mir immer eine Warnung. :cry:
Was mache ich falsch???

Code: Alles auswählen

void rot13 (char * const text[300],int i, unsigned int l, char * asciiwert )
Du sollst nicht den Text ausgeben, sondern in das Array "output" den verschlüsselten Text kopieren und zwar soviel Text, wie mit inputLength angeben ist - entsprechend der Namen der Parameter.
Außerdem sollst Du nicht 300 Texte verschlüsseln, sondern nur einen.

Ansonsten sollte eine Funktion möglichst autark sein, Laufvariablen wie 'i' sollten also nicht just for fun übergeben werden, wenn man sich das auch schenken kann - insbesondere macht es keinen Sinn, i zu übergeben, wenn Du i in der ersten Anweisung wieder auf 0 setzt.
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 » Fr Mär 11, 2011 10:46 am

Xin hat geschrieben:Du sollst nicht den Text ausgeben, sondern in das Array "output" den verschlüsselten Text kopieren und zwar soviel Text, wie mit inputLength angeben ist - entsprechend der Namen der Parameter.
Außerdem sollst Du nicht 300 Texte verschlüsseln, sondern nur einen.

Ansonsten sollte eine Funktion möglichst autark sein, Laufvariablen wie 'i' sollten also nicht just for fun übergeben werden, wenn man sich das auch schenken kann - insbesondere macht es keinen Sinn, i zu übergeben, wenn Du i in der ersten Anweisung wieder auf 0 setzt.
Du hast Recht!!!
Danke! :D

Code: Alles auswählen

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


int i;
char asciiwert[1];

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') )
        printf("%c",asciiwert+13);

        else if ( (asciiwert >='n' && asciiwert <='z') || (asciiwert >='N' && asciiwert <='Z') )
        printf("%c",asciiwert-13);

        else
        printf("%c",asciiwert);

    }

}


int main()
{
    int i, l;
    char text[500];


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

    l=strlen(text);


    printf("\n(De)kodierter Text:\n");

    rot13(text,l,asciiwert);


    return 0;
}
Gibt es jetzt noch etwas zu verbessern?

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 » Fr Mär 11, 2011 11:16 am

lolliger hat geschrieben:
Xin hat geschrieben:Du sollst nicht den Text ausgeben, sondern in das Array "output" den verschlüsselten Text kopieren und zwar soviel Text, wie mit inputLength angeben ist - entsprechend der Namen der Parameter.
Gibt es jetzt noch etwas zu verbessern?
Du könntest den Text lesen, den ich schreibe, bevor Du nachfragst ^^
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 » Fr Mär 11, 2011 12:17 pm

Xin hat geschrieben:Du könntest den Text lesen, den ich schreibe, bevor Du nachfragst ^^
Tschuldige, aber bei der Signatur einer Funktion habe ich manchmal noch Probleme. :|
Aber das wird schon mit der Zeit!

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 » Fr Mär 11, 2011 12:32 pm

lolliger hat geschrieben:
Xin hat geschrieben:Du könntest den Text lesen, den ich schreibe, bevor Du nachfragst ^^
Tschuldige, aber bei der Signatur einer Funktion habe ich manchmal noch Probleme. :|
Aber das wird schon mit der Zeit!
Es geht nicht um die Signatur, sondern, dass Du den Text, den Du verschlüsselst wieder in ein char-Array reinpacken sollst und die Argumente, die Du von der main-Funktion bekommst.

Du kannst auch einfach sagen 'Habe ich keinen Bock zu', das hier ist ja keine Pflichtveranstaltung, bei der Du zu irgendwas gezwungen wirst. Aber wenn Du mich fragst, ob es etwas zu verbessern gibt, dann wird die Antwort solange "Ja" lauten, bis Du Dich mit den Dingen beschäftigt hast, mit denen Du Dich beschäftigen musst, wenn Du programmieren lernen möchtest. ^^

Wie ich schon sagte - ein Tutorial bringt Dir bei, die Vokablen einer Programmiersprache zu lernen - aber wenn Du lernen möchtest etwas zu formulieren, was Dir nicht im Unterricht oder einem Tutorial vorgebetet wurde, dann geht das nur so.
Ich fordere Dich auf, etwas Spezielles in C zu formulieren, was im Prinzip einer Floskel in gesprochener Sprache entspricht, also etwas, was man immer wieder formuliert. Stell Dir vor, in Deinem England-Urlaub passiert etwas und Du willst fluchen und sagst "where they fuck?". Dein Gegenüber wird Dir vielleicht Auskunft geben, aber wohl kaum verstehen, dass Du gerade geflucht hast, weil Du die Floskel "what the f..." erst noch ein wenig üben musst... Macht doch so gar keinen Spaß zu fluchen... man merkt direkt dass Du Sprachanfänger bist.
Wenn Du bei "It's raining cats and dogs" den Tierschutz rufst, kannst Du Dich nicht mit einem Engländer unterhalten.

Und Du kannst damit lernen Deinem Computer etwas zu sagen, was mit Arrays zu tun hat.
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 » Fr Mär 11, 2011 1:01 pm

Xin hat geschrieben:Du kannst auch einfach sagen 'Habe ich keinen Bock zu', das hier ist ja keine Pflichtveranstaltung, bei der Du zu irgendwas gezwungen wirst. Aber wenn Du mich fragst, ob es etwas zu verbessern gibt, dann wird die Antwort solange "Ja" lauten, bis Du Dich mit den Dingen beschäftigt hast, mit denen Du Dich beschäftigen musst, wenn Du programmieren lernen möchtest. ^^

Wie ich schon sagte - ein Tutorial bringt Dir bei, die Vokablen einer Programmiersprache zu lernen - aber wenn Du lernen möchtest etwas zu formulieren, was Dir nicht im Unterricht oder einem Tutorial vorgebetet wurde, dann geht das nur so.
Ich fordere Dich auf, etwas Spezielles in C zu formulieren, was im Prinzip einer Floskel in gesprochener Sprache entspricht, also etwas, was man immer wieder formuliert. Stell Dir vor, in Deinem England-Urlaub passiert etwas und Du willst fluchen und sagst "where they fuck?". Dein Gegenüber wird Dir vielleicht Auskunft geben, aber wohl kaum verstehen, dass Du gerade geflucht hast, weil Du die Floskel "what the f..." erst noch ein wenig üben musst... Macht doch so gar keinen Spaß zu fluchen... man merkt direkt dass Du Sprachanfänger bist.
Wenn Du bei "It's raining cats and dogs" den Tierschutz rufst, kannst Du Dich nicht mit einem Engländer unterhalten.

Und Du kannst damit lernen Deinem Computer etwas zu sagen, was mit Arrays zu tun hat.
Da hasst du Recht!
Ich möchte lernen, wie ich mich mit einem "Engländer" unterhalten kann! :!:
Xin hat geschrieben:Es geht nicht um die Signatur, sondern, dass Du den Text, den Du verschlüsselst wieder in ein char-Array reinpacken sollst und die Argumente, die Du von der main-Funktion bekommst.

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') )
        printf("%c",verschluesselt[i]=asciiwert+13);

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

        else
        printf("%c",verschluesselt[i]=asciiwert);


    }

}


int main()
{
    int i, l;
    char text[500];


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

    l=strlen(text);


    printf("\n(De)kodierter Text:\n");

    rot13(text,l,asciiwert);

    printf("\n\nVerschl\x81sselter Text im char-Array 'verschluesselt':\n%s",verschluesselt);


    return 0;
}
Meinst du so??

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 » Fr Mär 11, 2011 1:34 pm

lolliger hat geschrieben:

Code: Alles auswählen

        printf("%c",verschluesselt[i]=asciiwert+13);
Meinst du so??
Ähh... definitiv nein. Sowas programmiere bitte nie wieder, nur weil etwas durch den Compiler geht, heißt das nicht, dass das eine gute Idee ist.
Niemand erwartet in einem Funktionsaufruf eine Zuweisung, schon gar nicht in einem printf. Stell Dir vor, Du musst den Code irgendwann nochmal lesen. Mach das - wenn schon - in zwei Schritten.

Code: Alles auswählen

verschluesselt[i]=asciiwert+13;
printf("%c",verschluesselt[i]);
damit man auch erkennen kann, dass hier zwei vollkommen unterschiedliche Dinge passieren.

Und wenn das erkennbar ist, dann lass das printf weg.

Code: Alles auswählen

verschluesselt[i]=asciiwert+13;
Grundsätzlich ist die Zuweisung also durchaus richtig, aber bitte nicht innerhalb eines printf()!

Die Funktion soll einen Text verschlüsseln. Je größer die Programme werden, desto weniger geben sie auf dem Bildschirm aus. Wenn Du den Compiler startest, da passieren unglaubliche Dinge drin und im Idealfall gibt er überhaupt nichts aus.

Beim Programmieren kapselst Du Probleme. Die Funktion rot13() verschlüsselt. Fertig - mehr nicht - Kapsel zu.
Du machst aus großen Problemen kleine. Wenn Du das Problem hast, einen String zu verschlüsseln und auszugeben, dann rufst Du rot13() auf und gibst dann den String aus. Wenn Du nur verschlüsseln willst, geht das mit Deiner Funktion nicht. Also weg mit dem printf und am Schluss gibst Du das aus, was rot13() Dir verschlüsselt hat.

Dann versuch ich die ganze Zeit, Dir zu vermitteln, dass Du Kommandozeilen-Parameter annimmst und verschlüsselst, anstatt Fragen zu stellen.
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