C/C++の宿題を片付け ..
[2ch|▼Menu]
577:デフォルトの名無しさん
08/06/04 02:15:41
>>575
数学板の方がふさわしいかと

578:デフォルトの名無しさん
08/06/04 02:48:31
>>557 適当に加筆修正
void DeleteCell(int x)
{
CELL *p,*q;
p=q=&head;
if(p==NULL){
printf("データがありません.\n");
return;
}
if(p->data==x){
p=p->next;
free(q);
return;
}
for(;p->next!=NULL;q=p,p=p->next){
if(p->data==x){
q->next=p->next;
free(p);
return;
}
}
printf("%d:ありません\n",x);
}

579:デフォルトの名無しさん
08/06/04 03:14:46
:< :( :) :l :@ :* :8

580:デフォルトの名無しさん
08/06/04 04:42:33
つまんねwww

581:デフォルトの名無しさん
08/06/04 06:51:54
"""

582:デフォルトの名無しさん
08/06/04 06:54:18
";:

583:デフォルトの名無しさん
08/06/04 06:58:09
::.

584:デフォルトの名無しさん
08/06/04 08:39:31
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
main関数の引数として小数あるいは整数を入力すると、
それらの平均値を計算して、小数点以下第2位まで表示するようなプログラムを作成せよ.
[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン:cl Windws visual studio
 [3.3] 言語:C 言語
[4] 期限: 2008年6月4日19:00まで]
[5] その他の制限: 特にありません。

ご解答よろしくお願いします。

585:584
08/06/04 08:41:43
その他の制限に追加があります。
提出するソースファイルのファイル名を、自分の名字(アルファベット)に拡張子cをつけたものにすること。

よろしくお願いします。

586:デフォルトの名無しさん
08/06/04 08:48:51
>>526をどうかお願いしますm(__)m

587:デフォルトの名無しさん
08/06/04 09:20:55
>>584
#include <stdio.h>

int main(int argc, char *argv[]){
int i;
double n, sum=0;
for(i=1; i<argc; i++){
sscanf(argv[i],"%lf",&n);
sum += n;
}
printf("%-10.2f\n",sum/(argc-1));
return 0;
}

実行例:
./a.out 3 5.6 8.912
5.84

588:デフォルトの名無しさん
08/06/04 10:13:41
>>586
課題の意味がよくわかんないす。観測とか。

情報利得というのはこれかなあと思うけど確信がもてない。
URLリンク(www.center.nitech.ac.jp)
なんもついてないΣってどうやって計算するの?

てことでもすこし詳しく書けば回答できるかも。

589:378
08/06/04 10:23:16
>>380>>381
回答ありがとうございました。
リンク先によると、要素数はTopポインタとBottomポインタの差をセルバイト幅で
割ると取得できるとありますが、用途について制限かけるときとは具体的にどのような
ときでしょうか。よろしくお願いします。

590:デフォルトの名無しさん
08/06/04 11:20:01
>>589
リスト構造では先頭と末尾のポインタの差を出してもどうにもならないよね。

用途は制限かけたいときに使えるとかじゃないの?

用途は深さを制限したいときに使えるとかじゃないの?

591:デフォルトの名無しさん
08/06/04 12:22:29
>>587

ありがとうございます!!!!!!!

592: ◆DuoCt8/SKk
08/06/04 15:54:16
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:6/5
[5] その他の制限:ポインタ,構造体を使用して簡略化.
よろしくお願いします!!

593:デフォルトの名無しさん
08/06/04 16:06:56
切符の子か。
ちょっと変えりゃすむだろ、と思わんでもないけどね。
今回は<おもな道筋>がないようなので柔軟な仕組みにしたほうが
いいんだろうけど、>>132のスタイルはだめなんしょ?

594:デフォルトの名無しさん
08/06/04 16:08:55
と思ったら道筋あったー!
だめぽ。

595: ◆DuoCt8/SKk
08/06/04 16:41:06
>>593
できるだけ柔軟な仕組みの方がいいです.
>>132は少々複雑すぎてしまい・・・読んでも理解できないんです(泣)
再びよろしくお願いします!

596:536
08/06/04 16:42:09
Deleteの部分は教えてもらって分かりましたが
続きがどうしても分かりません
どなたかお願いできないでしょうか?

597:デフォルトの名無しさん
08/06/04 16:42:20
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク)
凸包の構成
URLリンク(www.ccad.sist.chukyo-u.ac.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:emacs
 [3.3] 言語:C
[4] 期限:6/14
[5] その他の制限:なし
やり方自体の指定はありません。参考URLの感じのものをCで作るそうです。よろしくお願いします。

598:デフォルトの名無しさん
08/06/04 16:44:52
>>595
道筋ベースでやるよりもコマンドベースでやるほうが柔軟なわけで
ミルク増やして氷無しにして、やっぱりミルク減らす、とかの時に
コマンドに応じた関数を呼び出して状態を保持しておくのが楽なんだ。

道筋ベースだとユーザがやりたいことをやりたいときに行えない
仕組みになるしょ。

599:デフォルトの名無しさん
08/06/04 16:48:44
複雑で分からない、と言う前にどこが分からないか言ってみるとかは?
前回のに手を加えた結果があるだろうからそれ載せてみると
どう成長したかも見えるだろうし。

ってそれはそれで相談スレの役割のような気もしだしたorz

600: ◆DuoCt8/SKk
08/06/04 16:50:10
>>598
とりあえず道筋はもらったプリントのまま書いたのですが,やはり
そこまでは求められていないということなのでしょうか?
僕も>>598さんのいう意見に賛成なので,是非コマンドベースでお願いします.


601:586
08/06/04 16:53:01
>>588

@が平均情報量を求めるプログラムをつくる
平均情報量=
-(c1/c1+c2)*{log2(c1/ c1+c2)} -(c2/c1+c2)*{log2(c2/ c1+c2)}


Aが情報利得を求めるプログラムをつくる
情報利得=
-(c1/c1+c2)*{log2(c1/ c1+c2)} -(c2/c1+c2)*{log2(c2/ c1+c2)}
+(c1/c1+c2)*(c1/c1+c2)*{log2(c1/ c1+c2)}
+(c2/c1+c2)* (c2/c1+c2)*{log2(c2/ c1+c2)}

おそらくこれを求めるプログラムをつくればいいと思います。
どうか@だけでも至急お願いしますm(_ _)m
わかりにくくてすいません。


602: ◆DuoCt8/SKk
08/06/04 16:54:59
>>599
具体的にはどのように表示すればいいのかが分からないということなのでしょうか・・・
先生も何か例を書いて下さればわかりやすいのに・・・とも思っています.
例を書かないということはそれぞれ工夫してプログラムを組むのを期待しているのでしょうか?
正直同級生も>>132のレベルにはまだ一部の人たちしか達していないと思われます.


603:デフォルトの名無しさん
08/06/04 17:13:30
>>601
ん?ってことなら、
#include <math.h>
double info(int c1, int c2)
{
double _c1 = c1;
double _c2 = c2;
return -(_c1/_c1+_c2)*log(_c1/_c1+_c2) - (_c2/_c1+_c2)*log(_c2/_c1+_c2);
}
でいいんでないの?

604:デフォルトの名無しさん
08/06/04 18:58:16
>>602
URLリンク(kansai2channeler.hp.infoseek.co.jp)
とりあえずお釣りの計算だけ


605:604
08/06/04 19:01:55
よく見たらつり銭切れのときにお金がどんどん減ってしまうな
元の値をコピーしておかないとだめだ

606:デフォルトの名無しさん
08/06/04 19:33:11
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
全部で3つなのですが
1. 以下のプログラムを作成
• 以下の数列を0〜20まで表示
• 数列は以下の通りとする
• a[0] = 0.01, a[1] = 0.1, a[2] = 1.0
• a[n+1] = a[n] + a[n-1] + a[n-2]
• プログラムを実行するとa[0]〜a[20]までの値が改
行区切りで表示されること
2. 以下のプログラムを作成
• キーボードから整数値を読み込み、入力された整数
値が素数であるか判定する
• 以下のとおり表示する
• 入力値が素数の場合”prime number”
• 入力値が素数以外の場合”not prime number”
3.以下のプログラムを作成
• 3x3マスのマルバツゲームのボードを作成
• ○側と×側が交互に2次元座標上の位置を入力
• 入力後、毎回ボードを表示する
• たて、よこ、斜めのいずれかに○か×が3つ並んだ
時点でプログラムを終了
• マスが埋まった場合もプログラムを終了
[3] 環境
 [3.1] OS: Windows
 [3.2] MINGW32
 [3.3] 言語:C
[4] 期限: 6月13日
[5] その他の制限: なし
回答のほど、よろしくお願いしますm(_ _)m


607:デフォルトの名無しさん
08/06/04 19:34:53
>>606が読みにくくてすみません
改行ができませんでした・・・

608:デフォルトの名無しさん
08/06/04 19:51:21
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):()
10マスx10マスの迷路のスタートからゴールまでの最短経路を出力するプログラムを作れ。

※1.迷路は10行のテキストファイルで提供され,Sがスタート,Gがゴール,*が壁,@が通路で記録されている。
※2.進み方は上下左右1コマずつとし,斜めには進めない。
※3.迷路はかならずしもゴールできるとは限らない。

[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 6月18日
[5] その他の制限:
前の授業で再帰的な関数というのを習ったので、
それを使って解くのが求められている回答だと思います

よろしくお願いします

609:デフォルトの名無しさん
08/06/04 20:07:13
>>606
すみませんコンパイラは
gccでした

610:デフォルトの名無しさん
08/06/04 20:21:28
>>606
(1)
int print_20(){
int i;
double a[21]={0.01, 0.1, 1.0};
for(i=3; i<=20; i++){ a[i] = a[i-1] + a[i-2] + a[i-3]; }
for(i=0; i<=20; i++){ printf("%f\n",a[i]); }
return 0;
}

(2)
int prime_check(){
int i=2, n;
printf("prime check for no>>");
scanf("%d",&n);
while(i*i<n){
if(!(n%i)){break;}
i++;
}
printf("%s\n",(i*i>n)?"prime number":"not prime number");
return 0;
}

611:デフォルトの名無しさん
08/06/04 20:25:06
>>606
1.
#include<stdio.h>

int main(void){
double a[21]={0.01, 0.1, 1.0};
int n;

for(n=2;n<20;n++) a[n+1]=a[n]+a[n-1]+a[n-2];
for(n=0;n<=20;n++) printf("%f\n", a[n]);

return 0;
}

612:デフォルトの名無しさん
08/06/04 20:56:55
>>603
ありがとうございます!
C1、C2の入力値を入れるようにしたいのですが後これにどう付け加えればよいのでしょうか?

613:デフォルトの名無しさん
08/06/04 21:26:02
>>606
> 3x3マスのマルバツゲームのボードを作成

unsigned short intの16ビット中、下9ビットを連ありか否かの
判定に使えばいいと思うんだが、面倒なので誰か頼む。

614:デフォルトの名無しさん
08/06/04 22:11:16
[1]プログラミング
[2]問題文
要素数がnoであるint型の配列vcの並びを逆順にする関数
void rev_intary(int vc[],int no)をメイン文も含め作成せよ。
[3-1]windows
[3-2]gcc
[3-3]C言語
[4]明日の昼まで
お願いいたします。

615:デフォルトの名無しさん
08/06/04 22:11:49
デジモンみたいなドライブクリーナーがほしい。
データ食べて育つみたいな。リアルにデジタルモンスター育てたい(
基地外サーセン。。どうしても漏らしたかった・・・。

616:デフォルトの名無しさん
08/06/04 22:31:21
>>614
#include<stdio.h>
void rev_intary(int vc[], int no) {
int t, i;
for(i = 0; i < no-1-i; i++) {
t = vc[i];
vc[i] = vc[no-1-i];
vc[no-1-i] = t;
}
}
int main() {
int a[5] = {1,2,3,4,5}, i;
rev_intary(a, 5);
for(i = 0; i < 5; i ++)
printf("%d\n", a[i]);
return 0;
}

617:デフォルトの名無しさん
08/06/04 22:32:49
>>614
>>550 >>552
この辺でどうにかならんかね。

618:デフォルトの名無しさん
08/06/04 23:04:08
>>610氏、>>611氏、>>613
返答ありがとうございます
おかげさまで助かります

619:デフォルトの名無しさん
08/06/04 23:14:30
>>618
○×は素直に3*3の配列つかいな

620:デフォルトの名無しさん
08/06/04 23:18:31
>>619
わかりました
ちょっと探しに行ってきます

621:デフォルトの名無しさん
08/06/04 23:19:26
すみませんsageを
入れ忘れていました(汗

622:デフォルトの名無しさん
08/06/04 23:25:58
>>606の3
前々スレで作ったやつ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

623:デフォルトの名無しさん
08/06/04 23:28:49
おお!!
>>622氏、ありがとうございます
ほかを巡回しながらもこまめに
ここをチェックしていたのですが
大変助かります

624:デフォルトの名無しさん
08/06/05 00:25:24
>>564をお願いします…

625:デフォルトの名無しさん
08/06/05 00:31:43
[1] 授業単元:プログラミング演習1
[2] 問題文(含コード&リンク):
m ×m 行列を入力し和と積を求め、結果を行列の形で表示させる
プログラムの作成。但し、入力した行列も表示。

<表示例>
1 2
3 4
[3] 環境
 [3.1] OS:WinXP/linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等):VC++/gcc
 [3.3] 言語:C言語
[4] 期限:2008/06/06
[5] その他の制限: stdio.h、入力はscanf関数、出力はprintf関数、配列で

プログラムの冒頭ですが、これで配列可変になるんでしょうか…?
int m,i,j;/*要素、カウント用変数宣言*/
printf("行列数を入力");
scanf("%d",&m);
int a[m]=0;
int b[m]=0;

[m]=0を[%d]=0,mにしたほうが良いのでしょうか………

626:デフォルトの名無しさん
08/06/05 00:45:56
>>564
@ 0, b2, b1, (b0|c4), c3, c2, c1, c0 という8ビットをcに格納している。
ここでb2とは、変数bのビット2という意味で表記している。
b0|c4とは、b0とc4の論理和という意味で表記している。

というかこの問題、b=(b&0x07)<<5; が正しいのではないか?
そうすると、 b2, b1, b0, c4, c3, c2, c1, c0 という8ビットをcに格納することになり、キレイ。

A
b &= ~(1<<2); /*ビット2(最下位から3番目)をクリア*/
b &= ~(1<<5); /*ビット5(最下位から6番目)をクリア*/

~を使いたくなければ、
b &= 0xfffb;
b &= 0xffdf;

627:デフォルトの名無しさん
08/06/05 00:46:32
>>624
1. ここにいる人なら大抵@はわかります。
  が、残念スレ違いです。

2. 本当に問題文そのままですか?

628:626
08/06/05 00:51:30
すまん間違えた。
@は c7, b2, b1, b0, c3, c2, c1, c0 だ。

629:デフォルトの名無しさん
08/06/05 01:06:18
>>625
お前は何を言ってるんだ?

630:デフォルトの名無しさん
08/06/05 01:06:27
b = (b & 0xFFDB) & b;

631:デフォルトの名無しさん
08/06/05 01:07:33
>>625
残念ながらそのような手法では配列を動的には確保出来ませんよ

632:デフォルトの名無しさん
08/06/05 01:18:43
.;;;;彡彡ミミ;;;
          .;;;;彡彡ミミ;;;
          ;;;;彡彡ミミミ;;;
          ;;;;彡彡ミミミ;;;
          ;;;;;;彡彡ミミミ;;;;;
         ;;;;彡ミ彡ミミミミ;;;
        ;;;彡ミ彡;;人;;;ミ彡ミ;;;
        ;;;彡ミ彡ノ ヽ;ミ彡ミ;;;
        ;;;彡ミ;;;;ノ.人 ヽ;彡ミ;;;
        ;;;彡ミ;;;ノ | ..| ;ヽ彡ミ;;;
        ;;;彡ミ;;ノ .| | ヽ彡ミ;;;
        ;;;彡ミ;ヽ |.・.| /彡ミ;;;
        ;;;彡ミ;;ヽ|  .| /;;彡ミ;;;
        .;;;;;;;ミ;;;ヽ|( )|./ミ彡;;;;
         ..;;;彡;;;;ヽ| .|/;;;ミ;;;
          ..;;;;.彡;|.|;;ミ;;;;;....
          ;;;;;彡;彡|;;ミミミ;;;;
         ;;彡彡彡*ミミミミ;; マンコ
          ;;;;彡彡ミミミ;;;
           ;;彡彡ミミミ;;;


633:デフォルトの名無しさん
08/06/05 01:47:07
[1] 授業単元: C言語演習V
[2] 問題文(含コード&リンク):
九九の表を1次元配列と配列を引数とする関数を用いて作成せよ。

・作成要項
main関数内で用いる配列は演算結果を格納するab[81]と九九の各段を一時的に格納する
a[9]のみとし(呼び出す関数側ではどのような配列を宣言してもよい)、関数に格納用
配列と段数を渡してひとつの段ごとに計算させる。
ひとつの段の計算結果が関数から戻されるごとに返ってきた値を配列abに格納しなおし
全部の段の計算が終わったあとで一括して表示させること(グローバル変数は使わないこと)
(プログラム例)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限:本日 6/5 PM1時までにお願いします。
[5] その他の制限:グローバル変数の使用は不可、配列の使用が前提です。
今日は徹夜で宿題をやっているので、オールナイトで待っています。よろしくお願いします。

634:デフォルトの名無しさん
08/06/05 02:00:39
>>625
宿題レベルなら固定で
int a[8][8];
ってしときー

635:デフォルトの名無しさん
08/06/05 02:03:20
>>634
兄さんそれ99やない

636:デフォルトの名無しさん
08/06/05 02:06:35
>>633
#include<stdio.h>

void kuku(int [], int );

int main(void)
{
int i,j;
int a[9],ab[81];
for(i=0;i<9;i++){
kuku(a,i);
for(j=0;j<9;j++){
ab[i*9+j] = a[j];
}
}

for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf(" %2d", ab[i*9+j]);
}
printf("\n");
}

return 0;
}
void kuku(int a[], int rank)
{
int i;
for(i=0;i<9;i++){
a[i] = (rank+1) * (i+1);
}
}

637:デフォルトの名無しさん
08/06/05 02:17:59
>>634
パパーパパー

638:デフォルトの名無しさん
08/06/05 02:26:32
>>636
ありがとうございます。
これで少しは眠れそうです。

639:デフォルトの名無しさん
08/06/05 10:00:15
すみません
>>622氏のところのをやってみたのですが
下記のエラーが出てしまいまして

$ gcc.exe memosp.c
memosp.c: In function `main':
memosp.c:60: warning: passing arg 1 of `input' from incompatible pointer type
memosp.c:62: warning: passing arg 1 of `check' from incompatible pointer type
memosp.c:63: warning: passing arg 1 of `show' from incompatible pointer type
memosp.c:70: warning: passing arg 1 of `show' from incompatible pointer type

どこを直せばいいんでしょうか・・・
アドバイスよろしくお願いします><

640:デフォルトの名無しさん
08/06/05 10:22:54
>>639
gccはよくわからんけど、xcodeで試したらcheckをcheck2とか適当な名前に変更すればコンパイルはした

641:デフォルトの名無しさん
08/06/05 10:35:01
>>639
とりあえず const int b[][BOARD_SIZE] を int b[][BOARD_SIZE] にすれば警告は消える
でも、なんで警告が出るんだろう?

642: ◆DuoCt8/SKk
08/06/05 12:43:10
>>604-605
ありがとうございます.
今日が締切なので,引き続き>>592をお願いしたいのですが・・・
よろしくお願いします!

643:デフォルトの名無しさん
08/06/05 12:50:43
>>635
アンカーの先をよく見るんだ弟よ

644:デフォルトの名無しさん
08/06/05 13:31:02
>>641
> >>639
以下はtccの場合。
:60: cannot cast 'int **' to 'const int **'

constを付けると、コンパイラはconst領域に変数等を割り当てようとするが、今回のように
書きかえ可の領域 ---> 書きかえ不可の領域へのキャスト指示はプログラムミスと見なされる。



645:デフォルトの名無しさん
08/06/05 13:34:22
>>644
続き。 const領域を書きかえようとした場合のエラー。

#include<stdio.h>
int main(){
const int a=3;
a=2;
}

:4: error: assignment of read-only variable ‘a’


646:ロベ
08/06/05 13:49:11
[1] 授業単元:プログラミング
[2] 問題文:BMPファイルの情報(画像サイズ、色数等)を表示する
      BMPファイルの画像を上下・左右反転させる
      BMPファイルの画像を回転(90、180、270度)させる
      BMPファイルのカラー画像をグレースケール化するプログラムの作成
        輝度を変換する式は、下記の式を使用すること
        Y=0.298912*R+0.586611*G+0.114478*B
      ※BMPファイルにはWindows形式とOS/2形式があります。どちらにも正しく対応できるように。
      ※入力ファイル名は、プログラム実行後に聞いてくるものとします。
      ※出力ファイル名は、プログラム実行後に聞いてくるものとします。
      ※反転・回転方法の指示は、プログラム実行後に聞いてくるものとします。
      ※ソースには必ずコメントを書いて下さい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ 5.5.1 for Win32
 [3.3] 言語:C
[4] 期限:6月5日 0:00
[5] その他の制限:無し

よろしくおねがいします

647:デフォルトの名無しさん
08/06/05 14:15:52
>>644-645
嘘を教えるなよ。。。

648:デフォルトの名無しさん
08/06/05 14:22:25
constがどこにかかってるかを考えれば、なんとなくわかるぞ

649:デフォルトの名無しさん
08/06/05 14:50:50
[1] 授業単元:C言語
[2] 問題文:
int 型の2つの数をキーボードから読み込んで,
それらの3乗の和を出力するプログラムを作成せよ。
ただし,2つの数の3乗の和を計算する部分は,
関数 int cubesum(int x, int y) を作成してそれを使え。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年6月9日
[5] その他の制限:


650:デフォルトの名無しさん
08/06/05 15:04:16
int cubesum(int x, int y)
{
return x*x*x + y*y*y;
}

651:デフォルトの名無しさん
08/06/05 18:07:23
#include <stdio.h>

int cubesum(int x, int y)
{
return x*x*x + y*y*y;
}

int main()
{
int a, b;
printf("2つの整数を入れてください:");
scanf("%d %d", &a, &b);

printf("%d^3 + %d^3 = %d\n", a, b, cubesum(a, b));

return 0;
}

652:デフォルトの名無しさん
08/06/05 19:31:10
.;;;;彡彡ミミ;;;
          ;;;;彡彡ミミミ;;;
          ;;;;彡彡ミミミ;;;
          ;;;;;;彡彡ミミミ;;;;;
         ;;;;彡ミ彡ミミミミ;;;
        ;;;彡ミ彡;;人;;;ミ彡ミ;;;
        ;;;彡ミ彡ノ ヽ;ミ彡ミ;;;
        ;;;彡ミ;;;;ノ.人 ヽ;彡ミ;;;
        ;;;彡ミ;;;ノ | ..| ;ヽ彡ミ;;;
        ;;;彡ミ;;ノ .| | ヽ彡ミ;;;
        ;;;彡ミ;ヽ |.・.| /彡ミ;;;
        ;;;彡ミ;;ヽ|  .| /;;彡ミ;;;
        .;;;;;;;ミ;;;ヽ|( )|./ミ彡;;;;
         ..;;;彡;;;;ヽ| .|/;;;ミ;;;
          ..;;;;.彡;|.|;;ミ;;;;;....
          ;;;;;彡;彡|;;ミミミ;;;;
         ;;彡彡彡*ミミミミ;; マンコ
          ;;;;彡彡ミミミ;;;
           ;;彡彡ミミミ;;;

653:デフォルトの名無しさん
08/06/05 19:54:07
>>550
の問題にメイン文も付け加えた形で教えて欲しいです。
よろしくお願いいたします。

654:デフォルトの名無しさん
08/06/05 19:56:27
マルチで申し訳ないです。
本格的にハマってしまい、ヘルプをお願いさせてください。

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
2次元配列(hai[10][10])を用いる。
各マスには予め1または2がランダムで入力されている。

100マスの中で、1と2のサイズを計測せよ。
なお、境界は存在せず、トーラス状とする。

例)
1,1,1
2,1,1
1,1,1
であれば、
1:8
2:1

1,1,1
2,1,2
1,2,1
であれば、
1:6(トーラス状であるため、左下と右下も一つの塊と見る)
2:2(トーラス状であるため、中段の左右は一つの塊と見る),1

[3] 環境
 [3.1] 言語: どちらでも可
[4] 期限: 6月10日

解決の糸口が見つかりません。
どうかよろしくお願いします。

655:639
08/06/05 20:40:30
>>639のところで回答してくださりました方々
ありがとうございます
課題ですのでgccで固定という以上
ほかの方法では試せませんのでなんともいえませんが
自分でもいろいろと試そうかと思います

656:デフォルトの名無しさん
08/06/05 20:53:40
>>654
無理やり1レスにまとめたからいろいろ足りないけど
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
char hai[SIZE][SIZE], check[SIZE][SIZE];
int f(int x, int y, int n)
{
if(check[x][y] || hai[x][y]!=n) return 0;
check[x][y] = 1;
return 1 + f(x, (y+1)%SIZE, n) + f(x, (y+SIZE-1)%SIZE, n)
+ f((x+1)%SIZE, y, n) + f((x+SIZE-1)%SIZE, y, n);
}
int main(void)
{
int i, j, c[2][50] = {0}, count[2] = {0};
srand(time(NULL));
for(i=0; i<SIZE; i++) for(j=0; j<SIZE; j++) hai[i][j] = rand()%2+1;
for(i=0; i<SIZE; i++) {
for(j=0; j<SIZE; j++) {
int n = f(i, j, hai[i][j]);
if(n) c[hai[i][j]-1][count[hai[i][j]-1]++] = n;
}
}
for(i=0; i<2; i++) {
printf("%d : ", i+1);
for(j=0; j<count[i]; j++) printf("%d ", c[i][j]);
putchar('\n');
}
return 0;
}

657:654
08/06/05 21:11:52
>>656
ありがとう!
自分は3日間超絶悩んだのに、あっさり出来てるw

動作を確認させていただいたのですが、
#define SIZE 100
に変更した場合は、
int i, j, c[2][5000] = {0}, count[2] = {0};
と変更すれば、
SIZEが大きくなっても検索できるようですね。

もしよろしければ、いろいろ足りない部分とお名前を・・・・。


658:デフォルトの名無しさん
08/06/05 21:12:31
お名前ってww

659:デフォルトの名無しさん
08/06/05 21:17:24
足りないってのは最後にソートしたほうがいいんじゃないかなってこと。

660:デフォルトの名無しさん
08/06/05 21:18:00
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):

次の規則に従い、入力された文字列を変換して表示する。
T ・・・タブとして空白を2つ入れる(Tは表示しない)
N ・・・改行する(Nは表示しない)
+ ・・・空白を1つ入れる(+と空白を置きかえる)
その他・・・そのまま表示する。
$ ・・・¥に変換する。($は表示しない。)
$の後に入力されてる数値を円に換算する。換算率は1$を120円とする。
行の先頭の英小文字は英大文字に変換する。

実行結果
データを入力してください:aprilT$012-NmayTT$023+Njune T$026+N
April \01440-
May \02760
June \03120

[3] 環境
 [3.1] OS: windouws
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語:どちらでも可
[4] 期限: 明日中
[5] その他の制限:switch使用


C言語歴2ヶ月の課題なんで低レベルとは思いますが、よろしくお願いします。


661:デフォルトの名無しさん
08/06/05 21:18:40
>>625
20x20の行列を用意後、画面から入力したサイズ分だけを使用。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

662:654
08/06/05 21:24:32
えっと、ちなみにソートするにはどうすればw
c[i][j]と c[i][j+1]を比較させまくるのかnya。

663:デフォルトの名無しさん
08/06/05 21:30:16
バブルソートでもクイックソートでもすきなのでいいだろw
>>654が宿題に出されるレベルならソートぐらいできんだろ

664:654
08/06/05 21:42:29
>>663
おk。
本当にありがとねノシ

665:デフォルトの名無しさん
08/06/05 21:45:24
ヘボいなーおまえら
プログラミング向いてないよ

666:デフォルトの名無しさん
08/06/05 21:52:16
トーラスってなんじゃろうと思ってみてた。
ドラクエの地図の海と陸地の数およびサイズを知りたいって書いてくれればよかったのに。。

667:デフォルトの名無しさん
08/06/05 21:58:42
[1]プログラミング
[2]問題文
多次元配列を利用して、5人の3教科(国語・数学・英語)の@最高点A平均点それぞれのソースを作れ。
[3-1]windows
[3-2]gcc
[3-3]C言語
[4]明日まで
よろしくお願いいたします。

668:デフォルトの名無しさん
08/06/05 22:10:48
>>664
マルチの片割れにも終わったことを知らせんかい

669:デフォルトの名無しさん
08/06/05 22:12:13
なんで偉そうなの?

670:デフォルトの名無しさん
08/06/05 22:20:55
>>660
URLリンク(kansai2channeler.hp.infoseek.co.jp)

671:デフォルトの名無しさん
08/06/05 22:48:13
>>670
ありがとうございます、助かりました。
こんなに早く応えがくるなんて、良い意味で驚きました

672:デフォルトの名無しさん
08/06/05 22:51:04
>>664,669
礼儀も知らんのかボケ

673:デフォルトの名無しさん
08/06/05 22:55:17
>>671
タイミングさえ合えばちゃんとした回答者がいるスレだよ

674:デフォルトの名無しさん
08/06/05 23:00:16
>>672
なんで回答者でもないあなたが偉そうなの?

675:654
08/06/05 23:00:26
ちょw
669は自分じゃない。

676:デフォルトの名無しさん
08/06/05 23:01:30
>>674
っつか、マジで態度が悪いぞ、お前。社会じゃそれじゃやっていけねーよ
失せろクズガキ

677:デフォルトの名無しさん
08/06/05 23:01:57
>>534をお願いしますm(_ _)m

678:デフォルトの名無しさん
08/06/05 23:04:23
>>535

679:デフォルトの名無しさん
08/06/05 23:05:35
>>674
会社の同僚と何かあった時に上司から何か言われても
「同僚との問題なのになんであなたがそんな事言うの?」
とか言うんか? 消えろ

680:デフォルトの名無しさん
08/06/05 23:07:03
>>674
っつか、偉いとかって話じゃないだろ。完全にお前が態度が悪い
ただそれだけ。何で自分が指摘されたのか、分からないのか?
だとしたら相当痛いぞ、お前。反論する前に自分が起こしている行動
発言を自覚しろ。干されんぞ。人間社会はお前一人の都合や
思う通りには動いてないからw

681:デフォルトの名無しさん
08/06/05 23:09:21
>>667
お願いしますm(__)m

682:デフォルトの名無しさん
08/06/05 23:11:22
なんか>>674の人気に嫉妬しつつ、本当に>>672は回答者ではないのだろうか?

683:デフォルトの名無しさん
08/06/05 23:11:27
#include <sys/param.h>
#include <stdio.h>
int z(int y, int m, int d) {
int a = y / 100, b = y % 100;
return ((int) (m * 2.6 - 0.2) + d + b + (int) b / 4 + (int) a / 4 + 5 * a) % 7;
}
int zeller(int y, int m, int d) {
return m < 3 ? z(y - 1, m + 10, d) : z(y, m - 2, d);
}
int main(int argc, char *argv[]) {
int year, month, nf13 = 0;
for (year = 2001; year <= 2100; year++) {
for (month = 1; month <= 12; month++) {
if (zeller(year, month, 13) == 5) {
nf13++;
}
}
}
printf("%d\n", nf13);
return 0;
}

684:デフォルトの名無しさん
08/06/05 23:12:26
>>681
はやる気持ちは分からんでもないけど、もうちょっとまとう。
ギリギリまで宿題やらなかったのもちょっと悪いとおもうお

685:デフォルトの名無しさん
08/06/05 23:14:01
>>667
問題ってほんとにこれだけ?
制限とかかいとかないと
「それなんですか?分からないのでもっと簡単なものを。。。」
というハメになっちゃうかもだよー

686:デフォルトの名無しさん
08/06/05 23:14:18
#include <stdio.h>

int main(void)
{
int i, j, data[3][5] ={0}, max[3];
double ave[3];
char *kamoku[3] = {"国語","数学","英語"};

for(i=0; i<3; i++) {
ave[i] = max[i] = data[i][0];
for(j=1; j<5; j++) {
ave[i] += data[i][j];
if(max[i] < data[i][j]) max[i] = data[i][j];
}
ave[i] /= 5;
}

for(i=0; i<3; i++) printf("%s 最高点:%d 平均点%.2f\n", kamoku[i], max[i], ave[i]);

return 0;
}


687:デフォルトの名無しさん
08/06/05 23:14:25
多次元配列を利用
int point[5][3]={{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0}};


688:デフォルトの名無しさん
08/06/05 23:16:32
わざわざ多次元って言ってるんだから、二次元程度じゃ許されない。

689:デフォルトの名無しさん
08/06/05 23:17:45
>>682
人気じゃなくて一人がファビョってるだけにしか見えねーよw

690:デフォルトの名無しさん
08/06/05 23:18:10
多次元っていったってどう考えても2次元で十分だろ。



691:デフォルトの名無しさん
08/06/05 23:18:48
>>688
口だけじゃなくてソースplz

692:デフォルトの名無しさん
08/06/05 23:19:48
せいぜい平均と最高点をまとめて
もひとつ2次元配列にするくらいかな

693:デフォルトの名無しさん
08/06/05 23:25:58
679はこのスレの上司だそうですw

694:デフォルトの名無しさん
08/06/05 23:26:48
こんなところで宿題丸投げする学生?相手に語ってるほうもどうかとw

695:デフォルトの名無しさん
08/06/05 23:26:50
>>689 = >>691 = >>674 必死だなぁ・・・IDが無いからって、他人のふりしようとか
白々しいぞお前。やたらと口出しする一言居士って、友達のいない構ってちゃんだろ?

696:デフォルトの名無しさん
08/06/05 23:26:56
IDが出ないと一人芝居が楽でいいよな

697:デフォルトの名無しさん
08/06/05 23:27:57
>>693 = >>689 = >>691 = >>674
しつけぇ・・・お前、このスレに何の用があって来てんだ?
無駄口叩く奴って、口先だけで役に立たない上に
自分が否定されるとファビョるからうぜぇ。

698:デフォルトの名無しさん
08/06/05 23:28:17
なんだこれ

699:デフォルトの名無しさん
08/06/05 23:30:05
ケフィア、、でしょうか?

700:デフォルトの名無しさん
08/06/05 23:31:23
なんで691まで一緒にされてるのかわからんw

701:デフォルトの名無しさん
08/06/05 23:33:12
二つの整数値を読み込んで、
小さい方の数以上で大きい方の数以下の整数を全て加えた値を
表示するプログラム。

コンパイラ gcc
OS Windows
言語 C

お願いします。

702:デフォルトの名無しさん
08/06/05 23:34:33
何度か書いてるが、Windows + gccってのはほんとにそういう環境なのかなあ。

703:デフォルトの名無しさん
08/06/05 23:35:20
>二つの整数値を読み込んで、
標準入力でOK?


704:デフォルトの名無しさん
08/06/05 23:36:07
>>702
Cygwin + gcc かもね

705:デフォルトの名無しさん
08/06/05 23:36:54
a < b

((1+b) * b - (1 + a) * a ) / 2


706:デフォルトの名無しさん
08/06/05 23:37:44
>>626
わかりました。ありがとうございます。

707:デフォルトの名無しさん
08/06/05 23:37:54
>>701
#include <stdio.h>

int main(void)
{
int a, b;

scanf("%d%d", &a, &b);

printf("%d", a > b ? (a + b) * (a - b + 1) / 2 : (a + b) * (b - a + 1) / 2);

return 0;
}


708:デフォルトの名無しさん
08/06/05 23:39:12
>>703
標準かどうかはよくわかりませんが、scanfで読み取る形です。

709:デフォルトの名無しさん
08/06/05 23:42:00
>>707
すいません!書き忘れました。
Do文を使って最後にWhile文を追加する形でした。


710:デフォルトの名無しさん
08/06/05 23:44:04
>>704
cygwin + gcc だとして、実行環境はWindows?cygwin?というのも
あるし、Xかもしれない。
といったところで実行環境に依存するような宿題については
そのような曖昧な環境記述は無かったような気もするし、、、
気にしないほうがいいのかなあ?

711:デフォルトの名無しさん
08/06/05 23:45:04
なんだそりゃw
#include <stdio.h>
int main(void)
{
int a, b, sum = 0;
scanf("%d%d", &a, &b);
if(a < b) do { sum += a++; } while(a<=b);
else do { sum += b++; } while(b<=a);

printf("%d", sum);

return 0;
}


712:デフォルトの名無しさん
08/06/05 23:45:10
>>1より。
> ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。

きをつけてね

713:デフォルトの名無しさん
08/06/05 23:45:33
>>707
初心者向けにしましょうw


714:デフォルトの名無しさん
08/06/05 23:45:38
>>701
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", (a+b)*(abs(a-b)+1)/2 );
return 0;
}

715:デフォルトの名無しさん
08/06/05 23:49:32
>>713
初心者の定義は何?自分が理解できる=初心者向け?
理解できない=初心者じゃない?とか?

716:デフォルトの名無しさん
08/06/05 23:51:02
パッと見であっさり理解できるか
ちょっと見てみてあぁなるほどと思えるか

の差じゃない?

717:デフォルトの名無しさん
08/06/05 23:51:48
>>711
++はどういう意味なんでしょうか?

718:デフォルトの名無しさん
08/06/05 23:52:21
>>715
いちいち絡むなよw

719:デフォルトの名無しさん
08/06/05 23:54:13
>>717
a++ は a = a + 1

720:デフォルトの名無しさん
08/06/05 23:55:29
>>717
a++ = a = a + 1

721:デフォルトの名無しさん
08/06/05 23:58:06
その=の使い方には問題があるぞ

722:デフォルトの名無しさん
08/06/05 23:58:49
ではsum+=とは何なのでしょうか?
初心者ですいません

723:デフォルトの名無しさん
08/06/06 00:00:32
sum += a は sum = sum + a

724:デフォルトの名無しさん
08/06/06 00:00:50
sum = sum + 1

725:デフォルトの名無しさん
08/06/06 00:01:27
つまり sum += a++; は
sum = sum + a;
a = a + 1;

726:デフォルトの名無しさん
08/06/06 00:05:30
>>725
cのとっつき難さはそこなんだろうな。

727:デフォルトの名無しさん
08/06/06 00:06:39
A += B
A -= B
A *= B
A /= B

A = A 演算子(+-*/) B

728:デフォルトの名無しさん
08/06/06 00:06:45
レスをくれた方々ありがとうございます。
色々勉強になりました。
ちょっと複雑に考えすぎていたようです。

729:デフォルトの名無しさん
08/06/06 00:09:36
プログラムは単純に考えよう。
プログラムを書くこときも、トリッキーなことをせずに簡単に書こう。

って、先輩にならったな。

730:デフォルトの名無しさん
08/06/06 00:10:02
>>725
逆も上げとくわ
sum += ++a;は
a = a + 1;
sum = sum + a;

731:デフォルトの名無しさん
08/06/06 00:11:29
>>729
sum += a++ が一番簡単で単純だろ?

732:デフォルトの名無しさん
08/06/06 00:12:13
直感的ではないよ

733:デフォルトの名無しさん
08/06/06 00:15:09
>>731
そうだな。

こっちのPart28終わりからPart29の頭にかけてa++関連の未定義問題で論争があったくらいだ。

C言語なら俺に聞け(入門篇) Part 29
スレリンク(tech板)



734:733
08/06/06 00:15:52
>>733>>731への同意ではなく>>732への同意だ。


735:デフォルトの名無しさん
08/06/06 00:17:36
インクリメントを禁止してるプロジェクトに関わった事があったな。。。。。
ちょっと新鮮だった。

736:デフォルトの名無しさん
08/06/06 00:21:07
実際のところたとえば
a = a + 1;
sum = sum + a;



sum += ++a;

としたところでコンパイル後のバイナリレベルでどのくらいクロックやメモリ
を稼げるものなんだ?

それと引き換えに新人が保守するかも知れないリスクとの天秤にかけた場合の
コストも。

737:デフォルトの名無しさん
08/06/06 00:23:16
まだ学生だからわからんのだけど仕事でやってて、それに引っかかる人いるの?

738:デフォルトの名無しさん
08/06/06 00:24:10
万人にわかるようにするんだよ。

739:デフォルトの名無しさん
08/06/06 00:25:54
そんなのもわからないやつにソース触らせんなよw

740:デフォルトの名無しさん
08/06/06 00:27:30
しるかよw

そういう規約をつくってるんだからw

あ、デクリメントも禁止されてたよ。

741:デフォルトの名無しさん
08/06/06 00:28:09
>>737
ソースって案外長生きなんだよ。
COBOLとかあれだけクラサバ登場で無くなるといわれたのに
今だに残ってる。

webの発達でc出来る人口が減ってるのに、新人にわざわざ
今の程度の説明で時間取られたくないだろ?

742:デフォルトの名無しさん
08/06/06 00:29:04
>>736
最適化がかかればクロックやメモリは同等になるはず
好きな方を選べばいいだけ

743:デフォルトの名無しさん
08/06/06 00:29:54
インクリメントすら理解できないなら他の部分が大丈夫なわきゃないと思うんだが。

744:デフォルトの名無しさん
08/06/06 00:31:37
前に、++aとa++って、何が違うんですかって、聞かれたことがあった。


745:デフォルトの名無しさん
08/06/06 00:35:52
それだけが1行にあれば機能は同じだけど、

条件判定の中にあったりすると面倒だし
この間論争になったのは

if (xxxxxx) printf("%d",(a++)*(a++));

こんな感じの結果の違いでもめてたし。



746:デフォルトの名無しさん
08/06/06 00:36:21
それ論争以前の未定義だから

747:デフォルトの名無しさん
08/06/06 00:37:33
>>746
新人がインクリメント覚えて使い出してこんなの書かれると
また教える羽目になるでしょ。

だったら素直にインクリメントなどは使うなとしたほうがいい。

748:デフォルトの名無しさん
08/06/06 00:39:46
なんていうか、C言語の省略した記述って
メモリやCPUなんかのハード資源が極端に
少なかったころのゲーム開発と似てて
みみっちいという気がする。


749:デフォルトの名無しさん
08/06/06 00:40:29
それを論争とか言っちゃう人間が何を教えんの?

750:デフォルトの名無しさん
08/06/06 00:49:14
なんでいまさら宿題スレでインクリメントが問題視されるのかわからん

751:デフォルトの名無しさん
08/06/06 01:32:20
とても難しい問題が来ました
しかし馬鹿な私と違って非常に優秀な諸兄にはわけないでしょう

[1] 授業単元:C言語研修
[2] 問題文(含コード&リンク):
1から45の数(合計値)は1から9の数(要素)の和で作ることができる。(要素に同じ数を使わない)
例えば合計値6は最大3つ(要素数)の要素の和でつくることができ、要素数1であれば6、要素数2で
あれば1+5と2+4の2通り、要素数3であれば1+2+3でつくる。この組み合わせで全てである。
合計値と要素数から要素の和の組み合わせ全てを計算する再帰関数を作れ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 6.0
 [3.3] 言語: C言語
[4] 期限: 起源はありませんが優秀な貴方方の手に掛かれば瞬殺でしょう
[5] 制限はありません。貴方方の持っている全ての知識を注ぎ込んじゃって構いません

752:デフォルトの名無しさん
08/06/06 01:36:25
>しかし馬鹿な私と違って非常に優秀な諸兄にはわけないでしょう
こういっておけば馬鹿が調子こいてやってくれるよwプゲラ
という主の顔が浮かぶ

753:デフォルトの名無しさん
08/06/06 01:54:21
>>751
#include<stdio.h>
int resolve_sub(int total, int num, int min) {
static int ans[9], anslen = 0;
int i, j;
if(!num)
return !total;
for(i = min; i <= 9 && i <= total; i ++) {
ans[anslen ++] = i;
if(resolve_sub(total - i, num - 1, i + 1)) {
for(j = 0; j < anslen ; j ++)
printf("%d ", ans[j]);
printf("\n");
}
anslen --;
}
return 0;
}
void resolve(int total, int num) {
resolve_sub(total, num, 1);
}
int main() {
resolve(30, 6); /* (例)30を6個の和に分ける */
return 0;
}

754:デフォルトの名無しさん
08/06/06 02:25:34
#include <stdio.h>
void f(int size, int n, int *p)
{
static int pos = 0, start = 1;
int i;
if(pos==size-1) {
p[pos] = n;
for(i=0; i<size; i++) printf("%d ", p[i]);
putchar('\n');
return;
}
for(i=start; i*2<n; i++) {
start = i + 1;
p[pos++] = i;
f(size, n-i, p);
pos--;
}
}
int main(void)
{
int num, amount, *p;
printf("要素数を入力して下さい:");
scanf("%d", &num);
printf("合計数を入力して下さい:");
scanf("%d", &amount);
p = malloc(sizeof(int) * num);
f(num, amount, p);
return 0;
}


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5230日前に更新/305 KB
担当:undef