C言語関係掲示板

過去ログ

No.967 つり銭の紙幣の枚数を計算

[戻る] [ホームページ]
No.12471

何かがたりないんです
投稿者---ファントム(2004/02/04 22:07:34)


なんかたりないんすstatic の前に入るみたい?なんだけどわかりません
教えてください
#include<stdio.h>
#define TBLSIZE 5
int main(void){
static int money[]={1000,500,100,50,10},stock[]={0,10,10,10,10};
int VendingMachine(int price,int input[],int output[])
{
int change,k,paid,retval;
paid=0;
for(k=0;k<TBLSIZE;k++){
paid+=input[k]*money[k];
}
change=paid-price;
if(change!=0){
for(k=TBLSIZE;k++){
output[k]=change/money[k]
if(output[k]>stock[k])
output[k]=stock[k];
change-=output[k]*money[k];
}
if(change>0){
for(k=0;k<TBLSIZE;k++)
output[k]=input[k];
retval=-1;
}else{
for(k=0;k<TBLSIZE;k++)
stock[k]=stock[k]+input[k]-output[k];
retval=1;
}
}else{
for(k=0;k<TBLSIZE;k++)
output[k]=0;
stock[k]+=input[k];
}
retval=0;
}
return retval;
}


No.12473

Re:何かがたりないんです
投稿者---あかま(2004/02/04 22:29:22)


>なんかたりないんすstatic の前に入るみたい?なんだけどわかりません
>教えてください
まず説明が足りない。
「何をするプログラムで、どういう動きを期待しているけど、こう動いてしまう」
ぐらいの説明はしてください。
なんのプログラムか分からないでアドバイスはできません。
それからプログラムを貼り付ける時はHTML変換ツールを使ってください。

で、プログラムの内容は分かりませんが、文法上は15行目にセミコロンがありません。
それからmain関数内に関数を書いてますが普通こういう書き方はしないです(できるかどうかもしらない)。

No.12474

Re:何かがたりないんです
投稿者---namani(2004/02/04 22:31:51)


ついでに14行目のfor文もおかしぃです。
終了条件がないですねぇ。

No.12475

Re:何かがたりないんです
投稿者---おでん(2004/02/04 22:34:15)


「C言語ソース⇒HTML形式ツール」を使って、インデントは必ず付けてください。

#include<stdio.h>
#define TBLSIZE 5
int main( void ) {
    static int money[] = {1000,500,100,50,10}, stock[] = {0,10,10,10,10};
    int VendingMachine( int price, int input[], int output[] ) { ←関数“main()”の中に関数“int VendingMachine()”が有ります。
        int change, k, paid, retval;
        paid = 0;
        for( k = 0; k < TBLSIZE; k++ ) {
            paid += input[k] * money[k];
        }
        change = paid - price;
        if( change != 0 ) {
            for( k = TBLSIZE; k++ ) { ← for文の書き方が違います。
                output[k] = change / money[k] ←';'が有りません。
                if( output[k] > stock[k] )
                    output[k] = stock[k];
                change -= output[k] * money[k];
            }
            if( change > 0 ) {
                for( k = 0; k < TBLSIZE; k++ )
                    output[k] = input[k];
                retval = -1;
            } else {
                for( k = 0; k < TBLSIZE; k++ )
                    stock[k] = stock[k] + input[k] - output[k];
                retval = 1;
            }
        } else {
            for( k = 0; k < TBLSIZE; k++ )
                output[k] = 0;
            stock[k] += input[k];
        }
        retval = 0;
    }
    return retval; ←宣言されたブロック外です。
}

>なんかたりないんすstatic の前に入るみたい?なんだけどわかりません
>教えてください

エラーになるのでしょうか?
・・・gccで出たエラーです。
~ >cc tst.c
tst.c: In function `VendingMachine':
tst.c:13: error: syntax error before ')' token
tst.c: In function `main':
tst.c:28: error: syntax error before "else"
tst.c:29: error: `k' undeclared (first use in this function)
tst.c:29: error: (Each undeclared identifier is reported only once
tst.c:29: error: for each function it appears in.)
tst.c:29: error: syntax error before ')' token
tst.c:31: error: `input' undeclared (first use in this function)
tst.c: At top level:
tst.c:33: warning: data definition has no type or storage class
tst.c:34: error: syntax error before '}' token


No.12478

Re:何かがたりないんです
投稿者---ファントム(2004/02/04 23:27:09)


返事ありがとうございました。
これ自動販売機に投入された金額と商品の差額から、つり銭として返却する各紙幣の枚数を計算するプログラムなんすよね
難しすぎですよね

No.12480

Re:何かがたりないんです
投稿者---おでん(2004/02/05 00:19:46)


>返事ありがとうございました。
>これ自動販売機に投入された金額と商品の差額から、つり銭として返却する各紙幣の枚数を計算するプログラムなんすよね
>難しすぎですよね

難しいと思うのは、なんですか?
ヒント(一応動きますが、ちゃんと確認していません)

#include <stdio.h>
#include <stdlib.h>

int main( int agc, char * agv[])
{
    static const int mon[]= { 5000,1000,500,100,50,10, 0} ;
    int pos= 0 ;
    int cnt= 0 ;
    int pay= atoi(agv[1]) ;

    while( pay < mon[pos] ){
        pos++ ;
    }
    while( mon[pos] != 0 ){
        cnt= pay / mon[pos] ;
        pay -= cnt * mon[pos] ;
        printf( "%d:%d\n",mon[pos],cnt) ;
        if( pay < 0 ){
            break ;
        }
        pos++ ;
    }

    return 0 ;
}


実行結果

~ >./a.out 123450
5000:24
1000:3
500:0
100:4
50:1
10:0
~ >


No.12484

Re:何かがたりないんです
投稿者---YuO(2004/02/05 01:31:36)


>これ自動販売機に投入された金額と商品の差額から、つり銭として返却する各紙幣の枚数を計算するプログラムなんすよね
>難しすぎですよね

アルゴリズムの問題ですから,ちゃんと考えてからプログラムを書けばそれほど難しくないですよ。
#紙幣の枚数というと拾圓紙幣とかですか?

まずは,釣り銭の額に対して,どのような硬貨・紙幣の組み合わせで返すのか,
また,どうしてそういう組み合わせで返しているのかを徹底的に考えることです。


余談になりますが,このあいだC++:language&libraries for NovicesというC++のメーリングリストにおいて,
同じようなネタをやっていました。
[cppll_novice:0113] <exam> 金種計算

「買った物の金額」を相手にしていますが,やることは一緒です。
[cppll_novice:0129] Re: <exam> 金種計算あたりは参考になるかと思いますよ。


No.12507

Re:何かがたりないんです
投稿者---鷹(2004/02/05 22:27:27)


>いろいろ返事ありがとうございました。助かりました