トップページ⇒tech
1001コメント370KB

C/C++の宿題片付けます 152代目

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2011/08/01(月) 21:33:15.15
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他の発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。 >>2以降にあります。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
0809デフォルトの名無しさん2011/10/25(火) 01:15:01.68
[1] 授業単元:C言語 繰り返し
[2] 問題文(含コード&リンク):
1.キーボードから正の整数を2つ(x  y)入力し、縦x個、横y個の文字'*'
からなる長方形を表示するプログラムを多重ループを用いて作成せよ。

2.キーボードから入力した10進整数(0以上2^31 -1以下)を二進数にせよ
for文を使うこと。例えば2で割った余りと商の値によって下の桁のビットから求める等

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 本日12:00
[5] その他の制限: (どこまで習っているか、for while。(配列、関数、ポインタなどまだです)
宜しくお願いします
0810デフォルトの名無しさん2011/10/25(火) 01:32:03.75
>>809
#include <stdio.h>
int main(){
int x,y,t;
scanf("%d %d",&x,&y);
while(x--){
t=y;
while(t--)putchar('*');
putchar('\n');
}
return 0;
}

#include<stdio.h>
int main(){
int i,x;
scanf("%d",&x);
for(i=1;i<=x;i*=2);
for(i/=2;i>0;i/=2)putchar( (x&i)?'1':'0' );
putchar('\n');
return 0;
}
0811デフォルトの名無しさん2011/10/25(火) 01:38:49.71
>>809
>[5] その他の制限: (どこまで習っているか、for while。(配列、関数、ポインタなどまだです)
トリッキーなプログラムを求めてるように見えるのな。
実は課題じゃないんじゃ?
0812デフォルトの名無しさん2011/10/25(火) 01:43:01.14
>>806
(8) : error C2059: 構文エラー : '}'
(11) : error C2065: 'p' : 定義されていない識別子です。
(12) : error C2065: 'p' : 定義されていない識別子です。
(12) : warning C4047: '関数' : 間接参照のレベルが 'const char *' と 'int' で異なっています。
(12) : warning C4024: 'sscanf' : の型が 1 の仮引数および実引数と異なります。
(15) : error C2065: 'p' : 定義されていない識別子です。
(15) : error C2100: 間接指定演算子 (*) の使い方が正しくありません。
(15) : error C2065: 'p' : 定義されていない識別子です。
(15) : error C2100: 間接指定演算子 (*) の使い方が正しくありません。
(15) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
(16) : error C2065: 'p' : 定義されていない識別子です。
(18) : error C2065: 'p' : 定義されていない識別子です。
(18) : error C2100: 間接指定演算子 (*) の使い方が正しくありません。
(18) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
0813 ◆QZaw55cn4c 2011/10/25(火) 04:02:25.37
>>808
みあたりませんけど?
0814デフォルトの名無しさん2011/10/25(火) 08:13:31.97
>>808
頭悪いページだな。

>コマンドプロンプト リダイレクト 画面にも表示
と言う検索に対して、コメントが、

>リダイレクトの意味がわかっていないからこういうおバカなキーワードになる。
0815デフォルトの名無しさん2011/10/25(火) 10:22:21.24
>>807
int main( void )
{
system( "sort < infile > outfile" );
system( "rm infile" );
system( "mv outfile infile" );
return 0;
}
0816デフォルトの名無しさん2011/10/25(火) 17:36:28.84
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
1〜10の数が書かれたカードが1枚ずつ、全部で10枚あります。
今、これらのカードを並べ、隣り合った数の差を左から次々に加えて
いくことにします。例えば、
2,5,6,8,1,4,3,9,7,10
と並べたならば、
3+1+2+7+3+1+6+2+3=28
ということになります。
この計算結果が最も大きくなるようにカードを並べると、
結果はいくらになるでしょうか。
(注)元の問題は算数の問題なので論理で答えを出すものだが、
ここではプログラムを書いてその最大値を求めて欲しい。

[3] 環境
 [3.1] OS: Windows 7
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2011年10月31日
[5] その他の制限:特になし


よろしくお願いします
0817デフォルトの名無しさん2011/10/25(火) 18:08:56.12
>>816
#include <stdio.h>
#include <stdlib.h>

void solve(int card[], int card_num, int is_used[], int *maximum){
int i, sum=0;

if(card_num>=10){
for(i=1;i<10;i++) sum+=abs(card[i]-card[i-1]);
if(*maximum<sum){
*maximum=sum;
// printf("sum=%d ", sum);
// for(i=0;i<10;i++) printf(" %d", card[i]);
// printf("\n");
}
return;
}
for(i=0;i<10;i++){
if(is_used[i]) continue;
is_used[i]=1;
card[card_num]=i+1;
solve(card, card_num+1, is_used, maximum);
is_used[i]=0;
}
}
int main(void){
int card[10], is_used[10]={0}, maximum=0;

solve(card, 0, is_used, &maximum);
printf("maximum=%d\n", maximum);
return 0;
}
0818デフォルトの名無しさん2011/10/25(火) 18:41:57.49
「僕とスターの99日」映像キャプチャー
http://thumb.mtstarnews.com/06/2011/10/2011102513501644536_1.jpg

キム・テヒ主演日本ドラマで「竹島」と「日本海」と表記された件でスタッフの1人が解明に出た。

去る24日、ある国内韓流コミュニティであるネチズンが去る23日のフジテレビドラマ「僕とスターの99日」の
場面中に独島と東海が竹島と日本海と表記された地球儀を使う場面を公開した。これに対してネチズンらの間で
論議が続くとすぐに「僕とスターの99日」のスタッフ1人が自身のツイッターに「“僕とスターの99日”で地球儀に
竹島と日本海の表記が出たことは両国の問題にならないようにグラフィックで削除したが最終編集の過程で
グラフィックレイヤーがレンダリングされなかった」と伝えた。引き続き「以後の放送とDVDでは削除された
画面が出て行きます」として今後注意するという内容の文を残した。

これを見たネチズンは「それでも考えていたというからこれからは注意してくれたら良いだろう」
「今後ずっと見守っている」「問題が起きる前にあらかじめ解決したら良かっただろう」など多様な反応を見せた。

http://star.mt.co.kr/view/stview.php?no=2011102513501644536&type=1&outlink=1
http://kamome.2ch.net/test/read.cgi/news4plus/1319521904/

0819デフォルトの名無しさん2011/10/25(火) 19:06:29.52
>>817
数を並べ替えるアルゴリズム部分に感動した。
これって定石なのかしら?
0820デフォルトの名無しさん2011/10/25(火) 19:30:08.81
宿題スレでもよくみるし、初心者でも自分で思いつくレベル
0821デフォルトの名無しさん2011/10/25(火) 19:33:01.42
>>820
定石ではあるけど初心者は再帰呼出を嫌うだろJK
0822デフォルトの名無しさん2011/10/25(火) 19:35:14.18
>>816
http://ideone.com/S472x
0823デフォルトの名無しさん2011/10/25(火) 19:51:37.55
思いつかんかった(´・ω・`)
最初に思いついたのはstd::next_permutationだったYO
0824デフォルトの名無しさん2011/10/25(火) 20:05:19.11
>>816
#include <stdio.h>
#include <stdlib.h>

#define CARD_NUM 10

int main(void){
int card[CARD_NUM], sum=0, i;

for(i=0;i<CARD_NUM/2;i++)
{
card[i*2+1]=i+1;
card[i*2]=i+1+(CARD_NUM+1)/2;
}
if(CARD_NUM%2)
{
card[CARD_NUM-1]=CARD_NUM/2+1;
}

for(i=1;i<CARD_NUM;i++)
{
sum+=abs(card[i]-card[i-1]);
}
printf("%d\n", sum);
return 0;
}
0825デフォルトの名無しさん2011/10/25(火) 20:29:29.46
816のかきこみをしたものです。みなさんありがとう!!
0826デフォルトの名無しさん2011/10/25(火) 21:30:24.83
[1] 授業単元:クイックソート
[2] 問題文(含コード&リンク): http://ideone.com/duPFX
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 10月26日 09:00
よろしくお願いします
0827デフォルトの名無しさん2011/10/25(火) 21:31:13.38
[1] 授業単元:モンテカルロ
[2] 問題文(含コード&リンク):http://ideone.com/foLSr
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 10月26日 09:00
連投で恐縮ですがよろしくお願いします
0828デフォルトの名無しさん2011/10/25(火) 22:43:13.90
>>806
ありがとうございます
0829デフォルトの名無しさん2011/10/26(水) 05:13:34.17
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
ユーザーに入力させた半数英数字の文字列を、char型配列に入れ、一字ずつずらして表示させるプログラムの作成。
入力された順番と同じになったら表示終了とする。
例 abcd
bcda
cdab
  dabc
abcd

ポインタを使うと思います。それから、strlen(c)を使うようです。
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 10月26日 15:00

簡単に説明もいただけると大変助かります。
よろしくお願いいたします。
0830デフォルトの名無しさん2011/10/26(水) 05:20:25.20
>>829
#include <stdio.h>
#include <string.h>

int main(void)
{
char str[256];
int i, j, l;

scanf("%s", str);

l = strlen(str);

for(i = 1; i <= l; i++) {
for(j = 0; j < l; j++) putchar(str[(i + j) % l]);
putchar('\n');
}

return 0;
}
0831デフォルトの名無しさん2011/10/26(水) 07:40:32.33
>>829

#include <stdio.h>
#include <string.h>

int main(void)
{
char str[256],*p=str;
int i, l;

printf("in = ");
scanf("%s", str);
i=l = strlen(str);
while(i--) {
*(p+l)=*p;
*(p+l+1)='¥0';
printf("%s¥n",++p);
}

return 0;
}
0832デフォルトの名無しさん2011/10/26(水) 12:54:45.75
>>831
ありがとうございます。

%sとはどんな働きをするのですか?
調べてみたのですが、よくわかりませんでした><
0833デフォルトの名無しさん2011/10/26(水) 13:12:50.05
>>832
文字列
0834デフォルトの名無しさん2011/10/26(水) 13:14:05.41
#include <stdio.h>

int main(void)
{
char str[256], *p, *q;

scanf("%s", str);

for(p = str; *p; p++) {
for(q = p + 1; *q; q++) putchar(*q);
for(q = str; q <= p; q++) putchar(*q);
putchar('\n');
if(*p == '\0') break;
}

return 0;
}
0835デフォルトの名無しさん2011/10/26(水) 13:44:08.42
>>833
文字を入力する際にはこちらを使うということですね、ありがとうございます。
>>830と>>834はまだ勉強していないやつがあったので、>>831を使ってみようと思います。
様々な回答ありがとうございました。
0836デフォルトの名無しさん2011/10/26(水) 15:40:06.89
1] 授業単元:プログラム作成
[2] 問題文(含コード&リンク):以下の実行例のように,標準入力からgetchar 関数
を使って文字を次々と読み込み,アルファベットの小文
字は大文字に,大文字は小文字に変えて,それ以外の文
字はそのまま表示するプログラムを作成せよ
例hELLO!
I’m Taro KOUKA. <--(入力)
i’M tARO kouka.
I was born in Tokyo in 1991. <--(入力)
i WAS BORN IN tOKYO IN 1991.
<--(Ctrl-d で入力終了)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 10月27日9:00
0837デフォルトの名無しさん2011/10/26(水) 16:05:14.42
/*>>836*/
#include <stdio.h>
#include <ctype.h>

int main(void)
{
  char c;
  while ((c = getchar()) != EOF)
  {
    if (isalpha(c))
    {
      if (islower(c))
        c = toupper(c);
      else
        c = tolower(c);

    }
    
    putchar(c);
  }

  return 0;
}
0838デフォルトの名無しさん2011/10/26(水) 19:06:26.15
古いCDを整理してたらVisualAGEが出てきたので
インスコしてみたらクソ遅くてわろた 1.2になりかけの頃のやつ

Win7 64bit Core3 でEEのIndigo(日本語後入れ)使ってるけど
動作の遅さよりファイル関連の反映の遅さが気になる

EclipseをSSDにいれてるヒトの感想がききたい
0839デフォルトの名無しさん2011/10/26(水) 19:25:56.34
>>838
なんでこのスレからコピペしてんの?
Eclipse統合M31【Java/C++/Ruby/Python/Perl】
http://hibari.2ch.net/test/read.cgi/tech/1295886572/
0840デフォルトの名無しさん2011/10/26(水) 20:13:49.00
>>829の質問をしたものです。
>>831の回答をもらったのですが、strlenがどんな働きをするのかと、
a=b = strlen(str);
while(a--) {
*(p+b)=*p;
*(p+b+1)='\0';
printf("%s\n",++p);
この部分が一体全体どうなっているかわかりません。教えてください。
pには文字が入っているはずなのに、どうして*(p+b+1)='\0'のように数字を足すことができるのでしょうか。
また、a=b=strlen(str)とaも文字が入っているはずなのに、a--と数字のように扱えるのはなぜですか?

初歩的な質問で申し訳ありませんが、お願いします。
0841デフォルトの名無しさん2011/10/26(水) 21:55:45.86
>>840
>pには文字が入っている

えっ!?
0842デフォルトの名無しさん2011/10/26(水) 22:40:26.85
strlen()は文字数を返す関数
abcd
の入力では4が返ってる。

pは配列strのどこかを指すポインタ
初期化時は配列strの先頭を指してる。

whileループはiが偽(0)になるまで、例では4回ループする。

*(p + l) = *p はポインタpが指す位置からl番目、'\0'が入ってる位置にポインタpが指してる文字、
1ループ目では先頭のaが代入される。

*(p + l + 1) = '\0' は、↑で代入した位置の次に'\0'を代入して終端文字の修正をしてる。

printf("%s\n", ++p) は、分解すると
++p;
printf("%s\n", p);
ポインタpの指す位置から末尾に1文字移動したので、ポインタを一つずらして表示させてる。



長ったらしいのでまとめると、
配列strに文字を入力した後は
abcd\0
abcda\0
abcdab\0
abcdabc\0
って具合に一文字ずつ追加しながらポインタpも一つずつずらし、
結果入力された文字が一つずつずれて表示されてる。

0843デフォルトの名無しさん2011/10/26(水) 22:40:53.81
アンカ忘れ
>>842
>>840
0844デフォルトの名無しさん2011/10/26(水) 22:55:25.07
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):

明治元年以降の西暦年を4桁の数で入力すると、
和暦で年を表示するプログラムを作成せよ。
ただし、2つの元号を持つ年
は両方の年を表示すること。
(例: 1989年 → 昭和64年、平成元年)

(2つの元号を持つ年の扱いについては
余裕がある人は、月、日も入れて、その日の正しい
元号を表示することによって元号を一つ表示す
るプログラムとしてもよい。)
提出例
=== プログラム ===
#include <stdio.h>
int main()
{
[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: visualC++2010
[4] 期限: 10月27日 19:00
よろしくお願いします
0845デフォルトの名無しさん2011/10/27(木) 00:52:19.43
台形近似法を用いてf(x)=cos(x)を任意の範囲で積分するプログラムを
ユーザ関数を定義して作成しなさい.
その際の区分間距離も任意に入力できるようにすること。

実行例
積分範囲を入力せよ
x0 = 0
xl = 10
区分間距離を入力せよ
length = 1
ans = 9.949055
積分範囲を入力せよ
x0 = 0
xl = 100
区分間距離を入力せよ
length = 5
ans = 49.588107

お願いします。
0846デフォルトの名無しさん2011/10/27(木) 01:03:29.78
>>845

>>1
0847デフォルトの名無しさん2011/10/27(木) 01:46:50.62
>>844
http://ideone.com/PmuJg
0848デフォルトの名無しさん2011/10/27(木) 02:02:10.84
>>844
847をちょっと修正
http://ideone.com/eGfeM
0849デフォルトの名無しさん2011/10/27(木) 11:18:07.83
[1] 授業単元:計算機アルゴリズム�T
[2] 問題文(含コード&リンク):
設問1-1
プログラム例6.3.1を配列変数xの要素数(変数memberの値)と各要素の値をキーボードから入力するように変更しなさい。
プログラム例6.3.1
#include <stdio.h>

int main(void)
{
int x[10] = {80, 56, 68, 75, 45, 100, 92, 73, 63, 95};
int member = 10;
int total;
float average;
int i;
for (i = 0, total = 0; i < member; ++i )
total += x[i];
average = (float)total / (float)member;
printf("総和=%d\n",total);
printf("平均点=%7.2f\n", average);
return 0;
}

設問1-2
上記設問1-1と同じ配列変数xの要素をその並びを逆順にして配列変数yへ代入し、yの全要素を表示するプログラムを作りなさい。
[3] 環境
 [3.1] OS:Windows vista
 [3.2] コンパイラ名とバージョン:visual studio 2008
 [3.3] 言語:C
[4] 期限:[2011年11月1日8:00まで]
[5] その他の制限:変数、算術演算、printf、scanf、繰り返し処理while文、do-while文
            繰り返し処理for文、繰り返し処理for文による総和の計算、配列変数は習いました。
宜しくお願いします。
0850デフォルトの名無しさん2011/10/27(木) 12:44:45.55
1-1
int number, *x, i;
printf("要素数:");
scanf("%d", number);
x = malloc(sizeof(*x) * number);
for (i = 0; i < number, i++)
scanf("%d", x + i);

1-2
revert(x, y, 0, 10);とでもして呼び出して。
void revert(int *x, int *y, int i, j)
{
j--;
if (i >= j)
return;
y[j] = x[i];
x[i] = x[j];
reverse(x, y, i++, j--);
return;
}
0851デフォルトの名無しさん2011/10/27(木) 12:51:29.61
/*>>849*/
/*設問1-1*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int *x;
  int member;
  int total;
  float average;
  int i;
  printf("member > ");
  scanf("%d", &member);
  x = (int *)malloc(sizeof(int) * member);
  for (i = 0; i < member; ++i)
    printf("x[%d] > ", i), scanf("%d", &x[i]);
  for (i = 0, total = 0; i < member; ++i)
    total += x[i];
  average = (float)total / (float)member;
  printf("総和=%d\n", total);
  printf("平均点=%7.2f\n", average);
  free(x);
  return 0;
}

つづく
0852デフォルトの名無しさん2011/10/27(木) 12:52:10.69
つづき

/*設問1-2*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int *x, *y;
  int member;
  int i;
  printf("member > ");
  scanf("%d", &member);
  x = (int *)malloc(sizeof(int) * member);
  y = (int *)malloc(sizeof(int) * member);
  for (i = 0; i < member; ++i)
    printf("x[%d] > ", i), scanf("%d", &x[i]);
  for (i = 0; i < member; ++i)
    y[member - 1 - i] = x[i];
  for (i = 0; i < member; ++i)
    printf("y[%d]=%d\n", i, y[i]);
  free(x);
  free(y);
  return 0;
}
0853デフォルトの名無しさん2011/10/27(木) 15:13:36.09
] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):(列挙体)
Sunday, Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday という曜日を表す列挙体
enum Days を定義せよ.以下の実行例のように,
曜日を入力すると,enum Days の列挙定数を利用して
週末,平日,それ以外の場合にそれぞれメッセージを
表示するプログラムを作成せよ.
例 % ./q3-3
曜日を入力して下さい
(0:日1:月2:火3:水4:木5:金6:土):0
やった!週末だ

曜日を入力して下さい
(0:日1:月2:火3:水4:木5:金6:土):5
今日も講義頑張ろう!

曜日を入力して下さい
(0:日1:月2:火3:水4:木5:金6:土):7
この日はないぞう...


[3] 環境
 [3.1] OS:Windows7
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 10月28日 10:00

簡単に説明もいただけると大変助かります。
よろしくお願いいたします。
0854デフォルトの名無しさん2011/10/27(木) 15:40:35.36
>>853
#include <stdio.h>

int main(void){
enum Days {Sunday, Monday, Tuesday, Wednesday, Thursday,
Friday, Saturday
};

char s[][100]= {"やった!週末だ","今日も講義頑張ろう!","この日はないぞう..."};
int n[]= {0,1,1,1,1,1,0};
int d;

while(1) {
printf("曜日を入力して下さい¥n");
printf("(0:日1:月2:火3:水4:木5:金6:土):");
scanf("%d",&d);
if((d<Sunday)||(d>Saturday))
printf("%s¥n¥n",s[2]);
else
printf("%s¥n¥n",s[n[d]]);
}

return 0;
}
0855デフォルトの名無しさん2011/10/27(木) 16:04:32.08
>>850-852
有難う御座います
0856デフォルトの名無しさん2011/10/27(木) 16:24:59.71
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク): bmp、jpg形式の画像の輝度値を表示させるプログラムを作成せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc opencv
 [3.3] 言語: C
[4] 期限: 2011年10月29日まで
[5] 以下のURLの画像のような、元々の白黒画像を白と黒の輝度値を表示した画像に変換したいのですが、どうしていいか
  全く分からなくて、困っています
  http://mcm-www.jwu.ac.jp/~physm/buturi07/robo/genri02.html
  画像だけ載せることができればいい課題なので、最悪このような事を行えるソフトウェアがあればいいのですが
  ネットでたくさん検索を行ったのですが、私の浅知恵のせいか、よく分かりませんでした
  ヒントだけでもいいので、よろしくお願い致します
0857デフォルトの名無しさん2011/10/27(木) 16:38:59.38
マルチうぜえ
0858デフォルトの名無しさん2011/10/27(木) 17:17:25.89
マルチでごめんなさい
入門編で聞いたんですけどこっちで聞けと言う事なので

5人の学生の成績(100点満点)の値をキーボードから読み込み,それらの平均点と分散(標準偏差の二乗)を求めるプログラムを作れ。


授業の課題です
解説付きでお願いします。
0859デフォルトの名無しさん2011/10/27(木) 17:41:48.12
>>858
>>1
0860デフォルトの名無しさん2011/10/27(木) 18:06:23.12
>>858
#include <stdio.h>
#define NINZU 5

int main(void){
int seiseki[NINZU], i, sum = 0;
double average; /* 平均 */
double sampleVariance = 0; /* 標本分散 */
double w;

/* 5人の学生の成績(100点満点)の値をキーボードから読み込み、点数の合計値を出す */
for (i = 0; i < NINZU; i++) {
printf("seiseki[%d] = ", i + 1);
scanf("%d", &seiseki[i]);
sum += seiseki[i];
}
average = (double) sum / NINZU; /* 平均 */
/* 平均との差の二乗の合計値を出す */
for (i = 0; i < NINZU; i++) {
w = seiseki[i] - average;
sampleVariance += w * w;
}
sampleVariance /= NINZU; /* 標本分散を出す */
printf("answer = %g¥n", sampleVariance);
return 0;
}
0861デフォルトの名無しさん2011/10/27(木) 18:09:22.01
>>858

#include <stdio.h>
#define f ((a+b+c+d+e)/5)
#define g(x) ((x-f)*(x-f))
main(){int a,b,c,d,e;scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);/*キーボードから読み込み*/
return printf("平均:%d\n分散:%d\n",f,(g(a)+g(b)+g(c)+g(d)+g(e))/5);/*平均と分散を求める*/
}
0862デフォルトの名無しさん2011/10/27(木) 18:09:58.26
>>858
http://codepad.org/rTokMRii
08638582011/10/27(木) 18:36:35.29
>>859
あ、ごめんなさい

[1] 授業単元:数学関数と数値計算
[2] 問題文(含コード&リンク):>>358
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: ごめんなさい。分かんないです。
 [3.3] 言語: おそらくどちらでも
[4] 期限: [2011年10月28日15:00まで]
[5] その他の制限: printfとscanfまで習いました。

授業全然ついていけてないんで、あやふやなところ多いです。すいません
0864デフォルトの名無しさん2011/10/27(木) 18:37:22.65
訂正
問題文は>>858です
0865デフォルトの名無しさん2011/10/27(木) 18:39:17.59
>>863
>>860-862
0866デフォルトの名無しさん2011/10/27(木) 20:51:39.05
>>857
すみません、初めはこちらにレスしようと思ったのですが
見ていた他のスレにレスしてしまいました
0867デフォルトの名無しさん2011/10/27(木) 21:41:31.20
>>863
コードを読み返して、書き直してを繰り返して、
自力で書けるようにならないと今後どんどん悲惨な事になるぞ。
0868デフォルトの名無しさん2011/10/27(木) 21:51:05.25
>>863
ソースを壊しても困らない状態(オリジナルは別フォルダに保存、とか)にしておいてから、ソースを色々いじって、なにが起こるかを見るのも役に立つと思う。
0869デフォルトの名無しさん2011/10/27(木) 23:44:31.48
>>863
printfとscanfしか理解してないぽいからちゃんと一から勉強した方が良い
0870デフォルトの名無しさん2011/10/27(木) 23:55:02.00
>>867-869
正直printfとscanfもあいまいな感じです
分かって無い状態で出すのも気が引けるんで今回の課題は未提出で行こうと思います
一回しっかりと勉強せんとダメですわ
みなさんありがとうございました
08718672011/10/28(金) 00:25:22.64
>>870
俺が書いたわけじゃないけど、>>860のコードが分かりやすい、

点数入力して合計計算
↓
平均計算
↓
偏差二乗和計算
(コメント/* 平均との差の二乗の合計値を出す */ の部分)
↓
分散を求めて表示

ってなってるから、コードから
点数入力して合計計算
以外を削除して、printf()とscanf()でどうやって表示、点数入力してるかを関数仕様書(cppreferenceとか)見ながら確認するといい。

それがわかると次の
平均計算
部分を追加して確認、本当に平均が計算出来ているかは自分で追加してみてもいい。

それがわかると次のーーー
って具合に、全部一片に勉強するより、コードを処理単位の固まりで捉え、少しずつ勉強するのが分かりやすい。


行数的には>>861が少ないけど、こっちのコードはトリッキーだから>>870にはまだ早い。
08728672011/10/28(金) 00:30:23.66
ちなみに>>862はC++11で書いてるからCの履修終わった頃で良いと思うw
0873デフォルトの名無しさん2011/10/28(金) 01:02:58.04
>>870
>分かって無い状態で出すのも気が引けるんで今回の課題は未提出で行こうと思います

出したほうが、説明をせざるをえない状況に自分を持っていける、という考え方もある。
0874デフォルトの名無しさん2011/10/28(金) 02:23:05.35
教科書とにらめっこして、やっと出来た気がします。
やっぱ簡単に聞こうなんて思ったらダメですね
みなさんありがとう!

一応貼っときます

# include <stdio.h>

int main(void){
int a, b, c, d, e;
double f, g;
printf(" a, b, c, d, e=");
scanf("%d%d%d%d%d", &a, &b,&c, &d, &e);
f=(a+b+c+d+e)/5.0;
g=((f-a)*(f-a)+(f-b)*(f-b)+(f-c)*(f-c)+(f-d)*(f-d)+(f-e)*(f-e))/5.0;
printf("平均点%lf\n, 分散%lf\n", f, g);

return 0;

}
0875デフォルトの名無しさん2011/10/28(金) 05:19:32.66

    ∧∧   そ〜ら、属国犬取って来るアル
   / 支\                     ,,,_
   (  `ハ´)つ                     `''‐、,
 ⊂    ノ         ∧_∧ ウェー、ハッハッハ      `ヽ,      ●
   人  Y    (( 〜(⌒:<*`∀´>               ゙:、   r''
  レ (_フ       (/ーし'ー-J                 ゙、,,:'゙



                   ∧∧
  宗主さまぁ          /中\  オー、ヨシヨシ!
               ∧_(`ハ´  )  
         (( 〜(⌒:<*`∀´> と )
              し し し (__(_フ   

0876デフォルトの名無しさん2011/10/28(金) 08:08:57.97
] 授業単元:プログラム作成
[2]D, C, B, A, S, Invalid という成績を表す列挙体
enum result を定義し,点数(int 型)を引数として
enum result 型の値を返す関数
seiseki_hantei(int sc)
と,enum result 型の値を引数として,成績を表示する関数も作成する
点数と成績は以下の通とする
0〜59 点: D
60〜69 点: C
70〜79 点: B
80〜89 点: A
90〜100 点: S
それ以外: Invalid


る関数
print_seiseki(enum result res)
を作成せよ.この2 つの関数を使用して,以下の実行例
のように点数を入力すると成績を表示するmain 関数も
作成すること.点数と成績の関係は以下の通りとする.
例.
点数(整数)を入力してください:91
成績はS です。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 10月27日9:00
0877デフォルトの名無しさん2011/10/28(金) 08:09:55.86
授業単元:プログラム作成
[2]D, C, B, A, S, Invalid という成績を表す列挙体
enum result を定義し,点数(int 型)を引数として
enum result 型の値を返す関数
seiseki_hantei(int sc)
と,enum result 型の値を引数として,成績を表示する関数も作成する
点数と成績は以下の通とする
0〜59 点: D
60〜69 点: C
70〜79 点: B
80〜89 点: A
90〜100 点: S
それ以外: Invalid


る関数
print_seiseki(enum result res)
を作成せよ.この2 つの関数を使用して,以下の実行例
のように点数を入力すると成績を表示するmain 関数も
作成すること.点数と成績の関係は以下の通りとする.
例.
点数(整数)を入力してください:91
成績はS です。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 10月28日11:00
0878デフォルトの名無しさん2011/10/28(金) 14:39:37.62
一見簡単そうに見えて問題文の不備から誰にも解けない問題か
0879デフォルトの名無しさん2011/10/28(金) 14:57:25.26
>>877 脳内補完して、適当に書いた
http://ideone.com/fZL1V
0880デフォルトの名無しさん2011/10/28(金) 15:26:17.96
>>877 せっかくやったので投稿
https://gist.github.com/4ef2174c695ab92d704c
0881デフォルトの名無しさん2011/10/28(金) 15:43:20.17
【2】


2次元配列の問題です
m行n列の配列aの
各行ごとの合計 gyouwa[i] i=0,1,・・・,m
各列ごとの合計 retuwa[j] j=0,1,・・・,n
を計算するプログラムの作成をお願いします

•行列サイズ m,n は実行時に 100以内であれば自由に設定してデータを再入力させる機能をつける
◦配列サイズの上限はプログラム中で配列を宣言するとき「100 個」として下さい。これは,プログラム中で大き目の配列を宣言しておいて,指定されたサイズに応じて必要分を使うための練習です。

【3】c言語
【4】10月30日まで
0882デフォルトの名無しさん2011/10/28(金) 16:52:05.64
>>881
http://ideone.com/VimHM#ul_inouterr
0883デフォルトの名無しさん2011/10/28(金) 22:20:22.34
最大値の求め方について教えてください。
配列の最大値を求めたくて
下のプログラムを作ったのですが,うまく動作しません。

for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) {
if( qxr < qxxr[maa] ) {
qxr = qxxr[maa];
qxxxr = maa;
}
}

printf("最大のq*rは%dのとき%f\n",qxxxr,qxr);

最大のq*rは0のとき0
と表示されるのですが間違っているところがわかれば教えてください。
配列は下のような感じです.

qxxr[0]=40.800000
qxxr[1]=41.600000
qxxr[2]=0.000000
qxxr[3]=0.000000
qxxr[4]=40.000000
qxxr[5]=0.000000
qxxr[6]=0.000000
qxxr[7]=40.000000
qxxr[8]=0.000000
qxxr[9]=0.000000
0884デフォルトの名無しさん2011/10/28(金) 22:31:21.70
>>883
qxxr[0]=40.800000は浮動小数点だけど、
printf("最大のq*rは%dのとき%f\n",qxxxr,qxr);
表示はintになってるから。
08858842011/10/28(金) 22:32:37.09
あ、勘違いごめ
0886デフォルトの名無しさん2011/10/28(金) 22:42:30.24
>>883
多分宣言がおかしい
0887デフォルトの名無しさん2011/10/28(金) 23:03:33.99
>>883
これでいいのか?
#include <stdio.h>
int main(void){
double qxxr[]= {
40.800000
,41.600000
,0.000000
,0.000000
,40.000000
,0.000000
,0.000000
,40.000000
,0.000000
,0.000000
};
double qxr;
int maa,qxxxr;

for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) {
if( qxr < qxxr[maa] ) {
qxr = qxxr[maa];
qxxxr = maa;
}
}
printf("最大のq*rは%dのとき%f¥n",qxxxr,qxr);
return 0;
}

実行結果:最大のq*rは1のとき41.600000
0888デフォルトの名無しさん2011/10/29(土) 00:07:23.62
>>883
マルチならせめて、2番目のスレに書き込む時に判るようにしようぜ。
0889デフォルトの名無しさん2011/10/29(土) 00:49:50.08
>>887
qxxxr の初期化は?
0890デフォルトの名無しさん2011/10/29(土) 00:57:57.20
for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) {
↓
for( qxr = qxxr[qxxxr=maa=1] ; maa < 10; maa++) {
0891デフォルトの名無しさん2011/10/29(土) 02:01:08.25
>>890
qxxxr を1で初期化しちゃ駄目だろ
0892デフォルトの名無しさん2011/10/29(土) 02:31:27.88
ワロタw
0893デフォルトの名無しさん2011/10/29(土) 18:01:41.27
C言語で5つの整数の中心値(中央値)を求めるプログラムを作成するという問題を出されたのですが
さっぱり分かりません
for文の課題なのでfor文を使って頂けるとありがたいです
0894デフォルトの名無しさん2011/10/29(土) 18:02:58.53
大阪府島本町の小学校や中学校は、暴力イジメ学校や。
島本町の学校で暴力やいじめを受け続けて、心も身体も
壊されて廃人同様になってしもうた僕が言うんやから、
まちがいないで。
教師も校長も、暴力やいじめがあっても見て見ぬフリ。
そればかりか、イジメに加担する教師もおった。
 誰かがイジメを苦にして自殺しても、「本校にイジメは
なかった」と言うて逃げるんやろうなあ。
 僕をイジメた生徒や教師の名前をここで書きたいけど、
そんなことしたら殺されて、天王山に埋められるかもしれ
へん。それで誰にも発見されへんかったら、永久に行方不明のままや。

0895デフォルトの名無しさん2011/10/29(土) 18:22:36.93
>>893
大きい順に並べかえ、真ん中に来た値。

>>1に書いてあるテンプレを使って依頼して。
0896デフォルトの名無しさん2011/10/29(土) 18:31:45.09
出来れば今日中にで、環境はBCCでOSはWindows 7です。言語はCでC++ではありません
0897デフォルトの名無しさん2011/10/29(土) 18:33:02.91
>>893
ttp://ja.wikibooks.org/wiki/%E4%B8%AD%E5%AD%A6%E6%A0%A1%E6%95%B0%E5%AD%A6_1%E5%B9%B4%E7%94%9F-%E6%95%B0%E9%87%8F/%E8%B3%87%E6%96%99%E3%81%AE%E6%95%A3%E3%82%89%E3%81%B0%E3%82%8A%E3%81%A8%E4%BB%A3%E8%A1%A8%E5%80%A4
0898デフォルトの名無しさん2011/10/29(土) 19:22:56.07
>>896
#include <stdio.h>
#include <stdlib.h>

#define DIMX 5

int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}

int main() {
int d[DIMX], i;
for ( i = 0; i != DIMX; ++i ) {
int n;
printf( "数値を入れなさい:" );
scanf( "%d", &n );
d[i] = n;
}
qsort( d, DIMX, sizeof d[0], compare );
printf( "中央値は%d\n", d[DIMX/2] );
return 0;
}

ところでピストグラムとピスト自転車ってなんか関係があるのかなー。
0899デフォルトの名無しさん2011/10/29(土) 22:50:24.68
histogram
0900デフォルトの名無しさん2011/10/29(土) 23:54:50.53
集合で、条件を満たす部分集合の数を数える計算をC言語でやりたいと思ってます。

例えば3個の要素からなる集合{a,b,c}でa,b,cは0〜24の任意の数をとるとします。
また一方で{0+i,3+i}(i<=24,i++)のものをredと定義します。
そして、{a,b,c}の中で部分集合{a,b}{b,c}{c,a}がすべてredであるような{a,b,c}の数はいくつであるか計算する方法を教えてください。
0901デフォルトの名無しさん2011/10/29(土) 23:57:52.19
>>1
>・質問は【質問テンプレ】を利用してください。 >>2以降にあります。
0902デフォルトの名無しさん2011/10/30(日) 00:57:29.80
>>900
http://codepad.org/4gg8jlY4
0903デフォルトの名無しさん2011/10/30(日) 01:31:24.00
<<902
ありがとうございます!
0904デフォルトの名無しさん2011/10/30(日) 01:52:28.40
>>900
>そして、{a,b,c}の中で部分集合{a,b}{b,c}{c,a}がすべてredであるような{a,b,c}の数はいくつであるか計算する方法を教えてください。

0個だと思うんだが、例えば{a,b,c}の例は何だろう?
0905デフォルトの名無しさん2011/10/30(日) 02:07:30.71
redの定義がよくわからない
0906デフォルトの名無しさん2011/10/30(日) 08:27:09.77
完全に丸投げだから回答が間違っていても
疑うことすらできないんだな
0907デフォルトの名無しさん2011/10/30(日) 09:30:23.44
5つの数字を並び替えることってどうやってやるんですか?
win7でBccでstdio.hでやって欲しいです。それと出来ればfor文で作って頂けると嬉しいです
0908デフォルトの名無しさん2011/10/30(日) 09:42:27.34
>>907
algorithmをインクルードして
for(random_shaffle(a[0],a[5]);;);
レス数が900を超えています。1000を超えると表示できなくなるよ。