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

#1391
Programación C/C++ / Re: Ayuda con programa en c
29 Diciembre 2011, 21:25 PM
Cita de: tillizi en 29 Diciembre 2011, 21:07 PMConclusión: PARA PONER DEVOLVER UN 0 MEJOR PONE QUE NO DEVUELVE NADA.
Hay dos argumentos para recomendar que, aun cuando no se utilice, se indique el valor de retorno de esa función.

El primero es que así el compilador no puede quejarse de la definición de "main", si lo hiciera seria un error del compilador (no del programa).

La segunda es mantenerse con las "buenas costumbres", una vez avance en su aprendizaje del lenguaje encontrara la utilidad de retornar un valor (los ejemplos mas conocidos de ello son las aplicaciones utilizadas en scripts).

Un saludo
#1392
Para tener acceso al prototipo de la función "system" se debe incluir el encabezado <stdlib.h> en el caso de C o <cstdlib> en el caso de C++.

Un saludo
#1393
Programación C/C++ / Re: Ayuda con programa en c
29 Diciembre 2011, 21:05 PM
Solo para aclarar el tópico de la definición de la función principal "main":

Al principio del tema se cita otro donde se indica:
Citar2. "main ()", "void main ()", "int main (void)" no son correctos (el último sería aceptable, pero no suele usarse).
3. "int main (int argc, char *argv [])". Es lo más correcto, pero lo que hay entre paréntesis puede suprimirse si no es usado en el programa.
Ello no es completamente correcto, explico porque:

* El estándar de C indica que la definición de la función principal debe ser una de dos formas:

A) Si no se procesan los argumentos pasados mediante la linea de comandos:
int main(void){
   /* ... */
}


B) Si ellos se procesan:
int main(int argc, char *argv[])
{
   /* ... */
}


O alguna equivalente, por ejemplo al utilizar macros (con la directiva "#define ...") o alias (con la palabra reservada "typedef"). También se debe considerar que en una definición los paréntesis vacíos indican "no argumentos" así que "int main() ..." también es valida.

Otras formas de definir la función principal pueden ser validas o no (ese es el problema) ya que dependerán del compilador utilizado (este las puede aceptar como una extensión al lenguaje).

----

En cuanto al valor de retorno de la función principal: cuando una función debe retornar un valor (su tipo de retorno no es "void") si este no se indica el resultado es un valor no definido o "basura".

Ese es el caso con "main" en el estándar C90. En el estándar C99 aplica lo mismo que en C++: si el valor de retorno de la función "main" no se indica este se toma como cero pero (usualmente) se agrega de todos modos (como una "buena costumbre").

Un saludo
#1394
Programación C/C++ / Re: Programacion C for(; ;)
29 Diciembre 2011, 20:28 PM
A un bucle "for" en la forma:
for (; ;)
   cuerpo_del_bucle

se le conoce como bucle sin fin (o endless loop) ya que este no termina en base a su condición (cuando esta se omite es igual a utilizar 1).

Para que el bucle termine se debe utilizar una sentencia "break;" (para terminar el bucle) o bien una sentencia de retorno (para terminar la función).

Un saludo
#1395
Programación C/C++ / Re: matrices
9 Diciembre 2011, 19:28 PM
Por partes.

Cuando se declara un array se puede indicar el valor inicial de sus elementos mediante una lista de valores, estos se colocan entre llaves y separados por comas. Entre el nombre del array y la lista se debe colocar un '=' que en este caso es un separador (no confundir con el operador '=' usado en expresiones). Por ejemplo:
int numero[] = {1, 2, 3};
En este caso es el compilador quien calcula el numero de elementos del array en base al numero de valores en la lista (obvio, son tres).

Si se indica el numero de elementos y esto no coincide con el numero de valores en la lista:
int numero[5] = {1, 2, 3};
Hay dos escenarios: si el numero de valores es menor los elementos restantes (numero[3] y numero[4] en este caso) toman el valor 0 (o 0.0 o NULL, dependiendo del tipo). En otras palabras la ultima declaración es equivalente a:
int numero[5] = {1, 2, 3, 0, 0};

Si el numero de valores es mayor entonces se genera "comportamiento no definido" (es un error).

----

Si se trata de un array donde sus elementos son a su vez arrays aplica lo mismo: se indica el valor de cada elemento mediante una lista donde cada uno es una lista.

En tu caso:
int matriz[2][3] = {
   {1, 2, 3}, /* <== Valores de matriz[0] */
   {4, 5}     /* <== Valores de matriz[1] */
};

El array "matriz" consiste a su vez de dos arrays (matriz[0] y matriz[1]) cada uno de tres elementos de tipo int. El primero tiene sus tres elementos inicializados, el segundo todos menos uno (ese toma el valor cero).

Un saludo
#1396
Es C++ por lo ya comentado (C no permite indicar valores predeterminados para los parametros de una funcion).

Por otra parte la conversion explicita a "char *" en la llamada a printf no es requerida por ninguno de los dos lenguajes.

Un saludo
#1397
Si, con sus detalles.

Cuando un programa termina sin que se genere un error (una terminación normal) los buferes se vacían y se cierran los streams (entre otras cosas). Pero, de nuevo, se consideran "buenas practicas" cerrar los archivos antes de finalizar la aplicación.

Un saludo
#1398
Programación C/C++ / Re: programa sobre colas
8 Diciembre 2011, 17:31 PM
Hay varios errores en ese programa.

El primero en la declaracion:
struct nodocola {
   int dato;
   nodocola *sig; /* <== */
};
typedef struct nodocola nodocola;

El alias "nodocola" todavia no existe, deberia ser "struct nodocola *sig;"

La variable "z" de la funcion principal no se utiliza, hay que eliminarla.

No retornas nada al terminar la funcion "main", al menos deberias retornar cero para indicar una salida normal.

El problema principal se encuentra en la funcion que inicializa la cola, esta es:
void inicializa (cola c)
{
   c.frente = NULL;
   c.fin = NULL;
} // fin inicializa

Esa funcion lo que hace es modificar el parametro "c" y este es una variable local. Para que tenga efecto debes emular el paso por referencia mediante punteros, como en las otras funciones.

No revise lo demas. Corrige eso y nos cuentas.

Un saludo
#1399
Cita de: naderST en  7 Diciembre 2011, 01:03 AMMi pregunta es, por que pasa esto?
Cuando no se indica el valor de retorno de una funcion este es "no definido". Un caso similar es cuando se utiliza una variable local sin darle un valor inicial explicito.

Un saludo
#1400
Programación C/C++ / Re: Duda funcíon potencia
3 Diciembre 2011, 18:21 PM
Aqui voy de metiche ... espero se tome de forma constructiva.

No se requiere de un contador ya que el parametro indicando la potencia puede utilizarse para ese proposito. El acumulador debe empezar en 1 para tener en cuenta la potencia 0 (donde todos resultan en el valor 1).

Por ejemplo:
float potencia(float a, float b)
{
  float rv;
 
  for (rv = 1.0; b > 0; b--)
     rv *= a;
 
   return rv;
}


Pero como ya comentaron mejor utilizar la funcion para ese proposito: pow cuyo prototipo se encuentra en <math.h>.

Un saludo