# Mini C Programm



## Re4dt (5. April 2013)

Guten Tag Leute,

Ich muss bis zur nächsten Woche ein kleines Programm zur Noten Berechnung erstellen. Leider blick ich gerade kaum noch durch. Hoffe ihr könnt mir helfen.
Grundaufgabe man gibt die Erreichte Punktanzahl an. Dann wird einem die Note berechnet mit Kommastelle. Jedoch zeigt das Programm nur ganze Zahlen. Was habe ich Falsch gemacht? 
Abgesehen davon soll anschließend z.B wenn die Note 2 erreicht wurde -> "gut" angezeigt werden. (3-> Befriedigend, 4-> Ausreichend usw.)
Wie mache ich dies am besten?  mit If else? 


```
/*Programm zur Berechnung der Note

Erstellt von: ***** Erstellt am: 05.04.2013*/

 #include <stdio.h>

 void main ()
    {
      int zahl1; 
      int summe;
      
      printf("\n\n\nNotenberechnung");
      printf("\n*******************");
      
      printf("\nErreichte Punktzahl von 60 ");
      scanf("%i",&zahl1);    
      
      
      
      summe = 6 - 5 * zahl1 / 60;    
      
      printf("\n\n\nDie Note betraegt: %i",summe);      
      
           }
```

Grüße


----------



## Multithread (5. April 2013)

probier mal 
	
	



```
summe=(6 - 5 * zahl1 )/ 60.0;
```
das sollte klappen.

Wenn du durch einen int durch einen int wert dividierst, kommt als Resultat ebenfalls ein int wert raus


----------



## PC-Bastler_2011 (5. April 2013)

Ersetze das int durch float.
int kann nur ganze Zahlen darstellen und float ist für Kommazahlen zuständig.


----------



## Leandros (5. April 2013)

Re4dt schrieb:


> Abgesehen davon soll anschließend z.B wenn die Note 2 erreicht wurde -> "gut" angezeigt werden. (3-> Befriedigend, 4-> Ausreichend usw.)
> Wie mache ich dies am besten?  mit If else?


 
Mit einem String Array, wo du 


```
summe - 1
```

ausgeben lässt.


----------



## Kotor (5. April 2013)

weiß nicht wie das heute ist, doch früher hatte ich immer die  #include <math.h> dabei


----------



## Leandros (5. April 2013)

Kotor schrieb:


> weiß nicht wie das heute ist, doch früher hatte ich immer die  #include <math.h> dabei


 
Grundrechenarten kann Cpp auch so, wenn du Math.round oder sqrt oder so haben willst brauchst du erst Math.h.


----------



## Re4dt (5. April 2013)

Multithread schrieb:


> probier mal
> 
> 
> 
> ...


Mit den Klammern kommt eine komische -1,xxxxx Zahl heraus und ohne die Klammern wieder nur ganze Zahlen.


PC-Bastler_2011 schrieb:


> Ersetze das int durch float.
> int kann nur ganze Zahlen darstellen und float ist für Kommazahlen zuständig.


Habe ich auch versucht, aber es kommt Summe=0


----------



## Leandros (5. April 2013)

Wie ist die Rechnung denn richtig? Gib mir mal ein Beispiel.




Re4dt schrieb:


> Habe ich auch versucht, aber es kommt Summe=0


Hast du die Rechnung zu float gecastet? Cpp macht die standard mäßig mit ints.


----------



## fadade (5. April 2013)

Nach obiger Formel (_summe = 6 - 5 * zahl1 / 60;_ ) wird eigentlich folgendes berechnet:

```
summe = 6 - ((5 * zahl1) / 60);
```
Was wohl eher gewünscht ist (vermutlich...) könnte der Anteil der Gesamtzahl an Punkten sein:

```
summe = zahl1 / 60.0f; // also konkret mit float
```
und anschließend dann weitere Operationen:

```
summe = 6 - (5 * summe);
```
Mal rein spekulativ ins Forum geworfen


----------



## Leandros (5. April 2013)

Rein Spekulativ  (deswegen habe ich ja auch nach der Formel gefragt)



> summe = zahl1 / 60.0f; // also konkret mit float



Stimmt, da hätte ich jetzt gar nicht drangedacht. 
Ich hätte es so gemacht: 


```
summe = (float) zahl1 / 60.0;
```

Was natürlich, in dem fall jetzt nicht, aber sonst, exceptions mir ins Gesicht schmeissen kann.


----------



## DarkMo (5. April 2013)

Leandros schrieb:


> Mit einem String Array, wo du
> 
> 
> ```
> ...


 genau das war auch meine erste idee. einfach ein array bauen mit "sehr gut" "gut"... usw als inhalt und die note als index nutzen.


----------



## Re4dt (6. April 2013)

Leandros schrieb:


> Wie ist die Rechnung denn richtig? Gib mir mal ein Beispiel.



Habe nochmal nachgesehen kleiner Fehler  (Die Formel dient zur Noten Berechnung in Klassenarbeiten) -->  6-5*(Erreichte Punkzahl/Erreichbare Punkte) 

```
summe = 6.0 - 5.0 * (zahl1 / 30.0);
```
Mit Komma ist es richtig. Habe es verbessert.

Jedoch habe ich immer noch das Problem mit Nachkommastelle. Habs wie ihr empholen habt mit Float probiert kommt weiterhin immer Wert=0
Ich kann wetten das ich einen total dummen Fehler immer mache 

```
#include <stdio.h>

 void main ()
    {
      float zahl1; 
      float summe;
      
      printf("\n\n\nNotenberechnung");
      printf("\n*******************");
      
      printf("\nErreichte Punktzahl von 30 ");
      scanf("%i",&zahl1);    
      
      
       
      summe = 6.0 - 5.0 * ( (float) zahl1 / 30.0f);    
      
      printf("\n\n\nDie Note betraegt: %i",summe);      
      
           }
```


----------



## Leandros (6. April 2013)

Zahl1 sollte doch eine ganz zahlige Zahl sein, oder? Dann kannst die auch auf int lassen, ist aber im Endeffekt egal. 

So:

```
summe = (float) 6.0 - 5.0 * (zahl1 / 30.0);
```
 
Oder so: 

```
summe = 6.0f - 5.0f * (zahl1 / 30.0f);
```


----------



## DarkMo (6. April 2013)

printf("\n\n\nDie Note betraegt: *%i*",summe);

ahem ^^ wenn du hier nen integer in den string baust wird der float wert natürlich zur ausgabe gecastet und alle schöne rechnerei vorher war fürn hannes  probier hier mal %d statt %i.


----------



## Leandros (6. April 2013)

Stimmt, gar nicht drauf geachtet. Ich nutze immer "cout" und "cin".


----------



## Skysnake (9. April 2013)

Hist, ich wollte es schon sagen. Ist mir direkt als erstes aufgefallen 

Ich glaub der Threadersteller sollte sich nochmal klar machen, was Datentypen sind, und wie man Sie nutzt. Vor allem auch, wie man eine Ausgabe richtig macht.

Darum geht es auch. Nicht um ein funktionierendes Programm, das etwas "sinnvolles" macht, sondern darum sich der Datentypen, und deren richtiger Handhabe klar zu werden.


----------



## ryzen1 (9. April 2013)

DarkMo schrieb:


> printf("\n\n\nDie Note betraegt: *%i*",summe);
> 
> ahem ^^ wenn du hier nen integer in den string baust wird der float wert natürlich zur ausgabe gecastet und alle schöne rechnerei vorher war fürn hannes  probier hier mal %d statt %i.



%d ist übrigens auch Integer soweit ich mich erinnern kann.



Ich würds mal so probieren


      scanf("%f",&zahl1);    


      summe = 6.0 - 5.0 * (zahl1 / 30.0);   

      printf("\n\n\nDie Note betraegt: %.2f",summe);


----------



## Skysnake (9. April 2013)

Warum glauben und nicht wissen?

Wenn man solche Aufgaben bekommt, wollen die Steller, das man Seiten wie diese findet: printf - C++ Reference

Da braucht man nicht mehr glauben und sich erinnern, sondern man kann binnen Sekunden nachschlagen. 

Das macht ja einen guten Programmierer auch mit aus. Er weiß wo er zur Not nachschlagen kann.


----------



## ryzen1 (9. April 2013)

Skysnake schrieb:


> Warum glauben und nicht wissen?
> 
> Wenn man solche Aufgaben bekommt, wollen die Steller, das man Seiten wie diese findet: printf - C++ Reference
> 
> ...


 
Na siehst du, ich wusst es doch


----------



## Leandros (9. April 2013)

Skysnake, man muss nie alles wissen. Man muss nur wissen wo es steht bzw wie man Googlen kann.


----------



## DarkMo (9. April 2013)

oha, dann war das ne andre sprache, wo d für double und ned für decimal stand. und die reference brauch ich ned finden - die is längst in den favs


----------

