Hi Ionel!
On Mon, 25 Feb 2002, Ionel Mugurel Ciobica wrote:
> Am sapat toata ziua dupa manuale de shell programing. man sh si man csh nu
> m-ua ajutat. Am cumparat 'Unix Shell Programming Tools' de David Medinets,
> 1999 si nici acolo nu gasesc.
>
> Eu sint zero la shell programing, dar nu vreau sa fac munca de mina si
> parca nu as scrie un program in fortran ca sa ma ajute.
>
> Am de creiat multe fisiere de genul:
>
> Co(0001), 1x1 hcp, $i lo+5lv
> 2.4955
> 1.0000000000000000 0.0000000000000000 0.0000000000000000
> 0.5000000000000000 0.8660254037844386 0.0000000000000000
> 0.0000000000000000 0.0000000000000000 $mj
> $i
> Direct
> 0.00000000000000000 0.00000000000000000 $k
> 0.33333333333333333 0.33333333333333333 $l
> ...
>
> unde $i este variabila intr-un ciclu for (la sh) sau foreach (la csh).
> mj = sqrt(2/3) * (4+$i).
>
> k si l sint de forma:
>
> k = 2*z / (4+$i)
> l = (2*z*1) / (4+$i)
>
Nu m-am prins exact de formule, dar mi-a placut problema.
Efectiv o faci cel mai simplu cu bc, sau daca vrei ceva hibrid:
#!/bin/bash
let n=${1:-10};
for((i=1; i<n ; i++)) {
bc -l > fisier_$i.txt <<EOF
i = $i;
mj = sqrt(2/3.0) * (4 + i);
print "Co(0001), 1x1 hcp, ",i ," lo+5lv\n2.4955\n";
print "1.0000000000000000 0.0000000000000000 0.0000000000000000\n";
print "0.5000000000000000 0.8660254037844386 0.0000000000000000\n";
print "0.0000000000000000 0.0000000000000000 ", mj, "\n";
print i, "\n";
for (z=0; z < i/2 ; z++) {
k = 2 * z / ( 4 + i);
l = (2 * z + 1)/ (4 + i);
print "Direct\n";
print "0.00000000000000000 0.00000000000000000 ", k,"\n";
print "0.33333333333333333 0.33333333333333333 ", l,"\n";
}
quit
EOF
}
In fine, din cate inteleg doar mj necesita in virgula mobila cu precizie mai
mare, si pentru asta poti folosi mj=$(echo "mj=sqrt(2/3.0) * (4+$i)" | bc -l)
si dupa aia bucle `for' in bash.
ciao,
-- teodor
---
Send e-mail to '[EMAIL PROTECTED]' with 'unsubscribe rlug' to
unsubscribe from this list.