Schleifenprogrammierung
-
@Finnegan sagte in Schleifenprogrammierung:
@dooni sagte in Schleifenprogrammierung:
@Swordfish Sorry
Danke für die Anmerkungfor(unsigned int i=0; i<vs.size ; i++) { if(vs[i]>=a || vs[i]<b) return true; }
Habe ich es jetzt richtig verstanden?
Herrje! Nein! Schau dir nochmal genau an, was @Swordfish geschreiben hat:
Nur soviel: Die Funktion soll die Werte zählen, die im Intervall [a, b) liegen und deren Anzahl zurückgeben.
Eine Anzahl, nicht nur ein simples
true
, falls lediglich einer der Werte die "liegt im Intervall"-Bedingung erfüllt (wie bei deinem Code).Auch die Bedingung
vs[i]>=a || vs[i]<b
ist nicht korrekt. Sollte eine Zahl, die innerhalb des Intervalls liegt, nicht eventuell beide Bedingungen erfüllen? Größer/gleich alsa
und kleinerb
? Ist||
hier wirklich die richtige Verknüpfung?nein ist die falsche das muss eine Und Verknüpfung sein, also (a=<vs[i] && vs[i]<b)
-
@Bushmaster sagte in Schleifenprogrammierung:
zu beachten ist auch noch die schreibeweise [a, b)
eine klammer eckig, andere nicht. das hat was zu bedeuten.
es sei denn der autor des aufgabenzettels hat sich vertippt.
https://de.wikipedia.org/wiki/Intervall_(Mathematik)#Halboffenes_(genauer_rechtsoffenes)_Intervallwenn x€ [a,b[ => a<= x<b
-
@dooni sagte in Schleifenprogrammierung:
@Bushmaster sagte in Schleifenprogrammierung:
zu beachten ist auch noch die schreibeweise [a, b)
eine klammer eckig, andere nicht. das hat was zu bedeuten.
es sei denn der autor des aufgabenzettels hat sich vertippt.
https://de.wikipedia.org/wiki/Intervall_(Mathematik)#Halboffenes_(genauer_rechtsoffenes)_Intervallwenn x€ [a,b[ => a<= x<b
nicht ganz, eher so ...
if (a <= x && x < b)
-
Sorry das ich immer wieder nachfrage
Ich habe es nochmal durchgelesenfor(unsigned int i=0; i<vs.size ; i++) { int counter =0; if(a<=vs[i] && vs[i]<b) counter ++: return 0; }
-
@Bushmaster sagte in Schleifenprogrammierung:
@dooni sagte in Schleifenprogrammierung:
@Bushmaster sagte in Schleifenprogrammierung:
zu beachten ist auch noch die schreibeweise [a, b)
eine klammer eckig, andere nicht. das hat was zu bedeuten.
es sei denn der autor des aufgabenzettels hat sich vertippt.
https://de.wikipedia.org/wiki/Intervall_(Mathematik)#Halboffenes_(genauer_rechtsoffenes)_Intervallwenn x€ [a,b[ => a<= x<b
nicht ganz, eher so ...
if (a <= x && x < b)
Ach ja danke
-
So wird das aber nichts mit der Klausur!
Hast du die Funktion denn jetzt einmal getestet?
Wenn du keinen Compiler auf deinem Rechner hast, dann benutze einen Online-Compiler, wie z.B. Ideone.Das hilft dir zwar nicht direkt bei der Klausur, aber programmieren lernst du nur durch Code schreiben, kompilieren und testen.
Aber wenn du die (logischen) Fehler in deinem bisherigen Code erkennst, weißt du zumindestens, was du bei den Klausuraufgaben zu beachten hast.
-
@dooni sagte in Schleifenprogrammierung:
Sorry das ich immer wieder nachfrage
Ich habe es nochmal durchgelesenfor(unsigned int i=0; i<vs.size ; i++) { int counter =0; if(a<=vs[i] && vs[i]<b) counter ++: return 0; }
Wie wäre es, wenn Du anfängst das in der Aufgabestellung skizzierte Programm inklusive Deiner zu schreibenden Funktion schreibst, übersetzt und die Ausgabe mit der von Hand ermittelten korrekten Lösung zu vergleichen?
Also sollte in Deinen hier geposteten Codefragmenten zumindest die komplette Funktion stehen, die ohnehin sehr kurz ist.
unsigned int countIf (const std::vector<int>& vs, int a, int b) { // Eigenleistung von Dir }
P.S. Was macht die Zeile
return 0;
?
-
@john-0 sagte in Schleifenprogrammierung:
die ohnehin sehr kurz ist.
mit std::count_if wirds tatsächlich nur ein einzeiler.
-
@Bushmaster sagte in Schleifenprogrammierung:
mit std::count_if wirds tatsächlich nur ein einzeiler.
Er muss aber
for
verwenden.
-
@john-0 sagte in Schleifenprogrammierung:
Er muss aber for verwenden.
macht er so:
unsigned int countIf(const std::vector<int>& vs, int a, int b) { for (;;) return std::count_if (.....); }
anforderung erfüllt.