Esame del 23 aprile 2009, testo n. 4 1) Eseguire la seguente moltiplicazione in BINARIO : 100001 * 100111 = 10100000111 UNIX 2) Fare uno script che accetti come ARGOMENTO un numero composto solo da cifre da 0 al 7 compresi, AL MASSIMO con 3 CIFRE. Quindi lo script interpreti tale numero come OTTALE e ne metta il corrispondente VALORE DECIMALE in una environmental variable di nome DECIM appositamente creata. #!/bin/tcsh @ cifra3 = $argv[1] % 10 @ cifra2 = $argv[1] / 10 @ cifra2 = $cifra2 % 10 @ cifra1 = $argv[1] / 100 @ numero = $cifra1 * 64 + $cifra2 * 8 + $cifra3 setenv DECIM $numero PERL 3) Fare uno script in Perl che accetti come argomenti 2 numeri, il primo da 1 a 12 indicante un mese, il secondo di massimo 4 cifre indicante un anno dal 1 al 9999 DC. Quindi lo script dovra' mettere nel file di nome info.lis quei numeri corrispondenti ai GIOVEDI' del mese e dell'anno corrispondenti ai due argomenti. #!/usr/bin/perl open OUT,">info.lis"; @cal = `cal $ARGV[0] $ARGV[1]`; $n = @cal; @fields = split / +/,$cal[2]; $enne = @fields; if( $enne > 3 ) { $primogiovedi= $enne - 3; } else { $primogiovedi= 4 + $enne ; } print OUT "$primogiovedi\n"; # trova quanti giorni ha questo mese. La ricerca e' complicata # dal fatto che ci possono essere delle righe vuote alla fine # dell'output prodotto da cal for ($i = $n; $i > 0 ; $i--){ @fields = split / +/,$cal[$i-1]; $enne = @fields; for($j=$enne; $j > 0; $j--){ chomp $fields[$j-1]; if($fields[$j-1] != "") { $ultimogiorno=$fields[$j-1]; goto fine ; } } } fine: #---- $ngiovedi = $primogiovedi + 7; while ( $ngiovedi <= $ultimogiorno){ print OUT "$ngiovedi\n"; $ngiovedi+= 7; } close OUT;