[C con Clase] tengo problemas con este codigo de este ejercicio, una orientacion estoy un poco perdido

Steven Davidson srd4121 en njit.edu
Vie Jul 23 19:18:48 CEST 2010


Hola Luis Alfonso,

luis alfonso jimenez mejia wrote:
> este ejercitos que me tiene la cabeza  dando vueltas, por favor si 
> alguien puede echarme una mano aqui

Personalmente, estaba seguro de que alguien te respondió, pero creo que 
nadie te ha contestado.

> 
>  #include<iostream>
>  #include<conio2.h>
> #include<cstdio>
> #include<string.h>
>  

Aconsejo usar el nombre estándar: <cstring>

>  using namespace std;
>  void ingresar();
>  void portada();
>  void rectangulo();
>  
>  
>  int j;
>  struct empleado{
>  char nombre[100];
>  int up[30];
>  }p[3];
>  

No es nada aconsejable acostumbrarse a definir variables globales.

>  int main()
>  {
>  int l=1,h;
>  portada();
>  rectangulo();
>  do
>  {
>  l++;
>  
>  ingresar();
>  }while(l<=3);

Esto significa que puedes hacer un ingreso 2 veces, porque 'l' contendrá 
el valor de 2 en la primera iteración, y 3 en la segunda, terminando el 
bucle después de 'ingresar()'.

>  system("cls");
>  gotoxy(17,2);cout<<"ESTADISTICAS GLOBALES"<<endl;
>  
>  cout<<"total producido por todo los empleados\n"<<h<<"\n\n";
>  system("pause");
>  return 0;
>  }
>  
>  void ingresar()
>  {
>  system("cls");
>  int k,j,n,i,h;
>  
>  
>  system("color 70");
>  gotoxy(15,2);cout<<"POWERED BY LUIS ALFONSO JIMENEZ MEJIA"<<endl;
>  gotoxy(5,9);cout<<"Ingrese Su Nombre: ";
>  for(j=0;j<3;j++)
>  {
>  j++;

Esto es un error. En realidad, estás incrementando por 2 y no por 1. La 
variable 'j' toma los valores de 0,1; 2,3; 4, y aquí la condición falla. 
Como usas 'j' como índice al array 'p', estarás intentando acceder el 
elemento de índice 3 el cual no existe. Esto seguramente provocará un 
error en tiempo de ejecución.

>  cin.getline(p[j].nombre,100);
>  p[j].nombre[strlen(p[j].nombre)-1]='\0';
>  system("cls");
>  
>   n=0;h=0;
>  for(i=0;i<3;i++)
>  {
>  cout<<"\n\n   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;
>  

[CORTE]

>  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*";         

No recomiendo usar el operador != cuando se trata de recorrer números 
entre cotas inferior y superior. Para este tipo de problemas, sugiero 
usar el operador < o incluso <=. Por ejemplo,

for( tmp=0; tmp <= width+1; tmp++ )

o incluso,

for( tmp=0; tmp < width; tmp++ )

>       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 << "\n\n";
>        gotoxy(17,26);system("PAUSE");
>       while(getchar() != '\n');

Podrías haber usado 'cin.get()' y así ahorrarte la inclusión de <cstdio>.

>  }
>  


Espero haber aclarado las dudas.

Steven





Más información sobre la lista de distribución Cconclase