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

#721
Solo está el enunciado del tres. ¿qué dicen los otros puntos?
#722
Normalmente los números ocupan el espacio de sus propios dígitos, pero el ejercicio te propone que escribas tres números que, a pesar de ser de dos dígitos cada uno ocupen 5 espacios para caracteres. Esto lo tienes en el manual.
#723
¿Qué tal vas de inglés?
Aquí el manual de la família printf

Trae todas las respuestas a lo que pides.
#724
Hay una librería multiplataforma que te abstrae de la consola, tanto en *nix como en Windows. Se llama ncurses. Pero si es solo para un siatema operativo específico serà más fácil con la API de este pues no hay que enlazar librería externa ni configurar un entorno.

Si nos dices para qué S . O. es te podremos orientar mejor.
#725
Bueno, el enunciado no dice que internamente se deba tratar como un entero. Así que solo debes asegurarte de que todos los caracteres sean números y contarlos.
#726
Ala pues. Aquí va el de la fecha del día siguiente:
void obtener_siguiente_fecha(tFecha *fecha) {
    switch(fecha->mes) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            if(fecha->dia == 31)
                fecha->dia = 0;
            break;
       
        case 4:
        case 6:
        case 9:
        case 11:
            if(fecha->dia == 30)
                fecha->dia = 0;
            break;
           
        case 2:
            if(fecha->dia == 28 + (!(fecha->anyo%4) && fecha->anyo%100) || !(fecha->anyo%400))
                fecha->dia = 0;
            break;
    }
    if(fecha->dia == 0)
        ++fecha->mes;
    if(fecha->mes == 13) {
        fecha->mes = 1;
        ++fecha->anyo;
    }
   
    ++fecha->dia;
}


Evitando que se repita código ;D
#727
De nuevo un error de lógica y parecido al de antes.

Los meses de 30 días están al principio de la función. Cuando los operas pasan a ser meses de 31 días PERO la función no se detiene y llega al código que opera los meses de 31 días. Tu variable ahora es un mes de 31 días y por tanto se le aplica el código de nuevo haciendo que se sume un día.

Tienes 3 formas de solucionar esto:
1. Pones return después de cada operación
2. Haces uso de else if
3. Usas un switch
#728
De ejecución, si no lo tiene: chmod +x Welcome
#729
Error de lógica. Tal como lo tienes tu programa hace lo siguiente:
if(fecha.mes == 4 || fecha.mes == 6 || fecha.mes == 9 || fecha.mes == 11)
{
    if(fecha.dia == 30)
    {
        fecha.dia = 1;
        fecha.mes++;
    }
    else
        fecha.dia++;
}

// ...

if(fecha.dia == 31)
{
    fecha.dia = 1;
    fecha.mes = 1;
    fecha.año++;
}
else
    fecha.dia++;


Cómo puedes ver ese último if de la función se ejecuta y como no es día 31 te sumará un día más.
#730
En el ensamblador el resultado se queda en r0 y cuando regresa el valor seguirá en ese registro. Por tanto en C deberás regresar ese resultado.

Por si no entiendes mucho inglés:
la instrucción mla
mla regreso, multiplicando 1, multiplicando 2, sumando

deja en regreso el resultado de multiplicar multiplicando1 y multiplicando2 y, posteriormente añadir sumando



lsr, en ese contexto, desplazará hacia la derecha el contenido del registro de la instrucción mov tantos bits como se indique.