ups das return 0;
und die eine eckige klammer hab ich jetzt vergessen rüberzukopieren...
ups das return 0;
und die eine eckige klammer hab ich jetzt vergessen rüberzukopieren...
okay also das ist das programm: (den algorithmus zum sortieren hab ich mal weggelassn der ist dafür denk ich eh mal unrelevant...)
main()
{
// Deklarieren der Variablen
int anzahl;
int i;
int j;
char eingabe;
double elemente;
double* feld = malloc(anzahl*sizeof(double));
double* hilfsfeld = malloc(anzahl*sizeof(double));
printf("\nDieses Programm sortiert die Elemente eines Feldes in aufsteigender bzw. \n absteigender Reihenfolge.\n\n");
// Eingabe der Elemente
printf("\nGeben Sie die zu sortierenden Elemente - durch Leerzeichen getrennt - ein. \n (Eingabe bitte mit Entertaste beenden!) \n\n");
// do-while Schleife, weil solange Elemente eingegeben werden, bis die Entertaste gedrueckt wird
do
{
scanf("%lf", &elemente);
// Das Feld wird vergroessert, damit die naechste Zahl eingelesen werden kann
feld = realloc(feld, (anzahl+1)*sizeof(double));
feld[anzahl] = elemente;
anzahl++;
}
while (getchar() != '\n');
// Auswahl, ob die Sortierung in aufsteigender Reihenfolge erfolgen soll
printf("\n\nWollen Sie die Elemente aufsteigend sortieren? (j/n) ");
scanf("%s", &eingabe);
if (eingabe == 'j')
{
// Funktionsaufruf
mergesort(feld, hilfsfeld, 0, anzahl-1);
// Ausgabe des sortierten Feldes
printf("\nDas sortierte Feld: \n");
for (i=0; i < anzahl; i++)
{
printf("\n%lf \n", feld[i]);
}
printf("\n");
}
else
{
if (eingabe == 'n')
{
// Funktionsaufruf
mergesort(feld, hilfsfeld, 0, anzahl-1);
// Ausgabe des sortierten Feldes (in umgekehrter Reihenfolge)
printf("\nDas sortierte Feld: \n");
for (i = anzahl-1; i >= 0; i--)
{
printf("\n%lf \n", feld[i]);
}
printf("\n");
}
}
// reservierten Speicherplatz freigeben
free(feld);
feld = NULL;
free(hilfsfeld);
hilfsfeld = NULL;
ja aber ich hab das ja schon ganz unten stehen!
also ganz am ende vom programm
darunter steht dann nur noch return 0;
das programm tut ja auch alles was es tun muss, nur halt, dass dann wenn es fertig is diese fehlermeldung ausspuckt...
Hallo!
Ich hab nochmal ein Problem mit dem dynamischen speicher!!
Ich hab jetzt mein programm frtig und es funktioniert auch
nur nachdem das programm alles getan hat was es tun soll (brav brva *gg*)
kommt die fehlermeldung: "Segmentation fault"
Und ich bin draufgekommen wieso
weil am ende des programms hab ich
free(feld)
feld = NULL;
free(hilfsfeld)
hilsfeld = NULL;
stehen...
Da smuss ich ja (also den speicherplatz wieder freigeben)
Wenn ich den nämlich weglas kommt die fehlermeldung nicht, aber ich kann das ja nicht einfach weglassen oder?!
na ja ich muss in C programmieren
mit C++ kenn ich mich gar nicht aus
Danke
eine Frage hätte ich noch:
GIbt es in C einen Befehl wie man ein Feld umdrehne kann?
also dass dann statt 1,2,3 dann 3,2,1 ausgegeben wird?!
Oder muss man das in einer Funktion schreiben?!
Wieübergeb ich das richtig als parameter?!
weil das feld und so ist in der main funktion deklariert und das hilfsfeld brauche ich in einer eigenen Funktion...
Ich habe ein Feld dynamisch programmiert: (in der main funktion)
FILE* fid;
fid = fopen(datei, "r");
if (fid == NULL)
{
printf("\n Datei konnte nicht geoeffnet werden!");
}
for (anzahl = 0; fscanf(fid, "%d", &tmp) != EOF; anzahl++);
fclose(fid);
double* feld = malloc(anzahl*sizeof(double));
Für mein Programm brauche ich aber ein Hilfsfeld in einer Funktion
Das Hilfsfeld soll eben die selbe Größe wie das vom feld haben nur wie mach ich das?!
Ich habe ein Problem.
also eine gegebenen Matrix wird in eine Datei geschrieben.
Dass die Datei erstellt wird habe ich geschafft nur beim reinschreiben der matrix habe ich ein paar probleme.
was ich bis jetzt habe:
% Die Dimension (Groesse) der gegebenen Matrix wird ermittelt.
[m,n] = size(matrix);
% Abspeichern der Matrix
fprintf(fid, '%3.3f', m);
fprintf(fid, '%3.3f', n);
% Die Koeffizienten werden Spalte fuer Spalte in die Datei geschrieben
for c = 1:n
for d = 1:m
fprintf(fid, '%3.3f', matrix(c,d));
end
end
Beim Ausprobieren steht zwar dass es erfolgreich abgepeichert wurde, nur wenn ich die datei öffne steht was anderen drinnen als die matrix!
Was kann hier nicht stimmen?!
Muss bis Dienstag ein Programm fertig haben, dass eine Untermatrix abspeichert.
"Die Koeffizienten einer m x n Matrix sollen in einer Datei mit Direktzugriff gespeichert werden und zwar eine Spalte nach der anderen (erster Feld-Index variiert schneller als der zweite.
Man entwickle zwei Funktionen:
1. Abspeichern einer gegebenen Matrix in einer (neu zu erstellenden) Datei (wie oben beschrieben)
2. Einlesen einer beliebigen "Untermatrix" (d..h. eines beliebigen rechteckigen Ausschnittes, der wieder einer m' x n' Matrix entspricht, m' <= m, n' <= n) von einer solchen Datei und Abspeichern dieser Untermatrix in einem entsprechend dimensionalen Feld. Dabei soll nicht die ganze m x n Matrix eingelesen werden. Einzelne Koeffizienten, einzelne Spalten oder Zeilen stellen zulässige Spezialfälle solcher Untermatrizen dar.
Programmtyp: Matlab-Funktion, nicht rekursiv
eingangsparameter: 1. die betreffende Matrix, der dateiname und ein status indikator, der Probleme beim Dateizugriff, unzulässige Dimensionsangaben etc anzeigt.
2. dateiname, die Index.Information, die die gewünscht Untermatrix identifizieren und ein Status-Indikator.
ausgangsparameter:
1. status indikator
2. untermatrix und der status-Indikator"
Ich weiß das war jetzt viel *g* Nur mein großes Problem ist: Wie speicher ich die Matrix in einer datei mit direktzugriff?!?!
Danke