CodeBlocks

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
ufor
Beiträge: 11
Registriert: Mo Jan 06, 2014 5:36 pm

CodeBlocks

Beitrag von ufor » Do Jan 09, 2014 9:58 pm

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

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: CodeBlocks

Beitrag von cloidnerux » Do Jan 09, 2014 10:05 pm

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?
Redundanz macht wiederholen unnötig.
quod erat expectandum

ufor
Beiträge: 11
Registriert: Mo Jan 06, 2014 5:36 pm

Re: CodeBlocks

Beitrag von ufor » Do Jan 09, 2014 10:49 pm

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;
  }

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: CodeBlocks

Beitrag von cloidnerux » Do Jan 09, 2014 11:25 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

ufor
Beiträge: 11
Registriert: Mo Jan 06, 2014 5:36 pm

Re: CodeBlocks

Beitrag von ufor » Sa Jan 11, 2014 9:27 pm

Danke für die schnelle Antwort

Andersan
Beiträge: 1
Registriert: Sa Nov 01, 2014 8:34 am

Re: CodeBlocks

Beitrag von Andersan » Sa Nov 01, 2014 8:45 am

Ist es nun besser die Variablen kfz, haus und geld wie im ersten Beispiel oder wie zweiten Beispiel zu setzen?
Fadi

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: CodeBlocks

Beitrag von oenone » Sa Nov 01, 2014 5:57 pm

Würde das erste nehmen. Außer es sind in Wirklichkeit globale Konstanten. Dann solltest du aber eher ein #define benutzen.

Froschmeister
Beiträge: 5
Registriert: So Jun 14, 2015 11:27 am

Re: CodeBlocks

Beitrag von Froschmeister » Mo Jun 15, 2015 10:10 am

Das Erste ist volll gut.
Das Zweite ist voll schlecht.

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

Re: CodeBlocks

Beitrag von Xin » Mo Jun 15, 2015 1:53 pm

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

Antworten