azdr
Lieutenant
- Registriert
- Feb. 2005
- Beiträge
- 685
Hi
Ich habe da ein Problem bezüglich der Dynamischen Speicherverwaltung.
Wie stelle ich die Reservierung des Speichers bei 2 Dimensionalen Arrays mittels Strukturen an.
bzw. wie müsste ich das hier in meinem Programm umschreiben, ich hab mal was versucht aber ich bekomme ne Errormeldung raus. ("`FloatNumbers' in something not a structure or union ")
die relevanten Sachen sind rot makiert.
sonst funktioniert das Programm abgesehen von der Speicherverwaltung.
Ich habe da ein Problem bezüglich der Dynamischen Speicherverwaltung.
Wie stelle ich die Reservierung des Speichers bei 2 Dimensionalen Arrays mittels Strukturen an.
bzw. wie müsste ich das hier in meinem Programm umschreiben, ich hab mal was versucht aber ich bekomme ne Errormeldung raus. ("`FloatNumbers' in something not a structure or union ")
die relevanten Sachen sind rot makiert.
sonst funktioniert das Programm abgesehen von der Speicherverwaltung.
Code:
#include <stdio.h>
#include <stdlib.h>
enum
{
MAX=1000,
Generiere=0,
LeseSortiere=1
};
struct SortiereFloatZahlen
{[COLOR="Red"]
double *FloatNumbers[MAX];[/COLOR]
long Lenge;
};
struct SortiereFloatZahlen Floats[MAX];
[COLOR="Red"]long dynamische_speicher(struct SortiereFloatZahlen Floats[]);[/COLOR]
double GenerateFloat();
long ReadFile(struct SortiereFloatZahlen Floats[]);
long Sortiere (struct SortiereFloatZahlen Floats[],long y);
int main(int argc, char *argv[])
{
long y=0;
[COLOR="red"] dynamische_speicher(Floats);[/COLOR]
#if Generiere
GenerateFloat();
#endif
#if LeseSortiere
y=ReadFile(Floats);
Sortiere(Floats,y);
#endif
system("PAUSE");
return 0;
}
[COLOR="red"]long dynamische_speicher(struct SortiereFloatZahlen Floats[])
{
Floats.FloatNumbers=malloc( MAX*sizeof(int)); [B]--> FEHLERMELDUNG[/B]
if (Floats.FloatNumbers==NULL)
{
printf("Allozieren fehlgeschlagen");
}else printf("alloziert!!!");
}[/COLOR]
double GenerateFloat()
{
double zufall,erg;
long i,y=0,w=0,p=0,enter=0;
char ch[100];
double x[100];
FILE *datei;
datei=fopen("SORT.txt", "w");
do
{ p++;
enter++;
zufall=(rand()%100)+1;
erg=zufall/1.456;
printf("%.2lf, ",erg);
fprintf(datei,"%.2lf;",erg);
if(enter==4){fprintf(datei,"\n");enter=0;}
}while (p<15);
fclose(datei);
}
long ReadFile(struct SortiereFloatZahlen Floats[])
{
FILE *datei;
datei=fopen("SORT.txt", "r");
char zeichen[MAX],tmpz;
long y=0,x=1,lenge=0,z=0,LEERZ=0,i,pos,len=0;
//Ermittlung der Zeilenlenge
for (i=0;tmpz!=EOF;i++)
{
tmpz=fgetc(datei);
if (tmpz=='\n'){y++;x=1;}
if (tmpz==';')Floats[y].Lenge=x++;
}
fclose(datei);
x=0;
y=0;
datei=fopen("SORT.txt", "r");
do
{
if (Floats[y].Lenge==x){y++;z++;x=0;}
fscanf (datei,"%[^;]s ",&zeichen);
Floats[y].FloatNumbers[x]=atof(zeichen);
x++;
fseek(datei,1, SEEK_CUR);
}while(fscanf (datei,"%[^;]s ",&zeichen)!=EOF);
for (z=0;z<=y;z++)
{
printf("POS[%ld]:",z);
for (x=0;Floats[z].FloatNumbers[x]!=0;x++)
{
printf("%lg ",Floats[z].FloatNumbers[x]);
}
printf("\n");
}
return(y);
}
long Sortiere (struct SortiereFloatZahlen Floats[],long y)
{
long a=0,b=0,c=0,z=0,x=0;
double Zwischenspeicher= 0;
do
{
for (a=0;Floats[c].FloatNumbers[a]!=0;a++)
{
while(1)
{
for (b=0;Floats[z].FloatNumbers[b]!=0;b++)
{
if (Floats[c].FloatNumbers[a]>Floats[z].FloatNumbers[b])
{
Zwischenspeicher=Floats[c].FloatNumbers[a];
Floats[c].FloatNumbers[a]=Floats[z].FloatNumbers[b];
Floats[z].FloatNumbers[b]=Zwischenspeicher;
}
}
if (y==z) {z=0;break;}
z++;
}
}
c++;
}while(y+1!=c);
printf("\n\nSORTIERT\n");
for (z=0;z<=y;z++)
{
printf("POS[%ld]:",z);
for (x=0;Floats[z].FloatNumbers[x]!=0;x++)
{
printf("%lg ",Floats[z].FloatNumbers[x]);
}
printf("\n");
}
}