Forum: PC-Programmierung Funktion MinElem funktioniert nicht


von Klemens (Gast)


Angehängte Dateien:

Lesenswert?

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);
}

von Klemens (Gast)


Lesenswert?

Kann dazu keiner was sagen?

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

"Woran liegt das?"
Jedenfalls nicht an dem geposteten Code

von René K. (king)


Lesenswert?

Ja, ein wirklich schreklicher Chat hier. Schon 40 Minuten vergangen, und
keiner kennt die Lösung.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Selten so eine grausige Benutzung von nur globalen Variablen gesehen.
Das macht selbst das kleine Programm schon unleserlich. Programmier
ordentlicher, dann klappts auch fehlerfreier!

von Klemens (Gast)


Lesenswert?

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?

von Klemens (Gast)


Lesenswert?

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?

von René K. (king)


Lesenswert?

> 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.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

"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

von Klemens (Gast)


Lesenswert?

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?

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Dein Fehler liegt imo bei der variable i. Die setzt du nicht zurück..

von Klemens (Gast)


Lesenswert?

Hi Tobi vielen Dank für den Tipp.

Ja wo genau müsste ich diese Variable i zurücksetzen?

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

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

von Klemens (Gast)


Lesenswert?

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.

von Klemens (Gast)


Lesenswert?

Ich sehe da nichts auffälliges. Ich verzweifle noch.Ich finde den Fehler
nicht.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

doch, es ist genau der Fehler, den ich schon sagte, nur ist dein
WriteVec genauso verbuggt :)

von Klemens (Gast)


Lesenswert?

Hmmm...ok ich kann es jetzt verstehen.Wie könnte man die beiden
Funktionen verbessern?

von Klemens (Gast)


Lesenswert?

Ich bekomme es noch als nicht hin.
Bitte bitte helft mir. Ich muss bis morgen das Programm zum laufen
bringen.

von Klemens (Gast)


Lesenswert?

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.

von Klemens (Gast)


Lesenswert?

grrrrrrrrrrrrrrrrrrrrrr.....

von Klemens (Gast)


Lesenswert?

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.

von Klemens (Gast)


Lesenswert?

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);
}

von Klemens (Gast)


Lesenswert?

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.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

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

von Klemens (Gast)


Lesenswert?

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!!!!!!

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

"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

von Klemens (Gast)


Lesenswert?

Ja und wie würdest du das machen bzw. programmieren? Ich stehe auf dem
Schlauch.

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

wie ich schon sagte, einfach i zwischen den beiden einlese schritten
wieder auf 0...

von Klemens (Gast)


Lesenswert?

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);
 }

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Sag du es mir. Funktioniert es? Die Ausgabe wird jetzt falsch sein aber
klappt das Min-Suchen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.