忙しい中失礼します。
・・・???分からないので質問させていただきます。
プログラム過程
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;
}
No.1
- 回答日時:
動作確認はしていませんが
//valに67532が入っているとする
sum=0;
for(;;)// while(ture)のほうが好きですが
{
sum+=val%10;
val/=10;
if(val<=0)
{
break;
}
}
こんな感じ
この回答への補足
早速のアドバイスありがとうございます。
ですが、67532は桁’有’の数値ではなく、67532は桁’無’の数値で、各自独立した('6' '7'・・・というように)数値としてディスプレイ上に表示されています。それを上記の[1]プログラムから、どうすれば桁’有’の数値として認識されるのでしょうか?
宜しければ再アドバイス願います。
アドバイスありがとうございます。
上記のプログラムに倣って、プログラムを組んだりしたのですが、ダメでした。
私の為に案を出して頂きありがとうございました。
No.2
- 回答日時:
traに各桁取得できているのですからこれを加算して合計すればいいのですが
forループに入る前に合計用の変数sumを0で初期化
forループの }の直前で sum += tra;
forループ抜けてから printf( "%d", sum );
といった具合ですよ
この回答への補足
忙しい中のアドバイスありがとうございます。
出来たら再アドバイス願います。
上記の回答についてですが、forループのforは[1]内のforでしょうか?それとも[2]内のforでしょうか?
そして、for文を作成した場合のfor(・・・)のカッコ内の条件は何になるのでしょうか?
私なりに上記の内容に沿ってプログラムを組んだところ、
sum=0;
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);
sum+=s;}
printf("\nsum %d",sum);
となるのですが、コンパイル後エラー(parse error before 'else')が発生しています。で、else文の前に { または } を入れるのですが、エラーはまだ発生してしまいます。
で、また、[1]のプログラム下に[2]を組み合わせようにもfor(・・・)のカッコ内の条件が不明なので、プログラムを組むことも出来ないのです。
・・・本当に出来ましたら再アドバイス願います。
アドバイスありがとうございます。
このアドバイスをどうにかしてモノにしようとしたのですが、最終的に出来ませんでした。
文章から、本当に文章を’なぞるだけ’みたいな感じを受け、文章を分かろうとしたんですけどね・・・。
アドバイスありがとうございました。
No.3
- 回答日時:
数値の受け渡しに配列を用いる様に書き換えました。
(生の数値でやると面倒そうなので)
また、各機能を関数に切り分けました。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void convert(int , int*);
void disparray(int* , int);
int sumofarray(int* , int);
#define SIZE 5
int main(void)
{
int num;
int nums[SIZE]; // 変換結果格納用配列
printf("5桁入力; ");
scanf("%d", &num);
printf("num = %d\n" , num);
convert(num , nums); // 数字の変換
disparray(nums , SIZE); // 変換後の数字の表示
printf("sum = %d\n" , sumofarray(nums , SIZE)); // 各桁の数字の和を表示
return 0;
}
// 数字の変換を行う
void convert(int num , int* nums)
{
int inpt;
int inptnum;
int s;
int tra;
for(inpt=5 ; inpt>=1 ; inpt--)
{
if(inpt%2 == 0) {
inptnum = pow(10,inpt-1);
tra = (num/inptnum)%10;
s=(tra*2)/10+(tra*2)%10;
nums[inpt-1] = s;
}
else
{
inptnum = pow(10,inpt-1);
tra = (num/inptnum)%10;
nums[inpt-1] = tra;
}
}
}
// 配列の数字を表示(配列後方から順に)
void disparray(int* array , int size)
{
int i;
for(i=size-1 ; i>=0 ; i--)
{
printf("%d" , array[i]);
}
printf("\n");
}
// 配列の数字の和を求める
int sumofarray(int* array , int size)
{
int i;
int sum = 0;
for(i=0 ; i<size ; i++)
{
sum += array[i];
}
return sum;
}
返事が遅れてしまい申し訳ありません。
忙しい中の回答ありがとうございます。
何故こんなにも簡単にプログラムが組めるのか・・・羨ましい限りです。
丁寧に見ず知らずの私の為に時間を割いてまで、プログラムをわざわざ記述して頂きありがとうございます。
プログラムの記述から察するに、’たいしたことない’みたいな感じを受けますが、私にとっては’すごい!すごい!どうやったらそういう考えが生まれるの???’と不思議でなりません。恐れ入ります。
本当にありがとうございました。
No.4ベストアンサー
- 回答日時:
あなたのコードをベースにするならこうでしょうか。
(ANo.2の回答と同じです。)
----source1-----------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int num,tra;
int inpt=5;
int inptnum;
int sum=0; /* 追加 */
printf("5桁入力; ");
scanf("%d", &num);
for(inpt ; inpt >=1 ; inpt--) {
if(inpt%2 == 0) {
inptnum = pow(10,inpt-1);
tra = (num/inptnum)%10;
tra=(tra*2)/10+(tra*2)%10; /* traに結果が入っていて欲しいので書き換え */
printf("%d",tra);
}
else {
inptnum = pow(10,inpt-1);
tra = (num/inptnum)%10;
printf("%d",tra);
}
sum += tra; /* 追加 */
}
printf("\nSum %d\n", sum); /* 追加 */
return 0;
}
----------------------------------------
「6+7+5+3+2=23」をやりたいのだから、
6、7、5、3、2が出現する場所を考えれば悩むところはないと思います。
(例えば、何も考えずに2カ所のprintf("%d",tra);の直前にsum += tra;を挿入しても結果は得られる。)
あと、
> inptnum = pow(10,inpt-1);
> tra = (num/inptnum)%10;
この2行は(inpt%2 == 0)が真でも偽でも必ず実行されるので
ifの外に出せば2回も書く必要はありません。
2つのprintfも、上のコードのように出力する変数を同じにしておけば、外に出して1つだけですみます。
(ここまでやるとelseブロックが空になり、elseは不必要なことが分かります。)
なお私なら、
・5桁限定にしたくない
・powは必要ない(下の桁から処理すれば、pow使わなくても10で割り続けるだけで良い)
ので以下のように書きます。
(各桁の分解はANo.1と基本的に同じ。)
----source2-----------------------------
#include <stdio.h>
int main(){
int nums[20] = {0};
int i;
int num, val;
int sum = 0;
printf("Input Number: ");
scanf ("%d", &val);
i=0;
while(val!=0) {
i++;
num =val%10;
val /= 10;
if(i%2 == 0){ /*偶数桁*/
num = (num*2)/10+(num*2)%10;
}
nums[i-1] = num; /* あとで表示するために保存 */
sum += num; /* 各桁の加算 */
}
for(;i>=1;i--){
printf("%d",nums[i-1]);
}
printf("\nSum: %d",sum);
return 0;
}
----------------------------------------
入力が数値でなくて(数字のみからなる)文字列で良いなら、
桁の分解は
http://okwave.jp/qa3427592.html
のANo.2の様に、文字列中の各文字を取り出す形でもできる。
(分かりにくくなるかもしれないので今回は除算と剰余算で取り出しました。)
返事が遅れてしまい申し訳ありません。
Wernerさんわざわざ私の為に、私の考えに基づいたプログラムを作成してくださり、本当にありがとうございます。
しかも動作確認までしてくれたみたいで・・・。
正直驚き!です。しかも別のアドバイスも加えて、なんて・・・う~ん、羨ましくて仕方ありません。
私はこの問題を1日~2日考えても’思った通り’の出力結果を表示することが出来ませんでした。
これは私の気のせいかもしれませんが、私のプログラムを1度見ただけで、上記のプログラムを’ささっ’とこなしてしまったような気がします。
しかも片手間で・・・。
私もいつの日か、そんなプログラマーを目指したいと思います。
’参考意見’?とんでもない!本当に素晴らしい回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
比較回数と交換回数表示について
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 配列と関数の練習問題
-
c言語
-
std::set<int> で、ある値が何...
-
卒業研究でよく分からないとこ...
-
C言語 エラーの原因がわからな...
-
DLLをGetProcAddress()で実行で...
-
【C++】関数ポインタの使い方
-
read関数をノンブロッキングで...
-
C言語における対称行列の作り方...
-
構造体の勉強中です 合計点の高...
-
C言語です。
-
C言語での引数の省略方法
-
困ってます…nCrを求めるC言語...
-
C++でvectorにテキストファイル...
-
プログラミング
-
素数 再帰関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報