Ergänzung Anweisung mit PTR

Diskutiere Ergänzung Anweisung mit PTR im C/C++ Forum; Hallo, Ich habe folgende Aufgabe in C, leider habe ich keinen Lösungsansatz. Eventuell kann mir jemand sagen, wie die Lösung lautet und dazu...

  1. Java The Hutt
    Java The Hutt Neues Mitglied
    Hallo,

    Ich habe folgende Aufgabe in C, leider habe ich keinen Lösungsansatz. Eventuell kann mir jemand sagen, wie die Lösung lautet und dazu bitte eine Erklärung hinzufügen :)


    Ergänzen Sie die for – Anweisung im folgenden Programm so, dass alle 3 Parameter durch den Zeiger ptr definiert werden! Ergänzen Sie auch die anderen unvollständigen Anweisungen.

    Code (C):

    #include <stdio.h>
    #include <conio.h>

    short abc(char *txt){ char *ptr;
    for (.....................; ........................ ;......................... );
    return ..................................;
    }

    int main() {
    char txt[25] = "Hallo Welt";
    int i = 0;
    printf("\nIhr Text: ");
    gets(txt);
    fflush(stdin);
    printf("\n Der Text enthält %d Zeichen.", abc(txt));
    getch()
    return 0;
    }
     
  2. Vielleicht hilft dir dieser Kurs hier weiter.
  3. mihe7
    mihe7 Bekanntes Mitglied
    Code (Text):

    Zu Beginn:

    txt
    |
    v
    Text im Speicher$
    ^
    |
    ptr

    Es gilt: ptr - txt == 0

    Am Ende:

    txt
    |
    v
    Text im Speicher$
                    ^
                    |
                   ptr

    Es gilt: ptr - txt == 16
     
    Das '$' wird hier aus Gründen der Darstellung verwendet. Bei Dir wird das Ende der Zeichenkette durch eine 0 markiert.
     
  4. Java The Hutt
    Java The Hutt Neues Mitglied
    Hmm... hier mein Lösungsansatz. Der leider nicht funktioniert...

    Code (C):
    #include <stdio.h>
    #include <conio.h>

    char abc(char *txt)
    {
        char *ptr;
        //Lösungsansatz, überlegung:
            // Pointer soll die Adresse annehmen von Txt.
            // Pointer soll maximal erhöht werden, bis er die letzte Stelle von Txt erreicht hat
        for (*ptr == *txt ; *ptr<*txt ; *ptr++  );
        printf("Ausgabe erscheint nur, wenn ein Printf hier steht")
        // Pointer - Text = Anzahl der Stellen.
        return ((*ptr) - (*txt));
    }

    int main()
    {
        char txt[25];
        int i = 0;
        printf("\nIhr Text: ");
        gets(txt);
        fflush(stdin);
        printf("\n Der Text enthaelt %d Zeichen.", abc(txt));
        getch();
        return 0;
    }
     
     
  5. thecain
    thecain Aktives Mitglied
    Was funktioniert nicht?

    warum vergleichst du *ptr mit *txt?

    Was erwartest du von der Anweisung im for?
     
  6. Java The Hutt
    Java The Hutt Neues Mitglied
    Ich wollte die Stelle meines (Ptr) an die erste Stelle des Textes (txt) setzen.
    Das ganze soll solange gehen, bis Ptr an der letzten Stelle von Txt ist.

    und zurückgeben möchte ich dann den Zahlenutnerschied von Txt und meinem Pointer, sprich, die Buchstabenanzahl
     
  7. thecain
    thecain Aktives Mitglied
    Dann musst du eine Zuweisung machen und keinen vergleich.
    Dann musst du dir überlegen, wie du erkennst, wann der Text zuende ist, da du ja die Länge nicht kennst, nur den Startpointer. @mihe7 hat da ja einen guten Hinweis gegeben.
     
  8. Java The Hutt
    Java The Hutt Neues Mitglied
    Das hatte ich eig probiert :D
    Also,
    Code (C):
    char *ptr = txt;
    damit habe ich meinem Pointer die Speicheradresse von dem Text (txt)

    Code (C):
    for (*ptr = 0; *ptr < *txt; *ptr++);
    Damit versuche ich, dem Pointer den Startwert 0 zugeben. Die Schleife soll solange durchlaufen, bis Ptr die größe von txt hat. und solange Ptr um 1 erhöhen.
    Damit versuche ich gedanklich, dass Txt an seiner Stelle bleibt, aber mit jedem Durchlauf bis Txt Pointer erhöht wird um die Anzahl der Buchstaben in dem Char.
    Code (C):
    return ((*ptr) - (*txt));
    Danach möchte ich, dass Text vom Ptr abgezogen wird, sodass ein Zahlenwert erscheint...
    Aber es klappt leider nicht :(
     
  9. thecain
    thecain Aktives Mitglied
    Wie kommst du darauf das *txt die Länge ist?

    Da stimmt so einiges nicht, auch an den Überlegungen. Dir fehlen viele Grundlagen zu Pointer. Lies dir die lieber nochmals durch.
     
    mihe7 gefällt das.
  10. Java The Hutt
    Java The Hutt Neues Mitglied
    Ich habe jetzt das ganze nochmal einfach aufgebaut.
    Code (C):
    int main()
    {

        int Zahl[] = {5,1,2,3,4,4,432,4,34,4,4,4,324,43,34,43,432};
        int *PtrZahl;
        PtrZahl = Zahl;
        printf("\nAnzahl Zahlen: \t\t\t\t %d",sizeof(Zahl) / sizeof(*PtrZahl));

        char buchstabe [] = {'H', 'a', 'l', 'l', '\0'};
        char * PtrBuchstabe;
        PtrBuchstabe = buchstabe;
        printf("\nAnzahl Buchstaben:\t\t\t %d",(sizeof(buchstabe)/sizeof(*PtrBuchstabe))-1);


        char zeichenkette [] = "Hallo Welt ich bin die Zeichenkette";
        char * PtrZeichenkette;
        PtrZeichenkette = zeichenkette;
        printf("\nAnzahl Zeichen der Zeichenkette: \t %d", (sizeof(zeichenkette)/sizeof(*PtrZeichenkette))-1);


    }
    Das klappt so soweit.

    Wenn ich nun aber die Funktion übergebe und sämtliche Zählungen gleich lasse, erhalte ich nicht mehr den richtigen Wert.

    Code (C):
    #include <stdio.h>
    #include <stdlib.h>

    char funktionzaelen(char *zeichenkette){


        char * PtrZeichenkette;
        PtrZeichenkette = zeichenkette;
        printf("\nAnzahl Zeichen der Zeichenkette: \t %d", (sizeof(zeichenkette)/sizeof(*PtrZeichenkette))-1);

    }

    int main()
    {


        char zeichenkette [] = "Hallo Welt ich bin die Zeichenkette";
        funktionzaelen(zeichenkette);
    }
     
    Ich schließe darauf, dass es ein Problem bei der Übergabe an die Funktion gibt. Kann mir da jemand helfen?
     
  11. mihe7
    mihe7 Bekanntes Mitglied
    @Java The Hutt in meinem "Bild" kannst Du annehmen, dass ptr der Fuß des Pfeils ist, *ptr die Pfeilspitze.

    Anders formuliert: ptr speichert eine Adresse, *ptr kennzeichnet den Wert, der an dieser Adresse steht.
     
  12. Wenn du Java lernen möchtest, empfehlen wir dir diesen Kurs hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Ergänzung Anweisung mit PTR - Ähnliche Themen

MixProfit-verdiene mit dem Verkauf von Nahrungsergänzungsmitteln
MixProfit-verdiene mit dem Verkauf von Nahrungsergänzungsmitteln im Forum Allgemeine Java-Themen
ergänzung 1 Aufgabe
ergänzung 1 Aufgabe im Forum Java Basics - Anfänger-Themen
Suche Buchergänzung zu "Servlets & JSP von Kopf bis Fuß"
Suche Buchergänzung zu "Servlets & JSP von Kopf bis Fuß" im Forum Bücher, Tutorials und Links
Java Verketten von Stream - Bedeutung der Anweisungen?
Java Verketten von Stream - Bedeutung der Anweisungen? im Forum Java Basics - Anfänger-Themen
Wie kann ich einen User Input mit einer If-Anweisung verbinden?
Wie kann ich einen User Input mit einer If-Anweisung verbinden? im Forum Java Basics - Anfänger-Themen
Thema: Ergänzung Anweisung mit PTR