C/C++の宿題は私におまかせくださいませ 23代目

このエントリーをはてなブックマークに追加
みなさま、ごきげんよう。
わからない宿題は私におまかせくださいませね。

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、エラーなどは適切に書きましょう
 全文を書いてしまうか、分かりやすくまとめましょう。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10
3 get's!
4デフォルトの名無しさん:04/05/21 23:25
ぼるじょあじゃないのが気に入らないが、まあ前よりはましだろう。
5ゲット
口で言うのは簡単だ
>>1
前のスレタイは過去最低だったからな。
下ネタいれんなくそ。
下ネタねぇ...
>>8
なんだお前異論があるのか?
前スレからは明らかに近親相姦の臭いが漂っていただろうが?
そんなどうでもいいことでムキになるなよ。
では気を取り直して宿題どうぞ↓
次スレ案

C/C++の宿題はウリに任せるニダ 24スミダ
線形リストをソートしてみろ。
またかよ。
sort(q.begin(), q.end());
>12
配列にデータコピーしてqsortに渡してして元に戻す
>16
単にtailの位置を毎回headとcountを使って計算すればいいのでは
tail= ( head + count ) % QUEUE_SIZE
てなかんじで
>>16
int enqueue(queue_t *que, data_t newdata){ 
  if (que->count < QUEUE_SIZE - 1) { 
    que->data[que->count++] = newdata;
    return SUCCESS;
  } else {
    return FAILURE;
  }
}

data_t dequeue(queue_t *que){    
  data_t d;    
  if (que->count > 0) { 
    d = que->data[que->head]; 
    que->head = que->head + 1
    que->count --;
    return d;    
  }
  

動作確認して無い。
>>17 ありがとうございます

>>18 以後気をつけます
>>18 すいません自分が動作確認して無いのかと勘違いしてしまいますた。
21デフォルトの名無しさん:04/05/22 01:04
n*nの行列の二つの行列をかけあわせるプログラムを作り、これを用いてA^2^mを計算
するプログラムはどうすればできるのでしょう??
でも、以後気をつけますなんて言ったら動作確認してないのバレるよ?
23デフォルトの名無しさん:04/05/22 01:08
C初心者です。
(1)1!+3!+5!+7!+・・・+(2n+1)!
(2)1+1/1!+1/3!+1/5!+・・・+1/(2n+1)!
をCで求めよ。という課題が出ましたが全然わかりません。
助けてください。
24デフォルトの名無しさん:04/05/22 01:12
>>21
@(o・ェ・)@ 
おさるもわからん問題  
25デフォルトの名無しさん:04/05/22 01:19
かわいいおさる@(・ω・)@
26デフォルトの名無しさん:04/05/22 01:27
@(o'ェ`o)@耳のでっかいさるやなぁw
27デフォルトの名無しさん:04/05/22 01:29
それはどっちやあ☆
>>23
(1)
#include <stdio.h>
#include <stdlib.h>

int kaijo(int n);

int main(int argc, char *argv[])
{
int n;
int i;
int s = 0;

printf("奇数を入力してください\n");
scanf("%d", &n);
for(i = 1; i <= n; i+=2){
s += kaijo(i);
}
printf("%d\n", s);
return 0;
}

int kaijo(int n)
{
int k = 1;
while(n > 0){
k *= n;
n--;
}
return k;
}
ふつう n を入力させるんじゃないか?
30デフォルトの名無しさん:04/05/22 01:44
<<耳の大きさ>>
@(o・ェ・)@ > @(・ω・)@
31仕様書無しさん:04/05/22 01:46
なんか変だ
cin.unsetf( ios_base::skipws );
stringstr( (istream_iterator<char>(cin)), istream_iterator<char>() );
32デフォルトの名無しさん:04/05/22 01:52
printf("奇数を入力してください\n");
って、プゲラ
>>31
stringstr((istreambuf_iterator<char>(cin)), istreambuf_iterator<char>());
ではだめなん?て言うか宿題じゃないよね?
>>32
悪かったよ。
プログラミングなんてほとんどやったことないんで赦してくれ。
>>23 (1)
#include <stdio.h>

int factorial(int i)
{
int j,k=1;
for(j=1;j<=i;j++)
k*=j;
return k;
}
int main()
{
int n,i,ans=0;
printf("1!+3!+・・・+(2n-1)!を求める。\nnを入力 : ");
scanf("%d",&n);
for(i=1;i<=2*n-1;i+=2)
ans+=factorial(i);
printf("Ans = %d",ans);
return;
}
#include <stdio.h>
int factorial(int n){
if (n <= 1) return 1;
else return n * factorial(n - 1);
}
int f(int n){
if (n < 0) return 0;
else return factorial(2 * n + 1) + f(n - 1);
}
int main(void){
int n;
printf("n >> "); scanf("%d", &n);
printf("(1) = %d\n", f(n));
return 0;
}
37デフォルトの名無しさん:04/05/22 18:11
typedef void (*write8_handler)( int offset , int data ) ;
こなんですけどね、offsetとdataはどういう扱いになるかサッパリです。
単なる引数。
C言語でバイオリズムのグラフを描くことになりました。
見本になりそうなソースをぐぐって探したのですが、JAVAのソースはあってもCのソースは見つけられませんでした。
参考になるソースをご存知の方いませんか?
>>39
グラフィカルなものは環境依存です。
こちらへどうぞ。

【初心者歓迎】C/C++室 Ver.6【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1082182233/l50

ちゃんと環境を書きましょう。
C++で

 % command abcd
と入力すると
 a b c d
 a b cd
 a bc d
 a bcd
 ab c d
 ab cd
 abc d
 abcd

 % command abc
ならば
 a b c
 a bc
 ab c
 abc

のように文字をグループ化して全てのパターンを表示するというものなのですが、
文字数が分かっている場合には沢山ループをまわせばできるのですが、
文字数が分からない場合はどうするかということで再帰を考えてみたのですが
実装できず、上手い方法をご存知の方がいらっしゃいましたらどうかよろしくお願いいたします
>>41
普通に文字数はわかりますが。
ひょっとして、配列で処理してる?
43デフォルトの名無しさん:04/05/22 20:30
計算しなさい。
1+1/1!+1/3!+1/5!+・・・+1/(2n+1)!
さっぱりわかりません。
どうかよろしくお願いします
>>41
(文字数-1)個ある、「隙間」ごとにスペースが入るか否かだから、
(文字数-1)桁の2進数と対応付ける。ただし文字数が多いとオーバーフローする。
# include <iostream>
# include <cstring>

int main(int, char **argv)
{
    const char *const str = argv[1];
    if(!str)
        return 1;
    const std::size_t len = std::strlen(str);
    for(unsigned long c = 0; c < (1ul << len-1); c++)
    {
        for(std::size_t i = 0; i < len; i++)
        {
            std::cout << str[i];
            if(c & (1ul << i)) std::cout << ' ';
        }
        std::cout << '\n';
    }
}

>>42
コンパイル時に文字数がわかるかどうかって事じゃないか?
45デフォルトの名無しさん:04/05/22 21:03
46デフォルトの名無しさん:04/05/22 21:11
漏れも
#include <stdio.h>
int factorial(int n){
if (n <= 1) return 1;
else return n * factorial(n - 1);
}
int main(void){
int i, n;
double y = 0.0;
printf("n >> "); scanf("%d", &n);
for (i = -1; i <= n; i++) /*気持ち悪いが*/
y += 1 / (double)factorial(2 * i + 1);


printf("(2) = %f", y);
return 0;
}
あーやっぱ初期値1.0で
for (i = 0; i <= n; i++)のほうが良かったな・・・ 
初歩的ですみません。
小さい順にソートなのですが、うまくいきません。
どこが間違っているのでしょう?
int main(void)
{
  int num[20];
  int i, j, n, tmp;
  printf("いくつの整数データを入力しますか?(~20)\n");
  scanf("%d", &n);
  printf("%d個の整数を入力してください\n", n);
  for(i = 0; i < n; i++){
    scanf("%d", &num[i]);
  }
  printf("\n");
  for(i = 0; i < n - 1; i++){
    for(j = 1; j < n; j++){
      if(num[i] > num[j]){
        tmp = num[j];
        num[j] = num[i];
        num[i] = tmp;
      }
    }
  }
  for(i = 0; i < n; i++){
    printf("%d", num[i]);
  }
  printf("\n");
  return 0;
}
テストすんのめんどくせーから
具体的にどうおかしいのか書いてくれ
入力と出力てなかんじで
>>48
隣の要素と比較しないといけない。
51デフォルトの名無しさん:04/05/22 22:05
 for(j = 1; j < n; j++){

 for(j=i+1;j<n;j++){
としたらどうだすか
>>49
nに3と入れて、3 2 1と入れると正常に
1 2 3 と出るのですが
nに4と入れて4 3 2 1 と入れると
1 4 2 3 と誤って出ます。

nに4以上の数を入れると全て誤って出てくるようです。
>>51
あ、あれ?うまくいきました。
(j = 1)と(j = i + 1)って違うんですかね?
>>53
そりゃ違う。

iとjをトレースしたらわかってきました。
有難うございました。
お騒がせしました。
56デフォルトの名無しさん:04/05/22 22:37
Cが全然わかんないあほちんに愛の手を…….
19の平方根を小数点以下第4位の精度で求め、これを表示するプログラムを作成せよ。なお4の2乗は16で、5の2乗は25なので、19の平方根は4と5の間であることはわかっているものとする。(sqrt関数は用いずに。)
よろしくお願いします。
>>56
頭悪い解法

double a=4;
double d;
for(d=0.5; d > 0.00005; d/=2){
a=(a+d)*(a+d)>19?a:(a+d);
}
printf("%1.4f\n",d);
>56
sqrt関数が禁止されてるのか・・・

pow(19.0,0.5)
59デフォルトの名無しさん:04/05/22 22:56
ランダムに0〜9の数を入れることはできるんでしょうか?
あほな質問ですいません。
お願いします
ラ0123ン4567ダ89ム
入れてみました。
61デフォルトの名無しさん:04/05/22 23:03
ライフゲームの課題がでたんですけど
どう手をつけたらいいのかわかりません。
教えていただけないでしょうか?
>>59
数字はだぶらないようにしたいの?
>59
int rand()={0,1,2,3,4,5,6,7,8,9};

古い処理系ではエラーになる。
64デフォルトの名無しさん:04/05/22 23:15
>>62
筆算の三桁の数同士を掛け合わる問題で、

    ○○○
  ×○○○
   ̄ ̄ ̄ ̄
    ○○○
○○○
○○○
 ̄ ̄ ̄ ̄ ̄ ̄
○○○○○

この中に0〜9を各2回づつ入れろというものです。
図がきたなくてすいません・・・
始めからそう書けよ。
66デフォルトの名無しさん:04/05/22 23:22
100行以上のBASICのプログラムをCに移植しろという課題が出たのですが、
100行以上のBASICのソースが見つかりません。
どこか、ソースを公開している場所を知っていれば教えてください。
6841:04/05/22 23:25
>>42
文字列が4文字なら4個のループを入れこにするとか
すごいアホな事を考えていました_| ̄|○

>>44
全くこんな方法は思いつきませんでした
原理は分かったのですが、十分に理解できていないので
これから考えてみたいと思います
ありがとうございました
おえ、せっかくかいたのに全然違うもんだったか
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 9
int r(int n){
return (double)rand() / (RAND_MAX + 1) * (n + 1);
}
void f_1(int *s, int n){
int i;
for (i = 0; i < n; i++) s[i] = r(N);
}
void f_2(int *s, int n){
int i, index, temp;
for (i = 0; i < n; i++) s[i] = i;
for (i = 0; i <10; i++){
index = r(N);
temp = s[i]; s[i] = s[index]; s[index] = temp;
}
}
void print(int *s, int n){
int i;
for (i = 0;i < n; i++) printf("s[%d] = %d\n", i, s[i]);
}
int main(void){
int s[10];
srand((unsigned)time(NULL));
puts("かぶりあり"); f_1(s, 10); print(s, 10);
puts("かぶりなし"); f_2(s, 10); print(s, 10);
return 0;
}
70デフォルトの名無しさん:04/05/22 23:29
・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
7169:04/05/22 23:29
どうでもいいんだろうけど
index = r(N);→index = r(n)
だった。
7269:04/05/22 23:33
いや違うr(n-1)だ、必要もないのにぐだぐだだ藁。
もとのほうがたまたまあってた藁。
7356:04/05/23 00:27
>>66さんありがとうございますた。早速コンパイルしてみます。^_^
迷路の作成and探索プログラムを作成する
奇数×奇数の迷路を作成 できるだけ難しい迷路を作成する。
探索のときは その迷路の最短ルートをできるだけ早く見つけ出す。
対戦形式で行い 迷路マップを交換し相手の作った迷路の最短ルートを制限時間5分でみつけた方が勝ち
どちらも最短ルートを求められた場合 早く解いたほうが勝ち
どちらも最短ルートが求められなかった場合 早く解いたほうが勝ち

 また作成時は (偶数,偶数)の場所には壁は置かないものとする
 1 2 3 4 5
1壁壁壁壁壁
2S     壁
3壁  壁壁壁
4壁     G
5壁壁壁壁壁
こんな感じ
マスの数はこちらで指定する。
 このプログラムのアルゴリズム教えてください
特に探索側の最速のアルゴリズムは何でしょう? 色々調べましたが
どのアルゴリズムが最速か分からなくて・・・
>>74
速く解くってだけが目的ならHand-on-wall(右手法、左手法などの別名も?)が
いいんじゃない?とにかく迷路はゴールまで行ける。

最短経路を求めるには

・各マスで上下左右の全てに行くよう再帰
・既に通ったマスには何らかのマークを付ける
・行き止まりなどの場合はマークを外しながら、他の道が見つかるまで戻る

みたいなアルゴリズムが使えるみたいだけど。手元に持ってる
河西朝雄「C言語による初めてのアルゴリズム入門」(技術評論社)
には、まんまのプログラムが載ってる。
76デフォルトの名無しさん:04/05/23 01:23
>>63
>int rand()={0,1,2,3,4,5,6,7,8,9};

こんなの初めて見るが新しい規格?
>>74
迷路の作成は今月のCマガに載ってたよ
最難のものを作るってのはよくわからんけど。
78デフォルトの名無しさん:04/05/23 01:56
datファイルの10X2のテーブルを
プログラミングに読み込みたいんですけど
どうしたらいいですか?
7978:04/05/23 01:58
宿題タイマンで手伝ってください、、。
お願いします。
80デフォルトの名無しさん:04/05/23 02:08
>>78
かかってこいやー
8180:04/05/23 02:15
>>78
もちょっと具体的にかいてくれないかなー
怠慢の仕様がない
メンバとしてdouble型の変数x y を持つクラスPointのメンバ関数として

Point move(double a,double b){
  x += a;
  y += b;
  return *this;
}

void print(void){
  cout << "Point [ " << x << " . " << y << " "<< endl;
}

のようなものを作成しました。コンストラクタは定義されているとします。
ここで、main関数内で

Point o(0.0,0.0);
( o.move(1.0,2.0) ).print();

のように書いたところ、g++では[ 1 . 2 ]
のような感じで表示されたのですが、Toolkit2003のcl.exeと、bcc32.exeでは
表示されません。何故なのか教えてください。
8378:04/05/23 02:26
>>80
まじでいいんですか?
http://49uper.com/up-s/index.php?mode=list
最初にここにあるうpローダーの一番上のzipファイルに目を通して
頂くとありがたいのですが、、、、、。
でもちょっと問題が、、、。
英語何ですよ、、、、。
お願いします。
8478:04/05/23 02:28
assignment とかいうやつです。
pdfファイルが入っているはずです。
ごめんなさい、偉そうに、、、。
8578:04/05/23 02:52
vt
0-0.545
50.462
102.163
154.446
207.304
2510.782
3014.962
3519.613
4025.034
4530.882
5037.558
5544.505
6052.241
6560.568
7069.435
7578.947
8089.156
8599.876
90111.294
95123.2
100135.618
8678:04/05/23 02:54
x   y  
0 -0.545
5 0.462
10 2.163
15 4.446
20 7.304
25 10.782
30 14.962
35 19.613
40 25.034
45 30.882
50 37.558
55 44.505
60 52.241
65 60.568
70 69.435
75 78.947
80 89.156
85 99.876
90 111.294
95 123.2
100 135.618

上のは失敗しました。
8780:04/05/23 02:56
okok
今よんどります
ぱっとみこれから線形最小2情報かな?
とりあえず読み込みだけ書きますわ
8878:04/05/23 03:00
要するにx と y の座標があるんですよ。
で、このyとxの関係を y =  ax^2 + bx + c で表せのことです。
a, b, c を c言語でプログラムをつくって
求めるということです。
8978:04/05/23 03:03
>>80
情報遅くてすいません。
9080:04/05/23 03:12
とりあえず入力の部分だけ
ごめん眠いから返信ちょっと遅れるかも。
心強い味方はいないっすかね〜



#include<stdio.h>
#include<stdlib.h>

int main(void)
{
FILE *f_load;
int i;
int x[20];
double y[20];

if (( f_load = fopen("in.dat" , "r") ) == 0) {
printf("Can't open %s \n", "in.dat" );
exit(1);
}

for( i=0 ; i<20 ; i++ ){
fscanf( f_load , "%d %lf" , x[i],y[i]) ;
}

fclose( f_load );


}
9178:04/05/23 03:12
>>87
こんな時間にほんとすいません。
頼れる人が回りにいなくて、、。
9278:04/05/23 03:17
>>90
ありがとうございます。
ちょっとborlandぶち込んで試してみますね。
9378:04/05/23 03:21
access violation 0x404277:write of address 0x400000
というエラーがまたでてしまいました。
でもここまでやってくれてありがとうございました。
9480:04/05/23 03:37
for( i=0 ; i<20 ; i++ ){
fscanf( f_load , "%d %lf" , x[i],y[i]) ;
}



for( i=0 ; i<=20 ; i++ ){
if(i==0){
}
fscanf( f_load , "%d %lf" , x[i-1],y[i-1]) ;
}

にしてみ。in.datの最初の行のx,yを読んでるんじゃないかな?

今コンパイラなくて頭でコンパイルのため動作未確認w
ってかif(i=0){}でコンパイルとうるかギモンだが。
確実なのはin.datの最初の行を修正
9578:04/05/23 03:43
>>80
in.dat の最初の行の修正とは?
x   y  
0 -0.545
5 0.462
10 2.163
15 4.446
20 7.304
25 10.782
30 14.962
35 19.613
40 25.034
45 30.882
50 37.558
55 44.505
60 52.241
65 60.568
70 69.435
75 78.947
80 89.156
85 99.876
90 111.294
95 123.2
100 135.618

また説明不足だったんですが、一行目のx、yはin.datにはふくまれていません。
追加したほうがいいですよね?
>>93,94
for( i=0 ; i<20 ; i++ ){
fscanf( f_load , "%d %lf" , x[i],y[i]) ;
}

for( i=0 ; i<20 ; i++ ){
fscanf( f_load , "%d %lf" , x+i,y+i) ;
}
にするべし。fscanfの後ろはアドレスを渡さないと。
9778:04/05/23 03:47
みなさんヘルプありがとうございます。
一応エラーは出なくなりましたが、exeファイルを
オープンしても一瞬でてすぐ閉じてしまうのですけど
どうしてでしょうか?
9878:04/05/23 03:48
>エラーがでなくなった
というのはin.datファイルの先頭にx、yを追加したら
エラーはなくなりました
>>97
プログラムの最後にキーを押すまで終了させないようなコードを書けば大丈夫。
10078:04/05/23 03:58
char check

printf("Press any key followed by Enter\n");
scanf(" %c", &check);

で、できました。
が肝心のテーブルがでてきません。
何がいけないんしょうか?
それとも普通出るものではないのですか?
10178:04/05/23 03:58
>>99
お礼言うの忘れてました。
ありがとうございました。
>>80
もはや流れて,問題探すのメンドイ。
ガンガレ
>>100
データファイルが最初の形に戻っていいなら
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=70

計算の途中までを書いてる。
10478:04/05/23 04:13
>>103
ここまでやってくれてありがとうございます。
でもいまだに何も理解できない自分が悔しいです。
それと
>データファイルが最初の形に戻っていいなら
と言うことはどういうことでしょうか?スイマセン
10578:04/05/23 04:15
あとはa1 a2 a3を求めるだけですね、、。あとデルタを、、。
>>78
最初の行に「x y」が含まれていない形。要するに
----ここから下----
0 -0.545
5 0.462
(中略)
90 111.294
95 123.2
100 135.618
----ここまで----
ということ。ついでにΔ(=a[0])とa1〜a3を求める所まで進んだ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=71
10780:04/05/23 04:19
>103様
僕も間違ってたのですが
#define N 20ではなく
#define N 21ですね.
もうすこしで完成ですね
みまもりつつねまーす(^^;
10878:04/05/23 04:23
>>106
だんだんついていけなくなってきましたが
がんばってください、、。
10978:04/05/23 04:25
delta=a[0]と、、、。
11078:04/05/23 04:33
x,yをin.datから取り除いたら綺麗にa1〜a3が出ました
そういえばa1,a2,a3等はfloat, int 等はしなくていいんですか?
11178:04/05/23 04:33
書き込めなくなってきた
>>110
floatは色んな意味で無駄なので、浮動小数はdoubleで統一してる。
あと、a1,a2,a3は1未満の値になっているので、intにキャストすると0になってしまいます。

えぇっと、今はコメントをつけて分かりやすくしているつもりです。
113デフォルトの名無しさん:04/05/23 04:45
>>78
Δと係数の書き込みまで完了。ついでにコメントつけました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=72

次コードを上げるのは多分完成してから。
11478:04/05/23 04:45
>>112
ほんとにありがとうございます。

例えば普段ある数式が一未満になる場合 int じゃなくて float を使えばいいんですよね?
この問題を例外として。

>floatは色んな意味で無駄なので、浮動小数はdoubleで統一してる。
これについて詳しく教えてください。
11578:04/05/23 04:47
>>113
まってください!!
ここからは自分でやらさせてください!!
と思ったんですけど
完成版うpしてください!!

なんか言ってることがわからないですが
お願いします。
ありがとうございました。
>>114
とりあえず質問への返答だけ。

@floatはCPUの内部演算としては一旦doubleに変換されている、と以前どこかのスレで見た。
Afloatは有効桁数(つまり精度)がdoubleの半分くらい。

ということで、こういう(浮動小数を使う)計算をする時は大抵精度が大事なので
しかも@が事実ならキャストする分、floatの方が遅くなるわけで
敢えてfloatを選ぶのは、そこまでしてメモリを確保したい時だけ。

>>115
まあこっちは好きでやってるだけなんで、うpする/しないはどっちでもいいんですよ。
11778:04/05/23 04:59
>>116
返答ありがとうございました。
ではうpお願いします。待ってます。
失礼な態度でスイマセン
118学生A:04/05/23 05:02
五人の成績を入力して、各学生の平均点を求め、
平均点の高い順にソーティングして
下に示すように結果を出力するようなプログラムを作成してください。

入力データ
 学生番号 国語 算数 英語 平均点
 2001 70 85 60 71.67
2002 100 65 70 78.33
2003 80 85 75 80.00
2004 60 85 90 78.33
2005 70 100 60 76.67

出力の結果
 順位 学生番号 国語 数学 英語 平均点
1 2003 80 85 75 80.00
2 2002 100 65 70 78.33
3 2004 60 85 90 78.33
4 2005 70 100 60 76.67
5 2001 70 85 60 71.67

よろしくお願いします!!
119デフォルトの名無しさん:04/05/23 05:08
すいません >>64は無理なんでしょうか・・・
>>119
取り敢えず、問題文を正確に書き直してみてくれ。
ランダムに数字を放り込むだけなのか、その筆算を正確に実現しなければならないのか、
それすらよくわからんぞ。
#つーか、後者ならプログラムを作るまでもなく解けるパズルなのだが。
>>78
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=73

一応できました。
最後はデータの入力元を指定されていなかったので、内部に書き込みました。
全部理解できていれば、外部ファイルからの入力だったとしても対応できるでしょう。

あと、解を求めるとこは煩雑になってますが、よく見ると普通のことしかやってないです。
12278:04/05/23 05:34
>>121
キターーーーーーーーーーーほんとにありがとうございます。
こんな朝からほんとにすいません。
決してただこれをコピーするだけでなく
ここからもっと学べればイイと思ってます。
お疲れ様でした。
ちょっとみてみますね。
12378:04/05/23 05:37
>>121
大将、完璧でゴワス。
お礼のしようがないです。
ほんとに長い時間掛けてやって
頂いてありがとうございました。
12478:04/05/23 05:44
それでは失礼させてもらいます。

ありがとうございました。
>>123
喜んで頂けて何よりッス。
んじゃ寝ます。

>>118はもう少し情報があったらやってみようと思ったけど…
入力元はファイル?平均って計算させないの?
んで一応構造体使って

struct Gakusei {
int gaku_num;
int kokugo;
int sansu;
int eigo;
double avg;
};

struct Gakusei* students[5];

みたいにしたら、swapが簡単かな、ということまでは考えた。では。
>>116
>floatはCPUの内部演算としては一旦doubleに変換されている・・
>キャストする分、floatの方が遅くなるわけで敢えてfloatを選ぶのは、そこまでしてメモリを確保したい時だけ。

floatの方が早い処理系も多い。
VCとか。
手持ちの処理系で実際に比較してみることを勧める。
127kinkyuu:04/05/23 07:13
始めにテキストファイルが与えられていて、

人名○○○○
番号XXXX
希望順位A
希望順位B
   :
   :
希望順位N

という情報が複数並んでいます。
人名はあいうえお順になっていて、番号は000101,000102,・・・000120
まであります。
希望順位は1〜4までの数字が、数字のみランダムで書かれています。
つまり
Asahi Kenji
000101
1
3
2
4
というようになっています。
このファイルを読み込んで、その人の希望順位のみを配列に入れたいのですが、どうしたらいいのでしょうか。
よろしくお願いします。
>>127
よくわかんない。
>>1を読んでから質問しなおした方がいいと思うよ。
129kinkyuu:04/05/23 10:34
分かりづらいようですみません。もう少し頭の中で練ってから出直してきます。
130デフォルトの名無しさん :04/05/23 11:06
「1〜100までの任意の整数値をN個1次元配列に読み込み、その総和と平均値を求め、
次に80〜100、70〜79、60〜69、59以下の個数を出力するプログラムを作成せよ。
ただしC言語限定かつデータ個数N、各データはキーボードから入力すること」

教えて偉い人!
>130
scanf("%d",&N);
tbl=(int *)malloc(sizeof(int)*N);
sum=0;
rank_a=rank_b=rank_c=rank_d=0;
for(i=0; i<N; ++i){
scanf("%d", tbl+i);
sum+=tbl[i];
if(tbl[i]>=80) ++rank_a;
else if(tbl[i]>=70) ++rank_b;
else if(tbl[i]>=60) ++rank_c;
else ++rank_d;
}
printf("総和:%d,平均:%.1f\n",sum,(double)sum/N);
prinf("80〜100:%d、70〜79:%d、60〜69:%d、59以下:%d\n",rank_a,rank_b,rank_c,rank_d);
>>131
if(!scanf("%d", tbl+i) || nTmp < 1 || nTmp > 100)
{
printf("入力された値が異常です。\n");
--i;
continue;
}
133132:04/05/23 11:47
あ・・・。
if(!scanf("%d", tbl+i) || *(tbl+i) < 1 || *(tbl+i) > 100)
134kinkyuu:04/05/23 11:54
始めに、テキストファイルで与えられているデータ

…01…
Asahi Kenji       氏名
000101      学生番号
2
1          }希望順位。ランダム
3
4

中略

…20…
Tokuda Shin
000120
1
2
4
3

があります。
これらを次の構造体

typedef Jouhou{
char name[80];    氏名
char serial[80];    学生番号
int hope[20];      希望順位
int result;       結果(プログラムの最後に入力)
}JOUHOU;

に格納したいのですが、どうやったらいいのかわかりません。
よろしくお願いします。
>>129
>もう少し頭の中で練ってから出直してきます。
頭の中で練るから分かりづらくなるんだYO!
問題そのまま全文丸写しの方がたぶん分かりやすいYO!
136135:04/05/23 11:59
>>134
(・3・)エー リロードしてなかったC
     >>135は無視してYO!
137デフォルトの名無しさん:04/05/23 12:01
計算しなさい。
1!
3!
5!
7!

(2n+1)!

全部を足すのではなく各階乗について求めるのですがわかりません。
どうかお願いします
各階乗を求めるの?
>>134
分からないのは次のどれ?
1.ファイルからの読み込み
2.文字列のコピー
3.構造体のメンバへのアクセス

あとtypedef Jouhou じゃなくて typedef struct Jouhou ね。


>>137
/* n!を求める関数 */
int fact(int n)
{
int ret = 1;
int i;
for (i = 1; i <=n; ++i) ret *= i;
return ret;
}
140kinkyuu:04/05/23 12:13
>>139
わからないのは、文字列をコピーして構造体へ格納する事です。
あと、ご指摘はそのとおりです。すみませんでした。
>>137
#include <stdio.h>
int factorial(int);
int main()
{
int Max = 0, i;
printf("n > ");
scanf("%d", &Max);
for(i = 1; i <= Max * 2; i++)
printf("%d! = %u\n", i, factorial(i));
return 0;
}

int factorial(int Source)
{
int i, Result = 1;
for(i = 1; i <= Source; i++) Result = Result * i;
return Result;
}
142141:04/05/23 12:17
> for(i = 1; i <= Max * 2; i++)
訂正
for(i = 1; i <= Max * 2 + 1; i++)
#include <stdio.h>

int factorial(int i)
{
int j,k=1;
for(j=1;j<=i;j++)
k*=j;
return k;
}

int main()
{
unsigned int n,i;
printf("1!,3!,・・・+(2n-1)!を求める。\nnを入力 : ");
scanf("%d",&n);
for(i=1;i<=2*n-1;i+=2)
printf("%d! = %d\n",i,factorial(i));
return;
}
>>133
> !scanf("%d", tbl+i)
これダメだろ。

戻り値は
 代入された入力項目の数 - 正常終了。
 0 - 失敗。
 EOF - 読み取りエラー。

145学生A:04/05/23 13:52
問題がわかりにくくてすみませんでした。
それでは問題を丸写しします。

五人の学生の国語、数学、英語の成績を入力して各学生の平均点を求め、
平均点の高い順にソーティングして下に示すように結果を出力するような
プログラムを作成してください。なお、入力したデータを確認するために
出力を最初に行うこと。

入力データ
 学生番号  国語  数学  英語   平均点
 2001  70  85  60  71.67
 2002 100  65  70  78.33
 2003  80  85  75  80.00
 2004  60  85  90  78.33
 2005  70 100  60  76.67

結果の出力
 順位  学生番号  国語  数学  英語   平均点
  1  2003  80  85  75  80.00
  2  2002 100  65  70  78.33
  3  2004  60  85  90  78.33
  4  2005  70 100  60  76.67
  5  2001  70  85  60  76.67

という問題です。入力するのは3科目の点数だけだと思います。
どうかよろしくお願いします!
146デフォルトの名無しさん:04/05/23 15:02
>>145
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1082632296&res=6
とりあえずファイルの中身を表示するまで書きました
では買い物に行ってきます (^o^)/
147146:04/05/23 15:06
あっ125さんが構造体書いてた。
こっち使ってほしいな > 続き書く人

struct Gakusei {
int gaku_num;
int kokugo;
int sansu;
int eigo;
double avg;
};

struct Gakusei* students[5];
148デフォルトの名無しさん:04/05/23 15:09
プログラムっていうかリンクについてなんですけど
テキスト、バナー以外にリンクしちゃいけないんですかね?
>>148
死ねば?
151デフォルトの名無しさん:04/05/23 15:58
スタックやキューは構造体リスト、配列、リングバッファなどの方法で実現可能である。
これら3種類の方式について、利点、欠点をそれぞれ記述せよ。

というような問題が出ました。
この問題の前に構造体、配列、リングバッファの3方式でプログラムを書いてみたのですが、利点や欠点がいまいちわかりません。
教えてもらえないでしょうか?お願いします。

「構造体リスト」というのはなんだ?
struct A {
int data;
struct A* next;
}
とか?
153151:04/05/23 16:20
そうです。
なにか利点や欠点があるのでしょうか?
>>145
漏れもさっき書いたんだがアク禁になっていて書き込めなかった・・・
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1074774948&res=9
「構造体リス」トって何打?
156153:04/05/23 17:31
データ構造として、以下の構造体を利用したリスト構造を用いること。
struct cell{
double num;
struct cell *next;
};
このような条件があたえられて作ったスタックやキューのことです。(多分)
>>156
使用される記憶領域の大きさが"いつ"決定されるかとか、リストの要素
の入れ換えや削除のときに"どれだけ時間がかかるか"とかを考えてみ。
158デフォルトの名無しさん:04/05/23 18:35
フォーム上に textBox1 と button1 があり、
クリックしたら Text プロパティをintに変換したい

private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
{
  int a;
  a=textBox1->Text->ToInt32;
}

4行目を↓のようにしてもうまくいかず・・・どうやれば上手くいくのでしょうか?
a=atoi((char)textBox1->Text);
C++ってGUIを定義していたっけ?
>159 たぶんヴィジュアルなんとかでしょう→専用すれへgo
これはC#だけどな。
buttonと見ただけでGUIと決め付けたり、
知らない振りしてVCスレへ誘導しようとしたり
MS叩きたいだけのアホが沸いてますな。
>>159-160
すいませんVC++スレに行ってきます
>>161は考えすぎ もしくは2chに居過ぎ
というか、C#ならもっとスレ違い。
>>162
なんでVC++スレなんだよ
C#スレへ行けよ
VC++なんですが
VC++なのにC#と言ってる馬鹿が
161みたいなのを見るたびにID導入してほしくなる
なんか 適切な誘導 = M$叩き っていう人よくみるね。
こんにちわ
ガウス積分のnを色々変えれるプログラムがどうしても欲しいのですが、
どなたか作っていただけないでしょうか?
171デフォルトの名無しさん:04/05/23 21:09
計算しなさい。
1+(1+2)2乗×2+(1+2+3)2乗×3+・・・+(1+2+・・・+n)2乗×n
見にくくてすみません。
初心者でよくわからないのでお願いします。
>>171
まあ、宿題的には多分、
int result = 0;
for(int m=1; m<=n; ++m)
{
int sum = 0;
for(int l=1; l<m; ++l)
sum += l;
result += sum * sum;
}
として欲しいだろうけど、下式で計算できる。

result = 農{m=1}^{n} {農{l=1}^{m} l}^2
= 農{m=1}^{n} {(1/2)m(m+1)}^2
= (1/4)農{m=1}^{n} {m^4 + 2m^3 + m^2}
= (1/4){(1/30)n(n+1)(3n^2 + 3n - 1) + (1/2)n^2(n+2)^2 + (1/6)n(n+1)(2n+1)}
= (1/120)n(n+1)(18n^2 + 28n + 4)
↑途中、計算間違いしてないかどうかは自信ない。
173170:04/05/23 21:39
ガウス積分のnを色々変えるには、
以下のプログラムをどう直せばよいのでしょうか?

#include <stdio.h>
#include <math.h>

double f(double x)
{ return 1./(x*x*x); }
double gauss1d(a, b)
double a, b;
{
double r[2]={.652145158, .3478548451}, s[2]={.3399810435, .8611363115};
double x2, x1, y, u=0.0, q;
int k;
for (k=0; k<2; k++){
x1 =(s[k]*(b-a)+a+b)/2.; x2 = (-s[k]*(b-a)+a+b)/2.;
y=f(x1)+f(x2);
u=u+r[k]*y;
}
q=(b-a)*u/2.;
return q;
}

main()
{ printf("f(x)dx = %f\n", gauss1d(1., 2.)); }


>170
こ ん ば ん は だろっ!
C言語なら俺に聞け! より抜粋。

------
620 名前:615[sage] 投稿日:04/05/23(日) 21:06
>>619
俺もぐぐったのですが、
nの数を変えれるプログラムが見つからなくて。
すいません。教えてください。

621 名前:デフォルトの名無しさん[sage] 投稿日:04/05/23(日) 21:55
どれがnなのか。
------

621に激しく同意。
176デフォルトの名無しさん:04/05/24 00:00
ラグランジュ補間のプログラムを作成する。
1−1  n=10のとき sin(0.25), P(0.25)を比べる。
  2  x=x[i], y[i]=P(x)となっていることを確認せよ。

ニュートン補間のプログラムを作成する。
2−1 n=10のとき  sin(0.25), P(0.25)を比べる。
  2 補間点で0であることを確認せよ。

という問題です。
初心者で本当に分からないので、どうか教えてください。
お願いします。
177デフォルトの名無しさん:04/05/24 00:18
「希望研究室配属システムの構築」の課題なのですが
指定が多くて全部書くと長くなるのでweb上においときました

http://sora0206.hp.infoseek.co.jp/index_kakimono.html

よろしくおねがいします
>>172
(1/120)n(n+1)(n+2)(5n^3+12n^2+4n-1)の間違い
179デフォルトの名無しさん:04/05/24 00:30
システムの構築ってプゲラ
どこのボンクラ大学ですか?
>>176
n,P(x),x,x[i],y[i]がそれぞれ何の意味なのかが分からない。
その課題の前に他の説明か、それぞれのプログラムが示されているだろう?

情報を充分に伝えないのに教えてくれなんて無茶を言うな。
181176:04/05/24 01:22
>>180
無茶苦茶なことを言ってすみませんでした。

double φ[n]
double x[n];
y[n];
for ( k=0 ; k<n ; k++ ){
for ( l=0 ; l<n ; l++ ){
if ( l != k ){
φ[k]=φ[k]×(x-x[l])/(x[k]-x[l]);
}
}
double P=0;
for ( i=0 ; i<n ; i++ ){
P=P+y[i]×φ[i];
}
for ( i=0 ; i<n ; i++ ){
x[i]=-1+2i/n;
}
for ( i=0 ; i<n ; i++ ){
y[i]=sin(x[i]);
}
]

ラグランジュ補間についてなされた説明は上の通りです。
これで伝わりましたでしょうか?
ニュートン補間についてなされた説明をこれから書きます。
>177
>・プログラムのheaderファイルの中で、研究室数、学生数を定義して良い
>・研究室情報、学生情報はそれぞれ構造体でまとめて扱う

/* 研究室設定定義ファイル(研究室情報) */
struct _lab{
char name[256];
int limit;
};
#define NUM_OF_LAB 4
 
/* 研究室設定定義ファイル(学生情報) */
struct _stu{
char label[256];
char name[256];
char id[256];
int wish[NUM_OF_LAB];
};

まずはここらへんから
183176:04/05/24 01:31
ニュートン補間についての説明です。

n
PN(x)=巴kωk(x)
k=0

b[0]=y[0];
for ( n=0 ; n<=N ; n++ ){
b[n]=y[n];
for ( l=0 ; l<n ; l++ ){
b[n]=(b[n]-b[l])/(x[n]-x[l]);
}
}

P=b[N];
for ( n=N ; n>0 ; n-- ){
P=b[n-1]+(x-x[n-1])×P;
}

どうかお願いします。教えてください。
18474:04/05/24 01:44
レス下さった方ありがとうございました。
>>75
その本ありました。 一応それをもとにも作ったのですが
最速かどうか自信なくて・・・ 
テキストをスキャンしてみました ちょっと目を通して
どなたかアルゴリズムだけでも考えて教えてください
http://49uper.com:8080/img-s/1874.jpg
http://49uper.com:8080/img-s/1875.jpg
185デフォルトの名無しさん:04/05/24 02:17
n次関数 f(x)=(a0)x^n + (a1)x^(n-1) + (a2)x^(n-2) + …… + a(n-1)x + (an)
において n=5 のとき任意の係数 (a0),(a1),(a2),(a3),(a4),(a5) 
をキーボードより入力し、f(x)=0 となる
 x の値を求めよ。
ただし、a0=0のとき終了、それ以外は繰り返しとする。
実行結果ファイルも作成すること。

お願いします
187185:04/05/24 05:48
一応ここまでなんですが、ここからどうすればいいのやら・・・。
お願いします

#include <stdio.h>
#include <math.h>
#define Eps 0.000000000001 // 収束条件

double a0, a1, a2, a3, a4, a5;
double b0, b1, b2, b3, b4, b5, c0, c1, c2, c3, c4;
double x0, x1, tmp;
double p0, p1, p2, p3, p4;

double f(double x) // サブ関数 f(x)
{
return ((((x + b1) * x + b2) * x + b3) * x + b4) * x + b5;
}

double df(double x) // サブ関数 f'(x)
{
return (((c0 * x + c1) * x + c2) * x + c3) * x + c4;
}

188185:04/05/24 05:48
int main(void)
{
printf(" f(x) = a0*x^5 + a1*x^4 + a2*x^3 + a3*x^2 + a4*x + a5\n\n");

printf(" InputData a0 : "); scanf("%lf", &a0);
printf(" InputData a1 : "); scanf("%lf", &a1);
printf(" InputData a2 : "); scanf("%lf", &a2);
printf(" InputData a3 : "); scanf("%lf", &a3);
printf(" InputData a4 : "); scanf("%lf", &a4);
printf(" InputData a5 : "); scanf("%lf", &a5);

b0 = 1.0; b1 = a1 / a0; b2 = a2 / a0; b3 = a3 / a0; b4 = a4 / a0; b5 = a5 / a0;
c0 = 5.0 * b0; c1 = 4.0 * b1; c2 = 3.0 * b2; c3 = 2.0 * b3; c4 = b4;

printf("\n");
printf(" f(x) = a0*x^5 + a1*x^4 + a2*x^3 + a3*x^2 + a4*x + a5 元の式\n");
printf(" f(x) = b0*x^5 + b1*x^4 + b2*x^3 + b3*x^2 + b4*x + b5 標準化\n");
printf(" f'(x) = c0*x^4 + c1*x^3 + c2*x^2 + c3*x + c4 微分\n\n");
189185:04/05/24 05:49
int main(void)
{
printf(" f(x) = a0*x^5 + a1*x^4 + a2*x^3 + a3*x^2 + a4*x + a5\n\n");

printf(" InputData a0 : "); scanf("%lf", &a0);
printf(" InputData a1 : "); scanf("%lf", &a1);
printf(" InputData a2 : "); scanf("%lf", &a2);
printf(" InputData a3 : "); scanf("%lf", &a3);
printf(" InputData a4 : "); scanf("%lf", &a4);
printf(" InputData a5 : "); scanf("%lf", &a5);

b0 = 1.0; b1 = a1 / a0; b2 = a2 / a0; b3 = a3 / a0; b4 = a4 / a0; b5 = a5 / a0;
c0 = 5.0 * b0; c1 = 4.0 * b1; c2 = 3.0 * b2; c3 = 2.0 * b3; c4 = b4;

printf("\n");
printf(" f(x) = a0*x^5 + a1*x^4 + a2*x^3 + a3*x^2 + a4*x + a5 元の式\n");
printf(" f(x) = b0*x^5 + b1*x^4 + b2*x^3 + b3*x^2 + b4*x + b5 標準化\n");
printf(" f'(x) = c0*x^4 + c1*x^3 + c2*x^2 + c3*x + c4 微分\n\n");
190185:04/05/24 05:51


if(a5 != 0.0) // 5次式の判定
{
x1 = 0.0; x0 = -100.0;

printf(" x1 = x0 - f(x0) / df(x0)\n\n");
while(fabs((x1 - x0) / x0) > Eps)
{
x1 = x0 - f(x0) / df(x0);
printf("%20.14lf %20.14lf %28.16lf %28.16lf\n", x1, x0, f(x0), df(x0));
tmp = x0; x0 = x1; x1 = tmp;
}
}
else
x0 = 0.0;

printf("\n");
printf(" 一実根 : %20.14lf\n", x0);
p0 = 1.0; p1 = b1 + x0; p2 = b2 + x0 * p1; p3 = b3 + x0 * p2; p4 = b4 + x0 * p3;

printf("\n");
printf(" g(x) = p0*x^4 + p1*x^3 + p2*x^2 + p3*x + p4 四次式の係数\n\n");
printf(" p0 :%20.14lf\n p1 :%20.14lf\n p2 :%20.14lf\n p3 :%20.14lf\n p4 :%20.14lf\n",
p0, p1, p2, p3, p4);

return 0;
}

かぶった・・・。
すいません。。。
あと、汚してごめんなさい
192191:04/05/24 07:48
f1() はまともな振り分けアルゴリズム。
f2() はメモリアクセス違反防止のインチキ
193デフォルトの名無しさん:04/05/24 11:35
_labo _studentのファイル作って
>>191
のソースでコンパイルすればできるんですよね?
エラーがでるんですが・・・・
エラーが出るんですが、だけじゃ超能力者にしか解決できません。
195デフォルトの名無しさん:04/05/24 12:00
>>193
エラー E2140 103 ここでは宣言できない(関数 f1)
エラー E2141 103 宣言の構文エラー(関数 f1)
エラー E2139 153 宣言に;がない(関数 f1)
エラー E2190 153 不要な}

警告 W8060 175 :おそらく不正な代入(関数 main)
警告 W8060 176 :おそらく不正な代入(関数 main)
警告 W8070 209 :関数は値を返すべき(関数 main)

とこんな感じです
カッコの対応関係がおかしいんじゃねーの?
ttp://www.sist.ac.jp/~suganuma/learn/2-bu/6-sho/6-1/6-1.htm
の(プログラム例6.3) 大文字から小文字への変換 の解答を教えてください。
198仕様書無しさん:04/05/24 12:52
>>197
ある文字xを大文字にする。
x = toupper(x);

でも、そこのページだとこれは不正解だそうだ。
+32するのが正解なんて、アホかと。
>>197
tolower()
200仕様書無しさん:04/05/24 12:55
大文字にすると小文字にするを激しく間違えていた。
鬱死
せめてc + 'a' - 'A'とか。どっちにしろ環境依存だが。
C++の先輩方に質問です。
X,Y,Zの3人の国語、数学、英語のそれぞれの平均点を表示するプログラムを構造体を用いて作成せよ
って言う問題なのですが見本回答を教えてください。
データ(数字とか)は自由です。
よろしくお願いしますm( )m
それぞれの平均

各教科についてのXYZ3人の平均
XYZ3人の各教科の平均

どっち?
>>203
XYZ3人の各教科の平均です。
205超初心者:04/05/24 13:40
#include <stdio.h>

void main(void)
{
float a,b,c;
printf("----addition and subtraction----\n");
a=1e-7;
b=1.0+a;
c=b-1.0;
printf("a=%e=%23.17e\n",a,a);
printf("b=%e=%23.17e\n",b,b);
printf("c=%e=%23.17e\n",c,c);
printf("a=%23.17e\n",a);
printf("b=%23.17e\n",b);
printf("c=%23.17e\n",c);
}
で、c=(1.0+a)-1.0=aにならない理由はなんでですか?
どなたか助けて下さい。お願いします。


206仕様書無しさん:04/05/24 13:46
>>205
float型はせいぜい6〜7桁しか有効でないから。
207仕様書無しさん:04/05/24 13:50
VC++6(cl.exe 12.00.8804)で>>205をコンパイルすると、
最適化なし:
----addition and subtraction----
a=1.000000e-007=1.00000001168609740e-007
b=1.000000e+000=1.00000011920928960e+000
c=1.000000e-007=1.00000001168609740e-007
a=1.00000001168609740e-007
b=1.00000011920928960e+000
c=1.00000001168609740e-007

最適化あり(/O2):
----addition and subtraction----
a=1.000000e-007=9.99999999999999950e-008
b=1.000000e+000=1.00000010000000010e+000
c=1.000000e-007=1.00000000058386720e-007
a=9.99999999999999950e-008
b=1.00000010000000010e+000
c=1.00000000058386720e-007

結果が変わるんだね。ちょっと勉強になった。
208海亀:04/05/24 13:55
209207:04/05/24 13:57
え、でもa=1e-1でも変ですよ?
恥ずかしい質問ですけど1e-1はなんで
1.00000001490116119e-01になるんですか?
210207:04/05/24 14:02
そもそもeとは10の指数表示という意味ではないんですか?
211仕様書無しさん:04/05/24 14:03
>>209
207って名前使ってるけど、オマイはオレか?w
2進数の小数表現について習っていないのかい?
1e-1というのは0.1のことだ。0.1を2進数で表現すると無限小数になる。
どっかで丸めないとならないわけで、その分誤差が生じるわけだ。
212205:04/05/24 14:06
ああすみません。
2進数なんて知りませんでした。
有難うございました。m( )m
213仕様書無しさん:04/05/24 14:07
>>202
ベタなCプログラムを作ったけど改行が多すぎてカキコできなかった。残念だ。
214デフォルトの名無しさん:04/05/24 14:11
おにいちゃん、try-catchの問題はさせてくれないの?
215デフォルトの名無しさん:04/05/24 14:21
void*型で受け取ったポインタを、任意のsizeでキャストしたいんですが、
どうしたらよいでしょうか?

int sample(void* x,size_t size) {

}

上記の関数内で、xを sizeの大きさの型のポインタとして扱いたいんです。
ご教授ください。m(_ _)m
とりあえずwinなら

if (size == 1) {
 c = *(char*)x;
} else if (size == 2) {
 s = *(short*)x;
} else if (size == 4) {
 i = *(int*)x;
 l = *(long*)x;
 f = *(float*)x;
}

こんな感じにすれば?
217仕様書無しさん:04/05/24 14:33
>>215
どういうシチュエーションでそういうキャスト変換が発生するの??
218215:04/05/24 14:33
>>216
レス、ありがとうございます。
しかし、構造体のポインタでも扱えるようにので、
他にやり方があれば、ご教授お願い致します。
>>218
わかんないかな、ネタだよ。
サイズ->型と一意に決定できるものじゃないから、解決手段はなし。
220215:04/05/24 14:41
>>217
標準関数の、bsearch() と同じ引数で、
配列が昇順で並んでいなくても検索できるように、
線形探索のアルゴリズムで検索する関数を作成しなさい。
と、いう宿題なんです(T_T)。

bsearch() については、こちらを↓
http://docs.hp.com/ja/B2355-60104-06/rn03re46.html
>>220
検索する人が比較関数で型を決め打ちできるので、
サイズから型を認識する必要はないよ。
222215:04/05/24 14:47
>>219
解決手段はなしですか…。
ご回答ありがとうございました。
1バイトのcharへのポインタにキャストしろ。
>>222
考え方が間違っているだけだよ。
どうして型を知る必要があると考えたんだ?

一度bsearch()を利用したプログラム書いてごらん。
それとも宿題丸投げしてみる?
225デフォルトの名無しさん:04/05/24 14:51
226215:04/05/24 14:53
>>220
関数内で、配列のポインタを進める必要があるのですが、
void*型のままだと、エラーになるんです。

>>223
そうですね。その方法でやってみます。

ありがごうとざいました。
227215:04/05/24 14:57
>>224
関数内で、配列のポインタを進めた値を比較関数に渡す必要があるのですが、
void*型のままだと、ポインタを進めた値が求められずエラーになるんです。
>>223のやり方で行うのがよさそうですね。
ありがとうございました。
228223:04/05/24 14:58
テストしていないけれどこんな感じか?

void *lsearch(const void *key,const void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *))
{
size_t i;
const unsigned char *pbase=(const unsigned char *)base;

for(i=0;i<nmemb;i++,pbase+=size)
if(!(*compar)(key,pbase))
return pbase;

return NULL;
}
229仕様書無しさん:04/05/24 15:03
>>226
まず大前提として、bsearch()を使ったことはあるのか?

charにキャストすればコンパイルは通るが、望み通りの結果は得られないだろうな。
230215:04/05/24 15:08
>>228
そんな感じでいけそうです。ありがとうございます。

>>229
bsearch()はテキストに載っているサンプルリストで使ったことがあるぐらいです。
一応、意味はわかっているつもりなんですが…。
>>223 のように、
char型にキャストして、進めたい値にsizeを掛けた分進めれば、
できそうですね。
231202:04/05/24 15:32
>>213
ええそんなーー。。
誰か教えてくだせー。。

X,Y,Zの3人の国語、数学、英語のそれぞれの各教科についてのXYZ3人の平均点を表示するプログラムを構造体を用いて作成せよ
って言う問題なのですが見本回答を教えてください。
データ(数字とか)は自由です。
よろしくお願いしますm( )m
232仕様書無しさん:04/05/24 15:38
>>231
213だけど、どうがんばっても行数が収まらなかったんで、考え方だけ伝えておくよ。
構造体は、下のようになる。
struct TestScore {
double kokugo, suugaku, eigo;
};
XYZの三人だから、配列を使うのがいいだろ。struct TestScore students[3];
あとは各々配列と構造体要素にscanfでもなんでも使って代入、平均値計算しておわり。
構造体にdoubleをつかってるのは、平均値を管理するのにも使いたいから。
>>232
>>1のうpろだ使えばいいじゃん
234仕様書無しさん:04/05/24 15:56
235202:04/05/24 16:10
>>234
サンクス!
236デフォルトの名無しさん:04/05/24 16:22
☆★☆★ 日本語プログラミング言語『ひまわり』 ☆★☆★

日本語で『こんにちはと、言う。』と入力すれば
ダイアログに『こんにちは』と出るプログラミング言語登場!!
PNGもサポートしてるので、かなりおすすめです!!
また、【『http://www.xxxx.xx/』を、『index.htm』へ、HTTPダウンロード。】
とすれば自動的にダウンロードできる優れ物です!!

↓日本語プログラミング言語『ひまわり』
http://hima.chu.jp/index.htm
↓日本語プログラミング言語『ひまわり』スレッド
http://pc5.2ch.net/test/read.cgi/tech/1083053283/l50
237デフォルトの名無しさん:04/05/24 18:17
初心者でぜんぜんわからないのでお願いします。
計算しなさい。
1!
3!
7!

(2n+1)!
どうかお願いします。
>>237
それちょっとまえに答え出なかったか?
#include <stdio.h>
int factorial(int n)
{
/*このスレのどっかにあるから探せ。*/
}
int main(void)
{
int i, n;
scanf("%d", &n);
for (i = 0; i <= n; i++)
printf("%d! = %d\n", 2 * i + 1, factorial(2 * i + 1));

return 0;
}
int factorial(int i)
まあ引数がiになってるやつのほうが再帰使ってなくていいかな。
総て異なる自然数a,b,c,dについて
x=a^4+b^4=c^4+d^4を満たす組み合わせのうち
xが最小となるa,b,c,dを求めよ。

わかりません、教えてください。
Cのint型で
unsigned int で0〜4294967296
まで入るのはありますけど
0〜-4294967296まで入るのは無いんですか?
243242:04/05/24 20:04
age
>>184
今号のCマガ見たら?
乱数使うけど迷路について載ってるよ
>>242
ー(マイナス)は自分で管理シロ!
246デフォルトの名無しさん:04/05/24 20:50
うるう年は考えないで、月と曜日を入力すれば1ヶ月分のカレンダーが表示
されるプログラムがわかりません。for文を使ったりいろいろやってみましたが
ド初心者なものでやっぱりわかりません…。どなたかC言語の簡単でわかり易い
プログラムを教えてください!お願いします!

表示月を入力してください。 >5
1:日 2:月 3:火 4:水 5:木 6:金 7:土 >6
*** 5月 ***
日 月 火 水 木 金 土

↑一応ここまでできています…。
ここまで出来ています、ってネタを書き込んでいるのはいつも同じ人間か?
>>246
どうでもいいけど、問題の意味が分からない。
問題文は、全部書いて。
249デフォルトの名無しさん:04/05/24 21:02
>>240
数学板へGO
250246:04/05/24 21:10
抜けてました…。ごめんなさい! 問題文は
「表示する月とその月の1日の曜日を入力すると、1ヶ月分のカレンダーを表示する
プログラムを作りなさい。ただし、うるう年は考えないこととする。」 です。
251名無しさん@お腹いっぱい。:04/05/24 21:13
>>240
とりあえず総当たりするしかないだろ。
252デフォルトの名無しさん:04/05/24 21:34
http://www.asahi-net.or.jp/~uc3k-ymd/Sketch/Life/life01.html
上のリンク先の内容のことをCで書きたいんですけどよくわかりません。
教えていただけないでしょうか?
>>246
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 256
main(){
  int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  int month, start, i;
  char buf[BUFSIZE];
  fputs("表示月を入力してください。  >", stdout);
  if(NULL == fgets(buf, BUFSIZE, stdin)) return 1;
  month = atoi(buf);
  if(month < 1 || month > 12) return 1;
  fputs("1:日 2:月 3:火 4:水 5:木 6:金 7:土 >", stdout);
  if(NULL == fgets(buf, BUFSIZE, stdin)) return 1;
  start = atoi(buf);
  printf("*** %d月 ***\n日  月  火  水  木  金  土\n", month);
  for(i = 0; i < 4 * (start - 1); i++) putchar(' ');
  for(i = 0; i < days[month - 1]; i++){
    printf("%2d  ", i + 1);
    if((start + i) % 7 == 0) putchar('\n');
  }
}
254デフォルトの名無しさん:04/05/24 21:36
#include <stdio.h>
int main(void){
int i, m, d;
int cal[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
printf("表示月を入力してください。>"); scanf("%d", &m);
printf("1:日 2:月 3:火 4:水 5:木 6:金 7:土 >"); scanf("%d", &d);
printf("\n日 月 火 水 木 金 土\n%*s", (d - 1)*3, "");
for (i = 0; i < cal[m]; i++){
printf("%2d ",i + 1);
if ((d++) % 7 == 0) puts("");
}
return 0;
}
255253:04/05/24 21:39
ごめん、ちと訂正+α
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 256
int main(){
  int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  int month, start, i;
  char buf[BUFSIZE];
  fputs("表示月を入力してください。  >", stdout);
  if(NULL == fgets(buf, BUFSIZE, stdin)) return 1;
  month = atoi(buf);
  if(month < 1 || month > 12) return 1;
  fputs("1:日 2:月 3:火 4:水 5:木 6:金 7:土 >", stdout);
  if(NULL == fgets(buf, BUFSIZE, stdin)) return 1;
  start = atoi(buf);
  if(start < 1 || start > 7) return 1;
  printf("*** %d月 ***\n日  月  火  水  木  金  土\n", month);
  for(i = 0; i < 4 * (start - 1); i++) putchar(' ');
  for(i = 0; i < days[month - 1]; i++){
    printf("%2d  ", i + 1);
    if((start + i) % 7 == 0) putchar('\n');
  }
  return 0;
}
256246:04/05/24 21:42
>>253,254様
助かりました…。本当にありがとうございます!
257超超初心者:04/05/24 21:47
超初心者の大学生ですが、配列a,bの和を出そうとすると変な値が出て
しまうんですが、手詰まり状態です。誰か助けてくれませんか?
「単精度実数型の配列aを四行三列で宣言します。各要素の値は、行と
列の和とします。たとえば2行3列は2+3=5とします。もう一つ、
別の配列bを宣言します。こちらの要素は、m行n列の場合、nーmと
します。まず、二つの配列を表示し、その後、二つの配列の和を表示します。表示するときは、小数点以下2桁まで表示します」
変な値って?
>>257
コードだせ!
行列の計算がわかっていない悪寒。
261超超初心者:04/05/24 21:53
行列自体はもち、わかるんですけど
sumがどうのこうのがわからんのです
お前の言ってることが分からん。
>>261
超能力者が現れるのを待つか、わかりやすく説明してください。
264超超初心者:04/05/24 22:00
申し訳ございません
265デフォルトの名無しさん:04/05/24 22:01
標準入力からカンマ区切りの整数値を入力として受け取るコードをscanf
で作りたいのですが下のプログラムではどのように書いたらよろしいのですか?
超初心者なので教えて下さる方おねがいします
int main()
{
int a[50];
int n;
int i;

scanf("%d")

for(i = 0;i < n; ++i){
printf("a[%d] = %d\n",i,a[i]);
}
scanf("%d"); て、あんた・・。
Cの教科書とか無いのか?
267名無しさん@お腹いっぱい。:04/05/24 22:08
>>257
おおかた、配列どうしの和を計算するのに、
配列名どうしを加算してんだろ。
double aa[4][3], bb[4][3];
aa + bb;
みたいに。
scanf使いたくねーな。。。
#include <stdio.h>
int main(void)
{
int a[50], n = 5, i;
for(i = 0;i < n; ++i) scanf("%d,", a + i);
for(i = 0;i < n; ++i) printf("a[%d] = %d\n", i, a[i]);
return 0;
}
269デフォルトの名無しさん:04/05/24 22:12
最後に指定された回数分、それまでの文字列を繰り返し表示し、"quit"が
入力されるまで継続するプログラム作りたいのですが、初心者でわかりません。
(例)
% a.out
prom> xxxx 3
xxxx
xxxx
xxxx
prom>xxx yyy zzz 5
xxx yyy zzz
xxx yyy zzz
xxx yyy zzz
xxx yyy zzz
xxx yyy zzz
prom> quit
%

prom>は自分で表示させます。
教えてくださる方お願いします。
270超超初心者:04/05/24 22:14
>>267
a[4][3]+b[4][3];みたいなことしていました
どうもすみません

>>267 はよく分かったな。すげーよ。
272デフォルトの名無しさん:04/05/24 22:17
#include <stdio.h>

int factorial(int i)
{
int j,k=1;
for(j=1;j<=i;j++)
k*=j;
return k;
}

int main()
{
unsigned int n,i;
printf("1!,3!,・・・+(2n+1)!を求める。\nnを入力 : ");
scanf("%d",&n);
for(i=1;i<=2*n+1;i+=2)
printf("%d! = %d\n",i,factorial(i));
return;
}

これでnに8をいれるとマイナスの値が出るのは何ででしょうか?
違うところの指摘をお願いします。
>>270
ソース全部書いてよ。長かったら>>1のところにでも。
274名無しさん@お腹いっぱい。:04/05/24 22:21
>>272
n=8ってことは、17!でしょ?
桁あふれ。
>>272
オーバーフロー。int型で計算できる範囲を超えている。
276デフォルトの名無しさん:04/05/24 22:23
ありがとうございます!!
あと、それを使って、標準入力からカンマ区切りの整数値を入力として受け取り(入力終了はEOF),
大きい方から順にカンマ区切りで標準出力に出力するプログラムを作成せよという問題
なのですが、ただ、配列に入るだけになってしまいます。どうすれば改善されるのでしょうか?
#include <stdio.h>
void shellsort(int[],int );
int main()
{
int a[50];
int n=10;
int i;

for(i = 0;i < n; ++i) scanf("%d,", a + i);
for(i = 0;i < n; ++i) printf("a[%d] = %d\n", i, a[i]);
shellsort(a,n);
return 0;
}
void shellsort(int v[], int n)
{
int gap, i, j, temp;
for(gap = n/2; gap > 0; gap /= 2)
for(i = gap; i<n; i++)
for(j=i+gap; j >= 0 && v[j]<v[j+gap]; j+=gap) {
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
return ;
}
}
277IEEE規格のによる実数表現:04/05/24 22:23
長さが32の0と1の列  se7e6e5・・・e1e0d1d2d3・・・d23 を入力して、このビット列を表す実数値(実数表現の
仕方はIEEE規格754に従うものと仮定する)
          (−1)のs乗×(1+M)×2のE乗  if −127<E<128
      {   (−1)のs乗×M×2の(E+1)乗  if E=−127
          Inf(無限大)              if E=128、M=0
          NaN(非数、Not a Number)        if E=128、M≠0   

ここで、M=煤ii=1から23)di×2の−i乗、E=煤ii=0から7)ei×2のi乗−127

を出力するCプログラムを作成せよ。なおその際pow関数は使わず作れ。


という問題です。見にくいですがどうかお願いします。
cに_tempnamってのがあるけど、
c++に対応するものってないのかな?
_tempnamはmallocで確保した領域を返すから
freeで開放しなくちゃだめ。
c++のコードに突然freeが出てきてちょっとやだ。
279デフォルトの名無しさん:04/05/24 22:28
>>269
#include <stdio.h>
#include <string.h>
int main(void){
int i, num;
char buf[128], str[100];
for(;;){
printf("prom>");
fgets(buf, sizeof buf, stdin);
if (sscanf(buf, "%s %d", str, &num) != 2){
if (!strcmp(str, "quit")) break;
else continue;
}
for (i = 0;i < num; i++) puts(str);
}
return 0;
}
280279:04/05/24 22:30
あ、すまんこれじゃだめだ。
281名無しさん@お腹いっぱい。:04/05/24 22:30
>>279
それだと、%sは空白をデリミタにするからまずくない?
>>269
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 256
main(){
  char buf[BUFSIZE], *p;
  int i, n;
  for(;;){
    printf("prom> ");
    fgets(buf, BUFSIZE, stdin);
    if(!strcmp(buf, "quit\n")) break;
    for(p = buf + strlen(buf) - 1; ;p--){
      if(p == buf){break;}
      else if(!isdigit(*p) && !isspace(*p)){p++;break;}
    }
    n = atoi(p);
    *p = '\0';
    for(i = 0; i < n; i++) printf("%s\n", buf);
  }
}
>>278
それは,CじゃなくPOSIX(UNIX規格)。
あきらめろ。
284282:04/05/24 22:45
バグってた。文字列が1文字のときに何も表示されない。
285282:04/05/24 22:52
こうかな。センスねーなー。美しくない。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 256
main(){
  char buf[BUFSIZE], *p;
  int i, n;
  for(;;){
    printf("prom> ");
    fgets(buf, BUFSIZE, stdin);
    if(!strcmp(buf, "quit\n")) break;
    for(p = buf + strlen(buf) - 1; ; p--){
      if(!isdigit(*p) && !isspace(*p)){
        p++;
        break;
      }
      else if(p == buf){
        break;
      }
    }
    n = atoi(p);
    *p = '\0';
    for(i = 0; i < n; i++) printf("%s\n", buf);
  }
}
286282:04/05/24 22:57
ああ、重大なバグを見つけちゃった・・。もう止めときます。スレ汚し失礼しました・・・
287184:04/05/24 22:58
質問してる本人が亀レスですみません。
>>208
棒倒し法ですか 自分もこれで作成したのですが
伸ばしていこうとした所に すでに壁があった場合 残りの場所に
置く方法がいまいち分かりません ソース見たのですが 結構知らない文とかもあって難しいです・・・
自分はこんな風にしたんですが・・・ これで一応正解は一通りになるんですが なんかいまいちな気がして

ransu=rand()%3;
switch(ransu)
{
case 0:
   if(map[i-1][j]!=1){
      map[i-1][j]=1;
      break;
   }
case 1:
   if(map[i+1][j]!=1){
      map[i+1][j]=1;
      break;
   }
case 2:
   map[i][j+1]=1;
   break;
}

また、ルールの関係上 正解ルートは1本じゃないほうがいい気もしますし
どう思われますか?

また 探索の方もいまいちわかりません どんなアルゴリズムなのですか?
今 再起でやってるんですが 再起だと処理時間遅いですかね?

どうかお時間ある方はちょっと考えてみてもらえませんか?
>>276
入力終了EOFでカンマ区切りってのがよくわからんな。
1,
3,
こういうふうに入力するってことか?
あとそのシェルソートはおかしくないか?
289デフォルトの名無しさん:04/05/24 23:03
>>277
どなたかどうかお願いします!!
290デフォルトの名無しさん:04/05/24 23:16
計算しなさい。
1+(1+2)2乗×2+(1+2+3)2乗×3+・・・+(1+2+・・・+n)2乗×n
見にくくてすみません。
初心者でよくわからないのでお願いします。
291279:04/05/24 23:30
>>269
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void){
int i, num;
char buf[128], *p = buf, *q = buf;
for(;; p = buf, q = buf){
printf("prom>");
fgets(buf, sizeof buf, stdin);
while(*++p != '\n') if(isspace(*p)) q = p;
if (sscanf(q, "%d", &num) != 1){
if (!strcmp(buf, "quit\n")) break;
else continue;
}
*q = '\0';
for (i = 0;i < num; i++) puts(buf);
}
return 0;
}
292名無しさん@お腹いっぱい。:04/05/24 23:31
>>289
もう寝るから、明日のお昼前でいいならうpするよ。
293デフォルトの名無しさん:04/05/24 23:56
>>292
お願いします!!
>>290
#include <stdio.h>
int siguma(int n){
int i, sum = 0;
for (i = 1; i <= n; i++) sum += i;
return sum;
}
int main(void){
int sum = 0, n, i;
scanf("%d", &n);
for (i = 1; i <= n; i++) sum += siguma(i) * siguma(i) * i;
printf("%d", sum);
return 0;
}
>>289
そういう捨て台詞はもっとマンドクサーな奴に残せよ(藁

>>293
#include <stdio.h>
int main() {
int n;
enum { S=24, E=8 };
double s=0;
int e=0;
char buf[S+2];
fgets(buf,sizeof(buf),stdin);
for(n=0;n<E;++n){ e += (buf[n]=='1')*(1<<(E-1-n)); }
for(n=0; n<S; ++n){ s += (buf[n+E]=='1')*1.0/(1<<n); }
for(n=0; n<((1<<(E-1)-1); ++n) s /= 2;
for(n=e; n>0; --n) s *= 2;
printf("%e\n", s);
}
296295:04/05/25 00:48
あ,マズー。訂正。レス番も間違えてるし。
鬱だ…

#include <stdio.h>
int main() {
int n;
enum { S=24, E=8 };
double s=0;
int e=0;
char buf[E+S+2]; //←訂正
fgets(buf,sizeof(buf),stdin);
for(n=0;n<E;++n){ e += (buf[n]=='1')*(1<<(E-1-n)); }
for(n=0; n<S; ++n){ s += (buf[n+E]=='1')*1.0/(1<<n); }
for(n=0; n<((1<<(E-1)-1); ++n) s /= 2;
for(n=e; n>0; --n) s *= 2;
printf("%e\n", s);
}
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=66
↑のソースなのですがちゃんと動かすにはどこを修正すればよいでしょうか・・・
>297
素直に作り直した方がよさげ
ストライク、スペアは"次の"フレームが必要だが、それを考慮してないし
>>298
一応考慮してあるようだよ。

>>297
とは言うものの、ストライク取ったフレームの点数は確定するまでは表示しない方がいい。
それに、ストライクのときに10/0を入力させるのも今一つ使い勝手が悪い。
先に全部入力させて、計算は後からにすればストライク/スペア周りの処理がすっきるするのでは?
途中経過を表示するのはそれができてから改めて作ればいい。
300184:04/05/25 07:32
ファイルに記録してある迷路を解くプログラムを以下のようにつくりました
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=79
今 ゴールできるすべての経路を表示するようにしてあります
今 このなかで最短経路の道順にだけ配列の値を0→4にしたいのです
配列に正解経路にだけ4を格納したら もう すべての経路を表示させる必要はなく
マップの横 縦の幅と 正解ルートに4を格納したマップを出力するだけでいいです
5 5
1 1 1 1 1
2 4 4 4 1
1 0 1 4 1
1 0 1 4 3
1 1 1 1 1
この方法を考えていただけませんか?

ちなみにマップを作るプログラムはこれです
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=80

両方とも実行時にコマンドプロンプトでファイルに入出力します。
>>300
問題のソースは、これでいいかな?
http://www.isse.kuis.kyoto-u.ac.jp/acm-japan/icpc99/problems/ant/ant.html
302184:04/05/25 07:57
連投 すみません
さきほどの解くほうのプログラム
if(sucs==1)
    map[tate][yoko]=4;
if(map[tate][yoko]==5)
    map[tate][yoko]=0;

は要らないですね 消してください。
また現在のプログラムだと 迷路が大きくなりすぎると
pathの値が大きくなりすぎためか 実行できなくなります
どうすればいいのでしょうか お願いします 助けてください。
303184:04/05/25 07:59
>>301
すみません 英語読めません
問題の元のテキストはこれです
http://49uper.com:8080/img-s/1874.jpg
http://49uper.com:8080/img-s/1875.jpg
304184:04/05/25 08:09
まず迷路のすべての経路をこのプログラムで計算すると
多くなりすぎる気がするんですよね 迷路を 39×39
なんかにするだけでも pathすごい数いくし・・・
実際にはもと大きい迷路も扱うんです それこそ100超えるようなものも・・・
あ ちなみに迷路は正方形とはかぎりません 奇数×奇数なら長方形もありえます
あと もう学校行かないと行けないんです また昼ごろ顔出します
実はこれ今日提出なんで結構やばいのですが
ファイル入力でt[]を読み込み、その変数の値をプリント文で表示させると言った
プログラムなんですが、
#include<stdio.h>
void main(){double t[N];int nt=4;nt=4;
FILE *in;
in=fopen("ファイル場所","r");
if(in=NULL) printf("ファイルが見つかりません。パスを確認して下さい。\n");
else{for(i=1;i<=nt;i++) fscanf(in,"%lf",&t[i]);}
fclose(in);}
といった風にプログラム打ったんですけど、
未定義のシンボル N、おそらく不正な代入、未定義のシンボル i、'nt' に代入した値は使われていない
とエラーが出て、もうどうすればよくわからないんです。
どどうすればいいのか教えてほしいです、お願いします。
#include<stdio.h>
#define N 5
void main(){double t[N];int i,nt=4;;
FILE *in;
in=fopen("ファイル場所","r");
if(in=NULL) printf("ファイルが見つかりません。パスを確認して下さい。\n");
else{for(i=1;i<=nt;i++) fscanf(in,"%lf",&t[i]);}
fclose(in);}
307デフォルトの名無しさん:04/05/25 11:05
> if(in=NULL)
これも直せ
308仕様書無しさん:04/05/25 11:40
>>277
はい。結果が合ってるかどうか知らん&結果の出し方がこれでいいのかもわからんけど。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=81
宿題を丸投げする奴は氏ね。
はっきりいって、生きている価値なし。
いや、肉体労働やって、税金や年金は納めてもらおうかな。
俺のために働けや、虫けらども。
>>309
宿題丸投げスレで(ry
311仕様書無しさん:04/05/25 14:04
>>309
そういうスレだしな。
ここでもらった回答を参考に、自分でカスタマイズしたり作り直したりすればいいと思う。
>>311
おまえ、いい奴だな。
>79 (迷路)
passの値は全く問題ない。
時間がかかるのは組み合わせ爆発と、同じルートの繰り返しによる。
試しに、壁の全く無い大部屋を通らせてみ。小さいものでもハマると思う。

ソースの美しさに欠けるが一応書いてみた。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=82
迷路に印をつけながら進んで、最後に逆から辿る、いわゆるパンくず法。
cleanupの前にオリジナルのoutputを実行すると何をやってるか分かると思う。
314313:04/05/25 15:55
79…ソース貼り付け掲示板のレス番書いてどうするorz
>313 は >184宛て。
315デフォルトの名無しさん:04/05/25 16:37
#include <stdio.h>

int main(){
struct game{
int win[6],lose[6],draw[6];
};
struct game gm={
68,52,75,78,60,63,
65,77,59,54,73,70,
2,4,1,3,2,2
};

int i,avr[7];

for(i=0;i<=6;i++)
avr[i]=(gm.win[i]/((gm.lose[i]+gm.draw[i])-gm.draw[i]));

for(i=0;i<=6;i++)
printf("%c : %f\n",'a'+i,(float)avr[i]);

return 0;
}

構造体に関しての質問なのですが、
7つのチーム(a〜f)の勝数、負数、引き分け数を

勝率=勝数/全試合-引き分け数

の式で計算し、各チームの勝率を求めるプログラムなのですが、
↑のプログラムだと上手くいきません、、、
何方かどこが悪いのか教えていただけないでしょうか?
構造体の意味がないんだけど。。。
>>315
なんか釣りっぽいけど。
・int / int は int だ
・(float)8 が 7.7 になるようなことはない
>>315
>struct game{
>int win[6],lose[6],draw[6];
>};

どう見ても6つしかない訳だが…
319仕様書無しさん:04/05/25 17:50
>>318
まあ、初心者にありがちなわけだよ。
「Cでは0から数えはじめる」と習うので、7つ必要なら6と宣言してしまう。
変数の型というのも理解できない。整数→実数への自動変換があると考えている。
「プログラムに書いたことがすべて」ということを理解していなくて、「そのへんはうまいこと勝手にやってくれるんじゃないかな。Windowsなんだし」とか意味不明な期待をする。
#include < iostream.h>
struct siken{
char simei[20];
int sugaku, buturi, eigo, gokei;
};
siken input_data( void);
void output_data( siken);
void main( void)
{
siken data[100];
int n, i;
cout << "何人入力しますか"; cin >> n;
if ( n <= 100){
i=0;
while( i < n){
data[i] = input_data();
i++;
}
i=0;
while( i< n){
output_data( data[i]);
i++;
}
}
}
321320:04/05/25 17:53
siken input_data( void){
siken data;
cout << "名前"; cin >> data.simei;
cout << "数学の点数"; cin >> data.sugaku;
cout << "物理の点数"; cin >> data.buturi;
cout << "英語の点数"; cin >> data.eigo;
data.gokei = data.sugaku + data.buturi + data.eigo;
return ( data);
}
void output_data( siken data){
cout << "名前:" << data.simei << endl;
cout << "数学の点数" << data.sugaku << endl;
cout << "物理の点数" << data.buturi << endl;
cout << "英語の点数" << data.eigo << endl;
cout << "合計" << data.gokei << endl;
}
322320:04/05/25 17:54
(1) 上記のプログラム、構造体siken に学籍番号を追加しよう.メンバ名は,gakuseki とし,大きさ8 の文字配列とす
ること.上記 で作成したプログラムを,学籍番号が入った新しい構造体で動くように修正する
こと.
(2) (1)で作成した構造体を使用して,入力したすべてのデータを学籍番号の昇順に出力する次の仕様
の関数を作成し,プログラムを実行せよ.
(注意)学籍番号には数字だけでなく文字も含まれる場合がある.
(3) 各科目の平均点を計算する次の仕様の関数を作成し,プログラムを実行せよ.
double average_data(int sw, siken data[], int n);
第1 引数:sw が1 ならば数学,2 ならば物理,3 ならば英語,
4 ならば合計 の平均点を求める.
第2 引数:siken 型の配列
第3 引数:配列の全要素数
戻り値:各教科の平均点(倍精度実数型)
(4) 各人の合計点の偏差値を求めて,全員の偏差値を出力する次の仕様の関数を作成し実行せよ
void deviation_data( siken data[], int n);
第1 引数:siken 型の配列
第2 引数:配列の全要素数
戻り値:なし
323320:04/05/25 17:55
という問題なのですが、
よろしくお願いします。

長々としている上に見づらくて申し訳ないです。
#include <stdio.h>

int main(){
  struct game{
  int win,lose,draw;
 } gm[] = {
  {68,52,75}, {78,60,63},
  {65,77,59}, {54,73,70},
  {2,4,1}, {3,2,2}
 };

 int i;
 for (i=0;i<6;i++) 
  printf("%c : %f\n",'a'+i,(double)gm[i].win/(gm[i].lose+gm[i].win));
 return 0;
}
struct game {...} とstruct game gmの2つはこういう風にまとめられる。
int win[6], lose[6],draw[6]だと>>316の言う通り構造体の意味がない。
チームのデータを1つの変数として扱うための構造体がある。それをA〜Fでまとめて扱うんでgmを配列にするってイメージで。
さらに定義と同時に初期化すればこのように最外周の配列に限り要素数を省ける。(これは文章の7つ、A〜Fの6つ、どっちでもいいようにw)
avrは直接printfの引数に勝率計算の式を書いたんで消滅。
ところで全試合-引き分け数==勝ち数+負け数だろ。ここ間違ってどうする。
それとprintfとかの可変個引数ではfloatも呼び出すときにdoubleにされるんで一応doubleにしておいた。
325デフォルトの名無しさん:04/05/25 17:58
>>319
フ━━━( ´_ゝ`)━━━ン!!
キーボードから数値を入力して、その数値に10を加えた値までを表示するプログラム
おねがいします。
for使った奴で
327仕様書無しさん:04/05/25 18:38
>>320
ほらよ。(4)は偏差値計算の仕方わすれたから、パスな。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=83
>>252
おめー次のページ見てみたのかよ
329仕様書無しさん:04/05/25 18:41
>>326
// http://pc5.2ch.net/test/read.cgi/tech/1085149383/326
#include <stdio.h>

int main() {
double aa;
printf("入力して> "); fflush(stdout);
scanf("%lf", &aa);

for(int nn = 0; nn <= 10; nn++) {
printf("%g + %d = %g\n", aa, nn, aa+nn);
}
return 0;
}
330320:04/05/25 19:34
>>327
ありがとうございました。
まだ私の知識に無いやり方もありましたが
勉強してみようと思います。
1.関数方程式f(x) = x2 . a = 0 を,Newton 法
で解くアルゴリズムを書きなさい.
2.特に,a = 2 として,√2を実際に求める過程を
書きなさい.求める精度は,5桁とします

お願いします。
>>331
1のアルゴリズムを書きなさい は
C++の表記でお願いします。
/*1カラ10マデ*/
#include <stdio.h>
main()
{
int ia,ib;
scanf("%d",&ia);
printf("%d ",ia);
for(ib=0; ib<=10;ib++){
printf("%d",ia+ib);
}
}
これで解決しましたありがとうございました
C言語なんですが小数点以下の桁数を入力して
その桁数以下を切り捨てて出力する関数を作れってのなんですが
教えてくだいさい、おながいします
335デフォルトの名無しさん:04/05/25 20:41
>>334
EX)
Initial value=>2.1254525
Input =>3
Output =>2.125
だよな?

void round(double a, int b){
  printf("%d",(int)a);
  printf(".");
  int i;
  for(i=1;i<=b;i++){
    a = 10*a;
    printf("%d",(int)a%10);
  }
  printf("\n");
}
aを小数点以下b桁まで出力。桁落ちとか数値の上限とかそういう事は知らん。
問題文を俺なりに解釈した結果、引数で入力し、出力はstdoutという結論に達した。
>>335
そのとおりです
>>336
ありがとうございます!でけますた!
ほんとに感謝です
339C ◆b2MFuqSvyQ :04/05/25 21:51
どなたかお教えください。

「マクローリン展開を用いて、sin(x)を計算する関数sineを,
xと計算に用いる項数nとを引数とする関数として作成しなさい」


#include <stdio.h>
#include <math.h>

int sine(int x, int n);
int main() {
int k;
printf("項数nを入れてください n = "); scanf("%d", &n);
k = sine(x, n)
}
int sine(int x, int n) {
int n, j, k;
for(n = 1; n<=k; n++)
j = 1;
j = j * n; /**jはマクローリン展開した際の分母の!の計算です**/
if(n%2==0)
{・・・  /**偶数項はマイナスが付くのでif文を使ってマイナスを付けたいのですが、案が浮かびません。**/

ここまでやったのですが、ここから進みません。どなたかお教えください。よろしくお願い致します。
340C ◆b2MFuqSvyQ :04/05/25 21:54
追記
x/1!-x^2/2!+x^3/3!-x^4/4!+x^/5!-・・・
を求めて、さらに何項目までを求めるかも指定するという問題です。
ここの方たちは分かってると思われますが、一応追記させていただきました。
>340
2項毎に通分すれ。
>if文を使ってマイナスを付けたい
三項演算子、-1の累乗、偶奇で処理を丸ごと分ける、など。
343C ◆b2MFuqSvyQ :04/05/25 22:28
>>341
すみません。まだ初心者のためそのようなことができる自信がありません。

>>342
「偶奇で処理を丸ごと分ける」とはどのようにすればよいのでしょうか?
344デフォルトの名無しさん:04/05/25 22:29
>>339
関数sine
ちょっとワロタ
345デフォルトの名無しさん:04/05/25 22:39
n番目の項に(-1)^(n-1)を付ければいいんdayo
for(n項全部){
 if(偶数)
  合計 -= x^n/n!
 else
  合計 += x^n/n!
}
と、別々に書けばいい。
美しくないが、そんな事は自力で何とかできるようになってから考えればいい事。
347デフォルトの名無しさん:04/05/25 22:50
マクローリン展開でsinを求めるのって、
x - x^3/3! + x^5/5! - x^7/7! ・・・
じゃないっけ?
348デフォルトの名無しさん:04/05/25 22:57
というわけで、x - x^3/3! + x^5/5! - x^7/7! + ・・・ で実装した。
sin()との比較もしたけど、10項目まで計算すると小数点以下10桁くらいの精度になった。
double sine(double x, int n) {
double ret = 0;
double jj = x;
for(int nn = 1; nn <= n; nn++) {
ret += jj;
jj *= - x * x / ((2*nn) * (2*nn+1));
}
return ret;
}
349C ◆b2MFuqSvyQ :04/05/25 23:04
>>344
( ´・ω・`)ショボーン

>>345
なるほど!thxです^^

>>346
なるほど。その方法でもやってみたいと思います。

>>347
そのとおりです^^;
ついつい1から並べてしまいましたm(_ _)m

>>348
なんとなくおっしゃってることは分かるのですが、まだ初心者のため、完全に理解できません^^;
コピーさせていただき、上達してから熟考したいとおもいます。

皆様、親切にどうもありがとうございましたm(_ _)m m(_ _)m m(_ _)m
>>336
void round(double a, int b)
{
printf("%.*f\n", b, a);
}
>>344
英語でサインはsineと綴りますが何か。
「関数氏ね」と読めますが何か。
353344:04/05/25 23:47
>>351
352様は僕じゃないです
関数sine ヒイィィィ!!(´Д`ノ)ノ
でも言いたいことは352様が代弁しくれました。
いっちゃったいっちゃった
ヽ(ヽ´Д`)ヒイィィィ!! ヒイィィィ!!(´Д`ノ)ノ
354176:04/05/26 00:21
>>186
説明不足で無茶苦茶なことを言っていたのに、
教えていただいて本当にありがとうございました。
「補間点」の意味していることがわかりましたら、
投稿させていただきます。
よろしければ、また教えてください。
今後丸投げしないよう努力しますので、ご指導お願いします。
355デフォルトの名無しさん:04/05/26 00:42
n個のデータをキーボードから入力し、合計、平均、最大値、最小値、偏平方和
不偏分数、標準偏差、標準誤差を計算し、更にファイル入力でt[ ]を読み込み
上記変数の値をプリントアウトするプログラムを作れという宿題なのですが、
全くvoid main()以降何も書けなくて困っています。どなたか救いの手をお願いします…
とりあえずそれぞれの計算をする関数でも作ってみては?
357デフォルトの名無しさん:04/05/26 00:50
>>356
なるほど…やってみます!
>>355
「void」 main()かぁ
>>350
どうもです
360デフォルトの名無しさん:04/05/26 00:56
>>358
そこからして何か間違ってるんでしょうか…(;´Д`)
>>355
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=85
ちょっとだけ書いてみた。
あとは計算式を追加するだけー
362デフォルトの名無しさん:04/05/26 00:57
なんかここんとこ、平均とか分散求めよっていう問題多いなあ。
そういう時期なのかね。
363デフォルトの名無しさん:04/05/26 01:00
>>362
そういう時期なんでしょうなー
時期によってどんな問題が多くなってるのかって。。
調べてみようっと
364デフォルトの名無しさん:04/05/26 01:05
>>361
わわ!本当にありがとうございます!!
やっぱり自分が書いたのは全然ダメだ(;´Д`)
>「void」 main()かぁ
mainはint(成功で0、失敗でそれ以外)を返すのが標準規格。
主義の問題と言っていいレベルだとは思うけどな。
void mainだとコンパイラによっては文句をいう事があるし、intの方が無難なのは確か。

358はvoid mainを見たこともないレベルの初心者、ってのは穿った見方かなぁ…
366184:04/05/26 01:34
>>313
ありがとうございました!!
ですが読んでみたのですが・・・ いまいち分かりません
オリジナルのoutputとはmain関数でcleanup呼び出す前にoutput()を
呼び出せって意味ですか? ゴールが0になってることしか分かりません・・・
また 仮想壁とは何のためにしてるのかも分からないです。
367デフォルトの名無しさん:04/05/26 01:45
>>365
昔はmain()だけだったときもあったんですが、先生が変わってからvoid main()になりました(;´Д`)?
本当はint mainだったんですね…
スレ違いだとは思うけど「void main(void)」について。
ttp://www.kouno.jp/home/c_faq/c11.html#15
369デフォルトの名無しさん:04/05/26 01:49
>>368
>たぶんその本の著者は自分も対象読者の一人に数えているのだろう。
ワロタ
370313:04/05/26 02:02
>366
outputとcleanupを分かりやすいものに差し替えて同じ場所にうpってある、と言うのを忘れてた。
元々のソースはイマイチなんで、新しい方見てくれ。うpろだ84番。

仮想壁は迷路の外周(1行目とか1列目)に壁でないマスがある場合の用心。
外周が常に壁である事がルールで保証されてるなら不要。

#define PATH 4
とかはマクロ。プログラム中のPATHという単語が全て4に置換される。
イメージとしては変数のようなもの。プログラム中に数字が出てくるよりは多少見やすいだろ。

アルゴリズムを一応解説。visit。
スタートから一歩ごとに値(step)を1増やしつつ、通ったマスにstepをセットして行ってる。
新しいバージョンのプログラムを見ると、最短ルート上に数字が順に並んでるのが分かると思う。

visitの冒頭の条件式。値がセットしてあるところはもうルートとして探索し終えた場所って事なので探索終了。
ただし、その時点でのstepの方が小さいなら、同じ場所により早くたどり着いたって事なので探索続行。
あと、184では移動直前に壁かどうかの判定を行なっていたのも、移動直後に変更。
こっちはちょっときれいに見える以上の深い意味はない。趣味の域だな。

cleanupはまずゴールから初めて最短ルートを4で塗りつぶしてる。
その後、関係ない道を0で埋めてる(この処理は変更後のプログラムで追加)。
>>367
main() /* 型を省略するとint */

void main() /* 論外 */
もお行儀が悪いです。
正しくは
int main(void)
または
int main(int argc, char *argv[])
(あるいはこれと等価な宣言)
です。
void main()
がアレだってことは常識として知ってるけど、何で悪いのかわからんのだけど。
どういうときに困るの?
>372 アレの時
int main と仕様で決まっているからだ。
375デフォルトの名無しさん:04/05/26 02:40
↓これコンパイルは通るんですが、実行したら強制終了になるのですが、
どこがおかしいのでしょうか?
-------------
#include<stdio.h>

int strchno(const char *str,char *ch){
int i=0,count = 0;

while(*(str+i) !='\0'){
if(*(str+i) == *ch) count++;
i++;
}
return count;
}

int main()
{
char str[200],ch[1];

printf("文字列を入力してください\n");
scanf("%s",str);
printf("検索したい文字を入力してください\n");
scanf("%s",ch);
printf("文字列中に%sは%d個あります\n",ch[0],strchno(str,ch));

return 0;
}
---------
char str[200],ch[10];
にでもしとけ。あと、scanfつかわないように。
ch だ
Cげんごではいわゆる文字列は'\0'で終わっていないとダメだろが
printf("文字列中に%sは%d個あります\n",ch,strchno(str,ch));
3つの整数を入力して小さい順に並べ替える関数を
void sort(int *a.int *b,int *c)を使ってつくりなさい。

この問題をお願いします。
>>379
並べ替えた結果をどうすればよいのかわかりません。:5点
381313:04/05/26 03:05
>370
>新しいバージョンのプログラムを見ると、最短ルート上に数字が
新しいバージョンのプログラムを実行すると、最短ルート上に数字が
に訂正。

ちなみに、速度について言えばかなり速い部類に入るアルゴリズム。
解のある迷路で解けないものは無い…はず。
少なくとも、ループや大部屋などのありがちなトラップは回避できるし、スタート/ゴールの場所が外壁沿いでなくても問題ない。

改善点を挙げるとすれば、もうちょっと速度上昇が可能なところ。
分かりやすさを優先したので、メモリ消費、計算量ともに改善の余地は大いにある。
あと、解が無い場合の処理を(比較的簡単なのに)サボってたりする。
>>380
実行する。
>>379
sort()の仕様が分かりません。:15点
実行してみますた。
typedef void (*F)(void);
void sort(int *a.int *b,int *c){
int array[3];int *ptr;
array[0]=*a;array[1]=*b;array[2]=*c;
ptr=array;
if(*ptr > *(ptr+1)){*ptr^=*(ptr+1); *(ptr+1)^=*ptr; *ptr^=*(ptr+1);}
ptr=array+1;
if(*ptr > *(ptr+1)){*ptr^=*(ptr+1); *(ptr+1)^=*ptr; *ptr^=*(ptr+1);}
ptr=array;
if(*ptr > *(ptr+1)){*ptr^=*(ptr+1); *(ptr+1)^=*ptr; *ptr^=*(ptr+1);}
for(ptr=array; ptr<sizeof(array); ++ptr){
((F*)*ptr)();
}
return;
}
 forkとpipeを使って
「./a.out filename コマンド 引数1 引数2 … < 標準入力データファイル」
と実行すれば、「 コマンド 引数1 引数2 …」を
(標準入力データを上記のようにリダイレクションによって入力して)
実行し、かつその標準入力データを、ファイル「filename」にバックアップする
プログラムを作れ。
(コマンドにはmoreなどが適当。
 例: 「./a.out filename more -10 < data.txt」 )
 また、この時ファイル「filename」と「data.txt」の中身は一致するか。

という問題が分かりません。
特に、どういう風にパイプを用いればよいか分からないのですが。
>>384
ありがとうございます。参考にします。
>>380>>383
とりあえず、氏ね
387184:04/05/26 09:12
>>370
ありがとうございます!! もう一度考えてみますね
>>379 似たような問題が柴田望洋の本にあった気がする。
配列を使えないレベルだったはずだから、以下のようなのが答えかな。
swap()が使えるならもっと分かりやすいだろうけれど。

void sort(int *a.int *b,int *c)
{
  int tmp;
  if (*a > *b)
    tmp = *a, *a = *b, *a = tmp;
  if (*b > *c)
    tmp = *b, *b = *c, *c = tmp;
  if (*a > *b)
    tmp = *a, *a = *b, *a = tmp;
}
389184:04/05/26 10:46
>>381
分かりました。
質問しているのにいつもレス遅くてすみません 基本夜しか顔出せないので…
ちなみにこれは携帯からです
>>386
ふふふ,>>380=>>384だというのに…
青い,青い。
文字列OECUを変数に代入しポインタを用いて、
次のように表示するプログラムを作ってください。

OECU
ECU
CU
U
#include <stdio.h>

int main(void)
{
char *str = "OECU";
while(*str){
printf("%s\n",str++);
}
return 0;
}
393デフォルトの名無しさん:04/05/26 13:39
2chのプログラマーが低脳とバカにされてるぞ。
http://pc5.2ch.net/test/read.cgi/prog/1085510173/l50
誰か一瞬で解いてやってくれ。
自演乙。
やってもいいが、納期と予算を明記してくれ。
395仕様書無しさん:04/05/26 15:15
>>384も意地悪だな。。。変数同士の入れ替えをXOR使うなんて。
396デフォルトの名無しさん :04/05/26 16:25
配列を使って・・・・
以下のように10個の整数を入力して、次に入力した数(1〜10)番目
の配列を表示するプログラムを0が入力されるまで続ける。という問題です。
(例)
>>1 3 56 43 23 -11 3 5 8 9
>>5
23
>>6
-11
>>10
9
>>0
配列を用いた多倍長計算によって自然対数の底e(=2.7182818...)をn=1000として求めなさい。
e = 1+1/1!+1/2!+1/3!+.......1/n!+.....
= 2+1/2(1+1/3(1+1/4(1+....1/n(1+...))..))
398仕様書無しさん:04/05/26 17:04
>>396

#include <stdio.h>
int main() {
int indata[10], ii;
printf(">>> "); fflush(stdout);
for(ii = 0; ii < 10; ii++) scanf("%d", &indata[ii]);
while(1) {
printf(">>> "); fflush(stdout);
scanf("%d", &ii);
if (ii == 0) break;
else printf("%d\n", indata[ii-1]);
}
return 0;
}
>>396
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
int a[10];
int i;
char s[1024];
char *t;
fprintf(stderr, ">>> ");
fgets(s, 1024, stdin);
t = strtok(s, " ");
for (i = 0; i < 10; i++) {
a[i] = atoi(t);
t = strtok(NULL, " ");
}
fprintf(stderr, ">>>");
while (fgets(s, 1024, stdin) != NULL && atoi(s) != 0)
fprintf(stderr, "%d\n>>>", a[atoi(s) - 1]);
return 0;
}
>>397
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=86
L は表示桁数。貼った後に気付いたが、計算には使ってない。あとは見て分かれ。
401デフォルトの名無しさん:04/05/26 18:44
より適したスレを見つけたのでコチラに書き込みさせていただきます

キー入力でn個の数を入力して
そのn個の数の最大値、最小値、平均値を出力するプログラムは
どういったモノになるのでしょうか???
配列を使ってお願いしたいのですが・・・。
402391:04/05/26 19:04
>>392
動作確認しました。ありがとうございます
#include <stdio.h>
#define N 5

int main(void)
{
int array[N];
int i, num, max, min, sum;

for(i = 0; i < N; i++){
scanf("%d", &num);
array[i] = num;
}

sum = min = max = array[0];
for(i = 1; i < N; i++){
sum += array[i];
max = array[i] > max ? array[i] : max;
min = array[i] < min ? array[i] : min;
}

printf("最大値:%d\n", max);
printf("最小値:%d\n", min);
printf("平均値:%d\n", sum / N);

return 0;
}
>>403
それじゃだめだろ。
405401:04/05/26 19:14
こんなに早く・・・
有り難うございました。
(・∀・)スバラスィ
406403:04/05/26 19:19

printf("平均値:%f\n", (float)sum / N);

こう?
すぐにオーバー/アンダーフローしますな。
3つの自然数l,m,nの値とl×m行列Aとm×n行列Bの
行列要素を読み込んで、行列の積C=A×Bを計算し、
その行列要素を印字するプログラムを作成せよ。た
だし、行列A,Bの要素は配列要素として読み込むこ
とにせよ。
上記の問題をお願いします。
読み込むとはどこから?
410401:04/05/26 19:36
素早い回答感謝です。
で、早速プロンプトで確認しようとしたのですが
コンパイラでexeファイルを作成してクリックしても
一瞬で消えてしまって確認とか出来ないんですけど
作成したファイルってvisual Cのソフトとか無い人は
どうやって確認するんですか?
コンパイラは ttp://www.vector.co.jp/soft/win95/prog/se122244.html
です。
コマンドプロンプトからEXEうちこめや。
こまんんんんんんどらいいいいんんんんから実行しっしいししゃろ
授業でそれ使えと言われたのなら仕方ないが、Cygwin+gccとかのもっと使用者の多い環境を勧める。
>>410
コマンドプロンプトにexeファイルを"ドラッグ&ドロップ"すると入力が楽。
>>408
入力例ぐらい晒してくれ。
416401:04/05/26 21:28
実行出来ました。プログラムを少し変更したのがいけなかったみたいです。
下手にいじらない方が良かった・・・_| ̄|○

お陰様できちんと動いているのですが
n個の数を入力なので、いくつの数を入力するのか定かでは無い訳で

(いくつの数を入力しますか?\n); という文を挿入しようとしたら
入力の数が繰り返されないで「いくつの数を入力しますか」が繰り返されてしまって・・・
なんだか悲しくなってきました。
最初からきっちり分かるように書けよ。
"n", "数" あほか
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < >>408 まだ〜?
            \_/⊂ ⊂_ )   \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん  |/

typedef double DATATYPE;
typedef struct _matrix MATRIX;
struct _matrix{
int rows;
int cols;
DATATYPE **array;
};
int matrix_init(MATRIX *mat, int rows, int cols){
DATATYPE *data;
size_t data_size = rows*cols*sizeof(DATATYPE);
int i;
mat->rows = rows;
mat->cols = cols;
data = (DATATYPE*)malloc(data_size);
memset(data,0,data_size);
mat->array = (DATATYPE**)malloc(rows*sizeof(DATATYPE*));
for(i=0; i<rows; ++i){
mat->array[i] = data + i*cols;
}
return 1;
}
int matrix_mul(MATRIX *mat, MATRIX a, MATRIX b){
int row, col, tmp;
if( a.cols != b.rows ) {
fprintf(stderr, "matrix_mul: Imcompatible matrix\n");
return 0;
}
matrix_init(mat, a.rows, b.cols);
for(row=0; row < mat->rows; ++row){
for(col=0; col < mat->cols; ++col){
mat->array[row][col]=0;
for(tmp=0; tmp<a.cols; ++tmp){
mat->array[row][col]+=a.array[row][tmp]*b.array[tmp][col];
}
}
}
return 1;
}
420デフォルトの名無しさん:04/05/26 22:31
計算しなさい。
(2n+1)!
初心者なのでさっぱりわかりません。
お願いします
421デフォルトの名無しさん:04/05/26 22:35
入力された整数同士の足算・引算の答えを出力するプログラムを作りたいのですが、
初心者でわからないので教えてください。よろしくお願いします。
(例)
% a.out
> 23 + 12
35
> 56 - 26
30
> 23+45
?
("+","-"記号の前後はスペースが入るものとします)
>>420
' ! ' が階乗ってのはわかるかな
(階乗ってのは、たとえば a! だと 1*2*3*.....*n っていうの)
だから、この場合階乗を求める関数でも作っておいてn+1を渡せばいいと思います。

階乗を求める関数で一番よく出てくるのは再帰というのを使うやつですね。
つまり、自分自身を呼び出す関数。
これを踏まえて書いてみて。わからなければヒント出そう。
>>421
+-記号の前後にスペースを入れろと問題にあるのがミソ。
scanf関数で読み取るときに数字、一文字、数字と読んでみよう。
あとは+-記号で足し算引き算を判断すればいい。
それからスペースがなかったりしたら(?を出すとき)、どこでそれを見つけるかも、少し考えてみよう。
424デフォルトの名無しさん:04/05/26 22:52
>>422
ごめんほんっとごめん!つっこませて!
>(階乗ってのは、たとえば a! だと 1*2*3*.....*n っていうの)
a!なら1*2*3*.....*aね。
3!なら、1*2*3で、6
425401:04/05/26 22:59
(´ω`)ショボーン
>>401
その手の宿題は、みんな飽きてるからな・・・>>130-131あたりを
参考にしてがんがれ
427デフォルトの名無しさん:04/05/26 23:22
/* 1+1/1!+1/3!+1/5!+・・・+1/(2n+1)!の計算式 */
#include<stdio.h>

long kaijo(int n);
int main(void)
{
double ans=1;
int i,n;

printf("1+1/1!+1/3!+1/5!+・・・+1/(2n+1)! \n");
printf("n:");
scanf("%d",&n);

printf("1 ");
for(i=0;i<=(2*n+1);i++){
if(i%2!=0){
ans=ans+(double)1/kaijo(i);
printf(" + 1/%d!",i);
}
}
printf(" =%lf\n",ans);
}
long kaijo(int n)
{
if(n==0)
return 1L;
else
return n*kaijo(n-1);
}
このプログラムの下から4行目のreturn 1L;とreturn n*kaijo(n-1);というのはどこに戻っているのでしょうか?
初心者なのでわかりません。教えてください。
チン      ☆  チン       ☆
       チン    マチクタビレタ〜   チン     ♪
           ♪
    ♪          ☆チン    .☆   ジャーン!   マチクタビレタ〜!
        ☆ チン   〃  ∧_∧  ヽ         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ  ___\(`A´ #) /\_/ <  >>408の入力仕様まだー?
        チン    \_/⊂    つ    ‖     \__________
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|     ‖        マチクタビレタ〜!
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|   /|\
        |             |/
429デフォルトの名無しさん:04/05/26 23:35
>>427
return 1L;
は普通のreturnと一緒で1を返すだけ。Lはlong型にしてるだけだからあんま気にすんな。

return n*kaijo(n - 1);
は、「n*kajio(n-1)の返却値」を返す。最初は分かりづらいけど分かれば簡単。
高校数学の漸化式とか覚えてたら余裕。
>>421
#include <stdio.h>

int main(void)
{
int num1, num2;
char str[BUFSIZ], str2[BUFSIZ], enzan;

while(1)
{
printf("> ");
if(fgets(str, sizeof(str), stdin) == NULL) break;
if(sscanf(str, "%d%s%d", &num1, str2, &num2) != 3) break;
if(sscanf(str2, "%c", &enzan) != 1) break;

if(enzan == '+') printf("%d\n", num1 + num2);
else if(enzan == '-') printf("%d\n", num1 - num2);
else break;
}

return 0;
}
整数nと実数データx1,x2,…xnを読み込んだ後x1,x2,…xnを
小さい順に並び替えるプログラムを作成せよ。
という問題です。
>>431
Googleでバブルソートとかクイックソートとか。
たぶん解説つきで出てくる。
433デフォルトの名無しさん:04/05/27 02:47
誰か助けてください。補修がたまりにたまってC言語演習の宿題どころじゃなくなってしまいました。

言語はC言語です。


配列を使ってプログラムを書いてください。二つのベクトルA,Bを考えます。
二つのベクトルの内積A・B=a1・b1+a2・b2+c1・c2を計算してください。
ようその値は、a1=1、a2=2、a3=3、b1=2、b2=3、b3=4です。for文を使った場合と使わない場合を書いてください。


スーパーの売り上げを配列に入力し、今日の売り上げと消費税(5%)を計算してください。入力する情報は、
(1)単価、(2)数量、(3)売り上げ{単価と数量の積}、(4)消費税。計算するだけでなく、
一覧表にように表示してください。最後に、本日の売り上げの合計と消費税の合計も計算して表示すること。
配列はa[8][4]と宣言して下さい。

取引1 サクランボ25キロ、単価4000円/kgを売る
取引2 メロン3個、単価2000円を売る
取引3 スイカ75個、単価1000円を売る
取引4 バナナ1kgを売る。単価200円/100g
取引5 ジュースを15本売る。単価120円
取引6 にんじん2kg、単価500円/kg、ジャガイモ3kg、単価400円/kg、玉ねぎ1kg、単価350円/kgを売る。


☆↓あとこれは先輩に聞いたら先輩もわからなくて、ついでにこれもできる人いないか探せって言われた奴です^^;

問題 f(x)=4x-xe^(2x)+2=0の根をニュートン法とラフソン法でもとめろ。ただし、初期値 x1=1、
収束判定定数ε=0.00001とする。また計算回数の違いを考察せよ。
1は少し待て。2はちょっと意味がわからないからもう少し
詳しく説明してくれないか?
>>433
#include <stdio.h>
#define TAX 0.05
main()
{
int a[8][4];

printf("取引1 サクランボ\n");
printf("単価 /kg ");
scanf("%d", &a[0][0]);
printf("How many?");
scanf("%d", &a[0][1]);
a[0][2] = a[0][0] * a[0][1];
a[0][3] = a[0][2] + (a[0][2] * TAX);
printf("uriage is %d\n", a[0][2]);
printf("total is %d\n", a[0][3]);

}

とりあえず取引1だけ。取引2も同じように作ればいいでないか?配列を一つずらすだけ。
ループも使おうかと思ったけどこんな問題で迷ってるんならまだループを習ってないと
思うから使わなかった。もしなにか違うようなことがあればまた随時書き換えるので。
こっちも初心者ですまん。Cは最近使ってないからあまり覚えてないがまあ動くでしょ。
436418=428:04/05/27 07:49
もう,適当に書いちまうか。

void matrix_print(MATRIX mat){
int row, col;
printf("%d x %d matrix\n", mat.rows, mat.cols);
for(row=0; row < mat.rows; ++row){
for(col=0; col < mat.cols; ++col){
printf("%g ", (double)mat.array[row][col]);
}
printf("\n");
}
return;
}

int read_data_matrix(MATRIX *mat, FILE *fp){
int row,col;
char buf[1024];
for(row=0; row < mat->rows; ++row){
char *p;
fgets(buf,sizeof(buf),fp);
for(col=0,p=strtok(buf," "); col < mat->cols; ++col,p=strtok(NULL," ")){
mat->array[row][col] = (DATATYPE)(p?atof(p):0);
}
}
return 1;
}
437418=428:04/05/27 07:51
int read_data(MATRIX *a, MATRIX *b, FILE *fp){
int l,m,n;
char buf[128];
fgets(buf,sizeof(buf),fp);
sscanf(buf,"%d %d %d", &l, &m, &n);
matrix_init(a, l, m);
matrix_init(b, m, n);
read_data_matrix(a, fp);
read_data_matrix(b, fp);
return 1;
}

int main(){
MATRIX a;
MATRIX b;
MATRIX mat;
FILE *fp;
if( NULL == (fp = fopen("matrix.txt", "r")) ) return EXIT_FAILURE;
read_data(&a,&b, fp);
matrix_mul(&mat,a,b);
matrix_print(mat);
return EXIT_SUCCESS;
}
>>433
>>435
もれの解釈
int a[8][4]={ /* 単価,数量,売り上げ(単価と数量),消費税 */
{4000, 25, 0, 0}, /* 取引1 サクランボ */
{2000, 3, 0, 0}, /* 取引2 メロン */
{1000, 75, 0, 0}, /* 取引3 スイカ */
{200/100, 1000, 0, 0},/* 取引4 バナナ */
{120, 15, 0, 0}, /* 取引5 ジュース */
{500, 2, 0, 0}, /* 取引6 にんじん */
{400, 3, 0, 0}, /* 取引6 ジャガイモ */
{350, 1, 0, 0}, /* 取引6 玉ねぎ */
};
int total,totalTax,i;
total=totalTax=0;
for(i=0; i<8; ++i){
total+=(a[i][2]=a[i][0]*a[i][1]);
totalTax+=(a[i][3]=a[i][2]*TAX);
}

/* 表示 */
for(i=0; i<8; ++i)
printf("取引%d 単価[%4d]×数量[%4d]=[%6d](TAX:%d)\n",
(i<5)?(i+1):6, a[i][0],a[i][1],a[i][2],a[i][3]);
printf("\n本日の売り上げ[%6d](TAX:%d)\n", total, totalTax);
439名無しさん@お腹いっぱい。:04/05/27 12:02
>>433
ニュートン法とラフソン法ってのは、ニュートン・ラプソン法の間違いでは?
ググればサンプルプログラムがどっちゃり出てくるぞ。
440305:04/05/27 12:05
>>306
>>307
返信遅れてすいません。
どうもありがとうございました〜。
おかげで理解できました。
441443:04/05/27 12:40
結局2番は間に合いませんでした_l ̄l○

一週間後の再提出まで自分でまたやってみます、わからかなったらまたきますんでよろしくです。

協力感謝します。

先輩大丈夫かな^^;
先輩のやつは5月いっぱいが期限らしいです。
>>246
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+14270
>「%*sで…」とか習ってないことでやっぱりわからなかったんです。

#include <stdio.h>
int main(void){
int i, m, d;
int cal[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
printf("表示月を入力してください。>"); scanf("%d", &m);
printf("1:日 2:月 3:火 4:水 5:木 6:金 7:土 >"); scanf("%d", &d);
printf("\n日 月 火 水 木 金 土\n");
for (i = 0;i < d - 1; i++) printf(" ");
for (i = 1; i <= cal[m]; i++){
printf("%2d ", i);
if ((d++) % 7 == 0) putchar('\n');
}
return 0;
}
443442:04/05/27 17:45
しまった、半角空白の連続は反映されないんだった。
switch方式で
キーボードから二つの数値と演算子を入力して入力された演算子に対応した計算結果
を表示するプログラムを作成してください。演算子は+,-,*,%で、
>444
ほんとにそんな問題なのか?もっと詳しかったりしないか?

#include <stdio.h>
int main(void)
{
  int x, y, result;
  scanf("%d%d", &x, &y);
  switch (getchar()) {
  case '+': result = x + y; break;
  case '-': result = x - y; break;
  case '*': result = x * y; break;
  case '%': result = x % y; break;
  default: puts("error"); return 1;
  }
  printf("%d\n", result);
  return 0;
}
446デフォルトの名無しさん:04/05/28 00:03
行列の積を求めるプログラムを作成する。
n*nの大きさの実行列A,Bをキーボードより読み込んで、
行列の積C=A*Bを計算し、その結果を画面に出力する
プログラムを作りなさい。
という課題で困っています。
お願いします。
for文を何度か使って、配列でプログラムするみたいなのですが...
447名無しさん@お腹いっぱい。:04/05/28 00:42
>>446
ちょっとまえのレスに、ほとんど同じ質問と回答が載っているぞ。
参考にされたし。
448デフォルトの名無しさん:04/05/28 00:53
2つの整数をキーボードから入力し、それらの和、積、差、商、剰余の
それぞれを求め、画面に表示させるプログラムを作成しなさい。

剰余のところで詰まってます。エラーなしになるものを教えてください。
お願いします。
449デフォルトの名無しさん:04/05/28 00:55
2つの整数をキーボードから入力し、それらの和、積、差、商、剰余の
それぞれを求め、画面に表示させるプログラムを作成しなさい。

剰余のところで詰まってます。エラーなしになるものを教えてください。
お願いします。
450デフォルトの名無しさん:04/05/28 00:56
2つの整数をキーボードから入力し、それらの和、積、差、商、剰余の
それぞれを求め、画面に表示させるプログラムを作成しなさい。

剰余のところで詰まってます。エラーなしになるものを教えてください。
お願いします。
451デフォルトの名無しさん:04/05/28 00:58
すみません3個もカキコしてしまいました。
答える気にならないような事をするなよ。釣りか。
ふかわりょうでさえ二回だぞ?
453デフォルトの名無しさん:04/05/28 01:10
>>447さん、ありがとうございます。
過去ログを調べずに質問してしまって、ごめんなさい。
それなのに、親切にこたえてくださって、感謝しています。
参考にして、少し自力でがんばってみます。
454デフォルトの名無しさん:04/05/28 01:12
>>447さん、ありがとうございます。
過去ログを調べずに質問してしまって、ごめんなさい。
それなのに、親切にこたえてくださって、感謝しています。
参考にして、少し自力でがんばってみます。
455デフォルトの名無しさん:04/05/28 01:13
>>447さん、ありがとうございます。
過去ログを調べずに質問してしまって、ごめんなさい。
それなのに、親切にこたえてくださって、感謝しています。
参考にして、少し自力でがんばってみます。
>>448-450
整数だからintかlongを使ってるんだろうし、剰余は%で求められるし、
+,-,*,/でエラーが出ないのに%だけエラーが出るのは何故だ?
そっちの方が気になるぞ。
457385:04/05/28 07:38
      ☆ チン     
                        
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < >>385 まだ〜?
            \_/⊂ ⊂_ )   \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん  |/
幸せになれるプログラムを作って下さい
>>457
>コマンドにはmoreなどが適当。
って何よ? 意味わからん。
要はteeの実装?
teeならforkもpipeもいらん
チン      ☆  チン       ☆
       チン    マチクタビレタ〜   チン     ♪
           ♪
    ♪          ☆チン    .☆   ジャーン!   マチクタビレタ〜!
        ☆ チン   〃  ∧_∧  ヽ         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ  ___\(`A´ #) /\_/ <  >>457説明マダー?
        チン    \_/⊂    つ    ‖     \__________
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|     ‖        マチクタビレタ〜!
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|   /|\
        |             |/
463たか:04/05/28 11:45
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html#2

簡単な問題だと思うのですが初心者なのでどう考えていいのか分かりません。。。
誰か助けてください。お願いします
>>463
質問ってこれでいいの?
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1085675635&res=1

6乗を求めるなら2乗したのを3回かける
7乗を求めるなら2乗したのを3回かけてから1回足す
ってかんじでいんじゃないかな。
>>385
要は
>「./a.out filename コマンド 引数1 引数2 … < 標準入力データファイル」
  pipe 作って
  fork() して
  子プロセスなら {
    標準入力を pipe の片方に振って
    execvp(コマンド 引数1 引数2 …)
  }
  while (標準入力が EOF() でない間) {
    標準入力読んで
    ファイル「filename」に書いて
    pipe のもう一方に書いて
  }

ってことか?
>>465
大事なことが抜けている。
pipeの入力側ちゃんと閉じろよ。
467デフォルトの名無しさん:04/05/28 12:59
キーボードから実数型の変数に1辺の長さを入力して、その辺を持つ
正方形の周りの長さと面積、立方体の体積を求め、画面に表示させるプログラム
を作れ。

1年の最初から説明もなしに正直これはつらいです。
詳しい人お願いします。
1年の最初なら,まだ,やり直しが効くぞ?
素直に担当教授にギブアップを申し出てみろ。
まとも教授なら,それなりの対応してくれるだろう。

皆で行けば,講義予定が変わるかもよ(w
>>467

#include <stdio.h>

int main() {
double n;
scanf("%lf",&n);

printf("%f\n", n * 4 ); /* 正方形の辺 */
printf("%f\n", n * n ); /* 面積 */
...
一応立方体も書いておこうかね。
printf("%g\n", n * n * n);
>470
いちおう
return 0;
もかいておこうかね
じゃ、留めに
}
も書いておくよ。
以下のプログラムがどのように実行されるか説明せよ.という問題なんですが
どういったことが起きているのか詳しく教えてもらえませんか?お願いします。

#include<stdio.h>
int count;
void func1(int val, int *called)
{  int count;
count = 2;
printf("func1: count は %d です.\n", ++count);
printf("func1: called は %d です.\n", *called);
++count;
++(*called);
}

void func2(int val, int *called)
{  printf("func2: count は %d です.\n", ++count);
  printf("func2: called は %d です.\n", *called);
printf("func2: val は %d です.\n", val);
++count;
}

void main(int argc, char *argv[])
{int called = 1;
count = 1;
printf("main: count は %d です.\n", count);
func1(count, &called);
printf("main: count は %d です.\n", count);
func2(count, &called);
printf("main: count は %d です.\n", count);
}

グローバル変数count
ローカル変数count

の振る舞いを説明すればええんでないの?
あとcalledポインタあたりかな?
476473:04/05/28 17:01
>>474
グローバル変数とローカル変数というものがよくわからないのです。
参考書みても書いてないですし・・・。
477仕様書無しさん:04/05/28 17:05
いや、もしかしたらcrt0からの話をしないとダメかもしれない。
478たか:04/05/28 17:11
>>464
すいません。そのプログラムの書き方がわからないんです...
>>476
スコープで探してもない?
480473:04/05/28 17:30
>>479
スコープについては書いてありますね。
有効範囲という意味みたいです。
グローバル変数とかローカル変数とかは書いてないです。

つまりそういうことです。
>>478
int power( int m, int n )
{
int p,i;

p = 1;
if(n%2==0) {
for( i = 1; i <= n/2; i++ ) {
p = p * m;
}
p *= p;
return p;
}

else {
for( i = 1; i <= n/2; i++ ) {
p = p * m;
}
p *= p;
p *= m;
return p;
}
}

nがintだからこれでいいんじゃなかろうか
>>478
こんなもんかな。
int power(int m, int n)
{
 if (n < 0) {
  return 0;
 }
 switch (n) {
 case 0:
  return 1;
 case 1:
  return m;
 }
 if (n % 2) {
  return power(m, n - 1) * m;
 }
 int r = power(m, n / 2);
 return r * r;
}
条件判断の順序の調整や再帰の廃止でまだ速くなるけど。
>>482
そこまでやるんじゃ
int power( int m, int n )
{
int p,i;

for( i = 1; i <= n/2; i++ ) {
p = p * m;
}
p *= p;
if(n%2) {
p *= m;
}
return p;
}
こうだろう。プログラム自体が正しいかは分からんけど。
485464:04/05/28 18:04
>7乗を求めるなら2乗したのを3回かけてから1回足す
「足す」じゃなくて「かける」ね。
>>484
にゃるほど
487デフォルトの名無しさん:04/05/28 18:24

>>484
> int p,i;
int p = 1, i;
じゃないとマズいでしょ。。。

> p = p * m;
> p *= m;
使い分ける必要ってあるの・・?
キーボードから入力された 8個の整数値を配列へ格納し、
値の大きい順に表示をするプログラムを作成せよ。


#include <stdio.h>

main()
{
int i, max ;
int a[8],;

for(i = 0; i < 8; i++){
printf("a[%d] = ", i);
scanf("%d",&a[i]);
}

max = a[0];

for(i = 0; i < 8; i++){
if(a[i] > max){
max = a[i];
}
}
printf("値の大きい順に表示\n");
printf("%d\n", max);
}

ここまでできてます
これをいじりたいんですがわかりません
ソートすればいい。
サンプル書く暇が無いので、ソートアルゴリズムの紹介だけ・・・スマソ
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/
491たか:04/05/28 18:43
皆さん協力してくださってありがとうございます。
以下のプログラムで出力してみると答えが1になってしまいました
#include <stdio.h>

int power( int m, int n );

int main()
{
int i ;

printf( "%d\n", power( 2, i ));
return 0 ;
}

int power( int m, int n )
{
int p = 1,i ;

for( i = 1; i <= n/2; i++ ) {
p = p * m;
}
p *= p ;
if(n%2) {
p *= m;
}
return p ;
}
よかったね^^
上出来じゃないか
>>491
2の何乗を求めたいんでちゅか?
>>489
#include <stdio.h>
#include <stdlib.h>

int intcmp(const int *a, const int *b)
{
    return *a < *b ? 1 : -1;
}

int main()
{
    int i, int a[8];

    for(i = 0; i < 8; i++){
        printf("a[%d] = ", i);
        scanf("%d",&a[i]);
    }

    qsort(a, 8, sizeof(int), (int(*)(const void*, const void*))intcmp);

    printf("値の大きい順に表示\n");
    for(i = 0; i < 8; i++)
        printf("%d\n", a[i]);
    return (0);
}

int power(int a, int b){
if (b == 0) return 1;
if (b % 2 == 0) return power(a * a, b / 2);
else return a * power(a * a, (b - 1) / 2);
}
>>496
(b - 1) は冗長だな。
498たか:04/05/28 21:21
>>496さんありがとうございます.
2の11乗を求めるプログラムはこれであってますよね。
符合なし整数にしてますが。

#include <stdio.h>

unsigned int uint_power(unsigned int a, unsigned int b );

int main()
{
unsigned int i;
i = 11 ;

printf( "%d\n", uint_power( 2, i ));
return 0 ;
}

unsigned int uint_power(unsigned int a, unsigned int b){

if (b == 0) return 1;

if (b % 2 == 0) return uint_power(a * a, b / 2);

else return a * uint_power(a * a, (b - 1) / 2);

}
499たか:04/05/28 21:22
>>496さんありがとうございます.
2の11乗を求めるプログラムはこれであってますよね。
符合なし整数にしてますが。

#include <stdio.h>

unsigned int uint_power(unsigned int a, unsigned int b );

int main()
{
unsigned int i;
i = 11 ;

printf( "%d\n", uint_power( 2, i ));
return 0 ;
}

unsigned int uint_power(unsigned int a, unsigned int b){

if (b == 0) return 1;

if (b % 2 == 0) return uint_power(a * a, b / 2);

else return a * uint_power(a * a, (b - 1) / 2);

}
もう一丁↓
501たか:04/05/28 21:25
>>496さんありがとうございます.
2の11乗を求めるプログラムはこれであってますよね。
符合なし整数にしてますが。

#include <stdio.h>

unsigned int uint_power(unsigned int a, unsigned int b );

int main()
{
unsigned int i;
i = 11 ;

printf( "%d\n", uint_power( 2, i ));
return 0 ;
}

unsigned int uint_power(unsigned int a, unsigned int b){

if (b == 0) return 1;

if (b % 2 == 0) return uint_power(a * a, b / 2);

else return a * uint_power(a * a, (b - 1) / 2);

}
502たか:04/05/28 21:29
すいません。3回もやってしまいました。。。
しかもうまいこと予測されてました。。
>>502
3回目ネタじゃなかったのw
>>501-502
ワロタ
#include<stdio.h>
#include<fcntl.h>

main()
{
int fd;
fd = open("file",O_WRONLY|O_CREAT,0644) ;
close(1);
dup(fd);
close(fd);
execlp("ls","ls","-lag",NULL);
}

を実行したとき、作られた「file」の中の「file」のサイズは
なぜ0になるのか示せ。
#include<stdio.h>
#include<fcntl.h>

main()
{
int fd;
fd = open("file",O_WRONLY|O_CREAT,0644) ;
close(1);
dup(fd);
close(fd);
execlp("ls","ls","-lag",NULL);
}

を実行したとき、作られた「file」の中の「file」のサイズは
なぜ0になるのか示せ。
え?もう1回?
実数xと正の整数nを受け取りxのn乗を計算して返す(ポインタの引数を使用し返却値0とする)関数を作成せよ
但し、main関数では適当なデータをキー入力して、関数を呼び出した後はxのn乗の値を出力せよ。
「キーボードから入力データの個数n(最大50)を1個読み込み、
その後からn個のデータを配列aに入力し、合計、平均、標準偏差を求めるプログラムを作成しなさい.」

という問題を教科書見ながらやってみたのですが
家のコンピュータでVC++6.0を使うと、学校で教えてもらったとおりの操作をしているはずなのに
エラーや警告はないのにビルドすると「リンク中...」と表示されたまま一切の操作を受け付けなくなります。

なんででしょう?コンピュータのスペック等は特に問題はないはずですけど...
>>508

#include <stdio.h>
#include <math.h>

int main(void)
{
int n;
double x;

scanf("%f%d,\n",&x,&n);
printf("%f\n",pow(x,n));

return 0;
>>505-506
その課題の前提条件となる命題は誤りである。
なぜなら,既にファイル"file"が存在した場合,実行後のそのサイズはゼロとは限らない。
>>501
>483はスルー?
つーか、高速化が目的なら元の版と速度比較するべきじゃないの?

>>508
ほぼ同じ目的のネタがあるから自力でできるところまでやってみたら?

>>506
そういう宿題なの?

>>509
VCスレ行きかな?
513デフォルトの名無しさん:04/05/28 23:24
#include <stdio.h>
int power(double x, int n, double *y){
double sum = 1.0;
while(n--) sum *= x;
*y = sum;
return 0;
}
int main(void){
int n;
double x, y;
printf("x:"); scanf("%lf", &x);
printf("n:"); scanf("%d", &n);
power(x, n, &y);
printf("y = %f", y);
return 0;
}
10個の要素(配列の大きさが10)をもつ整数型配列a,b,cを宣言して配列aに
適当なデータを初期値代入せよ。その後そのデータを配列bには順方向に配列cには逆方向に
代入し、最後に配列a,b,c,の要素を出力せよ(for文を必ずつかわないといけない)
順方向とは、a[0]をb[0]に、a[1]をb[1]に・・・、a[9]をb[9]に代入すること
逆方向とは、a[0]をc[9]に、a[1]をc[8]に・・・、a[9]をc[0]に代入すること
>>514
#include <stdio.h>

int main() {
int i,a[10] = { 0,1,2,3,4,5,6,7,8,9} ,b[10],c[10];
for(i=0;i<10;i++) {
b[i] = a[i];
c[i] = a[10-i-1];
}
for(i=0;i<10;i++) {
printf("a[%d] = %d b[%d] = %d c[%d] = %d\n",i,a[i],i,b[i],i,c[i]);
}
return 0;
}
for(i=0;i<10;i++) c[10-1-i] = b[i] = a[i];

>>515
ありがとうございます^^
すいません。ちょっと長くなるんですが。
#include<stdio.h>
#include <fstream.h>
bool (*pfunc)(char * str);
bool func(char * str)
{
if(!str) return false;
printf(str);
return true;
}
void main()
{
pfunc = func;
unsigned char * cfunc = (unsigned char *)pfunc;
ofstream out_file("関数.func",ios::binary);
for(unsigned long i = 0;i < 225275;i++)
{
out_file.put(cfunc[i]);
}
}
519518:04/05/29 06:25
という風に関数.funcというファイルに関数funcを保存したのです。ところが

#include <fstream.h>
#include <sys/types.h>
#include <sys/stat.h>
void main()
{
struct _stat st;
unsigned char* file = NULL;
bool(* func)(char *str) = NULL;
ifstream InFile("関数.func",ios::binary);
_fstat(InFile.fd(),&st);
file = new unsigned char[st.st_size];
for(long i = 0;i < st.st_size;i++)
{
InFile.get(file[i]);
}
InFile.close();
func = (bool (__cdecl *)(char *))file;
func("がちょ〜ん");
}

という様にいざファイルから読み出して関数funcを使用しようとしてもなぜだ
かうまく行きません。どなたか原因がわかる方いらっしゃいませんでしょうか?
>>519
んな器用なことは大抵のOSでできない。できる場合も、工夫が必要になる。
何がやりたいか知らんが、OSの勉強しなされ。
>>519
そういうのは普通DLLという特殊なライブラリをコンパイル/リンクしておき,
後で呼び出す。

とあるUNIX系システムでの例。
dll.c:
#include<stdio.h>
#include <fstream.h>
bool func(char * str)
{
if(!str) return false;
printf(str);
return true;
}
dllの作成:
gcc -fPIC -shared -nostartfiles -o dll.so dll.c

DLLを呼び出すmain関数。
#include <dlfcn.h>
int main(){
void *handle;
bool (*f)(char*);
handle = dlopen("dll.so",RTLD_LAZY);
f = dlsym(handle,"func");
f("がちょ〜ん");
}

>関数funcを保存したのです
奇天烈な君の保存した内容は,プログラムが終了した瞬間,
その意味が失われる。
522デフォルトの名無しさん:04/05/29 12:27
問題の指示で、”実数型の変数”とあるのですが、
これはどのようなものなのでしょうか?
523デフォルトの名無しさん:04/05/29 12:32
@実行ファイル名が a.outのとき"Give me name"を、
how-are youのとき"I'm fine,thank you"
fuck youのとき"son of bitch!"
それ以外のとき"Ouch!"
と出力するプログラムをかけ。

A引数として与えられた文字列を、辞書的順序で出力するプログラムを書け。
(例) FILENAME January February March
(結果) February January March

B引数として与えられた数字を全て足し合わせた数を出力するプログラムを書け。
(例) FILENAME 1 2 3 4
(結果) 10


お願いします。
あいたたた、2)のやつ文字列まで確保しなくて良かった
3つの正の数値a,b,cを入力して、このデータa,b,cで三角形が成立するかどうかを調べ
三角形が成立するときにはさらに正三角形、直角二等辺三角形、直角三角形、二等辺三角形、そのいずれでもない三角形
に分類し、その結果を表示せよ。
527526:04/05/29 13:51
#include<stdio.h>

int main()
{
int a,b,c,temp;
char *triangle;

printf("正数a,b,c=");
scanf("%d,%d,%d",&a,&b,&c);

if(b>a){
temp=a;
a=b;
b=temp;
}
if(c>a){
temp=a;
a=c;
c=temp;
}
528526:04/05/29 13:52
if(a+b>c&&b+c>a&&c+a>b){
if(a==b==c){
printf("正三角形です");
}
else if(b*b+c*c=a*a&&b==c){
printf("直角二等辺三角形です");
}
else if(b*b+c*c=a*a){
printf("直角三角形です");
}
else if(a==b||b==c||c==a){
printf("二等辺三角形です");
}
else{
printf("その他の三角形です");
}
}

return 0;
}

エラー E2277 triangle.c 28: 左辺値が必要(関数 main )
エラー E2277 triangle.c 31: 左辺値が必要(関数 main )
529526:04/05/29 13:54
char *triangle;ってのはミスです。
お願いします。
530526:04/05/29 14:00
アホみたいに連カキすいません。
エラーは消えたんですが結果が上手くいきません
(b*b+c*c)=(a*a)&&b==c

(b*b+c*c)=(a*a)

どう思う?
532524:04/05/29 14:08
>523
一応、2) の修正版
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=90

>527
> if(a==b==c)
a, b, c が全て同じ時、というif文を書いているつもりなんだろうけど、
a == b で算出される真偽値が c と比較されてしまって意味が違うので駄目ぽ。
if(a==b&&a==c) と書く。
533526:04/05/29 14:23
>531,532さん
ありがとうございます。
こういうミスがないように気をつけます。
534名無しさん@お腹いっぱい。:04/05/29 15:37
>>523
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
if (!strcmp(argv[0], "a.out")) {
printf("Give me name¥n");
} else if (!strcmp(argv[0], "how-are-you")) {
printf("I'm fine, thank you¥n");
} else if (!strcmp(argv[0], "fuck-you")) {
printf("son of bitch¥n");
} else {
printf("Ouch!¥n");
}
return 0;
}
535518:04/05/29 19:55
>>520-521
どうもありがとうございました。勉強が足りませんでした。精進します。
>>535
勉強よりも藍が足りない
>>536
(・∀・)!?
高卒の俺にはとてもではないが難しすぎる > 藍
AIが止まらない
540523:04/05/29 20:33
皆さん、有難うございました!
Cの課題でテキストファイルを読んでその内容を表示するものを作るものが出たのですが、Cの初歩中の初歩を勉強している身では構成すらもさっぱりわかりません
皆さんの力を貸してください
問題分をそのまま書きます

テキストファイルに、1〜nまでの素数を書き込む関数fileSosu()を作成せよ。
void fileSosu( char *fileName, int n)
・fileName : 素数を書き込むファイル名
・n : 素数を求める最大の数
上記の関数を以下のプログラムで実行し1〜100までの素数がファイルに出力されたか動作を確認せよ。
#include<stdio.h>

//ここにfileSosu()関数を開く。

void main()
{
//ファイル名を格納する文字列
char wFileName[20];

printf("素数を出力するファイル名=");
//ファイル名をキーボードから入力する
scanf("%s", wFileName);
fileSosu( wFileName, 100);
}

よろしくお願いします
542デフォルトの名無しさん:04/05/29 22:29
>>541
void fileSosu(char *fileName, int n)
{
FILE *fp = fopen(fileName, "w");

int prime;
int i, j;

for(i = 2; i <= n; i++) {
prime = 1;
for(j = 2; j <= i / 2; j++) {
if((i % j) == 0) {
prime = 0;
break;
}
}
if(prime == 1)
fprintf(fp, "%d\n", i);
}
}

あってるかな〜
>>542
fprintf(fp, "OS に close させるのもなかなか乙\n");
j <= i / 2のところを
j*j <= iとしても
10万まできちんと表示されたんだが、j*jのとこでオーバーフローしないの?
>10万まできちんと表示された
j はその平方根くらいまで
>>545
あ・・・・・・、バカな質問ですた。。。
fopen を初めて使った。
fclose しなきゃなのね。
やらないと五月蝿い人がいるからね。
C++でべき乗をする演算子ってないんでしょうか?
問題とかのレベルに達していなくてすいません。。。
math.h の
double pow(double x, double y);
それは演算子ではありません
あっ!ごめんなさい。そうですた。
十文字腹して喉掻っ切って死んできます。
>>549
POD型の演算子の多重定義はできない。
>553
ありがとうございました
Perlにはあるんだけどね。
あるねぇ。
まあ機能が無い訳じゃないんだから、素直にpowっとけ。
557デフォルトの名無しさん:04/05/30 11:23
C言語で 10進数を 2進数の IEEE32ビット表現に変換するプログラムを作りたいのですが、よかったら作ってもらえないでしょうか
>>557

float f = (float)num;
559デフォルトの名無しさん:04/05/30 11:39
与えられた文字列よりその文字列の全ての順列を列挙するプログラム

教えてください
.>>556
>powっとけ。
表現(・∀・)イイネ!!
561デフォルトの名無しさん:04/05/30 12:41
5×5行列の積を標準入力して求めるプログラムを作りたいのですが、
どこがおかしいでしょうか?
つ#include <stdio.h>
void main(void)
{
double a[5][5];
double b[5][5];
double c[5][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};
int i;
int j;
int k;

for(i=0; i<=4; i++)
{
for(j=0; j<=4; j++)
{
printf("input A %5d\n",a[i][j]);
scanf("%lf",&a[i][j]);
}
}
for(i=0; i<=4; i++)
{
for(j=0; j<=4; j++);

562デフォルトの名無しさん:04/05/30 12:46
{
for(k=0; k<=4; k++)
{
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
}
}
printf("matrix A and B \n");
for(i=0; i<=4; i++)
{for(j=0; j<=4; j++)
{
printf("%5f ",a[i][j]);
printf("%5f ",b[i][j]);
}
printf("\n");
}
printf("output C=A*B \n");
for(i=0; i<=4; i++)
{
for(j=0; j<=4; j++)
{
printf("%5f ",c[i][j]);
}
printf("\n");
}
}
printf("output C=A*B \n");
for(i=0; i<=4; i++)
{

563デフォルトの名無しさん:04/05/30 12:47
printf("%5f ",c[i][j]);
}
printf("\n");
}
return 0;
}
はじめましてよろしくお願いします。
二次元配列を使って九九の表を作成せよって言う問題が出たんですがどうもよく分からなくて
模範解答を誰か教えて下さい。
よろしくお願いしますm( )m
565デフォルトの名無しさん:04/05/30 12:55
566デフォルトの名無しさん:04/05/30 13:05
567566:04/05/30 13:06
>二次元配列
すっかりわすれてた煎ってくる
>>564
#include <stdio.h>

int main() {
int i,j,table[9][9];
for(i=0;i<9;i++) {
for(j=0;j<9;j++) {
table[i][j] = i * j;
}
}
printf(" ");
for(i=0;i<9;i++) printf(" %2d",i+1);
printf("\n");
for(i=0;i<9;i++) {
printf("%d",i+1);
for(j=0;j<9;j++) {
printf(" %2d",table[i][j]);
}
printf("\n");
}
return 0;
}
569デフォルトの名無しさん:04/05/30 13:24
#include<stdio.h>
int main(void)
{
int i, j , t[10][10];
for (i = 1; i <= 9; i++) for (j = 1; j <= 9; j++) t[i][j] = i * j;
for (i = 1; i <= 9; i++){
for (j = 1; j <= 9; j++) printf("%2d ",t[i][j]);
puts("");
}
return 0;
}
570デフォルトの名無しさん:04/05/30 14:02
>>561
アプロダが重いので
#include <stdio.h>
#define N 2

int main(void)
{
double a[N + 1][N + 1], b[N + 1][N + 1], c[N + 1][N + 1] ={0,};
int i, j, k;

for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("input A a[%d][%d]\n", i, j);
scanf("%lf", &a[i][j]);
}
}

for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("input B a[%d][%d]\n", i, j);
scanf("%lf", &b[i][j]);
}
}
571続き:04/05/30 14:02

for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
for (k = 0; k < N; k++)
c[i][j] += a[i][k] * b[k][j];

printf("matrix A and B \n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) printf("%5f ", a[i][j]);
printf("\t");
for (j = 0; j < N; j++) printf("%5f ", b[i][j]);
printf("\n");
}

printf("output C=A*B \n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) printf("%5f ", c[i][j]);
printf("\n");
}
return 0;
}
572571:04/05/30 14:03
#define N 2
は 5 にしといてね。
573564:04/05/30 14:41
模範解答ありがとうございます!
>>561
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=92&fi=no

>printf("input A %5d\n",a[i][j]);
この行は
printf("input A[%d][%d]\n",i ,j);
っていう意図かな
それとBを入力させてない
>>561の最後の行の
>for(j=0; j<=4; j++);
はセミコロンが邪魔
あと"{"と"}"の数がおかしい
j <= 4 と書くのは一般的なの?
576570:04/05/30 15:13
double a[N + 1]

+1必要なかったな。
577デフォルトの名無しさん:04/05/30 17:09
先生方お願いします!
複素数の問題なんですが、絶対値, 偏角を与えて1つの複素数を返す関数を作りたいんです。
関数tan(タンジェント、角度が与えられたときに傾きを返す)を使います。
お願いします!
>>577
real = absVal * cos(theta);
imag = absVal * sin(theta);
だろうからtan()は使わんと思うが。
>>578
tanからcos,sinを求めるとかw
Cじゃなくて高校の数学の話のような気がする
複素数にはふたつの要素があるんだが
結果を返すとき
構造体があってそれを用いて返り値として渡すのか
引数としてポインタを渡すのかどうなのかわからんのだが
どなたかお願いします。
gmpライブラリを用いて
3+4を出力するプログラムを作ってもらえませんか?
3と4はgmp数でおねがいします。

gmpライブラリを使おうとかれこれ
2週間たちました。
いろいろなとこを巡ってみました。
でも、だめでした
どうかどうかおしえてください。
お願いします。
583デフォルトの名無しさん:04/05/30 19:41
はじめましてC言語でプログラムに悩んでるので教えてください。

u'' = [ u, v, u' , v']
v'' = [ u, v, u' , v']

'は1回微分です。微分は時間で行っています。
上の式を4次のルンゲクッタでルンゲクッタでu'、v'を
求めたいのですがどうすればいいでしょうか?
>>583
まず日本語を整理しよう。
Runge-Kuttaは4次に限定すれば非常に単純だけど、583みたいに
記号の定義に不備がある場合には解けないよ。
585デフォルトの名無しさん:04/05/30 19:54
>>584
すみません、いろいろ考えていたらおかしくなっていました^^;
とりあえず2回微分のu、vから一回微分のu、vを求めたいです。
よろしくお願いします。
587577:04/05/30 19:59
ひいぃぃーーー!恥ずかしい!
tanを使うものとばかり思ってました!
ひいぃぃぃーーー先生方、有難うございました。
ひいいーーーー
>>583
マルチ野郎は質問する資格なんてありませんよ?消えてください。
πの値を小数点以下1000桁まで求めよ。
π/4 = 4*arctan(1/5)-arctan(1/239)
  arctan(1/m) = 1/m - 1/3m^3 +1/5m^5 - 1/7m^7 + ・・・・
stdio.h以外のヘッダファイルを使ってはいけないそうです。
>>586さんありがとうございます。
これを参考にプログラムを作っていきたいと思います。
hellowとあるのが少し不安ではありますが・・・
591助けてください:04/05/30 21:27
#include <stdio.h>
int inc1(int);
int inc2(int *);
void main(void)
{
int a=2;
printf("inc1(a)=%d, ", inc1(a));
printf("a=%d\n",a);
printf("inc2(a)=%d, ", inc2(&a) );
printf("a=%d\n",a);
}
int inc1(int i)
{
return ++i;
}
int inc2(int *i)
{
return ++(*i);
}
<結果>
inc1(a)=3, a=2
inc2(a)=3, a=3
<理由>
関数inc2の方は、借引数をポインタとして宣言していて結果を呼び出し側
に送っている。よって&aには関数inc2でa(=2)に+1された3が割りあれたれている。
一方、関数inc1の方は、先にprintf("a=%d\n",a)のaに2が入り次に関数inc1の処
理によってa(=2)に+1された3がinc1(a)に送られている。

結果が上のようになった理由が間違ってて再提出をくらいました。
理由を教えてください
592デフォルトの名無しさん:04/05/30 21:43
c++。
実数型の変数に長辺と短辺の長さを入力し、その長さ
の辺を持つ長方形の周りの長さと面積を求め画面に表示させる
プログラムを作れ。

長辺と短辺の入力の違いはあるのですか?
593デフォルトの名無しさん:04/05/30 21:43
>>591
関数呼び出しというプロセスを理解していないからだと思われ。
594デフォルトの名無しさん:04/05/30 21:45
>>592
入力の値の大きい方が長辺で、小さい方が短辺だろ。
つか、プログラム以前の問題が君の脳にあるようだ。
>>591
1.日本語がおかしい
2.関数に送られているとか、送っているとかいう意味不明な用語
3.つまり、あんたの理解不足
596デフォルトの名無しさん:04/05/30 21:46
>>595
ハァ?
お前の頭が一番おかしいと思われー
597助けてください:04/05/30 21:46
>593
私の<理由>のどこがおかしいですか?
指摘してください
>>597
おかしいところを抜き出してみました。
>借引数をポインタとして宣言していて
>結果を呼び出し側に送っている。
>よって&aには関数inc2でa(=2)に+1された3が割りあれたれている。
>先にprintf("a=%d\n",a)のaに2が入り
>次に関数inc1の処理によってa(=2)に+1された3がinc1(a)に送られている。
>>596=591
>&aには関数inc2でa(=2)に+1された3が割りあれたれている。

&aの値は変更されません。
意思を伝える程度の言語能力を保有していないのなら、
自分の言葉でアレンジせずに問題文をそのまま書きましょう
600デフォルトの名無しさん:04/05/30 21:50
>>589
その問題、演習レベルの課題ではないな。
多数桁演算ルーチンを作らないと計算が大変だ。
>>600
オレは昔まったく同じ問題を演習で解いたが...
602助けてください:04/05/30 21:53
このスレの人は無知でスキルも無いようですね。
こんな人達に頼んだ自分が馬鹿でした。
二度と来ません。さようなら
603デフォルトの名無しさん:04/05/30 21:53
>>591, >>597
君の<理由>の文章に含まれている単語単語、単語の組み合わせはおかしくなさそうだが、文章としてはおかしい。
だいたいにして、処理の流れの順番に関数を説明していない時点でおかしい。
604デフォルトの名無しさん:04/05/30 21:55
>>601
え、ホントに? 
収束演算だから上位桁を確定させながら、下位桁だけを演算し続けるのかな。
605!595:04/05/30 21:56
>>602は煽れば誰かがむきになって正解を書くと
思っているようです。

>>603
いや、単語もおかしいだろ。
>>595を参照。
606デフォルトの名無しさん:04/05/30 21:56
>>602
煽りが下手くそ。
607デフォルトの名無しさん:04/05/30 21:58
>>605
処理 とか ポインタ とか 関数 とかの単語は合ってる。
でもよくよくみたら、借引数 とか 割りあれたれている とか間違ってるな。
うん、訂正。

>>591
すべてがダメ。
608デフォルトの名無しさん:04/05/30 21:59
ちなみに変な暇人がいるみたい…
そんなことして何が楽しいんだろw
609601:04/05/30 22:03
>>604
>>589はマチンの公式ってやつだよね。
1000桁まで求めるんだったら πx10^1000 の整数部分を
求めればOKでしょう。
610デフォルトの名無しさん:04/05/30 22:03
>>608
煽りが下手くそ。
611デフォルトの名無しさん:04/05/30 22:04
スイカップがウルルンでてる
>>607
「送る」も聞いたことない
↓のソースは入力された文字を逆に表示させるプログラムなんですけど、
文字列の長さを判定せずに逆順に表示させる方法ってあるんですか?
----
#include <stdio.h>

/* 入力した文字列を順番どおりに出力する */
void putstring(const char *str){
int i=0;
while(*(str+i) != '\0'){
putchar(*(str+i));
i++;
}
}
void putreverse(const char *str){
int i, length=0;
for(i=0; *(str+i)!='\0'; i++) length++; /* 文字列の長さを求める */
for(i=length-1; i >= 0; i--) putchar(*(str+i)); /* 逆順に出力 */
}
int main(void)
{
char word[200];

printf("文字列を入力してください\n");
gets(word);
printf("実行結果は以下のとおりです。\n");
putstring(word); printf("\n");
putreverse(word); printf("\n");
return 0;
}
---
>>613
文字列の長さがわからない状態で
最初に表示するべき文字(=文字列の最後の文字)がわかるとでも?
>>614
やっぱりこれしか方法がないんですか・・・どもでした。
>>613
こんなのは?
str2[0] = '\0';
for (i = 0; str[i] != '\0'; ++i) {
  for (j = 0; j <= i; ++j) str2[j + 1] = str2[j];
  str2[0] = str[i];
}
617デフォルトの名無しさん:04/05/30 22:21
>>613
多少問題有るけど、
ケツのナル文字からstrの指す
文字の先頭のアドレスまでポインタ比較しながら
表示させれば?
618デフォルトの名無しさん:04/05/30 22:24
>>601,609
arctanの項が二つあって収束速度が全然違うので、桁合わせするだけでも面倒ぽいんですけどね。難しく考えすぎてるのかなあ。。。
619デフォルトの名無しさん:04/05/30 22:27
みんな意地悪だなあ(笑)
>>591
printf("inc1(a)=%d, ", inc1(a));
 関数inc1に変数aを与え、その結果をprintfにより表示する。
printf("a=%d\n",a);
 変数aは関数inc1の影響を受けないので、元の値のままである。
printf("inc2(a)=%d, ", inc2(&a) );
 関数inc2に変数aのアドレスを与え、その結果をprintfにより表示する。
printf("a=%d\n",a);
 変数aは関数inc2の影響により、値が変わる。
したがって、変数をアドレス渡しすることにより、呼び出し側の変数を
呼び出された側の関数で操作することができる。
>617
ケツのナル文字を見つけることと文字数を求めることはほぼ等価だからなぁ。
コードとしては漏れもポインタでループ回すと思う。
>>619
だって、再提出の理由を聞いてるからw
622デフォルトの名無しさん:04/05/30 22:34
【問題】
次の条件に従ってじゃんけんを行うプログラムをC言語で書け。

【条件】
・ユーザは0,1,2を入力。(getchを使うこと)
・入力は、1:グー、2:チョキ、3:パー、4:プログラムを終了する
・4が入力されるまでは、じゃんけんを繰り返す。
・画面に勝ち、負け、引き分けを表示する。
・if文とswitch文と三項演算子は使用不可。
623561:04/05/30 22:35
>>570>>571>>574様、素早いご返答、
どうもありがとうございます。
おかげでできました!!
>>622
・ユーザは0,1,2を入力。(getchを使うこと)
・入力は、1:グー、2:チョキ、3:パー、4:プログラムを終了する
625617 :04/05/30 22:39
>>620

>ケツのナル文字を見つけることと文字数を求めることはほぼ等価だからなぁ。
俺もそう思った。


スタック実装して、やるっていう手もあるけど
メモリ食うのあほだしな。
626622:04/05/30 22:41
さっきのの問題は解けません!

>>624
thanks.


【問題】
次の条件に従ってじゃんけんを行うプログラムをC言語で書け。

【条件】
・ユーザは0,1,2,3を入力。(getchを使うこと)
・入力は、0:グー、1:チョキ、2:パー、3:プログラムを終了する
・3が入力されるまでは、じゃんけんを繰り返す。
・画面に勝ち、負け、引き分けを表示する。
・if文とswitch文と三項演算子は使用不可。
627デフォルトの名無しさん:04/05/30 22:42
ポインタの説明をわかりやすく書いてるサイトってないの?
>>626
じゃんけんの対象は?
コンピュータが乱数で対戦するの?
入力履歴からクセを見て対戦するの?
それとも、更に人間に入力させる?
すきなようにしたらええがな
>>626
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void win()
{ printf("勝ち\n"); }
void lose()
{ printf("負け\n"); }
void draw()
{ printf("引き分け\n"); }

void (*table[][3])() = {
    { draw, win, lose },
    { lose, draw, win },
    { win, lose, draw },
};

main()
{
    int ch;
    srand(time(0));
    while (ch = getch(), ch != '3') {
        table[ch - '0'][rand() % 3]();
    }
}
631601:04/05/30 23:15
>>618
ケタアワセ?
>>600の言うとおり多倍長計算しろってもんだいでしょ。
とりあえず足し算だけ貼っときます。
/*
* a[] <- a[] + b[]
*/
void add(int a[], int b[], int n)
{
int carry = 0;
for (int i = n - 1; i >= 0; --i) {
a[i] += b[i] + carry;
if (a[i] >= 10000) {
a[i] -= 10000;
carry = 1;
}
else
carry = 0;
}
}

/*
* int a[] = { 1234, 5678 };
* int b[] = { 2345, 6789 };
* add(a, b, 2); a <- 12345678 + 23456789
*/
>>630
void (*table[3])() = { draw, win, lose };
table[(rand()%3 + (ch-'0')*2) % 3]();
633デフォルトの名無しさん:04/05/30 23:40
>>630
英字おされたらこけない?
こけるだろうな
635デフォルトの名無しさん:04/05/31 00:07
600=618だが、
>>631
なんだ、結局は四則演算の多数桁演算ルーチン作れってことかあ。
わり算ルーチン作るのがめんどいな。

いやね、多数桁演算しないで、arctanをテイラー展開した各項について
適宜10^N倍して収束が終了した整数部を別途保存して削除、小数部のみを生かして
演算の有効桁数を維持しつつ計算するのかと思ったのよ。説明ヘタですまんが。
>>589=618
>>1のラウンジが重い&ソースが長いんで2chあぷろだ借りてきた
http://up.isp.2ch.net/up/53ef3b7b55e6.c
…ら、やっぱり重かったんで、ここに直接載せる。長かったので7行スレみたいに詰めてみた。
#include <stdio.h>
#define L 1000 /* 計算桁数 */
#define N (L/4)+1 /* 配列数 */
#define LIM1 (L/1.39794)+1 /* L/log25…arctan(1/5)の収束範囲 */
#define LIM2 (L/4.7568)+1 /* L/log239^2…同様。logの底は10 */
void add(int*,int*,int*);void sub(int*,int*,int*);void div(int*,int*,int);
void printpi(int*);int main(void){int a[N],b[N],p[N];int i;for(i=0;i<N;i++)
{/* 配列初期化 */a[i]=b[i]=p[i]=0;}/* 16arctan(1/5)を計算する */a[0]=16*5;
for(i=0;i<LIM1;i++){div(a,a,25);div(b,a,2*i+1);if(i%2){/* 奇数項の時 */sub(p,
p,b);}else{add(p,p,b);}}for(i=0;i<N;i++){/* 配列初期化 */a[i]=b[i]=0;}
/* 4arctan(1/239)を計算する */a[0]=4*239;for(i=0;i<LIM2;i++){div(a,a,239);
div(a,a,239);/* div(a, a, 239 * 239); はオーバーフロー */div(b,a,2*i+1);
if(i%2){/* 奇数項の時 */add(p,p,b);}else{sub(p,p,b);}}printpi(p);return 0;}
/* a[] <- b[] + c[]; */
void add(int*a,int*b,int*c){int i,tmp=0;for(i=N-1;i>=0;i--){if((a[i]=b[i]+
c[i]+tmp)>=10000){a[i]-=10000;tmp=1;/* 繰り上げ */}else{tmp=0;}}}
/* a[] <- b[] - c[]; */
void sub(int*a,int*b,int*c){int i,tmp=0;for(i=N-1;i>=0;i--){if((a[i]=b[i]-
c[i]-tmp)<0){a[i]+=10000;tmp=1;/* 繰り下げ */}else{tmp=0;}}}
/* a[] <- b[] / c */
void div(int*a,int*b,int c){int i,mod=0;long tmp;for(i=0;i<N;i++){tmp=mod*
10000L+b[i];a[i]=tmp/c;mod=tmp%c;}}
/* 結果表示 */
void printpi(int *p){int i;printf("%3d.",p[0]);for(i=1;i<N;i++){printf("%04d",
p[i]);}printf("\n");}
インデントし直せば見やすいはずだ。
637仕様書無しさん:04/05/31 01:15
618だが、
>>636
あ、なるほどね。前の項の演算結果を使ってわり算するのか。
多数桁÷多数桁の実装が面倒だって思っていたよ。霹靂。
638デフォルトの名無しさん:04/05/31 02:05
皆さんはじめまして、最近Cを始めたばかりの超初心者です。
【西暦何年であるかを読み込んで、それに応じて、対応する世紀、次の世紀、次の世紀までの年数を出力する】
という問題が分かりません。どなたか教えて下さい、お願いします。
>>638
#include <stdio.h>

int main()
{
int nowYear;
int nowCentury, nextCentury = 1;
int cntDownNextCentury;

printf("現在の西暦を入力してください\n");
scanf("%d", &nowYear);
if (nowYear%100 != 0)
{
nowCentury = nowYear/100+1;
}
else
{
nowCentury = nowYear/100;
}
nextCentury += nowCentury;
cntDownNextCentury = 101 - (nowYear % 100);
printf("現在の世紀は: %d 世紀\n次の世紀は: %d 世紀\n次の世紀まであと %d 年", nowCentury, nextCentury, cntDownNextCentury);
return 0;
}
640639:04/05/31 02:47
ありゃ。1900 とかやるとおかしいな。ちょい修正。

#include <stdio.h>

int main()
{
int nowYear;
int nowCentury, nextCentury = 1;
int cntDownNextCentury;

printf("現在の西暦を入力してください\n");
scanf("%d", &nowYear);
if (nowYear%100 != 0)
{
nowCentury = nowYear/100+1;
cntDownNextCentury = 101 - (nowYear % 100);
}
else
{
nowCentury = nowYear/100;
--nowCentury;
cntDownNextCentury = 1;
}
nextCentury += nowCentury;
printf("現在の世紀は: %d 世紀\n次の世紀は: %d 世紀\n次の世紀まであと %d 年", nowCentury, nextCentury, cntDownNextCentury);
return 0;
}
641デフォルトの名無しさん:04/05/31 02:48
>>639
早速の対応ありがとうございます。助かりました。
642デフォルトの名無しさん:04/05/31 02:53
>>640 
わざわざ修正まで、どうもです。
>>640
紀元前は?
負の数を紀元前にでもしてけろ。面倒なのでコードはパス('A`)
645489:04/05/31 16:01
495さんには悪いんですがプログラムがわかりません。
当方、C言語をならったばっかの大学生なんで。

キーボードから入力された 8個の整数値を配列へ格納し、
値の大きい順に表示をするプログラムを作成せよ。

#include <stdio.h>

main()
{
int i, h,max ;
int a[8],b[8];

for(i = 0; i < 8; i++){
printf("a[%d] = ", i);
scanf("%d",&a[i]);
}

max = a[0];
for(h = 0; h < 8; h++ )
for(i = 0; i < 8; i++ ){
646489:04/05/31 16:02

if(a[i] > max)
{
max = a[i] && b[h] > a[i];
b[h] >= a[i] max;
b[h] = max;
max <= a[i] && max <= b[h-1];
}
}
printf("値の大きい順に表示\n");
printf("%d\n", max);



課題として配列を用いて作成するレポートです。
for文以下でa[i]、b[h]の配列で表示結果をだしたいのですがif文以下の条件式がよくわからないです。
あとprintfの内容とか。

どうすればいいでしょうか?

意味が分からない。a[] と b[] は何のための配列なのか、それぞれ詳しく説明しろ。
b[8] はいらない。

#include <stdio.h> 
main() { 
  int i, j, tmp; 
  int a[8];
  for(i = 0; i < 8; i++){ 
    printf("a[%d] = ", i); 
    scanf("%d",&a[i]);
    for(j = i; j > 0; j--){
      if(a[j] > a[j - 1]) {
        tmp = a[j];
        a[j] = a[j - 1];
        a[j - 1] = tmp;
      }
    }
  }
  printf("値の大きい順に表示\n"); 
  for(i = 0; i < 8; i++)
    printf("%d\n", a[i]);
  return 0;
}
649645:04/05/31 16:25
>>647 説明不足ですみません。a,bそれぞれわけようと思いました。
   b[h]がa[i]の最大値がより小さくa[i-1]より大きいとかやってるうちに
   わけわかんなくなって....

>>648 修正ありがとうございます。tmpやj--はどういういまいなんでしょうか?
新しい要素を取得するたびにバブルソートで大きい順に並べ替えている。
tmp はスワップのためのテンポラリ。
j-- はj の値のデクリメント。
651645:04/05/31 16:36
>>650 バブルソートですか。習ってないですけど教科書にありました。
   スワップはわかりません。どういったものでしょう?
   最後のreturnは繰り返しってことですか?
return 0は正常終了しますよって意味
if 節の後に else break; 入れたい。
定積分の値を台形則を用いて求める

という課題をやっているのですが下記のソースではコンパイルは通るものの
うまく動かないので、何が悪いのか分からず困っています。
使用しているコンパイラはborland c++5.5.1 for win32です。
どうかよろしくお願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=68
>>654
コンパイルし直していないが、パッと見てわかる分だけ。
Cで ^ は累乗ではなく XOR を表わす。勘違いはBASICの影響か?
e=10^(-2); → e=10e-2;
(1+4*x-2)^(1/2) → sqrt(1+4*x-2)
ついでなので、一般に累乗を計算する時は pow 関数を使う。
656デフォルトの名無しさん:04/05/31 18:47
デバッグプリントくらいは覚えろよ。
あげてもた。スマン。
>651
swap
【名】 取り替え、交換(品)
【自動-1】 場所{ばしょ}[もの]を交換{こうかん}する

>tmp はスワップのためのテンポラリ
訳)変数tmpは(a[j]とa[j-1]の)値の入れ替えのために値を一時的に記録しておくためのもの
659デフォルトの名無しさん:04/05/31 20:46
#include <stdio.h>

int main(){
char *str="language";
char *cpy;
int i=0;
cpy=str;

while(*(str+i)!='\0'){
printf("%c",*(str+i));
i+=2;
}

i--;

while(*(str+i)<=*cpy)
printf("%c",*(str-2));


return 0;
}

languageをlnug(ひとつ飛ばし)と表示させた後、今度は逆から eaga
をポインタを使って表示させるプログラムのはずなのですが、上手にいきません。
どこが悪いのか教えていただけないでしょうか?
660659:04/05/31 20:47
スイマセン、上げてしまいました。
>>660
while(*(str+i)<=*cpy) 比較してる値はなんだと思う?

printf("%c",*(str-2)); どこをさしてると思う?
662659:04/05/31 21:01
*(str+i)
はstr[7]番目を指していると思います。
-2でcpyの1番目になるまでstr-2が続くと思ってやってましたが・・・
str[i]の値からどう引いて行くのか分からなかったので、-2を入れました。
デクリメントって知ってる?
while()の終了条件は何なのか、よく考えて書いてみれ。
665659:04/05/31 21:26
>>660,664
問題が分かりました。
助言どうもありがとうございます。
ファイルの中のそれぞれの図形文字(空白を含む)を数え、
その出現回数の一覧を出力するプログラムを作れ。
という問題が分かりません。
どなたか教えていただけないでしょうか?
またエスパー待ちかよ。
668デフォルトの名無しさん:04/05/31 22:37
図形文字とは?
>>666
「ヒストグラム」でググってみ
その昔、PC-9801というパソコンで(ry
僕にも、その問題が分かりません。
#include<stdio.h>
int main(void)
{
int month;
printf("何月ですか?:");
scanf("%d",&month);
switch(month){
case 3: printf("春です。\n"); break;
case 4: printf("春です。\n"); break;
case 5: printf("春です。\n"); break;
case 6: printf("夏です。\n"); break;
case 7: printf("夏です。\n"); break;
case 8: printf("夏です。\n"); break;
case 9: printf("秋です。\n"); break;
case 10: printf("秋です。\n"); break;
case 11: printf("秋です。\n"); break;
case 12: printf("冬です。\n"); break;
case 1: printf("冬です。\n"); break;
case 2: printf("冬です。\n"); break;
}
return(0);
}
何月ですか?:神無月
Segmentation Fault
674デフォルトの名無しさん:04/05/31 23:29
#include<stdio.h>
int main(void)
{
int month;
printf("何月ですか?:");
scanf("%d",&month);
switch(month){
case 3: printf("春です。\n"); break;
case 4: printf("春です。\n"); break;
case 5: printf("春です。\n"); break;
case 6: printf("夏です。\n"); break;
case 7: printf("夏です。\n"); break;
case 8: printf("夏です。\n"); break;
case 9: printf("秋です。\n"); break;
case 10: printf("秋です。\n"); break;
case 11: printf("秋です。\n"); break;
case 12: printf("冬です。\n"); break;
case 1: printf("冬です。\n"); break;
case 2: printf("冬です。\n"); break;
default: printf("そんな月ありませんよ!\n"); break;
}
return(0);
}
【出雲地方限定】
何月ですか?:神有月
Segmentation Fault
以下の文章をC言語で書けと言う問題なんですがうまく出来ないので先輩方の解答を教えてください。

1)N個の要素数をもつ整数型の配列array[N]と数値データの入った変数Xがある。
  配列arrayの中に変数Xと等しいものがあるかを調べる。等しいものがあればその個数を表示する。
2)N子の要素数をもつ整数型の配列array[N]gaある。この配列を逆順に入れ替える。

簡単なプログラムだと思うんですが厨房の私には少し分からない部分があるんでよろしくお願いします。
>>676
型が指定されていないのでとりあえずintにしておくが。

1)
int i,count = 0;
for(i=0;i<N;i++) if(array[N] == X) count++;
if(count > 0) printf("%d個あった\n",count);
else printf("見つからんかった\n");

2)
int i,temp;
for(i=0;i<N/2;i++) {
temp = array[i];
array[i] = array[N-i-1];
array[N-i-1] = temp;
}
>>677
先輩レスサンクスです!!
if(array[i] == X)じゃ?
揚げ足鳥スマソ
680677:04/06/01 01:15
>>679
いや、揚げ足ではなくて、ちゃんとした指摘。
もうねるぽ
>以下の文章をC言語で書けと

#include<stdio.h>
int main(void){
printf("1)N個の要素数をもつ整数型の配列array[N]と数値データの入った変数Xがある。\n");
printf("  配列arrayの中に変数Xと等しいものがあるかを調べる。等しいものがあればその個数を表示する。\n");
printf("2)N子の要素数をもつ整数型の配列array[N]gaある。この配列を逆順に入れ替える。\n");
return 0;
}

揚げ足取りとはこうやるのだ。
>>681
才能をひしひしと感じるw
あえてprintfつかうなら

#include<stdio.h>
int main(void){
printf("%s\n%s\n%s\n"
,"1)N個の要素数をもつ整数型の配列array[N]と数値データの入った変数Xがある。"
,"  配列arrayの中に変数Xと等しいものがあるかを調べる。等しいものがあればその個数を表示する。"
,"2)N子の要素数をもつ整数型の配列array[N]gaある。この配列を逆順に入れ替える。");
return 0;
}

だよな。
#include<stdio.h>
int main(void){
printf("%s",
"1)N個の要素数をもつ整数型の配列array[N]と数値データの入った変数Xがある。"
"  配列arrayの中に変数Xと等しいものがあるかを調べる。等しいものがあればその個数を表示する。"
"2)N子の要素数をもつ整数型の配列array[N]gaある。この配列を逆順に入れ替える。\n");
return 0;
}
で充分。
俺ならputs()を使う。
そりゃそうだ。
687654:04/06/01 10:31
>>655さん、 >>656さんありがとうございました。
完成させてからお礼をと一晩頑張ってみましたが未だに思い通りには動いてくれません_| ̄|○

が、大分近づいているように感じるのでもう少し悩んでみようと思います。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=69
688たすけて!!!:04/06/01 10:54
問題

1. 整数型配列 data 内の, data[0] から data[n-1] までの総和を返す関数 int sum(int data[], int n) を作れ.

2. 整数型配列 data 内の data[0] から data[n-1] までの値の中で,最大の値を返す関数 int max(int data[], int n) を作れ.

3. 整数型配列 data 内の data[0] から data[n-1] までの中で,2番目に大きな値をもつ要素の添字を返す関数 int secondBiggestIndex(int data[], int n) を作れ.

ただし,同じ値の要素が複数個ある場合には,添字の順序で早い方の要素の値がより大きいと見なす.このことにより,2番目の大きい要素,というものが一意的に定まる.次の具体例を参照のこと(2番目に大きいと見なされる要素を赤くしている).
{1, 2, 3, 2, 3, 3}   (三つある3は 3 > 3 > 3 と見なされる)
{1, 3, 2, 1, 2, 1}   (二つある2は 2 > 2 と見なされる)

そして,作った関数を用いて次の計算をして,その結果を求めよ.
すいませんわからないのでお願いします。
C言語でやってください。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=225