Eine Idee von SickSta aufnehmend, öffne ich hier mal einen Sammelthread für die kleinen Fragen zwischendurch.
Ich wäre dankbar, wenn Postings mit der Zielsprache in eckigen Klammern, z.B. [C++] - Api Aufruf
beginnen würden. Oder andersherum: alle anderen Postings fliegen unkommentiert heraus!
Viel Spaß!
erstmal vorweg:
Ich programmiere in C# mit MS Visual Studio 2005.
Ich bräuchte ein paar kleinigkeiten um ein Progrämmchen zum erstellen:
- ich bräuchte einen Timer der bis 3 sec. bzw. bis 3 min läuft
- wie fange ich in einer Form einen Tastendruck wie z.b. die Taste "A", die Taste soll beim drücken vom Programm "regestriert" werden nicht beim loslassen oder beim halten der Taste.
Ich hoffe ihr könnt mir weiterhelfen.
da ich noch Anfänger bin währ es ganz hilfreich wenn ihr hier nicht gleich komplexe Quellcodes postet, bzw. wenn doch dann währe es ganz nett wenn diese auskommentiert währen...
Re: [Sammelthread] Codeschnippsel und kurze Fragen
Danke das du diesen Thread aufgemacht hast.
Jetzt mal zu meiner Frage. Eigentlich sind es sogar 2. Ich arbeite immer noch an meinem Taschenrechner, der bis auf Division ganz gut Funktioniert. Ich Poste hier mal meinen Code. Die Fragen sind schon in den Kommentaren
Spoiler:
Code:
#include <cstdlib>
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{
// Deklaration
int wunsch;
int anzahlrechnungen;
float ergebnis = 0;
float eingabe = 0;
float eingabe2 = 0;
int i = 1;
// Problem: Jede Operation wird 2mal ausgeführt
cout << "-------------------------------------" << endl;
cout << "Waehlen Sie eine Rechenart." << endl;
cout << "#1 Addieren" << endl;
cout << "#2 Subtrahieren" << endl;
cout << "#3 Multiplizieren" << endl;
cout << "#4 Dividieren" << endl; // Problem
cout << "#5 Wurzel ziehen" << endl;
cout << "#6 Potenzieren" << endl;
cout << "-------------------------------------" << endl;
cin >> wunsch;
if( wunsch == 1 )
{
cout << "Um die Rechnung zu stoppen geben sie eine 0 ein!" << endl << endl;
while( i <= anzahlrechnungen )
{
cout << "Geben Sie die " << i << ". Zahl zum addieren ein: " << endl;
cin >> eingabe;
ergebnis = ergebnis + eingabe;
i = i++;
if ( eingabe == 0 )
{
cout << "\aDas Ergebnis dieser Addition lautet: " << ergebnis << endl;
break;
}
}
}
if( wunsch == 2 )
{
cout << "Um die Rechnung zu stoppen geben sie eine 0 ein!" << endl << endl;
while( i <= anzahlrechnungen )
{
cout << "Geben Sie die " << i << ". Zahl zum subtrahieren ein: " << endl;
cin >> eingabe;
ergebnis = eingabe - ergebnis;
i = i++;
if ( eingabe == 0 )
{
cout << "\aDas Ergebnis dieser Subtraktion lautet: " << ergebnis << endl;
break;
}
}
}
if( wunsch == 3 )
ergebnis = 1; // Redeklartion, weil man sonst alles mal "0" nimmt
{
cout << "Um die Rechnung zu stoppen geben sie eine 1 ein!" << endl << endl;
while( i <= anzahlrechnungen )
{
cout << "Geben Sie die " << i << ". Zahl zum multiplizieren ein: " << endl;
cin >> eingabe;
ergebnis = eingabe * ergebnis;
i = i++;
if ( eingabe == 1 )
{
cout << "\aDas Ergebnis dieser Multiplikation lautet: " << ergebnis << endl;
break;
}
}
}
if( wunsch == 4)
// C++ rechnet nicht 12:2:3=2, sonder (2:3):12=0,055556....
// Beim ersten Mal kommt immer 0 raus, danach das oben genannte Prob.
ergebnis = 1; // Redeklartion, weil man nicht durch "0" teilen darf
{
cout << "Um die Rechnung zu stoppen geben sie eine 1 ein!" << endl << endl;
while( i <= anzahlrechnungen )
{
cout << "Geben Sie die " << i << ". Zahl zum dividieren ein: " << endl;
cin >> eingabe;
ergebnis = eingabe / ergebnis;
i = i+1;
if( eingabe == 1 )
{
cout << "\aDas Ergebnis dieser Divison lautet: " << ergebnis << endl;
break;
}
}
}
if( wunsch == 5 )
{
cout << "Geben Sie nun die Zahl ein, deren Wurzel Sie ziehen wollen." << endl;
cin >> eingabe;
ergebnis = sqrt( eingabe );
cout << "\aDie Wurzel aus " << eingabe << " lautet: " << ergebnis << endl;
}
if( wunsch == 6 )
{
cout << "Geben Sie die Basis ein." << endl;
cin >> eingabe;
cout << "Geben Sie die Exponent ein." << endl;
cin >> eingabe2;
ergebnis = pow( eingabe, eingabe2 );
cout << "\aDas Ergebnis der Potenzrechnung " << eingabe << "^" << eingabe2;
cout << " lautet: " << ergebnis << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
So hier nochmal die Probleme/ Fragen für alle:
1) Irgendwie rechnet der Rechner immer 2 mal, bei Division zeigt er sogar erst ab der zweiten Rechnung ein "vernünftiges Ergebnis an.
2) Bei Division wird in einer "falschen" Reihenfolge dividiert.
Zitat:
C++ rechnet nicht 12:2:3=2, sonder (2:3):12=0,055556....
Beim ersten Mal kommt immer 0 raus, danach das oben genannte Prob
Re: [Sammelthread] Codeschnippsel und kurze Fragen
Bin neu auf dem Gebiet und hab mir eben mal Visual Studio 05 gezogen. Hat das Programm überhaupt einen Compiler oder sonst eine Möglichkeit um zu sehen was man da programmiert hat -.- ?
Re: [Sammelthread] Codeschnippsel und kurze Fragen
@SickSta:
ich glaub du hast da einfach einen Dreher drin:
Code:
while( i <= anzahlrechnungen )
{
cout << "Geben Sie die " << i << ". Zahl zum dividieren ein: " << endl;
cin >> eingabe;
ergebnis = eingabe / ergebnis;
i = i+1;
Schreib einfach mal:
ergebnis = ergebnis / eingabe;
ansonsten würdest du ja die eingabe durch das letzte zwischenergebnis teilen.
Re: [Sammelthread] Codeschnippsel und kurze Fragen
Zitat:
Zitat von Deathwalker
@SickSta:
ich glaub du hast da einfach einen Dreher drin:
Code:
while( i <= anzahlrechnungen )
{
cout << "Geben Sie die " << i << ". Zahl zum dividieren ein: " << endl;
cin >> eingabe;
ergebnis = eingabe / ergebnis;
i = i+1;
Schreib einfach mal:
ergebnis = ergebnis / eingabe;
ansonsten würdest du ja die eingabe durch das letzte zwischenergebnis teilen.
Vom Prinzip her richtig . Allerdings kommt nach dem Compilen trotzdem nicht das richtige raus. Ich will das er wenn ich erst 12 dann 2 und schließlich 3 eingebe, die 2 ausgibt und keine winzige Kommazahl. Vielleicht liegt es auch an meinem Compiler ich arbeite immer noch mit Dev-C++ der hier ja anscheinend sehr unbeliebt ist .
Und das Problem das er immer nach 2 Rechnungen fragt is auch noch da, allerdings könnte das auch am Compiler liegen. Viieleich kann ja mal ein anderer meinen Coden compilen und das ausprobieren ...
Re: [Sammelthread] Codeschnippsel und kurze Fragen
Zitat:
Zitat von Schmeisser
Bin neu auf dem Gebiet und hab mir eben mal Visual Studio 05 gezogen. Hat das Programm überhaupt einen Compiler oder sonst eine Möglichkeit um zu sehen was man da programmiert hat -.- ?
MfG.
Ja, hat es. Einfach ein leeres Konsolenprojekt öffnen, dann ein cpp-file hinzufügen, programmieren, ausführen, Fehler beseitigen, nochmal ausführen, Ergebnis sehen
Re: [Sammelthread] Codeschnippsel und kurze Fragen
Kleiner Tip @SickSta:
Fang dann mal an objektorientiert zu coden bevor dein Programm noch größer wird.
Und Visual Studio ist bäh.
Ich empfehle CodeBlocks oder Eclipse!
Re: [Sammelthread] Codeschnippsel und kurze Fragen
Zitat:
Zitat von Larius
Ja, hat es. Einfach ein leeres Konsolenprojekt öffnen, dann ein cpp-file hinzufügen, programmieren, ausführen, Fehler beseitigen, nochmal ausführen, Ergebnis sehen
Ok, ... ganz dumme Frage . Wie öffne ich ein neues Konsolenprojekt ?
Re: [Sammelthread] Codeschnippsel und kurze Fragen
Ich hätte hier ebenfalls mal eine kurze Frage:
Mein Programm liest eine Textdatei(welche beim aufruf des Programmes als Parameter mit angegeben wird) ein und analysiert sie nach der Anzahl der Zeilen, Wörter, Sätze und Zeichen insgsamt.
Jedoch kommt bei den Zeilen und Sätzen immer als Ergebnis, die echte Anzahl(nachgezählt) +1 und dann das doppelte. Die Wörter liefern irgendwas, ka warum, die Erklärung wie ich rausfinden will wieviel Wörter es sind steht kommentiert im Code.
PS: Soll kein überragendes Programm mit allen Möglichkeiten (z.b zwei Satzzeichen hintereinander usw.) sein. Von der Grundstruktur her sollte es eigentlich stimmen, aber ich komm einfach nicht dahinter warums nicht geht!?
Hier der Code:
Spoiler:
#include <iostream>
#include <fstream>
using namespace std;
int analysiereDatei(char*, int&, int&, int&);
int main (int argc, char* argv[])
{
if (argc < 2)
cout << "Bitte einen Dateinamen angeben!\n";
int Wort=0, satz=0, zeile=0;
int analysiereDatei(char* dateiname, int& Wort, int& satz, int& zeile)
{
int Zeichen = 0;
ifstream fin (dateiname);
if (!fin)
{return -1; fin.close();}
else
{
bool b = false, c = false;
char a, str[58] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S ','T','U','V','W','X','Y','Z','Ä','Ö','Ü','a','b','c','d','e','f','g','h',' i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','ä', 'ö','ü'};
while(fin.get(a)) //Solange eingelesen wird
{
if (a == '\n') //Zeilenzähler
zeile++;
if (a == '.' || a == '!' || a == '?' || a == ';' || a == ':') //Satzzähler
satz++;
for (int j = 0; str[j] != 'ü'; j++) //Durchläuft das Alphabet
{
if (a == str[j]) //Wenn das momentane Zeichen aus dem Originaltext enthalten ist im Alphabet
{
b = true;
c = true;
}
}
if(b == false && c == true) //Wenn b nicht wahr ist, also kein Buchstabe und c wahr ist, also das vorherige Zeichen ein Buchstabe war
{
Wort++; //Erhöhe den Wortzähler um eins, c ist dazu da, damit erst wenn wieder ein Wort begonnen hat, das nächste Zeichen ungleich Alphabet gezählt wird
c = false; //und nicht z.B jedes Leerzeichen oder andere Zeichen dazwischen
}
b = false; //b wieder auf false setzen, für den nächsten Durchgang
Zeichen++; //Zähler für die Zeichen insgesamt
}
}
fin.close();
return Zeichen;
}
Hab mir die Funktion selbst nicht angeguckt, aber hier sollte der Fehler liegen du musst dich nicht wundern das falsche Zahlen raus kommen wenn du die Funktion mehrmals aufrufst.
Re: [Sammelthread] Codeschnippsel und kurze Fragen
Huhu,
ich bin neu im c++ programmieren und habe auch eine Frage:
Ich möchte ein Programm schreiben, das ein anderes Programm öffnet. Also ich führe mein selbst geschriebenes Programm aus und dann öffnet sich z.b. Paint.
Wie muss der Code dann aussehen? Und Achtung, ich bin wirklich ein Anfänger ;D