Viernes 8 de Noviembre de 2024, 15:37
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
como hacer que este acumulador funcione
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: como hacer que este acumulador funcione (Leído 3945 veces)
luchojimenez
Miembro activo
Mensajes: 56
como hacer que este acumulador funcione
«
en:
Martes 6 de Julio de 2010, 05:38 »
0
hay un acumlador en la funcion ingresar, que he ppuesto apunto me gustaria que me explicaran donde este el error, por que este acumulador me guarda, datos erroneos, se que tiene que ver con el do/while, pero si le cambio a for entoces las entradads de cadenas correspondiente al nombre no me funcionan,
Código: C++
#include<iostream>
#include<conio2.h>
#include<cstdio>
#include<string.h>
using
namespace
std
;
void
ingresar
(
)
;
void
portada
(
)
;
void
rectangulo
(
)
;
int
h
=
0
,n
=
0
,j
;
struct
empleado
{
char
nombre
[
100
]
;
int
up
[
30
]
;
}
p
[
3
]
;
int
main
(
)
{
int
l
=
1
;
portada
(
)
;
rectangulo
(
)
;
do
{
l
++
;
ingresar
(
)
;
}
while
(
l
<=
3
)
;
system
(
"cls"
)
;
gotoxy
(
17
,
2
)
;
cout
<<
"ESTADISTICAS GLOBALES"
<<
endl
;
cout
<<
"total producido por todo los empleadosn"
<<
h
<<
"nn"
;
system
(
"pause"
)
;
return
0
;
}
void
ingresar
(
)
{
system
(
"cls"
)
;
int
i
=
0
,k,j
=
0
;
system
(
"color 70"
)
;
gotoxy
(
15
,
2
)
;
cout
<<
"POWERED BY LUIS ALFONSO JIMENEZ MEJIA"
<<
endl
;
gotoxy
(
5
,
9
)
;
cout
<<
"Ingrese Su Nombre: "
;
do
{
j
++
;
fgets
(
p
[
j
]
.
nombre
,
100
,
stdin
)
;
p
[
j
]
.
nombre
[
strlen
(
p
[
j
]
.
nombre
)
-
1
]
=
' '
;
fflush
(
stdin
)
;
while
(
i
<
4
)
{
i
++
;
cout
<<
"ningrese las unidades producidas/dias"
<<
endl
;
cin
>>
p
[
j
]
.
up
[
i
]
;
n
=
n
+
p
[
j
]
.
up
[
i
]
;
//este acumulador me ha dado dolores de cabeza
}
system
(
"cls"
)
;
k
=
n
/
4
;
h
=
h
+
n
;
gotoxy
(
17
,
2
)
;
cout
<<
"ESTADISTICAS DEL EMPLEADO: "
<<
p
[
j
]
.
nombre
<<
endl
;
gotoxy
(
17
,
5
)
;
cout
<<
"Producion total mes : "
<<
n
<<
endl
;
gotoxy
(
17
,
6
)
;
cout
<<
"Promedio produccion diaria: "
<<
k
<<
endl
;
}
while
(
j
<
3
)
;
gotoxy
(
17
,
15
)
;
system
(
"pause"
)
;
}
void
portada
(
)
{
system
(
"color 0a"
)
;
gotoxy
(
17
,
2
)
;
cout
<<
"PROGRAMA ACTIVIDAD 1 UNIDAD 2"
<<
endl
;
gotoxy
(
17
,
3
)
;
cout
<<
"CURSO C++ NIVEL 2"
<<
endl
;
gotoxy
(
17
,
4
)
;
cout
<<
"POWERED BY LUIS ALFONSO JIMENEZ MEJIA"
<<
endl
;
gotoxy
(
17
,
8
)
;
cout
<<
"La fabrica de carton Ciudad de Paris desea obtener"
<<
endl
;
gotoxy
(
17
,
9
)
;
cout
<<
"la informacion de sus n empleados del departamento"
<<
endl
;
gotoxy
(
17
,
10
)
;
cout
<<
"de produccion para poder determinar al empleado mas"
<<
endl
;
gotoxy
(
17
,
11
)
;
cout
<<
"sobresaliente del mes y darle un bono de productividad de $3000,"
<<
endl
;
gotoxy
(
17
,
12
)
;
cout
<<
"Desarrollar un programa en C++ que lea el nombre del empleado y"
<<
endl
;
gotoxy
(
17
,
13
)
;
cout
<<
"las unidades producidas durante el mes y calcular el promedio"
<<
endl
;
gotoxy
(
17
,
14
)
;
cout
<<
"de produccion, total de dias arriba del promedio,"
<<
endl
;
gotoxy
(
17
,
15
)
;
cout
<<
"cantidad producida mas alta y el dia mas productivo."
<<
endl
;
gotoxy
(
17
,
16
)
;
cout
<<
"Mostrar en pantalla el nombre del empleado,"
<<
endl
;
gotoxy
(
17
,
17
)
;
cout
<<
"la produccion por dia, el promedio de produccion,"
<<
endl
;
gotoxy
(
17
,
18
)
;
cout
<<
"el total de días arriba del promedio,"
<<
endl
;
gotoxy
(
17
,
19
)
;
cout
<<
"la cantidad producida mas alta y el dia mas productivo.nn"
<<
endl
;
gotoxy
(
17
,
25
)
;
system
(
"pause"
)
;
}
void
rectangulo
(
)
{
system
(
"cls"
)
;
system
(
"color 75"
)
;
int
height, width, tmp, tmp2
;
height
=
19
;
width
=
14
;
gotoxy
(
2
,
2
)
;
for
(
tmp
=
0
;
tmp
!
=
(
width
+
1
)
;
tmp
++
)
cout
<<
"***"
;
gotoxy
(
0
,
2
)
;
for
(
tmp
=
0
;
tmp
!
=
(
height
)
;
tmp
++
)
{
cout
<<
"nx*a"
;
gotoxy
(
0
,
1
)
;
for
(
tmp2
=
0
;
tmp2
!
=
(
height
+
1
)
;
tmp2
++
)
cout
<<
" "
;
cout
<<
"x*a"
;
}
cout
<<
"n|"
;
for
(
tmp
=
0
;
tmp
!
=
(
width
-
5
)
;
tmp
++
)
cout
<<
"*l*u*"
;
gotoxy
(
15
,
6
)
;
cout
<<
"FABRICA DE CARTON"
<<
endl
;
gotoxy
(
18
,
7
)
;
cout
<<
"CIUDAD PARIS"
<<
endl
;
gotoxy
(
19
,
9
)
;
cout
<<
"Powered by"
<<
endl
;
gotoxy
(
12
,
15
)
;
cout
<<
"LUIS ALFONSO JIMENEZ MEJIA"
<<
endl
;
cout
<<
"nn"
;
gotoxy
(
17
,
26
)
;
system
(
"PAUSE"
)
;
}
Tweet
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: como hacer que este acumulador funcione
«
Respuesta #1 en:
Martes 6 de Julio de 2010, 20:09 »
0
La verdad no se cual sea el resultado a que quieras llegar, pero revisando el codigo, supongo que quieres el promedio de produccion por dia para cada empleado, en ese caso tu error me parece que estaria en la inicializacion a cero de los contadores/acumuladores, ya que no lo estas haciendo dentro del ciclo uno como deberia ser, sino afuera del ciclo uno, entonces cada vez que el ciclo uno regresa a preguntar los datos del siguiente empleado, tus contadores/acumuladores contienen los datos del empleado anterior, dandote entonces un resultado incorrecto.
La solucion entonces seria colocar la inicializacion a cero de esos contadores/acumuladores (no de todos, solo los que se encargan de los datos de cada empleado) dentro del ciclo uno.
Puesto en codigo, seria:
Código: C++
do
{
j
++
;
fgets
(
p
[
j
]
.
nombre
,
100
,
stdin
)
;
p
[
j
]
.
nombre
[
strlen
(
p
[
j
]
.
nombre
)
-
1
]
=
' '
;
fflush
(
stdin
)
;
// Estos son los contadores/acumuladores que deben de inicializarse
// en cada vuelta del ciclo uno para que no te acarreen los datos
// del ciclo anterior
i
=
0
;
n
=
0
;
while
(
i
<
4
)
{
i
++
;
cout
<<
"ningrese las unidades producidas/dias"
<<
endl
;
cin
>>
p
[
j
]
.
up
[
i
]
;
n
=
n
+
p
[
j
]
.
up
[
i
]
;
//este acumulador me ha dado dolores de cabeza
}
system
(
"cls"
)
;
k
=
n
/
4
;
h
=
h
+
n
;
gotoxy
(
17
,
2
)
;
cout
<<
"ESTADISTICAS DEL EMPLEADO: "
<<
p
[
j
]
.
nombre
<<
endl
;
gotoxy
(
17
,
5
)
;
cout
<<
"Producion total mes : "
<<
n
<<
endl
;
gotoxy
(
17
,
6
)
;
cout
<<
"Promedio produccion diaria: "
<<
k
<<
endl
;
}
while
(
j
<
3
)
;
Saludos
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
luchojimenez
Miembro activo
Mensajes: 56
Re: como hacer que este acumulador funcione
«
Respuesta #2 en:
Martes 6 de Julio de 2010, 21:59 »
0
entonces hermano al hacer el cambio que ud me sugiere entonces las variable de entrada de la cadena apartir de la segunda
iteracion no me deja ingresar el nombre
Código: C++
#include<iostream>
#include<conio2.h>
#include<cstdio>
#include<string.h>
using
namespace
std
;
void
ingresar
(
)
;
void
portada
(
)
;
void
rectangulo
(
)
;
int
h
=
0
,j
;
struct
empleado
{
char
nombre
[
100
]
;
int
up
[
30
]
;
}
p
[
3
]
;
int
main
(
)
{
int
l
=
1
;
portada
(
)
;
rectangulo
(
)
;
do
{
l
++
;
ingresar
(
)
;
}
while
(
l
<=
3
)
;
system
(
"cls"
)
;
gotoxy
(
17
,
2
)
;
cout
<<
"ESTADISTICAS GLOBALES"
<<
endl
;
cout
<<
"total producido por todo los empleadosn"
<<
h
<<
"nn"
;
system
(
"pause"
)
;
return
0
;
}
void
ingresar
(
)
{
system
(
"cls"
)
;
int
k,j,n
=
0
,i
;
system
(
"color 70"
)
;
gotoxy
(
15
,
2
)
;
cout
<<
"POWERED BY LUIS ALFONSO JIMENEZ MEJIA"
<<
endl
;
gotoxy
(
5
,
9
)
;
cout
<<
"Ingrese Su Nombre: "
;
for
(
j
=
1
;
j
<
3
;
j
++
)
{
j
++
;
fgets
(
p
[
j
]
.
nombre
,
100
,
stdin
)
;
//entoces no aprece esta variable apartir de la segunda iteracion
p
[
j
]
.
nombre
[
strlen
(
p
[
j
]
.
nombre
)
-
1
]
=
' '
;
fflush
(
stdin
)
;
for
(
i
=
0
;
i
<
3
;
i
++
)
{
cout
<<
"nn Ingrese las unidades producidas/dias"
<<
endl
;
cin
>>
p
[
j
]
.
up
[
i
]
;
n
=
n
+
p
[
j
]
.
up
[
i
]
;
//este acumulador me ha dado dolores de cabeza
}
k
=
n
/
3
;
h
=
h
+
n
;
system
(
"cls"
)
;
gotoxy
(
17
,
2
)
;
cout
<<
"ESTADISTICAS DEL EMPLEADO: "
<<
p
[
j
]
.
nombre
<<
endl
;
gotoxy
(
17
,
5
)
;
cout
<<
"Producion total mes : "
<<
n
<<
endl
;
gotoxy
(
17
,
6
)
;
cout
<<
"Promedio produccion diaria: "
<<
k
<<
endl
;
gotoxy
(
17
,
15
)
;
system
(
"pause"
)
;
}
}
void
portada
(
)
{
system
(
"color 0a"
)
;
gotoxy
(
17
,
2
)
;
cout
<<
"PROGRAMA ACTIVIDAD 1 UNIDAD 2"
<<
endl
;
gotoxy
(
17
,
3
)
;
cout
<<
"CURSO C++ NIVEL 2"
<<
endl
;
gotoxy
(
17
,
4
)
;
cout
<<
"POWERED BY LUIS ALFONSO JIMENEZ MEJIA"
<<
endl
;
gotoxy
(
17
,
8
)
;
cout
<<
"La fabrica de carton Ciudad de Paris desea obtener"
<<
endl
;
gotoxy
(
17
,
9
)
;
cout
<<
"la informacion de sus n empleados del departamento"
<<
endl
;
gotoxy
(
17
,
10
)
;
cout
<<
"de produccion para poder determinar al empleado mas"
<<
endl
;
gotoxy
(
17
,
11
)
;
cout
<<
"sobresaliente del mes y darle un bono de productividad de $3000,"
<<
endl
;
gotoxy
(
17
,
12
)
;
cout
<<
"Desarrollar un programa en C++ que lea el nombre del empleado y"
<<
endl
;
gotoxy
(
17
,
13
)
;
cout
<<
"las unidades producidas durante el mes y calcular el promedio"
<<
endl
;
gotoxy
(
17
,
14
)
;
cout
<<
"de produccion, total de dias arriba del promedio,"
<<
endl
;
gotoxy
(
17
,
15
)
;
cout
<<
"cantidad producida mas alta y el dia mas productivo."
<<
endl
;
gotoxy
(
17
,
16
)
;
cout
<<
"Mostrar en pantalla el nombre del empleado,"
<<
endl
;
gotoxy
(
17
,
17
)
;
cout
<<
"la produccion por dia, el promedio de produccion,"
<<
endl
;
gotoxy
(
17
,
18
)
;
cout
<<
"el total de días arriba del promedio,"
<<
endl
;
gotoxy
(
17
,
19
)
;
cout
<<
"la cantidad producida mas alta y el dia mas productivo.nn"
<<
endl
;
gotoxy
(
17
,
25
)
;
system
(
"pause"
)
;
}
void
rectangulo
(
)
{
system
(
"cls"
)
;
system
(
"color 75"
)
;
int
height, width, tmp, tmp2
;
height
=
19
;
width
=
14
;
gotoxy
(
2
,
2
)
;
for
(
tmp
=
0
;
tmp
!
=
(
width
+
1
)
;
tmp
++
)
cout
<<
"***"
;
gotoxy
(
0
,
2
)
;
for
(
tmp
=
0
;
tmp
!
=
(
height
)
;
tmp
++
)
{
cout
<<
"nx*a"
;
gotoxy
(
0
,
1
)
;
for
(
tmp2
=
0
;
tmp2
!
=
(
height
+
1
)
;
tmp2
++
)
cout
<<
" "
;
cout
<<
"x*a"
;
}
cout
<<
"n|"
;
for
(
tmp
=
0
;
tmp
!
=
(
width
-
5
)
;
tmp
++
)
cout
<<
"*l*u*"
;
gotoxy
(
15
,
6
)
;
cout
<<
"FABRICA DE CARTON"
<<
endl
;
gotoxy
(
18
,
7
)
;
cout
<<
"CIUDAD PARIS"
<<
endl
;
gotoxy
(
19
,
9
)
;
cout
<<
"Powered by"
<<
endl
;
gotoxy
(
12
,
15
)
;
cout
<<
"LUIS ALFONSO JIMENEZ MEJIA"
<<
endl
;
cout
<<
"nn"
;
gotoxy
(
17
,
26
)
;
system
(
"PAUSE"
)
;
}
ProfesorX
Moderador
Mensajes: 796
Nacionalidad:
Re: como hacer que este acumulador funcione
«
Respuesta #3 en:
Miércoles 7 de Julio de 2010, 20:15 »
0
Aclararemos algo, el problema que tienes con la lectura de variables no esta en que ciclo utilizas, ya que lo cambiaste de nuevo de while a for, puedes usar el que quieras (for, while o do..while), el problema en realidad esta en el buffer, que debido al pause que utilizas se "ensucia" y entonces se queda con un caracter guardado, por eso al regresar al inicio del ciclo fgets() lee ese caracter y no te deja capturar el siguiente nombre.
Bueno, a continuacion te dejo te nuevo la funcion ingresar() corregida de algunos errores que volviste a cometer de nuevo con comentarios para que sepas exactamente en que cosa estabas equivocado.
Código: C++
void
ingresar
(
)
{
system
(
"cls"
)
;
int
k,j,n
=
0
,i
;
system
(
"color 70"
)
;
gotoxy
(
15
,
2
)
;
cout
<<
"POWERED BY LUIS ALFONSO JIMENEZ MEJIA"
<<
endl
;
// los vectores comienzan en cero, no en uno
for
(
j
=
0
;
j
<
3
;
j
++
)
{
// Porque incrementas j, si estas usando for para incrementar
//j++;
gotoxy
(
5
,
9
)
;
cout
<<
"Ingrese Su Nombre: "
;
fgets
(
p
[
j
]
.
nombre
,
100
,
stdin
)
;
//entoces no aprece esta variable apartir de la segunda iteracion
// Si estas utilizando C++, recomiendo mejor la funcion getline en lugar
// de fgets para que no revuelvas C con C++, la siguiente linea te muestra
// como usarla
//cin.getline(p[j].nombre, 100);
// De nuevo omites la inicializacion a cero del acumulador, si no lo haces
// arrastrara valores del empleado anterior, dando un promedio incorrecto
n
=
0
;
for
(
i
=
0
;
i
<
3
;
i
++
)
{
cout
<<
"nn Ingrese las unidades producidas/dias"
<<
endl
;
cin
>>
p
[
j
]
.
up
[
i
]
;
n
=
n
+
p
[
j
]
.
up
[
i
]
;
//este acumulador me ha dado dolores de cabeza
}
k
=
n
/
3
;
h
=
h
+
n
;
system
(
"cls"
)
;
gotoxy
(
17
,
2
)
;
cout
<<
"ESTADISTICAS DEL EMPLEADO: "
<<
p
[
j
]
.
nombre
<<
endl
;
gotoxy
(
17
,
5
)
;
cout
<<
"Producion total mes : "
<<
n
<<
endl
;
gotoxy
(
17
,
6
)
;
cout
<<
"Promedio produccion diaria: "
<<
k
<<
endl
;
// Esta linea es el verdadero problema, no el ciclo, ya que deja caracteres
// en el buffer, lo que debes hacer es limpiar buffer despues de utilizarla
gotoxy
(
17
,
15
)
;
system
(
"pause"
)
;
// Limpia el buffer de entrada despues de usar pause
while
(
getchar
(
)
!
=
'n'
)
;
}
}
Saludos
NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
como hacer que este acumulador funcione