- ベストアンサー
プログラムの考え方。
コマンドラインから引数を入力してお金の種別に分類せよ。(2000円札は考えない) main関数ではコマンドラインからの引数を判断し、引数の数や値がおかしいときにはエラーメッセージを表示する。正しいときはsyubetu関数にデータを渡してその結果を表示する。 syubetu関数は以下のとおりである。 ・関数名 syubetu ・引数 金額 money(int) 金種格納 kinsyu(int*) ・戻り値 なし ・機能 金額、金種格納用ポインタを引数とし、金種ごとの枚数を計算する関数 こういう問題があって、 コマンドラインの引数に数字を入力したら 一万円札から順番に何枚あるかの種別に分けるプログラムなんですが、 その分類をどうやってさせていいのかがわかりません。 例えば13531とかいれたら 一万円 一枚 5千円 0枚 千円 3枚 5百円 1枚 百円 0枚 50円 0枚 10円 3枚 5円 0枚 1円 1枚 っと表示させます。 この分類のところはどのように考えたらプログラムできるでしょうか? フローチャートを考えている途中なのですが、いまいち考え方がわかりません。 よろしくおねがいします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (7)
- arukamun
- ベストアンサー率35% (842/2394)
- arukamun
- ベストアンサー率35% (842/2394)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
- fm0606
- ベストアンサー率10% (1/10)
- neue_reich
- ベストアンサー率21% (138/647)
- はなおか じった(@Jitta)
- ベストアンサー率42% (69/161)
関連するQ&A
- スタックを用いたプログラム
http://okwave.jp/qa4433705.html 先日教えて戴いた事でスタックがどういったものなのかは わかりましたが、実際にプログラムを作ってみると、 なかなかうまくいけません。再びアドバイスを戴ければと思ってます。 <プログラムの仕様> 入力数値をスタックに格納し'a'が入力されたら、 スタックに格納されている数値を全て取り出し、 平均値を出力するプログラム ・スタックは、push()関数およびpop()関数を実装する ・スタックへの要素の追加はpush()関数で行う ・スタックからの要素の取出はpop()関数で行う ・スタックのサイズは任意とする int push(int push_data); 引数: スタックに追加するデータ 戻り値: 成功の場合1、失敗の場合0を返す int pop(int *pop_data); 引数: スタックから取り出した値を格納するポインタ 戻り値: 成功の場合1、失敗の場合0を返す いざ、自分で作ってみると、 仕様通りには全く作れず、結局main関数ですべてを作って しまうことになってしまいます・・
- ベストアンサー
- C・C++・C#
- コマンドライン引数について。
コマンドライン引数についての質問です。 コマンドライン引数に適当な数字をいれ、金種別にわけるプログラムですが、 コマンドライン引数に負の値や、文字列を入力したときにはエラーが表示させるようにしているのですが、 数字と文字を混合したもののときはエラーが表示されずにそのまま処理されてしまいます。 初めの一文字目が数字だったらそのあとに文字を入れても実行されてしまうようです。 全て数字の場合のみ実行させてそれ以外はエラーメッセージを表示させたいのですが、どのようにすればいいでしょうか? #include <stdio.h> #include <stdlib.h> int syubetu(int money,int *kinsyu); int *kinsyu; int main(int argc,char *argv[]) { int *p,a; p=(int*)malloc(sizeof(int)*9); if(p==NULL){ printf("メモリ確保失敗\n"); exit(1); } a=atoi(argv[1]); if(a>0){ syubetu(a,&p[0]); printf("1万円 %d枚\n",p[0]); printf("5千円 %d枚\n",p[1]); printf(" 千円 %d枚\n",p[2]); printf("5百円 %d枚\n",p[3]); printf(" 百円 %d枚\n",p[4]); printf("50円 %d枚\n",p[5]); printf("10円 %d枚\n",p[6]); printf(" 5円 %d枚\n",p[7]); printf(" 1円 %d枚\n",p[8]); } else{ printf("入力エラー\n"); exit(1); } } int syubetu(int money,int *kinsyu) 800字以上になるため、処理は省略します。
- ベストアンサー
- C・C++・C#
- GDBでCプログラムの関数の引数を変更したい
関数の引数の値を書き換えたいです。 DGBのx/iコマンドでアッセンブラをみて レジスタに格納された引数の値を書き換えようと考えています。 このコマンドで書き換えたい関数の$ebpを見て書き換える予定です。 引数を書き換えたい関数の戻り値が構造体であるかないかで、$ebpからのアドレスの位置が変更されてしまいます。 他に格納されている関数の引数のアドレスが1つに固定できる方法はないでしょうか? できないとしたら、条件で関数の戻り値が構造体かどうかの判断はどこでつければよいでしょうか?
- 締切済み
- Linux系OS
- main関数の事についてお聞きします。
Windowsのプログラムを書くとき、下のようにキッチリ戻り値や引数を書かなくてはならないのに int WINAPI WinMain( HINSTANCE hInstance, // 現在のインスタンスのハンドル HINSTANCE hPrevInstance, // 以前のインスタンスのハンドル LPSTR lpCmdLine, // コマンドライン int nCmdShow // 表示状態 ); C言語で書かれたプログラムは int main(int argc, char *argv[]) ではなく、 int main(void) や void main(void) または int main() や main() だけのモノなど、 いろいろです。 main関数は、関数なのに戻り値や引数を省略して書ける仕様なのは、なぜなのか? ちょっと疑問に思ったのでこちらにお尋ねしました。
- ベストアンサー
- C・C++・C#
- 金種を整理する関数を教えてください。
両替のため、エクセルに関数を入れて、金額を入力するだけで金種を表示させたいのですが、どんな関数がふさわしいでしょうか?教えてください。
- 締切済み
- オフィス系ソフト
- コマンドライン引数の例外処理について
整数a、bをコマンドライン引数として受け取るプログラムを作成するとします。この時、入力するコマンドライン引数を整数であるa、b2つのみとします。 次の事柄について教えて下さい。 (1)コマンドライン引数を2個入力しなかった時の例外処理の仕方 (例えば、コマンドライン引数を入力しなかったり3個入力した時) (2)整数のコマンドライン引数を入力しなかった時の例外処理の仕方 (例えば、「abc」などと入力した場合) (3)コマンドライン引数を数の小さいものから入力しなかった時の処理の仕方 (例えば、「3 5」ではなく「5 3」と入力した場合) 初心者なもので…。どなたかお教え下さい。宜しくお願いします。
- ベストアンサー
- Java
- 関数について教えて下さい
エクセルでセルに金額を入れると、金種(例えば\157,689と入力した場合、1万円が15枚、5千円が1枚、千円が2枚、500円が1枚、100円が1枚、50円が1枚、10円が3枚、5円が1枚、1円が4枚とそれぞれの金種のセルに枚数を表示させる)に振り分けて表示するためにはどの関数を使えばよいのか教えてください。パソコンは超初心者で勉強を始めたばかりなので、恐れ入りますが、出来るだけわかりやすく解説していただければ幸いです。よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- C言語 文字列比較
WindowsAppのコマンドライン引数はLPSTR型ですよね、コマンドライン引数が~だったら、というような条件分岐を作りたいのですが、strcmpは使えません。それで、どうすればいいのか分からなくなってしまい、質問しました。 WindowsAppではあるけど、コマンドラインオプションを使いたいのですが、どうやって文字列をしたらいいのでしょうか? もしstrcmpが使えたとしたら、こういうことをやりたいのです。 int WINAPI WinMain(・・・LPSTR pCmdLine, ・・・) // pCmdLineはコマンドライン引数です。 { ・・・ // 省略 if(strcmp(pCmdLine,"-s") == 0) { ・・・ } ・・・ return 0; } ・・・は省略です。 このようなことをできる関数はありませんか?
- ベストアンサー
- C・C++・C#
- このプログラムにアドバイスをください
問題が ・100個の要素を持った一次元配列をmain()関数内で宣言 ・一次元配列と要素数を引数として持つ関数seisei() ・関数seisei()は乱数を使い渡された配列を0~99の整数で初期化する。 ・一次元配列、要素数そして変数のポインタを引数としてもつ関数goukei() ・関数goukei()は渡された配列に格納された数値の合計を計算し、渡された変数のポインタにその合計値を代入する。 と問題があり、下記のようにプログラムを作ったんですが、どうしてもコンパイルできません。どなたかご指摘よろしくお願いします。 #include <stdio.h> #include <time.h> void seisei(int *,int); void goukei(int *, int, int*); int i, *sum; int main() { int a[100],sum; seisei(a,100); goukei(a,100,&sum); printf("sum:%d\n",&sum); return 0; } void seisei(int *a[i], int n) { srand(time(NULL)); for(i = 0; i <= n; i++){ *a[i] = rand() % 100; } } void goukei(int *a[i],int n,int *sum) { *sum = 0; for(i = 0; i <= n; i++){ *sum += *a[i]; } }
- 締切済み
- C・C++・C#
お礼
回答ありがとうございました。 やっと理解できました。