Auf Arrays zugreifen und ändern
-
Hallo Community ,
ich bin gerade dabei C++ für mich zu entdecken .
Ich arbeite gerade an einem Programm wo ich eingegeben Array Werte im nachhinein ändern kann und mit den geänderten Werten soll das Programm dann den Fall neu berechnenDa ich mich nicht so auskenne hab ich an eine Do-While Schleife gedacht wo ich dann aber alles nochmal eingeben muss.
Gibt es eine Möglichkeit z.B nur den Index zwei zu ändern ?Hier mein Code :
#include<iostream> #include<iomanip> #include<cstdlib> double max_such(double adUmsatz[], int size); double min_such(double adUmsatz[], int size); using namespace std; int main () { const int size = 4 ; double adUmsatz[size]; double DurchUmsatz = 0; double max; double min; char Ant = 'j'; do { for (int i = 0 ; i < size ;++i ) { cout<<"Geben Sie den Umsatz fuer das "<<i+1<<"te Quartal ein : ";cin>>adUmsatz[i]; } for (int i = 0 ; i < size ; i++ ) { DurchUmsatz += adUmsatz[i]; } cout<<"Durchschnittlicher Quartal Umsatz : " <<DurchUmsatz / 4<<endl<<endl; max=max_such(adUmsatz, size); cout<<"Der Groeste Umsatz hat den Wert : "<<max<<endl; min=min_such(adUmsatz, size); cout<<"Der kleinste Umsatz hat den Wert : "<<min<<endl<<endl; cout<<"Moechten sie eingegebene Werte aendern (J/N) ? ";cin>>Ant; }while (Ant == 'J' && Ant == 'j'); cin.get(); cin.get(); return 0 ; } // Funktion max_such double max_such(double adUmsatz[], int size) { double max = adUmsatz[0]; for ( int i = 1 ; i < size ; i++ ) { if ( adUmsatz[i] > max ) { max = adUmsatz[i]; } } return max; } // Funktin min_such double min_such(double adUmsatz[], int size) { double min = adUmsatz[0]; for ( int i = 1 ; i < size ; i++ ) { if ( adUmsatz[i] < min ) { min = adUmsatz[i]; } } return min; }
-
Moritz Vogt schrieb:
Gibt es eine Möglichkeit z.B nur den Index zwei zu ändern ?
Klar geht das. Du kannst eine beliebigen Wert als Arrayindex nutzen, also unter anderem auch einen vom Benutzer eingegebenen. In dem Fall solltest du natürlich vorher prüfen, ob der Index im erlaubten Bereich ist, denn in C++ wird auch fröhlich über Arraygrenzen hinaus geschrieben, wenn man nicht selber aufpasst.
Wo wir schon beim Thema Grenzen sind: Arrays gehen bei 0 los, d.h. bei deinem Programm gibt es die Indizes 0-3.
-
Ja
cin >> adUmsatz[2];Vielleicht möchtest du die Frage neue formulieren?
-
Ok ich habe es mal mit einer Switch-Anweisung versucht. Mein Problem ist es jetzt das er den Fall neu berechnen soll, quasi alles aktualisieren soll
Hier meine Switch-Anweisung :
#include<iostream> #include<iomanip> #include<cstdlib> double max_such(double adUmsatz[], int size); double min_such(double adUmsatz[], int size); using namespace std; int main () { const int size = 4 ; double adUmsatz[size]; double DurchUmsatz = 0; double max; double min; int Quartal=0; for (int i = 0 ; i < size ;++i ) { cout<<"Geben Sie den Umsatz fuer das "<<i+1<<"te Quartal ein : ";cin>>adUmsatz[i]; } for (int i = 0 ; i < size ; i++ ) { DurchUmsatz += adUmsatz[i]; } cout<<"Durchschnittlicher Quartal Umsatz : " <<DurchUmsatz / 4<<endl<<endl; max=max_such(adUmsatz, size); cout<<"Der Groeste Umsatz hat den Wert : "<<max<<endl; min=min_such(adUmsatz, size); cout<<"Der kleinste Umsatz hat den Wert : "<<min<<endl<<endl; cout<<"Von welchen Quartal moechten Sie den Umsatz aendern ? " ;cin>>Quartal; switch ( Quartal ) { case 1 : cout<<" Geben Sie den neuen Umsatz für das erste Qurtal ein : "; cin>>adUmsatz[0]; break; case 2 : cout<<" Geben Sie den neuen Umsatz für das zweite Qurtal ein : "; cin>>adUmsatz[1]; break; case 3 : cout<<" Geben Sie den neuen Umsatz für das dritte Qurtal ein : "; cin>>adUmsatz[2]; break; case 4 : cout<<" Geben Sie den neuen Umsatz für das vierte Qurtal ein : "; cin>>adUmsatz[3]; } cin.get(); cin.get(); return 0 ; }
-
Moritz Vogt schrieb:
Mein Problem ist es jetzt das er den Fall neu berechnen soll, quasi alles aktualisieren soll
Dann tu das. Ich verstehe nicht, was dein Problem dabei ist. Zu sagen, dass du ein Problem hast, aber nicht welches, ist nicht gerade hilfreich, wenn du einen Tipp möchtest.
-
DurchUmsatz=0; for (int i = 0 ; i < size ; i++ ) { DurchUmsatz += adUmsatz[i]; } cout<<"Durchschnittlicher Quartal Umsatz : " <<DurchUmsatz / 4<<endl<<endl; max=max_such(adUmsatz, size); cout<<"Der Groeste Umsatz hat den Wert : "<<max<<endl; min=min_such(adUmsatz, size); cout<<"Der kleinste Umsatz hat den Wert : "<<min<<endl<<endl;Nach dem Switch ist dein Programm beendet, da wird natürlich nichts mehr aktualisiert. Du musst einfach den obigen Teil nochmals unter der Switch Anweisung einfügen. Und da du dieses Code Konstrukt jetzt mehrmals brauchst kannst du es gleich in eine Funktion void updateAnz(double arr[], int size) oder so auslagern.
Wenn du die Umsätze mehrmals ändern willst, könntest du auch eine Schleife um den Switch und den Code davor machen.
-
Danke für die Idee mit der Funktion hab es jetzt gelöst

ich Poste mal den Code für die die es interessiertNochmal Danke an alle für die Hilfe und schönen Tag noch
Hier der Code :
#include<iostream> #include<iomanip> #include<cstdlib> double max_such(double adUmsatz[], int size); double min_such(double adUmsatz[], int size); void updateAnz(double AdUmsatz[], int size); using namespace std; int main () { const int size = 4 ; double adUmsatz[size]; double DurchUmsatz = 0; double max; double min; int Quartal=0; char Ant ; for (int i = 0 ; i < size ;++i ) { cout<<"Geben Sie den Umsatz fuer das "<<i+1<<"te Quartal ein : ";cin>>adUmsatz[i]; } for (int i = 0 ; i < size ; i++ ) { DurchUmsatz += adUmsatz[i]; } cout<<endl<<endl; cout<<"Durchschnittlicher Quartal Umsatz : " <<DurchUmsatz / 4<<endl<<endl; max=max_such(adUmsatz, size); cout<<"Der Groeste Umsatz hat den Wert : "<<max<<endl; min=min_such(adUmsatz, size); cout<<"Der kleinste Umsatz hat den Wert : "<<min<<endl<<endl; cout<<"Wollen sie einen Wert Verändern ";cin>>Ant; if(Ant == 'n' || Ant == 'N') { return 0 ; } if(Ant == 'j' || Ant == 'J') { updateAnz(adUmsatz, size); } cin.get(); cin.get(); return 0 ; } // Funktion max_such double max_such(double adUmsatz[], int size) { double max = adUmsatz[0]; for ( int i = 1 ; i < size ; i++ ) { if ( adUmsatz[i] > max ) { max = adUmsatz[i]; } } return max; } // Funktin min_such double min_such(double adUmsatz[], int size) { double min = adUmsatz[0]; for ( int i = 1 ; i < size ; i++ ) { if ( adUmsatz[i] < min ) { min = adUmsatz[i]; } } return min; } // Funktion update void updateAnz(double adUmsatz[], int size) { int DurchUmsatz=0; int max; int min ; int Quartal = 0; char Ant ; do { cout<<endl ; cout<<"Von welchen Quartal moechten Sie den Umsatz aendern ? " ;cin>>Quartal;cout<<endl; switch ( Quartal ) { case 1 : cout<<"Geben Sie den neuen Umsatz für das erste Qurtal ein : "; cin>>adUmsatz[0]; break; case 2 : cout<<"Geben Sie den neuen Umsatz für das zweite Qurtal ein : "; cin>>adUmsatz[1]; break; case 3 : cout<<"Geben Sie den neuen Umsatz für das dritte Qurtal ein : "; cin>>adUmsatz[2]; break; case 4 : cout<<"Geben Sie den neuen Umsatz für das vierte Qurtal ein : "; cin>>adUmsatz[3]; } for (int i = 0 ; i < size ; i++ ) { DurchUmsatz += adUmsatz[i]; } cout<<endl<<endl; cout<<"Durchschnittlicher Quartal Umsatz : " <<DurchUmsatz / 4<<endl<<endl; max=max_such(adUmsatz, size); cout<<"Der Groeste Umsatz hat den Wert : "<<max<<endl; min=min_such(adUmsatz, size); cout<<"Der kleinste Umsatz hat den Wert : "<<min<<endl<<endl; cout<<endl; cout<<"Wollen sie einen Wert Verändern ";cin>>Ant; }while(Ant == 'J' || Ant =='j' ); }
-
Huff jetzt hast du ein Monster erschaffen

// Anzeige aktualisieren void updateAnz(double adUmsatz[], int size) { double DurchUmsatz = 0; for (int i = 0; i < size; i++) { DurchUmsatz += adUmsatz[i]; } cout << endl << endl; cout << "Durchschnittlicher Quartal Umsatz : " << DurchUmsatz / size << endl << endl; //double max=max_such(adUmsatz, size); //cout<<"Der Groeste Umsatz hat den Wert : "<<max<<endl; //double min=min_such(adUmsatz, size); //cout<<"Der kleinste Umsatz hat den Wert : "<<min<<endl<<endl; } int main() { const int size = 4; double adUmsatz[size]; char Ant; for (int i = 0; i < size; ++i) { cout << "Geben Sie den Umsatz fuer das " << i + 1 << "te Quartal ein : "; cin >> adUmsatz[i]; } updateAnz(adUmsatz, size); cout << "Wollen sie einen Wert Verändern ?[j/n]"; cin >> Ant; while (Ant == 'J' || Ant == 'j') { int Quartal = 0; cout << endl; cout << "Von welchen Quartal moechten Sie den Umsatz aendern ? "; cin >> Quartal; cout << endl; switch (Quartal) { case 1: cout << "Geben Sie den neuen Umsatz für das erste Qurtal ein : "; cin >> adUmsatz[0]; break; case 2: cout << "Geben Sie den neuen Umsatz für das zweite Qurtal ein : "; cin >> adUmsatz[1]; break; case 3: cout << "Geben Sie den neuen Umsatz für das dritte Qurtal ein : "; cin >> adUmsatz[2]; break; case 4: cout << "Geben Sie den neuen Umsatz für das vierte Qurtal ein : "; cin >> adUmsatz[3]; break; } updateAnz(adUmsatz, size); cout << "Wollen sie einen Wert Verändern ?[j/n]"; cin >> Ant; } cin.get(); cin.get(); return 0; }
-
Ich glaub ich denk immer zu kompliziert
Aber dennoch funktioniert es und es tut was es machen soll 
-
// Anzeige aktualisieren void updateAnz(double adUmsatz[], int size) { double DurchUmsatz = 0; for (int i = 0; i < size; i++) { DurchUmsatz += adUmsatz[i]; } cout << endl << endl; cout << "Durchschnittlicher Quartal Umsatz : " << DurchUmsatz / size << endl << endl; } void umsatz_eingeben(double* p_adUmsatz, size_t p_index) { cout << "Geben Sie den Umsatz fuer das " << p_index + 1 << "te Quartal ein : "; cin >> p_adUmsatz[p_index]; } int main() { const int size = 4; double adUmsatz[size]; char Ant; for (int i = 0; i < size; ++i) { umsatz_eingeben(adUmsatz, i); } updateAnz(adUmsatz, size); cout << "Wollen sie einen Wert Verändern ?[j/n]"; cin >> Ant; while (Ant == 'J' || Ant == 'j') { int Quartal = 0; cout << endl; cout << "Von welchen Quartal moechten Sie den Umsatz aendern ? "; cin >> Quartal; cout << endl; if(Quartal > 0 && Quartal < 4) { umsatz_eingeben(adUmsatz, Quartal-1); updateAnz(adUmsatz, size); cout << "Wollen sie einen Wert Verändern ?[j/n]"; cin >> Ant; } else { //Fehler } } cin.get(); cin.get(); return 0; }
-
Nur eine Funktion angefasst:
void updateAnz(double adUmsatz[], int size) { cout << endl << endl << "Durchschnittlicher Quartal Umsatz : " << std::accumulate( adUmsatz, adUmsatz + size, 0.0 ) / size << endl << endl; }
-
Danke für die Lösungswege bin aber zufrieden mit meinen
ist zwar über das doppelte an Code aber es funktioniert. Später wenn ich durchblicke schlag ich mich wahrscheinlich für den Code aber naja .Schönen Tag noch an alle die geantwortet haben .