Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

Binäruhr

Diskussion: Binäruhr im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Für eine Konsolen-Version in C (Linux) würde das hier schon reichen (Vorbild war die Wikipedia-Version, also für jede Ziffer ...

Antwort
Alt 20.05.09, 16:06   #16 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Anzeige

Für eine Konsolen-Version in C (Linux) würde das hier schon reichen (Vorbild war die Wikipedia-Version, also für jede Ziffer eine Spalte in der Darstellung):

Code:
#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main() {
    while (1) {
        printf("\33[2J\33[0H");
        time_t t = time(0);
        struct tm *ts = localtime(&t);
        int now[6] = {ts->tm_hour / 10, ts->tm_hour % 10,
                      ts->tm_min  / 10, ts->tm_min  % 10,
                      ts->tm_sec  / 10, ts->tm_sec  % 10};
        int i, k;
        for (i = 8; i > 0; i >>= 1) {
            for (k = 0; k < 6; k++)
                printf("%d ", (now[k] & i) > 0);
            printf("\n");
        }
        sleep(1);
    }
}
Eydeet ist offline   Mit Zitat antworten
Alt 20.05.09, 17:27   #17 (permalink)
 
Registriert seit: 08.04.07
thyrael.lu Leistung: Facit NTK
thyrael.lu eine Nachricht über ICQ schicken
Likes: 1
Standard

Ich glaub LISP hatten wir noch nicht.

Code:
#!/usr/bin/clisp

(LOOP
  (FORMAT T "~C[2J" (CODE-CHAR 27))
  (MULTIPLE-VALUE-BIND (S M H) (GET-DECODED-TIME)
    (MAPCAR #'(LAMBDA (X)
                (FORMAT T "~2,'0D " X)
                (LET ((I 128))
                  (LOOP (IF (= (TRUNCATE X I) 1) (PROGN (PRINC #\O) (DECF X I))
                                                 (PRINC #\.))
                  (SETQ I (TRUNCATE I 2))
                (WHEN (= I 0) (RETURN))))
                (TERPRI))
            (LIST S M H)))
  (SLEEP 1))
Sollte auch mit SBCL, CMUCL usw gehen.
thyrael.lu ist offline   Mit Zitat antworten
Alt 20.05.09, 20:20   #18 (permalink)
Senior Member
 
Benutzerbild von -=Draven=-
 
Registriert seit: 07.07.03
-=Draven=- Leistung: Facit NTK
-=Draven=- eine Nachricht über ICQ schicken -=Draven=- eine Nachricht über AIM schicken -=Draven=- eine Nachricht über Yahoo! schicken
Likes: 7
Standard

Dann mache ich doch auch mal mit und hänge den Text in den Anhang,
da es ne Uhr ist die bei mir häufig im BG läuft hat sie ein paar Zusatzfunktionen.

Des ganze stammt größten Teils von mir aber einige Dinge sind auch aus dem
Delphi EasyHelper oder aus dem Swissdelphicenter.
Ich frickel mir meine Klamotten ja eh nur immer mal schnell zusammen
das es das erfüllt wofür ich es gerade brauche...
Angehängte Dateien
Dateityp: txt uhr.pas.txt (10,2 KB, 20x aufgerufen)
-=Draven=- ist offline   Mit Zitat antworten
Alt 20.05.09, 20:33   #19 (permalink)
 
Registriert seit: 12.01.09
lone.wolf Leistung: Z3
lone.wolf eine Nachricht über AIM schicken
Likes: 1
Standard

Da gibts n Begriff für solche'

MfG
lone.wolf ist offline   Mit Zitat antworten
Alt 20.05.09, 20:56   #20 (permalink)
Senior Member
 
Benutzerbild von -=Draven=-
 
Registriert seit: 07.07.03
-=Draven=- Leistung: Facit NTK
-=Draven=- eine Nachricht über ICQ schicken -=Draven=- eine Nachricht über AIM schicken -=Draven=- eine Nachricht über Yahoo! schicken
Likes: 7
Standard

Ich habe deswegen auch im Quellcode stehen von wem es eigentlich stammt...
und was den Kern der Uhr betrifft der stammt ja auch von mir ich war nur zu faul des rauszulöschen was nicht von mir ist.

Desweiteren muss man meiner Meinung nach nicht immer das Rad neu Erfinden...
-=Draven=- ist offline   Mit Zitat antworten
Alt 20.05.09, 20:57   #21 (permalink)
 
Registriert seit: 12.01.09
lone.wolf Leistung: Z3
lone.wolf eine Nachricht über AIM schicken
Likes: 1
Standard

Ganz das Gegenteil zu meiner Meinung

Naja lets keep on topic..

MfG
lone.wolf ist offline   Mit Zitat antworten
Alt 13.12.10, 14:43   #22 (permalink)
 
Registriert seit: 10.11.10
DMRMcK Leistung: Z3
Likes: 0
Standard

Ein kleines Fensterchen mit Anzeige der Uhrzeit in digitaler Anzeige sowie als Binäranzeige.

Zusätzliche Erklärung   
lblDigital = Label zur Anzeige der Uhrzeit in digitaler Anzeige
lblH16, lblH8,..., lblM32, lblM16,..., lblS32, lblS16,... = Labels zur Anzeige der Uhrzeit in binärer Anzeige - weiß = 0 und rot = 1
Timer steht auf 250ms


VB   
Code:
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        lblDigital.Text = Now.Hour & ":" & Now.Minute & ":" & Now.Second
        SetStd(Now.Hour)
        SetMin(Now.Minute)
        SetSek(Now.Second)
        Timer1.Enabled = True
    End Sub

    Private Sub SetStd(ByVal stunde As Integer)
        lblH16.BackColor = Color.White
        lblH8.BackColor = Color.White
        lblH4.BackColor = Color.White
        lblH2.BackColor = Color.White
        lblH1.BackColor = Color.White
        Do While stunde > 0
            If stunde >= 16 Then
                lblH16.BackColor = Color.Red
                stunde -= 16
            ElseIf stunde >= 8 Then
                lblH8.BackColor = Color.Red
                stunde -= 8
            ElseIf stunde >= 4 Then
                lblH4.BackColor = Color.Red
                stunde -= 4
            ElseIf stunde >= 2 Then
                lblH2.BackColor = Color.Red
                stunde -= 2
            ElseIf stunde >= 1 Then
                lblH1.BackColor = Color.Red
                stunde -= 1
            End If
        Loop
    End Sub

    Private Sub SetMin(ByVal minute As Integer)
        lblM32.BackColor = Color.White
        lblM16.BackColor = Color.White
        lblM8.BackColor = Color.White
        lblM4.BackColor = Color.White
        lblM2.BackColor = Color.White
        lblM1.BackColor = Color.White
        Do While minute > 0
            If minute >= 32 Then
                lblM32.BackColor = Color.Red
                minute -= 32
            ElseIf minute >= 16 Then
                lblM16.BackColor = Color.Red
                minute -= 16
            ElseIf minute >= 8 Then
                lblM8.BackColor = Color.Red
                minute -= 8
            ElseIf minute >= 4 Then
                lblM4.BackColor = Color.Red
                minute -= 4
            ElseIf minute >= 2 Then
                lblM2.BackColor = Color.Red
                minute -= 2
            ElseIf minute >= 1 Then
                lblM1.BackColor = Color.Red
                minute -= 1
            End If
        Loop
    End Sub

    Private Sub SetSek(ByVal sekunde As Integer)
        lblS32.BackColor = Color.White
        lblS16.BackColor = Color.White
        lblS8.BackColor = Color.White
        lblS4.BackColor = Color.White
        lblS2.BackColor = Color.White
        lblS1.BackColor = Color.White
        Do While sekunde > 0
            If sekunde >= 32 Then
                lblS32.BackColor = Color.Red
                sekunde -= 32
            ElseIf sekunde >= 16 Then
                lblS16.BackColor = Color.Red
                sekunde -= 16
            ElseIf sekunde >= 8 Then
                lblS8.BackColor = Color.Red
                sekunde -= 8
            ElseIf sekunde >= 4 Then
                lblS4.BackColor = Color.Red
                sekunde -= 4
            ElseIf sekunde >= 2 Then
                lblS2.BackColor = Color.Red
                sekunde -= 2
            ElseIf sekunde >= 1 Then
                lblS1.BackColor = Color.Red
                sekunde -= 1
            End If
        Loop
    End Sub

End Class
DMRMcK ist offline   Mit Zitat antworten
Alt 17.03.11, 22:34   #23 (permalink)
 
Registriert seit: 16.03.11
chuck Leistung: Z3
Likes: 0
Standard

Hab die Uhr mal in Java geschrieben. Source befindet sich im jar Archiv
Angehängte Dateien
Dateityp: zip binaryClock_with_source.zip (119,0 KB, 7x aufgerufen)
chuck ist offline   Mit Zitat antworten
Alt 09.06.11, 13:08   #24 (permalink)
 
Registriert seit: 07.06.11
NattleBet Leistung: Facit NTK
Likes: 0
Standard

Hab jetzt auch eine Lösung hierfür

JAVA   
import java.awt.GridLayout;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Binaeruhr extends JPanel {
private final JFrame frame;
private final JLabel labelDec, labelBin;

public Binaeruhr() {
frame = new JFrame("Binäruhr");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setLayout(new GridLayout(2, 2));
labelDec = new JLabel();
labelBin = new JLabel();
frame.add(new JLabel(" Dezimal: "));
frame.add(labelDec);
frame.add(new JLabel(" Binär: "));
frame.add(labelBin);
frame.setVisible(true);
}

public void refresh() {
Date currentTime = new Date();
labelDec.setText(printNormalTime(currentTime));
labelBin.setText(convertToBin(currentTime));
frame.pack();
}

private String printNormalTime(Date date) {
DateFormat df = new SimpleDateFormat("HH : mm : ss");
return df.format(date);
}

private String convert10To2(int number) {
List<Boolean> bin = new ArrayList<Boolean>();
while (number > 0) {
bin.add(0, number % 2 == 1);
number /= 2;
}
StringBuilder binary = new StringBuilder();
for (boolean b : bin)
binary.append(b ? 1 : 0);
return binary.toString();
}

private String convertToBin(Date date) {
StringBuilder bin = new StringBuilder();
DateFormat df = new SimpleDateFormat("HH:mm:ss");
String[] time = df.format(date).split(":");
bin.append(fill(convert10To2(Integer.parseInt(time[0])), 5)).append(" : ");
bin.append(fill(convert10To2(Integer.parseInt(time[1])), 6)).append(" : ");
bin.append(fill(convert10To2(Integer.parseInt(time[2])), 6));
return bin.toString();
}

private String fill(String bin, int size) {
StringBuilder filled = new StringBuilder();
for (int i=bin.length(); i<size; i++) {
filled.append("0");
}
filled.append(bin);
return filled.toString();
}

public static void main(String[] args) {
final Binaeruhr clock = new Binaeruhr();
while (clock.frame.isVisible()) {
Thread t = new Thread(new Runnable() {
public void run() {
clock.refresh();
}
});
try {
t.start();
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
NattleBet ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » Binäruhr
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61