Drucken, zahlen in der Auswahl von zwei user-Eingabe-Werte mit while-Schleife
Ich das Gefühl, ich könnte hier etwas fehlt, aber etwas sagt mir, dass ich vielleicht nur macht dies schwieriger, dass es sein muss, aber aus dem Buch "C++ Primer, 5. ed.," Ich bin festgefahren auf dieses problem:
Übung 1.11: Schreiben Sie ein Programm, das den Benutzer auffordert, zwei zahlen.
Drucken Sie jede Zahl im angegebenen Bereich von diesen zwei ganze zahlen.
Bis zu diesem Zeitpunkt in dem Buch, die einzige Schleife verwendet wird, ist die while
Schleife, und keine bedingte Ausdrücke, wie if
, eingeführt worden. Das problem wäre einfach, wenn es nicht für die Tatsache, dass ein Benutzer könnte die Werte in den ganzen zahlen gefragt, die in aufsteigender oder absteigender Reihenfolge, also einfache Subtraktion finden WÜRDE, der Unterschied, aber ohne Prüfung, die Art und Weise zu erhöhen.
Wie konnte ich absolut drucken Sie die Auswahl zwischen den zahlen, die Garantie, nicht einfach das Inkrement in Richtung Unendlichkeit ohne Prüfung der Ergebnisse der Mathematik und/oder ohne einen Vergleich der beiden zahlen? Dies ist, was ich habe; es funktioniert, wenn der erste Wert: v1
ist weniger als oder gleich der zweiten: v2
, aber sonst nicht:
#include <iostream>
int main()
{
int v1 = 0, v2 = 0;
std::cout << "Enter two integers to find numbers in their range (inclusive): "
<< endl;
std::cin >> v1 >> v2;
while (v1 <= v2)
{
std::cout << v1;
++ v1;
}
return 0;
}
Jede Hilfe wäre sehr geschätzt werden!
- Es sein sollte....
cin>>v1>>v2;
- Danke, das war dumm.
- min && max kann auch umgesetzt werden mit avg(x,y)-+0.5*abs(diff(x,y))
- Gut, zu sehen, wie Sie festgestellt, dass die Differenz ein Teil davon, können Sie immer
std::min
zu finden, die untere und rechnen damit, dass viele zahlen nach oben. - in der Praxis
0.5
wird wahrscheinlich ruinieren die ganze Sache. - Ich würde für die Abstimmung entweder
>>
oder integer-division. - ((x+y) - abs(x-y))/2 und ((x+y)+abs(x-y))/2 funktionieren wird
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine einfache Umformulierung, wo Sie
min
undmax
bestimmen den Bereich, den Sie Durchlaufen auf:Diese können Sie auch weiter die beiden Eingänge "intakt" ist, weil Sie mit anderen Variablen zur Iteration über die Werte.
Beachten Sie auch, dass die
++current
getan werden könnte, auf der exakt gleichen Linie, auf der es gedruckt ist, wenn es war ersetzt durchcurrent++
. Die später zurückkehren würde, den aktuellen Wert voncurrent
und erhöhen Sie es.Bearbeiten
Hier ist, was Michael vorgeschlagen, glaube ich, in der Arbeit-code:
min
undmax
klingt wie Betrug für mich 😉min
undmax
als eine division, um herauszufinden, in welche Richtung "increment"if it were not for the fact that a user could put the values into the integers asked for in ascending or descending order
. Wie für die Klarheit, es klingt mehr wie eine übung, als die Produktion code, und ich sehemath
tag hier... es Hilft, zu verstehen, die Art von zahlen, die ist wichtig in der Programmierung.v1==v2
Fall ohne Verwendungif
.Können Sie
(v2-v1)/abs(v2-v1)
oder eine solche für Schritt. (vorausgesetzt, Sie sind nicht gleich). Und die for-Schleife Bedingung können Sie überprüfen, ob die aktuelle Zahl ist noch dazwischen, wie(v1<=v && v<=v2) || (v2<=v && v<=v1)
.Und zu vermeiden, die bei null, ich würde es in
do while
Schleife und verwenden Sie diev1!=v2 && ...
als Bedingung.Zusammenfassend:
P. S. ich hoffe, Sie können beheben, die Eingabe-Ausgabe erwähnt in den Kommentaren und in der anderen Antwort auf Ihren eigenen.
(3-1)/(3-1)==1
(1-3)/(1-3)==-1
.if
.&&
, und die||
Betreiber, aber das sieht aus wie Spaß, auch. Speichert Sie, für einen regnerischen Tag.do while
Sie tun können, die schlicht, während mit exklusiven Intervall und druckenv2
nach der Schleife, das ist weniger schön. Wie zu vermeiden&&
und||
und noch umgehenv1==v2
Fall bin ich nicht sicher.Versuchte ich meine amateur Weg und bekam das Ergebnis. Ich hoffe, es wird hilfreich sein.