Erste Schritte in C

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
hwinckler
Beiträge: 5
Registriert: Di Feb 11, 2020 12:55 pm

Erste Schritte in C

Beitrag von hwinckler » Di Feb 11, 2020 2:32 pm

Hallo zusammen,
ich bin dabei das Programmieren zu verstehen und meine Wahl viel dabei auf C. Ich habe daher mal ein Programm geschrieben, welches einen Rechnungsbetrag nach Eingabe verschiedener Faktoren (Stunden, Stundensatz, Skonto) ausgibt.
Es funktioniert soweit ich das beurteilen kann ganz ordentlich.
Ich würde jetzt aber gerne mal wissen ob man das auch mit weniger Code genauso hinbekommt ?
Falls ja, bitte erklärt mir das in einfachen Worten, da ich noch ganz am Anfang von C bin.
Danke im Voraus für eure Anregungen und auch Kritiken

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    float stundensatz, stunden, ges_netto, ohne_umst, abzug_skonto, ges_brutto;
    float umsatzsteuer, skonto;
    int abzug;

    printf("******** R E C H N U N G ********\n\n");
    printf("Bitte geben Sie Ihren derzeitigen Stundsatz ein\n");
    scanf("%f", &stundensatz);
    printf("Bitte geben Sie Ihre geleisteten Stunden an\n");
    scanf("%f", &stunden);
    ges_netto = stundensatz * stunden;
    printf("Rechnungsbetrag ohne Skonto betraegt %.2f\n Euro\n", ges_netto);
    printf("Zahlungsziel: 7, 14, 21 Tage ??\n");
    scanf("%i", &abzug);
    if(abzug == 7)
    {
        skonto = 0.03;
        abzug_skonto = ges_netto * skonto;
        printf("Skonto %.2f\n", abzug_skonto);
        printf("Rechnungsbetrag abzgl. Skonto ergibt: %.2f Euro\n", ges_netto - abzug_skonto );
        umsatzsteuer = 0.19;
        ohne_umst = (ges_netto - abzug_skonto) * umsatzsteuer;
        printf("Die Hoehe der Umsatzsteuer betraegt\n %.2f Euro\n", ohne_umst);
        ges_brutto = ohne_umst + ges_netto;
        printf("Der gesamte Rechnungsbetrag betraegt\n %.2f Euro\n", ges_brutto);
        printf("Auszahlung auf Konto: %.2f Euro", ges_netto - abzug_skonto + ohne_umst);
    }
    else if( abzug == 14)
    {
        skonto = 0.015;
        abzug_skonto = ges_netto * skonto;
        printf("Skonto %.2f\n", abzug_skonto);
        printf("Rechnungsbetrag abzgl. Skonto ergibt: %.2f Euro\n", ges_netto - abzug_skonto );
        umsatzsteuer = 0.19;
        ohne_umst = (ges_netto - abzug_skonto) * umsatzsteuer;
        printf("Die Hoehe der Umsatzsteuer betraegt\n %.2f Euro\n", ohne_umst);
        ges_brutto = ohne_umst + ges_netto;
        printf("Der gesamte Rechnungsbetrag betraegt\n %.2f Euro\n", ges_brutto);
        printf("Auszahlung auf Konto: %.2f Euro", ges_netto - abzug_skonto + ohne_umst);


    }
    else
    {
        //system("cls");
        printf("Gesamtnetto betraegt\n %.2f Euro\n", ges_netto);
        umsatzsteuer = 0.19;
        ohne_umst = ges_netto * umsatzsteuer;
        printf("Die Hoehe der Umsatzsteuer betraegt\n %.2f Euro\n", ohne_umst);
        ges_brutto = ohne_umst + ges_netto;
        printf("Der gesamte Rechnungsbetrag betraegt\n %.2f Euro", ges_brutto);
    }


    return 0;
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8531
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Erste Schritte in C

Beitrag von Xin » Di Feb 11, 2020 2:41 pm

Auf die Schnelle sehe ich, dass Du in allen drei If-Bereichen viel Redundanz hast. Die Mehrwertsteuer ändert sich ja beispielsweise nicht, egal welches Zahlungsziel Du hast. Setzt Du die Zeile vor die if-Abrage, brauchst Du sie in keiner der Fälle zu setzen.
Wichtig ist ja erstmal, dass Du klärst, wieviel Skonto Du je nach Zahlungsziel gibst.

Code: Alles auswählen

umsatzsteuer = 0.19;

switch( abzug )
{
  case 7: skonto = 0.03; break;
  case 14: skonto = 0.015; break;
  default: skonto = 0.0;
}
Der Rest ist ja ziemlich gleich:

Code: Alles auswählen

        abzug_skonto = ges_netto * skonto;
        printf("Skonto %.2f\n", abzug_skonto);
        printf("Rechnungsbetrag abzgl. Skonto ergibt: %.2f Euro\n", ges_netto - abzug_skonto );
        ohne_umst = (ges_netto - abzug_skonto) * umsatzsteuer;
        printf("Die Hoehe der Umsatzsteuer betraegt\n %.2f Euro\n", ohne_umst);
        ges_brutto = ohne_umst + ges_netto;
        printf("Der gesamte Rechnungsbetrag betraegt\n %.2f Euro\n", ges_brutto);
        printf("Auszahlung auf Konto: %.2f Euro", ges_netto - abzug_skonto + ohne_umst);
Warum heißt der Betrag, der der die Steuer beinhaltet eigentlich "ohne_umst"?

Wenn Du Ausgaben wie die "Auszahlung auf's Konto" weglassen möchtest, wie Du das im Fall ohne Skonto getan hast, kannst Du nun entsprechend fragen:

Code: Alles auswählen

    if( skonto != 0.0 )
        printf("Auszahlung auf Konto: %.2f Euro", ges_netto - abzug_skonto + ohne_umst);
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

hwinckler
Beiträge: 5
Registriert: Di Feb 11, 2020 12:55 pm

Re: Erste Schritte in C

Beitrag von hwinckler » Di Feb 11, 2020 2:48 pm

Warum heißt der Betrag, der der die Steuer beinhaltet eigentlich "ohne_umst
Na, zum einen wird Skonto ja bei der Rechnung nur als Zahlungsziel angegeben und dann erst bei Zahlung vor Steuer abgezogen. Zum anderen war ich mir unsicher noch mehr Variablen zu nutzen :-) und da es so klappt hab ich es so gelassen.
Das mit dem Switch / Case muss ich mir noch anschauen.
Aber schon mal vielen Dank für deine Anregungen.

hwinckler
Beiträge: 5
Registriert: Di Feb 11, 2020 12:55 pm

Re: Erste Schritte in C

Beitrag von hwinckler » Mi Feb 12, 2020 8:07 pm

Guten Abend,
hab mir das mit switch/case angesehen und ausprobiert. Sieht ordentlicher aus und vor allem verständlicher wenn man die Funktionalität verstanden hat.
Hier nochmal der geänderte Code. Wie immer bin ich für Anregungen und Kritiken offen.

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float stundensatz, stunden, ges_netto, ohne_umst, abzug_skonto = 0.0, ges_brutto;
    float umsatzsteuer, skonto;
    int abzug;

    printf("******** R E C H N U N G ********\n\n");
    printf("Bitte geben Sie Ihren derzeitigen Stundsatz ein\n");
    scanf("%f", &stundensatz);
    printf("Bitte geben Sie Ihre geleisteten Stunden an\n");
    scanf("%f", &stunden);
    ges_netto = stundensatz * stunden;
    printf("\nRechnungsbetrag ohne Skonto betraegt:  %.2f Euro\n\n", ges_netto);
    printf("Zahlungsziel:\n 7 Tage = 3 Prozent\n 14 Tage = 1,5 Prozent\n 21 Tage = 0 Prozent Skonto\n");
    scanf("%i", &abzug);
    umsatzsteuer = 0.19;
    switch (abzug) {
        case 7:
            skonto = 0.03;
            abzug_skonto = ges_netto * skonto;
            printf("****************************\n\n");
            printf("Skonto %.2f\n", abzug_skonto);
        break;
        case 14:
            skonto = 0.015;
            abzug_skonto = ges_netto * skonto;
            printf("****************************\n\n");
            printf("Skonto %.2f\n", abzug_skonto);
        break;
        default:
            skonto = 0.0;
    }

    ohne_umst = (ges_netto - abzug_skonto) * umsatzsteuer;
    printf("\nDie Hoehe der Umsatzsteuer betraegt\n %.2f Euro\n", ohne_umst);
    ges_brutto = ohne_umst + ges_netto;
    printf("\nDer gesamte Rechnungsbetrag betraegt\n %.2f Euro\n", ges_brutto);

    if(skonto != 0.0)
    {
        printf("\nRechnungsbetrag vor Steuer abzgl. Skonto:\n %.2f Euro\n", ges_netto - abzug_skonto );
        printf("\nAuszahlung auf Konto: %.2f Euro\n\n", ges_netto - abzug_skonto + ohne_umst);
    }
    return 0;
}

Antworten