Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Array c++ (http://www.informatikerboard.de/board/thread.php?threadid=1486)


Geschrieben von c++ am 26.04.2013 um 23:56:

  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



Geschrieben von Airblader am 27.04.2013 um 09:18:

 

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.



Geschrieben von C++ am 27.04.2013 um 11:27:

 

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?



Geschrieben von Airblader am 27.04.2013 um 12:26:

 

code:
1:
if (fruechte[i][1] == fruechte[i+1][1] ) {


Zwei Dinge hierzu:




Geschrieben von C++ am 27.04.2013 um 15:41:

 

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



Geschrieben von Karlito am 27.04.2013 um 16:07:

 

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



Geschrieben von Airblader am 27.04.2013 um 16:18:

 

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.



Geschrieben von C++ am 27.04.2013 um 17:45:

 

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 .



Geschrieben von Airblader am 27.04.2013 um 21:31:

 

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.



Geschrieben von C++ am 27.04.2013 um 21:39:

 

Soll ich das dann einfach so lassen :

[i][1] ??

Anders kann ich es mir nicht vorstellen.



Geschrieben von Airblader am 27.04.2013 um 21:51:

 

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



Geschrieben von C++ am 27.04.2013 um 22:25:

 

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


Ich komme einfach nicht drauf.



Geschrieben von Airblader am 28.04.2013 um 05:38:

 

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



Geschrieben von C++ am 28.04.2013 um 11:28:

 

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;



Geschrieben von Airblader am 28.04.2013 um 11:44:

 

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.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH