elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  el 3er do-while me esta marcando overflow porfa ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: el 3er do-while me esta marcando overflow porfa ayuda  (Leído 1,666 veces)
marcoaa

Desconectado Desconectado

Mensajes: 2


Ver Perfil
el 3er do-while me esta marcando overflow porfa ayuda
« en: 24 Febrero 2015, 00:45 am »

Código
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. //a es igual a la ganancia//
  4. //vp es igaul a valor de produccion//
  5. //contn es contador de niño y conts lo inverso//
  6. //contvs es contador de variedad salada mientras que contvn inverso//
  7. char tipo, rsp, tipomax;
  8. float cod , pvp, a, vp, acumganan=0, acumvp=0, gananmax=0, codmax;
  9. float costoalm, contn=0, conts=0, contvs=0, contvn=0;
  10.  
  11. void valo_pvp_ganancia(char tipo, float costoalm, float pvp, float a, float vp, float conts, float contvs, float contn, float contvn, float acumvp, float acumganan)
  12. {
  13.     if (tipo=='n' && cod<=10)
  14.     {
  15.            vp=costoalm*2;
  16.            pvp=vp+(vp*0.10);
  17.            a=vp*0.10;
  18.            contn=contn+1;
  19.            contvs=contvs+1;
  20.            acumvp=vp+acumvp;
  21.            acumganan=acumganan+a;
  22.            }
  23.     else if (tipo=='n' && cod>=11)
  24.     {
  25.          vp=costoalm*4;
  26.            pvp=vp+(vp*0.15);
  27.            a=vp*0.15;
  28.            contn=contn+1;
  29.            acumvp=vp+acumvp;
  30.            acumganan=acumganan+a;
  31.            }
  32.     else if (tipo=='a' && cod<=10)
  33.     {
  34.          vp=costoalm*4;
  35.            pvp=vp+(vp*0.20);
  36.            a=vp*0.20;
  37.            conts=conts+1;
  38.            contvs=contvs+1;
  39.            }
  40.     else
  41.     {
  42.          vp=costoalm*6;
  43.            pvp=vp+(vp*0.25);
  44.            a=vp*0.25;
  45.            conts=conts+1;
  46.            contn=contn+1;
  47.            }
  48. }
  49.  
  50.  
  51. float promediovp (float acumvp, float contn)
  52.        {
  53.         return ( acumvp/contn);
  54.                  }
  55. float promedioganan (float acumganan, float contn)
  56. {
  57.       return (acumganan/contn);
  58.       }
  59.  
  60.  
  61.  
  62.  
  63. main()
  64. {
  65. do
  66. {
  67. //info para la parte a//
  68. do  
  69. {
  70. printf("\n ingrese para quien esta dirigido el producto, n=ninos a=adultos ");
  71. scanf(" %c", &tipo);
  72. }
  73. while (tipo!='n' && tipo!='a');
  74.  
  75. do
  76. {  
  77.  
  78. printf("\n ingrese el codigo de variedad, del 1 al 20 ");
  79. scanf(" &f", &cod );
  80. }
  81. while (cod<1 || cod>20);  
  82. printf("\n ingrese el costo de almacenamiento ");
  83. scanf(" %f", &costoalm);
  84.  
  85. printf("\n");
  86. printf("\n");
  87. if (tipo=='n') //le faltan las comillas a la n//
  88. {  
  89. printf("\nel producto es dirigido hacia ninos");
  90.    }
  91. else
  92. {
  93. printf("\nel producto es dirigido hacia adultos");
  94. }
  95. if (cod<=10)
  96. {
  97.           printf("\n el producto es salado");
  98.           }
  99.           else
  100.           {
  101.              printf("\n el producto es dulce");
  102.              }
  103. printf("\n el costo de almacenamiento es %.0f ", costoalm);
  104. void valo_pvp_ganancia(char tipo, float costoalm, float pvp, float a, float vp, float conts, float contvs, float contn, float contvn);
  105. printf("\n el valor de produccione es %.0f ", vp);
  106. printf("\n el precio de venta al publico es de %.0f ", pvp);
  107. printf("\n la ganancia de la empresa es %.0f ", a);
  108. printf("\n");
  109. printf("\n");
  110. printf("\ndesea ingresar los datos de otro producto?");
  111. scanf(" %c", &rsp);
  112.  
  113.  
  114. if (a>gananmax)
  115. {
  116.   a=gananmax;
  117.   tipo=tipomax;
  118.   cod=codmax;
  119.    }
  120.  
  121. }
  122. while (rsp=='n');
  123. //culimna la parte a falta ciclo de rep//
  124.  
  125. printf("\n");
  126. printf("\n");
  127. printf("\n");
  128. printf("\n");
  129.  
  130. if (contn<conts)
  131. {
  132. printf("\nel tipo de pruducto mas fabricado fue hacia adultos %.0f", conts);
  133. printf("\n mientras que el de los ninos se fabricaron %.0f ", contn);
  134. }
  135. else if (conts<contn)
  136. {
  137. printf("\nel tipo de producto mas fabricado fue hacia ninos %.0f", contn);
  138. printf("\n mientras que el de los adultos e fabricaron %.0f ", conts);
  139. }
  140. else
  141. {
  142. printf("\n ambos producos se producieron en mismas cantidades %.0f", contn);
  143. }
  144.  
  145. printf("\n el total de los valores de produccion para ninos es de %.0f ", acumvp);
  146. printf("\n el total de ganancia por los productos de ninos es de %.0f ", acumganan);
  147.  
  148. if (contn=0)
  149. {
  150.          printf("\n no hubo produccion de productos para ninos");
  151.          }
  152. else
  153. {    
  154. printf("\n el promedio de los valores de produccion para ninos es de %.2f, ", promediovp(acumvp,contn));
  155. printf("\n el promedio de la ganancias de los productos de ninos es de %.2f ", promedioganan (acumganan, contn));
  156. }
  157. printf("\n el tipo de producto que genero la maxima ganancia fue %c ", tipomax);
  158. printf("   con codigo de %.0f", codmax);
  159.  
  160.  
  161. system("pause");
  162. }
  163.  


« Última modificación: 24 Febrero 2015, 07:58 am por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: el 3er do-while me esta marcando overflow porfa ayuda
« Respuesta #1 en: 24 Febrero 2015, 08:11 am »

te modifiqué el código, cuando publiques usa etiquetas GeSHi... segundo aviso....

primer error... main siempre es tipo int... y retorna normalmente 0...

segundo error.... todos (o casi todos) tus scanf están mal declarados...
Código
  1. scanf(" %c", &tipo);

espera literalmente lo que está ahí... que escribas un espacio y luego una letra... sin embargo lo agarra bien, aunque debes quitarle los espacios

tercer error y tu bug... linea 79
Código
  1. scanf(" &f", &cod );

es %f no &f


cuarto error... uno logico en la linea 122....


recomiendo que aprendas a usar el debugger de tu ide para conseguir estos errores con cierta facilidad


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: el 3er do-while me esta marcando overflow porfa ayuda
« Respuesta #2 en: 24 Febrero 2015, 17:28 pm »

segundo error.... todos (o casi todos) tus scanf están mal declarados...
Código
  1. scanf(" %c", &tipo);
espera literalmente lo que está ahí... que escribas un espacio y luego una letra... sin embargo lo agarra bien, aunque debes quitarle los espacios
No es un error sino un forma común de utilizar esa función. Explico:

scanf con todos los especificadores de formato (excepto dos) lo primero que hace es descartar el espacio blanco (espacio, tabulador, etc.), solo entonces consume los caracteres validos para la conversión indicada. Por ejemplo si tratamos de leer un entero y una palabra con "%d%s" una entrada como esta funcionara correctamente:
Código:
      123


fulano

Las dos excepciones son "%c" y "%[]", con estas el descarte no sucede (la función se "traga" los caracteres que pueda), por ejemplo si tratamos de leer un entero y un carácter con "%d%c" la siguiente entrada no dará el resultado esperado:
Código:
123{ENTER}
x{ENTER}
Ello porque la función consumirá los caracteres '1', '2' y '3' para generar el entero 123 y el avance de linea que sigue sera almacenado en la dirección indicada.

Para evitarlo se suele utilizar un espacio antes del especificador "%c" ya que este (el espacio) se interpreta como "descartar todo carácter para el cual la función isspace resulte en verdadero".

Por ultimo con la bendita función los caracteres de espacio blanco no se toman literalmente, en su lugar cualquier secuencia de estos se interpreta de la forma indicada (lectura y descarte de espacio blanco).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines