Forum: Compiler & IDEs For schleife kombinieren


von gast (Gast)


Lesenswert?

hallo,
ist es überhaupt möglicht zwei for Schleife zu kombinieren?
for((int i=0;i<5; i++) && for(int j=0;j<5; j++))
{}

von P. S. (Gast)


Lesenswert?

Was soll das sein?

Und warum will eigentlich keiner mehr ein C-Buch lesen?

von Peter (Gast)


Lesenswert?

Sag lieber was du von der Kombination erwartest.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> warum will eigentlich keiner mehr ein C-Buch lesen?
Was ist "lesen"?

> ist es überhaupt möglicht zwei for Schleife zu kombinieren?
Es ist möglich, aber das geht anders:
1
for(int i=0; i<5; i++) {
2
  for(int j=0; j<5; j++) {
3
     ....
4
  }
5
}

von was-willst-du (Gast)


Lesenswert?

Text nicht hier posten, sondern im Editor eingeben, Compiler anwerfen, 
Fehlermeldungen ansehen, Bescheid wissen, auf die Couch legen, 
nachdenken, verschachtelte Schleifen entwerfen, eintippen, Compiler ...,
wenns dann nicht geht: Aufgabenstellung festlegen, neu texten

Allerdings besitzt die Idee einer doppelten Schleife einen gewissen 
Charme...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

was-willst-du wrote:
> Text nicht hier posten, sondern im Editor eingeben, Compiler anwerfen,
> Fehlermeldungen ansehen, Bescheid wissen, auf die Couch legen,
> nachdenken, verschachtelte Schleifen entwerfen, eintippen, Compiler ...,
> wenns dann nicht geht: Aufgabenstellung festlegen, neu texten
Das nennt man "Lernen"   ;-)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

gast wrote:
> hallo,
> ist es überhaupt möglicht zwei for Schleife zu kombinieren?
> for((int i=0;i<5; i++) && for(int j=0;j<5; j++))
> {}


Klaro, ei freilich! Lediglich mit ein paar Klammern hier und dort 
würzen:
1
int trace (int x[], int y[], int n)
2
{
3
    int i, s;
4
5
    return ({for (i=s=0; i<n; i++) s+=*x++; s;}) && ({for (i=s=0; i<n; i++) s+=*y++; s;});
6
}

Ist übrigens ANSI-C, also der C-Standard.

Die Funktion liefert WAHR, wenn die Spuren zweier n-dimensionaler 
Vektoren x und y beide ungleich Null sind.

Viel Spaß damit ;-)

Johann

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

@  Johann L.:
> Ist übrigens ANSI-C, also der C-Standard.
Schade, VC++ kann kein ANSI-C:
1
D:\....\Dreizeiler.cpp(32) : error C2143: syntax error : missing ')' before '{'
2
D:\....\Dreizeiler.cpp(32) : error C2059: syntax error : ')'
Mit welchem Compiler geht das durch?

von Sven P. (Gast)


Lesenswert?

Mit jedem Ansi-C-Compiler, gcc zum Bleistift.

von Andreas H. (Gast)


Lesenswert?

Warum haben die meisten C-Freaks eigentlich immer das Bedürfnis, 
möglichst unverständlichen und kryptischen Code zu schreiben? Wenn nicht 
mindestens drei Operatoren und fünf Klammerverschachtelungen kombiniert 
werden, ist's kein anständiges C, oder wie?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Schade, VC++ kann kein ANSI-C:
>
> D:\....\Dreizeiler.cpp(32) : error (...)
> D:\....\Dreizeiler.cpp(32) : error (...)

Doch, nur übersetzt VCC C++-Quelltext als C++. Du musst schon darauf 
achten, wie Du Deine Dateien nennst.

Tip: C-Quelltext findet sich in Dateien mit der Extension *.c

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sven P. wrote:
> Mit jedem Ansi-C-Compiler, gcc zum Bleistift.
1
% gcc -Os -c -std=c99 -Wall -Wextra -pedantic foo.c
2
foo.c: In function `trace':
3
foo.c:5: warning: ISO C forbids braced-groups within expressions
4
foo.c:5: warning: ISO C forbids braced-groups within expressions

Leute, nix dagegen, Spracherweiterungen eines bestimmten Compilers
zu benutzen -- aber bitte seid euch wenigstens darüber bewusst,
dass es eine solche ist, statt danach großkotzig rumzuposaunen, dass
es standardgerecht wäre.

Übrigens beschleicht mich bei jedem, der auf ,,ANSI C'' dieser Tage
(als Begriff) noch herumreitet, immer stillschweigend das Gefühl,
dass die Leute die Zeit verschlafen haben...  Der aktuelle Standard
heißt ISO/IEC 9899:1999, oder kurz ,,C99''.

von Andreas V. (tico)


Lesenswert?

Lothar Miller wrote:
> Schade, VC++ kann kein ANSI-C:
>
1
> D:\....\Dreizeiler.cpp(32) : error C2143: syntax error : missing ')'
2
> before '{'
3
> D:\....\Dreizeiler.cpp(32) : error C2059: syntax error : ')'
4
>

Dann wäre da nur noch die Frage, wie bei einem Dreizeiler ein Fehler in 
Zeile 32 auftreten kann...
:)

Gruss
Andreas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Rufus t. Firefly wrote:
> Doch, nur übersetzt VCC C++-Quelltext als C++. Du musst schon darauf
> achten, wie Du Deine Dateien nennst.
> Tip: C-Quelltext findet sich in Dateien mit der Extension *.c
Hilft alles nix, für VC++ bleibt diese Zeile fehlerhaft:
1
d:\...\dreizeiler.c(18) : error C2059: syntax error : '{'
2
d:\...\dreizeiler.c(18) : warning C4552: '<' : operator has no effect; expected operator with side-effect
3
d:\...\dreizeiler.c(18) : error C2143: syntax error : missing ';' before ')'
4
d:\...\dreizeiler.c(18) : error C2059: syntax error : ')'
5
d:\...\dreizeiler.c(18) : error C2059: syntax error : '&&'
6
d:\...\dreizeiler.c(18) : error C2059: syntax error : ')'

> gcc zum Bleistift....
Sollte nicht wenigstens ein zweiter Compiler so einen 
Sourcecodeschnipsel noch übersetzt bekommen?  :-/

> Dann wäre da nur noch die Frage, wie bei einem Dreizeiler
> ein Fehler in Zeile 32 auftreten kann...  :)
Dieser Dreizeiler muß für alle Versuche herhalten, und offenbar sind das 
schon ein paar... ;-)

von Sven P. (Gast)


Lesenswert?

Jörg Wunsch wrote:
> Leute, nix dagegen, Spracherweiterungen eines bestimmten Compilers
> zu benutzen -- aber bitte seid euch wenigstens darüber bewusst,
> dass es eine solche ist, statt danach großkotzig rumzuposaunen, dass
> es standardgerecht wäre.
Ich hab nix gesagt und behaupte das Gegenteil >_>
http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC62
Ist dann eindeutig eine Funktion des GCC. Schade eigentlich...

> Übrigens beschleicht mich bei jedem, der auf ,,ANSI C'' dieser Tage
> (als Begriff) noch herumreitet, immer stillschweigend das Gefühl,
> dass die Leute die Zeit verschlafen haben...  Der aktuelle Standard
> heißt ISO/IEC 9899:1999, oder kurz ,,C99''.
Da ist was Wahres dran --

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Jörg Wunsch wrote:
> Sven P. wrote:
>> Mit jedem Ansi-C-Compiler, gcc zum Bleistift.
>
>
1
> % gcc -Os -c -std=c99 -Wall -Wextra -pedantic foo.c
2
> foo.c: In function `trace':
3
> foo.c:5: warning: ISO C forbids braced-groups within expressions
4
> foo.c:5: warning: ISO C forbids braced-groups within expressions
5
>
>
> Leute, nix dagegen, Spracherweiterungen eines bestimmten Compilers
> zu benutzen -- aber bitte seid euch wenigstens darüber bewusst,
> dass es eine solche ist, statt danach großkotzig rumzuposaunen, dass
> es standardgerecht wäre.

Zunächst mal war die Zeile als Scherz gedacht, weil sie in etwa die 
Zeichenfolge des OP "for && for" enthält.

Zum anderen geht das ohne -pedantic in gcc:

> % gcc -c -std=c99 -ansi foo.c
ebenso wie
> % gcc -c -std=c89 -ansi foo.c

Wenn ich sowas einem Compiler vorsetze und es ist nicht 
standardkonform, dann hat er IMHO auch zu meckern. Auch ohne -pedantic, 
und auch ohne -Wblabla.
> % gcc -v --help | grep c99
> %    -std=c99                    Conform to the ISO 1999 C standard

Johann

von Sven P. (Gast)


Lesenswert?

Johann L. wrote:
> Zum anderen geht das ohne -pedantic in gcc:
>
>> % gcc -c -std=c99 -ansi foo.c
> ebenso wie
>> % gcc -c -std=c89 -ansi foo.c
>
> Wenn ich sowas einem Compiler vorsetze und es ist /nicht/
> standardkonform, dann hat er IMHO auch zu meckern.
Nein, hat er nicht. Das obliegt ganz alleine dem Compiler und dem 
Benutzer, die Warnungen darzustellen. Und mit -pedantic zeigt er sie dir 
ja auch. Mit -ansi und -std=c99 hast du das noch nicht erreicht, s.u.

> Auch ohne -pedantic,
> und auch ohne -Wblabla.
>> % gcc -v --help | grep c99
>> %    -std=c99                    Conform to the ISO 1999 C standard
Und das ist dann wiederum Käse, weil da noch mehr zu steht:
1
The compiler can accept several base standards, such as c89 or
2
c++98, and GNU dialects of those standards, such as gnu89 or
3
gnu++98.  By specifing a base standard, the compiler will accept
4
all programs following that standard and those using GNU extensions
5
that do not contradict it.  For example, -std=c89 turns off certain
6
features of GCC that are incompatible with ISO C90, such as the
7
"asm" and "typeof" keywords, but not other GNU extensions that do
8
not have a meaning in ISO C90, such as omitting the middle term of
9
a "?:" expression.

von Bernd K. (bem) Benutzerseite


Lesenswert?

Hi ihr,

um mal wieder zum Thema zurückzukommen, seid ihr nicht der Meinung, der 
OP meinte vielleicht:
1
for(i=0, j=0; i < 5 && j < 5; i++, j++)

zumindest hab ich es so verstanden, die verschachtelte Lösung ergibt ja 
doch ein leicht anderes Ergebnis ;)

Grüsse

von Sven P. (Gast)


Lesenswert?

Bernd Klier wrote:
> Hi ihr,
>
> um mal wieder zum Thema zurückzukommen, seid ihr nicht der Meinung, der
> OP meinte vielleicht:
>
>
1
for(i=0, j=0; i < 5 && j < 5; i++, j++)
Macht das denn Sinn?

von Johannes M. (johnny-m)


Lesenswert?

Bernd Klier wrote:
> um mal wieder zum Thema zurückzukommen, seid ihr nicht der Meinung, der
> OP meinte vielleicht:
>
>
1
for(i=0, j=0; i < 5 && j < 5; i++, j++)
>
> zumindest hab ich es so verstanden, die verschachtelte Lösung ergibt ja
> doch ein leicht anderes Ergebnis ;)
Das ist aber eigentlich ziemlich unsinnig. Wozu sollten zwei Variablen 
simultan hochgezählt werden?

Die Variante von Lothar vom 23.02., 15:55 macht am meisten Sinn. Das ist 
nämlich eine echte Verschachtelung, Deine Version aber nicht.

von Bernd K. (bem) Benutzerseite


Lesenswert?

Ich habe ja nicht nach der Sinnhaftigkeit des OP gefragt, natürlich ist 
simultanes Hochzählen unsinnig.
Es lassen sich jedoch beliebig viele Permutationen von Abbruchkriterien 
etc. finden, bei denen "meine" Lösung einen Sinn ergibt.
("Sinn machen" ist unsinnig)
Was der OP nun wirklich wollte, kann nur er uns mitteilen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Sven P. wrote:
> Johann L. wrote:
>> Zum anderen geht das ohne -pedantic in gcc:
>>
>>> % gcc -c -std=c99 -ansi foo.c
>> ebenso wie
>>> % gcc -c -std=c89 -ansi foo.c
>>
>> Wenn ich sowas einem Compiler vorsetze und es ist /nicht/
>> standardkonform, dann hat er IMHO auch zu meckern.
> Nein, hat er nicht. Das obliegt ganz alleine dem Compiler und dem
> Benutzer, die Warnungen darzustellen. Und mit -pedantic zeigt er sie dir
> ja auch. Mit -ansi und -std=c99 hast du das noch nicht erreicht, s.u.
>
>> Auch ohne -pedantic,
>> und auch ohne -Wblabla.
>>> % gcc -v --help | grep c99
>>> %    -std=c99                    Conform to the ISO 1999 C standard
> Und das ist dann wiederum Käse, weil da noch mehr zu steht:
> [pre]
> The compiler can accept several base standards, such as c89 or
...
Nein, bei der Ausgabe steht nichh mehr da. Es steht genau eine Zeile da, 
ebenso bei -std=iso9899:1999 (gcc 4.3.2 und gcc 4.1.0)

Was nutzt denn ein Standard, wenn der Compiler irgendeine Obermenge 
davon implementiert?

> [...] Das obliegt ganz alleine dem Compiler und dem
> Benutzer, die Warnungen darzustellen.

NACK. Das ist ok für Warnungen wie fehlende Prototypen, 
signed-unsigned-Vergleiche, etc. Aber nicht, wenn ein eingestellter 
Sprachstandard nicht befolgt wird.

Wenn man solche Features gerne hätte, dann bitte mit -std=gnu99 oder von 
mir aus auch als Default ohne -std=, aber nicht wenn explizit 
Konformität zu einem bestimmten Standard gefordert ist. Offenbar steht's 
nicht in der ISO 9899:1999 drin, und dann gehört auch gemeckert, wenn 
die Quelle dem nicht entspricht und -std=c99 gesagt ist.

Johann

von Sven P. (Gast)


Lesenswert?

Johann L. wrote:
> ...
> Nein, bei der Ausgabe steht nichh mehr da. Es steht genau eine Zeile da,
> ebenso bei -std=iso9899:1999 (gcc 4.3.2 und gcc 4.1.0)
Dann les doch bitte die Manpage genau durch, anstatt nur grob drauf rum 
zu greppen.

> Was nutzt denn ein Standard, wenn der Compiler irgendeine Obermenge
> davon implementiert?
Garnix, schon recht. Aber er implementiert ja nicht nur irgendeine 
Obermenge davon.

>> [...] Das obliegt ganz alleine dem Compiler und dem
>> Benutzer, die Warnungen darzustellen.
>
> NACK. Das ist ok für Warnungen wie fehlende Prototypen,
> signed-unsigned-Vergleiche, etc.
Jo.

> Aber nicht, wenn ein eingestellter
> Sprachstandard nicht befolgt wird.
Dann stell doch bitte auch den Standard ein.

> Wenn man solche Features gerne hätte, dann bitte mit -std=gnu99 oder von
> mir aus auch als Default ohne -std=, aber nicht wenn explizit
> Konformität zu einem bestimmten Standard gefordert ist.
Du hast mit -std=c99 NICHT explizit Konformität gefordert. In der 
Manpage steht haarklein, was womit gefordert wird, und mit c99 wird 
der C99-Standard PLUS Gnu-Erweiterungen, die nicht damit in Konflikt 
stehen, gefordert. Basta.

> Offenbar steht's
> nicht in der ISO 9899:1999 drin, und dann gehört auch gemeckert, wenn
> die Quelle dem nicht entspricht und -std=c99 gesagt ist.
s.o.
Du darfst dem GCC aufgrund deiner Bedienfehler keinen Vorwurf machen.
Korrekte Bedienung des GCC erfordert in dem Fall halt -pedantic. Frag 
mich nicht warum und wieso, aber es ist halt so.
1
-pedantic
2
Issue all the warnings demanded by strict ISO C and ISO C++; reject
3
all programs that use forbidden extensions, and some other programs
4
that do not follow ISO C and ISO C++.  For ISO C, follows the ver‐
5
sion of the ISO C standard specified by any -std option used.

von raki (Gast)


Lesenswert?

>>>
1
for(i=0, j=0; i < 5 && j < 5; i++, j++)
>>
>> zumindest hab ich es so verstanden, die verschachtelte Lösung ergibt ja
>> doch ein leicht anderes Ergebnis ;)
> Das ist aber eigentlich ziemlich unsinnig. Wozu sollten zwei Variablen
> simultan hochgezählt werden?
Ohne größeren Quellcode-Ausschnitt kann niemand diese Frage beantworten,
i und j können ja innerhalb der Schleifen weiter verändert werden. Ob
das nun sinnvoll ist, kann ich ohne Sinn Zweck des Quellcodes nicht
wissen.

Im übrigen verweise ich dann nochmal auf diesen Satz:
> Und warum will eigentlich keiner mehr ein C-Buch lesen?
Warum auch, man bekommt ja die Antwort, dass das Lesen mehr bringt, 
steht
auf einem ganz anderen Blatt...

von Karl H. (kbuchegg)


Lesenswert?

Bernd Klier wrote:
> Ich habe ja nicht nach der Sinnhaftigkeit des OP gefragt, natürlich ist
> simultanes Hochzählen unsinnig.
> Es lassen sich jedoch beliebig viele Permutationen von Abbruchkriterien
> etc. finden, bei denen "meine" Lösung einen Sinn ergibt.
> ("Sinn machen" ist unsinnig)
> Was der OP nun wirklich wollte, kann nur er uns mitteilen.

Im Prinzip schon richtig. Nur darfst du nicht davon ausgehen, dass 
Anfänger ihre Fragen gut durchdenken. In ~90% der Fälle ist die Antwort, 
die am meisten Sinn macht auch die Antwort auf die Frage, die der Frager 
zwar so nicht gestellt hat, aber eigentlich fragen wollte :-)

> ist es überhaupt möglicht zwei for Schleife zu kombinieren?
> for((int i=0;i<5; i++) && for(int j=0;j<5; j++))
> {}

Von einem Anfänger gefragt, ist die wahrscheinlichste Interpretation der 
Frage die:
Ist es möglich ein Konstrukt zu finden, so dass im Schleifenkörper alle 
Kombinationen für i = 0 bis 4  und  j = 0 bis 4  auftreten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.