[Newbaufgaben]C++ Ausgabe von ungeraden Zahlen;Buchstaben Großmachen
-
Hallo,
ich bin ein c++ Neuling, und habe schon
über google und Forum gesucht aber noch nichts richtiges gefunden,
ich studiere Informatik, allerdings habe ich zuvor noch nie was
richtiges mit c++ gemacht.
Jetzt habe ich mir mal ein Paar übungen besorgt, weiss aber nicht
sie zu lösen:Hier mal ein Beispiel:
Schreiben Sie ein Programm, welches alle ungerade Zahlen bis 101 ausgibt!Ich habs versucht mit einer Schleife zu lösen, aber komme nicht ganz drauf,
2. Aufgabe:
Schreiben Sie ein Programm, das Buchstaben ausließt und sie in Groß/Kleinbuchstaben umwandelt und sie wieder ausgibt.Über eine hilfe wäre ich dankbar:
Ps: wir haben irgendwie printf und andere Wörter als out und in
-
Hast du denn konkret etwas versucht? Zeit mal den Code her.
Vielleicht ein paar Ideen:
Schleife ist schon mal richtig. Jetzt zählst du ja mit und kannst für jede Zahl (bei einer For Schleife zählst du ja rauf) kannst du schauen, ob sie gerade oder ungerade ist und dann gibst du sie je nach dem aus.
-
Hatte mich leider nicht eingeloggt:
Also soweit bin ich schon:
#include "stdafx.h"
void main()
{
int izahl=0;
for (izahl=1;izahl<=101;izahl=izahl+1)
{
printf("\n%i = %i",izahl,izahl/2);
}
}// ich will aber dass er nur die ungeraden zahlen ausgibt
muss ich dass dann mit float machen ?
weil bei int (5/2)= 2..
-
Das sieht mir aber sehr stark nach C aus.
Bist du sicher, dass du einen C++ Kurs besuchst?
In C++ sähe das eher so aus:
#include "iostream" int main() { for ( int izahl=1;izahl<=101; ++izahl) { std::cout << zahl << "\n"; } }
Das ist auch schon fast die Lösung. Alles, was du jetzt noch brauchst ist eine Abfrage, ob die Zahl gerade ist. Kleiner Tipp: Was macht Modulo nochmal genau?
-
Naja jetzt hast du
eigl nur in c++ weitergegeben was ich schon
in c hatte.
(Ja wir machen noch c Grundlagen und gehen dann zu c++ über)
Also den counter von 1 bis 101 hatte ich schon soweit,
ich muss halt nur noch sagen, dass er die ungeraden zahlen
anzeigen soll..liegt das dann an der printf sache ?
also printf("/n%i",izahl.........
ich komm einfach net drauf..
-
Heißer Tipp: Bei der for-Schleife kann man das
izahl=izahl+1
auch durch jeden beliebigen anderen Befehl ersetzen. Vielleicht kommt dir ja nun eine Idee, wie man die Schrittweite verändern könnte, damit man nur ungerade Zahlen durchläuft.
-
guck dir einfach, wie drakon schon zu Aufgabe eins meinte,mal an was
modulo(%) macht.
dann hast du es eigentlich schon .zu Aufgabe 2 solltest du dir als erstes mal den Unterschied zwischen Groß und Kleinbuckstaben deutlich machen. Und zwar liegen die in der ASCII-Tabelle genau 32 Platznummern getrennt voneinander
const int UNTERSCHIED = 'a' - 'A';
Dann solltest du prüfen ob es sich um ein Groß oder Kleinbuchstaben handelt.
if (BUCHSTABE >= 'a' && BUCHSTABE <= 'z')
bzw
if (BUCHSTABE >= 'A' && BUCHSTABE <= 'Z')
Bei entsprechenden Fall den UNTERSCHIED draufrechnen bzw abziehen
mfg
-
Kaelron schrieb:
Naja jetzt hast du
eigl nur in c++ weitergegeben was ich schonDas war auch der Sinn der Sache.
Die Aufgabe lösen musst schon selbst. Ich habe dir ja einen guten Tipp gegeben. Überleg einfach mal, wie du mit Modulo fest stellen kannst, ob eine Zahl gerade oder ungerade ist..
-
#include "stdafx.h" void main() { int izahl; for (izahl=1;izahl<=101;izahl=izahl++) { if(izahl%2==1) printf("\n%i ",izahl); } getchar(); }
So danke für die Hilfe, hab jetzt diese Lösung ausgeknobelt..
mfg
-
Der % Operator ist der Modulo Operator.. Wie kommst du auf
modular
?!Wenn du wirklich C++ machen willst, dann sollstest du meinen obigen Code anschauen. Ansonsten bist du eh im falschen Unterforum.
-
omg,
äh ja klar
hatte mich verlesen hehe..
so dann mache ich mich jetzt an Aufgabe 2..
Was meinst du mit falschem Unterforum?
Weils kein c++ ist ?
-
Kaelron schrieb:
Was meinst du mit falschem Unterforum?
Weils kein c++ ist ?Jupp. Du machst lupenreines C, dafür sitzen die Experten hier:
http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html
Die können dir dann auch bei fortgeschrittenen Fragen konstruktiv helfen. Wenn du nämlich C-Fragen im C++ Forum stellst, wird die Antwort in 90% der Fälle "Nimm std::vector/string!" sein.
-
Oh okay,
dann würde ich mich freun, wenn
ein Moderator den Thread verschieben könnte..
-
#include "stdafx.h" void main() { const int Unterschied = 'a' - 'A'; int BUCHSTABE; printf("\nBitte Buchstaben eingeben: "); scanf("%i",&BUCHSTABE); if (BUCHSTABE >= 'a' && BUCHSTABE <= 'z') { printf("/n%i",BUCHSTABE); } else if (BUCHSTABE >= 'A' && BUCHSTABE <= 'Z') { printf("/n%i",BUCHSTABE); getchar(); } }
Soweit bin ich jetzt mit dem Buchstabenprogramm,
allerdings gibt er halt nix aus,
meine Theorie ist, dass er if überspringt..
-
Hast du mal einen Debugger benutzt?
-
int BUCHSTABE;
Kommt dir dies nicht ein bisschen paradox vor?
edit: Und noch ein paar Anmerkungen die nicht direkt mit dem Fehler zu tun haben:
- main hat int zurück zu geben, nicht void
- newline ist \n nicht /n
- Dein getchar() ist etwas merkwürdig positioniert im Programmfluss. Ich glaube nicht, dass du das so willst.
-
Naja ich kenne mich mit VisualStudio noch nicht so aus,
aber wenn ich den Code im Debugmodus starte,
läuft er alles sauber durch, ich kann einen Buchstaben eingeben,
und dann steht da nur "weiter mit beliebiger Taste"..
Wenn ich über F11 einzelne Schritte debugge, funktioniert auch alles..
Daher meine Theorie, dass er if überspringt..//edit
C/C++ Code:
int BUCHSTABE;
C/C++ Code:
int BUCHSTABE;
C/C++ Code:
int BUCHSTABE;Kommt dir dies nicht ein bisschen paradox vor?
edit: Und noch ein paar Anmerkungen die nicht direkt mit dem Fehler zu tun haben:
- main hat int zurück zu geben, nicht void
- newline ist \n nicht /n
- Dein getchar() ist etwas merkwürdig positioniert im Programmfluss. Ich glaube nicht, dass du das so willst.Ja schon, ich habe auch "UNTERSCHIED" initialisiert, aber
es kommt ja nicht in der If vor..
ich schau nochmal drüber
-
Kaelron schrieb:
Naja ich kenne mich mit VisualStudio noch nicht so aus,
aber wenn ich den Code im Debugmodus starte,
läuft er alles sauber durch, ich kann einen Buchstaben eingeben,
und dann steht da nur "weiter mit beliebiger Taste"..
Wenn ich über F11 einzelne Schritte debugge, funktioniert auch alles..
Daher meine Theorie, dass er if überspringt..Anweisungen werden nicht übersprungen. Deine if-Bedingung ist bloß immer falsch. Guck dir mal ein, welchen Wert BUCHSTABE vor und nach der Eingabe hat. Du wirst etwas (für dich) überraschendes feststellen. Und danach lies meinen vorherigen Beitrag nochmal.
edit: Ok, bevor ich dich den ganzen Tag raten lasse:
Du versuchst mit dem scanf eine Zahl einzulesen. Du tippst aber einen Buchstaben. Daher scheitert die Eingabe, weil ein Buchstabe keine Zahl ist.Es ist zwar richtig, dass chars intern auch nur Zahlen sind. Dieses Konzept auf Ein- und Ausgabe zu übertragen wäre aber reichlich unintuitiv, weswegen scanf zwei unterschiedliche Eingabemodi für Zeichen und für Zahlen hat.
-
Okay danke,
das hilft mir soweit..
also im Internet steht, dass mit scanf("%c.. buchstaben auslesen kann,.
die if funktion sagt bei mir jetzt auch nur, dass wenn von klein a bis klein z..aber das DANN fehlt scheinbar noch//edit:
war alter code, poste gleich den neuen
-
#include "stdafx.h" void main() { const int Unterschied = 'a' - 'A'; char cBUCHSTABE; printf("\nBitte Buchstaben eingeben: "); scanf("%c",&cBUCHSTABE); //int einlesen fflush(stdin); if (cBUCHSTABE >= 'a' && cBUCHSTABE <= 'z') { printf("\n%c",cBUCHSTABE-Unterschied); // char ausgeben } else if (cBUCHSTABE >= 'A' && cBUCHSTABE <= 'Z') { printf("\n%c",cBUCHSTABE+Unterschied); //char ausgeben } }
habs nun endlich.. scheiss knobellei..
ist doch garnich so schwer ^^
-
Mahlzeit,
nochmal kurz zur Aufgabe 1, warum da noch extra Modulodivision einbringen?
Mach doch ne ganz einfache Schleife mit:for(int i=1; i<=101;i=i+2) cout << i << endl;