Ayudita en mis deberes de programación


  • 0

    Buenas,

    Pues nada hoy hemos empezado a hacer tonterías en C, el profe nos ha mandado para casa unos cuantos problemas y con este tengo problemas y no se cuales. Lo hago con un programa que se llama emacs.

    A ver se trata de que tu pongas los segundos y lo traduzca a "h:m:s" os dejo el código para que veáis. cuando lo compilo ningún problema pero al ejecutarlo se cuelga el cmd.

    
    #include <entsort.h>
    
    int main(void) { 
    
     int h,n,m,s;
    
     LlegirEnter(&n);
      h = n / 3600;
      n = n % 3600;
      m = n / 60;
      s = n % 60;
      EscriureEnter(h);
      EscriureCaracter(':');
      EscriureEnter(m);
      EscriureCaracter(':');
      EscriureEnter(s);
    
        return 0;
    }</entsort.h>
    

    Os dejo el .exe (tranquilos que no es virus)

    http://files-upload.com/files/534520/hores.exe

    A ver si me echáis un cable.

    He hecho un par más y siempre pasa lo mismo, voy a cmd, lo ejecuto y el "cursor" de cmd se mueve aleatoria mente por al ventana de cmd; están bien escritos porque no me da errores al compilarlos pero no puedo ejecutarlos alguna idea?



  • 1

    Lo primero que veo es que esas instrucciones "llegirenter" y "escriure" no existen como tales en C, o bien pertenecen al paquete entsort.h (que no se para que lo usais…) o bien has puesto el pseudocódigo.

    Obviedades aparte creo que ese programa nunca te va a funcionar, lo único que haces es dividir pero ¿qué pasa con lo que te sobra? ¿no lo tienes en cuenta? Bueno luego te lo miro con mas tiempo... si se pasa Istarion por aquí te lo resuelve en un periquete.



  • 2

    @Forenaits:

    Lo primero que veo es que esas instrucciones "llegirenter" y "escriure" no existen como tales en C, o bien pertenecen al paquete entsort.h (que no se para que lo usais…) o bien has puesto el pseudocódigo.

    Obviedades aparte creo que ese programa nunca te va a funcionar, lo único que haces es dividir pero ¿qué pasa con lo que te sobra? ¿no lo tienes en cuenta? Bueno luego te lo miro con mas tiempo... si se pasa Istarion por aquí te lo resuelve en un periquete.

    A ver, lo de llegirenter y todo eso sí es normal y nos lo han enseñado así, el programa lo capta bien y ya he hecho bastantes en la uni.

    Sobre lo del resto pues lo he solucionado con; a ver las horas serán n/3600, luego una variable de paso es la n que calcula el sobrante de la división anterior (el % es igual que el mod y que resto de una división) luego los minutos son el resto (n) partido por sesenta y luego los segundos el resto de la división anterior. Si lo hice en la uni igual y me salió bien hoy.

    Edit; es el ejercicio 1 de aquí; http://truja.lsi.upc.edu/fi/material%20/Laboratori/Exercicis%20Laboratori/cap1.pdf
    Y aquí lcomo traducir; http://truja.lsi.upc.edu/fi/material%20/Laboratori/apunts_lab/cap2.pdf

    Ya dije que no tengo ni idea por lo que alomejor es un fallo tonto.



  • 3

    El entsort.h ese ¿para que es? ¿para programar en catalán? Me parece muy raro…

    Si pones el código fuente en C de verdad quizás te pueda ayudar, porque no entiendo muy bien algunas cosas que has puesto.

    PD: Eso que os enseñan sirve como iniciación a la programación, pero no es C (lo es pero de esa forma nunca vas a saber cómo se programa en C).



  • 4

    @cobito:

    El entsort.h ese ¿para que es? ¿para programar en catalán? Me parece muy raro…

    Si pones el código fuente en C de verdad quizás te pueda ayudar, porque no entiendo muy bien algunas cosas que has puesto.

    PD: Eso que os enseñan sirve como iniciación a la programación, pero no es C (lo es pero de esa forma nunca vas a saber cómo se programa en C).

    Según la teoria que nos dan –> #include <entsort.h>Cal afegir-lo sempre que en el programa s'usin operacions de llegir o escriure. (hace falta añadirlo cuando en el programa se usen ooperaciones de leer o escribir)

    Pues vaya mierda nos enseñan con el culo. Encima hacemos una clase y para el martes que viene (entremedio no tengo ninguna otra clase de eso) pues un examen, ya ves que gracia.</entsort.h>



  • 5

    ¿stdio.h pero con inmersión lingüística? No se, me parecen unas funciones un poco extrañas para captar del teclado y mostrar en pantalla. ¿Seguro que lo que estáis dando es C?

    El programa debería ser una cosa como así (que conste que llevo sin programar en C como que 9 años, si hay fallos que alguien los corrija)

    #include<stdio.h>

    int main(void) {

    int h,n,m,s;

    scanf("%d", n);
    h = n / 3600;
    n = n % 3600;
    m = n / 60;
    s = n % 60;
    printf("%d:%d:%d",h,m,s);

    return 0;
    }</stdio.h>



  • 6

    Bueno, ignorando esas operaciones de lectura y escritura creo que el algoritmo que has usado está bien (tampoco estoy 100% seguro porque hace 2 años que no miro nada de C). Me he bajado tu archivo compilado y lo único que hace es salir un cursor moviéndose de un sitio a otro, pero ni pide el nº de segundos ni nada, así que el algoritmo, esté bien o no, no es el responsable del mal funcionamiento. ¿Has probado poniendo #include <stdio.h>al principio?</stdio.h>



  • 7

    El codigo esta bien. Ese include es como el paquete de "paraules" de Ada que usamos aqui, solo que NOS EXPLICAN como hacer todo lo que hay ahi xD Es una leve diferencia, pero bastante importante.
    Debe tratarse de una libreria de lectura y escritura en pantalla, y si que es c, de hecho "stdio.h" solo es una libreria de c, no tienes porque usarla y estaras programando en c igualmente :p

    Debe de haber algun problema con las librerias de tu profe, quizas no tienes las ultimas, hay que hacer un volcado del buffer de teclado… no lo se muy bien, necesitaria el codigo de la libreria para saber exactamente lo que estas haciendo...
    Es que claro sin ella no se puede hacer nada... el parametro que le pasas esta bien? Para mi que el "c" que os enseñan poco tiene de "ANSI C", porque eso huele a sobrecarga de parametros segun el tipo que le pases, y eso esta en C++ y no en c...

    En fin, ya te digo que sin la libreria no se puede saber nada...

    P.D.: Ese "entsort" se refiere a Entrada/Sortida, al estilo de I/O. Lo bueno es que os abstraen de hacer lecturas vosotros, y la idea parece buena. Pero no me convence si no os han enseñado a usar la "stdio". Tienen que enseñaros como encapsulan las llamadas a la libreria estandar "stdio" con esa libreria, porque es estandar y si no teneis "entsort" tendreis que buscar informacion sobre la stdio (que es facil de usar, pero vamos, primero se enseñan las bases, y luego se abstrae de ellas, que si un dia te quedas sin esa "capa de abstraccion", caca...).



  • 8

    Ahora que veo que mi vecina no dice nada mas, ya tengo algo mas de tiempo:

    @cobito:

    Si pones el código fuente en C de verdad quizás te pueda ayudar, porque no entiendo muy bien algunas cosas que has puesto.
    PD: Eso que os enseñan sirve como iniciación a la programación, pero no es C (lo es pero de esa forma nunca vas a saber cómo se programa en C).

    Es c, pero ya te digo que no me convence si empiezan asi…

    @cram:

    Según la teoria que nos dan –> #include <entsort.h>Cal afegir-lo sempre que en el programa s'usin operacions de llegir o escriure. (hace falta añadirlo cuando en el programa se usen ooperaciones de leer o escribir)

    Pues vaya mierda nos enseñan con el culo. Encima hacemos una clase y para el martes que viene (entremedio no tengo ninguna otra clase de eso) pues un examen, ya ves que gracia.</entsort.h>

    Vaya panda de … bueno, a ver, no te preocupes. Lo hacen para que no tengais que "pelearos" con la "stdio", que es facil de co*ones usarla, pero bueno asi seguro que los alumnos no se equivocan y es bastante "comoda" de usar la entsort (al menos lo parece).

    Pero que sepas que para utilizar operaciones de lectura/escritura de cualquier tipo (lectura del teclado, escritura por pantalla, o impresora, etc.) basta con utilizar la "stdio.h", STanDard Input/Output, una libreria estandar de c que viene con todos los compiladores. Esa "entsort.h" si vienes a mi casa a programar en c, no te funcionara :p pa que veas lo poco "portable" que es un programa usando librerias externas. Si me las pasas ya esta, pero si usas algo estandar, te evitas el ajetreo de pasar librerias...

    @kynes:

    El programa debería ser una cosa como así (que conste que llevo sin programar en C como que 9 años, si hay fallos que alguien los corrija)

    Esta casi bien. Al principio pense que el %d era para doubles, pero no, es para decimales con signo (es que ya no toco ni printf ni scanf xD). Lo que pasa es que el scanf espera como segundo parametro una indireccion, o de lo contrario le estaras pasando la direccion de la variable:

    scanf("%d", n); => scanf("%d",&n);

    El resto esta ok ;D

    @cobito:

    Bueno, ignorando esas operaciones de lectura y escritura creo que el algoritmo que has usado está bien (tampoco estoy 100% seguro porque hace 2 años que no miro nada de C). Me he bajado tu archivo compilado y lo único que hace es salir un cursor moviéndose de un sitio a otro, pero ni pide el nº de segundos ni nada, así que el algoritmo, esté bien o no, no es el responsable del mal funcionamiento. ¿Has probado poniendo #include <stdio.h>al principio?</stdio.h>

    No necesita la libreria stdio, fijate que no usa ninguna de sus funciones, y es codigo en c, lo que pasa es que usa funciones de otra libreria ;)

    Si tienes a Fore en el msn, dile que te pase mi dir, y asi lo acabamos en un periquete como bien ha dicho :p



  • 9

    Gracias Istarion,

    lo de entsort.h lo he sacado de aquí: http://www.lsi.upc.edu/%7Efi/Software/ENTSORT.h

    es esto:

    /*

    • entsort.h
    • Operacions d'entrada/sortida
      */

    #ifndef ENTSORT_H
    #define ENTSORT_H

    void
    LlegirCaracter(char *const c);
    void
    LlegirEnter(int *const i);
    void
    LlegirReal(float *const f);

    void
    EscriureCaracter(char c);
    void
    EscriureEnter(int i);
    void
    EscriureReal(float f);

    void
    EscriureMissatge(char c[]);

    #endif

    y no se si esto es algo importante o no pero leas he tenido que poner en el programa. http://www.lsi.upc.edu/%7Efi/Software/libes.a

    Aquí los programas que uso http://truja.lsi.upc.edu/fi/material%20/Laboratori/Intruccions%20per%20a%20la%20installacio%20de%20emacs%20i%20gcc

    Sobre lo de usar los estandard pues no me convence porqué después en el examen lo hemos de hacer con lo de entsort.h y si no lo practico no me voy a enterar.



  • 10

    Para las I/O me explicaron que era #include<iostream.h>

    Que diferencia hay con las demas?</iostream.h>



  • 11

    iostream es el equivalente de stdio pero en C++ en vez de en C, si no me equivoco.



  • 12

    Al fin me puedo volver a conectar a hardlimit, se ve que hay algun cachondo en telefonica que le pega por caparme el acceso a esta pagina cuando le apetece O_o

    @cram:

    Gracias Istarion,
    lo de entsort.h lo he sacado de aquí:

    Sobre lo de usar los estandard pues no me convence porqué después en el examen lo hemos de hacer con lo de entsort.h y si no lo practico no me voy a enterar.

    Ok, no me funcionan algunos enlaces porque no estoy logueado, pero me lo imagino. Ese .h es la "cabecera" de la libreria. Ahi te dicen qué funciones estan implementadas en el archivo .a (que viene a ser una especie de .dll pero estatica, uhm bueno tu creetelo :p).
    Las .dll tambien vienen con un archivo .h (siempre que te dejen programar con ellas), ves las funciones que puedes utilizar, y tu usas las que quieras. En los mods de juegos, te dejan utilizar algunas funciones de las .dll del juego, solo que algo "capadas" para que no puedas hacer un juego completo.

    Entiendo que no te convenza lo de usar estandares, no queria decir eso. Simplemente es mas correcto, pero como que a ti te van a examinar de otra cosa, puedes pasar de la stdio y demas. Tu conectate al msn y hablamos, asi me pasas la libreria y demas, y puedo hacer pruebas mas rapidamente.

    Por cierto me equivoque, no usa sobrecarga de C++, al menos parece que usa ANSI C para hacer la libreria entsort…

    @kynes:

    iostream es el equivalente de stdio pero en C++ en vez de en C, si no me equivoco.

    Exacto, solo que es sin .h (#include <iostream>). Basicamente es lo mismo pero se utilizan objetos, y no "funciones sueltas" como en ANSI C.</iostream>



  • 13

    El algoritmo está bien. ¿Porqué no haces una prueba simple con este código …?

    #include<entsort.h>

    int main(void) {
    int n;

    LlegirEnter(&n);
    EscriureEnter(n);
    return 0;
    }

    Si te da el mismo error es que es un problema de la librería entsort.</entsort.h>



  • 14

    Y para asegurarte definitivamente (veo que no te conectas al msn :p) prueba a poner "printfs" por todo. Vale que no es la libreria que te piden en el examen pero es muy facil de utilizar y funciona siempre:

    Primero incluye la libreria que contiene la funcion:

    #include<stdio.h>

    int main(…) {

    printf("Llego al 1");
    funcion_que_crees_que_tiene_papeletas_de_que_vaya_a_petar();
    printf("Llego al 2");

    }

    Ya te digo que eso rula ok, y asi localizas la funcion que te esta haciendo extraños. Tambien puede ser que tengas otra version de la libreria y por eso pete, pero es raro porque si peta un programa tan sencillo mal rollo...</stdio.h>



  • 15

    Debug casero powah! xD



  • 16

    @Istarion:

    Y para asegurarte definitivamente (veo que no te conectas al msn :p) prueba a poner "printfs" por todo. Vale que no es la libreria que te piden en el examen pero es muy facil de utilizar y funciona siempre:

    Primero incluye la libreria que contiene la funcion:

    #include<stdio.h>

    int main(…) {

    printf("Llego al 1");
    funcion_que_crees_que_tiene_papeletas_de_que_vaya_a_petar();
    printf("Llego al 2");

    }

    Ya te digo que eso rula ok, y asi localizas la funcion que te esta haciendo extraños. Tambien puede ser que tengas otra version de la libreria y por eso pete, pero es raro porque si peta un programa tan sencillo mal rollo...</stdio.h>

    Vale, gracias por todo pero sí me va ya, era una parida, al compilar no lo hacia bien y por eso el exe no estaba bien, todo solucionado.

    He hecho unos cuantos y todos ok; uno que calcula la letra del dni, otro que suma, otro que resta, division de enteros, soluciones de una eq de 2º grado, y cero problemas.

    Merxi pro todo!!!!

    por cierto he puesto mi msn bien que ese era el que tenia hace mucho, ara es ************





Has perdido la conexión. Reconectando a Hardlimit.