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ú

Temas - erest0r

#46
Programación C/C++ / strlen() y .length()
17 Septiembre 2013, 02:58 AM
Buenas noches, estoy claro que la funcion strlen() sirve para leer una cadena de caracteres al estilo C de una variable char, y .length() para saber el tamaño de un string, pero queria saber si existe una funcion en C++ para leer el tamaño de una cadena de caracteres de tipo char y no string. Gracias
#47
GNU/Linux / Duda para elegir version de Linux Ubuntu
11 Septiembre 2013, 09:25 AM
Hola, mi caso es que me gustaria saber cual de estas 2 versiones me recomiendan para usar linux, Ubuntu 12.04 LTS o Ubuntu 13.04, como soy nuevo en esa SO me gustaria leer sus recomendaciones, he leido que la version 12.04 LTS sera soportada hasta 2017 y la version 13.04 sera soportada para 9 meses, es decir, que despues de esos meses ¿quedara sin soporte? no se si lo lei bien porque esta en ingles, gracias.
#48
Programación C/C++ / Duda sobre memoria dinamica C++
11 Septiembre 2013, 06:25 AM
Buenas noches, acabo de notar que cuando creo una memoria dinamica usando new[], no tengo necesidad de usar el encabezado <new>, pero en una pagina de C++ indica que ésta es necesaria para invocar ese metodo: http://www.cplusplus.com/reference/new/  , aqui tienen mi codigo y veran que funciona perfectamente sin la cabecera <new>

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main( int argc, char* args[] )
{
    int *arreglo;
    int cantidad, i, a = 0;
    cout << "Ingrese el tamaño del arreglo: ";
    cin >> cantidad;
    // El metodo nothrow permite que el programa se siga ejecutando incluso si el puntero recibe un parametro invalido
    arreglo = new (nothrow) int [cantidad];
    if( arreglo == 0)
        cout << "Error, no se pudo asignar memoria" << endl;
    else
        for( i = 0; i < cantidad; i++ )
        {
            arreglo[i] = a;
            a++;
            cout << arreglo[i] << endl;
        }
    // El operador delete sirve para liberar la memoria dinamica utilizada
    delete [] arreglo;
    cin.get();
return 0;
}



¿Sera que ya no es necesario usar esa cabecera? Que alguien me explique que diferencia hay entre usarla o no, por favor, gracias.
#49
Buenas noches, he hecho un programa sobre Triples de Pitagoras, ¿Es posible que exista una forma mas optimizada? Dejare mi codigo:

Código (cpp) [Seleccionar]

/*(Triples de Pitágoras) Un triángulo recto puede tener lados cuyas longitudes sean valores enteros. Un conjunto de tres
valores enteros para los lados de un triángulo recto se conoce como triple de Pitágoras. Estos tres lados deben satisfacer la
relación que establece que la suma de los cuadrados de dos lados es igual al cuadrado de la hipotenusa. Encuentre todos los
triples de Pitágoras para lado1, lado2, y la hipotenusa, que no sean mayores de 500. Use un ciclo for triplemente anidado
para probar todas las posibilidades. Este método es un ejemplo de la computación de fuerza bruta. En cursos de ciencias
computacionales más avanzados aprenderá que existen muchos problemas interesantes para los cuales no hay otra metodología
algorítmica conocida, más que el uso de la fuerza bruta. */

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

int main( int argc, char* args[] )
{
   int lado1 = 1, lado2 = 1, hipotenusa = 1;
   double res_pow_lado2, res_pow_hipotenusa;

   cout << "Lado1 al cuadrado ------ Lado2 al cuadrado ------ Hipotenusa al cuadrado" << endl << endl;

   for( ;; hipotenusa++ )
   {
       res_pow_hipotenusa = pow( hipotenusa, 2 );
       for( ;; lado2++ )
       {
           res_pow_lado2 = pow( lado2, 2 );
           for( ;; lado1++ )
           {
               if( pow( lado1, 2 ) + res_pow_lado2 == res_pow_hipotenusa )
               {
                   cout << lado1 << " = " << pow( lado1, 2 ) << setw(20) << lado2 << " = " << res_pow_lado2 << setw(20) << hipotenusa << " = " << res_pow_hipotenusa << endl;
               }
               if( pow( lado1, 2 ) + res_pow_lado2 > 500 )
                   break;
           }
           lado1 = 1;
           if( lado1 + res_pow_lado2 > 500 )
               break;
       }
       lado2 = 1;
       if( res_pow_hipotenusa > 500 )
           break;
   }

   cin.get();
return 0;
}



Gracias.

EDIT: Me gustaria saber si existe una manera de comprobar que ese es el resultado correcto :S, es decir, si no existen mas combinaciones.

EDIT2: Me di cuenta que las variables res_pow... deben ser double.
#50
Buenas noches mi problema es que no encuentro como hacer para que un entero muestre n cantidad de ceros (0) a la izquierda, lo mas que he encontrado es de la cabecera <iomanip>, setfill(); setw(); pero setfill() recibe como parametro un char, y queria saber si existia algo parecido como setprecision(); fixed;  pero para el lado izquierdo de los enteros.

Les dejare mi codigo para que vean mejor a que me refiero


#include <iostream>

using namespace std;

int main( int argc, char* args[] )
{
    int numero, digito[4], temp, i, numerocifrado;
    cout << "Ingrese un numero de 4 digitos: ";
    cin >> numero;

    // Obtenemos cada digito por separado
    digito[0] = numero / 1000;
    digito[1] = ( numero % 1000 ) / 100;
    digito[2] = (( numero % 1000 ) % 100 ) / 10;
    digito[3] = (( numero % 1000 ) % 100 ) % 10;

    // Codificamos cada digito
    digito[0] = ( digito[0] + 7 ) %10;
    digito[1] = ( digito[1] + 7 ) % 10;
    digito[2] = ( digito[2] + 7 ) % 10;
    digito[3] = ( digito[3] + 7 ) % 10;

    // Intercambiamos las posiciones de cada digito

    // El primer digito con el tercero
    temp = digito[0];
    digito[0] = digito[2];
    digito[2] = temp;

    // Y el segundo digito con el cuarto
    temp = digito[1];
    digito[1] = digito[3];
    digito[3] = temp;

    // Pasamos los valores segun la posicion de la variable digito[] a numerocifrado
    numerocifrado = ( digito[0] * 1000 ) + ( digito[1] * 100 ) + ( digito[2] * 10 ) + digito[3];

    // Mostramos el numero cifrado
    cout << "Numero original: " << numero << endl
         << "Numero cifrado:  " << numerocifrado << endl;

   

    cin.get();
return 0;
}



Si introducen el numero 1234, deberia mostrar 0189, pero solo muestra 189, a eso me estoy refiriendo, ¿Como mostrar ese cero a la izquierda faltante?

Muchas gracias.
#51
Buenas tardes, si alguien pudiese explicarme como compilar un programa con varios codigo fuente en codeblocks 12.11 en windows se lo agradeceria, todo lo que encuentro es como hacerlo pero por linux  :-\




He agregado al Path de windows la ruta donde se encuentra el compilador de Codeblocks aunque cuando la intento invocar en la consola CMD me aparece " No se reconoce como un comando interno o externo programa o archivo por lotes ejecutable"

EDIT: Corregido, aun si poder enlazar los diferentes codigo fuentes




Dandole y dandole consegui ya como hacerlo, de todas maneras disculpen por las molestias.
#52
Hola de nuevo, he empezado a usar la libreria SDL por mi cuenta a punta de tutoriales, y tengo un problema en una parte del codigo que no sabria como solucionarlo, aqui va el codigo:


#include "SDL/SDL.h"

int main( int argc, char* args[] ){

    int eleccion = 0, imagen = 0;

    SDL_Surface* screen2 = NULL;
    SDL_Surface* opcion1 = NULL;
    SDL_Surface* opcion2 = NULL;
    SDL_Surface* yoshi2 = NULL;
    SDL_Surface* pikachu2 = NULL;
    SDL_Surface* flecha = NULL;

    SDL_Event tecla;

    SDL_Rect posicion_opcion1;
    SDL_Rect posicion_opcion2;
    SDL_Rect posicion_pikachu2;
    SDL_Rect posicion_yoshi2;
    SDL_Rect posicion_flecha;

    posicion_opcion1.x = 60;
    posicion_opcion1.y = 60;

    posicion_opcion2.x = 60;
    posicion_opcion2.y = 180;

    posicion_flecha.x = 300;
    posicion_flecha.y = 60;

    SDL_Init( SDL_INIT_EVERYTHING );

    opcion1 = SDL_LoadBMP( "opcion1.bmp" );
    opcion2 = SDL_LoadBMP( "opcion2.bmp" );
    flecha = SDL_LoadBMP( "flecha.bmp" );
    yoshi2 = SDL_LoadBMP( "yoshi2.bmp" );
    pikachu2 = SDL_LoadBMP( "pikachu2.bmp" );
    screen2 = SDL_SetVideoMode(600, 660, 32, SDL_SWSURFACE);

    while(true){
        SDL_FillRect(screen2, 0, SDL_MapRGB(screen2->format, 0, 0, 0));
        SDL_BlitSurface(opcion1, NULL, screen2, &posicion_opcion1);
        SDL_BlitSurface(opcion2, NULL, screen2, &posicion_opcion2);
        SDL_BlitSurface(flecha, NULL, screen2, &posicion_flecha);
        SDL_Flip(screen2);
        while(SDL_PollEvent(&tecla)){
            if(tecla.type == SDL_QUIT){
                SDL_FreeSurface(opcion1);
                SDL_FreeSurface(opcion2);
                SDL_FreeSurface(yoshi2);
                SDL_FreeSurface(pikachu2);
                SDL_FreeSurface(flecha);
                exit(0);
            }
            if(tecla.key.keysym.sym == SDLK_ESCAPE){
                    SDL_FreeSurface(opcion1);
                    SDL_FreeSurface(opcion2);
                    SDL_FreeSurface(yoshi2);
                    SDL_FreeSurface(pikachu2);
                    SDL_FreeSurface(flecha);
                    exit(0);
            }
            else if(tecla.key.keysym.sym == SDLK_RETURN ){
                    if(eleccion == 0){
                        imagen = 1;
                        while(imagen == 1){
                            SDL_FillRect(screen2, 0, SDL_MapRGB(screen2->format, 0, 0, 0));
                            SDL_BlitSurface(yoshi2, NULL, screen2, NULL);
                            SDL_Flip(screen2);
                            while(SDL_PollEvent(&tecla)){
                                    if(tecla.key.keysym.sym == SDLK_ESCAPE){

                                        imagen = 0;
                                    }
                            }
                        }

                    }
                    else if( eleccion == 1 ){
                            imagen = 1;
                            while(imagen == 1){
                                SDL_FillRect(screen2, 0, SDL_MapRGB(screen2->format, 0, 0, 0));
                                SDL_BlitSurface(pikachu2, NULL, screen2, NULL);
                                SDL_Flip(screen2);
                                while(SDL_PollEvent(&tecla)){
                                    if(tecla.key.keysym.sym == SDLK_ESCAPE){

                                        imagen = 0;
                                    }
                                }
                            }

                        }
                }
                 else if(tecla.key.keysym.sym == SDLK_DOWN){
                            if(eleccion == 0){
                                posicion_flecha.y += 120;
                                eleccion = 1;
                            }
                      }
                      else if(tecla.key.keysym.sym == SDLK_UP){
                                if(eleccion == 1){
                                    posicion_flecha.y -= 120;
                                    eleccion = 0;
                                }
                           }
        }

    }
    return 0;
}


El punto especifico esta que cuando el usuario selecciona una opcion, perfectamente le muestra la imagen de la eleccion que tomo, y cuando presiona ESCAPE para devolverse, el programa reconoce como si el usuario hubiese presionado la tecla 2 veces y se sale, en vez de regresar al menu principal.

Muchas gracias de antemano.
#53
Hola, mi problema esta que en que mas o menos el 50% de colores que se muestra, mas que todo colores vivos, en mi pantalla si se observa con detenimiento que empiezan a aparecer puntitos negros que aparecen y desaparecen sin un orden especifico, como un efecto granulado, como dije mas que todo en colores vivos se me presenta eso y es incomodo muchas veces.

Mi monitor es marca Soneview LED2401 (si yo se que se preguntaran de donde saque esa marca u.u).

Muchas gracias de antemano.
#54
Programación C/C++ / Problema con cin.getline
23 Agosto 2013, 02:10 AM
Hola de nuevo, mi nuevo problema es con la funcion que nombre en el titulo, y bueno el codigo es este:


#include<iostream>

using namespace std;

int main()
{
    char str1[5], str2[5];
    cout << "Introduce una frase: ";
    cin.getline(str1, 5, '\n');
    cout << "Tu frase es: " << str1;
    cout << endl << "Ingrese otra frase: ";
    cin.getline(str2, 5, '\n');
    cout << endl << "Tu frase es: " << str2 << endl;
    cin.get();
}



Como podran ver, el programa funcionara mal si el usuario introduce una cadena mayor a 4, y queria saber si me podrian ayudar con una solucion a eso.

Gracias
#55
Programación C/C++ / Libreria C++
22 Agosto 2013, 20:30 PM
Hola, disculpen esta pregunta tonta, pero alguno sabe donde puedo conseguir una lista de las librerias que sean propias de C++? Todo lo que encuentro son las estandar ANSI C, yo lo que quiero saber es la lista donde se encuentran por ejemplo la <iostream>, <cstring>, etc. Gracias.
#56
Hola, es mi primer post y mi problema es que haciendo una multiplicacion de matrices no entiendo porque la funcion no envia los datos correcto a la funcion del main, este es mi codigo:

#include <stdio.h>
#include <conio.h>
#define N 2

int agregarValores();
int multiplicarMatriz(int matriz1[N][N], int matriz2[N][N]);

main(){
    int m1[N][N], m2[N][N], m3[N][N], fil, col;

    printf("Matriz 1:\n");
    m1[N][N]=agregarValores();
    printf("\nMatriz 2:\n");
    m2[N][N]=agregarValores();
    m3[N][N]=multiplicarMatriz(m1, m2);
    printf("\nEl resultado de la matriz es:\n\n");
    for(fil=0;fil<N;fil++){
        for(col=0;col<N;col++){
            if(col==0)
                printf("\n");
            printf("%d ", m3[fil][col]);
        }
    }
    getch();
}

int agregarValores(){
   int fil, col, matriz[N][N];
   for(fil=0;fil<N;fil++){
       for(col=0;col<N;col++){
           printf("\nFila %d, Columna %d = ", fil+1, col+1);
           scanf("%d",&matriz[fil][col]);
       }
   }
    return matriz[N][N];
}

int multiplicarMatriz(int matriz1[N][N], int matriz2[N][N]){
    int fil, col, k, acu, matriz3[N][N];
    for(fil=0;fil<N;fil++){
        for(col=0;col<N;col++){
            for(k=0;k<N;k++){
                matriz3[fil][col]+=matriz1[fil][k]*matriz2[k][col];
            }
        }
    }
    return matriz3[N][N];
}


Gracias de antemano