• ベストアンサー

for文を別のint内で定義し、初めのint文内で呼び出す??? 何という名のプログラム名?ですか???

毎度毎度忙しい中失礼します。現在<私のプログラム>を基に<参照プログラム>のようにプログラムを作り変えようとしていますが、正直お手上げ状態です。 どうしても<参照プログラム>に基づいてプログラムを組まなければならないのです。 どこがお手上げ状態かといえば、<参照プログラム>を参考にすると、int multInts(int x, int y)内の条件の組み方が<私のプログラム>内でどのようにして組めばいいのかが全くもって分かりません。かなり考えても分からないレベルです・・・私にとっては。 int multInts(int x, int y)の定義の仕方を真似て<私のプログラム>でも真似てみるのですが・・・出来ないのです。何をどう直せば良いのでしょうか???初期化でtra=0;とすると、表示は"0"になったりするし・・・。簡単かと思われるかもしれませんが・・・私にとってはかなり難しいのです。 ”丸投げ”みたいな感じで恥ずかしいのですが、どうかアドバイスだけでも下さい。お願いします。 出力結果 1.5桁数字入力:"12345"と入力 (これは出来ます) 2.偶数桁のみ抽出して2倍にする→"14385" (最不明部: <参照プログラム>内のmultInts内の条件を<私のプログラム>内でどのようにして組むのかが分かりません) 3.各桁の数値を足し合わせる→1+4+3+8+5=21(不明部: 2.が出来ないので出来ません) 4.その数値が”妥当”か”不当”かをDOS?画面に表示(不明部:2.と3.が出来ないので出来ません) <私のプログラム> #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int num,tra; int inpt=5; int inptnum; int sum=0; //#define 0 printf("5桁入力; "); scanf("%d", &num); if (num==0){ printf("その値は0です。 \n"); } else{ for(inpt ; inpt >=1 ; inpt--) { if(inpt%2 == 0) { inptnum = pow(10,inpt-1); tra = (num/inptnum)%10; //printf("%d",tra*2); tra=(tra*2)/10+(tra*2)%10; printf("%d",tra); } else{ inptnum = pow(10,inpt-1); tra = (num/inptnum)%10; printf("%d",tra); } sum += tra; } printf("\n %d\n",sum); sum= sum%10; if(sum==0) { printf("妥当な数値です。\n"); } else { printf("不当な数値です。\n"); } } system("pause"); return 0; } <参照プログラム> #include <stdio.h> #include <stdlib.h> int main(){ int multInts(int x, int y); int num1,num2,answer; printf("間にスペース設けて2つの値入力: "); scanf("%d%d", &num1, &num2); answer = multInts( num1, num2); printf("%d * %d=%d\n", num1, num2, answer); system("pause"); return 0; } int multInts(int x, int y) { int result = 0; int i; for (i=1 ;i<=y ;i++) { result=result + x; } return result; }

質問者が選んだベストアンサー

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

理屈だけ書いておくね ○入力された物は「数値」 ○これを「桁毎にバラす」という方法が必要  ◆演算によって1桁ずつ取り出す  ◆そもそも入力を文字列にしてしまって後で数値に戻す  のどちらかの方法が考えられる いずれにしても「配列」という概念が必要になるかもしれないね

jpncndgoo2
質問者

お礼

アドバイスありがとうございます。 更にアドバイス等あれば、また書き込んでやってください。

jpncndgoo2
質問者

補足

!「桁毎にバラす」というアドバイスから、今自分なりに自分に合ったレベルに落として、プログラムを組み直しています。 また、分からなくなったら質問することにします。 皆さん色々とアドバイスありがとうございました。

その他の回答 (2)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>これを<参照プログラム>に倣って<私のプログラム>内で組みたいのです。 もう一度言いますが、参照プログラムに倣う必要性をまったく見出すことができません。あえて「for ループを見倣っています」と強弁する程度の意味しかなさそうです。 自分で好きなようにコーディングするのが吉。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>どうしても<参照プログラム>に基づいてプログラムを組まなければならないのです。 これが全く理解不能です。multInts(int x, int y); で単に x * y ( y ≧ 0 ) ですよね?なぜ必要なのですか? ANo.1 の方も指摘しているように、入力を「文字列」として受け取ってしまうのが最もわかりやすいと思います。

jpncndgoo2
質問者

補足

主プログラム内::"12345"と入力→福プログラム内呼び出し→21%10=1→”不当な数値”と表示する 福プログラム内:"12345"→”14385"→"1+4+3+8+5=21"処理を行う これを<参照プログラム>に倣って<私のプログラム>内で組みたいのです。 というプログラムを作りたいのです。 よろしければ再アドバイス願います。

関連するQ&A

  • ???ダメなんです(分からないんです)。 for文内の結果を呼び出す感じのプログラム文???

    いつもいつも大変忙しい中失礼します。http://oshiete1.goo.ne.jp/qa3432182.htmlでも質問しましたが、現在そのプログラムをさらに発展させて、下記のようなプログラム文を組もうとしています。<私のプログラム文>から ”123” と入力した場合、偶数桁のみを2倍した後、 ”答え 4” の値を返そうとしていますが、相も変わらず出来ません・・・。どなたか分かる方がいらっしゃいましたらアドバイス等願います。・・・本当にいつもいつも迷惑かけます。 出力結果 数字3桁入力:”123”と入力  (余談:最終的には数字を5桁まで増やします。”12345”→”14385”と出力するつもりです。) ---計算過程---偶数桁”2”を2倍する 答え 4 ←これを導き出すことが出来ません(私の回答: 答え 2147348480 ) といいますか、返したいのですが、出来ないのです。 何故? <参照プログラム文>を真似て、<私のプログラム文>を自分なりに作り、コンパイルは通るのですが、・・・値が期待したものと違い、どこをどういじればいいのかに悩んでいます。 <参照プログラム文>を私なりに解説させていただくと、printf文内の”triple(number)”のnumberはint xを意味しています。int triple(int x)文内のプログラムを返すらしいのです。 <私のプログラム文> #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int valid(int x); int number; int tra; printf("数字3桁入力: "); scanf("%d", &number); printf("答え %d\n", valid(number)); system("PAUSE"); return 0; } int valid(int x) { int i; int inptnum; int tra; for (i=3; i>=1; i--) { if(i%2==0){ inptnum=pow(10,i-1); tra=(x/inptnum)%10; tra=(tra*2)/10+(tra*2)%10; } return tra; } } <参照プログラム文> #include <stdio.h> #include <stdlib.h> int main() { int triple(int x); int number; printf("数字? \n"); scanf("%d", &number); //printf("%d\n", number*3); printf("%d\n", triple(number)); system("PAUSE"); return 0; } int triple(int x) { x *= 3; return x; }

  • 簡単なようで分からない?for文での加算処理方法及び出力表示方法

    忙しい中失礼します。 ・・・???分からないので質問させていただきます。 プログラム過程 1.5桁の数値入力: 68562 2.偶数桁のみ2倍する: 8x2=16 6x2=12 3.68592→6165122という処理を行う。 4.6165182→処理:6 1+6 5 1+2 2→再度5桁表示:67532 (※2桁目と4桁目の数字が1.とは異なります) 5.67532各桁の加算処理を行い(6+7+5+3+2=23)、”23”をディスプレイ上に表示させる。 希望出力結果:    5桁入力 68592 67532 合計 23    ←加算処理方法及び出力表示方法(ここが分からないのです) を望んでいます。 分からないところ:どうやって67532の加算処理を行い、どうやってそれをディスプレイ上に表示させれば良いのかが分かりません???            以下のプログラム[1]、[2]から、[2]を[1]に組み込もうとしています。ですが、[2]for文のカッコ内()の条件???、及び[2]を[1]のどこに組み込めば”合計23”が表示されるのかも分かりません。 そもそもfor文で行うこと自体が無理?そんなことはない、と思っているのですが・・・。それとも[2]を[1]に組み込もうとしてること自体が間違っている?のですかね??? 大変忙しいとは思いますが、アドバイス等ありましたらお願いします。 <使用環境: Borland?? C> [1] 1~4までのプログラミング(完成済) #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int num,tra; int inpt=5; int inptnum; int s; printf("5桁入力; "); scanf("%d", &num); for(inpt ; inpt >=1 ; inpt--) { if(inpt%2 == 0) { inptnum = pow(10,inpt-1); tra = (num/inptnum)%10; s=(tra*2)/10+(tra*2)%10; printf("%d",s); } else {inptnum = pow(10,inpt-1); tra = (num/inptnum)%10; printf("%d",tra);} } system("pause"); return 0; } [2]単独での加算処理プログラム(完成済) #include <stdio.h> #include <stdlib.h> int main() { int count; int Sum; Sum=0; for (count = 1; count <= 6; count++) {printf("%d ",count); Sum = Sum + count; } printf("\nSum%d\n", Sum); system("pause"); return 0; }

  • for文を使ったプログラムで困っています

    for文を使って、10000からある数xを何回引けるか?またその残りを求めるプログラム(例:10000から3000は3回引くことができ、残りは1000である。)を作りたいのですが、引く回数が1多くなってしまいます。どこがいけないかわからないので困っています。よろしくおねがいします。 #include<stdio.h> void main() { int x; int Sa = 10000; int y; printf("10000以下の数を入力してください:"); scanf("%d",&x); for(y = 1; y*x <= 10000 ; y++) { Sa = Sa - x; } printf("10000から%d回引くことができます。\n",y); printf("残りは%dです。",Sa); }

  • for文

    #include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp;   } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。

  • c言語 for文

    /*指定された個数だけ整数を読み込んで合計値・平均値を算出*/ #include <stdio.h> int main(void) { int i; int sum=0; int num,tmp; printf("整数は何個ですか:"); scanf("%d",&num); for(i=0;i<num;i++) {printf("No.%d:",++i); scanf("%d",&tmp); sum = sum + tmp; } printf("合計値:%d\n",sum); printf("平均値:%.2f\n",(double)sum / num); return(0); } C言語の勉強を始めたばかりのものです。 指定された個数だけ読み込めません 汗 前置と後置をまぜたあたりがよくないのかなと思うのですが。。。 どうしておかしくなるのか教えてください。 内部でどういった処理が行われているのかまだあまりわからない状態です。 ちなみに4と入力した結果は以下です。 整数は何個ですか:4 No.1:4 No.3:3 合計値:7 平均値:1.75

  • 文字列をint型へ変換するには?

    c言語初心者です。 こちらのプログラムだとうまく表示されません何故でしょう? わかる方是非教えていただきたいと思います。 #include<stdio.h> #include <stdlib.h> int main() { int  num ;     char sum1[4]; printf("数字 str1 =>"); scanf("%d",&num); num= atoi(sum11); printf("sum1= [%d]\n",num); } コマンドに数字を入力したあとintに変換してnumに表示させたいのですが、、、、

  • ループ

    #include<stdio.h> int main(void) { int i=1,sum=0; int num=1; while(num>0) { printf("整数を入力してください。(マイナスの値で終了)\n"); scanf("%d",&num); printf("%dが入力されました。(%d番目の繰り返しです)\n",num,i); sum+=i; printf("1から%dまでをたすと%dです。\n",i,sum); i++; } printf("繰り返しが終わりました。\n"); printf("加算値は%dです。\n",sum); printf("%d回繰り返しました。\n",i); return 0; } このプログラムで101以上の数値は加算しないようにするにはどうすればいいですか。

  • c言語で平均をだす

    #include<stdio.h> int main(void) { int num; int sum; printf("テストの点数を入力してください。\n"); do{ scanf("%d",&num); sum+=num; }while(num); printf("テストの合計点は%dです\n",sum); return 0; } テストの平均点をだすプログラムを作りたいのですが、合計を出すまではわかったのですが、ここから、平均を出すようにするにはどうすればよいですか。

  • for文

    整数を読み込んで、その値を0までカウントダウンしながら表示するプログラム作りたいのですが、 while文ではできたのですが、for文ではうまくいきません。 どこが間違っているのでしょうか? OS:Windows XP C++Builder X パーソナル #include <stdio.h> int main(void) { int i; int num; printf("整数を入力してください:"); scanf("%d", &num); for(i = num; i <= 0; --i) { printf("%d", i); } return 0; } 宜しくお願いします。

  • while for/ if else/do while文を使い”640968592”の各数字を独立させて取り出すことは可能でしょうか?

    忙しい中失礼します。 今以下のようなプログラミングを組もうとしています。 1.”640968592”といった9桁の数字を入力→scanfで入力(これは出来ます) 2.各桁の数字を独立させて取り出す:”6” ”4” ”0” ”9” ”6”・・・といった具合に(これも一応出来ます) 3.偶数桁は2倍する   2桁目:4x2=8   4桁目:9x2=18   6桁目:8x2=16   8桁目:9x2=18 そして、私の場合、以下のようなプログラムになるのですが、これがなんとも不細工な感じがし、スマートにプログラムを変更したいと思っています。 抱えている問題:while for/ if else/do while文などを用いて、下記のプログラムを書き直すことは可能なのでしょうか?例え出来たとしても、文int=num1~num35までの定義も減らすことは可能なのでしょうか? 手も足も出ない・・・ プログラム内容 #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int num1,num2,num3,num4; /*8 9桁目*/ int num5,num6; /*7桁目*/ ・ ・ ・ int num15,num16; /*2桁目*/ int num17; /*1桁目*/ int num19,num20,num21,num22,num23,num24,num25; int num26,num27,num28,num29,num30,num31,num32; int num33,num34,num35; printf("Write the SIN: "); scanf ("%d", &num1); num2=num1 / pow(10, 8); //9桁目 num3=num1 / pow(10, 7); //8桁目 num4=num3 % 10; num5=num1 / pow(10, 6); //7桁目 num6=num5 % 10; ・ ・ ・ num15=num1/pow(10, 1); //2桁目 num16=num15%10; num17=num1%10; //1桁目 num19=num4*2; //8桁目計算 num20=num19/10; num21=num19%10; num22=num20+num21; ・ ・ ・ num31=num16*2; //2桁目計算 num32=num31/10; num33=num31%10; num34=num32+num33; system("pause"); return 0; } こんなのが直ぐにプログラムとして早く組めるようになりたい・・・ どうしても頭に浮かばないのです。アドバイス等あればお願いします。 <使用環境:フリーソフト(Borland?)C ANSI C>

専門家に質問してみよう