Array c++

Neue Frage »

Auf diesen Beitrag antworten »
c++ Array c++

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
 
Auf diesen Beitrag antworten »
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.
Auf diesen Beitrag antworten »
C++

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?
Auf diesen Beitrag antworten »
Airblader

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.
 
Auf diesen Beitrag antworten »
C++

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? verwirrt
Auf diesen Beitrag antworten »
Karlito

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
Auf diesen Beitrag antworten »
Airblader

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.

code:
1:
;


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.
Auf diesen Beitrag antworten »
C++

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 .
Auf diesen Beitrag antworten »
Airblader

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.
Auf diesen Beitrag antworten »
C++

Soll ich das dann einfach so lassen :

[i][1] ??

Anders kann ich es mir nicht vorstellen.
Auf diesen Beitrag antworten »
Airblader

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!)
Auf diesen Beitrag antworten »
C++

Aber wie überprüfe ich denn das der zweite Buchstabe a ist?


Ich komme einfach nicht drauf.
Auf diesen Beitrag antworten »
Airblader

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 verwirrt
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).
Auf diesen Beitrag antworten »
C++

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;
Auf diesen Beitrag antworten »
Airblader

code:
1:
fruechte[i][i+1]==a;


Jetzt hast du es ja noch falscher gemacht. unglücklich
Denke doch mal bitte wirklich darüber nach, was du eigentlich machen willst. Dass du auf fruechte[ i ] zugreifst stimmt nun zwar, aber auf welchen Buchstaben willst du zugreifen?

Und dass der Compiler meckert, dass a nicht definiert ist, ist vollkommen korrekt. Warum sollte dir "int a;" da irgendwie helfen? Du willst doch mit dem Buchstaben a vergleichen, nicht mit der Variablen a (die es nicht gibt). Ich verweise hierzu auf den zweiten und dritten Satz, den ich in diesem Thread geschrieben habe.
Auf diesen Beitrag antworten »
C++

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
  #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][i+1] == fruechte[i][a] ) {


                cout << fruechte[i] << endl;


}

}

}
    



Für mich würde es so sinn ergeben , aber es funktioniert nicht weil das a nicht definiert ist.
Auf diesen Beitrag antworten »
Airblader

Ich klinke mich hier nun aus. Ich hatte schon vorher gesagt, dass es ermüdend ist, wenn man einfach nur ignoriert wird und den nächsten Rateversuch kommentieren soll. Erhalte ich keine Antwort auf meinen Beitrag, dann schreibe ich eben auch keine mehr.

Dennoch weiterhin viel Erfolg beim Programmieren.
Auf diesen Beitrag antworten »
C++

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.
Auf diesen Beitrag antworten »
C++

Soll ich das a irgendwie vorher definieren?
Auf diesen Beitrag antworten »
C++

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

Wenn ich so richtig jetzt denke .
Ist das doch irgendwie falsch.
Auf diesen Beitrag antworten »
C++

Habs:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
#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][i+1] ==  'a' ) {




                cout << fruechte[i] << endl;


}

}

}
Auf diesen Beitrag antworten »
Karlito

Hallo,

ich empfehle dir: nimm dir ein Buch und lerne die Grundlagen. Jede hilfe hier ist nur dann möglich, wenn Du weißt was du überhaupt tust. Bei jedem Schritt rätst Du noch etwas dazu. Du kannst auch noch 10 mal deinen Namen hier wechseln. Das wird dir nicht weiter helfen. Die Helfer hier werden immer wieder die Geduld verlieren! Du kennst ja meine Meinung bereits aus vorhergehenden Beiträgen als du als Nutzer "info" geschrieben hast, oder?.

Hier ist eine Reihe von Tipps wo Du dir Grundlagen anarbeiten kannst. Dabei bitte auch die Bücher durcharbeiten. Deine Rateversuche hier sind einfach nicht Sinnvoll und Zielführend.

Auch kannst Du einach mal versuchen den Code anderer nachzuvollziehen. Dabei lernt man auch viel. Dazu ist es aber auch wichtig, dass Du die Grundlagen verstehst. Das hier ist kein Deutschunterricht, wo man einfach was schreibt, was gut oder sinnvoll klingt! Die Bedeutung jedes einzelnen Zeichens ist Formal festgelegt wie in der Mathematik.

Und ja, du denkst offensichtlich Falsch. Das liegt daran, dass du nicht Systematisch an die Sache rangehst! Ein Buch kann dabei helfen.

Ich wünsche dir viel erfolg weiterhin. Gern kannst Du Verständnisfragen weiterhin hier Stellen, aber bitte erst dann, wenn Du dich in der Lage siehst, die Antworten zu verstehen.

VG,

Karlito
Auf diesen Beitrag antworten »
Airblader

Im Übrigen ist obiger Code noch immer falsch. Und ich denke auch, dass es hier an mehr fehlt als nur "Programmier-Wissen".

Die eher bescheidenen Versuche, mich doch noch zu einer Antwort zu bewegen, indem man meinen ellenlangen Beitrag zitiert und sagt "Da sind die zwei Sätze", lasse ich im Interesse aller mal lieber unkommentiert.
Auf diesen Beitrag antworten »
C++

Ja ich weiss ich hätte es auch so schreiben können :

fruechte[i][1] == 'a'

Aber ich verstehe nicht warum es auf beide weise funktioniert?
Auf diesen Beitrag antworten »
Airblader

Tut es nicht. Die Ausgabe für das Array mit fünf Früchten stimmt nur zufällig – wie man verifizieren kann, wenn man sich überlegt, was der Code tut.
Auf diesen Beitrag antworten »
C++

Na gut ich probiere mal weiter:

Ich hab mich jetzt an die b rangemacht:

code:
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:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
#include <iostream>
#include <string>

using namespace std;






int main() {

    char Eingabe;

    cin >> Eingabe;

    cout << "(A)alle Fruechte, die an 2. Stelle ein a haben, ausgeben " << endl;

    cout << "(B) aus dem Apfel eine Apfelsine machen, alten und neuen Wert ausgeben" << endl;

    cout << "(C)alle Fruechte, deren Name länger als 8 Zeichen ist, ausgeben " << endl;

    cout << " (D) (freiwillig) alle Fruechte, die im Namen beere haben,den Bestandteil ohne beere ausgeben" << endl;




    string fruechte[5] = {"Ananas", "Apfel", "Banane", "Birne", "Blaubeere"};




switch(Eingabe) {


    case 'a':

        Eingabe = 'A';


    for (int i = 0; i < 5; i++) {

            if (fruechte[i][1] ==  'a' ) {




                cout << fruechte[i] << endl;


}

}

  break;

    case'b':

    Eingabe = 'B';


       int tmp;


         string fruechte  = "Apfel";

        fruechte == "Apfelsine";

        fruechte == tmp;







        cout << tmp << endl;



        break;

  defaul:

  break;



} 


Ich hab versucht das string frucht zu verändern und dann in eine neue variable einzulesen und diese Auszugeben .

Was mache ich falsch ?

Ich komme seit stunden nicht auf den Fehler.

Bitte um tipps.
Auf diesen Beitrag antworten »
C++

code:
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:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
 #include <iostream>
#include <string>

using namespace std;






int main() {

    char Eingabe;

    cin >> Eingabe;

    cout << "(A)alle Fruechte, die an 2. Stelle ein a haben, ausgeben " << endl;

    cout << "(B) aus dem Apfel eine Apfelsine machen, alten und neuen Wert ausgeben" << endl;

    cout << "(C)alle Fruechte, deren Name länger als 8 Zeichen ist, ausgeben " << endl;

    cout << " (D) (freiwillig) alle Fruechte, die im Namen beere haben,den Bestandteil ohne beere ausgeben" << endl;




    string fruechte[5] = {"Ananas", "Apfel", "Banane", "Birne", "Blaubeere"};




switch(Eingabe) {


    case 'a':

        Eingabe = 'A';


    for (int i = 0; i < 5; i++) {

            if (fruechte[i][1] ==  'a' ) {




                cout << fruechte[i] << endl;


}

}

  break;

    case'b':

    Eingabe = 'B';


       int tmp;


         string fruechte  = "Apfel";

        fruechte = "Apfelsine";









        cout << fruechte << endl;



        break;

  defaul:

  break;



}
}    


Oder wäre es einfach so in ordnung ?

Das scheint zu funktionieren?
Auf diesen Beitrag antworten »
Karlito

Nein, das funktioniert nicht. Ich habe nicht den ganzen Code geprüft, aber der Fall 'b' ist unvollständig und es sind unnütze Anweisungen enthalten (Eingabe='A'). Fall a könnte evtl. funktionieren, ich bin jedoch nicht mehr bereit mich mit dem Code auseinanderzusetzen.

Zitat:
Original von C++
Das scheint zu funktionieren?


Das Fragezeichen zeigt, dass Du selbst nicht weißt ob der Code funktioniert... Ich glaube er sollte nicht einmal Compilieren (Schreibfehler in Zeile 83).

Ich finde es nicht sinnvoll den Thread fortzuführen und schließe ihn deshalb.

VG,

Karlito
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »