Palindrom



  • Hallo 🙂

    Ich hab die Aufgabe folgende Funktion zu überprüfen, welche überprüft das ein Wort ein Palindrom ist. Was ein Palindrom ist weiß ich, nur weiß ich nicht wie ich die Funktion prüfe.

    Hier die Funktion:

    Palindrom1(char feld[], int l, int korrekt) {
      int i;
      i = 1; l = (l - 1);
      while ((i < l) && (korrekt==1)) {
        korrekt = feld[i] == feld[l];
        i = i + 1;
      }
      return korrekt;
    }
    

    Ich dachte daran, dieser Funktion einfach eine Zeichenkette zu übergeben um diese zu prüfen. Mach ich dies, liefert mir der gcc eine leere Menge zurück. Also es steht nichts da.

    Hier mein Test:

    #include <stdio.h>
    
    Palindrom1(char feld[], int l, int korrekt) {
      int i;
      i = 1; l = (l - 1);
      while ((i < l) && (korrekt==1)) {
        korrekt = feld[i] == feld[l];
        i = i + 1;
      }
      return korrekt;
    }
    int main()
    { 
     printf("Ausgabe:\n", Palindrom1("otto",4, 0)); 
    }
    

    Ich bitte um Hilfe. Bin noch Anfänger in C

    Danke!



  • ^^ruf mal mit korrekt==1 auf.
    🙂



  • hey hab ich auch schon versucht. bringt leider auch nichts. ich versteh das irgendwie nicht so ganz!

    bin für weitere hilfe echt dankbar!



  • Also es steht nichts da.

    printf("Ausgabe:\n", Palindrom1("otto",4, 0));
    

    Vielleicht doch noch ein %d?



  • oh .. danke! 🙂

    ich hab noch eine frage, das Pointer auf eine Speicheradresse zeigen weiß ich, aber welchen nutzen haben diese? bzw welchen nutzen hat das generell?



  • C kann nur Werte übergeben, die man dann beim Aufrufer nicht
    ändern kann. Deshalb kann man über den Wert der Adresse auf etwas
    zugreifen.



  • das versteh ich nicht. wieso soll ich auf ne adresse zugreifen wenn ich keine werte ändern kann. wo brauch ich sowas?



  • stell dir mal vor, du möchtest in einer funktion halbiere() einen eingangswert halbieren (scheint sinnlos, ich weiß *g*).

    zum beispiel so:

    #include <stdio.h>
    
    void halbiere(int zahl) {
    	zahl = zahl/2;
    }
    
    void halbiereMitPointer(int* zahl) {
    	*zahl = *zahl/2;
    }
    
    int main() {
    	int zahl = 10;
    	halbiere(zahl); // Uebergabe "by value"
    	printf("Die Variable Zahl wurde nicht veraendert! Wert: %d\n", zahl);
    	printf("---------------------\n");
    	halbiereMitPointer(&zahl); // Uebergabe der Adresse von zahl
    	printf("Siehe da! Die Originalvariable hat sich veraendert. Wert: %d\n", zahl);
    
    	return 0;
    }
    


  • hey vielen dank! das verstehe ich! 🙂

    wann kommen dann pointer zum einsatz?

    Ich hab leider noch ein Problem, ich woltle eigentlich bei meinem Palindrom, statt nur 0 oder 1 als rückgabe wert, eine ausgabe, dass es eins ist oder nicht.

    da fängt es na dass ich es nichtmal schaffe ein wort einzulesen, es der funktion zu übergeben und es darin zu verarbeiten. ich brauch eure hilfe. mit den arrays komm ich leider nicht wirklich klar.

    #include <stdio.h>
    #include <string.h>
    
    Palindrom1(char feld[], int l, int korrekt) {
      int i;
      char ret[2];
      i = 1; l = (l - 1);
      while ((i < l) && (korrekt==1)) {
        korrekt = feld[i] == feld[l];
        i = i + 1;
      }
      if(korrekt==1){  ret[0]="Ist ein Palindrom!";}
      if(korrekt==0){ ret[1]="Ist kein Palindrom!";}
    
     return korrekt;
    }
    int main()
    { 
     char ty[];
     //size_t lenght;
     printf("Geben Sie ein Wort ein: \n");
     scanf("%s", &ty[])
    
     printf("Ihr Wort ",Palindrom1(ty[], strlen(ty[]), 0));
    
     return 0;
    }
    

    Ich weiß einfach nicht wie ich das C-syntaktisch richtig umsetze. möchte halt, da dass wort größer als 1 byte ist in einen dynamischen array laden und diesen der funktion übergeben..

    VIELEN VIELEN dank für die bisherige hilfe!



  • hallo 🙂

    möchte keiner antworten? ich weiß echt nicht wie ich das umsetze. BIn für hilfe echt dankbar!



  • ka was dein programm eigentlich machen soll hab es aber mal erweitert dass es mit dynamischen speicher klappt deine funktion ist eigentlich auch völlig sinnfrei da du jedes zeichen im array mit dem letzten zeichen vergleichst.

    #include <stdio.h>
    #include <string.h>
    
    void Palindrom1(char *feld, int l, int korrekt) {
      int i;
      char ret[2];
      i = 1; l = (l - 1);
      while ((i < l) && (korrekt==1)) {
        korrekt = feld[i] == feld[l];
        i++;
      }
      if(korrekt==1){  ret[0]="Ist ein Palindrom!";}
      if(korrekt==0){ ret[1]="Ist kein Palindrom!";}
    
     return korrekt;
    }
    
    int main()
    {
     char *ty;
    
     // Speicher reservieren
     ty=(char*)malloc(60*sizeof(char));
    
     // ueberpruefen ob speicher reserviert werden konnte
     if(ty==NULL)
     {
        printf("Konnte keinen speicher allokieren\n");
        printf("Verlasse programm\n");
        exit(1);
     }
    
     printf("Geben Sie ein Wort ein: \n");
     // Wort einlesen
     scanf("%s", ty)
    
     printf("Ihr Wort ",Palindrom1(ty, strlen(ty), 0));
     // Speicher wieder freigeben
     free(ty);
     return 0;
    }
    

Anmelden zum Antworten