Van ez a területszámításos programkód, ami valamiért nagy számokkal nem müködik!
#!/bin/bash
terulet () {
return $(expr $1 \* $1)
}
echo -n " Add meg a négyzet oldalának hosszát:"
read OLDAL
terulet $OLDAL
TERULET=$?
echo " a négyzet területe: $TERULET"
- 526 megtekintés
Hozzászólások
Mekkora az a nagy szám?
Nem fordul át az integer valahol?
- A hozzászóláshoz be kell jelentkezni
Mondjuk 100 -nál, már nem jó!
- A hozzászóláshoz be kell jelentkezni
Mit jelent az, hogy nem jo? Pofancsap egy peklapattal, vagy elarulod, hogy milyen inputra, milyen outputot ad? :D
- A hozzászóláshoz be kell jelentkezni
Az oldal hossza 100, erre kiszámolja 16- nak a területet!
- A hozzászóláshoz be kell jelentkezni
Ez teljesen normális. 39-szer túlcsordul a 8 bites érték (39*256=9984) a maradék érték pedig 16.
- A hozzászóláshoz be kell jelentkezni
A return 0-255-ig terjedő értéket tud visszaadni. (az exit status egy 8 bites érték)
Amit Te szeretnél, arra nem az exit status-t kell használni, hanem az stdout-ot, pl. a Te kódodat átírva:
#!/bin/bash
terulet () {
echo $(expr $1 \* $1)
}
echo -n " Add meg a négyzet oldalának hosszát:"
read OLDAL
TERULET=$(terulet $OLDAL)
echo " a négyzet területe: $TERULET"
- A hozzászóláshoz be kell jelentkezni
Az oké, hogy a prog.hu piacát akarjuk elvenni, de azért próbáljuk meg megtalálni a lehetőséget a programok programként formázására. Kb ilyesmi:
<pre><code>
#!/bin/sh
echo 'Hi'
</code></pre>
- A hozzászóláshoz be kell jelentkezni
Ráadásul újabban már van forráskód gomb is, ahol ráadásul még a bash is kiválasztható..
- A hozzászóláshoz be kell jelentkezni
Control gorgovel tudsz kisebb szamokat irni. Bocs, mar ittam. :-)
- A hozzászóláshoz be kell jelentkezni
Ezen konkrétan besírtam: D Amúgy a kollégának ajánlom, hogy dc-vel, bc-vel, calc-kal, esetleg hasonlóval számolja ki, azok jobb számolási funkcionalitással rendelkezdnek. Akár még Pyhton, Octave, Julia, R script is játszhat, de azok már overkill kategória egy négyzet területének a számítására. A POSIX shell matematikai funkció nem épp a legjobbak, nem csak a Control görgővel megnövelt gigantikus számok esetén, de pl. lebegőpontos számítások se rendesen támogatottak, preciziója szar, stb., és nem csak a visszatérési érték 8 bites mérete a gond. Nem matekozásra lett kitalálva a hagyományos shell nyelve.
Én ebben a szerepkörben a calc-ot preferálom, ez nem a LibreOffice Calc, ez az „C-syle arbitrary precision calculator”, egy CLI interpreter progi, alig pár kilobájt, a bc-re épül. Másodperc törtrése alatt számol ki bármit, gigantikus hatványokat, orbitális faktoriálisokat, több százezer számjegy, millió tizedesjegy pontosságig (és tovább, de akkor fokozatosan lassul), kezel komplex számokat, mátrixokat, vektorokat, vektorműveleteket, mindenféle trigonometrikus, hiperbolikus függvényt, számelméleti számításokat, programozható-szkriptelhető. Kezel akármilyen hosszú műveletsort, kezel history-t (vissza lehet hívni műveletsorokat, eredményeket, mivel readline-t támogat tud, Emacs és vi gyorsbillentyűket is), talán RPN-t is (bár arra a „dc” jobb). Mivel apró, CLI alkalmazás, platform- és architektúrafüggetlen, akár még hajbi kedvenc P3-ján, vagy egy Rpi-on, tty-ban, SSH konzolban is elmegy, hivható, átadható shell scriptben épp úgy. Annyira nem tud sokat, mint mondjuk egy Python numpy, sympy, stb. modulokkal, vagy egy Wolfram alpha, de azért badass, és sokkal minimalistább, kisebb progi, kevesebb függőség. Bőven veri a shellt, meg a nyomiknak való egérrel kattintagok a szépen dizájnolt GUI-s számológépre történeteket.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
"meg a nyomiknak való egérrel kattintagok a szépen dizájnolt GUI-s számológépre történeteket" :-D :-D :-D
- A hozzászóláshoz be kell jelentkezni
A bash nem C, a return az egy 8 bites szám, arra való, hogy a függvény státuszát visszaadd, nem aritmetikára van kitalálva.
Kifogtál valami ősrégi tutorial-t vagy házi feladat?
- A hozzászóláshoz be kell jelentkezni
Mar megint az a franya "!"!
- A hozzászóláshoz be kell jelentkezni