Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema ejercicio division

Estas en el tema de problema ejercicio division en el foro de C/C++ en Foros del Web. hola me pueden corregir el ejercicio... que es de un menu de calculadora y hasta donde lo estaba haciendo iba bien , pero cuando hago ...
  #1 (permalink)  
Antiguo 06/06/2010, 14:47
 
Fecha de Ingreso: julio-2009
Mensajes: 29
Antigüedad: 14 años, 9 meses
Puntos: 0
problema ejercicio division

hola me pueden corregir el ejercicio...
que es de un menu de calculadora y hasta donde lo estaba haciendo iba bien , pero cuando hago la division no me da resultado....



#include<stdio.h>
#include<conio.h>
#include<math.h>
main()

/*se inicia el programa con las variables definiendose a continuacion*/

{
int opcion=0,num1=0,num2=0,opcalc=0,sum=0,res=0;
int mult=0,div=0;

/* comienza el programa*/

printf("\nBienvenido al programa calculadora:\n");
printf("Ahora seleccione que operacion va a realizar del menu: ");
printf("\n1_calculos matematicos\n2_maximo y minimo de dos numeros\n");
scanf ("%d",&opcion);

/*ahora con un switch seleccionaremos la opcion y sus calculos*/
switch (opcion)
{
case 1:
{
printf("\nusted a seleccionado el calculo de operaciones:");
printf("\n1_sumas\n2_restas\n3_mutiplicacion\n4_di vision\n");
scanf ("%d",&opcalc);
/*ahora declararemos un switch anidado a otro*/
switch (opcalc)
{
case 1:
{
printf ("ingrese un numero: ");
scanf ("%d",&num1);
printf ("ingrese otro numero: ");
scanf ("%d",&num2);
sum=num1+num2;
printf("\nel resultado de la suma es: %d\n",sum);
}
break;
case 2:
{
printf("ingrese un numero: ");
scanf ("%d",&num1);
printf("ingrese otro numero: ");
scanf ("%d",&num2);
res=num1-num2;
printf("\nel resultado de la resta es: %d\n",res);
}
break;
case 3:
{
printf("ingrese el primer numero: ");
scanf("%d",&num1);
printf("ingrese el segundo numero: ");
scanf("%d",&num2);
mult=num1*num2;
printf("\nel resultado de la multiplicacion es: %d\n",mult);
}
break;
case 4:
{
printf("\ningrese el primer numero: ");
scanf("%d",&num1);
printf("ingrese el segundo numero: ");
scanf ("%d",&num2);
if (num2 !=0)
{
div=(num1/num2);
}
else
{
printf("no se puede dividir por 0");
}
}
break;
default:
printf ("la operacion es invalida");
}
}
break;
case 2:
{
printf("sos un chupapi");
}
break;
}
getch();
}
  #2 (permalink)  
Antiguo 06/06/2010, 15:02
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: problema ejercicio division

hola, te faltaba este trozo de codigo :

printf("\nel resultado de la division es: %d\n",div);


añadelo debajo de

div=(num1/num2)

y ya está.
  #3 (permalink)  
Antiguo 06/06/2010, 18:56
 
Fecha de Ingreso: julio-2009
Mensajes: 29
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: problema ejercicio division

jajja que tarado ,, ... como me puedo descuidar .........

gracias !

de apoco vamos avanzando en c...

Última edición por juan_bon; 06/06/2010 a las 19:02
  #4 (permalink)  
Antiguo 08/06/2010, 23:40
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 10 meses
Puntos: 95
Respuesta: problema ejercicio division

Lo que aqui veo es un error de implementación, un error de lógica.
Digamos que establezco como num1 = 2 y como num2 = 2
entonces al momento de hacer
div = num1/num2

me doy cuenta que tu variable div, es una variable de tipo entero.
Si divido 2/2 , sabemos que el resultado es 1.. un número entero.
Sin embargo, si divido 5/4 , 3/2, 24/7, etc...
la variable div, tendra un desbordamiento ya que el resultado es de coma flotante y la tienes declarada como entera.

La solución? Declara div, como float, de lo contrario (dependiendo del compilador), te mostrara 0, undef o algun valor extraño.

Ademas veo que estas llamando a la librería <math.h> y no estas utilizando ninguna de sus funciones.
  #5 (permalink)  
Antiguo 09/06/2010, 07:56
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: problema ejercicio division

Cita:
Iniciado por AlanChavez Ver Mensaje
Sin embargo, si divido 5/4 , 3/2, 24/7, etc...
la variable div, tendra un desbordamiento ya que el resultado es de coma flotante y la tienes declarada como entera.
Esto no es tan cierto.
En C existe clausura. Si divides 2 enteros, el resultado es entero. El resultado no depende del tipo de la variable a la que asignas el resultado.

Es cierto que si deseas el resultado float deberias hacer cambios en el programa.
Una parte de la solucion es definir div como float, pero no es suficiente. Para lograr el resultado float, los operandos, al menos 1 de ellos tiene que ser float. Lo logras haciendo un cast.

float div;
...

div = num1 / num2; // <-- resultado entero convertido a float, resultado no exacto


div = (float) num1 / num2; // convierte num1 a float antes de dividir

div = num1 / (float) num2; // convierte num2 a float antes de dividir

div = (float) num1 / (float) num2; // convierte num1 y num2 a float antes de dividir
  #6 (permalink)  
Antiguo 12/06/2010, 20:02
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 10 meses
Puntos: 95
Respuesta: problema ejercicio division

Cierto, Calgury tenía razón.
Quito el codigo porque no había hecho divisiones mayores a 1.
Gracias CdG por aclarar el punto.

Última edición por AlanChavez; 12/06/2010 a las 23:44
  #7 (permalink)  
Antiguo 12/06/2010, 23:06
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: problema ejercicio division

Cita:
Iniciado por AlanChavez Ver Mensaje
En C:
int/int = 0

es cierto se me olvido dar un detalle, para tener un resultado float, almenos uno de los dos debe ser float, no basta con tener float div;

No se de donde sacaste que int/int = int, eso no tiene ningun sentido.
Compila mi codigo y verás tu error.
Código C:
Ver original
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int resultado;
  5.     float resultado2;
  6.     int resultado3;
  7.     float resultado4;
  8.      
  9.     resultado = 3/5; //Resultado, Variable tipo int, division de dos enteros. Resultado = 0;
  10.     resultado2 = 3/5; //Resultado 2, Variable tipo float, division de dos enteros asignados a una variable float. Resultado2 = 0.000000;
  11.     //Esto debido a que en C, dividir dos enteros es siempre 0.
  12.     resultado3 = 3.0/5; //Resultado 3, variable tipo int, dividiendo un float y un int. Resultado3 = 0; El tipo de variable no puede almacenar un numero con coma flotante, porque se declaró previamente como entera.
  13.     resultado4 = 3.0/5; //Resultado 4, variable tipo float, dividiendo float y int. Resultado = 0.6000000
  14.     printf("%d\n%f\n%d\n%f",resultado,resultado2,resultado3,resultado4);
  15.     //Queda demostrado que en C, la division de dos enteros siempre es 0.
  16.     return 0;
  17. }
Hola Alan,
en C la división entera quita los decimales. Cambia tu ejemplo y comprobaras que es como te indica CalgaryCorpus
saludos
__________________
no quiero ser un árbol y caminar
Jacinto Piedra
  #8 (permalink)  
Antiguo 20/01/2016, 17:11
 
Fecha de Ingreso: enero-2016
Mensajes: 2
Antigüedad: 8 años, 3 meses
Puntos: 0
Respuesta: problema ejercicio division

ya encontre el error y basicamente era en la definicion de variables, es decir como estaba dividiendo int/int y el resultado guardandolo en una variable tipo float solo me estaba dando como resultado 0.


aqui el codigo con eso solucionado(ojo aun no esta terminado):

#include <iostream>
#include <conio.h>
#include <stdlib.h>

int main() {
int i,j,op;
float n,d,x,c=1,a=0,b=0,r=0,r1=0,r2=0,r3=0,r4=0,matz1[3][4],matz2[4][5],suma[3];
char matz3[5][6];
printf("Bienvenidos al Programa de Prueba");
do{



printf("Cual de estas opciones quiere realizar?\n 1)Matriz 3x3 \n 2)Matriz 4x4 \n 3)Matriz 5x5 \n");
scanf("%d", &op);
switch(op){
case 1:
for(i=1;i<=3;i++){
if(i==2)
c=1;
if(i==3)
c=1;
for(j=1;j<=4;j++){

if(j<4){
printf("Ingrese los datos de la ecuacion en la posicion %d %d: ",i,j);
scanf("%f",&n);
matz1[i][j]=n;}
if(j==4){
printf("Ingrese el resultado de la ecuacion: ");
scanf("%f",&n);
matz1[i][j]=n;
}


}
}
system("cls");
printf("Esta es su matriz resultante:\n");
for(i=1;i<=3;i++){
for(j=1;j<=4;j++){

if(j==1){
printf("\n");
}
if(j==4){
printf("=");
}
printf(" %f ",matz1[i][j]);

}
}

printf("\nF2=F1+(-a11/a21)*F2\n");
r=matz1[1][1]/matz1[2][1];
r=-r;
/*printf("el resultado de la division es:%f",r); esto es para comprobar que la division este bien*/
r1=matz1[2][1]*(r);
r2=matz1[2][2]*(r);
r3=matz1[2][3]*(r);
r4=matz1[2][4]*(r);
/*printf("\n %f,%f,%f,%f\n",r1,r2,r3,r4); esto es el resultado de a11/a21*F2*/
suma[0]=matz1[1][1]+r1;
suma[1]=matz1[1][2]+r2;
suma[2]=matz1[1][3]+r3;
suma[3]=matz1[1][4]+r4;
printf("F2=");
for(i=0;i<=3;i++){
if(i==3){printf(" = ");}
printf(" %f",suma[i]);
if(i==0){printf("x ,");}
if(i==1){printf("y ,");}
if(i==2){printf("z ,");}

}





printf("\nSi desea continuar presione 1\n");
scanf("%f",&d);
break;

case 2:
for(i=1;i<=4;i++){
for(j=1;j<=5;j++){
printf("Ingrese los datos de la primera ecuacion posicion %d %d: ",i,j);
scanf("%f",&n);
matz2[i][j]=n;
}
}
system("cls");
printf("Esta es su matriz resultante:\n");
for(i=1;i<=4;i++){
for(j=1;j<=5;j++){
if(j==1){
printf("\n");
}
if(j==5){
printf("=");
}
printf(" %f ",matz2[i][j]);

}
}
printf("\nSi desea continuar presione 1\n");
scanf("%f",&d);
break;

case 3:
for(i=1;i<=5;i++){
for(j=1;j<=6;j++){
printf("Ingrese el dato de la posicion %f %f: ",i,j);
scanf("%f",&n);
matz3[i][j]=n;
}
}
system("cls");
printf("Esta es su matriz resultante:\n");
for(i=1;i<=5;i++){
for(j=1;j<=6;j++){
if(j==1){
printf("\n");
}
if(j==6){
printf("=");
}
printf(" %f ",matz3[i][j]);

}
}
printf("\nSi desea continuar presione 1\n");
scanf("%f",&d);

break;

default:
printf("Opcion Invalida, si desea continuar presione 1\n");
scanf("%f",&d);
break;


}
}while(d==1);
return 0;
}

Etiquetas: division
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:17.