[C/C++] Algorythmen Auslagern [Pointer]

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von GenO37, 10. Dezember 2008 .

Schlagworte:
  1. 10. Dezember 2008
    Algorythmen Auslagern [Pointer]

    Hiho...
    sind Pointer funktionsübergreifend?

    Ich habe versucht ein Programm zu schreiben, dass 2 Zahlen einließt, diese in ein andere Funktion schiebt, die Zahlen dort zu addieren und das Ergebnis an die ursprüngliche Funktion zurück zu geben. Also an sich nichts Kompliziertes.

    Mein Quelltext:

    Funktion 1:

    Code:
    #include <stdio.h>
    
    int main()
    {
     int a,b,*ptr1,*ptr2,*ptr3;
     
     ptr1=&a;
     ptr2=&b;
     
    
     printf("Bitte eine Zahl eingeben: ");
     scanf("%i",&a);
    
     printf("Bitte eine zweite Zahl eingeben: ");
     scanf("%i",&b);
    
     printf("%i",*ptr3);
    
     return 0;
    }

    Funktion 2:

    Code:
    #include <stdio.h>
    
    int main2()
    {
     int *ptr1,*ptr2,*ptr3;
    
     ptr3= *ptr1 + *ptr2;
    }

    Könnt ihr mir sagen, wie ich das richtig mache, oder was ich falsch gemacht habe?

    Dankeschön

    MfG
    GenO
     
  2. 10. Dezember 2008
    AW: Algorythmen Auslagern [Pointer]

    Hm, ich verstehe dein Problem nicht ganz. In welcher Verbindung stehen main() und main2()?

    Code:
    int main2()
    {
    int *ptr1,*ptr2,*ptr3;
    
    ptr3= *ptr1 + *ptr2;
    }
    Du arbeitest hier mit unitialisierten Zeigern -> geht gar nicht.

    Eine Compiler-Meldung wäre auch sinnvoll.
     
  3. 10. Dezember 2008
    AW: Algorythmen Auslagern [Pointer]

    Warum nicht so? Das einlesen hast du ja schon, du schreibst nur eine neue Funktion, die dann die Werte addiert und in dem Hauptprogramm (main) aufgerufen wird

    Code:
    int addieren(int a, int b)
    {
     return a+b;
    }
    
    int main()
    {
     ...
    
     int summe = addieren(a,b);
    
     ....
    }
    
     
  4. 10. Dezember 2008
    AW: Algorythmen Auslagern [Pointer]

    Des Weiteren möchte ich anmerken, dass du deine Variablen (auch Zeiger sind Variablen!) INNERHALB der Funktion deklarierst. Diese Variablen sind dann auch nur INNERHALB der Funktion vorhanden!.

    Weiterführend zu bedenken gebe ich dir auch noch folgendes:
    Code:
    int i=1;
    
    void main()
    {
     f1( 4 );
    }
    
    void f1(int i)
    {
     int i = 3;
    
     printf("%d", i); // ergibt dann dementsprechend 3 (nicht 1 oder 4!).
    }
    
    
     
  5. 10. Dezember 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Algorythmen Auslagern [Pointer]

    das was ich geschrieben hab war einfach nur try and error prinzip...
    nur wie bekomm ich es jetzt gebacken, ptr1 und ptr2 in die Funktion 2 zu übertragen und den ptr3 dann wieder in meine Funktion 1 zu kopieren?

    das programm lässt sich ausführen, bis zu der stelle, an der er die beiden zahlen zusammen zählen soll... dann kommt:

    Bild

    MfG

    ***edit***
    hui die antworten kommen ja schneller als meine... hehe so ich les mir dann mal alles durch...

    irgendwie check ichs noch net so ganz...

    ich will einfach nur 2 eingaben auslagern (mit pointern), bearbeiten lassen und zurückschicken... der sinn der aufgabe besteht einfach nur darin, klar weiß ich, dass man das auch in eine funktion packen kann...

    //bin erst mal weg lernen werde dann später nochmal drüber schaun... danke schonmal soweit...
     
  6. 10. Dezember 2008
    AW: Algorythmen Auslagern [Pointer]

    naja du könntest einfach die beiden werte die du zusammenzählen willst als funktionsparameter mitgeben und die eine funktion berechnet dir die summe draus und gibt wieder nen pointer zurück. ich denke der sinn der übung läuft aber auf folgendes hinaus oder?

    call by value / reference sehr wichtig ! @ C/C++ - tutorials.de: Tutorial, Forum, Anleitung & Hilfe
     
  7. 11. Dezember 2008
    AW: Algorythmen Auslagern [Pointer]

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int rechnen(int c, int d) //Nebenfunktion; 2 Variablenwerte werden vom main übergeben, also müssen wa auch 2 deklarieren zum auffangen.
    {
     int summe; //Dient nur zum Rechnen
     
     summe= c + d;
     
     return summe;
    }
    
    int main() //Hauptfunktion
    {
     int a,b,ergebnis;
    
     printf("Bitte eine Zahl eingeben: ");
     scanf("%i",&a);
    
     printf("Bitte eine zweite Zahl eingeben: ");
     scanf("%i",&b);
    
     ergebnis=rechnen(a,b); //a und b Werte werden übergeben
    
     printf("%i",ergebnis);
     
     system("Pause");
    
     return 0;
    }
    
    
    so sollte es funzen. das ist aber nur call by value glaub ich. damit kann man nur ein wert zurück geben. wenn du mehrere werte zurückgeben möchtest, musst du mit pointervariablen bzw. mit den adressen arbeiten. call by reference oder so schimpft sich das.
    aber für deine zwecke reicht das hier.

    Mfg Schmidt!

    Edit: Call by reference (mit Pointern)

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    void rechnen(int *a,int *b,int *ergebnis) //Nebenfunktion
    {
     *ergebnis = *a + *b;
    }
    
    int main() //Hauptfunktion
    {
     int a,b,ergebnis;
    
     printf("Bitte eine Zahl eingeben: ");
     scanf("%i",&a);
    
     printf("Bitte eine zweite Zahl eingeben: ");
     scanf("%i",&b);
    
     rechnen(&a,&b,&ergebnis);
    
     printf("Ergebnis: %i\n",ergebnis);
     
     system("Pause");
    
     return 0;
    }
    
    
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.