文字列配列について
Re: 文字列配列について
フォーラムルールをお読みください。
課題の丸投げは禁止です。
今書けているコードがありましたら、提示してください。
課題の丸投げは禁止です。
今書けているコードがありましたら、提示してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
yuher
Re: 文字列配列について
変数、配列宣言と初期化(文字列を集計する要素数26の配列,ほか)
while(getchar()の戻り値がEOFではない)
if(読み込んだ文字がアルファベット)
その文字に該当する要素を1だけ増やす
頻度の最大値MAXを求める
for (i=0;i<26;i++)
{
i番目の文字の*の個数を計算(maxを使った比例計算)
行頭の表示(i番目の文字)
計算した個数だけ*を出力
行末に頻度を整数で表示
}
こんな感じにすればいけるのでは?というのはあるのですが,これを言語にすることができません
よろしくお願いします.
while(getchar()の戻り値がEOFではない)
if(読み込んだ文字がアルファベット)
その文字に該当する要素を1だけ増やす
頻度の最大値MAXを求める
for (i=0;i<26;i++)
{
i番目の文字の*の個数を計算(maxを使った比例計算)
行頭の表示(i番目の文字)
計算した個数だけ*を出力
行末に頻度を整数で表示
}
こんな感じにすればいけるのでは?というのはあるのですが,これを言語にすることができません
よろしくお願いします.
Re: 文字列配列について
そのような感じでいいと思います。
どこがわかりませんか?全部ですか?どこがわからないかがわかりませんか?
どこがわかりませんか?全部ですか?どこがわからないかがわかりませんか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
yuhe
Re: 文字列配列について
C言語を始めたばっかりで、参考書を無理やりこじつけて形にはできたのですが,言語に変換することができません.
全体的に分に変換することができないです。。。
全体的に分に変換することができないです。。。
Re: 文字列配列について
うーん…教えるのは難しいですね…
#include <stdio.h>
#include <ctype.h>
/* *の個数の最大値 */
#define GRAPH_MAX 60
int main(void) {
/* 変数、配列宣言と初期化(文字列を集計する要素数26の配列,ほか) */
int input;
int syuukei[26]={0};
int i;
int max=0;
/* while(getchar()の戻り値がEOFではない) */
while((input=getchar())!=EOF) {
/* if(読み込んだ文字がアルファベット) */
if(isalpha(input)) {
/* その文字に該当する要素を1だけ増やす */
if(islower(input))syuukei[input-'a']++;
else if(isupper(input))syuukei[input-'A']++;
}
}
/* 頻度の最大値MAXを求める */
for(i=0;i<26;i++) {
if(syuukei[i]>max)max=syuukei[i];
}
if(max==0)max=1; /* ゼロ除算防止 */
for(i=0;i<26;i++) {
/* i番目の文字の*の個数を計算(maxを使った比例計算) */
int kazu=syuukei[i]*GRAPH_MAX/max;
int j;
/* 行頭の表示(i番目の文字) */
printf("%c : ",i+'A');
/* 計算した個数だけ*を出力 */
for(j=0;j<kazu;j++)putchar('*');
/* 行末に頻度を整数で表示 */
printf(" %d\n",syuukei[i]);
}
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
yuher
Re: 文字列配列について
int kazu=syuukei*GRAPH_MAX/max;
すいません,この行だけちょっとわからないです.
syuukei*GRAPH_MAX/max;とはどういうことですか?
すいません,この行だけちょっとわからないです.
syuukei*GRAPH_MAX/max;とはどういうことですか?
Re: 文字列配列について
その文字の個数から表示すべき*の個数を求めています。
syuukeuをmaxで割ってsyuukeiのmaxに対する割合を求めます。
この割合をGRAPH_MAX(max個あるアルファベットに対する*の表示個数)に掛けて表示すべき*の個数を求めます。
これをそのまま書くとGRAPH_MAX*(syuukei/max)となりますが、C言語では整数の割り算は切り捨てになるため、
最初の表現になっています。
syuukeuをmaxで割ってsyuukeiのmaxに対する割合を求めます。
この割合をGRAPH_MAX(max個あるアルファベットに対する*の表示個数)に掛けて表示すべき*の個数を求めます。
これをそのまま書くとGRAPH_MAX*(syuukei/max)となりますが、C言語では整数の割り算は切り捨てになるため、
最初の表現になっています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 文字列配列について
できます。なぜ必要なのですか?それともただの興味ですか?
double型の変数をprintfでひょうじするには%fを使用します。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
yuher
Re: 文字列配列について
すいません,浮動小数点を利用すればsyuukei*GRAPH_MAX/max;の形を変換できるものだと思っていました.
計算自体を浮動小数点で計算してもsyuukei*GRAPH_MAX/max;の形は変えられないのでしょうか?
計算自体を浮動小数点で計算してもsyuukei*GRAPH_MAX/max;の形は変えられないのでしょうか?