c++ unregistriert
|
|
Meine Frage:
Hallo ich habe leider Schwierigkeiten bei einer Aufgabe:
Legen Sie ein Array fruechte vom Typ string mit der Größe 17 an. In diesem Array sollen die unten
aufgelisteten Früchte gespeichert werden (keine Tastatureingabe). Anschließend sollen verschiedene
Abfragen durchgeführt werden.
Programmentwurf
Eingabedaten: fruechte array of string mit folgenden Initialwerten:
"Ananas", "Apfel", "Banane", "Birne", "Blaubeere",
"Clementine", "Erdbeere", "Heidelbeere",
"Himbeere", "Johannisbeere", "Kiwi", "Mandarine",
"Melone", "Nektarine", "Orange", "Pampelmuse",
"Pfirsich"
Weitere Variablen nach Bedarf
Ausgabedaten:
a) alle Früchte, die an 2. Stelle ein 'a' haben, ausgeben
b) aus dem Apfel eine Apfelsine machen, alten und neuen Wert ausgeben
c) alle Früchte, deren Name länger als 8 Zeichen ist, ausgeben
d) alle Früchte, deren Name auf 'h' endet, ausgeben
e) (freiwillig) alle Früchte, die im Namen "beere" haben,
den Bestandteil ohne beere ausgeben
Ich habe bei meinem programm nur 5 früchte genommen:
#include <iostream>
using namespace std;
int main()
{
string fruechte[5] = {Ananas , Apfel, Banane , Birne , Blaubeere };
string frucht = " Ananas";
frucht[0][1];
}
Ich verstehe jetzt nicht so ganz wie ich ich den 2 wert der Früchte mit allen vergleichen kann?
Bitte um tipps.
Meine Ideen:
gepostet
|
|
26.04.2013 23:56 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
Verwende für die Darstellung von Code bitte die Code-Tags (über dem Textfeld die Raute).
code: |
1:
|
string fruechte[5] = {Ananas , Apfel, Banane , Birne , Blaubeere }; |
|
Dies ist falsch (kompiliert das überhaupt?). DIe Früchte sind Strings und müssen dementsprechend in Anführungszeichen gesetzt werden.
code: |
1:
|
string frucht = " Ananas"; |
|
Mal abgesehen davon, dass diese Zeile fehl am Platze ist,
hast du hier ein Leerzeichen drin, das dir bei Aufgaben wie "überprüfe den zweiten Buchstaben" gehörig in die Suppe spucken wird. C++ ist eine Programmiersprache und als solche gibt es auch Dinge wie eine vernünftige Darstellung und "Rechtschreibung", auf die du unbedingt achten musst; denn im Gegensatz zu Menschen im Alltag verzeiht dir ein Computer keine Sprachfehler.
Gehen wir also mal hiervon aus:
code: |
1:
2:
3:
4:
5:
6:
7:
|
#include <iostream>
using namespace std;
int main() {
string fruechte[5] = {"Ananas", "Apfel", "Banane", "Birne", "Blaubeere"};
} |
|
Für Aufgabe a) wollen wir alle Früchte überprüfen, d.h. wir müssen eine Schleife über alle Früchte machen:
code: |
1:
2:
3:
|
for (int i = 0; i < 5; i++) {
// ....
} |
|
Innerhalb der Schleife schauen wir uns das Element fruechte[i] an, das nun nacheinander eben die Werte "Ananas", "Apfel" usw. hat. Den zweiten Buchstaben des Wortes erhalten wir dann entsprechend über fruechte[i][1]. Und diesen Wert wollen wir nun überprüfen, d.h. innerhalb der Schleife muss etwas in dieser Art stehen:
code: |
1:
2:
3:
|
if (/* irgendwas mit fruechte[i][1] */) {
// gib fruechte[i] aus
} |
|
Jetzt bist du erstmal wieder dran, dich mit diesen Informationen daran zu versuchen.
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
|
|
27.04.2013 09:18 |
|
|
|
C++ unregistriert
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
#include <iostream>
using namespace std;
int main() {
string fruechte[5] = {"Ananas", "Apfel", "Banane", "Birne", "Blaubeere"};
for (int i = 0; i < 5; i++) {
if (fruechte[i][1] == fruechte[i+1][1] ) {
cout << fruechte[i] << endl;
}
}
} |
|
Ich hab das so gemacht . ABer beim ausführen wird mir nichts ausgegeben?
Ist meine idee falsch?
|
|
27.04.2013 11:27 |
|
|
|
C++ unregistriert
|
|
Zitat: |
Original von Airblader
Verwende für die Darstellung von Code bitte die Code-Tags (über dem Textfeld die Raute).
code: |
1:
|
string fruechte[5] = {Ananas , Apfel, Banane , Birne , Blaubeere }; |
|
Dies ist falsch (kompiliert das überhaupt?). DIe Früchte sind Strings und müssen dementsprechend in Anführungszeichen gesetzt werden.
code: |
1:
|
string frucht = " Ananas"; |
|
Mal abgesehen davon, dass diese Zeile fehl am Platze ist,
hast du hier ein Leerzeichen drin, das dir bei Aufgaben wie "überprüfe den zweiten Buchstaben" gehörig in die Suppe spucken wird. C++ ist eine Programmiersprache und als solche gibt es auch Dinge wie eine vernünftige Darstellung und "Rechtschreibung", auf die du unbedingt achten musst; denn im Gegensatz zu Menschen im Alltag verzeiht dir ein Computer keine Sprachfehler.
Gehen wir also mal hiervon aus:
code: |
1:
2:
3:
4:
5:
6:
7:
|
#include <iostream>
using namespace std;
int main() {
string fruechte[5] = {"Ananas", "Apfel", "Banane", "Birne", "Blaubeere"};
} |
|
Für Aufgabe a) wollen wir alle Früchte überprüfen, d.h. wir müssen eine Schleife über alle Früchte machen:
code: |
1:
2:
3:
|
for (int i = 0; i < 5; i++) {
// ....
} |
|
Innerhalb der Schleife schauen wir uns das Element fruechte[i] an, das nun nacheinander eben die Werte "Ananas", "Apfel" usw. hat. Den zweiten Buchstaben des Wortes erhalten wir dann entsprechend über fruechte[i][1]. Und diesen Wert wollen wir nun überprüfen, d.h. innerhalb der Schleife muss etwas in dieser Art stehen:
code: |
1:
2:
3:
|
if (/* irgendwas mit fruechte[i][1] */) {
// gib fruechte[i] aus
} |
|
Jetzt bist du erstmal wieder dran, dich mit diesen Informationen daran zu versuchen. |
DAs sind die 2 Sätze .
Aber ich weiss immer nochn icht was ich falsch mache.
So funktioniert mein programm aber der code ist immer noch falsch.
#include <iostream>
using namespace std;
int main() {
string fruechte[5] = {"Ananas", "Apfel", "Banane", "Birne", "Blaubeere"};
for (int i = 0; i < 5; i++) {
if (fruechte[i][1] == fruechte[i][i+1] ) {
cout << fruechte[i] << endl;
}
}
}
Bin verzweifelt.
|
|
28.04.2013 12:44 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
code: |
1:
|
if (fruechte[i][1] == fruechte[i+1][1] ) { |
|
Zwei Dinge hierzu:
- Dieser Ausdruck wird dir im letzten Schleifendurchlauf um die Ohren fliegen, denn dann versuchst du auf fruechte[6][1] zuzugreifen, fruechte[6] ist aber gar nicht definiert.
- Die Bedingung überprüft in dieser Form, ob der zweite Buchstabe einer Frucht derselbe ist wie der zweite Buchstabe der nächsten Frucht; das ist aber nicht die Aufgabenstellung. Es soll überprüft werden, ob der zweite Buchstabe ein "a" ist.
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
|
|
27.04.2013 12:26 |
|
|
|
C++ unregistriert
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
#include <iostream>
using namespace std;
int main() {
string fruechte[5] = {"Ananas", "Apfel", "Banane", "Birne", "Blaubeere"};
for (int i = 0; i < 5; i++) {
if (fruechte[i][1] == fruechte[i+1][1] && fruechte[i+1][1] == a; ) {
cout << fruechte[i] << endl;
}
}
} |
|
Ich weiss der code ist irgendwie falsch aber ich habe es gepostet.
Was mache ich jetzt .
Ichdenke einfach falsch?
|
|
27.04.2013 15:41 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Hallo array24,
bitte poste das nicht weiter unter theoretischer Informatik! Es handelt sich um ganz praktische Informatik. Demnach bitte auch in dem Unterforum posten.
Und bitte versuche doch einfach mal deinen eigenen Code nachzuvollziehen! Z.B.: was passiert in Zeile 9 wenn i = 4 ist? Was ist dann fruechte[i+1]?
Weiterhin: Was bedeutet "&&". Wann wird ein Ausdruck a&&b wahr? Wenn Du diese Frage beantworten kannst, dann weißt du auch, warum es keinerlei Ausgabe gibt.
VG,
Karlito
|
|
27.04.2013 16:07 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
Alle folgenden Kommentare beziehen sich ausschließlich auf die Zeile mit dem if.
code: |
1:
|
fruechte[i][1] == fruechte[i+1][1] |
|
Bitte nochmal den zweiten Listenpunkt meines letzten Beitrages lesen. Ich schreibe diese Dinge in der Regel nicht ohne Grund und reagiere etwas gereizt, wenn sie einfach kommentarlos übergangen werden.
code: |
1:
|
fruechte[i+1][1] == a |
|
Ein Fehler, den du ganz zu Anfang an anderer Stelle schonmal gemacht hast. Dort haben wir ihn korrigiert, also lass uns doch auch daraus lernen. Soll heißen: Nochmal in meinen ersten Beitrag zum Thema schauen und nachdenken, was hier falsch ist.
Das ist schlicht ungültige Syntax. Du arbeitest nicht im Notepad, sondern einer IDE, oder? Die sollte dir sowas spätestens beim Kompilieren als Fehler anzeigen, eigentlich sogar schon vorher irgendwie als Syntaxfehler markieren.
Und jetzt nochmal mit Nachdruck der Hinweis: Wenn du ganze Absätze meiner Antwort(en) nicht verstehst, dann teile mir das bitte entsprechend mit. Wenn du meine Antworten kommentarlos ignorierst und einfach neuen Code postest, bei dem du den nächsten Rateversuch unternommen hast, dann wird das zu nichts führen.
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Airblader: 27.04.2013 16:21.
|
|
27.04.2013 16:18 |
|
|
C++ unregistriert
|
|
Dieser Ausdruck wird dir im letzten Schleifendurchlauf um die Ohren fliegen, denn dann versuchst du auf fruechte[6][1] zuzugreifen, fruechte[6] ist aber gar nicht definiert.
Warum passiert das?
Das verstehe das nicht . Die Schleife geht doch bis i = 4 .
|
|
27.04.2013 17:45 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
Korrekt, ein Tippfehler meinerseits. Durch das i+1 greifst du aber auf fruechte[5] zu, was dir eben um die Ohren fliegt. fruechte hat fünf Einträge, die von 0 bis 4 nummeriert sind.
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
|
|
27.04.2013 21:31 |
|
|
C++ unregistriert
|
|
Soll ich das dann einfach so lassen :
[i][1] ??
Anders kann ich es mir nicht vorstellen.
|
|
27.04.2013 21:39 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
Du sollst diesen Teil der Bedingung komplett weglassen. Wieso willst du denn überhaupt den zweiten Buchstaben mit dem des nächsten Wortes vergleichen? Davon steht in der Aufgabe überhaupt nichts (siehe mein zweiter Listenpunkt oben!)
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
|
|
27.04.2013 21:51 |
|
|
C++ unregistriert
|
|
Aber wie überprüfe ich denn das der zweite Buchstabe a ist?
Ich komme einfach nicht drauf.
|
|
27.04.2013 22:25 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
Magst du die Frage irgendwann auch mal beantworten, wieso du der Meinung bist, dass das Vergleichen des zweiten Bichstabens mit dem des nächsten Wortes irgendwas damit zu tun hat, ob der zweite Buchstabe ein a ist
Als du das, was du geschrieben hast, geschrieben hast, musst du dir ja irgendwas gedacht haben. Vielleicht lässt du uns an diesen Gedanken einfach teilhaben, dann ist es auch leichter, dem Gedankenfehler auf die Spur zu kommen.
Für den Vergleich, ob es ein a ist, hast du ja immer noch die Bedingung
code: |
1:
|
fruechte[i+1][1] == a |
|
die zwar auch noch falsch ist, wie angesprochen, aber zumindest schon nahe dran.
Nochmal als Erklärung: Die Idee ist es, einfach jedes Wort der Reihe nach anzuschauen (for-Schleife) und zu überprüfen, ob es ein a an der zweiten Stelle hat (if-Bedingung).
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Airblader: 28.04.2013 05:57.
|
|
28.04.2013 05:38 |
|
|
C++ unregistriert
|
|
Das Problem ist wenn ich es so gleich a setze kommt bei mir die Fehlermeldung das das a nicht definiert ist .
Soll ich das a einfach vorher definieren so z.B int a;
Es ist so schwer darauf zu kommen.
Ich denke ich habe meinen Fehler:
fruechte[i][i+1]==a;
|
|
28.04.2013 11:28 |
|
|
|
|
|