0

I`m trying to divide any number in .5, if dividing the number in .5 and my remain is 0 the number will raises up to the next. But if not, it will down to the next.

When I try to do that I get a issue in the line 39. Somebody can help me.

Thanks

//
//  main.cpp
//  Promedio
//
//  Created by Oscar Espinosa on 3/27/15.
//  Copyright (c) 2015 IPN ESIME Ticoman. All rights reserved.
//

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
int ed, cv, qa, em, h, poo;
float prom, red;
string nom, ape;

cout << " Introduce tus datos" << endl
     <<"Nombre: ";
getline(cin, nom);
cout << "Apellidos: ";
getline(cin, ape);
cout << "Introduce las siguientes calificaciones" << endl
     << "Ecuaciones Diferenciales: ";
cin  >> ed ;
cout << "Calculo vectorial: ";
cin  >> cv ;
cout << "Quimica apilcada: ";
cin  >> qa ;
cout << "Electricidad y magnetismo: ";
cin  >> em;
cout << "Humanidades II: ";
cin  >> h;
cout << "Programacion orientada a objetos: ";
cin >> poo ;
prom = (ed+cv+qa+em+h+poo)/6.00;

if (prom%.5 == 0) // Semantic issue invalid operands to binary expression ('double' and 'double')
{
    ceil(prom);
    red = ceil(prom);
}
else
{
    floor(prom);
    red = floor(prom);
}

cout << nom << " " << ape << " tu promedio es " << prom << " y se redondea a " << red;

return 0;
}

3 Answers3

4

@Oscar Espinosa
you cannot use %(modulus) operator with double values
So its showing the error invalid operands in expression..
try using the fmod(x,y) function..it will work

vsoftco
  • 55,410
  • 12
  • 139
  • 252
Pankaj Andhale
  • 401
  • 9
  • 24
  • excellent answer, didn't know about this function, upvoted :) But again, test equality to zero up to some small epsilon. – vsoftco Apr 02 '15 at 19:05
1

Modulo (%) can only be used with integer values. You can use fmod but if you meant to work on integer values, perhaps such a trick can help:

if (10*static_cast< int >(prom)%5 == 0)
dotnetom
  • 24,551
  • 9
  • 51
  • 54
pstanisz
  • 181
  • 9
0

The issue is pretty clear: you don't define var before the if(var==0). In C++, you need to define the variable before its first use. Pay attention to what the compiler is telling you. In case of g++:

error: 'var' was not declared in this scope

which I think it's pretty explicit!

PS: don't modify the code after an answer, as you end up confusing everyone. In the actual code, you are passing 0.5 as the modulus operator argument. That operator takes an int. You need other way of testing whether a float is a multiple of 0.5. In particular, you should also pay attention to roundoff errors.

Hint: a float x is a multiple of 0.5 if and only if 2*x is an integer. So 2*x - floor(2*x) must be close to zero, i.e. abs(2*x - floor(2*x)) < 1e-12 to avoid floating point errors.

See related question: Checking if float is an integer

Community
  • 1
  • 1
vsoftco
  • 55,410
  • 12
  • 139
  • 252