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

R

Redneet

Hi,

ich habe hier eine Aufgabe aus der Schule und bekomme die irgendwie nicht richtig hin, weil ich die for-schleife und wertübergabe von funktion zu funktion noch nicht ganz beherrsche, weil die ferien dazwischen waren habe ich das meiste nicht mehr drauf. Ich hoffe ihr könnt mir helfen!

Aufgabe:
Die 1.Funktion(genannt werteparameter) erhält über die Tastatur zwei Werte(wert1,wert2) mitgeteilt. Diese Werte werden miteinander multipliziert. Das Ergebnis(wert3) wird an die 2.Funktion(zeigerparameter) übergeben mithilfe von zeigern.
In der 2.Funktion soll von 0 bis zum übergebenen Wert(wert3) alle Zahlen, mit der größten Zahl beginnend, in der Konsole erscheinen ((also wert3-bis0)mithilfe einer for-schleife zu lösen). Diese Werte sollen miteinander addiert werden und die Summe soll an die Main-Funktion übergeben werden.
In der Main-Funktion soll die Summe ausgegeben werden und das Programm muss man wiederholen können.

Hier schon mal das was ich gemacht habe:

#include <iostream>

using namespace std;

int werteparameter()
{
int wert1,wert2,erg;
//EINGABE
cout<<"Funktion Werteparameter"<<endl;
cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
cout<<"Bitte geben Sie den ersten Wert ein!"<<endl;
cin>>wert1;
cout<<"Bitte geben Sie den zweiten Wert ein!"<<endl;
cin>>wert2;
//BERECHNUNG
erg=wert1*wert2;
//AUSGABE
cout<<"Das Ergebnis der Multiplikation ist: "<<erg<<"\n"<<endl;
//ÜBERGABE
return (erg);

}

int zeigerparameter(int *erg)
{
int y;
cout<<"Funktion Zeigerparameter"<<endl;
cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n"<<endl;

for(y=0;*erg=y;*erg--)
{
cout<<*erg;
}
return (*erg);
}
int main(int erg)
{
//int r;
werteparameter();
zeigerparameter(&erg);

//cout<<zeigerparameter((r=werteparameter(),&r));
}

Wir programmieren mit dem Microsoft Visual Express 2008 - Compiler...hoffe ihr könnt mir das erklären mit Kommentaren usw.

Danke schon mal.

PS: Muss das bis Sonntag-Abend fertig haben ;)
 
C++:
#include<stdio.h>

unsigned int zeigerparameter(int *c)
{
	unsigned int i,sum=0;
	for(i=*c;i>=0;i--)
	{
		printf("%d",i);
		sum+=i;
	}
	return sum;
}

unsigned int werteparameter(int a,int b)
{
	unsigned int c=a*b;
	return(zeigerparameter(&c));
}

int main()
{
	unsigned int a,b;
	while(1)
	{
		scanf("%u %u",&a,&b);
		printf("%d",werteparameter(a,b));
	}
	return 0;
}

Wenn du das ganze mit cout und cin willst, die printf und scanf eben ersetzen
Das include<stdio.h> brauchst du dann auch nicht mehr
 
Danke das du mir geholfen hast , aber leider kommt bei mir immer dieser Fehler:

Fehler 1 error C2664: 'zeigerparameter': Konvertierung des Parameters 1 von 'unsigned int *' in 'int *' nicht möglich 17

Die Zeile 17 sieht genau so aus :

return(zeigerparameter(&c));


Ich hoffe du kannst mir noch eben schnell helfen ;)
 
Da ist mir wohl ein Fehler unterlaufen...hier die korrigierte Version:

C++:
#include<stdio.h>

unsigned int zeigerparameter(unsigned int *c)
{
	unsigned int i,sum=0;
	for(i=*c;i>=0;i--)
	{
		printf("%u",i);
		sum+=i;
	}
	return sum;
}

unsigned int werteparameter(unsigned int a,unsigned int b)
{
	unsigned int c=a*b;
	return(zeigerparameter(&c));
}

int main()
{
	unsigned int a,b;
	while(1)
	{
		scanf("%u %u",&a,&b);
		printf("%u",werteparameter(a,b));
	}
	return 0;
}
 
Zuletzt bearbeitet:
Bei mir zeigt das Programm, wenn ich zwei Zahlen in die Konsole eingebe lauter Minuszahlen an, also das Fenster wird mit lauter Minuszahlen beschrieben und das immer so weiter.

Zur Verständnis:

Das Programm soll in der 1.Funktion (werteparameter) durch die Tastatur zwei beliebige zahlen bekommen. Diese zwei Zahlen sollen in der Funktion multipliziert werden. Die Summe, also das Ergebnis soll an die 2.Funktion(zeigerparameter) übergeben werden und in dieser Funktion soll der übergebene Wert und die Zahlen bis 0 angezeigt werden (Bsp: 18 17 16 15 ...0). Das soll mithilfe einer for-schleife gemacht werden. Dann sollen die Zahlen, die ausgegeben werden (bsp. 18+17+16..+0) miteinander addiert werden. Und dieses Ergebnis soll in der main-Funktion ausgegeben werden.

Ich hoffe mir kann jetzt jemand helfen ;)

Danke schon mal
 
Zuletzt bearbeitet:
ok ich musste einfach nur das unsigned wegnehmen vor den int-befehlen dann hat es funktioniert.

kannst du mir denn noch erklären was in der for-schleife genau passiert und was das u und d bedeuten und warum man in der main-funktion den wert 0 zurückgeben muss?

Könntest du mir vielleicht auch schreiben, wie man erst die werteparameter-funktion benutzt und dann erst die zeigerparameter-funktion?

Und das mit dem ersetzen von scanf klappt irgendwie nicht.... habe statt scanf das hier geschrieben cin>>("%u %u",&a,&b); , aber das mit printf ersetzen funktioniert.

wäre echt nett ;)

Danke schon mal für das alles .
 
Zuletzt bearbeitet:
Hi erstma
ich bin leicht verwirrt.
Diese zwei Zahlen sollen in der Funktion multipliziert werden. Die Summe, also das Ergebnis...
meinst du jetzt die Summe oder das Produkt? Was ist denn nun das Ergebnis
wie dem auch sei.
Ich habe versucht eine lösung auszuarbeiten und diese ausreichend zu kommentieren damit du es auch verstest. Ich habe auch nicht ganz kapiert wie du das mit den Zeigern haben musst. Bei mir arbeitet das Programm einwandfrei und tut was ich will.


Code:
#include <iostream>

using namespace std;

int wertparameter();                    //Funktionsprototypen
int zeigeparameter(int * Zeiger);       //""

int main()                              //Hauptprogramm    
{
    int *Zeiger;                        //Definition des Zeigers
    *Zeiger=wertparameter();            //Deklaration des Zeigers
    int Ergebnis=zeigeparameter(Zeiger);//Ergebnis übergabe an Main

    cout<<"Ergebnis= "<<Ergebnis<<endl;//Ausgabe vom Endgültigen Ergebnis

    return 0;
}

int wertparameter()                     
{
    int Wert1,Wert2,Wert3;
    cout<<"Bitte ersten Wert eingeben"<<endl;
    cin>>Wert1;
    cout<<"Bitte zweiten Wert eingeben"<<endl;
    cin>>Wert2;
    Wert3=(Wert1*Wert2);
    return(Wert3);
};

int zeigeparameter(int *Zeiger)
{
    int Ergebnis=0;
    for(int i=*Zeiger;i>=0;i--)
    {
        cout<<i<<endl;
        Ergebnis+=i;

    }
    cout<<endl;
    cout<<Ergebnis;

return (Ergebnis);
};

Hoffe ich konnte helfen
mfg
 
Schande über mich...
Also entweder alle unsigned weg (hast du ja gemacht) oder bei printf und scanf die "%d" durch "%u" ersetzen.

Und das cin schreibst du besser so:
cin<<a;
cin<<b;

Mit u und d meinst du wohl %u und %d?
Für printf, scanf und ähnliche Funktionen muss man angeben, welchen Typ die Variablen haben.
cin und cout machen das ziemlich eigenständig.
%d bedeutet, dass es sich um eine int-Variable handelt.
%u steht für unsigned int.

Das war eben mein Fehler, ich hab ein paar %d drinnen...

Wegen dem return 0 im main: Die main-Funktion muss ein int zurückgeben.
Man darf das "return 0;" beim main auch weglassen, dann wird automatisch irgendeine Zahl (0 glaub ich) genommen. Ich hab es mir nur angewöhnt, trotzdem immer ein return schreiben.
Du kannst es also einfach weglassen, macht auch nichts.

Und was soll in der for-Schleife sein?
Es wird von der Zahl immer 1 runtergezählt, bis zu 0.
Jede Zahl davon wird erstens ausgegeben und zweitens zu sum wie Summe dazugezählt.
Am Schluss brauchst du ja die Summe, die wird da beim Ausgeben gleich mitberechnet.
 
Zuletzt bearbeitet:
Bei mir kommt beim Starten von dem neuen Quellcode, den du vorhin geschickt hast ein Fehler, der sagt, das die Variable "zeiger" ohne Initialisierung ist und deshalb kann man das Programm nicht ausführen.
Bei dem Quellcode habe ich nur die Variablen wert3 mit pro getauscht, damit mein lehrer das besser versteht (ist nicht mehr der jüngste :)).
Hier nochmal der Code:
#include<iostream>
using namespace std;

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

//Main-Funktion
int main()
{
//Deklaration
int /*wert1,wert2*/*zeiger;
*zeiger=werteparameter();
int sum=zeigerparameter(zeiger);

cout<<"\nDie Summe der ganzen Zahlen ist: "<<sum<<endl;
/*//While-Schleife
while(1)
{
//Ausgabe
cin>>wert1;
cin>>wert2;
cout<<"\nDie Summe der ganzen Zahlen ist: "<<(werteparameter(wert1,wert2))<<endl;

}*/
//Rückgabe
return 0;
}
int werteparameter()
{
int wert1,wert2,pro;
cout<<"Bitte geben Sie den ersten Wert ein!"<<endl;
cin>>wert1;
cout<<"Bitte geben Sie den zweiten Wert ein!"<<endl;
cin>>wert2;
pro=(wert1*wert2);
return(pro);
}

int zeigerparameter(int *zeiger)
{
int sum=0;
for(int i=*zeiger;i>=0;i--)
{
cout<<i<<endl;
sum+=i;
}
cout<<endl;
cout<<sum;

return(sum);
}


/*//Funktion - zeigerparameter
int zeigerparameter(int *pro)
{
//Deklaration
int i,sum=0;
cout<<"2.Funktion - zeigerparameter"<<endl;
cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
cout<<"Die Reihe der Zahlen lautet: "<<endl;
//for-Schleife
for(i=*pro;i>=0;i--)
{
//Ausgabe
cout<<i<<" ";
sum+=i;
}
//Rückgabe
return sum;
}
//Funktion - werteparameter
int werteparameter(int wert1,int wert2)
{
cout<<"1.Funktion - werteparameter"<<endl;
cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
//Eingabe
cout<<"Bitte geben Sie den ersten Wert ein!"<<endl;
cin>>wert1;
cout<<"Bitte geben Sie den zweiten Wert ein!"<<endl;
cin>>wert2;
//Berechnung
int pro=wert1*wert2;
//Ausgabe
cout<<"Das Ergebnis der Multiplikation ist: "<<pro<<endl;
cout<<"\n"<<endl;
//Übergabe
return(zeigerparameter(&pro));
}

*/
/* Legende:
wert1= erster eingegebener Wert
wert2= zweiter eingegebener Wert
pro= Produkt aus Wert1 und Wert2
sum= Summe aus allen Werten von pro bis 0
*/

Wenn ich das, was ich ausgeklammert habe verwende funktioniert das Programm, aber ich muss das leider in der Reihenfolge machen, dass die 1.Funktion werteparameter ist und die 2.Funktion erst zeigerparameter, daher wäre es schön wenn du den Fehler finden könntest.

Und danke für die Erklärung ;) hat mir echt weitergeholfen ... wir sind gerade im ersten lernjahr C++ und daher kann ich das noch nicht so gut
 
Eine Anmerkung: Wenn du den Vorschlag von xxbambamxx nimmst, warum hat die Funktion werteparameter dann ihren Namen, wenn sie ja keine Params bekommt?

Der Sinn der Aufgabe ist wohl eher, das Einlesen im main zu machen.

@xxbambamxx: Nett, wenn du alles auskommentierst, aber auf einen nicht allokierten Pointer zugreifen ist unschön
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück