Währung umrechnungsprogramm

t1g3rzz

Grünschnabel
Hallo, ich habe vor kurzem inner Schule eine Aufgabe bekommen ein C++ Programm zu schreiben aber da ich bisher kaum damit gearbeitet habe, bekomm ich das einfach nicht hin.
Wenn mir da jemand was programmieren könnte, wäre ich überaus dankbar.

Ich hab folgende Aufgabe bekommen:

Bewertet wird die Komplexität der Lösung (Einbau von Strukturen, Funktionen, Datei Ein- und Ausgaben usw.)

Erstellen Sie ein Umrechnungsprogramm, mit dem Sie Währungen umrechnen können. 10 Euro Werte sind einzulesen und in einem Array "betrag" abzuspeichern. Negative Werte sollen nicht eingebbar sein.

Folgende Aufgaben soll das Programm erledigen können:
1: Umrechnung und Ausgabe aller Euro-Werte des Arrays in DM
2: Umrechnung und Ausgabe des höchsten Euro-Wertes des Arrays in DM
3: Kontrolle, ob ein einzulesender Euro-Wert sich in dem Array befindet
4: Der größte Euro-Wert soll an das Ende des Arrays und der kleinste soll an den Anfang gespeichert werden. Die Position der restlichen Werte ist beliebig. Das Array ist anschliessend auszugeben.

Bauen Sie ein Menü ein mit dem die aufgeführten Aufgaben ausgewählt und ausgeführt wird.
Nach erledigung der Aufgabe soll das Menü wieder aufgerufen werden.
Das Programm soll bei Eingabe einer "0" im Menü mit dem Satz "Programmende" beendet werden.

Ich bedanke mich schon mal im vorraus für die Hilfen.
DANKE
 
Wenn mir da jemand was programmieren könnte, wäre ich überaus dankbar.

Das wird hier niemand tun. Es ist schließlich deine Aufgabe. Du sollst sie lösen, sonst lernst du's nicht.

Wir können dir lediglich Denkanstöße und Tips geben.
 
Ich glaube nicht, dass es hier irgendjemanden gibt, der dir einfach mal eben ein ganzes Programm schreibt und hier postet. Falls du ein einzelnes Problem hast, sieht die Sache schon anders aus.
 
Achso danke ... dann formuliere ich mein Problem anders, undzwar folgendes:

Wie kann ich in einem Array, in meinem Fall betrag[10], den größten und den kleinsten Wert bestimmen und diese jeweils an den Anfang bzw ans Ende des Arrays speichern ?
 
Also, das mit dem Speichern kannst du so machen:
Du vertauschst erst den größten Wert mit dem letzten, dann den kleinsten mit dem ersten (oder andersrum). Das machst du bei einem Array mit der folgenden Funktion:
C++:
void swap(int &a, int &b)
{
    int x=a;
    a=b;
    b=x;
    return;
}
Der Aufruf
C++:
swap(arr[0],arr[x])
vertauscht dann arr[0] und arr[x]
Über das finden des kleinsten/größten Wertes habe ich mir noch keine Gedanken gemacht.

Soweit verständlich?
 
Zuletzt bearbeitet:
Achso danke ... dann formuliere ich mein Problem anders, undzwar folgendes:

Wie kann ich in einem Array, in meinem Fall betrag[10], den größten und den kleinsten Wert bestimmen und diese jeweils an den Anfang bzw ans Ende des Arrays speichern ?

Das klingt nach "sortieren". Such mal nach "Bubblesort"! Ist ein Sortierungsalgorithmus.
 
Hi.
Das klingt nach "sortieren". Such mal nach "Bubblesort"! Ist ein Sortierungsalgorithmus.
Nö, das klingt irgendwie nicht nach sortieren wenn nur das größte und das kleinste Element an den Anfang / das Ende getauscht werden sollen und die Reihenfolge der anderen Elemente beliebig ist.

@t1g3rzz: Überleg dir doch mal wie du das Minimum bzw. Maximum einer Reihe von Zahlen herausfinden würdest ohne sie zu sortieren. Außerdem mußt du dir noch den Index merken damit du nachher weißt welche Elemente du tauschen mußt.

Gruß
 
LukeS hat gesagt.:
Möchtest du einfach die grössten und kleinsten Werte aus deiner Liste herauslesen oder möchtest du aus deinen Messpunkten eine Funktion generieren und dann die Maxima und Minima (mittels Ableitungen) finden.

Ersteres wäre um einiges einfacher:

Du suchst ja die min und max Werte entweder von allen x-Werten oder von allen y-Werten(meist von allen y-Werten, x-Werte sind oft kontinuierlich z.B. Zeit). Du musst also nur immer mit einer Zahl von deinem x-y-Paar verfahren:

- Variablen "min" und "max"
- nimm ersten und zweiten Messwert, vergleiche sie und weise den Kleineren "min" zu und den Grösseren "max"
- nimm den dritten Messwert vergleiche mit "min" ist er kleiner, weise ihn "min" zu, ist er grösser, vergleiche mit "max". Ist er grösser als "max" weise ihn "max" zu (ist er zwischen "min" und "max" interessiert er nicht)
- tu mit allen weiteren Messwerten das selbe wie mit dem Dritten


Willst du zuerst eine (mathematische) Funktion aus deinen Messwerten erstellen, so musst du zuerst die Funktion interpolieren (Interpolations-Polynom, Spline...), dann mit den Ableitugen dieser Funktion arbeiten.
In diesem Fall kann ich dir nur beschränkt helfen.

Ich hoffe das war verständlich (bin übermüdet). Sonst einfach nachfragen...

Gruss LukeS
Hier gehts um etwas ähnliches.
 
also bis jez hab ich das programm soweit fertig bekommen:
Code:
#include <iostream>
using namespace std;

float betrag[10], dm[10];

void einlesen()
{
	int i;
	bool b;

	for(i=0; i<10; i++)
	{
		do
		{
			b = false;

			cout << "Bitte geben Sie jetzt den " << i+1 << "ten Wert ein: ";
			cin >> betrag[i];
			for(int j=0; j<i; j++)
			{
				if(betrag[i] == betrag[j])
				{
					b = true;
					cout << "Der Wert ist bereits im Array vorhanden, an Position " << j+1 << endl;
				}
			}
		}while(b = false);
	}
}

float minimum(float betrag[10])
{
	float min;
	int i;
	min = betrag[0];
	for(i=0; i<10; i++)
	{
		if(betrag[i] < min)
		{
			min = betrag[i];
		}
	}
	return(min);
}

float maximum(float betrag[10])
{
	float max;
	int i;
	max = betrag[0];
	for(i=0; i<10; i++)
	{
		if(betrag[i] > max)
		{
			max = betrag[i];
		}
	}
	return(max);
}

float umrechnen(float wert)
{
	float hilf;
	hilf = wert * (float) 0.51129;
	return(hilf);
}


void main ()
{
	cout << "|-----------------------------------------------------------------------------|" << endl;
	cout << "| Was moechten sie machen ... ?                                               |" << endl;
	cout << "|-----------------------------------------------------------------------------|" << endl;
	cout << "| 1 | ... alle Werte des Arrays in DM umrechnen                               |" << endl;
	cout << "| 2 | ... den hoechsten Wert in DM umrechnen                                  |" << endl;
	cout << "| 3 | ... kontrollieren ob sich ein Euro Wert im Array befindet               |" << endl;
	cout << "| 4 | ... den groessten Euro Wert an den Anfang und den kleinsten an das Ende |" << endl;
	cout << "| 0 | ... um das Programm zu beenden                                          |" << endl;
	cout << "|-----------------------------------------------------------------------------|" << endl << endl;
	cout << "Bitte geben Sie zunaechst die 10 Euro-Werte fuer das Array ein!" << endl;
	
	einlesen();

	cout << endl;
	cout << "Die Werte wurden in das Array eingefuegt!" << endl << endl;
	cout << "Treffen Sie jetzt ihre Wahl was sie damit machen moechten: ";
	
	float hilfe;
	int art;
	cin >> art;
	
	while(art != 0)
	{
		switch(art)
		{
		case 1:
			for(int i=0; i<10; i++)
			{
				dm[i] = umrechnen(betrag[i]);
				cout << "Der umgerechnete Wert ist: " << dm[i] << " DM" << endl;
			}
		break;
		case 2:
			hilfe = maximum(betrag);
			hilfe = umrechnen(hilfe);
			cout << "Der hoechste Euro-Betrag betraegt " << hilfe << " DM" << endl;
		break;
		case 3:	
		break;
		case 4:
			betrag[0] = minimum(betrag);
			betrag[10] = maximum(betrag);
			cout << "Das Minimum betraegt: " << betrag[0] << endl;
			cout << "Das Maximum betraegt: " << betrag[10] << endl;
		break;
		default: cout << endl << "Ihre Wahl war ungueltig, bitte treffen Sie jetzt " << endl;
				 cout << "ihre Wahl was sie damit machen moechten: ";
				 cin >> art;
		}		
	}
	cout << "Programmende" << endl;
}

mein problem ist jez nur, dass wenn es gestartet wird und ein menüpunkt aufgerufen wird, gerät das programm immer in eine endlos schleifen und ich find den fehler einfach nicht!

sorry für die formatierung, im original code wird es richtig eingerückt dargestellt ...
 
Zuletzt bearbeitet:
C++:
	cin >> art;
	
	while(art != 0)
	{
		switch(art)
		{
...
		case 3:	
		break;
...
		}		
	}
	cout << "Programmende" << endl;
}
Da du innerhalb der Schleife den Wert der Variablen nur im default Fall änderst, entsteht daraus natürlich eine Endlosschleife. Probier's mal so:
C++:
int art;

while (cin >> art && art != 0) {
  select (art) {
    ...
  }
}

C++:
case 4:
betrag[0] = minimum(betrag);
betrag[10] = maximum(betrag);
cout << "Das Minimum betraegt: " << betrag[0] << endl;
cout << "Das Maximum betraegt: " << betrag[10] << endl;
Mit dieser Methode überschreibst du ja das erste und das letzte Element im Array. Das ist nicht Sinn der Sache. Wie bereits von the_undertaker gesagt wurde, mußt du die Werte tauschen. Dazu mußt du den Index des Maximums und des Minimums berechnen.
sorry für die formatierung, im original code wird es richtig eingerückt dargestellt ...

Schliesse mal deinen Code in [code=cpp]...[/code] Code Tags ein. (du kannst deinen Beitrag auch noch bearbeiten)

Und bitte halte dich an Groß-/Kleinschreibung. (siehe Netiquette Nr.15)!

Gruß
 
Zurück