Arrays

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Arrays

Beitrag von soufian88 » Mi Feb 11, 2009 9:10 pm

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
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8861
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Arrays

Beitrag von Xin » Mi Feb 11, 2009 10:07 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Arrays

Beitrag von soufian88 » Mi Feb 11, 2009 10:15 pm

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;
}
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8861
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Arrays

Beitrag von Xin » Mi Feb 11, 2009 10:17 pm

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 ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Arrays

Beitrag von soufian88 » Mi Feb 11, 2009 10:22 pm

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 :?: :?:
C ( Durchschnittlich ) C++ (am Lernen)

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Arrays

Beitrag von fat-lobyte » Do Feb 12, 2009 11:10 am

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.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
soufian88
Beiträge: 288
Registriert: So Jan 18, 2009 1:01 pm

Re: Arrays

Beitrag von soufian88 » Do Feb 12, 2009 7:06 pm

Ja ist schon etwas klar geworden. ;)
C ( Durchschnittlich ) C++ (am Lernen)

Antworten