Forum: Mikrocontroller und Digitale Elektronik C-Programmierung Kommazahl immer auf nächste ganze Zahl runden


von Tobias Straub (Gast)


Lesenswert?

Hallo Leute,

ich bin neu hier und habe mich erst angemeldet. Heiße Tobias und komme 
aus dem Raum Stuttgart.
Ich studiere Elektrotechnik und wir müssen in Informatik C 
programmieren.
Hierzu habe ich eine Aufgabe bekommen.
Ein Busunternehmen vermietet Busse mit 50 Stellplätzen. Ein Bus kostet 
1000 Plätze.

Wenn ich jetzt wissen will wie viele Busse ich beötige und zum Beispiel 
130 Reisende habe dann mache ich ja:
Busse = Reisende/50
Busse = 110/50

Hier kommt dann aber 2 raus da ich die Zahl Busse als Integer definiert 
habe. Float bringt mir ja auch nichts weil ich ja keine halben Busse 
machen kann. Könnt ihr mir also helfen wie ich von zum Beispiel 2,2 auf 
3 Busse komme?

Hab schon das hier versucht:

Busse = (Reisende/50)+0.9

Doch das bringt irgendwie auch nix...

Hier vll noch mein aktuelles Programm. Hat weiter unten noch andere 
Funktionen wie Unbenutze Plätze, Durchschnitt und Preis. Das tut aber 
soweit schon.
1
#include "stdafx.h"
2
#include "stdio.h"
3
#include "stdlib.h"
4
5
int main ()
6
{
7
  int R, B, U, P, D;
8
  printf("Bitte geben Sie die Anzahl der Reisenden an\n");
9
    scanf_s("%d",&R);
10
    fflush(stdin);
11
12
  B = 0.9+(R/50);
13
  U = (B*50)-R;
14
  D = ((B*50)/R)*100;
15
  P = (B*1000)/R;
16
17
18
  printf("Anzahl Busse:%d\n",B);
19
  printf("Anzahl unbenutzte Plaetze:%d\n",U);
20
  printf("Durchschnittliche Auslastung der Busse:%d\n",D);
21
  printf("Preis pro Person:%d\n",P);
22
23
  system ("pause");
24
25
  return 0;
26
}

Vielen Dank im Vorraus!

Grüße Tobi

: Verschoben durch User
von Lutz H. (luhe)


Lesenswert?

Versuch es mal mit Ceiling() oder Floor()+1.

von M. K. (kichi)


Lesenswert?

Auf eine mögliche Lösung könntest du mit Festkommaarithmetik kommen.

von Tobias Straub (Gast)


Lesenswert?

lutz h. schrieb:
> Versuch es mal mit Ceiling() oder Floor()+1.

Was meinst du damit?
Kannst du das als Code kurz formulieren?

von Maxx (Gast)


Lesenswert?

Die Anzahl der Busse leitet sich exakt durch die Anzahl der belegten und 
freien Plätze ab:


AnzahlBusse = (FreiePlätze + BelegtePlätze) / PlätzeProBus

Du hast jetzt BelegtePlätze und PlätzeProBus gegeben. FreiePlätze lässt 
sich daraus ableiten. Danach kannst du die AnzahlBusse durch die obige 
Gleichung ganz ohne Runden ausrechnen.

von chris (Gast)


Lesenswert?

#define DIV(x,y) (((x)+(y)-1)/(y))

B=DIV(R,50); // integer
B=(float)R/50.+.9; // float

von Ich (Gast)


Lesenswert?

Anzahl Busse = (<Fahrgäste> modulo <Sitzpläte pro Bus>) + 1

Falls (<Fahrgäste> div <Sitzplätze pro Bus>) = 0: Ohne die +1 (der Fall, 
dass es genau aufgeht)

von Tobias Straub (Gast)


Lesenswert?

chris schrieb:
> #define DIV(x,y) (((x)+(y)-1)/(y))
>
> B=DIV(R,50); // integer
> B=(float)R/50.+.9; // float

Danke Chris. So funktioniert es!

:)

von Maxx (Gast)


Lesenswert?

chris schrieb:
> #define DIV(x,y) (((x)+(y)-1)/(y))
> B=DIV(R,50); // integer

Warum mit 49 aproximieren, wenn du weisst, dass der fehlende Anteil zu 
zum vollen Bus ist?
Warum diese Lösung dennoch funktioniert und wo die Grenzen sind wird der 
TO ohne Erklärung nicht verstehen und beim nächsten Mal noch mehr auf 
dem Schlach stehen.

> B=(float)R/50.+.9; // float

Sei R = 1001.
R/50 + 0.9 = 20,92 ... Gerundet 20, Falsch!

von (prx) A. K. (prx)


Lesenswert?


: Bearbeitet durch User
von Tobias Straub (Gast)


Lesenswert?

Maxx schrieb:
> chris schrieb:
>> #define DIV(x,y) (((x)+(y)-1)/(y))
>> B=DIV(R,50); // integer
>
> Warum mit 49 aproximieren, wenn du weisst, dass der fehlende Anteil zu
> zum vollen Bus ist?
> Warum diese Lösung dennoch funktioniert und wo die Grenzen sind wird der
> TO ohne Erklärung nicht verstehen und beim nächsten Mal noch mehr auf
> dem Schlach stehen.
>
>> B=(float)R/50.+.9; // float
>
> Sei R = 1001.
> R/50 + 0.9 = 20,92 ... Gerundet 20, Falsch!

Stimmt, das funktioniert nicht. Kannst du dann deine Lösung mal genauer 
schreiben. Ich vertsehe es ned genau?

von Udo S. (urschmitt)


Lesenswert?

Tobias Straub schrieb:
> Kannst du das als Code kurz formulieren?

Ich glaubs ja nicht :-(

Dazu braucht man kein Float. Wie wäre es mit dem Modulo Operator, oder 
hast du dafür nirgends Code zum kopieren gefunden.

von Tobias Straub (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Tobias Straub schrieb:
>> Kannst du das als Code kurz formulieren?
>
> Ich glaubs ja nicht :-(
>
> Dazu braucht man kein Float. Wie wäre es mit dem Modulo Operator, oder
> hast du dafür nirgends Code zum kopieren gefunden.

Modulo kenn ich, aber da nimmt er doch dann immmer den rest und gibt den 
aus? Das will ich ja aber nicht? Ich will das er immer aufrundet...

von programming (Gast)


Lesenswert?

Der Threadstarter schrieb:
> Ich studiere Elektrotechnik und wir müssen in Informatik C
> programmieren.
> Hierzu habe ich eine Aufgabe bekommen.

Na, als ET-Student sollte dir doch wenigstens EINE passable Lösung 
einfallen.

> Stimmt, das funktioniert nicht.

Und? Bist du SELBER drauf gekommen?

> Kannst du dann deine Lösung mal genauer
> schreiben. Ich vertsehe es ned genau?

Dann gehen die Punkte aber ans Forum!

:)

von Lutz H. (luhe)


Lesenswert?

B = Ceiling(R/50);

wenn der Übersetzer es kann,

von Tobias Straub (Gast)


Lesenswert?

Bin seit 3 Wochen in der Theoriephase vom 1. Semester also nach ganz 
frisch dabei.

Nee leider nicht. Hab davor schon ewig rumprobiert.
Haha Punkte gibts dafür eh nicht. Ist nur eine von vielen Hausaufgaben 
über die Weihnachtszeit um in dei C-sprache reinzukommen.

Gruß

von (prx) A. K. (prx)


Lesenswert?

Tja, wenn die Busse sich bloss an die moderne Zeit halten würden und 
eine Zweierpotenz an Plätzen hätten... Dann müsste man sie nur mit 
negativen Reisenden füllen, diese anschliessend um den Zweierlogarithmus 
der Buskapazität nach rechts schieben und schon hat man die negative 
Anzahl benötigter Busse. Ok, 100% standardkonform wäre das nicht, aber 
faktisch brauchbar.

von Tobias Straub (Gast)


Lesenswert?

lutz h. schrieb:
> B = Ceiling(R/50);
>
> wenn der Übersetzer es kann,

Ne ceiling kennt visual studio mit meinen datenbanken nicht.

von (prx) A. K. (prx)


Lesenswert?

Lesen bildet. Also nochmal poste ich das nicht...

von programming (Gast)


Lesenswert?

Der Threadstarter schrieb:
> Ne ceiling kennt visual studio mit meinen datenbanken nicht.

Herrlich!

:))))

Moment, ich hole Schnittchen ..

von Udo S. (urschmitt)


Lesenswert?

Tobias Straub schrieb:
> Modulo kenn ich, aber da nimmt er doch dann immmer den rest und gibt den
> aus? Das will ich ja aber nicht? Ich will das er immer aufrundet...

Dann fang mal an. Kauf dir ein paar Päckchen Streichhölzer und rechne 
das mal auf em Schreibtisch nach.
Und dann versuche mal zu denken wie man mit Teilen und Rest (Integer 
Division und Modulo) dein Problem herausfinden könnte.
Tipp: Man braucht vieleicht noch ein if()

Ich glaubs ja nicht, das ist eine Logikaufgabe für Grundschüler oder 5. 
Klasse.
Wie hast du dein Matheabi geschafft?

Noch ein Tipp: Die nächstgrößere ganze Zahl kann man mit +1 ausdrücken.

: Bearbeitet durch User
von npn (Gast)


Lesenswert?

Tobias Straub schrieb:
> lutz h. schrieb:
>> B = Ceiling(R/50);
>>
>> wenn der Übersetzer es kann,
>
> Ne ceiling kennt visual studio mit meinen datenbanken nicht.

Versuchs mal mit #include <math.h> und schon hat das Studio die Funktion 
gelernt :-)

von (prx) A. K. (prx)


Lesenswert?

Lustigerweise geht das auch völlig ohne Modulo. Auch das war schon mal 
da, ging aber wieder unter, weil nur halb richtig präsentiert.

von (prx) A. K. (prx)


Lesenswert?

npn schrieb:
> Versuchs mal mit #include <math.h> und schon hat das Studio die Funktion
> gelernt :-)

Nö.

von chris (Gast)


Lesenswert?

Tobias Straub schrieb:
> Maxx schrieb:
>> chris schrieb:
>>> #define DIV(x,y) (((x)+(y)-1)/(y))
>>> B=DIV(R,50); // integer
>>
>> Warum mit 49 aproximieren, wenn du weisst, dass der fehlende Anteil zu
>> zum vollen Bus ist?
>> Warum diese Lösung dennoch funktioniert und wo die Grenzen sind wird der
>> TO ohne Erklärung nicht verstehen und beim nächsten Mal noch mehr auf
>> dem Schlach stehen.

Die Lösung funktioniert. Punkt.
Habe extra die #define Variante genommen, damit der TO nicht bei anderen
Zahlen auf dem Schlauch steht, die #define sollte doch einfach lesbar 
sein.
Bei
B=(R+49)/50 könnte ich deinen Einwand verstehen, nicht aber bei der von
mir gewählten Form.

>>> B=(float)R/50.+.9; // float
>>
>> Sei R = 1001.
>> R/50 + 0.9 = 20,92 ... Gerundet 20, Falsch!
>
> Stimmt, das funktioniert nicht. Kannst du dann deine Lösung mal genauer
> schreiben. Ich vertsehe es ned genau?
Hier ging es mir, um die Lösung, welche er ausprobiert hatte, zu 
berichtigen, und die 0.9 kamen vom TO der einfachheit halber.
Richtig wäre es +.999999

>B = Ceiling(R/50);
Das funktioniert nicht.
R/50 is immer eine Int Rechnung, und dann wuerde beim Beispiel von
101 Personen immer 2 rauskommen.
B = Ceiling(R/50.);
Was funktioniert (math lib muss verwendet werden, -lm)
B=ceil(R/50.+.5);

von npn (Gast)


Lesenswert?

A. K. schrieb:
> npn schrieb:
>> Versuchs mal mit #include <math.h> und schon hat das Studio die Funktion
>> gelernt :-)
>
> Nö.

Stimmt. Hatte ich übersehen. ceil() statt ceiling()
Sorry

von chris (Gast)


Lesenswert?

oder eben
B=ceil((float)R/(float)50+.5);
sollte der TO 50 durch eine Variable ersetzen wollen.

von Tobias Straub (Gast)


Lesenswert?

Sodelle,
tut mir leid wenn ich hier bissle Blöd rüber komme. Mein Problem ist 
aber einfach das ich noch nicht genau weiß wie ich es als Code schreibe 
so das alles passt.
Habe mir das mit dem ceil jetzt nochmal angeschaut und ausprobiert.
So funktioniert es jetzt.
Vielen Dank für eure tatkräftige Unterstützung. Genial wie schnell man 
hier viele verscheidenen Ansätze präsentiert bekommt.

Mein Programm:
1
#include "stdafx.h"
2
#include "stdio.h"
3
#include "stdlib.h"
4
#include "math.h"
5
6
int main ()
7
{
8
  int R, B, U, D, Z;
9
  float P;
10
11
  printf("Bitte geben Sie die Anzahl der Reisenden an\n");
12
    scanf_s("%d",&R);
13
    fflush(stdin);
14
15
  B = ceil((float)R/50);
16
  U = (B*50)-R;
17
  D = ((float)(R/B)/50)*100;
18
  P = ((float)B*1000)/R;
19
20
21
  printf("Anzahl Busse:%d\n",B);
22
  printf("Anzahl unbenutzte Plaetze:%d\n",U);
23
  printf("Durchschnittliche Auslastung der Busse:%d\n",D);
24
  printf("Preis pro Person:%f\n",P);
25
26
  system ("pause");
27
28
  return 0;
29
}

Grüße

von chris (Gast)


Lesenswert?

Aber man kann gleich schreiben
B=(int)((float)R/(float)50+.999999);

und erspart sich so das ceil , sowie die math.h include, sowie die math 
lib.
und wenn B ein int ist, kann man das (int)(...) streichen,
sowie wenn 50 eine Konstante ist, reduziert sich dies auf
B=R/50.+.999999;
aber die Integer Version ist richtig und hat keine Fehler, auch nicht 
wenn
die Personen mehr als 1mio sind, welche von Bussen befördert werden 
muss.

von (prx) A. K. (prx)


Lesenswert?

chris schrieb:
> B=ceil((float)R/(float)50+.5);

Ganz sicher?

chris schrieb:
> B=R/50.+.999999;

Von mir gäbe es dafür Punktabzug.

: Bearbeitet durch User
von Udo S. (urschmitt)


Lesenswert?

A. K. schrieb:
> Lustigerweise geht das auch völlig ohne Modulo. Auch das war schon mal
> da, ging aber wieder unter, weil nur halb richtig präsentiert.

Du meinst das Makro oben. Aber das wird der TO noch weniger verstehen.

von well (Gast)


Lesenswert?

Das ist doch erst Aufgabe 16, die ist ja noch nicht sooo schwer ;-)

von (prx) A. K. (prx)


Lesenswert?

Udo Schmitt schrieb:
> Du meinst das Makro oben. Aber das wird der TO noch weniger verstehen.

Wenn er der Betreiber eines Busunternehmens wäre, dann wäre alles ok, 
das im Rahmen üblichen Unternehmensgrössen egal wie zum richtigen 
Ergebnis kommt.

Da er aber keine Busse besitzt, sondern studiert, ist der Weg und 
insbesondere das Verständnis wichtiger. Dafür sind solchen Aufgaben 
nämlich da. Wär also klüger, wenn er diesen Weg versteht.

von Maxx (Gast)


Lesenswert?

chris schrieb:
> Richtig wäre es +.999999

Noe, auch nicht. Das ist eine völlig sinnlos gewählte Komponente, die 
zwar mit dem gewählen Beispiel passt, aber noch lange nicht bei allen 
Eingaben. Es ist eine Krücke, so oder so.

Mathe ist eine exakte Wissenschaft. Diese Aufgabe im Speziellen ist 
trivial und ohne so einen Schmuh lösbar.


Deine Lösung ist in etwa so sauber wie von einem wackelnden Stuhl 
einfach immer vom längsten Bein einen cm abzuschneiden. 1000 mal gekürzt 
und immer noch zu lang ...


AnzahlBusse = (FreiePlätze + BelegtePlätze) / PlätzeProBus ;
FreiePlätze = BelegtePlätze % PlätzeProBus ;
=>
AnzahlBusse = ((BelegtePlätze % PlätzeProBus) + BelegtePlätze) / 
PlätzeProBus ;

Im Integer/bzw. SetN:
FreiePlätze = (BelegtePlätze / PlätzeProBus ) * PlätzeProBus

Daher ergibt sich mit reiner Integerarithmetik ohne Modulo:
AnzahlBusse = (((BelegtePlätze / PlätzeProBus ) * PlätzeProBus ) + 
BelegtePlätze) / PlätzeProBus ;

Oder rekursiv:
BenötigteBusse(n,PlätzeProBus) := 
(n==0?0:((n<PlätzeProBus)?1:1+BenötigteBusse(n-50,PlätzeProBus))

Gerne auch ausgerollt:
BenötigteBusse=0;
while (BenötigtePlätze >= PlätzeProBus)
{
  BenötigteBusse++
  BenötigePlätze-=PlätzeProBus;
}

Und nicht so einen Schmuh mit Magic-Values und PiMalDaumen

von Maxx (Gast)


Lesenswert?

Maxx schrieb:
> FreiePlätze = (BelegtePlätze / PlätzeProBus ) * PlätzeProBus

Da hat sich der Fehlerteufel eingeschlichen und eine Subtraktion 
weggeschmissen.

von Udo S. (urschmitt)


Lesenswert?

@ Maxx:
Schön, du hast nun bewiesen dass es sich immer noch lohnt seine Aufgaben 
hier reinzustellen wenn man zu faul ist sie selbst zu machen, weil man 
mindestens einen (zensiert) findet, der sie dann für einen löst.

von Karl H. (kbuchegg)


Lesenswert?

Tobias Straub schrieb:

> Modulo kenn ich, aber da nimmt er doch dann immmer den rest und gibt den
> aus? Das will ich ja aber nicht? Ich will das er immer aufrundet...

Das willst du eigentlich nicht.

Wenn du einfach durchdividierst, dann erhältst du die Anzahl der Busse 
die voll besetzt sind.

Bei 68 Leuten und 28 Leuten pro Bus, hast du erst mal
68 / 28 = 2
voll besetzte Busse und
68 % 28 = 12
zwölf Leute, die erst mal keinen Platz gefunden haben.

Diese 12 Leute müssen entweder zu Hause bleiben oder du orderst für die 
einen zusätzlichen Bus, der dann eben nicht voll ist.

Welche der Varianten gewählt wird, entscheidet die Aufgabenstellung. 
Aber programmiert ist das trivial.
Geh weg vom runden. Du willst nicht im eigentlichen Sinne runden, 
sondern wissen ob alle Personen ganzzahlig in eine Anzahl x Busse 
reinpasst, oder ob du als Unternehmer in den sauren Apfel beissen musst, 
und x+1 Busse einsetzen musst. Der Rest bei der Division (vulgo Modulo) 
erzählt dir alles, was du wissen musst. Ist dieser Rest 0, dann sind 
offensichtlich alle untergekommen und es braucht keinen zusätzlichen 
halb besetzten Bus.
Der ganz Ansatz mit Kommazahlen zu operieren ist schon mies.

Versuch nicht, auf Biegen und Brechen alles in eine einzige Formel zu 
quetschen. In der Programmierung wirst du noch oft genug den Fall haben, 
dass sich eine 'Berechnung' über mehrere Zeilen und mehrere Anweisungen 
hinzieht.

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Karl Heinz schrieb:
> Geh weg vom runden

Es geht aber schon mit Abschneiden bzw truncate, wenn man vorher die 
Anzahl der Plätze im Bus minus 1 dazuaddiert
1
(int)(49 + (50 - 1))/50 = 1
2
(int)(50 + (50 - 1))/50 = 1
3
(int)(51 + (50 - 1))/50 = 2

Karl Heinz schrieb:
> Bei 68 Leuten und 28 Leuten pro Bus, hast du erst mal
> 68 / 28 = 2
> voll besetzte Busse und
> 68 % 28 = 12
> zwölf Leute, die erst mal keinen Platz gefunden haben.
1
(int)(68 + (28 - 1))/28 = 3.392857143 also 3

MfG Klaus

von Karl H. (kbuchegg)


Lesenswert?

Klaus schrieb:
> Karl Heinz schrieb:
>> Geh weg vom runden
>
> Es geht aber schon mit Abschneiden bzw truncate, wenn man vorher die
> Anzahl der Plätze im Bus minus 1 dazuaddiert
>
1
> (int)(49 + (50 - 1))/50 = 1
2
> (int)(50 + (50 - 1))/50 = 1
3
> (int)(51 + (50 - 1))/50 = 2
4
>
>
> Karl Heinz schrieb:
>> Bei 68 Leuten und 28 Leuten pro Bus, hast du erst mal
>> 68 / 28 = 2
>> voll besetzte Busse und
>> 68 % 28 = 12
>> zwölf Leute, die erst mal keinen Platz gefunden haben.
>
>
1
> (int)(68 + (28 - 1))/28 = 3.392857143 also 3
2
>

Lach.
wenn er es seinem Lehrer so erklären kann.

Für
1
  Anzahl = Leute / Plaetze;
2
  if( Leute % Plaetze != 0 )
3
    Anzahl++;
würde ich volle Punktzahl vergeben. Einfach, durchschaubar, trivial auf 
Korrektheit zu prüfen.

von Max M. (jens2001)


Lesenswert?

So eine triviale Aufgabe.

Integeraritmetik ohne Rest.

Anzahl_Busse = ((Anz_Personen-1)/Sitzplätze)+1

von (prx) A. K. (prx)


Lesenswert?

Max Mustermann schrieb:
> Anzahl_Busse = ((Anz_Personen-1)/Sitzplätze)+1

Hatten wir schon, vor gut 2h.

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Kann leider nicht editieren:

@Karl Heinz

Ist so ähnlich, wie das Addieren von 0,5 bei der Formel zum Runden

MfG Klaus

von Joachim B. (jar)


Lesenswert?

und was ist wie in der Schule?

130 Leuts / 50 Plätze gibt als INT 2

und 2 x 50 gibt 100 Leuts im Bus die merken wir uns!

ziehen wir die gemerkten 100 Leuts von den 130 Leuts die mitfahren 
wollen ab bleiben 30 Leuts übrig ohne Mitfahrgelegenheit, aha wir 
brauchen einen Bus mehr.

verstehe ich grad das Problem nicht oder wie war die Frage?

Tobias Straub schrieb:
> Könnt ihr mir also helfen wie ich von zum Beispiel 2,2 auf
> 3 Busse komme?

von Max M. (jens2001)


Lesenswert?

A. K. schrieb:
> Max Mustermann schrieb:
>> Anzahl_Busse = ((Anz_Personen-1)/Sitzplätze)+1
>
> Hatten wir schon, vor gut 2h.

Ab "float" "ceiling" und"floor" hab ich den ganzen Rest mal übersprungen

Und um 16:22 standen da noch Sachen wie
> B = Ceiling(R/50);

von Karl H. (kbuchegg)


Lesenswert?

Joachim B. schrieb:

> verstehe ich grad das Problem nicht

Ist zu einfach.
Was jeder 3. Klässler Grundschule rechnen kann, ist zu trivial für 
Studenten.

von Händeringender Fachkräftemangler (Gast)


Lesenswert?

Tobias Straub schrieb:
> ich bin neu hier und habe mich erst angemeldet.

Na, da hast Du ja schon gleich eine Kostprobe des rauhen Klimas hier
erhalten.

Tobias Straub schrieb:
> Ich studiere Elektrotechnik und wir müssen in Informatik C
> programmieren.

Du hast Glück, schon etwas mit dieser Sprache zu tun gehabt zu haben.
Als vollkommener Neuanfänger wärest Du jetzt schon von den "Experten"
zermalmt worden.
Ein Rat: Halte Dich an die Hinweise von Karl-Heinz, die sind sinnvoll 
und
plausibel. Er ist im Gegensatz zu manch Anderem hier kein Blender und
Selbstdarsteller.

von programming (Gast)


Lesenswert?

Händeringender Fachkräftemangler (Gast) schrieb:

> Ein Rat: Halte Dich an die Hinweise von Karl-Heinz, die sind sinnvoll
> und
> plausibel. Er ist im Gegensatz zu manch Anderem hier kein Blender und
> Selbstdarsteller.

Vor allem hat Karl Heinz Buchegger dem Schützling nicht gleich 
irgendeine Lösung in Programmcode vor den Latz geknallt, sondern das 
Problem schlicht und nachvollziehbar auf eine einfache Rechenaufgabe 
reduziert. Das lässt dann auch Raum für einen eigenen Lösungsansatz. So 
sollte es sein. Was hat der TE denn davon, wenn er eure schöne 
Einzeilen-Lösung abkupfert? Beim nächsten mal wird er wieder fragen und 
das Forenfolk wird's ihm wieder lösen. In der Klausur fällt er später 
durch und darf sich dann dafür auch noch Häme hier anhören.

von Bernd K. (prof7bit)


Lesenswert?

Tobias Straub schrieb:
> Ne ceiling kennt visual studio mit meinen datenbanken nicht.

Wenn Du C lernen willst (oder jede andere Sprache) dann fang erstmal mit 
einem Texteditor und dem Compiler auf der Kommandozeile an.

So Sachen wie Visual-Studio sind erst dann erlaubt wenn man versteht 
(und zur Not zu Fuß nachstellen kann) welche Art von Voodoo das Studio 
(oder welche IDE auch immer) beim Herumklicken in der Toolbar 
automatisch im Hintergrund vollführt. Und noch bevor Du diese Stufe 
erreichst lernt Du bitte auch wie Makefiles funktionieren, dieses Wissen 
wird Dir später auch sehr nützlich sein.

Sonst wirst Du ewig im Dunkeln tappen.

Und nochwas: Tu Dir einen Gefallen und nimm von vornherein lieber gcc 
statt des Microsoft-Compilers und nutze lieber Linux statt Windows. Das 
ist die natürliche Umgebung für solche Werkzeuge, da fühlen die sich am 
wohlsten (und Du Dich dann ebenfalls).

von Volker S. (vloki)


Lesenswert?

Klaus schrieb:
> Ist so ähnlich, wie das Addieren von 0,5 bei der Formel zum Runden
>
> MfG Klaus

Genau.
Wenn mann nicht mit float rechnen kann oder will
und das gerundete Ergebnis einer Ganzahldivision braucht,
dann addiert man vorher die Hälfte des Divisors zum Dividenden hinzu.

Für das "Aufrunden" addiert man vorher den Divisor -1

: Bearbeitet durch User
von Easylife (Gast)


Lesenswert?

Ich würde es mal mit

busse = (reisende + 49)/50

versuchen. Alles integer, nix float.
Reisende sind ja in der Regel auch ganzzahlig.

von (prx) A. K. (prx)


Lesenswert?

Easylife schrieb:
> Reisende sind ja in der Regel auch ganzzahlig.

Nö, Kinder zahlen nur halb.

Nur wird diese Lösung langsam zum Running Gag.

von Tobias Straub (Gast)


Lesenswert?

Hehe Danke. Ja da kriegt man schon das ein oder andere zu hören hier 
Haha.
Naja unser Tutor hat gesagt das wir mit Visual Arbeiten sollen. Das wäre 
am besten. ich werd mir morgen nochmal das Programm anschauen und gucken 
ob ich es auch anders lösen kann.

Trotzdem Danke für die vielen Tipps.
Und ja in Zukunft halte ich mich an Karl Heinz

Grüße und schöne Weihnachten

von Lutz H. (luhe)


Lesenswert?

Stimmt, 110/50,  nix float, es bleibt int (ganzzahlig).
Danke, und schöne Feiertage

: Bearbeitet durch User
von Volker S. (vloki)


Lesenswert?

Max Mustermann schrieb:
> So eine triviale Aufgabe.
>
> Integeraritmetik ohne Rest.
>
> Anzahl_Busse = ((Anz_Personen-1)/Sitzplätze)+1

Braucht man so nicht auch dann einen Bus, wenn gar keiner mitfahren will 
?

von Paul B. (paul_baumann)


Lesenswert?

Volker SchK schrieb:
> Braucht man so nicht auch dann einen Bus, wenn gar keiner mitfahren will

Ja natürlich -und einen Fahrer dafür, den sog. Bustreiber.

Easylife schrieb:
> Reisende sind ja in der Regel auch ganzzahlig.

Naja, da bin ich nicht sicher, schließlich kommen pro Frau ja
auch 1,6 Kinder zu Welt...
;-)
MfG Paul

von Steffen R. (steffen_rose)


Lesenswert?

Volker SchK schrieb:
> Braucht man so nicht auch dann einen Bus, wenn gar keiner mitfahren will

Nicht bei Rufbussen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.