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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:Windows/Linux/等々
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか
[5] その他の制限:どこまで習っているか、等々

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

【前スレ】
C/C++の宿題を片付けます 44代目
http://pc8.2ch.net/test/read.cgi/tech/1116914132/

【歴代スレは>>2-13
2デフォルトの名無しさん:2005/06/08(水) 02:34:35
3デフォルトの名無しさん:2005/06/08(水) 02:35:15
4デフォルトの名無しさん:2005/06/08(水) 02:36:03
5デフォルトの名無しさん:2005/06/08(水) 03:45:39
6デフォルトの名無しさん:2005/06/08(水) 04:27:39
[1] 授業単元:Advanced Programming
[2] 問題文(含コード&リンク):
STLのvectorはCOMPOSITEパターンの一つといえるか。また理由も述べよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):BCC5.5
 [3.3] 言語:C++
[4] 期限:2005年06月10日10:00まで
[5] その他の制限:
C++は一通りやったと思います(まだまだ奥深いトピックあるのかもしれませんが)。
よろしくお願いします。
773:2005/06/08(水) 11:49:24
[1] 授業単元:配列?
[2] 問題文(含コード&リンク):n×nの大きさの実行例A、Bをキーボードより読み込んで
               行列の積C=A×Bを計算し、その結果を画面に出力するプロ
               グラムを作成しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年6月14日18:30まで
[5] その他の制限:2次元配列とfor分は使うそうです。
         あと、定数nは記号定数宣言のconstを使って
         10に定義するそうです。

困っています。作成してくださったらうれしいです。ちゃんと後で
すべての意味を勉強します!
8デフォルトの名無しさん:2005/06/08(水) 11:55:31
>>7
200個の要素を手討かよ(w
9デフォルトの名無しさん:2005/06/08(水) 12:01:03
↓何がおかしい?

#include "smp.h"

main()
{
void USERF(double *,double *,double);
double x0,e;
int n,NMAX;

/*** ステップ1 データの入力 ***/
printf("\n初期値 x0 ");
scanf("\lf",&x0);
printf("\n収束判別計数 v =");
scanf("%\lf",&e);
printf("\n最大反復回数 NMAX = ");
scanf("%d",&NMAX);

/*** ステップ2 ニュートンラフソン法の計算 ***/
S_NEWT(&n,&x0,e,NMAX,USERF);

/*** ステップ3 計算結果の出力 ***/
printf("\n反復回数:N=%d 解:X(N)=%10.7lf",n,x0);
}

10デフォルトの名無しさん:2005/06/08(水) 12:02:39
9の続き


/* < ニューソンラフソン法の関数 > */
void S_NEWT(int *n,double *x0,double e,int NMAX,double (*FUNC)())
/* n : スカラー 反復回数 (Out)
x0 : スカラー 初期値(解) (In/Out)
e : スカラー 収束判別定数 (In)
NMAX : スカラー 最大反復回数 (In)
FUNC : ユーザー定義関数 (In) */
{
double fun,dfun,xn,ans;
for(*n=0,xn=*x0;*n<NMAX;){
(*FUNC)(&fun,&dfun,xn);
*x0=xn-fun/dfun;
(*n) ++;
if(fabs(xn-*x0)>e)
xn=*x0;
else
break;
}
}
11デフォルトの名無しさん:2005/06/08(水) 12:03:06
10の続き



/* < ユーザ定義の関数とその微分の関数 > */
void USERF(double *fn,double *dfn,double x)
/* fn : スカラー 方程式 (Out)
dfn : スカラー 方程式の微分 (Out)
x : スカラー 入力値 (In) */
{
double x2;
x2=x*x;
*fn=x2*x-1,0;
*dfn=3.0*x2;
return;
}
12デフォルトの名無しさん:2005/06/08(水) 12:48:09
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=515
[3] 環境
 [3.1] OS:Windowsxp
 [3.2] コンパイラ(バージョン):分かりません。
 [3.3] 言語:C
[4] 期限:6月9日まで
[5] その他の制限:配列までしか習ってないので、それ以上の関数は使用しないで下さい。

どなたか、お願いします。
13デフォルトの名無しさん:2005/06/08(水) 13:18:59
>>7
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/516.txt

10X10の入力テストは勘弁したいので可変にさせてもらった。
14デフォルトの名無しさん:2005/06/08(水) 13:31:11
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
[2.1]有理数の乗算を求めるプログラムを作りなさい。
[2.2]氏名・住所・電話番号からなる住所録の構造体を定義して、住所録データを入力できるようにしなさい。
[3] 環境
 [3.1] OS:Windows XP home
 [3.2] コンパイラ(バージョン):VC++ 6.0
 [3.3] 言語:C
[4] 期限:今日中
[5] 構造体まで習いました。ポインタも大丈夫です。

よろしくおねがいします。

15デフォルトの名無しさん:2005/06/08(水) 13:52:17
>>9
まづは

printf("\n初期値 x0 ");
scanf("\lf",&x0);
printf("\n収束判別計数 v =");
scanf("%\lf",&e);

printf("\n初期値 x0 ");
scanf("%lf",&x0);
printf("\n収束判別計数 v =");
scanf("%lf",&e);
1615:2005/06/08(水) 14:11:44
>>9
そんなもんかな。smp.hの中身がようわからんが、
プログラムの都合悪いところはこの中で解決されて
いるとしとこう。
1715:2005/06/08(水) 14:44:36
>>12
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/518.c
関数にそれ以上とか以下とか言われてもわかりません。
18デフォルトの名無しさん:2005/06/08(水) 14:57:57
[1] 授業単元:
[2] 問題文: 九九の表を作りなさい。
      かけ算は交換可能なので、上側の半分だけに結果を書くこと。
[3] 環境
 [3.1] Linux
 [3.2] イーマックス(?)
 [3.3] 言語:C
[4] 期限:2005年6月13日
[5] その他の制限:反復型プログラムまで

どなたかお願いします。

19デフォルトの名無しさん:2005/06/08(水) 15:35:55
#include <stdio.h>

int main( void )
{
int i,j;

for ( i = 1; i <= 9; i++ ) {
for ( j = 1; j < i; j++ )
printf( " " ); // スペース9個

for ( ; j <= 9; j++ )
printf( "%2dx%2d=%2d ", i, j, i * j );

printf( "\n" );
}
}
20デフォルトの名無しさん:2005/06/08(水) 15:37:52
>>14
[2.1]
typedef struct _rational { int numerator, denominator; } rational;

int gcd( int m, int n )
{
  int rem;
  if ( m < 0 ) m *= -1;
  if ( n < 0 ) n *= -1;
  while ( n ) { rem = m % n; m = n; n = rem; }
  return m;
}

rational multiple( rational * r1, rational * r2 )
{
  int n, d, x;
  rational result;
  n = r1->numerator * r2->numerator;
  d = r1->denominator * r2->denominator;
  x = gcd( n, d );
  result.numerator = n / x;
  result.denominator = d / x;
  return result;
}
21デフォルトの名無しさん:2005/06/08(水) 15:49:33
>>14
[2.2]
#define GET( s ) fgets( s, sizeof( s ), stdin ); \
  s[ strlen( s ) - 1 ] = '\0'

typedef struct _record { char name[ 1024 ],
  address[ 1024 ], phone[ 1024 ]; } record;

void input_record( record * r )
{
  GET( r->name );
  GET( r->address );
  GET( r->phone );
}
22デフォルトの名無しさん:2005/06/08(水) 15:59:24
>>18
int i, j;
for ( i = 1; i <= 9; i ++ )
{
  for ( j = 1; j <= 9; j ++ )
    if ( i <= j )
      printf( "%3d", i * j );
    else
      printf( " ." );
  putchar( '\n' );
}
2318:2005/06/08(水) 16:15:01
19さん、22さんありがとうございます。
249:2005/06/08(水) 17:53:11
15さんありがとうございます!
25デフォルトの名無しさん:2005/06/08(水) 18:05:49
unsignedのchar name[]にgets(name)で漢字の文字列を代入するプログラムを作りたいのですが。
漢字以外の文字列が代入された場合に「漢字のみで入力して下さい」と表示させる方法がわかりません。
taro→漢字のみです
太郎→OK
お力を貸してください・・・
26デフォルトの名無しさん:2005/06/08(水) 18:14:49
>>25
なぜgets・・・
っていうか文字コードは何なんだ?
27デフォルトの名無しさん:2005/06/08(水) 18:33:00
[1] 授業単元:プログラミング
[2] 問題文:n個の文字列を読み込み、読み込んだ文字列を反転させる。
 (実行例)
何個の文字列を入れますか? 2

1個目の文字列を入れなさい tokyo
文字列を反転しました oykot
2個目の文字列を入れなさい oosaka
文字列を反転しました akasoo

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):cc
 [3.3] 言語:C言語
[4] 期限:なるべく早めに。
[5] その他の制限:変数、条件文、関数、配列。

反転がいまいちわかりません。
お願いします。
28デフォルトの名無しさん:2005/06/08(水) 18:36:00
>>26
授業でgetsを使っていたので合わせたほうがいいかと思っていたのですが、
特に指定はないです。すいません。
文字コードはアスキーコード使ってます。
29デフォルトの名無しさん:2005/06/08(水) 18:38:40
アスキーコードで漢字てあんた・・・
30デフォルトの名無しさん:2005/06/08(水) 18:40:54
>>27

char *strrev(char *s)
{
    char *p, *q;
    char tmp;

    if (!s || !*s)
        return s;

    for (p = s, q = s + strlen(s) - 1; q > p; ++p, --q) {
        tmp = *p;
        *p = *q;
        *q = tmp;
    }
    return s;
31デフォルトの名無しさん:2005/06/08(水) 18:49:24
}

>>28
ひとまずWindowsかLinuxか言ってみれ。
大方Shift-JISかEUCだろうから。
あと、getsはお勧めしない。まー個人的に使うなら別にいいけど。
32デフォルトの名無しさん:2005/06/08(水) 18:53:09
>>29
アスキーコードとかぶらないように128以上になったら
漢字とみなすようにとのことでした。
まぎらわしい書き方ですいません・・・orz
33デフォルトの名無しさん:2005/06/08(水) 18:53:18
>>25

適当。
「漢字」の条件はよくわからんが、ひらがなとかカタカナとか記号とか
キリル文字とかは含まないようにした。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/519.txt
34デフォルトの名無しさん:2005/06/08(水) 18:53:45
>>32
それを早くいえ
35デフォルトの名無しさん:2005/06/08(水) 18:57:49
>>31
Windowです。一番大切なことを書いていませんでしたね。申し訳ないです・・・
>>33-34
条件書いてませんでしたね・・・吊ってきます・・・orz
36デフォルトの名無しさん:2005/06/08(水) 19:57:24
>>35
「Window」なの?
37デフォルトの名無しさん:2005/06/08(水) 20:04:31
[1] 授業単元:プログラミング
[2] 問題文:e^(a+bi)のマクローリン展開を求める関数Cexpとその逆関数
Clogを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月9日
[5] その他の制限:累乗関数、階乗関数等を使用しないこと。
以下は途中まで書いたコードです。
3837:2005/06/08(水) 20:05:55
#include <stdio.h>

typedef struct FCOMPLEX {double r,i;} fcomplex;
fcomplex Cexp(fcomplex x);
fcomplex Clog(fcomplex x);

int main(void)
{
fcomplex x;

printf("x.rの値を入力してください:");
scanf("%lf",&x.r);
printf("x.iの値を入力してください:");
scanf("%lf",&x.i);
printf("%lf + %lfi\n",Cexp(x, y).r,Cexp(x, y).i);
printf("%lf + %lfi\n",Clog(x, y).r,Clog(x, y).i);

return 0;
}

fcomplex Cexp(fcomplex x)
{
fcomplex a;
return a;
}

fcomplex Clog(fcomplex x)
{
fcomplex b;
return b;
}
3937:2005/06/08(水) 20:11:25
間違えました。15、16行目は
printf("%lf + %lfi\n",Cexp(x).r,Cexp(x).i);
printf("%lf + %lfi\n",Clog(x).r,Clog(x).i);
です。
よろしくおねがいします。
40デフォルトの名無しさん:2005/06/08(水) 20:13:33
必要な情報の後だし禁止。
4140:2005/06/08(水) 20:14:39
おっと、>>38-39にたいしてではなく。
42デフォルトの名無しさん:2005/06/08(水) 20:55:36
[1] 授業単元:プログラミング
[2] 文字列をキー入力し,
@ その文字列とその長さを出力した後,
A 文字列を逆順にした文字列を出力する
プログラムを作りなさい。
ただし、プログラムの仕様は以下の通りです。


(1) 最大文字列長を超える異常入力がされたかどうかのチェックは必ずしも必要としない。
(2) 逆順にした文字列を格納する配列は、別の名前で宣言して使用すること。
(3) 配列サイズは各自で設定して構わない。

[動作の具体例]
入力文字列: abcabcabcabc
入力された文字列: abcabcabcabc
文字列の長さ: 12
逆順に並べ替えた文字列: cbacbacbacba

[3.1] OS:Windows XP home
[3.2] コンパイラ(バージョン):VC++ 6.0
[3.3]C++
[4] 期限:2005年6月9日

よろしくお願いします
43デフォルトの名無しさん:2005/06/08(水) 21:16:18
>>42
こんな感じで。
#include <stdio.h>
#include <string.h> 
#define ARRAYLEN (1024)
int main(){
    char buf[ARRAYLEN],cpy[ARRAYLEN];
    int i,len=0;

    printf("入力文字列:");
    scanf("%s",buf);
    len=strlen(buf);

    printf("入力された文字列:%s\n",buf);
    printf("文字列の長さ:%d\n",len);

    for(i=0;i<len;i++){
        cpy[i]=buf[len-i-1];
    }
    cpy[len]='\0';
    printf("逆順に並べ替えた文字列:%s\n",cpy);
    return 0;
}
4412:2005/06/08(水) 21:18:01
>>17さん、ありがとうございました。
おかげで、もう少しで出来そうです。
最後にもう一つだけ、分からないところがあるので、教えて下さい。
よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=515
45デフォルトの名無しさん:2005/06/08(水) 21:24:06
>>42

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
    string s;
    cin >> s;
    cout << "入力された文字列: " << s << endl;
    cout << "文字列の長さ: " << s.size() << endl;
    reverse(s.begin(), s.end());
    cout << "逆順に並び替えた文字列: " << s;

    return 0;
}
46デフォルトの名無しさん:2005/06/08(水) 21:29:48
>>42
C++だったのか。折角作ったからage。
#include <string>
#include <iostream>
#include <algorithm>
int main(){
    std::string buf,cpy;
    std::cout<<"入力文字列:"<<std::endl;
    std::cin>>buf;
    std::cout<<"入力された文字列:"<<buf<<std::endl;
    std::cout<<"文字列の長さ:"<<buf.length()<<std::endl;
    cpy=buf;
    std::reverse(cpy.begin(),cpy.end());
    std::cout<<"逆順に並べ替えた文字列:"<<cpy<<std::endl;
    return 0;
}
47前スレ972:2005/06/08(水) 21:34:19
[1] 〜 [3]前スレと同じ
[4] 期限:2005年6月9日
[5]chk_moreの部分を戻り値1個、引数1個だけということで
作り直しと言われて作ってみたのですが、間違っているみたいで
動きません。よろしくお願いします。
// 引数1:比較対象の文字列
// 戻り値:bool型 ture:"more"/false:"more"以外
bool chk_more(char more_str[])
int i = 0;
{
if(str[i] == true)
i ++;
return true;
else
i++;
return false;
}
48デフォルトの名無しさん:2005/06/08(水) 21:43:01
[1] 授業単元:プログラミング
[2] 問題文:入力した文字列を配列に読み込みその中の特定した文字列を
      指定した文字列に入れ替える。

文字列入力してください bokuha asa okirunoga turai

置き換える文字列 asa
置き換えたい文字列 yoru

置き換えた文字列 bokuha yoru okirunoga turai

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):cc
 [3.3] 言語:C
[5] その他の制限:習ったのは条件文、配列、関数です。
        
条件は必要であればstrncpy、strlen、strncmp、strcatの関数を使ってもよい

初心者なのでお願いします・・・
49デフォルトの名無しさん:2005/06/08(水) 21:45:16
こんな感じで。

static const char more = "more"
bool chk_more(char more_str[]) {

    for(int i=0;i<4;i++){
        if(more_str[i]!=more[i]){
            return false;
       }
    }
    return true;
}
5042:2005/06/08(水) 21:48:03
>>43,43,46
有難うございます。
皆様の見ながら勉強させてもらいたいと思います
51デフォルトの名無しさん:2005/06/08(水) 21:55:56
52デフォルトの名無しさん:2005/06/08(水) 22:20:14
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
   ローマ数字(I,II,III,IV,・・・)を入力すると、それに対応したアラビア数字(1,2,3,4・・・)を返すプログラムを作成せよ。
   配列を使用し、どんなに大きな数でも対応できなければならない。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:06月17日まで
[5] その他の制限:
   全スレで質問した内容と逆の課題が出ました。
   今回は1000でも10000でも表示できるようにしなければならないため、予め全てを配列に格納するのではなく、
   与えられたローマ数字を計算してやる必要があるそうです。
   ヒントには、「ローマ数字の計算には”M D C L X V I”の7つを使ってるだけでよい」とありますが、どう使っていいのやらさっぱりです。
   皆さんに任せっきりで申し訳ないのですが、宜しくお願いします。
53デフォルトの名無しさん:2005/06/08(水) 22:24:10

[1] 授業単元:ゼミナールのプレゼンで必要
[2] 問題文:ランレングス法の考え方→文字列を読み込み、連続する部分があった場合連続数に直し、
  結果を表示するプログラムを書け。例、abcdを入力→そのままabcdで出力 aabbを入力→a2b2で出力
  aaabbcを入力→a3b2cを出力。
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ:Borland c++bulider
 [3.3] 言語:C
[4] 期限:6月9日昼くらいまで
[5] その他の制限:情報処理の授業でcをやったくらいのレベル
明日のプレゼンで発表しようと思ったプログラムなのですが、連続するところの処理が
うまくいきません。元々、実現可能なプログラムなのかもわかりませんが・・・。今ゼミ室に
残ってこれを書いてたりします。わかる方がいればよろしくお願いします。
54デフォルトの名無しさん:2005/06/08(水) 22:29:41
>>53
前にコード書いたヨ
ログを探してみると良いヨ
55デフォルトの名無しさん:2005/06/08(水) 22:31:40
[1] 授業単元:プログラミング基礎
[2] 問題文:
24ビットと8ビットのbmpファイルがある。
このどちらを読み込んでも元画像をモノクロ化したbmp画像を出力せよ。
なお、bmp画像以外のファイル、対応してない形式のbmp画像、
これらを読み込んだ時「〜という理由でファイルを生成できない」
といった内容のエラーメッセージを出力すること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Visual C++
 [3.3] 言語:C++
[4] 期限:2005年06月16日まで
[5] その他の制限:mallocを使用

これを落とすと留年してしまうのでどうかよろしくお願いします!
56デフォルトの名無しさん:2005/06/08(水) 22:32:20
5747:2005/06/08(水) 22:40:19
>>49
ありがとうございました
58デフォルトの名無しさん:2005/06/08(水) 22:44:24
>>53
#include <stdio.h>
int main () {
 char buf[256];
 int i, n;
 for (;;) {
  printf("入力: ");
  if (!fgets(buf, sizeof buf, stdin))
   break;
  printf("出力: ");
  for (i = n = 0;; i++)
   if (i && buf[i - 1] == buf[i])
    n++;
   else {
    if (n)
     printf("%d", n + 1);
    if (!buf[i])
     break;
    n = 0;
    putchar(buf[i]);
   }
 }
 return 0;
}
59デフォルトの名無しさん:2005/06/08(水) 22:45:04
>>48
遅かったけど一応つくったからUP

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/523.txt
60デフォルトの名無しさん:2005/06/08(水) 22:57:56
>54さん >58さん
早速のご回答感謝です。今終電に乗って携帯からの書き込みなので、家につき次第すぐ試してみようと思います。ありがとうございましたm(_ _)m
61デフォルトの名無しさん:2005/06/08(水) 23:23:45
文字列を十六進とみなして整数型にする方法ってライブラリとかでありますか?
atoiのようなもの
62デフォルトの名無しさん:2005/06/08(水) 23:24:21
[1] 授業単元: データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
ポインタを使って作成せよ。
1.要素数100個の文字配列を用意し、英語の一文を初期化します。
その文の中に出てくる単語の数を表示するプログラム。
2.要素数10個の整数配列を用意し、その要素を昇順に並べ替えるプログラムを
基本選択法により作成。
3.A〜Eさんの3教科のテストの点数が初期設定された2次元配列を用意し、3教科の合計を
ひとりずつ表示させる。
[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月10日
[5] その他の制限:なし

すみませんが手助けお願い致します
63デフォルトの名無しさん:2005/06/08(水) 23:25:31
>>55
#include <windows.h>
#include <stdio.h>
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "gdi32.lib")
int main(int argc, char **argv) {
 if (argc != 3) {printf("%s InputFile OutputFile\n", *argv); return EXIT_FAILURE;}
 HBITMAP hBmp = (HBITMAP)LoadImage(NULL, argv[1], IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_MONOCHROME);
 if (!hBmp) {printf("ファイルがロードできない\n"); return EXIT_FAILURE;}
 BITMAP bm;
 GetObject(hBmp, sizeof bm, &bm);
 int size = bm.bmHeight * ((bm.bmWidthBytes + 3) & ~3);
 void *bits = malloc(size);
 if (!bits) {printf("メモリ無さ杉\n"); return EXIT_FAILURE;}
 struct {BITMAPINFOHEADER b; RGBQUAD c[2];} bi =
  {{sizeof bi.b, bm.bmWidth, bm.bmHeight, 1, 1},{{255, 255, 255}}};
 HDC hDC = GetDC(NULL);
 GetDIBits(hDC, hBmp, 0, bm.bmHeight, bits, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
 ReleaseDC(NULL, hDC);
 DeleteObject(hBmp);
 FILE *fp = fopen(argv[2], "wb");
 if (!fp) {printf("ファイルがオープンできない: %s\n", argv[2]); return EXIT_FAILURE;}
 BITMAPFILEHEADER bf = {'MB', sizeof bf + sizeof bi + size, 0, 0, sizeof bf + sizeof bi};
 fwrite(&bf, sizeof bf, 1, fp);
 fwrite(&bi, sizeof bi, 1, fp);
 fwrite(bits, size, 1, fp);
 fclose(fp);
 free(bits);
 return EXIT_SUCCESS;
}
64デフォルトの名無しさん:2005/06/08(水) 23:26:07
>>61
スレ違い。strtol
6561:2005/06/08(水) 23:33:03
>>64
thx
strtolで出来たのか。
66デフォルトの名無しさん:2005/06/08(水) 23:36:05
>>63
モノクロ化というかニ値化しているような気がするのは気のせいか
67デフォルトの名無しさん:2005/06/08(水) 23:55:02
>>52
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main () {
 const char *roman = "IVXLCDM";
 static const int arabic[] = {1, 5, 10, 50, 100, 500, 1000};
 const char *r, *b;
 char buf[256];
 int n;

 printf ("ローマ数字: ");
 fgets (buf, sizeof buf, stdin);
 n = 0;
 for (b = buf; *b && *b != '\n'; b++) {
  r = strchr (roman, *b);
  if (!r) {printf("知らない文字: %c\n", *b); return EXIT_FAILURE;}
  if (*r != 'M' && ~((r - roman) & 1) && (b[1] == r[1] || b[1] == r[2]))
   n -= arabic[r - roman];
  else
   n += arabic[r - roman];
 }
 printf ("アラビア数字: %d\n", n);
 return 0;
}
68デフォルトの名無しさん:2005/06/09(木) 00:01:06
>>66
LR_MONOCHROME - イメージをモノクロでロードします。
グレイスケールにしろなどとは問題文のどこにも書いていないわけだが。
69デフォルトの名無しさん:2005/06/09(木) 00:02:33
>>68
なるほど
70デフォルトの名無しさん:2005/06/09(木) 00:11:37
>>62@2
手を抜いた。
#include <stdio.h>
/*see ttp://wisdom.sakura.ne.jp/solution/algorithm/algorithm6.html*/
int* maxSort(int *ary , int last_index) {
int i , j , tmp;

for (i = 0 ; i < last_index - 1 ; i++) {
for (j = i + 1 ; j < last_index ; j++) {
if (*(ary + i) > *(ary + j)) {
tmp = *(ary + i);
*(ary + i) = *(ary + j);
*(ary + j) = tmp;
}
}
}
return ary;
}
void printArray(int* ary,int n){
int i;
for(i=0;i<n;i++){
printf("%d ",ary[i]);
}
puts("");
}
int main(){
int array[10]={10,2,4,58,6,24,8,25,85,1};
printArray(array,10);
maxSort(array,10);
printArray(array,10);
return 0;
}
71デフォルトの名無しさん:2005/06/09(木) 00:12:36
あ、インデントすっ飛んだ。
72デフォルトの名無しさん:2005/06/09(木) 00:22:06
>>62@3
こんな感じか?
#include <stdio.h>
static int subject[5][3]={
    /*A*/{100,80,90},
    /*B*/{50,40,95},
    /*C*/{80,80,80},
    /*D*/{70,80,70},
    /*E*/{100,100,100},
};
int main(){
    int i,sum;
    for(i=0;i<5;i++){
        sum = subject[i][0]+subject[i][1]+subject[i][2];
        printf("%cの合計:%d\n",'A'+i,sum);
    }
}
73デフォルトの名無しさん:2005/06/09(木) 01:19:15
74デフォルトの名無しさん:2005/06/09(木) 01:20:34
>>73
締め切り書いてないからいつでもOKなんだよ。遅くない。
7548:2005/06/09(木) 01:32:46
>>59さん、>>73さんありがとうございます。
参考にさせていただきます。。
76デフォルトの名無しさん:2005/06/09(木) 01:53:52
「単元名」基礎プログラミング
「期限」6月9日午後4時
C言語

ポインタと配列?

課題
3×3の行列A、B、CのためにINT型の二次元配列を3個用意し、C=A^t(Aの転置行
列)、C=A+B(AとBの行列和)、C=A*B(AとBの行列積)の計算結果を表示するプ
ログラムを作成し、実行しなさい。ただし、配列の要素へのアクセスにはポイン
タを使用し、また、各要素は100以下であるものとします。

77デフォルトの名無しさん:2005/06/09(木) 01:54:39
>>67
ありがとうございます。
助かりました。
78デフォルトの名無しさん:2005/06/09(木) 02:04:53
namespaceについて質問です。
下記のように実装した場合、operatorでprivateメンバに
アクセスできない旨エラーがでるのですが、どなたか
解決方法が分かる方いらっしゃいませんでしょうか。

namespace nsBBB
{
class BBB
{
public:
  BBB(void);
  virtual ~BBB(void);

  friend bool operator==(const BBB& left, const BBB& right);
private:
  string bbb;
};
}
7978:2005/06/09(木) 02:47:55
すいません、自己解決しました。
cpp側でnamespaceで括ればよかっただけでした。

namespace nsBBB{
bool
operator==(const BBB& left, const BBB& right)

{
;
}
}

using nsBBB::BBBで問題ないと思い込んでいました・・・
8067:2005/06/09(木) 05:01:53
>>52
>>67 は間違い。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main () {
 const char *roman = "IVXLCDM";
 static const int arabic[] = {1, 5, 10, 50, 100, 500, 1000};
 const char *r, *b;
 char buf[256];
 int n;

 printf ("ローマ数字: ");
 fgets (buf, sizeof buf, stdin);
 n = 0;
 for (b = buf; *b && *b != '\n'; b++) {
  r = strchr (roman, *b);
  if (!r) {printf("知らない文字: %c\n", *b); return EXIT_FAILURE;}
  if (*r != 'M' && !((r - roman) & 1) && (b[1] == r[1] || b[1] == r[2]))
   n -= arabic[r - roman];
  else
   n += arabic[r - roman];
 }
 printf ("アラビア数字: %d\n", n);
 return 0;
}
81ななし:2005/06/09(木) 11:45:55


[1] 授業単元:コマンド
[2] 問題文(含コード&リンク):3行3列の行列を二つ掛け合わせる
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): cygwin
 [3.3] 言語:C
[4] 期限:今日の正午
お願いします・・・・


82デフォルトの名無しさん:2005/06/09(木) 11:56:21
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/525.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005/6/13
[5] その他の制限:特に無し

もう頭がオーバーヒートしそう・・・orz
ご教授ご指南何卒よろしくお願いします。
83デフォルトの名無しさん:2005/06/09(木) 11:58:57
#define N 3
void mul(int a[N][N], int b[N][N], int c[N][N])
{
int i,j,k;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
a[i][j]=0;
for(k=0;k<N;k++){
a[i][j]+=b[i][k]*c[k][j];
}}}
}
8452:2005/06/09(木) 12:10:30
>>80
修正ありがとうございます。
何度もお手数おかけして申し訳ありませんでした。
8573:2005/06/09(木) 12:11:36
>>48 訂正っす
//検索
char*
search(const char* source,const char* word){
size_ti,k;
const size_tlength = strlen(word);
const size_tlengthSource = strlen(source);

if(lengthSource >= length){
const size_tend = lengthSource - length;
for(i=0;i<=end;i++,source++){
if(*source == word[0]){
for(k=1;k < length;k++){
if(source[k] != word[k])
return NULL;
}
if(k == length) return source;
}
}
}
return NULL;
}
86デフォルトの名無しさん:2005/06/09(木) 12:24:48
>>82
構造体から書き直しても良い?
87デフォルトの名無しさん:2005/06/09(木) 12:34:50
>>86
全然OKです。
88≠86:2005/06/09(木) 13:42:05
>>82
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/526.c
・ちょっとでも入力が間違ってるとすぐ落ちる。
・メモリ開放してない
・無駄に長い。
89≠86 && ≠88:2005/06/09(木) 14:05:12
>>82
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/527.txt
別のサンプルを作って試してみた。先に線形リストを作って2分木のポインタをそこへ延ばす方式。
同じ変数が何度出てきてもループじゃない限り対応できる。簡単な改造でループも対応できるっしょ。
90デフォルトの名無しさん:2005/06/09(木) 14:23:18
[1] 授業単元: データ構造
[2] 問題文(含コード&リンク):

1.キーボードorファイルから文字列を読み込む
2.読み込んだ文字列を辞書順にソートしてメモリ上に保持する
※文字列はローマ字

[3] 環境
 [3.1] OS:WindowsXP SP2
 [3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
 [3.3] 言語:C
[4] 期限:今日中

よろしくお願いします
9155:2005/06/09(木) 15:23:39
>>63
ありがとうございます!
92デフォルトの名無しさん:2005/06/09(木) 15:37:15
「単元名」基礎プログラミング
期限6月15日
C言語
コンパイラ

ポインタと配列

課題
3×3の行列A、B、CのためにINT型の二次元配列を3個用意し、C=A^t(Aの転置行
列)、C=A+B(AとBの行列和)、C=A*B(AとBの行列積)の計算結果を表示するプ
ログラムを作成し、実行しなさい。ただし、配列の要素へのアクセスにはポイン
タを使用し、また、各要素は100以下であるものとします。

期限変更になりましたよろしくおねがいします(><)
93≠86 && ≠88 && ≠89 w:2005/06/09(木) 15:41:45
>>82
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/528.txt
もう答え2つもでてるのにどうかとも思ったが、>>88は中置記法がないのと>>89は出力するものがちょっと違う気がするのでうpしてみた。
カッコはやや冗長気味だがちゃんとつく。
エラーチェックは指示通り全然してないけどメモリは開放しといた。
同じ変数の使用にも対応。(同じ変数使うと二分木と言えるのか謎な状態になるが)
あ、開放のしかたが一般的ではないが、これは未使用な部分があった場合もちゃんと開放するため。
っていうかデバッグ用コードってのはよくわからないのでやってない。
っていうか今気がついたが間違えて argc<1 って書いてた・・・。逝ってくる
9486:2005/06/09(木) 16:08:23
>>82
人気者だな。っていうか皆ヒマだな。
折角作ったのでオレも記念に載せておくぜ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/529.txt
95デフォルトの名無しさん:2005/06/09(木) 16:12:27
>86,88,89,93
皆様ありがとうございました・゚・(ノД`)・゚・
96C**:2005/06/09(木) 16:46:47
[1] 授業単元: 計算機数学序論
[2] 問題文(含コード&リンク):

1から12までの整数mをキーボードから入力して、
「m月の日数は?日です」と出力せよ!mが1〜12
以外の時は、「入力に誤りあり」と出力せよ。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:今日中
[5]その他の制限:特になしでつ

皆さんより相当簡単だとは思うのですが
わかりません。よろしくお願いします!
9789:2005/06/09(木) 16:50:08
>>82
>>93に指摘されたんで、一部訂正。ツリー構造ではない表記も。
int print_tree(node_t* a, int level)
{
int i;
putchar(a->op); // 逆ポーランド式
putchar('('); // *
if(a->left != NULL) print_tree(a->left, level + 1);
else printf(" %.1f", a->lnumber);
putchar(a->op); // 中間記法
if(a->right != NULL) print_tree(a->right, level + 1);
else printf(" %.1f", a->rnumber);
putchar(')'); // *
putchar(a->op); // ポーランド式
return 0;
}
*は中間記法で計算順を間違えないように。場合によっては冗長だけど面倒なので略。
書きたくない記法の行をコメントアウトすればOK。

>>94
ヒマってのもあるけど、これは他の課題に比べてまだ面白みがある。
98デフォルトの名無しさん:2005/06/09(木) 16:53:45
#include <stdio.h>
int main(void) {
int m;
scanf("%d", &m);
switch(m) {
case 1:case 3:case 5:case7:case 8:case 10:case 12: printf("%d月の日数は31日です\n",m);break;
case 4:case 6:case 9:case 11: printf("%d月の日数は30日です\n",m);break;
case 2:puts("2月の日数は28日か29日");break;
default:puts("入力に誤りあり");
}
return 0;
}
99デフォルトの名無しさん:2005/06/09(木) 16:54:01
>>92
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/530.txt
ひとまずやっといた。期限のびてよかったね。
100C**:2005/06/09(木) 17:10:57
>>98
大変助かりました!
ありがとうございます!
101デフォルトの名無しさん:2005/06/09(木) 17:16:56
C++だったらstream使わないと拙かったりしないのかな?
102C**:2005/06/09(木) 17:39:07
[1] 授業単元: 計算機数学序論
[2] 問題文(含コード&リンク):

キーボードから自然数nを入力せよ。
キーボードからn個の実数を入力する。
k番目に入力させられた実数をXkとする。
この時 n
    (−1)^k|Xk|
    k=1 を求めて、出力せよ。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:今日中
[5]その他の制限:特になしでつ

>>98さん先ほどはありがとうございました!
これで最後なんですが、考えてもわかりません!
教えてください(´Д`)m
10393:2005/06/09(木) 17:40:40
>>97
>ヒマってのもあるけど、これは他の課題に比べてまだ面白みがある。
禿同。
今頃>>82は4人からコード書かれたから読み分けるのにかえって苦労してたりして。w
漏れのはある程度読みやすさ重視だし>>82のコード再利用してるから(コピペしただけだがw)おすすめ。
カッコの対応も一番まともかと。
まあでも
B = 3 + 2
B = 2 * 5
みたいに同じ変数2回書かれたら開放し損ねがでるな。エラーチェック甘くていいって話だったけど甘すぎたか。
その点>>89のリスト式のがいいのかも(そこまでちゃんと読んでないけど)。
っていうかループ対応ってどういうこと?方程式解かせるってこと?
104デフォルトの名無しさん:2005/06/09(木) 17:54:19
>>102
int n;
cout << "n = "; cin >> n;
double sum = 0.0;
double x;
for (int k = 1; k <= n; k ++)
{
  cout << "No." << k << " of " << n << " = "; cin >> x;
  sum += ( k & 1 ? - fabs( x ) : fabs( x ) );
}
cout << "Result = " << sum << endl;
105デフォルトの名無しさん:2005/06/09(木) 18:01:07
>>102
#include <iostream>
#include <cmath>

int main(int argc, char* argv[])
{
double sum, n;
double* x;

std::cin >> n;
x = new double[n];
for(int i = 0; i < n; i++)
{
std::cin >> x[i];
}

sum = 0.0;
for(int i = 1; i <= n; i++)
{
sum += std::pow(-1, i) * std::fabs(x[i - 1]);
}
std::cout << sum << std::endl;
delete[] x;

return 0;
}
10647:2005/06/09(木) 19:57:26
[1] 〜 [3]前と同じ
[4] 期限:2005年6月10日
[5]コードはこのようになりました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/531.txt
しかし、3項目以降の処理を判断する「more」関数の判断部がおかしいです。
2個連続で入力されるとエラーメッセージが2回表示されてしまいます。
(それ以外の異常検証はOKでした)
直すべき所の目星はつきましたが、どのようにすれば良いのかわからなく
なってしまいました(制限でchk_moraの引数が1個だけです)
よろしくお願いします
107デフォルトの名無しさん:2005/06/09(木) 20:03:40
>>106
もしかして: Legacy C
108デフォルトの名無しさん:2005/06/09(木) 20:55:47
moreだとかmoraだとか。その内maraに見えてきた。
109デフォルトの名無しさん:2005/06/09(木) 21:00:09
// 3項以上の計算にもかかわらず"more"が無い("more"コードが見つかりません)
if(chk == false)
{ // <-------------------------------------------------------------
code_not(j, argv[j]);// "more"コードが見つかりません
return CAL_NG;
} // <-------------------------------------------------------------
これでどうなんだろ?
110sage:2005/06/09(木) 21:03:38
宿題じゃないんだけど Cで
「配列の型にかかわらず、全要素の平均値をdouble型で返す関数」
って作ることできますか? void *とか使ったんだけどうまくいかなかった...。
できたとしても、一般的にそーいう作り方はしないの?

Cの基本は理解できた気がするけど
実際に作るとなるとどーしていいのか分らないこと多すぎ...。
111106:2005/06/09(木) 21:08:45
>>109
それは既に試しました。
データ:1 + 2 more more *2
結果:4番目に演算子ない
moreないのエラーがでます。

例:データ:1 + 2 mora *2
4番目にmoreがありませんのエラー
判定の関数自体は間違っていないみたいです。

例:データ:1 + 2 more * 2 more / 0
9番目に0でわるのエラー
よって、間違っているのは上に書いてある部分だと思われます。
more判定部以外の正常・異常テストは問題ありませんでした。
112デフォルトの名無しさん:2005/06/09(木) 21:11:24
>>110
ポインタを渡すだけじゃ無理。型の情報も渡さないとダメ。
例えば、

double myfunc( void *dataarray, int datatype, int datalength )
{
switch ( datatype ) {
case 0 :
...
case 1 :
...
}
}

こんな感じ。
113デフォルトの名無しさん:2005/06/09(木) 21:25:47

殆ど出来ているんですが、0以下の時の条件分岐を思い出して付け加えたら突然13行目にエラーが発生しました。
13行目はcout<<"入力された数値が〜の所です。
何が違うのかサッパリ分らないので何方かご教授願います。
OSはwindows、言語はC++です。

/**********************************************************
*正の整数値を読み込み、その逆数を出力するプログラム*
**********************************************************/
#include<iostream>
using namespace std;
int main()
{
int m,d;
cout<<"整数値(正)を入力せよ:";
cin>>m;

if(m<=0)
cout<<"入力された値が正しくありません.処理を終了します."<<endl;
else{
while(m>0){
d=m%10;
m=m/10;
cout<<d;}
}
}


114デフォルトの名無しさん:2005/06/09(木) 21:29:48
115デフォルトの名無しさん:2005/06/09(木) 21:30:17
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):
分割した系列の後半を常に先にスタックに積む(pushする)場合の関数quicksort1 と
分割した系列の長さを比較して長い方を先にスタックに積む場合の関数quicksort2
の2通りの関数を作成しなさい
まらスタックの高さ(スタック内に入った要素の最大値)を求められるようにしなさい
プログラムの動作97,98,99,3,2,1,6,5,4,......93,92,91,96,95,94という
99個の数値の系列を用いて確認しなさい、

[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ(バージョン):LSI C-86
 [3.3] 言語:C
[4] 期限:2005年6月13日09:00まで
[5] その他の制限:特になし

どうかお願いしますm(_ _)m
116110:2005/06/09(木) 21:32:35
>>112
ありがとうございます!

で、実際にこのような関数が必要になった場合どうします?
関数をint用とdouble用に作ると、型が違うだけなのに同じ処理をする関数が
あって気持ち悪い。けど、他の人が使うときは分り易いと思う。
逆に1つにまとめるとコード的にはスマートだけど、他の人が使うときに
datatype があることが不親切な気がすると考えてしまうんですけど。

こーいうプログラミングの
「文法的な意味じゃない"書き方"」
っていうーのを解説してる本を見たことないので...。
117デフォルトの名無しさん:2005/06/09(木) 21:34:54
>>113
逆数ってわかる?
118デフォルトの名無しさん:2005/06/09(木) 21:35:39
>>116
C++なら天プレ
119デフォルトの名無しさん:2005/06/09(木) 21:44:40
>>117
すいません逆数でなく入力された数値を逆に表示です。

あとテンプレに沿ってなくてスミマセン。
120110:2005/06/09(木) 21:50:50
>>118
ありがとうございます。ただ、C++ではなくてCなんですよ。
上に書いた通り、人に分り易く作るか、人に少し気を使ってもらうか
によって選択すればよいのでしょうかね?
121デフォルトの名無しさん:2005/06/09(木) 21:53:12
>>119
ソースファイルの拡張子を.cppにしてる?
122デフォルトの名無しさん:2005/06/09(木) 21:54:55
>>120
議論がしたいんなら他のC言語スレでやってくれ。
ここは宿題スレだ。
123113:2005/06/09(木) 21:55:01
スイマセン
本当話すのも下らないミスしてました。
解決済みなのでスルーしてください
124デフォルトの名無しさん:2005/06/09(木) 21:58:44
>>116
どうしても纏めたければマクロ。
尚、移植性は悪くなるがintとdoubleのサイズが違う処理系なら
datatypeをsizeof(型)にする手もなくはない。

まぁ、私なら>118
125デフォルトの名無しさん:2005/06/09(木) 22:14:26
C言語での宿題です。
よろしくお願いします。

10件ほどのリスト構造です。
バブルソート部分が出来ません。
先頭アドレスのみ関数に引数として渡します。
よろしくお願いします。
126デフォルトの名無しさん:2005/06/09(木) 22:43:50
>>120
簡単な処理ならtypedefって手もあるが2つ同時に存在できない欠点がある。
127デフォルトの名無しさん:2005/06/09(木) 22:47:21
>>125
テンプレ嫁。
128デフォルトの名無しさん:2005/06/09(木) 23:12:32
>>124
sizeof() では signed と unsigned の区別がつきませんよ、と。
12992:2005/06/09(木) 23:38:22
99さんそしてみなさん、ありがとうございます
130デフォルトの名無しさん:2005/06/10(金) 03:07:26
>>106
//-----直すのは多分ここから----
// argv[]の3*n+1番目には"more"が来るので"more"か確認
else if(j % 3 == 1)
{
chk = chk_more(argv[j]);
// 3項以上の計算にもかかわらず"more"が無い("more"コードが見つかりません)
if(chk == false)
{ // <---------追加
code_not(j, argv[j]);// "more"コードが見つかりません
return CAL_NG;
} // <---------追加
}
if (chk == false) return CAL_NG; // <---------追加
}
//------ここまで-----
131106:2005/06/10(金) 06:56:51
>>130
ありがとうございました
132デフォルトの名無しさん:2005/06/10(金) 09:37:17
[1] 授業単元: 関数
[2] 問題文(含コード&リンク): 関数に任意の整数を渡すと2乗された値と、平方根を引数で返す関数を記述しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): ?
 [3.3] 言語:C
[4] 期限:2005/06/10
[5] その他の制限:
よろしくお願いします。
133デフォルトの名無しさん:2005/06/10(金) 09:46:59
#include <stdlib.h>

struct
{
int pow;
double sqrt;

} PS;

PS pow_and_sqrt(int n)
{
return PS{ n*n, sqrt(n); }
}


こんな?
まさか一つの関数で2つの値を返せって課題じゃない気はするが、
もしそうだとしたらこんな具合だろうか。
134デフォルトの名無しさん:2005/06/10(金) 09:52:31
>>133
「引数で返す」って言っているからこうじゃないか?

>>132
void math( int var, double *ppow, double *psqrt )
{
*ppow = pow( ( double )var, 2 );
*psqrt = sqrt( ( double )var );
}
135デフォルトの名無しさん:2005/06/10(金) 09:52:35
>>133
>平方根を引数で返す
136デフォルトの名無しさん:2005/06/10(金) 09:54:30
>>134
平方値ごときにpow()を持ち出すのは如何な最中。
単純に(double) var * varで医院でね?
137デフォルトの名無しさん:2005/06/10(金) 10:09:56
>>136
そんな事言っていたらキリが無い。
最終的にどうするかなんて質問者が決めれば良い。
138デフォルトの名無しさん:2005/06/10(金) 10:14:54
普通は二乗如きでpowなんか使わないな
短く書けるわけでもないし遅くなるしヘッダは読まなきゃならないし
139132:2005/06/10(金) 10:44:43
みなさんありがとうございます。
まだcを学習して3日目なのでまださっぱりわかりません。参考書を読みながら手探り状態です。
一応自分で作ってみたので見ていただけないでしょうか?
エラーが出るのですが理由がぜんぜんわかりません・・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/534.txt
140デフォルトの名無しさん:2005/06/10(金) 10:57:33
scanfの所がおかしい
141デフォルトの名無しさん:2005/06/10(金) 12:01:57
>>139
scanf("%lf",&a);
142デフォルトの名無しさん:2005/06/10(金) 12:59:30
[1] 授業単元: 上級プログラム演習
[2] 問題文(含コード&リンク):
640x480ドットの中のある位置に点A・点Bがある。
点A・Bは固定ではなく、ランダムな位置にあり、1〜3ドットの速度で浮遊している。
なおそれぞれの座標はgetX('A'),getY('A'),getX('B'),getY('B')で常に取得可能とする。
点Aからは点Cを速度7ドットで一定の角度で射出する。
点Cは点Aの引力を受け周回軌道に乗りながら点Aを離れていく。
点A・B共に半径100ドットが引力の限界で点Cがそれを離れると惰性走行し続ける。
点Cが点Bの引力の範囲内に突入すると周回軌道の乗りつつ接近し、最後に衝突して点Cは消滅する。
なお、点Cが点A・B両方の引力圏に属する場合は遠いほうの引力が無視される。

以上の条件に基づき点Cの軌跡に点を打つCプログラムを作ること。
あまり例外などを考慮せず完結にコードを組むこと。
なお、点を打つ関数はpset( int x, int y )とする。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VC++ 6.0
 [3.3] 言語:Cのみ
[4] 期限:2005年06月13日
[5] その他の制限:
C/C++共にそこそこ経験あるのでおおよそ分かります。ただ点Cの角度と速度を求める計算が…
前々からCプログラミングの範疇を超えた難題吹っかけては
ネットとかで調べろとか言って困らすのが好きな教授なもので。orz
2週間自力で調べてきましたがそろそろ期限が近いので神頼みします。

どうかおながいします。
143132:2005/06/10(金) 13:14:03
>>140
>>141
ありがとうございます!ようやくできました!
と思ったら平方根はいいのですが2乗の値が入力した数値そのまま表示されます。
pow()の書式も間違いないと思ったのですが・・・
144デフォルトの名無しさん:2005/06/10(金) 13:20:31
>>142
速度の単位が良くワカランな・・・。

速度[Bit/Cycle]
引力(重力加速度)[Bit/Cycleの2乗]
点Aと点Bの重力加速度は任意。
点Cの射出角度はランダム
点Cの初速は7.0[Bit/Cycle]、点Aの引力圏を確実に超える値で点Aの引力を設定。
640x480の範囲を超えた場合は処理を終了。
点Bに到達できなくても良い。

で良いのかな?

点Bに確実に到達できる様にするのは勘弁してくれ。高卒には無理ポ。
145デフォルトの名無しさん:2005/06/10(金) 13:46:02
半径100ドットの引力圏内にさえ入れば後は周回軌道に乗って当たるんだから
相当むちゃくちゃな方向に打たなければ当たりそうだが・・・
146デフォルトの名無しさん:2005/06/10(金) 13:58:30
>>143
そりゃ平方根とったあと、その平方根を2乗してるんだから同じ値になるわな
147142:2005/06/10(金) 14:37:26
>>144
そんな感じです。
点Cが引力圏に引っかかったかどうかの判定とかは何とか分かるんですが、
点Cの現在速度・角度を点AorBの引力でひん曲げて
周回軌道に乗せるあたりの計算がもうだめぽな状態ですorz
148デフォルトの名無しさん:2005/06/10(金) 14:43:14
[1] 授業単元: 計算機数学序論
[2] 問題文(含コード&リンク):

英単語をハイフンで分ける方法のごく一部を考えましょう。次のリストはcで終わる
単語のハイフンによる分け方のルールを説明するものです。

et-ic al-is-tic s-tic p-tic -lyt-ic ot-ic an-tic n-tic c-tic at-ic
h-nic n-ic m-ic l-lic b-lic -clic l-ic h-ic f-ic d-ic -bic a-ic -mac i-ac

 ルールは上の順で適用されます。たとえば、ethnicは左端からリストを見ていって、
h-nicが初めて一致するパターンなので、eth-nicとなります。clinicは、h-nicのパタ
ーンでもなく、次のn-icに一致するので、clin-icとなります。
標準入力から与えられた単語をハイフンで区切るプログラムはどのように書けばよいでしょう。


[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):?
 [3.3] 言語:C
[4] 期限:今日中
[5]その他の制限:よろしくお願いします
149デフォルトの名無しさん:2005/06/10(金) 15:05:00
[1]授業単元:プログラミング演習
[2]問題文:配列とポインタ(C言語)
[3]環境 LINUX コンパイラ
[4]期限: 6月15日水曜日午後5時まで

作成お願い致します


20個の自然数を要素とする1次元配列ar[20]=
{57,563,381,239,345,821,881,979,447,461,221,683,743,379,597,149,223,127,231,159}
に関し、(1)要素の順番を変えずに表示させる。(2)降順(大から小)に表示させ
る(3)素数のみを昇順(小から大)に表示させる。(4)素数の和を表示させるプロ
グラムを作成し、実行する。ただし、int型のポインタ配列(例: int *par[20]を
定義し、ar[20]内の数の順序を変更するときは、ar[20]自体を全く変更させず、
par[20]の要素を操作すること、また、par[20],ar[20]以外の配列を定義、使用
することは認めない。
150144:2005/06/10(金) 17:25:51
>>142
点Aの速度や移動している方向は不明って事で良いんだよね?
つまり、点Aから射出される点Cは、点Aの慣性の影響は受けないものとすると。
151デフォルトの名無しさん:2005/06/10(金) 17:59:19
152デフォルトの名無しさん:2005/06/10(金) 18:01:23
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/535.c

断片部分だけといってるまに他の方がちゃんとしたの書いてる…
153151:2005/06/10(金) 18:17:49
あー、
malloc返り血のチェック一箇所忘れたから追加しといてくれ。
それから、間違えて//コメント使ったから/**/にしといてくれ。

>>152
見方を変えれば単純な文字列置換だったんだな。
気づかなかった。
154142:2005/06/10(金) 18:19:55
>>150
そうですね。
あまり例外などを考慮せず簡潔に、と問いに明記してあるので
書かれてないことは基本的に不定ないし考慮しない、で大丈夫なはずです。
155デフォルトの名無しさん:2005/06/10(金) 18:57:32
156144:2005/06/10(金) 19:46:22
>>142
簡単だけど、こんなもんでえぇんちゃうかな?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/538.txt
157デフォルトの名無しさん:2005/06/10(金) 21:51:27
>>156
簡単に書くにしても、誤りがあっちゃいかんだろ。万有引力とかradienとか円周率とか。
158デフォルトの名無しさん:2005/06/10(金) 22:27:10
ちなみに
POINT_A_GRAVITY=G * Aの重さ * Cの重さ / (interval_ac * interval_ac)
redian → radian
3.1415926538 → 3.14159265358
で直るかな。POINT_A_GRAVITYはdefineじゃ無くなるからswitch内で計算したらいいと思う。Bも同様。
G(重力定数)、A〜Cの重さは自由に設定して構わんだろう。
159149:2005/06/10(金) 23:14:34
155さんありがとうございます。早速コンパイルしてみますw
160デフォルトの名無しさん:2005/06/10(金) 23:52:15
[1] 授業単元: 情報処理基礎
[2] 問題文(含コード&リンク):テキストファイルからデータを読み込み基本統計量を計算する
                  プログラムを作成しプログラムと実行結果を提出
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): bcc
 [3.3] 言語:どちらでも可
[4] 期限:2005年6月13日まで
[5] その他の制限:クラスを使うこと


ポインタ関数やクラスの使い方などが全然わからず大苦戦ですorz
お手数かけますが是非ともよろしくおねがいします。
161デフォルトの名無しさん:2005/06/11(土) 00:08:13
>>160
> [3.3] 言語:どちらでも可
>[5] その他の制限:クラスを使うこと
Cの方だとしたらclass使うのは無理だなぁ…
#define class struct …?
162デフォルトの名無しさん:2005/06/11(土) 00:12:40
>>160
情報が少なすぎ。

>テキストファイル
フォーマット書け

>基本統計量
それだけじゃわからん。求めるもんを全部書け。
163デフォルトの名無しさん:2005/06/11(土) 00:38:08
>>155
("Four",&sum,1) の使いかた、目ウロコだった
164デフォルトの名無しさん:2005/06/11(土) 00:39:49
("Four", &sum, 1) ね…
165デフォルトの名無しさん:2005/06/11(土) 02:39:03
>>160
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/539.txt
まー大方こんなとこだろ。
ちなみに入力のエラーチェックはしてない。
166165:2005/06/11(土) 02:45:27
>>160
2箇所間違えた orz
double n = 0.0; って・・・ int n = 0; でいいわな。
double mean = (double) ... はキャストする必要なかった。
途中までintでやってて置換で直したら失敗。
反省。
167144:2005/06/11(土) 07:50:12
>>157
マジスマン。脳内辞書の限界が・・・。
万有引力とかすっかり忘れてたよ。orz
168デフォルトの名無しさん:2005/06/11(土) 09:15:26
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
   M行N列の行列とN行M列の行列とのかけ算を行うプログラムを作成せよ。
   M、Nは入力により自由な数を設定できるが、行列の各要素は乱数を用いること。ただし全て0にはならないようにすること。
   なお、表示はM行N列の行列、N行M列の行列、それらの積全てを表示すること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6月14日
[5] その他の制限:M、Nは引数ではなくscanfで取得するようにしてください(引数をまだ習っていないため)

宜しくお願いします。
169デフォルトの名無しさん:2005/06/11(土) 10:39:19
>>168
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/540.txt
なんか最近、行列ネタよく見かけるな。
170デフォルトの名無しさん:2005/06/11(土) 11:45:59
1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク): 地点Aから垂直方向に 初速度 V でボールを投げ上げたとき、到達する最高点はA地点から何メートルのところか。空気の抵抗は考えないことにする。
初速度Vを入力したとき到達する最高高度を表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ(バージョン): 分からないです
 [3.3] 言語:C++
[4] 期限:できればすぐに
[5] その他の制限:関数を習ったところです
17115:2005/06/11(土) 12:00:03
>>170
#include <stdio.h>
#define g 9.80665

int main( void )
{
double v;

scanf( "%lf", &v );

printf("初速度 %lf m/s\n", v );
printf("最高点 %lf m\n", v*v/2.0/g );

return 0;
}
172170:2005/06/11(土) 12:04:57
>>171
速レスありがとうございます!
173デフォルトの名無しさん:2005/06/11(土) 12:47:38
      _______                     __
    // ̄~`i ゝ                    `l |
    / /        ,______   ,_____    ________  | |  ____ TM
   | |     ___ // ̄ヽヽ // ̄ヽヽ (( ̄))   | | // ̄_>>
   \ヽ、   |l | |    | | | |    | |  ``( (.  .| | | | ~~
      `、二===-'  ` ===' '  ` ===' '  // ̄ヽヽ |__ゝ ヽ二=''
                         ヽヽ___//   日本
  _____ _____  ______  _______
  |  ウェブ  | | イメージ | | グループ | | ディレクトリ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ._________________
      |                         │・検索オプション
      └────────────────┘・表示設定
         | Google検索 | I'm Feeling Lucky |  ・言語ツール
          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ○ウェブ全体から検索 ◎日本語のページを検索
174デフォルトの名無しさん:2005/06/11(土) 16:20:15
[1] 授業単元:プログラミングI
[2] 問題文:3つの係数a,b,cをユーザーに入力させ対応する二次方程式
ax二乗+bx+c=0の根を出力するプログラムを書け。
(複素根となる場合は実根はないというコメントを出力すればよい)
[3] 環境:
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月13日
[5] その他の制限:条件判断処理を習った所です
よろしくおねがいします
17515:2005/06/11(土) 16:34:21
>>174
#include <stdio.h>
#include <math.h>

int main( void )
{
double a,b,c,sol;
scanf( "%lf %lf %lf", &a, &b, &c );
sol = b*b-4.0*a*c;
if( sol > 0.0 ) {
sol = sqrt( sol );
printf( "%lf %lf\n", (-b + sol)/2.0/a, (-b - sol)/2.0/a );
}
else if ( sol == 0.0 ) {
printf( "%lf\n", -b/2.0/a );
}
else
printf( "実根はない\n" );
return 0;
}
176デフォルトの名無しさん:2005/06/11(土) 17:26:27
>>175
ありがとうございます!
177デフォルトの名無しさん:2005/06/11(土) 20:13:21
>>174
浮動小数点数の引き算(つか異符号同士の加算)は避けられるなら避けた方がいいよ。

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

int main(void)
{
double a, b, c;
double sol, cond;

scanf("%lf %lf %lf", &a, &b, &c);
cond = b * b - 4 * a * c;

if (cond < 0) {
puts("実根はない");
return 0;
}

sol = ((b > 0)
? (-b - sqrt(cond)) / (2 * a)
: -(b - sqrt(cond)) / (2 * a));

if (cond == 0) {
printf("%f\n", sol);
} else {
printf("%f, %f\n", sol, c / a / sol);
}

return 0;
}
178デフォルトの名無しさん:2005/06/11(土) 20:13:43
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):以下の二つの問のプログラムを作成せよ
(1)10個の要素よりなる配列a[ ]にデータを入れ、それをそっくりそのまま配列b[ ]にコピーする
プログラムを作れ。
(2)(1)の配列a[ ]の内容を逆の順序で配列b[ ]に格納するプログラムを作れ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):?
 [3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:なし

よろしくお願いします。
179デフォルトの名無しさん:2005/06/11(土) 20:34:32
180デフォルトの名無しさん:2005/06/11(土) 20:40:51
(1)
#include <stdio.h>
int main(){
int a[10] = { 1,2,3,4,5,6,7,8,9,10 }, b[10], i, j;
for (i = 0; i < 10; i++) printf("a[%d]=%d ", i, a[i]);
putchar('\n');

for (i = 0; i < 10; i++) b[i] = a[i];
for (i = 0; i < 10; i++) printf("b[%d]=%d ", i, b[i]);
putchar('\n');

return 0;
}

(2)
for (i = 0, j = 9; i < 10; i++, j--) b[j] = a[i];
for (i = 0; i < 10; i++) printf("b[%d]=%d ", i, b[i]);
putchar('\n');
181178:2005/06/11(土) 20:46:54
>>180
ありがとうございました
182デフォルトの名無しさん:2005/06/11(土) 21:07:32
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
"I have a pen & pencil."という、文章データ内の文字列を置換する
という問題で、置換したい文字列を入力する。新しく入る文字列を入力
する。そうすると変換された文章を表示するというプログラムをつりたい。
たとえば、haveと入力し次にhadと入力すると"I had a pen & pencil."
と出力する。
このプログラムをmallocを使わないであらかじめ
文書のサイズを大きくとる方法を使い、同じ結果が
出るようにしなさい。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:月曜まで
[5]その他の制限:特になしです

問題文長くてすいません。ちょっと自分の手に負えないので
すいませんがよろしくお願いします。
183ああ:2005/06/11(土) 21:08:38
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
"I have a pen & pencil."という、文章データ内の文字列を置換する
という問題で、置換したい文字列を入力する。新しく入る文字列を入力
する。そうすると変換された文章を表示するというプログラムをつりたい。
たとえば、haveと入力し次にhadと入力すると"I had a pen & pencil."
と出力する。
このプログラムをmallocを使わないであらかじめ
文書のサイズを大きくとる方法を使い、同じ結果が
出るようにしなさい。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
 [3.3] 言語:C++
[4] 期限:月曜まで
[5]その他の制限:特になしです

問題文長くてすいません。ちょっと自分の手に負えないので
すいませんがよろしくお願いします。
184デフォルトの名無しさん:2005/06/11(土) 21:10:29
>>182,183
同じ書き込みしてすいません。
迷惑かけてごめんなさいです。
185デフォルトの名無しさん:2005/06/11(土) 21:41:55
課題を作ったのですが、穴があるっていわれました・・、何か指摘があったら教えてもらえませんか?#include <stdio.h>
int main(void)
{ int i, j, k, arrayA[3][3], arrayB[3][3], arrayC[3][3];int *pA, *pB, *pC;
pA=(int *) arrayA;pB=(int *) arrayB;pC=(int *) arrayC;printf("Matrix A\n");
for (i=0; i<3; i++) {printf("Please input three elements in row#%d:", i+1);
scanf("%d %d %d", pA+3*i, pA+3*i+1, pA+3*i+2);}printf("Matrix B\n");
for (i=0; i<3; i++) { printf("Please input three elements in row#%d:", i+1);
scanf("%d %d %d", pB+3*i, pB+3*i+1, pB+3*i+2);}printf("Matrix C:transposed matrix of A\n");for (i=0;i<3;i++)
for (j=0; j<3;j++) *(pC+3*j+i)=*(pA+3*i+j);
for (i=0;i<9;i++) { if ((i+1)%3) printf("%6d", *(pC+i));
else printf("%6d\n", *(pC+i));}printf("\nMatrix C:sum of A and B\n");for (i=0;i<3;i++)
for (j=0; j<=3;j++) *(pC+3*i+j)=*(pA+3*i+j)+*(pB+3*i+j);for (i=0;i<9;i++) {
if ((i+1)%3) printf("%6d", *(pC+i));else printf("%6d\n", *(pC+i));}
printf("\nMatrix C:product of A and B\n"); for (i=0;i<9;i++) *(pC+i)=0;for (k=0;k<3;k++) for (i=0;i<3;i++)for (j=0; j<3;j++)
*(pC+3*i+j)=*(pC+3*i+j)+*(pA+3*i+k)*(*(pB+3*k+j));
for (i=0;i<9;i++) { if ((i+1)%3) printf("%6d", *(pC+i));else printf("%6d\n", *(pC+i));} return 0;
}
186デフォルトの名無しさん:2005/06/11(土) 21:49:51
いえ、隙間なく敷き詰められておりますが・・・
187デフォルトの名無しさん:2005/06/11(土) 21:53:05
すごく…見にくいです
188デフォルトの名無しさん:2005/06/11(土) 21:53:47
わざわざポインタ使うかなあ
189デフォルトの名無しさん:2005/06/11(土) 21:54:28
190デフォルトの名無しさん:2005/06/11(土) 23:03:52
【質問テンプレ】
[1] 授業単元:数値計算法1
[2] 問題文(含コード&リンク):
ガウス・ザイデル法を用いて任意のn元連立一次方程式の解を求めるプログラムを書け。
また、同時に逆行列も求めよ。
収束条件は10E-6とする。
また今回は次のような行列を用いその出力結果を提出せよ。

   4 0 -1 -2 -1 6
0 4 -1 0 -1 0
A=-1 -1 4 -1 0 B= 0
-2 0 -1 4 -1 0
-1 -1 0 -1 4 0

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): LSI C-86 試食版
 [3.3] 言語:C
[4] 期限:6月17日まで

すでにプログラミングは終えてるんですが、出力ファイルに意味不明な漢字の羅列やものすごい膨大な数値がでてきたり、
プログラムのほうが途中でとまったりするので、ソースの方を見ていただきたいです。
特にGandZ関数の方で動いているkの値に変なものが入ったりします。
参考URL:http://mukun_mmg.at.infoseek.co.jp/mmg/bncpp/al043.html

よろしくお願いします。
191190:2005/06/11(土) 23:07:07
改行が多すぎるといわれたので分けてあげます。

----------ソースファイル-------------
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define NN 9999 /*kを何回繰り返すのかわからないので大きい値を定義しておく*/


int n,flag;/*nは元の数。flagは無限ループを抜けるためのフラグ。*/
double **a,*b,**x,sum,dif,e;/*配列aはAの配列。配列bはBの配列。配列xはx(k)iの配列。sumは式のサメイションの値を入れる。difはx(k)i-x(k-1)iの値を入れる。eは誤差を入れる。*/
192デフォルトの名無しさん:2005/06/11(土) 23:08:06
/*ガウスザイデルの計算*/
int GandZ(FILE *fp){

int i,j,k,u;

fprintf(fp,"|\tk\t");
for(i=0;i<n;i++)
fprintf(fp,"|\tx[k][%d]\t\t",(i+1));
fprintf(fp,"|\n");

/*k=1とし無限ループに突入させる*/
k=1;
sum=0;
while(!0){
u=k-1;
for(i=0;i<n;i++){
sum=0;
for(j=0;j<n;j++){
if(i==j)continue;/*iとjが同じときは無視する*/
else if(j<i)sum+=a[i][j]*x[k][j];/*jのほうがiより小さければx(k)iをかける*/
else if(j>i)sum+=a[i][j]*x[u][j];/*jのほうが多きければx(k-1)iをかける*/
}
x[k][i]=(b[i]-sum)/a[i][i];/*x(k)iを計算*/
}
193デフォルトの名無しさん:2005/06/11(土) 23:09:17
        flag=1;/*flagを1としておく*/
        for(i=0;i<n;i++){/*全てのx(k)の要素について|x(k)i-x(k-1)i|<eを実現しなければならない*/
            dif=x[k][i]-x[u][i];
            if(fabs(dif)>=e)
            flag=0;/*もしdifの絶対値がeよりも大きい場合はflagを0とする*/
        }
        
        fprintf(fp,"|   %d  ",k);
        for(i=0;i<n;i++)
            fprintf(fp,"|   %lf ",x[k][i]);
        fprintf(fp,"|\n");
        
        if(flag==1)break;/*flagが1のままなら無限ループから抜ける*/
        
        k++;/*flagが0であればkをインクリメントし、無限ループをつづける。*/
    }
    return k;
}

194デフォルトの名無しさん:2005/06/11(土) 23:10:31
int main(void){
    
    int i,j;
    int k;
    FILE *fp,*fp1,*fp2;
    
    /*値の入力*/
    printf("連立方程式の元数を入力>>");
    scanf("%d",&n);
    
    /*メモリ確保*/
    a=(double**)malloc(n*sizeof(double*));
    b=(double*)malloc(n*sizeof(double));
    x=(double**)malloc(NN*sizeof(double*));
    for(i=0;i<n;i++){
        a[i]=(double*)malloc(n*sizeof(double));
        x[i]=(double*)malloc(n*sizeof(double));
        if(a[i]==NULL||x[i]==NULL){
            printf("配列の確保に失敗\n");
            exit(0);
        }
    }
    if(a==NULL||b==NULL||x==NULL){
        puts("配列の確保に失敗\n");
        exit(0);
    }
    
195デフォルトの名無しさん:2005/06/11(土) 23:11:13
>>189
ども、ありがとうございました。
おかげで助かりました。
196デフォルトの名無しさん:2005/06/11(土) 23:11:22
    printf("行列Aの値を入力\n");
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("a[%d][%d]=",(i+1),(j+1));
            scanf("%lf",&a[i][j]);
        }
    }
    
    printf("行列Bの値を入力\n");
    for(i=0;i<n;i++){
        printf("b[%d]=",(i+1));
        scanf("%lf",&b[i]);
    }
    
    printf("xの初期値を入力\n");
    for(i=0;i<n;i++){
        printf("x[%d]=",(i+1));
        scanf("%lf",&x[0][i]);
    }
    
    printf("eを入力>>");
    scanf("%lf",&e);
    
    /*対角要素が0であればこの方法は使えないのでエラーをだす。*/
    for(i=0;i<n;i++){
        if(a[i][i]==0){
            printf("エラー:Aの対角要素が0");
            exit(0);
        }
    }
    
197190:2005/06/11(土) 23:16:11
    
    fp=fopen("GandZ.txt","w");
    
    k=GandZ(fp);
    
    fclose(fp);

    fp1=fopen("GZ_inv.txt","w");
    fp2=fopen("GZ.txt","w");
    for(i=0;i<n;i++){   /*逆行列を作成*/
        for(j=0;j<n;j++){
            if(i==j)b[j]=1;/*単位行列の一列分を作る*/
            else b[j]=0;
        }
        k=GandZ(fp2);
        for(j=0;j<n;j++)
            fprintf(fp1,"%lf    ",x[k][j]);
        fprintf(fp1,"\n");
    }
    fclose(fp1);
    fclose(fp2);

    return 0;
    
}

なんかめちゃくちゃ長くなってすいません・・・。
198190:2005/06/11(土) 23:21:16
すいません。ソースファイルの方はアップローダーの方にあげときました。申し訳ないです。
199デフォルトの名無しさん:2005/06/11(土) 23:38:25
>>169
ありがとうございます。
ところで、「* * A」や「* * make_matrix」のように一部に「* *」が付いていますが、
これはどういう意味でしょうか。
200デフォルトの名無しさん:2005/06/11(土) 23:40:12
ポインタのポインタ
201デフォルトの名無しさん:2005/06/12(日) 03:37:52
[1] 授業単元:情報処理
[2] 問題文: 整数値を読み込み、それが正の値であれば、その数を逆順に出力するプログラムを作成せよ。
なお値が0以下であれば、何も出力しないものとする。
例 3145→5413
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):BCC6
 [3.3] 言語:C++
[4] 期限:2005年06月13日
[5] その他の制限:
習い始めたばかりで、if、switch、do while文しか習っていません。
よろしくお願いします。
202デフォルトの名無しさん:2005/06/12(日) 03:58:30
>>201
#include <iostream>
using namespace std;

int main()
{
  int n;
  cout << "整数値を入力:";
  cin >> n;
  if (n<1)
    return 0;

  do {
    cout << n%10;
  } while (n/=10);
  cout << endl;
}

203デフォルトの名無しさん:2005/06/12(日) 04:08:11
>>202
ありがとうございました。
204デフォルトの名無しさん:2005/06/12(日) 12:04:17
1 2 3 4 5 10 20 30 40 50
3 4 3 0 2
8 7 6 5 4 3 2

上みたいな数の組を標準入力から受け取って,行単位で処理したいのですが,
個数が不定なのでどこまで読んだらいいかがわかりません.
行末判定はどうやってやればいいのでしょう?
205デフォルトの名無しさん:2005/06/12(日) 12:20:47
>>204
C++ なら 一行 string で取って istringstream
C なら1byteづつ取って parse するしかない?
206デフォルトの名無しさん:2005/06/12(日) 12:21:41
>>204
1行分を文字列にfgetsなどで読み込む。数字への処理はその文字列に
対してゴリゴリやる。そうすれば行末判定はいらない。
207デフォルトの名無しさん:2005/06/12(日) 12:23:22
fgets って一行の最大数が事前に分かってないと
208デフォルトの名無しさん:2005/06/12(日) 12:27:28
char buf[1024], *p;
int n;
while( !fgets(buf, 1024, stdin) ) {
  for(p = strtok(buf, " "); p ; p = strtok(NULL, " ")) {
    n = atoi(p);
    /* 処理 */
  }
}
209デフォルトの名無しさん:2005/06/12(日) 12:31:03
string line;
while (getline(cin, line)) {
istringstream iss(line);
int x;
while (iss >> x) { /* 処理 */ }
}
210デフォルトの名無しさん:2005/06/12(日) 12:40:45
>>207
そういうのを”仕様”っていうんだよ。ぼうや。
211204:2005/06/12(日) 13:14:59
istringstream を使うことにしました.ありがとうございます.
212デフォルトの名無しさん:2005/06/12(日) 13:26:40
なんでお前ら、std::getline() 使わないの?
213デフォルトの名無しさん:2005/06/12(日) 13:44:13
>>212
209は使っているが。
214デフォルトの名無しさん:2005/06/12(日) 14:29:30
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
(1)クラスN人の試験の点数を配列grade[ ]に格納し総和、平均を求めよ。
さらに最高点、最低点を求められるようにせよ。

(2)(1)の問題の配列gradeへの試験の点数の格納の仕方をscanfで取り込むものと、
配列の初期化で行うものの両方を作れ。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:配列

どなたかお願いします。
215デフォルトの名無しさん:2005/06/12(日) 14:35:06
scanfの時点で、やるきなくなった。
216デフォルトの名無しさん:2005/06/12(日) 15:17:11
>>212
std::getline()って先読みするから大嫌い
端末からの入力にはぜんぜん向かない
217デフォルトの名無しさん:2005/06/12(日) 15:34:07
>>214
#define N 5
int _01_main( void ) {
int grade[ N ], i, max, min, sum;
float ave;
for ( sum = 0, i = 0; i < N; i++ ) {
printf( "%d 人目の点数 =", i );
scanf( "%d", &grade[ i ] );
if ( i == 0 ) max = min = grade[ i ];
sum += grade[ i ];
if ( grade[ i ] > max ) max = grade[ i ];
if ( grade[ i ] < min ) min = grade[ i ];
}
ave = ( float )sum / ( float )N;
return 0;
}
int _02_main( void ) {
const int grade[ N ] = { 50, 28, 98, 76, 60 };
int i, max, min, sum;
float ave;
for ( sum = 0, i = 0; i < N; i++ ) {
if ( i == 0 ) max = min = grade[ i ];
sum += grade[ i ];
if ( grade[ i ] > max ) max = grade[ i ];
if ( grade[ i ] < min ) min = grade[ i ];
}
ave = ( float )sum / ( float )N;
return 0;
}
結果表示は自分で作って。
218デフォルトの名無しさん:2005/06/12(日) 15:54:23
>>217
ありがとうございました。
219太郎:2005/06/12(日) 15:56:46
[1] 授業単元:実践C
[2] 問題文(含コード&リンク):

オプション -w があれば、 pwd を実行し、
成功すれば、 ls -l を実行する。
オプションを指定しなければ、 ls -l だけを実行する。

[3] 環境
 [3.1] OS:VineLinux最新版
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月12日24:00まで
[5] その他の制限:参考プログラムとして
http://www.kyoto-su.ac.jp/~wd/jissen-programming-c/prog/tiger1.c
がありました。

おねがいします。m(__)m
220太郎:2005/06/12(日) 15:59:05
[1] 授業単元:実践C
[2] 問題文(含コード&リンク):

オプション -a があれば、 pwd を実行し、
成功すれば、 ls -la を実行する。
オプションを指定しなければ、 pwd を実行し、
成功すれば、 ls -l を実行する。

[3] 環境
 [3.1] OS:VineLinux最新版
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月12日24:00まで
[5] その他の制限:参考プログラムとして
http://www.kyoto-su.ac.jp/~wd/jissen-programming-c/prog/tiger1.cがありました

二問連続すいません。おねがいします。m(__)m
221デフォルトの名無しさん:2005/06/12(日) 18:23:05
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
N行、M行の表に整数データを読み込み横計縦計および
総和を計算し表形式で出力するプログラムを書け。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:配列

もう一問ありました、よろしくおねがいします。
222デフォルトの名無しさん:2005/06/12(日) 18:36:32
>>220
その糞みたいな参考プログラムがあるのに何でできないんだ?
その糞が何やってるのかも判らないならやめた方が無難だぞ。
223デフォルトの名無しさん:2005/06/12(日) 18:46:20
どなたか、#include <iostream> #include <string>
using namespace std;
class Neko
{
private:
string name;
public:
Neko(string s){
name = s;
}
void naku(){
cout<<"にゃあ。俺様は"<<name<<"だ。"<<endl;
}
};
int main()
{
Neko dora("ボス"); //「ボス」というの名前を持ったdoraが生成される
cout<<"あなたの名づけた猫がメモリ上に生成されました。"<<endl;
cout<<"猫が鳴きます。"<<endl;

dora.naku();
}
を例として、これを少し改造するだけで、以下の問題のソースを書いてくださいm(__)m
「Objectクラスのサブクラスとして、Dogクラスを作成し、
インスタンスメソッドとして、噛む(bites)を作成しなさい。
bitesメソッドの内容は、"ガブ!"という文字列(String)を渡すものとする。
クラスおよびメソッドを作成したら、一時変数(a)としてDogクラスのインスタンスを作成,
bitesメソッドを送って噛むかどうかテストせよ」



224デフォルトの名無しさん:2005/06/12(日) 18:54:24
Neko に対して Dog
naku に対して bites か・・・。
最初から全部 English で統一しろよ。
225デフォルトの名無しさん:2005/06/12(日) 19:09:42
>>223
Objectクラスはどこ?
226デフォルトの名無しさん:2005/06/12(日) 19:18:42
227デフォルトの名無しさん:2005/06/12(日) 20:28:03
>>221
この問題どなたかお願いします。
228デフォルトの名無しさん:2005/06/12(日) 21:00:00
>>227
まだ期限あるじゃん。あせんないで。
229tomo:2005/06/12(日) 21:48:25
#include <iostream>#include <string> using namespace std;
class Dog {
private: string nakigoe; public:
void bites(string str){
cout<<str<<endl;
}
void aBark(string str){
nakigoe = str;
}
void barks(){
cout<<nakigoe<<endl;
}
};
class StrayDog : public Dog {
public:
void ote(){
bites("がぶ!");
}
};
class PetDog:public Dog{
public:
void ote(){
aBark("わん!");
barks();
}
};
int main()
{
PetDog a;
a.ote();
}
230tomo:2005/06/12(日) 21:49:31
すいません、どなたか、>>229を元にして、次のC++ソースを完成させてください。m(__)m

『PetDogクラスに犬の名前(aName)を保持するインスタンス変数を作成せよ。
 また、名前を代入するインスタンスメソッド(aName:)と名前を呼んでお手をさせる
インスタンスメソッド(ote:)を作成せよ。
ote:メソッドは、名前の正誤を判定し、正しければ吠え、間違えば噛むを実行するものとする。
一時変数(a)としてDogクラスのインスタンスを作成し、名前(#pochi)を代入して、
名前を呼んでお手をさせた時に、吠えるか噛むかをテストせよ。』





231デフォルトの名無しさん:2005/06/12(日) 21:51:41
>>230=>>223
お前死ねよ
232デフォルトの名無しさん:2005/06/12(日) 21:55:33
うぇっっr
233tomo:2005/06/12(日) 21:56:58
>>231
すいません。でもそのための板ではないでしょうか?
自分の勉強が足りないのは反省しています。
234デフォルトの名無しさん:2005/06/12(日) 21:57:42
>>1のテンプレ読む努力ぐらいしてほしいですな
235tomo:2005/06/12(日) 22:00:37
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):<<230
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):borland
 [3.3] 言語:C++
[4] 期限:2005年6月13日9:00まで
[5] その他の制限:

236デフォルトの名無しさん:2005/06/12(日) 22:06:41
家で、cのプログラミングをしたいんですが、どんなアプリでやればいいのかわかりません。
ちなみに、自分のぱそこんのOSはMeです。どうか、おすすめのアプリをおしえてください。
237デフォルトの名無しさん:2005/06/12(日) 22:14:03
Borland C++Builder
Visual C++ 6.0
238デフォルトの名無しさん:2005/06/12(日) 22:18:35
>>236
おれ、お金ないからメモ帳でプログラム書いて
StudyCってソフトの体験版でコンパイル&実行してる
うえっwwwえっwww
239デフォルトの名無しさん:2005/06/12(日) 22:20:00
CygwinからGcc使えよ
240デフォルトの名無しさん:2005/06/12(日) 22:22:21
そこでMinGWの登場ですよ
241デフォルトの名無しさん:2005/06/12(日) 22:59:52
1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
次に示す仕様を満たす名簿管理プログラムを作成しなさい。
1. 標準入力から「ID,氏名,生年月日,出身」のようなコンマ区切り形式(CSV形式)の名簿データを受け付けて登録する。
2. %で始まる入力行をコマンド入力と解釈して、登録してあるデータを表示、整列等できるようにする。以下に実装すべきコマンドを示す。

コマンド 意味 備考
%Q 終了(Quit)
%C 登録件数などの表示(Check)
%P n 先頭からn件表示(Print) n = 0; 全件表示, n < 0; 後ろから-n件表示
%R file fileから読み込み(Read)
%W file fileへ書き出し(Write)
%F word wordを含むデータを表示 (Find) %Pと同じ形式で表示
%S n データをn番目の項目で整列 (Sort) 表示はしない

サンプルソース http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/546.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月15日まで
[5] その他の制限:なし

お願いします。
242デフォルトの名無しさん:2005/06/12(日) 23:11:32
>>241
そこまでサンプルがあってなんで出来ねぇの?池沼じゃあるまいし
243241:2005/06/12(日) 23:27:56
すみません。勉強不足で各関数の意味もよく分からず、どうしていいのか分からない状態です。
後で一から勉強し直します。なのでお願いします。
どうしても分かりません・・・
244デフォルトの名無しさん:2005/06/12(日) 23:44:01
エラー処理は割愛

void
command_read (struct profile*p,
char*filename) {
FILE *fp
char line[1024];
char *data[4], *birth[3];

fp = fopen(filename, "r");
fgets(line, 1024, fp);

split(line, data, ',', 4);

p->id = atoi(data[0]);
strcpy(p->name, data[1]);
strcpy(p->home, data[3]);

split(data[2], birth, '-', 3);
p->birthday.y = atoi(birth[0]);
p->birthday.m = atoi(birth[1]);
p->birthday.d = atoi(birth[2]);

fclose(fp);

}
245デフォルトの名無しさん:2005/06/12(日) 23:48:10
void
command_read (struct profile*p,
char*filename) {
FILE *fp
char line[1024];
char *data[4], *birth[3];

fp = fopen(filename, "r");
fgets(line, 1024, fp);

add_profile(p, line);

fclose(fp);

}

246デフォルトの名無しさん:2005/06/12(日) 23:48:52
だめだ,眠くて間違ってばかりだからパス
247デフォルトの名無しさん:2005/06/13(月) 00:17:57
アホばっかだなここ
248デフォルトの名無しさん:2005/06/13(月) 00:20:48
そんなに誉めるなよ
249デフォルトの名無しさん:2005/06/13(月) 00:30:03
1] 授業単元:H8マイコンプログラム
[2] 問題文(含コード&リンク):
LCDにHelloと表示させる
[3] 環境
 [3.1] OS:windosw
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月15日まで
[5] その他の制限:なし

お願いします。
250デフォルトの名無しさん:2005/06/13(月) 01:31:33
>>249
おまえはその情報だけで作れると思ってるのか?
251デフォルトの名無しさん:2005/06/13(月) 01:36:33
windowswというOSに興味津々
252デフォルトの名無しさん:2005/06/13(月) 01:46:18
253デフォルトの名無しさん:2005/06/13(月) 01:46:23
wind os w 
254249:2005/06/13(月) 01:50:10
他に何の情報がいるのでしょうか?
255デフォルトの名無しさん:2005/06/13(月) 02:11:18
>>254
H8の種類やIO、LCDの型番や接続方法、コントロールするアドレスなど
情報がぜんぜん足りない
256249:2005/06/13(月) 02:32:12
H8/3052F
SC1602BSLB
RS232C
無知ですみません。
257デフォルトの名無しさん:2005/06/13(月) 02:36:41
>>256
情報が足りんって言ってるだろ。やる気が無いなら消えろ。
258デフォルトの名無しさん:2005/06/13(月) 02:38:48
ものの種類だけじゃなくて、どれにどうアクセスすると何が起きるのか、
つまり"Hello"を表示させるには何をすべきなのか。ソフトウェア的データキボンヌ
259デフォルトの名無しさん:2005/06/13(月) 02:45:21
[1] 授業単元:ゼミ課題 (画像処理)
[2] 問題文(含コード&リンク):
pgmファイルを読み込み、フィルタ処理を施し、pgmファイルで出力するプログラム(pgm.c)がある。
このプログラムを参考にし、ppmファイルで同じ処理をするプログラム(ppm.c)を作成しなさい。 */
但し、ppmファイルのファイルフォーマットは"P6"とし、入出力はバイナリモードで行うものとする。
また、使用するフィルタは3*3の線形平滑化フィルタとする。

サンプルソース(pgm.c)→ http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/548.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):Visual C++6.0
 [3.3] 言語:C
[4] 期限:2005年6月14日午前中まで
[5] その他の制限:特になし。習得状況はポインタまで(構造体はまだです)。

よろしくお願いします。
260249:2005/06/13(月) 02:46:12
端子機能やLCDインストラクションの表の事でしょうか?
261デフォルトの名無しさん:2005/06/13(月) 03:13:07
>>249
単元がマイコンってことはポケコンとか、ボードに線を刺して作ったコンピュータを使って
操作するわけだろ?そのときどこのメモリに何を書いたら表示が変わるとかいうマニュアルを
もらってるはずだ。取り合えずそれに関して知ってることを洗いざらい晒せ。
262デフォルトの名無しさん:2005/06/13(月) 03:15:53
専用のライブラリが付属していて、単にそのライブラリの関数をコールするだけだったら笑う
263デフォルトの名無しさん:2005/06/13(月) 03:37:37
授業まったくきいてませんと言ってるようなもんだな
264デフォルトの名無しさん:2005/06/13(月) 08:43:24

[1] 授業単元: プログラミングとその応用
[2] 問題文(含コード&リンク): x円(x≧0)を、1円玉、5円玉、10円玉、50円玉、100円玉、500円玉で両替する方法が
何通りあるかを求めるプログラムを作成せよ。
例えば、10円玉を両替する方法は、{1円×10枚、1円×5枚と5円×1枚、5円×2枚、10円×1枚}の4通りである。

※@0円を両替する方法は1通り(それぞれが0枚)
Ay円(y<0)を両替する方法は0通り
B6種類の硬貨のうち0種類を使って、x円を両替する方法は0通り
Cn種類の硬貨(0<n≦6)の硬貨を使ってx円(x>0)を両替する方法が何通りあるかは、次の2つの場合をそれぞれ数え上げればいい。
(@)n種類のうち、一番高い硬貨をm円玉とすると、n種類の硬貨で(x−m)円を両替する方法が何通りあるか(つまりm円玉を1枚使って、残りを考える)
(A)n種類のうち一番高い硬貨を1枚も使わないで、(n−1)種類の硬貨でx円を両替する方法が何通りあるか
D次の再起呼び出し関数により計算を行うようにする。
int count_change(int amount,int first)
その関数の中で硬貨データを表すため次のような整数の配列を利用する
int coins[KINDS_OF_COINS]={500, 100, 50, 10, 5, 1}
(≠define KINDS_OF_COINS 6 とマクロの定義をしておく)
また各引数は次のようなデータを表すものとする。
*amountは両替する金額
*firstは配列coinsで使う硬貨のうち一番高いものを表す配列の添字

[3] 環境
 [3.1] OS:Windows/Linux/等々 :Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか :C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか:来週まで
[5] その他の制限:どこまで習っているか、等々 :配列や関数を習ったところ


長くなりましたが、よろしくお願いしますm( __ __ )m
265デフォルトの名無しさん:2005/06/13(月) 08:56:46
>>264
#define KINDS_OF_COINS 6

int count_charge(int amount, int first)
{
    int coins[KINDS_OF_COINS] = {500, 100, 50, 10, 5, 1};
    if(amount < 0)
        return 0;
    if(amount == 0)
        return 1;
    if(first >= KINDS_OF_COINS)
        return 0;
    return count_charge(amount - coins[first], first) + count_charge(amount, first + 1);
}
266デフォルトの名無しさん:2005/06/13(月) 09:56:08
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
  2次元配列に格納されている4次元方行列A=[aij](要素は実数)において、
  a11+a22+a33a+a44 および、a14+a23+a32+a41
  を求めて表示する。ただし、上記の和はfor文による繰り返しにより記述する。
  計算に先立ち、行列の各要素の値はキーボードにより、以下のように入力する。
  a11...a14=1.0 2.0 3.0 4.0
a21...a24=5.0 6.0 3.1 2.0
a31...a34=1.3 2.5 9.0 4.3
a41...a44=1.3 2.5 9.0 4.3

[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:6月15日12:00まで
[5] その他の制限:for,while,if,switch,break,配列まで習いました。

一週間ほど考えましたが、ムリでした・・・。
助けてください。
テンパりすぎて板も間違える始末・・・。
どうかお願いします。
267デフォルトの名無しさん:2005/06/13(月) 10:04:12
>>266
一週間の成果をアップロードしたまえ。
268デフォルトの名無しさん:2005/06/13(月) 10:07:58
>>266
もっと明確に書いてください
269デフォルトの名無しさん:2005/06/13(月) 10:12:04
>>259
基本方針を提示。

・定義部
画像用配列を三次元配列に。
ex.
image1[MAX_IMAGESIZE][MAX_IMAGESIZE][3]

・読み込み部
二重ループでのfgetc()を三重ループに。
ex.
for (plane = 0; plane < 3; ++plane) {image1[y][x][plane] = (unsigned hcar) fgetc(fp);}

・出力部
読み込み部同様。

・フィルター部
やはり同様にplaneごとにフィルタリング。
#識別子の"P5"を"P6"にするのを忘れずに。
270174:2005/06/13(月) 11:55:14
>>175>>177をコンパイルしてみたら
/var/tmp//ccxtlM0q.o: In function `main':
/var/tmp//ccxtlM0q.o(.text+0x5e): undefined reference to `sqrt'
と出たんですけど原因わかりますか?
271デフォルトの名無しさん:2005/06/13(月) 12:08:11
>>270
つ -lm
272174:2005/06/13(月) 12:13:59
>>271
-lmしたらできました。ありがとうございます。
273148:2005/06/13(月) 12:20:26
>>151
>>152
ありがとうございます!
274デフォルトの名無しさん:2005/06/13(月) 12:21:23
test
275259:2005/06/13(月) 12:54:17
>>269
完成しました!ありがとうございました。
276266:2005/06/13(月) 13:02:13
>>267
一週間考えたのですが、出だしからわかりません。
a11とかa12とかのaijをどのように表示したらよいかがまずわからないと
いうか、思い付かないんです・・・。どうしたらよいでしょう?

>>268
明確にってどのようにかけばいいですか??

277デフォルトの名無しさん:2005/06/13(月) 14:26:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
N行、M行の表に整数データを読み込み横計縦計および
総和を計算し表形式で出力するプログラムを書け。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:配列

期限が迫っているので宜しくお願いします。
278デフォルトの名無しさん:2005/06/13(月) 14:39:05
>>276
>思い付かないんです・・・。どうしたらよいでしょう?
死ねばいいと思うよ。

いくらなんでもこれくらい理解できるべ。
for (int i = 1; i <= 4; ++i) {for (int j = 1; j <= 4; ++j) {printf("a%1d%1d ", i, j);}}
279デフォルトの名無しさん:2005/06/13(月) 14:56:15
>>277
int data[N+1][M+1];として
for(i=0;i<N;i++)for(j=0;j<M;j++){u=data[i][j];data[N][j]+=u;data[i][M]+=u;data[N][M]+=u;}
あとは表示するだけ
280デフォルトの名無しさん:2005/06/13(月) 14:57:54
>>278
printf()かい。

>>276
入力の仕様が不明。a11 .. a14 = は入力なのか出力なのか。
281264:2005/06/13(月) 15:19:44
>265
ありがとうございます。
関数の定義はわかったのですが、
関数の使い方がわかってないので、
もしよかったら、残りのmain関数なども書いてもらえませんか?
宜しくお願いします。
282デフォルトの名無しさん:2005/06/13(月) 15:54:54
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
平滑化、エッジ抽出の2種類のフィルタリング処理を高速化せよ。

・imgprocess.cを利用し、改善を加えることで高速化する。
・C言語を利用し、結果画像が変わらない限りどのような変更を加えてもよい。
(但しファイルは一つだけとする。)
・元のプログラム(imgprocess.c)で作成した結果画像とcmpコマンドで比較し、結果が正しいことを確認する。
・なお、丸め誤差などによる若干の誤差は許容する。
・プログラムの可読性よりも消費時間の短縮を優先する。
・消費時間は数回の平均で測定する。


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年06月14日10:00まで

どこをどう変えたか箇条書きを添えて頂けると有難いです。
283デフォルトの名無しさん:2005/06/13(月) 15:55:55
[1]授業単元 プログラミング
[2]問題文
(1)XY平面上の10個の点(0〜9番とする)の座標を入力させ、
原点に最も近い点までの距離とその点の番号を出力するプログラムを作れ。
(X,Y座標値には、プラスマイナス100以内といった仮定を設けてもいい)
(2)10個のデータX0,X1,・・・,X9を入力させ、これらの数の平均と
標準偏差を求めるプログラムを作れ。ただし、標準偏差σは、
σ=√Σ(Xi−平均)/n(iが0からn−1まで)の式を用いて計算し、
配列を用いること。
[3]環境
OS Linux
コンパイラ わかりません
言語 C
[4]期限 2005/06/15
[5]その他
この課題が出た日に初めて配列ならったので、(1)でも使ってください。
284282:2005/06/13(月) 15:56:34
285276:2005/06/13(月) 16:20:09
>>280
a11、a12、a13、a14は出力で=後の数字を入力するそうです。
286デフォルトの名無しさん:2005/06/13(月) 16:22:57
287276:2005/06/13(月) 16:23:12
>>278
まだ習い始めたばかりでfor文のなかにfor文を作るのが苦手で・・。
書いてもらうと理解できます!
278さんのおかげでちょっとわかってきました。
288デフォルトの名無しさん:2005/06/13(月) 16:35:25
死ねばいいとまで言われても健気だなw
289デフォルトの名無しさん:2005/06/13(月) 16:39:40
290276:2005/06/13(月) 16:40:37
ごもっともって感じなんで・・・。
ホントに少しわかってきましたし!
291デフォルトの名無しさん:2005/06/13(月) 16:48:43
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク): コマンドラインから2進数を入力させ、それを
               シフト演算とビット列演算のみを用いて10進数(int 型)に変換するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows/Linux/等々 WindowsXP
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 6月14日まで
お願いします。
292デフォルトの名無しさん:2005/06/13(月) 17:02:11
>>291
for(;*p;p++){s<<=1;s|=(*p=='1'?1:0);}
293デフォルトの名無しさん:2005/06/13(月) 17:04:25
>>292
全文でお願いします><
294デフォルトの名無しさん:2005/06/13(月) 17:22:32
>>282
main()の配列kernel、filtering()の引き数aをそれぞれint型にし、
kernel配列の1番目は9倍した値にする。
kernel配列のほかに配列を用意するかkernel配列の要素数を増やすかして定数として9を保持しておく。
#2番目はそのままの値で定数は1ということ。
filtering()のローカル変数tmpもint型として、絶対値を求める辺りからを整理する。

この改造で倍とは言わないまでもかなり高速化できるはず。
295デフォルトの名無しさん:2005/06/13(月) 17:29:15
>>294
実数演算をしないってこと屋根。
296デフォルトの名無しさん:2005/06/13(月) 17:30:15
>>293
その顔文字を使ったらダメだよ
荒らし対策で IPが荒らし候補リストに載る
297デフォルトの名無しさん:2005/06/13(月) 17:47:20
[1] 授業単元:
オペレーティングシステム入門
[2] 問題文(含コード&リンク):
あるファイルを監視して、何か変更があるたびに
そのファイルの先頭から表示するようなwatchfileというプログラムを作成せよ
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:6/14 PM6:00
お願いします。
298297:2005/06/13(月) 17:48:06
ヒントソース:
   for(;;){ /* 無限ループ */
      stat(argv[1],&sbuf);
      if(・・・・・){ /* ファイルの状態を検査して変わっていれば */
         while ((n=read(fd,buf,1024))>0)
            write(1,buf,n); /* 1024バイト単位に、readバイト数がゼロになるまで読んで出力 */
      }
      sleep(10); /* 10秒待機 */
   }
299デフォルトの名無しさん:2005/06/13(月) 17:52:02
>>298
そこまでヒントが出ていて、後何が必要なんだ?
300デフォルトの名無しさん:2005/06/13(月) 18:29:22
答えそのものに決まってるじゃないか。
301デフォルトの名無しさん:2005/06/13(月) 18:37:26
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):以下の三問に答えよ
【1】文字変数、整数変数、float変数、double変数を二つ以上宣言しているアドレスを
出力せよ。
【2】【1】のプログラムにさらにsizeofという演算子を使って自覚変数のバイト数を出せ
【3】【1】の書く変数を指すポインタ変数を宣言し、各ポインタ変数のアソレスとサイズを出力せよ。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:6月14日
[5]その他
ポインタがさっぱりわからないので、お願いします。
302デフォルトの名無しさん:2005/06/13(月) 18:39:43
>>301

>宣言しているアドレス
>自覚変数
>アソレス

この辺の解説希望。
303デフォルトの名無しさん:2005/06/13(月) 18:48:45
>>286
>>289
どうもありがとうございます。
304282:2005/06/13(月) 19:09:28
>>284のプログラムを使用して、変更したプログラムをいただけませんか?
お願いいたします。
305デフォルトの名無しさん:2005/06/13(月) 19:33:21
>>302
>宣言しているアドレス
これは問題文そのまま写しました
例で、文字変数aに対するアドレスの出力は
printf("adr of a=%d\n",&a);
とありました。
>自覚変数
これは各変数でした
>アソレス
これはアドレスです。

タイプミス多くてすみません。
306294:2005/06/13(月) 19:34:44
>>304
私宛てかね?
さっきは方針を示しただけで作ってないのだよ。
未だ出先だから後で暇だったら書いてみようじゃないか。
#あてにしないで待っていたまえ。
307282:2005/06/13(月) 19:52:40
ありがとうございます。ぜひお願いします。
308デフォルトの名無しさん:2005/06/13(月) 20:01:08
□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

★☆★読売巨人の清原和博をオールスターでキャッチャーに投票お願いします★☆★

          この夏最大の祭りイベント!
          2ちゃんねらは神様です
          是非この大イベントに参加してみませんか?
          みんなで一丸となり1つの事をやりとげる感動を是非一緒に味わいましょう。
          多数の参加者お待ちしております。


仮に1位にならなくても上位に食い込めれば清原に反省させる機会を与えることができます。
清原を反省させるためにもキャッチャー清原に投票してください。
ちなみに現在捕手部門7位と健闘しています。皆様の一票一票が力になります。
   

           ☆★☆ぜひ皆様の清き1日10票(PC:5票、携帯5票)を!!!☆★☆


          詳しくは↓↓↓


     オールスターで清原を捕手選出しよう Part.8
     http://ex13.2ch.net/test/read.cgi/base/1118647801/l50


          まとめサイト
            http://www.geocities.jp/address_ichiran/

□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
309デフォルトの名無しさん:2005/06/13(月) 23:17:22
[1] 授業単元:プログラミング基礎
[2] 問題文:
最大50個の自然数からなる数列を20個考えて要素を入力して受け付ける。
ただし、各数列は負の数が入力された時点で入力を終了し、次の数列を読み込み
はじめるものとする。
結果として得られる二次元配列を、見やすい形で出力せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Visual C++
 [3.3] 言語:C++
[4] 期限:2005年06月14日まで

よろしくお願いします
310294:2005/06/14(火) 00:09:21
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/553.txt

インデントは適当に変えた。後は概ね>294に書いた通り。
速度は測ってない。
311>>309:2005/06/14(火) 00:45:10
#include <iostream>

enum emDIMS {DIM1=20,DIM2=50};

int main(int argc, char* argv[])
{
int num[DIM1][DIM2],i,k;

//入力部
for(i=0;i<DIM1;i++){
for(k=0;k<DIM2;k++){
std::cout<<"\nnum[" << i << "][" << k << "] = ";
std::cin >> num[i][k];
if(num[i][k] < 0) break;
}
}

//出力部
for(i=0;i<DIM1;i++){
std::cout<<"\nnum[" << i << "][] = ";
for(k=0;k<DIM2 && num[i][k] >= 0;k++){
std::cout<< num[i][k] << ' ';
}
}
std::cout << std::endl;
return 0;
}
312デフォルトの名無しさん:2005/06/14(火) 01:31:51
http://0bbs.jp/momo8543/
ほいよ #<include> iostream usingnamespace
int
{main cout<<女子中学生の掲示板>> endl;

retrun 0 }http://0bbs.jp/momo8543/


http://0bbs.jp/momo8543/
313デフォルトの名無しさん:2005/06/14(火) 08:33:01
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
a,b,c を整数として入力して、 ax2+bx+c=0 の解を求めるプログラムを求めなさい。 ただし、2つの異なる実数解のみだけではなく、
重解、複素数の場合も対応 できるようにする.

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月14日
[5] その他の制限:配列

期限が迫っているので宜しくお願いします。
314デフォルトの名無しさん:2005/06/14(火) 09:00:58
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/554.txt
上のソースの2次元配列a[i][j],b[i][j]それぞれの要素をポインタで表現してください
例一次元配列の場合 int x[5]; ならば x[i]は*(x+i)です
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): .NET 2003
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限:なし

お願いします
315デフォルトの名無しさん:2005/06/14(火) 09:42:06
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
以下のフィボナッチ数列の第n項を求める関数Fib(n)を作成せよ。
a_0=2,a_1=3, a_n=a_(n-1)+a_(n-2)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Visual Studio .NET 2003
 [3.3] 言語:C言語
[4] 期限:今日中

期限が迫ってきたのでお願いします
316デフォルトの名無しさん:2005/06/14(火) 09:53:56
何時までなんだよ
317デフォルトの名無しさん:2005/06/14(火) 09:54:30
23時55分です
318デフォルトの名無しさん:2005/06/14(火) 09:55:33
>>315

unsigned int Fib( unsigned int n )
{
switch ( n ) {
case 0 :
return 2;
case 1 :
return 3;
default :
return ( Fib( n - 1 ) + Fib( n - 2 ) );
}
}
319デフォルトの名無しさん:2005/06/14(火) 10:02:47
>>318
ありがとうございました
320314:2005/06/14(火) 10:15:26
自己解決しました

追加で課題がでたのですが、
リストを用いてソートプログラムを作成するというものです
この課題は単元中に作成しなくてはならないのですが、
ほかの課題もあるのでお願いしたいです
リストは単方向、双方向どちらでも可
ソートアルゴリズムは好きなものを使ってもOKです
どうかよろしくお願いします
321デフォルトの名無しさん:2005/06/14(火) 10:16:38
>>315
unsigned
fib(unsigned n)
{
unsigned f2 = 1;
unsigned f1 = 1;
unsigned f0 = f1 + f2;
int i;
for (i = 0; i < n; i++) {
f2 = f1;
f1 = f0;
f0 = f1 + f2;
}
return f0;
}
322デフォルトの名無しさん:2005/06/14(火) 10:33:52
【質問テンプレ】
[1] 授業単元:Visual c++
[2] 問題文(含コード&リンク):ファイルを読み込み、ファイルの中身を表示をさせる
[3] 環境
 [3.1] OS:Windows 2000
 [3.2] コンパイラ(バージョン):Visual c++
 [3.3] 言語:C++
[4] 期限:14日午後2時まで

よろしくお願いします。
323320:2005/06/14(火) 10:42:03
同じく自己解決
お騒がせしました
324デフォルトの名無しさん:2005/06/14(火) 11:31:40
>>322
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

const char* File = "hoge.txt";

int
main()
{
ifstream from(File);
if (!from) { exit(1); }

char c;
while (from.get(c)) { cout.put(c); }

return 0;
}
325デフォルトの名無しさん:2005/06/14(火) 12:21:07
326デフォルトの名無しさん:2005/06/14(火) 12:51:21
いぜん投稿したものですがうまいところできなかったのでもう一度お願いします
プログラムで穴があるところ、訂正した方がもっとよくなるところなどを指摘してくださいお願いします

#include <stdio.h>

int main(void)
{
int i, j, k, arrayA[3][3], arrayB[3][3], arrayC[3][3];
int *pA, *pB, *pC;

pA=(int *) arrayA;
pB=(int *) arrayB;
pC=(int *) arrayC;

printf("Matrix A\n");
for (i=0; i<3; i++) {
printf("Please input three elements in row#%d:", i+1);
scanf("%d %d %d", pA+3*i, pA+3*i+1, pA+3*i+2);
}

printf("Matrix B\n");
for (i=0; i<3; i++) {
printf("Please input three elements in row#%d:", i+1);
scanf("%d %d %d", pB+3*i, pB+3*i+1, pB+3*i+2);
}
327デフォルトの名無しさん:2005/06/14(火) 12:51:39
printf("Matrix C:transposed matrix of A\n");
for (i=0;i<3;i++)
for (j=0; j<3;j++) *(pC+3*j+i)=*(pA+3*i+j);
for (i=0;i<9;i++) {
if ((i+1)%3) printf("%6d", *(pC+i));
else printf("%6d\n", *(pC+i));
}

printf("\nMatrix C:sum of A and B\n");
for (i=0;i<3;i++)
for (j=0; j<=3;j++) *(pC+3*i+j)=*(pA+3*i+j)+*(pB+3*i+j);
for (i=0;i<9;i++) {
if ((i+1)%3) printf("%6d", *(pC+i));
else printf("%6d\n", *(pC+i));
}

printf("\nMatrix C:product of A and B\n");
for (i=0;i<9;i++) *(pC+i)=0;
for (k=0;k<3;k++)
for (i=0;i<3;i++)
for (j=0; j<3;j++)
*(pC+3*i+j)=*(pC+3*i+j)+*(pA+3*i+k)*(*(pB+3*k+j));
for (i=0;i<9;i++) {
if ((i+1)%3) printf("%6d", *(pC+i));
else printf("%6d\n", *(pC+i));
}

return 0;
}
328デフォルトの名無しさん:2005/06/14(火) 12:51:58
実行結果 (赤字はキーボードからの入力)
Matrix A
Please input three elements in row#1:12 10 11
Please input three elements in row#2:20 31 2
Please input three elements in row#3:61 42 23
Matrix B
Please input three elements in row#1:71 28 3
Please input three elements in row#2:31 90 50
Please input three elements in row#3:1 62 45
Matrix C:transposed matrix of A
12 20 61
10 31 42
11 2 23

Matrix C:sum of A and B
83 38 14
51 121 52
62 104 68

Matrix C:product of A and B
1173 1918 1031
2383 3474 1700
5656 6914 3318
329デフォルトの名無しさん:2005/06/14(火) 13:04:04
>>324
どうもありがとうございました。
間に合いそうです。
330デフォルトの名無しさん:2005/06/14(火) 13:57:28
>>327
上から11行目がおかしい。
331デフォルトの名無しさん:2005/06/14(火) 15:10:10
[1] 授業単元: プログラムC
[2] 問題文(含コード&リンク):
プログラムを入力し、最も長い行を出力せよ。
最も長い行が複数存在するときには初めて現れるものを出力すること。
strcpyという関数がstring.hにあるのでそれを利用すること。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年6月14日24:00まで
332309:2005/06/14(火) 15:16:47
>>311
丁寧なご回答、ありがとうございました。
333デフォルトの名無しさん:2005/06/14(火) 15:25:47
>>331
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char s1[512], s2[512];
int len;

len = 0;
while (fgets(s1, 512, stdin) != NULL) {
if (strlen(s1) > len) {
len = strlen(s1);
strcpy(s2, s1);
}
}

printf("%s", s2);

return 0;
}
334デフォルトの名無しさん:2005/06/14(火) 15:30:34
>>333
ありがとうございました。
335デフォルトの名無しさん:2005/06/14(火) 21:00:50
もう一問お願いします。
[1] 授業単元: プログラムC
[2] 問題文(含コード&リンク):
プログラムを入力し、どこかに数字が入ってる行のみ出力するプログラム
を作成せよ。ctype.hには1文字を引数としてその数字があるときに1、
そうでないときに0を返す関数int isdigit(char c)があるのでそれを利用してもよい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年6月14日24:00まで
336デフォルトの名無しさん:2005/06/14(火) 21:34:11
>>335
#include <stdio.h>
#include <ctype.h>
int main()
{
  char buf[256], *p;
  while(fgets(buf, sizeof(buf),stdin))
  {
    for(p = buf; *p !='\0'; ++p)
    {
      if(isdigit(*p))
      {
        fputs(buf, stdout);
        break;
      }
    }
  }
  return 0;
}

実行しかた。リダイレクトで
a.exe < program.c
337デフォルトの名無しさん:2005/06/14(火) 21:36:45
>>336
char *pでisdigit(*p)はやっちゃいかん

isdigit()の通常の実装なら、8bit目立ってる文字つっこんだら
未定義動作になるぞ
338デフォルトの名無しさん:2005/06/14(火) 22:12:21
>>336
一行ごとの処理になってないじゃん
339デフォルトの名無しさん:2005/06/14(火) 22:40:48
>>335
#include <stdio.h>
int main( void )
{
char ch;
int flag = 0;
unsigned long pos, head;

pos = head = ftell( stdin );
while( ch = getchar() ){
if( '0' <= ch && ch <= '9' ){
flag = 1;
continue;
}
if( ( ch == '\n' ) || ( ch == EOF ) ){
pos = ftell( stdin );
if( flag ){
flag = 0;
fseek( stdin, head, SEEK_SET );
while( ( ( ch = getchar() ) != '\n' ) && ( ch != EOF ) ){
putchar( ch );
}
putchar( '\n' );
}
if( ch == EOF ) break;
head = pos;
}
}
return 0;
}
340デフォルトの名無しさん:2005/06/14(火) 22:54:55
[1]授業単位:基本プログラミング
[2]以下のように出力するプログラムを作成せよ、mは一行に印字する文字数
(奇数行は"*"が先で偶数行は"_"が先)、nは行数とし、それぞれ整数型変数として定義し、
値を入力するものとする。ただし、"*_*_*_"のように文字列を登録して印字する方法は使用しないこと。

<実行例>
mとnを入力してください:5 3
*_*_*
_*_*_
*_*_*

[3]環境
[3.1]OS WindowsXP HomeEd
[3.2]コンパイラバージョン 不明
[3.3]言語 C++

[4]期限 2005.6.17(金)まで
[5]習っているところ
if,for,while,do-whileの繰り返し制御まで。書き出しは#include<iostream>からでお願いします。
341デフォルトの名無しさん:2005/06/14(火) 23:09:38
>>340
#include <iostream>
using namespace std;
int main( void )
{
   int m, n;
   int i, j;
   char ch[2] = {'*', '_'};
   cout << "mとnを入力してください: ";
   cin >> m;
   cin >> n;
   for( i=0; i<n; i++ ){
      for( j=0; j<m; j++ ) cout << ch[(i+j)%2];
      cout << '\n';
   }
   return 0;
}
342デフォルトの名無しさん:2005/06/15(水) 00:22:28
[1] 授業単元: アルゴリズム論
[2] 問題文(含コード&リンク):

下のプログラムにデータaの削除を行う関数 void delete(int a)
を作って追加せよ。

#include<stdio.h>
#include<malloc.h>
struct cell{
int node;
struct cell *next;
} header;
void insert(int a);
main(void){
int a,i;
struct cell *p;
for(i=0;i<3;i++){
scanf("%d",&a);
insert(a);
}
p=header.next;
while(p!=NULL){
printf("%5d\n",p->node);
p=p->next;
}
}
void insert(int a){
struct cell *p,*q,*n;
343342続き:2005/06/15(水) 00:22:57
p=header.next;
q=&header;
while(p!=NULL && a>p->node){
q=p;
p=p->next;
}
n=malloc(sizeof(struct cell));
n->next=p;
n->node=a;
q->next=n;
}

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C言語
[4] 期限:6月15日まで
[5] その他の制限:どこまで習っているか、等々

どなたかご教授ください。
344デフォルトの名無しさん:2005/06/15(水) 00:46:51
【質問テンプレ】
[1] 授業単元: 4
[2] 問題文(含コード&リンク):
  パソコンに同時に接続されている二つのマウスのそれぞれを、
  単一のディスプレイ上に表示されている二つのマウスカーソルのそれぞれに
  一対一で対応させて、
  個別に動かせることを特徴とするプログラム。
[3] 環境
 [3.1] OS:WinXP,2k
 [3.2] コンパイラ(バージョン):任意
 [3.3] 言語:C C++ C#の何れかの一
[4] 期限:2005年09月01日16:20まで
[5] その他の制限:
   オブジェクト指向型OK
   C,C++,C#は一通り昨年度の授業でやったつ森です。
   CはアドレスOK,C++は承継バンバン

ご多忙中申し訳ございませんが、宜しくお願い致します。
345344:2005/06/15(水) 00:50:03
言葉足らずでした。

  単一のパソコンに同時に接続されている二つのマウスのそれぞれを、
  当該パソコンに接続された単一のディスプレイ上に表示されている二つのマウスカーソルのそれぞれに
  一対一で対応させて、
  当該二つのマウスカーソルを上記二つのマウスで個別に動かせることを特徴とするプログラム。
346344:2005/06/15(水) 01:00:05
再びすみません。
もうなんか漠然とした課題でほんとすみません。

【質問テンプレ】
[1] 授業単元: 4
[2] 問題文(含コード&リンク):
  単一のパソコンに同時に接続されている二つのキーボードのそれぞれを、
  当該パソコンに接続された単一のディスプレイ上に表示されている二つの文字入力カーソルのそれぞれに
  一対一で対応させて、
  当該二つの文字入力カーソルにおいて上記二つのキーボードで個別に文字を入力できることを特徴とするプログラム。

  上記プログラムにおいて、日本語入力が可能なことを特徴とするプログラム。
[3] 環境
 [3.1] OS:WinXP,2k
 [3.2] コンパイラ(バージョン):任意
 [3.3] 言語:C C++ C#の何れかの一
[4] 期限:2005年12月23日16:20まで
[5] その他の制限: 334と同じです。
347工大太郎:2005/06/15(水) 01:31:02
[1] 授業単元:
[2] 問題文(含コード&リンク): データをファイルから読み込みpointの平均およびgapの平均をファイルに書き込みなさい。
データ:alice  97 3.6 
    bob    88 3.2
    charlie    69 2.8 
    dick   100 2.1 
    eve    55 2.4
[3] 環境
 [3.1] OS:Windowsxp
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月15日
[5] その他の制限:よろしくお願いします。
348デフォルトの名無しさん:2005/06/15(水) 01:48:09
#include <stdio.h>
#include <stdlib.h>
#define NUM 6
int main() {
  FILE *handle;
  char name[NUM][256];
  int point[NUM];
  float gap[NUM];
  int i,avr_point = 0;
  float avr_gap = 0.0f;
  if((handle = fopen("data.txt","r")) == NULL) exit(1);
  for(i=0;i<6;i++){
    fscanf(handle, "%s %d %f",&name[i], &point[i], &gap[i]);
    avr_point += point[i];
    avr_gap += gap[i];
  }
  fclose(handle);
  avr_point /= NUM;
  avr_gap /= NUM;
  if((handle = fopen("result.txt","w")) == NULL) exit(1);
  fprintf(handle, "avr_point=%d, avr_gap=%f\n", avr_point, avr_gap);
  fclose(handle);
  return 0;
}
349デフォルトの名無しさん:2005/06/15(水) 01:49:01
実験したファイルの中身

kaneda 63 2.5
tetuo 78 4.5
kei 54 3.8
masaru 92 5.2
takashi 75 3.5
kiyoko 44 1.5
350デフォルトの名無しさん:2005/06/15(水) 01:52:33
>>350
アキラ…
351デフォルトの名無しさん:2005/06/15(水) 05:00:01
>>348
>>347のデータは全角だぞ。
352デフォルトの名無しさん:2005/06/15(水) 09:00:50
>>341
ありがとうごさいます。ちゃんと動きました。
353デフォルトの名無しさん:2005/06/15(水) 10:04:03
[1] 授業単元:プログラミング演習I
[2] 問題文:
自然数nを入力して、n以下の全ての素数を表示するプログラムを作成 しなさい。
(ある自然数nが素数かどうかを判断するには、2 からn-1 までの数で割り切れるかどうかを判断すれば良い。)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6/21まで
[5] その他の制限:制御構造(条件分岐と繰り返し)まで
for文とif文を使って作成するようです。

どなたかご教授お願いします。
354277:2005/06/15(水) 10:34:27
>>279
自分で表示したらエラーが沢山でてしまったので
全文よろしくおねがいします
355デフォルトの名無しさん:2005/06/15(水) 10:59:24
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
8−queenの解を一つ表示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:imac
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年6月15日13:00まで
[5] その他の制限:
次のようなプログラムを作成したのですが、実行すると何故か「7(改行)」とだけ出力されます。Print文を丸ごと抜いて実行しても結果は変わりません。どこがおかしいかわからないので、問題点の指摘をお願いします。
#include<stdio.h>

int z = 0;
int save[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; //0以外の数字

int ret(int kazu[8], int a){ //効き筋にいない場所をセーブする関数
356デフォルトの名無しさん:2005/06/15(水) 10:59:41
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
8−queenの解を一つ表示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:imac
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年6月15日13:00まで
[5] その他の制限:
次のようなプログラムを作成したのですが、実行すると何故か「7(改行)」とだけ出力されます。Print文を丸ごと抜いて実行しても結果は変わりません。どこがおかしいかわからないので、問題点の指摘をお願いします。
#include<stdio.h>

int z = 0;
int save[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; //0以外の数字

int ret(int kazu[8], int a){ //効き筋にいない場所をセーブする関数
357デフォルトの名無しさん:2005/06/15(水) 11:00:13
int ret(int kazu[8], int a){ //効き筋にいない場所をセーブする関数
g[y-1]= save[x];
ret(g, y);
if(ret(g, y)!=-1){
for(v=0; v<8; v++){
if(save[v]!=-1){
g[y] = v;
return 0;
}
}
}
}
else ret(g, y-1); //戻った候補が不適だったらやり直し
}
ret(g, y-2); //一つ前に戻って候補が見つからなかった場合はさらにもう一つ戻る
}
else for(v=0; v<8; v++){ //バグがなければそのまま適用
if(save[v]!=-1){
g[y] = v;
}
}
}


int main(){

int m, n, l, o, p, www[8]; //列を添字で表現

printf("input the first point you want place queen\n");
scanf("%d", &www[0]); //初期配置の決定

for(m=1; m<8; m++){
358デフォルトの名無しさん:2005/06/15(水) 11:00:31
ret(www, m);
back(www, m, l);

z = 0;
for(o=0;o<8;o++){
save[o] = -1;
} //初期化
}
for(p=0; p<8; p++){
printf("%d\n", www[p]);
return 0;
}
}


359デフォルトの名無しさん:2005/06/15(水) 11:04:48
>>356-358です。
少しかぶりました。すいません。
>>356の >int ret(int kazu[8], int a){ //効き筋にいない場所をセーブする関数
ここは削除してください。
360174:2005/06/15(水) 12:36:32
すみません、-lmでコンパイルはできたのですが
./ファイル名でも./a.outでも実行できません(><)
なんでかわかりますか?
361353:2005/06/15(水) 13:09:39
[1] 授業単元:プログラミング演習I
[2] 問題文:
t ∈ [0, 6.28] の区間で x が 0 から 0.01 刻みずつ +6.28 まで
変化するものとして
x(t) = exp( 0.5 * t ) * cos( 4.0 * t )
y(t) = exp( 0.5 * t ) * sin( 4.0 * t )
の x-y データはどのようなグラフになるか。
プログラムのみ答えよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6/21まで
[5] その他の制限:for文を使ってください。

353の問題はさっき自力でやったら解けたので、こっちの問題を
どなたかご教授お願いします。
362デフォルトの名無しさん:2005/06/15(水) 13:15:23
>>360
コマンドラインを晒せ。

>>359
ソースはアップローダに貼れ。
main()からのreturnの場所に注意。
363デフォルトの名無しさん:2005/06/15(水) 13:19:59
#include <stdio.h>
#include <math.h>

int main()
{
double t;

for (t = 0.0; t <= 6.28; t += 0.01) {
printf("%lf %lf\n", exp(0.5 * t) * cos(4.0 * t), exp(0.5 * t) * sin(4.0 * t));
}

return 0;
}

364デフォルトの名無しさん:2005/06/15(水) 13:20:21
>>361
問題の意味がわからん
プログラムが自分の意志でグラフに対する所感を述べるようにするのか?
main(){
printf("このグラフは美しいと思います\n");
}
365デフォルトの名無しさん:2005/06/15(水) 13:28:42
[1] 授業単元: c++
[2]
#include <stdio.h>

#define N 256
void main(void){
char str[N], c[N];
int count[N];
printf("文字列を入力 "); gets(str);

int i=0,j=0,k,check;
while( !(str[i]=='\0') ){
for(k=0,check=0; k<j; k++){
if(str[i]==c[k]){
check = 1;
count[k]++;
break;
}
}
if(check==0){
c[j]=str[i];
count[j]=1;
j++;
}
i++;
}
for(k=0; k<j; k++){
printf(" %c : %d \n", c[k], count[k]);
}
}
366デフォルトの名無しさん:2005/06/15(水) 13:29:23
以上のプログラムは
@適当な長さの文字列をキー入力する。
Aどの文字が何回出現しているかをカウントして、出現文字とその出現回数を出力する。


このプログラムについて、出現頻度の多い順にソートして結果を出力するプログラムに書き換えなさい。ただし、ソートする箇所については、関数を用いること。
プログラムの仕様は以下の通りです。

(1)ソートを行う関数は、文字配列のポインタ、文字の頻度配列のポインタ、文字列のサイズの3つを受け取り、頻度順にソートするものとする。関数の名前は適当につけて構わない。
(2)ソートを行う関数を main関数内で呼び出して利用すること。
(3)ソートは、頻度の大きい順から出力されるようにすること。


[結果の表示例]
入力文字列: aabbbbcccccadd

出力表示
c : 5
b : 4
a : 3
d : 2

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):Visual c++
 [3.3] 言語:C++
[4] 期限:16日
長くてなって申し訳ありません。よろしくお願いします。



367174:2005/06/15(水) 13:29:42
>>362
コマンドラインがわかんないんです
368デフォルトの名無しさん:2005/06/15(水) 13:38:53
>>367
>すみません、-lmでコンパイルはできたのですが
その、コンパイルしたときのコマンドラインを晒せ。
369デフォルトの名無しさん:2005/06/15(水) 13:55:42
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):
成績表のプログラムを可変長配列を用いて作成しなさい。ただし、可変長配列の構造体は以下の通りとする。
struct array {
 struct student *data;
 int N;
 int n;
};
 [3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VC++ 6.0
 [3.3] 言語:C
[4] 期限:あと1時間ほど・・・
[5] その他の制限:構造体までです。

370369:2005/06/15(水) 13:56:32
struct student {
char name[20];
int kokugo;
int sansu;
};
struct student read_student( ) {
struct student a;
scanf("%s", a.name);
scanf("%d", &a.kokugo);
scanf("%d", &a.sansu);
return a;
}
void writeln_student(struct student a) {
printf("%s %d %d\n", a.name, a.kokugo, a.sansu);
}
void main() {
struct student t[100];
int N=100, nt=0;
int i, n;
scanf("%d", &n);
for(i=0; i<n; i++){
i[i] = read_student( );
}
nt = n;
for(i=0; i<nt; i++) {
writeln_student(t[i]);
}
}
371369:2005/06/15(水) 13:57:11
#include <stdio.h>
#include <stdlib.h>
struct array {
int *data;
int N;
int n;
};
struct array realloc_array(struct array a, int N) {
a.data = (int *)realloc(a.data, N*sizeof(int));
a.N = N;
return a;
}
void free_array(struct array a) {
free(a.data);
}
void main() {
struct array a = {NULL,0,0};
int n, i;
for(i=0; ; i++) {
scanf("%d", &n);
if (n < 0) break;
a = realloc_array(a, i+1);
a.data[i] = n;
a.n = i + 1;
}
for(i=0; i<a.n; i++) {
printf("%d", a.data[i]);
}
free_array(a);
}
372デフォルトの名無しさん:2005/06/15(水) 13:58:23
1つめのプログラムが成績表のもの。
2つめは可変長配列のもの。

長くなりましたが、宜しくお願いします。
373デフォルトの名無しさん:2005/06/15(水) 14:06:58
なんでこうもアップローダを使いたがらないんだろうか……
374174:2005/06/15(水) 14:18:38
>>368
cc abc.c -o abc -lm
これでいいんでしょうか?
375デフォルトの名無しさん:2005/06/15(水) 14:22:19
>>372
ここまで出来ててなにが出来ないんだ??
376デフォルトの名無しさん:2005/06/15(水) 14:22:59
>>356
↓は全部出す奴。
#include <stdio.h>
void
eq(int s, int u, int m[], int l, int r)
{
if (!u) {
int i, j;
putchar('\n');
for (i = 0; i < 8; i++) {
for (j = 0x8000; j & 0xff00; j >>= 1)
putchar(m[i]&j ? '!' : '.');
putchar('\n');
}
} else {
int uu = u & ~((l>>s)|(r<<s));
while (uu) {
int b = uu&~(uu-1);
uu ^= b;
m[s] = b;
eq(s+1, u^b, m, l|(b<<s), r|(b>>s));
}
}
}
int
main()
{
int m[8];
eq(0, 0xff00, m, 0, 0);
return 0;
}
377デフォルトの名無しさん:2005/06/15(水) 14:24:27
>>374
そのコマンドを実行して、正しくコンパイル&リンクがなされている(エラーが出ない)ならば、
./abcで実行できる。ただし、>175も>177もいきなり(なんのメッセージもなしで)入力から始まるから注意。
378デフォルトの名無しさん:2005/06/15(水) 14:28:58
[1] プログラミング
[2] C 言語を使用して、方程式 ax^2+bx+c=0 を満たす x を求めるプログラムを作成しなさい。
入力 a、b、c がどのような値(0を含む) になっても正しい値が出るようにしなさい。
[3] 環境
 [3.1] Windows
 [3.2] gcc
 [3.3] C
[4] 2005年6月15日
[5] >>174の係数があらゆる場合に対応した場合のプログラムです。
習いたてでif文など基本的なことしかわかりません。
よろしくお願いします。
379デフォルトの名無しさん:2005/06/15(水) 14:35:25
>>377
あわわ、適当に数字を入れたらプログラムが動きました。
メッセージが何もでないからバグかと思ってました。
ありがとうございます。
380デフォルトの名無しさん:2005/06/15(水) 14:36:41
>>378
aが0の場合は1次式を解く。そうでなければ>177。
381デフォルトの名無しさん:2005/06/15(水) 14:46:24
>>379
失礼な奴だ
382デフォルトの名無しさん:2005/06/15(水) 14:48:52
>>378
aが0かつbが0なら解なし
383デフォルトの名無しさん:2005/06/15(水) 14:49:39
>>379
ちょおま・・・scanfも分からないようじゃあちょっと厳しいんじゃないか?
384デフォルトの名無しさん:2005/06/15(水) 15:04:42
>>380,382
早レスありがとうございます。
とりあえずa=0の場合を考えて>>177のプログラムの12〜15行目に条件を追加して
if (a==0) {
x1 = - c / b;
printf("%f\n", x1)
} else {


}
}
return 0;
}
としたらコンパイルできなかったのですが、どこかおかしいでしょうか?
385デフォルトの名無しさん:2005/06/15(水) 15:05:33
エラーメッセージくらい書けよな
386デフォルトの名無しさん:2005/06/15(水) 15:08:12
すみませんでした。
eport222.c: 関数 `main' 内:
eport222.c:13: error: `x1' undeclared (first use in this function)
eport222.c:13: error: (Each undeclared identifier is reported only once
eport222.c:13: error: for each function it appears in.)
eport222.c:15: error: 文法エラー before '}' token
です。
387デフォルトの名無しさん:2005/06/15(水) 15:13:29
     |        |        |   |
     |        | ∧_∧ |   |
     |        |( ´∀`)つ ミ |
     |        |/ ⊃  ノ |   |
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |    ミ 匙
388デフォルトの名無しさん:2005/06/15(水) 15:14:24
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=556
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): Visual C++
 [3.3] 言語:C
[4] 期限:6/17 PM9:00まで
どうぞよろしくおねがいします。
389デフォルトの名無しさん:2005/06/15(水) 15:26:16
>>386
x1を定義してない
390デフォルトの名無しさん:2005/06/15(水) 15:32:30
391デフォルトの名無しさん:2005/06/15(水) 15:35:53
>>389
あらかじめx1を定義し直したらうまく動作しました。
これと同じ要領でやっていきます。
ありがとうございました。
392361:2005/06/15(水) 16:01:24
>>363
レスありがとうございます。
ただ、変化するのはxなのですが。

>>364
わかりづらくてすいません。
つまり、x-yデータを吐き出して、プログラムを作成する問題です。
393デフォルトの名無しさん:2005/06/15(水) 16:23:30
>>392
>363はxyを算出して表示しているように見えるのだが。
後は何がしたいのかね。
394デフォルトの名無しさん:2005/06/15(水) 16:44:45
>>395
あ、そうですね。
ちょっと自分、勘違いしていたみたいです。
ご指摘ありがとうございます。
395394=392:2005/06/15(水) 16:46:05
すいません
>>395
>>393の間違いです。
396デフォルトの名無しさん:2005/06/15(水) 17:15:11
宿題ですが....。
問題:
文字列をキーボードから入力し、小文字のアルファベットならば大文字に、
大文字ならば小文字に変換して出力しなさい。
補足:'A'-'a'の結果を加え、toupper(ctype.hを#includeする)を
使用しなさい。
出力例:
   入力 ? abCDefGHiJKLMnopQrStu
出力   ABcdEFghIJklmNOPqRsTu
お願いします。
397デフォルトの名無しさん:2005/06/15(水) 17:44:19
>補足:'A'-'a'の結果を加え、toupper(ctype.hを#includeする)を
>使用しなさい。

面倒だな。
オレだったらこうするな。

if ( isalpha( c ) ) c ^= 0x20;
398デフォルトの名無しさん:2005/06/15(水) 20:18:00
399365:2005/06/15(水) 21:02:59
>>390
有難うございます、助かりました!
400デフォルトの名無しさん:2005/06/15(水) 22:42:02
>>376
キミすっごいな
401デフォルトの名無しさん:2005/06/15(水) 23:31:22
>>397
EBCDIC。。。
402388:2005/06/16(木) 00:03:31
>>398さん、すごく参考になります。ありがとうございます!
403デフォルトの名無しさん:2005/06/16(木) 00:50:52
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): アフィン暗号の暗号プログラムおよび、復号プログラムの作成。
[3] 環境
 [3.1] OS:mac
 [3.2] コンパイラ(バージョン):cc
 [3.3] 言語:C
[4] 期限:2005年06月16日05:00まで
404デフォルトの名無しさん:2005/06/16(木) 02:18:16
[1] 授業単元:乱数
[2] 問題文(含コード&リンク):1から10までの整数をランダムに1つずつ選択するプログラムを作成せよ.
                 但し,1度選択した整数は再度選択できないものとする.
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): C++6.0
 [3.3] 言語:C
[4] 期限:2005年6月17日12:00まで
[5] その他の制限:乱数の種は0とする.

必修科目の課題なのですがさっぱりわかりません。
1から10までを









10
と表示するところまではできたのですが・・・・。
自分でいろいろ調べながらやってみたのですが、余計に混乱してしまい困っています。
力を貸してください。
405デフォルトの名無しさん:2005/06/16(木) 02:42:02
>1から10までの整数をランダムに1つずつ選択する
案1)1〜10を格納した10個の配列をランダムシャフルした後、先頭から順番に取り出す
406404:2005/06/16(木) 03:35:31
>>405
早速のレスありがとうございます。
>案1)1〜10を格納した10個の配列をランダムシャフルした後、先頭から順番に取り出す
一応そういう流れでかんがえています。
とりあえず現在の状態
ttp://www.strangeworld.info/uploader/download.php?file=7535
と前回中間発表
ttp://www.strangeworld.info/uploader/download.php?file=7536
があったのでうpしておきます。
407デフォルトの名無しさん:2005/06/16(木) 03:50:30
>>406

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

void swap(int *a, int *b)
{
    int tmp;
    tmp = *a,  *a = *b,  *b = tmp;
}
void random_shuffle(int *start, int *last)
{
    int *next = start;
    size_t index;

    for (index = 2; ++next != last; ++index)
        swap(next, start + (rand() % index));
}
main()
{
    int i;
    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    srand(0);
    random_shuffle(array, array+10);
    for (i = 0; i < 10; ++i)
        printf("%d\n", array[i]);
}
408404:2005/06/16(木) 04:06:47
>>407
ありがとうございます。
学校行かないとC++ないので、明日学校で早速動かしてみます。
409デフォルトの名無しさん:2005/06/16(木) 04:19:29
>>403
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/559.c

ほんとにこういうのでいいのか心配
410デフォルトの名無しさん:2005/06/16(木) 11:07:34
>>401
0x20 は元々シフトキーの状態を表すものから来てるので
多分 EBCDIC でも大丈夫。
411デフォルトの名無しさん:2005/06/16(木) 11:31:51
412デフォルトの名無しさん:2005/06/16(木) 11:55:01
413デフォルトの名無しさん:2005/06/16(木) 11:56:01
>>411
ごめん、a->A しかみてなかった。
414149:2005/06/16(木) 16:12:02
149です155さんにプログラムを作っていただいて大変感謝しています。
155さんのプログラムをコンパイルしてみたのですが最後の部分で「入力の最後に 構文解析エラー」
となってしまうのですが、どこをどういじったらいいのでしょうか?タイプミスもありませんし困っています教えて下さい

415デフォルトの名無しさん:2005/06/16(木) 16:19:51
>>414
>155のソースをダウンロードしてファイル名を変えてコンパイルしたら問題なくコンパイルできたよ。
自分のタイピング能力なんかを信用しないで↑この方法なりコピペなりでやり直して味噌。
416デフォルトの名無しさん:2005/06/16(木) 16:26:05
最後に改行をブチこんだら通ったりする
417155:2005/06/16(木) 16:57:12
>>414
えーっと、>>155だけど、
>>149への回答で、エラーメッセージに[入力の最後に 構文解析エラー]という文は入ってないよ。
自分の番号をもう一回確認してみて。
418デフォルトの名無しさん:2005/06/16(木) 17:43:19
>>404
クーポンコレクターズ問題を応用すると次のプログラムでも高い確率で出力できるよ。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 10
main(){
int a[N],i,r;
for(i=0;i<N;i++){
a[i]=1;
}
srand(time(NULL));
for(i=0;i<(log(N)/log(2)+1)*N;i++){
r=(int) ((double)N*rand()/(RAND_MAX+1.0));
if(a[r]){
printf("%d ",r+1);
a[r]=0;
}
}
}
419デフォルトの名無しさん:2005/06/16(木) 18:16:08
OS:Windows/ 
コンパイラ(バージョン): C++6.0
言語:C++
問題:1から100までの素数をbreakを使わずに多重ループを使って表示するプログラム
この前勉強し始めたばかりです 17日の昼1時ぐらいまでに誰かお願いします
420デフォルトの名無しさん:2005/06/16(木) 18:23:37
>>419
breakありなら出来てるんだエロ
breakのところでループカウンタに100ぶちこんでcontinueしろ
421デフォルトの名無しさん:2005/06/16(木) 18:32:05
>>419
// やってみたら確かにbreak要らんわ
#include <iostream>
int main()
{
for (int ic = 2; ic <= 100; ++ic) {
int cc;
for (cc = ic - 1; ic % cc != 0 && cc > 1; --cc) {
}
if (cc <= 1) {
std::cout << ic << ' ';
}
}
return 0;
}
422デフォルトの名無しさん:2005/06/16(木) 20:25:42
>>419
エラトステネスのふるいをやってみた
#include <iostream>
#include <vector>
#include <cmath>
int main(){
const int n=100;
std::vector<int> a(n,1);
for(int i=2;i<=std::sqrt((double)n);i++)
for(int j=i; i*j<=n ; j++)
a[i*j-1]=0;
for(int i=1;i<=n;i++)
if(a[i]) std::cout << i+1 << std::endl;
return 0;
}
423デフォルトの名無しさん:2005/06/16(木) 21:23:26
[1] 授業単元:プログラミング技術
[2] 問題文(含コード&リンク):
円周率πは、π=4(1-1/3+1/5-1/7+・・・)
であることが知られている。これを利用して
4(1-1/3+1/5-1/7+・・・+1/1997-1/1999)
を計算し、πの近似値を求めるプログラムを作成せよ
ただし型変換の際には以下の記述のような方法で記述すること
int i = 1;
float f = (float)i;
float f2 = float(i);
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:できれば本日中まで
[5] その他の制限:
どうか宜しくお願い致します。
424デフォルトの名無しさん:2005/06/16(木) 21:43:29
>>423
# include <iostream>
int main()
{
    float val = 0.0f;
    for(int den = 1; den <= 1999; den += 4)
    {
        val += 1.0f / float(den);
        val -= 1.0f / float(den + 2);
    }
    std::cout << 4*val;
}
425デフォルトの名無しさん:2005/06/16(木) 21:56:36
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
学生情報をファイル(.dat)から読み込み学科ごとの
英語、数学、国語の合計点と平均点を計算させる。
また学生情報は学科ごとにまとめなさい。

学科  学番  氏名  英語  数学  国語
1    001   A   90   80   90
1    002   B   80   80   70
2    003   C   80   60   80
2    004   D   60   70   90  
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年06月19日まで
[5] while まで習っています。また課題はフローチャートも
  作りなさいと言う状況ですので作っていただけると
  ありがたいです。覚えが悪く愚かな私ですが
  よろしくお願いいたします。
426423:2005/06/16(木) 22:18:22
>>424
素早いレスに感謝します。
どうもありがとうございました。
427デフォルトの名無しさん:2005/06/17(金) 00:40:46
>>425
whileまでしか習ってないのにこんなの出来るのか?
428デフォルトの名無しさん:2005/06/17(金) 00:46:46
テンプレに追加しないか?
[6]既習:for,while,do〜while,break,continue,if,else,switch,struct,class,new
429デフォルトの名無しさん:2005/06/17(金) 00:52:52
>>427
先生がかなり最悪と評判の人物ですからかもしれないです。
430デフォルトの名無しさん:2005/06/17(金) 00:59:28
[1] 授業単元:
[2] 問題文(含コード&リンク):
以下のサンプルコードに対し、次のように拡張せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/560.txt
・月、日ともに初期値は1とする
・月、日の状態を出力するメンバ関数print()を追加する
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C++
[4] 期限:05年06月17日AM8:00まで
[5] その他の制限:
お力添えをいただきたいと思います。よろしくお願いします。
431デフォルトの名無しさん:2005/06/17(金) 01:07:38
>>430

struct MyDate {
  int month;
  int day;
  MyDate() month(1), day(1) {}
  void print() { std::cout << month << '/' << day }
};
432デフォルトの名無しさん:2005/06/17(金) 01:20:22
>>425 できるだけ平易にやってみたけど,まだやってないのがあったら言っとくれ.

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/561.txt
433デフォルトの名無しさん:2005/06/17(金) 01:22:12
>>396
#include<stdio.h>
#include<ctype.h>
void main(void)
{
int key;
int i;
char str[50];
i = 0;
while(1) {
       key = getch();
putchar(key);

if (key == 0x0d) {
str[i] = '\0';
break;
}
else if ((key >= 0x61) && (key <= 0x7a)) {
key = toupper(key);
}
else if ((key >= 0x41) && (key <= 0x5a)) {
key = tolower(key);
}
str[i] = (char)key;
i++;
}
printf("\n%s",str);
}

微妙?w
434432:2005/06/17(金) 01:24:31
あ,面倒なんで入力のデータは >>425 の二行目からの形式を,半角スペース区切りで
標準入力から読むことにした.どうしてもファイルから読みたいなら fscanf にでも変えとくれ.
435デフォルトの名無しさん:2005/06/17(金) 01:27:44
getchのとこ全角空白はいったったから
消してコンパイルしてねw
436430:2005/06/17(金) 01:37:43
お答えいただきありがとうございます
連投稿で申し訳ないのですが
[1] 授業単元:
[2] 問題文(含コード&リンク):
このMyDate型を引数とし、1月1日からの日数を返すような関数
month_dayを作成し、例に挙げるプログラムを完成せよ。
ただし、閏年は考慮しなくてよい。(この場合のプログラム
の結果は「121 Days」となる。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C++
[4] 期限:05年06月17日AM8:00まで
[5] その他の制限:
どうしてもなのでお力添えをいただきたいと思います。
よろしくお願いします。ほんとうにすみません・・・
437430:2005/06/17(金) 01:38:27
#include <stdio.h>

struct MyDate {
int month; /* 月 */
int day; /* 日 */
};

int month_day(struct MyDate date)
{

/* ここに処理を書く */

}

int main(int, char*[])
{
struct Date date;
int Days;

date.month = 5;
date.day = 1;
Days = month_day(date);

pirintf("%d Days\n", Days);
return 0;
}
438404:2005/06/17(金) 02:04:55
>>418
ありがとうございます。
クーポンコレクターズ問題というのが何なのかわからないのですが助かりました。
439デフォルトの名無しさん:2005/06/17(金) 02:05:16
[1] 授業単元: デバック
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/562.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): Borland C
 [3.3] 言語:C
[4] 期限:本日中
このソースだと「ファイルに固定長のデータしか書き出せない」ので
「VLI情報を使い、個別にデータを書き出して可変長のレコードを実現する」ソースにしたいです。
440デフォルトの名無しさん:2005/06/17(金) 02:14:52
>>430
こんな感じかな?
#include <stdio.h> 

struct MyDate { 
int month; /* 月 */ 
int day; /* 日 */ 
}; 

int month_day(struct MyDate date)
                /*0 1  2  3  4  5  6  7  8  9 10 11 12*/
{   int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int sum=0,i;
    for(i=0;i<date.month;i++) sum += days[i];
    return sum+date.day;


int main(int argc, char *args[]){ 
struct MyDate date; 
int Days; 

date.month = 5; 
date.day = 1; 
Days = month_day(date); 

printf("%d Days\n", Days); 
return 0; 
441デフォルトの名無しさん:2005/06/17(金) 02:22:39
[1] 授業単元: プログラミング基礎
[2] 問題文
http://ame.dip.jp/upload/1118/942426.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):gcc?
 [3.3] 言語:C
[4] 期限:6/17 PM4:20まで
どうぞよろしくおねがいします。
442デフォルトの名無しさん:2005/06/17(金) 02:34:33
443デフォルトの名無しさん:2005/06/17(金) 02:38:59
>>439
VLI情報ってなぁに??
444デフォルトの名無しさん:2005/06/17(金) 02:41:45
Very Long Instructionset
445デフォルトの名無しさん:2005/06/17(金) 02:42:58
>>442
すいません、専用でしたね
Not foundになるのですが・・・
446デフォルトの名無しさん:2005/06/17(金) 02:44:02
VeryLoveisImportant
447デフォルトの名無しさん:2005/06/17(金) 02:45:58
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
これで行けないなら>>1を参照してみてくれ
448デフォルトの名無しさん:2005/06/17(金) 02:48:17
>>432
ありがとうございます。
明日とりあえず。実行してみます。
足りなかったらまた聞きに来たいと思いますので。
よろしくお願いいたします。
449デフォルトの名無しさん:2005/06/17(金) 02:49:26
VaticalLabIntersect
450デフォルトの名無しさん:2005/06/17(金) 02:50:09
無理みたいなのでここに張りますorz
次のプログラムは共通変数を用いて関数の値の受け渡しをしているが、これを全て因数での値を受け渡しをするように変更せよ。なお値を返すときはポインタ変数を使う
#include <stdio.h>
void readdata(void)
void calculate(void)

int x, y, wa, sa, seki, sho, joyo

451デフォルトの名無しさん:2005/06/17(金) 02:50:35
int main(void){
readdata()
calculate()
printresult()
}

void readdata(void) {
printf("input integers (x y): ");
scanf ("%d%d", &x, &y);
}

void calculate(void)
wa = x + y;
sa = x - y;
seki = x * y;
joyo = x % y;
}

void printresult(void) {
printf("%d + %d = %d\n", x, y, wa);
printf("%d - %d = %d\n", x, y, sa);
printf("%d * %d = %d\n", x, y, seki);
printf("%d / %d = %d\n", x, y, sho);
printf("%d %% %d = %d\n", x, y, joyo);
}
452デフォルトの名無しさん:2005/06/17(金) 02:52:59
VariableLifeIrimasennka
453デフォルトの名無しさん:2005/06/17(金) 02:58:39
>>450-451
因数ってなんだーとちょっと悩んでしまった。
ひきすうでいいんだよね。
454デフォルトの名無しさん:2005/06/17(金) 02:59:10
sho
どうする?
455デフォルトの名無しさん:2005/06/17(金) 03:02:45
引数でしたorz
sho = x / y が抜けましたorz
456デフォルトの名無しさん:2005/06/17(金) 03:07:16
457デフォルトの名無しさん:2005/06/17(金) 03:09:36
>>456
さきこされたか。内容もほぼ同じなので省略。
458デフォルトの名無しさん:2005/06/17(金) 03:11:12
>>450
できれば構造体つかってまとめた方が扱いやすいと思うよ。
459デフォルトの名無しさん:2005/06/17(金) 03:15:46
>>456 これならできそうです、明日学校でやってみます。ありがとうございました。
>>458 構造体とは??
460デフォルトの名無しさん:2005/06/17(金) 03:22:53
struct _tbl{
int x, y, wa, sa, seki, sho, joyo;
}t;
461デフォルトの名無しさん:2005/06/17(金) 03:26:38
>>459
ああ、まだ習ってないんだね。
ならかまわないよ。
C言語にはそういう名前の機能があるんだよ。
462デフォルトの名無しさん:2005/06/17(金) 03:28:01
機能
w
463デフォルトの名無しさん:2005/06/17(金) 03:29:44
>>462
仕様のほうがよかったかな?
464デフォルトの名無しさん:2005/06/17(金) 03:30:56
>>461 なるほど、見たことないのでまだやってないと思いますorz
465デフォルトの名無しさん:2005/06/17(金) 03:34:01
VibrationLet'sIYAN
466デフォルトの名無しさん:2005/06/17(金) 03:39:15
VictoryLicenseItadakimasu.
467439:2005/06/17(金) 03:39:31
[1] 授業単元: デバック
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/564.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン): Borland C
 [3.3] 言語:C
[4] 期限:本日中
このソースだと「ファイルに保存したデータを読み取ることができない」のでちゃんと読み取ることができるソースにしたいです。
ヒントとして「永久保存のファイルには、ポインタでなくポインタが指す実態を保存する。また、書き出しと読み取りの両用モードでファイルをオープンする」というのが与えられました。

というかまだ勉強して1週間なんですが課題が難しい過ぎると思うのは私だけでしょうか?
468デフォルトの名無しさん:2005/06/17(金) 03:40:13
オレサマ オマエ マルカジリ
469430:2005/06/17(金) 03:50:01
すみません勘違いをしていました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/560.txt
・↑をクラスを用いて再実装。初期設定(コンストラクタを行う
・月、日ともに初期値は1とする
・月、日の状態を出力するメンバ関数print()を追加する

です
頭が混乱してきてしまったのですが
何卒お力添えをいただければと思います。よろしくお願いします。
470430:2005/06/17(金) 03:51:23
サンプルを張っておきます
class MyDate {
private:
int day,month;
public:
MyDate(int, int);

void cDay(int Day) { day = Day;}
void cMonth(int Month) {month = Month}

void print(void) {cout << day << ","<< month << "\n";}
};

MyDate::Mydate(int Day, int Month)
{
day = Day;
month = Month;
}

int main()
{
MyDate a(30,9);

return 0;
}
471430:2005/06/17(金) 03:52:27
class MyDate {
:
MyDate(int = 1, int =1);
:
};

int main()
{
MyDate date1; // 1/1 が設定される
MyDate date2(5,2); // 5/2 が設定される

return 0;
}
472439:2005/06/17(金) 03:57:52
自己解決しました。ありがとうございました。
473デフォルトの名無しさん:2005/06/17(金) 04:15:59
>>469-470
そこまでできてるのだからあとちょっとだ。
#include <iostream>
class MyDate { 
private: 
    int day,month; 
public: 
    MyDate(int Day=1, int Month=1);

    void cDay(int Day) { day = Day;} 
    void cMonth(int Month) {month = Month;} 

    void print(void) {std::cout << day << ","<< month << "\n";} 
}; 

MyDate::MyDate(int Day, int Month) 

    day = Day; 
    month = Month; 



int main() 

    MyDate a(30,9); 
    a.print();

    return 0; 
474デフォルトの名無しさん:2005/06/17(金) 04:18:17
おやすみー。
475デフォルトの名無しさん:2005/06/17(金) 04:35:54
10進数を8ビットの2進数に変換するプログラムです。
分からない点は、int binNum[8]; で2進数を宣言して、
binNum[0]を一番左binNum[7] が、一番右を格納するように
しなければいけない点です。教えて下さい。お願いします。
476デフォルトの名無しさん:2005/06/17(金) 05:16:00
>>475
各ビットが1か0を調べて格納
ビットシフト演算と
最下位ビットが1か0を調べるためnum&1とやって調べている

1101なら
1101 AND 0001 =1これを右端 1101を右にビットシフトで 0110
0110 AND 0001 =0これを右2へ 0110を右にビットシフトで 0011
0011 AND 0001 =1これを以下略

C言語でなら
#include<stdio.h>
#define BITS 8
int main(int argc,char **argv){
    int i,num,binNum[BITS]={0}; 
    printf("input num");
    scanf("%d",&num);
    for(i=0;i<BITS;i++){
        binNum[BITS-1-i]=num&1;
        num>>=1; 
    }
    for(i=0;i<BITS;i++)
        printf("%1d",binNum[i]);
    printf("\n");
    return 0;
}
改良の余地ありまくりなので適当に直すこと
477デフォルトの名無しさん:2005/06/17(金) 05:18:59
[1] 授業単元:
[2] 問題文(含コード&リンク):
以下のプログラムは、与えられた文字列を引数の回数
出力する関数「myPrint」である。
void myPrint(char *str, int n)
{
for(int i = 0; i<n ; i++){
printf("%s\n",str);
}
}
この関数に対し二番目の引数を省略した場合は一回だけ
出力するように変更を施したプログラムを作成せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C++
[4] 期限:05年06月17日AM8:00まで
[5] その他の制限:
どなたかできたらよろしくお願いします。
今日までが滅茶苦茶切羽詰ってるのでほんとうにすみません・・・
できれば文字列の入力、表示ができるようにしてもらいたいです。
478デフォルトの名無しさん:2005/06/17(金) 05:25:37
>>417

void myPrint(char *str=" ", int n=1) 

for(int i = 0; i<n ; i++){ 
printf("%s\n",str); 


じゃダメ?
479477:2005/06/17(金) 05:32:23
文字列を入力して出力できるようなプログラムに
myPrint関数を使いたいのですが使い方がわからないのです・・・
480デフォルトの名無しさん:2005/06/17(金) 05:41:51
どう入力して
どう結果が表示されるのかを教えてほしいな☆
481デフォルトの名無しさん:2005/06/17(金) 05:57:16
意図するものとは違うかもしれないが、とりあえず置いておく
#include <iostream>
using namespace std;

void myPrint(char *str, int n = 1){
for(int i = 0; i<n ; i++){
printf("%s\n",str);
}
}

int main(){
char str[120];
cin >> str;
cout << "引数を指定したとき\n";
myPrint(str, 3);
cout << "引数を指定しないとき\n";
myPrint(str);
return 0;
}
482477:2005/06/17(金) 08:01:00
大変参考になりました
どうもありがとうございました。
483デフォルトの名無しさん:2005/06/17(金) 10:10:35
14年度のC言語プログラミング能力認定試験3級の過去問をやっているんですが、回答を持っている方いませんか?
484デフォルトの名無しさん:2005/06/17(金) 10:15:40
14年度のC言語プログラミング能力認定試験3級の過去問をやっているんですが、回答を持っている方いませんか?
485デフォルトの名無しさん:2005/06/17(金) 12:08:38
486デフォルトの名無しさん:2005/06/17(金) 14:23:01
[1] 授業単元:
[2] 問題文(含コード&リンク):標準関数memcpyを使いメモり領域をコピーするプログラム
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Visual C++ Toolkit 2003
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:スピードを重視する
            コピー元とコピー先の領域が重ならないようにする。

memcpy関数を使ったプログラムはできました。
他にはmemmove関数を使えばいいと思うのですが、スピードが遅くなりますよね?
どうすればいいのでしょうか?
487425:2005/06/17(金) 14:30:25
http://deftones.web.infoseek.co.jp/cgi-bin/imgboard/img/img20050617142817.jpg
このようにやってみたのですが、main内と9行目と25行目で警告がでるのですが、
どうすればいいでしょうか?
488425:2005/06/17(金) 14:31:59
あっ、return 0;のあとに { は付けてます。
画像の関係でうつらなかったです。
489デフォルトの名無しさん:2005/06/17(金) 14:40:27
>>487
・画像を張るな画像を。
・どんな警告が出たか書け。
・コンパイラを書け。

恐らくint iの定義の位置の問題に関する警告だろうから、それなら無視してもよい。
490デフォルトの名無しさん:2005/06/17(金) 14:40:58
>>486
そう思ったら試してみたらいいでしょう。
あとはmmxとかSSE2使うくらいしか思いつかんが。
491デフォルトの名無しさん:2005/06/17(金) 15:21:45
[1]授業単元 プログラミング論
[2]範囲 関数ーポインタ
[3]期限 6月22日(水)午後5時 です
[4]C言語 コンパイラgcc

どうか作成をお願いします

以下は、ポインタの1次元配列を使った国名と首都名を結び付ける文字列テーブ
ルである。

char *na[]={"Japan Tokyo", "USA Washington", "UK London", "France
Paris", "China Beijing", "Russia Moscow", "Germany Berlin", "India New
Delhi", "Brazil Brasilia",""}

これを用いて、国名を入力すると、その首都名を表示するプログラムを作成し、
実行しなさい。

<仕様>
1、国名は、main()への引数として入力する。(例 % ./a.out France)
2、int main(int argc,char *argv[])とするならば、argv[1]は入力した国名
第一文字を指すポインタとなる。これを用いて、上記文字列テーブル (*na[])内
構成要素の国名部を対象としたマッチングを行う
3、*na[]内の要素の国名部とargv[1]によって指される入力国名が一致すれば、
前者要素の首都部を表示させる。

argv[1]によって指される入力国名の長さが処理に必要であるならば、strlen()
を使用せず、各自関数を定義して文字長を求めること。ただし、その関数のプロ
トタイプを必ず宣言しておくとともに、それには参照渡しによって引数を与える
こと、また、処理終了には、exit()を適宜使用してよい
492デフォルトの名無しさん:2005/06/17(金) 15:55:01
>>491

char *na[] = { "Japan Tokyo", "USA Washington", "UK London", "France Paris", "China Beijing", "Russia Moscow", "Germany Berlin", "India NewDelhi", "Brazil Brasilia", "" };

int main( int argc, char* argv[] )
{
int i, j;

for ( i = 0; na[ i ][ 0 ] != '\0'; i++ ) {
for ( j = 0; argv[ 1 ][ j ] != '\0'; j++ ) if ( argv[ 1 ][ j ] != na[ i ][ j ] ) break;
if ( argv[ 1 ][ j ] == '\0' ) { printf( "%s\n", &na[ i ][ j + 1 ] ); return 0; }
}
return 0;
}
493492:2005/06/17(金) 16:02:15
ごめん。ちょっと修正。

int main( int argc, char* argv[] )
{
int i, j;

if ( argc < 2 ) return 0;
for ( i = 0; na[ i ][ 0 ] != '\0'; i++ ) {
for ( j = 0; argv[ 1 ][ j ] != '\0'; j++ ) if ( argv[ 1 ][ j ] != na[ i ][ j ] ) break;
if ( argv[ 1 ][ j ] == '\0' && na[ i ][ j ] == ' ' ) { printf( "%s\n", &na[ i ][ j + 1 ] ); return 0; }
}
return 0;
}
494デフォルトの名無しさん:2005/06/17(金) 18:35:09
ここで質問する人って周りに出来る友達いないの?
いるならその友達に相談した方が速くね?
495デフォルトの名無しさん:2005/06/17(金) 18:36:33
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ビットマップで画面に線を引く問題を考えたとき。n個の実数のペア(ai,bi)がn本の直線y=aix+biを表すとします。また、ここでxの範囲は[0,1]とし、iが0からn−2の間で「(i番目の線のy)<(i+1番目の線のy)」がすべての[0,1]内のxについて成り立っているとします。
簡単に言うと図のようにどの直線も[0,1]で交わっていないということです。0 <= x >=1のある点(x,y)が与えられたとき、この点を囲む2つの直線を速く求める方法を考えよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年6月19日まで
[5] すみません。ai,biのiは実際には添え字(小文字)です。
また問題には図として、縦線がx=0とx=1の2本で、横の線が交わることのない、あみだくじのような図が載っています。なにとぞお力添えをおねがいいたします。
496デフォルトの名無しさん:2005/06/17(金) 18:52:15
つ「二分検索木」

あと、

>> 0 <= x >=1

0 <= x <= 1

な。
497デフォルトの名無しさん:2005/06/17(金) 19:21:54
>>449さん
おっしゃるとおりです。失礼しました。
498デフォルトの名無しさん:2005/06/17(金) 19:26:08
>>497
あんたは何者で、>449の何に反応してるんだ?
499デフォルトの名無しさん:2005/06/17(金) 20:05:24
int linear_search(int n, double a[], double b[], int x, int y)
{
int i;
for(i=0; i<n && y > a[i]*x+b[i]; i++);
return i;
}

int binary_search(int i, int j, double a[], double b[], int x, int y)
{
int m;
if(i+1 == j)
return i;
m = (i+j)/2;
if( y > a[m]*x+b[m] )
i=m;
else
j=m;

return binary_search(i,j,a,b,x,y);
}
500デフォルトの名無しさん:2005/06/17(金) 20:44:32
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): とにかく入力した文字を1文字ずつリスト構造に直す
プログラムを教えてほしい。ちなみに下に書いたのが俺が作った不良品
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:早ければ早いほど

typedef char elementtype;
struct node{
elementtype element;
struct node* next;
};
typedef struct node * link;
とおいて
501デフォルトの名無しさん:2005/06/17(金) 20:45:07
int main(int argc, char *argv[]){
struct node dmy={'\0',NULL}; /*NULLを終端マークにする*/
link start=&dmy; /*先頭管理用の構造体を示す*/
link wk; /*作業用*/
link ip;
link moji; /*データを示す構造体*/
char k[128];
int i,j;
ip=start;
printf("文字列を入力せよ:");
fgets(k,128,stdin);
for(i=0;k[i]!='\0';i++){
/*構造体1個分のメモリを獲保する*/
wk=(link )malloc(sizeof(struct node));
if(wk==NULL){
printf("メモリを確保できません。\n");
exit(1);
}
/*確保した構造体に文字を設定する*/
wk->element=k[i];

/*リストのチェーンの作成*/
ip->next=wk;
wk->next=NULL;
ip=wk;}
といった具合。何が悪いのかも教えてください
502デフォルトの名無しさん:2005/06/17(金) 20:50:17
>>500
何をもって「不良品」と判断したのか知らないが、
「終端マークにする」つもりのdmyを先頭にしてしまっているな。

503デフォルトの名無しさん:2005/06/17(金) 20:51:48
>>500
あまり美くはないけれども
結果としてリストにはなってると思うんだが
504デフォルトの名無しさん:2005/06/17(金) 20:52:22
struct nodeと linkの定義を書いて下さい。
505デフォルトの名無しさん:2005/06/17(金) 21:05:40
>>504
>>500にかいてあるぞ
506デフォルトの名無しさん:2005/06/17(金) 21:14:06
>>502
別にdmyを終端にしたいわけじゃなくて、nextがNULLだったら
リストの終端って意味じゃないかと思う
507デフォルトの名無しさん:2005/06/17(金) 21:16:02
ここに出てくるコードって、今使っている独習C、C++より難しそうなのが沢山出てきて
いるのですが、教科書は一体何を使っているんでしょ?独自の問題なんだろうか。

うちの大学プログラミングの授業糞過ぎorz
508デフォルトの名無しさん:2005/06/17(金) 21:19:04
509デフォルトの名無しさん:2005/06/17(金) 21:32:53
>>508
free_listがおかしいべ。
最後しかfreeされないべ。

かといって、全部freeするように書き換えると
今度は、headまでfreeされるからやばいべ。
510デフォルトの名無しさん:2005/06/17(金) 23:23:02
>>500
リストをちゃんと解放してないから不良品ってこと?
コンパイルしたらちゃんと動いたぞ
511デフォルトの名無しさん:2005/06/18(土) 00:27:29
わざわざ再帰せんでもポインタをたどりつつfreeすればいいじゃないか

void free_list( CHAR_LIST * head)
{
  CHAR_LIST * pin = head;
  CHAR_LIST * buf;

  while(pin != NULL) {
    buf = pin->next;
    free(pin);
    pin = buf;
  }
}

512デフォルトの名無しさん:2005/06/18(土) 00:31:07
[1] 授業単元: programing
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/566.txt
このリンク先にある、キーボードから整数が入力される度にリストの末尾に挿入し、その都度リスト全体を表示させるプログラムを改良して、
入力されたすべての整数がリスト内で昇順(小さい数から大きい数へ)に並ぶようにしてください。
また、既にリストに入っている整数が再度入力された場合は、挿入を行わないようにしてください。
例えばリスト内の要素が
[ 1, 5, 7, 11, 15 ]であるとき:
  0 が入力されたら, [ 0, 1, 5, 7, 11, 15 ] となり,
9 が入力されたら, [ 1, 5, 7, 9, 11, 15 ] となり,
17 が入力されたら, [ 1, 5, 7, 11, 15, 17 ] となり,
7 が入力されたら, [ 1, 5, 7, 11, 15 ] のまま変化しません。
[3] 環境
 [3.1] OS:Windows/Linux/等々 WindowsXP
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか  C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 6月19日
よろしくお願いします。
513デフォルトの名無しさん:2005/06/18(土) 00:34:59
それと、リスト構造ではnextがnullならそこが終端なんだからわざわざ終端データを作る必要はないと思われ
514486:2005/06/18(土) 01:06:58
[1] 授業単元:
[2] 問題文(含コード&リンク):関数memcpyの作成
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Visual C++ Toolkit 2003
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:書式は標準関数と同じです。
            ただし、コピー元とコピー先の領域は重ならないようにする
どなたかよろしくお願いします。
515デフォルトの名無しさん:2005/06/18(土) 01:48:07
void *memcpy(void *to, const void *from, size_t size)
{
char *p = (char *) to;
char *q = (char *) from;
for ( ; size; --size)
*p++ = *q++;
return to;
}
516デフォルトの名無しさん:2005/06/18(土) 01:58:38
>>514

if( to+size > from || to < from+size ) return NULL;
517デフォルトの名無しさん:2005/06/18(土) 01:59:06
&&だまちがえた
518デフォルトの名無しさん:2005/06/18(土) 02:23:27
>>476 ありがとうございます!
519514:2005/06/18(土) 02:23:59
>>515-517
ありがとうございます
520課題くん:2005/06/18(土) 02:25:17
こんにちわ。私も大学の課題がでたんですけど、急にむづかしくなってさっぱりわからないんです。

課題をここに書きたいと思うんですがよろしいでしょうか?
521デフォルトの名無しさん:2005/06/18(土) 02:30:53
>>520














          >>1     を     読     め     !















522デフォルトの名無しさん:2005/06/18(土) 02:45:06
>>512
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/567.c
汚い上にかなり問題文のソースを書き換えてしまったが
一応動いた
523デフォルトの名無しさん:2005/06/18(土) 03:34:23
[1] 授業単元:二次元配列
[2] 問題文:次の値を配列に格納し縦と横を加算した結果を表示しなさい。
---実行結果---
10 30 50 答
10 30 20 答
50 20 20 答
答 答 答 答
--------------
"答"と表記したところに縦、横の加算結果を表示。
※例--右上の答には10+30+50の加算結果"90"が入ります。
   一番下の行の左から二番目の"答"には30+30+20の加算結果"80"ガ入ります。
右下の"答"は縦の答、横の答のどちらでも良いです。  
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ:フリーのBCCの最新バージョン
 [3.3] 言語:C
[4] 期限:2005年6月18日 18:00まででお願いします。
[5] その他の制限:特にありません。よろしくお願いします。
524デフォルトの名無しさん:2005/06/18(土) 04:06:12
#include <stdio.h>

int main()
{
int i, j, sum_yoko = 0, sum_tate = 0, array[3][3] = { {10,30,50}, {10,30,20}, {50,20,20} };

for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
printf("%3d", array[i][j]);
sum_yoko += array[i][j];
}
printf(" = %3d\n", sum_yoko);
sum_yoko = 0;
}
printf(" --------------\n");
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
sum_tate += array[j][i];
}
sum_yoko += sum_tate;
printf("%3d", sum_tate);
sum_tate = 0;
}
printf(" = %3d\n", sum_yoko);
return 0;
}
525デフォルトの名無しさん:2005/06/18(土) 04:06:29
>>522 の方針なら insert_nodeは↓でOK.
void insert_node(node_t **n, int val)
{
if(*n && (*n)->value <= val){
if((*n)->value != val)
insert_node(&((*n)->next), val);
} else {
node_t *new_node=malloc(sizeof(node_t));
if(!new_node)
return;
new_node->value=val;
new_node->next=*n;
*n=new_node;
}
}
オリジナルの方針なら↓。ただし、main(とprint_list)は適切に書き換える
node_t *insert_node(node_t *n, int val)
{
if(n && n->value <=val){
if(n->value != val)
n->next=insert_node(n->next, val);
return n;
} else {
node_t *new_node=malloc(sizeof(node_t));
if(!new_node)
exit(1);
new_node->value=val;
new_node->next=n;
return new_node;
}
}
526デフォルトの名無しさん:2005/06/18(土) 04:20:27
>>523
もうでてるけど一応作ったからUP
#include <stdio.h>
#define WIDTH (3)
#define HEIGHT (3)
int main(){
    int buf[HEIGHT+1][WIDTH+1]={{10,30,50},{10,30,20},{50,20,20},};
    int i,j;
    for(i=0;i<HEIGHT;i++){/*縦の合計を求める*/
        buf[i][WIDTH]=0;
        for(j=0;j<WIDTH;j++){
            buf[i][WIDTH] += buf[i][j];
        }
    }
    for(j=0;j<WIDTH;j++){/*横の合計を求める。*/
        buf[HEIGHT][j]=0;
        for(i=0;i<HEIGHT;i++){
            buf[HEIGHT][j] += buf[i][j];
        }
    }
    buf[HEIGHT][WIDTH]=0;
    for(j=0;j<WIDTH;j++){/*合計の合計を求める。*/
        buf[HEIGHT][WIDTH]+=buf[HEIGHT][j];
    }
    for(i=0;i<=HEIGHT;i++){
        for(j=0;j<=WIDTH;j++){
            printf("%d ",buf[i][j]);/*表示*/
        }
        printf("\n");
    }
    return 0;
}
527デフォルトの名無しさん:2005/06/18(土) 04:23:17
>>520
とりあえずだめではないな。
528デフォルトの名無しさん:2005/06/18(土) 04:25:17
>>522 >>524-525
どうもありがとうございます。
529デフォルトの名無しさん:2005/06/18(土) 04:26:54
>>524は関係なかった・・
530デフォルトの名無しさん:2005/06/18(土) 04:35:58
>>524 >>526
どうもありがとうございました。
531デフォルトの名無しさん:2005/06/18(土) 04:39:18
>>526
いくらなんでも、(3)てのは括弧つけすぎだろ。
532デフォルトの名無しさん:2005/06/18(土) 04:51:08
>>524
のソースをコンパイルしたところ、エラーが発生しました。
エラー E2209 課題02.c 1: インクルードファイル 'stdio.h' をオープンできない
どういうことでしょうか?
533デフォルトの名無しさん:2005/06/18(土) 04:55:59
>>532
helloworld みたいな短いプログラムはコンパイルできる?
534デフォルトの名無しさん:2005/06/18(土) 05:05:54
>>533
あ、できない!!
すみません。コンパイラの設定がおかしいのかなぁ??
この環境で、コンパイル通したことなかったんで・・・。
んー。何ででしょう(´д⊂
535522:2005/06/18(土) 05:05:57
>>525
なるほど、そうすれば簡潔に書けますね。勉強になりました。
536デフォルトの名無しさん:2005/06/18(土) 05:07:21
>>531
単なる癖なんですけど。
まずいことあったかなぁ??
537デフォルトの名無しさん:2005/06/18(土) 05:13:50
>>534
INCLUDEのpathが通ってないんじゃないの?
make書くとかなにかするべし。
538デフォルトの名無しさん:2005/06/18(土) 05:22:54
stdio.hが開けないのはmake書くとかそういう問題じゃないだろ
ccが正しくセットアップされてない可能性が高い
539デフォルトの名無しさん:2005/06/18(土) 05:36:17
ナンダ、インストールでコケテルノカ。

オレサマ ・・・ マルカジリ。
540デフォルトの名無しさん:2005/06/18(土) 05:41:29
>>532
gcc file.c -I/usr/include
とかやってコンパイルしてもだめかい?
-Iはエルじゃなくて大文字のアイな
541デフォルトの名無しさん:2005/06/18(土) 05:54:08
>>497-498
わらった。
エキサイトだと「予言の研究室は交差します。」だった。
542デフォルトの名無しさん:2005/06/18(土) 09:15:56
>>514
> [2] 問題文(含コード&リンク):関数memcpyの作成

これは undefined behavior ではないかと思うんだがどうだろう。
543デフォルトの名無しさん:2005/06/18(土) 11:41:58
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク): char alph[20]; n で定義した配列に乱数を用いて作成した20個のでたらめなアルファベットを記入したとき、
               alph[ ] の文字列と alph[ ] の各文字をアルファベット順に並べ替えた結果を表示せよ。文字は全て小文字とする。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン): Visual C++ 6.0
 [3.3] 言語:C++
[4] 期限:06/18 12:30まで
[5] その他の制限:乱数
お願いします
544デフォルトの名無しさん:2005/06/18(土) 12:22:46
>>543
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int func( char *p1, char *p2 )
{
return *p1 > *p2;
}
int main( void )
{
char alph[20],n;
srand(time(NULL));
for(n=0;n<sizeof(alph);n++){
alph[n]='a' + random() % 26;
}
printf( "%.*s\n", sizeof(alph), alph );
qsort( alph, sizeof(alph), sizeof(alph[0]), func );
printf( "%.*s\n", sizeof(alph), alph );
return 0;
}
545543:2005/06/18(土) 12:46:57
ありがとうございました!助かりました
546デフォルトの名無しさん:2005/06/18(土) 13:45:53
[1] 授業単元:
[2] 問題文(含コード&リンク):
再帰降下法で以下の文法の解析木を作るプログラム
e := t { ( '+' | '-' ) t }
t := f { ( '*' | '/' ) f }
f := '(' e ')' | number
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc 3.3.3 (cygwin)
 [3.3] 言語:C
[4] 期限:2005 6/19
[5] その他の制限:
547デフォルトの名無しさん:2005/06/18(土) 14:41:00
[1] 授業単元:プログラミングI
[2] 問題文(含コード&リンク):
整数a,b,cを入力したとき、2次方程式(ax^2+bx+c=0)に対し、
ポインタを用いて2個の解が求まる関数を作成し、その解を出力しなさい。
虚数の場合は、「2虚数解」と出力せよ。

 [3.1] OS:Windows
 [3.2] Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:2005 6/18 24:00
[5] その他の制限:
548デフォルトの名無しさん:2005/06/18(土) 14:43:23
C++ですが、dIの最小値を表示するという問題なのですが、無限ループ内が間違っているらしく・・・
どう直せば正常に動きそうですか?
(ちなみに正しい結果は、だいたいf=50でdI=2.64くらいになるはずです。)


#include <stdio.h>
#include <math.h>
#include <iostream>
#include <complex>
using namespace std;
#define Complex complex<double>
#define PI 3.141592653

Complex circuit(double f)
{
int m=3,i,j,k;
double r=1.0,L=10e-3,C=1.0e-3,E=10.0;
Complex s,c,d,g,dI;
double w=2*PI*f;
s=Complex(0.0,1.0)*w;

Complex z1,z2,z3,z4,z5;
z1=r+s*L;
z2=r+1.0/(s*C);
z3=z2;
z4=z1;
z5=r;

549デフォルトの名無しさん:2005/06/18(土) 14:43:56
Complex a[3][3]={(z2+z4),(-z2),(-z4),
(-z2),(z1+z2+z5),(-z5),
(-z4),(-z5),(z3+z4+z5)};
Complex b[3]={E,0,0};
Complex x[3];

for(k=0;k<m-1;++k)
{
c=a[k][k];
for(j=k+1;j<m;++j)
a[k][j]/=c;
b[k]/=c;
for(i=k+1;i<m;++i)
{
d=a[i][k];
for(j=k+1;j<m;++j)
a[i][j]-=d*a[k][j];
b[i]-=d*b[k];
}
}
550デフォルトの名無しさん:2005/06/18(土) 14:44:26
x[m-1]=b[m-1]/a[m-1][m-1];
for(k=m-2; k>=0;--k)
{
g=b[k];
for(j=k+1;j<m;++j)
g-=a[k][j]*x[j];
x[k]=g;
}
dI=abs(x[1]-x[2]);
return dI;
}

551デフォルトの名無しさん:2005/06/18(土) 14:44:38
void main()
{
double f,minI=0.0;
Complex dI;
FILE *fp;
fp=fopen("kadai4_3.xls","w");
if(fp==NULL)
{
printf("*****ERROR*****\n");
exit(0);
}
f=1.0;
for( ; ; )
{
dI=circuit(f);
f=f*sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(0.0)))))))));
if(minI<dI)
break;
minI=dI;

}
printf("%2.6f %2.6f\n",f,minI);
fprintf(fp,"%2.6f %2.6f\n",f,minI);
fclose(fp);
}
552デフォルトの名無しさん:2005/06/18(土) 14:53:45
ループが
for(k=0;k<m-1;++k)
{
 c=a[k][k];
 for(j=k+1;j<m;++j){ a[k][j]/=c; }
 b[k]/=c;
 for(i=k+1;i<m;++i)
 {
  d=a[i][k];
  for(j=k+1;j<m;++j){ a[i][j]-=d*a[k][j]; }
  b[i]-=d*b[k];
 }
}
こうなっているのは正しいのか?
553デフォルトの名無しさん:2005/06/18(土) 14:55:53
>>547
#include <stdio.h>
#include <math.h>
void solve(double a, double b, double c, int* mode, double* s1, double* s2) {
    double d = b * b - 4 * a * c;
    if (d < 0)
        *mode = 0;
    else if (d == 0) {
        *mode = 1;
        *s1 = -b / 2 / a;
    } else {
        *mode = 2;
        *s1 = (-b + sqrt(d)) / 2 / a;
        *s2 = (-b - sqrt(d)) / 2 / a;
    }
}
int main(void) {
    int a, b, c, mode;
    double s1, s2;
    printf("a?:"); scanf("%d", &a);
    printf("b?:"); scanf("%d", &b);
    printf("c?:"); scanf("%d", &c);
    solve(a, b, c, &mode, &s1, &s2);
    if (mode == 0)
        printf("solution:2虚数解");
    else if (mode == 1)
        printf("solution:%f", s1);
    else
        printf("solution:%f, %f", s1, s2);
    return 0;
}
554425:2005/06/18(土) 14:56:06
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/561.txt
これをやってみたのですが
In function main':
11:error:'for'loop initial declaration used outside c99 mode
30:error:redefinition of 'i'
11:error:previous definition of 'i' was hear
30:error:'for' loop initial declaration used outside C99 mode
というふうな警告が出るのですが、どうすればいいですか??
555デフォルトの名無しさん:2005/06/18(土) 14:56:34
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
次のデータをエディタで入力し、テキストファイルを作成せよ。

−−−−−−−−−−−−−−−−−−−−−
防御率   名前   誕生日(月)   誕生日(日)
−−−−−−−−−−−−−−−−−−−−−
626   野茂英雄    8         31
289   長谷川滋利   8         1
396   石井一久    9         9
404   大家友和    3         18
556   高津臣吾    11         25
233   大塚晶則    1         13
320   藪恵壹      9         28

問題:
4月〜3月の順で誕生日が早い順にソートするプログラムを作れ。
(結果は全ての選手の情報をファイルに出力する)

 [3.1] OS:Windows
 [3.2] Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:2005 6/19 am6:00
[5] その他の制限:
556デフォルトの名無しさん:2005/06/18(土) 14:58:36
>552
以前、同じ条件でfの値を変化させて出力・エクセルで波形を描くという課題のとき、
正しい数値が出たので、circuit内の関数はあってるはずです(丸々コピーなので)。
今回はfの最小値だけを求める問題なのですが・・・
557556:2005/06/18(土) 14:59:45
訂正・dIが最小のときのfの値
558デフォルトの名無しさん:2005/06/18(土) 15:03:37
>>554
6: int gakka_ninzu[100]; →int i, gakka_ninzu[100];
11: for (int i = 0; i < 100; ++i) { → for (i = 0; i < 100; ++i) {
30: for (int i = 0; i < 100; ++i) { → for (i = 0; i < 100; ++i) {

for()の中で変数を宣言できるのはC99で、君がやっているのは
1個古い(しかし未だに一般的な)C89。
559デフォルトの名無しさん:2005/06/18(土) 15:03:50
>554
C99に対応したコンパイラを入手汁!
560デフォルトの名無しさん:2005/06/18(土) 15:05:17
>4月〜3月の順で
4,5,...,12,1,2,3 の順という忌みだよね?
56167:2005/06/18(土) 15:06:47
>>551
> f=f*sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(sqrt(0.0)))))))));

なにがしたいの?
562556:2005/06/18(土) 15:08:52
あ、そこは10.0の間違いです・・・
いろいろいじってるうちに1を消してしまったみたいです。済みません。
563デフォルトの名無しさん:2005/06/18(土) 15:09:54
>555
本当の項目の区切り文字は2バイトスペース文字なのか?
タブ文字とかでないの?
564563:2005/06/18(土) 15:21:36
もしくは各項目の始まりの位置(先頭からの文字数)が固定なのかna?
565425:2005/06/18(土) 15:21:41
>>558
丁寧な回答ありがとうございました
566デフォルトの名無しさん:2005/06/18(土) 15:36:42
>>562
> if(minI<dI)
複素数の大小関係って数学的に定義されてたっけ?
circuitはabs()を返すのだから、戻り値の型はdoubleでいいはず。
よって、dIの型もdoubleでいいはず。

minIの初期値が0だと、circuit()が0を返さない限り
minI<dIが成り立つので望む結果は得られない。
minIの初期値をDBL_MAXにでもしておけばちゃんと動くよ。
567556:2005/06/18(土) 15:45:47
>566
丁寧な回答をありがとうございます。
おかげさまでエラーはほとんど消えましたが、ただひとつ
dI=circuit(f);
の行に対して
error C2679: 二項演算子 '=' : 型 'class std::complex<double>' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照)
というエラーが出ます(VISUAL C++ 6.0)。
どうすればよいでしょうか・・・?
568デフォルトの名無しさん:2005/06/18(土) 15:53:11
>>567
だから、circuit()は実数しか返さないんだから、戻り値の型を
Complexではなくdoubleにすればいい。
どうしてもcircuit()から複素数を戻したいなら、
dI=circuit(f).real();
とすればいい。
569556:2005/06/18(土) 15:57:13
>568
無事動きました・・・本当に色々とありがとうございました!
570デフォルトの名無しさん:2005/06/18(土) 16:29:15

 [OS] Windows2000
 [コンパイラ]gcc VC どちらでも
 [言語] C/C++/どちらでも

B'sCLIP使って、バックアップ取ろうとしたら、
1.『ファイル名に使用できない文字が使われています。』
2.『ファイル名が64文字を超えています。』
と出て、正常に焼きこみが出来ません。しかも、1.に関しては、どのファイルに
使用できない文字が入っているのか、メッセージも出してくれないのです。

そこで
バックアップを取ろうとしてる、あるディレクトリから64文字以上、もしくは、
a-zA-Z_. 以外の文字が使われている場合、そのファイルのパスを表示する
プログラムは作成可能でしょうか? しかも、ディレクトリは階層構造をなして
いるのです。不可能かもしれませんが、できる凄腕の方がいらっしゃいましたら、
ぜひともヨロシクお願いします。
571デフォルトの名無しさん:2005/06/18(土) 16:33:30
>570
とりあえず、
dir /s /b
572デフォルトの名無しさん:2005/06/18(土) 16:34:17
>>570
スレ違い。
【フリー】こういうソフト作ってちょ【リク】
http://pc8.2ch.net/test/read.cgi/tech/1046576456/
573デフォルトの名無しさん:2005/06/18(土) 16:45:42
>>571
ありがとうございます。
それがわかった今、何とかなりそうです。
574とりあえず:2005/06/18(土) 17:24:54
>570
-----
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1024];
while(fgets(buf,sizeof(buf),stdin)) if(strlen(buf)>64) printf("%s",buf);
return 0;
}
-----

dir /s /b | 実行プログラム
575とりあえず:2005/06/18(土) 17:27:33
>64文字以上
あ...
>= に直して
576555:2005/06/18(土) 17:31:52
>>560
はい。そういう意味です。
分かりにくい表現ですいません。

>>563
特に指定はないので、スペース、タブ等どのような区切り方でも問題ないと思います。
577デフォルトの名無しさん:2005/06/18(土) 17:42:31
遅れまして500の発言をしたものです。
>>502,510
コンパイルしてもセグメントエラー引き起こすんです。それで不良品といったんです。
>>503
褒めていただいて真にありがとうございました。
>>507
俺のとこは講師の先生がtexかなんかで作ったプリントが教科書。
見本となるプログラムの一部しかなってないから難しい・・・
単位落としそうで怖い。
>>508,511
早速参考とさせていただきます。
578デフォルトの名無しさん:2005/06/18(土) 19:04:54
[1] 授業単元: 情報処理技術
[2] 問題文(含コード&リンク):

ランダムに並んだ数と公差を与える。
ここから、最も長い等差数列を発見せよ
出力は項数のみでよい


6 1 3 5 2 9 8 7 0
n=2を仮定するなら

1 3 5 7 9が最大となり、項数を出力するのだから5
6 8もあるがこれは項数が2なので最大ではない。

(例以下は私がつけたものです。
 なお、同じ数字は二度と出てきません。
 与えられる数の最大は100だそうです)

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): bcc32
 [3.3] 言語:C (ANSI Cで。C99はご勘弁下さい)
[4] 期限:2005年06月20日07:00(家出る時間)
[5] その他の制限:特にありません。文法事項は分からなければ自分で調べます。
579デフォルトの名無しさん:2005/06/18(土) 19:18:31
例がわからんな
与えられた数列を並べ替えるのか?
1 3 5 の項数3
9 8 7 の項数3
ならわかるんだが
580デフォルトの名無しさん:2005/06/18(土) 20:08:45
ソートして動的計画法?
581デフォルトの名無しさん:2005/06/18(土) 20:20:07
582デフォルトの名無しさん:2005/06/18(土) 21:16:58
もまえらもちつけ
6 1 3 5 2 9 8 7 0
ソートしたら
0 1 2 3 5 6 7 8 9
だろ?

>1 3 5 7 9が最大となり、項数を出力するのだから5
>6 8もあるがこれは項数が2なので最大ではない。
おかしいだろ?
583デフォルトの名無しさん:2005/06/18(土) 21:51:37
>>582
ソートしたら
0 1 2 3 5 6 7 8 9
こうなる。

この中から与えられたnを公差とする等差数列を
最も項数が多くなるようにとるってこと。

いま、n=2だから
1 3 5 7 9
6 8
0 2
の3つが考えられて
そのうち最大の項数を取れるのは
1 3 5 7 9だから5を出力するってこと
584デフォルトの名無しさん:2005/06/18(土) 21:59:30
多分交差の意味が分かっていない人がいる悪寒
585デフォルトの名無しさん:2005/06/18(土) 22:00:23
>>581
コンパイルできない。
ので、
qsort( kazu, KAZU_SIZE, sizeof(kazu[0]), func);

qsort( kazu, KAZU_SIZE, sizeof(kazu[0]), (int(*)(const void *,const void *))func);

random()

rand()
に変えてやってみた

だけど動かない。
どうやら、qsortまで行っているようなんだけど。
それ以降が実行されてないみたいです。
586デフォルトの名無しさん:2005/06/18(土) 22:09:18
交差に吹かれて〜さまy
587デフォルトの名無しさん:2005/06/18(土) 22:10:29
>>585
> (int(*)(const void *,const void *))func

qsort なんかで
よくこういうキャストしている奴がいるがハッキリ言ってマズイ
関数へのポインタはキャストしてはいけない

「clとかbccでうまくいくから」なんて思ってる奴は逝ってよし
588デフォルトの名無しさん:2005/06/18(土) 22:13:26
>>587
ではやはり、funcの方を
int func(const void *a,const void *b)
{
  int *ap=(int*)a;
  int *bp=(int*)b;
  (処理)
}
とかにするべきなのですか・・・。

分かりました。
そっちでためしてみます。
589デフォルトの名無しさん:2005/06/18(土) 22:19:15
>>581
・・・・それでも動きません。

>>587
ただ、関数へのポインタの指し示す先は
関数のアドレスですよね。
ならば、キャストしても良いのではないでしょうか?
すみません。理解し切れてないのでしょうけど

結局スタックに引数を詰め込むだけの話ですから
この場合は、void型のポインタを渡すものとして捉えられても
呼び出された関数側では受け取るアドレスは同じで
挙動はint*と変わらない気が・・・・OTL

やっぱり勉強してきます。
590デフォルトの名無しさん:2005/06/18(土) 22:20:50
確認だけど>>581のはうまくいっていないよね?
不必要なものを省いた上で最長に続くのを見つけるんだよね?
591デフォルトの名無しさん:2005/06/18(土) 22:22:09
>>590
上手くいってません。

そうです。
不要なものを除いて最長の物を見つけるんです。
592デフォルトの名無しさん:2005/06/18(土) 22:22:46
593デフォルトの名無しさん:2005/06/18(土) 22:24:35
>>588
const/volatileは極力外さない方がいい
たとえ記憶域期間が短くても俺なら

int func(const void *a,const void *b) { 
  const int *ap=(const int*)a; 
  const int *bp=(const int*)b; 

って感じにする

>>589
再掲する
>「clとかbccでうまくいくから」なんて思ってる奴は逝ってよし 
規格書のどこかに説明があったはず

あーなんかスレ違いっぽ
594592:2005/06/18(土) 22:27:24
#include <stdlib.h>
#include <time.h>
忘れ(w

項数が同じケースは最初に見つけたものが優先されます。
595デフォルトの名無しさん:2005/06/18(土) 22:31:26
>>592
C++のコードになってるっぽいです。

boolとか分かりません・・・。
ここで宣言できませんっていうコンパイルエラーはどうやって直せばいいですか?
いままでに見たことがないエラーなので。

わがままですみません。
596デフォルトの名無しさん:2005/06/18(土) 22:37:20
最大値は100と言っているのに、最小値に言及がないのは、問題として不自然な気が…
もし、勝手に最小値は0だと仮定してしまえば、

int have[101];

というテーブルを作ることで、sortは必要なく、こんな感じでできるのでは?

int get_length(int x, int step)
{
int cnt;
if( 0 <= x-step && have[x-step])
return 0;
for(cnt=0; x<=100 && have[x]; x+=step, cnt++);
return cnt;
}


int length;
for(start=0;start<=100;start++){
if(have[start]){
for(step=1;start+max_length*step<=100;step++){
length=get_length(start,step);
if(max_length < length)
max_length=length;
}
}
}
597デフォルトの名無しさん:2005/06/18(土) 22:40:08
>>596
>最大値は100と言っているのに、最小値に言及がないのは、問題として不自然な気が…
多分先生のミスでしょうね・・・。

コード参考にしてみます
598592:2005/06/18(土) 22:43:33
>>578
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/570.txt
修正版っす。
VCの感覚で作っちまった。
599デフォルトの名無しさん:2005/06/18(土) 22:44:00
全部書くとこんな感じ
#include <stdio.h>
int have[101];
int get_length(int x, int step)
{
int cnt;
if( 0 <= x-step && have[x-step])
return 0;
for(cnt=0; x<=100 && have[x]; x+=step, cnt++);
return cnt;
}
int main()
{
int length,i,start,step,max_length=1;
int data[9]={6,1,3,5,2,9,8,7,0};
for(i=0;i<9;i++)
have[data[i]]=1;

for(start=0;start<=100;start++){
if(have[start]){
for(step=1;start+max_length*step<=100;step++){
length=get_length(start,step);
if(max_length < length)
max_length=length;
}
}
}
printf("max_length=%d\n",max_length);
}
600デフォルトの名無しさん:2005/06/18(土) 22:50:58
>>598
ありがとうございます。

ですが
42:stTohsamax = {nums[0],nums[1] - nums[0]};
50:const int yohso = getYohso(nums,TEST_DIM,i,nums[k]-nums[i]);
以上の2行でエラーが出ています。

>>599
ありがとうございます。
動作しています。
若干仕様と異なりますが、参考にしたいと思います。。
601デフォルトの名無しさん:2005/06/18(土) 23:07:50
>>600
失礼、仕様を誤解していた。ループ部分をこうする。

for(start=0;start+(max_length-1)*step<=100;start++){
length=get_length(start,step);
if(max_length < length)
max_length=length;
}
602592:2005/06/18(土) 23:46:31
603デフォルトの名無しさん:2005/06/18(土) 23:51:29
[1] 授業単元: プログラミング言語C
[2] 問題文(含コード&リンク):
  
C-第6講課題:出力例を遵守したプログラムを作成せよ。

  問題1.ループ文(for,while,do)の比較
  キーボードから数字nを読み込み、出力するプログラムを作成せよ。(for,while,doを使い、3通りのソースを作成すること)
  出力例
  1
  2
  3
  ・
  ・
  ・
  n

  問題2.複利計算のループ処理
  銀行に1万円を預金したとき、15年後の預金残高を求めるプログラムを作成せよ。年利10%で、利息は複利で計算するものとする。
  (預金のデータ型は整数型として作成すること)
  出力例
  元金1万円、年利10%のとき
  15年後の預金残高はOOOOO円です
[3] 環境
 [3.1] OS:Windows XP Home Edition
 [3.2] コンパイラ:Visual Studio 6.0
 [3.3] 言語:C++
[4] 期限:2005年06月20日14:00まで
[5] その他の制限:どこまで習っているか
   就職活動のため、殆ど出席していなく、さっぱりでした・・・。習ったと記憶しているのはintの変数宣言・printf関数・scanf関数・・・です。どうかお助け下さいm(_ _)m
604デフォルトの名無しさん:2005/06/18(土) 23:55:45
>>602
公差は見つけるのではなく、与えられるらしいよ。問題文も
「ランダムに並んだ数と公差を与える。」
となってる。
605デフォルトの名無しさん:2005/06/19(日) 00:02:51
そうだったのか ○| ̄|_
606デフォルトの名無しさん:2005/06/19(日) 00:05:56
>>603
質問が幾つかある。
問題1は、nのみ全角で出力するのか?
ということは問題2の答えも?
607デフォルトの名無しさん:2005/06/19(日) 00:07:13
[1] 授業単元:
[2] 問題文(含コード&リンク):ファイルの違いをチェックするプログラム作成
テキストベースで比較するか、バイナリベースで比較する選択する。
ファイル1とファイル2を比較する
違いがある場合は違いのある行数と文字を表示
最後に比較した行数とバイト数を表示する。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VC++2003
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:

どうかよろしくおねがいします。
608606:2005/06/19(日) 00:14:56
>>603
とりあえず。
全て#include <stdio.h>という件を先頭に追加すること
問題1
int main(void) {
    int i, n;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) printf("%d\n", i);
    return 0;
}
int main(void) {
    int i = 0, n;
    scanf("%d", &n);
    while (++i <= n) printf("%d\n", i);
    return 0;
}
int main(void) {
    int i = 1, n;
    scanf("%d", &n);
    do printf("%d\n", i); while (++i <= n);
    return 0;
}
問題2
int main(void) {
    int i, n;
    double d;
    scanf("%d", &n);
    d = n;
    for (i = 0; i < 15; i++) d *= 1.1;
    printf("元金1万円、年利10%のとき\n15年後の預金残高は%d円です", (int)d);
    return 0;
}
609デフォルトの名無しさん:2005/06/19(日) 00:16:33
>>607
いくつか質問
・ファイル名の指定方法
・比較は違いが見つかった時点で停止するのか
・停止しない場合はどのように再開するのか
610デフォルトの名無しさん:2005/06/19(日) 00:26:26
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 日記はこれにでも書いてろ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  な!
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ    
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  http://yuukiremix.s33.xrea.com/chirashi/
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
611607:2005/06/19(日) 00:59:25
>>609
ファイル名はファイルポインタを使う。
比較は違いが見つかった時点で停止します。
612555:2005/06/19(日) 01:32:51
できた方いませんか・・・
613デフォルトの名無しさん:2005/06/19(日) 01:45:37
tab区切りとかなら
#include <stdio.h>
#include <string.h>
int main(void)
{char buff[256];
int i,j, man,day, n;
struct _list{ int key; char data[256]; }tbl[1000],tmp;
/* 見出しの分 */
for(i=0; i<3; ++i){
fgets(buff,sizeof(buff),stdin); printf("%s",buff);
}
/* dataの分 */
n=0;
while(fgets(buff,sizeof(buff),stdin)){
sscanf(buff,"%*s%*s%d%d",&man,&day);
tbl[n].key=(((3>=man)?1:0)*100+man)*100+day;
strcpy(tbl[n].data, buff);
++n;
}
for(i=0; i<n-1; ++i)
for(j=i+1; j<n; ++j)
if(tbl[i].key>tbl[j].key){
tmp=tbl[i]; tbl[i]=tbl[j]; tbl[j]=tmp;
}
for(i=0; i<n; ++i) printf("%s", tbl[i].data);
return 0;
}

実行プログラム < データテキスト > 出力ファイル って感じで
614デフォルトの名無しさん:2005/06/19(日) 01:51:01
manあげw
615603:2005/06/19(日) 08:39:20
>>606さん
ありがとうございます、説明不足だったことをお許し下さい。。。

当方の講師は、プログラムを書くときに以下のように始めます。
#include<stdio.h>
void main(void)
↑のように書き始めて、>>603のプログラムを動かすには
どうすればよい良いでしょうか?

ループ文の問題に関して、nというのは問題として分かりやすくするために
講師が書いただけのようでした。実際は半角での出力を求めているようです。

複利計算の問題に関して、doubleという関数?を習っていないようです・・・
友人から借りたノートにはdoubleを習ったような記述がありませんでした。
doubleを使わず動かすにはどうすれば良いでしょうか?

質問厨で申し訳ありませんが、宜しくおねがいしますm(_ _)m
616デフォルトの名無しさん:2005/06/19(日) 09:21:25
>>615
doubleは小数の型。
問題文には整数型と書いてあるな。
void main(void)は正しくなくてint main(void)が正しいものだからだから気にするな。
617デフォルトの名無しさん:2005/06/19(日) 09:46:35
#include <stdio.h>
#define  PRINCIPAL  10000
#define  INTEREST  10
#define  YEAR  15
int main( void )
{
    int i, account;
    account = PRINCIPAL;
    for( i=0; i<YEAR; i++ )
        account = account * ( 100 + INTEREST ) / 100;
    printf("元金%d円、年利%d%のとき\n%d年後の預金残高は%d円です。\n",
            PRINCIPAL, INTEREST, YEAR, account);
    return 0;
}
618デフォルトの名無しさん:2005/06/19(日) 10:39:53
>>616
関数の返り値や引数がわかってないやつにそういうこと教えるなよ
講師に聞かれたりして面倒なことになるだろ
説明するならちゃんと説明してやれ
619デフォルトの名無しさん:2005/06/19(日) 10:53:35
>>616
> void main(void)は正しくなくてint main(void)が正しいものだからだから気にするな。
いいえ。
620デフォルトの名無しさん:2005/06/19(日) 11:45:59
くだらん。

main()

でいいよ。もう
621607:2005/06/19(日) 11:50:17
【初心者歓迎】C/C++室 vol.18
http://pc8.2ch.net/test/read.cgi/tech/1117984322/
622607:2005/06/19(日) 11:54:21
どなたかできた方います?
623デフォルトの名無しさん:2005/06/19(日) 11:58:18
607は何がしたいんだ?
624607:2005/06/19(日) 12:00:06
>>623
書くこと間違えました。
すみません。
625606:2005/06/19(日) 12:04:34
>>615
int main(void)が正しい。どうしてもvoid main(void)にしたければ
return 0;を削れ。たまには無知な人間に合わせることも必要。
問題1は半角で出力してる。
問題2は浮動小数点型を使わないならば整数で何倍かして計算
してまた元に戻すことになる。そのくらいは自分でやれ。
626547:2005/06/19(日) 12:24:37
どなたかできませんか(つД`)
627デフォルトの名無しさん:2005/06/19(日) 12:25:59
628547:2005/06/19(日) 12:37:45
すいません失礼しました
ありがとうございます。
(*´∀`*)
629デフォルトの名無しさん:2005/06/19(日) 13:52:14
まだ答えてもらってない人いる?
今、暇だから作るよ。
630606:2005/06/19(日) 14:07:18
>>629
>>607だな
631555:2005/06/19(日) 14:14:43
>>613
誕生日が月ではソートされるのですが、
日でソートできでいないんですが出来るようになりませんか?

あと出来ればこのプログラムのアルゴリズムを教えていただきたいのですが。
贅沢言ってすいません
632607:2005/06/19(日) 14:17:26
>>629さん
>>607をお願いします
633デフォルトの名無しさん:2005/06/19(日) 14:25:13
>>607
たとえば1000 行のテキストファイル。
それとそのファイルの101行目に一行挿入したファイルを比較すると…
違いは何行って出せと?

バイナリでも似たようなことがいえるけど。
634607:2005/06/19(日) 14:27:49
>>633
そうです
635デフォルトの名無しさん:2005/06/19(日) 14:31:53
>>634
何がそうですだ?
636デフォルトの名無しさん:2005/06/19(日) 14:33:15
>>634
アナタ日本人デスカ?
637デフォルトの名無しさん:2005/06/19(日) 14:34:46
>>634
A
B
C

A
x
B
C
を比べて、何行違うと出せばいいのかと。
638デフォルトの名無しさん:2005/06/19(日) 14:37:22
>>607
一行の最大文字数を固定(例えば、1024文字とか)しちゃってもいい?
それとも任意にする?
639デフォルトの名無しさん:2005/06/19(日) 14:38:26
>>638
そうですw




いや、失礼。
640607:2005/06/19(日) 14:39:18
>>638
一行100文字程度でお願いします
641デフォルトの名無しさん:2005/06/19(日) 14:39:23
つーかバイナリファイルに行という概念があるのか?
642デフォルトの名無しさん:2005/06/19(日) 14:41:42
>>641
テキストファイルって何?
バイナリファイルって何?
643デフォルトの名無しさん:2005/06/19(日) 14:41:43
diffを使った事無いのか?
644デフォルトの名無しさん:2005/06/19(日) 14:42:52
まともに説明できない香具師って、相手も理解できているつもりで言葉が足りなくなるんだろうなぁ。
だから逆に、相手の言ったことも自分に理解できている範疇の内容としか思わないと。
#まさか、相手から「どうしていいのか判らない」と言われるとは思ってもいないようだ。
645デフォルトの名無しさん:2005/06/19(日) 14:43:07
>>643
diffと宿題,、どこに関係があると書いてあるんだ?
646デフォルトの名無しさん:2005/06/19(日) 14:44:20
>>645
diffと宿題,、どこに関係がないと書いてあるんだ?
647デフォルトの名無しさん:2005/06/19(日) 14:45:11
>>646
悪魔の証明を求めるアフォ発見!
648デフォルトの名無しさん:2005/06/19(日) 14:46:19
晒し
649デフォルトの名無しさん:2005/06/19(日) 14:46:20
>>647
自己紹介乙
650デフォルトの名無しさん:2005/06/19(日) 14:47:15
>>649
恥の上塗るぽ
651デフォルトの名無しさん:2005/06/19(日) 14:47:44
>>650
恥の上塗るぽ
652デフォルトの名無しさん:2005/06/19(日) 14:48:16
diffよりは遥かに単純な働きしかしないけどテキスト版はこれでいい?
#include <stdio.h>
#define BUFFER_SIZE 1024
char buf1[BUFFER_SIZE], buf2[BUFFER_SIZE];
int main(int argc, char *argv[])
{
FILE *fp1,*fp2;
int line;
if(argc<3)
return 1;
fp1=fopen(argv[1],"r");
fp2=fopen(argv[2],"r");
if(!fp1 || !fp2)
return 1;
for(line=0;;line++){
fgets(buf1,BUFFER_SIZE,fp1);
fgets(buf2,BUFFER_SIZE,fp2);
if(feof(fp1) && feof(fp2))
break;
if(strcmp(buf1,buf2))
printf("line %d:\n %s%s\n",line,buf1,buf2);

}
fclose(fp1);
fclose(fp2);
return 0;
}
653デフォルトの名無しさん:2005/06/19(日) 14:48:49
654デフォルトの名無しさん:2005/06/19(日) 14:51:34
>>646
イタタタ
655デフォルトの名無しさん:2005/06/19(日) 14:51:59
>>631
ぱっと見>613で動きそうなんだけど、どういう入力を与えたらどういう出力になった?
#まぁ、>613が小汚いとかmanってなんだとか、突っ込みどころはあるけど。
656デフォルトの名無しさん:2005/06/19(日) 14:53:40
>>646

無いもの証明ですかw
657デフォルトの名無しさん:2005/06/19(日) 14:56:27
で、diffと関係あるの?無いの?
658603:2005/06/19(日) 15:11:07
>>606=>>625,>>616,>>617,>>618,>>619,>>620の皆さん、ありがとうございましたm(_ _)m
お蔭様で動くようになりました、感謝しています。ありがとう
659607:2005/06/19(日) 15:19:03
>>652
ありがとうございます
660デフォルトの名無しさん:2005/06/19(日) 15:20:13
>>659
バイナリ版も作った。長くなったのでいまウプロダ探してる。
661デフォルトの名無しさん:2005/06/19(日) 15:26:11
>>607
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/572.c

テキストとして比較
./a.out file1 file2

バイナリとして比較
./a.out -b file1 file2
662デフォルトの名無しさん:2005/06/19(日) 15:28:55
>>657
そうです
663デフォルトの名無しさん:2005/06/19(日) 15:31:29
他に答えてもらってない人いる?
664607:2005/06/19(日) 15:37:03
>>661
ありがとうございました。
665デフォルトの名無しさん:2005/06/19(日) 15:39:37
[1] 授業単元: プログラミング言語C
[2] 問題文(含コード&リンク):
標準入力から入力される文字列を読み取り
そのまま表示しなさい。

ただし、文字列の最大の長さは半角100文字とします。
文字列の終端は!でこれが入力されると
直ちに表示するようにしなさい。

ANSI Cで答えるようにしなさい。

分かりにくいかもしれませんが

2ch saiko-! (入力)
2ch saiko- (出力)
となり、エンターもなにも押さないで
!を押したら、即表示せよとのことです

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Lsic86
 [3.3] 言語:C
[4] 期限:2005年06月20日12:00まで
[5] その他の制限:特に無し
666デフォルトの名無しさん:2005/06/19(日) 15:43:25
>>665
表示したら即終了でいいの?
667デフォルトの名無しさん:2005/06/19(日) 15:45:46
>>666
ハイ
668デフォルトの名無しさん:2005/06/19(日) 15:50:29
皆さんの大学のプログラミングの授業ってどんな感じですか?
もうどうしようもなく糞で参ってますorz
669デフォルトの名無しさん:2005/06/19(日) 15:55:08
>>667
lsicで改行を待たずにキーボードの入力を受けとる関数ってなんだっけ?
670デフォルトの名無しさん:2005/06/19(日) 15:56:14
>>668
中高生じゃあるまいし、プログラムの勉強したかったら
自力で勉強すりゃいいじゃないか
671デフォルトの名無しさん:2005/06/19(日) 16:01:23
>>669
分からない。
調べてみたけどANSI Cで見当たらない・・・。
見落としてると思うんだけど
672デフォルトの名無しさん:2005/06/19(日) 16:07:03
>>671
リターンを押さなくてもキーを読み取る関数はgetch(やgetche)だったと思うけど、
この振る舞いはコンパイラによって微妙に違った気がする。
一応書いて見たけど、これがlsicでちゃんと動くかは分からない。

#include <stdio.h>
#include <conio.h>
int main()
{
int i;
char buf[101];
for(i=0;i<101;i++){
buf[i]=getche();
if(buf[i]=='!'){
buf[i]=0;
printf("\n%s\n",buf);
return 0;
}
}
return 1;
}
673デフォルトの名無しさん:2005/06/19(日) 16:50:13
>>671
そのgetchなどはANSI Cにはない非標準だから見つからなくて当然。
674デフォルトの名無しさん:2005/06/19(日) 17:08:42
>>665
「リターンを押さなくてもキーを読み取る関数」などANSI標準で
規定されていない。よって問題がおかしい。
675デフォルトの名無しさん:2005/06/19(日) 17:17:34
いまどき ANSI C って…
化石状態のガッコだな…
676デフォルトの名無しさん:2005/06/19(日) 17:27:58
>>675
それじゃあどんなCを使えと?
677デフォルトの名無しさん:2005/06/19(日) 17:37:44
ISO C89だのC99だのじゃなくて"ANSI"ってとこが「ふるい」んじゃねーのか
678675:2005/06/19(日) 17:39:07
>>676
>>677でつ
679デフォルトの名無しさん:2005/06/19(日) 17:42:20
まあそれでなくともLSI C-86って時点で化石状態なのはバレバレだがな
680デフォルトの名無しさん:2005/06/19(日) 17:44:23
>>679
学校の怠慢、といえなくも無いかな。
681デフォルトの名無しさん:2005/06/19(日) 17:45:24
ANSIって言うのが何故古いのか無知な漏れに教えてくれ
ググったらANSI C=C89ってのが出てきたが、C89っていう
言い方よりオサーン臭いってことか?
682デフォルトの名無しさん:2005/06/19(日) 17:50:55
たぶん>>675はC++とかJavaとかC#とかを教えろよと思っているのではないだろうか。
683デフォルトの名無しさん:2005/06/19(日) 17:51:30
言葉なんて飾りですよ
古い人にはそれがわからんのです
684デフォルトの名無しさん:2005/06/19(日) 17:53:18
>>681
C89の時点ではCの標準規格はそんだけだったが
現在は規格が複数あるんだからそれを明示すべしということでしょ

まあANSI Cと書かれれば意味はわかるけど、な
685デフォルトの名無しさん:2005/06/19(日) 18:40:48
いやだから、ANSI CといいつつLSI-C使っている辺りが怠慢でしょう。
686デフォルトの名無しさん:2005/06/19(日) 20:20:28
>>670
独学でプログラミングを学ぶほど非効率なモノはないと思うが。
687デフォルトの名無しさん:2005/06/19(日) 20:24:30
>>686
今は恵まれているんではないかな。
688デフォルトの名無しさん:2005/06/19(日) 20:43:13
プログラミングで苦労するのは初めだけ。
慣れてくれば、何をすれば良いのかなんてすぐに解かるようになる。
689デフォルトの名無しさん:2005/06/19(日) 20:45:17
1に調べる、2に調べる、3も4も5も調べる。だな。
690デフォルトの名無しさん:2005/06/19(日) 20:50:12
で、6で挫折する、と
691デフォルトの名無しさん:2005/06/19(日) 21:22:21
よろしくお願いします。
[1] 授業単元:Linuxプログラミング
[2] 問題文:引数にファイル名を指定すると、そのファイルのサイズ、種類(一般ファイル、ディレクトリ、パイプ等)、
そして最終変更時刻を表示するコマンド(fviewという名称とする)を作成せよ。
ただし、引数には、複数のファイルを指定できるようにすること。
また、fstatシステムコールを用いること。
実行例:$fview aaa.txt bbb.txt ccc.txt ・・・<RET>
[3] 環境 :
 [3.1] OS:Linux
 [3.2] コンパイラ:gcc     
[4] 期限:2005年6月20日23:59まで
スレちがいだったらすみません。
よろしくお願いします。
692ccc:2005/06/19(日) 21:26:26
【質問テンプレ】
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 要素数がnoであるint型の配列vcの並びを逆順にしたものを配列vc1に格納する関数
void intary_rcpy(int v1[],const int v2[],int no) を使って作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:どちらでも可
[4] 期限:できるだけ早く
[5] if文 ループ 配列はしました。
693デフォルトの名無しさん:2005/06/19(日) 21:29:42
>>692
void intary_rcpy(int v1[], const int v2[], int no)
{
  for (int i = 0; i <= no; i++)
    v1[i] = v2[no - i - 1];
}
694デフォルトの名無しさん:2005/06/19(日) 21:30:33
>>693
そんな…
695693:2005/06/19(日) 21:32:07
i < noだった
○| ̄|_
696デフォルトの名無しさん:2005/06/19(日) 21:48:53
一応、C言語らしいから、愛の宣言を外に移動してな。
697デフォルトの名無しさん:2005/06/19(日) 21:50:44
>>696
C99 なら愛情で OK なのさ
698デフォルトの名無しさん:2005/06/19(日) 21:50:56
可搬性アップ!
699デフォルトの名無しさん:2005/06/19(日) 21:51:11
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>

const char *get_type(mode_t m)
{
if(S_ISREG(m))
return "normal file";
if(S_ISDIR(m))
return "directory";
if(S_ISFIFO(m))
return "pipe";
return "unknown";
}

int main(int argc, char *argv[])
{
for(;argc>1;argc--,argv++){
struct stat buf;
int fd=open(argv[1],O_RDONLY);
if(!fd)
continue;
if(!fstat(fd,&buf))
printf("size=%d, type=%s, update_time=%s\n",
buf.st_size, get_type(buf.st_mode), ctime(&buf.st_mtime));
close(fd);
}
return 0;
}
700デフォルトの名無しさん:2005/06/19(日) 22:24:28
1] 授業単元: COBOL テーブル基礎
[2] 問題文(含コード&リンク):
――――――――――――――――――――――――
|      KURASU-TAB   |
 ――――――――――――――――――――――――
|SEITO(1)|SEITO(2)|SEITO(3)|〜〜|SEITO(40)|
 ――――――――――――――――――――――――
テーブルKURASU-TABのSEITO(1)に1を、(2)に2を・・・
SEITO(40)に40を初期値として空欄をうめなさぃ。

MOVE (ア)
PERFORM UNTIL (イ)
COMPUTE SOE = SOE + 1
MOVE (ウ) TO SEITO(SOE)
END-PERFORM

[3] 環境
 [3.1] Windows
 [3.2] ?
 [3.3] ?
[4] 今日の11時まで
[5] テーブルまで

ほんとすぃません、ちゃんとテンプレ使えてませnooo
ぁと高1の実業高校でプログラミング習ってますww
701デフォルトの名無しさん:2005/06/19(日) 22:27:19
>>700
ここもC/C++なスレなわけだが。
702デフォルトの名無しさん:2005/06/19(日) 22:29:18
>>700
ウソついちゃいけません。
小学生でしょうあなた。
703デフォルトの名無しさん:2005/06/19(日) 22:29:32
>>701すぃませnooo
COBOLわからなかったらどこで聞いていいんですか?
704デフォルトの名無しさん:2005/06/19(日) 22:30:25
「COBOL テーブル基礎」の担当の先生(50代後半)に聞きなさい。
705デフォルトの名無しさん:2005/06/19(日) 22:33:00
学校のってことですか?
706デフォルトの名無しさん:2005/06/19(日) 22:36:56
>>702 ちゃんとした高校生です
707デフォルトの名無しさん:2005/06/19(日) 22:38:16
しかしCOBOLなんて古いなあ。
708ccc:2005/06/19(日) 22:39:47
[1] 授業単元: c言語
[2] 問題文:五人の学生の3教科(国語、数学、英語)の点数を
      2次元配列を用いて科目別の最高点を求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:どちらでも可
[4] 期限:できるだけ早くお願いします・・・
[5]関数までやりました

何回もすみませんよろしくお願いします。
709デフォルトの名無しさん:2005/06/19(日) 22:40:10
>>707
なんでですか??
710デフォルトの名無しさん:2005/06/19(日) 22:53:14
>>700
COBOLなら、オレに聞け!<3>
http://pc8.2ch.net/test/read.cgi/tech/1087178214/
711デフォルトの名無しさん:2005/06/19(日) 22:56:16
#include <stdio.h>
int main()
{
int i,j;
char *subj[3]={"国語","数学","英語"};
int score[5][3]={{70,40,60},{20,50,30},{50,90,20},{60,30,30},{20,0,50}};
for(i=0;i<3;i++){
int high_score=0;
printf("%sの最高点は.... ",subj[i]);
for(j=0;j<5;j++)
if(high_score<score[j][i])
high_score=score[j][i];
printf("%d点です!!! オメデトー!\n",high_score);
}
return 0;
}
712ccc:2005/06/19(日) 23:08:29
>>711
結果はどのように表示されますか?コピペしてください・・・
713デフォルトの名無しさん:2005/06/19(日) 23:11:09
>>712
しねよ
714デフォルトの名無しさん:2005/06/19(日) 23:20:14
>>712
実行環境ぐらい手元に用意しろ
715ccc:2005/06/19(日) 23:23:31
>>714 いや違うんです。実行はしましたけど確認したいもので・・・(´_`。)
716デフォルトの名無しさん:2005/06/19(日) 23:25:06
国語の最高点は.... 60点です!!! オメデトー!
英語の最高点は.... 90点です!!! オメデトー!
数学の最高点は.... 60点です!!! オメデトー!
717ccc:2005/06/19(日) 23:26:51
>>714
ありがとうございまっす!!
718デフォルトの名無しさん:2005/06/19(日) 23:29:36
[1] 授業単元:
[2] 問題文(含コード&リンク):正弦波データの作成
    サンプリング周波数:32KHz
    チャンネル数:モノラル(1ch)
    周波数:1KHz
    フォーマット:WAV
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VC++6.0 Professional
 [3.3] 言語:C
[4] 期限:6月20日17:00
[5] その他の制限:

よろしくお願いします。
719718:2005/06/19(日) 23:30:42
追記
GUIでなくCUIです。
720デフォルトの名無しさん:2005/06/19(日) 23:35:11
それ、wavファイル操作するライブラリとか無しで素で書く訳?
721デフォルトの名無しさん:2005/06/19(日) 23:36:34
wav、Cマガでやってたような・・・。
722デフォルトの名無しさん:2005/06/19(日) 23:37:07
>>717
ネタをネタと(ry
723デフォルトの名無しさん:2005/06/19(日) 23:42:15
確かにCマガ6月号にのってたな。
724718:2005/06/19(日) 23:53:45
>>720
すみません、素で書くと大変ですよね。
フォーマット関しては何を使っても構いません。
725デフォルトの名無しさん:2005/06/20(月) 00:04:25
>>718
量子化ビット数は?
726718:2005/06/20(月) 00:11:52
>>725
なんですかそれは?
後、あまり音に関してはあまり知識がないため平易にお願いします
727デフォルトの名無しさん:2005/06/20(月) 00:15:05
>>725
1サンプルを何ビットで表すかってこと、普通8か16
728718:2005/06/20(月) 00:22:34
>>727
8でお願いします
729デフォルトの名無しさん:2005/06/20(月) 00:37:49
量子化8ビットなら、
0, 2, 9, 21, 37, 56, 78, 102, 127, 151, 175, 197, 216, 232, 244, 251, 254, 251, 244, 232, 216, 197, 175, 151, 127, 102, 78, 56, 37, 21, 9, 2,
の繰り返し。
730デフォルトの名無しさん:2005/06/20(月) 00:39:25
>>729
wavファイルにしてください。
731デフォルトの名無しさん:2005/06/20(月) 00:39:58
>>718
フォーマットは何でもいいということなんで、AUファイル形式にしました。
WAVはヘッダ部が多くてわけわからんかったから。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/573.c
なんかゲームボーイっぽい音なんだけどこれでいいんかね
732729:2005/06/20(月) 00:42:37
>>730
これでも立派なrawフォーマットだ。
733718:2005/06/20(月) 00:42:41
>>731
ありがとうございます
734デフォルトの名無しさん:2005/06/20(月) 00:43:02
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク):
int型の配列を表すクラス IntArray を作って下さい. このクラスは以下のような仕様にして下さい.
コンストラクタで配列の長さを設定し, 要素を全て0にする.
インデクスを指定して, 配列の要素を取得するためのメンバ関数を持つ.
インデクスを指定して, 配列の要素を書き換えるメンバ関数を持つ.
インデクスを指定して, 配列の途中に一つ値を挿入するメンバ関数を持つ.
インデクスを指定して, 配列の要素を一つ削除するメンバ関数を持つ.
配列の長さを取得するためのメンバ関数がある.
このクラスのインスタンス全てが確保しているメモリの量の合計を見る手段がある.
そしてアクセスコントロールを適切に行ない, 安全なクラスを設計でオネガイシマス。
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ(バージョン):VC++6.0
 [3.3] 言語:C++
[4] 期限:出来るだけ早く
[5] その他の制限: なし

ヨロシクお願いします(o*。_。)o
735731:2005/06/20(月) 00:45:29
すまん、振幅に200掛けてるとこ100にしといて。
736718:2005/06/20(月) 00:51:20
>>735
了解しました
737デフォルトの名無しさん:2005/06/20(月) 00:51:40
自分なりに考えたコードくらいは書けよと思うんだが、大学の講義の実態を考えるとそれも酷か。
738デフォルトの名無しさん:2005/06/20(月) 00:54:02
何の話?
739デフォルトの名無しさん:2005/06/20(月) 00:55:20
>>731
AUってビッグエンディアンじゃなかったっけ?
740731:2005/06/20(月) 00:57:29
>>739
8bit量子化ならエンディアン関係ないかなーって思った
741デフォルトの名無しさん:2005/06/20(月) 00:58:40
auって符号付きだっけ?
742デフォルトの名無しさん:2005/06/20(月) 01:00:39
>>740
いや、ヘッダが(w
743731:2005/06/20(月) 01:26:56
そ、そのへんの微調整は>>718ががんばってくれ、、
744691:2005/06/20(月) 01:30:33
>>699
どうもありがとうございます。
助かりました。
745デフォルトの名無しさん:2005/06/20(月) 01:38:43
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク): バタフライ演算をするプログラム。
どのようにプログラムすればいいのか教えて。
[3] 環境
 [3.1] OS:Windows/
 [3.2] コンパイラ(バージョン):borland5.0
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年7月21日まで

746デフォルトの名無しさん:2005/06/20(月) 01:47:28
>>745
FFT (高速フーリエ・コサイン・サイン変換) の概略と設計法
ttp://momonga.t.u-tokyo.ac.jp/~ooura/fftman/
そのままソースコードがある。
747デフォルトの名無しさん:2005/06/20(月) 01:47:55
>>745
バタフライ効果?
748デフォルトの名無しさん:2005/06/20(月) 02:14:00
749デフォルトの名無しさん:2005/06/20(月) 02:20:11
>>748
C言語初めて3ヶ月なので全然分かんない。
もっと簡単ではムリ??
750デフォルトの名無しさん:2005/06/20(月) 02:28:46
>>749
要求がC++なのにCかYO。
僕のコーディングじゃこれ以上コードは短くならないよ。
とはいえ、そんなに凝ったロジックはくんでないんだけどなー。
751デフォルトの名無しさん:2005/06/20(月) 02:39:03
>>749
ていうかC言語でクラス作れってか?
752デフォルトの名無しさん:2005/06/20(月) 03:04:53
749が734とは限らないからな。
753デフォルトの名無しさん:2005/06/20(月) 03:05:33
>>748
のC言語版つくってみた、結構めんどいな。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/575.lzh
754デフォルトの名無しさん:2005/06/20(月) 03:10:39
>>752
それもそうだな。
あーぁ、そろそろねるかな。
おやすみ。
755デフォルトの名無しさん:2005/06/20(月) 09:48:41
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):自分の好きな型の配列a[ ]を宣言し、
配列名a、aのアドレス&a、先頭要素a[0]のアドレス&a[0]を出力し、
皆同じ値になることを確かめよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:2005年 6月22日
[5] その他の制限:なし
756デフォルトの名無しさん:2005/06/20(月) 09:56:50
>>755
#include <stdio.h>
int main() {short a[1]; printf("%p, %p, %p\n", a, &a, &a[0]); return 0;}
757266:2005/06/20(月) 10:06:53
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
   以下の表は、1から100までの整数を、5で割ったときの余りと7で割ったときの余りを用いて分類し、
   個数を数えた結果を表している。
  例えば、表の「3」の行の「1」の列(第2列目)に書いてある数字(2)は、
  「1から100までの整数のうち、7で割った余りが3で、 しかも5で割った余り
  が1になるようなもの」の個数は2個しかない、ということを表している。

0 1 2 3 4
--------------------
0: 2 3 3 3 3
1: 3 3 3 3 3
2: 3 3 3 3 3
3: 3 2 3 3 3
4: 3 3 2 3 3
5: 3 3 3 2 3
6: 3 3 3 3 2

  横軸: 5で割った余り
 縦軸: 7で割った余り

同様の表を、1 から348までの整数について作り、表示するprogramを書く。

[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C++
[4] 期限:2005年6月21日午後10時まで
[5] その他の制限:配列まで

お願いします。
758デフォルトの名無しさん:2005/06/20(月) 11:29:05
>>757
授業はC言語入門なのに C++ で書くのか?
759デフォルトの名無しさん:2005/06/20(月) 13:33:00
>>757
int yxInt[7][5] = {{0}},i,k;
for(i=1;i<348;i++){
++yxInt[i%7][i%5];
}
printf(" 0 1 2 3 4\n-------------------\n");
for(i=0;i<7;i++){
printf("\n%d: ",i);
for(k=0;k<5;k++)
printf("%d ",yxInt[i][k]);
}
760759 ミスッタ:2005/06/20(月) 13:37:24
int yxInt[7][5] = {{0}},i,k;
for(i=1;i<=348;i++){
++yxInt[i%7][i%5];
}
printf(" 0 1 2 3 4\n-------------------");
for(i=0;i<7;i++){
printf("\n%d: ",i);
for(k=0;k<5;k++)
printf("%d ",yxInt[i][k]);
}
761デフォルトの名無しさん:2005/06/20(月) 13:40:49
<→<=
762デフォルトの名無しさん:2005/06/20(月) 15:34:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):ボウリングのスコア集計のプログラム作成

ボウリング大会のスコアの集計をするプログラムを作成する。
[条件]
名前と2ゲーム分のスコアが入力できる
全体のアベレージを出力する

[オプション機能]
・最高点の人の名前とスコア、最低点の人の名前とスコアを表示させる
・順位を入れると、その順位の名前が出力される
・名前を入れると、その人のアベレージが出力される
※同点の場合、ひらがな入力の場合はあいうえお順
       アルファベット入力の場合はabc順
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): ?/テラタームでVI使って実行してます。
 [3.3] 言語:C
[4] 期限:2005年6月22日まで
[5] その他の制限:4月に事務で入った会社でなぜかプログラマーになる勉強してます。
当方女なんですがまったくわからず困っています。。。
よろしくお願いします。
763762:2005/06/20(月) 15:35:12
すみません。あげてしまいました・・・
764デフォルトの名無しさん:2005/06/20(月) 15:43:14
[1] 授業単元:AprogrammingC
[2] 問題文(含コード&リンク):
ndPtr から始まる線形リスト中のノードで,データ値が dt であるものを探してそのノードへのポインタを返す関数
node_t * nodeSearch(node_t * ndPtr, data_t dt)
を作れ.
[3] 環境
 [3.1] OS:VineLinux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月20日24:00まで
[5] その他の制限:関数仕様は自由。
すいませんがおねがいいたします。
765デフォルトの名無しさん:2005/06/20(月) 15:53:06
>>762
名前とスコアの入力方法は?
入力される人数は?
766デフォルトの名無しさん:2005/06/20(月) 15:54:21
>>764
node_t 構造体の定義は?
767762:2005/06/20(月) 15:57:49
すみません、書いてなかったですね。
名前とスコアは手操作入力で行い、
人数は最大150人までです。

よろしくお願いします・・・!
768デフォルトの名無しさん:2005/06/20(月) 16:10:05
>>766

すいません、これだとおもわれます。

関数 int nodeDelete(node_t ** ndPrtPtr, int n) の仕様

*ndPrtPtr が指すリストの n 番目のノード(ノード番号は 0 番から始まる)
を削除する.削除したノードに割り当てられていたメモリは解放される.
ただし,リスト中のノード数が n 以下で,n番目のノードがない場合には,
何もしない.戻り値は,n番目のノードが削除できたときには SUCCESS,
n番目のノードが存在せず,削除できなかったときには FAILURE を返す.
769デフォルトの名無しさん:2005/06/20(月) 16:18:23
>>767
150人分手入力させんの?

>>768
それではない。
node_t と、data_t の「構造体定義」が分からないと書けない。
適当でいいなら適当に定義するぞ。

ほれ

typedef int data_t;
typedef struct _node_t
{
struct _node_t *next;
data_t data;
} node_t;
node_t * nodeSearch(node_t * ndPtr, data_t dt)
{
while( ndPtr )
{
if( ndPtr->data == dt ) return ndPtr;
ndPtr = ndPtr->next;
}
return NULL;
}
770762:2005/06/20(月) 16:21:59
>>769
何度も説明不足で申し訳ないです。
150人全員手操作入力ではなく、
最大、150人分入力できるようにメモリ(?)を確保する。
といった感じです。
771デフォルトの名無しさん:2005/06/20(月) 16:23:13
>>378
レポート不合格乙
772デフォルトの名無しさん:2005/06/20(月) 16:25:40
[1] 授業単元:プログラミング技術
[2] 問題文(含コード&リンク):
(1)
changeMonth関数を以下のように修正せよ。
1〜12以外の数値が与えられた場合には内部の数値が
変更されないようにする。
(2)
(1)のプログラムに対し、changeDay関数を以下のように
修正せよ。
monthに入っている値に対応して、異常な数値が入力された
場合には内部の数値が変更されないようにする。例えば
monthが4の時には1〜30以外の数値がchangeDayで与えられた
場合には内部の数値が変更されないようにする。なお、閏年
は考慮しなくてよい。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C++
[4] 期限:05年06月20日22時まで
[5] その他の制限:
よろしくお願いします。
773デフォルトの名無しさん:2005/06/20(月) 16:26:48
以下変更を行うプログラムです。
#include <iostream>
class MyDate {
private:
int day,month;
public:
MyDate(int Day=1, int Month=1);

void changeDay(int Day) { day = Day;}
void changeMonth(int Month) {month = Month;}

void print(void) {std::cout << day << ","<< month << "\n";}
};
MyDate::MyDate(int Day, int Month)
{
day = Day;
month = Month;
}
int main()
{
MyDate a(30,9);
a.print();

return 0;
}
774768:2005/06/20(月) 16:29:07
>>769
ありがうございました。説明不足ですいませんでした。
775デフォルトの名無しさん:2005/06/20(月) 16:34:56
>>762
ボーリングのスコアっていうのは単に 0 から 300 の整数?
それとも各レーンの点数レベルで保持する必要があるのかな?
ま、問題文にある機能を実現するのには必要ないとは思うんだけど。
776762:2005/06/20(月) 16:46:50
>>775
ボーリングのスコアは単に0から300の整数です。

あと、最大150人入力ってゆう所ですが、ifで150人になるまで
入力できるようにする。逆に151人目入れては駄目・・・
とゆう感じです。
なんか説明がうまくできてなくて申し訳ないです(´・ω・`)

どうやら期限がもう少し早まって21日までになりそうです。。。

777>>773:2005/06/20(月) 16:54:15
class MyDate {
private:
static const int maxDays[12];
int day,month;
public:
MyDate(int Day=1, int Month=1);

void changeDay(int Day) { if(Day > 0 && Day <= maxDays[month]) day = Day;}
void changeMonth(int Month) {if(Month > 0 && Month <= 12) month = Month;}
void print(void) {std::cout << day << ","<< month << "\n";}
};

const int MyDate::maxDays[12]={31,28,31,30,31,30,31,31,30,31,30,31};

MyDate::MyDate(int Day, int Month)
:day(1),month(1)//仕様には無いようだが初期化時のミスを確実に防ぐ
{
changeMonth(Month);
changeDay(Day);
}
778777:2005/06/20(月) 17:00:02
訂正
void changeDay(int Day) { if(Day > 0 && Day <= maxDays[month]) day = Day;}

void changeDay(int Day) { if(Day > 0 && Day <= maxDays[month-1]) day = Day;}
779デフォルトの名無しさん:2005/06/20(月) 17:01:50
780デフォルトの名無しさん:2005/06/20(月) 17:17:11
[1] 授業単元:programming C
[2] 問題文(含コード&リンク):
線形リストを複写する関数を作れ.
[3] 環境
 [3.1] OS:VineLinux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月20日24:00まで
[5] その他の制限:関数仕様は自由。
すいませんがおねがいできますか。
781デフォルトの名無しさん:2005/06/20(月) 17:39:24
問題文(含コード&リンク): バタフライ演算

nv2=n/2;
for(i=1;i<=m;i) /* m 段階バタフライ演算の第i 段階*/
{
l=1;
l<<=i;
l2=l/2;
jj=0;
ii=n/l;
for (j=0;j<12;j++) /* ブロック内第j 番データを起点とする*/
{ /* バタフライ演算を*/
for (k=j;k<n;k+=1) /* 第k/l ブロックについて実行*/
{ /* バタフライ演算ペアは*/
il=k+l2; /* 第k 番,il 番データ*/
xx=x[il]*wx[jj]-y[il]*wy[jj]; /* バ*/
xy=y[il]*wx[jj]+x[il]*wy[jj]; /* タ*/
x[il]=x[k]-xx; /* フ*/
y[il]=y[k]-xy; /* ラ*/
x[k]+=xx; /* イ*/
y[k]+=xy; /* 演*/
} /*算*/
jj+=ii;
}
}
if (inv==-1) for (i=0;i<n;i++) /* 逆変換の場合は*/
{ /* 点数n で割る*/
*(x+i)/=n;
*(y+i)/=n;
}
}
を、コンパイルできるように。
782デフォルトの名無しさん:2005/06/20(月) 17:40:29
>>781
続き
3] 環境
 [3.1] OS:win
 [3.2] コンパイラ(バージョン):borland
 [3.3] 言語:C,c++
[4] 期限:2005年6月21日1:00まで
783デフォルトの名無しさん:2005/06/20(月) 19:15:22
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
次の要件を満たすTCP/IP通信型大文字・小文字変換プログラム(サーバ・クライアント両方)を作成せよ。
サーバ
・クライアントから送信された文字列に対し、大文字は小文字に、小文字は大文字に変換して返す。
クライアント
・キーボードから文字列を入力
・入力された文字列をサーバに送信
・サーバから送信された文字列を画面に出力
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年6月21日10:00まで
[5] その他の制限:ポート番号は任意に定めてよい(ただし1024以上)
自分なりにやってみました。
クライアント
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/576.txt
サーバ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/577.txt
これを実行しても入力はできるのですが、サーバが何も反応しません。
どこをどう変えたらよいでしょうか?教えてください。お願いします。
根本的にやり方が間違っていたら、その辺の指摘もお願いします。
784デフォルトの名無しさん:2005/06/20(月) 19:19:20
>>781-782
頭に
main(){
  int nv2, n, i, l2, m, l, jj, ii, j, k, il, xx,x[100], wx[100], y[100], wy[100], xy, inv;
お尻に
}

でコンパイル&リンクできますた。動作は保障しません。
785デフォルトの名無しさん:2005/06/20(月) 19:48:06
>>780
mallocに失敗した時の処理は無いけど。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/578.txt
786デフォルトの名無しさん:2005/06/20(月) 19:59:09
>>783
とりあえずclientがconnect()に指定してるポート:1357
serverがbind()してるポート:1456
となってる訳だが、typoか?
787783:2005/06/20(月) 20:01:57
ポート番号やIPアドレスとかがあまりよくわかっていないので、適当に指定してしまいました。
しばらくここに滞在して動作確認するつもりなのでいろいろ指摘お願いします。
788デフォルトの名無しさん:2005/06/20(月) 20:05:42
断る。
789785:2005/06/20(月) 20:06:07
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/579.txt
mainサンプルの方で初期化がおろそかになっていたので訂正。
実体が一個だけだとひどいことに
790デフォルトの名無しさん:2005/06/20(月) 20:07:19
>>787
> しばらくここに滞在して動作確認するつもりなので
おいおい....

つか、>>783のコード見る限り、多少は分かってんのかと
思いきや、コピペか何かだったのか?
791デフォルトの名無しさん:2005/06/20(月) 20:08:34
うん、鯖がポート1456で誘ってたら、
ちゃんと1456に入れてあげるのが以下略。
792783:2005/06/20(月) 20:11:11
プロセス間通信のプログラムがあったので、そこに自分で変更してやってみました。
多少TCPのやり方なども配布プリントに書いてあったのですが、ポート番号の指定条件
みたいなことはぜんぜん書いてなかったので、適当にやってしまいましたが、やはり駄目でしょうか?
793デフォルトの名無しさん:2005/06/20(月) 20:14:10
1357号室で待ってるのに、1456号室に問い合わせてもしょうがないべ。
794デフォルトの名無しさん:2005/06/20(月) 20:14:15
「適当にやってしまいましたが、やはり駄目でしょうか? 」
結構ですよ。
そういう人生もありです。
795783:2005/06/20(月) 20:16:00
ポート番号同じにしてみましたが、やはり結果は変わりませんでした。
fprintf(stderr, "Connection establishd: socket %d used.\n", soc);
この部分も出ません
796デフォルトの名無しさん:2005/06/20(月) 20:16:16
>>792
サーバマシンのIPアドレスと、サーバが待機してるポートを
指定してconnect()せんと、つながらないよ
基本中の基本

サーバとクライアントを同じ端末で実行してるんなら、IPアドレスは
ループバック(127.0.0.1)でよい。
797デフォルトの名無しさん:2005/06/20(月) 20:20:49
ソケットとか、その前にインデントくらいちゃんとしような?
798783:2005/06/20(月) 20:28:59
bind:Address already in use と出ました・・・
>>797
すみません・・
799デフォルトの名無しさん:2005/06/20(月) 20:31:30
>>798
同じアドレス/ポートに複数のソケットをbind()することはできない。

多分、プログラムがTCP/IPにおけるTIME_WAIT状態に入ってる状態で
終了し、もう一度起動したせいで出たんだろう。

1) プログラムが多重起動してないか確認する
2) 多重起動してないんなら、しばらく(せいぜい数分程度)待つ

で試してみ。それを避ける方法もあるが、面倒なので説明しない。
800デフォルトの名無しさん:2005/06/20(月) 20:40:35
率直に他のポート使ったほうが早い気がする・・・。
801783:2005/06/20(月) 20:44:37
出来ました!長々とありがとうございました。
802デフォルトの名無しさん:2005/06/20(月) 20:45:17
それからネ、鯖でret分だけreadしたのに、変換後のバッファは1024バイト固定で返してるアルネ。
クライアントでゴミ出るアルヨ。
803デフォルトの名無しさん:2005/06/20(月) 21:21:30
ここで答えてくれている人たちは誰?
804デフォルトの名無しさん:2005/06/20(月) 21:29:05
デフォルトの名無しさんたちです。
805デフォルトの名無しさん:2005/06/20(月) 21:29:59
達? 俺一人だよ?
806デフォルトの名無しさん:2005/06/20(月) 21:45:25
[1] 授業単元: プロ言
[2] 問題文(含コード&リンク):クイックソートを用いて、配列に入ったN個のデータを昇順に並び替えるプログラムを作成する。
quick関数を完成させ、比較回数と交換回数を表示させよ。
Nは最初20個とし、100個、1000個と増やし、timeコマンドを使用し各実行時間を測定せよ。
[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年6月25日24:00まで
[5] その他の制限:基本的に関数仕様を変更することはできない。 -cursesのオプションをつけて実行させる。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/580.txt
Nの値が20個の時はうまく動いているように見えるのですが、値を100に変更するとソートが途中で止まってしまいます。
一見うまく動いているように見えるのですが。。。
よろしくお願いします。
807デフォルトの名無しさん:2005/06/20(月) 21:45:31
俺だよ、俺俺
808607:2005/06/20(月) 21:55:06
809デフォルトの名無しさん:2005/06/20(月) 22:00:47
>>808
精神がちょっと嫌な感じになった。
俺も迂闊だったが、お前も今後配慮してくれ。
810デフォルトの名無しさん:2005/06/20(月) 22:06:22
>>808
これがこのスレの主アルカ・・・。

>>806
アノネ、片方「<」で見てってもう片方が「>」で見てったら、
「=」の部分とおりこしちゃうアルヨ。
それで分割統治が破綻してるアルネ。
811デフォルトの名無しさん:2005/06/20(月) 22:07:42
通り越すんじゃない、寸止めしちゃうだったネ。
812デフォルトの名無しさん:2005/06/20(月) 22:43:28
>806
N=20でも
for( i=0; i<N; i++ ){
data[i] = 1;
}
とかだと停まらないよね?
813デフォルトの名無しさん:2005/06/20(月) 23:11:59
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):入力を要求し、入力された文字列を使って何か応答(出力)するプログラムを作れ。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年06月24日16:30まで
[5] その他の制限:特になし

内容は自分で考えるとして、「入力した文字列の内容で出力が変化する」という一連の流れをご指南下さい。お願いします。
814デフォルトの名無しさん:2005/06/20(月) 23:14:14
(1)文字列を受け取る
(2)受け取った文字列を評価する
(3) (2)の結果で処理を分岐させる。

以上。
815デフォルトの名無しさん:2005/06/20(月) 23:22:15
>>
>>814 別に受け取った文字列によって処理を分岐させる必要はないと思うんだが。
char id[10], pass[10];
printf("Login:");
scanf("%9s", id);
printf("Password:");
scanf("%9s", pass);
printf("Howdy, %s\n", id);
うーむ。標準関数だけでわ、パスワードがコンソールに表示されてしまう...orz
816デフォルトの名無しさん:2005/06/20(月) 23:24:47
例えば
氏名と性別を入力させて
Mr.〜とかMs.〜と表示
とか
817デフォルトの名無しさん:2005/06/20(月) 23:28:00
>>757
この問題面白いな。

#include <stdio.h>
void
foo(unsigned n)
{
unsigned nq = n/35;
unsigned nr = n%35;
for (unsigned y = 0; y < 3*5*7; y += 3*5) {
for (unsigned x = 0; x < 3*5*7; x += 3*7) {
printf("%2u ", nq+((y+x)%35 <= nr));
}
printf("\n");
}
}
int
main()
{
foo(348);
return 0;
}
818デフォルトの名無しさん:2005/06/20(月) 23:30:37
>>815
何か「応答例が多く、気の利いたことを答えられるプログラムに高い評価を与える」らしいので
たくさん答えられるやつが良いみたいです。

>>814
「文字列を評価」ってのが分かりませぬ。
数字の場合と同じように条件文に(変数) = (文字列)ってやっちゃってもダイジョブですか?
初歩的ですみません。
819デフォルトの名無しさん:2005/06/20(月) 23:39:14
[1] 授業単元: C入門
[2] 問題文(含コード&リンク): 個人のボウリングのスコア合計と平均を出力するプログラム
whileまたはforを用いて無限ループを作成し、
マイナス数値が入力された次点で無限ループを終了する
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): C++6.0
 [3.3] 言語:C
[4] 期限:6/21まで
[5] その他の制限:特になし

上に似たようなのあったな。俺のほうがずっと簡単そうだ
ちょっと作ってみたがうまくいかない
だれか救助求
820デフォルトの名無しさん:2005/06/20(月) 23:43:44
>>814
くだらないけど・・・。
#include<stdio.h>

int main(void)
{
int n1;
/*数を入力してもらう*/
printf("( ´Д`)大小ゲームしまそ♪なにか数字を入れてくださいな:\n");
scanf("%d" , &n1);

if (n1 < 25 )
puts("(゜∀。)ワヒャヒャヒャヒャヒャヒャ、カッタ");

else if (n1 == 25)
puts("(((( ;゚д゚))))アワワワワ、ナカナカヤルナ\n");

else
printf("(;´∀`)…うわぁ…マケタ\n");

return (0);
}
821デフォルトの名無しさん:2005/06/20(月) 23:49:43
>>806
while( data[j]>data[pivot] ){
j--;
compare++;
}
ここを
while( i < --j && data[j]>data[pivot] ){
compare++;
}
こうする
822デフォルトの名無しさん:2005/06/20(月) 23:58:06
>821
>810嫁
823デフォルトの名無しさん:2005/06/21(火) 00:02:17
824デフォルトの名無しさん:2005/06/21(火) 00:09:59
>>806 >>810 >>821 >>822
while 連続のとこはコレが正解。

while (data[++i] < data[pivot]) { compare ++; }
while (data[--j] > data[pivot]) { compare ++; }

でないとdata[i]==data[pivot]&&data[j]==data[pivot]の状態で確実に無限ループ。
825デフォルトの名無しさん:2005/06/21(火) 00:10:16
>>762
なんかだめだめだが入力してアベレージでソートするところまで。
全体のアベレージっていうのが何を意味するのかよくわからなかったので
その辺は気にしてません。
オプション機能も一切実装されてませんが。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/581.txt
826デフォルトの名無しさん:2005/06/21(火) 00:12:03
>824
もうねアフォかと
while( data[i]<data[pivot] ){
i++;
compare++;
}
while( data[j]>=data[pivot] ){
j--;
compare++;
}
でええやん
827819:2005/06/21(火) 00:22:26
>>819は自己解決
単なるfloatの入力ミスだった
828デフォルトの名無しさん:2005/06/21(火) 07:51:58
>>824
プリインクレメントしたら、ピボット除いた端の数値を飛ばしちゃうネ。
829762:2005/06/21(火) 09:34:48
>>825
どうもありがとうございます。
かなりの初心者な私にはわからないことだらけですが
頑張って理解したいと思います。

あ、全体のアベレージは個人のアベレージの他に
入力した人数全員分の平均を出す、とゆうことです。
(5人入力したなら5人の平均も出す)

ずうずうしいお願いなんですが、実行した時、
入力を途中でやめるプログラミングは組み込めないでしょうか?

例>>
name>普通に入力
1st>普通に入力
2st>普通に入力

のあとに

---まだ入力するなら1・それ以外なら0-----

のようなものをお願いしたいのですが・・・

入力を終了するとその後普通にアベレージが出る
という感じにしたいのです。

自分でも頑張ってるんですが全くはかどらず(つД`)
830762:2005/06/21(火) 10:26:25
何度もすいません(´Д`)
ボーリングの問題はこれの応用だ、上司に言われたんですがこの問題すらサパーリで。
問題>>手操作入力で名前と点数を入力して、合計点が一番高い人の名前と
合計を出力させよ(MAX5人まで)また各教科毎に点数が一番高い人の名前と点数も出力させよ。
(同点者もいるものと考える)
これが答え例らしんですが。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct test{
char name[10];
int lang;
int math;
int engl;
};

main()
{
int i,j=0,s;
char l[5],m[5],e[5];
int cnt=0,flag=1,goukei[5],la_max=0,ma_max=0,en_max=0,sum_max=0;
char a[5];
struct test test_tbl[5];

for(i=0;flag==1;i++){

831762つづき:2005/06/21(火) 10:29:22
printf("名前を入力→");

while((a[j]=getchar())!='\n'){
j++;
}
   
a[j]='\0';
j=0;
strcpy(test_tbl[i].name,a);

printf("国語の点数を入力→");
while((l[j]=getchar())!='\n'){
j++;
}

832762つづき:2005/06/21(火) 10:30:21
l[j]='\0';
j=0;
test_tbl[i].lang=atoi(l);
if(la_max < test_tbl[i].lang){
la_max=test_tbl[i].lang;
}
printf("\n");
printf("数学の点数を入力→");
while((m[j]=getchar())!='\n'){
j++;
}
m[j]='\0';
j=0;
test_tbl[i].math=atoi(m);

if(ma_max < test_tbl[i].math){
ma_max=test_tbl[i].math;
}
printf("\n");
printf("英語の点数を入力→");
while((e[j]=getchar())!='\n'){
j++;
}
e[j]='\0';
j=0;
test_tbl[i].engl=atoi(e);

if(en_max < test_tbl[i].engl){
en_max=test_tbl[i].engl;
}
833762つづき:2005/06/21(火) 10:31:14
printf("\n");
goukei[i]=test_tbl[i].lang + test_tbl[i].math + test_tbl[i].engl;
if(sum_max < goukei[i]){
sum_max=goukei[i];
}
    if(i<4){
printf("++++++++%d人目入力続行?++++++++\n",i+2);
printf("続行--->1\n終了--->1以外\n");

while((a[j]=getchar())!='\n'){
j++;
}
a[j]='\0';
j=0;
flag=atoi(a);
}
else{
flag=0;
}
}
printf("************** 結果発表 **************\n\n");
printf("\n<<<<< 国語 >>>>>\nTOP:");
printf("%d\n",la_max);
printf("最高点者は\n");
for(j=0;j<=i;j++){
if(test_tbl[j].lang==la_max){
printf("【 %s 】さん\n",test_tbl[j].name);
}
}
printf("\n");
834762つづき:2005/06/21(火) 10:31:28
printf("\n<<<<< 数学 >>>>>\nTOP:");
printf("%d\n",ma_max);
printf("最高点者は\n");
for(j=0;j<=i;j++){
if(test_tbl[j].math==ma_max){
printf("【 %s 】さん\n",test_tbl[j].name);
}
}
printf("\n");
printf("\n<<<<< 英語 >>>>>\nTOP:");
printf("%d\n",en_max);
printf("最高点者は\n");
for(j=0;j<=i;j++){
if(test_tbl[j].engl==en_max){
printf("【 %s 】さん\n",test_tbl[j].name);
}
}
printf("\n");
printf("\n<<<<< 最高得点者 >>>>>\nTOATAL:");
printf("%d\n",sum_max);
printf("最高点者は\n");
for(j=0;j<=i;j++){
if(goukei[j]==sum_max){
printf("【 %s 】さん\n",test_tbl[j].name);
}
}
}

何度も申し訳ないでつ。
難しいよボーリング・・・
835デフォルトの名無しさん:2005/06/21(火) 10:31:56
>>829
実行してねーけど、こんな感じじゃねーのかな。

/* データの入力 */
for( nmember=0; nmember<SCORE_MAX_NO; nmember++){
char c;

printf("-- input data no.%d --\n", nmember+1);
if( ( score[nmember] = make_data() ) == NULL ) break;
printf(" ---まだ入力するなら1・それ以外なら0----- \n");
scanf("%c", &c);
if (c == '1') {
;
} else if (c == '0') {
break;
} else {
printf("Fu$k yo$!");
}
}
836デフォルトの名無しさん:2005/06/21(火) 10:35:36
>>762
おまえアホか。
量あるもんはうpろだに挙げろい ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

それにしても酷ぇ回答例だな。まったくどこの会社よ。
837762:2005/06/21(火) 10:46:24
>>836
申し訳ないです(つД`)
以後気をつけます・・・
会社は、こんな初心者にいきなりポインタとか構造体やれ言ってくる
微妙なIT会社です(藁
838デフォルトの名無しさん:2005/06/21(火) 10:51:44
いや、IT会社とは思えないが。
それとも研修担当だからヘボいのかもな。
どちらにしろ、あんた酷だわ。
それからポインタとか構造体を最初から難しいものと思うな。

インデント済みな830
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/582.txt
839デフォルトの名無しさん:2005/06/21(火) 10:52:15
>while((a[j]=getchar())!='\n'){
>j++;
>}

すげぇ、こんな糞みたいなコード久しぶりに見たよ。
840762:2005/06/21(火) 10:58:45
みなさん申し訳ないです・・・
事務で入ったのにPGになれって特訓うけてます。
もうだめぽ(´・ω・`)
841デフォルトの名無しさん:2005/06/21(火) 11:01:04
>>762
入った会社が悪すぎる。
プログラマになるにしても、もう少しまともに教えられるところでナイトね。
私の勤める会社なら、教えるのも懇切丁寧、手取り足取りフレンドリー(ぉぃ
842デフォルトの名無しさん:2005/06/21(火) 11:03:01
ちょっと不安になってきたなぁ。>762には社名を晒してほしいよ。
まさか>830みたいなコードを出荷しちゃいないとは思うけど……
843デフォルトの名無しさん:2005/06/21(火) 11:04:11
>>762
もの凄い勢いでこの2冊注文してください。
会社にあったとしても、少なくとも下の1冊は自分用に買う。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797324775/249-8823549-1056336
ttp://www.amazon.co.jp/exec/obidos/ASIN/4320026926/249-8823549-1056336
上司に甘い声でねだれば経費で出してくれるかもしれんな。
844762:2005/06/21(火) 11:14:21
短大卒業してまだハタチなんでねだれば経費で出してくれますかね?w
同僚の人?は林晴比古のがオススメって言われましたが・・・

上司はプログラミングは動けばなんでもいー
って言ってあんまり教えてくれません(´ω`)

会社名はさすがにまずいんですが頭文字はsがつく会社です
845デフォルトの名無しさん:2005/06/21(火) 11:20:28
>>844
危機感が無いようだから教えておく。
仮に、>830のようなコードを「動けばいい」として出荷すると、
外部からの進入に対してまったく無防備だったり突然暴走して死亡事故を起こす原因になったりする。
そんなコードを仮令研修用としてでも使っているような会社は、信頼に値しない。
#まぁ、ハルピコお勧めなんて言ってるようじゃそんなもんだろうけど。
846デフォルトの名無しさん:2005/06/21(火) 11:24:10
Sか・・・。

>843の二冊は自分の金でかっておけ。
もし762がエイダ女史の亡霊たる女性コーダーとして、
現代に蘇りたいなら、まずは財布の紐を緩めるしかない(何の話だ)。
847デフォルトの名無しさん:2005/06/21(火) 11:26:44
830のコードは最悪に近いレベルのコードです。
誰か同じ動作をする模範コードをうpしる!
848762:2005/06/21(火) 11:37:06
まずい会社ディスカ・・・・
わかりやすいプログラミングでお願いしますっていったら
君はこんくらいかーってこれ渡されました。

ボーリングのプログラミングもサパーリ進まないしもうダメポ。
みなさん知恵を貸してください・・・!

教えてチャソで申し訳ないです。
849デフォルトの名無しさん:2005/06/21(火) 12:00:16
>>762
期限今日までなんでしょう?
とりあえず動かなくてもいいから、出来たとこまでをうpしてみれば?

ここの住人がボーリングの集計プログラムを書くのは訳ないと思うけど、
それであなたが上司に過大評価されてもっと遥かに難しい問題を
出題されるかもしれない。
そういうことは無いんでしょうか?
考えてません?
上司だって大脳を標準装備してる人間なんですから、
違う人が書いたプログラムだって分かると思いますよ。
あんなコードしか書けなくても。
850デフォルトの名無しさん:2005/06/21(火) 12:01:03
>>762
おい!そりゃハッキリ言ってまずい会社だ。
CMのオー人事オー人事を思い出しちまったぞ。
お前さんはこんな自分の会社に注文したいと思うか?
851デフォルトの名無しさん:2005/06/21(火) 12:11:43
事務志望だったPGには酷というものだ
852762:2005/06/21(火) 12:54:51
>>849
んーこれを乗り切れば他のやらなきゃいけない雑務が結構
あるんでとりあえずは大丈夫かなぁと思ったんですが・・
853デフォルトの名無しさん:2005/06/21(火) 13:01:05
>>852
そーすかぁ、、んじゃ昼飯食ったあとちょっと書くから、
冷えたビール用意して待っててくださいよ。
854762:2005/06/21(火) 13:33:51
>>853
あああありがとうございます

とりあえずビール・・・
  __
  | ̄ ̄ ̄ ̄ ̄ ̄  |
  |_______.  |━━┓
  |         |┏┓┃
  |         |┃┃┃
  |         |┗┛┃
  |         |━━┛
  |         |
   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 
855762:2005/06/21(火) 13:35:15
と思ったけどビールくずれてますた(´・ω・`)スマソ
856デフォルトの名無しさん:2005/06/21(火) 15:04:38
>853は満漢全席でも食べているんだろうかw

>>762
事務で採った人間をプログラマとして使うという段階でとんでもない会社だ。
事務職募集に応募して、それが雇用条件になっているのなら労働基準監督局に申し立てるべき。
#>762自身がプログラマになりたいなら別だが。

もし、プログラマになりたいなら自力で作れ。間に合わないなら間に合わない旨を報告しろ。
何故なら、私のところで中途採用した場合などは敢えて間に合わない期限を設定して
それに対してどう対処するかを観察するということを行なうから。
そこで他人の作ったものを提出して誤魔化すようなら、適性はないものと見なさざるを得ない。

というわけで、いずれにしてもここでプログラムを作ってもらうのはやめた方がいい。
857デフォルトの名無しさん:2005/06/21(火) 15:07:33
>>762
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/583.txt
はぁ、冷えてねぇ・・・・。

ところで、これをちょい修正して提出したとして、
間違って才能を見込まれて前線に送られても知りませんからね。
あんなコード書いてる連中ですから、何されるか分かったもんじゃねぇ。
858857==853:2005/06/21(火) 15:19:38
やべー今見ると荒削りだわ、まぁ、キニスンナ。

漏れは「プログラマになりたい人」がこんなとこに課題をまる投げするとは思えない。

会社としては、たぶん、
・事務職だが一応IT会社なのでプロダクトや基礎的なプログラミングは知っておいて欲しい。
・オトコばっかなので、士気を上げる為女神として開発部に居座って欲しい。
のどちらかかと。
859デフォルトの名無しさん:2005/06/21(火) 15:20:59
[1] 授業単元: Cプログラミング基礎
[2] 問題文(含コード&リンク): t ∈ [0, 3.14] の区間で x が 0 から 0.01 刻みずつ +3.14 まで変化するものとする。
このとき
x(t) = exp( a * t ) * cos( w * t )
y(t) = exp( a * t ) * sin( w * t )
の x-y データは、どのようなグラフになるか?
[3] 環境
 [3.1] OS:Redhat Linux(大学のもの)
 [3.2] コンパイラ(バージョン): ??
 [3.3] 言語:C言語
[4] 期限:6/22まで
[5] その他の制限:基礎的なことしか習ってません。

・・・文系が、興味本位で他学部履修科目として選択したので、こういうのが出てくると数学的に意味がわかりません・・・。
860762:2005/06/21(火) 15:23:18
>>857
ありがとうございまつ(´Д`)ノ
ビール冷えてなかったですか・・・

とりあえず事務じゃなきゃヤダとは言ってるんで
今後はそっちに移してくれると思うんですが。

周りの同期に聞きながらやってることはやってるんで
もうちょっとガンガッテみます!!
でもこのプログラミングめいっぱい
参考にさせていただきます(´∀`)
本当にありがとうございます。
861773:2005/06/21(火) 15:55:53
>>777さま
遅れましたがありがとうございました
862デフォルトの名無しさん:2005/06/21(火) 16:12:01
>>859
まずは数学を勉強汁。
863デフォルトの名無しさん:2005/06/21(火) 16:16:24
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "lib_bmp_io.h"
#define SIZE1024
unsigned char header[] = {0x42, 0x4d, 0xe6, 04, 00, 00, 00, 00, 00, 00, 0x36, 00, 00, 00, 0x28,00, 00, 00, 00, 04, 00, 00, 00, 04, 00, 00, 01, 00, 0x18, 00, 00, 00, 00, 00, 0xb0, 04, 00, 00, 00, 00, 00, 00, 00, 00, 00,00, 00, 00, 00, 01, 00, 00, 00, 00};
#define ADD_usb(a, b)if((a + b) > 255) a = 255; else a +=b
int main(void)
{
float a, w, t, x, y; unsigned char *p; int ix, iy; FILE *fp;
p = malloc(SIZE * SIZE * 3); memset(p, 0, sizeof(p));a = 0.1;w = 0.1;/*ま適当に*/
for (; a < 10.0; a += 0.01, w -= 0.01) {for (t = 0; t <= 3.14; t += 0.01) {
x = exp( a * t ) * cos( w * t ); y = exp( a * t ) * sin( w * t );
ix = (int)(x * 2.0) + SIZE/2; iy = (int)(y * 2.0) + SIZE/2;

if (ix >= 0 && ix < SIZE && iy >= 0 && iy < SIZE) {
ADD_usb(p[(iy * SIZE * 3) + ix * 3 + 0], 64);
ADD_usb(p[(iy * SIZE * 3) + ix * 3 + 1], 64);
ADD_usb(p[(iy * SIZE * 3) + ix * 3 + 2], 64);
}
}}
fp = fopen("a.bmp", "wb");fwrite(header, 1, sizeof(header), fp); fwrite(p, 1, SIZE * SIZE * 3, fp);
fclose(fp);free(p);return 0;
}
864デフォルトの名無しさん:2005/06/21(火) 16:16:51
>>859
Excelでグラフ作ってみればすぐ分かるけど、等角螺旋のグラフになるよ。
>361にほぼ同じ問題が、>363にそのプログラムがある。
865デフォルトの名無しさん:2005/06/21(火) 16:19:35
>>863
テンプレ読んでそのプログラム?w
866856:2005/06/21(火) 16:26:07
>>858
scanf()の辺りが……

それはさておき、「プログラマをやりたい人」と言うべきだった。
私のところで、研修期間(⊂試用期間)にメールでプログラムを作ってもらってた香具師がいたもんでね。
本人実力もセンスもないのにできる振りしてたから気づくまでずっと彼氏に作らせてた。
867デフォルトの名無しさん:2005/06/21(火) 16:28:12
仕事なら、自分の能力を偽っても
自分もまわりも後で困るだけなんだよな。
全く薦められない。
868858==863:2005/06/21(火) 16:30:43
>>865
暇なんですよw
ま、いまから出かけるんですけどw

>>866
スマンです。ちゃんとやるなら、fgets+sscanfですかね。

まぁ、デリゲーションするのも処世術の一つなんでしょかね。
自分が苦手な事は、それが得意な他人がやるべきだ。
まぁ、自分の能力の向上の事を考えなければ、もっともなんだが。
869デフォルトの名無しさん:2005/06/21(火) 18:52:01
[1] 授業単元: プログラミング演習
[2] 問題文:
英単語を入力すると対応する和訳が出る簡易英単語辞書を作成せよ。使用は次の通り
英単語と和訳の対応のための辞書をファイルtango.dicとして作成する。
辞書ファイルの形式は英単語コンマ和訳改行から構成させるソートはしなくてもよい。
例 book,hon
またqを入力することで終了するものとする。
出力例
Prompt> ./.out tango.dic
English word : book
book in Japanese.
English word : q
Prompt >
[3] 環境
 [3.1] OS:mac
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:明日の昼ごろまで
[5] ファイル操作は一通り習いました
よろしくお願いします
870869:2005/06/21(火) 18:55:57
hon in Japanese.
すみません間違えました。
後日本語入力が不可能なので
和訳がローマ字にならないといけないので
そこを踏まえたうえでお願いします。
871デフォルトの名無しさん:2005/06/21(火) 19:02:46
>>869
辞書ファイルの大きさは任意?
malloc系は習っている?
872869:2005/06/21(火) 19:44:21
辞書ファイルの大きさは任意?
大規模ではなく英単語&和訳は4、5行位でもいいようです。

malloc系は習っている?
すみませんわかりません。
873デフォルトの名無しさん:2005/06/21(火) 20:53:36
>>869
#include <stdio.h>
#include <string.h>
#define TOALPHA(c) (('a'<=(c)&&(c)<='z')?(c)+'A'-'a':(c))
#define DIC_MAX 8
#define DIC_LEN 256
int main( int argc, char* argv[] )
{
FILE *pf; int i, j; char dic[ DIC_MAX ][ DIC_LEN ], eng[ DIC_LEN ];
if ( argc >= 2 ) {
pf = fopen( argv[ 1 ], "rt" );
if ( pf == NULL ) return 0;
for ( i = 0; fscanf( pf, "%s\n", dic[ i ] ) != EOF; ) { i++; if ( i == DIC_MAX ) break; }
for ( ; i < DIC_MAX; i++ ) dic[ i ][ 0 ] = '\0';
fclose( pf );
while ( 1 ) {
printf( "English word : " ); scanf( "%s", eng );
if ( strcmp( eng, "q" ) == 0 ) break;
for ( i = 0; i < DIC_MAX; i++ ) {
if ( dic[ i ][ 0 ] == '\0' ) break;
for ( j = 0; eng[ j ] != '\0'; j++ ) if ( TOALPHA( eng[ j ] ) != TOALPHA( dic[ i ][ j ] ) ) break;
if ( eng[ j ] == '\0' && dic[ i ][ j ] == ',' ) printf( "%s in Japanese.\n", &dic[ i ][ j + 1 ] );
}
}
}
return 0;
}
874デフォルトの名無しさん:2005/06/21(火) 21:13:03
ん、ん?
875869:2005/06/21(火) 22:04:06
遅れましたが
>>873さまありがとうございました
876デフォルトの名無しさん:2005/06/21(火) 22:04:31
先生!なんかこのスレ急にカラフルになってきています!
877デフォルトの名無しさん:2005/06/22(水) 00:27:46
プログラム演習
 文字列の後半と前半の文字が同じならくっつけて出力(長い方があればそっち)
サンプル
ABB
BCCB
出力
ABBCCB
サンプル
ACC
CCCA
出力
ACCCA  

[3] 環境
  OS:Linux
言語:C
[4] 期限:明日の昼ごろまでにできえれば・・
こんな情報だけではむりですかね?
 最後と最初の参照だけでなく 二文字 三文字の参照のやり方がまったくわかりません
 一通りのプログラムはならいました(/□≦、)
878877:2005/06/22(水) 00:34:30
まちがえました・・
二個目の問題は 長い方だとCCCACC が出力されますね。
入力
ABC
BCD
出力
ABCD  にしてください。。。二文字目どー判別させるんだ・・
879デフォルトの名無しさん:2005/06/22(水) 00:37:29
同じ文字数ならどうすんだ?
880877:2005/06/22(水) 00:39:14
両方出力します
ペコm(_ _;m)三(m;_ _)mペコ
881デフォルトの名無しさん:2005/06/22(水) 00:58:30
>>877
問題の条件が妙に複雑だな。
「長い方があればそっち」ってそういう意味なのか?
# include <stdio.h>
# include <string.h>

int wrap_length(const char *a, const char *b) {
    int al = strlen(a);
    int bl = strlen(b);
    int l;
    if(al > bl) {
        a += al - bl;
        al = bl;
    }
    for(l = al; l >= 0; l--)
        if(strncmp(a + (al - l), b, l) == 0) return l;
    return 0;
}
int main(void) {
    char a[128], b[128];
    int wla, wlb;
    gets(a);
    gets(b);
    wla = wrap_length(a, b);
    wlb = wrap_length(b, a);
    if(wla && (!wlb || wla <= wlb))
        printf("%s%s\n", a, b + wla);
    if(wlb && (!wla || wlb <= wla))
        printf("%s%s\n", b, a + wlb);
    return 0;
}
882858==863:2005/06/22(水) 01:01:05
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[256];
char *p;
int len, i;

printf("1番目のアレを入力してください:");
fgets(str, sizeof(str), stdin);
len = strlen(str) - 1;
p = str + len;
printf("2番目のアレを入力してください:");
fgets(p, sizeof(str) - len, stdin);

if (str[strlen(str)-1] == '\n') str[strlen(str)-1] = '\0';
if (strlen(str) < len) len = strlen(str);

for (i = len; i >= 1; i--) {
if (strncmp(p - i, p, i) == 0) {
memmove(p - i, p, strlen(p) + 1);
break;
}
}
printf("[%s]", str);
return 0;
}
883863:2005/06/22(水) 01:02:22
2分35秒負けたか・・・。
884863:2005/06/22(水) 01:03:57
すまん、双方チェックすんのか。鬱だ。
885877:2005/06/22(水) 01:10:48
ぬお はや・・・881さんありがとう。
ちなみに文字が長い方じゃなくてくっつけて文字列が長くなる方を出力。
でした。。と、適当に勉強してたら なに聞けばいいのかも
わからない始末・・
もっと精進します。ありがとうございました。
886881:2005/06/22(水) 01:21:58
同じ文字列が二回出力されるバグがあった…
許容範囲かな?
887877:2005/06/22(水) 01:24:00
>863さんもありがとう! がんばってきます
888881:2005/06/22(水) 01:29:49
>>877
mainを以下のように訂正する。
汚いソースですまん。
nt main(void)
{
    char a[128], b[128];
    char out[128] = {0};
    int wla, wlb;
    gets(a);
    gets(b);
    wla = wrap_length(a, b);
    wlb = wrap_length(b, a);
    if(wla && (!wlb || wla <= wlb))
    {
        sprintf(out, "%s%s", a, b + wla);
        puts(out);
    }
    if(wlb && (!wla || wlb <= wla))
    {
        char out1[128];
        sprintf(out1, "%s%s", b, a + wlb);
        if(out[0] && strcmp(out, out1) != 0)
            puts(out1);
    }
    return 0;
}
889881:2005/06/22(水) 01:31:55
>>888のntはintの誤りだ。
永眠してくる。
890デフォルトの名無しさん:2005/06/22(水) 07:22:01
>>889
もやすみ
891デフォルトの名無しさん:2005/06/22(水) 10:29:36
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):整数を決められた回数(三回)だけ入力し、
その偶奇を判定する
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年6月23日
[5] その他の制限:
宜しくお願いします
892デフォルトの名無しさん:2005/06/22(水) 10:45:26
[1] 授業単元: プログラミング演習
[2] 問題文:1)一次元データを読み込む関数1{a)下のファイル、b)乱数}を作成
      2)そのデータを読み込み、データ数、最大最小、平均値、標準偏差を求める関数2
      3)一次元データを他の関数より取り込み、その結果を表示する関数3
      4)三つの関数をつないでmain関数を完成させよ

英語 数学 国語 理科 社会
70 56 66 45 88
66 85 68 55 73
55 65 53 67 55
85 72 76 58 65
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6月23日まで
[5] その他の制限:ポインタ、構造体はまだ習っていません

お願いします
893デフォルトの名無しさん:2005/06/22(水) 11:26:50
学校名、会社名もテンプレに入れて欲しい。
894デフォルトの名無しさん:2005/06/22(水) 11:27:33
無茶言うな、さすがに釣れない
895デフォルトの名無しさん:2005/06/22(水) 11:27:41
>>891
#include <stdio.h>

int main(int argc, char *argv[])
{
int input, i;

for(i = 0; i < 3; i++)
{
scanf("%d", &input);
if(input % 2 == 0)
{
printf("偶数");
}
else
{
printf("奇数");
}
}

return 0;
}
896デフォルトの名無しさん:2005/06/22(水) 11:40:35
>>895
ありがとうございます。
897デフォルトの名無しさん:2005/06/22(水) 11:50:44
898892:2005/06/22(水) 11:54:58
>>897
助かります。ありがとうございました
899デフォルトの名無しさん:2005/06/22(水) 13:53:35
test
900デフォルトの名無しさん:2005/06/22(水) 13:58:44
SUBSET_SUMの解が存在する場合に(x0,x1,…,xn-1)を出力する形にしたいんですがこれからどうすればいいんですか?
int subset_sum_dp_1(int a[],int b,int n){
int y[N][B],q[N][B],k,p;
for(k=0;k<n;k++){
for(p=0;p<=b;p++)
y[k][p]=0;q[k][p]=0;
}
y[0][0]=1;
if(a[0]<=b)
y[0][a[0]]=1;
}
for(k=1,k<n;k++){
for(p=0;p<=b;p++){
if(y[k-1][p]==1)
y[k][p]=1;
else if(p-a[k]>=0&&y[k-1][p-a[k]]==1)
y[k][p]=1;
}
}
if(y[n-1][b]==1){
p=b;
for(k=n-1;k>=0;k--){
if(q[k][p]==1){
x[k]=1;p-=a[k];
}else
x[k]=0;
}
return 1;
}
return 0;
}
901デフォルトの名無しさん:2005/06/22(水) 14:00:04
[1] 授業単元:プログラミング技術
[2] 問題文(含コード&リンク):
(1)changeMonth関数を以下のように修正せよ。
・変更しようとする月に対し、dayが入っている値が大きすぎる
場合、dayを変更後の最後の日に修正するようにする。例えば
5/31に設定されているときにchangeMonth(2)が呼ばれたとき、
monthに2を、dayに28を代入する。
(2)
(1)のプログラムに対し、MyDate型の中のデータを一日繰り上げる
メンバ関数inclementを実装し、1/1,1/31,2/28,10/10,12/31の場合
で動作することを確認せよ。例えば次のプログラムの実行結果は
4月3日となる。
MyDate date;

date.changeMonth(3);
date.changeDay(31);
date.inclement();
date.inclement();
date.inclement();
date.print();
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C++
[4] 期限:05年06月22日23時頃まで
[5] その他の制限:
できれば(1),(2)別々に記述していただければと思います。
すみませんがよろしくお願いします。
902デフォルトの名無しさん:2005/06/22(水) 14:01:08
[1] 授業単元:プログラミング演習I
[2] 問題文:
テストの点数(65 91 39 31 56 72 54 52 62 70 -1)
(-1はデータの終わりを表すものとする)を入力すると、
最高点、最低点が表示されるようなプログラムを作成せよ。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:6/28まで
[5] その他の制限:配列まで習いました

*テストの点数の入力はリダイレクト入力で別のファイルから読み込ませるので、
その元になるプログラムを作成します。
903デフォルトの名無しさん:2005/06/22(水) 14:02:00
以下は変更を行うプログラムです。
#include <iostream>
class MyDate {
private:
static const int maxDays[12];
int day,month;
public:
MyDate(int Day=1, int Month=1);

void changeDay(int Day) { if(Day > 0 && Day <= maxDays[month-1]) day = Day;}
void changeMonth(int Month) {if(Month > 0 && Month <= 12) month = Month;}
void print(void) {std::cout << day << ","<< month << "\n";}
};

const int MyDate::maxDays[12]={31,28,31,30,31,30,31,31,30,31,30,31};

MyDate::MyDate(int Day, int Month)
:day(1),month(1)
{
changeMonth(Month);
changeDay(Day);
}

int main()
{
MyDate date(31,5);
date.print();

return 0;
}
904902:2005/06/22(水) 14:05:00
#include <stdio.h>
#define NMAX 200

int main (void)
{
int i;
double tmax=-1;
double tmin;
double data[NMAX];

for( i = 0 ; i < NMAX ; i++ ){
printf( "%d 番目の点数は?\n", i );
scanf( "%lf", &data[i] );
if(data[i]==-1){
break;}
if(tmax < data[i] ){
tmax=data[i];}
if(tmin > data[i]){
tmin=data[i]; }
}
printf("最高点: %d\n",tmax );
printf("最低点: %d\n",tmin );

return(0);
}

ここまで自分で作成してみましたが、最低点がちゃんと表示されないので、
どこをどう直せばいいか、どなたか教えてください。
905デフォルトの名無しさん:2005/06/22(水) 14:07:09
>>901
>>430,469-470,473,772-773,777
同じ先生の課題か?
906デフォルトの名無しさん:2005/06/22(水) 14:11:43
>>902
#include <stdio.h>

int main(int argc, char *argv[])
{
int max, min, i;
const int dat[] = {65, 91, 39, 31, 56, 72, 54, 52, 62, 70, -1};

max = dat[0];
min = dat[0];
i = 1;
while(dat[i] != -1)
{
if(max < dat[i])
{
max = dat[i];
}
else if(min > dat[i])
{
min = dat[i];
}
i++;
}
printf("max = %d, min = %d\n", max, min);

return 0;
}
907901:2005/06/22(水) 14:14:18
その通りです・・・
908906:2005/06/22(水) 14:17:17
>>902
すまん、レス最後まで読んでなかった...orz
909>>901:2005/06/22(水) 14:24:04
void
MyDate::changeMonth(int Month){
if(Month > 0 && Month <= 12){
month = Month;
if(maxDays[month-1] < day)
day = maxDays[month-1];
}

void
MyDate::increment(){
if(maxDays[month-1] < ++day){
day = 1;
if(++month > 12)
month = 1;
}
}


910902:2005/06/22(水) 14:26:40
やべ、ミスってる。

printf("最高点: %f\n",tmax );
printf("最低点: %f\n",tmin );

%d ×
%f ○

の訂正がありました。どなたかご教授お願いします。

>>902
いえいえ、ありがとうございます。
僕もミスってました。。
911909:2005/06/22(水) 14:31:13
} 足りなかった

void
MyDate::changeMonth(int Month){
if(Month > 0 && Month <= 12){
month = Month;
if(maxDays[month-1] < day)
day = maxDays[month-1];
}
}
912906:2005/06/22(水) 14:35:39
>>910
tmaxはdoubleにする必要は無いんじゃない?
とりあえず、さっきの修正版。
#include <stdio.h>
int main(int argc, char *argv[])
{
int dat;
int max, min;

scanf("%d", &dat);
max = dat;
min = dat;
while(1)
{
scanf("%d", &dat);
if(dat == -1)
{
break;
}
else if(max < dat)
{
max = dat;
}
else if(min > dat)
{
min = dat;
}
}
printf("max = %d, min = %d\n", max, min);
return 0;
}
913902:2005/06/22(水) 14:44:04
>>912
入力値が変数なので一応doubleにしました。

僕の作成したプログラムでは出力結果が

最高点:91.00000
最低点:5.541873

と表示されてしまうのですが、何故なんでしょうか。
914912:2005/06/22(水) 15:01:21
>>913
*入力値は変数ではなく整数。だからtmax や tminはint型で宣言する。

*最小値がおかしいのはtminを初期化していないから。
>>912のように、一番最初に入力された数値でtmaxとtminを初期化するといい。

*入力がリダイレクトなので、デバッグ目的でないならprintf( "%d 番目の点数は?\n", i );は必要ない。

*>>912を見れば分かるが、君のdata[NMAX]は意味がない。
915デフォルトの名無しさん:2005/06/22(水) 15:06:36
>>913
tminが初期化されてない希ガス
916877:2005/06/22(水) 15:33:05
昨日は助かりました。 でですね、問題が発展してもうむりです。。
今回は 前回同様 後半と前半の文字列が同じならくっつける
例 AA AB =AAB ABC BCD = ABCD

問題のサンプル出力
5 /*何個の文字列で作るか*/
ACTC
ATG
TCAG
GTCG
1つの最長のシーケンスを見つけました:ACTCGTCAGTCG
と、複数の文字列を全部組み合わせて最長の組み合わせを表示。
です。今晩暇な神な方 おねがいします。。

環境  OS:Linux
言語:C プログラムは一通り習いました。
917デフォルトの名無しさん:2005/06/22(水) 15:57:04
>>916
>と、複数の文字列を全部組み合わせて最長の組み合わせを表示。
上の例だとATGを使ってないけど良いのか?
918デフォルトの名無しさん:2005/06/22(水) 16:00:15
自分で勝手に理解したところだけ出さないでできるだけ問題をそのまま出すニダ
お願いする方より回答者の方が質問を把握してるって妙な現象がw
919デフォルトの名無しさん:2005/06/22(水) 16:00:50
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 2分木の作成と深さ優先探索
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:今週末まで
[5] その他の制限:とくになし
詳しい問題は下のあどれすに書いてあります。宜しくお願いします
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/587.txt
920デフォルトの名無しさん:2005/06/22(水) 16:10:17
>>916
文字列が連結可能かどうかを数値の大小に置き換えると
「最長上昇部分列」の問題に帰着する希ガス。
921デフォルトの名無しさん
>>920
文字列の連結可能性は順序関係じゃないけど良いのか?