Hi,
ich komme gerade nicht weiter. Und zwar habe ich eine normale
forschleife
1
for(i=0;i<144;i++)// <-- ist das der Schleifenkopf?
und möchte das nach dem Schleifenkopf schimpft sich das glaube ich immer
der wert i+1 genommen wird und ich damit arbeite also angenommen i ist
gerade bei 50 möchte ich 50 + 51 oder 89 + 90 haben also immer den
darauffolgenden wert von i mit rechnen. ich hoffe das war verständlich
und jemand kann mir helfen.
Mfg
Verstehe ich dich richtig? Hast du ein Beispiel wo dir das Probleme
macht?
Da kannst du doch einfach (i+1) in den Berechnungen nehmen.
Oder for(i = 1; i < 145; i++){}
Oder, oder, oder. Es werden garantiert noch einige kreativen Ideen
kommen.
Zoidberg schrieb:> Verstehe ich dich richtig? Hast du ein Beispiel wo dir das> Probleme> macht?>> Da kannst du doch einfach (i+1) in den Berechnungen nehmen.> Oder for(i = 1; i < 145; i++){}
ne ne so meinte ich das nicht. In einer For schleife hast du es ja so:
for(i = 1; i < 145; i++){
print (i)
}
i:
1
2
3
4
5
...
ich möchte es aber so
i:
1 & 2
2 & 3
40 & 41
102 & 103
ich wollte den wert von i den ich bekomme immer mit dem darauffolgenden
wert haben also 2 Werte
Mfg
Meinst du sowas?
#define ARRAY_LENGTH 144
for(i = 0; i < (ARRAY_LENGTH-1) ; i++)
{
sum = valArr[i] + valArr[i+1]
}
Du musst darauf achten, dass du dann darauf
achten, dass du "einen eher" aufhörst, als weil
innerhalb der Schleife das Argument "künstlich" ums
ein vergrößert ist.
Das funktioniert, weil weil das "i+1" nur eine lokale
Berechnung ist und im Gegensatz zu i++ nicht zu einem
Inkrement von i führt.
VIISA schrieb:> Hi,>> ich komme gerade nicht weiter. Und zwar habe ich eine normale> forschleife>> for(i = 0; i < 144; i++) // <-- ist das der Schleifenkopf?
Schon mal in ein C-Buch geschaut? Auch mal gelesen und drüber
nachgedacht?
Nein, googeln ist KEIN Ersatz dafür!
> und möchte das nach dem Schleifenkopf schimpft sich das glaube ich immer> der wert i+1 genommen wird und ich damit arbeite
Wer oder was hindert dich daran?
1
for(i=0;i<144;i++){
2
a=b*(i+1);
3
}
> darauffolgenden wert von i mit rechnen. ich hoffe das war verständlich> und jemand kann mir helfen.
Du kannst dir nur selber helfen, indem du mal anfängst old school ein
Thema zu erarbeiten. Ja, ein Buch aus gutem, alten Papier ist da immer
noch SEHR nützlich.
Keine Ursache.
VIISA schrieb:> Hi,>> ich komme gerade nicht weiter. Und zwar habe ich eine normale> forschleife>>
1
>
2
>for(i=0;i<144;i++)// <-- ist das der Schleifenkopf?
3
>
4
>
>> und möchte das nach dem Schleifenkopf schimpft sich das glaube ich immer> der wert i+1 genommen wird und ich damit arbeite also angenommen i ist...
Du kannst innerhalb der For-Schleife mit der Variable i machen was Du
willst!
Wenn Du in der Schleife etwas mit i machst zb i = i + 1 ... dann ist das
überhaupt kein Problem - wenn du dann aber willst, dass im nächsten Loop
das „ alte “ i nur um 1 größer ist musst Du halt am Ende der Schleife i
= i - 1 rechnen, damit i wieder den korrekten Wert bekommt.
Du kannst auch in der Schleife i = 1024; zuweisen - dann ist das halt in
deinem Beispiel der letzte schleifendurchlauf
In C kannst Du fast alles machen
Das wären aber komische Hausaufgaben....
gefällt es die so ggf. besser, als in Formeln o.ä. (i+1) zu benutzen?
for(i = 0; i < 144; i++)
{
uint8_t i_inc = i+1;
printf("%i & %i\n", i, i_inc );
}
Zoidberg schrieb:> Das wären aber komische Hausaufgaben....>> gefällt es die so ggf. besser, als in Formeln o.ä. (i+1) zu benutzen?>> for(i = 0; i < 144; i++)> {> uint8_t i_inc = i+1;>> printf("%i & %i\n", i, i_inc );> }
Wer hat Dir gelehrt, Variablen in der Schleife zu deklarieren?
123456 schrieb:>> Walter K. schrieb:>> Wer hat Dir gelehrt, Variablen in der Schleife zu deklarieren?>> Mecker nicht, der Compiler wird diesen Fall hervorragend richten.
Sicher - aber es ist sozusagen eine Stil-Frage!
Und da der Fragesteller offensichtlich gerade mit C anfängt - wundere
ich mich schon über den ein oder anderen Beitrag hier!
Samuel C. schrieb:> Walter K. schrieb:>> Sicher - aber es ist sozusagen eine Stil-Frage!>> Und ist der "Stil" falsch?
Du wirst es mir sicher sagen ;-)
Abgesehen davon kenne ich nur schlechten oder guten Stil - oder halt
noch die Eigenschaft: stillos
Auf jeden Fall sollte man einem C Einsteiger bei simpelsten
Fragestellungen nicht solchen Mist vorsetzen!
Und in diesen Kontext hier, ist eine Varianlendeklaration innerhalb
einer for Schleife einfach nur grober Unfug - ganz unabhängig davon, zu
welcher Magie heutige compiler fähig sind.
VIISA schrieb:> for(i = 0; i < 144; i++) // <-- ist das der Schleifenkopf?
Ja, das ist der Schleifenkopf.
Offensichtlich gefällt (i+1) hier nicht, warum auch immer.
Walter K. schrieb:> Wer hat Dir gelehrt, Variablen in der Schleife zu deklarieren?
Was gibt es gegen lokale Variablen zu sagen?
Für die unerbittlichen:
Walter K. schrieb:> Samuel C. schrieb:>> Walter K. schrieb:>>> Sicher - aber es ist sozusagen eine Stil-Frage!>>>> Und ist der "Stil" falsch?>> Du wirst es mir sicher sagen ;-)
Nein, im Gegenteil. Wenn ich eine Variable nur lokal und nicht über
Iterationen hinweg benötige, dann schreibe ich das auch so. Ich lasse
mir aber gerne erklären, warum manche meiner Angewohnheiten Nachteile
haben. Ich sehe in dieser Schreibweise aber kein Problem.
> Abgesehen davon kenne ich nur schlechten oder guten Stil - oder halt> noch die Eigenschaft: stillos
Und ist der dann gut oder schlecht oder stillos?
> Auf jeden Fall sollte man einem C Einsteiger bei simpelsten> Fragestellungen nicht solchen Mist vorsetzen!
Ich empfinde das nicht als Mist. Auch nicht für Einsteiger.
> Und in diesen Kontext hier, ist eine Varianlendeklaration innerhalb> einer for Schleife einfach nur grober Unfug - ganz unabhängig davon, zu> welcher Magie heutige compiler fähig sind.
Das ist dann aber auch wieder eine Stil-Frage! Sollte (i+1) hier
mehrfach benötigt werden, kann es je nach Code und Anwendungsfall
durchaus lesbarer sein, dass in eine eigene Variable auszulagern.
Samuel C. schrieb:> Nein, im Gegenteil. Wenn ich eine Variable nur lokal und nicht über> Iterationen hinweg benötige, dann schreibe ich das auch so. Ich lasse> mir aber gerne erklären, warum manche meiner Angewohnheiten Nachteile> haben. Ich sehe in dieser Schreibweise aber kein Problem.
Dem stimme ich ausdrücklich zu!
Walter K. schrieb:> Und in diesen Kontext hier, ist eine Varianlendeklaration innerhalb> einer for Schleife einfach nur grober Unfug - ganz unabhängig davon, zu> welcher Magie heutige compiler fähig sind.
Zu der Behauptung fehlt die Begründung.
Und ich befürchte, dass es da keine gibt.
Dass es nur ein sinnentleertes Dogma ist.
Klarer: Die Behauptung ist Unfug.
"Wer hat Dir gelehrt, Variablen in der Schleife zu deklarieren?"
Ich muss irgendwie mit dem Kopf schütteln und verstehe dein Gerumpel
nicht....
Was ist denn genau dein Problem mit lokalen Variablen? Speziell bei
Anfänger-Fragen sollte man vor allem nicht so poltern.
P.S. Der Code-Schnipsel ist mMn. exakt und absolut richtig für das
Problem. Sollte er da eine globale Variable für einführen?
Nicht unbedingt:
wenn man die in Berechnungen benutzt, kann das die Lesbarkeit erheblich
verbessern und darum gehts eigentlich bei der Diskussion.
Dass in Berechnungen (i+1) verwendet werden kann ist, denke ich, allen
klar und irgendwie scheint das dem TO nicht so zuzusagen.
Warum ist denn Übersicht und Lesbarkeit überflüssig. Und vor allem
verstehe ich nicht, dass ihr alle direkt schreit.
Falk B. schrieb:> Na Klasse! Eine lokale, nicht statische Variable in einer Schleife! So> nützlich wie ein Kropf!
Ja.
Weil statisch keinen Sinn macht (sie wird in der ersten Zeile neu
gesetzt.
Weil sie außerhalb der Schleife nicht gebraucht wird (sie also genau
angemessenen Scope hat)
Ob ihr Name (i_inc) sinnvoll ist? Geschenkt.
Ob sie in dem Beispiel sinnvoll ist? Bei einer Verwendung? Sicher nicht.
Aber das Beispiel war ein Beispiel. Und wenn an 3 Stellen i+1 steht,
dann ist das Konstrukt an sich richtig.
Walter K. schrieb:> Sicher - aber es ist sozusagen eine Stil-Frage!>> Und da der Fragesteller offensichtlich gerade mit C anfängt - wundere> ich mich schon über den ein oder anderen Beitrag hier!
Richtig - nämlich eine Frage des guten Stils. Variablen so lokal
deklarieren wie möglich.
Walter K. schrieb:> Auf jeden Fall sollte man einem C Einsteiger bei simpelsten> Fragestellungen nicht solchen Mist vorsetzen!
Warum genau soll es Mist sein?
Walter K. schrieb:> Und in diesen Kontext hier, ist eine Varianlendeklaration innerhalb> einer for Schleife einfach nur grober Unfug
Ach? Na da dann erklär doch mal, warum das so sein soll?
Walter K. schrieb:> ganz unabhängig davon, zu> welcher Magie heutige compiler fähig sind.
Was soll daran Magie sein?
Walter K. schrieb:> Arduino Fanboy D. schrieb:>>>> Für die unerbittlichen:for(int i=0, j=1; i < 144; i++,j++)>> LOL>> Das ist jetzt sicher „Arduino C" - Stil? ;-)
Valides C seit anno immerschon. Scheinst ja ein richtiger Experte zu
sein?
Falk B. schrieb:> Na Klasse! Eine lokale, nicht statische Variable in einer Schleife! So> nützlich wie ein Kropf!
Offenbar spricht da ein Praktiker. Oder so.
vn n. schrieb:> Walter K. schrieb:>> Arduino Fanboy D. schrieb:>>>>>> Für die unerbittlichen:for(int i=0, j=1; i < 144; i++,j++)>>>> LOL>>>> Das ist jetzt sicher „Arduino C" - Stil? ;-)>> Valides C seit anno immerschon.
Erst seit 20 Jahren (mit C99, aber immer noch aus dem letzten
Jahrtausend)
Falk B. schrieb:> Na Klasse! Eine lokale, nicht statische Variable in einer Schleife! So> nützlich wie ein Kropf!
Aha, ein Eggsberde.
Der erste Google-Hit, erster Satz:
"It is a common practice to declare variables near first use. "
nach Suche von: "c best practices variable declaration".
Das hat sich in der Praxis schon lange bewährt. Du brauchst halt einfach
nicht suchen, wie die Variable deklariert ist. Ob innerhalb einer
Schleife oder nicht ist vollkommen egal, der Compiler macht eine lokale
Variable daraus und fertig.
leo
Dirk B. schrieb:>> Walter K. schrieb:>>> Arduino Fanboy D. schrieb:>>>>>>>> Für die unerbittlichen:for(int i=0, j=1; i < 144; i++,j++)>>>>>> LOL>>>>>> Das ist jetzt sicher „Arduino C" - Stil? ;-)>>>> Valides C seit anno immerschon.>> Erst seit 20 Jahren (mit C99, aber immer noch aus dem letzten> Jahrtausend)
Also im K&R C Programming Language Second Edition von 1988 ist das
schon drin. Ich war der Meinung, das war in der Ersten auch schon drin,
finde aber gerade keine 1978er Ausgabe. Kann es also nicht nachschauen.
O
Darth Moan schrieb:>>>>> Für die unerbittlichen:for(int i=0, j=1; i < 144; i++,j++)Darth Moan schrieb:> Also im K&R C Programming Language Second Edition von 1988 ist das> schon drin. Ich war der Meinung, das war in der Ersten auch schon drin,> finde aber gerade keine 1978er Ausgabe. Kann es also nicht nachschauen.
Oh, stimmt gar nicht:
for(i=0, j=1;...
gab es damals schon.
for(int i=0, j=1; ...
Das gab es erst später.
Da hab ich nicht genau genug gelesen, sorry.