分页: 1 / 1

新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-14 22:08
yetone
本人小白,这几天准备学习一下shell scripts,无意间弄了个C语言的绘圆程序,看似简单,随即想通过shell scripts来移植一下,顺便练练手,但是屡试屡败,望高手赐教,感激不尽
C程序源码:

代码: 全选

#include<stdio.h>  
#include<math.h>  
int main()  
{  
        double y;  
        int x,m;  
        for(y=10;y>=-10;y--)  
        {  
                m=2.5*sqrt(100-y*y); /*计算行y对应的列坐标m,2.5是屏幕纵横比调节系数因为屏幕的 
行距大于列距,不进行调节显示出来的将是椭圆*/  
                for(x=1;x<30-m;x++)  
                        printf(" "); /*图形左侧空白控制*/  
  
                printf("*"); /*圆的左侧*/  
  
                for(;x<30+m;x++)  
                        printf(" "); /*图形的空心部分控制*/  
  
                printf("*\n"); /*圆的右侧*/  
        }  
        return 0;  
}
鄙人移植的shell scripts:

代码: 全选

#!/bin/bash
for ((y=10;y>=-10;y=y-1))
do
	m=$(printf "%.f" $(echo "2.5*sqrt(100-$y*$y)"|bc))
	for ((x=1;x<30-$m;x=x+1))
	do
		printf " "
	done
	printf "*"
	for ((;x<30+$m;x=x+1))
	do
		printf " "
	done
	printf "*\n"
done
执行后出现:

代码: 全选

(standard_in) 1: parse error

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-14 22:36
lilydjwg
shell 不是用来做计算的。

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-15 7:50
fnan
#练习而已,一般计算也行。
m=$(printf "%.f" $(echo "2.5*sqrt(100-($y*$y))"|bc))

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-15 10:32
yetone
fnan 写了:#练习而已,一般计算也行。
m=$(printf "%.f" $(echo "2.5*sqrt(100-($y*$y))"|bc))
Thanks,shell的确是诡异啊

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-15 14:24
yetone
fnan 写了:#练习而已,一般计算也行。
m=$(printf "%.f" $(echo "2.5*sqrt(100-($y*$y))"|bc))
谢谢你,你可以帮我解释一下为什么要加括号吗? :em03

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-15 14:43
eexpress
括号,就是获取结果。
等于一串命令的组合。可以用``代替。
shell作这事情,是傻。

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-15 14:46
yetone
eexpress 写了:括号,就是获取结果。
等于一串命令的组合。可以用``代替。
shell作这事情,是傻。
谢谢eexpress大人的指教,sheel的确不适合计算,只是拿来练练手, :em02 嘿嘿

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-15 20:43
fnan
括号是提取结果,这里有个关键问题:
$(echo "2.5*sqrt(100-($y*$y))"|bc))
#100-$y*$y 并不是数学表达式,而是echo的参数,*只是普通字符,!无优先级别! 不加括号的话,echo如实变量扩展为:100--10*-10,传给bc就是格式错误,所以也可以这样:
$(echo "2.5*sqrt($((100-$y*$y)))"|bc))

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-15 23:03
ChenFengyuan
eexpress 写了:括号,就是获取结果。
等于一串命令的组合。可以用``代替。
shell作这事情,是傻。
同意,用lisp代替就好了。 :em09

Re: 新手求助,怎样通过shell scripts用*绘制圆形

发表于 : 2011-10-17 19:07
fnan
真认为LZ想画圈圈?