• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

C Programm in Unix

MoNchHiChii

Kronprinz Rudolf von Österreich
Registriert
03.12.07
Beiträge
1.892
Hi,

ich hoffe ich bin hier richtig, da ich ein C Proragmm in Unix über den Terminal geschrieben hab :p

Code:
#include <stdio.h>

int  main()     {

        /* Variablen */
        int Jahr = 1;
        double Startkapital, Zinsen, Endkapital, Zinsen1;

                /* Abfrage fuer Eingabe */
                printf("Geben Sie ihr Startkapital ein: ", Startkapital);
                scanf("%lf", &Startkapital);
                printf("Geben sie nun den Zinsatz in Prozent ein: ", Zinsen);
                scanf("%lf", &Zinsen);
                printf("Zum Schluss geben Sie Bitte das erwünschte Endkapital ein: ", Endkapital);
                scanf("%lf", &Endkapital);

                        /* Ausgabe */
                        printf("Jahr      Kapital am 01.01.    Zinsen       Kapital am 31.12.\n");
                        printf("-------------------------------------------------------------\n");

                                /* Berrechnung + Schleifen */
                                while (Endkapital > Startkapital)       {

                                if (Startkapital <= Endkapital);

                                Zinsen1 = Startkapital * Zinsen/100;
                                printf("%2i", Jahr);
                                printf("        ");
                                printf("%.2lf", Startkapital);
                                printf("              ");
                                printf("%.2lf", Zinsen1);
                                printf("        ");
                                Startkapital = Zinsen1 + Startkapital;
                                printf("%.2lf", Startkapital);
                                printf("          \n");
                                Jahr = Jahr + 1;
                                }
}

das läuft soweit wie ich das will. also die ausgabe ist richtig (auch wenns vielleicht nicht super programmiert ist, bin ja anfänger) meine frage ist, wenn ich eine falsche angabe mache, gibt er mit den ersten print ausdruck raus, das ist verständlich, allerdings weiß ich nicht, wie ich es korekt änder, so das er mir eine falschmeldung anzeigt.

zweite frage, wir sollen einbauen, das die "tabelle" nach 10zeilen ein leerezeile ausgibt, wie ist das möglich?!

hat da für mich jmd einen tipp eine idee einen denkanstoß?!

vielen dank schonmal
 

drlecter

Wöbers Rambur
Registriert
04.11.06
Beiträge
6.442
Du kannst doch eine Variable in der Ausgabe mitlaufen lassen die immer von 0 bis 9 zählt. Wenn diese 9 ist, gibst du einfach eine Leerzeile aus und setzt diese wieder auf 0.
Du dem ersten Problem: Du musst die Eingabe überprüfen ob dies nur Zahlen sind (wie das genau in C nochmal war, müsste ich selber suchen). Dies kannst du in einer Schleife machen die nur x mal durchläuft.
 
  • Like
Reaktionen: MoNchHiChii

hooomieat

Erdapfel
Registriert
30.11.08
Beiträge
1
Hallo!

Es gibt da den Modulo-Operator. Dieser zeigt dir den Rest einer Division an.

Beispiel:
7%3 = 1
5%3 = 2
10%5 = 0

Wenn du das weißt, dann kannst du das 10-Zeilen-Problem ganz einfach lösen.

Die Ausgabe der ersten Zeile(n), bei fehlerhafter Eingabe, kannst mit einfachen Verzweigungen abfangen.


Code:
#include <stdio.h>

int  main()     {

    /* Variablen */
    int Jahr = 1;
    int i = 0;
    double Startkapital, Zinsen, Endkapital, Zinsen1;

    /* Abfrage fuer Eingabe */
    printf("Geben Sie ihr Startkapital ein: ", Startkapital);
    scanf("%lf", &Startkapital);
    printf("Geben sie nun den Zinsatz in Prozent ein: ", Zinsen);
    scanf("%lf", &Zinsen);
    printf("Zum Schluss geben Sie Bitte das erwünschte Endkapital ein: ", Endkapital);
    scanf("%lf", &Endkapital);

    if (Startkapital > 0 && Endkapital > 0 && Zinsen > 1)
    {
        if (Startkapital < Endkapital)
        {
            /* Ausgabe */
            printf("Jahr      Kapital am 01.01.    Zinsen       Kapital am 31.12.\n");
            printf("-------------------------------------------------------------\n");
            
            /* Berrechnung + Schleifen */
            while (Endkapital > Startkapital)
            {
                if (Startkapital <= Endkapital); //nutzlos
                
                Zinsen1 = Startkapital * Zinsen/100;
                printf("%2i", Jahr);
                printf("        ");
                printf("%.2lf", Startkapital);
                printf("              ");
                printf("%.2lf", Zinsen1);
                printf("        ");
                Startkapital = Zinsen1 + Startkapital;
                printf("%.2lf          \n", Startkapital);
                
                Jahr = Jahr + 1;
                
                if (Jahr%10 == 0)
                {
                    printf ("\n");
                }
            }
        }
        else
        {
            printf ("\nfalsche Kapital-Eingabe");
        }
    }
    else
    {
        printf ("\ndie Eingaben sollten nicht negativ sein und der Zinssatz muss >1 sein");
    }
}
Grüße!
 
  • Like
Reaktionen: MoNchHiChii

MoNchHiChii

Kronprinz Rudolf von Österreich
Registriert
03.12.07
Beiträge
1.892
@drlecter
thx, so habe ich es gemacht, nach deiner hilfe. klappt super.

@hooomieat
deins habe ich auch ausprobiert, klappt ebenfalls super. bei dir haben ich nur das mit den prozentsatz geändert, so das er nur größer 0 sein muss.

ich hab nun auch, anstatt diese leerzeichen t eingebaut. danke für eure hilfe, ich hoffe das ich jemals auch helfen kann ;)
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Also ich kann dir nur XCode ans Herz legen, das ist wesentlich komfortabler als per Terminal (vi?) zu erstellen.
Einfach neues Projekt erstellen, dann unter "Command Line Utility" "Standart Tool" auswählen :)
 

drlecter

Wöbers Rambur
Registriert
04.11.06
Beiträge
6.442
Also ich kann dir nur XCode ans Herz legen, das ist wesentlich komfortabler als per Terminal (vi?) zu erstellen.
Einfach neues Projekt erstellen, dann unter "Command Line Utility" "Standart Tool" auswählen :)
Nicht böse sein, aber du hast die Fragestellung verstanden? Es ist glaube ich für dieses Problem vollkommen egal ob das mit vi/vim/nano/Eclipse/xCode geschrieben wurde wenn er einen Fehler in der Logik hat oder?
Wie gesagt, nicht bös gemeint.
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Nicht böse sein, aber du hast die Fragestellung verstanden? Es ist glaube ich für dieses Problem vollkommen egal ob das mit vi/vim/nano/Eclipse/xCode geschrieben wurde wenn er einen Fehler in der Logik hat oder?
Wie gesagt, nicht bös gemeint.

Richtig, aber da der TE schreibt, dass er über des Terminal c-Code erstellt, hatte ich da so meine bedenken. Ausserdem gehe ich bei einem Anfänger aus, dass er eventuell nicht alle Umgebungen zum coden kennt.


OT war es, keine Frage ;)
 

drlecter

Wöbers Rambur
Registriert
04.11.06
Beiträge
6.442
Wobei, für sowas reicht das Terminal vollkommen aus. Ich tippe heute noch Code in vi. Wenn er an seine grenzen stoßen sollte, wird er sich schon melden. Klar war der Tipp gut gemeint, aber passte nicht ganz hier rein.
 

MoNchHiChii

Kronprinz Rudolf von Österreich
Registriert
03.12.07
Beiträge
1.892
ich schreibe über den terminal mit vi, weil wir in der uni diese umgebung nutzen. ich denke mir einfach, das es nicht verkehrt ist, das dann erstmal ein wenig zu nutzen bzw zu üben um in der uni selbst bescheid zu wissen, wenn ich dinge tun muss, bearbeiten muss. Ja ich bin anfänger ;)

eclipse wird uns sonst von der uni empfohlen für zB java sachen.

da hab ich jetzt ne frage zu :p eclipse oder xcode? oder kann man das nicht vergleichen?
 

MoNchHiChii

Kronprinz Rudolf von Österreich
Registriert
03.12.07
Beiträge
1.892
sry doppelpost

Neue Aufgabe, neues Problem :p

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

int main()      {

        srand(time(NULL));      /*Initialisiert Zufallszahl*/
        int Zufall=rand()%10+1; /*Zufallszahl*/
        int GRatezahl, Ratezahl, count=0, erraten=0; /*Variablen*/

        /*Ausgabe*/
        printf("Bitte geben Sie die groestmoegliche Ratezahl ein: ", GRatezahl);
        scanf("%i", &GRatezahl);

                /*do while Schleife beginnt*/
                do      {
                printf("Geben Sie nun bitte Ihren Tipp ab: ", Ratezahl);
                scanf("%i", &Ratezahl);

                /*Wenn, Zahl richtig geraten*/
                if(Ratezahl==Zufall)    {
                erraten=1;
                count++;
                }

                /*Wenn, Zahl falsch geraten*/
                else    {
                (Ratezahl>Zufall) ? printf("Die Zahl ist zu gross\n") : printf("Die Zahl ist zu klein\n");
                count++;
                }
        }
        while((erraten != 1) && (count != 0));

        if (erraten == 1)
        {
        printf("Mit %i Versuchen erraten!\n", count);
        }
}

dadurch das ich nun oben %10+1 gegeben hab, generiert er nur eine zufallszahl aus 1-10. das ist mir klar, mein problem ist, das ich die zu generierenden zahl, bzw maximalen wert eigentlich vorgeben soll. das mache ich mit meiner abfrage, aber wie ich es in rand() einbinde habe ich ka.

da jmd ne idee oder nen tipp?!

(ich brauch nicht immer ne lösung, denkanstöße oder nützliche links bin ich genauso dankbar für)
 

drlecter

Wöbers Rambur
Registriert
04.11.06
Beiträge
6.442
Jein, Eclipse ist durch die modulare Struktur sehr vielseitig. xCode ist besser in MacOS integriert. Auch die Bibliotheken werden halt alle mitgebracht. Für Eclipse musst du dir für C/C++ zusätzliche Pakete installieren. Am Ende ist beides nur ein Werkzeug.
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
0 mod 10 = 0
1 mod 10 = 1
2 mod 10 = 2
3 mod 10 = 3
4 mod 10 = 4
5 mod 10 = 5
6 mod 10 = 6
7 mod 10 = 7
8 mod 10 = 8
9 mod 10 = 9
10 mod 10 = 0
11 mod 10 = 1
12 mod 10 = 2
13 mod 10 = 3
14 mod 10 = 4
15 mod 10 = 5
16 mod 10 = 6
17 mod 10 = 7
18 mod 10 = 8
19 mod 10 = 9
usw.

jetzt überlege mal wie diese Liste mit Modulo 5,7,9, 15.... aussieht ;)
 

MoNchHiChii

Kronprinz Rudolf von Österreich
Registriert
03.12.07
Beiträge
1.892
@drlector
also geht beides und ich als user muss entscheiden was ich besser finde.

thx auch hierfür.

@jamsven
das verstehe ich gerade nicht :p
ich verstehe nicht, wie das zu meinem problem passt. ich denke für meine zweite aufgabe gar kein Modulo benutzen zu müssen, oder täusche ich mich?
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Jein, Eclipse ist durch die modulare Struktur sehr vielseitig. xCode ist besser in MacOS integriert. Auch die Bibliotheken werden halt alle mitgebracht. Für Eclipse musst du dir für C/C++ zusätzliche Pakete installieren. Am Ende ist beides nur ein Werkzeug.

Jap alternativ gibt es noch NetBeans, welches ich zum Beispiel für Java Programme verwende.
Ist ebenso modular und basiert auf Java, jedoch finde ich die "out of the box" Version besser, denn dieser hat direkt einen Interfacebuilder am Start. Hat ne gute Update und Modulverwaltung und bindet sich besser in Mac OS X ein als Eclipse. Aber das ist alles Geschmacksache im großen und ganzen tuen die zwei IDEs nicht viel.
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
@drlector
also geht beides und ich als user muss entscheiden was ich besser finde.

thx auch hierfür.

@jamsven
das verstehe ich gerade nicht :p
ich verstehe nicht, wie das zu meinem problem passt. ich denke für meine zweite aufgabe gar kein Modulo benutzen zu müssen, oder täusche ich mich?

So wie ich das verstanden habe willst du dieses Spiel so verändern, dass du den Zahlenbereich, die die Random Funktion ausspuckt vom Benutzer selbst einstellen lassen willst. Die Random Funktion würde ich so lassen wie die ist, aber die Ausgabewerte würde ich mit modulo verändern.


Wenn du irgendeine positive Zahl x modulo y nimmst, kannst du dir ziemlich sicher sein, dass das Ergebnis auf jeden Fall <y ist.
 
Zuletzt bearbeitet:

MoNchHiChii

Kronprinz Rudolf von Österreich
Registriert
03.12.07
Beiträge
1.892
ok ich schreib noch ein weiteres problem ^^

also ich habe eine datei von der uni vorgegeben. zuf.c diese soll ich in meinen ordner kopieren und in meinem programm verwenden.

meine frage, kann ich bezug auf die datei nehmen oder muss ich den inhalt in mein programm packen?!

und ja, ansonsten hast du mein problem verstanden ich dich dafür nicht :D hihi

sry, ich sitz schon so lang dran, das ich auch manchmal am schlauch steh. wenn ihr wüsstet wie der erste versuch aussah :D
 

drlecter

Wöbers Rambur
Registriert
04.11.06
Beiträge
6.442
Habt ihr nicht include Anweisungen gelernt? Damit kannst du am Anfang die Datei so zusagen während der compilierens einbinden.
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
ok ich schreib noch ein weiteres problem ^^

also ich habe eine datei von der uni vorgegeben. zuf.c diese soll ich in meinen ordner kopieren und in meinem programm verwenden.

Eine .c Datei nennt man auch Modul ;)
Du müsstest die die Objekt Dateien linken, dass das funktioniert.
 

MoNchHiChii

Kronprinz Rudolf von Österreich
Registriert
03.12.07
Beiträge
1.892
@drlecter
ich war jetzt gut 2wochen krank, wurde operiert. evtl habe ich es in dieser zeit vepasst. wäre natürlich doof.

@jamsven
danke, ich werde suchen wie es geht ;)

ach was würd ich nur ohne euch machen :D hehe

*edit*
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "zuf.c"

ich glaube das hat funktioniert :D aber das problem mit meinem vorgabewert bleibt. das habe ich auch noch nicht sorecht verstanden wie es geht.
 

Jamsven

London Pepping
Registriert
21.11.07
Beiträge
2.046
Code:
int Zufall=rand()%Gratezahl+1; /*Zufallszahl*/

Wenn du irgendeine positive Zahl x modulo y nimmst, kannst du dir ziemlich sicher sein, dass das Ergebnis auf jeden Fall <y ist.