Seite 1 von 1

Arrays

Verfasst: Mi Feb 11, 2009 9:10 pm
von soufian88
Hallo Allerseits,

Ich habe eine folgende Frage:

Erstes Programm:

Code: Alles auswählen

#include <stdio.h>
 
#define ANZAHL 50
 
int main()
{
  int eingaben[ANZAHL], i;
 
  for (i = 0; i < ANZAHL; i++)
    eingaben[i] = 0;  /* jedes Element mit 0 initialisieren */
 
  for (i = 0; i < ANZAHL; i++) /* Werte einlesen */
  {
    printf ("%d. Element: ", i);
 
   scanf ("%d", &eingaben[i]);

 if (eingaben[i] == 0)
    {
      printf ("\n--------- Ihre Eingabe: ---------\n");  /* dann schaut es übersichtlicher aus */
      break; /* bei 0 die Schleife abbrechen */
    }
   }
 
  for (i = 0; i < ANZAHL; i++) /* Werte ausgeben */
  {
    if (eingaben[i] != 0)          /* nur dann, wenn der Wert nicht Null ist, diesen ausgeben */
      
    printf ("%d. Element: %d\n", i, eingaben [i]);
    else                                                 /* ansonsten Schleife abbrechen */
      break;
    } 
 
  return 0;
}

Der untere Abschnitt ist eigentlich überflüssig oder ?

Das sind die Zeilen:

Code: Alles auswählen

for (i = 0; i < ANZAHL; i++) /* Werte ausgeben */
  {
    if (eingaben[i] != 0)          /* nur dann, wenn der Wert nicht Null ist, diesen ausgeben */
      
    printf ("%d. Element: %d\n", i, eingaben [i]);
    else                                                 /* ansonsten Schleife abbrechen */
      break;
    } 
 
  return 0;
}
denn mit Dem Programm soll der Benutzer 50 Elemente eingeben und bei Eingabe 0 bricht das Programm ab.
und deswegen kann man doch den Programm ohne den unteren Abschnitt kompilieren oder ?
Denn würde es so aussehen:

Zweites Programm:

#

Code: Alles auswählen

include <stdio.h>
 
#define ANZAHL 50
 
int main()
{
  int eingaben[ANZAHL], i;
 
  for (i = 0; i < ANZAHL; i++)
    eingaben[i] = 0;  /* jedes Element mit 0 initialisieren */
 
  for (i = 0; i < ANZAHL; i++) /* Werte einlesen */
  {
    printf ("%d. Element: ", i);
 
   scanf ("%d", &eingaben[i]);

 if (eingaben[i] == 0)
    {
      printf ("\n--------- Ihre Eingabe: ---------\n");  /* dann schaut es übersichtlicher aus */
      break; /* bei 0 die Schleife abbrechen */
    }
   }
Hier finde ich das ist es die gleiche Wirkung hat und bei Eingabe 0 bricht das auch ab.

Und jetzt zu meine Frage hat Das erste Programm die Gleichen Wirkungen wie das Zweite und sind da etwa winzige Unterschiede bzw Vorteile/Nachteile ?

Mfg soufian

Re: Arrays

Verfasst: Mi Feb 11, 2009 10:07 pm
von Xin
Du brichst die Schleife nicht ab => Du prüfst jedes Element, obwohl keine Elemente mehr kommen können.

Optimal wäre dies:

Code: Alles auswählen

for (i = 0; eingaben[i] && i < ANZAHL; i++) /* Werte ausgeben */
    printf ("%d. Element: %d\n", i, eingaben [i]);
Bitte rücke anständig ein (wichtig, ich habe keine Lust mir das zurechtzureimen) und stelle präzise Fragen.
soufian88 hat geschrieben:Der untere Abschnitt ist eigentlich überflüssig
Ich muss erst rausfinden, was "der untere Abschnitt" sein soll. Bitte präziser, okay?

Re: Arrays

Verfasst: Mi Feb 11, 2009 10:15 pm
von soufian88
Ich muss erst rausfinden, was "der untere Abschnitt" sein soll. Bitte präziser, okay?
Ist die Frage nicht Präsize genug ?
(Und jetzt zu meine Frage hat Das erste Programm die Gleichen Wirkungen wie das Zweite und sind da etwa winzige Unterschiede bzw Vorteile/Nachteile ? )



Das ist der untere abschnitt:

Code: Alles auswählen

for (i = 0; i < ANZAHL; i++) /* Werte ausgeben */
  {
    if (eingaben[i] != 0)          /* nur dann, wenn der Wert nicht Null ist, diesen ausgeben */
     
    printf ("%d. Element: %d\n", i, eingaben [i]);
    else                                                 /* ansonsten Schleife abbrechen */
      break;
    }

  return 0;
}

Re: Arrays

Verfasst: Mi Feb 11, 2009 10:17 pm
von Xin
soufian88 hat geschrieben:
Ich muss erst rausfinden, was "der untere Abschnitt" sein soll. Bitte präziser, okay?
Ist die Frage nicht Präsize genug ?
Zumindest meine Intellenz reichte nicht, um sofort zu sehen, dass Du Code redundant postest.
soufian88 hat geschrieben:(Und jetzt zu meine Frage hat Das erste Programm die Gleichen Wirkungen wie das Zweite und sind da etwa winzige Unterschiede bzw Vorteile/Nachteile ? )
Die Antwort steht bereits da ^^

Re: Arrays

Verfasst: Mi Feb 11, 2009 10:22 pm
von soufian88
Bitte rücke anständig ein (wichtig, ich habe keine Lust mir das zurechtzureimen) und stelle präzise Fragen.
Was meinst du dann mit den Satz :?: :?:

Re: Arrays

Verfasst: Do Feb 12, 2009 11:10 am
von fat-lobyte
soufian88 hat geschrieben:Und jetzt zu meine Frage hat Das erste Programm die Gleichen Wirkungen wie das Zweite und sind da etwa winzige Unterschiede bzw Vorteile/Nachteile?
Nein, das ist nicht das gleiche. Stell dir vor, du gibst nicht 50 Werte ein, sondern nur 20. Die obere Version bricht korrekterweise bei 20 ab, die untere erst bei 50 und zeigt vorher 30 mal 0 an.
Allerdings würde ich auch nicht die obere Version wählen, sondern nach der ersten schleife die Zählvariable abspeichern (in eine neue variable, sagen wir "anz_eingegeben") und dann in der Zweiten Schleife nicht auf 0 Prüfen sondern sie einfach nur bis "anz_eingegeben" laufen lassen, und nicht bis "ANZAHL".
Verstehst du was ich meine? Das würde nämlich Laufzeit sparen (in eine Schleife gehört so wenig wie möglich!!!), und etwas eleganter sein.
Ich hoffe ich hab mich da nicht verschaut...
soufian88 hat geschrieben:
Bitte rücke anständig ein (wichtig, ich habe keine Lust mir das zurechtzureimen) und stelle präzise Fragen.
Was meinst du dann mit den Satz :?: :?:

Code: Alles auswählen

Er
    meint
        damit
            du sollst
            deine 
        Tabulatoren
    richtig
setzen.
Bitte verwende Statt Tabulatoren eine bestimmte anzahl von Leerzeichen (ich empfehle 2-4). Dein Editor, sofern er fürs Programmieren geeignet ist, wird eine Einstellung haben, die das Automatisch erledigt.

Re: Arrays

Verfasst: Do Feb 12, 2009 7:06 pm
von soufian88
Ja ist schon etwas klar geworden. ;)