![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Elite
![]() Registriert seit: 07.09.2000
Beiträge: 1.036
|
![]() also ich hab ein übungsbeispiel:
Buchhandlungsprogramm erstellen: Ausgabe: Rabatt in S; EK-preis minus rabatt in S; wenn der Einkauf: über 5000 S ist bekommst du 20% über 3000 - 4999 S bekommst du 14% über 2000 - 3999 S bekommst du 8 % usw. also ich kann das beispiel mit ner if anweisung lösen, aber ich hab mir gedacht, wenn ich ne switch anweisung schreib wärs effizienter. allerdings hab ich noch nicht gelernt wie ne switch syntax ausschaun muss wenn der: ekpreis im bereich VON 5000 BIS 4999 liegt. zb. ek = 3256 ek <=5000 (??? - aber wie ists mit liegt zw. 5000 - 4999 ???) thx btw: n00b erklärung bütte ![]()
____________________________________
Bye Bastet |
![]() |
![]() |
![]() |
#2 |
Veteran
![]() |
![]() geht imo nicht.
die switch syntax: http://www-numi.fnal.gov/offline_sof...ib/switch.html googlen: http://www.google.at/search?q=switch...-8&hl=de&meta=
____________________________________
Wenn Null ganz besonders gross ist, ist es schon fast so viel wie ein kleines bisschen Eins... - (Kommentar zum Thema Rundungsfehler bei Fliesskommazahlen). ![]() |
![]() |
![]() |
![]() |
#3 |
Elite
![]() Registriert seit: 07.09.2000
Beiträge: 1.036
|
![]() hmm... dacht ich mir fast
![]() btw: ich kann auch googeln ![]()
____________________________________
Bye Bastet |
![]() |
![]() |
![]() |
#4 |
Elite
![]() |
![]() also in dem fall ginge es mit einem workaround
Code:
switch (price/1000) { case 0: case 1: discount = 0.05; break; case 2: discount = 0.08; break; case 3: case 4: discount = 0.15; break; default: discount = 0.2; break; } wenn du eine integerdivison machst (int/int) dann werden die kommastellen weggeschnitten 3000 / 1000 = 3 3999 / 1000 = 3 usw
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees. |
![]() |
![]() |
![]() |
#5 |
Elite
![]() Registriert seit: 07.09.2000
Beiträge: 1.036
|
![]() thx, werd ich heute abend gleich mal ausprobieren.
____________________________________
Bye Bastet |
![]() |
![]() |
![]() |
#6 |
Inventar
![]() Registriert seit: 24.01.2001
Beiträge: 5.631
|
![]() Sehr gute Lösung mit dem Switch !
Für den Alltag sollte es aber wirklich so aussehen: Code:
if(preis<nicht_rabattfaehige_grenze) rabatt= 0.0; else if(preis<rabattgrenze1) rabatt= hausnummer1; else if ... Code:
#define RABATT_STUFEN 5 float preis,rabatt; int i; /* Array mit Preisgrenzen und Rabatten in Prozent */ float preis_rabatt[RABATT_STUFEN][2]; preis_rabatt[0][0]= 2000.0; /* alles zwischen 0 und 1999.99999 */ preis_rabatt[0][1]= 0.0; /* 0 Prozent */ preis_rabatt[1][0]= 3000.0; /* alles zwischen 2000 und 2999.99999 */ preis_rabatt[1][1]= 2.0; /* 2 Prozent */ preis_rabatt[2][0]= 4000.0; /* alles zwischen 3000 und 3999.99999 */ preis_rabatt[2][1]= 5.0; /* 5 Prozent */ preis_rabatt[3][0]= 5000.0; /* alles zwischen 4000 und 4999.99999 */ preis_rabatt[3][1]= 8.0; /* 8 Prozent */ preis_rabatt[4][0]= 5000.0; /* alles ab 5000 */ preis_rabatt[4][1]= 10.0; /* 10 Prozent */ if(preis_rabatt[RABATT_STUFEN-1][0]>=preis) { rabatt= preis_rabatt[RABATT_STUFEN-1][1]; } else { for(rabatt=0.0,i=0;i<RABATT_STUFEN;i++) { if(preis_rabatt[i][0]>preis) { rabatt= preis_rabatt[i][1]; break; } } } printf("Der Preis %f erlaubt %f Prozent Rabatt.\n" "Somit ist der Rabatt reduzierte Preis: %f\n",preis,rabatt,preis - preis * rabatt); |
![]() |
![]() |
![]() |
#7 |
Elite
![]() Registriert seit: 07.09.2000
Beiträge: 1.036
|
![]() ![]() ![]() hab mir gedacht ich mach das beispiel halt mal mit verschiedenen anweisungen, dann lernt man wirklich was. ich habs mal mit if gemacht, so jetzt werd ich mal switch ausprobieren und dann guck ich mir deins ganz genau an ![]() ajo, mal mein code post... habs a bisserl verkürzt, weil ich doch noch draufgekommen bin wie ich von - bis benützen kann. allerdings hab ich den preis: über 3000 - 4999 S bekommst du 14% von 3000 auf 4000 geändert.(glaube da ham die sich verschrieben) Code:
#include <stdio.h> int main(void) { int ekpreis, rabatt1, rabatt2, rabatt3, rabatt4, summe, antwort; do { printf("\nGeben Sie den Einkaufspreis ein:"); scanf("%d",&ekpreis); rabatt1=(ekpreis/100)*3; rabatt2=(ekpreis/100)*8; rabatt3=(ekpreis/100)*14; rabatt4=(ekpreis/100)*20; if(ekpreis<=999) { ekpreis=ekpreis; printf("\nDer Einkaufspreis betraegt %d S. - Es wird kein Rabatt gewaehrt", ekpreis); } if((ekpreis>=1000) && (ekpreis<=1999)) { ekpreis-=rabatt1; printf("\nDer ermaessigte Preis betraegt %d S. Rabatt von 3%% - %d S. wurde abgezogen", ekpreis, rabatt1); } if((ekpreis>=2000) && (ekpreis<=3999)) { ekpreis-=rabatt2; printf("\nDer ermaessigte Preis betraegt %d S. Rabatt von 8%% - %d S. wurde abgezogen", ekpreis, rabatt2); } if((ekpreis>=4000) && (ekpreis<=4999)) { ekpreis-=rabatt3; printf("\nDer ermaessigte Preis betraegt %d S. Rabatt von 14%% - %d S. wurde abgezogen", ekpreis, rabatt3); } if(ekpreis>=5000) { ekpreis-=rabatt4; printf("\nDer ermaessigte Preis betraegt %d S. Rabatt von 20%% - %d S. wurde abgezogen", ekpreis, rabatt4); } getchar(); printf("\nWollen sie noch eine Preiseingabe taetigen? (j/n)"); antwort=getchar(); } while(antwort=='j'); printf("\nTschuess!");
____________________________________
Bye Bastet |
![]() |
![]() |
![]() |
#8 |
Elite
![]() Registriert seit: 07.09.2000
Beiträge: 1.036
|
![]() *grml* da fällt mir grad auf dass i a unnötige var gmacht hab
![]() fällt mir grad wieder ein, ich wollte eigentlich des selbe aber anstatt rabatt1-4 mit summe1-4 machen ![]()
____________________________________
Bye Bastet |
![]() |
![]() |
![]() |
#9 | |
Elite
![]() |
![]() Zitat:
Code:
if (ekpreis<=999) { // do_stuff } else if (ekpreis <= 1999) { // do_stuff } else if (ekpreis <= 2999) ... mit else überprüfst du bis zur ersten zutreffenden, der rest wird übersprungen. außerdem ersparst du dir das ek > n && ek < N, weil ek > n true ist wenn er überhaupt bis dorthin kommt
____________________________________
Whoever built humanity left in a major design flaw: it was the tendency to bend at the knees. |
|
![]() |
![]() |
![]() |
#10 |
Elite
![]() Registriert seit: 07.09.2000
Beiträge: 1.036
|
![]() naja - warum einfach wenns kompliziert auch geht
![]() ![]() genau deshalb dacht ich mir, wenn ich dieses beispiel nehme und mal mehrere arten ausprobier, lern ich eher die unterschiede. hatte garnicht daran gedacht, dass alle ifs abgearbeitet werden... primär gings mir darum dass es überhaupt funktioniert. (lern erst seit 20.11.03 an dem c-einführungsskript) für das array beispiel vom kikakater muss ich noch viel lernen ![]() merci leute, für den super input - werd mich anstrengen ![]()
____________________________________
Bye Bastet |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|