toyotaki Δημοσ. 12 Απριλίου 2011 Δημοσ. 12 Απριλίου 2011 Θέλω να υπολογίσω την εξής παράσταση result = log2[(c * b ) / (d * a)], το 2 είναι η βάση Ξεκίνησα με το να υπολογίσω αρχικά τους πολλάπλασιασμούς και επειδή κατάλαβα ότι δούλευαν σωστά δοκίμασα να υπολογίσω σχεδόν ολόκληρη την παράσταση εκτελώντας >result=`expr (($c \* $ / ($d \* $a))` όμως βγάζει σφάλμα >syntax error near unexpected token `$c' Υποθέτω ότι δεν αναγνωρίζει τις παρενθέσεις. Αυτό σημαίνει ότι θα πρέπει να σπάσω την παράσταση και να εκτελώ μία μία τις πράξεις ή υπάρχει κάποιος άλλος τρόπος;
pinball_elf Δημοσ. 12 Απριλίου 2011 Δημοσ. 12 Απριλίου 2011 δοκίμασε το εξής: > result=$(expr $(expr $(expr $c \* $ / $(expr $d \* $a)))
toyotaki Δημοσ. 12 Απριλίου 2011 Μέλος Δημοσ. 12 Απριλίου 2011 Μήπως ξέρει κανείς πώς να υπολογίσω το log με βάση 2; Διάβασα ότι γίνεται με χρήση του bc αλλά δεν κατάφερα να το κάνω να δουλέψει. Μπορώ να το βάλω μαζί με τον υπολογισμό της παραπάνω παράστασης ή καλύτερα να το έχω ξεχωριστά; Τελικά μου δούλεψε αλλά δεν ξέρω αν είναι σωστή η σύνταξη >outcome=$(echo "scale=2; l($result)" | bc -l) Μπορεί να μου επιβεβαιώσει κάποιος την ορθότητά του;
firewalker Δημοσ. 12 Απριλίου 2011 Δημοσ. 12 Απριλίου 2011 Μήπως ξέρει κανείς πώς να υπολογίσω το 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).
toyotaki Δημοσ. 12 Απριλίου 2011 Μέλος Δημοσ. 12 Απριλίου 2011 Δοκίμασα αυτό τον τρόπο: 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
toyotaki Δημοσ. 13 Απριλίου 2011 Μέλος Δημοσ. 13 Απριλίου 2011 >sum=`expr $sum + $outcome` όπου outcome είναι το αποτέλεσμα -.09905867072266786554 ή .26328166185991635721 ή .42298428013586354899 όταν είναι θετικοί κάνει πράξη όταν βλέπει τον αρνητικό βγάζει το μήνυμα non-numeric argument
pinball_elf Δημοσ. 13 Απριλίου 2011 Δημοσ. 13 Απριλίου 2011 >sum=`expr $sum + $outcome` όπου outcome είναι το αποτέλεσμα -.09905867072266786554 ή .26328166185991635721 ή .42298428013586354899 όταν είναι θετικοί κάνει πράξη όταν βλέπει τον αρνητικό βγάζει το μήνυμα non-numeric argument Η expr παίρνει μόνο ακεραίους, οπότε κάνε την πρόσθεση με την bc.
toyotaki Δημοσ. 13 Απριλίου 2011 Μέλος Δημοσ. 13 Απριλίου 2011 Προσπάθησα να το υλοποιήσω σε 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
toyotaki Δημοσ. 13 Απριλίου 2011 Μέλος Δημοσ. 13 Απριλίου 2011 Δοκίμασα αυτό: >sum=0 sum=`$echo "$sum+$outcome" | bc` και έβγαλε αυτό σαν αποτέλεσμα > 0+-.09905867072266786554: command not found
firewalker Δημοσ. 13 Απριλίου 2011 Δημοσ. 13 Απριλίου 2011 sum=0 outcome=-.09905867072266786554 sum=`echo "$sum + $outcome"|bc` Βγάλε το $ πριν το echo.
toyotaki Δημοσ. 13 Απριλίου 2011 Μέλος Δημοσ. 13 Απριλίου 2011 Ευχαριστώ πάρα πάρα πολύ!!!! Ήμουν τόσο κοντά κι όμως τόσο μακριά...προγραμματισμός είναι αυτός.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.