Προς το περιεχόμενο

bash shell script, αριθμητικές παραστάσεις


toyotaki

Προτεινόμενες αναρτήσεις

Δημοσ.

Θέλω να υπολογίσω την εξής παράσταση result = log2[(c * b ) / (d * a)], το 2 είναι η βάση

Ξεκίνησα με το να υπολογίσω αρχικά τους πολλάπλασιασμούς και επειδή κατάλαβα ότι δούλευαν σωστά δοκίμασα να υπολογίσω σχεδόν ολόκληρη την παράσταση εκτελώντας

>result=`expr (($c \* $ / ($d \* $a))`

όμως βγάζει σφάλμα

>syntax error near unexpected token `$c'

Υποθέτω ότι δεν αναγνωρίζει τις παρενθέσεις. Αυτό σημαίνει ότι θα πρέπει να σπάσω την παράσταση και να εκτελώ μία μία τις πράξεις ή υπάρχει κάποιος άλλος τρόπος;

Δημοσ.

Μήπως ξέρει κανείς πώς να υπολογίσω το log με βάση 2; Διάβασα ότι γίνεται με χρήση του bc αλλά δεν κατάφερα να το κάνω να δουλέψει. Μπορώ να το βάλω μαζί με τον υπολογισμό της παραπάνω παράστασης ή καλύτερα να το έχω ξεχωριστά;

 

Τελικά μου δούλεψε αλλά δεν ξέρω αν είναι σωστή η σύνταξη

>outcome=$(echo "scale=2; l($result)" | bc -l)

Μπορεί να μου επιβεβαιώσει κάποιος την ορθότητά του;

Δημοσ.

Μήπως ξέρει κανείς πώς να υπολογίσω το log με βάση 2; Διάβασα ότι γίνεται με χρήση του bc αλλά δεν κατάφερα να το κάνω να δουλέψει. Μπορώ να το βάλω μαζί με τον υπολογισμό της παραπάνω παράστασης ή καλύτερα να το έχω ξεχωριστά;

 

a=1

b=2

c=4.5

d=3

 

echo "l(($c*$b )/($d*$a))/l(2)"|bc -l

 

=1.58496250072115618146 (log23)

 

Γενικά logx(y) = log(y)/log(x).

Δημοσ.

Δοκίμασα αυτό τον τρόπο:

a=1

b=2

c=4.5

d=3

 

echo "l(($c*$b )/($d*$a))/l(2)"|bc -l

 

=1.58496250072115618146 (log23)

 

Γενικά logx(y) = log(y)/log(x).

όμως τα αποτελέσματα που παίρνω από τα δικά μου νούμερα είναι:

 

>-.09905867072266786554
.26328166185991635721

όπου αν πάω να τα προσθέσω μετά μου εμφανίζει μήνυμα για non-numeric argument

Δημοσ.

>sum=`expr $sum + $outcome`

όπου outcome είναι το αποτέλεσμα -.09905867072266786554 ή .26328166185991635721 ή .42298428013586354899

όταν είναι θετικοί κάνει πράξη όταν βλέπει τον αρνητικό βγάζει το μήνυμα non-numeric argument

Δημοσ.

>sum=`expr $sum + $outcome`

όπου outcome είναι το αποτέλεσμα -.09905867072266786554 ή .26328166185991635721 ή .42298428013586354899

όταν είναι θετικοί κάνει πράξη όταν βλέπει τον αρνητικό βγάζει το μήνυμα non-numeric argument

 

Η expr παίρνει μόνο ακεραίους, οπότε κάνε την πρόσθεση με την bc.

Δημοσ.

Προσπάθησα να το υλοποιήσω σε java όπου θα δίνω κάθε φορά σαν παραμέτρους το sum και την τιμή από τον λογάριθμο

αλλά και πάλι μου βγάζει σφάλματα.

 

>javac Sum.java
sum=`java Sum $sum $outcome`

 

>public class Sum
{
    public static void main(int args[])
    {
int sum = args[0];
int logarithmm = args[1];
sum = sum + logarithm;

System.out.print(sum);
    }
}

 

 

Σφάλματα:

cannot find symbol

symbol : variable logarithm

location: class Sum

sum = sum + logarithm;

^

operator + cannot be applied to int,logarithm

sum = sum + logarithm;

^

incompatible types

found : <nulltype>

required: int

sum = sum + logarithm;

^

 

Η expr παίρνει μόνο ακεραίους, οπότε κάνε την πρόσθεση με την bc.

 

Δοκίμασα αυτό:

>sum=0
sum=`$echo "$sum+$outcome" | bc`

και έβγαλε αυτό σαν αποτέλεσμα

> 0+-.09905867072266786554: command not found

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...