|
You last visited: Today at 04:05
Advertisement
[C] Programmier Hilfe
Discussion on [C] Programmier Hilfe within the General Coding forum part of the Coders Den category.
06/23/2011, 11:41
|
#1
|
elite*gold: 26
Join Date: Aug 2010
Posts: 722
Received Thanks: 260
|
[C] Programmier Hilfe
Code:
#include<stdio.h>
int auswahlGetraenkeSorte();
int eingabeMenge();
float ermittlePreis(int sorte);
float bezahlen(float zuZahlen);
int pruefeGeldstueck(float muenze);
void ausgabeGetraenke(int sorte, int menge);
int main() {
printf("Getraenke Automat v0.5\n\n");
int sorte, menge;
float preis, zuZahlen, gezahlt;
sorte = auswahlGetraenkeSorte();
preis = ermittlePreis(sorte);
menge = eingabeMenge();
zuZahlen = preis * menge;
gezahlt = bezahlen(zuZahlen);
if(gezahlt >= zuZahlen) {
ausgabeGetraenke(sorte, menge);
printf("\n\nVielen Dank, bitte entnehmen sie ihre Getraenke.\n");
}else {
printf("\n\nBezahlvorgang abgebrochen.\n");
printf("Ausgabe von %.2f Euro.\n", gezahlt);
}
return 0;
}
int auswahlGetraenkeSorte() {
int sorte;
printf("Waehlen sie ihr Getraenk aus:\n");
printf("1) Wasser (0,50 Euro)\n");
printf("2) Limonade (1,00 Euro)\n");
printf("3) Bier (2,00 Euro)\n\n");
printf("Geben sie 1, 2 oder 3 ein: ");
scanf("%d", &sorte);
return sorte;
}
int eingabeMenge() {
int menge=1;
printf("\nGeben sie die gewuenschte Menge ein: ");
scanf("%d", &menge);
return menge;
}
float ermittlePreis(int sorte) {
float preis=0;
switch(sorte) {
case 1: preis = 0.5; break;
case 2: preis = 1.0; break;
case 3: preis = 2.0; break;
}
return preis;
}
float bezahlen(float zuZahlen) {
printf("\n--- Bezahlvorgang ---\n");
printf("\nBezahlvorgang abbrechen mit 0\n");
float einwurf, gezahlt=0;
do {
printf("\nEs fehlen noch %.2f Euro.", zuZahlen-gezahlt);
printf("\nBitte werfen sie ein Geldstueck ein: ");
scanf("%f", &einwurf);
if(einwurf == 0) {
break;
}
if(pruefeGeldstueck(einwurf)) {
gezahlt += einwurf;
}else {
printf("\nIhr Geldstueck ist ungueltig.");
}
} while(gezahlt < zuZahlen);
return gezahlt;
}
int pruefeGeldstueck(float muenze) {
int cent = muenze * 100;
switch(cent) {
case 5: return 1;
case 10: return 1;
case 20: return 1;
case 50: return 1;
case 100: return 1;
case 200: return 1;
default: return 0;
}
}
void ausgabeGetraenke(int sorte, int menge) {
printf("\n--- Getraenkeausgabe ---\n");
int i;
for(i=0; i < menge; i++) {
printf("\nFlasche %d von %d der Sorte %d wurde ausgegeben.",
i+1, menge, sorte);
}
}
So , das Programm funktioniert soweit bis man den Betrag komplett bezahlt , danach schließt es sich ich weiß nicht ob er den letzten teil noch bearbeitet da das Fenster wie gesagt sofort zu geht. Mit system ("PAUSE"); erziele ich auch keine erfolge! Ich bitte um einen denk anstoß !
|
|
|
06/23/2011, 11:53
|
#2
|
elite*gold: 0
Join Date: Jan 2011
Posts: 144
Received Thanks: 73
|
Das system ist aber genau das richtige, habe das ganze jetzt kopiert und eingefügt und getestet siehe hier:
Code:
Getraenke Automat v0.5
Waehlen sie ihr Getraenk aus:
1) Wasser (0,50 Euro)
2) Limonade (1,00 Euro)
3) Bier (2,00 Euro)
Geben sie 1, 2 oder 3 ein: 2
Geben sie die gewuenschte Menge ein: 1
--- Bezahlvorgang ---
Bezahlvorgang abbrechen mit 0
Es fehlen noch 1.00 Euro.
Bitte werfen sie ein Geldstueck ein: 4
Ihr Geldstueck ist ungueltig.
Es fehlen noch 1.00 Euro.
Bitte werfen sie ein Geldstueck ein: 2
--- Getraenkeausgabe ---
Flasche 1 von 1 der Sorte 2 wurde ausgegeben.
Vielen Dank, bitte entnehmen sie ihre Getraenke.
Drücken Sie eine beliebige Taste . . .
Du must natürlich noch #include <iostream> hinzufügen und system("PAUSE"); vor dem return 0 in deiner Main Funktion setzen.
|
|
|
06/23/2011, 12:08
|
#3
|
elite*gold: 26
Join Date: Aug 2010
Posts: 722
Received Thanks: 260
|
Quote:
Originally Posted by Ronox
Das system ist aber genau das richtige, habe das ganze jetzt kopiert und eingefügt und getestet siehe hier:
Code:
Getraenke Automat v0.5
Waehlen sie ihr Getraenk aus:
1) Wasser (0,50 Euro)
2) Limonade (1,00 Euro)
3) Bier (2,00 Euro)
Geben sie 1, 2 oder 3 ein: 2
Geben sie die gewuenschte Menge ein: 1
--- Bezahlvorgang ---
Bezahlvorgang abbrechen mit 0
Es fehlen noch 1.00 Euro.
Bitte werfen sie ein Geldstueck ein: 4
Ihr Geldstueck ist ungueltig.
Es fehlen noch 1.00 Euro.
Bitte werfen sie ein Geldstueck ein: 2
--- Getraenkeausgabe ---
Flasche 1 von 1 der Sorte 2 wurde ausgegeben.
Vielen Dank, bitte entnehmen sie ihre Getraenke.
Drücken Sie eine beliebige Taste . . .
Du must natürlich noch #include <iostream> hinzufügen und system("PAUSE"); vor dem return 0 in deiner Main Funktion setzen.
|
hm lag dann denke mal am #include .. ist im Buch etwas komplizierter dagestellt -.-
eine weitere frage die ich nicht ganz selbst gelöst bekomme ist das mit dem bezahlen bei mir funzt nur:
00.50
01.00
02.00
obwohl im buch
5
10
20
50
100
200
500
aufgelistet sind mit dem hinweiß * 100 da cent beträge nur wenn ich bei 5 bsp weiße 500 eingebe passiert nichts 00.500 wären dann weider 00.50 und 500.00 im Prinzip 500€
|
|
|
06/23/2011, 12:27
|
#4
|
elite*gold: 0
Join Date: Oct 2010
Posts: 381
Received Thanks: 210
|
mach mal anstatt float bezahlen ()<-> double bezahlen () das ist besser!
|
|
|
06/24/2011, 18:05
|
#5
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
Konsolenprogramme geben die Konsole wieder frei nachdem sie ausgeführt wurden, das ist absichtlich so damit du sie ohne Userinteraktion einfach in Stapelverarbeitungsdateien benützten kannst, außerdem bedient man Konsolenprogramme für gewöhnlich von der Konsole aus, unter Windows wäre das cmd.exe.
Wenn du dennoch das Beenden des Programms hinauszögern möchtest bis der Nutzer eine Taste drückt, dann solltest du lieber auf die getchar Funktion zurückgreifen.
Übrigens solltest du bei Funktionen in C die keine Argumente entgegennehmen ein void zwischen die Klammern schreiben, also "int eingabeMenge(void);" sowohl bei der Deklaration als auch bei der Definition, denn eine leere Argumenten Liste in C heißt dass die Funktion eine beliebige Anzahl an Argumenten entgegen nimmt, mit Funktionen der C-Runtime kann man diese Argumente dann in der Funktion behandeln.
@Ronox
iostream ist kein C Header, du kannst ihn also nicht verwenden wenn du wirklich in C programmierst und was hat system("PAUSE"); bitte mit iostream am Hut?
@blackOutCpp
Weshalb soll denn double generell besser sein als float?
In seinem Fall sollte die Genauigkeit von Float absolut ausreichend sein.
|
|
|
06/24/2011, 20:27
|
#6
|
elite*gold: 0
Join Date: Oct 2010
Posts: 381
Received Thanks: 210
|
Man sollte bei Berechnungen immer double benutzen.Auf diesem Niveau ist es vllt egal
aber später kann sich das rächen und die 32 bit mehr oder weniger ...
|
|
|
06/24/2011, 20:49
|
#7
|
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
|
Quote:
Originally Posted by black0utCpp
Man sollte bei Berechnungen immer double benutzen.Auf diesem Niveau ist es vllt egal
aber später kann sich das rächen und die 32 bit mehr oder weniger ...
|
Oder im Klartext, du wolltest auch mal was sagen...
Wenn du nichts Sinnvolles zu einem Thema beitragen kannst, dann lass es einfach sein.
Hättest du geschrieben, "für komplexere Berechnungen mit Fließkommazahlen solltest du dann aber double verwenden und wenn es noch genauer sein muss einen Typ aus einer Mathematiklib.", dann wäre dein Beitrag nützlich gewesen, aber so ist es schlicht Nonsense.
|
|
|
06/25/2011, 00:19
|
#8
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Quote:
Use float only, iff:
* you know what you do
* you have the knowledge to fight that beast
* you are willing to fight that beast
* you have a very, very, very good reason to use float
* you have at least 4 times thought the whole thing through and
still come to the conclusion that float would be a good idea in
this specific case.
|
|
|
|
 |
Similar Threads
|
WoW-Bot programmier problem
01/08/2011 - WoW Bots - 2 Replies
Hallo Leute,
ich habe die letzten Tage angefangen einen kleinen Bot in Autoit zu programmieren mit Waypointnavigation. Ich habe schon ein Grundgerüst von CtM mit Blackmagic.au3 gebastelt doch habe ich ein Problem mit dem Offset da man jetzt ja irgendwie was dazu addieren muss. Die Offset-Daten habe ich mir von MMo geholt. Es wäre toll wenn jemand meinen Bot-source angugen könnte wenn er fast fertig gestellt ist.
Mit freundlichen Grüßen
MyKnoppers
|
Suche Programmier
11/30/2010 - Lord of the Rings Online - 1 Replies
Ich suche jemanden der folgenden bot für mich programmiert=Man stellt seinen charakter neben erz und immer wenn das erz respawnt baut der bot es von alleine ab.
|
Programmier Fragen
10/20/2010 - AutoIt - 3 Replies
Hallo alle zusammen,
ich habe einen kleinen Bot gecodet der mit Controlsend arbeitet und wie wir wissen braucht Controlsend den Titel des Fensters und diesen möchte ich in einer ini datei abspeicehr das habe ich nun auch hinbekommen,jedoch wenn ich diesen wärend der Bot an ist ändere und dann speichere muss ich den ganzen bot nochmal aus schalten und wieder an ...
Es solle wie dieser Bot sein...
|
suche bot programmier hilfe !! möchte es lernen
08/29/2010 - Metin2 - 1 Replies
hallo
ich bin seit 4 jahren in metin2.de
habe viele hackz benutzt
gefährlich ist es aber wer hackt weiß was passiern kann soviel ist klar
und ich weiß es
|
C++ Programmier Tutorials
08/01/2010 - C/C++ - 2 Replies
Hallo epvpers!
Hallo, ich lern schons eit einiger Zeit C++ und wollt fragen, wie ihr C++ gelernt habt!
Habt ihr Bücher benutzt?Oder Online Tutorials?
Bitte psotet mal, wie ihr C++ gelernt habt, wenn ihr es gelernt habt ;)
|
All times are GMT +1. The time now is 04:05.
|
|