Compilierfehler im programm, wer kann helfen???



  • Leute, das programm ist zwar korigiert(danke dafür) aber das programm macht nicht das was ich will wiso???? Ich habe genau das gemacht was ich gelernt habe und zwar:
    Schritte 1)

    Zuerst programm verstehen. "Mache ein programm das 4 zahlen miteinander vergleicht und sie dan in der reiche nach ausgeben. Dazu noch 2 ausgaben für:

    1. alle vertauschugen die das programm macht
    2. alle vergleichungen die das programm macht".

    Also habe ich mir gedacht als erstes von den 4 zahlen die groste rausfinden und ausgeben. Danha das selbe für die 3 übrichgrblibenen. Dan für die letzten 2. Und dan die lezte ausgeben.

    Dafur brauche ich mindesten 6 int Variablen

    Schritt 2)
    Überlegungen und Domisches Logisches Diagramm.

    Nach lange überlegungen habe ich mich entschlosen nicht die Methode viehle aufanadervolgenden if einweisungen zu benutzen da ich sonst 4! vergeichungen machen muss. Das richtige ist von der anzahl der zahlen einfach die goste zu suchen und sie zu auszugeben. Also:

    ________________________________________________________
    Eingabe der Variablen
    --------------------------------------------------------
    max=max4(a,b,c,d)
    --------------------------------------------------------
    ausgabe max
    --------------------------------------------------------
    max=max3(b,c,d)
    --------------------------------------------------------
    ausgabe max
    --------------------------------------------------------
    max=max2(c,d)
    --------------------------------------------------------
    ausgabe max
    --------------------------------------------------------
    max=max1(d)
    --------------------------------------------------------
    ausgabe max
    --------------------------------------------------------
    ausgabe aller vertauschungen und vergleichungen
    --------------------------------------------------------

    Schritt 3)
    Lösung der Problemme in programm(Übersetzt)

    Das einzige problemm ist die vertauchung zwischen 2 variablem das löse ich wie volgt:

    temp=a
    a=b
    b=temp

    nun das ist die lösung

    Schritt 4:
    Programm

    #include<stdio.h>  
    
    //  
    //Deklaration der Funktionen
    //  
    int Max3(int *Ar1,int *Ar2,int *Ar3,int *Ar4,int *IfCounter, int *SwapCounter);  
    int Max2(int *Ar1,int *Ar2,int *Ar3,int *IfCounter, int *SwapCounter);  
    int Max1(int *Ar1,int *Ar2,int *IfCounter, int *SwapCounter);  
    int Max0(int *Ar1,int *IfCounter, int *SwapCounter);  
    void Swap(int *Num1,int *Num2,int *SwapCounter);//Zieh vertauschung zwei variablen  
    //  
    //  
    
    //Haupt funktio
    int main(void)  
    {  
    //Deklaration der Variablenn  
        int a;                //Erste zahl  
        int b;                //zweite zahl  
        int c;                //dritte zahl  
        int d;                //4 zahl  
        int Max;            //groste zahl  
        int SwapCounter;    //Counter fur vertauschungen
        int IfCounter;        //Counter für vergleichungen
    //  
        a=0;  
        b=0;  
        c=0;  
        d=0;  
        Max=0;  
        SwapCounter=0;  
        IfCounter=0;  
    
                //Haupt programm
    
    //Eingaben der Daten  
        printf("gebe 4 zahlen ein:\n");  
        scanf("%d %d %d %d", &a, &b, &c, &d);  
    
    //sucht und gibt die groste zahl aus. von 4.   
        Max=Max3(&a, &b, &c, &d, &IfCounter, &SwapCounter);  
        printf("\n\b\t%d<",Max);  
        Max=0;  
    
    //sucht und gibt die groste zahl aus. von 3.  
        Max=Max2(&b, &c, &d, &IfCounter, &SwapCounter);  
        printf("%d<",Max);  
        Max=0;  
    
    //sucht und gibt die groste zahl aus. von 2  
        Max=Max1(&c, &d, &IfCounter, &SwapCounter);  
        printf("%d<",Max);  
        Max=0;  
    
    //sucht und gibt die groste zahl aus. von 1  
        Max=Max0(&d, &IfCounter, &SwapCounter);  
        printf("%d\n",Max);  
        Max=0;  
    
        return 0;  
    }  
    //-----------------------------------------------------------------\\  
    ////////////////////////Funktionen\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\  
    //-----------------------------------------------------------------\\  
    
    /////////////////////////////////////////////////////////////////////  
    //vergleicht 4 zahlen           //  
    /////////////////////////////////////////////////////////////////////  
    int Max3(int *Ar1,int *Ar2,int *Ar3,int *Ar4,int *IfCounter, int *SwapCounter)  
    {  
    // Deklaration der variablen 
        int TempMax;    //Groste zahl in der funkion  
    //  
        //TempMax=0;  
    
                //Hauptprogramm  
        TempMax=Max2(Ar1, Ar2, Ar3, IfCounter, SwapCounter);  
        TempMax=Max1(&TempMax, Ar3, IfCounter, SwapCounter);  
    
        return TempMax;  
    }  
    
    /////////////////////////////////////////////////////////////////////  
    //vergleicht 4 zahlen                //  
    /////////////////////////////////////////////////////////////////////  
    int Max2(int *Ar1,int *Ar2,int *Ar3,int *IfCounter, int *SwapCounter)  
    {  
    //Deklaration der Variablen  
        int TempMax;    //Groste zahl in der funktion.  
        //int PusherAr1;  
    //  
        //TempMax=0;  
    
        TempMax=Max1(Ar1, Ar2, IfCounter, SwapCounter);  
        TempMax=Max1(&TempMax, Ar3, IfCounter, SwapCounter);  
    
        return TempMax;  
    }  
    
    /*////////////////////////////////////////////////////////////////////  
    //Vergleicht 2 zahlen dies ist das herzstug //des //programmes                   //  
    /////////////////////////////////////////////////////////////////////*  
    int Max1(int *Ar1,int *Ar2,int *IfCounter, int *SwapCounter)  
    {  
        *IfCounter+=1;  
        if(!(*Ar1<*Ar2))  
        {  
            Swap(Ar1, Ar2, SwapCounter);  
        }  
        return 0;  
    }  
    
    /////////////////////////////////////////////////////////////////////  
    //    Diese Funktion macht nicht blos für das gesammt bild //  
    //    des programms//  
    /////////////////////////////////////////////////////////////////////  
    int Max0(int *Ar1,int *IfCounter,int *SwapCounter)  
    {  
        //haubt funktion  
        return *Ar1;  
    }  
    
    /////////////////////////////////////////////////////////////////////  
    //    Diese funktion vertausht 2 variablen //  
    /*/    !!!AHTUNG GLAUBE VEHLERQUELLE!!!                                           //*  
    /////////////////////////////////////////////////////////////////////  
    void Swap(int *Num1,int *Num2,int *SwapCounter)  
    {  
    
    //Deklaration der Variable  
        int Temp;    //temporere Variable   
    //  
        Temp=0;  
    
            //Hauptprogramm  
        Temp  = *Num1;  
        *Num1 = *Num2;  
        *Num2 = Temp;  
        *SwapCounter= *SwapCounter+1;  
    }
    

    Bin fur alles ofen ratschlege etc. offen. Ah ja wo ich fehler mache bitte makieren und etwas erkleren. Wo lehrne ich mehr über Algorithmen machen???Mir hatt man erzehlt wenn du diese schritte immer durchfurst ist es unmöglich fehler zu machen aber mir kommen laute 0 raus wiso???

    Nun bei solchen fehler wunschte ich mir ich hate nie etwas über computer in meinen leben gehört. Ich habe die TUTORIALS durchgelesen aber ich weiss nicht. Ich vertsehe diese funktionen immer noch nicht. Kommt varscheinlich von den komischen buch das ich gelesen habe. Das die funktionen nicht richtig erklert hat C++ in 24 studen(brauchte genau 33 stunden dafur) gutes buch aber funktionen 😡 . Wie habt ihr den c gelernt???. Kennt weiter wissensquellen uber funktionen (auf deutsch)????

    P.S. soory für rechtschreibfehler habe nur meinen 133 MHZ laptop da habe ich keinen platz (und resursen) fur office rechtschreibung 🙂 😡 😞



  • Man ich werde bald verukt ich zitze 2 tage (glaube ich) am pc habe 1 drukerpatrone entlernt und finde diesen fehler nicht

    kan ich diese i*=i*+1 problem so losen

    a=*i;
    a=a+1;
    *i=a;

    richtig aber wo ist der fehler ich bekomme imer als ausgabe

    0<0<0<(letze zahl)

    wiso???? 😞

    ICh hase programieren wiso entwikelt keiner ein programm das so funktionirt mit ganzen setzen z.b. drukle halo welt. Und der computer macht ein programm das hallo welt ausgibt das were irre 😃 . Düme frage weis jemad mit welchen pogramm man L.C.A.R.S. programmiert hat(OS von U.S.S. VOYger{star tre})???. Ahh ich verukt geworden mit diesen programm ich denke nur mühl. Ahh ich mache selbstgespreche also dan lase ich es lieber für heute mit c. sonst schaue ich bald so aus => :xmas2: .



  • Du gibst in der Max1 Funktion return 0; zurück. Ersetz das mal durch return *Ar1;. Ich blick allerdings auch nicht ganz da durch, ist alles schon irgendwie sehr umständlich.....

    Über Algorithmen kannst du übrigens hier was nachlesen:
    http://www.pronix.de/index.php?site=C/standard_C/c_programmierung_25



  • Nochmal mit

    i = i + 1; // hast du eine Variable, diese kannst du ohne Probleme in eine
    Rechenoperation mit einbinden

    mit i als Pointer d.h. du hast i vorher so definiert z.B.: " int *i; "

    *i //repräsentiert allerdings einen Wert nachdem du i als Pointer definiert
    // hast greifst du jetzt mit *i auf den Wert der an dieser Stelle bzw.
    // Adresse liegt zu

    Merke: Der *-Operator hat drei Bedeutungen:
    1.) Definition von Pointern
    2.) Zugriff auf Werte an einer Speicherstelle
    3.) Multiplikationsoperator

    *i = *i + 1; // das ist falsch, weil das für *i == 8 folgendes wäre:
    // 8 = 8 + 1 bzw. 8 = 9 d.h. das ist Murks einer Zahl
    // eine andere zuzuweisen

    Bitte um Korrektur falls Fehler

    P.S. Kauf dir ein Buch

    P.P.S. Entfalls du schlecht deutsch sprichst, da du aus dem Ausland kommst,
    sag das vorher und keiner hier wird dir Vorwürfe wegen deiner
    Rechtschreibung machen!



  • Duden schrieb:

    *i = *i + 1; // das ist falsch, weil das für *i == 8 folgendes wäre:
                 // 8 = 8 + 1 bzw. 8 = 9 d.h. das ist Murks einer Zahl
                 // eine andere zuzuweisen
    

    Bitte um Korrektur falls Fehler

    P.S. Kauf dir ein Buch

    P.P.S. Entfalls du schlecht deutsch sprichst, da du aus dem Ausland kommst,
    sag das vorher und keiner hier wird dir Vorwürfe wegen deiner
    Rechtschreibung machen!

    int i = 5;
    
    i = i + 1; // Geht nicht weil i == 5?
    

    Überleg noch mal, was du da geschrieben hast.



  • tobidope schrieb

    Duden schrieb:

    C/C++ Code:
    *i = *i + 1; // das geht ohne Probleme

    C/C++ Code:
    .........

    Vehler dürven pehalten wärden. 🙄

    Ja und...hab mich oben vertippt; oder was denkst du denn? :xmas1:



  • Ach ja bei der ersten Post hier:
    http://www.c-plusplus.net/forum/viewtopic.php?t=59807&start=0

    behauptete ich das Gegenteil, verbesserte mich dann aber falsch, das sollte gelöscht werden.



  • Versteh ich nicht...registrier dich besser mal und editier dann die Beiträge, so blick ich da nicht mehr durch.

    *p = *p + 1 
    i = i + 1
    

    Deine Aussage versteh ich jetzt so, dass das nicht legal wäre?! Der Verweis auf den anderen Post macht es nicht besser....

    Was ist denn Unterschied zwischen ++i und i=i+1 ?
    Was ist denn Unterschied zwischen ++*p und *p=*p+1 ?



  • Okey habe es kapiert das mit den *i=*i+1;

    Kann mir einer ein gutes buch empfehlen, ich habe mir das buch c von Markt & Technik gekauft(24 st.).



  • Ich sitze wider bei meinen (zukunfts) pc, und habe gerade die beitrege gelessen, danke leute und herzlichen dank CarstenJ wen ich mal mit der schule fertich bin und meine eigene software firma grunde angasiere ich dich bis echt gold wert.


Anmelden zum Antworten