Mit dieser Funktion habe ich noch Probleme. Und zwar habe ich hier
diesmal zwei Arrays die ich dieser Funktion übergebe.
Der Min Wert vom Vector1 wird immer ausgegeben. Der min Wert von
Vector2 ist bei mir immer 0. Woran liegt das?
void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen
der kleinsten Zahl
{
imerker_vector1= ivector1[0];
imerker_vector2= ivector2[0];
for(int i=0;i<iwerte;i++)
{
if (imerker_vector1>ivector1[i])
{
imerker_vector1=ivector1[i];
}
if (imerker_vector2>ivector2[i])
{
imerker_vector2=ivector2[i];
}
}
printf("min.Element Vector1:%2d min.Element
Vector2:%2d\n",imerker_vector1,imerker_vector2);
}
Selten so eine grausige Benutzung von nur globalen Variablen gesehen.
Das macht selbst das kleine Programm schon unleserlich. Programmier
ordentlicher, dann klappts auch fehlerfreier!
Ich dreh noch durch. Ich verstehe einfach nicht warum ich nicht zwei min
Werte angezeigt bekomme.
Hier in diesem Forum sind doch zahlreiche Cracks oder?
Was heisst da nicht ordentlich programmiert.
Ja wie kann ich den die globalen Variablen verhindern. Die brauche ich
doch bei mir.
Hier in diesem Forum wird nur drum herum geredet.Ok es gibt bestimmt
noch 1000 elegantere Varianten. Aber ich habe nunmal ein Problem mit
meinem C-Code.Ich will nur wissen warum ich keine zwei min Werte
angezeigt bekomme?
> Hier in diesem Forum wird nur drum herum geredet.
Selbstverständlich. Du glaubst doch wohl nicht, daß Du nach Deinem
Auftritt noch vernünftige Antworten bekommst. Meine konnte ich
jedenfalls noch rechtzeitig zurückziehen, da habe ich Glück gehabt. Und
damit ist hier für mich EOT.
"Ja wie kann ich den die globalen Variablen verhindern. Die brauche ich
doch bei mir."
Ja ne, ist klar.
Ein Beispiel: Du verwendest die imerker nur in einer einzigen Routine.
Aber klar, das geht natürlich nicht mit lokalen Variablen, wie auch.
Wie schon gesagt, mach deinen Code leserlicher, dann schauen sich das
bestimmt auch mehr Leute an, denn so ist und bleibt es unleserlich
So ich habe mal die Funktion MinElem folgendermasen angeändert:
void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen
der kleinsten Zahl
{
int imerker_vector1=0, imerker_vector2=0;
imerker_vector1= ivector1[0];
imerker_vector2= ivector2[0];
for(int i=0;i<iwerte;i++)
{
if (imerker_vector2>ivector2[i])
{
imerker_vector2=ivector2[i];
}
}
printf("min.Element Vector1:%2d\n",imerker_vector2);
}
Wenn ich die Funktion so ausführe, dann bekomme ich auch immer den Wert
0 vom Vector 2 zurück.
Verändere ich diese Funktion so wie unten, dann bekomme ich einen Min.
Wert vom Vector 1 angezeigt.
void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen
der kleinsten Zahl
{
int imerker_vector1=0, imerker_vector2=0;
imerker_vector1= ivector1[0];
imerker_vector2= ivector2[0];
for(int i=0;i<iwerte;i++)
{
if (imerker_vector1>ivector1[i])
{
imerker_vector1=ivector1[i];
}
}
printf("min.Element Vector1:%2d\n",imerker_vector1);
}
Wo kann denn da der Fehler sein?
Nachdem du den ersten vektor gespeichert hast. Geb dir doch mal den
Inhalt von Vektor 1 und 2 nach dem einlesen aus, dann wirst du es
wahrscheinlich sehen
Ja das mache ich doch schon.
Und zwar in Main nach den einlesen der Werte führe ich ja die Funktion
WriteVec() aus(siehe Quellcode im Anhang).
Ich kann da nix feststellen.
Ich habe diesen beiden Variablen von der Funktion MinElem() mal direkt
einen Wert vergeben:
imerker_vector1= 11;
imerker_vector2= 22;
Die For Schleife habe ich auskommentiert.
Die printf Funktion liefert mir dann auch die beiden Werte zurück.
Irgendwas stimmt mit den Vectoren nicht.
Es muss doch hier einen Crack geben, der mir genau sagen kann wo und wie
ich das Programm abändern muss, damit es läuft.
Ich kann ich noch 100 Stunden sitzen. Leider muss ich ja noch was
anderes tun.
Wenn ich ivector1[0]=55; in der Funktion einfüge und teste, dann erhalte
ich auch den min.Wert von Vector1.
Das vestehe ich absolut nicht.
void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen
der kleinsten Zahl
{
imerker_vector1= ivector1[0];
ivector1[0]=55; //zusätzlich eingefügt.
imerker_vector2= ivector2[0];
for(int m=0;m<iwerte;m++)
{
if (imerker_vector1>ivector1[m])
{
imerker_vector1=ivector1[m];
}
if (imerker_vector2>ivector2[m])
{
imerker_vector2=ivector2[m];
}
}
printf("min.Element Vector1:%2d min.Element
Vector2:%2d\n",imerker_vector1,imerker_vector2);
}
In einem anderen Forum wurde mir das hier vorgeschlagen.
int MinElem(int *a,size_t n){
int temp;
for(temp =*a++;--n;++a)
if(*a<temp)temp =*a;
return temp
}
Also das finde ich total unübersichtlich und vor allem verstehe ich das
nicht.
Bringt auch nix, der Fehler ist immer noch beim einlesen
schreib deine ausgaberoutine noch mal neu und dann schau mal was
wirklich in den vektoren drin steht
Mein Programm liest die Werte schon korrekt in die Vectoren ein.
Hab ich ja auch getestet.
Jetzt noch mal:
void MinElem(int* ivector1,int* ivector2) //Funktion zum feststellen
der kleinsten Zahl
{
ivector1[0]=99; //zusätzlich eingefügt.
ivector2[0]=99; //zusätzlich eingefügt.
imerker_vector1= ivector1[0];
imerker_vector2= ivector2[0];
for(int m=0;m<iwerte;m++)
{
if (imerker_vector1>ivector1[m])
{
imerker_vector1=ivector1[m];
}
if (imerker_vector2>ivector2[m])
{
imerker_vector2=ivector2[m];
}$
}
printf("min.Element Vector1:%2d min.Element
Vector2:%2d\n",imerker_vector1,imerker_vector2);
}
GENAU SO FUNKTIONIERT ES JA!!!!!!
"Mein Programm liest die Werte schon korrekt in die Vectoren ein."
Falsch
du beschreibst vektor1 ab position 1, aber vector 2 aber der länge von
vektor1
Achso hier muss ich die Variable i auf NULL setzte!?
printf("Vector1:\n");
for(int x=1; x<=iwerte;x++)
{
scanf("%2d",&izahl); //einlesen der Zahlen in einen Vector
ReadVec(izahl,1);
}
i = 0;
printf("Vector2:\n");
for(int x=1; x<=iwerte;x++)
{
scanf("%2d",&izahl); //einlesen der Zahlen in einen Vector
ReadVec(izahl,2);
}