Binary Clock

Stato
Discussione chiusa ad ulteriori risposte.

Oromis92

Utente Silver
22 Dicembre 2007
102
12
2
84
e ricominciano gli esercizi :asd:

scrivere un programma che stampi a video l'orario corrente in formato binario

xl_binary_led_clock.jpg
led-binclock-described.jpg


ecco wikipedia in proposito:
http://it.wikipedia.org/wiki/Orologio_binario
http://it.wikipedia.org/wiki/Binary-coded_decimal

ed ecco la mia soluzione (dannato perl, perchè, PERCHÈ non esiste una funzione dec2bin ? :evil:)

Codice:
#!/usr/bin/perl

($s, $m, $h) = localtime();
if (length($h) == 1) {$h = "0".$h}
$q=$h;
$r=$h;
$h1=substr($h,0,1);
$h2=substr($h,1,1);
if (length($m) == 1) {$m = "0".$m}
$w=$m;
$t=$m;
$m1=substr($m,0,1);
$m2=substr($m,1,1);
if (length($s) == 1) {$s = "0".$s}
$e=$s;
$y=$s;
$s1=substr($s,0,1);
$s2=substr($s,1,1);



while ($h1>0) {
if ($h1 % 2 == 0) { $str1 .= 0; }
else { $str1 .= 1; }
$h1 = int($h1/2);
}
$str1 .= "0" while length($str1) < 4;
$str1 = reverse($str1);

while ($m1>0) {
if ($m1 % 2 == 0) { $str2 .= 0; }
else { $str2 .= 1; }
$m1 = int($m1/2);
}
$str2 .= "0" while length($str2) < 4;
$str2 = reverse($str2);

while ($s1>0) {
if ($s1 % 2 == 0) { $str3 .= 0; }
else { $str3 .= 1; }
$s1 = int($s1/2);
}
$str3 .= "0" while length($str3) < 4;
$str3 = reverse($str3);

while ($h2>0) {
if ($h2 % 2 == 0) { $str4 .= 0; }
else { $str4 .= 1; }
$h2 = int($h2/2);
}
$str4 .= "0" while length($str4) < 4;
$str4 = reverse($str4);

while ($m2>0) {
if ($m2 % 2 == 0) { $str5 .= 0; }
else { $str5 .= 1; }
$m2 = int($m2/2);
}
$str5 .= "0" while length($str5) < 4;
$str5 = reverse($str5);

while ($s2>0) {
if ($s2 % 2 == 0) { $str6 .= 0; }
else { $str6 .= 1; }
$s2 = int($s2/2);
}
$str6 .= "0" while length($str6) < 4;
$str6 = reverse($str6);

while ($q>0) {
if ($q % 2 == 0) { $str7 .= 0; }
else { $str7 .= 1; }
$q = int($q/2);
}
$str7 .= "0" while length($str7) < 6;
$str7 = reverse($str7);

while ($w>0) {
if ($w % 2 == 0) { $str8 .= 0; }
else { $str8 .= 1; }
$w = int($w/2);
}
$str8 .= "0" while length($str8) < 6;
$str8 = reverse($str8);

while ($e>0) {
if ($e % 2 == 0) { $str9 .= 0; }
else { $str9 .= 1; }
$e = int($e/2);
}
$str9 .= "0" while length($str9) < 6;
$str9 = reverse($str9);


@x1 = split//,$str1;
@x2 = split//,$str4;
@x3 = split//,$str2;
@x4 = split//,$str5;
@x5 = split//,$str3;
@x6 = split//,$str6;

@x7 = split//,$str7;
@x8 = split//,$str8;
@x9 = split//,$str9;

print "\n BCD encoding\n";
print " ^^^^^^^^^^^^\n\n";
print "   $x2[0]   $x4[0]   $x6[0] \n";
print "   $x2[1] $x3[1] $x4[1] $x5[1] $x6[1] \n";
print " $x1[2] $x2[2] $x3[2] $x4[2] $x5[2] $x6[2] \n";
print " $x1[3] $x2[3] $x3[3] $x4[3] $x5[3] $x6[3] \n\n";
print "\n True binary encoding\n";
print " ^^^^^^^^^^^^^^^^^^^^\n\n";
print " @x7\n @x8\n @x9\n\n";
print " Real time\n";
print " ^^^^^^^^^\n\n";
print " $r:$t:$y\n\n";
print " Il segnale orario vi è offerto da Oromis92\n\n";

ed ecco l'output:
ib2nn8.jpg
 
ciao oromis, bello l'esercizio, un'ottima occasione per il mio primo programmino in RUBY!

Stampa sia BDC che Pure binary

Codice:
#!/usr/bin/ruby

def d2b(n,l=4)
n=n.to_f()
s=0
r=''
while n>=1
r+=((n%2).truncate).to_s
n=(n/=2.0).truncate
s+=1
end
if r.length<l then r=r+('0'*(l-r.length)) end
r.reverse
end
puts ":: Ruby Binary Clock by GreyFox ::"
d=Time.new()
t=[d.hour().to_s,d.min().to_s,d.sec().to_s]

for i in 0..t.length-1
if String(t[i]).length==1 then t[i]='0'+t[i] end
end
puts ' '
puts 'BDC:'
puts ' '+' '+d2b(t[0][1,1])[0,1]+' '+' '+d2b(t[1][1,1])[0,1]+' '+' '+d2b(t[2][1,1])[0,1]
puts ' '+' '+d2b(t[0][1,1])[1,1]+' '+d2b(t[1][0,1])[1,1]+d2b(t[1][1,1])[1,1]+' '+d2b(t[2][0,1])[1,1]+d2b(t[2][1,1])[1,1]
puts ' '+d2b(t[0][0,1])[2,1]+d2b(t[0][1,1])[2,1]+' '+d2b(t[1][0,1])[2,1]+d2b(t[1][1,1])[2,1]+' '+d2b(t[2][0,1])[2,1]+d2b(t[2][1,1])[2,1]
puts ' '+d2b(t[0][0,1])[3,1]+d2b(t[0][1,1])[3,1]+' '+d2b(t[1][0,1])[3,1]+d2b(t[1][1,1])[3,1]+' '+d2b(t[2][0,1])[3,1]+d2b(t[2][1,1])[3,1]
puts ' '
puts 'Pure Binary:'
for y in 0...7 
puts ' '+d2b(t[0],6)[y,1]+' '+d2b(t[1],6)[y,1]+' '+d2b(t[2],6)[y,1]
end
puts 'Decimal:'
puts ' '+t[0]+':'+t[1]+':'+t[2]
risultato:

Carino , Sai che mi sa che lo pubblico nel mio blog!
 
OK ho finito l'esercio, vi avviso che è abbastanza sporco, un pò perchè in C programmo solo a scuola e un pò perchè la libreria time.h la uso solo per inizializzare srand() con time(NULL), tutto sommato funziona XD.
Ecco il codice:
Codice:
#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<string.h>



void dec2bin(int num, int *var, int size){

	int i,j=0,str[size];

	for(i=0;i<size;i++){

		str[i]=0;

	}

	while(num>0){

		if(num%2==0)

			str[j]=0;

		else

			str[j]=1;

		j++;

		num=(int) num/2;

	}

	j=size-1;

	for(i=0;i<size;i++){

		var[i]=str[j];

		j--;

	}

}



int main()

{

	int dasec[4],usec[4],damin[4],umin[4],dahours[4],uhours[4],hours[6],min[6],sec[6],i;

    int da,u;

    struct tm data;

    time_t now;

    time( &now );

    data = *localtime( &now );

    da=(int) data.tm_sec/10;

    u=data.tm_sec-(da*10);

    dec2bin(u,usec,4);

    dec2bin(da,dasec,4);

    da=(int) data.tm_min/10;

    u=data.tm_min-(da*10);

    dec2bin(u,umin,4);

    dec2bin(da,damin,4);

    da=(int) data.tm_hour/10;

    u=data.tm_hour-(da*10);

    dec2bin(u,uhours,4);

    dec2bin(da,dahours,4);

    dec2bin(data.tm_sec,sec,6);

    dec2bin(data.tm_min,min,6);

    dec2bin(data.tm_hour,hours,6);

    printf("Orario in BDC:\n\n");

    printf("   %d   %d   %d\n",uhours[0],umin[0],usec[0]);

    printf("   %d %d %d %d %d\n",uhours[1],damin[1],umin[1],dasec[1],usec[1]);

    printf(" %d %d %d %d %d %d\n",dahours[2],uhours[2],damin[2],umin[2],dasec[2],usec[2]);

    printf(" %d %d %d %d %d %d\n",dahours[3],uhours[3],damin[3],umin[3],dasec[3],usec[3]); 

    printf("\n\nOrario in TrueBinary:\n\n");

    for(i=0;i<6;i++)

    	printf(" %d %d %d\n",hours[i],min[i],sec[i]);

    printf("\n\nOrario in decimale:\n\n");

    printf("  %d:%d:%d",data.tm_hour,data.tm_min,data.tm_sec);

    printf("\n\nL'ora e' gentilmente offerta da ShuraBozz\n");

    return 0;

}
E l'immagine:
schermatagq1.png


P.S.: E' tosto il C XD
In risposta a Oromis: Perchè non la crei tu la funzione? :)
Edit: Mi ero scordato di postare il nuovo terminale XD
 
Tanto per testare un po' il javascript ed il modulo delle ncurses ho fatto qualcosina anch'io :3

Sorgente: http://pastebin.com/f1ec397a3

Screenshot:
screenshot2009021523512bf0.png
 
l'ho fatto in javascript per siti web, non fate molto caso al codice perchè sono niubbo col javascript :S

Ecco un link per la preview:
http://shurabozz.netsons.org/binclock/index.htm
 
Stato
Discussione chiusa ad ulteriori risposte.