WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 01.12.2003, 20:16   #1
Bastet
Elite
 
Registriert seit: 07.09.2000
Beiträge: 1.036


Standard c-übungsbeispiel - switch

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

Bastet ist offline   Mit Zitat antworten
Alt 01.12.2003, 20:26   #2
moorhahn
Veteran
 
Registriert seit: 26.12.2000
Beiträge: 489


moorhahn eine Nachricht über ICQ schicken
Standard

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).
moorhahn ist offline   Mit Zitat antworten
Alt 01.12.2003, 20:45   #3
Bastet
Elite
 
Registriert seit: 07.09.2000
Beiträge: 1.036


Standard

hmm... dacht ich mir fast , aba da ich noch anfänger bin, weiss ich auch, dass ich noch viel lernen muss. und irgendjemand weiss immer ne 'kürzere' lösung.

btw: ich kann auch googeln
____________________________________
Bye Bastet

Bastet ist offline   Mit Zitat antworten
Alt 02.12.2003, 00:08   #4
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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.
Who-T ist offline   Mit Zitat antworten
Alt 02.12.2003, 09:56   #5
Bastet
Elite
 
Registriert seit: 07.09.2000
Beiträge: 1.036


Standard

thx, werd ich heute abend gleich mal ausprobieren.
____________________________________
Bye Bastet

Bastet ist offline   Mit Zitat antworten
Alt 02.12.2003, 14:40   #6
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

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 ...
oder

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);
kikakater ist offline   Mit Zitat antworten
Alt 02.12.2003, 16:50   #7
Bastet
Elite
 
Registriert seit: 07.09.2000
Beiträge: 1.036


Standard

des is jo so kurz

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

Bastet ist offline   Mit Zitat antworten
Alt 02.12.2003, 17:14   #8
Bastet
Elite
 
Registriert seit: 07.09.2000
Beiträge: 1.036


Standard

*grml* da fällt mir grad auf dass i a unnötige var gmacht hab
i weiss garnimma wieso i a summe gmacht hab
fällt mir grad wieder ein, ich wollte eigentlich des selbe aber anstatt rabatt1-4 mit summe1-4 machen
____________________________________
Bye Bastet

Bastet ist offline   Mit Zitat antworten
Alt 03.12.2003, 03:03   #9
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von Bastet
Code:
        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);
        }
[...]
mach es mit else

Code:
if (ekpreis<=999)
{ 
   // do_stuff
} else if (ekpreis <= 1999)
{
   // do_stuff
} else if (ekpreis <= 2999)
...
denn derzeit überprüfst du immer jede if-bedingung.
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.
Who-T ist offline   Mit Zitat antworten
Alt 03.12.2003, 09:47   #10
Bastet
Elite
 
Registriert seit: 07.09.2000
Beiträge: 1.036


Standard

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

Bastet ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:18 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag