Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » array sortieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
19.08.2005, 14:20 Uhr
itchy



hi,
ich habe nicht wirklich viel Ahnung von C.

Als Übung versuche ich ein Programm zu schreiben welches int-Zahlen in einem Array der Größe nach ordnet (von der kleinsten Zahl an).

Bisher wird aber leider nur "Speicherzugriffsfehler" nach dem Programmstart gemeldet.

Ich poste einfach mal den Code:


C++:
    3 #include <stdio.h>
    4
    5 #define ANZAHL 6
    6
    7 void sortiere(int *zeiger) {
    8 int hilf, position;
    9
   10   while(position <= ANZAHL) {
   11     if (*zeiger++ > *zeiger) {
   12       zeiger--;
   13       hilf = *zeiger;
   14       *zeiger++ = *zeiger;
   15       *zeiger = hilf;
   16       position++;
   17       for(hilf = 0; hilf < position; hilf++)
   18         zeiger--;
   19       position = 0;    
   20         }
   21     else {    
   22       zeiger++;
   23       position++;
   24     }  
   25   }  
   26 }
   27    
   28 int main(void) {
   29   int i;
   30   int array[] = {7,1,8,6,11,2,5};
   31  
   32   for (i = 0; i < ANZAHL; i++)
   33     printf("array: %i", array[i]);
   34   sortiere(array);
   35   printf("\n\n");
   36   for(i = 0; i < ANZAHL; i++)
   37     printf("array: %i", array[i]);
   38   printf("\n\n");
   39   return 0;
   40 }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.08.2005, 14:45 Uhr
Tommix



Du hast position nicht initialisiert.
Es müssen noch mehr Fehler sein, aber so läuft es schon mal bis zum Ende durch.

- Tommix


C++:
#include <stdio.h>

#define ANZAHL 6

void sortiere(int *zeiger) {
int hilf, position = 0;

  while(position <= ANZAHL) {
// usw.

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.08.2005, 14:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ohne mir das lange (und damit genauer) anzugucken fällt mir auf...

anzahl bzw arraygrösse würde ich nicht als paramter der funktion mit übergeben...


Zitat:

while(position <= ANZAHL) {


position wurde gar nicht initialisiert...


Bearbeitung:

argh... da war tommix tatsächlich mal schneller...


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 19.08.2005 um 14:49 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.08.2005, 19:00 Uhr
~itchy
Gast


Danke für den Hinweis. Der Speicherzugriffsfehler ist nun weg.

Die beiden Ausgaben sind auch nicht ganz sinnvoll.
So ist es narürlich besser:

C++:
32   printf("\narray: ");
33   for (i = 0; i < ANZAHL; i++)    
34     printf("%i ", array[i]);



Nur arbeiten tut es noch nicht. Beide Ausgaben sind:

array: 1 7 8 6 11 2

array: 1 7 8 6 11 2

Das hier (Zahlentasch) ist auch Blödsinn:

C++:
13       hilf = *zeiger;
14       *zeiger++ = *zeiger;
15       *zeiger = hilf;



liege ich mit folg. Annahme richtig?:

C++:
13       hilf = *zeiger++;
/* erste Arrayelement (1) wird auf hilf "gesichert" und danach zeigt zeiger aufs nächste Arrayelement (2) */
14       --*zeiger = *zeiger;
/* (1) bekommt Wert von (2) */
15       ++*zeiger = hilf;
/* (2) bekommt den gesicherten Wert von (1) */

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.08.2005, 22:45 Uhr
itchy



Bestimmt nicht das Eleganteste aber nun funzts:


C++:
    7 void sortiere(int *zeiger) {
    8 int hilf, hilf2, position = 0;
    9
   10   while(position < ANZAHL-1) {
   11     hilf = *zeiger++;
   12     hilf2 = *zeiger;
   13     if (hilf > hilf2) {
   14       *zeiger = hilf;  
   15       zeiger--;
   16       *zeiger = hilf2;
   17       for(hilf = 0; hilf < position; hilf++)
   18         zeiger--;
   19       position = 0;
   20     }
   21     else  
   22       position++;
   23   }  
   24 }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.08.2005, 10:36 Uhr
(un)wissender
Niveauwart


Das Eleganteste ist std::sort.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.08.2005, 11:37 Uhr
itchy




Zitat von (un)wissender:
Das Eleganteste ist std::sort.



Es soll aber C statt C++ sein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.08.2005, 11:37 Uhr
(un)wissender
Niveauwart


Dann qsort
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.08.2005, 00:43 Uhr
~rene1
Gast


ne so funktioniert da nicht:
du willst ein element mit dem nächst niedrigerem vergleichen
aber sagen wir mal
du hast ein array von ints {1,2,3,4,5,6,7,8}
zeiger zeigt auf die eins
dann passiert folgendes:
if (*zeiger++ > *zeiger)
zeiger++ setzt zeiger auf 2,
dh. *(zeiger++) ist 2
und *zeiger ist auch 2 also kann diese abfrage nur true zurückliefern(möge mich einer verbessern wenn ich unrecht hab)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.08.2005, 00:45 Uhr
~rene1
Gast


kann auch sein dass ich prefix und postfix durscheinadner schmeisse
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: