területszámítás

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"

Hozzászólások

Mekkora az a nagy szám?

Nem fordul át az integer valahol?

Szerkesztve: 2022. 05. 06., p – 18:50

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"

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>

Control gorgovel tudsz kisebb szamokat irni. Bocs, mar ittam. :-)

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.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

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?