Funktion MinElem funktioniert nicht

Gast #250735
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);
}
Angehängte Dateien:
Gast #250741
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?
#250742
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.
Persönliche Seite #250743
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
Gast #250744
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?
Gast #250753
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.
Gast #250755
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.
Gast #250756
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);
}
Gast #250757
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.
Gast #250759
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!!!!!!
Gast #250763
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);
 }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren