any good

Discussion in 'C Programming' started by Darklight, Aug 21, 2004.

  1. Darklight

    Darklight Guest

    posted by ash4640 These question posted 15/8/04
    How do I write these programs in c I am a beginner learning c.
    1.
    write a program to read 2 inetegers with the following signficance the
    first integer value represents a time of day on a 24hour clock, so that
    1245 represents quater to one mid-day for eg. The second integer
    represents a time duration in a similar way, so that 345 represents
    three hours & 45 minutes. This duration is to be added to the first
    time, and the result printed out in the same notation, in this case
    1630 which is the time 3hours and 45 minutes after 1245.
    Typical output might be start time is 1415. Duration is 50 End time is
    1505.

    Here is my answer to the above question i would like to know if it
    is any good or crap constructive critisms accepted
    I am just a novice who plays around with c

    /* TIME2.C TO ADD TWO 24 HOUR INPUTS */
    #include<stdio.h>
    #define MAX 100
    #define MINS 60
    #define HOUR 24

    int main(void)
    {
    int time24,mins,hour24,hourout;
    int hourtotal,hour,minstotal;
    char line[20];
    int time[7]; /* ARRAY TO HOLD DIFFERENT VALUES */

    /* SEPERATE HOURS FROM MINUTES */
    do{
    printf("Enter 24 hour start time: ");
    fgets(line,sizeof(line),stdin);
    sscanf(line,"%d",&time24);

    mins = time24 % MAX;
    hour24 = time24 - mins;
    hourout = hour24 / MAX;
    time[0] = hourout; /* hours start */
    time[1] = mins; /* minutes start */
    }while(time[0] >= HOUR || time[1] >= MINS);

    do{
    printf("Enter duration: ");
    fgets(line,sizeof(line),stdin);
    sscanf(line,"%d",&time24);

    mins = time24 % MAX;
    hour24 = time24 - mins;
    hourout = hour24 / MAX;
    time[2] = hourout; /* hours end */
    time[3] = mins; /* minutes end */
    }while(time[2] >= HOUR || time[3] >= MINS);

    /* ADD START AND END MINUTES */
    hourtotal = time[1] + time[3];
    if(hourtotal >= MINS)
    {
    hour = 1;
    minstotal = hourtotal - MINS;
    }
    else
    {
    hour = 0;
    minstotal = hourtotal;
    }

    /* CALCULATE AND DISPLAY 24 HOUR TIME */
    time[5] = hour;
    time[6] = (time[0] + time[2] + time[5]) * MAX ;
    if(time[6] > (HOUR * MAX))
    {
    time[7] = (time[6] - (HOUR * MAX)) + minstotal;
    printf("1 Day 24 hour time output = %d\n",time[7]);
    }
    else
    {
    time[7] = time[6] + minstotal;
    printf("24 hour Time output = %d \n",time[7]);
    }
    return 0;
    }
    Darklight, Aug 21, 2004
    #1
    1. Advertising

  2. On Sat, 21 Aug 2004 13:06:35 +0000 (UTC), Darklight
    <> wrote:

    >posted by ash4640 These question posted 15/8/04
    >How do I write these programs in c I am a beginner learning c.
    >1.
    >write a program to read 2 inetegers with the following signficance the
    >first integer value represents a time of day on a 24hour clock, so that
    >1245 represents quater to one mid-day for eg. The second integer
    >represents a time duration in a similar way, so that 345 represents
    >three hours & 45 minutes. This duration is to be added to the first
    >time, and the result printed out in the same notation, in this case
    >1630 which is the time 3hours and 45 minutes after 1245.
    >Typical output might be start time is 1415. Duration is 50 End time is
    >1505.
    >
    >Here is my answer to the above question i would like to know if it
    >is any good or crap constructive critisms accepted
    >I am just a novice who plays around with c
    >
    >/* TIME2.C TO ADD TWO 24 HOUR INPUTS */
    >#include<stdio.h>
    >#define MAX 100
    >#define MINS 60
    >#define HOUR 24
    >
    >int main(void)
    >{
    > int time24,mins,hour24,hourout;


    A little white space between names would not hurt. In a larger
    program, it would be better to put each in its own statement.

    > int hourtotal,hour,minstotal;
    > char line[20];
    > int time[7]; /* ARRAY TO HOLD DIFFERENT VALUES */
    >
    > /* SEPERATE HOURS FROM MINUTES */
    > do{
    > printf("Enter 24 hour start time: ");
    > fgets(line,sizeof(line),stdin);
    > sscanf(line,"%d",&time24);
    >
    > mins = time24 % MAX;
    > hour24 = time24 - mins;
    > hourout = hour24 / MAX;


    The way integer arithmetic truncates you could combine these two
    statements into hourout = time24/MAX.

    If time24 is 1245:
    In your code, hour24 becomes 1200 and hourout is 12.
    In my code, hourout becomes 12 directly.

    > time[0] = hourout; /* hours start */
    > time[1] = mins; /* minutes start */
    > }while(time[0] >= HOUR || time[1] >= MINS);


    This will repeat the loop if the user enters an invalid time but it
    doesn't tell him what he did wrong. For example, some people use 2400
    to indicate midnight and would have no idea why you don't accept it.

    >
    > do{
    > printf("Enter duration: ");
    > fgets(line,sizeof(line),stdin);
    > sscanf(line,"%d",&time24);
    >
    > mins = time24 % MAX;
    > hour24 = time24 - mins;
    > hourout = hour24 / MAX;
    > time[2] = hourout; /* hours end */
    > time[3] = mins; /* minutes end */
    > }while(time[2] >= HOUR || time[3] >= MINS);
    >
    > /* ADD START AND END MINUTES */
    > hourtotal = time[1] + time[3];


    hourtotal is a strange name for a calculation involving minutes.

    > if(hourtotal >= MINS)
    > {
    > hour = 1;
    > minstotal = hourtotal - MINS;
    > }
    > else
    > {
    > hour = 0;
    > minstotal = hourtotal;
    > }
    >
    > /* CALCULATE AND DISPLAY 24 HOUR TIME */
    > time[5] = hour;
    > time[6] = (time[0] + time[2] + time[5]) * MAX ;
    > if(time[6] > (HOUR * MAX))


    As a matter of style, indent the range of an if (which you do) but
    don't indent the if itself. When you start writing larger programs,
    this will make life much easier.
    > {
    > time[7] = (time[6] - (HOUR * MAX)) + minstotal;
    > printf("1 Day 24 hour time output = %d\n",time[7]);
    > }
    > else
    > {
    > time[7] = time[6] + minstotal;
    > printf("24 hour Time output = %d \n",time[7]);
    > }
    > return 0;
    >}




    <<Remove the del for email>>
    Barry Schwarz, Aug 21, 2004
    #2
    1. Advertising

  3. Darklight

    Darklight Guest

    Barry Schwarz wrote:>>
    >> mins = time24 % MAX;
    >> hour24 = time24 - mins;
    >> hourout = hour24 / MAX;

    >
    > The way integer arithmetic truncates you could combine these two
    > statements into hourout = time24/MAX.
    >
    > If time24 is 1245:
    > In your code, hour24 becomes 1200 and hourout is 12.
    > In my code, hourout becomes 12 directly.


    Thanks for that
    >
    >> time[0] = hourout; /* hours start */
    >> time[1] = mins; /* minutes start */
    >> }while(time[0] >= HOUR || time[1] >= MINS);

    >
    > This will repeat the loop if the user enters an invalid time but it
    > doesn't tell him what he did wrong. For example, some people use 2400
    > to indicate midnight and would have no idea why you don't accept it.
    >

    To print error message i have inserted a function here
    and changed hourout to hours:

    time[0] = hours; /* hours start */
    time[1] = mins; /* minutes start */
    ErrorPrint(hours,mins);
    >> }while(time[0] >= HOUR || time[1] >= MINS);


    The function is:
    int ErrorPrint(int hour, int min)
    {
    if(hour >= HOUR || min >= MINS)
    printf("Error incorrect value: Enter value less than 2400\n");
    return(hour,min);
    }
    Darklight, Aug 21, 2004
    #3
  4. On Sat, 21 Aug 2004 18:48:10 +0000 (UTC), Darklight
    <> wrote:

    >Barry Schwarz wrote:>>
    >>> mins = time24 % MAX;
    >>> hour24 = time24 - mins;
    >>> hourout = hour24 / MAX;

    >>
    >> The way integer arithmetic truncates you could combine these two
    >> statements into hourout = time24/MAX.
    >>
    >> If time24 is 1245:
    >> In your code, hour24 becomes 1200 and hourout is 12.
    >> In my code, hourout becomes 12 directly.

    >
    >Thanks for that
    >>
    >>> time[0] = hourout; /* hours start */
    >>> time[1] = mins; /* minutes start */
    >>> }while(time[0] >= HOUR || time[1] >= MINS);

    >>
    >> This will repeat the loop if the user enters an invalid time but it
    >> doesn't tell him what he did wrong. For example, some people use 2400
    >> to indicate midnight and would have no idea why you don't accept it.
    >>

    >To print error message i have inserted a function here
    >and changed hourout to hours:
    >
    > time[0] = hours; /* hours start */
    > time[1] = mins; /* minutes start */
    > ErrorPrint(hours,mins);
    >>> }while(time[0] >= HOUR || time[1] >= MINS);

    >
    >The function is:
    >int ErrorPrint(int hour, int min)
    >{
    > if(hour >= HOUR || min >= MINS)
    > printf("Error incorrect value: Enter value less than 2400\n");
    > return(hour,min);


    What do you thing this does? Rest assured it doesn't.

    >}




    <<Remove the del for email>>
    Barry Schwarz, Aug 22, 2004
    #4
  5. Darklight

    Darklight Guest

    Barry Schwarz wrote:>>>> }while(time[0] >= HOUR || time[1] >= MINS);
    >>
    >>The function is:
    >>int ErrorPrint(int hour, int min)
    >>{
    >> if(hour >= HOUR || min >= MINS)
    >> printf("Error incorrect value: Enter value less than 2400\n");
    >> return(hour,min);

    >
    > What do you thing this does? Rest assured it doesn't.


    It does do what it's meant to, not unless you see something i don't
    Darklight, Aug 22, 2004
    #5
  6. Darklight

    -berlin.de Guest

    Darklight <> wrote:
    > Barry Schwarz wrote:>>>> }while(time[0] >= HOUR || time[1] >= MINS);
    >>>
    >>>The function is:
    >>>int ErrorPrint(int hour, int min)
    >>>{
    >>> if(hour >= HOUR || min >= MINS)
    >>> printf("Error incorrect value: Enter value less than 2400\n");
    >>> return(hour,min);

    >>
    >> What do you thing this does? Rest assured it doesn't.


    > It does do what it's meant to, not unless you see something i don't


    You can't return two values, i.e.

    return(hour,min);

    will just return min, not hours. 'return' is not a function, even if
    you put everything after it in (superfluous) parentheses, so the
    comma here acts as the comma operator - and the comma operator makes
    the program discard hour and return min.

    Regards, Jens
    --
    \ Jens Thoms Toerring ___ -berlin.de
    \__________________________ http://www.toerring.de
    -berlin.de, Aug 22, 2004
    #6
  7. Darklight

    Darklight Guest

    -berlin.de wrote:

    > Darklight <> wrote:
    >> Barry Schwarz wrote:>>>> }while(time[0] >= HOUR || time[1] >= MINS);
    >>>>
    >>>>The function is:
    >>>>int ErrorPrint(int hour, int min)
    >>>>{
    >>>> if(hour >= HOUR || min >= MINS)
    >>>> printf("Error incorrect value: Enter value less than 2400\n");
    >>>> return(hour,min);
    >>>
    >>> What do you thing this does? Rest assured it doesn't.

    >
    >> It does do what it's meant to, not unless you see something i don't

    >
    > You can't return two values, i.e.
    >
    > return(hour,min);
    >
    > will just return min, not hours. 'return' is not a function, even if
    > you put everything after it in (superfluous) parentheses, so the
    > comma here acts as the comma operator - and the comma operator makes
    > the program discard hour and return min.
    >
    > Regards, Jens


    so would it be better to change the function to void
    i just done that and it works, is that the right thing to do
    thanks for your comments
    Darklight, Aug 22, 2004
    #7
  8. Darklight

    Old Wolf Guest

    Darklight <> wrote:
    >
    > To print error message i have inserted a function here
    > and changed hourout to hours:
    >
    > time[0] = hours; /* hours start */
    > time[1] = mins; /* minutes start */
    > ErrorPrint(hours,mins);
    > >> }while(time[0] >= HOUR || time[1] >= MINS);

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    >
    > The function is:
    > int ErrorPrint(int hour, int min)
    > {
    > if(hour >= HOUR || min >= MINS)

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    > printf("Error incorrect value: Enter value less than 2400\n");
    > return(hour,min);
    > }


    You have "code duplication" here which is generally a bad idea; you
    could make the error function return a value to indicate whether there
    was an error, eg:

    do ... while (error_check(hours, mins));

    int error_check(int hours, int mins)
    {
    if(hours < HOUR && mins < MINS)
    return 0;

    printf("Error incorrect value: Enter value less than 2400\n");
    return 1;
    }

    Also, there's no point in assigning time[0] and time[1] until the
    loop has actually exited (because if the loop goes around again
    then their values were wasted).
    Old Wolf, Aug 23, 2004
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. sikka noel
    Replies:
    8
    Views:
    413
    Mike Wahler
    Aug 5, 2003
  2. Replies:
    2
    Views:
    272
  3. vlsidesign
    Replies:
    26
    Views:
    955
    Keith Thompson
    Jan 2, 2007
  4. Cliff  Martin
    Replies:
    1
    Views:
    3,023
    Larry Smith
    Jan 31, 2007
  5. SM
    Replies:
    9
    Views:
    492
Loading...

Share This Page