| Autor |
Nachricht |
H4rdstyl3
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.04.2011
Beiträge: 19
|
H4rdstyl3 Mitglied
17:30:03 24.04.2012 Titel: |
Vectorinhalt mit Eingabe verlgeichen |
Zitieren |
Hiho,
Ich muss en Prog schreiben, indem ich in ner Schleife einen Wert einlese, den in zwei Variablen speicher und dann überprüfen muss, ob der eingebene Wert der größte bzw. der kleinste bis jetzt ist.... Ich komm nur einfach nicht übers einlesen hinweg weil ich offensichtlich irgendwas übersehe...-.-
hier mein Code:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
double zahl=0;
double zahl2=0;
double zahl3=0;
char schleifenbeender =' ';
char beender=' ';
vector<double> werte;
while(cin>>zahl && schleifenbeender!='b'){
werte.push_back(zahl);
cout << zahl << endl;
zahl=zahl2;
// ab hier weiß ich nicht mehr weiter
system("Pause");
return 0;
} | |
hoffe mir kann geholfen werden
LG |
|
|
|
 |
H4rdstyl3
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.04.2011
Beiträge: 19
|
H4rdstyl3 Mitglied
17:34:30 24.04.2012 Titel: |
|
Zitieren |
edit: ich möchte keinen kompletten Lösungsweg oder sonstiges, lediglich einen kleinen Hint wie ich die Sache angehen könnte |
|
|
|
 |
pyhax
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.11.2011
Beiträge: 692
|
pyhax Mitglied
17:42:59 24.04.2012 Titel: |
|
Zitieren |
1. Speichere den aktuellen Minimalwert / Maximalwert.
2. Prüfe, ob eingelesener Wert > Maximalwert oder < Minimalwert ist. Wenn ja, überschreibe Minimalwert bzw. Maximalwert. |
_________________ Ich kann (teilweise): C++, Python, Java(ist lange her), PHP, D (Anfänger)
|
|
 |
Helmut.Jakoby
Mitglied
Benutzerprofil
Anmeldungsdatum: 04.06.2009
Beiträge: 63
|
Helmut.Jakoby Mitglied
17:50:24 24.04.2012 Titel: |
|
Zitieren |
Da ich es jetzt schon mal geschrieben habe....
Du hast nichts übersehen, sondern Du willst einen Lösungsansatz.
So wie ich das verstehe, sollst du keinen vector nutzen, sondern die zwei Variablen. Die könnten besser den Namen Min und Max haben (anstelle von zahl2 und zahl3)
Du initialisierst diese Variablen wie gehabt mit 0.
Nach dem einlesen von 'zahl' schaust du in Min, ob dort ein Wert kleiner dem eingelesenen Wert 'zahl' ist. Wenn nein, schreibst die den eingelesenen Wert 'zahl' in Min; Min hat jetzt den kleinsten jemals eingelesenen Wert und der eingelesenen Wert 'zahl' ist der bislang kleinste Wert, was Du ja ausgeben kannst.
Ähnlich verfährst Du mit Max.
Das machst Du natürlich solange in einer Schleife bis zum schleifenbeender.
PS. Wenn der eingelesene Wert 'zahl' nicht der kleinste oder größte Wert ist, solltest Du das auch ausgeben.
Gruß |
|
|
|
 |
pyhax
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.11.2011
Beiträge: 692
|
pyhax Mitglied
18:04:04 24.04.2012 Titel: |
|
Zitieren |
Die Variablen sollten nicht mit Null initialisiert werden, sondern min sollte mit std::numeric_limits<double>::infinity() und max mit -std::numeric_limits<double>::infinity() initialisiert werden, da sonst negative Zahlen nicht als Min oder Max erkannt werden. |
_________________ Ich kann (teilweise): C++, Python, Java(ist lange her), PHP, D (Anfänger)
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17985
|
SeppJ Moderator
18:09:18 24.04.2012 Titel: |
|
Zitieren |
|
 |
pyhax
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.11.2011
Beiträge: 692
|
pyhax Mitglied
18:23:10 24.04.2012 Titel: |
|
Zitieren |
| SeppJ schrieb: | Die Variablen sollten mit dem ersten Wert initialisiert werden. Das ist die allgemeinste Lösung und funktioniert egal, um was für Objekte es sich handelt. Dann kann man sich diese Lösung als Funktionstemplate aufschreiben und immer wieder benutzen . Ups, gibt's ja schon genau so in der Standardbibliothek . |
Meinst du min_element und max_element? Aber bei dem Beispiel ist es sinvoller, es selber zu schreiben, da man die Variablen min und max ja eh braucht um festzustellen, ob ein neuer min oder max wert hinzugekommen ist. |
_________________ Ich kann (teilweise): C++, Python, Java(ist lange her), PHP, D (Anfänger)
Zuletzt bearbeitet von pyhax am 18:26:36 24.04.2012, insgesamt 1-mal bearbeitet |
|
 |
H4rdstyl3
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.04.2011
Beiträge: 19
|
H4rdstyl3 Mitglied
18:31:53 24.04.2012 Titel: |
|
Zitieren |
Danke erstmal für die Antworten!
@Jakoby aber wie sollte ich das ohne Vector Container machen, dann würde ja nach jedem einlesen neue Zahlen als Referenz da sein anstatt einer eingelesenen Zahlenmenge die man zum Vergleich für die kleinste bzw größte Zahl braucht?
@Phyax & Seppj:
Bin noch ziemlich am Anfang des Buches und es wurden gerade mal logische Operatoren und eben am Ende des Kapitels der Vector Container vorgestellt..
Sind das was Phyax gepostet hat auch nch zwei weitere Vector-Container die von +unendlich bis - unendlich gehen oder was?
LG |
|
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17985
|
SeppJ Moderator
19:20:42 24.04.2012 Titel: |
|
Zitieren |
| pyhax schrieb: |
Meinst du min_element und max_element? | Ja. Und ich weiß, die laufen auf Iteratoren, da sie die Elemente nicht kopieren wollen. Aber wenn man wie hier Iteratoren hat, die ungültig werden können, dann ist das auch ganz flott selbst geschrieben:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <iostream>
#include <utility>
#include <iterator>
template<typename ForwardIterator>
std::pair<typename ForwardIterator::value_type, typename ForwardIterator::value_type>
minmax(ForwardIterator first, ForwardIterator last)
{
typedef typename ForwardIterator::value_type val_t;
val_t min = *first, max = *first;
for (;first != last; ++first)
{
if (*first < min) min = *first;
if (*first > max) max = *first;
}
return std::make_pair(min, max);
}
int main ()
{
using namespace std;
istream_iterator<double> it(cin), end;
pair<double, double> result = minmax(it, end);
cout << "Kleinste Zahl: " << result.first << '\n'
<< "Größte Zahl: " << result.second << '\n';
} | |
Oder etwas allgemeiner mit C++11, so dass die Funktion auch Pointer verträgt:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <iostream>
#include <tuple>
#include <iterator>
#include <type_traits>
template<typename ForwardIterator>
auto
minmax(ForwardIterator first, ForwardIterator last)
-> std::tuple<
typename std::remove_const<typename std::remove_reference<decltype(*first)>::type>::type,
typename std::remove_const<typename std::remove_reference<decltype(*first)>::type>::type
>
{
typedef typename std::remove_const<typename std::remove_reference<decltype(*first)>::type>::type val_t;
val_t min = *first, max = *first;
for (;first != last; ++first)
{
if (*first < min) min = *first;
if (*first > max) max = *first;
}
return std::make_tuple(min, max);
}
int main ()
{
using namespace std;
double min, max;
tie(min, max) = minmax(istream_iterator<double>(cin), istream_iterator<double>());
cout << "Kleinste Zahl: " << min << '\n'
<< "Größte Zahl: " << max << '\n';
} | |
(In C++11 sind std::min und std::max übrigend in der Lage, eine ganze Liste von Elementen als Argument zu verarbeiten)
Entschuldigung an die Threadersteller für die Komplettlösung! Ich glaube so sehr hilfreich ist das für einen Anfänger sowieso nicht wirklich.
Fällt eigentlich jemandem etwas besseres für die Zeilen 10, 11 und 14 im zweiten Beispiel ein? Ich gebe ja gerne zu, dass ich in C++11 noch nicht so fit bin, manchmal übersehe ich einfache Lösungen. |
_________________ Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
Zuletzt bearbeitet von SeppJ am 19:22:31 24.04.2012, insgesamt 1-mal bearbeitet |
|
 |
314159265358979
Mitglied
Benutzerprofil
Anmeldungsdatum: 09.03.2010
Beiträge: 4658
|
314159265358979 Mitglied
19:29:47 24.04.2012 Titel: |
|
Zitieren |
| C++: | | typename std::iterator_traits<ForwardIterator>::value_type | | |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|