ERLEDIGT
NEIN
NEIN
ANTWORTEN
29
29
ZUGRIFFE
10063
10063
EMPFEHLEN
-
Hallo erstmal zusammen....
bin neu hier im Forum und wollte mich erstmal vorstellen...
komme aus Stuttgart und studiere im ersten Semester Softwaretechnik und Medieninformatik an der FH Esslingen.
Nun zu meinem Problem...für Euch warscheinlich gar kein Problem.
Und zwar will ich einen Array aus 4 Zahlen anlegen. Die vier Zahlen werden vom User über die Tastatur eingegeben. Nun soll mein Programm die kleinste der Zahlen ermitteln und wieder ausgeben. D.h. Nummer der Komponente und deren Wert....
ich komme nicht weiter an der Stelle an der ich den kleinsten Wert bestimmen lassen soll..
wie geht dass?
Danke schon mal im Vorraus für Hilfe.
-
Hallo,
schau doch mal:
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include <stdio.h> int main() { int array[] = {12, 132,32,432,-321,321,-32, 1}; int min, i = 0; min = array[0]; for (; i < sizeof(array) / sizeof(int); i++) { if (array[i] < min) min = array[i]; } printf("min = %d\n", min); return 0; }
Gruß,
RedWing"I'm not deaf, I'm ignoring you"
----
-
Willkommen erstmal!
Es ist eigentlich nicht sehr schwer die kleinste (oder auch die grösste) Zahl aus einem Array herauszufinden.
- eine Variable "min" deklarieren
- nimm die erste und die zweite Zahl aus deinem Array
- vergleiche die zwei Zahlen
- speichere die kleinere in "min"
- nimm die nächste Zahl in deinem Array
- vergleiche sie mit "min"
- ist sie kleiner als "min" speichere sie in "min". Andernfalls verwirf sie.
- verfahre so mit jeder anderen Zahl in deinem Array
Pseudocode:
Es gibt wahrscheinlich effizienteren Code für dieses Problem. Aber wenn dein Array nur vier Elemente enthält, spielt das keine grosse Rolle.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
int nArray[4]; int min; for (i=0; i<4; i++) { nArray[i] = i; // das Array mit Werten füllen } if (nArray[0] < nArray[1]) min = nArray[0]; else min = nArray[1]; for (int j=2; j<4; j++) { if (nArray[j] < min) min = nArray[j]; }
Gruss LukeS
-
[QUOTE=RedWing;1447218]Hallo,
schau doch mal:
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include <stdio.h> int main() { int array[] = {12, 132,32,432,-321,321,-32, 1}; int min, i = 0; min = array[0]; for (; i < sizeof(array) / sizeof(int); i++) { if (array[i] < min) min = array[i]; } printf("min = %d\n", min); return 0;
Ne Frage zu deinem Programm.....
wie kommst du auf die Werte in deinem array[] (12,132,,,,)
Woher weiss ich dass min=array[0] ist?
Sorry bin noch nicht so fit mit pointern und arrays....Geändert von sirhC6 (03.07.07 um 18:37 Uhr)
-
03.07.07 00:40 #5
min = array[0] ist nur die initialisierung und wird dann überschrieben, sobald ein kleinerer Wert gefunden wird. Die Zeile ist eigentlich überflüssig, da die for-Schleife sowieso mit i = 0 beginnt.
Die Werte sind von ihm beliebig gewählt worden, damit er dir ein lauffähiges Beispiel bieten kann.
Was ich nicht verstehe ist: sizeof(array) / sizeof(int) - was soll das denn?Bitte gelöste Threads als erledigt kennzeichnen. Über ein Danke freut sich ein jeder Helfer.
-
03.07.07 00:49 #6
@fluessig
Der Ausdruck liefert die Größe des Array oder anders gesagt die Anzahl der Arrayelemente.
Code c:1 2 3 4 5
// für Redwings Beispiel sizeof(array); // array setzt sich aus Datentyp int * 8(Werte) zusammen sizeof(int); // Daten typ int besetzt 4 Bytes // daraus folgt 4Bytes*8 =32Bytes sizeof(array) / sizeof(int) // 32:4 = 8 ->Werte somit läuft die Schleife dynamisch egal wieviel Werte
Hoffe ich hab das so richtig verstanden
Visit shadowmasta
-
03.07.07 02:12 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Nein, die Zeile ist nicht überflüssig, da wenn man sie wegläßt min mit einem zufälligen Wert belegt wird der theoretisch kleiner sein kann als alle anderen Elemente in dem Array. Man könnte höchstens i mit 1 initialisieren.
Das hat ja Online-Skater schon erklärt. Noch besser ist allerdings wenn man es unabhängig vom Typ der Arrayelemente macht:Dann ist egal, ob da nun int oder float oder irgendwas in dem Array gespeichert wird - es wird immer die Anzahl der Elemente berechnet.Code c:1
unsigned length = sizeof(array)/sizeof(array[0]);
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hallo,
ich denke mittlerweile das in dem Fall die Verwendung eines Makros zur Bestimmung der Größe eines Arrays mehr Sinn macht, da
1. sizeof eh nur bei Elementen Sinn macht die in ihrer "statischen" Größe variieren können (also bei Datentypen auf verschiedenen Architekturen)
2. das Konstrukt IMO nur die Leserlichkeit des Codes verschlechtert
Arrays sind sowieso immer gleich in ihrer Größe, von daher ist die Verwendung eines Makros wahrsch. leserlicher ...
Code c:1 2 3 4 5 6
#define ARRAY_SIZE 8 ... int array[ARRAY_SIZE] = {12, 132,32,432,-321,321,-32, 1}; ... for (; i < ARRAY_SIZE; i++) { ...
Gruß,
RedWing"I'm not deaf, I'm ignoring you"
----
-
Also vielen Dank erstmal für Eure Mühe....
ich hab mich jetzt mal an RedWings Methode gehalten, da ich die verstehe....
Ihr dürft nicht vergessen das ich erst im ersten Semester bin und noch nicht all zu viel drauf hab....
Vielen Dank nochmal an alle..
-
kurze Frage noch.......
wie weise ich die vom User eingegebenen Werte dem Array zu? Will nicht jede einzelne Komponente einzeln zuweisen.
das muss doch eleganter gehen. Wenn mein array aus 100 Komponenten bestehen würde wär das doch ein Unding...Code c:1
scanf("%d %d %d %d", &ar[0],&ar[1],&ar[2],&ar[3]);
Ach ja ich will auch noch die Array Komponente ausgeben lassen. Wenn ich aber printf(".......%d",ar[i]) ausgeben lasse schreit der mit eine riesen Zahl hin... Ich poste jetzt noch mal meinen ganzen code:
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#include <stdio.h> #define ARRAY_SIZE 4 int main (void) { int ar[4]; int min, i=0; printf("Bitte 4 Zahlen eingeben:\n"); scanf("%d %d %d %d",&ar[0],&ar[1],&ar[2],&ar[3]); min=ar[0]; for(;i<sizeof(ar)/sizeof(int);i++) { if(ar[i]<min) min = ar[i]; } printf("Der Kleinste Wert des Arrays ist '%d' und befindet sich in %d.\n",min,ar[i]); return 0; }
Geändert von sirhC6 (03.07.07 um 18:36 Uhr)
-
03.07.07 17:43 #11
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
1. Bitte verwende für deinen Code die entsprechenden Tags: [c]..[/c] für C - [cpp]...[/cpp] für C++ usw..
2. Wozu definierst du die ARRAY_SIZE Variable wenn du sie gar nicht benutzt?
Das Zauberwort heißt hier Schleife.
Du solltest dir mal ganz in Ruhe überlegen was bei der Ausführung des Programmes passiert und welchen Wert die Variablen haben. Mach dir am besten eine Tabelle wo du mitschreibst wie sich der Wert der Variablen ändert.
Du meinst ja offensichtlich, dass die Variable i nach der Schleife den Index des Minimums enthält. Der Wert der Variablen i ist aber nicht mehr kleiner als "sizeof(ar)/sizeof(int)", denn sonst wäre die Schleife ja nicht beendet worden.
Wenn dein Array die Größe 4 hat; also 4 Elemente darin gespeichert werden können, welchen Wert hat i dann nach der Schleife? Und ist es in Ordnung dann auf das i-te Element des Arrays mitzuzugreifen?Code c:1
ar[i]
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Bin gerade dabei da nochmal durchzusteigen.
Aber könntest du mit diese Zeile nochmal für dummies erklären.... bitte:
Code c:1
i<sizeof(ar)/sizeof(int)
Geändert von sirhC6 (03.07.07 um 18:36 Uhr)
-
03.07.07 18:15 #13
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
sizeof ist ein Operator der die Größe in Bytes der übergebenen Variable oder Typs bestimmt.
Nehmen wir an, ar ist ein Array von int und ist folgendermaßen definiert:
D.h. ar ist ein Array von 8 Elementen und es können also 8 int's darin gespeichert werden.Code c:1
int ar[8];
Um einen int zu Speichern braucht man üblicherweise 4 Byte. Wenn man nun 8 Stück davon speichern will, braucht man....... 32 Byte.
Mit sizeof kann man jetzt den Speicherbedarf von ar bestimmen und auch den Speicherbedarf eines int.
D.h. sizeof(ar) gibt die Gesamtgröße des Arrays zurück und sizeof(int) den Bedarf eines Elementes des Arrays.
Wenn man weiß wie groß das gesamte Array ist, und man auch weiß wie groß ein einzelnes Element ist (alle Elemente sind gleich groß), kann man einfach durch Division die Anzahl der Elemente ermitteln.
Das heißt für das Array ar ergibt sich "sizeof(ar)/sizeof(int)" = 8. Es kommt also immer der Wert heraus, der bei der Definition in den eckigen Klammern angegeben wurde.
Man könnte auch den Wert immer manuell in der Schleife anpassen wenn man die Größe des Arrays bei der Definition ändert, aber das ist ziemlich fehleranfällig weil man es irgendwann doch vergisst.
Ach, und der Vergleichist der übliche kleiner als Vergleich.Code c:1
i < szieof(ar) / sizeof(int)
GrußGeändert von deepthroat (03.07.07 um 18:19 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Okay super danke, hab ich verstanden....
dann könnte ich auch schreiben:
Code c:1
for(;i<4;i++)
und warum wird hier der Startwert nicht gebraucht?
in der Art von:
Code c:1
for(i=0;i<4;i++)
-
03.07.07 18:44 #15
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ja, da ar als "int ar[4];" in deinem Programm definiert ist.
Die Variable i wurde doch bereits bei der Definition initialisiert und hat bereits den Wert 0. (Tabelle machen!
)
Ich ziehe es eigentlich immer vor, die Zählvariable auch in der for-Schleife zu initialisieren. Da hat man einen besseren Überblick.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Array-differenz bestimmen
Von ala im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 3Letzter Beitrag: 23.04.10, 11:19 -
Array Größe zur Laufzeit bestimmen
Von Dolphon im Forum C/C++Antworten: 2Letzter Beitrag: 02.11.08, 11:52 -
Array-Differenzmenge bestimmen
Von starforcee im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 3Letzter Beitrag: 09.10.08, 17:49 -
Array größe bestimmen
Von Winner im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 01.10.07, 13:58 -
[newbie] Array-Länge bestimmen
Von LukeS im Forum C/C++Antworten: 4Letzter Beitrag: 07.02.06, 09:47





Zitieren

Login






