C++-Programmierung # Bitte um Hilfe für Aufgabe # for-schleife # wertübergabe #

ich weiß, dass ich das auskommentierte noch rausnehmen muss ... ich habe es nur behalten, weil es so funktioniert hat und jetzt ja der fehler mit dem "zeiger" kommt.

Die Namen standen so in der Aufgabe, da kann ich jetzt auch nichts dran ändern und eigentlich sind die namen ja auch nebensache und unwichtig in erster linie...

Ich wollte nur wissen was jetzt der fehler ist....
 
aber auf einen nicht allokierten Pointer zugreifen ist unschön
Jap stimmt. Entschuldigung und danke das du mich darauf hingewiesen hast.
Ein dummer Fehler der mir des öftern passiert leider. Ich habe mich davon blenden lassen, dass bei 5 testläufen alles problemlos funktionierte.
 
Zitat:
Die 1.Funktion(genannt werteparameter) erhält über die Tastatur zwei Werte(wert1,wert2) mitgeteilt.

Ich bin mir ziemlich sicher, dass du die Werte übergeben musst.

Ansonsten würde der main-Teil:
C++:
int *zeiger;
*zeiger=werteparameter();
int sum=zeigerparameter(zeiger);
so gehören:
C++:
int zeiger;
zeiger=werteparameter();
int sum=zeigerparameter(&zeiger);

Oder, falls ihr Sachen mit malloc etc schon gelernt habt:
C++:
int sum;
int *zeiger;
zeiger=(int *)malloc(sizeof(int));
if(zeiger==0)
    cout<<"Fehler";
else
{
    *zeiger=werteparameter();
    sum=zeigerparameter(zeiger);
    free(zeiger);
}

Die new-Variante:
C++:
int sum;
int *zeiger;
try{zeiger=new int;}
catch(...){zeiger=0;}
if(zeiger==0)
    cout<<"Fehler";
else
{
    *zeiger=werteparameter();
    sum=zeigerparameter(zeiger);
    delete zeiger;
}
 
Ich dachte eigentlich man müsste die Funktion nur in der Main-Funktion aufrufen und dann würde der rest also die zwei werte dort abgefragt und nur der wert3 also bei mir pro (Produkt) müsste übergeben werden an die andere Funktion ...oder muss man extra nen zeiger in der main-funktion plazieren und kann nicht von der einen zur anderen funktion springen?

Sry habe nicht so viel ahnung .... das mit diesem malloc hatten wir noch nicht und ich glaube ne if-schleife sollten wir da auch nicht verwenden ... naja hoffe ihr schafft es mir zu helfen .... bin morgen um 11 uhr wieder da und schau mir das hier nochmal an .. ;)
 
Dass du die zweite Funktion in der ersten aufrufen kannst und dir somit den zeiger in der main-Funktion sparst, hab ich doch schon im Beitrag 4 oben geschrieben-als kompletter Code, bei dem höchstens das "Bitte geben Sie zwei Zahlen ein" fehlt.

Und hat zwar nichts mit dem Thema zu tun,aber:
Schleifen wiederholen sich.
In C++ also while, for, dowhile
if gehört da nicht dazu
 
Das Programm habe ich jetzt fertig :)

Danke nochmal dafür ;)

Ich habe aber noch eine Frage und zwar, wie kann man die Ausgabe so ändern, dass die Zahlenreihe nicht untereinander sondern nebeneinander ausgegeben wird und mit einer lehrzeile zwischen den jeweiligen zahlen?

Nur so für die Optik :)

Danke schon mal
 
Habe jetzt eine Wiederholung eingebaut ... Leider funktioniert die nicht und es tritt auch kein Fehler auf hier der quellcode
PHP:
#include<iostream>
using namespace std;

int werteparameter();
int zeigerparameter(int *zeiger);

//Main-Funktion
int main()
{	
	
	
	//Deklaration
	int zeiger;
	char antw;
	do{
	zeiger=werteparameter();
	int sum=zeigerparameter(&zeiger);
	cout<<"\nDie Summe der ganzen Zahlen ist: "<<sum<<endl;
	cout<<"\n"<<endl;
	cout<<"Wollen Sie das Programm wiederholen?"<<endl;
	cout<<"Dann druecken Sie J!"<<endl;
	cin>>antw;
	
	//Rückgabe
    return 0;
	}while(antw=='J'||antw=='j');
}

//1.Funktion - Werteparameter
int werteparameter()
{	
	//Deklaration
	int wert1,wert2,pro;
	//Eingabe
	cout<<"Willkommen!"<<endl;
	cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
	cout<<"Bitte geben Sie den ersten Wert ein!\n"<<endl;
	cin>>wert1;
	cout<<"Bitte geben Sie den zweiten Wert ein!\n"<<endl;
	cin>>wert2;
	//Berechnung
	pro=(wert1*wert2);
	//Übergabe
	return(pro);
}

//2.Funktion - Zeigerparameter
int zeigerparameter(int *zeiger)
{
	//Deklaration
	int sum=0;
	cout<<"\nDie Reihe der Zahlen lautet: \n"<<endl;
	//for-schleife
	for(int i=*zeiger;i>=0;i--)
	{
		cout<<i<<" "<<endl;
		sum+=i;
	}
	//Rückgabe
	return(sum);
}
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    29,4 KB · Aufrufe: 24
Zuletzt bearbeitet:
endl steht für end line und bedeutet Zeilenabstand.
also lass bei der ausgabe einfach das <<endl weg und schon werden sie nebeneinander ausgegeben.
wenn du return 0; machst bedeutet dies ein Ausstieg aus der aktuellen Funktion.
Da du hier in der main Funktion bist musst du also das return 0; erst nach der dowhile Schleife angeben. Ansonsten wird es logischerweise beendet.
Zusätzlich würde ich das Wilkommen aus der dowhile Schleife entfernen da es ein bisschen komisch ist wenn man bei der erneuten Verwendung des Programms erneut wilkommen geheissen wird.
Ein kleiner Schönheitsfehler ist, das dein Programm zum jetzigen Zeitpunkt nur mit Positiven Zahlen funktioniert.
Deshalb hab ich dieses "Feauture" auch noch eingebaut ;)
Wie du vielleicht bemerkt hast sind all deine Variablen vom Typ int. d.h ganze Zahlen. Wenn man nun eine kommata Zahl eingibt bricht das Programm ab.
Des halb wäre es Sinnvoll noch eine Fehlerabfrage einzubauen.
Nun hier erstmal der Komplette Quellcode:
Code:
#include<iostream>
using namespace std;

int werteparameter();
int zeigerparameter(int *zeiger);

//Main-Funktion
int main()
{


    //Deklaration
    int zeiger;
    char antw;
    cout<<"Willkommen!"<<endl;
    cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
    do{
    zeiger=werteparameter();
    int sum=zeigerparameter(&zeiger);
    cout<<"\nDie Summe der ganzen Zahlen ist: "<<sum<<endl;
    cout<<"\n"<<endl;
    cout<<"Wollen Sie das Programm wiederholen?"<<endl;
    cout<<"Dann druecken Sie J!"<<endl;
    cin>>antw;

    cout<<endl<<endl;

    }while(antw=='J'||antw=='j');
    //Rückgabe
    return 0;
}

//1.Funktion - Werteparameter
int werteparameter()
{
    //Deklaration
    int wert1,wert2,pro;
    //Eingabe
    cout<<"Bitte geben Sie den ersten Wert ein!\n"<<endl;
    cin>>wert1;
    cout<<"Bitte geben Sie den zweiten Wert ein!\n"<<endl;
    cin>>wert2;

    //Berechnung
    pro=(wert1*wert2);
    //Übergabe
    return(pro);
}

//2.Funktion - Zeigerparameter
int zeigerparameter(int *zeiger)
{
    //Deklaration
    int sum=0;
    cout<<"\nDie Reihe der Zahlen lautet: \n"<<endl;
    //for-schleife
    if(*zeiger<0)
    {
        for(int i=*zeiger;i<=0;i++)
        {
            cout<<i<<" ";
            sum+=i;
        }
    }
    else
    {

        for(int i=*zeiger;i>=0;i--)
        {
            cout<<i<<" ";
            sum+=i;
        }
    }
    cout<<endl;
    //Rückgabe
    return(sum);
}
 
Zurück