Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Array c++ » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Thema ist geschlossen
Zum Ende der Seite springen Array c++
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
c++
unregistriert
Array c++ Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
C++
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
C++
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
27.04.2013 15:41
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
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 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
C++
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
C++
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Soll ich das dann einfach so lassen :

[i][1] ??

Anders kann ich es mir nicht vorstellen.
27.04.2013 21:39
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
C++
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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


Ich komme einfach nicht drauf.
27.04.2013 22:25
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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).

__________________
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 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
C++
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
Airblader Airblader ist männlich
Doppel-As


Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

__________________
The best thing about a boolean is that even if you're wrong, you're only off by a bit.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Airblader: 28.04.2013 11:46.

28.04.2013 11:44 Airblader ist offline Beiträge von Airblader suchen Nehmen Sie Airblader in Ihre Freundesliste auf
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Thema ist geschlossen
Informatiker Board » Themengebiete » Praktische Informatik » Array c++