Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]
#include <iostream>
#include<stdio.h>

float zonaA(float v)
{
float limit=100,mult=0;
if(v>limit){
mult=(1000+(500*(v-limit)));
}
else{
mult=0;}
return mult;
}

float zonaB(float v)
{
float limit=120,mult=0;
if(v>limit){
mult=(1000+(500*(v-limit)));
}
else{
mult=0;}
return mult;
}

float zonaC(float v)
{
float limit=150,mult=0;
if(v>limit){
mult=(1000+(500*(v-limit)));
}
else{
mult=0;}
return mult;
}

float zonaD(float v)
{
float limit=180,mult=0;
if(v>limit){
mult=(1000+(500*(v-limit)));
}
else{
mult=0;}
return mult;
}

using namespace std;
int main()
{
    float mpagar=0,pm=0,k,prom,promedio[3],c=0,d=0;
    int I;
    char placa[6],opc;
    while(opc!='n'){
    cout<<"ingrese la placa del auto"<<endl;
    cin>>placa;
    cout<<"ingrese la zona"<<endl;
    cin>>I;
    cout<<"cantidad de kilometros"<<endl;
    cin>>k; 
   if((I==1)&&(zonaA(k)==0))
    {
    cout<<placa<<" no paga multa"<<endl;
    d=d+1;
    }
    else{
    cout<<placa<<" su multa es=  "<<zonaA(k)<<endl;
    c=c+1;
    }
  promedio[I]=(zonaA(k)/(c+d));
   }
  cout<<"cargar mas s/n=<"<<endl;
  cin>>opc;
   if((I==2)&&(zonaB(k)==0))
    {
    cout<<placa<<" no paga multa"<<endl;
    d=d+1;
    }
    else{
    cout<<placa<<" su multa es=  "<<zonaB(k)<<endl;
    c=c+1;
    }
  promedio[I]=(zonaB(k)/(c+d));}
  cout<<"cargar mas s/n=<"<<endl;
  cin>>opc;
if(opc=='n')
{
for(I=1;I<4;I++)   
cout<<promedio[I]<<endl;   
}
system("PAUSE");
    return 0;
}


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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
float Zona(float v,float limit){
 float mult=0;
 if(v>limit)
   mult=(1000+(500*(v-limit)));
 else
   mult=0;
 return mult;
}


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 (cpp) [Seleccionar]
float velocidad,promedio[4]={0},cont[4]={0};
 int zona,multa[4]={0};


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

Código (cpp) [Seleccionar]

///faltaria las zona=1,  zona=2 y zona=3, analogas a la 4
///con las correspondientes velocidades maximas de argumento en la funcion Zona  
   if((zona==4) && (Zona(velocidad,180)==0)){
     cout<<placa<<" no paga multa"<<endl;
    cont[3]++;
   }
   else if(zona==4 && Zona(velocidad,180)!=0){
     cout<<placa<<" su multa es=  "<<Zona(velocidad,180)<<endl;
     cont[3]++;
     multa[3]++;
   }
   if(zona==4 && cont[3]!=0)
      promedio[zona-1]+=Zona(velocidad,180);
 
   cout<<"cargar mas s/n=<"<<endl;
   cin>>opc;

 }///fin del WHILE
 if(opc=='n'){ //SOLO aqui va
   for(zona=0;zona<4;zona++)
     if (cont[zona]!=0)
     cout<<"[zona= "<<zona+1<<"] "<<endl<<"Promedio de las multas = "<<promedio[zona]/cont[zona]<<"   Multas: "<<multa[zona]<<"   Vehiculos que han circulado: "<<cont[zona]<<endl;
 }


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...



#define MAXZONAS 4

// Velocidad maxima de cada una de las zonas
int velocidades[ MAXZONAS ] = { 100, 120, 160, 180 };

// ...

float multa = Zona( velocidad, velocidades[ zona - 1 ]  );
if ( multa == 0.0 )
{
  cout << placa << " no paga multa " << endl;
}
else
{
  cout << placa << " su multa es " << multa << endl;
}