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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.