noch eine zeichenkette^^

Dieses Thema im Forum "C/C++" wurde erstellt von soso, 17.12.2008.

  1. soso

    soso Jungspund

    Dabei seit:
    11.12.2008
    Beiträge:
    11
    Zustimmungen:
    0
    Hallo nochmal!:rolleyes:

    Wir haben leider noch ein Problem... nur eine andere Aufgabe^^:
    Aber auch hier gibt es einen segmentation fault...
    Das Programm soll bei einer Zeichenkette A mit A-B-A und B mit B-A-B ersetzten und + und - sollen bleiben... die next_iteration funktion soll mit einer anfangszeichkette z (bestehend aus A) mehrmals durchgeführt werden können...

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

    /* Berechnet aus einer Zeichenkette die nächste Iteration, indem auf
     * jedes Zeichen der gegebenen Zeichenkette, wenn möglich, eine
     * Umformungsregel angewendet wird. Für das Ergebnis wird mit malloc()
     * Speicher alloziert.
     */
    char *next_iteration(char *str)
    {
        
    int ilae;
        
    char *str3;
        
    str3 malloc(strlen(str) + 1);
        for (
    0<= strlen(str); i++)
        {
         
    lae strlen(str3);
         switch(
    str[i])
         {
           case 
    'A':
             {
               
    str3[lae] = 'B';
               
    str3[lae+1] = '-';
               
    str3[lae+2] = 'A';
               
    str3[lae+3] = '-';
               
    str3[lae+4] = 'B';
             }
            break;
           case 
    'B':
             {
               
    str3[lae] = 'A';
               
    str3[lae+1] = '+';
               
    str3[lae+2] = 'B';
               
    str3[lae+3] = '+';
               
    str3[lae+4] = 'A';
             }
             break;
           case 
    '-':
            
    str3[lae] = '-';
            break;
           case 
    '+':
            
    str3[lae] = '+';
            break;
         }
        }
        return 
    str3;
        
    }

    /* main-Funktion. Benutzt den ersten Kommandozeilenparameter als Anzahl
     * der zu berechnenden Iterationen und berechnet die Zeichenkette nach
     * so vielen Iterationen, ausgehend von der Zeichenkette "z".
     */
    int main(int argcchar *argv[])
    {
        
    int ix;
        
    char *p, *s;
        
    char *z;
        if (
    argc == 0) return 0;
        
    atoi(argv[0]);
        
    z[0] = 'A'
        
    malloc(sizeof (z[0]));
        
    next_iteration(z);
        if (
    1
        for (
    2<= xi++)
        {
         
    next_iteration(p);
         
    free (p);
         
    s;
        }
        
    printf("%s",z);
    }
    Wir bitten um Hilfe!! :help: mal wieder... :O

    ciao
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. larry

    larry Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    159
    Zustimmungen:
    0
    Hier noch das Gleiche. z ist wieder ein Pointer auf ein char, und ihr wollt auf *(z + 0) zugreifen (mit z[0]), wobei z auf nichts zeigt. Ihr müsst also erstmal Speicherreservieren.
    Anmerkung: 0 wird normalerweise zurückgegeben, wenn alles glatt gelaufen ist. Bei einem Fehler solltet ihr etwas von 0 verschiedenes zurückgeben.
     
  4. soso

    soso Jungspund

    Dabei seit:
    11.12.2008
    Beiträge:
    11
    Zustimmungen:
    0
    So.. haben jetzt noch nen bisschen was dran geändert... theoretisch gibt uns das programm mit den jeweiligen Iterationen immer die richtige zeichenkette aus... aber wir sollen die Ausgabe des Programms jetzt aber noch in eine Datei mit der Endung .ps umleiten. Diese Datei sollen wir dann mit dem Programm gv betrachten.
    leider kommt gv mit unserem programm nicht klar und kann es nicht lesen.... warum??
    haben unsere datei 8.3. genannt und dann im terminal mit 8.3. 7>er.ps (7 für 7 Iterationen) in eine ps-datei umgewandelt... wenn wir sie jetzt mit ggv er.ps öffnen wollen, geht das leider nicht (eigentlich soll was dreieckiges rauskommen... kann es aber nich lesen..)

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

    /* Funktionsprototyp der Funktion print_ps,
    diese soll am Ende der main-Funktion mit der erzeugten Zeichenkette
    und der Zahl der dafür durchgeführten Iterationen aufgerufen werden. */
    void print_ps(char *strint iterations);


    /* Berechnet aus einer Zeichenkette die nächste Iteration, indem auf
     * jedes Zeichen der gegebenen Zeichenkette, wenn möglich, eine
     * Umformungsregel angewendet wird. Für das Ergebnis wird mit malloc()
     * Speicher alloziert.
     */
    char *next_iteration(char *str)
    {
        
    int i,pos=0;
        
    char *str3;
        
    str3 malloc(strlen(str) + 1);
        for (
    0<= strlen(str)-1i++)
        {
         switch(
    str[i])
         {
           case 
    'A':
               
    strcpy(str3+pos,"B-A-B");
             
    pos pos+5;
             break;
           case 
    'B':
              
    strcpy(str3+pos,"A+B+A");
             
    pos pos+5;
             break;
           case 
    '-':
            
    strcpy(str3+pos,"-");
            
    pos pos+1;
            break;
           case 
    '+':
            
    strcpy(str3+pos,"+");
            
    pos pos+1;
            break;
         }
        }
        return 
    str3;
        
    }

    /* main-Funktion. Benutzt den ersten Kommandozeilenparameter als Anzahl
     * der zu berechnenden Iterationen und berechnet die Zeichenkette nach
     * so vielen Iterationen, ausgehend von der Zeichenkette "F".
     */
    int main(int argcchar *argv[])
    {
        
    int ix;
        
    char *s, *z;
        if (
    argc == 1) return 1;
        
    atoi(argv[1]);
        
    malloc(sizeof (char));
        
    z[0] = 'A'
        for (
    1<= xi++)
        {
         
    next_iteration(z);
         
    free (z);
         
    s;
        }
        
    print_ps(zx);
        
    printf("%s",z);
    }



    /* Die Funktion ab hier sollen nicht geändert werden! 

    -----------------------------------------------------------------------

    */

    /* Funktionsprototypen */

    void print_preamble();
    void print_move(int iterations);
    void print_rotate_left(void);
    void print_rotate_right(void);
    void print_epilogue();

    /* Funktion, die die erzeugte Zeichenkette zeichnet. str ist der Zeiger
     * auf die Zeichenkette; iterations ist die Anzahl der Iterationen,
     * durch die str enstanden ist.
     */
    void print_ps(char *strint iterations)
    {
        
    int i;
        
    char *finalstr;
        if (
    str) {
        
    /*Weil es hübscher aussieht, wird die übergebene Zeichenkette
        vor der Darstellung noch verdreifacht*/
        
    finalstr=malloc(strlen(str)*3+3);
        
    sprintf(finalstr,"%sR%sR%s",str,str,str);
        
    print_preamble();
            for (
    i=0;i<strlen(finalstr);i++) {
                switch(
    finalstr[i]) {
                    case 
    'F':
                        
    print_move(iterations);
                        break;
                    case 
    'L':
                        
    print_rotate_left();        
                        break;
                    case 
    'R':
                        
    print_rotate_right();
                        break;
                }    
            }
        }
        
    print_epilogue();
    }


    /* PostScript-Befehle zur Initialisierung. iterations ist die Zahl der
     * Iterationen.
     */
    void print_preamble()
    {
        
    /* Header mit PostScript-Version */
        
    printf("%%!PS-Adobe-2.0\n");
        
    /* Anzahl der Seiten */
        
    printf("%%%%Pages: 1\n");
        
    /* Seitengröße */
        
    printf("%%%%BoundingBox: 0 0 595 842\n");
        
    /* Seitengröße (nochmal) */
        
    printf("%%%%DocumentPaperSizes: a4\n");
        
    /* Ende der Header */
        
    printf("%%%%EndComments\n");
        
    /* Beginn der ersten Seite */
        
    printf("%%%%Page: 1 1\n");
        
    /* neuer Pfad */
        
    printf("newpath\n");
        
    printf("100 600 moveto\n");
    }

    /* Eine Linie ausgeben. Diese Funktion sollte dann aufgerufen werden,
     * wenn 'F' verarbeitet wird. iterations ist die Zahl der
     * Iterationen.
     */
    void print_move(int iterations)
    {
        
    int i;
        
    /* Linienlänge anhand der Iteration bestimmen; die Länge
         * verringert sich exponenziell mit der Iteration
         */
        
    float length 400.;
        for (
    i=1;i<=iterations;i++)
            
    length/=3;
        
        
    /* Linie von der aktuellen Position mit aktueller Drehung um
         * length in (gedrehter) x-Richtung zeichnen
         */
        
    printf("%f 0 rlineto\n"length);
    }

    /* Rotation nach links um 60°. Diese Funktion sollte beim Verarbeiten
     * von '-' aufgerufen werden.
     */
    void print_rotate_left(void)
    {
        
    /* Koordinatensystem um -60° nach rechts rotieren */
        
    printf("60 rotate\n");
    }

    /* Rotation nach rechts um 60°. Diese Funktion sollte beim Verarbeiten
     * von '+' aufgerufen werden.
     */
    void print_rotate_right(void)
    {
        
    /* Koordinatensystem um 60° nach rechts rotieren */
        
    printf("-120 rotate\n");
    }

    /* Abschließende Befehle ausgeben. Iterations ist die Zahl der
     * Iterationen.
     */
    void print_epilogue()
    {
        
    /* den Pfad zeichnen */
        
    printf("stroke\n");
        
    /* die Seite ausgeben */
        
    printf("showpage\n");
        
    /* Seiten- und Dateiende */
        
    printf("%%%%EOF\n");
    }
    kann jmd helfen??
     
Thema:

noch eine zeichenkette^^

Die Seite wird geladen...

noch eine zeichenkette^^ - Ähnliche Themen

  1. Die meisten Repositorien auf GitHub haben immer noch keine Lizenz

    Die meisten Repositorien auf GitHub haben immer noch keine Lizenz: Die Zahl der Repositorien auf GitHub, die eine klare Lizenz haben, bewegt sich seit Jahren um die 20 Prozent und teilweise deutlich darunter. Der...
  2. Die meisten Repositories auf GitHub haben immer noch keine Lizenz

    Die meisten Repositories auf GitHub haben immer noch keine Lizenz: Die Zahl der Repositories auf GitHub, die eine klare Lizenz haben, bewegt sich seit Jahren um die 20 Prozent und teilweise deutlich darunter. Der...
  3. Fedora 20 noch eine Woche später

    Fedora 20 noch eine Woche später: Die Freigabe der Version 20 der Linux-Distribution Fedora verzögert sich noch einmal um eine Woche. Statt dem 10. Dezember peilt das Projekt jetzt...
  4. Hast Du noch Windows auf einer Platte?

    Hast Du noch Windows auf einer Platte?: ich frage einmal einfach so... hast Du noch Windows auf einer Platte und kannst es auch booten? Warum spielt hier keine Rolle. Ja oder Nein?
  5. ist eine Swap Partition heute noch nötig....

    ist eine Swap Partition heute noch nötig....: Hi, ist es heute überhaupt noch notwendig bei einer Neuinstallation einer Linux Distribution eine extra Swap Partition anzulegen? Mein Rechner...