1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Hilfe!! (Call by Value..) in C

Discussion in 'Programmieren' started by hasan85, Jan 17, 2008.

Thread Status:
Not open for further replies.
  1. hasan85

    hasan85 ROM

    Hallo..
    Ich habe eine Aufgabe,die in C-Sprache gelöst werden muss(es geht um Call by Value) .Ich kenne mich aber mit c++ gut aus und habe keine ahnung von C !!

    Ich bitte um ne sofortige hilfe und Danke im Voraus?

    Die Aufgabenstellung:

    Ich soll ein Programm schreiben, das eine Zahl einliest und ihr Signum und ob es sich um eine Ganzzahl oder Dezimalzahl handelt ausgibt. Zahlen, deren Nachkommastellen nur Nullen sind, gelten dabei als Ganzzahlen.
    Das Programm soll so oft wiederholt werden bis der Nutzer auf die Frage "Weitere Eingaben? <j>/n" mit n oder N reagiert. Fehleingaben brauchen dabei nicht beachtet zu werden.

    Vorgehensweise:

    Ich soll die Zahleingabe als Funktion mit folgender Deklaration:

    void eingabeDouble(double *);

    und die Berechnung des Signums und Test auf Ganzahl oder Dezimalzahl mit dieser Deklaration:

    int signumUndZahltyp(double, int *);

    Dabei steht der Rückgabetyp für das Signum, der double-Parameter für den eingegebenen Wert und der int *-Parameter (call by reference) für Ganzahl (= 0) oder Dezimalzahl (= 1)

    L.Grüße
     
  2. RealC++

    RealC++ Kbyte

    Code:
    #include <stdio.h>
    
    void EingabeDouble(float *);
    int SignumUndTyp(float,int *);
    
    void main(void)
    {
    	char	UserChoice;
    	float	Eingabe;
    	int	Typ,SignumDerZahl;
    
    	do
    	{
    		EingabeDouble(&Eingabe);
    		SignumDerZahl=SignumUndTyp(Eingabe,&Typ);
    
    		printf("\nSignum der Zahl: %d\nTyp der Zahl: %d",SignumDerZahl,Typ);
    
    		printf("\n\nWeitere Eingaben?\n<j/J> - Ja\n<n/N> - Nein\n< >\b\b");
    		UserChoice=getchar();
    	}while(UserChoice!='n'&&UserChoice!='N');
    }
    
    void EingabeDouble(float *Eingabe)
    {
    
    	printf("\n\n\nBitte geben Sie die Zahl ein welche geprueft werden soll: ");
    	scanf("%f",Eingabe); fflush(stdin);
    }
    
    int SignumUndTyp(float Eingabe,int *Typ)
    {
    	//Typ ermitteln
    	if(Eingabe==(int)Eingabe)
    		*Typ=0;
    	else
    		*Typ=1;
    
    	//Signum ermitteln
    	if(Eingabe==0)
    		return 0;
    	else if(Eingabe<0)
    		return -1;
    	else
    		return 1;
    }
    Irgendwie komme ich mit double und scanf() zurzeit gerade nicht so ganz klar.-Ich habe deshalb mal einen float genommen anstelle des double.

    P.S.: Das du dich mit C++ gut auskennst glaubt dir wohl "kein Schwein".-Der Quelltext da oben ist ja wohl simpler als simpel und C++ dummerweise "super gleich" wie C...:rolleyes:
     
  3. hasan85

    hasan85 ROM

    aber ich sehe wirklich dass die beiden ganz anders sind.
    Ich danke ihnen sehr auf jeden fall.
     
  4. RealC++

    RealC++ Kbyte

    Einigermassen vernünftig codiert sollte es in C++ z. B. so aussehen:
    Code:
    #include <iostream>
    
    class CAnalyseNumber
    {
    private:
    	double Input;
    
    public:
    	void Eingabe(void)
    	{
    		std::cout<<"Bitte geben Sie die Zahl ein welche geprueft werden soll: ";
    		std::cin>>Input;
    	}
    
    	int Signum(void)
    	{
    		if(Input==0)
    		   return 0;
    		else if(Input<0)
    		   return -1;
    		else
    		   return 1;
    	}
    
    	const char * Typ(void)
    	{
    		if(Input==static_cast<int>(Input))
    		   return "Ganzzahl";
    		else
    		   return "Bruchzahl";
    	}
    };
    
    void main(void)
    {
    	CAnalyseNumber ZahlAuswerten;
    	char ProgrammBeenden;
    
    	do
    	{
    		ZahlAuswerten.Eingabe();
    
    		std::cout<<"Signum der Zahl: "
    			<<ZahlAuswerten.Signum()
    			<<std::endl
    			<<"Typ der Zahl: "
    			<<ZahlAuswerten.Typ()
    			<<std::endl;
    
    		std::cout<<std::endl
    			<<"Geben Sie 'Q' ein um das Programm zu beenden!"
    			<<std::endl;
    		std::cin>>ProgrammBeenden;
    	}while(ProgrammBeenden!='Q');
    }
    Aber auch das ist C++:
    Code:
    #include <iostream>
    
    void EingabeDouble(double *);
    int SignumUndTyp(double,int *);
    
    void main(void)
    {
    	char	UserChoice;
    	double	Eingabe;
    	int	Typ,SignumDerZahl;
    
    	do
    	{
    		EingabeDouble(&Eingabe);
    		SignumDerZahl=SignumUndTyp(Eingabe,&Typ);
    
    		std::cout<<std::endl
    			<<"Signum der Zahl: "<<SignumDerZahl<<std::endl
    			<<"Typ der Zahl: "<<Typ;
    
    		std::cout<<std::endl<<std::endl
    			<<"Weitere Eingaben?"<<std::endl
    			<<"<j/J> - Ja\n<n/N> - Nein"<<std::endl
    			<<"< >\b\b";
    		std::cin>>UserChoice;
    	}while(UserChoice!='n'&&UserChoice!='N');
    }
    
    void EingabeDouble(double *Eingabe)
    {
    
    	std::cout<<std::endl<<std::endl<<std::endl
    		<<"Bitte geben Sie die Zahl ein welche geprueft werden soll: ";
    	std::cin>>*Eingabe;
    }
    
    int SignumUndTyp(double Eingabe,int *Typ)
    {
    	//Typ ermitteln
    	if(Eingabe==static_cast<int>(Eingabe))
    		*Typ=0;
    	else
    		*Typ=1;
    
    	//Signum ermitteln
    	if(Eingabe==0)
    		return 0;
    	else if(Eingabe<0)
    		return -1;
    	else
    		return 1;
    }
    Und wo ist jetzt der riesige Unterschied? (Ausser dass ich mit std::cin das mit dem double problemlos kann.:))
    Du hast wohl einfach Probleme mit Zeigern/Pointern/Referenzen und damit auch mit "Call by Referenz". Referenzen sind aber nicht C-spezifisch, damit wird in C++ genau so gearbeitet.
     
Thread Status:
Not open for further replies.

Share This Page