Computerhilfen.de Logo
Forum
Tipps
News

C-Sortierung

Hallo!

Ich habe ein kleines Problem und finde meinen Fehler nicht. Ich wollte nur ein Array mit 100 Zahlen sotieren und es mir anschließend ausgeben lassen. Dafür habe ich bubblesort gewählt, aber mir wird folgender Fehler angezeigt:

C:\Programme\Microsoft Visual Studio\MyProjects\Übung\main.cpp(12) : error C2664: 'bubblesort' : Konvertierung des Parameters 2 von 'int' in 'int []' nicht moeglich
        Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
Fehler beim Ausführen von cl.exe.

Übung.exe - 1 Fehler, 0 Warnung(en)

Meine kleine Header-Datei:
------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

extern void bubblesort(int n, int array[100]);
------------------------------------------------------
Meine Bubblesort-Datei:
------------------------------------------------------
#include "header.h"

void bubblesort(int n, int array[100])
   {
   int i, k, t;

   for( i = n-1; i > 0; i--)
      {
      for( k = 0; k < i; k++)
         {
         if(array[k] > array[k+1])
            {
            t = array[k];
            array[k] = array[k+1];
            array[k+1] = t;
            }
         }
      }
   }
------------------------------------------------------
Und nun noch meine Main:
------------------------------------------------------
#include "header.h"

int main()
{
int n;
int array[100];
   for(n=0; n<100; n++)
   {
   printf("Bitte geben Sie eine Zahl ein: ");
   scanf("%d",array[n]);
   }
bubblesort(n,array[100]);

for(n=0; n<100; n++)
   {
   printf("%d",array[n]);
   }

}
------------------------------------------------------

Wäre lieb, wenn mir jemand helfen könnte :-[!

Mit freundlichen Grüssen
                          Daniel


Antworten zu C-Sortierung:

Meine erste Anmerkung bezieht sich auf die übergabe. Das ganze wird doch Call by Value übergeben, du setzt aber voraus, das die Übergabe Call by Reference ist. Oder liege ich da falsch. Es war doch immer so in C das referenzen mit dem "&"-Zeichen in der Methodendeklaration versehen werden mussten.
D.h. bei der Ausgabe wirst du dein unsortiertes Array herausbekommen statt dein gewünschtes sortiertes.
 Das ist das erste.


Und zweitens solltest du nicht array[100] an bubblesort zu übergeben sondern nur array. WEnn du array[100] schreibst übergibst du nur das 101.ste Element, was ein int ist (und zudem noch nicht mal bei dir existiert, da die Zählweise von 0-99 für hundert Elemente ist). Und der Compiler meckert, da ein int kein int[] (Array) ist. Das ist die Lösung.

Viel Spass beim Korrigieren.

Grüsse Torsten

« Letzte Änderung: 06.10.04, 15:44:56 von torsch2711 »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hallo!

Ersteinmal danke für die super schnelle Antwort, habe nun an Bubblesort nur noch bubblesort(n, array) übergeben und prompt zwei neue Fehler:

Linker-Vorgang läuft...
LIBCD.lib(wincrt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _WinMain@16
Debug/Übung.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

Übung.exe - 2 Fehler, 0 Warnung(en)

Irgendwie stehe ich ganz schön auf der leitung befürchte ich.

Mit freundlichen Grüssen
                        Daniel

Nun ich würde mal schätzen, dies liegt an deiner Header Datei. Du deklarierst die Methode Bubblesort als extern. Musst du dies als extern deklarieren? I

Ist das überhaupt eine oder zwei klassen die du da hast eine für main eine für bubblesort?

Er hat probleme beim verlinken über die Header datei, würde ich schätzen, bin jetzt aber nicht so der C -Guru. Ist ausserdem schon etwas länger her das ich in C was gecoded hab ;)

« Letzte Änderung: 06.10.04, 16:10:59 von torsch2711 »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi!

Nun in der Header muß ich es irgendwie deklarieren, egal ob über extern oder nur so, der Fehler bleibt der Gleiche. Aber trotzdem nochmals besten Dank!

Hifesuchend
           Daniel

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hilfe!

Hier nochmal mein Programm, dieses mal alles in einer datei, damit es übersichtlicher bleibt:
------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

void bubblesort(int n, int array[100])
   {
   int i, k, t;

   for( i = n-1; i > 0; i--)
      {
      for( k = 0; k < i; k++)
         {
         if(array[k] > array[k+1])
            {
            t = array[k];
            array[k] = array[k+1];
            array[k+1] = t;
            }
         }
      }
   }

void main()
{
int n;
int array[100];
   for(n=0; n<100; n++)
   {
   printf("Bitte geben Sie eine Zahl ein: ");
   scanf("%d",array[n]);
   }

bubblesort(n,array);

for(n=0; n<100; n++)
   {
   printf("%d",array[n]);
   }

}
------------------------------------------------------

Die Fehlermeldung ist:

Linker-Vorgang läuft...
LIBCD.lib(wincrt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _WinMain@16
Debug/Übung.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

Übung.exe - 2 Fehler, 0 Warnung(en)

Damit bricht das Programm ab und sotiert nicht wie erhofft.

Mit freundlichen Grüssen
                         Daniel

Der sucht eine Funktion namens WinMain.
Das ist der Einsprungspunkt in jede Win32-Applikation, es sei denn, man will eine Konsolenapplikation. Das musst du dann aber auch in den Projekteinstellungen angeben...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Danke Gast ;D! Das war wohl mein Hauptfehler hatte mein Projekt nicht in Konsolenanwendung geschrieben, hatte eine etwas zu lange Programmierpause gemacht. Nun habe ich nur noch das Problem, das mein Code nicht richtig ausgeben wird, alles andere funktioniert wie gewünscht.

Es wird nicht mein sotiertes Array ausgegeben sondern irgend ein wilder Speicherbereich, ich befürchte mein Zeiger deutet mal wieder auf einen falschen Bereich?
------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

void bubblesort(int n, int array[5])
   {
   int i, k, t;

   for( i = n-1; i > 0; i--)
      {
      for( k = 0; k < i; k++)
         {
         if(array[k] > array[k+1])
            {
            t = array[k];
            array[k] = array[k+1];
            array[k+1] = t;
            }
         }
      }
   }

void main()
{
int n;
int array[5];
   for(n=0; n<5; n++)
   {
   printf("Bitte geben Sie eine Zahl ein: ");
   scanf("%d",array[n]);
   }

bubblesort(n,array);

for(n=0; n<5; n++)
   {
   printf("%d",&array[n]);
   }

}

« Letzte Änderung: 07.10.04, 00:10:04 von Draglan »

So ganz schnell würde ich mal folgendes Ändern:

scanf("%d",array[n]);

in

scanf("%d",&array[n]);

und

printf("%d",&array[n]);

in

printf("%d",array[n]);


( Aber wenn das jetzt nicht stimmt, liegts wohl am frühen Morgen ;-) )

Nun ja, das war das was ich auch mit Call by Reference und Call by Value meinte. Du musst ausserdem an deine Funktion Bubblesort ein Call by Reference sprich &array übergeben, da du ja deinen Array, auch später wieder sortiert ausgegeben haben willst, nicht wahr?

Grüsse

Torsten

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Besten Dank  8)!

Nun funktioniert mein Programm so wie ich es mir gewünscht habe. Nur bei solchen Kleinigkeiten liegen bei mir einfach die absoluten Probleme. Ich vergesse immer irgendwelche & Zeichen ; oder dergeleichen, gibt es da irgend einen Tipp wie man diese Feinheiten beachten lernt, oder einfach nur durch Übung?

Mit freundlichen Grüssen
                               Daniel  

Nun ja, einen allgemein gültigen Tipp gibts da nicht, dass kann immer passieren und du sitzt vor dem Code und denkst was stimmt da nicht, weil du es einfach überliest.

Aber ich meine, jetzt weisst du das nächste mal, worauf Du achten musst und sollst. Ansonsten immer mal hier nachfragen, dann hilft dir bestimmt jemand weiter.

Ansonsten nur weiter so. Immer am Ball bleiben und sich durch solche kleinigkeiten entmutigen lassen.

Grüsse

Torsten


« Java compilierenJAVA Hilfe »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!