Minimales Programmproblem ;)

Ich bins mal wieder mit einem minimalen Programmproblem.
Ich bin mir ziemlich sicher, das es sehr leicht zu lösen ist, leider steh ich voll aufm schlauch.
also folgendes: das programm soll mit einem zweidimensionalen array für drei arbeitsschritte beim autolackieren jeweils die benötigte lackmenge ausgeben. nur leider tut es das bei mir nicht.
mein code sieht wie folgt aus:

void main (void)
{
const unsigned int ARBEITSSCHRITT=3;
const unsigned int LACKMENGE=3;

string arbeit[ARBEITSSCHRITT]=
{ "Grundieren", "Farblackierung", "Klarlackierung"};

string lack[ARBEITSSCHRITT][LACKMENGE]=
{ "5 l", "4 l", "4 l"};

unsigned int i=0;
unsigned int j=0;

for (i=0; i

und so sieht der krams aus, den das programm mir ausgiebt:
http://imageshack.us/photo/my-images/844/unbenanntso...
ich hab schon sämtliches ausprobiert, aber er will einfach nicht.
er soll halt zu jedem arbeitsschritt nur die dazugehörige lackmenge ausgeben und nicht alle.
ich hoffe ihr könnt mir helfen
lg
s.erhorn

OT: Minimales Programmproblem :wink:

http://imageshack.us/photo/my-images/844/unbenanntso
ich hab schon sämtliches ausprobiert, aber er will einfach
nicht.

Ja she ich, das ist dieses drecks forum , das kann nichtmal links richtig verarbeiten .

schade kann man dir nicht helfen , schon wieder ein geprellter kunde weil sich die Forum administration dieses Problem nicht beherschen lernen will.

Wer weiss was , ihr seit und bleibt ein echter billig ramschladen , billige austattung, billige user , billige antworten (wie diese hier). Und das schlimmste ich mach auch noch mit .

Re: OT: Minimales Programmproblem :wink:
probieren wirs nochmal:
http://imageshack.us/photo/my-images/843/unbenanntzv…

Verstehe Deine Anforderung nicht ganz.

string lack[ARBEITSSCHRITT][LACKMENGE]=
{ „5 l“, „4 l“, „4 l“};
Wieso willst Du die Lackmenge in einer 3x3 Matrix ablegen, initialisierst aber dann nur die ersten drei Elemente?

Das Ergebnis entspricht dem, was ich jetzt erwartet hätte: Du spuckst zu jedem Arbeitsschritt die drei hinterlegten Lackmengen aus. Bei den nächsten Arbeitsschritten zeigt er die nicht initialisierten Mengen an. (Da hätte auch totaler Mist stehen/passieren können.)

Entweder Du machst eine Lackmenge pro Arbeitsschritt:

string lack[ARBEITSSCHRITT]=
{ „5 l“, „4 l“, „4 l“};
und lässt bei der Ausgabe die Schleifen weg:
cout

oder Du willst mehrere Lackmengen pro Arbeitsschritt (Grundierung, Farblack, Decklack) und initialisierst die Matrix richtig:
string lack[ARBEITSSCHRITT][LACKMENGE]=
{ „5 l“, „0 l“, „0 l“, „0 l“, „4 l“, „0 l“, „0 l“, „0 l“, „4 l“};

weil Du das im Kopf hast:

\left(
\begin{array}{ccc}
5l & 0l & 0l \
0l & 4l & 0l \
0l & 0l & 4l
\end{array}
\right)

Ciao, Allesquatsch

danke für die schnelle antwort.
ich habe deine lösung einmal ausprobiert, aber leider funktioniert es immer noch nicht so, wie es soll.
aber vielleicht habe ich auch meine anforderungen zu dem programm zu vage beschrieben. eigentlich soll es wie folgt aussehen:

Arbeitsschritt 1: Grundieren
Lackmenge 1: 5l

Arbeitsschritt 2: Farblackierung
Lackmenge 2: 4l

Arbeitsschritt 3: Klarlackierung
Lackmenge 3: 4l

so soll es eigentlich aussehen.

edit: ist eine schleife nicht sogar zwingend notwendig, damit alle punkte aus den arrays initialisiert werden?

funktioniert es immer noch nicht so, wie es soll.

Das Problem ist, dass ich nicht verstanden habe, was es soll.

Willst Du zu jedem Arbeitsschritt nur eine Lackmenge (weil Du keine unterschiedlichen Lackarten berücksichtigst), dann brauchst Du keine Matrix sondern nur ein Array und keine innere Schleife über j.

Willst Du aber eine Matrix, weil Du unausgesprochen und undokumentiert von verschiedenen Lackarten und spezifischen Mengen ausgehst, solltest Du es auch im Code entsprechend schreiben:

const unsigned int LACKARTEN=3;

string lackmenge[ARBEITSSCHRITT][LACKARTEN]=
{ "5 l", "0 l", "0 l", "0 l", "4 l", "0 l", "0 l", "0 l", "4 l"};

Würde sich dann aber gut machen, wenn Du die Lackarten auch benennst:

string lack[LACKARTEN]= { "Grundlack, "Farblack", "Decklack"};

und mit ausgibst

cout


Ciao, Allesquatsch

Nein, mehrdimensionale Arrays werden intern als eindimensionales Array abgebildet. Beim Zugriff werden die Indizes ausmultiplizitert;

a[i][j] => a[i \* DIMENSION + j]

Hossa :smile:

Eigentlich antworte ich ja nicht, wenn jemand alles klein schreibt. Aber da du hier nicht so richtig weiter kommst, ein kleiner Tipp:

const unsigned int ARBEITSSCHRITT=3;
const unsigned int LACKMENGE=3;

string lack[ARBEITSSCHRITT][LACKMENGE]=
{ „5 l“, „4 l“, „4 l“};

„lack“ ist ein zweidimensionales Array vom Typ string. Da ARBEITSSCHRITT=3 ist und LACKMENGE=3 ist, hast au also Speicherplatz für 9 string-Objekte reserviert. Dieser wird im Speicher linear hinereinander organisiert, wobei der hinterste Index am schnellsten läuft, also so:

lack[0][0]
lack[0][1]
lack[0][2]
lack[1][0]
lack[1][1]
lack[1][2]
lack[2][0]
lack[2][1]
lack[2][2]

Dieses 9-elementige Array initialisierst du mit genau 3 Strings, die den ersten 3 Elementen zugeordnet werden. Alle anderen Elemente werden danach automatisch mit 0 intialisiert. [Das macht C++ automatisch, wenn die Anzahl der Elemente in der Initialisierungsliste kleiner ist als die Anzahl der Elemente im Array!] Also sieht es bei dir im Speicher so aus:

lack[0][0]="5 1"
lack[0][1]="4 1"
lack[0][2]="4 1"
lack[1][0]=null
lack[1][1]=null
lack[1][2]=null
lack[2][0]=null
lack[2][1]=null
lack[2][2]=null

Jetzt dürfte klar sein, warum dein Programm nicht läuft…

Viele Grüße

Hasenfuß

okay. ich werde mich die nächsten tage damit befassen. tausend dank schonmal