PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] 2 Programme von einem Anfänger. Was kann ich verbessern ?



Rexo
11.12.2011, 19:46
Hoy,

ich beschäftige mich momentan ein bisschen mit C++, so ein Bisschen aus Spaß. Jetzt habe ich 2 Programme geschrieben. Ein sinnloses und einen Taschenrechner.

Erstmal das sinnlose: http://pastebin.com/3J4CZW5x

bzw:


#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
int Tag;
int Monat;
int Jahr;

cout << "An welchen Tag wurdest du geboren ? " << endl;
cin >> Tag;
cout << " Du wurdest also am " <<Tag<< " geboren. " << endl;
{
if( Tag == 5)
cout << "An dem Tag habe ich auch Geburtstag" << endl;
}
cout << "In welchem Monat wurdest du geboren ?" << endl;
cin >> Monat;
cout << " Du wurdest also im " <<Monat<<". Monat des Kalenders geboren" << endl;
{
if( Monat == 2)
cout << "In dem Monat wurde ich auch geboren" << endl;
}
cout << " In welchem Jahr war das ? " << endl;
cin >> Jahr;
cout << " Also wurdest du im Jahr "<<Jahr<<" geboren." << endl;
{
if( Jahr == 2011)
cout << "In dem Jahr wurde ich auch geboren" << endl;
}

cout << " Du wurdest also am: " << endl;
cout << Tag << "." << Monat << "." << Jahr << " geboren." << endl;
{
if( Tag == 5)
if( Monat == 2)
if( Jahr == 2011)
cout << "Du hast am selben Tag Geburtstag wie ich" << endl;
system("pause");

}
{
if( Tag == 9)
cout << "Am 9. haben nur Opfer Geburtstag :( " << endl;
}
{
if( Tag == 9)
cout << "Am 9. haben nur cool Leute Geburtstag, das ist cool" << endl;
}
{
if( Jahr == 1950);
cout << " Du steckst also in den besten Jahren :D" << endl;
}
}




So, was kann daran verbessen, dass ich einfach nur weniger Zeilen brauche ? Ist rpaktisch ein Beispielprogramm um mal alles was ich so kann auszuprobieren :D

Als nächstes einen Taschenrechner:

http://pastebin.com/w6Ha2qg9



#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
int rechenoption;
int zahl1, zahl2;


cout << "Taschenrechner" << endl;
cout << "Bitte waehle die gewünschte Option! " << endl;
cout << "1. Addition." <<endl;
cout << "2. Substration" <<endl;
cout << "3. Multiplikation" <<endl;
cin >> rechenoption;

if (rechenoption == 1)
{
cout << "Sie haben sich für Addition entschieden" << endl;
cout << " Bitte geben Sie zwei Zahlen ein" << endl;
cin >> zahl1;
cout << "Zweite Zahl:";
cin >> zahl2;
cout << zahl1 << " + " << zahl2 << " = " << (zahl1 + zahl2) << endl;
}
if (rechenoption == 2)


{

cout << "Sie haben sich für Substration entschieden" << endl;
cout << " Bitte geben Sie zwei Zahlen ein" << endl;
cin >> zahl1;
cout << "Zweite Zahl:";
cin >> zahl2;
cout << zahl1 << " - " << zahl2 << " = " << (zahl1 - zahl2) << endl;

system("Pause");

}

if (rechenoption == 3)


{
cout << " Sie haben sich fuer die Multiplikation entschieden" << endl;
cout << " Bitte geben Sie zwei Zahlen ein" << endl;
cout << " Zahl 1: " << endl;
cin >> zahl1;
cout << "Zahl 2: " << endl;
cin >> zahl2;
cout << zahl1 << " * " << zahl2 << " = " << (zahl1 * zahl2) << endl;

system ("Pause");
}
}



Wie kann ich das wirklich besser machen ? Und viel wichtiger, wie kann ich das "grafisch" machen ? Wollte so einen simplen Taschenrechner mit Visual Studio machen. Doch keine Ahnung wie ich via einen Button eine Zahl in eine Textbox reinschreibe. Wie kann ich das genau machen ?

Das alles ist mein Einstieg in alle Programmiersprachen, davor nur gescripted und auch ähnlich angefangen, so wie hier, und jetzt läufts :D
Deswegen hoffe ich, dass ihr mir wirklich helfen könnt ohne übermäßige Arroganz und aufgespielter Nettigkeit. Danke :)

Barbers
11.12.2011, 19:50
beim 1. programm könntest du spaßes halber berechnen was das für ein wochentag war ^^

Rexo
11.12.2011, 19:54
Kein Ahnung wie ich das machen soll. Denn da muss ich ja das aktuelle Datum einlesen. Und ich weiß nicht wie ich das genau coden soll D:

wacked
11.12.2011, 19:57
if(Tag == 9 && Monat == 12 ...)

Wenn du wirklich mit GUI in C anfangen willst: WinAPI, GTK oder QT. Aber lass es erstmal.

Rexo
11.12.2011, 19:58
oh, danke. Ich hatte das mit einem Semikolon getrennt, bloß leider lief das nicht wirklich gut D:

Deswegen hatte ich das einfach mit 3 x if gelöst.
Danke :)

SUNZ
11.12.2011, 20:03
beim zweiten die division hast du vergesen und könntest noch eine additive inverse rein basteln sowie den befehl fabs (aus c k.a. ob die in c++ auch noch exestiert aber ich glaub da hab ich die auch schonmal benutzt)

additive inverse ( aus 3 wird -3 | x = 3, y = 0 | y -= x oder auch y = y-(x*2) )
fabs ( aus -3 wird 3 | direkter befehl inc / c++)
division: musst drauf achten das keine division aus null gemacht werden kann (eine oder if anweisung)

Bonkers
11.12.2011, 20:15
if( Jahr == 2011)
cout << "In dem Jahr wurde ich auch geboren" << endl;



Ist wahrscheinlich falsch, außer du bist ein hochbegabtes Kleinkind ;)

Rexo
11.12.2011, 20:17
Muss ich dann auch

#include <math.h>

einbinden ?

//

Hatte alles echte drin, habs dann aber für euch ein Bisschen verändert :)

Bonkers
11.12.2011, 20:20
Muss ich dann auch

#include <math.h>


Ja musst du.

Aber:


int x = -5;

fabs(x) = 5
x * -1 = 5


Mit -1 multiplizieren macht das gleiche, musst dann nur noch auf float casten.

Rexo
11.12.2011, 20:23
Wie kann ich denn genau verhindern, dass wenn etwas anderes als eine Zahl eingegeben wird eine Meldung kommt, dass eine Zahl erforderlich ist und da dann nicht mit dem Buchstaben weiter gerechnet wird ?

SolidNerd
11.12.2011, 20:25
Wie wäre es wenn du deine beiden Programme jeweils in eine eigene Klasse schreibst. Denn C++ ist OOP ! Also nutze dies bitte auch :).Falls du einfach GUI's bauen möchtest Programmier doch in C#. Dort kannst du auch das Visual Studio nehmen und eine GUI lässt sich einfach per Drap & Drop zusammenstellen.

Rexo
11.12.2011, 20:26
Geht das überhaupt wenns bloß eine Konsolenanwendung ist ?

SUNZ
11.12.2011, 21:02
ja es geht auch nur mit einer Konsolen Anwendung
auch c++ gibt es als Visual Studio Version bei Microsoft

Rexo
11.12.2011, 21:10
Ich kann das bei C++ auch via D&D, aber irgendwie gefällt mir C++ besser, da es mich immer sehr stark an PHP erinnert und ich damit dann alles einfacher nach vollziehen kann.

Ich kann nur bei Konsolenanwendungen Klassen erstellen ? Oo

SUNZ
11.12.2011, 21:19
nein auch bei gui, sry darum "auch" in meinem satz

Arktus
11.12.2011, 21:21
Zum 2. Programm:

An Stelle der 3 if-Blöcke eine switch-Verzweigung nutzen. Zu Lernzwecken vl. die einzelnen Rechenarten in Funktionen oder Klassen auslagern.
Gewöhn dir bitte nicht system() an. Wenn schon, dann cin.get().

Rexo
11.12.2011, 21:22
Was macht das genau für einen Unterschied ?

IRET
11.12.2011, 21:25
Was macht das genau für einen Unterschied ?

system() führt einen Befehl aus. Wenn du jetzt ein Programm für Linux, WIndows und Mac schreibst, wirst du mit system("PAUSE") ein Problem haben, da dies nur Windows kennt.

ocz
11.12.2011, 21:30
finde ja die random Blöcke vor den ifs interessant

Rexo
11.12.2011, 21:52
Was meinst du damit genau ocz ? :<

btw. danke für all die guten Tipps bisher. Bin gerade mit den Klassen beschäftigt.

ocz
11.12.2011, 21:57
du machst sowas wie
{
if (... )
bla;
}

was zwar syntaktisch korrekt ist, aber keinen sinn macht. Einmal hast du btw auch nen semikolon hinter dem if.

Rexo
11.12.2011, 22:04
Ist es nicht gut solange es funktioniert ? :D

Der ganze Krams ist alles ein Bisschen hardcoded, aber ich denke das kriege ich auch noch besser hin :)

// Stimmt auch wieder, auch wenn ich es ja meistens nur lesen muss, aber danke :)

sp1nny
11.12.2011, 22:13
Es geht nicht darum, ob es funktioniert, sondern wie gut es zu lesen ist.

_

Wieso die Lesbarkeit so wichtig ist? Hier mal ein C-Code um Ascii in MorseCode umzuwandeln:



/* ASCII to Morsecode */
/* Obfuscated C */

#include<stdio.h>
#include<string.h>
main(){char*O,l[999]="'`acgo\177~|xp .-\0R^8)NJ6%K4O+A2M(*0ID57$3G1FBL";while(O=fgets(l+45,954,stdin)){
*l=O[strlen(O)[O-1]=0,strspn(O,l+11)];while(*O)switch((*l&&isalnum(*O))-!*l){case-1:{char*I=(O+=strspn(O,l+12)+1)-2,O=34;
while(*I&3&&(O=(O-16<<1)+*I---'-')<80);putchar(O&93?*I&8||!(I=memchr(l,O,44))?'?':I-l+47:32);break;
case 1:;}*l=(*O&31)[l-15+(*O>61)*32];while(putchar(45+*l%2),(*l=*l+32>>1)>35);case 0:putchar((++O,32));}putchar(10);}}


:)