Translate

2014年11月15日 星期六

//DSPP-Infix-to-Postfix:中序轉後序(整數運算)
//輸入:
//中序整數運算表示法。
//
//輸出:
//後序整數運算表示法。
//所有運算元及運算子都以一個Space隔開

//修改以下程式
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>


#define SIZE 100

typedef struct
{
    size_t top;
    int items[SIZE];
} STACK;

int isFull_stack(STACK *);
int isEmpty_stack(STACK *);
void push_stack(STACK *, int );
int pop_stack(STACK *);
void postfix(char [], STACK *);
int priority(char );

int main( void )
{
    STACK s={0};
    char c;
    char in[80];
    int i=0;
    while ( scanf("%c",&c) ){ //A+B-C*D-(E+F/G)
        if(c!= ' ') in[i++] = c;
        if ( c == 10 ) break; 
    }
    postfix(in,&s); 
}

int isFull_stack(STACK *s)
{
    return (s->top == SIZE)?1:0;
}

int isEmpty_stack(STACK *s)
{
    return (s->top == 0)?1:0;
}

void push_stack(STACK *s, int a)
{
    if ( isFull_stack(s) )
    {
        fprintf(stderr,"%s","stack is overflow\n");
        exit(1);
    }
    else
    {
        s->items[s->top++] = a;
        //fprintf(stdout,"%d is pushed into stack. top=%d\n",a,s->top);
    }
}
int pop_stack(STACK *s)
{
    int tmp;
    if ( isEmpty_stack(s) )
    {
        fprintf(stderr,"%s","stack is underflow\n");
        exit(2);
    }
    else
    {
        tmp = s->items[--s->top];
        //fprintf(stdout,"%d is popped from stack. top=%d\n",tmp,s->top);
        return tmp;
    }
}

void postfix(char infix[], STACK *s)
{
    int i=0;
    char c,tmp;
    while ( (c=infix[i++]) != 10 ) // newline
    {
        if ( isalpha(c) )  printf("%c ",c);//operands
        if ( isdigit(c) ){ 
            int d = c - 48;
            while(isdigit(c = infix[i++]))
            
                d = d*10 + (c-48);
                printf("%d ",d);
        }
            
            if ( c == '(' ) 
                push_stack(s,c);
            else if ( c == ')' )
            {
                while ( (tmp = pop_stack(s)) != '(' )
                    printf("%c ",tmp);
            }
            else
            {
                while ( !isEmpty_stack(s) && priority(c) <= priority(s->items[s->top-1]) )
                    // <= for left associative, < for right associative
                {
                    tmp = pop_stack(s);
                    if (tmp != '(') printf("%c ",tmp);
                }
                push_stack(s,c);
            }
        
    }
    while ( !isEmpty_stack(s))
        printf("%c ",pop_stack(s));
}

int priority(char c)
{
    switch(c)
    {
    case '+':
    case '-':
        return 1;
    case '*':
    case '/':
    case '%':
        return 2;
    case '(':
    default:
        return 0;
    }
}

2014年6月22日 星期日

好壞球理論 _ 網路轉載

好壞球理論(網路流傳文章)

「當聽到有人罵你時,不要太快反應、太過敏感,很容易生出是非。」

如果人家不喜歡你,因而說出一些故意誣賴、栽贓、辱罵的話,我們不需要猛力揮棒來回應,因為那個球投得太壞。

「喂,妳也喜歡看棒球啊!」

我一邊在跑步機上執行健身計劃,一邊盯著眼前的棒球賽,正看得聚精會神的時候,有人跟我說話,害我嚇了一跳!

原來是與我同一健身房,有數面之緣的張先生,他在隔壁的跑步機上,也在看棒球轉播,我太專注了,沒注意到熟人就在身旁。

先生是某出版公司的老板,是個溫儒謙恭的人,他曾說,他每天的娛樂,就是看看四書五經、寫寫毛筆字和上健身房。

他的太太偶爾也會來,但從來不運動,只愛在女子三溫暖裡頭,大聲的聊天,個性很熱情,但有時還挺呱噪的,張先生顯得沈默寡言許多。

聊了幾句有關棒球的話,先生說出了他在棒球比賽中領悟的道理
「妳可能不知道,我年輕的時候,非常會跟我太太吵嘴,一度吵到要離婚,當初我很喜歡她的善良、熱情和直率,可是婚後,我發現直腸子也挺可怕的,講話像飛機投炸彈一樣,有時難免會炸到不該炸的地方,我們動不動就吵起來。

直到有一天看棒球,我忽然領悟了一個應答的理論:
如果我是個打擊手的話,總不該什麼球都打吧?
應該要選好球才打,如果她投出的是壞球,那麼我幹嘛一直揮棒呢?
壞話就當沒聽見,她球投偏了,未獲得回應就會自討無趣,如果我連壞球都打鐵遭三振,也會氣死自己。

我覺得他的好壞球理論很有意思。

雖然,投手和打擊手應該屬於敵隊,對婚姻關係而言,也許不那麼適用,但拿這理論來看職場上的人際關係,還真有幾分道理:如果人家不喜歡你,因而說出一些故意誣賴、栽贓、辱罵的話,我們不需要猛力揮棒來回應,因為那個球投得太壞,你再使力也不會打出全壘打,搞不好反而會被敵隊接殺,不如讓它無聲無息的落入捕手的手套裡。

壞球,不要打;值得打的球,再回應好了!

--------------------------------------------------------------------------------------------------------
善意像顆球,丟出還會再回來(網路流傳文章)
有一次家人一起到一家西餐廳用餐。那天客人滿多的,菜出得慢,不過還好,陸續送了來,大家開始用餐,吃到甜點時,我點的餐還沒送來,因為是一家人,所以我吃一點你的前餐,你吃一點他的主菜,大家都沒注意到這事,但我沒忘記。
送飲料來時,服務小姐很不好意思地詢問:是不是還一份餐未送來?

我說「是」,服務小姐很客氣的說了一聲「對不起」就離開了。

不到三十秒,老闆娘帶著大廚到我旁邊,連聲抱歉,說剛把主菜放下去而已,
還要一二十分鐘,問我能不能等一下,或者要退掉?

我答:「沒關係,我知道你們今天忙,難免會慢一些,我等一下好了,等好的時候幫我打包起來,我帶回家。」老闆娘跟大廚連聲道謝離開。

然後,原來沒點餐的小朋友都有了甜點、水果與飲料。

埋單時,我驚訝地問說是否算錯了,老闆娘在旁邊解釋道:「因為你的諒解與客氣,所以餐點打八折,沒上桌的那一份免費,小孩子的附餐也免費招待。」

我笑笑說:「妳太客氣了。」

老闆娘回了一句話:因為你的客氣,所以不得不讓我們更客氣!

我笑著離開,不因少花錢,只因「客氣」也可以傳染給別人…… 

我的工作,讓我常常有機會介紹想裝潢的客戶給做室內設計的朋友,按照行規,或多或少總會有些介紹費,但我從來沒接受。大概是從高中開始,當朋友要回報我對他們的幫助時,我總是拒絕。

我只認真的告訴朋友,那天我需要幫助,拉我一把就好了。

因此,當我須全家外出離家數天時,我不用擔心家裡的魚會餓死、花會枯死,當我需要搬運東西時,我不用找搬家公司﹔當我無車可用時,不必擔心沒人載……。

善意與幫助像是一顆球,當你毫不遲疑的將球丟向對你招手的人之後;
有天,當你也在招手時,也會有顆球飛到你手中,或者,還不只一顆........。 

費"事"數列 費"氏" 真的很費事呢




2014年5月10日 星期六

輸入十進制轉換成二進制

方法一.
#include<stdio.h>
int main()
{
    int n,i,k;
    printf("輸入一個十進制整數");
    scanf("%d",&n);
    printf("%d 轉換成二進制為:\n",n);
    for(i=31;i>=0;i--)
    {
        k = n >> i;
        if(k&1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
}


























----------------------------------------------------------------------------------
方法二.
#include <stdio.h>
void i2b(int);
int main ( void )
{
    int n;
    printf("輸入一個十進制整數");
    scanf("%d",&n);
    i2b(n);
    return 0;
}

void i2b(int n)
{
unsigned int mask=0x80000000;  /*------------------>32bit*/
int i;
printf("%d 轉換成二進制為:\n",n);
    for(i=31;i>=0;i--){
    printf("%c",(n&mask)?'1':'0');    /* AND 其中一個是0就0 類似"乘號" 搭配 三元運算子 */
    n<<=1;    /* n=n<<1 */
    }
}

binary10000000000000000000000000000000
binary bytes10000000 00000000 00000000 00000000
decimal2147483648
decimal (formatted)2,147,483,648
dotted decimal128.0.0.0
hex bytes80 00 00 00
hexidecimal80000000
IPv6::8000:0
octal20000000000
表格轉自:http://www.numberplanet.com/number/80000000/

2014年5月3日 星期六

if....else if..... else V.S if.....if......if....

如果改成這樣  ㄟ   發現也能有相同結果ㄟ
#include<stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    if(x<0)
        printf("x is negative\n");
    if(x==0)
        printf("x=0\n");
    if(x>0)
        printf("x is postive\n");
}
先來看看if.....else....最單純的  二選一觀念吧  喔  
只要上面那行if成立就不做else
只要上面那行if不成立就代表else成立

  
之後這題應該可看出if...if...if...跟if...else if....else 的差別了
先刪掉(b)  else後面不可加括號條件 (d) 你是來亂的嗎0.0|||
之後的(a)喔   每行都做的意思第一個if成立了第二個也成立通通都做通通都執行相近的指令
(c)呢????喔   原來如此是二選一阿    第一個if成立了之後下面那個else if 就不鳥它了
再看看一個降冪排列的問題

if...if...if... (一行一行照做) VS if...else if...else(三選一)   所以這裡要使用前面那個呢 

進位小表格