C/C++の宿題を片付けます 110代目at TECH
C/C++の宿題を片付けます 110代目 - 暇つぶし2ch331:デフォルトの名無しさん
08/06/22 21:05:18
[1] 授業単元: Cプログラミング実習
[2] 問題文(含コード&リンク)--------------------

int型の数値データの内部表現を2進数で表示する。
実行に当たっては次のデータを入力して確認せよ。

[1]0
[2]1
[3]-1
[4]32767
[5]-32768

実行例↓

入力データ:-1
 内部表現:1111111111111111

入力データ:32767
 内部表現:0111111111111111

-----------------------------------------------


[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (visual studio 2005 )
 [3.3] 言語: (C言語)
[4] 期限:25日まで
[5] その他の制限: (まだ大してC言語は習ってないので簡単な関数でお願いします)

332:デフォルトの名無しさん
08/06/22 21:11:35
>>331
なんか、前スレにマイナスにも対応しているものがあった・・・
ちと探してくる

333:デフォルトの名無しさん
08/06/22 21:14:37
>>332
わざわざすいません<(_ _*)>

334:デフォルトの名無しさん
08/06/22 21:20:35
>>331
int型は16bitでいいの?

335:デフォルトの名無しさん
08/06/22 21:25:17
>>331
URLリンク(kansai2channeler.hp.infoseek.co.jp)

336:デフォルトの名無しさん
08/06/22 21:29:04
>>331
#include <stdlib.h>
#include <stdio.h>

void main(int argc,char* argv[])
{

int _in = atoi(argv[1]);
int i;
for(i = 0;i < 32;i++)
{
printf("%d",(_in & (0x80000000>>i) )?1:0);
}
printf("\n");
}

数値は引数で入力、エラーチェックはしてない

337:デフォルトの名無しさん
08/06/22 21:33:54
>>331
#include<stdio.h>
int main( void ){
int i,n;
printf("入力データ:");
scanf("%d",&n);
printf(" 内部表現:");
for(i=0;i<16;++i){
if(n & 1<<15-i) printf("1");
else printf("0");
}
return 0;
}

338:デフォルトの名無しさん
08/06/22 21:34:00
微妙だな

339:デフォルトの名無しさん
08/06/22 21:40:10
いや、絶妙だ

340:デフォルトの名無しさん
08/06/22 21:42:20
>>334
VS2005でWinが対象だから32bitじゃない?


341:デフォルトの名無しさん
08/06/22 21:42:51
絶妙ですがありがとうございます

342:デフォルトの名無しさん
08/06/22 21:45:06
まっ、待ってたもう、麻呂の16進数まで対応したクソースを拝むでおじゃるよ
もう少し待ってたもう

343:デフォルトの名無しさん
08/06/22 21:51:37
>>340
実行例が16桁だから…

344:デフォルトの名無しさん
08/06/22 21:52:05
int i,n;
int bit=sizeof(int)*8;
//nをキーボードから入力
for(i=bit-1; i>=0; i--)
printf("%d", n>>i&1);


345:デフォルトの名無しさん
08/06/22 21:52:46
>>343
それは確かに気になった…。


346:331
08/06/22 22:02:29
テキストの問題なんですけど、何ビットとか書いてないんですよ・・・
多分16ビットでOKだと思います。


347:デフォルトの名無しさん
08/06/22 22:03:37
Winでint型だと普通は32bitだけどね

348:デフォルトの名無しさん
08/06/22 22:07:13
普通にsizeof演算子使えよ
でも1byteが9bitの環境もあるって聞いたことあるな

349:デフォルトの名無しさん
08/06/22 22:11:32
テキストってことは16bit時代の参考書をそのまま使ってるんじゃね?
あくまで「int型」の内部表現を出力するんであれば32bitが正解だろうなぁ

350:デフォルトの名無しさん
08/06/22 22:12:10
せっかくがんばったのでうpっときます。

>>179
C++だけど参考にでもしてください。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

351:350
08/06/22 22:14:09
一番最後のcoutではCtrl+Gだったけど、ダメみたいね・・・

352:350
08/06/22 22:15:29
あら、コピったら生きてた

さばら

353:デフォルトの名無しさん
08/06/22 22:15:42
DWORD
WORD
BYTE表現でいいだろ

354:デフォルトの名無しさん
08/06/22 22:22:32
>>301 nが小さいときだけおk
#include<iostream>
#include<algorithm>
#include<cmath>
struct point_t{
double x, y;
};
double calc_distance(const point_t &a, const point_t &b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main(void){
const int n=1000; // これが小さいときだけ
double *distance=new double[n*(n-1)];
point_t *point=new point_t[n];
long i, j, x=0;

for(i=0;i<n;i++){
point[i].x=rand();
point[i].y=rand();
}
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
distance[x++]=calc_distance(point[i], point[j]);
}
}
std::sort(&distance[0], &distance[x]);
for(i=0;i<x;i++){
std::cout << distance[i] << std::endl;
}
return 0;
}

355:デフォルトの名無しさん
08/06/22 22:22:44
16進数表示ならこんな漢字かな
実行して無いからわからんが

for(i=bit-4; i>=0; i-=4)
printf("%c", "0123456789abcdef"[n>>i&15]);

356:デフォルトの名無しさん
08/06/22 22:25:32
>>331
URLリンク(kansai2channeler.hp.infoseek.co.jp)
まっ、麻呂の、麻呂のクソースを見てたもうぅ~~
10進数の数値を2~16進数まで変換できるでおじゃる

357:デフォルトの名無しさん
08/06/22 22:28:53
>>350
ちょ、俺のコンパイラ(BCC5..9.3)だと
direction++;で
エラー E2277 chess1.cpp 362: 左辺値が必要
(関数 CAnalyzeTourOfKnight::AnalyzeTourOfKnight(ANALYZETYPE) )


358:デフォルトの名無しさん
08/06/22 22:29:23
微妙だな

359:デフォルトの名無しさん
08/06/22 22:33:05
クソースとしては絶妙でおじゃ

360:デフォルトの名無しさん
08/06/22 22:33:11
まあ出題者がgcc指定してるからgccで通ればよいのか

361:デフォルトの名無しさん
08/06/22 22:37:44
>>357
>>360
いや
俺もbccなんだけど
そこで落ちる理由はわからん・・・??
俺の環境じゃ落ちないぞ?


362:デフォルトの名無しさん
08/06/22 22:39:20
それは奇妙だな

363:デフォルトの名無しさん
08/06/22 22:42:57
C:\Documents and Settings\knight>bcc32 TourOfKnight
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
TourOfKnight.cpp:
警告 W8004 TourOfKnight.cpp 134: 'tempY' に代入した値は使われていない(関数 CAnal
yzeTourOfKnight::MoveKnightPosition(int &,int &,DIRECTION) )
警告 W8004 TourOfKnight.cpp 134: 'tempX' に代入した値は使われていない(関数 CAnal
yzeTourOfKnight::MoveKnightPosition(int &,int &,DIRECTION) )
警告 W8004 TourOfKnight.cpp 309: 'y' に代入した値は使われていない(関数 CAnalyzeT
ourOfKnight::KinghtRoundBoard(int,int) )
警告 W8004 TourOfKnight.cpp 453: 'comparisonNum' に代入した値は使われていない(関
数 main() )
警告 W8004 TourOfKnight.cpp 452: 'answerNum' に代入した値は使われていない(関数 m
ain() )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

これだけ

364:デフォルトの名無しさん
08/06/22 22:44:11
>>361
BCC(今はCodeGearCCだからCCCか)のバージョンは同じ?
5.9.3ってBCB2007の付属品だよ。
フリーで配布されているのは5.5.1。

365:デフォルトの名無しさん
08/06/22 22:44:39
>>364
5.5.1

366:デフォルトの名無しさん
08/06/22 22:46:08
enum値のインクリメントは許されないのか・・・・

367:デフォルトの名無しさん
08/06/22 22:46:42
ちなみにVC9のエラーログ
c:\documents and settings\********\my documents\visual studio 2008
\projects\learn1\chess1\chess1.cpp(367) : error C2676: 二項演算子 '++' :
'CAnalyzeTourOfKnight::DIRECTION' は、この演算子または定義済の演算子に
適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)

368:デフォルトの名無しさん
08/06/22 22:51:13
>direction++;で
>エラー E2277 chess1.cpp 362:

ファイル名を chess1.cにするか
direction = direction + 1;
にしたらいいんでない?

369:デフォルトの名無しさん
08/06/22 22:51:49
>>366
そのままではできないが、演算子多重定義すればできる。

370:デフォルトの名無しさん
08/06/22 22:52:59
>>368
ああそうか。てっきり>>350

>C++だけど参考にでもしてください。

と書いてあったからcppしてたわ。
<time>も通らないので<ctime>にしてたしおかしいわと
思ってたんだ

371:デフォルトの名無しさん
08/06/22 22:53:35
direction = static_cast<Month>(direction+1);
でどうだ!!?


ということでごめんなさい。

372:デフォルトの名無しさん
08/06/22 22:55:04
>>370
いやcppだけどね。
timeは通ってるけど
たしかにctimeだわな('A`)
スマソ

373:350
08/06/22 22:56:14
俺のレス
>>361
>>363
>>365
>>366
>>371
>>372

374:デフォルトの名無しさん
08/06/22 22:56:27
要するにC++モードでもenumに++演算子を適用できる
コンパイラと弾くコンパイラがあるわけだ
規格書ではどうなってるのかな

375:デフォルトの名無しさん
08/06/22 22:57:09
ウォッチでは通るのに

376:350
08/06/22 23:01:35
まあ普通に考えたら
enum{
    A=1,
    B=10,
    C=100,
    D=1000
};

とかがあることもあるわけだから、やっぱり++は許されないのかな

377:179
08/06/22 23:23:16
>>350

返事遅れてごめんなさい・・・
自分C++全く知らないのですが、やっていただいたことに関しては
本当に感謝してます!
聞いてばかりで申し訳ないのですが、
このソースをCに書き換えるにはどのようにすればよいのでしょうか?


ちなみに調べてみたんですが5x5は解の個数が304個みたいです。


378:デフォルトの名無しさん
08/06/23 00:21:32
全部関数にしたらどう?

379:350
08/06/23 00:22:56
>>377
304><
感動><

変数がめんどくさいかも・・・
全部staticでいいならいいけど・・・

380:デフォルトの名無しさん
08/06/23 00:26:52
Cってことはfor内での変数宣言とかも直さなきゃならんか


381:デフォルトの名無しさん
08/06/23 00:37:11
URLリンク(www.kameda-lab.org)

382: ◆15lIZBDwz6
08/06/23 00:37:22
[1] 授業単元:プログラミングⅡ
[2] 問題文(含コード&リンク):
5 つの文字列を格納できる二次元配列 str を定義し,キーボードから5つの文字列を入力する.
その後,配列 str と文字列数 num (この例では,5)を引数として受け取り,
最長の文字列が格納されている配列の添え字(行の要素番号)
を返す関数 int str_maxlen(const char str[][100], int num)を定義し,動作を確認するプログラムを作成せよ.
但し,同じ長さの文字列が存在する場合は,最初に現れる文字列を優先すること.
また,文字列長はライブラリ関数は利用せずに求めること。
main関数内で,str_maxlen 関数の返却値を元に文字列を出力することで,動作確認すること.

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限:2008年6月24日
[5] その他の制限: 習った範囲は文字列まで。その他の制限は問題文参照

自分で解いていたらこの問題だけ上手くいかないのでお願いします

383:350
08/06/23 00:38:42
>>377
書き換えてみた。
static変数使いまくりでひどいけど

ちなみに100行目に入れる値を変えればいろいろ変化します。
③には非対応ですね。
自分で盤を初期化すれば多分できるのかな・・・


384:350
08/06/23 00:39:13
>>383
URLリンク(kansai2channeler.hp.infoseek.co.jp)
大事なもん貼り忘れた

385:デフォルトの名無しさん
08/06/23 00:55:26
>>382
#include <stdio.h>

int str_maxlen(char str[][100], int num) {
int i, j, max = 0, max_index = 0;
for(i=0; i<num; i++) {
for(j=0; str[i][j]; j++);
if(max < j) max = j, max_index = i;
}
return max_index;
}

int main(void)
{
char str[5][100];
int i;

for(i=0; i<5; i++) scanf("%s", str[i]);

printf("最長の文字列は%s", str[str_maxlen(str, 5)]);

return 0;
}

386:デフォルトの名無しさん
08/06/23 00:56:09
>>382
#include<stdio.h>
str_maxlen(const char str[][100], int num);
int main( void )
{
    char str[ 5 ][ 100 ];
    int i = 0;
    int length = 0;
    for( i = 0; i < 5; i++ ){
        gets( str[ i ] );
    }
    length = str_maxlen( str, i );
    printf( "%d", length);
    return( 0 );
}
int str_maxlen(const char str[][100], int num)
{
    int maxlen=0;
    int i = 0, k = 0;
    for( i = 0; i < num; i++ ){
        for( k = 0; str[ i ][ k ] != '\0'; k++ ){}
            if( k > maxlen ){
                maxlen = k;
            }
    }
return( maxlen );
}

387:デフォルトの名無しさん
08/06/23 00:57:38
今だっ!おまいらうpロダ(ry

388:386
08/06/23 00:59:01
>main関数内で,str_maxlen 関数の返却値を元に文字列を出力することで,動作確認すること.
これやってないわ
スマソ

389:デフォルトの名無しさん
08/06/23 01:00:51
返すのは長さじゃなくて添え字

390:デフォルトの名無しさん
08/06/23 01:02:19
>>389
まぁ結局は添え字だが、
返すべきはkじゃなくてiだわな

391:デフォルトの名無しさん
08/06/23 01:05:41
>まぁ結局は添え字だが、
何を言ってるんだ?

392:377
08/06/23 01:07:21
>>383>>384

書き換えまでやってくださったとは・・・!

本当何から何まですみません。
ありがとうございます!(>_<)



393:デフォルトの名無しさん
08/06/23 01:14:32
>>350 コンパイルは通ったけど、解が見つからなかったので報告。
// direction++;
direction = static_cast<DIRECTION>(direction+1);
/* switch(direction){
case NOTYET:direction = START; break;
case START: direction = RU; break;
case RU: direction = RD; break;
case RD: direction = DR; break;
case DR: direction = DL; break;
case DL: direction = LD; break;
case LD: direction = LU; break;
case LU: direction = UL; break;
case UL: direction = UR; break;
case UR: direction = END; break;
case END: direction = NOTYET; break;
}
*/

394:デフォルトの名無しさん
08/06/23 01:17:27
6x6の盤でナイトの旅を始めます。
解析中...
正しく解析できました。

1 30 27 18 3 10
26 17 2 11 28 19
31 36 29 20 9 4
16 25 8 35 12 21
7 32 23 14 5 34
24 15 6 33 22 13
評価回数は59079349回です。

要した時間は0.028秒です。


395:393
08/06/23 01:21:25
//盤面のサイズ。
#define SIZE 5
です。遅れました Express 2005 + SDK

396:デフォルトの名無しさん
08/06/23 01:24:45
以下のようなプログラミングはどのようにすればよいのでしょうか?

「組み合わせ」を求める数学の公式にコンビネーションがあります。このコンビネーションのプログラミングを教えてください!

1.nとrをscanf()で読み、nCrの値を計算して表示させます。
条件として、nとrの値はマイナスでなく、またゼロでなく、さらにここではn<=10であることを確認させて、正しい数値を入力させる。もし誤った数値を入力したら「入力ミスです」と表示させる。

2.0!=1も扱えるようにすることを忘れない。


397:デフォルトの名無しさん
08/06/23 01:25:06
統計計算のプログラミングの例を教えてください。

最大20個までの実数値をscanf()で、配列に読み、呼んだデータの、平均値、分散、最大値、最小値を計算して表示するプログラムを教えてください!

条件として、データは-999.0から999.0の範囲とし、入力終了の合図として1000.0より大きい値のデータを入力すると、その数値は入力されずに入力作業を終了する。
平均値と分散については、
データ数をn、各データをXi(i=1~n)とすると、(ΣXi)/n (データの個数で割ったもの)が平均値
(Σ(Xi-(データの相加平均))^2)/nが分散であるとする。

よろしくお願いします!!


398:デフォルトの名無しさん
08/06/23 01:26:18
5x5の盤でナイトの旅を始めます。
解析中...
解析できませんでした。
評価回数は15615711回です。

要した時間は0.07秒です。

399:デフォルトの名無しさん
08/06/23 01:26:43
>>391
maxlen=k;
return maxlen;
はどう見ても添え字を返してるだろ


400:350
08/06/23 01:30:24
>>395
マスの数が奇数の場合、周遊は解なし

>>398
お前のPCのスペックが知りたいわw



401:デフォルトの名無しさん
08/06/23 01:32:32
>>396
つ パスカルの三角形
>>397
探せば見つかるようなありきたりの課題じゃ~・・・

402:デフォルトの名無しさん
08/06/23 01:33:46
>>397
#include <stdio.h>

int main(void){
double value, sum=0, sum2=0, average, variance, maximum=0, minimum=0;
int n;

for(n=0;n<20;n++){
if(scanf("%lf", &value)!=1) break;
if(value>=1000.0) break;
sum+=value;
sum2+=value*value;
if(n==0 || maximum<value) maximum=value;
if(n==0 || minimum>value) minimum=value;
}
if(n==0) return 1;
average=sum/n;
variance=(sum2-sum*average)/n;
printf("平均値 %f\n分散 %f\n最大値 %f\n最小値 %f\n", average, variance, maximum, minimum);

return 0;
}

403:デフォルトの名無しさん
08/06/23 01:34:44
>>399
アホか
添え字って言っても
>最長の文字列が格納されている配列の添え字(行の要素番号)
だぞ。
kは文字列の長さにしかなんねーよ


404: ◆15lIZBDwz6
08/06/23 01:35:35
>>385-386
ありがとうございます。
それにしても…早いw
次の問題解き終わってきてみたら20分後にはもうできてるし…

405:デフォルトの名無しさん
08/06/23 01:39:37
>>399
>>390

406:デフォルトの名無しさん
08/06/23 01:39:47
>>396
> 2.0!=1も扱えるようにすることを忘れない。
階乗を求めるやり方か・・・

407:デフォルトの名無しさん
08/06/23 01:49:24
>>396
URLリンク(kansai2channeler.hp.infoseek.co.jp)

408:デフォルトの名無しさん
08/06/23 01:50:59
>>394
最近のコンピュータははやいな!

409:デフォルトの名無しさん
08/06/23 02:01:50
>>396
あ~、入力エラーの表示は適当に追加しておいて。
あと、nもrも0のときでも考慮されてる。
0個の中から9個のものを選ぶという事象も1つの事柄として扱っているし
n個の中から0個のものを選ぶ、すなわち何も選ばないということも
1通りの事象として扱われているから。

410:デフォルトの名無しさん
08/06/23 02:02:27
×0個の中から9個のものを選ぶという
○0個の中から0個のものを選ぶという

411:デフォルトの名無しさん
08/06/23 02:04:32
>>397
#include <stdio.h>
#include <math.h>

int main(void)
{
double d[20], max = -1000.0, min = 1000.0, ave = 0, var = 0;
int i, n;

for(i=0; i<20; i++) {
scanf("%lf", d + i);
if(fabs(d[i]) > 999.0) break;
if(max < d[i]) max = d[i];
if(min > d[i]) min = d[i];
ave += d[i];
var += d[i] * d[i];
}

if(!i) return 0;
ave /= i;
var = var / i - ave * ave;

printf("最大値%f\n最小値%f\n平均%f\n分散%f\n", max, min, ave, var);

return 0;
}

412:395
08/06/23 02:48:26
>>400
有り難う御座います、見逃していました。
>ちなみに100行目に入れる値を変えればいろいろ変化します。

所で、よく見るとCのほう(float)キャストが無いので、経過時間が0.000秒でした。

413:デフォルトの名無しさん
08/06/23 03:04:20
軽作業用に使っている AthlonXP 2800+ 2GHzじゃ2.78秒
C2D E7200でも試してみようかのぅ

414: ◆dH2ZMCPPns
08/06/23 09:34:10
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C
[4] 期限: 6月23日 14時まで

よろしくお願いします。二問あります

415:デフォルトの名無しさん
08/06/23 10:06:26
[1]CとC++
[2]テキストサウンドノベルを作成する事。
キー入力でメッセージを表示し、途中で選択肢を含める。(最大3つまで)
画面をスクロールさせることは禁止。ページ切り替えは、画面全消去で対処する事。
テキスト行数は、最低50行から最大100行までとする。
画面全消去方法は、先生に聞くこと。

#include"stdlib.h"
system("CLS");
    この時に画面すべて消せる

416:デフォルトの名無しさん
08/06/23 10:11:46
>>415
サウンドはどうやって鳴らすの?

417:デフォルトの名無しさん
08/06/23 10:46:04
あいまいな問題にはまともに回答する必要無し

418:415
08/06/23 10:59:11
サウンドはほっといていいらしいです。

419:デフォルトの名無しさん
08/06/23 11:04:36
それただのノベル。

420:デフォルトの名無しさん
08/06/23 11:11:11
プログラム部分なら作れるけど、ノベルはどうすんだよw

421:デフォルトの名無しさん
08/06/23 11:21:44
サウンドノベルみたいに選択肢で分岐するテキストアドベンチャーを作れば良いと理解した。
まってろ、今作ってる。

422:sage
08/06/23 11:42:17
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
5 つの数を double 型の配列 nums にキーボードから読み込んで,
それらの 3乗の和を出力するプログラムを作成せよ。
3 乗の和を計算する部分は,関数 double cubesum(double vc[], int no) とすること。
ここで,配列 vc はデータの格納された配列を,
no は入力したデータの個数を表す。
main 関数では個数の 5 は定数として扱って構わないが,
関数 cubesum では個数は引数で読み込むものとする。
つまり何個のデータにでも使える汎用性のあるものとして関数を定義する。
3 乗の和の計算は,main からその関数を呼び出して行う。

ヒント:関数の中の3乗和の計算には繰り返しの処理が必要となる。
for 文を使えば簡単に書ける。

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

423:デフォルトの名無しさん
08/06/23 11:47:31
#include <stdio.h>

double cubesum(double vc[], int no)
{
double sum = 0.0;
int i;
for(i=0; i<no; i++) sum += vc[i] * vc[i] * vc[i];
return sum;
}

int main(void)
{
double nums[5];
int i;

for(i=0; i<5; i++) scanf("%lf", nums + i);

printf("%f", cubesum(nums, 5));

return 0;
}

424:デフォルトの名無しさん
08/06/23 12:12:47
>>415
マルチでもいいけどさ、環境と期限書こうぜ

425:415
08/06/23 12:32:18
環境はvista
言語はC++
起源ははっきりとは言ってなかったが夏休み前だと思います。

426:デフォルトの名無しさん
08/06/23 12:40:32
お前の夏休みなんか知らねーよww

427:350
08/06/23 12:43:59
>>412
動作に現れる部分を修正するのは大いに結構だが
現れない部分の修正しないで提出すると痛い目見るよ

例えばラインコメント(//)とか//コンストラクタとか//デストラクタとか
アルゴリズムだとかstaticばかりなのかとか

428:デフォルトの名無しさん
08/06/23 13:00:16
421だが、飽きた。
他の人に任せた。

429:デフォルトの名無しさん
08/06/23 13:00:43
微妙ですがage

430:425
08/06/23 13:26:52
期限だろ。字間違うなよ

431:デフォルトの名無しさん
08/06/23 13:29:51
夏休みの宿題になっちまうなw

432:デフォルトの名無しさん
08/06/23 14:03:54
[1] 授業単元:画像処理 [2] 環境  [2.1] OS:Linux  [2.2] 言語:C言語
#include <stdio.h>
#include <stdlib.h>
int main( int argc , char *argv[] )
{ unsigned short int ipi[256][32];
unsigned short int ipo[256][32];
FILE *fpi,*fpo;
int i,j;
if((fpi=fopen( "logo.gray" ,"rb")) == NULL) {
printf("file open error\n");
exit(-1); }
fread(ipi[0],sizeof(unsigned short int),256*32,fpi);
fclose(fpi);
for (j=0 ;j <256 ; j++){
for (i=0 ;i <32 ; i++){
if(127>ipi[j][i]){
ipo[j][i]=0; }
else{
ipo[j][i]=255; }
}
}
if((fpo=fopen( argv[2] ,"wb")) == NULL) {
printf("file open error\n");
exit(-1); }
fwrite(ipo[0],sizeof(unsigned short int),256*32,fpo);
fclose(fpo);
logo-bin.gray の境界点を抽出した画像を作成するプログラムを作成せよ。




433:432
08/06/23 14:07:01
return 0;
}最後にこれを忘れてました。分かりにくくてすみませんが問題はこれです。

logo-bin.gray の境界点を抽出した画像を作成するプログラムを作成せよ。

434:142
08/06/23 14:27:47
>>142ですがどうかよろしくお願いします。

435:デフォルトの名無しさん
08/06/23 15:02:30
>>415何気に難しいな。セリフしか作れん

436:デフォルトの名無しさん
08/06/23 15:11:15
[1] 授業単元:
C
[2] 問題文(含コード&リンク):()
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
Microsoft Visual Studio 2008
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
明日13:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

お願いします。


437:デフォルトの名無しさん
08/06/23 15:14:09
>>435
バッチファイルで書いた方が早い気がするw

438:デフォルトの名無しさん
08/06/23 15:23:43
/*未コンパイル 動作確認無し*/
#define N 7
#include <stdio.h>
struct{int linkable[3];char *prompt;
}scene[N]={
{1,3,5," [彼女]ねぇ挿れて"},
{0,2,4,"[貴方]麻呂のクソースくらえ~"},
{1,3,5,"[彼女]もっと優しくぅ~"},
{0,2,4,"[貴方]う~きつい"},
{1,3,5,"[彼女]う~固い"},
{2,4,6,"[貴方]出、出る~"},
{7,7,7,"[彼女]駄目~出しちゃ.汚れちゃう"},
}
int main(void){
int i=0,j;
wihle( i<N)[
printf("%s¥n",scene[i].prompt);
do{
printf("Select which?[1,2,3]?");scanf( "%d¥n",&j);
}while((j<1)&&(j>3));
i=scene[i].linkable[j];
}
return 0;
}

439:デフォルトの名無しさん
08/06/23 15:48:45
>>436
くそーすですが
URLリンク(kansai2channeler.hp.infoseek.co.jp)

440:デフォルトの名無しさん
08/06/23 15:53:19
>>439
すまん、関数の名前間違ってたので修正
URLリンク(kansai2channeler.hp.infoseek.co.jp)


441:デフォルトの名無しさん
08/06/23 15:54:10
>>439
微妙ですが我慢しておきます。

442:デフォルトの名無しさん
08/06/23 16:01:44
>>441
の優しさに世界が泣いた

443:デフォルトの名無しさん
08/06/23 16:11:09
こんなの書くような子じゃなかったんだけど...

444:デフォルトの名無しさん
08/06/23 16:13:59
トリ付けてないからなりすましの可能性も…
更に言うとこれも含めて自演の可能性もあるなww

445:デフォルトの名無しさん
08/06/23 16:15:39
1以上の正の整数の値をキーボードから入力し、1からNまでの和を求める
プログラムをC言語で作成せよ。 また、1から999までの和はいくらか?
お願いします。

446:445
08/06/23 16:21:31
間違えた問題の続きです。 1+2+・・・+N=Σi

あともうひとつ
1以上の正の整数の値をキーボードから入力し、1からNまでの2乗の和を求める
プログラムをC言語で作成せよ。 また、1から100までの和はいくらか?

1の2乗+2の2乗+・・・+Nの2乗=Σiの2乗
これもお願いします。 問題分かりにくくてごめんなさい。




447:デフォルトの名無しさん
08/06/23 16:22:55
>>445
#include <stdio.h>
int main(void)
{
int N;
printf("入力");
scanf("%d", &N);
printf("1から%dの和は%d\n", N, (1+N)*N/2);
return 0;
}


448:445
08/06/23 16:23:18
誰か432をお願い!

449:445
08/06/23 16:25:44
>>447

ありがとうございます。


450:デフォルトの名無しさん
08/06/23 16:29:47
ずいぶんとレベルの違う宿題が出る授業だなw
小学校と大学院が校舎共有してるのか?

451:デフォルトの名無しさん
08/06/23 16:32:35
外径、内径、高さの値を入力して、中空円筒の体積を計算するプログラム
をC言語で作成せよ。
#include<stdio.h>
#include<math.h>
main()
{
double pi,r1,r2,h,V;
途中までやりました。お願いです。



452:447
08/06/23 16:32:38
>>449
本当はforループで計算するのを求めていると思う


453:445
08/06/23 16:36:06
>>450
1年の授業と3年の授業ですw
432と446の問題を誰かお願いします。
期限は今週末です。

454:デフォルトの名無しさん
08/06/23 16:38:59
[1] 授業単元:
プログラミング
[2] 問題文(含コード&リンク):()
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
明日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタ習ったばっかりです。

おねがいします。

455:デフォルトの名無しさん
08/06/23 16:40:02
>>432
"logo.gray"ってファイルは?
無くとも、もっと説明しなきゃ

”境界点を抽出”って意味は?
"logo.gray"が無いと説明出来ないならUPしなきゃ


456:454
08/06/23 16:41:08
問題文のリンク間違えました・・・ すいません
URLリンク(kansai2channeler.hp.infoseek.co.jp)

457:デフォルトの名無しさん
08/06/23 16:43:33
次の関数を計算するプログラムを作成せよ。C言語で。
y=3エックス2乗+2エックス-6

これ簡単だからやってみそ!

458:デフォルトの名無しさん
08/06/23 16:48:13
お前がやれ。

459:436
08/06/23 16:50:45
>>440
ありがとうございます。
>>441
貴方は誰ですか?

460:432
08/06/23 16:54:17
>>455

境界点を抽出の意味は僕もよく分からないです。ほんとにちんぷんかんぷんです。
単元は2値画像処理というところです。

461:デフォルトの名無しさん
08/06/23 16:56:00
>>460
輪郭抽出って事?
2x2 sobel フィルタとか使うの?

462:デフォルトの名無しさん
08/06/23 16:56:01
>>457
そんなこと言わないでさー やってよーん

463:デフォルトの名無しさん
08/06/23 16:57:14
>>457
意味不明なりよ

464:デフォルトの名無しさん
08/06/23 16:58:54
>>460
それじゃ、誰も出来ないだろw
もっと説明がいるぞ

"logo.gray"ってのは存在して、それの境界点抽出なのか
それとも任意の2値画像なのか

友達でも誰でも良いから聞いてきなw


465:432
08/06/23 16:59:55
輪郭抽出だと思います!
2x2 sobel フィルタは使わないと思います。
とにかくそういうc言語のプログラムを作成しろと言われて。
432を少し改良すればできると教授に言われました。

466:432
08/06/23 17:01:19
>>464

"logo.gray"は存在して、それの境界点抽出です!

467:デフォルトの名無しさん
08/06/23 17:06:34
>>457
y = 3*x*x+2*x-6;

468:デフォルトの名無しさん
08/06/23 17:16:00
>>466

なんだ?意図的にとぼけてるのか?
それなら"logo.gray"をUPしなきゃ、誰も出来ないだろ
って言ってるんだけど…

469:デフォルトの名無しさん
08/06/23 17:18:41
>>466
16.bitグレイスケール画像を作ってうp!

470:デフォルトの名無しさん
08/06/23 17:21:18
>>451
#include<stdio.h>
main()
{
double pi,r1,r2,h,V;
printf( "外径\n" );
scanf( "%lf", &r1 );
printf( "内径\n" );
scanf( "%lf", &r2 );
printf( "高さ\n" );
scanf( "%lf", &h );
pi = 3.14159265358979;
V = (pi * (r1 / 2.0) * (r1 / 2.0) + h) - (pi * (r2 / 2.0) * (r2 / 2.0) + h);
printf( "中空円筒の体積\n%f\n", V );
return 0;
}

471:デフォルトの名無しさん
08/06/23 17:22:57
1] 授業単元:授業じゃないんですが、質問スレがここしか分からなかったのでお願いします。
[2] 問題文(含コード&リンク):
#include<stdio.h>
 int main(void){
 int teika;
 printf("定価を入力してからENTERを押してください。\n");
 scanf("%d",&teika);
 printf("1割引だと%4d円\n",(int)(teika*0.9));
 printf("3割引だと%4d円\n",(int)(teika*0.7));
 printf("5割引だと%4d円\n",(int)(teika*0.5));
 printf("8割日だと%4d円\n",(int)(teika*0.2));
 return 0;
}

このプログラムで、1000とかキリの良い数値を入力すると、3割引だけ1円だけずれた値が帰ってきちゃいます。
これってなんでですかね?
[3] 環境
 [3.1] OS:WindowsXP SP2かな?
 [3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler Version 2.31
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:基礎は一通りやって、授業ではそれを応用して色々やらされてます。
が、ところどころ分からないので一人で最初から勉強し直してます。

472:デフォルトの名無しさん
08/06/23 17:25:48
[1] 授業単元: 実験
[2] 問題文 (1)ベクトルの内積を求めるプログラムを書け
(2)3×3の行列の掛け算を行う関数を作り、標準入力から入力した行列を
       掛け算するプログラムを書け
       (ヒント 2重配列が必要。 double matrix[3][3];)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月26日まで
[5] その他の制限:
 特になし

473:デフォルトの名無しさん
08/06/23 17:25:48
>>471
切り捨てたいの?切り上げたいの?四捨五入したいの?

474:デフォルトの名無しさん
08/06/23 17:35:50
>>473
なんでもいいです。
参考にしてるサイトのやり方に従ってそこまで作りました。
やっぱ(int)が影響してるんですかね?
と思って全部それ取って実数型にしたら直りました。
どんな原因なんでしょう…


475:デフォルトの名無しさん
08/06/23 17:42:35
>>474
浮動小数点数は条件が合わない限り小数ぴったりの数値を扱えないので
内部ではその数値に近い値に丸められている

0.7 はコンピュータ内部では 0.7 より小さな値で格納されていて
0.9 と 0.2 は少し大きな値になってるんだろう

476:デフォルトの名無しさん
08/06/23 17:58:49
>>475
やはりコンピュータ上の問題ですか。
プログラムの作り方を変えるとかしないと解決できないわけですね。
ありがとうございました。

477:デフォルトの名無しさん
08/06/23 18:04:56
>>453
アンカー付けろ
テンプレ使え
数字は半角(まぁ全角でも困らないけどさ)

478:デフォルトの名無しさん
08/06/23 18:08:55
>>471
3割引だったら7倍してから10で割ってみてはどうだろう。
teika * 7 / 10

479:デフォルトの名無しさん
08/06/23 18:12:32
>>415
URLリンク(kansai2channeler.hp.infoseek.co.jp)
宿題っぽくしてみた。
入力されたデーターが不正な場合は飛ぶので、それがダメなら適当に直して

480:デフォルトの名無しさん
08/06/23 18:18:20
>>471
1円どっちにずれてる?
割る前に2円足すか1円引けばいいんじゃね?

481:デフォルトの名無しさん
08/06/23 18:20:06
>>480
定価を入力してからENTERを押してください。
1000
1割引だと 900円
2割引だと 800円
3割引だと 699円
4割引だと 599円
5割引だと 500円
6割引だと 400円
7割引だと 299円
8割引だと 200円
9割引だと 100円

482:デフォルトの名無しさん
08/06/23 18:22:46
>>481
round ceil floor のいずれを使ってもピッタリの数値になるのに
キャスト(int)による型変換のときだけ1円ずれる
めんどくせー

483:デフォルトの名無しさん
08/06/23 18:36:31
どなたか>>90お願いします

484:デフォルトの名無しさん
08/06/23 18:46:59
>>478
なるほど。
そういう風にすればいいのですね。
ありがとう。

>>480
>>481の通りです。

>>482
めんどいっすねw

でも宿題じゃなくてなんとなく答えも見えたんでおkです!
皆様ありがとう。

485:デフォルトの名無しさん
08/06/23 18:51:51
>>446
いくらなんでも簡単すぎだろ。
丸投げしすぎ。

486:デフォルトの名無しさん
08/06/23 19:03:05
>>456
URLリンク(kansai2channeler.hp.infoseek.co.jp)

487:446
08/06/23 19:07:34
>>485
そうですか。反省します。

488:451
08/06/23 19:09:41
>>470

サンクス

489:デフォルトの名無しさん
08/06/23 19:41:33
>>483>>90
~省略~
BITREE_TYPE sumValue(BITREE_NODE *p){
BITREE_TYPE total = 0;
if(p->left) total += sumValue(p->left);
if(p->right) total += sumValue(p->right);
total += p->value;
return total;
}
int main(int args, char **argv){
BITREE_NODE *p;
int end=0;
if(args < 2) return 1;
p = inputBITree(argv+1, args-1, &end);
printf("合計は %d です\n", sumValue(p));
printf("左部分木の合計は %d です\n", sumValue(p->left));
printf("右部分木の合計は %d です\n", sumValue(p->right));
destroyBITree(p);
return 0;
}

490:デフォルトの名無しさん
08/06/23 19:55:16
[1]プログラミング言語C
[2]①3より大きく、入力された上限の数未満の全ての自然数かつ非素数に
ついて、3で割り切れるものは無視し、3で割った余りが1のものは加算
し、余りが2のものは減算して合計を求めよ。
 ②次のように表示する
Input Upper Limit : 11 [Enter]
Answer is : 6
 ③配列、平方根は使ってはならない。
[3]①windows vista
  ②gcc
  ③C言語
[4]2008/6/23/21:00まで
[5]今年の春から始めたので、まだ基礎のほうです。
よろしくお願いします。

491:デフォルトの名無しさん
08/06/23 20:38:26
[1] 授業単元: 課題
[2] 問題文
h URLリンク(www.elc.ees.saitama-u.ac.jp)
h URLリンク(www.elc.ees.saitama-u.ac.jp)
[3] 環境
 [3.1] OS : windows vista
 [3.2] コンパイラ名とバージョン: Borland C++Compiler Version 2.31
 [3.3] 言語: C
[4] 期限: 6月26日(印刷の必要があるため)
[5] その他の制限:
 特になし

身を晒す事になりますが、お願いします。


492:デフォルトの名無しさん
08/06/23 20:46:24
>>490
URLリンク(kansai2channeler.hp.infoseek.co.jp)

493:491
08/06/23 20:52:41
h URLリンク(kansai2channeler.hp.infoseek.co.jp)

πの計算のコンパイルが通るところまで作りました。
Cはじめて2ヶ月で出た課題です。
ほとんど回答は載せてあるからこのレベルらしいですが、
正直見直しても全く分からないです。

494:491
08/06/23 20:55:59
h URLリンク(kansai2channeler.hp.infoseek.co.jp)

πの計算のコンパイルが通るところまで作りました。
Cはじめて2ヶ月で出た課題です。
ほとんど回答は載せてあるからこのレベルらしいですが、
正直見直しても全く分からないです。

495:デフォルトの名無しさん
08/06/23 20:58:38
>>492
マヂ助かった!!ありがとう!!

496:デフォルトの名無しさん
08/06/23 21:03:23
>>413
8x8の解がいくつあるのか試してみて欲しいな

497:デフォルトの名無しさん
08/06/23 21:08:47
>>490
URLリンク(kansai2channeler.hp.infoseek.co.jp)

498:デフォルトの名無しさん
08/06/23 21:14:04
>>490
URLリンク(kansai2channeler.hp.infoseek.co.jp)

499:デフォルトの名無しさん
08/06/23 21:20:12
>>489
ありがとうございます。
./a.out [ 6 [ 8 1 5 ] [ 3 _ 9 ] ]と入力すると

$ ./a.out [ 6 [ 8 1 5 ] [ 3 _ 9 ] ]
合計は 29 です
左部分木の合計は 14 です
右部分木の合計は 9 です

という風に出て、実効例どおりに行かないのですが、どこがおかしいのでしょうか?
省略と書いてあるところには、URLリンク(kansai2channeler.hp.infoseek.co.jp)
・2分木の基本的な操作関数をそのまま貼り付けただけです

500:デフォルトの名無しさん
08/06/23 21:28:06
比較的簡単な問題が出るとここぞとばかりに回答が提示されるよね

501:デフォルトの名無しさん
08/06/23 21:29:24
簡単な問題解いてなんの意味があるって感じだよな

502:デフォルトの名無しさん
08/06/23 21:31:25
肩慣らし

503:デフォルトの名無しさん
08/06/23 21:32:29
簡単な問題をだらだらと置いておいても意味ないし

504:デフォルトの名無しさん
08/06/23 21:33:01
>>500
だから何?お前基準で簡単とか言われても基準が曖昧なんだが。
お前が簡単だと思っているだけで、実際にお前が解いてもミスだらけなんじゃね?

505:デフォルトの名無しさん
08/06/23 21:33:13
>>501
それが解けない奴の為のスレだw

506:デフォルトの名無しさん
08/06/23 21:33:21
【回答テンプレ】
[1] 回答レベル:ノーチェック/コンパイル済/テスト済/清書済
[2] 回答 短いものは、直接記入可 もしくはリンク
[3] 開発環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイル/テストに使用した
 コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4]コメント

なーんてね

507:デフォルトの名無しさん
08/06/23 21:45:21
>>504
ひとつの問題に対して複数者から解答が上がったら概ね平易
ひとつの問題に対して複数者が議論を始めたら面白みのある問題

ミスだらけかもね

508:デフォルトの名無しさん
08/06/23 21:51:39
誰かの解答に対して議論が始まることもあるけどなー

509:デフォルトの名無しさん
08/06/23 21:53:40
>>507
うん、だから お前基準 ほど 難易度 として当てにならないっつってんだが?
一言居士はうざいって意味が分からない?四の五の言わずにてめぇレスしろよw

510:デフォルトの名無しさん
08/06/23 21:55:56
>>492 はなぜ (i+1) やら、i=0からスタートしているのかと?
>>490
> 入力された上限の数未満
おかげで未満じゃなくなってるし・・・

511:デフォルトの名無しさん
08/06/23 21:58:41
なんという自己参照定義 循環論証

512:デフォルトの名無しさん
08/06/23 22:07:59
>>509
もうお前一言居士ってコテハンにしろよ

513:デフォルトの名無しさん
08/06/23 22:10:56
ってか>>507が自分基準で難易度の話をしているように読めるのなら文盲だな
あ、文盲って言葉も使っていいよ。自分が知らない他人を批判する言葉とか大好きそうw

514:デフォルトの名無しさん
08/06/23 22:12:27
すいません、この問題をおねがいします。

[1] 授業単元: Cプログラミング演習
[2] 問題文(含コード&リンク)

2以上32767以下の素数を求める。
整数nが素数かどうかは、2から√nまでの素数で割り切れるかどうか判定して、
そのすべてで割り切れなければnは素数となる。また、2以外の偶数は素数にならないから、
3以上の整数については奇数だけを対象にして求めればよい。
余力があれば、long型を対象にして2から2^31-1までの素数を求めてみよ。




[3] 環境
 [3.1] OS: (Windows vista)
 [3.2] コンパイラ名とバージョン: (visual studio 2005 )
 [3.3] 言語: (C言語)
[4] 期限:今週中
[5] その他の制限: (自分のレベルはかなり低いので難しい関数はなしでお願いします・・・)

515:デフォルトの名無しさん
08/06/23 22:21:31
すみませんがこの問題をお願いします。

変数(int型 または double型 または 両方),入出力(scanf関数,printf関数),条件分岐(if else文)をすべて用いて,
各自自由なプログラムを作成する.
課題提出のメールには,必ずそのプログラムの仕様の説明文をつけること
(そのプログラムが何をするものなのかを説明すること).


516:デフォルトの名無しさん
08/06/23 22:24:08
>>515
なんという独創的なw

517:デフォルトの名無しさん
08/06/23 22:27:08
>>515
楽しすぎるwww
大まかに、どんなの作りたいかとか買いてけよw
テストの点数とか、体重の判定とかなんでもいいからよw

518:デフォルトの名無しさん
08/06/23 22:31:31
HDDをクラッシュさせるプログラムはどうかな?
成績表を破壊するプログラムとか

519:デフォルトの名無しさん
08/06/23 22:32:52
>>515
このスレの解答を適当に拾えばおk

520:デフォルトの名無しさん
08/06/23 22:41:15
むしろwikiの回答例でも持って池。

521:デフォルトの名無しさん
08/06/23 22:41:37
>>515
int scanf printf if else
でググると良い

522:デフォルトの名無しさん
08/06/23 22:44:02
>>515
wikiのマスターマインド(Hit&Blow)がいいんじゃない?

523:デフォルトの名無しさん
08/06/23 22:46:24
流れ的にサウンドノベルしかないだろ

524:デフォルトの名無しさん
08/06/23 22:49:44
CG曲シナリオシステム全部1人でか

525:デフォルトの名無しさん
08/06/23 22:50:07
むしろなんかシューティング系を(ry

526:デフォルトの名無しさん
08/06/23 22:52:50
>>523
が言ってるのは>>438だな


527:デフォルトの名無しさん
08/06/23 23:04:07
>>514
URLリンク(kansai2channeler.hp.infoseek.co.jp)

528:デフォルトの名無しさん
08/06/23 23:07:53
>>514
> long型を対象にして2から2^31-1までの素数を求めてみよ。
PCの性能にもよるけど、物理的に時間が掛かるんで却下。

529:デフォルトの名無しさん
08/06/23 23:12:20
>>526
yes

530:デフォルトの名無しさん
08/06/23 23:22:56
>>499
BITREE_NODE *inputBITree(char *str[], int len, int *end){
~~省略~~
*end = i + i;
return p;
}

*end = i + i; を *end = i + 1;
に変更

531:デフォルトの名無しさん
08/06/23 23:41:29
>>522
>wikiのマスターマインド(Hit&Blow)

実行してみたんですが、どうやって終わらせるんですか?

532:デフォルトの名無しさん
08/06/23 23:42:56
Ctrl と c 同時押しすれば終わるんじゃない

533:デフォルトの名無しさん
08/06/23 23:47:29
>>528
70.3秒かかったよ
これって長すぎる?

アルゴリズムはエラトステネスの篩使用

534:デフォルトの名無しさん
08/06/23 23:54:44
>>533
>>514の条件はエラトステネスの篩じゃないだろ

535:デフォルトの名無しさん
08/06/23 23:58:59
エラトステネスの篩じゃね?

536:デフォルトの名無しさん
08/06/24 00:00:12
全然違う

537:デフォルトの名無しさん
08/06/24 00:00:27
ふるいじゃないよ

538:デフォルトの名無しさん
08/06/24 00:11:13
>>530
ありがとうございます。数字はしっかりでました!
実行例にある

入力データ [ 6 [ 8 [ 1 _ _ ] 5 _ _ ] ] [3 _ [ 9 _ _ ] ] ]

というのはどうやって出せばいいのでしょうか?

539:デフォルトの名無しさん
08/06/24 00:13:27
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: Borland C++Compiler V2.31
 [3.3] 言語: C
[4] 期限: 08年6月25日(水曜日・明日)
[5] その他の制限: 特に無し

就活で浦島状態です、助けてください

540:デフォルトの名無しさん
08/06/24 00:14:54
>>539
浦島状態って。
C#ならまだしも、いつの時代の人?

541:デフォルトの名無しさん
08/06/24 00:34:36
>>538
printBITree(p, 0, 0);
値の間にスペース入れたいならprintSubtreeの中をいじくる

542:デフォルトの名無しさん
08/06/24 00:37:42
>>539
#include <stdio.h>
int main(void)
{
char str[110], *p[10], temp[11];
int i, j, cnt[10] = {0}, n = 0;
p[0] = str;
for(i=0; i<10; i++) {
printf("入力文字列==>");
fgets(temp, sizeof temp, stdin);
for(j=0; temp[j]; j++) if(temp[j] == '\n') temp[j] = '\0';
if(strcmp(temp, "end")==0 || strcmp(temp, "END")==0) break;
for(j=0; j<n; j++) {
if(strcmp(p[j], temp)==0) {
cnt[j]++;
break;
}
}
if(j==n) {
char *dst = p[n], *src = temp;
while(*dst++=*src++);
p[n+1] = dst;
cnt[n]++;
n++;
}
}
printf("*** 集計結果 ***\n");
for(i=0; i<n; i++) printf("%s : %d\n", p[i], cnt[i]);
return 0;
}

543:デフォルトの名無しさん
08/06/24 00:52:47
#include <string.h>忘れてた

544:デフォルトの名無しさん
08/06/24 00:55:44
strcmp関数は作ってしまえ

545:デフォルトの名無しさん
08/06/24 01:09:56
[1] 授業単元:計算機
[2] 問題文(含コード&リンク):
8パズルを解く上で、状態の重複をチェックするにはどのようなプログラムを加えればよいか考えよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限: 明日
どなたかよろしくお願いします。

546:デフォルトの名無しさん
08/06/24 01:14:14
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
ポインタの課題で、数値の大小を判別するプログラムです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: VineLinux
 [3.2] コンパイラ名とバージョン: GNOME gcc
 [3.3] 言語: C言語
[4] 期限:6/25 PM:2時

547:デフォルトの名無しさん
08/06/24 01:17:08
>>506
よろしく

548:デフォルトの名無しさん
08/06/24 01:18:30
8パズルとやらをググってみたけど
>状態の重複
ってどんな状況だ?
こんなんか?
bool bCheckOverlap(int x, int y){
if(puzzle[x][y]>0){
return false;
}
return true;
}

549:デフォルトの名無しさん
08/06/24 01:22:59
動かしたとき同じ状態に戻らないようにするためのチェックじゃない?

550:デフォルトの名無しさん
08/06/24 01:25:05
>>546
A
void func(int *a, int *b);

B
void func(int *a, int *b)
{
if(*a < *b) {
int temp = *a:
*a = *b;
*b = temp;
}
}

551:545
08/06/24 01:26:32
>>549さんの仰るとおり、過去と同じ状態になっていないかチェックして無駄な処理をしないようにというものです。
言葉足らずで申し訳ありません。

552:デフォルトの名無しさん
08/06/24 01:32:44
>>550
ありがとうございます。
「void func(int *a, int *b);」こうやって宣言するんですね、この段階で自分はつまづいてました。
またこちらもお願いできますでしょうか?これで課題がすべて終わるのでお願いします。
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
関数は戻り値をひとつしか返せないが、ポインタを使うと複数の値を呼び出し側に
返すことができる。秒数を与えると、それが何時間何分何秒にあたるかを計算する
関数void calctime(int sec, int *hp, int *mp, int *sp);を作成せよ。
たとえば、calctime(3725, &h, &m, &s); として呼び出すとh=1, m=2, s=5となる
(1時間2分5秒は3725秒)

(解説)
main関数側で各関数を用意し、計算する関数を呼び出す。
結果の表示は関数の呼び出しが終わった後、main関数側で行えばよい。
秒→時間、分、秒の計算は単純に割り算の商と余りを用いればよい。
[3] 環境
 [3.1] OS: VineLinux
 [3.2] コンパイラ名とバージョン: GNOME gcc
 [3.3] 言語: C言語
[4] 期限:6/25 PM:2時

553:デフォルトの名無しさん
08/06/24 01:39:25
>>545
1 2 3
4 5 6
7 8 -
という状態なら123456780という数字を覚えておくとか。
3 4 2
1 7 -
8 5 6
という状態なら342170856という数字
こういうのをソートされた線形リストにいれておけばまあ悪くないのでは?

554:デフォルトの名無しさん
08/06/24 01:42:38
>>552
URLリンク(kansai2channeler.hp.infoseek.co.jp)

555:デフォルトの名無しさん
08/06/24 01:46:55
>>545

[1]回答レベル:ヒント
[2]コード:なし
[3]環境:省略
[4]コメント:
つ9進数

556:デフォルトの名無しさん
08/06/24 01:49:16
>>554
本当に回答がお早いです。自分もそれくらいになりたいですorz
なにはともあれ、ありがとうございます。
本当に助かりました。

557:553
08/06/24 02:01:26
>>553
線形リストじゃ手が長くなった場合の探索コストが大きいかな。メモリも食うし。
静的に9^9Byte≒370MB確保しておくのもなんだかアレだしなんか良い案あるかしら

558:デフォルトの名無しさん
08/06/24 02:04:30
[1] 授業単元: C言語演習Ⅱ
[2] 問題文(含コード&リンク):
n個の文字列C0, C1, C2, ... ,Cn-1を読み込んだ後、C0, C1, C2, ... ,Cn-1を
アルファベット順に並び替える関数を作成し、main関数でこの関数を呼び出すようにせよ。
ここでいうアルファベット順とは、例えば"Report Ha Dase"と入力すると、
" aaDeeHoprRst"のように大文字と小文字がある場合は小文字が先にくるように
アルファベットの並べ替えを行なう。
(ヒント)
文字列を読み込んで、アスキーコード順に並び替えを行なう。
ただし、大文字と小文字が混在するので、そこは各自テクニックが必要。
なお、入力文字列中の「空白」は並び替え後、先頭にくる。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限:2008.6.24 午後6時までの急ぎでお願いします。m(_ _)m

559:デフォルトの名無しさん
08/06/24 04:14:08
>>558
空白、アルファベット以外は出現順
#include <stdio.h>
#include <string.h>

void alphabetsort(char *dst, const char *src)
{
int count[256] = {0}, idx, i;
char *p, label[256] = " aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
idx = strlen(label);
for( ; *src != '\0'; src++){
p = strchr(label, *src);
if(p) count[p - label]++;
else{ label[idx] = *src; count[idx] = 1; idx++; }
}
for(i = 0; i < 256; i++) while(count[i]-- > 0){ *dst = label[i]; dst++; }
*dst = '\0';
}

int main(void)
{
char buf[100], dst[100], *p;
fgets(buf, sizeof(buf), stdin);
p = strchr(buf, '\n');
if(p) *p = '\0';
alphabetsort(dst, buf);
printf("%s\n", dst);
return 0;
}

560:デフォルトの名無しさん
08/06/24 04:15:24
>>558
URLリンク(kansai2channeler.hp.infoseek.co.jp)

561:デフォルトの名無しさん
08/06/24 04:30:18
>>559
>>560
両方、ありがとうございます。
どちらもせっかく作ってもらったので、両方使いたいところですが
今回は>>560さんのコードを使わせていただきます。
コード中の説明やコードの作りが分かりやすかったので

>>559さんのコードもアスキーコード使用が基本的で良かったのですが、
文字列の並び替え部分が若干難しかったので、今回はごめんなさい。

562:デフォルトの名無しさん
08/06/24 05:40:13
文字列を並び替える関数であって、並び替えた文字列を表示する関数じゃないと思うんだが。

563:デフォルトの名無しさん
08/06/24 05:43:49
それなら、順番に表示する部分を配列に格納すりゃ良い

564:デフォルトの名無しさん
08/06/24 05:49:39
n個の文字列って指定からガン無視してるソースに突っ込むなんてw

565:デフォルトの名無しさん
08/06/24 05:58:18
でたよ、ソースを書きもせず、自分のアイデアも提示せずに
批判しかしない基地外。

566:デフォルトの名無しさん
08/06/24 05:59:34
>>561 本人?が良しとした時点で後からいちゃもんつけてもなぁ・・・
後は本人が出来るなら、適当にやるだろうし。

567:デフォルトの名無しさん
08/06/24 06:11:23
並び替えならバブルソートだ!
void swap(char *a, char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}
void sort(char *str)
{
int i, j, len = strlen(str);

for(i=len-1; i>0; i--) {
for(j=0; j<i; j++) {
if(tolower(str[j]) > tolower(str[j+1])) swap(str + j, str + j + 1);
else if(tolower(str[j])==tolower(str[j+1])) {
if(isupper(str[j]) && islower(str[j+1])) swap(str + j, str + j + 1);
}
}
}


568:デフォルトの名無しさん
08/06/24 06:13:02
ソースを書かずに口出しする奴の方がどうかとw

569:デフォルトの名無しさん
08/06/24 06:14:08
>>561
>>567のコードを使ったら、>>559,>>560両方から殴られることを
覚悟したほうがいい。w

570:質問者のマナー遵守のお願い
08/06/24 06:40:52
宿題を片付けるという趣旨とは言えども、回答テンプレに沿っていない
すなわち、コードの品質に対する明示が無かったり、コメントが一切
無くコードそのものやコードへのリンクだけの場合は、参考に留める
だけに留め、あくまでも独力でトライすることをおすすめします。
多くのコードは良心的で真面目ですが、中には>>438のような悪辣
なコードもありますので、参考以上の扱いをすると災難に合う場合も
あります。

なお、小さなプログラムコードの場合、簡単にその優劣は判断出来ま
せん。コードは数学の問題と異なり、一度解いてしまえばおしまい
というわけではなく、何度も実行されて書き直されて真価が評価され
るものです。
宿題を自力で解けないレベルの人がその優劣の判断を出来ると
は到底思えません。
複数の回答が出た場合でも、それに優劣を付けていると取られかね
ない言動を取ることは質問者は絶対に避けて下さい。

571:デフォルトの名無しさん
08/06/24 06:44:23
自分のソースにミスがあった場合、ソース書かなくても突っ込んでくれると有難いがな。

572:デフォルトの名無しさん
08/06/24 08:56:20
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
              ヒント:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler
 [3.3] 言語:C言語
[4] 期限:水曜まで
[5] その他の制限:ポインタまで習いました

ヒントをくれました。それでもわからないのでよろしくお願いします

573:デフォルトの名無しさん
08/06/24 09:41:26
[1] 授業単元:プログラミング

[2] 問題文 
   3×3の行列の掛け算を行う関数を作り、標準入力から入力した行列を掛け算するプログラムを書け
       (ヒント 2重配列が必要。 double matrix[3][3];を使用)

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月26日まで
[5] その他の制限:
 おねがいします><

574:491
08/06/24 10:00:41
自己解決しますた

いないかもしれないけど、協力して下さった方々 どうもです

575:456
08/06/24 10:54:36
>>486
わかりやすい回答ありがとうございます!
次からは自分でもできるよう参考してがんばります。

576:デフォルトの名無しさん
08/06/24 12:08:56
>>573 環境: 2005 Express + SDK
#include <stdio.h>
int main() {
int i, j, k;
double matrix1[3][3], matrix2[3][3],matrix3[3][3];
for(i=0;i<3;i++) {
printf("INPUT 3 numbers. (%d of 3):", (i%3)+1 );
scanf("%lf%lf%lf", &(matrix1[i][0]), &(matrix1[i][1]), &(matrix1[i][2]));
}
for(i=0;i<3;i++) {
printf("INPUT 3 numbers. (%d of 3):", (i%3)+1 );
scanf("%lf%lf%lf", &matrix2[i][0], &matrix2[i][1], &matrix2[i][2]);
}

for(i=0;i<3;i++)
printf("%lf\t%lf\t%lf\n", matrix1[i][0], matrix1[i][1], matrix1[i][2]);
putchar('\n');
for(i=0;i<3;i++)
printf("%lf\t%lf\t%lf\n", matrix2[i][0], matrix2[i][1], matrix2[i][2]);
puts("");
// A(i,k) * B(k,j) = C(i,j)
for(i=0;i<3;i++)
for(j=0;j<3;j++) {
matrix3[i][j] = 0.0f;
for(k=0;k<3;k++)
matrix3[i][j] += matrix1[i][k] * matrix2[k][j];
}
for(i=0;i<3;i++)
printf("%lf\t%lf\t%lf\n", matrix3[i][0], matrix3[i][1], matrix3[i][2]);
}

577:デフォルトの名無しさん
08/06/24 12:16:06
>>408
いろいろ試してみたが、AMDのプロセッサ(AthlonX2)はL1 Data
Cacheが2Way-Set AssosiativeのためにCore 2 Duoのような
8Way-Set Assosiativeのマシンに特定の場面で大幅に負ける事がある。

データ・テーブルも今回は2個だがこれが10個~20個と増えてくると
AMDとIntelではあまり差がなくなってくるだろう。

578:デフォルトの名無しさん
08/06/24 12:41:06
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Win
 [3.2] コンパイラ名とバージョン:Borland C++Compiler
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限:特になし

お願いします!

579:デフォルトの名無しさん
08/06/24 13:12:49
>>578
#include <stdio.h>

float interest(float r, int n)
{
float ret = 1.0;
int i;

for(i=0; i<n; i++) ret *= (1 + r / 100);

return ret;
}

int main(void)
{
float r;
int y, n;

printf("利率(r):");
scanf("%f", &r);
printf("金額(y):");
scanf("%d", &y);
printf("期間(n):");
scanf("%d", &n);

printf("返済金額は%d円です", (int)(y * interest(r, n)));

return 0;
}

580:デフォルトの名無しさん
08/06/24 13:16:30
>>577
ちょっとスレ違いになるかも知れないが、何故L1Chacheの構造が
原因であると断定できるのか教えて欲しいと思います。

581:デフォルトの名無しさん
08/06/24 13:17:30
1] 授業単元:
[2] 問題文(含コード&リンク):
次々に入力される値を合計する処理である。
変数dtにデータを入力する処理を繰り返し行い、
入力終了後その合計sumと平均aveを出力する。
なお、入力データは正の整数とし、
入力するデータがなくなったら、
終わりの印として負の値を入力する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限:
[5] その他の制限:

582:デフォルトの名無しさん
08/06/24 13:18:58
1] 授業単元:
[2] 問題文(含コード&リンク):
次の説明を読んで、プログラムを作成しなさい。

小数で入力される気温のデータを5℃単位の整数に丸めたい。
キーボードからdouble型変数kに気温を入力し、
丸めた数値はint型変数gに求め、gを画面に出力する。

ただし入力データに負の気温はないものとする。

また必要なら、
計算途中の中間結果を格納するint型変数wなど、
適宜変数を用意すること。

【実行例】
温度を入力 22.4
約20度です

温度を入力 22.5
約25度です

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限:
[5] その他の制限:なし
2問ありますが、よろしくお願いします

583:デフォルトの名無しさん
08/06/24 13:46:07
>>581
#include <iostream>

int main()
{
int dt, i = 0, sum = 0, ave;

while(1) {
std::cin >> dt;
if(dt<0) break;
sum += dt;
i++;
}

if(i!=0) {
ave = sum / i;
std::cout << "合計:" << sum << "平均:" << ave << std::endl;
}
}

584:デフォルトの名無しさん
08/06/24 13:54:48
>>582
#include <iostream>

int main()
{
int g, w;
double k;

std::cout << "温度を入力";
std::cin >> k;

for(g=0; g<k; g+=5);
if(g - k > 2.5) g -= 5;

std::cout << "約" << g << "度です" << std::endl;
}

585:デフォルトの名無しさん
08/06/24 14:27:16
>>581
[1]コード品質:未チェック
[2]コード:直接記入
#include <stdio.h>
#include <stdlib.h>
int main(void){
int sum,count=0,current;
char s[32],*ss;
do{
if (ss==fgets(s,32,stdin)) continue;
while(*ss){ if( (*ss=13)||(*ss=10) )*ss=0;ss++;}
if(( current=atoi(s) )<0)continue;
count++;sum+=sum+current;
printf("%6d:value=%6d sum=%6d average=%lf¥n",count,current,sum,
(double)sum/(double)count);
}while(0);
retrun(0);
}
[3] 環境:Linux/Gcc/C++
[4]コメント:上記コードはC++でもコンパイルできる筈です。
C++はCのほぼスーパーセットです。ループの中で、stdinから文字列
を読み込み、atoi関数で整数に変換しています。平均の計算はdoubleで
行っています。駄コードですがご参考にどうぞ。

586:デフォルトの名無しさん
08/06/24 14:35:16
駄コードってレベルじゃねーぞ

587:デフォルトの名無しさん
08/06/24 14:48:46
>>585みたいな明らかにおかしい、見てるだけで頭が痛くなるようなコードにも
ソースを書かなきゃ文句言っちゃいかんのか?

588:デフォルトの名無しさん
08/06/24 14:53:10
チラシの裏にでも書いてろ

589:デフォルトの名無しさん
08/06/24 15:25:15
>>541
できました!ありがとうございます。
ところで、資料に書いてあったようにbitree.hを作ってインクルードする意味ってなんなんでしょうか?
また、bitree.hを作る場合は、bitree.hに一応
int main(int args, char **argv);
BITREE_TYPE sumValue(BITREE_NODE *p);

なども書き加えておいたほうがよいのでしょうか?意味はない気がしますが・・

590:デフォルトの名無しさん
08/06/24 16:18:17
かなり考えましたが、綺麗な形の木じゃない場合の計算がわからなかったのでお願いします。
[1] 授業単元:プログラミング
[2]問題リンク:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3]期限:2008年6月27日

591:デフォルトの名無しさん
08/06/24 16:19:08
このスレをいろんな大学に通報すればいいんですねわかります

592:デフォルトの名無しさん
08/06/24 16:53:51
通報なんかしなくてもこんな所で丸投げする奴はどうせ卒業できん

593:デフォルトの名無しさん
08/06/24 17:28:14
>>585 点○虫か。コード品質なんて項目要らない。
>>581
#include <stdio.h>
#include <stdlib.h>

int main(void){
// int sum, count=0, current;
  int sum=0, count=0, current;
  char s[32], *ss;
  do{
//   if (ss == fgets(s, 32, stdin))
    if (!(ss = fgets(s, 32, stdin)))
      continue;
    while(*ss){
//     if( (*ss=13) || (*ss=10) )
      if( (*ss==13) || (*ss==10) )
        *ss = 0;
      ss++;
    }
    if(( current = atoi(s) ) < 0)
      continue;
    count++;
//   sum += sum + current;
    sum += current;
    printf("%6d:value=%6d sum=%6d average=%lf\n",
      count, current, sum, (double)sum/(double)count);
// }while(0);
  }while(current >= 0);
// retrun(0);
  return(0);
}

594:お願いします
08/06/24 19:20:36
C++言語を使ってスタックを実現するクラスを定義し,その実行を確認するプログラム(main関数)を書く.

クラス名はstackとする.

要素のデータの型はintとする.
格納できる要素の最大数は10とする.
公開されているインターフェースは下記のものとする.

void push(int data);
int pop();

初期設定は,以下のいずれかにより行う.
(1) クラスのコンストラクタ(constructor)の機能を用いる.
(2) 初期設定用のインターフェース(init)を定義し,スタックを使用する前に,initを呼び出す.

機能確認のためのインターフェース(たとえばスタック内のデータを表示させる)を追加してもよい.

上記の仕様を満たさない(インターフェース名が上記と一致しない等)プログラムは対象としない.


595:デフォルトの名無しさん
08/06/24 19:50:28
#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<int> stack;
stack.push(1);
stack.push(2);
cout << stack.pop() << endl;
cout << stack.pop() << endl;
}

じゃ駄目ですか(><;

596:デフォルトの名無しさん
08/06/24 19:53:19
>>594
#include<iostream>
#include<vector>
class stack{
public:
void push(int data){ if(m_data.size()<m_datanummax) m_data.push_back(data); }
int pop(){
int ret=-1;
if(m_data.size()>0){
ret=m_data[m_data.size()-1];
m_data.pop_back();
}
return ret;
}
void display(){ for(unsigned i=0;i<m_data.size();i++) std::cout << m_data[i] << std::endl; }
stack(){m_datanummax=10;}
stack(int datanummax):m_datanummax(datanummax){};
private:
std::vector<int> m_data;
unsigned m_datanummax;
};
int main(void){
stack a, b(5);
for(int i=0;i<20;i++){
a.push(i);
b.push(i);
}
a.display();
std::cout<<"-----"<<std::endl;
b.display();
return 0;
}

597:デフォルトの名無しさん
08/06/24 20:02:32
添削屋が虫作ってどーすんだよw

598:デフォルトの名無しさん
08/06/24 21:23:54
麻呂のクソースはいらんかえぇ~

599:デフォルトの名無しさん
08/06/24 21:32:00
>>589
main関数はヘッダで宣言したらダメ
sumValue関数はヘッダで宣言してもいい
bitree.hを作ってincludeさせてるのは勉強のためじゃない?
main関数と同じファイルに関数を定義してるなら普通はわざわざ宣言部をヘッダに分けない
main関数以外をbitree.cとかいうファイルにでも定義するならbitree.hを作る必要がある
分割コンパイルについて知りたいなら、ググるか他のC言語質問スレに質問しましょう

600:デフォルトの名無しさん
08/06/24 21:40:24
>>590
完全2分木って書いてあるけど、綺麗な形の木じゃない場合ってことは
完全2分木ではない場合を考えろってこと?

601:デフォルトの名無しさん
08/06/24 21:40:44
>>599
わかりました、ありがとうございました!

602:デフォルトの名無しさん
08/06/24 22:06:29
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:XP
 [3.3] 言語: C++
[4] 期限: 08年06月30日
[5] その他の制限:もしやっていただけるなら出来るだけ簡単に、分かりやすく(初心者でも理解できる構成)


603:デフォルトの名無しさん
08/06/24 22:10:31
問1
A : [] B : 0 C : * D : * E : * F : 0 G : vc


604:デフォルトの名無しさん
08/06/24 22:21:00
>>603
エスパーいないなー

605:デフォルトの名無しさん
08/06/24 22:21:45
問3
A : d B : d C : s

606:デフォルトの名無しさん
08/06/24 22:50:35
1

607:デフォルトの名無しさん
08/06/24 22:53:53
[1] 授業単元:Cプログラミング
[2] 問題文(リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2008年06月25日いっぱい

608:デフォルトの名無しさん
08/06/24 23:03:35
[1] 授業単元:数学演習3
[2] 問題文(含コード&リンク):
3a-2b+ - d= 7
. 2b+2c+ d= 5
.a-2b-3c-2d=-1
. b+2c+ d= 6
上の行列をピポット選択を使い前進消去法で解くプログラムを作る。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VisualStudio2005
 [3.3] 言語:C
[4] 期限:2008年06月25日07:00まで
[5] その他の制限:特に制限はありません
以下が作っては見たもののアルゴリズムエラーでどこが悪いのかもわからない自作プログラム。
URLリンク(nijibox.ohflip.com)

609:608 ◆k4INPBPZ3E
08/06/24 23:04:30
トリップ忘れてた

610:デフォルトの名無しさん
08/06/24 23:11:40
1] 授業単元:基礎プログラミング
[2] 問題文
(1)標準入力からint 型引数に文字コード (ASCII) を読み込むと, その文字が小文字 (a~z) であれば大文字のコードを返し
   そうでないならば受け取ったコードをそのまま返す関数を設計し, その関数を利用するプログラムを作成しなさい
(2)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列の逆順に 並べか替えた文字列を表示し
   何も返さない関数を設計し, その関数を利用するプログラムを作成しなさい.
(3)char 型の配列の名前を2つ引数 P, R に受け取ると, P に記憶されている文字列を逆順に並べか替えた文字列を R に記憶して
   何も返さない関数を設計し, その関数を利用するプログラムを作成しなさい.
(4)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列が回文ならば 1 を, そうでなければ 0 を返す関数を設計し
   その関数を利用するプログラムを作成しなさい. ただし,前問の関数を利用すること.
(5)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列が回文ならば 1 を, そうでなければ 0 を返す関数を設計し
   その関数を利用するプログラムを作成しなさい. ただし,前々問の関数を利用せず, 直接,文字列中の文字を先頭と末尾から比較する方針を用いること.
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン:(cygwin)
 [3.3] 言語:C
[4] 期限:(明日の15時まで)
[5] その他の制限:

611:デフォルトの名無しさん
08/06/24 23:12:48
>>607
#include <stdio.h>
int main(void)
{
int i, j, sum;

for(i=1, sum=0; i<=100; i++) sum += i;
printf("1から100までの整数の和は%d\n", sum);

for(i=1, sum=0; i<=100; i+=2) sum += i;
printf("1から100までの奇数の和は%d\n", sum);

for(i=1; i<=20; i++) {
if(i<10) for(j=0; j<i; j++) putchar(' ');
else for(j=20; j>i; j--) putchar(' ');
printf("%d\n", i);
}

return 0;
}

612:607
08/06/24 23:26:48
>>611
ありがとうございます

613:デフォルトの名無しさん
08/06/24 23:34:49
2進数変換の問題を出されました。。。基本的な部分は作ってみたのですが、完璧にできません…小数変換の工程などは手ではできるのですが…
どなたかご助力宜しくお願いします。


[1] 授業単元:実験
[2] 問題文(含コード&リンク):
10進数を2進数に変換するプログラムを作成せよ。
その際、入力する10進数が小数点ありの数値(例:2.56)でも変換可能なものとする。

[3] 環境
 [3.1] OS:XP
 [3.3] 言語: C
[4] 期限: 08年06月27日
[5] その他の制限:
基本的に習ったことの利用がメインなので、特殊な関数などは使えません。原始的なアルゴリズムでないとだめなようです。
もちろん、構造体、配列、ポインタなどの基本は習いました。



614:デフォルトの名無しさん
08/06/24 23:35:34
作ってみたプログラムです。(また、どうしてもMSBに0が羅列してしまって…変換した数値のみを表示させたいのですが…。つまり、000000000000000000010110とかではなく10110と。)

#include <stdio.h>
const int BitSize = sizeof(int) * 8; // 整数型のビットサイズを算出
void dtob(int x) {
int bit = 1,
i;
char c[BitSize];

for (i = 0; i < BitSize; i++) {
if (x & bit)
c[i] = '1';
else
c[i] = '0';
bit <<= 1;
} // 計算結果の表示
printf("2進数: ");
for ( i = BitSize - 1; i >= 0; i-- ) {
putchar(c[i]);
}
printf("\n");
}

int main(){
int x = 0;
do {
printf("10進数を2進数に変換します(0で終了)\n");
printf("xの値: ");
scanf("%d", &x);
dtob(x);
} while (x != 0);
return 0;}

615:デフォルトの名無しさん
08/06/24 23:36:38
あ、すみません、

>613 = >614

です。

616:デフォルトの名無しさん
08/06/24 23:44:06
for(i=BitSize-1; c[i]=='0'; i--); //最初に1が出るまでスルー
for( ; i>=0; i--) putchar(c[i]);  //後は普通に表示

617:デフォルトの名無しさん
08/06/24 23:55:50
>616

レスありがとうございます!
なるほど~ちょっと改良してみます。

あとは小数点が問題ですね。。。
やっぱりとりあえず、整数部分と小数点以下をわけてスキャンしなきゃだめですよね

618:デフォルトの名無しさん
08/06/25 00:01:46
>>604
ん?>>603間違えてる?

619:デフォルトの名無しさん
08/06/25 00:05:49
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
登録番号(int no)と名前(char *name)と年齢(int age)を含む構造体person型のポインタ変数を宣言し、登録人数分だけの動的メモリ確保をせよ。そして、データをファイルから入力せよ。
ファイルの形式は、先頭に登録する人数とし、そのあとに人数分のデータを登録番号、名前、年齢の順に書いていく(下の例を参照。登録番号は入力順に1,2,3,4,5,・・・とする。そして、入力した全員データを表示せよ。)

(ファイルの例)
3
1 田中 20
2 太田 40
3 井上 35

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VisualStudio2005
 [3.3] 言語:C
[4] 期限: できるだけ早くお願いします。
[5]問題文でわかりにくいところがありましたら、聞いてください。

620:デフォルトの名無しさん
08/06/25 00:14:27
>>614
んー?その課題ってそういう解き方を期待してるのかな。
それでもいいんだけど、初歩的な段階ということを考慮すると
整数部なら2で割ったあまりをせっせと詰めていくように思えた。
小数部は2倍したものの整数部を詰める、みたいな。

その段階でビット演算でできるという発想をしたなら優秀な
生徒さん(もしくは経験者)なんだなあって思う。
// 皮肉じゃないです。念のため

621:デフォルトの名無しさん
08/06/25 00:20:03
何を習ったのかお前知ってるのかよw

622:デフォルトの名無しさん
08/06/25 00:25:57
[1] 授業単元:基礎プログラミング
[2] 問題文
キーボードから2つの自然数を入力し、入力した値が10以下で2の倍数なら足し算
それ以外はかけ算させた結果を表示させるプログラムを作成せよ。
但し、if文を用いて自然数以外を入力したらエラー文を表示させる。
[3] 環境
 [3.1] OS: Windows/linux
 [3.2] コンパイラ名とバージョン:VC++ 6.0/gcc
 [3.3] 言語: C
[4] 期限:6/27
[5] その他の制限:入力はscanf、出力はprintf stdio.h
よろしくお願いしますorz


623:デフォルトの名無しさん
08/06/25 00:26:37
>>621
あーもーそういう煽りが欲しいわけじゃなくてな。
関数、ポインタ習いました。とか原始的なアルゴリズムで、とか前置きしなきゃならない段階でしょ?
その段階でビット演算を直感的に理解できる子は少ないでしょ。
わかんないかなー。

学生の頃周りがどうだったか、自分がどうだったか思い出しなよ。
学校では習ってません独学です、ならビット演算をスムーズに理解できたのはいつのことだった?

624:デフォルトの名無しさん
08/06/25 00:29:33
>基本的に習ったことの利用がメイン
って書いてあるのに、ビット演算を習ってないと思うほうがおかしいだろ。

625:デフォルトの名無しさん
08/06/25 00:37:27
ってか>>613にアドバイスしたらどうなん?

>>622
URLリンク(kansai2channeler.hp.infoseek.co.jp)

626:デフォルトの名無しさん
08/06/25 00:38:02
>623 >624 さん方

お二人ともすみません(汗)

自分の書き方がまぎらわしかったです・・・
ビット演算は習っていません。

柴田先生の本を読みまして、
内部表現とビット などの説明あたりを読んでいるときに
先生が以前ビット演算でやればサマートなんだけどな・・・ブツブツと
ボソっといってたのを思い出して、
それから少し自分で勉強してみました。

ですが、挫折しかけてこのサイトに、、です。(汗)

というか途中で疑問に思ったのですが、なんでC言語には2進数で表示する機能がないのでしょうか・・・?



627:デフォルトの名無しさん
08/06/25 00:40:40
>>623
相手するだけ無駄
>>624
宿題解いてもらえなくて涙目なんですよね、わかります。
催促していいよw

628:613
08/06/25 00:41:18
あ、ちなみに
原始的なアルゴリズム とはありますが、
たぶんビット演算くらいはOKかと思います。

先生は期待してはいないと思いますが…。

その、手計算でやるときのアルゴリズムと
まったくそのままのほうが、わかりやすいのだとは思うのですが、
違う方向性でやりはじめてしまったので…。

最終的にダメそうなら、ホントに原始的な方向でいくつもりですが。

629:デフォルトの名無しさん
08/06/25 00:51:30
[1] 授業単元:プログラミング実験
[2] 問題文(含コード&リンク):
2題あります。
片方でも構いません。
上については、ソースに記載されてるpartitionって関数を使って、再帰でクイックソートです。
下については、ソースに記載されているmergeって関数を使って、再帰でマージソートです。
それぞれ、作成する部分にコメントがあるので、大体それと同じ行数でできるらしいです。
でも長くなっても構いません。
ifとforかwhileでできるみたいなことも言ってました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: CPad for Borland C++Compiler Version 2.31
 [3.3] 言語:C
[4] 期限: 2008年6月25日17:00まで できるだけ早く完成させたいです。提出は明日の夕方です。
[5] その他の制限: ポインタは使わない感じで授業やってます。再帰必須です。あとは上に書いた通りです。

よろしくお願いします。

630:608 ◆k4INPBPZ3E
08/06/25 01:03:52
ヘルプ!ヘールプ!!!

631:デフォルトの名無しさん
08/06/25 01:06:35
>>629
void quicksort(int left, int right)
{
int i=0;

if(left >= right) return;

i = partition(left, right);

quicksort(left, i-1);
quicksort(i+1, right);
}

void mergesort(int l, int r)
{
int m;

if(l>=r) return;

m = (l + r) / 2;

mergesort(l, m);
mergesort(m+1, r);

merge(l, m, r);
}

632:デフォルトの名無しさん
08/06/25 01:11:17
>>628
>>316


633:デフォルトの名無しさん
08/06/25 01:20:45
>>631
あなたが神か
ありがとうございます!
超絶感謝!!!

634:デフォルトの名無しさん
08/06/25 01:20:49
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
(1)1つの整数を2進数に変換表示する関数convert(a)を作成せよ。そして、キーボードより任意の正の整数を入力し、
その整数の2進数が表示されるプログラムを作れ。

(2)1つの正の整数を素因数分解し表示する関数bunkai(a)を作成せよ。そして、キーボードから任意の正の整数を入力し、
その整数の素因数分解を表示するプログラムを作れ。
------表示例------
整数を入力: 50
50=2x25
25=5x5
5=5
5*5*2

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限:関数についての演習です。実は(1)に関しては十分な実行結果は得られました。
蛇足があれば指摘していただきたいです。

635:デフォルトの名無しさん
08/06/25 01:21:56
(1)の作成したプログラムです。(2)の参考になればよいのですが。
#include <stdio.h>
void convert(int n)
{
if(n>1)
convert(n/2);
if(n==1)
printf("1");
else
printf("%d",n%2);
}

void main()
{
int n;
printf("10進数を入力してください:");
scanf("%d",&n);
printf("2進数に変換すると\n");
convert(n);
}

636:デフォルトの名無しさん
08/06/25 01:45:23
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
アスキーコードにより文字操作を行い、暗号化された文字列を解読するプログラム
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cyagwin gcc
 [3.3] 言語: C
[4] 期限: 6/26 午後3時まで

暗号文(アスキーコードをずらしただけ)を解読するプログラムを作成する課題です。
よく見る課題ですが、プログラム仕様が特殊で過去ログに該当するものがなかったので
どなたかお願いします。

637:デフォルトの名無しさん
08/06/25 01:54:37
>>628
手作業で小数を2進数に変換することができることに加え、浮動小数点のビット列が
どのように構成されてるかを理解する必要があるよ
それでもビット演算しますか?(y/n)

638:デフォルトの名無しさん
08/06/25 02:12:06
前回教えてくださったありがとうございます!!

以下のようなプログラミングはどのようにすればよいのでしょうか?

「組み合わせ」を求める数学の公式にコンビネーションがあります。このコンビネーションのプログラミングを教えてください!

nとrをscanf()で読み、nCrの値を計算して表示させます。
条件として、nとrの値はマイナスでなく、またゼロでなく、さらにここではn<=10であることを確認させて、正しい数値を入力させる。もし誤った数値を入力したら「入力ミスです」と表示させる。

0!=1も扱えるようにすることを忘れない。

これもよろしくお願いします

639:613
08/06/25 02:12:31
>637
はい…そこなんですよ…。
それが頭いっぱいになって、ここにたどり着きました。。。

1年間アセンブリ言語をやっていたことがあって、
そのとき浮動小数点に苦労しました。。。

でも原始的なアルゴリズムよりもスマートに、短くできるんだったら
大変興味があります。なのでとりあえずやりたいと考えます。

640:613
08/06/25 02:23:50
ちなみに
丸め誤差については特にいわれてないのですが、
4ビット程度表示できればいいかなぁと考えています。

641:デフォルトの名無しさん
08/06/25 02:24:42
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: WindowsXP SP2
 [3.2] コンパイラ名とバージョン: visual Studio NEt2003
 [3.3] 言語: C/C++/どちらでも可
[4] 期限:今週土曜まで
[5] その他の制限: 大域変数(グローバル変数)を使う。
今あるプログラムを改善した形で書き換えてくれるとありがたい。
(プログラムの授業ではなく数値解析なので変な形にはなっていると思うが
なるべくこのような形にしてもらいたい。)自分が理解しやすいのもあるが


642:デフォルトの名無しさん
08/06/25 02:32:20
前スレの人?

643:デフォルトの名無しさん
08/06/25 02:36:55
>>641
yを求めた時のiの値とxn[i],xn[i+1]とxの関係を考えてみろ。
っていうか前スレのヤツならなんできちんと写さない?

644:613
08/06/25 02:37:40
>642

え、自分でしょうか??

自分はこのスレ、はじめてです。(検索で見つけました)

645:デフォルトの名無しさん
08/06/25 02:38:14
いや641のこと。

646:613
08/06/25 02:38:42
あ、すみません m()m

647:デフォルトの名無しさん
08/06/25 02:41:48
東京高価万歳
凄いぞ東京高価

648:デフォルトの名無しさん
08/06/25 03:28:21
>>611
(・∀・)ニヤニヤ

649:デフォルトの名無しさん
08/06/25 03:32:55
ニヤニヤするぐらいならどこがおかしいか指摘ぐらいしたら?

650:デフォルトの名無しさん
08/06/25 03:38:15
おかしくなんかないよ、ただ、おそらく等差数列の差を使うとか
一番最後は工夫すりゃif else 不要

651:デフォルトの名無しさん
08/06/25 03:41:48
ループの中にムダな分岐つっこんで効率と可読性下げるより、あのままで十分だと思うけど。

652:デフォルトの名無しさん
08/06/25 04:12:17
>>619 お願いします。

653:デフォルトの名無しさん
08/06/25 05:17:34
>>650
これでいいですか><?
for(i=1;i<=20;i++)
    printf("%*s%d\n",i<=10?i:20-i,"",i);

654:590
08/06/25 06:42:59
>>600
えっと・・・完全2分木っていうのは葉以外の全てのノードが枝を2つ持っている事が必要十分条件ではないのですか?
それならば一部のパスだけが長いという場合も考えられますよね。
それとも左右対称の三角形みたいな形の木になることを意味しているんでしょうか。

655:デフォルトの名無しさん
08/06/25 06:49:09
完全二分木は、「すべての葉の深さが等しい二分木」という定義が普通だと思う

656:デフォルトの名無しさん
08/06/25 06:51:23
AVL木とか赤黒木なら回転を伴うが常にバランスした二分木が作れる
何も考えずに昇順に挿入したりするとリスト構造の高価なシミュレーションになる

657:デフォルトの名無しさん
08/06/25 06:54:56
あ、質問の意図を誤解してたかも
NlogNじゃねーの?

658:デフォルトの名無しさん
08/06/25 07:01:24
>親ノードから左右の
>子ノードの中身を比較することで、完全2分木中の任意のノードの探索が行えるとする
この意味が分からん
「左右の子ノードの中身を比較」ってどういうことだろう

普通の二分探索木なら簡単に解ける
完全二分木の高さをhとすると、N=2^h-1だから、h=log2(N+1)
比較回数の最大値は高さと同じだから、log2(N+1)回

659:デフォルトの名無しさん
08/06/25 08:39:21
>>619
URLリンク(kansai2channeler.hp.infoseek.co.jp)

660:デフォルトの名無しさん
08/06/25 08:45:17
>fscanf(fp, "%s", p->name);

661:デフォルトの名無しさん
08/06/25 08:55:49
#include<stdlib.h>いれろよ

662:デフォルトの名無しさん
08/06/25 10:38:17
[1] 授業単元: プロC演習
[2] 問題文(含コード&リンク):()
# 下記のようにキーボードから4桁の10進数の入力を2回受付ける.
Input the 1st value > 6479
Input the 2nd value > 1497

但し,4桁の各位の数は必ず互いに異なるものが入力されるとする.
# 入力された数値に対して,次のようにに定義する「ヒット数」と「ホームラン数」を求める.

* ホームラン数: 二つの数字を同じ位ごとに比較した場合,何ヶ所の位について一致してるかを表す.
* ヒット数: 二つの数字を異なる位同士で比較した場合,一致している組み合わせの数を表す.


1234と1234のとき,0ヒット4ホームラン
1234と4321のとき,4ヒット0ホームラン
6479と1497のとき,2ヒット1ホームラン


# ヒット数とホームラン数を下記のように表示する.
2 hit(s) 1 home run(s)
[3] 環境
 [3.1] OS: WindowsVista
 [3.2] コンパイラ名とバージョン:Cygwin gcc
 [3.3] 言語: C
[4] 期限: 6月26日正午
[5] 現時点で習ってるのは、条件分岐、繰り返し、配列、ソート、ポインタまでです。

よろしくお願いします。


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