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

#91
El otro día, mientras aprendía Python, me fijé en foreach y range. Me pregunté si en C se podía tener una expresión parecida.

Y llegué a este ejemplo básico.


#include <stdio.h>

// Desde 1 hasta top. Haz lo que quiereas con el valor en medio ------------------------------
#define foreach(var, top) for(int foreach_var = (top); var = f(foreach_var); foreach_var = 0)

int f(unsigned number) {
    static unsigned top;
    static unsigned actual;

    if(number != 0) {
        top = number;
        actual = 0;
    }

    if(actual == top)
        return 0;

    return ++actual;
}
// -------------------------------------------------------------------------------------------

int main(){
    int x;
   
    /* Nueva funcionalidad */
    foreach(x, 5) {
        printf("%d\n", x);
    }
}


Lo dicho, es básico, pero se podría ir mejorando o hacer otras cosas, por supuesto.
#92
Sí, arrays y el operador módulo %
#93
Recuerda los ifs
#94
Piénsalo de esta forma, de hecho es así como funciona:

Un array es un conjunto de elementos del mismo tipo puestos uno detrás de otro en la memoria.

El identificador de un array, su nombre, te devuelve su posición de memoria de inicio (apunta al primero elemento). Supongamos que hemos llamado a un array mi_array:
Siendo que mi_array tiene una dirección de inicio, supongamos, que es la 100 entonces el primer elemento empieza en 100. Siendo así 100+0 es la dirección del primer elemento o, en notación de arrays, mi_array[0] es la dirección del primer elemento.

Si nos vamos a la siguiente posición de memoria encontraremos el segundo elemento: 100+1 será el segundo elemento, lo que en notación de arrays sería mi_array[1].

Ahora supongamos que el array es de tres elementos. Hasta ahora hemos accedido a los dos primeros. Para acceder al tercer elemento, y siguiendo con el planteamiento anterior, se encontraría en la posición 100+2, o lo que es lo mismo en notación de arrays mi_array[2].

Y es por esto que los arrays empiezan con el índice 0 y terminan con un índice una unidad menos que su número de elementos.
#95
Tan sencillo como:

num = -num;

#96
Qué error te lanza? También es interesante que pongas el error que te marca el compilador.

Pon el código fuente entre etiquetas GeShi. Éstas colorean el código e incluyen el número de línea.

Importante es que, una vez solucionado el problema no borres el post original. El sentido de esto es que sea una herramienta de consulta para todos.
#97
No me digas que lo has querido copiar tal cual dentro del case.
Tips gratuitos:
No hagas case tan extensos. Usa funciones.
El programa ese que dices está dentro de una función main. Cámbiale el nombre y la llamas desde case 2.
Copiar código sin entenderlo nunca fue bueno. Normalmente los que lo hicieron aprobaron, sí, pero ahora trabajan despachando hamburguesas en el McDonald's. En la empresa no vas a engañar al jefe tal como crees que haces al profesor. Al fin y al cabo éste cobra a final de mes tanto si te aprueba como si te suspende.
#98
Y si usas algo así:
x::x(const x & otherX) : iArray{new int[otherX.tam]}, tam{otherX.tam}{
     for (int y = 0; y < tam; ++y){
          iArray[y] = otherX.iArray[y];
     }
}


Ya que otherX.tam te sirve para copiar el tam también lo puedes usar para generar el array.

O

x::x(const x & otherX) : tam{otherX.tam}{
     iArray = new int[tam];
     for (int y = 0; y < tam; ++y){
          iArray[y] = otherX.iArray[y];
     }
}


Aunque, bueno, hablo desde el desconocimiento.
#99
He hecho unas pruebas y Rayr está en lo cierto. Se genera un array de tamaño aleatorio en el heap.

A la hora de copiar tam pero generar el array dentro del cuerpo del constructor.
#100
En C++ las cosas no necesariamente se ejecutan de izquierda a derecha sino que es el compilador quien decide el mejor orden para hacer las cosas.

Busca sobre los sequence points.

Por ejemplo: https://en.wikipedia.org/wiki/Sequence_point