Mit der Shell Rechnen

blck

blck

Routinier
Code:
zahler=1
zahl1=0
zahl2=0 

while [ "$zahler"=="200" ]; do
zahler=[$zahl1er+1]
zahl1=[$zahl11+1]
zahl2=[$zahl2+1]
[COLOR="DarkRed"] if test [ "$zahl1"/"$zahl1"-"$zahl2"/"$zahl2" == "$zahl1/$zahl1-$zahl2/$zahl2" ]; then[/COLOR]
  echo "$zahl1"
  echo "$tahl2"
 fi

done

Moin, ich hab ein Problem mit diesem Programm:
Die rote Zeile sollte folgende Gleichung überprüfen und die Lösungen dann ausgeben:
Wurzel aus a - wurzel aus b = Wurzel aus a-b
nur leider sagt er mir to many arguments

Gruß Blck
 
Im Falle von Wurzeln würde ich bc empfehlen.
 
kannst du es nicht dem bc deine Werte als Positionsparameter übergeben? also bc 1 + 2 oder gleich ne file?
 
bc 1+2

Moin, also wenn man bc 1+2 eingibt kommt folgendes:
File 1+2 is unavailable.

Gruß blck
 
hier noch mal nen neuer Ansatz

Hier übernimmt let die Funktion zum Rechnen wobei let nur im Positiven bereich rechnet. d.h. let Losung=1-4 wäre für ihn 3
Code:
zahler=1
zahl1=0
zahl2=0 

while [ "$zahler"=="20" ]; do
zahler=[$zahl1er+1]
zahl1=[$zahl11+1]
zahl2=[$zahl2+1]

let Losung1="$zahl1*$zahl1"-"$zahl2*$zahl2"
let Losung2="$zahl1*$zahl1-$zahl2*$zahl2"

if test [ "$Losung1"=="$Losung2" ]; then
  echo "$zahl1"
  echo "$tahl2"
fi

done
vllt. kann ja jemand damit was anfangen
gruß blck
 
Code:
zahler=1
zahl1=0
zahl2=0 

while [ "$zahler"=="200" ]; do
zahler=[$zahl1er+1]
zahl1=[$zahl11+1]
zahl2=[$zahl2+1]
[COLOR="DarkRed"] if test [ "$zahl1"/"$zahl1"-"$zahl2"/"$zahl2" == "$zahl1/$zahl1-$zahl2/$zahl2" ]; then[/COLOR]
  echo "$zahl1"
  echo "$tahl2"
 fi

done

Moin, ich hab ein Problem mit diesem Programm:
Die rote Zeile sollte folgende Gleichung überprüfen und die Lösungen dann ausgeben:
Wurzel aus a - wurzel aus b = Wurzel aus a-b
nur leider sagt er mir to many arguments

Gruß Blck

ich kapier dein prog nicht.

sollte

Code:
zahler=1
while [ "$zahler"=="200" ]; do
nicht
Code:
zahler=1
while [ $(zahler) -ne "200" ]; do
heißen

und

Code:
if test [ "$zahl1"/"$zahl1"-"$zahl2"/"$zahl2" == "$zahl1/$zahl1-$zahl2/$zahl2" ]; then
nicht
Code:
if [ "$(zahl1)/$(zahl1)-$(zahl2)/$(zahl2)" -eq "$(zahl1)/$(zahl1)-$(zahl2)/$(zahl2)" ]; then
heißen

Ich kenn mich leider nicht so gut mit Shell-Programmierung aus, so gut wie gar nicht eigentlich, aber ich finds so logischer und "richtiger". Kann natürlich auch sein das ich vollkommen auf dem Holzweg bin. Dann korrigiert mich doch bitte, will ja auch was lernen

und was soll "zahl1/zahl1 - zahl2/zahl2 = zahl1/zahl1 - zahl2/zahl2" bedeuten?
0 = 0 ?


EDIT
$(variable) stimmt nicht. muss schon $variable heißen, sorry
 
Zuletzt bearbeitet:
OK Danke ich werds programmieren. Tipp: Ich bin auch neuling :))
Gut die Rechnun mit dem zahler -zahler soll Rechnen.
Wobei Diese Variablen hochgezählt werden. Guck dir mal die Zeilen
Code:
zahler=[$zahl1er+1]
zahl1=[$zahl11+1]
zahl2=[$zahl2+1]
an die Zählen die Variablen hoch :D

PS... Der Code klappt leider nicht so wie sollte. Der ganze Code dient zum ausrechnen einer wurzel

Gruß Blck :brav:
 
Zuletzt bearbeitet:
OK Danke ich werds programmieren. Tipp: Ich bin auch neuling :))
Gut die Rechnun mit dem zahler -zahler soll Rechnen.
Wobei Diese Variablen hochgezählt werden. Guck dir mal die Zeilen
Code:
zahler=[$zahl1er+1]
zahl1=[$zahl11+1]
zahl2=[$zahl2+1]
an die Zählen die Variablen hoch :D

PS... Der Code klappt leider nicht so wie sollte. Der ganze Code dient zum ausrechnen einer wurzel

Gruß Blck :brav:

Wie gesagt, ich kann keine Shell-Programmierung :) ich wollte eigentlich nur nachfragen wie das gemeint war und ob ich auf dem richtigen weg "wäre".

so wie ich das sehe wird ja zahl1 und zahl2 immer gleich hochgezählt das heißt wenn zahl1 != zahl2 dann ist immer noch

zahl1/zahl1-zahl2/zahl2 = zahl1/zahl1-zahl2/zahl2

1 - 1 = 1 - 1
0 = 0

oder hab ich da wirklich ein gedakenverbrechen getan?
 
Nein Ansich nicht...
nur mein Problem war ja folgendes

Moin, ich hab ein Problem mit diesem Programm:
Die rote Zeile sollte folgende Gleichung überprüfen und die Lösungen dann ausgeben:
Wurzel aus a - wurzel aus b = Wurzel aus a-b
nur leider sagt er mir to many arguments


if test [ "$zahl1"/"$zahl1"-"$zahl2"/"$zahl2" == "$zahl1/$zahl1-$zahl2/$zahl2" ]; then

Das war der Ansatz... so der Schlüssel liegt in der Programmierung:

"$zahl1*$zahl1"-"$zahl2*$zahl2"
Das Rechnet: Wurzel aus a - wurzel aus b
(Hinweis: Beachte man "" !)

"$zahl1*$zahl1-$zahl2*$zahl2"
Das Rechnet: Wurzel aus a-b
( Hinweis: auch hier die "" beachten )

Gruß Blck

PS Ich hoffe ich hab mich nicht getäuscht wenn ja sollte mich einer der "Profis" korrigieren
 
ok die variablen hab ich falsch geschrieben. Hab grad nachgesehen

aber

zahl1*zahl1 ist keine wurzel
 
Dir ist schon das Prinzip der Wurzelberechnung geläufig? Was ist der Unterschied zwischen "a"-"b" und "a-b"?
 
OK das war falsch formuliert:
aber für meine Rechnung trotzdem bis auf kleine Fehler richtig
denn wenn man für Zahl1 4 einsetzt hat man
4*4=16 also die Wurzel aus Sechszehn 4

GUT Richtig aber ich hab grad mehrere Fehler bemerkt werd wohl noch mal korrigieren müssen *Zettelschreibmodus* und dann bei Fragen noch mal Fragen :D

Aber eine Frage bleibt bestehen :
Wie rechnet man in der Shell die Wurzel einer Zahl aus?

Gruß und Danke für die Hilfe
Blck
 
...

Aber eine Frage bleibt bestehen :
Wie rechnet man in der Shell die Wurzel einer Zahl aus?

Gruß und Danke für die Hilfe
Blck

Lies den Thread einfach nochmal durch, wahscheinlich findest Du dann die Lösung

Btw, warum ärgerst Du Dich eigentlich mit Shellskripten rum, wenn die Aufgabe auch ganz simpel mathematisch lösen kannst?
 
Code:
#!/bin/sh

zahler=1
zahl1=0
zahl2=0

while [ $zahler -le "200" ]; do
a=$(echo "sqrt($zahl1)+sqrt($zahl2)" | bc)
b=$(echo "sqrt($zahl1+$zahl2)" | bc)

if [ $a -eq $b ]; then
echo '$zahl1 = $zahl2 = '"$zahl1"
fi

zahler=$[$zahler+1]
zahl1=$[$zahl1+1]
zahl2=$[$zahl2+1]

done

So hat mich jetzt auch interessiert. Was man nicht alles schafft wenn man "man" und "google" benutzt.

Meinst du so?

wobei da mathematisch was nicht stimmt :)

EDIT2
stimmt schon nur musst du die dezimalstellen hinter dem komma angeben.
bei

a=$(echo "scale=10;sqrt($zahl1)+sqrt($zahl2)" | bc)
b=$(echo "scale=10;sqrt($zahl1+$zahl2)" | bc)

ist das ergebnis anders
 
Zuletzt bearbeitet:
ich glaube er möchte "sqrt()" nicht *benutzen* sondern *bauen* in bash?
 

Ähnliche Themen

Hilfe für ein shell script

script sshpass

Verschlüsseltes Backup-Script mit rsync

Summe von Zahlen in einer Zeilen bilden

Shell Skript beschleunigen

Zurück
Oben