Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - class_OpenGL

#401
¿Tienes código hecho? Porque si no es así, deberías hacer los códigos por ti mismo. De otro modo, nunca aprenderás. Repito, NUNCA aprenderás. La programación consiste en codificar tanto como puedas y más, para así coger hábitos y así puedes crear códigos de mejor calidad.

PD.: En este foro solo se resuelven dudas PUNTUALES, es decir, que no puedes pedir que te resolvamos ejercicios por la cara. ¡No nos pagan por responder, lo hacemos por diversión y porque respondiendo dudas aprendemos! Ten eso en cuenta
#402
Cita de: nonpromiscVIVA EL SOFTWARE LIBRE
El software libre no es lo mismo que el software pirata...

Quitando eso, tu problema no es un error de compilación, sino de enlazado. En las opciones de enlazado (Linker settings) tienes que añadir la librería wininet .lib/.a

No sé como se hace en Dev-C++, pero en Code::Blocks se hace yendo a
Project->Build Options->Linker Settings y puesto que estamos con MinGW, en "Other linker options" tienes que escribir "-lwininet"
#403
Pon tu código entre etiquetas GeSHI para mejorar la visibilidad tu código.

La función stricmp necesita una cadena de caracteres, pero lo que le estás dando es un objeto std::string. Para solucionarlo, tienes que "convertir" ese objeto a cadena de caracteres. Para ello, utiliza el método de la clase std::string llamado .c_str(), que te retorna la cadena de caracteres equivalente a ese std::string:

Código (cpp) [Seleccionar]
stricmp(objeto_string[0].c_str(), objeto_string[1].c_str());
#404
Cita de: ivancea96El compilador no utiliza la dirección para sacar el valor. Lo da directamente. Es otro concepto.

Eso es extraño, pero de acuerdo (supongo que se podría entender mejor si supiera ensamblador :S)

Gracias por tu respuesta :D

PD.:

Cita de: ivancea96De todos modos, const se utiliza si no vas a modificar el valor, tenlo en cuenta.

También es verdad xD Solo tenía curiosidad!
#405
No lo entiendo. Las dos variables apuntan a la misma dirección. ¿Es que la memoria RAM se puede dividir en fragmentos? Gracias
#406
Programación C/C++ / (Consulta) Operador const_cast
30 Noviembre 2015, 08:29 AM
(Aquí cuento un poco como he llegado a mi duda, puedes leer un resumen abajo)

Hola, muy buenas. El caso es que acabo de encontrarme con este operador, el cual me parece un tanto curioso. Bueno, supongo que cada uno, cuando ha visto este operador, se ha hecho la pregunta ¿podré modificar el valor de una constante? Bueno, pues para probarlo, he elaborado el siguiente código:

Código (cpp) [Seleccionar]
#include <iostream>

int main() {
   const int value_a = 5;
   int *value_b = NULL;

   value_b = const_cast<int *>(&value_a);
   *value_b = 6;

   std::cout << "&value_a = " << &value_a << std::endl; // Imprimimos direcciones
   std::cout << " value_b = " << value_b << std::endl;
   std::cout << std::endl;
   std::cout << " value_a = " << value_a << std::endl; // Imprimimos valores
   std::cout << "*value_b = " << *value_b;

   std::cin.get();
   return 0;
}


El resultado que he obtenido, es cuanto menos curioso:
Citar&value_a = 0x9ffe34
value_b = 0x9ffe34

value_a = 5
*value_b = 6

Bueno, analicemos. Las dos variables, efectivamente, tienen la misma dirección (así que el casting parece haberse computado correctamente). La cosa es que para dos mismas direcciones de dos variables, ¡tenemos dos valores diferentes!

La duda, en resumidas cuentas es, ¿cómo es posible que para una misma dirección de memoria haya dos valores diferentes almacenados? ¿o a lo mejor sucede otra cosa?

Gracias :D
#407
Programación C/C++ / Re: problemas en el caso 2
29 Noviembre 2015, 03:57 AM
Por si alguien quiere analizar mejor el código:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>

using namespace std;

#define Pi 3.141592653589

long double U(double x, double t) {
    long double z; int i;
    z=0;
    for (i=1;i<20;i++)
        z = z+2/(Pi*Pi)*1/(i*i)*(4*sin(Pi*i/2)+i*Pi*(1-cos(i*Pi)))*sin(i*Pi*x)*exp(-Pi*Pi*t*i*i);
    return(z);
}

int main() {
    int opc;
    float y,q;

    do {
        system("cls");

        cout<<"menu\n";
        cout<<"1. Metodo Explicito\n";
        cout<<"2. MEtodo Implicito\n";
        cout<<"\t\t elija su opcion:";
        cin>> opc;

        switch(opc) {
            case 1: {
                FILE *f;
                int i,j,N,T,l,c;
                float s1,s2,s3,r,h,k,x,t,error,diferencia;
                float zz;
                float u[11][101];

                system("cls");

                cout<<"Metodo Explicito\n";
                cout<<"\t\t digite un valor para r :";
                cin>>y;

                f=fopen("explicito020.txt","w+");

                r=y;
                h=0.1;
                k=r*h*h;
                N=10;
                T=50;

                fprintf(f,"r=%4.2f,h=%4.2f,k=%6.4f \n ",r,h,k);
                fprintf(f,"i j x t U[xi,yj] U[x,y] diferencia error \n ");
                printf("i j x t U[xi,yj] U[x,y] diferencia error \n ");

                for(l=0;l<=N+1;l++) //valores de U con las condiciones iniciales{
                    x=l*h;

                    if ((x>=0 ) & (x<= 0.5)) {
                        u[l][0]=2*x+1;
                        fprintf(f,"%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n ",l,0,x,0.0,u[l][0],u[l][0],0.0,0.0);
                        printf("%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n",l,0,x,0.0,u[l][0],u[l][0],0.0,0.0);
                    }//fin del if

                    if ((x>0.5 ) & (x<=1)){
                        u[l][0]=3-2*x;
                        fprintf(f,"%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n ",l,0,x,0.0,u[l][0],u[l][0],0.0,0.0);
                        printf("%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n",l,0,x,0.0,u[l][0],u[l][0],0.0,0.0);
                    } //fin del if
                } //fin del for

                fprintf(f,"%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n",l,0,x,0.0,u[l][0],u[l][0],0.0,0.0);
                printf("%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n",l,0,x,0.0,u[l][0],u[l][0],0.0,0.0);

                for(j=0;j<=100;j++) {
                    u[0][j]=0.2;
                    u[10][j]=0.4;
                    t=(j+1)*k;

                    for (i=0;i<N+1;i++) {
                        if ((i==0) || (i==10)) {
                            x=i*h;
                            fprintf(f,"%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n",i,j+1,x,t,u[j],u[j],0.0,0.0);
                            printf("%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n",i,j+1,x,t,u[j],u[j],0.0,0.0);
                        } else {
                            x=i*h;
                            t=(j+1)*k;
                            s1=u[i-1][j];
                            s2=u[j];
                            s3=u[i+1][j];
                            u[j+1]=r*s1+(1-2*r)*s2+r*s3;
                            zz=U(x,t);
                            diferencia=fabs(zz-u[j+1]);
                            error=fabs((u[j+1]-zz)/zz)*100;
                            fprintf(f,"%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n",i,j+1,x,t,u[j+1],zz,diferencia,error);
                            printf("%d %d %5.3f %5.3f %6.4f %6.4f %6.4f %6.4f \n",i,j+1,x,t,u[j+1],zz,diferencia,error);
                        }
                    }
                } // fin del for i}//fin del for j

                fclose(f);
                printf("fin del programa");

                while((c = getchar()) != '\n' && c != EOF);
                putchar(c);

                break;
            }

            case 2: {
                int i,j,c,l,s;
                FILE *f1,*f;
                int N=5;
                float r=q;
                float h=0.1;
                float k=r*h*h;
                float a[20][20],b[20][20],A[20],B[20],x,xx,diferencia,error,t,zzz;

                system("cls");

                cout<<"Metodo Implicito\n";
                cout<<"\t\t digite un valor para r :";
                cin>>q;

                f=fopen("implicito070.txt","w+");

                fprintf(f1,"PARA EL CASO IMPLICITO CRANCK NICHOLSON BVP \n");
                fprintf(f1,"r=%3.2f, h=%3.2f,k=%5.3f \n",r,h,k);
                fprintf(f1," i j x t U[i,j] Uanalitica diferencia error \n");
                printf("PARA EL CASO IMPLICITO CRANCK NICHOLSON BVP r=%3.2f, h=%3.2f\n",r,h);
                printf(" i j x t U[i,j] Uanalitica diferencia error \n");

                for (i=0;i<=2*N+1;i++) {
                    x=i*h;

                    if((x>=0 ) & (x<=0.5)) {
                        a=2*x+1;
                        a[0][j]=0.2;
                        a[10][j]=0.4;
                        t=(j+1)*k;
                        a[10-i][0]=a;
                        zzz=a;
                        diferencia=fabs(zzz-a);
                        error=0;

                        fprintf(f1," %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,0,x,0.0,a
                        ,zzz,diferencia,error);
                        printf(" %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,0,x,0.0,a
                        ,zzz,diferencia,error);
                    } //fin del if

                    if ((x>0.5 ) & (x<1)){
                        a=3-2*x;
                        a[0][j]=0.2;
                        a[10][j]=0.4;
                        t=(j+1)*k;
                        zzz=a[10-i][0];
                        diferencia=fabs(zzz-a);
                        error=diferencia/zzz*100;

                        fprintf(f1," %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,0,x,0.0,a
                        ,zzz,diferencia,error);
                        printf(" %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,0,x,0.0,a
                        ,zzz,diferencia,error);
                    }//fin del if

                    if (x==1){
                        zzz=a[10-i][0];
                        diferencia=fabs(zzz-a);
                        error=0;

                        fprintf(f1," %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,0,x,0.0,a
                        ,zzz,diferencia,error);
                        printf(" %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,0,x,0.0,a
                        ,zzz,diferencia,error);
                    }
                } // fin del for i para llenarlos valores iniciales

                for (j=0; j<20;j++) {
                    for (i=1;i<N+1;i++) {
                        if (i==1) {
                            b=4.0;
                            b[i+1]=-1;
                            //rellena de ceros el lado derecho

                            for (l=i+2;l<N+1;l++) {
                                b[l]=0.0;
                            }

                            b[N+1]= (2-2*r)*a[j]+r*a[i+1][j];
                            printf("\n");
                            fprintf(f,"\n");
                        }

                        if ((i>1) && (i!=N)) {
                            if(i>2) {
                                //rellena de ceros el lado izquierdo
                                for (l=1;l<i-1;l++) {
                                    b[l]=0.0;
                                }
                            }

                            b[i-1]=-1;
                            b=4.0;
                            b[i+1]=-1;

                            for (l=i+2;l<N+1;l++){
                                b[l]=0.0;
                            }

                            b[N+1]= r*a[i-1][j]+(2-2*r)*a[j]+r*a[i+1][j];
                        }//fin del if i>1

                        if (i==N) {
                            for (l=1;l<i-1;l++) {
                                b[l]=0.0;
                            }

                            b[N-1]=-2.0*r;
                            b[N]=(2+2*r);
                            b[N+1]= r*a[i-1][j]+(2-2*r)*a[j]+r*a[i+1][j];
                            //a[i-1][j]+a[i+1][j];
                            printf("\n");
                        }
                    }///fin del for I=1,N

                    printf("\n");
                    //METODO GAUSS SIN PIVOTEO-METOD PROGONKA////
                    //apli-camos progonka directa///
                    A[1]=-b[1][2]/b[1][1];
                    B[1]=b[1][N+1]/b[1][1];

                    for (i=2;i<N+1;i++) {
                        if (i!= N) {
                            A=-b[i+1]/(b+b[i-1]*A[i-1]);
                        }

                        B=(b[N+1]-b[i-1]*B[i-1])/(b+b[i-1]*A[i-1]);
                    }
                    //ahora hallamos las soluciones
                    //printf(ΓÇ¥\nΓÇ¥);
                    xx=B[N];
                    //las soluciones son los elementos del vector a[j] a[N][j+1]=xx;
                    printf( "a[%d][%d]= %6.4f \n",N,j+1,a[N][j+1]);

                    l=N;

                    while (l>0) {
                        s=10-l;
                        xx=A[l]*xx+B[l];
                        a[l][j+1]=xx;

                        a[j+1]=xx;
                        fprintf(f1, "a[%d][%d]= %6.4f \n",l,j+1,a[j+1]);
                        printf( "a[%d][%d]= %6.4f \n",l,j+1,a[l][j+1]);
                        l=l-1;
                    }

                    printf("\n");
                    t=k*(j+1);

                    for (i=0;i<2*N+1;i++) //ahora escribe las soluciones en el archivo de texto{
                        x=i*h;

                        if ((i==0) || (i==2*N)) {
                            printf(" %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,j+1,x,t,0.0,0.0,0.0,0.0);
                            fprintf(f1," %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,j+1,x,t,0.0,0.0,0.0,0.0);
                        } else {
                            zzz=U(x,t);
                            diferencia=fabs(zzz-a[j+1]);
                            error=diferencia/zzz*100;

                            fprintf(f1," %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,j+1,x,t,a[j+1],zzz,diferencia,error);
                            printf(" %d %d %6.4f %6.4f %6.4f %6.4f %6.4f %6.4f \n", i,j+1,x,t,a[j+1],zzz,diferencia,error);
                        }
                    }
                }//fin del j principal fclose(f);

                fclose(f1);

                while((c = getchar()) != '\n' && c != EOF);

                break;
            }
        };
    } while(opc<=2);

    return 0;
}
#408
Programación C/C++ / Re: problemas en el caso 2
29 Noviembre 2015, 03:49 AM
0º Utiliza las etiquetas GeSHI para que tu código sea más legible!

1º Error que he encontrado (en el caso 1): El ciclo for lo cierras, pero no lo abres!!

Código (cpp) [Seleccionar]
for (l=0;l<=N+1;l++) //valores de U con las condiciones iniciales{
   // Codigo del for
}  //fin del for


La llave tienes que ponerla antes de comentar, no después:

Código (cpp) [Seleccionar]
for (l=0;l<=N+1;l++) { //valores de U con las condiciones iniciales
   // Codigo del for
}  //fin del for


2º Error que he encontrado (en el caso 2): Es similar al primer error que te he comentado

No te puedo especificar en que línea es porque no usas las etiquetas GeSHI.

Después de haber corregido estos errores, tienes muchos erres de conversión (fundamentalmente de array bidimensional a flotante)

Además, no existe el archivo <iostream.h> Los archivos nativos de C++ no tienen extensión (sería <iostream>

Para incluir archivos de C, se recomienda usar las versiones de C++ (por ejemplo, para incluir "stdlib.h" incluirías "cstdlib")

No puedo analizar mucho tu código porque está muy enrevesado (las variables no tienen nombres descriptivos, usas "fórmulas" muy largas, sentencias muy largas...)

En resumen: ¡Ten cuidado con las llaves y con la asignación!
#409
De hecho, acabo de ponerlo en práctica para ver si lo entendí, y todo bien. Muy buenas tus respuestas :D
#410
Ahhhh. Creo que ya lo entiendo!!! Muchísimas gracias por tus respuestas :DD