melisa88
Goto Top

sortieren in c

Ich habe hier einen fehler aber weiß nicht wo genau? aber ich vermute es ist in der erste Zeile

...
while(sort[x] == strlen(sort))
{

while(sort[x] != '\0')
{
x++;

if(sort[i] > sort[i+1])
{
char i;
i = sort[x];
sort[x] = sort[x+1];
sort[x+1] = i;
sotieren(&sort[i+1], &sort[i]);
}
}

}
...

Content-ID: 95494

Url: https://administrator.de/contentid/95494

Ausgedruckt am: 20.11.2024 um 09:11 Uhr

filippg
filippg 27.08.2008 um 22:51:01 Uhr
Goto Top
Hallo,

finden wir ja alle traurig, dass du da ein Problem hast.
Aber meine Glaskugel habe ich schon in die Schreibtischschublade geräumt. Und so weiß ich leider gar nicht, wie sich der Fehler äußert. Und was die Funktion tuen soll kann man ja noch raten (nie ganz ungefährlich), aber Angabe zu Datentypen etc wäre schon auch nett gewesen.

Gruß

Filipp
kristov
kristov 28.08.2008 um 07:57:06 Uhr
Goto Top
Zitat von @filippg:
Hallo,

finden wir ja alle traurig, dass du da ein Problem hast.
Aber meine Glaskugel habe ich schon in die Schreibtischschublade
geräumt. Und so weiß ich leider gar nicht, wie sich der
Fehler äußert.
ein in c geübter Mensch könnte das Problem rauslesen.

Und was die Funktion tuen soll kann man ja
noch raten (nie ganz ungefährlich), aber Angabe zu Datentypen etc
wäre schon auch nett gewesen.
Ich glaub, einen anderen Beitrag von melisa88 gelesen zu haben, wo's um bubblesort ging. Lt. jenem Beitrag und dem Titel dieses Beitrags geht's um c

Aber Du hast Recht, ausführlicher hätt's schon sein dürfen face-wink


Gruß

Filipp
pulse
pulse 28.08.2008 um 08:35:19 Uhr
Goto Top
while(sort[x] == strlen(sort))

sort[x] gibt dir doch einen Char zurück und strlen(sort) die länge
von daher ist diese schleife eigentlich unsinn aus meiner sicht. vielleicht irre ich mich auch, bin grad aufgestanden und noch beim ersten kaffee

ich hatte mal für einen kumpel ne rekursive bubblesort funktion geschrieben.
string sortiere_rekursiv(string& zeichenkette, int length)
{
	int durchlauf = 0;
	unsigned char temp;

	for(int index = 0; index < (length - 1); index++)
	{
		if(zeichenkette[index] > zeichenkette[index + 1])
		{
			temp = zeichenkette[index];
			zeichenkette[index] = zeichenkette[index + 1];
			zeichenkette[index + 1] = temp;
			durchlauf++;
		}
	}
	if(durchlauf != 0) sortiere_rekursiv(zeichenkette, length);

return zeichenkette;
}

Vielleicht bringt die dich ja auf den richtigen Schritt. da die klasse string benutzt wird, die für c++ bestimmt ist, musst du da wohl umbauen
melisa88
melisa88 28.08.2008 um 20:31:03 Uhr
Goto Top
Also nett von euch aber ich dachte mit diese Quellcode könnte man schon was anfangenface-sad Mein ganze Programm sieht so aus:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>


void sotieren(char *bs1, char *bs2)
{
char sort;

sort = *bs1;
*bs2 = sort;
*bs1 = *bs2;
}

int main(int argc, char* argv)
{
char sort[50];
int x=0;
int i=0;

FILE *datei;

datei = fopen("Test.txt","r"); öffnet den Datei zum lesen

if(datei == NULL)
überprüft ob der Datei richtig ausgeführt wurde
{
printf("Dateifehler");
}

printf("Gegen Sie Buchstaben ein: ");
fgets(sort, 50, datei);

while(sort[x] == strlen(sort))
{

while(sort[x] != '\0')
{
x++;

if(sort[i] > sort[i+1])
{
char i;
i = sort[x];
sort[x] = sort[x+1];
sort[x+1] = i;
sotieren(&sort[i+1], &sort[i]);
}
}

}
printf("\n%s", x);
gets(sort);


datei = fopen("test.txt", "a");
wird neu angelegt, wenn die Datei noch nicht existiert
fputs(sort, datei);
fclose(datei); //schließt den Datei

return 0;
}
filippg
filippg 28.08.2008 um 21:38:31 Uhr
Goto Top
Schön.
Fehlt nur noch die Fehlerbeschreibung.
Ich würde trotzdem auf die Zeile while(sort[x] == strlen(sort)) als Fehler tippen. strlen() gibt die Länge einer Zeichenkette, oder? sort[x] wiederum liefert ein char. Du vergleichst also einen char mit einem integer, oder? Das macht m.E. in den meisten fällen keinen Sinn...

Gruß

Filipp
melisa88
melisa88 29.08.2008 um 18:07:14 Uhr
Goto Top
Genau meine ich ja auch esface-sad Ich weiß selber, dass es keinen Sinn ergibt aber ich weiß grad nicht wie ich anders schreiben soll. Das Programm soll ja die unsortierte Buchstaben in dem Textdatei sortieren. Kannst du ein Vorschlag geben wie ich es am besten schreiben kann?

Schööne Grüße

Melisa
filippg
filippg 29.08.2008 um 20:25:42 Uhr
Goto Top
"Mit Verlaub her Präsident: Sie sind ein ###."

Als ich deinen Beitrag gesehen hab war mir klar: Da sollte man nicht antworten. Wer zu faul ist zu beschreiben, was er überhaupt machen will, der braucht auch keine Hilfe.

Bei deinem nächsten Beitrag schreibe gefälligst klar und deutlich das Ziel, die Rahmenbedingungen, deine Lösungsvorstellung, die Fehlersymptome und was du schon ausprobiert hast (mit welchem Erfolg).

Gruß

Filipp
Guenni
Guenni 30.08.2008 um 11:08:50 Uhr
Goto Top
Hi melisa,

der Ansatz . . .

if(sort[i] > sort[i+1])
{
char i;
i = sort[x];
sort[x] = sort[x+1];
sort[x+1] = i;
. . .

. . . ist ja schonmal ganz gut, ich frag' mich bloß, warum du anschließend
noch eine Funktion aufrufst, die das Gleiche nochmal durchführt??

Die Abbruchbedingung in der while-Schleife muß prüfen, ob ein
weiterer Durchlauf erforderlich ist, deine if-Bedingung packst du
in eine for-Schleife, die die Textzeile Zeichen für Zeichen prüft.
Das nachfolgende Script ist jetzt mal PHP, macht aber nix, PHP und
C(C++) sind ja eng verwandt, daher dürfte es dir ja nicht schwer fallen,
das Script anzupassen.

<?
$nochmal = TRUE;
$text = "hfjgkHlKJJJLjljWQAsdgdhf";  

echo "Unsortiert: ".$text."<br>";  

/*
Die while-Schleife läuft, solange $nochmal TRUE ist
*/
while($nochmal){
/*
Wir nehmen an, die Textzeile ist sortiert, und setzen $nochmal
einfach mal auf FALSE, damit die Schleife nicht ewig und drei Tage läuft.
*/
 $nochmal=FALSE;
/*
Hier klappern wir die Textzeile Zeichen für Zeichen bis zum vorletzten Zeichen
ab . . . 
*/
 for($i=0;$i < strlen($text)-1;$i++){
/*
. . .  und fragen, gemäß deinem Ansatz, ab ob das Zeichen[i] größer ist, als
das Zeichen[i+1] . . .
*/
  if($text[$i] > $text[$i+1]){
/*
. . . tauschen die beiden aus, wenn dem so ist . . .
*/
	 $temp = $text[$i];
	 $text[$i] = $text[$i+1];
	 $text[$i+1] = $temp;
/*
. . . und setzen $nochmal auf TRUE, damit die while-Schleife weiterläuft.
Wenn das Ergebnis der if-Bedingung nicht mehr zutrifft, bleibt $nochmal
einfach FALSE(s.o.), die while-Schleife wird beendet und die Textzeile ist sortiert.
*/
	 $nochmal = TRUE;
	}
 }
}

echo "Sortiert: ".$text;  
?>

Gruß
Günni
melisa88
melisa88 30.08.2008 um 18:06:00 Uhr
Goto Top
Hey hey ich habe nichts gemacht und versucht allein zu machen aber konnte nicht und dachte wenn ich in diesem Forum schreibe könnte ich vielleicht einen Antwort darauf bekommen aber solche leute wie du nein danke!!! Ich will bestimmt keinen Antwort von dir haben Mr. Filippg. Ok wenn du sagst dass ich faul bin dann soll es so sein von mir aus aber ich habe neu angefangen zu programmieren:/
melisa88
melisa88 30.08.2008 um 18:25:41 Uhr
Goto Top
Danke Günni für die Programm. Ich habe neu angefangen mit C bzw. C++ zu programmieren ist halt normal, dass man manchmal nicht weiter kommen kann aber leider verstehen manche leute es nichtface-sad
filippg
filippg 30.08.2008 um 19:40:02 Uhr
Goto Top
Hallo Melisa,

in dem Forum hier finden sich viele hilfsbereite Leute, von denen auch die meisten Verständnis für "Anfägerfragen" haben. Was sich in dem Forum nicht findet sind Wahrsager.
Viele sind ausgebildete IT-ler, die im Alltag entsprechende Stundensätze bekommen. Hier verschenken sie ihr Wissen. Das wenigste, was man von fragenden dafür erwarten kann, ist das sie sich Mühe geben. Nur einen Codehappen hinzuwerfen und zu sagen "funktioniert nicht" ist ganz einfach eine Unverschämtheit.

Bei deinem nächsten Beitrag schreibe gefälligst klar und deutlich das Ziel, die
Rahmenbedingungen, deine Lösungsvorstellung, die Fehlersymptome und was du schon ausprobiert > hast (mit welchem Erfolg).
Das ist mit der Mühe, die sich fragende geben sollen gemeint. Und dabei bleibe ich.

Filipp
melisa88
melisa88 31.08.2008 um 18:15:48 Uhr
Goto Top
Tut mir echt leid. Jetzt weiß ich wenigstns bescheid, was ich bei meiner nächsten Beitrag machen muss.
Danke und Entschuldigung Filippface-sad