# Programmierung Dev-C++



## Tobias01 (21. Oktober 2007)

Hy
Ich sitzte zur Zeit bei meinem Rechner und versuche ein Programm, das wir für die Schule machen müssen und komme einfach nicht weiter. Ich muss aber gestehen, das ich ein blutiger Anfänger bin. Vielleicht könnte mir jemand weiterhelfen.:

#include<stdio.h>// eingeben von eins (also beliebige Zahl1) und zwei (beliebige Zahl2) und es soll mit einem zweitem Programm zurückgegeben werden. Es sollte auch den unterschied zwischen +,-,*und / kennen, also ein kleiner Taschenrechener. Mit dezimalzahlen
float z1,z2;
float add()
{
      float a;
      a=z1+z2;
      return z1+z2;
}
float sub()
{ 
      float s;
      s=z1-z2;
      return z1-z2;
}
float mul()
{
      float m;
      m=z1*z2;
      return z1*z2;
}
float div()
{
      float d;
      d=z1/z2;
      return z1/z2;
}
int main()
{
    char rechnen; //Datentyp Character (beliebiges Zeichen) (auch sonderzeichen)
    printf("Geben Sie Zahl1 ein\n");
    scanf("%f",z1);
    printf("Geben Sie Zahl2 ein\n");
    scanf("%f",z2);// f für eine Dezimalzahl

    printf("Addition %f\n",add(z1,z2));
    printf("Subtration %f\n",sub(z1,z2));
    printf("Multiplikation %f\n",mul(z1,z2));
    printf("Division %f\n",div(z1,z2));
    getchar();
    printf("Die Zahl beträgt %f\n",z1,z2);
    getchar();
    return 0;
     // system("Pause")
}

Bitte um Antwort


----------



## Teambeta (21. Oktober 2007)

Deine Funktionen besitzen ja gar keine Parameter, um eine Übergabe zu ermöglichen. ;-)


----------



## Tobias01 (21. Oktober 2007)

A, das könnte ein grund sein. *g*


----------



## Onkel Schuppig (21. Oktober 2007)

Hi,
um die Aufgabe lösen zu können, musst du doch die einfachsten Grundkenntnisse der Sprache C haben. Scheinen aber zu fehlen. Hier in dem Forum gibt's viele Quellen zum Lernen der Sprache.


----------



## Tobias01 (21. Oktober 2007)

Wir haben in der Schule leider einen Lehrer der es selbst nicht so gut kann *g*, und der hat uns einfach ein Skriptum gegeben, wo sich kein Schwein auskennt.
ich habe nun die fehlenden Parameter dazugegeben, was nun so aussieht:
#include<stdio.h>// eingeben von eins und zwei und es soll mit einem zweitem Programm das zurückgegeben werden. mit dezimalzahlen
float z1,z2;
float add()
{
      float a;
      a=z1+z2;
      return z1+z2;
}
float sub()
{ 
      float s;
      s=z1-z2;
      return z1-z2;
}
float mul()
{
      float m;
      m=z1*z2;
      return z1*z2;
}
float div()
{
      float d;
      d=z1/z2;
      return z1/z2;
}
int main()
    {
          float add;
          float sub;
          float mul;
          float div;
          char rechnen; //Datentyp Character (beliebiges Zeichen) (auch sonderzeichen)
          printf("Geben Sie Zahl1 ein\n");
          scanf("%f",z1);
          printf("Geben Sie Zahl2 ein\n");
          scanf("%f",z2);// f für eine Dezimalzahl

          printf("Addition %f\n",add);
          scanf("%f",add);
          printf("Subtration %f\n",sub);
          scanf("%f",sub);
          printf("Multiplikation %f\n",mul);
          scanf("%f",mul);
          printf("Division %f\n",div);
          scanf("%f",div);
          getchar();
          printf("Die Zahl beträgt %f\n",z1,z2);
          getchar();
          return 0;
          // system("Pause")
    }


----------



## Tobias01 (21. Oktober 2007)

nun, ich habe das Programm so weit hingebracht das es Funktioniert, jedoch der Windows Treiber spielt irgend wie nicht mit, es kommt immer eine Meldung, das Windows einen Fehler festgestelt hat und das EXE Programm beendet werden muss.


----------



## Onkel Schuppig (27. Oktober 2007)

Tschuldige, war einige Tage nicht im Lande.
Also, ein paar Anregungen:

```
float z1, z2;
```
In der ersten Zeile definierst du globale Variablen. Das geht zwar, ist aber sehr fragwürdig. Das solltest du besser in main() unterbringen. Aber egal. Lassen wir das so und machen weiter.
Dann sieh dir mal eine der Funktionen an:

```
float add()
{
float a;
a=z1+z2;
return z1+z2;
}
```
Da ist was doppelt. a wird zwar mit z1 + z2 belegt, aber danach gar nicht benutzt. Schreib es doch so:
	
	
	



```
float add() {
  return z1 + z2;
}
```
Dann kommen wir zur Funktion main(). Diese "float add, mul, sub, und div" verstehe ich nicht.
Dann noch das hier:

```
printf("Addition %f\n",add);
scanf("%f",add); 
printf("Subtration %f\n",sub);
scanf("%f",sub);
printf("Multiplikation %f\n",mul);
scanf("%f",mul);
printf("Division %f\n",div);
scanf("%f",div);
getchar();
printf("Die Zahl beträgt %f\n",z1,z2);
```
Die letzte Zeile ist meiner Meinung nach überflüssig und falsch auch noch. Die letzten 4 scanf-Befehle in diesem Abschnitt lasse mal ruhig weg. Und wenn man genau ist, sollte bei Division abgefragt werden on z2 == 0 ist.


----------



## Tobias01 (27. Oktober 2007)

Ist kein Problem, danke das du überhaupst dir für mich Zeit nimmst. 

Das Programm habe ich jetzt mit deinen Verbesserungen umgeschrieben, man kann zwar die erste Zahl eingeben, dann kommt aber die alte meldung von Windows, das die exe datei geschlossen werden muss.

#include<stdio.h>
float z1;
float z2;
float add() 
{
  return z1+z2;
}
float sub()
{
      return z1-z2;
}
float mul()
{
      return z1*z2;
}
float div()
{
      return z1/z2;
}
int main()
{
          char rechnen; //Datentyp Character (beliebiges Zeichen) (auch sonderzeichen)
          printf("Geben Sie Zahl1 ein\n");
          scanf("%f",z1);
          printf("Geben Sie die Rechenart ein\n");
          scanf("%+%-%*%/");
          printf("Geben Sie Zahl2 ein\n");
          scanf("%f",z2);// f für eine Dezimalzahl

          printf("Addition %f\n",add);
          scanf("%f",add); 
          printf("Subtration %f\n",sub);
          scanf("%f",sub);
          printf("Multiplikation %f\n",mul);
          scanf("%f",mul);
          printf("Division %f\n",div);
          scanf("%f",div);
          getchar();
          printf("Die Zahl beträgt %f\n",z1,z2);
          getchar();
}


----------



## deepthroat (27. Oktober 2007)

Hi.

Du musst bei der Funktion scanf einen Zeiger, also die Adresse einer Variablen angeben. Dort speichert scanf bei erfolgreichem "scannen" der Eingabe den Wert.

Die Adresse einer Variablen bekommt man mit dem Adress-Operator (&):
	
	
	



```
float f;

scanf("%f", &f);
```
Gruß


----------



## Onkel Schuppig (28. Oktober 2007)

Hi nochmal, erstmal musst du deepthroats Beitrag beachten. Schreibe das "&":
	
	
	



```
scanf("%f", &z1);
```
Nächstes Problem:
	
	
	



```
scanf("%+%-%*%/");
```
 ist völliger Unsinn. Soll nicht eins der Zeichen +, -, * und / eingegeben werden?
Dann müsste der Code danach auch entsprechend diese Eingabe verarbeiten (mit einer switch-Anweisung zum Beispiel). Und diese Zeilen wie 
	
	
	



```
scanf("%f", add);
```
 sollten doch gelöscht werden.
Noch viel Arbeit!


----------



## Tobias01 (31. Oktober 2007)

Was sollte ich dann statt diesem Befehl schreiben:
 scanf("%+%-%*%/");

mfg


----------



## Onkel Schuppig (31. Oktober 2007)

Ok, das mit der Abfrage der Rechenart ist wohl noch etwas zu fortgeschritten für dich.
Wenn du den Code wie unten abänderst, so wird es wenigstens durchlaufen.

```
int main() {
          printf("Geben Sie Zahl1 ein\n");
          scanf("%f", &z1);
          printf("Geben Sie Zahl2 ein\n");
          scanf("%f", &z2);     
          printf("Addition %f\n",add);
          printf("Subtration %f\n",sub);
          printf("Multiplikation %f\n",mul);
          printf("Division %f\n",div);
          getchar();
          return 0;
}
```
Mit Abfrage würde es so aussehen:

```
int main() {
          int rechnen;

          printf("Geben Sie Zahl 1 ein\n");
          scanf("%f", &z1);
          printf("Geben Sie Zahl 2 ein\n");
          scanf("%f", &z2);     

          printf("Bitte Rechenart eingeben (+, -, *, /)\n");
          rechnen = getchar();

          switch(rechnen) {
          case '+':
             printf("Addition %f\n",add);
             break;
          case '-':
             printf("Subtration %f\n",sub);
             break;
          case '*':
             printf("Multiplikation %f\n",mul);
             break;
          case '/':
             printf("Division %f\n",div);
             break;
          default:
             printf("Ungueltige Auswahl!\n");
          }

          getchar();
          return 0;
}
```


----------



## Tobias01 (6. November 2007)

Danke
Tobias


----------

