Hallo Ihr,
tüftle jetzt schon seit 2 Wochen an einem Shellprogramm.
Aber ich finde in keinster Weise ein Lösung.
Und zwar kann man ja eine Dezimalzahl in eine Binärzahl
umwandeln mit der 2er Teilung und Rest Methode.
z.B. 19
19 / 2 = 9 Rest 1
9 / 2 = 4 Rest 1
4 / 2 = 2 Rest 0
2 / 2 = 1 Rest 0
1 / 2 = 0 Rest 1
Ergebnis : 10011
Kann man das überhaupt mit normalen Shellbefehlen lösen (expr
mit / und %)?
Oder brauche ich dazu awk, etc.?
Weiss jemand eine Lösung?
Danke
Gruss Klaus
Frage zu Shellprogrammierung
Re: Frage zu Shellprogrammierung
Das ist eigentlich ganz leicht. Der Algorithmus ist ja klar: Solange, wie die Eingabe > 1 ist, den Rest der Division berechnen, diesen an das Binärergebnis vorne anhängen und die Eingabe durch 2 teilen. Zum Schluss ausgeben. In reiner Bourne-Shell-Syntax ist das dann<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">#!/bin/sh
# Skript: dec2bin
# Parameter: $1 - Dezinalzahl
# Ausgabe: Binärzahl
DEC=$1
while [ $DEC -gt 0 ] ; do
REST=`expr $DEC % 2`
DEC=`expr $DEC / 2`
BIN=$REST$BIN
done
echo $BIN
exit 0
</font><hr></pre></blockquote>Natürlich ohne Checks, ob überhaupt eine Zahl übergeben wird und solche Sachen. Aber so funktioniert es im Prinzip. In der bash kann man das natürlich auch schneller realisieren, indem man statt expr die arithmetische Evaluation verwendet, echte Integer-Variablen zum Rechnen usw.
Jochen
# Skript: dec2bin
# Parameter: $1 - Dezinalzahl
# Ausgabe: Binärzahl
DEC=$1
while [ $DEC -gt 0 ] ; do
REST=`expr $DEC % 2`
DEC=`expr $DEC / 2`
BIN=$REST$BIN
done
echo $BIN
exit 0
</font><hr></pre></blockquote>Natürlich ohne Checks, ob überhaupt eine Zahl übergeben wird und solche Sachen. Aber so funktioniert es im Prinzip. In der bash kann man das natürlich auch schneller realisieren, indem man statt expr die arithmetische Evaluation verwendet, echte Integer-Variablen zum Rechnen usw.
Jochen
Re: Frage zu Shellprogrammierung
> Natürlich ohne Checks, ob überhaupt eine Zahl übergeben wird und solche Sachen.
zb muss man auch den fall DEC==0 abfangen. für diesen fall wird nämlich nichts ausgegeben.
zb muss man auch den fall DEC==0 abfangen. für diesen fall wird nämlich nichts ausgegeben.
Re: Frage zu Shellprogrammierung
Oder die Frage, was man bei negativen Zahlen ausgeben soll... <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Zumindest die Frage mit Null ist aber einfach: Zwischen "DEC=$1" und der while-Schleife ein <pre>[ $DEC -eq 0 ] && { echo "0" ; exit 0 ; }</pre>einsetzen.
Zumindest die Frage mit Null ist aber einfach: Zwischen "DEC=$1" und der while-Schleife ein <pre>[ $DEC -eq 0 ] && { echo "0" ; exit 0 ; }</pre>einsetzen.