Schleifenprogrammierung
-
Hey,
ich schreibe werde eine Klausur in c++ schreiben und sie wird auf Blätter geschrieben . Deswegen übe ich es auch und biete um eure Hilfe .
Ich lade die Aufgabe hoch. Ich habe es so gelöst, wie ich es verstanden habeDie Aufgabe https://ibb.co/JQCvy1Q
Meine Lösung https://ibb.co/y4xnYvb
Dankeschön
-
Poste bitte Text als Text und nicht als Link zu Bildern auf irgendwelchen Hosts. Du kannst Deinen Beitrag auch nachträglich bearbeiten. Den Menüpunkt "Bearbeiten" findest Du hinter dem Drei-Punkte-Menü rechts unter Deinem Beitrag.
Schreibe bitte in eine Zeile vor Deinem Code```
und in eine Zeile nach Deinem Code```
um ihn als Code mit Syntax-Highlighting darzustellen. Danke.Nur soviel: Die Funktion soll die Werte zählen die im Intervall [a, b) liegen und deren Anzahl zurückgeben. Die Funktion soll nix ausgeben.
Und um alle diese Werte zu finden musst Du schon über alle Elemente des Vektors laufen.Was
countIf()
tun soll in Worten:-
counter
sei die Variable die die im Intervall [a, b) liegenden Werte im Vektorvs
zählt. Der Startwert ist0
. -
i
sei der Index der Elemente des Vektorsvs
und laufe vom ersten (Index0
) bis zum letzten Element (i < vs.size()
) -
Für jedes Element
vs[i]
des Vektors prüfe ob es im Intervall [a, b) liegt- Wenn ja erhöhe den
counter
um 1.
.
- Wenn ja erhöhe den
-
Gebe den Wert des
counter
s zurück.
-
-
sie wird auf Blätter geschrieben
Das heißt nicht, dass du deine Übungen nicht trotzdem zur Kontrolle mit einem Compiler übersetzen und testen solltest.
-
@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?
-
@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?
-
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)_Intervall
-
@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.