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

#191
La función no debes tocarla pues te sirve para saber si un número es primo o no. Pero sólo eso, sólo indica si un número es primo o no. Una vez que lo sabes debes hacer algo con ese número, no con la función.
#192
En la función primoMayor:
if (esPrimo(n)>mayor)
    mayor=esPrimo(n);

Esto no puede funcionar muy bien ya que esPrimo sólo devuelve 0 o 1.
#193
scanf, cómo muchas de las funciones de la librería, devuelve un valor. En este caso este valor indica cuántas conversiones correctas ha realizado.

Si a la hora de capturar un número no lo ha conseguido (ya porque había letras o has pulsado return sin dar un número) devolverá un 0 (si sólo ibas a capturar un dato).


retorno = scanf("%d", &edad);

if(retorno == 0) {
    puts("El dato introducido no es un entero");
    return -1;
}

printf("Tu edad es de %d\n", edad);
#194
Los carácter es, internamente, son valores enteros. Por ejemplo: el '\n' es un 10 en decimal.
A menos que quieras excluir todas las edades de 10 años deberás encontrar otra forma de hacerlo.

La tabla ASCII te indicará el valor de cada carácter.

Veo que te han enseñado C sin enseñarte cómo funciona la memoria. Una lástima porque C está muy ligado a la memoria.
#195
Los métodos, internamente, no son miembros de las funciones.

En la memoria, código y datos están en segmentos separados, ya de por sí no pueden pertenecer al mismo objeto.

Después está la forma en que C++ nombra a los métodos. Las clases pueden compartir el mismo nombre en sus métodos y los propios métodos con los mismos nombres pero diferente firma hacen cosas diferentes. El compilador, a la hora de generar la tabla de símbolos y saber a qué método referirse, lo que hace es decorarlos. Partiendo de su nombre  le suma a éste datos de la firma e incluso puede añadir el nombre de la base.

Así se puede modificar un poco tu ejemplo anterior para que veas que, a pesar de que se generan tres objetos CNieto, cada uno con su propio espacio, su método Funcion48 son exactamente el mismo, es decir, sólo hay una copia de ellos en memoria. Lo que nos lleva a concluir que no son miembros propiamente dichos de la clase.

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

class CAbuelo
{
public:
virtual void Funcion1() {}
virtual void Funcion2() {}
virtual void Funcion3() {}
// ....
virtual void Funcion20() {}
virtual void Funcion21() {}
};

class CPadre : CAbuelo
{
public:
virtual void Funcion22() {}
virtual void Funcion23() {}
// ....
virtual void Funcion45() {}
virtual void Funcion46() {}
virtual void Funcion47() {}
};

class CNieto : CPadre
{
public:
virtual void Funcion48() {}
virtual void Funcion49() {}
virtual void Funcion50() {}
// ....
virtual void Funcion101() {}
virtual void Funcion102() {}
virtual void Funcion103() {}
};

CNieto objNieto1;
CNieto objNieto2;
CNieto objNieto3;

int main()
{
printf("objNieto1: 0x%p\nobjNieto1.Funcion48(): 0x%p\n",
&objNieto1, &objNieto1.Funcion48);
puts("");
printf("objNieto2: 0x%p\nobjNieto2.Funcion48(): 0x%p\n",
&objNieto2, &objNieto2.Funcion48);
puts("");
printf("objNieto3: 0x%p\nobjNieto3.Funcion48(): 0x%p\n",
&objNieto3, &(objNieto3.Funcion48));
}
#196
Sí, sólo si se cumple la cadena de ifs llegas a return true, en caso contrario acabarás en return false.
#197
Dentro de iguales: Quita las llaves del primer if y la palabra else.
#198
Programación C/C++ / Re: Consulta - Punteros
12 Diciembre 2018, 17:27 PM
El tercer argumento es un puntero a función por el cual le pasarás la función que realmente va a comparar.
Es cómo la función qsort, fíjate en ella.

La idea es: cada función que compara dos elementos por [lo que sea] devuelve:

  • un entero negativo si al_1 es menor a al_2
  • 0 si al_1 es igual a al_2
  • un entero positivo si al_1 es mayor a al_2

La firma de estas funciones auxiliares sería algo así:
int funcion(alumno *al_1, alumno *al_2);
Las funciones reciben punteros para no andar copiando estructuras enteras cada vez, por tanto dentro de la función tendrás que usar notación de punteros para acceder a los miembros.

La firma de tu función principal sería
alumno* Busca_mayor(alumno *base, size_t size, int (*comparar) (alumno *al_1, alumno *al_2))

Dentro de ella tendrás que buscar el mayor de tu array haciendo uso de la función de comparación para ir encontrado el mayor de los elementos comparados.
#199
rodea el código entre etiquetas code, al igual que lo haces con quote. Sino no hay forma de seguir el código ya que el sufijo i es una etiqueta que significa texto en cursiva.
#200
Un array de estructuras.

struct tsignals {
   int sigA;
   int sigB;
   int sigC;
   int sigD;
   int sigE,
} signals[10];

// ...

signals[i].sigA = getSignal();