Seite 1 von 1

CodeBlocks

Verfasst: Do Jan 09, 2014 9:58 pm
von ufor
Hallo zusammen

Habe mich ein wenige durch das C Tutorial gearbeitet und bin jetzt bei den Funktionen. (Nicht dass ich den Rest schon beherrsche). Nun habe ich eine Frage zu einem Code und wollte ihn hier ins Forum stellen. Allerdings habe ich keine Ahnung wie ich den Code aus CodeBlocks kopieren kann. (geht wahrscheinlich ganz einfach aber ich schaffe es nicht)
Code::Blocks Version 13.12
windows 7
Vielleicht kann mir ja jemand behilflich sein.
ufor

Re: CodeBlocks

Verfasst: Do Jan 09, 2014 10:05 pm
von cloidnerux
Nun habe ich eine Frage zu einem Code und wollte ihn hier ins Forum stellen. Allerdings habe ich keine Ahnung wie ich den Code aus CodeBlocks kopieren kann
Strg+C, Strg+V?
Text Markieren, Kopieren, Einfügen?
Oder verstehe ich gerade irgendwas falsch?

Re: CodeBlocks

Verfasst: Do Jan 09, 2014 10:49 pm
von ufor
Danke für die schnelle Antwort ähm CodeBlocks hat ein etwas umfangreicheres Kontextmenü, war damit überfordert.

Zu meiner Frage

Beides mal funktionier der Code und das Programm tut was ich erwarte.
Ist es nun besser die Variablen kfz, haus und geld wie im ersten Beispiel oder wie zweiten Beispiel zu setzen?

Ich habe mich anfänglich schwer getan die funktion richtig zu formulieren, deshalb habe ich die Variablen so wie im zweitem Beispiel gesetzt. Und was mache ich wenn ich fünf zehn oder mehr Variablen habe? Entschuldig nochmal solche einfachen Fragen.

danke


Code 1

Code: Alles auswählen

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

int kosten (int kfz, int haus, int geld);

int main()
{
  int kfz = 3;
  int haus = 2;
  int geld = 40000;

  int zaehler = 1;
  for (zaehler = 1; zaehler <= 5; zaehler++)
    {
       if (geld <= 0)
       {
        printf("\nSie sind Pleite!!");
       }
       else
       {
       printf("\nRestvermoegen = %d", geld = kosten(kfz, haus, geld));
       }
    }
    return 0;
}

int kosten (int kfz, int haus, int geld)
  {
      int kosten_kfz = 0;
      int kosten_haus = 0;
      kosten_kfz = kfz * 1000;
      kosten_haus = haus * 1000;
      return geld - kosten_kfz - kosten_haus;
  }
Code 2

Code: Alles auswählen

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

int kfz = 3;
int haus = 2;
int geld = 40000;

int kosten ();

int main()
{
  int zaehler = 1;
  for (zaehler = 1; zaehler <= 5; zaehler++)
    {
       if (geld <= 0)
       {
        printf("\nSie sind Pleite!!");
       }
       else
       {
       printf("\nRestvermoegen = %d", geld = kosten());
       }
    }
    return 0;
}

int kosten ()
  {
      int kosten_kfz = 0;
      int kosten_haus = 0;
      kosten_kfz = kfz * 1000;
      kosten_haus = haus * 1000;
      return geld - kosten_kfz - kosten_haus;
  }

Re: CodeBlocks

Verfasst: Do Jan 09, 2014 11:25 pm
von cloidnerux
Ist es nun besser die Variablen kfz, haus und geld wie im ersten Beispiel oder wie zweiten Beispiel zu setzen?
Du machst zwei unterschiedliche Dinge, die dramatische Unterschiede haben.
Das Thema Hierzu heißt "Scopes" oder Gültigkeitsbereiche:
http://www.proggen.org/doku.php?id=c:var:scopes

Variablen sind nur da Gültig, wo du sie definierst.
Im Beispiel 1 definierst du die Variablen in der Main Funktion, diese sind nur da Gültig.
Im zweiten Beispiel definierst du sie Global, sie sind in jeder Funktion in dieser Datei gültig. Das sollte man vermeiden.

Was du bei Funktionen erreichen willst, ist Kapselung.
Du hast einen in sich geschlossenen Code, der nur von den Eingangsvariablen abhängt.
Daher musst du die Namen auch Trennen. Die Bezeichner "kfz", "haus" oder "geld"
in

Code: Alles auswählen

int kosten (int kfz, int haus, int geld);
Sind keine Variablen, die so existieren, sondern nur die "Funktions-Signatur". Du Beschreibst hier, dass es da irgendwo eine Funktion gibt, die "kosten" heißt und 3 ints haben möchte.
Innerhalb dieser Funktion "kosten" sind diese 3 Variablen unter dem Namen "kfz", "haus" und "geld" Verfügbar.
Diese Variablen sind Kopien von den Variablen, die du beim Funktionsaufruf übergibst.
Für den Funktionsaufruf ist es egal, wie die Variablen heißen, Hauptsache sie entsprechend dem Datentyp.
Ein folgender Aufruf:

Code: Alles auswählen

kosten(1000, 1, 1);
ist syntaktisch möglich.

Re: CodeBlocks

Verfasst: Sa Jan 11, 2014 9:27 pm
von ufor
Danke für die schnelle Antwort

Re: CodeBlocks

Verfasst: Sa Nov 01, 2014 8:45 am
von Andersan
Ist es nun besser die Variablen kfz, haus und geld wie im ersten Beispiel oder wie zweiten Beispiel zu setzen?

Re: CodeBlocks

Verfasst: Sa Nov 01, 2014 5:57 pm
von oenone
Würde das erste nehmen. Außer es sind in Wirklichkeit globale Konstanten. Dann solltest du aber eher ein #define benutzen.

Re: CodeBlocks

Verfasst: Mo Jun 15, 2015 10:10 am
von Froschmeister
Das Erste ist volll gut.
Das Zweite ist voll schlecht.

Re: CodeBlocks

Verfasst: Mo Jun 15, 2015 1:53 pm
von Xin
Andersan hat geschrieben:Ist es nun besser die Variablen kfz, haus und geld wie im ersten Beispiel oder wie zweiten Beispiel zu setzen?
Die Frage ist, wo Du welche Variablen benötigst. Wenn Du eine Variable immer wieder benötigst, kann man sie als globale Variable setzen. Das ist heute aber in der Form ziemlich verpönt weil man sich gute Chancen auf Probleme einhandelt, sobald man eine Anwendung schreibt, die auf mehreren Prozessoren arbeitet.

Eine Funktion sollte immer die Argumente erhalten, die sie zum Berechnen benötigt. In diesem Fall ist die Variante 2 (globale Variablen) ganz klar No-Go. Die Variante 1 (Parameterübergabe) ist in jedem Fall zu bevorzugen.