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

#741
Programación C/C++ / Re: [Duda] Funciones
12 Julio 2013, 03:48 AM
Cita de: eferion en 11 Julio 2013, 08:20 AMLas funciones no tienen operadores de indirección.
Desconozco cual sea el caso en C++ pero en C es posible (y confuso) aplicar (o no, es al gusto) los operadores de indirecion y "dirección de" en el caso de funciones. Por ejemplo este programa:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int (*p)(char const *);
   
   p = puts;
   p("Linea 1");
   (*p)("Linea 2");
   
   p = &puts;
     (*p)("Linea 3");
    (**p)("Linea 4");
   (***p)("Linea 5");
   
   return EXIT_SUCCESS;
}

Es valido.

----

Cita de: Zodiak98 en 11 Julio 2013, 19:26 PMY cual es la diferencia entre hacerlo con paréntesis y sin paréntesis ?
Esto tienes que explicarlo mejor ya que todos los ejemplos hasta el momento involucran llamadas a función y, por ende, paréntesis.

Cita de: Zodiak98 en 11 Julio 2013, 19:26 PMPor lo qué pude ver los qué tienen paréntesis son punteros qué no apuntan hacía ningún otro objeto si no hacía los datos miembros de la clase.
No. Tienes que revisar la expresión por partes. Si tomamos el ejemplo de eferion, la sentencia en cuestión es:
Código (cpp) [Seleccionar]
func()->a = 7;

Los pasos al evaluar la expresión son:

1) La llamada a función "func()" resulta en un puntero de tipo "poo *".

2) Cuando se trabaja con punteros a estructuras o clases se puede utilizar el operador "->" para aplicar indireccion y acceder al campo indicado (a la derecha del operador y en este caso de nombre "a").

3) En el mentado campo (indicado por el paso anterior) se almacena el valor 7.

Un saludo
#742
Cita de: ivancea96 en 12 Julio 2013, 01:06 AMLe quité los getchar() y le puse al final un scanf(). Parece que el getchar daba algun problema
Cierto. La causa del error son las llamadas a getchar:
printf("Introduce el valor de x: ");
getchar();
scanf("%f", &x);


Por ejemplo si se introduce "123.456" getchar lee y descarta el primer carácter (el '1'), scanf procesa los restantes almacenando el valor 23.456 en la variable "x", de ahí los resultados incorrectos.

Un saludo
#743
A ese tipo de funciones se les conoce como "variadic functions". El ejemplo que pones no es valido ya que ellas deben tener por lo menos un parámetro con nombre.

Los argumentos adicionales (representados por "...") se procesan mediante las macros definidas en el encabezado <stdarg.h>, puedes encontrar varios ejemplos utilizando el motor de búsqueda. Por ejemplo Duda stdarg.h en C .

Un saludo
#744
¿C o C++?

En C lo mas cercano a una referencia consiste en declarar el campo como "char (*Matriz)[31];" y llevar nota manualmente del numero de elementos.

En C++ el tipo debe ser "char (&Matriz)[29][31];".

Un saludo
#745
Cita de: daryo en  8 Julio 2013, 18:15 PMmi pregunta es cual es la diferencia entre el uso de malloc , free y demas funciones estandar a el uso de los heap y la api  en windows
Una pagina sobre el tema de administración de memoria en MSDN es About Memory Management.

Un saludo
#746
Cita de: m@o_614 en  8 Julio 2013, 19:35 PMtengo el siguiente problema al pasar una matriz bidimensional como parametro a una funcion, me sale un error que dice: array type has incomplete element type
eferion ya te explico como resolver ese problema.

Otro es utilizar:
scanf("%s", &matriz[i][j]);
Como ya te explique en otro tema "%s" se utiliza para leer una palabra, si necesitas leer un carácter debes utilizar " %c".

También se debe rescribir desde cero la función de ordenacion (ya que tiene varios problemas).

Un saludo
#747
En la sentencia de selección "switch" el control del programa salta a la sentencia después de la etiqueta que coincida, nada mas.

Para que cada caso sea exclusivo se debe colocar una sentencia "break;" al final del bloque para delimitarlo.

Esa sentencia en tu programa se debe cambiar a:
Código (cpp) [Seleccionar]
switch (opcion){
case 1:
   cout << "Ingrese kilogramos\n";
   cin >> kg;
   cout << kg << " kilogramos son " << (float) (kg / 0.45) << " libras\n";
   break;
case 2:
   cout << "Ingrese dolares\n";
   cin >> dl;
   cout << dl << " dolares son " << (float) (dl * 500) << " pesos\n";
   break;
}


Un saludo
#748
Cita de: peterfly en  6 Julio 2013, 13:07 PMnecesito que calcule todas las posibilidades para enlazarlos todos...
ejemplo:
a-b b-c c-d d-d
a-b b-c c-a
etc, etc...

y como el titulo bien lo dice... necesito orientación... que debería hacer para crear este tipo de programa?
Por lo que veo no son permutaciones sino combinaciones donde un elemento x-y debe esta colocado después de uno ?-x y antes de uno y-?. ¿Estoy en lo correcto?

Si publicas toda la información que tengas sobre el programa tal vez alguien pueda ayudarte.

Un saludo
#749
Ello se debe a que pasas una referencia y por ende la función "nueva" afecta a la variable "p1" declarada en la función main. La solución es simple: pasa la variable por valor.

Para ello solo debes cambiar la definición de la función a:
Código (cpp) [Seleccionar]
stack<int>nueva(stack<int> p, int x) ...

Otros cambios que debes realizar al programa son:
* Incluir el encabezado <cstdlib> antes de utilizar la función system.
* Al imprimir el resultado del programa debes utilizar la variable "p2".
* La función "nueva" crea una pila con los elementos menores que el indicado, debes cambiar la comparación "x > p.top()".

Un saludo
#750
El problema se debe a que estas utilizando:
scanf("%s", &matriz[i][j]);
El especificador de formato "%s" es para leer una palabra, como ya te comente para leer un carácter en tu programa debes utilizar " %c".

Un saludo