michael_hartman_cz

PA1 - úkol 4.1 (Vláčky na nádraží)

Mar 28th, 2013
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.61 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <limits.h>
  5.  
  6. unsigned int gcd( unsigned int a, unsigned int b );
  7. unsigned int lcm( unsigned int a, unsigned int b );
  8.  
  9. int main ( int argc, char * argv[] )
  10.  {
  11.     int n, i, h, m;
  12.     unsigned int meet = 1;
  13.     unsigned int trainInt[20];
  14.    
  15.     puts( "Zadejte pocet vlaku:" );
  16.     if ( scanf( "%d", &n ) != 1 || n < 1 || n > 20 )
  17.      {
  18.         puts ( "Nespravny vstup." );
  19.         return 1;
  20.      }
  21.      
  22.     for ( i = 0; i < n; i++ )
  23.      {
  24.         printf( "Interval vlaku %d:\n", i + 1 );
  25.         if ( scanf( "%d:%d", &h, &m ) != 2 || m > 59 || h + m == 0 || h < 0 || m < 0 )
  26.          {
  27.             puts ( "Nespravny vstup." );
  28.             return 1;
  29.          }
  30.         trainInt[i] = 60 * h + m;
  31.      }
  32.    
  33.     for ( i = 0; i < n; i++ )
  34.      {
  35.         if ( lcm( meet, trainInt[i] ) == UINT_MAX )
  36.          {
  37.             puts( "Vysledek mimo rozsah datoveho typu." );
  38.             return 0;
  39.          }
  40.         meet = lcm( meet, trainInt[i] );
  41.      }
  42.        
  43.     printf( "Vsechny vlaky se potkaji za: %d:%.2d\n", meet / 60, meet % 60);
  44.    
  45.     puts( "Mezitim projede:" );
  46.     for ( i = 0; i < n; i++ )
  47.      {
  48.         printf( "* vlak %d: %dx", i+1, ( meet / trainInt[i] ) - 1 );
  49.         if ( i < n - 2 )
  50.             printf( ",\n" );
  51.         if ( i == n - 2 )
  52.             printf( " a\n" );
  53.         if ( i == n - 1)
  54.             printf( ".\n" );
  55.      }
  56.        
  57.     return 0;
  58.  }
  59.  
  60. unsigned int gcd( unsigned int a, unsigned int b )
  61.  {
  62.     unsigned int tmp;
  63.     while ( b != 0 )
  64.      {
  65.         tmp = a;
  66.         a = b;
  67.         b = tmp % b;
  68.      }
  69.     return a;
  70.  }
  71.  
  72. unsigned int lcm( unsigned int a, unsigned int b )
  73.  {
  74.     unsigned long int x = ( unsigned long int ) a * b;
  75.     if ( x > UINT_MAX )
  76.         return UINT_MAX;
  77.     return (a * b) / gcd( a, b );
  78.  }
Advertisement
Add Comment
Please, Sign In to add comment