[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