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 - Don Pollo

#1
De las cosas que pago cada mes, creo que Spotify Premium es lo que menos me cuesta pagar. Ofrecen un servicio realmente útil.

Lo de escuchar música en Youtube lo veo muy cutre. ¿Cuando quieras escucharlo en el móvil por la calle qué haces?
#3
Programación C/C++ / Re: usar control de caracter
16 Noviembre 2012, 11:05 AM
Lo que puedes hacer es leer la edad a un array de caracteres, y después uno a uno haces esta comprobación:

if(edad[0] >= 0 && edad[0] <= 9)

Cuando tengas comprobado que todos son números, lo pasas a int y listo.
#4
Pasar por valor un parámetro quiere decir que lo que realmente le estás pasando a la función es una copia del valor de esa variable, no la variable en sí, por lo que si tú modificas ese valor dentro de la función, fuera de ella no va a tener ningún efecto porque con lo que trabaja esa función es con una copia de la variable original.

Cuando pasas por referencia estás pasando a la función la dirección de memoria de la variable en sí, por lo que si la modificas dentro, seguirá estando modificada a la salida. En este caso no se trabaja con una copia, sino con la variable original.

Realmente, el nombre de un array es un puntero al primer elemento. De esta manera, cuando pasas un array como parámetro de una función, estás pasando un puntero que, aunque sea una copia del original, seguirá apuntando al primer elemento del array, por lo que todo lo que modifiques del array se verá alterado también a la salida.
#5
Así funciona correctamente:

Código (c++) [Seleccionar]
#include <iostream>
#include <cstdlib>
using namespace std;

float funcion(char *argv[]){
   float a,b;
   a=atof(argv[2]);
   b=atof(argv[3]);
   if (*argv[1]=='+'){ return(a+b);}
   if (*argv[1]=='-'){ return(a-b);}
   if (*argv[1]=='x'){ return(a*b);}
   if (*argv[1]=='/'){ return(a/b);}

   return -1;
}

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

   cout << funcion(argv) << endl;
   return 0;
}


Te enumero los errores que he encontrado:

  • Faltaba un paréntesis en la cabecera de la función.
  • No has puesto la función main().
  • No has determinado en la cabecera de la función qué tipo de dato a devolver.
  • No sé porqué, pero el operador '*' no lo reconoce, lo he tenido que cambiar por 'x'.
  • No está mal porque hayas puesto más de un return, es más, lo debes hacer así. (Esto realmente no es un error)
  • No habías considerado el hecho de que no entrase por ningún if, por lo que deberías incluir otro return (en mi caso el que devuelve -1)
  • El argumento argc no lo usas para nada, por lo que lo puedes omitir de la cabecera de la función.
  • Aunque yo tampoco lo haya hecho, deberías incluir en tus códigos lineas de comprobación para verificar que todos los parámetros son correctos y mostrar mensajes de error en caso de que no lo sean.
#6
Programación C/C++ / Re: c/c++ y qt
20 Septiembre 2012, 00:33 AM
Aquí te dejo la API de la versión 4.8 que es la última estable, la 5.0 aún se encuentra en fase alpha: http://qt-project.org/doc/qt-4.8/qtgui.html
#7
Programación C/C++ / Re: Ayuda programita!!!
16 Septiembre 2012, 15:19 PM
Cita de: Aragorn89 en 10 Diciembre 2008, 13:39 PM
joder es muy chungo esto xDDD y encima el profesor dice bueno hacer programas sabes??xDD lo pone en la pizarra no dice nada o casi nada y pretende que lo hagamos como si fuesemos dioses de la programacion xDDD

bueno alguien sabe un manual de punteros o de c(que tenga tambien un apartado de punteros) para tontos??porque sino no lo cojo ni a la de tres macho xDD

No hace falta ser un dios para comprender el código que os ha puesto. Sólo hace falta poner un poco de atención y ganas de aprender.

Aquí tienes un tutorial de punteros (en inglés): http://www.cplusplus.com/doc/tutorial/pointers/
#8
Programación C/C++ / Re: Soy nuevo en c
26 Junio 2012, 12:06 PM
Hace más de un año respondí a un post parecido a este:

Cita de: Don Pollo en 16 Marzo 2011, 01:19 AM
Hay dos formas de declarar vectores o matrices en C/C++. Una de ellas es declararlos de forma estática, tal que así:

[tip] vector[tam];

//[tip] es el tipo de dato que contiene el vector
//tam es el tamaño (el número de "casillas") que va a tener dicho vector


Este tipo de declaración se caracteríza por el hecho de que el vector se crea justo al comienzo de la función que se está ejecutando y tiene un tamaño invariable. En este tipo de declaración no puedes meter más elementos que "casillas" tiene el vector, pero si puedes meter menos, con el consecuente desperdicio de memoria que produce al ser estático y no poder variar su tamaño.
Para las matrices estáticas sería algo parecido, pero con dos tamaños:

[tip] matriz[filas][columnas]
//[filas] es el número de filas que va a tener la matriz. Idem para [columnas]


Para acceder a la "casilla" de un vector estático sólo hay que saber la posición de dicha "casilla", teniendo en cuenta que empieza desde 0. Por ejemplo:

vector[4]=7
//Estamos metiendo en la "casilla" 5 el valor 7.


Por supuesto, cada "casilla" del vector se puede operar con ella como si fuese una variable cualquiera.

En la declaración de vectores y matrices por punteros la cosa cambia. En este tipo de declaración el tamaño si es variable y podremos modificarlo a nuestro antojo.
Un puntero es una variable que apunta a otra variable. Sabiendo esto, para definir un vector por punteros, lo que debemos hacer primero es definir un puntero que inicialmente no apuntará a nada (realmente apuntará a basura) para después hacer que apunte a nuestro vector/matriz.

Primero declaramos el puntero:

[tip] *puntero;
//En caso de ser un vector


Para reservar memoria para el vector al que queremos que apunte nuestro puntero, debemos usar la función "malloc" (si se trata de C) o la función "new" (si se trata de C++).
Si se trata de C haremos lo siguiente:

puntero = ([tip]*)malloc(tam*sizeof([tip])); //Si lo queremos con casting en C
ó
puntero = malloc(tam*sizeof([tip])); //Si lo queremos sin casting en C
puntero = new [tip][tam] //Si se trata de C++


Malloc hace que todas las "casillas" que hemos declarado estén llenas de basura, para ello existe otra función llamada calloc que hace lo mismo que malloc pero inicializa las "casillas" a 0. Para añadir elementos al vector disponemos de la función realloc.
Y con esto ya tenemos definido nuestro vector dinámico en memoria.

El caso de la matriz es más complejo, ya que deberemos crear un puntero doble. Esto es un puntero que apunta a otro puntero. Esto es así, porque deberemos crear un puntero que apunte a un vector de punteros y hacer que cada "casilla" de este vector, apunte a una fila de la matriz. Algo así:



Para ello, debemos definir primero nuestro puntero doble:

[tip] **puntero;

Ahora reservamos tanta memoria para el vector de punteros como filas queremos que tenga la matriz:

*puntero = ([tip]*)malloc(num_filas*sizeof([tip])); // Aquí no tengo muy claro si sería [tip]* o [tip]**

Y por último, deberemos crear un bucle para ir reservándo memoria para cada "casilla" de ese vector:

for(i=0; i<num_filas; i++) puntero[i] = ([tip]*)malloc(num_columnas*sizeof([tip]));

Siempre que quieras añadir o quitar columnas, deberás ejecutar el bucle por seguridad para que al final unas filas no tengan más columnas que otras.
Y así, ya tenemos declarado nuestra matriz, con elementos de tipo [tip], en memoria.

En estos ejemplos últimos sólo he usado la sintaxis de C, si quieres hacerlo para C++, sólo tienes que cambiar la sintaxis por la que te puse en la declaración del primer vector unidimensional (la de "new").

En resumen: Los vectores estáticos se crean en tiempo de compilación y son de tamaño invariable y los dinámicos se crean en tiempo de ejecución y son de tamaño variable.

Ruego que si véis algún fallo me lo digáis para poder corregirlo.

Espero haberte sido de ayuda  ;D

Un saludo!




#9
Programación C/C++ / Re: Aprendiendo C++[?]
24 Junio 2012, 01:11 AM
Yo no recomendaría mucho el ensayo-error. Puede estar bien hasta cierto punto, pero llega un momento en el que debes de saber porqué da ese error el código para poder proseguir con tu aprendizaje sin tener que cambiarlo porque "con esto me da error pues lo cambio por lo otro y ya no me da porque sí".
#10
Cita de: Tzhed\ Kyperf/ en 11 Mayo 2012, 09:11 AM
Tu array solo tiene 5 elementos, sin embargo intentas acceder y asignerle un valor a 250 elementos que no existen en el array. Con gcc versión 4.6.3 20120306 (Red Hat 4.6.3-2) (GCC) da el fallo que tiene que dar de la otra manera...

for (i = 0; i <= sizeof(array)/sizeof(int); i++){

  array[i] = 10;

}






Está hablando de exploits. Ya sabe que debe dar el fallo, lo que pasa es que no se lo muestra.