Forum: Mikrocontroller und Digitale Elektronik in for schleife suchen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe eine Anfänger Frage bezüglich der for Schleife.




Array index | Wert
  0         | -10
  1         | 5
  2         | 10
  3         | 15
  4         | 20

wie kann ich laut der obere Tabelle in eine for-Schleife den Wert 9 
suchen.

Danke im Vorraus

Gruß Peter

von Cyblord -. (cyblord)


Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> Hallo zusammen,
>
> ich habe eine Anfänger Frage bezüglich der for Schleife.

Welcher?

>
> Array index | Wert
>   0         | -10
>   1         | 5
>   2         | 10
>   3         | 15
>   4         | 20
>
> wie kann ich laut der obere Tabelle in eine for-Schleife den Wert 9
> suchen.

Abgesehen davon dass der gesuchte Wert wohl nicht da ist, ist die 
trivialste Strategie einfach alle Werte durchzugehen. Sind die Werte 
willkürlich sortiert, bleibt meist gar nichts anderes übrig.
Sind sie sortiert wie im Beispiel, kommt z.B. eine binäre Suche in 
Betracht.

: Bearbeitet durch User
von HildeK (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Vielleicht so:
1
for (i=0; i<ArraySize; i++)
2
{
3
   if (Wert[i] == 9) break; 
4
}
5
if (i==ArraySize) printf("9 ist nicht vorhanden\n);
6
else printf("9 steht in Element %d\n", i);
Es ist nicht ganz klar, was du willst.
Im Beispiel steht nach Beendigung der Schleife 'i' dann auf dem Index, 
der den Wert enthält, falls er enthalten ist.
Sollte 'i' am Ende auf ArraySize stehen, dann war die gesuchte '9' nicht 
drin.

von Peter (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
würde es so funktionieren.
1
int temp1;
2
int temp2;
3
 
4
for (int i = 0; i < 5 ; i++)
5
 {
6
     if (Array[i]< 9 && Array[i] > 9)
7
        {
8
            temp1= Array[i];  // Array[1] = 5
9
            temp2= Array[i];  // Array[2] = 10
10
        }
11
12
13
}

MOD: bitte in Zukunft die [c] Tags selber setzen, wie in der 
Bedienungsanleitung gleich unter "Wichtige Regeln - erst lesen, dann 
posten!" beschrieben.

: Bearbeitet durch Moderator
von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
-1 lesenswert
nicht lesenswert
Peter schrieb:
> würde es so funktionieren.

Es? Was?

von JH (Gast)


Bewertung
3 lesenswert
nicht lesenswert
Peter schrieb:
>      if (Array[i]< 9 && Array[i] > 9)

Denk doch mal darüber nach, wie das Array aussehen müsste, damit ein 
Eintrag gleichzeitig größer und kleiner 9 sein kann. Dann fällt dir auch 
direkt auf, was deine Schleife tut. Tip: Viel ist es nicht.

Beitrag #5613124 wurde von einem Moderator gelöscht.
Beitrag #5613134 wurde von einem Moderator gelöscht.
von Sebastian R. (lange_leitung)


Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, ich habe erraten, was Du machen willst. Du suchst den 
Eintrag im Array, der 9 ist, oder die beiden Einträge, zwischen denen 9 
liegt. Wobei das Array aufsteigend sortiert ist. Richtig?

Peter schrieb:
>      if (Array[i]< 9 && Array[i] > 9)
Hier musst Du
1
if (Array[i]< 9 && Array[i+1] > 9)
 (Das +1 fehlt) schreiben, wobei Du noch abfangen musst, dass Du nicht 
in das 6. Arrayfeld schaust.

>             temp2= Array[i];  // Array[2] = 10
Hier dann auch +1. Wobei Du das ja gar nicht in 2 Variablen 
zwischenspeichern musst, wenn Du eh weißt, dass die 9 immer zwischen dem 
aktuellen und dem folgenden Feld liegt.

Jetzt musst Du noch den Fall berücksichtigen, dass 9 direkt als Wert 
vorkommt.

Gruß
Sebastian

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Sebastian R. schrieb:
> if (Array[i]< 9 && Array[i+1] > 9)

Damit findet man aber nur die Einträge, zwischen denen 9 eingefügt 
werden müsste; wäre eine 9 im Array enthalten, würde man die damit nicht 
finden.

von Adam P. (adamap)


Bewertung
-3 lesenswert
nicht lesenswert
Peter schrieb:
> if (Array[i]< 9 && Array[i] > 9)

Also das könntest auch ruhig so schreiben:
1
if (Array[i] != 9)

Mich verwirrt jedoch deine Frage und dein Code.

In der Frage möchtest du nach dem Index suchen wo 9 hinterlegt ist,
im Code suchst du jedoch den Index vorher und nachher wo die 9 zwischen 
passen würde.

Das sind zwei verschiedene Probleme.

von --- (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Adam P. schrieb:
> Peter schrieb:
>> if (Array[i]< 9 && Array[i] > 9)
>
> Also das könntest auch ruhig so schreiben:
> if (Array[i] != 9)

Das ist aber schon ein gewaltiger Unterschied.
Die Sache mit dem logischen UND bzw. ODER solltest Du Dir nochmal zu 
Gemüte führen. Korrekt wäre die Vereinfachung:
1
if( false )
Oder noch vereinfachter den Codeteil gleich komplett löschen.

von Wolfgang (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Cyblord -. schrieb:
> Abgesehen davon dass der gesuchte Wert wohl nicht da ist, ist die
> trivialste Strategie einfach alle Werte durchzugehen. Sind die Werte
> willkürlich sortiert, bleibt meist gar nichts anderes übrig.

Egal, wie die Zahlen sortiert sind, kann man auch bei jeder 
willkürlichen Sortierung Suchaufwand sparen, wenn man weiß, wo in dieser 
Sortigung die 9 zu finden wäre.

Oder meintest du vielleicht unsortiert?

von Cyblord -. (cyblord)


Bewertung
-1 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Egal, wie die Zahlen sortiert sind, kann man auch bei jeder
> willkürlichen Sortierung Suchaufwand sparen, wenn man weiß, wo in dieser
> Sortigung die 9 zu finden wäre.

Tja, für beliebige Sortierungen weißt du das aber in der Regel nicht. 
Damit ist deine Aussage sehr schwach. Nehmen wir an die Zahlen sind nach 
der Niederschlagsmenge der letzten 100 Jahre sortiert. Findest du jetzt 
die 9 schneller?

> Oder meintest du vielleicht unsortiert?

Wie ich oben zeigte ist das egal.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.