Frage zu Shellprogrammierung

Post Reply
Message
Author
Klaus

Frage zu Shellprogrammierung

#1 Post by Klaus »

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

Jochen

Re: Frage zu Shellprogrammierung

#2 Post by Jochen »

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

rattengift

Re: Frage zu Shellprogrammierung

#3 Post by rattengift »

> 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.

Jochen

Re: Frage zu Shellprogrammierung

#4 Post by Jochen »

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.

Post Reply