Array aufsteigend oder absteigend oder gemischte Reihenfolge?
-
der-ulf schrieb:
es gibt im c gar keine objekte mensch
gibt's wohl. exemplare von primitiven typen und structs sind z.b. objekte.
-
ne das heißt dann anders
-
~fricky schrieb:
der-ulf schrieb:
es gibt im c gar keine objekte mensch
gibt's wohl. exemplare von primitiven typen und structs sind z.b. objekte.
Alle Instanzen von irgendwelchen Typen sind Objekte.
-
ascda schrieb:
ne das heißt dann anders
und wie?
-
hm das müsste ich jetzt im c standard 80.48 revision 294.d2r2008 oder so nchgucken, aber da frag mal lieber einen der üblichen schlaumeier
-
Hallo,
3.15 Object
[#1] A region of data storage in the execution environment,
the contents of which can represent values. Except for
bit-fields, objects are composed of contiguous sequences of
one or more bytes, the number, order, and encoding of which
are either explicitly specified or implementation-defined.
When referenced, an object may be interpreted as having a
particular type; see 6.2.2.1.Den Schlaumeier-Titel gebe ich allerdings gerne an andere weiter...
MfG,
Probe-Nutzer
-
Ja folgendes hab jetzt a bisserl herum programmiert:
Sieht so aus:#include <stdio.h> #include <conio.h> void main() { int Feld[5],i; int Absteigend=0,Aufsteigend=0; for(i=0;i<5;i++) { printf("Wert:"); scanf("%d",&Feld[i]); } for(i=0;i<5;i++) { if(Feld[i]<=Feld[i+1]) { Aufsteigend++; } if(Feld[i]>=Feld[i+1]) { Absteigend++; } printf("Auf:%d\n",Aufsteigend); printf("Ab:%d\n",Absteigend); } if(Aufsteigend==5) { printf("Aufsteigend sortiert"); } else if(Absteigend==4) { printf("Absteigend sortiert"); } else { printf("Gemischte Reihenfolge"); } fflush(stdin); getchar(); }
Aber da gibts ein kleines Probelm:
Wenn ich 1,2,3,4,5 eingib gibt er mir aus aufsteigend od. 1,1,2,3,4...etc.
Das passt so weit aber wenn ich 5,5,4,3,2 eingib oder so was dergleichen zählt er mir 1 xAufsteigende und 4 Absteigend wieso?Ich versteh generell die Vedingung ==4, ==5 nicht.da passt was nicht!Sorry hät gleich den Code reinstellen sollen!
lg Stefanos
-
for(i=0;i<5;i++) { if(Feld[i]<=Feld[i+1]) { Aufsteigend++; } if(Feld[i]>=Feld[i+1]) { Absteigend++; }
Der Teil ist bedenklich, da du hier einen Vergleich Feld[4] mit Feld[5] durchführst, und das obwohl du nur ein Array mit 5 Feldern deklariert hast (0 bis 4).
-
Stefanos schrieb:
Ja folgendes hab jetzt a bisserl herum programmiert:
Sieht so aus:#include <stdio.h> #include <conio.h> void main() { int Feld[5],i; int Absteigend=0,Aufsteigend=0; for(i=0;i<5;i++) { printf("Wert:"); scanf("%d",&Feld[i]); } for(i=0;i<5;i++) { if(Feld[i]<=Feld[i+1]) { Aufsteigend++; } if(Feld[i]>=Feld[i+1]) { Absteigend++; } printf("Auf:%d\n",Aufsteigend); printf("Ab:%d\n",Absteigend); } if(Aufsteigend==5) { printf("Aufsteigend sortiert"); } else if(Absteigend==4) { printf("Absteigend sortiert"); } else { printf("Gemischte Reihenfolge"); } fflush(stdin); getchar(); }
Aber da gibts ein kleines Probelm:
Wenn ich 1,2,3,4,5 eingib gibt er mir aus aufsteigend od. 1,1,2,3,4...etc.
Das passt so weit aber wenn ich 5,5,4,3,2 eingib oder so was dergleichen zählt er mir 1 xAufsteigende und 4 Absteigend wieso?Ich versteh generell die Vedingung ==4, ==5 nicht.da passt was nicht!Sorry hät gleich den Code reinstellen sollen!
lg StefanosWieso verstehst du eigentlich dein selbst programmiertes nicht ???
-
Wer sortiert Dein Array eigentlich? Ich meine, wo kommt das sortierte Array her?
-
Derzeit gibt er es noch per Hand ein, ist generell aber doch Jacke wie Hose, oder ?
for(i=0;i<5;i++) { printf("Wert:"); scanf("%d",&Feld[i]); }
-
Nein, ist es nicht. Wenn er später eh vorher sortiert, müsste er es nicht mehr prüfen. Anfänger kommen trotzdem manchmal auf komische Ideen...
-
@Tachyon Vielleicht soll anhand dieser Zeilen ja gerade entschieden werden, ob ein Sortieralgorithmus eingesetzt werden soll. Außerdem schadet ein wenig Programmierpraxis - auch wenn sie unnötig ist - dem Lernenden nicht.
fflush(stdin);
Das ist kein ANSI C, siehe (http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html)
-
Korhil schrieb:
@Tachyon Vielleicht soll anhand dieser Zeilen ja gerade entschieden werden, ob ein Sortieralgorithmus eingesetzt werden soll. Außerdem schadet ein wenig Programmierpraxis - auch wenn sie unnötig ist - dem Lernenden nicht.
Auch wieder war-
Korhil schrieb:
fflush(stdin);
Das ist kein ANSI C, siehe (http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html)
Klar ist das ANSI C. Nur das Verhalten ist undefiniert.
-
Tachyon schrieb:
Korhil schrieb:
@Tachyon Vielleicht soll anhand dieser Zeilen ja gerade entschieden werden, ob ein Sortieralgorithmus eingesetzt werden soll. Außerdem schadet ein wenig Programmierpraxis - auch wenn sie unnötig ist - dem Lernenden nicht.
Auch wieder war-
Korhil schrieb:
fflush(stdin);
Das ist kein ANSI C, siehe (http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html)
Klar ist das ANSI C. Nur das Verhalten ist undefiniert.
Okay, aber ist etwas undefiniertes akzeptabler ?
-
Hallo,
was hälst du von folgender Lösung? Die Funktion hat eine Signatur analog zu qsort aus der Standardbibliothek; sie kann auf Arrays beliebigen Typs abgeschossen werden und auch die Vergleichsfunktion wird übergeben.
Grüße
Martin#include <stdlib.h> #include <stdio.h> #define UNORDERED 0 #define ASCENDING 1 #define DESCENDING 2 int asc_descending(void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *)) { register unsigned char *i, *r; int res = ASCENDING | DESCENDING; i = r = base; r += --nmemb * size; while (i < r) { int c = (*compar) (i, i + size); if (c < 0) res &= ~DESCENDING; else if (c > 0) res &= ~ASCENDING; i += size; } return res; } static int cmp(const void *p1, const void *p2) { return *(const int *)p1 - *(const int *)p2; } int main() { int v[] = { 0, 1, 1, 2, 3, 5, 8 }; /* int v[] = { 8, 5, 3, 2, 1, 1, 0 }; */ /* int v[] = { 8, 5, 0, 1, 3, 2, 1 }; */ size_t n = sizeof(v) / sizeof(int); switch (asc_descending(v, n, sizeof(int), &cmp)) { case ASCENDING: printf("aufsteigend\n"); break; case DESCENDING: printf("absteigend\n"); break; case UNORDERED: printf("unsortiert\n"); break; default: printf("Autsch!\n"); } return EXIT_SUCCESS; }