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 - amchacon

#1141
Los programas compilados con las librerías estandares, se crean en formato consola. Los programas consola son estáticos y no permiten ningun trato con el sistema operativo.

Si quieres funciones avanzadas o incluso una interfaz gráfica. Vas a necesitar usar las API del sistema operativo en el que estes, o en su defecto, de alguna librería gráfica (aunque en realidad, lo que hará esa librería es llamar a las API corespondientes).

Si estás en windows, tienes que mirarte las API de Windows. Ojo, no es tan fácil como parece.
#1142
Cita de: capsulasinformaticas en 13 Febrero 2013, 03:46 AM
Me da lata extender mas el tema e irnos por las ramas, pero tengo una duda, ¿Siempre que quiera mostrar un printf sin que finalize con un '\n' seria conveniente usar un fflush(stdout)?
En realidad, el buffer se vacía automáticamente al usar un \n. Por lo que no sería necesario

Cita de: capsulasinformaticas en 13 Febrero 2013, 03:46 AMY otra cosa que no entendi es el uso de while ((ch = getchar()) != EOF && ch != '\n')
         ;
en ese codigo, es decir, probe el codigo sin esa parte y como que el bucle hace un loop infinito y no me puedo ingresar la opcion con scanf("%d", &opcion) si ingreso una opcion invalida, pero no se por que pasa.

Saludos.

Es una forma para limpiar el buffer de teclado (mientras no se llegue al salto de línea o al máximo buffer disponible...).

Por cierto muy elegante el código, me gusta (aunque sigo insistiendo que la llave del while estaría mejor abajo).
#1143
No has buscado mucho:
http://www.taringa.net/comunidades/programadores/2091/Colores-en-C_.html

PD: Dev C está anticuado, te recomiendo que te pases a Codeblocks ;)
#1144
Cita de: leosansan en 12 Febrero 2013, 22:23 PM¿otra forma más "inmediata" de inicializar factores a cero?
En array estáticos se puede usar esto:

Código (cpp) [Seleccionar]
char Variable[256] = {0};
#1145
Os dejo aquí un programa que me creé para calcular determinantes de matrices NxN. Personalmente no me gustan los algoritmos recursivos, pero funcionan de maravilla en este caso :)

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

using namespace std;

void MostrarMatriz(int** Matriz,unsigned int MAX);
void Leer_matriz(int** a,unsigned int MAX);
int CalcularDeterminante(int** Matriz,unsigned int MAX);

int main(int argc, char *argv[])
{
   int Tamanyo;

   while(1)
   {
       cout<<"Indica el tamanyo de la matriz: ";
       cin>>Tamanyo;

       if (Tamanyo < 2)
           Tamanyo = 2;

       cout<<endl<<"Inserta los elementos de la matriz: "<<endl<<endl;

       int** Matriz;
       Matriz = new int*[Tamanyo];

       for (int i = 0; i<Tamanyo; i++)
           Matriz[i] = new int[Tamanyo];

       Leer_matriz(Matriz,Tamanyo);
       cout<<endl<<endl<<endl;
       MostrarMatriz(Matriz,Tamanyo);
       cout<<endl<<endl<<endl;
       cout<<"El determinante es: "<<CalcularDeterminante(Matriz,Tamanyo);
       cout<<endl<<endl<<endl;
       system("PAUSE");
       system("PAUSE");
       system("CLS");
   }
   return EXIT_SUCCESS;
}

int CalcularDeterminante(int** Matriz,unsigned int MAX)
{

   if (MAX == 2)
   {
       return (Matriz[0][0]*Matriz[1][1] - Matriz[0][1]*Matriz[1][0]);
   }
   else
   {
       int Actual = 0;
       int k = 0;
       int Numero = 0;
       short Multriplicador;
       int** Buffer; // Creo una nueva matriz para hacer los adjuntos
       Buffer = new int*[MAX-1];

       for (int i = 0; i<(MAX-1); i++)
           Buffer[i] = new int[MAX-1];

       for (int l = 0; l < MAX; l++) // Desarrollo por filas
       {
           for (int j = 1; j < MAX; j++) // Creo una nueva matriz adjunta
           {
               for (int i = 0; i < MAX; i++)
               {
                   if (i != l)
                   {
                       Buffer[k][j-1] = Matriz[i][j];
                       k++;
                   }
               }
               k = 0;
           }

           if ( l % 2 != 0)
               Multriplicador = -1;
           else
               Multriplicador = 1;
           Numero += (Matriz[l][0]*CalcularDeterminante(Buffer,MAX-1)*Multriplicador);
       }
       return Numero;
   }
}

void MostrarMatriz(int** Matriz,unsigned int MAX)
{
   for (int j = 0; j < MAX; j++)
   {
       cout<<endl<<" (  ";
       for (int i = 0; i < MAX; i++)
           cout<<Matriz[i][j]<<"  ";


       cout<<") ";
   }
}

void Leer_matriz(int** a,unsigned int MAX)
{
   int i,j;

   for (j = 0; j < MAX; j++)
       for (i = 0; i < MAX; i++)
       {
           cout<<"Introduce el numero para la posicion ("<<i<<","<<j<<") "<<endl;
           cin>>a[i][j];
       }
}



Consejos, mejoras ;)
#1146
Para reasignaciones de memoria lo mejor es usar la clase vector:

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

vector<tipo> Variable;


Si quieres hacer un vector de enteros:

Código (cpp) [Seleccionar]
vector<int> Variable;

Y para añadir elementos al vector:

Código (cpp) [Seleccionar]
vector<int> Variable;
Variable.push_back(1); // Añade un elemento nuevo


Luego hay más funciones internas (busqueda, obtener tamaño del vector...). Las puedes consultar aquí:
http://www.cplusplus.com/reference/vector/vector/

No es necesario borrar el vector, puesto que se borra solo cuando termina su ambito. Aunque si eres un esceptico lo puedes hacer explicitamente:

Código (cpp) [Seleccionar]
Variable.clear(); // Limpiamos los valores
Variable.resize(0); // Cambiamos su tamaño a 0
#1147
Programación C/C++ / Re: manejo de archivos txt
12 Febrero 2013, 15:07 PM
Código (cpp) [Seleccionar]
ifstream miarchivo;
miarchivo.open(nombre);

La librería fstream no funciona con strings (de hecho, no se como te ha llegado a compilar).

Tienes que usar la función c_str() para convertir el string a char*
Código (cpp) [Seleccionar]
ifstream miarchivo;
miarchivo.open(nombre.c_str());


Por otro lado:

Código (cpp) [Seleccionar]
if(!miarchivo.good())
{
cout << "Error abriendo archivo";
return "ERROR";
}

No necesitas comprobar el booleano "good" para ver si se abre el fichero, hay una forma en la que escribes menos:

Código (cpp) [Seleccionar]
if(!miarchivo)
{
cout << "Error abriendo archivo";
return "ERROR";
}

Por otro lado, ese código tiene una ambiguedad. Y es que es posible que en algun momento se lea el texto ERROR, lo cual puede llevar a equivocaciones y a problemas.

Una forma de resolverlo sería pasar el string por referencia y devolver verdadero y falso si la función acabo perfectamente:
Código (cpp) [Seleccionar]
bool carga_archivo (string nombre,string &linea)
{
ifstream miarchivo;
miarchivo.open(nombre.c_str());
if(!miarchivo.good())
{
cout << "Error abriendo archivo";
return false;
}

while(!miarchivo.eof())
{
getline(miarchivo, linea);
}
miarchivo.close();

return true;
}
#1148
Cita de: steven2014 en 12 Febrero 2013, 00:39 AMLO Q ME CONFUNDE ES EL COMO GUARDO Y VALIDO LOS 100 LIBROS Y COMO INGRESO LOS NUEVOS...
Mi consejo es que vayas haciendo lo que sepas. ¿Sabes leer un libro por teclado? Pues haz esa parte mientras ;)
#1149
Código (cpp) [Seleccionar]
factores=(int *)calloc(32,sizeof(int));
...
free(factores);


Porque usas funciones de C? Sería más apropiado usar los new y delete:

Código (cpp) [Seleccionar]
factores = new int[32];
...
delete[] factores;
#1150
A mi esa versión me da problemas no se porqué.

Yo me instalo la primera (setup.exe) y después me instalo el Mingw por separado:
http://sourceforge.net/projects/mingw/files/latest/download?source=files

Una vez instalado el Codeblocks le doy a Settings -> Compiler -> Toolchain Executables y en "Compiler´s instalation Directory" pongo la ruta donde tengo instalado el Mingw.