Workshop von Zerd und XBelt geschlossen 

Status
Für weitere Antworten geschlossen.
Hi,

THX erstmal, dass mit dem if hat jetzt geklappt

hab schon wieder ein kleines Problem, und zwar hab ich im Kapitel Kontrollstrukturen die Aufgabe mit dem Taschenrechner versucht

Hab zwischendrin mal kompiliert um zu sehen ob ich fehler im Code hab

Der Code sieht bis jetzt so aus:

PHP:
#include 

int main() {
int zahl1, zahl2, rechenzeichen, ergebniss;

// Erste Zahl abfragen
std::cout std::cin >> zahl1;

//Zweite Zahl abfragen
std::cout std::cin >> zahl2;

//Rechenzeichen abfragen
std::cout ";
std::cin >> rechenzeichen;

if (rechenzeichen == +) {
ergebniss = zahl1 + zahl2;
}
return 0;
}

Beim kompilieren kommen dann zwei Fehler:

error C2059: Syntaxfehler: ')'
error C2143: Syntaxfehler: Es fehlt ';' vor '{'
 
Du hast übersehen das + ein einzelner char wert ist. (Siehe Kapitel "Standard Datentypen")

Wenn du ein einzelnes Zeichen (was keine Zahl ist) vergleichen willst musst du das Zeichen in Hochkommas schreiben.
also
PHP:
if(rechenzeichen == '+') {
...
}

Und versuch dich dran zu gewöhnen deinen Sourcecode besser zu formatieren (siehe Kapitel strukturiertes Programmieren) Dann ist der deutlich besser zu lesen :)
 
Hi,

hab den Taschenrechner jetzt fertig geschrieben und kompiliert, aber beim ausführen kommt eine Fehlermeldung:

a61814515795616663dd35ae6.jpg


Der Code:

PHP:
#include 

int main() {
int zahl1, zahl2, rechenzeichen, ergebniss;

// Erste Zahl abfragen
std::cout std::cin >> zahl1;

//Zweite Zahl abfragen
std::cout std::cin >> zahl2;

//Rechenzeichen abfragen
std::cout  ";
std::cin >> rechenzeichen;

if (rechenzeichen == '+') {
ergebniss = zahl1 + zahl2;
}

if (rechenzeichen == '-') {
ergebniss = zahl1 - zahl2;
}

if (rechenzeichen == '*') {
ergebniss = zahl1 * zahl2;
}

if (rechenzeichen == '/') {
ergebniss = zahl1 / zahl2;
}

//Ergebniss ausgeben
std::cout 
return 0;
}

Und noch eine Frage: Was kann ich denn an der Formatierung vom Code noch verbessern ?
 
Der Fehler kommt weil du ergebniss nicht mit einem Wert initialisiert hast.

Es kommt zu der Meldung, weil das Programm zur Laufzeit nicht 100% sicher sein kann das am Ende ein gültiger Wert in der Variable gespeichert ist.


Änder die Variablendeklaration so ab:
int zahl1 = 0, zahl2 = 0, rechenzeichen = 0, ergebniss = 0;


Du kannst deinen code besser Formatieren indem du die Zeilen besser einrückst.

Schlecht Formatiert:
PHP:
int main() {
int variable=0;
if(variable==0)
std::cout else
std::cout return 0;
}
Gutes Beispiel:
PHP:
int main() {
int variable=0;

if(variable==0) {
std::cout  }
else {
std::cout  }

return 0;
}

Durch das Einrücken erkennt man schnell wozu die funktionen gehören. Man sieht z.B. direkt das die Ausgaben zur if-else-abfrage gehören.
 
Hab´s abgeändert, allerdings gibt der Taschenrechner immer den Wert 0 aus

PHP:
#include 

int main() {
int zahl1 = 0, zahl2 = 0, rechenzeichen = 0, ergebniss = 0;

// Erste Zahl abfragen
std::cout  std::cin >> zahl1;

//Zweite Zahl abfragen
std::cout  std::cin >> zahl2;

//Rechenzeichen abfragen
std::cout  ";
std::cin >> rechenzeichen;

if (rechenzeichen == '+') {
ergebniss = zahl1 + zahl2;
}

if (rechenzeichen == '-') {
ergebniss = zahl1 - zahl2;
}

if (rechenzeichen == '*') {
ergebniss = zahl1 * zahl2;
}

if (rechenzeichen == '/') {
ergebniss = zahl1 / zahl2;
}

//Ergebniss ausgeben
std::cout 
return 0;
}
 
Sorry da hab ich gepennt...

Die variable rechenzeichen muss natürlich vom Typ char sein, da es ja keine Zahl sondern ein Zeichen ist.
 
Denn Taschenrechner mit if hab ich jetzt fertig


Bei der nächsten Aufgabe(das gleiche nur mit switch case) habe ich jetzt aber auch ein kleines Problem

PHP:
#include 

int main() {
int zahl1 = 0, zahl2 = 0, ergebniss = 0;
char rechenzeichen = 0;

//Erste Zahl abfrage
std::cout  std::cin >> zahl1;

//Zweite Zahl abfragen
std::cout  std::cin >> zahl2;

//Rechenzeichen abfragen
std::cout  ";
std::cin >> rechenzeichen;

switch(rechenzeichen) {
case '+':
ergebniss = zahl1 + zahl2;
case '-':
ergebniss = zahl1 - zahl2;
case '*':
ergebniss = zahl1 * zahl2;
case '/':
ergebniss = zahl1 / zahl2;
default:
std::cout  }

std::cout  return 0;
}


Des Teil sagt immer Ungueltige Eingabe, egal was ich eingebe
 
Schön das du so fleißig bist ;)

PHP:
break;
in jeder case anweisung vergessen ;)

Ohne break; läuft er durch jede case anweisung durch bis zum default
 
Mit Brake kommt beim kompilieren folgende Fehlermeldung:

error C2065: 'brake': nichtdeklarierter Bezeichner

PHP:
#include 

int main() {
int zahl1 = 0, zahl2 = 0, ergebniss = 0;
char rechenzeichen = 0;

//Erste Zahl abfrage
std::cout  std::cin >> zahl1;

//Zweite Zahl abfragen
std::cout  std::cin >> zahl2;

//Rechenzeichen abfragen
std::cout  ";
std::cin >> rechenzeichen;

switch(rechenzeichen) {
case '+':
ergebniss = zahl1 + zahl2;
brake;
case '-':
ergebniss = zahl1 - zahl2;
brake;
case '*':
ergebniss = zahl1 * zahl2;
brake;
case '/':
ergebniss = zahl1 / zahl2;
brake;
default:
std::cout  }

std::cout  return 0;
}

€dit: Hab den Fehler gefunden, es heisst break; nicht brake;
 
Ich hätte auch Interesse, allerdings müsstest du bei mir alles hinschreiben, welchen Compiler du benutzt usw... :D

Ich hab mir nämlich erst ein C++ Buch geholt, das ist aber nicht grade gut, da dort keine GUI Programmierung ist.
 
Ich hätte auch Interesse, allerdings müsstest du bei mir alles hinschreiben, welchen Compiler du benutzt usw... :D

Ich hab mir nämlich erst ein C++ Buch geholt, das ist aber nicht grade gut, da dort keine GUI Programmierung ist.

Das versteh ich jetzt nicht so richtig....
Den Workshop findest du hier: http://www.freesoft-board.to/f155/c-workshop-von-zerd-205683.html

GUI Programmierung habe ich da allerdings auch noch nicht drin, kommt vielleicht irgendwann mal dazu. Davor müssen allerdings erst noch ein paar andere Sachen behandelt werden (z.B. Klassen). Leider fehlt nur im Moment die Zeit dafür.
 
Starwalker schrieb:
welchen Compiler du benutzt usw... :D

Steht ganz am Anfang vom Workshop:

Microsoft Visual C++

€dit:

Wie macht man eigentlich Potenzen ?

Ich hab´s jetzt mal so probiert:

PHP:
#include 
int main() {
int test = 0;
test = 2^2;
std::cout  return 0;
}


Aber des gibt immer den Wert 0 zurück
 
Hallo 9999,

2^2 ist eine bitmässige exklusiv Oder Verknüpfung...

Eine Potenz wird mit der Methode pow erzeugt.
PHP:
double test;
test = pow (2,2);
 
Hi,

mal wieder ein Problem:

PHP:
#include 

int main() {
double potenz;
potenz = pow (2,2);
std::cout  return 0;
}

Fehlermeldung: "error C3861: "pow": Bezeichner wurde nicht gefunden."

MFG 9999
 
ein
Code:
#include
vorneweg sollte das Problem lösen...
 
Erstmal THX @ Feuerstein, allerdings klappt´s leider immernochnicht so ganz

"fatal error C1083: Datei (Include) kann nicht geöffnet werden: "math": No such file or directory"

PHP:
#include 
#include 

int main() {
double potenz;
pow potenz (2,2);
std::cout  return 0;
}
 
PHP:
#include

muss es heißen...

solche Fragen lassen sich meist ganz schnell mit google lösen ;)
 
Stimmt... Jetzt haben wir auch alles durch ;)

Wenn du benutzt heißt es dann
PHP:
std::pow(2, 2);
 
So - ich hab da auch mal eine Frage.

Ich hab heut früh zwar erst damit angefangen, bleib aber momentan
beim rechnerproggi hängen, soweit läuft alles
Also der erste teil vom programm macht praktisch
dasselbe wie der zweite teil, das eine is nur mit if, das
andere nur mit switch-case.

.->Dann wollt ich noch wissen wie das Ungleichheitszeichen ist für
If-Anweisungen Problem gelöst !=
->Und bei der switch-case Anweisung musste ich jedesmal bei jedem
case eine Ausgabe des Ergebnisses hinschreiben, ich wollte das aber
nur einmal am Ende der Caseanweisung machen, wie kann ich das realisieren?
->Und noch eine Frage: bei meiner If anweisung wahl==1
hab ich später die If anweisung erg==0 drinstehen um praktisch zu überprüfen
ob man nicht einen falschen operator verwendet hat, jedoch kann es ja
passieren, dass das ergebnis tatsächlich 0 ist, wie kann ich das lösen?
Auch hier wollte ich nicht unter jede If anweisung eine Ausgabe fomulieren,
sondern insgesamt unter alle If-Anweisungen eine Ausgabe für alles.
->Frage 4. wenn ich z.b. gleich beim ersten durchlauf des Programm ne 3 eingebe, kommt meine ausgabe, das ein falscher operator verwendet wurde
aber auch so eine wirre Zahl, wo kommt die her???
Problem gelöst also jungs wenn bei euch im Programmdurchlauf die Zahl "10572ACC"
begegnet, dann müsst die aus dem std::cout ein std::endl machen!


Achso Zerd, ab und zu muss man mal überlegen, aber das is ja auch sinn
und Zweck, ich würde mich jedenfalls sehr freuen, wenn du das TUT
weiterführst, dein letzter Beitrag liegt ja schon etwas zurück.
Und wie bekomme ich raus ob eine Zahl ne Primzahl ist?
Woher weiß ich ob ein Rest vorhanden ist oder nicht, bzw.
wie mache ich das dem Programm klar.
Edit: nach rund 2 stunden googeln und probieren hab ich immerhin
schon rausgefunden, dass das % den rest angibt und kein komplettes
ergebnis - das war ne schwere geburt :P

mfg. Chaosbohne

PS:

Bei dir fehlt im Kapitel schleifen, bei der for-schleife
nach dem return 0 das semikolon


PHP:
#include 
#include 

int main () {

float zahl1, zahl2, erg=0, wahl;
char op, falsch='-';

std::cout  std::cin >> wahl;

if(wahl==1) {

std::cout  std::cin >> zahl1;
std::cout  std::cin >> zahl2;
std::cout ]: "  std::cin >> op;

if(op=='+') {
erg=zahl1 + zahl2;
}
if(op=='-') {
erg=zahl1 - zahl2;
}
if(op=='*') {
erg=zahl1 * zahl2;
}
if(op=='/') {
erg=zahl1 / zahl2;
}
if(erg==0) {
std::cout  } else {
std::cout  }

}

if(wahl==2) {

std::cout  std::cin >> zahl1;
std::cout  std::cin >> zahl2;
std::cout ]: "  std::cin >> op;

switch(op) {
case '+':
erg=zahl1 + zahl2;
std::cout  break;
case '-':
erg=zahl1 - zahl2;
std::cout  break;
case '*':
erg=zahl1 * zahl2;
std::cout  break;
case '/':
erg=zahl1 / zahl2;
std::cout  default:
std::cout  }
}

else {
std::cout  }

return 0;
}


Soo ich hab mal wieder ein bissl rumgebastelt.
Und hier ist mein Primzahlprogramm - bitte guggts euch mal an,
denn ich finde, das ich dass manchmal ziemlich umstädnlich gemacht habe
gibts dafür nen einfacheren code?
Aso Proggi 1 gibt euch alle Primzahlen von 0 bis zu eurer eingegebenen Zahl wieder
proggi 2 überprüft ob eure zahl ne primzahl ist.
PHP:
#include  
#include 

int main() {

int anzahl,i,c,d,e,f,wahl,zahl,g,h,j,k;

std::cout  std::cin >> wahl;

if(wahl==1) {


std::cout  std::cin >> anzahl;

if(anzahl {
if(anzahl==2)
{ std::cout  if(anzahl==3)
{ std::cout  std::cout  if(anzahl==4)
{ std::cout  std::cout  if(anzahl==5)
{ std::cout  std::cout  std::cout  if(anzahl==6)
{ std::cout  std::cout  std::cout  if(anzahl==7)
{ std::cout  std::cout  std::cout  std::cout  
}

if(anzahl>7)
{
std::cout  std::cout  std::cout  std::cout 
for(i=2; i {

c=i%2;
d=i%3;
e=i%5;
f=i%7;

if(c!=0 && d!=0 && e!=0 && f!=0)
{
std::cout  }
}
}


}

if(wahl==2) {
std::cout  std::cin >> zahl;

c=zahl%2;
d=zahl%3;
e=zahl%5;
f=zahl%7;

g=zahl/2;
h=zahl/3;
k=zahl/4;
j=zahl/5;

if( zahl  std::cout  }


else if( zahl >7 && c!=0 && d!=0 && e!=0 && f!=0 ) {
std::cout  }
else {
std::cout  }

}


return 0;
}
 
hey leute,
erstmal ein großes lob an dich zerd :) danke für das tut.
ich häng allerdings beim taschenrechner...hier erstmal mein code, dann die fragen :D
PHP:
 #include 

using namespace std;

int main () {
int wert1;
int wert2;
int ergebnis;
char rechenart;

cout cin >> wert1, >> wert2;
cout  ";
cin >> rechenart;


if (rechenart== '+') {
cout 
if (rechenart=='-') {
cout 
if (rechenart== '/') {
cout 
if (rechenart== '*') {
cout  

return 0;
}
nja es klappt halt nicht...darum zuerst: warum?!^^
hab mal die andren lösungsvorschläge angesehen, aber verstehe ich nicht warum ich für den rechenoperator nicth einfach "char rechenart " nehmen kann ohne die genauen rechenarten zu definieren oder was auch immer...:confused:
lg yuri

edit:
ich seh grad es hat was mit den selbst definierten klassen zu tun oder? ist zumindest naheliegend, da ich das kapitel nicht verstanden habe :/
so nochmals lg
 
hi,
keine Ahnung was du da gemacht hast, aber da warn einige Bugs drin, ich hab mir mal die Freiheit genommen, die zu korrigieren und bissel Quelltext dokumentiert.
PHP:
#include 

using namespace std;

int main () {
int wert1 = 0; // Werte auf Null gesetzt, gibt manchmal Probleme damit
int wert2 = 0;
int ergebnis = 0;
char rechenart;

cout cin >> wert1; // Eingabe muss einzeln erfolgen, so wie du es gemacht hast, gehts nicht
cin >> wert2;

cout  ";
cin >> rechenart;


if (rechenart== '+') {
ergebnis = wert1 + wert2; //Ergebnis muss vorher deklariert werden
cout  
//cout /das wäre die Alternative Lösung, Variable "ergebnis" hier unnötig

} //Klammer wieder schließen nicht vergessen

if (rechenart=='-') {
ergebnis = wert1 - wert2;
cout  }//Klammer schließen

if (rechenart== '/') {
ergebnis = wert1 / wert2;
cout  }//Klammer schließen

if (rechenart== '*') {
ergebnis = wert1 * wert2;
cout  }//Klammer schließen


cout system("Pause"); //damit das Konsolenfenster nicht dauernd zu geht
return 0;
}
hoffe konnte so einigermaßen helfen, wobei ich hier nur die Fehler geändert hab, nix am Design oder so. Ausserdem fehlt bei der Division noch der Fall das Wert2 = 0 ist, also Division unmöglich. Eine weitere und meiner Meinung nach elegantere Lösung ist die ganze Operationszeichenproblematik nicht mit IF-Anweisungen zu lösen, sondern über CASE.
Ansonsten noch viel Spass beim Proggen ;)
greetz
 
oki super danke dir :) jetzt geht es. k das mit dem deklarieren hatte er mir auch als fehler gesagt, aber ich wusste nicht wie ich s ändern kann :)
danke :)
edit:
würdest du denn am design was ändern? zwecks übersichtlichkeit?
lg
 
hi,
hab das ganze noch ein bisschen optimiert ;)
PHP:
#include 

using namespace std;

int main () 
{
double wert1 = 0, wert2 = 0, ergebnis = 0; //Zusammenfassung aller Variablen eines Typs, double wegen gebrochenen Zahlen
char rechenart;

cout  cout  cin >> wert1; //Eingabe Zahl1

cout  cin >> wert2; //Eingabe Zahl2

do{
cout ]: ";
cin >> rechenart; //Eingabe Rechenart
}while ((rechenart == '/') && (wert2 == 0)); //Division durch Null abfangen, erneute Eingabe

switch(rechenart) //Auswahl der Rechenart
{
case '+' : ergebnis = wert1 + wert2; break;
case '-' : ergebnis = wert1 - wert2; break;
case '*' : ergebnis = wert1 * wert2; break;
case '/' : ergebnis = wert1 / wert2; break;
} 

cout /Pausiert Konsolenfenster
return 0;
}
man könnte hier noch andere Eingabefehler abfangen, wenn man das wollte, aber so ungefähr könnte es aussehen. Ansonsten noch viel Spass beim Probieren :D
greetz
 
hi Zerd!
hätte da eine Frage: was bringen sich Zeiger? Bzw wann ist es schlau welche zu benutzen?? Wieso sollte man eine variable über einen "Umweg" ändern wollen wenn man das doch sowieso direkt machen könnte?
thx schon mal,

MFG :)
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

S
Antworten
1
Aufrufe
6K
Antworten
0
Aufrufe
958
Antworten
11
Aufrufe
2K
bladerunner
B
N
Antworten
3
Aufrufe
788
Zurück
Oben Unten