Toon posts:

[C] deling probleem, leraar weet 't niet :)

Pagina: 1
Acties:
  • 151 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit nou op school in C me eerste proggie te maken.
Maar met delen doet ie vreemd
als ik 4/6 doe krijg ik als antwoord 0.00 hoe komt dat??
De leraar heb wel wat geprobeerd, maar het wil niet lukken
hier is de source code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
main()
{
    int a,b;
    float r,s;

    printf("Geef getal a: ");
    scanf("%d",&a);
    printf("Geef getal b: ");
    scanf("%d",&b);

    r=a/b;
    s=a*b;

    printf("Deling = %1.2f\n",r);
    printf("Produkt = %.0f",s);
}

alvast bedankt >:)
heb les tot 11:35

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Maak van die int's een float's :?

[juist, wat Yarvieh zegt]

Verwijderd

r=(float)a/b;

Verwijderd

Op vrijdag 07 september 2001 11:12 schreef Absolom het volgende:
De leraar heb wel wat geprobeerd, maar het wil niet lukken
Bwahaha, dit is zo basic dat als een leraar dat niet weet, hij zelf naar school moet.

Je deelt een int door een int, dus wat zou de uitkomst worden? Juist ja, een int. En die wordt vervolgens geconverteerd naar een float. Je moet dus casten naar floats voor je deelt. Absolute beginnersfout.

r= ((float)a)/((float)b);

  • Rowwan
  • Registratie: November 2000
  • Laatst online: 16:34
ROTFLOL :).. Die leraar is het niet waard om leraar genoemd te worden. (en das geen grapje...)

Verwijderd

LOL
idd, heeft die leraar zijn diploma misschien via tv shopping besteld ofzo ? :D

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:04

Creepy

Tactical Espionage Splatterer

Zo is het helaas met een hoop Informatica "leraren" gesteld..
omscholingscursusje en les geven maar... en dan zijn ze net 1 week verder in het lesmateriaal dan jij zou moeten zijn..
blegh!!! wen er maar aan.. gaat nog vaker gebeuren waarschijnlijk... Heb het zelf een aantal keren meegemaakt..

Op een duur was het zo erg dat de leraar maar in de klas ging rondvragen wie het WEL wist >:)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Als maar één van de twee een float is zal ie al de zooi in floats uitrekenen, deze mietjes-code:
code:
1
r = ((float)a)/((float)b);

is dus dubbelop.

Verwijderd

Op vrijdag 07 september 2001 11:55 schreef Sneech het volgende:
Als maar één van de twee een float is zal ie al de zooi in floats uitrekenen, deze mietjes-code:
code:
1
r = ((float)a)/((float)b);

is dus dubbelop.
Klopt, je hoeft alleen de eerste expressie te casten, maar dat is net zoiets als een if zonder {} schrijven. Het werkt, maar als de code ooit gemaintained moet worden liggen de bugs op de loer. Het is dus een goede gewoonte elke deelexpressie te casten.

Verwijderd

VC geeft ook netjes een compiler warning als je m niet cast..

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op vrijdag 07 september 2001 12:51 schreef Yarvieh het volgende:
VC geeft ook netjes een compiler warning als je m niet cast..
nee hoor, float a = b / c gaat zonder warnings werken, omdat een int automatisch gecast kan worden naar een float

als je doet float a = (float)b / c of float a = b / (float)c werkt het ook zonder warnings

overigens vond ik die haakjes wel wat overkill, niet bepaald leesbaar. ik zou het zo doen:
code:
1
float a = (float)b / (float)c;

maar da's subjectief natuurlijk :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

waar gaat het heen met de wereld :( naja heb je nog wat te lachen in de klas :)

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Op vrijdag 07 september 2001 11:19 schreef Yarvieh het volgende:
r=(float)a/b;
de expressie casten zoals hier is dus genoeg? want ik kan me zo voorstellen dat hij van a/b (omdat dat ints zijn) gewoon een int maakt en die dan cast naar float (net zoals float r; r = a/b) ... da's dus niet zo?

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


Verwijderd

Op vrijdag 07 september 2001 12:56 schreef OiSyN het volgende:
nee hoor, float a = b / c gaat zonder warnings werken, omdat een int automatisch gecast kan worden naar een float
als ik het orignele programma hier boven compileer krijg ik netjes deze warning :
d:\rukker\cast.cpp(15) : warning C4244: '=' : conversion from 'int' to 'float', possible loss of data
Die me op een mogelijk niet bedoelde actie wijst.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op vrijdag 07 september 2001 11:53 schreef Creepy het volgende:
Op een duur was het zo erg dat de leraar maar in de klas ging rondvragen wie het WEL wist >:)
Ik het op de Technische Universiteit een keer meegemaakt dat aan het einde van een trimester de twee 4e-jaars practicumbegeleiders mij (toen 1e-jaars) bedankten omdat ze dat trimester meer van mij hadden geleerd dan ik van hun.

Tja.

8086-assembler ging het over :Y)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op vrijdag 07 september 2001 13:01 schreef Yarvieh het volgende:
als ik het orignele programma hier boven compileer krijg ik netjes deze warning :
[..]
Die me op een mogelijk niet bedoelde actie wijst.
Volgens ANSI is deze warning niet verplicht omdat een int in principe altijd in een float past. Het is bonus dat sommige compilers 'm dus uit zeikerigheid geven :)

Professionele website nodig?


Verwijderd

Op vrijdag 07 september 2001 13:38 schreef curry684 het volgende:
Volgens ANSI is deze warning niet verplicht omdat een int in principe altijd in een float past. Het is bonus dat sommige compilers 'm dus uit zeikerigheid geven :)
ik zei ook dat VC 'm gaf maar OiSyN was 't daar niet zo mee eens ;)

Verwijderd

Op vrijdag 07 september 2001 13:36 schreef curry684 het volgende:

[..]

Ik het op de Technische Universiteit een keer meegemaakt dat aan het einde van een trimester de twee 4e-jaars practicumbegeleiders mij (toen 1e-jaars) bedankten omdat ze dat trimester meer van mij hadden geleerd dan ik van hun.

Tja.

8086-assembler ging het over :Y)
Yes! Dat is nog eens iets om te debuggen :)

...

Mijn leraren die informatica gaven waren een Wiskundige en een Bedrijfseconomist :) Ik heb ze nog les moeten geven tijdens een opleiding van Ordina :) Toen moest ik ze uitleggen wat ze MIJ op school hadden moeten uitleggen |:(

(weet wel de standaardschooldingen PSDs, SSSs, Backtracking, JSP (meen ik dat ze heten), Pacalproggen, DBase/clipper, Proggen in Excell).

Verwijderd

Topicstarter
Bedankt voor alle posts!
Zal het de leraar maar niet laten lezen >:)

Maar ik heb dus vorig jaar pascal gehad. en vandaag gingen
we dus ook kijken wat het verschil was van pascal naar c

maar in pascal kon je gewoon twee integer's gebruiken om te
delen en dan een float uitrekenen
code:
1
2
3
4
5
6
7
8
...
VAR a,b:INTEGER;
    r:REAL;

BEGIN
   r:=a/b;
   WRITE(r);
...

dat was voldoende, maar dat kan dus niet in C begrijp ik?
Je moet dus met floats rekenen want hij wordt niet standaard
omgezet (gecast) dat moet je dus handmatig doen door er float
bij te zetten?

Maar als ik nou gewoon als variabele float a,b; maak, doet
ie het dan wel???

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Maar als ik nou gewoon als variabele float a,b; maak, doet
ie het dan wel???
ja....maar een beetje zelf experimenteren kan nooit kwaad natuurlijk. (zolang je van de system(..) functie afblijft natuurlijk ;))

Verwijderd

Yups, dat komt omdat Pascal automatisch de conversie afhandeld en C (meestal) niet.

  • Sponz
  • Registratie: Juni 2001
  • Niet online

Sponz

nul nest parfait saif moi

Op vrijdag 07 september 2001 14:12 schreef SpHeaRe het volgende:
Yups, dat komt omdat Pascal automatisch de conversie afhandeld en C (meestal) niet.
In Pascal gebruik je div voor integere delingen, en / voor floats.
Maar dat terzijde ;)

Verwijderd

Hmm, over deze heb ik heen gelezen, toch nog ff replyen.
Op vrijdag 07 september 2001 12:58 schreef limoentje het volgende:
de expressie casten zoals hier is dus genoeg? want ik kan me zo voorstellen dat hij van a/b (omdat dat ints zijn) gewoon een int maakt en die dan cast naar float (net zoals float r; r = a/b) ... da's dus niet zo?
De cast-operator heeft een hogere precedence als de deel-operator. Bij r= (float)a / b; wordt dus eerst de variabele a naar een float gecast, en daarna wordt er pas gedeeld. (En bij een deling van float door int of int door float wordt de int automatisch naar een float gecast, en de uitkomst is ook een float.)

In het kort: r= (float)a / b; cast dus niet de expressie a / b, maar alleen de a. Om deze reden zet ik altijd haken om een cast, zodat er geen verwarring kan ontstaan.

Verwijderd

he 'mietje'

Ik kan je niet bereiken via mail of ICQ, maar zou je mij ook eens willen helpen met een probleem over recursie ???

[topic=222721/1/25]

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op vrijdag 07 september 2001 13:40 schreef Yarvieh het volgende:

[..]

ik zei ook dat VC 'm gaf maar OiSyN was 't daar niet zo mee eens ;)
Toch spoort die warning niet, want als je float f = (int)i; doet krijg je toch ook geen warning (als je die wel kreeg zou dat nergens op slaan)
En als JIJ die wel krijgt dan heb je de warninglevel idd op zeikmodus staan (level 45235234 ofzo) :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op vrijdag 07 september 2001 17:44 schreef OiSyN het volgende:
Toch spoort die warning niet, want als je float f = (int)i; doet krijg je toch ook geen warning (als je die wel kreeg zou dat nergens op slaan)
Expliciete casts geven per definitie nooit conversion-warnings (da's het idee achter een expliciete cast toch? :) )

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zaterdag 08 september 2001 13:44 schreef curry684 het volgende:

[..]

Expliciete casts geven per definitie nooit conversion-warnings (da's het idee achter een expliciete cast toch? :) )
tuurlijk wel

als jij doet int i = (float)f; dan krijg je OOK een warning :)
Een explicite cast geeft pas geen warning als je m GOED cast (dus naar het type van de lhs, of een type wat gewoon zonder warnings te converteren is naar het type van de lhs)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Op vrijdag 07 september 2001 17:44 schreef OiSyN het volgende:
Toch spoort die warning niet, want als je float f = (int)i; doet krijg je toch ook geen warning (als je die wel kreeg zou dat nergens op slaan)
Als je 'm expliciet cast krijg je 'm natuurlijk niet, maar wat is er mis mee eigenlijk? cast je 'm niet (vergeten?) dan krijg je een warning dat hij 'm voor je cast (en mogelijk een bug introduceerd), cast je 'm expliciet weet ie dus dat je weet wat je aan het doen bent en laat ie je met rust..tamelijk genieaal toch? :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zaterdag 08 september 2001 16:47 schreef Yarvieh het volgende:

[..]

Als je 'm expliciet cast krijg je 'm natuurlijk niet, maar wat is er mis mee eigenlijk? cast je 'm niet (vergeten?) dan krijg je een warning dat hij 'm voor je cast (en mogelijk een bug introduceerd), cast je 'm expliciet weet ie dus dat je weet wat je aan het doen bent en laat ie je met rust..tamelijk genieaal toch? :)
nee niet echt
als je m perongeluk cast naar een verkeerd type dan wil ik nog steeds dat ie met een warning komt
Want dit spoort toch niet zonder warnings:
code:
1
2
3
4
5
FILE *file;
int i;
float f;

f = (FILE *)i;

ik heb m expliciet gecast, maar ik verwacht natuurlijk wel een warning

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Sorry je moet het doen met een error op de laatste regel:

error C2115: '=' : incompatible types

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

dan maak je van die f ook effe een int, het ging om het idee :z

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

warning C4047: '=' : 'int ' differs in levels of indirection from 'struct _iobuf *'

Je verwacht een warning, je krijgt een warnig.. :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 20:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

precies! en ik heb expliciet gecast! dus jouw opmerking klopt niet :)

deze dus:
Als je 'm expliciet cast krijg je 'm natuurlijk niet, maar wat is er mis mee eigenlijk? cast je 'm niet (vergeten?) dan krijg je een warning dat hij 'm voor je cast (en mogelijk een bug introduceerd), cast je 'm expliciet weet ie dus dat je weet wat je aan het doen bent en laat ie je met rust..tamelijk genieaal toch

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Okay je hebt gelijk (we hadden het over het casten van ints naar floats maar je hebt die opmerking uit zijn verband gerukt), maar het idee is dus dat vc een warning geeft wanneer er iets gebeurd met wellicht een onbedoeld effect, en dat is hoe je het ook wend of keert een mooie feature ;)

  • catfish
  • Registratie: December 2000
  • Laatst online: 25-08 14:20
Op vrijdag 07 september 2001 11:53 schreef Creepy het volgende:
Zo is het helaas met een hoop Informatica "leraren" gesteld..
omscholingscursusje en les geven maar... en dan zijn ze net 1 week verder in het lesmateriaal dan jij zou moeten zijn..
blegh!!! wen er maar aan.. gaat nog vaker gebeuren waarschijnlijk... Heb het zelf een aantal keren meegemaakt..

Op een duur was het zo erg dat de leraar maar in de klas ging rondvragen wie het WEL wist >:)
waar hebben we nog zo iets gezien... >:)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:04

Creepy

Tactical Espionage Splatterer

Ach.. mocht je ooit es op het Zeeland College in Vlissingen zitten en er Technische Informatica doen... dan ken ik er daaro 1 die dat deed (is alweer jaartje of 6/7 geleden.. dus geen idee of die gozer er nog zit en er een beetje slimmer op geworden is :) )

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1