Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: luis torres en 29 Junio 2014, 20:36 pm



Título: necesito q el programa me pida los datos hasta q yo le diga que no, y que imprim
Publicado por: luis torres en 29 Junio 2014, 20:36 pm
Código
  1. #include <iostream>
  2. #include<stdio.h>
  3.  
  4. float zonaA(float v)
  5. {
  6. float limit=100,mult=0;
  7. if(v>limit){
  8. mult=(1000+(500*(v-limit)));
  9. }
  10. else{
  11. mult=0;}
  12. return mult;
  13. }
  14.  
  15. float zonaB(float v)
  16. {
  17. float limit=120,mult=0;
  18. if(v>limit){
  19. mult=(1000+(500*(v-limit)));
  20. }
  21. else{
  22. mult=0;}
  23. return mult;
  24. }
  25.  
  26. float zonaC(float v)
  27. {
  28. float limit=150,mult=0;
  29. if(v>limit){
  30. mult=(1000+(500*(v-limit)));
  31. }
  32. else{
  33. mult=0;}
  34. return mult;
  35. }
  36.  
  37. float zonaD(float v)
  38. {
  39. float limit=180,mult=0;
  40. if(v>limit){
  41. mult=(1000+(500*(v-limit)));
  42. }
  43. else{
  44. mult=0;}
  45. return mult;
  46. }
  47.  
  48. using namespace std;
  49. int main()
  50. {
  51.    float mpagar=0,pm=0,k,prom,promedio[3],c=0,d=0;
  52.    int I;
  53.    char placa[6],opc;
  54.    while(opc!='n'){
  55.    cout<<"ingrese la placa del auto"<<endl;
  56.    cin>>placa;
  57.    cout<<"ingrese la zona"<<endl;
  58.    cin>>I;
  59.    cout<<"cantidad de kilometros"<<endl;
  60.    cin>>k;  
  61.   if((I==1)&&(zonaA(k)==0))
  62.    {
  63.    cout<<placa<<" no paga multa"<<endl;
  64.    d=d+1;
  65.    }
  66.    else{
  67.    cout<<placa<<" su multa es=  "<<zonaA(k)<<endl;
  68.    c=c+1;
  69.    }
  70.  promedio[I]=(zonaA(k)/(c+d));
  71.   }
  72.  cout<<"cargar mas s/n=<"<<endl;
  73.  cin>>opc;
  74.   if((I==2)&&(zonaB(k)==0))
  75.    {
  76.    cout<<placa<<" no paga multa"<<endl;
  77.    d=d+1;
  78.    }
  79.    else{
  80.    cout<<placa<<" su multa es=  "<<zonaB(k)<<endl;
  81.    c=c+1;
  82.    }
  83.  promedio[I]=(zonaB(k)/(c+d));}
  84.  cout<<"cargar mas s/n=<"<<endl;
  85.  cin>>opc;
  86. if(opc=='n')
  87. {
  88. for(I=1;I<4;I++)  
  89. cout<<promedio[I]<<endl;  
  90. }
  91. system("PAUSE");
  92.    return 0;
  93. }

necesito que el programa me pida los datos hasta que le diga no, y que me imprime el promedio, lo hice con uno y si daba necesito de 4 opcione y ahi  si q no da nada


el enunciado dice 1. El departamento de tránsito prepara por cada infracción la siguiente entrada: placa, zona de infracción (A,B,C,D) límite de velocidad de la zona, y velocidad desarrollada por el infractor. Realice un algoritmo utilizando funciones y que produzca la siguiente información :
a. placa y multa la cual es a 1000 Bs + 500Bs*(por cada Km de exceso con respecto al límite)
El sistema sigue pidiendo información hasta que el usuario desee.
b.. indique por cada zona el número de infracciones ocurridas y la multa promedio


Título: Re: necesito q el programa me pida los datos hasta q yo le diga que no, y que imprim
Publicado por: engel lex en 29 Junio 2014, 22:49 pm
no entendi el problema... el programa parece correr bien

por cierto...
Código
  1. using namespace std;
eso va (normalmente) no sobre el main, sino luego de los include, antes de todas las funciones


Título: Re: necesito q el programa me pida los datos hasta q yo le diga que no, y que imprim
Publicado por: leosansan en 30 Junio 2014, 00:09 am
Yo te aconsejaría usar una sola función Zona a cambio de pasarle como parámetro la velocidad máxima en cada caso.

Código
  1. float Zona(float v,float limit){
  2.  float mult=0;
  3.  if(v>limit)
  4.    mult=(1000+(500*(v-limit)));
  5.  else
  6.    mult=0;
  7.  return mult;
  8. }

Y ya que has arreglado lo del while también te aconsejaría usar un par de arrays para ir quedando los coches que pasan por cada zona y los que en las mismas son multados:

Código
  1. float velocidad,promedio[4]={0},cont[4]={0};
  2.  int zona,multa[4]={0};

Y el tratamiento de una zona, la cuatro como ejemplo, la haría:

Código
  1. ///faltaria las zona=1,  zona=2 y zona=3, analogas a la 4
  2. ///con las correspondientes velocidades maximas de argumento en la funcion Zona  
  3.    if((zona==4) && (Zona(velocidad,180)==0)){
  4.      cout<<placa<<" no paga multa"<<endl;
  5.     cont[3]++;
  6.    }
  7.    else if(zona==4 && Zona(velocidad,180)!=0){
  8.      cout<<placa<<" su multa es=  "<<Zona(velocidad,180)<<endl;
  9.      cont[3]++;
  10.      multa[3]++;
  11.    }
  12.    if(zona==4 && cont[3]!=0)
  13.       promedio[zona-1]+=Zona(velocidad,180);
  14.  
  15.    cout<<"cargar mas s/n=<"<<endl;
  16.    cin>>opc;
  17.  
  18.  }///fin del WHILE
  19.  if(opc=='n'){ //SOLO aqui va
  20.    for(zona=0;zona<4;zona++)
  21.      if (cont[zona]!=0)
  22.      cout<<"[zona= "<<zona+1<<"] "<<endl<<"Promedio de las multas = "<<promedio[zona]/cont[zona]<<"   Multas: "<<multa[zona]<<"   Vehiculos que han circulado: "<<cont[zona]<<endl;
  23.  }

Aunque yo sería partidario de un swtich en lugar de tanto if-else.

Pero para que vayas cogiendo una idea creo que te vale,

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Y por favor, indenta  más correctamente el códiogo.




Título: Re: necesito q el programa me pida los datos hasta q yo le diga que no, y que imprim
Publicado por: eferion en 30 Junio 2014, 11:02 am
¿Y mapear la velocidad máxima en función de la zona? así no tienes que usar ni if ni switch...

Código
  1.  
  2. #define MAXZONAS 4
  3.  
  4. // Velocidad maxima de cada una de las zonas
  5. int velocidades[ MAXZONAS ] = { 100, 120, 160, 180 };
  6.  
  7. // ...
  8.  
  9. float multa = Zona( velocidad, velocidades[ zona - 1 ]  );
  10. if ( multa == 0.0 )
  11. {
  12.  cout << placa << " no paga multa " << endl;
  13. }
  14. else
  15. {
  16.  cout << placa << " su multa es " << multa << endl;
  17. }