Array < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 15:27 Mo 06.09.2010 | Autor: | Ice-Man |
Hallo,
ich habe mich hier nochmal an einem Array probiert.
Übung war irgendwie, das ich die Anzahl der verkauften Burger eingeben soll.
Das funktioniert ja soweit auch bei mir.
Problem an meiner Lösung ist nur, das ich nach der jeweiligen Eingabe des Burgers einer Filiale immer mit "Tab" zur nächsten Eingabe wechseln muss.
Und nachdem die Eingabe einer Filiale beendet ist, muss ich mit "Enter" zur nächsten springen.
Was ja irgendwie ein wenig verwirrend ist.
Gibt es da vielleicht einen einfacheren und logischen Weg?
Quelltext häng ich mal an, hoffe, ich habs ein wenig verständlich geschrieben.
Vielen Dank schon einmal.
Dateianhänge: Anhang Nr. 1 (Typ: txt) [nicht öffentlich]
|
|
|
|
Hallo!
Du hast es aber mit deinen Arrays
Zunächst deklarierst du oben tabelle[Filiale][4] , was aber so nicht geht. Filiale ist eine Variable und keine konstante. Ein Array kann man erstmal nur mit Konstanten anlegen.
Dann hast du dich auch später bei dem scanf vertan, hier steht tabelle[Filiale][4], womit du aber niemals alle deine Elemente füllst.
Das mit dem TAB verstehe ich nicht. So, wie es da steht, mußt du einen wert nach dem anderen eingeben, und dann ENTER drücken.
Dagegen wäre es schon logisch und praktisch, wenn man alle Burger einer Filiale direkt hintereinander schreiben könnte, um danach ENTER zu bestätigen und zur nächsten Filiale zu wechseln. Das ginge so:
scanf("%i %i %i %i", &tabelle[zeile][0], &tabelle[zeile][1], &tabelle[zeile][2], &tabelle[zeile][3]);
Hierbei werden vier durch Leerzeichen getrennte Zahlen gleichzeitig eingelesen.
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:03 Mo 06.09.2010 | Autor: | Ice-Man |
Also das mit dem "mehrere Zahlen hintereinander" einlesen funktioniert nicht so wirklich.
Und das mit dem "Tab" geht bei mir eigentlich.
Z.B.
Ich gebe 2 Filialen ein.
Dann lese ich 4 Zahlen ein, wobei ich nach jeder Zahl die Tabulator Taste drücke.
Wenn ich 4 Zahlen eingeben habe drücke ich "Enter" und es wird zur nächsten "Filiale" gesprungen.
Würde das wirklich nicht funktionieren??
Nur jetzt weis ich halt nicht, wie ich die Spaltensumme berechnen kann.
|
|
|
|
|
Hallo Ice-Man,
Ich habe dir jetzt ein kleines Beispielprogramm zu deinem Problem geschrieben:
1: | #include <stdio.h>
| 2: | #include <stdlib.h>
| 3: |
| 4: | int main(int argc, char* argv[]) {
| 5: | int x, y, maxx, maxy;
| 6: |
| 7: | int* pFilialen;
| 8: |
| 9: | printf("Anzahl Filialen: ");
| 10: | scanf("%d", &maxy);
| 11: |
| 12: | printf("Anzahl Werte pro Filiale: ");
| 13: | scanf("%d", &maxx);
| 14: |
| 15: | pFilialen = (int*)calloc(maxy*maxx, sizeof(int));
| 16: | if(pFilialen == NULL) exit(1);
| 17: |
| 18: | for(y = 0; y < maxy; y++) {
| 19: | printf("Filiale #%d:\n", y+1);
| 20: | for(x = 0; x < maxx; x++) {
| 21: | printf("\tWert #%d:", x+1);
| 22: | scanf("%d", &pFilialen[y*maxx + x]);
| 23: | }
| 24: | }
| 25: |
| 26: | printf("\nSpaltensummen:\n");
| 27: |
| 28: | for(x = 0; x < maxx; x++) {
| 29: | printf("#%d:", x+1);
| 30: | int s; s = 0;
| 31: |
| 32: | for(y = 0; y < maxy; y++) {
| 33: | s = s + pFilialen[y*maxx + x];
| 34: | }
| 35: |
| 36: | printf("%d ", s);
| 37: | }
| 38: |
| 39: | printf("\n");
| 40: | free(pFilialen);
| 41: |
| 42: | return 0;
| 43: | } |
Das Programm reserviert mittels calloc() maxy*maxx Speicher für das zweidimensionale Filialen-Array. Der Trick ist, daß wir hier ein eindimensionales Array benutzen, um ein zweidimensionales Array darzustellen. Der Zugriff auf die Elemente erfolgt mittels y*maxx + x. Befinden wir uns in der 0ten Zeile, so gilt 0*maxx + x == x. Und für die 1te-Zeile überspringen wir sozusagen maxx Zellen (eine komplette Zeile) und landen direkt am Anfang der nächsten Zeile. Analog funktioniert es für y > 1.
Okay, soweit erstmal; Stelle konkrete Fragen zu diesem Programm, wenn dir etwas unklar ist.
Viele Grüße
Karl
|
|
|
|