Programeer opdrachtenOpdracht : opdr4b_pascal.txt

Terug naar de inzendingen
Opdracht 4b, Pascal Schiks
9-Maart-2005
 Deze opdracht heb ik heel lang geleden eens in Basic gemaakt
 op een rekenmachientje dat ik hiervoor prima kon gebruiken.
 Wegens het lage aantal inzendingen had ik niet zoveel zin om er veel tijd aan
 te besteden.
 Daarom maar een simpele PERL versie gemaakt.
 Wat er aan mijn versie niet deugt :
 ik had geen zin meer om de referentie datum op een fatsoenlijke manier in te
 kunnen voeren.
 Je moet dus zelf de dag van het jaar uitrekenen.
 Ik had ook geen zin om de datum in te voeren,
 die haal ik dus uit de systeemtijd.
 en voorts voldoe ik in deze versie niet aan de eis om de laatste omloop
 van de dag ervoor, en de eerste van de volgende dag te bepalen.
 
 Hadden jullie maar wat enthousiaster moeten zijn !
 
 1 
****satalliet.pl*****
  
 2#!/usr/bin/perl -wT
 3# Title    : satalliet.pl
 4# Function : Bereken evenaar pasage tijden van sataliet
 5# Author   : Pascal Schiks (C) 2005 GNU/GPL
 6#
 7use strict;
 8
 9# References
 10my $refname="RS15";
 11my $refday=38; # 7 Feb 2005
 12my $reftime="12:03";
 13my $refincli=243.2;
 14my $refperiod=34268;
 15#
 16# usable pasages filter values
 17my $filter_Al=95;
 18my $filter_Ah=205;
 19my $filter_Bl=305;
 20my $filter_Bh=359;
 21
 22# Satallite sumary
 23my $periodtime=128;
 24my $inclination=64.6;
 25
 26# Variables
 27my $sat_period;
 28my $sat_day;
 29my $sat_hour;
 30my $sat_min;
 31my $sat_inc;
 32#
 33my $today_day;
 34#
 35my $sec;
 36my $min;
 37my $hour;
 38my $mday;
 39my $mon;
 40my $year;
 41my $wday;
 42my $yday;
 43my $tmp;
 44
 45# Program Start, initialization section
 46# Get refday and reftime the year
 47$sat_day=$refday;
 48
 49# split reftime in hours and minutes
 50$tmp=$reftime=~/(\d\d):(\d\d)/;
 51$sat_hour=$1;
 52$sat_min=$2;
 53
 54# get today's day of the year
 55($sec,$min,$hour,$mday,$mon,$year,$wday,$today_day) = gmtime(time);
 56$year+=1900;
 57
 58print "Equator pasage's of $refname at $mday-$mon-$year\n\n";
 59print "U   Orbit    Time   Angle\n";
 60print "-------------------------\n";
 61# Start calculating.
 62while($sat_day<=$today_day)
 63{
 64  # Period increases just by one
 65  $sat_period++; 
 66  # Equator pasage increased by inclination inclination
 67  $sat_inc+=$inclination;
 68  # Angles are from 0 to 359
 69  if($sat_inc>=360.0)
 70  {
 71    $sat_inc-=360.0;
 72  }
 73  # sat time and date increase bij periodtime
 74  $sat_min+=$periodtime;
 75  # if more than 60 minutes increase the hour
 76  # since ptime can be larger than an hour check this several times 
 77  while($sat_min>=60)
 78  {
 79    $sat_min-=60;
 80    $sat_hour++;
 81  }
 82  # if hours > 24 increase the day
 83  if($sat_hour>=24)
 84  {
 85    $sat_hour-=24;
 86    $sat_day++;
 87  }
 88
 89  # we've reached data of today. so present it.
 90  if($sat_day==$today_day)
 91  {
 92    # passage filter
 93    if(
 94        (($sat_inc>=$filter_Al)&&($sat_inc<=$filter_Ah)) ||
 95        (($sat_inc>=$filter_Bh)||($sat_inc<=$filter_Bl))
 96      )
 97    {
 98      print "*";
 99    }
 100    else
 101    {
 102      print "_";
 103    }
 104    # use formatted output for nice table
 105    printf("%8i   %2i:%2i   %4.1f\n",$sat_period,$sat_hour,$sat_min,$sat_inc);
 106  }
 107}
 108