necesito q el programa me pida los datos hasta q yo le diga que no, y que imprim

Iniciado por luis torres, 29 Junio 2014, 20:36 PM

0 Miembros y 1 Visitante están viendo este tema.

luis torres

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

engel lex

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

leosansan

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




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



eferion

¿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;
}