[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/05 09:03 / Filesize : 337 KB / Number-of Response : 864
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2008/10/30(木) 07:49:39 BE:113605834-PLT(24065)]
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

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

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
【過去ログ検索】        chomework.sakura.ne.jp/
【wiki】               www23.atwiki.jp/homework/

前スレ
C/C++の宿題を片付けます 116代目
pc11.2ch.net/test/read.cgi/tech/1222813731/

331 名前:123 mailto:sage [2008/11/06(木) 16:34:15 ]
>>123をお願いできないでしょうか?

332 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:49:14 ]
>>324
なんども申し訳ありません
ありがとうございます!

333 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:58:02 ]
>>322
本当に有難う御座いました。
大変助かりました。

334 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:40:49 ]
お願いします
[1] 配列
[2]
下に示す行列の積を求めて表示するプログラムを作りなさい。
int x[2][3]={{1,2,3},{4,5,6}}
int y[3][2]={{1,5},{5,3},{8,1}}
実行結果
35 14
77 41

[3] 環境
 [3.1] XP
 [3.2] VC 6.0
 [3.3] 言語:C
[4] 期限:明日まで

335 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:59:36 ]
>>331
#include <string>
#include <iostream>
class Fish {};
class Wakana : public Fish{
protected: std::string name;
public:
Wakana() : name("ワカナ") { };
void show() { std::cout << name << std::endl; }};
class Tsubasu : public Wakana {
protected: std::string name;
public:
Tsubasu() : name("ツバス") { }
void show() { std::cout << Wakana::name << "→" << name << std::endl; }};
class Inada : public Tsubasu {
protected: std::string name;
public:
Inada() : name("イナダ") { }
void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" <<name << std::endl; };};
class Hamachi : public Inada {
protected: std::string name;
public:
Hamachi() : name("ハマチ") { };
void show() {
std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << name << std::endl;}};
class Buri : public Hamachi {
protected: std::string name;
public:
Buri() : name("ブリ") { };
void show() {std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << Hamachi::name << "→" << name << std::endl;}};
int main(){Buri().show(); return 0;}

336 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:08:41 ]
入出力関数は?

337 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:02:39 ]
題意がいまいち分からないので継承元の文字列を継ぎ足していく感じに
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7954.cpp
クラス名がinabaになっちゃった.

338 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:05:41 ]
>>334
上の方に行列の課題なかったか?
int ans[2][2] = {0};
int i, j, k;

for(i = 0; i < 2; i++)
 for(j = 0; j < 2; j++)
   for(k = 0; k < 3; k++)
    ans[i][j] += x[i][k]*y[k][j];
for(i = 0; i < 2; i++){
 for(j = 0; j < 2; j++)
  printf("%d ", ans[i][j]);
 printf("\n");
}



339 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:12:34 ]
[1] 授業単元: 配列を用いた計算
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7955.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:11月10日12:00まで
[5] その他の制限: 構造体を利用することになっています。
構造体のメンバーは
行のサイズ unsigned int
列のサイズ unsigned int
行列のデータへのポインタ double **
で構成するものとする。
と指定されています。

よろしくお願いします。



340 名前:334 mailto:sage [2008/11/06(木) 21:31:54 ]
>>338
ありがとうございます

341 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 23:13:24 ]
>>316, 317
ありがとうございます。

>>315
Maxはある程度大きく、それ程厳密な確率を求めているわけではないですので、
316さんの実装で十分です。


342 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:17:42 ]
[1] 授業単元: ポインタ配列
[2] 問題文(含コード&リンク):

#include <stdio.h>
int main(void)
{
char ??? = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
???
};
char ???p;
p = menu;
while(*p){
printf("???\n",???);
}

上記の???の場所を適切に埋め、動作を確認する。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C++
[4] 期限: [2008年11月07日10:00まで]
[5] その他の制限:

よろしくお願いします。

343 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:34:56 ]
#include <stdio.h>
int main(void)
{
char *menu[] = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
NULL,
};
char **p;
p = menu;
while(*p){
printf("%s\n", *(p++));
}
return 0;
}

344 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:37:17 ]
>>343
動作確認しました。
ありがとうございます!
助かりました。

345 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:05:48 ]
[1] 授業単元: C
[2] 問題文:
(1)自然数nの正の約数が6個あり(1及びn自身を含めて)
それらの総数の和が532である時のnの値を求めるプログラム。
(2)
nを2桁の偶数としn^2の下2桁がnと同じ時、nの値を求めるプログラム。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [11月7日8:00まで]
[5] その他の制限: 特になし

(2)については答えが76と分かっているのですが
(1)についてはさっぱりなんです…

346 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:55:20 ]
>>345 (1)
#include<stdio.h>
int main()
{
int n, c, a, s;
for (n = 1; ; n ++)
{
c = s = 0;
for (a = 1; a <= n; a ++)
{
if (n % a == 0)
{
c ++;
s += a;
}
}
if (c == 6 && s == 532)
{
printf("%d\n", n);
break;
}
}
return 0;
}

347 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:55:57 ]
>>345
すごい力まかせ、最適化の余地あり

void main(){

int count ;
int buff[6] ;

for ( int i = 1 ; i < 532 ; i++ ){
count = 0 ;
for ( int j= 1 ; j <= i ; j++ ){
if(i%j==0){
buff[count] = j ;
count++ ;
if ( count >= 6 ){
break ;
}
}
}
if ( count == 6 && buff[5]==i){
if( buff[0] + buff[1] + buff[2] + buff[3] + buff[4] + buff[5] == 532 ){
printf ( "%d\n", i ) ;
break ;
}
}
}
}

348 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 02:07:12 ]
(2)
#include <stdio.h>

int main(void)
{
int n, tmp;

for(n=10; n<100; n+=2){
if(n == n*n%100)
break;
}

printf("%d\n", n);

return 0;
}

349 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:36:24 ]
>>339
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7956.c
動作確認はあまりしてない。とりあえず動く程度。分割コンパイルは適当に。



350 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:51:50 ]
>>339
同じ学校だね。


351 名前:デフォルトの名無しさん [2008/11/07(金) 06:11:38 ]
突然すみません。getsで何も入力しなかった場合に特定の処理をしたいのですが、
下のif(a==NULL)が動作しないです。どう書けばいいか教えて下さい。
int main(){
char a[256];
gets(a);
if(a==NULL){
printf("何か入力して下さい");
}
puts(a);
}
宜しくお願いします。

352 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 06:41:13 ]
a[0]=='\0'

353 名前:351 [2008/11/07(金) 06:57:08 ]
>>352
ありがとうございました。

354 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 07:17:14 ]
[1] 授業単元: C++
[2] 問題文(含コード&リンク): 上下の画面外から敵を2つ出現させて、中央へ移動。左斜め上、右斜め下へそれぞれ移動し、矢印の方向へ一周回る。
一周回ったら再び、中央へ移動する。こんな感じの動きですwww.dotup.org/uploda/www.dotup.org18140.bmp.html
敵を表示させるところまでいったのですが、どうかお願いします。www.dotup.org/uploda/www.dotup.org18139.zip.html
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC2005又はVC2008
 [3.3] 言語: C++
[4] 期限: 2008年11月8日18:00まで
[5] その他の制限: 構造体でお願いします。説明不足な点など、何かあれば言って下さい。

355 名前:241 mailto:sage [2008/11/07(金) 08:35:49 ]
どなたか>>241を御願いできないでしょうか?

356 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:21:50 ]
>>354
クラスは使っていいの?

357 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:55:20 ]
>>356
使っても大丈夫です。

358 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:02:23 ]
>>241
問題文とか一部だけ見せられてもね・・・・

359 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:47:47 ]
自分の才能の無さに絶望した。

>>354
恥ずかしすぎるので実行ファイルのみ(DXライブラリ)
ttp://www.dotup.org/uploda/www.dotup.org18202.zip.html



360 名前:デフォルトの名無しさん [2008/11/07(金) 12:59:19 ]
[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、


361 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:08:15 ]
>>349
動作確認できました。
ありがとうございます<(_ _)>

362 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:09:35 ]
例えば一回出した乱数をaに入れて固定するのはどうしたらいい?
言語はc++です

363 名前:デフォルトの名無しさん [2008/11/07(金) 14:17:19 ]
[1] 授業単元: プログラミング
[2] 問題文 
# 下記のように,二つのベクトルを生成し,それらの内積を計算するプログラムを作成しなさい.ただし,ベクトルの各成分は0〜9の整数型の乱数で,ベクトルの長さは10とする.なお,乱数の生成にはrandを用いよ.

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 1, 4, 1, 7, 4, 9, 1, 2, 0)
b = (4, 0, 5, 4, 6, 0, 8, 6, 3, 6)

The value of the inner product of the two vectors = 182

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (4, 8, 4, 6, 8, 1, 0, 3, 5, 8)
b = (8, 6, 4, 1, 6, 0, 4, 6, 1, 0)

The value of the inner product of the two vectors = 173

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 7, 3, 8, 8, 3, 8, 8, 3, 1)
b = (8, 9, 6, 3, 6, 3, 6, 3, 5, 8)

The value of the inner product of the two vectors = 321

kawasaki@orange ~/lectures/2008/C/5$
# 上と同じ計算をするプログラムを,乱数の生成にMersenne Twisterを用いて書け.ヒント:genrand_real2()に適切な値の整数をかけたものを整数型にキャストして,0〜9の整数乱数をつくる.
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[5]
お願いします・・・できれば1時間以内に・・・


364 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:24:44 ]
>>362
変数に代入すれば?

365 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:30:18 ]
>>363
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int a[10], b[10], i, sum = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < 10; ++i) {
a[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
b[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
}
printf("a = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", a[i]);
}
printf("%d)\n", a[i]);

printf("b = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", b[i]);
sum += a[i] * b[i];
}
printf("%d)\n", b[i]);
sum += a[i] * b[i];
printf("The value of the inner product of the two vectors = %d", sum);
return 0;
}


366 名前:デフォルトの名無しさん [2008/11/07(金) 14:33:59 ]

[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、

できれば夕方あたりまでにおねがいします><


367 名前:デフォルトの名無しさん [2008/11/07(金) 14:39:12 ]
>>365 ありがとうございます!

368 名前:デフォルトの名無しさん [2008/11/07(金) 14:57:06 ]
>>365のはarrayを使うとどういった形になりますか?

369 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:08:25 ]
[1] 授業単元: C,C++、データ圧縮LZ78符合
[2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。
      データ列:ABCBCBCDEBCDABCD
コンソールアプリケーションで作成すること。
      画面には最低限以下のものを出力すること。
      【1】与えたデータ列
      【2】作成した辞書の一覧
      【3】符号化したデータ列
[3] 環境
 [3.1] OS: WindousXP
 [3.2] コンパイラ名とバージョン: VisualStudio2005
 [3.3] 言語: C,C++どちらでも可
[4] 期限:2008年11月13日まで
[5] その他の制限: 標準ライブラリ可



370 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:56:14 ]
>>354
struct 座標 {
 int x, y;
};

struct 移動 {
 座標 end; // 移動先。この座標まで移動したら、次の方向(next)へ向かって移動する
 移動 *next; // 次の移動先へのポインタ
};

こんな感じで、画面中央と画面の端の点を結んで、ループごとにちょっとずつ点に移動するのはダメ?
見当違いな事言っていたらごめんね。

371 名前:241 mailto:sage [2008/11/07(金) 17:47:36 ]
>>358

すいません、241の問題が課題3でして、この前の課題1,2とそれの解答を下に。

課題1
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7957.zip
課題2
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7958.zip

課題1が1/2の確立で+-1となる記憶パターンを生成するプログラムで、
課題2がシナプスの結合の重みを決定するものです。

説明と資料の不足どうもすみませんでした…。
他にも情報、説明が足りない所があればお伝え下さい。
あと追記ですが、提出期限が11月9日→11月10日に変更になりました。

372 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:04:34 ]
>>371
これって正解?それとも自力で解いたやつ?
>weight[j][i]=pattern1[i]*pattern1[j];/* 結合の重みの計算*/
>weight[j][i]=weight[i][j];
課題2回答.txtのこの部分、おかしい気がするんだけど。

373 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:18:00 ]
>>371
課題2からしてコンパイルどころかインデントのチェックすら通らんな

例題も、定義によれば重みの対角成分は必ず+1じゃないとおかしいのに、
全部白(-1)になってる。問題に関する資料は全部晒したほうが良いと思われ


374 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:37:50 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7959.c
↑のカレンダープログラム(西暦と月を入力するとその月のカレンダーが表示されるもの)を
次のように改造せよ。
・月のカレンダーではなく一年分のカレンダーを表示させる。
・daysinyear()とdaysinmonth()でif文ではなくswitch文を使う。
というのと、
フィボナッチ数列を、指定された個数まで求めて表示するプログラムを書け。
ループにfor文を使ったもの、whileを使ったもの、doを使ったものをそれぞれ作ることで
プログラムを三つ書く。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月10日まで
[5] その他:上にあるカレンダープログラムは講師が生徒のレベルに合わせて
作成したものです。
2つになってしまいましたがどうかよろしくお願いします。

375 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:48:53 ]
>>366
一応クリアはできた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7960.c

376 名前:241 mailto:sage [2008/11/07(金) 18:51:32 ]
>>372
>>373
もうほんと色々すいません…。講義で使うPDFが重くてラウンジにupできなかったんですが、
違う所にここまでの講義内容のpdf全部上げときます。(第2回〜第5回迄)

www1.axfc.net/uploader/He/so/155985.zip
DLパスは「123」です。馬鹿学校ですいません…。


377 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:57:20 ]
>>376
上げてもらった資料まだ目を通してないけど
とりあえず対角成分だけ別に設定できるようにしてやってみた
例題と同じ値を入れてみても経過が一致しないww
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7961.txt

378 名前:377 mailto:sage [2008/11/07(金) 18:58:37 ]
例題と同じ値で試してみたい場合は最初のforループ(乱数でpattern生成するところ)を
ざっくりコメントアウトすればいい

379 名前:デフォルトの名無しさん [2008/11/07(金) 19:11:46 ]
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):

data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。
対角要素に0に近い要素があっても、正しく求められるように工夫せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限: なし


お願いします!






380 名前:372 mailto:sage [2008/11/07(金) 20:23:47 ]
>>377
俺はお手上げだ。
それ、初期化忘れと、対角成分ってところに代入するのは0じゃね?
ってことでこれ。変更箇所に目印を付けてみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7962.txt


381 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 20:37:04 ]
>>380
対角成分はテキスト読んだかぎり+1にならない理由が見当たらないが、例題では0を入れているな。
weight は全要素に値が入るんだから初期化不要では?

あと、pattern2 の初期値だが、ランダムに「反転する」ならば
if(randv > 0.75)
 pattern2[i] = -pattern1[i];
else
 pattern2[i] = pattern1[i]
みたいな感じにすれば、この場合 25% の確率で反転する。

382 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:24:20 ]
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
円柱の半径と高さを実数で入力し,その体積を求めるプログラムを作りなさい
-変数はすべてdouble型を用いること
-円周率p=3.14159265358979として計算

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。

383 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:38:25 ]
>>382 ほんとに問題それであってる?
#include <stdio.h>
main()
{
double p = 3.14159265358979, r, h;
printf("半径: ");
scanf("%lf", &r);
printf("高さ: ");
scanf("%lf", &h);
printf("体積: %f\n", p*r*r*h);
}

384 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:46:30 ]
>>383
問題文はこれだけなので合っているのですが、どうかされましたか?

385 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:49:00 ]
公式と最低限の入出力関数さえ知ってれば何の苦労もなさそうだから
宿題とする価値がないというか何と言うか…

386 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:54:53 ]
>>385
そうなんですか。
一応、この問題はC言語のテキストの発展問題なんですがそんなに簡単だったんですね。
そんな問題が解らないって本当に自分やばいですね。
何はともあれ、宿題をやって下さって有難う御座いました。
本当に助かりました。

387 名前:デフォルトの名無しさん [2008/11/07(金) 23:06:11 ]
[1] 授業単元:Linuxプログラミング
[2] 問題文(含コード&リンク):
途中までつくって、コンパイルも出来るようになったのですが、動作が中途半端です。fork(), execvp, waitあたりが理解出来ていないからどこか
がおかしいと思うのですが、見て下さい。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7966.c
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7964.txt
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7965.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 4.1.2
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:
やろうとしていること:
実行すると、testプロンプトが表示されるので、好きなコマンドを実行すると、結果を表示する。->例えば、test> ls -l -a /tmp/temp.txt
exitを入力するまで繰り返し何度でもコマンドを実行出来る。
質問(1)なぜか最初の一回目はexecvpによるコマンド実行結果が表示されません。二回目からは正常に動作するのですが。。
質問(2)exitを入力するまでループにしているのですが、一回入力させれば終了したいのに、複数回コマンドを実行した場合は、exitも複数回入力しなければ
抜けられなくなってしまいました。
質問(3)二回目のコマンド実行時、一回目よりも短いオプションで実行するとなぜか「ls: p/temp.txt: ファイルかディレクトリが見つかりません」とエラーになります。
argv[i]に格納した文字列が途中で切れてしまっているように思われます。
質問(4)存在しないコマンドを入力するとエラーメッセージを出したいのですが、どうすればよいでしょうか。
質問(5)ソース中にシグナルキャッチャーの箇所がありますが、どのように使えばいいのかわかりません。不明確な質問ですが、この文脈で使い方がわかる
場合は教えて下さい。以上、長くなりましたが宜しくお願いします。

388 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:16:10 ]
>>386
悪いが383≠385だ。

389 名前:372 mailto:sage [2008/11/07(金) 23:18:14 ]
>>381
すまん、恥ずかしさを胸に吊ってくる



390 名前:377 mailto:sage [2008/11/07(金) 23:30:28 ]
>>376
資料に目を通した。
>>389
よくみると重み付き総和の計算で j≠i と小さくw書かれてたから w[i][i] = 0 が正解だわ
あと資料にいろいろ小出しにされたヒントを全部反映させといた。

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7967.c

>>377 は毎回全部のニューロンをもれなく更新してたたために2ステップで
ほとんど収束してたけど、ランダムに更新するニューロンを選択する部分作ったら
収束がほどよい感じになった。
NUM_OF_NEURON がニューロン数
NUM_OF_ERRORS を増やすと初期値の乱れ具合が増す。
ほどほどにしないと収束しなくなるw 結構おもしろかったわ

391 名前:377 mailto:sage [2008/11/07(金) 23:41:34 ]
何度もすまね、1か所間違いみっけた
 if (tmp[i] > 0)
  printf("■");
 else
  printf("□");
 /* neuron_state を tmp にコピーしてから使う */
 tmp[i] = neuron_state[i];
これは、printf する前に、for のすぐあとに書かないと表示が狂う
for(i = 0; i < NUM_OF_NEURON; i++) {
 /* neuron_state を tmp にコピーしてから使う */
 tmp[i] = neuron_state[i];
 if (tmp[i] > 0)
  printf("■");
 else
  printf("□");

392 名前:383 mailto:sage [2008/11/07(金) 23:56:36 ]
>>386
むかし専門学校で講師やってたんだが、scanf 教えたその日に出して
授業中に作らせた課題で、宿題にすらなってなかったんで確認してみた

393 名前:241 mailto:sage [2008/11/08(土) 00:09:19 ]
>>390

動作確認しました!ありがとうございました!
絶望してた課題だったので凄いうれしいです;;

多レスでご迷惑お掛けしてすいませんでした><

394 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:52:00 ]
>>387
初回の fork の前後で cmd->args[0] の内容が違って見えるね

cmd->args[i] の領域って、自分で malloc してないで、strtok() に任せてるでしょ

自分で malloc した領域をつかって strtok_r 使ってみたら?

395 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:14:04 ]
>>354
とりあえず、出題の動きをするものを作った
どことなく危険な香りのするプログラムになった
www.dotup.org/uploda/www.dotup.org18927.zip.html

出題者の意図がまったくわからないので
かなりの手抜きプログラムになっている
おそらく出題者の意図とはかけ離れたものであろう気がする
というか、何のシステムのないところにいきなりこれをやれって無理があるような
最初にめんどくさい思いをさせて「こうすると楽だよ」的な流れなのか
何か前説があってそれを踏まえた上でやるべき課題なのか・・・・

396 名前:394 mailto:sage [2008/11/08(土) 02:25:45 ]
>>387
あー、違うところかもしれん

原因はそこじゃなくて、gets() やってるところだと思う
simple_accept_input() のローカル変数 str[] に取り込んでるでしょ
strtok(str, " ") とやっているわけだから strtok によって得られるポインタは、
このローカル変数 str[] を参照する。
ローカル変数の寿命はその関数を抜けるまで。
実際 str[] はスタック領域に作られるわけだから、後に関数が実行されたときに
破壊される可能性大。
今回はそれがたまたま fork() 実行時に重なっただけで、fork() 自体によって
データロストしてたわけではなさそう(そもそも fork は全データコピーだしね)

普通、ポインタでいろんなとこから参照されるデータを、特定の関数のローカル変数にしまってはいけない。
gets したデータは、main のローカル変数なりグローバル変数なり malloc するなりして不揮発にしておかないと

397 名前:394 mailto:sage [2008/11/08(土) 02:41:38 ]
>>387
てなわけで、simple_accept_input() の char str[256] をグローバルにしただけで動くようになった。
(1) str[] をグローバルにすれば解決
(2) 同上
(3) 同上
(4) execvp() の直後に exit(-1); とかやって子プロセスを終了させないと
  fork_cmd() から返って gets(str) はじめてループになるぞ
(5) シグナルで何やりたいかわからんが、signal システムコールでこの関数と
 シグナル関連付ければ、シグナル発生したときにこの関数に飛んでくる

398 名前:387 mailto:sage [2008/11/08(土) 03:11:24 ]
>>397
ありがとうございました。char str[256]とchar *strpをmain関数の前で宣言するようにしました。
初回からきちんと動作するようになりました。それから、子プロセス側ではexecvp後にexit(-1)を
入れるようにしました。(1)、(2)が解決しました。
しかし、これで(3)と(4)も直るはずでしょうか?私の環境ではまだ直りません。。具体的な症状は以下の通りです。
(3)引数の数が前回より減った場合におかしくなる
(一回目)test> ls -l -a -s /tmp/temp.txt ---OK
(二回目)test> ls -l -a /tmp/temp.txt ---NG
ls: p/temp.txt: ファイルかディレクトリが存在しません
※ちなみに引数の数が前回より増える場合は問題ないです。
(一回目)test> ls -l -a /tmp/temp.txt ---OK
(二回目)test> ls -l -a -s /tmp/temp.txt ---OK
まだどこか修正する箇所がありますでしょうか?

(4)存在しないコマンド実行時、コンソールから実行したのと同じようにエラーを表示することは出来ないでしょうか?
例)test> jfodajfoeifji -l -a -l /tmp/temp.txt
-bash: jfodajfoeifji: コマンドが見つかりません

(5)そうですよね、これだけじゃ何がしたいか不明ですよね。。こちらは、無視して頂いて結構です。

399 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 03:36:41 ]
>>398
(3) 原因は、cmd->args[i] の最後の要素に NULL が入っていないこと 。
simple_accept_cmd() 内で
if(strp != NULL){
 cmd_a->args[i] = strp;
 cmd_a->num_args++;
}
とやって cmd_a->args[i] には NULL が入らないようになってるけど、
cmd_a->args[i] = strp;
if(strp != NULL){
 cmd_a->num_args++;
}
と順序変えてやればおk
(5) コマンドの status を見てやればエラー処理できるでしょ
エラーの詳細知りたかったら、子プロセスでないとわからないから
execvp(cmd->args[0], cmd->args);
printf("Command error:%s\n", strerror(errno));
とでもすれば、strerror で得られる原因が表示される。ファイルが見つからない場合だけ
対処したいんだったら、execvp 直後の errno の値で場合分けを行う。



400 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 03:45:19 ]
>>395
業務系じゃありえない魔術過ぎてワロタ
これがゲームプログラムって奴なのか
いくらなんでもお行儀が悪すぎだろう

401 名前:387 mailto:sage [2008/11/08(土) 03:52:59 ]
>>399
解決しました!ありがとうございました。

402 名前:デフォルトの名無しさん [2008/11/08(土) 04:09:43 ]
[1] 授業単元:ポインタ
[2] 問題文(含コード&リンク):
検索対象文字列と検索文字列を入力して、発見位置と個数を出力する。
※検索対象文字列は50文字を超えないものとする
※標準ライブラリのstrstr関数を利用すること
※実行例のような出力が得られるようにすること
<実行例>
検索対象文字列→AAAAAAAAAAA
検索文字列→AAA
検索結果
AAAAAAAAAAA
*********
9個発見しました
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Borland C++ Compiler 5.5
 [3.3] C
[4] 期限:明日
[5] その他の制限:なし

ポインタ難しいです・・・この時間までやってましたができませんでした。
どなたかよろしくおねがいします!!

403 名前:デフォルトの名無しさん [2008/11/08(土) 04:13:21 ]
質問なのですが、ここでは問題文が英語の宿題もやって頂けますか?


404 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:23:06 ]
>>403
何度かそういうのあったよ。

405 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:29:47 ]
>>402
#include <stdio.h>
#include <string.h>
int main()
{
 char str[100], needle[50], *p;
 int i = 0;
 printf("検索対象文字列を入力:");
 scanf("%s", str);
 printf("検索文字列を入力:");
 scanf("%s", needle);
 printf("検索対象文字列→%s\n", str);
 printf("検索文字列→%s\n", needle);
 printf("検索結果\n%s\n", str);
 p = str;
 while(strstr(p, needle) != NULL){
  if(p == strstr(p, needle)){
   i++;
   printf("*");
  } else
   printf(" ");
  p++;
 }
 printf("\n%d個発見しました\n", i);
 return 0;
}

406 名前:デフォルトの名無しさん [2008/11/08(土) 04:30:45 ]
>>403
そうなんですか。それでは英語の問題文のまま載せても大丈夫ですか?
それとも和訳したほうが良いですか?
あまり自分の英語力に自信ないんで変な和訳になってしまったらと思ってるのですが。

407 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:42:37 ]
構わん、載せろ。
多分俺はできないが。

408 名前:デフォルトの名無しさん [2008/11/08(土) 05:24:42 ]
>>407
ありがとうございます。それでは載せさせて頂きます。

[1] 授業単元:C++
[2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7970.txt   
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: Visualstudio 2005
 [3.3] 言語:C++
[4] 期限:2008年11月10日
[5]

xtxの中の図は自分が作って物です。図を載せようとしたのですが載せれなかったので。
わかりにくくてすいません。
英語の問題文ですがよろしくお願いします。


409 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 05:39:34 ]
>>408
単なる C のプログラムになっちまったが
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7971.txt



410 名前:409 mailto:sage [2008/11/08(土) 05:41:20 ]
ぐは
偶数奇数判定逆だった
if(*in_val % 2 == 0)
 ↓
if(*in_val % 2 != 0)


411 名前:デフォルトの名無しさん [2008/11/08(土) 05:57:20 ]
>>408
本当に助かりました。ありがとうございました。

412 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 06:00:05 ]
うまいこと図を書くなあ。
ただのCだから今までの授業で習ったものと毛色が随分と異なる場合はばれちゃうね。

413 名前:デフォルトの名無しさん [2008/11/08(土) 07:18:54 ]
>>412
図が文字化けしてましたね。すいません。
やはりCとC++とではだいぶ異なるんですか?
最近授業でプログラミング始めたばかりなんでわからないことだらけで。

414 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:41:14 ]
すみません。ポインタが苦手なC初心者です。教えて下さい。パイプ相当の機能を
つくろうとしているのですが、まずは前段として以下のようなものをつくりたいです。
例えば「./a.out "cat -n test.c" "grep a"」
と引数を与えてプログラムを実行すると、
str1[0]=cat, str1[1]=-n, str1[2]=test.c, str1[3]=NULL,
str2[0]=grep, str2[1]=a, str2[2]=NULL,
のように格納させたいです。つまり、argv[1]の内容とargv[2]の内容をそれぞれstrtokで空白で
区切って格納させていき、最後にNULLを入れる。思うように出来ません。宜しくお願いします。

415 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:54:07 ]
>>413
図はエンコード指定すればだいじょうぶ。

今までの授業で教えてもらったソースコードと雰囲気が似てるならいいよ。
授業でcinとかcoutとか使わなかった?

416 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:55:18 ]
>>414
pipe や popen 使わずにどうやってパイプ相当の機能を作るのかわからないけど
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7972.txt

417 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:11:34 ]
シェル使えば標準入力に入ってくるからいいんじゃないの

418 名前:414 mailto:sage [2008/11/08(土) 08:11:58 ]
>>416
有り難うございます。popenはわからないのですがpipeを使ってやってみようと思います。
ひょっとして全然とんちんかんなことやっているのかも知れませんがもう少しやってみて
駄目だったらまたご質問させて頂きます。

419 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:12:49 ]
ってパイプ自体を作ろうとしてるんじゃないよね。
foo | ./a.out
ってやりたいだけだよね



420 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:17:00 ]
作ってみた。でおじゃる、とは言わない(というと出てくるかしら)

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

int main(int argc, char **argv)
{
char *str1[10];
char *str2[10];
char **p;

p = str1;
*(p++) = strtok(argv[1], " ");
while ((*(p++) = strtok(NULL, " ")) != NULL);

for (p=str1; *p!=NULL; p++) {
printf("%s\n", *p);
}

return 0;
}

インデント確認用アンカー >>420

421 名前:414 mailto:sage [2008/11/08(土) 08:19:53 ]
>>417>>419
パイプ自体を作ろうとしています。シェルだとcat -n test.c | more
と打つところを、./a.out "cat -n test.c" "more"と打たせることで、
forkした親子プロセスでファイルディスクリプタなんちゃらというのを
使って(すみません勉強したてです)処理を渡すようなCプログラムを作ろうとしています。
自分の限界は恐らく1時間前後で見えてくると思いますのでしばしお待ち下さい。

422 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:22:39 ]
アラヤダ。
そっか。がんばってねー。

またなんかあると聞くといい、、、けど宿題スレはちょと違うかもだ

423 名前:414 mailto:sage [2008/11/08(土) 08:38:11 ]
出来ました!思ったより随分あっけなく。。というか、ウェブでみっけたソースがほとんど
そのまま流用出来たので。皆様、有り難うございました。
>>422
すみません。宿題は宿題なのですが、初心者なのに毎週難易度がぐんと上がるので、ある程度は
自分でやってみないと次から全くわからなくなってしまうので。。わからないところだけ小出しに
質問させて頂きました。スレに反していたら申し訳ないです。

あ、でも匿名パイプの次の宿題は名前付きパイプなのですが、こちらはちょっと読んだところ手も足も
出なそうなので、丸投げさせて頂くと思います。またちょっとしたら投稿します。ぐだぐだすみません。

424 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:49:57 ]
名前付きパイプはファイルの読み書きと変わらないからむしろ簡単かも

425 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:51:24 ]
>>423の、「でも匿名パイプの次の宿題は名前付きパイプなのです」
から察するに、pipeを使って2つのプロセスを繋げろという課題、
次の課題はsocketを使ってAF_UNIXのパイプを作って〃とみた。

426 名前:デフォルトの名無しさん [2008/11/08(土) 10:45:59 ]
vectorで自分で作ったクラスをタイプとして持たせるにはどうすればいいんですか?
たとえばABCとDEFという二つのクラスがあるとします。
DEFというクラスがABCから作られたオブジェクトを無制限に持つようにしたいんです。
この際にDEFのメンバやコンストラクターはどんな感じに作ればいいのでしょうか?

427 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:02:34 ]
class DEF {
std::vector<ABC> abc;
};

メンバとして持たせたいなら、これだけじゃないの?

428 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 11:15:46 ]
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
ニュートン法を利用して入力データの平方根を求めるプログラムを作りなさい.
-解を求めたい実数aを入力
-解を求めるための初期値x0を入力
・なんでもよいが普通はaの平方根に近い値を入力
-ニュートン法を用いた計算
・x1=(x0+a/x0)*0.5を計算
・x1-x0の絶対値がe以下ならばx1が求める平方根
- eは収束判定に用いる値でここでは1.0E-10を使用する
-差が-eからeの範囲に入れば繰り返し終了
-入らなければx1をx0に代入して再度繰り返してx1の計算

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。

429 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 11:21:54 ]
>>428のプログラムの実行例

平方根を求めたい数を入力してください: 5.0 ↓
解を求めるための初期値を入力してください: 2.0 ↓
5.000000 の平方根は 2.236068 です.

平方根を求めたい数を入力してください: 123.456 ↓
解を求めるための初期値を入力してください: 10.0 ↓
123.456000 の平方根は 11.111076 です.



430 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:36:00 ]
>>428
そこまで計算式や判定法が分かってるなら、すぐに解けそうなものだけど。。。

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

int main(int argc, char *argv[])
{
static const double e = 1.0e-10;
double x0, x1, a;

printf("平方根を求めたい数を入力してください: ");
scanf("%lf", &a);
printf("解を求めるための初期値を入力してください: ");
scanf("%lf", &x0);
x1 = (x0 + a/x0)*0.5;
while (fabs(x1-x0) > e) {
x0 = x1;
x1 = (x0 + a/x0)*0.5;
}
printf("%f の平方根は %f です\n", a, x1);
return 0;
}

431 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 12:01:33 ]
>>430
本当に有難う御座いました。
大変助かりました。

432 名前:354 ◆zeyvxEAaZQ [2008/11/08(土) 15:07:01 ]
>>359
>>370
>>395
ありがとうございました!

>>370さんのやり方も試してみます。

>>395さん
「こうすると楽だよ」的な流れだと思います。他にもやりたい事はあるのですが、teki.hとel.hいうファイルが何なのかよくわかりません。消しても平気でしょうか?


433 名前:354 ◆zeyvxEAaZQ mailto:sage [2008/11/08(土) 15:07:43 ]
すみません、sage忘れました。

434 名前:414 mailto:sage [2008/11/08(土) 16:17:14 ]
名前付きパイプの方も自力で一応出来ました!ありがとうございました。
>>425
今週の宿題は完了しました。次回はメッセージキューと共有メモリみたいです。
次次回がソケット関連みたいでした。また困ったら投稿させて頂きます。
疲れた。。寝ます。

435 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:02:52 ]
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
キーボードから自分の学生番号を半角小文字整数で、氏名を半
角小文字のローマ字で、身長(cm)を実数で、体重(kg)を実数で入力し、
学生番号と氏名・身長・体重・身長(cm)+体重(kg)を表
示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:XP
 [3.2] VC 6.0等
 [3.3] 言語: C
[4] 期限: ([2008年mm月11日11まで
[5] その他の制限:やってまもないです
   少しやってみたんですがここで詰まっています 
    #include<stdio.h>
    void main(void)
    {
int x,y;
printf("学生番号を半角小文字整数で入力;\t");
scanf("%d",&x);
printf("10進数表示 ; DEC(x)=%d\n",x);
printf("氏名を入力する;\t");
    }

436 名前:435 mailto:sage [2008/11/08(土) 17:04:02 ]
訂正
11月11日までです

437 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:11:44 ]
>>435
#include<stdio.h>
int main(void)
{
int x;
char s[1000];
double h, w;
printf("学生番号を半角小文字整数で入力;\t");
scanf("%d",&x);
printf("氏名を入力する;\t");
scanf("%s", s);
printf("身長を入力する;\t");
scanf("%lf", &h);
printf("体重を入力する;\t");
scanf("%lf", &w);
printf("学生番号: %d\n", x);
printf("氏名: %s\n", s);
printf("身長: %f\n", h);
printf("体重: %f\n", w);
printf("身長 + 体重: %f\n", h + w);
return 0;
}


438 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:32:54 ]
>>435
せめてBMI判定くらいはしてやれwwww

439 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:58:46 ]
>>435

単位の違うものを足すの?



440 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:31:03 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7973.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/10
[5] その他の制限:おそらく実行例の関数にさえ対応していれば大丈夫だと思います

よく分からない問題だと思いますがよろしくお願いします

441 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 21:58:45 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文字列str1の中身が半角から全角に切り替わる箇所にはその文字の前に16進数の{0x40}を
全角から半角に切り替わる箇所には16進数の{0x41}を挿入し
その結果をテキストtest1.txtに出力をするプログラムを作成しなさい。(結果の確認はバイナリエディタで行うように)
なお、文字列str1の文字コードはSJISとする。

※問題文では触れられておりませんが
 文字列の1文字目が全角の場合は最初に{0x40}を
 最後の文字が全角の場合は一番最後に{0x41}を付加しなければならないようです。


出力例:
  挿入前の文字列str1:スレタイ C/C++の宿題を片付けます117代目
  テキストに出力される文字列:{0x40}スレタイ {0x41}C/C++{0x40}の宿題を片付けます{0x41}117{0x40}代目{0x41}


リンク:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7974.txt

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/11
[5] その他の制限:
全角文字と半角文字を区別する箇所までは出来たのですが
文字列の中に16進数を挿入する過程で詰まってしまいました。
特に制限は無く、私が作った部分の改変をするのもおkですのでよろしくお願い致します。

442 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:04:34 ]
0x40は@、0x41はAのことか?
そもそも宿題なのか?

443 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:25:41 ]
>>442
ソースコート上では単純に文字として挿入するのではなく16進で挿入しなければならないようです
memcpyの使い方に関する宿題です(;´Д`)

444 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:00:20 ]
>>441
挿入してるのは ASCII だからべつにバイナリエディタでなくても確認できるな
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7975.txt

あ、test1.txt に出す部分作るの忘れたからそれはご自分で。最後の printf を fprintf に置き換えるだけだね

445 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:12:21 ]
>>444
ばっちりです!ありがとうございました
あとは自分で改変してみます

446 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 01:02:30 ]
>>437
ありがとうございます。
>>439
そういう適当な課題なんです

447 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:20:57 ]
440の問題微妙に難しくない?コンパイラ?

448 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:40:51 ]
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7976.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/12
[5] その他の制限:特になし

よろしくお願いします


449 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:52:06 ]
[1] 授業単元:C
[2] 問題文 
 初期設定された任意の整数配列内のデータを,大きい順に並べ換えるプログラム
をつくりなさい。ただし,並べ換える部分を関数にして,配列とデータ数を引数として
渡しなさい。例として,次の10 個の整数を格納した配列に適用してみなさい。
static int dd[10] = { 27, 89, 45, 18, 55, 64, 92, 73, 34, 88 };

出力例:
ソート後 = 92 89 88 73 64 55 45 34 27 18

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2008年11月10日 24:00
[5] その他の制限:次のようなプロトタイプ宣言をもつ関数isort を定義しなさい。
void isort(int *, int);

できましたら、C言語の基本的な関数のみでお願いします。





450 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 03:15:08 ]
>>447
関数の名称その他の抽出って感じだろう
構造体を誤認識しないようにしつつ

451 名前:450 mailto:sage [2008/11/09(日) 03:16:42 ]
ごめんたしかにかなり面倒ですね
どのくらいまでやればいいんだろ

452 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 03:25:55 ]
>>449
void isort(int * ary, int nelem)
{
int i;

for ( i = 1; i < nelem; ++i ) {
int j;
int tmp = *(ary + i);

for ( j = i - 1; j >= 0 && *(ary + j) < tmp; --j ) {
*(ary + j + 1) = *(ary + j);
}
*(ary + j + 1) = tmp;
}
}
適当に作ってみた。

453 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:05:41 ]
>>448
シンプレックス法だね。でもコードにするのめんどい・・・

454 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:06:41 ]
>>440
途中までやってみた。

・ 基本的に改行を取り除くため1つの char 配列に読み込む
・ // は行単位の処理が必要なので読み込み時に処理
・ /* 〜 */ は未対処
・ void, int, char, float, double のいずれかとマッチするところを探す
→ データ型を省略した関数定義は取りこぼす
・マッチしたらそれぞれの直後が ' ' か '\t' か '\n' の条件に絞る
・ '(' が来るまでに ',' か ';' か ')' か '{' か '}' が来たら関数ではない
・以上の条件に合致したら、型名と関数名を出力

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7978.txt

455 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:16:44 ]
>>452

ありがとうございましt!

456 名前:454 mailto:sage [2008/11/09(日) 05:20:37 ]
>>440
short が抜けてたので改良を加えてみた。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7980.txt
検索の順序の関係上お手本とは順番は異なるが、いちおう関数は拾えている


457 名前:354 ◆zeyvxEAaZQ mailto:sage [2008/11/09(日) 05:42:14 ]
[1] 授業単元: C++
[2] 問題文(含コード&リンク): 敵が一周回ったら再び中央へ移動して、波を描きながら画面外へ消える。これをクラスを使わないで作って欲しいです。
中央へ移動までは、>>395さんに作っていただきました。www.dotup.org/uploda/www.dotup.org20438.zip.html
最終的にこのような感じの動きです。www.dotup.org/uploda/www.dotup.org20441.bmp.html
あと、敵の当たり判定もお願いします。これがサンプルです。www.dotup.org/uploda/www.dotup.org20440.zip.html
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC2005またはVC2008
 [3.3] 言語: C++
[4] 期限: ([2008年11月9日22:00まで
[5] その他の制限: クラスについてどのようなものかまだ習っていなかったのに、曖昧な返事をしてしまって申し訳ございません。
プログラムに関しては、自機の表示と弾を出すのはできましたが、それ以降ができません。どうかお願いします。

458 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 05:43:08 ]
>>457
構造体はつかってもいいですか?

459 名前:デフォルトの名無しさん [2008/11/09(日) 06:16:06 ]
[1] 授業単元: C++
[2] 問題文(含コード&リンク):数個のポイントを含むクラスポリゴンを定義しなさい。
(a) デストラクター・コピーコンストラクター・アサインメントオペレーターを作成し、クラスを定義しなさい。ディフォルトコンストラクターは空のポリゴンを作成すると仮定しなさい。
(b)Pointクラスがプライベートメンバー、また、(x,y)を返すコンストラクタPoint(int, int)を持つように変更しなさい。そうすることによってポリゴンクラスがコンパイルしなくなります。問題点を発見し、修正しなさい。
(一応骨組みは作ってみました。)
class Point {
  public:
    float x;
    float y;}
class Polygon {
   Point * points; //the points
   int size; //number of points
  public:
   Polygon() {...};
   Polygon(const Point * pts, int n) {...};
   Point getPoint(int n)const {
    //n番目のポイントを返す}
   void setPoint(const Point& p, int n) {
    //sets the nth point}
   int getSize()const {
    return size;}};
 [3.1] OS: linux redhat
 [3.2] コンパイラ名とバージョン: VC2005またはVC2008
 [3.3] 言語: C++
[4] 期限: ([2008年11月11日22:00まで
[5] その他の制限:ポリゴンを作成するプログラムを作る課題を出されました。
  日本の皆さまのお力をお借りしたく、投稿させて頂きます。
  上の骨組みで作成することが、条件として出されました。
  よろしくお願いいたします。



460 名前:デフォルトの名無しさん [2008/11/09(日) 07:49:14 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
void Wa(int a,int b);
…2つの引数の和を計算し、結果を表示する(xとyの和)
int abs_Sa(int a, int b);
…2つの引数の差を計算し、その絶対値を返す(xとyの差の絶対値)
double Heikin(int a,int b, int c, int d int e);
…5つの引数の平均値を返す(num[5]の平均値)
このような演算を行う関数をそれぞれ定義し、下記のプログラムに処理を追加せよ

#include<stdio.h>
void Wa(int a,int b);
int abs_Sa(int a, int b);
double Heikin(int a,int b, int c, int d int e);

int main(void){
int k,x,y,num[5]={19,51,100,32,6};
double z;
printf("xを入力してください:")
scanf("%d",&x);
printf("yを入力してください:")
scanf("%d",&y);
/* これ以降に処理を追加する */
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual stdio 2005
 [3.3] 言語: C
[4] 期限: 11/11 18:00
[5] その他の制限:
関数習いたてです。よろしくお願いします

461 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 08:35:36 ]
>>460
main 残り
printf("x + y = ");
Wa(x, y);
printf("\n");
k = abs_Sa(x, y);
printf("|x - y| = %d\n", k);
z = Heikin(num[0], num[1], num[2], num[3], num[4]);
printf("average of %d, %d, %d, %d, and %d = %f\n", num[0], num[1], num[2], num[3], num[4], z);
return 0;
関数
void Wa(int a, int b)
{
printf("%d", a + b);
}
int abs_Sa(int a, int b)
{
if (a >= b)
return a - b;
else
return b - a;
}
double Heikin(int a, int b, int c, int d, int e)
{
return (a + b + c + d + e) / 5.0;
}


462 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 09:35:58 ]
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):

長くなったので↓にアップします。

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7981.txt

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: VC2005またはVC2008
 [3.3] 言語: c++
[4] 期限: 11月12日
[5] その他の制限:
for文、if文、配列等まで習いました。よろしく御願いします。

463 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 10:09:10 ]
[1] 授業単元:演習
[2] 問題文:
数値が何(バラバラ)行2列でかかれた複数のファイルがあり
それぞれのファイルを読み込み、表示させるプログラムを書きなさい。
何行かはファイルを開かないとわからないのでプログラムで行数をはかる。
[3] 環境
 [3.1] OS:LINUX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:2008年11月9日

464 名前:460 [2008/11/09(日) 10:10:41 ]
>>461
ありがとうございます、助かりました

465 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 10:58:28 ]
>>462
メインのループの部分だけ

int pos = 0;
for(i = 0; i < 20; i++) {
x = rnd();
if (x < 0.3) {
pos--;
printf("左に進みました。");
} else {
pos++;
printf("右に進みました。");
}
printf("現在位置 ");
if(pos > 0)
printf("右に %d ", pos);
else if(pos < 0)
printf("左に %d ", pos);
else if(pos > 0)
printf("原点");
printf("です。\n");
}


466 名前:465 mailto:sage [2008/11/09(日) 11:04:45 ]
ちょっと読み違えてたので訂正
double x;
int i, pos = 2;
char *place[] = {"盗賊", "湖", "入り口", "森", "宝"};

srand((unsigned int)time(NULL));

for(i = 0; i < 20; i++) {
x = rnd();
if (x < 0.3) {
pos--;
printf("左に進みました。");
} else {
pos++;
printf("右に進みました。");
}
if(pos >= 4){
printf("宝を見つけました。");
pos = 2;
} else if (pos <= 0){
printf("盗賊に会いました。");
pos = 2;
}
printf("現在位置 %s です。\n", place[pos]);
}


467 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:53:26 ]
>>466

ありがとうございました!


468 名前:デフォルトの名無しさん [2008/11/09(日) 13:16:10 ]
[1] 授業単元:数値計算法1
[2] 問題文(含コード&リンク):

gyoretu[n][n]に格納された、n次の行列の逆行列を求め、出力するプログラムを作成せよ。

対角要素に0や0に近い要素があっても、正しく答えが求められるように工夫せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限:明日
[5] その他の制限: なし


お願いいたします!!

469 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 13:18:27 ]
>>463
ファイル読んでその場で表示するだけなら行数とか考える必要ないんだけど
いったん全部読み込んだあとにまとめて表示するようにした方が良い?
#include <stdio.h>
#define MAX 256
int main(int argc, char **argv)
{
FILE *fp;
double a, b;
while(argc-- > 1){
fp = fopen(argv[argc], "r");
if(fp == NULL){
fprintf(stderr, "Cannot open %s\n", argv[argc]);
continue;
}
while(fscanf(fp, "%lf %lf", &a, &b) != EOF)
printf("%f %f\n", a, b);
fclose(fp);

}
return 0;
}




470 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 13:18:52 ]
ライブラリ使ったほうが正確

471 名前:デフォルトの名無しさん [2008/11/09(日) 14:43:22 ]
>>415
返信遅れてすいません。
cinとcoutはやりました。
でも授業が難しいのでなかなか理解できないんですよね。。。


472 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 15:00:33 ]
[1] 授業単元: C,C++、データ圧縮LZ78符合
[2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。
      データ列:ABCBCBCDEBCDABCD
コンソールアプリケーションで作成すること。
      画面には最低限以下のものを出力すること。
      【1】与えたデータ列
      【2】作成した辞書の一覧
      【3】符号化したデータ列
[3] 環境
 [3.1] OS: WindousXP
 [3.2] コンパイラ名とバージョン: VisualStudio2005
 [3.3] 言語: C,C++どちらでも可
[4] 期限:2008年11月13日まで
[5] その他の制限: 標準ライブラリ可

よろしくお願いします。


473 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 15:13:53 ]
>>458
構造体は使っても大丈夫です。

474 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:17:50 ]
[1] 授業単元:C言語

[2] 問題文(含コード&リンク):
入力した値までの素数を列挙させるプログラムを作成せよ。
例)整数を入力:5
2は素数です
3は素数です
5は素数です

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VisualStudio2005
 [3.3] 言語:C/C++/どちらでも可

[4] 期限: 2008年11月12日まで
[5] その他の制限:for文まで。できるだけ簡潔に。

よろしくお願いします。

475 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:32:24 ]
>>474
なにも考えないDQNメソッドだけど
#include <stdio.h>
int main()
{
int i, j, n;
printf("整数を入力:");
scanf("%d", &n);
for(i = 2; i <= n; i++) {
for(j = 2; j < i; j++){
if (i % j == 0)
break;
}
if (j >= i)
printf("%d は素数です\n", i);
}
return 0;
}


476 名前:学生 [2008/11/09(日) 16:46:51 ]
1から1000までの正の整数において、13の倍数の個数を出力するプログラム

よろしくお願いします

477 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:47:53 ]
>>456
ありがとうございます!
面倒だったようで申しわけないです

478 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:48:32 ]
>>476
#include <stdio.h>
main(){
printf("%d\n", 1000/13);
}


479 名前:学生 [2008/11/09(日) 16:48:35 ]
訂正
マイクロソフトビジュアルベーシックC++で作成



480 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:50:17 ]
>>479
>>476
#include <stdio.h>
int main(){
printf("%d\n", 1000/13);
return 0;
}


481 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:01:36 ]
>>472
C++です。VS2008で確認。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7982.txt

482 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:51:28 ]
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7983xt

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] C
[4] 期限:11月10
[5] その他の制限:出来るだけ簡単に

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

483 名前:482 mailto:sage [2008/11/09(日) 18:52:44 ]
URL訂正します
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7983.txt

484 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 19:11:25 ]
>>483
#include <stdio.h>

int main(int argc, char *argv[])
{
unsigned int i, n;
char str[21];

puts("符号なし32ビット整数を入力してください。");
scanf("%u", &n);
printf("%u が格納されている先頭アドレスは 0x%p です。\n", n, &n);

puts("20文字以内の文字列を入力してください。");
scanf("%s", str);
printf("%s が格納されている先頭アドレスは 0x%p です。\n", str, str);
for (i = 0; str[i] != '\0'; i++) {
printf("%c が格納されているアドレスは 0x%p です。\n", str[i], &str[i]);
}
return 0;
}

485 名前:457 ◆zeyvxEAaZQ mailto:sage [2008/11/09(日) 21:08:03 ]
期限を11月9日23:30までにするので>>457をどうかお願いします。

486 名前:デフォルトの名無しさん [2008/11/09(日) 22:53:54 ]
1] 授業単元:プログラム
[2] 問題文(含コード&リンク):遺伝的プログラムで木構造に新しいノードを追加しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月11日まで
[5] その他の制限:
お願いします。

487 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 22:59:03 ]
>>486
遺伝的プログラムってだけ言われても困るぞwwwwwwww
他になんか情報はないのか

488 名前:デフォルトの名無しさん [2008/11/09(日) 23:17:23 ]
>>487
例えばどういう情報があればいいですか?

489 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 23:22:37 ]
>>485

cで書けと?



490 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 23:23:59 ]
>>475
ありがとうございました。助かりました。

491 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:34:44 ]
[1] 授業単元:C
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7984.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限:11/11
[5] その他の制限:特になし

よろしくお願いします

492 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:43:01 ]
宿題丸投げするつもりはないんだが質問させてくれないか
bccコンパイラを使っているんだ。

プログラムの実行時間測定に
#include <sys/time.h>
を参照したいんだがtime.hがどうも入ってないみたいなんだ。
標準搭載されてる関数で少数点以下まで実行時間を計れるものってないかな?

493 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:52:26 ]
#include <time.h>
じゃねーの?

494 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:59:37 ]
#include <sys/timeb.h>
だと思うが、Linux使いなので詳しくはしらないが
struct timeb now;
int millisec;

ftime(&now);
millisec = now.millitm; /* これがミリ秒らしい */
こんな感じだと思う。
詳しくは、ググるかヘッダファイル読め。

495 名前:493 mailto:sage [2008/11/10(月) 01:01:04 ]
俺がいってたのは
#include <time.h>
のclock()ね


496 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:02:14 ]
>>493
俺の探し方がアホなだけかもしれんが、#include <time.h>だと少数点以下まで測れる方法が見つからなかったんだorz
>>494
ありがとう
参考にする

497 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:04:32 ]
>>495
ΣΣclock!!
見落してた マジサンキュ やってみる

498 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:26:15 ]
>>489
C++でお願いします。

10日の18:00まででいいのでどうかお願いします!

499 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:27:58 ]
>>498

クラスを使うなと書いてあるが?
そこだけ関数?



500 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:33:51 ]
[1] 授業単元:C言語
[2] 問題文 
 初期設定された任意の文字列の順序を,逆に並べ換えるプログラムをつくりなさ
い。ただし,並べ換える部分を関数にして,関数には文字列を引数として渡しなさい。
文字列の例としては,
char str[] = "My name is Tarou Tanaka";
のように自分の名前を用いてみなさい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2008年11月12日 24:00
[5] その他の制限:
・次のようなプロトタイプ宣言をもつ関数reverse を定義すること。
void reverse(char *);
・引数で渡された文字列自身が逆順になること。

C言語の基本関数のみでよろしくお願いします。

501 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:37:34 ]
>>499
構造体はつかっていいらしいかららクラスと差し替えちゃえばいいんじゃね

502 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:57:40 ]
>>499
クラスは使わず、構造体でお願いします。

503 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:10:50 ]
>>502
ほんとうにいいんだな
構造体にコンストラクタとデストラクタとメンバ関数つけられるぞ?

504 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:11:50 ]
>>500
void reverse(char * s)
{
size_t len = strlen(s); /* 文字列の長さ */
size_t half_len = len / 2; /* 文字列の半分の長さ */
size_t i;

for ( i = 0; i < half_len; ++i ) {
char tmp = *((s + len - 1) - i);
*((s + len - 1) - i) = *(s + i);
*(s + i) = tmp;
}
}
こんなのでいいかな。

505 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:21:28 ]
[1] 授業単元:Cプログラミング
[2] 問題文:
#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE];
infile = fopen("sample61a.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
return 0;
}
for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("\n");
return 0;
}

506 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:21:58 ]
505の続きです。

このプログラムを改造し、データの値を奇数と偶数に分けそれぞれ合計値・個数・平均値を出力せよ。
その際奇数データの数、偶数データの数がそれぞれゼロの場合は平均値を求めないようにせよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:Microsoft Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:11月11日

締め切りが急ですみません。
さっぱりわからなくなってしまったので、良ければよろしくお願いします。

507 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:39:50 ]
>>504

ありがとう!

508 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:45:05 ]
>>505
#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE], sum[2]={0}, num[2]={0};
char *str[2] = {"奇数", "偶数"};

infile = fopen("sample61a.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
return 0;
}

for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
sum[data[i]%2] += data[i];
num[data[i]%2]++;
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("\n");

for(i=1; i>=0; i--){
printf("%s:合計値%d, 個数%d個", str[i], sum[i], num[i]);
if(num[i] > 0) printf(", 平均値:%f", (float)sum[i] / (float)num[i]);
printf("\n");
}
return 0;
}

509 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:46:41 ]
あ、奇数と偶数の表示が逆



510 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:52:08 ]
[1] 授業単元: OS
[2] 問題文(含コード&リンク):
ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF タイマーを用いて、プロセスのプロセッサ利用状況を測定するソフトウェアを実装する。
出力には、実行の経過時間、プロセッサ時間、ユーザ空間時間、カーネル空間時間が含むこと。
詳細
(1)すべての時間はミリ秒の分解精度を持つこと
(2)1秒毎にsignalを発生させ、経過した秒数をカウントする
(3)再帰を用いたFibbonacci数を計算するプログラムを子プロセスとした実行結果をしめすこと
[3] 環境
 [3.1] OS: Linux Kernel 2.6.x
 [3.2] コンパイラ名とバージョン: gcc4.x
 [3.3] 言語: C言語
[4] 期限: 2008年11月12日12:00
[5] その他の制限: sigactionやitimervalを用いて実装するのが今回の目的です。時間を計るものはできたのですが、ミリ秒単位の分解精度をどうやって出すのかがわかりません。よろしくお願いします。


511 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:54:37 ]
510です。
稚拙ながらもソースコードを示します。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
int realSec = 0;
int profSec = 0;
int virtualSec = 0;
static void myHandler(int s) {
int errSave;
if (s == SIGALRM) realSec++;
else if (s == SIGVTALRM) virtualSec++;
else if (s == SIGPROF) profSec++;
}
static int setupInterrupt(void) {
struct sigaction act;
act.sa_handler = myHandler;
act.sa_flags = 0;
return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0;
}
static int setupitimer(void) {
struct itimerval value;
value.it_interval.tv_sec = 1; value.it_interval.tv_usec = 0;
value.it_value = value.it_interval;
return (setitimer(ITIMER_PROF,&value, NULL) == setitimer(ITIMER_VIRTUAL,&value, NULL) == setitimer(ITIMER_REAL,&value, NULL) == 0)? 0: -1 ;
}


512 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:56:23 ]
510です。続きです。
int main(int argc, char** argv) {
pid_t child, retVal;
struct itimerval real, virtual, profile;
int status;
if (setupInterrupt()) {
perror("Failed to set up handler for SIGPROF"); return 1;
}
if (setupitimer() == -1) {
perror("Failed to set up the ITIMER_PROF intervaltimer");return 1;
}
if (argc < 2){
fprintf (stderr, "Usage:%s command\n", argv[0]);return 1;
}
if ((child = fork()) == -1) {
perror("Failed to fork"); return 1;
}
if (child == 0) { // child code
execvp(argv[1], &argv[1]);
perror("Child failed to execvp the command");
return 1;
} else { // parent code
while((retVal = waitpid(-1, &status, WNOHANG)) != child);
getitimer(ITIMER_REAL, &real);getitimer(ITIMER_PROF, &profile);getitimer(ITIMER_VIRTUAL, &virtual);
//ここも要修正
printf("real = %d.%ld", realSec, 1000000 - real.it_value.tv_usec);
printf(" virtual = %d.%ld", virtualSec, 1000000 - virtual.it_value.tv_usec);
printf(" profile = %d.%ld\n", profSec, 1000000 - profile.it_value.tv_usec);
}
}
よろしくお願いします。

513 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 03:19:23 ]
[1]授業単元:C言語
[2] 問題文:次のことを行うプログラムを,for文を用いて作成しなさい。
10個の要素をもつ整数配列dataを初期化して宣言する。
配列要素の中の最大値と最小値を出力しなさい。
なお,配列要素の値として,すべて負のものがあるデータも試してみること。
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ名とバージョン:VC++ 6.0
[3.3] 言語:C言語
[4]期限:なし

初歩的な問題で申し訳ないですが、よろしくお願いします。

514 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 03:30:10 ]
>>513
#include <stdio.h>
#define SIZE 10
int main() {
//int data[SIZE] = {83,28,35,84,43,21,8,51,2,12};
int data[SIZE] = {-83,-28,-35,-84,-43,-21,-8,-51,-2,-12};
int min, max;
int i;

min = max = data[0];
for (i = 1; i < SIZE; i++) {
if (data[i] > max) {
max = data[i];
} else if (data[i] < min) {
min = data[i];
}
}
printf("min = %d, max = %d\n", min, max);
}



515 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 05:45:39 ]
>>503
はい、お願いします。

516 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 05:47:28 ]
追記

>>503
クラス使わないで、構造体で作って動けば問題ないのでお願いします。

517 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 08:36:06 ]
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7985.txt
[3] 環境:
 [3.1] WindowsVista
 [3.2] Borland C++Compiler
 [3.3] C言語
[4] 期限: 2008年11月10日23:59まで

518 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:02:31 ]
>>514
ありがとうございます!

519 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:12:11 ]
>>517

#include <stdio.h>
void main(void){
int i,t;t=0;
for(i=1; i<=100; i++){if(i %3 == 0){printf("%d \n" ,i);t++;}}
printf("\n total %d\n",t);}



520 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:43:48 ]
>>511
どうでもいいところかもしれんが

return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0;

これ、意図したとおりに動くの? A == B は A と B が等しかったら 1 を返すよ

一つでも 0 以外のを返したら、とやりたいんだったら && とか使うべし

521 名前:デフォルトの名無しさん [2008/11/10(月) 13:44:10 ]
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7986.txt
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月12日
[5] その他の制限: 特になし

よろしくお願いします。

522 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:06:25 ]
>>521 該当箇所だけ。push, pop はもうできてるんでしょ?
while(!isempty()) {
y = pop();
x = pop();
if (map[y][x] == ' ') {
map[y][x] = '*';
/*ここを適切に埋める(3) */
// up
push(x);
push(y - 1);
// down
push(x);
push(y + 1);
// left
push(x - 1);
push(y);
// right
push(x + 1);
push(y);
/*塗るたびにマップを表示する */
for(y = 0; y < 7; y++)
printf("%s\n", map[y]);
printf("\n");
}
}


523 名前:374 mailto:sage [2008/11/10(月) 14:22:12 ]
すいません誰か>>374をお願いします。もう締め切りも近いのでどうか頼みます

524 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:28:40 ]
>>508
ありがとうございます!助かりました!

525 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:37:57 ]
>>523
1年分ってのは、入力した年の1月から12月を表示すればよいのか
入力した月から翌年の同月-1 を表示すればよいのか
入力した月を含む前後6か月を表示すればよいのか


526 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:02:16 ]
>>523
カレンダーは >> 525 の返答次第
フィボナッチその1
#include <stdio.h>
int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);
for(i = 0; i < num; i++){
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
}
return 0;
}


527 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:02:58 ]
>>523
フィボナッチその2
#include <stdio.h>

int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);

i = 0;
while(i < num){
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
i++;
}
return 0;
}


528 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:03:33 ]
>>523
フィボナッチその3
#include <stdio.h>

int main()
{
int i, f0 = 0, f1 = 1, f2 = 1, num;
printf("num:");
scanf("%d", &num);

i = 0;
do{
printf("f[%d]:%d\n", i, f0);
f2 = f1 + f0;
f0 = f1;
f1 = f2;
i++;
} while(i < num);
return 0;
}


529 名前:初心者 [2008/11/10(月) 15:59:23 ]
[1] 授業単元:
[2] 問題文(含コード&リンク):
★下記の仕様を満たすプログラムをC言語で作成しなさい.

【仕様】日数計算プログラム

▼今日の日付と生年月日を入力すると,今日が生年月日から数えて何日目にあたるかを表示する.西暦・月・日をスペースで区切って入力する.
▼この場合,「うるう年」を考慮しなければならない.「うるう年」の条件は,
@西暦が4で割り切れる.
Aただし,西暦が100で割り切れる年は除く.
Bただし,西暦が400で割り切れる年は含める.
▼「今日は、あなたが生まれた日から数えて〜日目です。」と表示する.
▼計算式は,(西暦1年1月1日から今日までの日数)−(西暦1年1月1日から生年月日までの日数)を使えばよい.
▼生年月日が今日の日付より後になっているときは,「生年月日が今日の日付より後になっています!」とエラーメッセージを表示する.
▼最低限,次の関数を使うこと.
@main関数(これは当たり前ですが)
A入力された値が計算に適切な値かをチェックする関数(4月31日などありえない日付を入れると,「年月日が正しい範囲にありません」と表示する)
B日付を計算する関数
▼日付の入力やメッセージの表示はmain関数で行うこと(ポインタに関する課題なので参照渡しを使うこと).

[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン: 分からないです。
 [3.3] 言語: C言語
[4] 期限: 今週中ぐらい
[5] その他の制限: 繰り返し文、条件判断文、ポインタを使ってお願いします。
初心者なので、初心者にも分かるようなプログラムをお願いします。



530 名前:デフォルトの名無しさん [2008/11/10(月) 16:09:07 ]
課題が出たんですが、まったく手に負えません、、、、、
ぜひ、教えてください!
今、XPでvisualを使ってます。

『課題』
円周率πの値を近似式

π≒4Σ(←n=0から100で)(ー1)^n×(2n+1)^(−1)×{(0.5)^(2n+1)+(3)^(ー2nー1)}
を用いて、小数第8位まで正しい値(3.14159265)を出力し、
そのπの値を用いて入力された数値εに大して、次の不等式を満たす最小の自然数Nを求めるプログラムを作れ。
|(π^2/6)-Σ(←k=1からN)k^(-2)|<ε

531 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:32:39 ]
viの正式名称なんて久しぶりに見たな

532 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:45:16 ]
>>530
こんなんでいい?
#include <stdio.h>
#include <math.h>

int main (void)
{
int i;
double pi, sum, eps;

sum = 0.0;
for(i=0; i<=100; i++){
pi = 4.0 * (sum += pow(-1, i) / (2*i + 1) * (pow(0.5, 2*i+1) + pow(3, -2*i-1)));
}
printf("π≒%.8f\n", pi);

printf("ε:");
scanf("%lf", &eps);

i = 1; sum = 0.0;
while(fabs(pi*pi/6 - (sum += pow(i, -2))) >= eps)
i++;
printf("N = %d\n", i);

return(0);
}

533 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:06:14 ]
誰か>>457をお願いします。
期限は今日中で良いのでお願いします!

534 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:48:20 ]
printf("ε:");
かわいいな

535 名前: ◆25LbU5YSxg mailto:sage [2008/11/10(月) 18:09:49 ]
[1] 授業単元:プログラミング演習
[2] 問題文:
プログラム1を改良し、データをファイルから読み込みつつ小さい順にソートして格納するプログラムを作成せよ、。
手順を以下に示す。
1.cell構造体へのポインタとして、struct cell *new、*start、*p1、*p2;の4つを準備し、それぞれNULLで初期化する。
2.データファイルからデータ数を読み込む。
3.データを1つ読み込み、cell構造体を作成してnewにセットした後、その構造体に格納。
  ・はじめてのデータであれば、ポインタstartとp1をnewにセット。
  ・2つ目のデータであれば、p2をnewにセットし、p1が示すリスト要素(構造体)の次に追加接続する。
   ただし、2つ目のデータが1つ目のデータよりも小さい場合には、p1とp2の指す構造体内のデータを入れ替える。
   もしくはリスト要素(構造体)自体の位置を入れ替えポインタをセットし直す必要があることに注意。
  ・3つ目以降のデータであればリスト先頭から順に走査を行う。この際、p1、及びp2をそれぞれ1つずつリスト内の次の要素に進めてゆく。
   。読み込まれたデータが、リスト先頭要素(構造体)の持つ値より小さい場合には、新規作成された構造体newをリスト先頭に追加し、ポインタstartをnewにセットする。
  
   。リスト途中で、p1には読み込まれたデータより小さい値、p2には読み込まれたデータより大きい値となる場所が見つかれば、この間に新規作成された構造体newを挿入する。
  
   。リスト最後尾まで読み込まれたデータより大きい値が見つからなければ、新規作成された構造体newを最後尾に追加する。
4.3をデータ入力数だけ繰り返す。
5.全てのデータを読み込み終えたら、リスト先頭から順にデータを出力する。

num-data.txt
5
23
43
67
14
9



536 名前: ◆25LbU5YSxg mailto:sage [2008/11/10(月) 18:15:43 ]
プログラム1
#include<stdio.h>
struct cell{
int data;
struct cell *next; };
int main(void){
int num;
struct cell *new, *start, *ptr;
new = NULL;
start = NULL;
ptr = NULL;
while(1){
scanf("%d",&num);
if(num == -1){ break; }
new= (struct cell *)malloc(sizeof(start));
if(new == NULL){ fprintf(stderr,"Error!:malloc short(struct cell).\n"); }
new->data = num;
new->next = NULL;
if(ptr == NULL){
start = new;
ptr = new;
}else{
ptr->next=new;
ptr = new; } }
ptr = start;
while(ptr != NULL){
printf("%d\n",ptr->data);
ptr=ptr->next; }
return 0;}
[3] 環境 [3.1] OS: Linux[3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C
[4] 期限:2008年11月21日17:00まで


537 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 18:18:32 ]
>>529
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7988.txt
参照渡しをする合理的理由がみあたらないので抜きで作った。
どっか適当に変えてくれ

538 名前:374 mailto:sage [2008/11/10(月) 19:36:44 ]
>>525>>526
カレンダーは入力した年の1月から12月を表示するものでよかったです。

>>526-528
助かります。本当にありがとうございます

539 名前:525 mailto:sage [2008/11/10(月) 20:03:17 ]
>>538
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7989.txt



540 名前:374 mailto:sage [2008/11/10(月) 20:27:03 ]
>>539
もうなんとお礼を言えばよいのかわかりません。本当にありがとうございました。

541 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 21:12:16 ]
>>535
#include<stdio.h>
#include<stdlib.h>
struct cell {
int data;
struct cell *next;
};
int main(void){
int num;
struct cell *new, *start, *p1, *p2;
new = start = p1 = p2 = NULL;
while (1) {
scanf("%d", &num);
if (num == -1) break;
new = (struct cell *) malloc(sizeof(start));
if (new == NULL) { return 1; }
new->data = num;
new->next = NULL;
for(p1=start,p2=NULL; (p1) && new->data > p1->data; p2=p1, p1=p1->next);
if(p2){
p2->next = new;
new->next = p1;
}else{
new->next = start;
start = new;
}
}
for (p1=start; (p1); p1=p1->next) { printf("%d\n", p1->data); }
return 0;
}

542 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 22:01:28 ]
[1] 授業単元:プログラミングC演習
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7991.txt
[3] 環境
 [3.1] OS: Unix
 [3.2] コンパイラ名とバージョン: gcc(versionは不明
 [3.3] 言語: C
[4] 期限: 2008年11月13日(木曜日)12:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・ポインタをメインに使用してください

よろしくお願いします

543 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:11:51 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7992.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月12日
[5] その他の制限:

よろしくお願いいたします。

544 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:14:37 ]
>>542
malloc は ok なの?
最大長とか単語数は別プログラムで調べるんだったらいいけど、
一度にやるんだったら必ず必要だよ

545 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:22:34 ]
>>543
printf("学籍番号:%d 氏名:%s\n",
p->id, p->name);
○○○   //pに次の構造体のポインタを代入
   ↑↑↑
ここを p = p->next とやるだけでとりあえず動くものはできるけど・・・

List3 は点数を取り込んでないよね。点数を取り込むようにしたいの?
読み込むデータのサンプルはないの?

546 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:25:53 ]
>>542
ツッコミどころが多すぎるんだが・・・

とりあえず
- char *dict[999], *input[50]
+ char dict[999][100], input[50][100]
として、適当に文字列を格納する領域を確保しておくこと。

勘違いだと思うけど
- for(i = 0; scanf("%s",input[i]) != '\n'; i++);
+ for(i = 0; scanf("%s",input[i]) == 1; i++);

添字が逆
- judge = compare( dict[j], input[k]);
+ judge = compare( dict[k], input[j]);

それから、そもそも input[j] に入っているのは標準入力から得た一行だから、単語ごとに分割する処理が必要

547 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:36:49 ]
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
10 個の要素をもつ整数配列data を初期化して宣言する。
配列の隣り合った添え字のデータ同士の差(data[i] – data[i-1])を調べる。
その値が,最も大きなものを探し,データの差がい
くつなのか,添え字の何番と何番との間の差なのか出力しなさい。
最大のものが複数あったときには,添え字の最も大きなものを出力すること。
例えば,data[10]={-6,4,7,-3,-1,9,5,-5,4,6}
で初期化したときには,4 と5 の間の10 が最大となる。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 6.0
 [3.3] 言語:C言語
[4] 期限:11/14
[5] その他の制限:特になし

よろしくお願い致します。

548 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:45:02 ]
>>547
6,7番目の間の10が最大値になる?

549 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:46:40 ]
>>547
素直に書いてみた
差の絶対値じゃなくて差の比較だけでいいんだよね?
#include<stdio.h>
#define N 10
int main(){
    int data[N]={-6,4,7,-3,-1,9,5,-5,4,6};
    int*max_diff = data;
    int*it;
    for(it=data+1;it!=data+N-1;++it)
        if(1[max_diff]-0[max_diff] <= 1[it]-0[it])
            max_diff = it;
    printf("%dと%dの間の差%dが最大\n",
        max_diff-data,max_diff-data+1,1[max_diff]-0[max_diff]);
    return 0;
}



550 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:50:44 ]
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
一次元配列を用いて5人分の得点を100点満点で入力し、平均値を画面およびファイルに書き出すプログラムを作成しなさい。
書き出し用ファイル名はave.txtとする。
[3] 環境:
 [3.1] Windows Vista
 [3.2] Borland C++
 [3.3] C言語
[4] 期限: 11月11日12:00

昼すぎ提出なので時間があまりないですが、どなたかお願いします。

551 名前: ◆8w4FYxc7TQ [2008/11/11(火) 00:52:24 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
三つの数字a,b,cを入力したとき、大きい順に出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 9.0
 [3.3] 言語:C++
[4] 期限:11/12
[5] その他の制限:
この問題で使えそうなものは、if、もしくはswitchしか習っていないので、それでお願いします。

自分でif文を使って組み立てると、どうしても思い通りに並べてくれません…
どうかよろしくお願いします。

552 名前:デフォルトの名無しさん [2008/11/11(火) 01:11:20 ]
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7993.txt
[3] 環境
 [3.1] OS: (Windows vista)
 [3.2] コンパイラ VisualStudio2005
 [3.3] 言語: C言語
[4] 期限: 2008年11月13日15:00まで
[5] その他の制限: (C言語検定2級程度の途中まで習ってます)

すいません、お願いします


553 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:17:33 ]
>>491お願いできませんか?

554 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:25:42 ]
>>549
はい、差の比較のみです。
言葉が足りなくてすみません。
ありがとうございました!

555 名前:521 [2008/11/11(火) 01:34:59 ]
>>522
ありがとうございます。

誰か、もう一つの課題のほうもお願いいたします。

556 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:46:23 ]
>>550
#include <stdio.h>

int main(void)
{
int i, score, sum=0;
FILE *fp;

for(i=1; i<=5; i++){
printf("%d人目:", i);
scanf("%d", &score);
sum += score;
}
printf("平均値:%f\n", (double)sum / 5.0);

if((fp = fopen("ave.txt", "w")) == NULL){
printf("ファイルが開けません\n");
return 1;
}
fprintf(fp, "平均値:%f\n", (double)sum / 5.0);
fclose(fp);

return 0;
}

557 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:48:54 ]
ああ、配列使うのか
#include <stdio.h>

int main(void)
{
int i, score[5], sum=0;
FILE *fp;

for(i=0; i<5; i++){
printf("%d人目:", i+1);
scanf("%d", &score[i]);
sum += score[i];
}
printf("平均値:%f\n", (double)sum / 5.0);

if((fp = fopen("ave.txt", "w")) == NULL){
printf("ファイルが開けません\n");
return 1;
}
fprintf(fp, "平均値:%f\n", (double)sum / 5.0);
fclose(fp);

return 0;
}


558 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:57:47 ]
>>551
if(a < b){
tmp = a;
a = b;
b = tmp;
}
if(a < c){
tmp = a;
a = c;
c = tmp;
}
if(b < c){
tmp = b;
b = c;
c = tmp;
}

559 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:18:50 ]
>>481
お礼おくれて申し訳ありません。
助かりました。ありがとうございます。



560 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:33:03 ]
>>556-557
ありがとうございます助かりました!
一次元配列使うんです、まぎらわしくてすいません。
二度もありがとうございました。

561 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:39:30 ]
>>552
2番はちょっと余計なこともしてるけど
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7994.c

562 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:37:42 ]
>>561
rewind(stdin)なんて標準以外の使い方すんなカス

563 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:49:35 ]
[1] 授業単元:
[2] 問題文
0〜9の数字のみからなる文字列を引数として受け取り、
同じ数字並びの整数を返す関数ascii2int()を作り、動作を
確認せよ。ただし、非負の整数のみ考える。
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 11月15日

564 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:56:49 ]
[1] 授業単元:スタック
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7996.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C
[4] 期限:2008/11/12
[5] その他の制限:なし

すいませんが、よろしくお願いします!



565 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 06:51:39 ]
>>562
これで許してくださいorz
scanf("%*[^\n]\n");

566 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 06:59:11 ]
>>563
#include<stdio.h>
int ascii2int(const char* str){
int r=0;
while(*str){
r*=10;
r+=*str-'0';
str++;
}
return r;
}
int main(){
char* a = "12345";
printf("%d\n",ascii2int(a));
}

567 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:36:20 ]
>>564
なんかへたくそでごめん。。
#include<stdio.h>
#define N 100
int n,cnt=0,c[N],b[N];
void solve(int a_top,int b_top,int c_top){
if(a_top>n && b_top==0){
int i;
for(i=0;i<n;i++)printf("%d",c[i]);
printf("\n"); cnt++;
}
if(a_top<=n){
b[b_top++] = a_top++;//a->b
solve(a_top,b_top,c_top);
b[--b_top] = --a_top;//b->a
}
if(b_top>0){
c[c_top++]=b[--b_top];//b->c
solve(a_top,b_top,c_top);
b[b_top++]=c[--c_top];//c->b
}
}
int main(){
printf("n:"); scanf("%d",&n);
if(n>0) solve(1,0,0);
printf("%d\n",cnt);
}

568 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:40:51 ]
>>558
ありがとうございます!
やってみます!

569 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:52:57 ]
>>555
2回に分けて。
#include<stdio.h>
#define STACKSIZE 100
typedef struct _Point{
int x,y;
}point;
static int sp = 0;
static point stack[STACKSIZE];
void push(point p){
[sp++] = p;
}
point pop(void){
return stack[--sp];
}
int isempty(void){
return sp == 0;
}




570 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:54:32 ]
//上の[sp++] = p;はstack[sp++] = p;のミス!!
int main(void){
char map[7][11] = {
"**********",
"* * *",
"* *****",
"* ** * *",
"* * *",
"* * * *",
"**********",
};
point p;
int x,y;
p.x=2; p.y=1; push(p);
while(!isempty()){
p=pop(); x=p.x; y=p.y;
if (map[y][x] == ' '){
map[y][x] = '*';
p.x=x; p.y=y-1; push(p); // up
p.x=x; p.y=y+1; push(p); // down
p.x=x-1; p.y=y; push(p); // left
p.x=x+1; p.y=y; push(p); // right
for(y = 0; y < 7; y++) printf("%s\n", map[y]);
printf("\n");
}
}
return 0;
}


571 名前:564 mailto:sage [2008/11/11(火) 09:00:54 ]
>>567
こんなに早く対応していただけて助かります。
ありがとうございます!

572 名前:デフォルトの名無しさん mailto:age [2008/11/11(火) 10:08:37 ]

[2] 1. define文を使ってN以下の素数を全て求めよ
  2. 関数 f(t)=t^5-t の区間 [0,2] での値を 0.1 刻みで表示するプログラムを作れ
[3]
 [3.1] OS : Linux
 [3.2] ?
 [3.3] 言語 : C
[4] 期限: 11/12
[5] その他の制限:初歩の初歩です。難しすぎるのはよく分かりません

どなたかよろしくお願いします


573 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:06:09 ]
1こめ
#include<stdio.h>
#define N 100
int main(){
int s[N],i,j;
for(i=0;i<N;i++) s[i]=1;
s[0] = s[1] = 0;
for(i=2;i<N;i++){
if(!s[i]) continue;
for(j=i+i;j<N;j+=i){
s[j]=0;
}
}
for(i=0;i<N;i++){
if(s[i]) printf("%d\n",i);
}
}

574 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:14:17 ]
>>573
define文を使うって、#define N 100 ← これだけでいいのかww

575 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:15:35 ]
えっ?だめ??勘違い?(´・ω・`)

576 名前:デフォルトの名無しさん [2008/11/11(火) 11:58:52 ]
>>521じゃないけど分からないので質問。>>522の通りにやっても何も表示されないので
たぶん確実に違うisemptyのどこが駄目でしょうか?あとpush,popもおかしかったら教えてください。

void push(int x){
if(sp == 100){
printf("stack is fill.\n");
}
else{
stack[sp]=x;
sp++;
}
}
int pop(void){
if(sp == 0){
printf("stack is empty.\n");
}
else{
sp--;
return(stack[sp]);
}
}

int isempty(void)
{
if(sp ==100)
printf("1");
if(sp ==0)
printf ("0");
}

577 名前:522 mailto:sage [2008/11/11(火) 12:03:42 ]
>>576
void push(int val)
{
stack[sp++] = val;
}
int pop(void)
{
return stack[sp-- - 1];
}
int isempty(void)
{
/*スタックが空なら1、空でないなら0を返す関数 */
return sp == 0 ? 1 : 0;
}


578 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:08:04 ]
stack[sp++] = val;
は普通だけど、
return stack[sp-- - 1];
って書き方がすごくきもく見えるw

579 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:13:05 ]
return stack[--sp];
だよなぁ常考



580 名前:522 mailto:sage [2008/11/11(火) 12:37:34 ]
>>578>>579
貼ってから自分でもそうオモタ

581 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:59:00 ]
個人的に
論理式?1:0;とかif(論理式!=0)とかif(論理式==0)
って書き方が好きじゃない。冗長な感じがして。

582 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:01:58 ]
真の時に1を返すと保障されている処理系ならば return sp == 0; でもいいんだけどね


583 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:03:56 ]
C言語は保証されてる

584 名前:デフォルトの名無しさん [2008/11/11(火) 14:01:00 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
以下のプログラムを英文清書プログラムに書き換えよ。
元のプログラム
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7997.c
条件
・文の先頭は大文字、それ以外は小文字。
・アルファベット以外の文字は変換しなくてよい。
・改行、スペース、タブにより単語の区切りとする。また文末は改行コードではなくピリオド"."で判定する。
・\endまたは\ENDを挿入するとそのプログラムを終わるようにする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2008/11/12 23:59まで
[5] その他の制限: 特にないです。
すみませんが、よろしくお願いします。

585 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 14:34:13 ]
INExp.hって??

586 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 15:28:24 ]
isalphaとtoupper使えればいいのかな
ピリオド検索はstrstrで ポインタアドレスの差を文字列長にもしてげへへへ

587 名前:デフォルトの名無しさん [2008/11/11(火) 16:00:13 ]
[1] 授業単元:単方向線形
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8000.c
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 11/18
[5] その他の制限: 特になし

全く分かりません。宜しくお願いします

588 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 16:12:52 ]
>>587
うそつけw
考える気がないだろw

589 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:34:32 ]
それを言ったらこのスレの存在意義がなくなるわけだが



590 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:36:25 ]
どこのスレにだって黙ってればいいのに野暮ったい突っ込みする奴居るじゃん。

591 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:18:38 ]
>>573
ありがとうございます

592 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:19:28 ]
>>587
超めんどくさい!cの単方向リスト嫌い!
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8001.txt

593 名前:576 mailto:sage [2008/11/11(火) 18:22:40 ]
>>577
ありがとうございます。>>522と合わせてプログラムにしてみたんだが何もマップされないんです。

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8002.txt

自宅のubuntuのgcc(おそらくでやってるんですが環境のせいですか?変なところあったら指摘お願いします。


594 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:24:58 ]
printf("%s\n", map[y]);


595 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:25:43 ]
ごめんかんちがい

596 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:28:38 ]
あ!コピペミスってるだけじゃん〜

597 名前:デフォルトの名無しさん [2008/11/11(火) 18:49:43 ]
a

598 名前: ◆25LbU5YSxg mailto:sage [2008/11/11(火) 18:52:30 ]
>>541
遅れましたが、解答ありがとうございました。


599 名前:577 mailto:sage [2008/11/11(火) 19:21:30 ]
>>593
map データがなんだかやせ細ってるよ



600 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:20:46 ]
1] 授業単元: C言語
[2] 問題文(含コード&リンク):
(1) 単項式を入力された順に出力されるように変更する
(2)入力した単項式を次数の大きい順にするに出力されるように変更する
ソースは以下を参考にしてください、たらない変数は任意で増やしてけっこうです
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8003.txt
(1)と(2)は別解答

[3] 環境
 [3.1] OS: Win
 [3.2] コンパイラ名とバージョン: 任意
 [3.3] 言語: C
[4] 期限: 2008年11月14日13:30まで
期限が迫ってるのでお願いします


601 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:28:18 ]
この問題昔見たなw

602 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:32:57 ]
すいません
前スレあたりで載せたんですがスルーだったようで自力でやろうとしたけど無理だったので再度^^;
最終期限がすぐであせってます

603 名前:576 mailto:sage [2008/11/11(火) 20:35:35 ]
なんというミス(^o^)
みなさまありがとうございました。明日も生きていけそうです。

604 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:37:29 ]
[1] 授業単元: 文字列操作
[2] 問題文:
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8004.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] cc
 [3.3] C
[4] 期限:2008年11月12日15:00まで
[5] その他の制限:問題文中に出てくる、frequency.c を利用せよ、とありますので、
なるべくそれを基盤にするようにお願いします。

↓途中まで考えてみたものです。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8005.txt

605 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:45:38 ]
>>604
1問目
freqency.c の出力部分を以下のように修正
for(i = 0; i < 26; i++) { /* 結果出力 */
while(alpha[i]-- > 0)
printf("*");
printf("\n");
}


606 名前:605 mailto:sage [2008/11/11(火) 20:54:39 ]
>>604 2問目 main の中身だけ
char c;
int i, j, alpha[26], max = 0;
for(i = 0; i < 26; i++) /* 配列のクリア */
alpha[i] = 0;
c = getchar();
while(c != '\n') {
if (c >= 'a' && c <= 'z') { /* 英小文字の処理 */
alpha[c - 'a'] += 1;
if (alpha[c - 'a'] > max)
max = alpha[c - 'a'];
} else {
if (c >= 'A' && c <= 'Z') { /* 英大文字の処理 */
alpha[c - 'A'] += 1;
if (alpha[c - 'A'] > max)
max = alpha[c - 'A'];
}
}
c = getchar();
}
for(i = 0; i < max; i++) {
for(j = 0; j < 26; j++) { /* 結果出力 */
if (alpha[j] >= max - i)
printf("* ");
else
printf(" ");
}
printf("\n");
}
for(j = 0; j < 26; j++) /* 結果出力 */
printf("%c ", j + 'a');
printf("\n");

607 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:59:53 ]
すいません・・>>491をお願いします・・

608 名前:デフォルトの名無しさん [2008/11/11(火) 21:09:56 ]

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 問1、ユークリッドの法則を使ってn(n≦100)個の正整数の最大公約数を求めるプログラムを作れ
なお、最終的にはgcd(最大公約数を求める整数の羅列)=結果と画面上に表示するようにすること

問2、n個(n≦100以下)の正整数の最小公倍数を求めよ。
表示方法は先ほどの問いと一緒


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11/13
[5] その他の制限: int gcd(int x, int y)の関数を使用してください
あと、なるべく2つずつ比べるようにして、必ず大きい正数が変数xに入るようにしてください


609 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:15:18 ]
>>607
ボールの初速とか角度は風の影響が全く無いときに当たるようにすればいいの?
それとも投げたら絶対当たるように作るの?



610 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:18:17 ]
[1] 授業単元:C
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8006.txt
@2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい.
以下のプログラムを基にして完成せよ.
構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,原点からの距離を求める関数 length_vector_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体 Point型を使用して,平面の点を表示する関数 print_v_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
A2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい.
以下のプログラムを基にして完成せよ.
構造体 Point型は,double型の X座標と Y座標のメンバをもつ.
構造体 Point型を使用して,平面の点を表示する関数 print_v_p2を作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体 Point型を使用して,平面の点を代入する関数 input_point_pを作成する.
ただし,「構造体ポインタ変数」を利用すること.
構造体ポインタ変数に対して,動的にメモリ領域を確保する. malloc を利用する.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual stadio2008
 [3.3] 言語: C
[4] 期限: 2008年11月13日


611 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:21:25 ]
>>607
前者でお願いします

612 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:25:52 ]
>>600
とりあえず(1)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8007.txt

613 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:52:31 ]
>>608
n 個の正数は a[] に入力されているとして。
#include <stdio.h>

int gcd(int x, int y)
{
int r;
if (x < y) {
int t = x; x = y; y = t;
}
do {
r = x % y; x = y; y = r;
} while (r != 0);
return x;
}

int main(int argc, char *argv[])
{
int a[] = { 121, 11, 14641, 1331};
int n = 4;
int i, g;

g = a[0];
printf("gcd(%d", a[0]);
for (i = 1; i < n; i++) {
printf(", %d", a[i]);
g = gcd(g, a[i]);
}
printf(") = %d\n", g);
return 0;
}

614 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:57:28 ]
[1] 授業単元: 自作関数
[2] 問題文(含コード&リンク):

5つの数値を入力し(繰り返し入力)し、最大値を表示する。

[3] 環境
 [3.1] OS: Windowsvista
 [3.2] VC 6.0等
 [3.3] 言語: C

[4] 期限: 今日までなのでよろしくお願いします

[5] その他の制限:繰り返し文しかならってないです。

615 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:59:13 ]
>>614

>>614

#include<stdio.h>
int sori(int x, int y)
{
if( x>=y ) return(x);
return(y);
}
int main(void)
{ int a,b,c,d,e,max;
while ( scanf("%d%d%d%d%d",&a,&b,&c,&d,&e)==5) {
max=a;
max=sori(max,b);
max=b;
max=sori(max,c);
max=c;
max=sori(max,d);
max=d;
max=sori(max,e);
printf("%d %d %d %d %d",a,b,c,d,e);
printf("max=%d\n",max);
}
return (0);
}


616 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:00:00 ]
>>614
>>615
エラーメッセージ

エラー E2209 kadai6-1.cpp 1: インクルードファイル 'stdio.h' をオープンできない
エラー E2268 kadai6-1.cpp 9: 未定義の関数 'scanf' を呼び出した(関数 main() )
エラー E2268 kadai6-1.cpp 18: 未定義の関数 'printf' を呼び出した(関数 main()


上記のようなプログラムを自分で作ったのですが、
上に記したようなエラーメッセージが表示されてしまいました。
これ以上わかりません。どうかよろしくお願いします。




617 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:09:48 ]
>>616
Linux  だとちゃんとコンパイルできるから、ワークスペース作ってないとかの問題じゃないの?

以下の行を削除すれば、一応目的は達成できるぞ
max=b;
max=c;
max=d;

618 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:17:17 ]
>>617
試してみます。どうもありがとうございました。

619 名前:デフォルトの名無しさん [2008/11/11(火) 22:23:31 ]
コンパイルしたら
「配列または、ポインタでない変数に添字が使われました」って怒られたんですが
どう直せばいいでしょうか?




620 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:24:07 ]
あきらめてください


621 名前:デフォルトの名無しさん [2008/11/11(火) 22:25:41 ]
配列またはポインタでない変数に、添え字を使わないようにすればいい

622 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:28:28 ]
まずcppじゃなくてcにするとか


623 名前:619 [2008/11/11(火) 22:29:25 ]
>>621
ありがとう!

624 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:30:24 ]
てかsoriって関数名なんて意味?ソリ?サンタが乗ってるヤツ?

625 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:33:02 ]
飲み過ぎ食べ過ぎに、ソリマックス。

626 名前:604 mailto:sage [2008/11/11(火) 22:36:08 ]
>>604,605
素早い対応ありがとうございます。
すいません、問題文のとおりプログラムは1つだけなんです。
つまり、freqency.cを拡張して、横に伸びるグラフと縦に伸びるグラフを
同時に表示したいのです・・・。
605の方を別に作って試してみましたが、縦のグラフは表示できました。
(上の方で1つずつ空白分がずれるのは仕様でしょうか?)

604は、元のプログラムの出力部の変更のみで表示できました。
が、605と一緒にしなければならないので、どうにか605の大文字と小文字の処理を604と
同じくしてできないかと困っています。
よろしければ検討をお願いしたいです。

627 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:38:57 ]
>>626
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8008.txt
違う人だけど。

628 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:42:40 ]
>>626
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8009.txt

629 名前:デフォルトの名無しさん [2008/11/11(火) 22:51:20 ]
soriなんて名前付けてsorry・・・。



630 名前:お願いします [2008/11/11(火) 23:23:42 ]
[1] 授業単元: アルゴリズムデータ構造U
[2] 問題文(含コード&リンク):
複素数a,bを標準入力から入力し、それぞれの絶対値を求め、2つの複素数の和、差、積、商を求め
標準出力に出力するプログラムを作りたい。これらを求める関数として、複素数の絶対値を求める関数
および和、差、積、商を求める関数が
double cabs(struct mycomplex)
struct mycomplex wa(struct mycomplex,struct mycomplex)
struct mycomplex sa(struct mycomplex,struct mycomplex)
struct mycomplex seki(struct mycomplex,struct mycomplex)
struct mycomplex shou(struct mycomplex,struct mycomplex)
として作ることにした。これらの絶対値、和、差、積と商を求める関数を解答せよ
なおこの構造体は予めCの処理系には用意されているが、それを利用せず独立に考えよ。
[3] 環境
 [3.1] OS: Windows
 [3.2]
 [3.3] 言語: C

[4] 期限: 11月16日まで

[5] その他の制限:構造体の問題です 問題文に沿ってお願いします。

631 名前:604,626 mailto:sage [2008/11/11(火) 23:23:58 ]
>>627
一部重複箇所(横グラフが2つ出ました)がありましたので、それを修正した上で
実行したところ、結果が得られました。
>>628
こちらも正しい結果が得られました。

627さんのプログラムは使われた文字のみの出力、
628さんのプログラムは全てのアルファベットについての出力が確認できました。
もう一度しっかり目を通した上で使わせていただきたいと思います。

レスからわずか10分足らずでの迅速な対応、本当にありがとうございます。

632 名前:お願いします [2008/11/11(火) 23:25:43 ]
>>630
#include<stdio.h>
#include<math.h>
struct mycomplex {double re;
double im;};
int main()
{struct mycomplex a,b;
struct mycomplex wa(struct mycomplex,struct mycomplex);
struct mycomplex sa(struct mycomplex,struct mycomplex);
struct mycomplex seki(struct mycomplex,struct mycomplex);
struct mycomplex shou(struct mycomplex,struct mycomplex);
double cabs(struct mycomplex);
struct mycomplex cinput(void);
void cprint(struct mycomplex);
a=cinput(); b=cinput();
cprint(wa(a,b)); cprint(sa(a,b)); cprint(seki(a,b)); cprint(shou(a,b));
printf("絶対値 cabs(a)=%f\n",carbs(a)); printf("絶対値 cabs(b)=%f\n",cabs(b));}
struct mycomplex cinput(void)
{struct mycomplex z;
scanf("%f %f",&z.re,&z.im);
return z;}
void cprint(struct mycomplex z)
{ printf("複素数 = %f + i*%f\n",z.re,z.im);}

633 名前:大輔 [2008/11/12(水) 00:18:51 ]
[1] 授業単元:繰り返し処理(for文・while文)
[2] 問題文(含コード&リンク):下に示すような九九の表を表示するプログラムを作成しなさい
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語:C++
[4] 期限:2008年11月14日15:00まで
[5] その他の制限:printf,scanf,if,switch,程度の関数しか習っていません。for文の入れ子(二重のforループ)を使う。フォーマットをそろえるには、書式指定文字列(変換仕様)を利用。

   1 2 3 4 5 6 7 8 9
 1 1 2 3 4 5 6 7 8 9
 2 2 4 6 8 10 12 14 16 18
 3 3 6 9 12 15 18 21 24 27
 4 4 8 12 16 20 24 28 32 36
 5 5 10 15 20 25 30 35 40 45
 6 6 12 18 24 30 36 42 48 54
 7 7 14 21 28 35 42 49 56 63
 8 8 16 24 32 40 48 56 64 72
 9 9 18 27 36 45 54 63 72 81

634 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:26:39 ]
>>633
#include <stdio.h>
main()
{
int i, j;
for(i = 0; i < 10; i++) {
for(j = 0; j < 10; j++)
if (i == 0)
if (j == 0)
printf(" ");
else
printf("%2d ", j);
else if (j == 0)
printf("%d ", i);
else
printf("%2d ", i * j);
printf("\n");
}
}


635 名前:デフォルトの名無しさん [2008/11/12(水) 00:35:49 ]
#include <stdio.h>

void main(){
 printf(" ");
 for(i=0; i<10; i++){
  printf(" %2d", i);
 }
 printf("\n");
 for(i=1; i<10; i++){
  printf("%d", i);
  for(j=0; j<10; j++){
   printf(" %2d", i*j)
  }
  printf("\n");
 }
}

636 名前:634 mailto:sage [2008/11/12(水) 00:37:47 ]
>>635
こっちのほうがすっきりしてるね

637 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:39:11 ]
↑jも1からだった

void main(){
 printf(" ");
 for(i=1; i<10; i++) printf(" %2d", i);
 printf("\n");
 for(i=1; i<10; i++){
  printf("%d", i);
  for(j=1; j<10; j++) printf(" %2d", i*j)
  printf("\n");
 }
}

638 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:41:40 ]
%2dじゃ空白が入らないんじゃないの?

639 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:47:29 ]
[1] 授業単元:プログラミング言語
[2] 改行を含む文字を受け取るにはどうすればいいんでしょうか?getを使えばスペースを含む文字を変数に書き込めるのは分かったんですが、改行を含む文字を書き込む方法が分かりません。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: ごめんよく分からない。でも使っているのはMicrosoftからダウンロードしたVisual C++
 [3.3] 言語: C++
[4] 期限2008/11/15
[5] その他の制限: 無し



640 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:48:35 ]
>>639
getsのこといってんだろうか・・・・・・・・
fgetsを使えばいんじゃね?

641 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 01:23:17 ]
[1] 授業単元:ハッシュ法
[2] 問題文(含コード&リンク):指定したファイルを読み込み開放番地法でのハッシュ表を生成し、
  (i) 線形探査法
  (ii) 二重分散法
に基づいた探索関数を作成せよ。
(i),(ii)の探索関数を用いて任意の値
  (a) 表中に存在するキー      100個
  (b) 表中に存在しないキー     100個
について連続で探索し、総探査回数、総実行時間を記録する。(一部略)

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 11月12日21時迄


www1.axfc.net/uploader/He/so/157773 (pass: jik1)
↑中身は問題原文、指定されたファイル、自分で作成したプログラムソースです
対象ファイルの中身が文字列なので探索にstrcmpを用いようとしたのですが、実行時にエラーが出てしまってどうすればいいかわからない状態です
よろしくお願いします

642 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 01:29:27 ]
[1] 授業単元:アルゴリズム
[2] 問題文:5人の学生の3教科の点数(0~100点)をランダムに表示させる。
      それぞれの合計点を計算し、合計点の高い順に順位をつける。
[3] 環境
 [3.1] WindowsXP
 [3.2] gcc 3.4
 [3.3] C
[4] 期限:なし


どなたかおねがいします…orz

643 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 02:06:34 ]
>>642
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8011.c

644 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 02:08:18 ]
変数tmpはいらないから消してくれ

645 名前:デフォルトの名無しさん [2008/11/12(水) 02:29:43 ]
>>613
ありがとうございます
聞きたいんですが、a[]にn個の整数が入ってるとしてって所なんですけど、どうやって定義したんですか?

646 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 04:48:09 ]
>>645
int a[] = { 121, 11, 14641, 1331};

647 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 05:36:33 ]
1] 授業単元:プログラミング演習1 C言語の基礎
[2] 問題文(含コード&リンク):
 S=1+2+・・・n<100
を満たす最大の自然数nとSを出力するプログラムを作成してください。
for文とwhile文を用いたのをそれぞれ作成すること。
 考え方:ループを用いて1から順に自然数を足して行き、
和が100を段階で計算を打ち切るようにプログラムする

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc バージョンは最新
 [3.3] 言語: C
[4] 期限: 今日
[5] その他の制限:変数とハローワールドとscanf、条件文しかならってないはず

期限が近い・・・よろしくお願いします

648 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:06:08 ]
>>647
#include <stdio.h>

main()
{
int S = 0, n;
for(n = 1; S + n < 100; n++){
S += n;
}
n--; // 足しすぎたので 1 引く
printf("n:%d S:%d\n", n, S);
S = 0;
n = 1;
while(S + n < 100){
S += n;
n++;
}
n--;
printf("n:%d S:%d\n", n, S);
}


649 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:14:44 ]
>>648
なるほど・・・条件にS<100だから105しかでてこなかったのか俺・・・。
ありがとうございまいした、勉強になりました




650 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:00:09 ]
[1] 授業単元:画像情報工学
[2] 問題文(含コード&リンク):
ブレゼンハムのアルゴリズムを用いて、ウインドウ内に線分を描画するプログラムを作成しなさい。
仕様1(マウスの左ボタンと右ボタンを使用する。候補線の表示は無し。)
マウスの左ボタンクリック    線分の始点座標の指定
マウスの右ボタンクリック    線分の終点座標の指定及び線分の描画

[3] 環境
 [3.1] OS:vista
 [3.2] コンパイラ名とバージョン:VC++ 2008
 [3.3] 言語: C
[4] 期限: 2008年11月12日まで
[5] その他の制限: ライブラリの点を描画するAPI関数を使って線分を引くこと。直線を引くAPI関数を使ってはならない。

Cは簡単なものしかやったことなくて全く分かりません
誰か助けてくださいお願いします……

651 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:16:50 ]
誰か610お願いします

652 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:29:43 ]
>>610
@
/* (x,y)-平面の点を座標で表す構造体 */
struct Point {
double x;
double y;
};
/* 原点からの長さを求める関数 */
double length_vector_p(struct Point *p)
{
return sqrt(p->x*p->x + p->y*p->y);
}
/* 平面の点を表示する関数 */
void print_v_p(struct Point *p)
{
printf("%f %f\n", p->x, p->y);
}
int main(void)
{
struct Point p;
printf("Input Point X: ");
scanf("%lf", &p.x);
printf("Input Point Y: ");
scanf("%lf", &p.y);
print_v_p(&p); /* print_v_pを使用して,座標の表示 */
printf("The length of vector: %f\n", length_vector_p(&p) );
return 0;
}


653 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:32:46 ]
>>610 A
struct Point {
double x;
double y;
};
void input_point_p(struct Point *p){
printf("X:");
scanf("%lf", &p->x);
printf("Y:");
scanf("%lf", &p->y);
}
void print_v_p2(struct Point *p){
printf("%f %f\n", p->x, p->y);
}
int main(void){
struct Point *p; /* 構造体ポインタ変数 p */
int num, i;
printf("Input number of vector: ");
scanf("%d", &num);
for (i=0; i< num; i++) {
p = malloc(sizeof(struct Point)); /* malloc を使って領域確保 */
if( p == NULL ) {
printf( "memory cannot alloc!\n" );
exit( 1 );
}
input_point_p(p); /* 関数を使って要素を代入 */
print_v_p2(p); /* 関数を使って要素の表示 */
free(p); /* メモリの解放 */
}
return 0;
}

654 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:38:01 ]
>650
期限は12日じゃなくて19日まででした……

655 名前:デフォルトの名無しさん [2008/11/12(水) 10:13:51 ]
>>646
ありがとうございます!

656 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 11:27:53 ]
>>650
ライブラリって何の?
専用のをつかってるならそれもうp

657 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:21:11 ]
期限が1日伸びたので>>491をお願いできませんか?

658 名前:608 mailto:sage [2008/11/12(水) 13:21:57 ]
ちょっと聞きたいんですけど、学校から>>608に関係した問題が追加で出されたんだけど、それを解いてもらえることってできますか?

659 名前:デフォルトの名無しさん [2008/11/12(水) 13:24:12 ]
[1] 授業単元 プログラミング基礎
[2] 問題文(含コード&リンク)
  マイナスの値が入力されるまで繰り返し整数値を入力し最大、最小を求める。
  初期化で最大値には最小の値を、最小値には最大の値を設定しておく。
  繰り返しにはwhile文を使用する。
[3] 環境
[3.1] OS:Windows XP 
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年 11月14日 18時
[5] その他の制限: 特になし

  よろしくお願いします






660 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:40:57 ]
>>656
渡されたプリントに書いてあったまんまなんで、自分でも良くわかりません……
授業ではC言語はおろかPCにすら触ってません

661 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:59:59 ]
>>660
単に授業を聞いてなかったとかサボってたとかじゃなくて?
何の前説もなしにそのプリントをぽんと渡されただけなら行く学校を間違えたな
たぶん、説明はあったのに理解できなくてスルーしただけだろうけど

662 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:05:51 ]
>>659
#include <stdio.h>

int main (void)
{
int n, min=32767, max=0;

while(1){
scanf("%d", &n);
if(n<0)
break;
if(n > max)
max = n;
if(n < min)
min = n;
}

printf("min = %d, max = %d\n", min, max);

return 0;
}

663 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:11:44 ]
>>657
' ' とか '■' とか '○' マルチバイト文字を扱うのが面倒
' ' とか '*' とか 'o' でよかったらそんなにかからないけど

664 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:47:40 ]
>>659
>>662 + 初期値可変入力

#include <stdio.h>
int main( void )
{
int i, n;
int imin, imax;
int nmin, nmax;
printf( "最小値の最大を入力してください>" );
scanf( "%d" , &imin ); /* 数値の入力 */
printf( "最大値の最小を入力してください>" );
scanf( "%d" , &imax ); /* 数値の入力 */

nmin=imin;
nmax=imax;
while (1) {
printf( "数値を入力してください>" );
scanf( "%d" , &n ); /* 数値の入力 */

if ( n < 0 ) /* 終了 */
{ printf( "終了\n" );break;}
if ( n < imin ) /* 最小値 */
{ nmin= n;}
if ( imax < n ) /* 最大値 */
{ nmax= n;}
}
printf(" 最小:%d\n", nmin);
printf(" 最大:%d\n", nmax);
}

665 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:54:11 ]
>>661
授業が元々コンピュータでの画像の描画方法についてなんです
今までプログラムなんて一切なしでアルゴリズム?みたなのを学んでて
いきなりレポートの概要渡されました
授業は毎回出てますし、ノートも取ってます
それに居眠りとか出来る状況じゃないので
説明はあったんですが、それまでの知識じゃ全く理解できませんでした

666 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:03:29 ]
どなたか>>641お願いできないでしょうか?
ヒントだけとかでもいいので・・・orz

667 名前:デフォルトの名無しさん [2008/11/12(水) 15:39:48 ]
>>646
調べたい整数の数を
を選べるようにするにはどうすればいいの?

668 名前:639 mailto:sage [2008/11/12(水) 15:46:44 ]
>>640
あ、すいません。
getsの間違いでした。

fgets…使ってみたんですが、エラーが出ました。
今作っているソースは
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int main(){
char filename[20], time[100], data[1000000];
FILE *fp;
cout<<"CPUtime?"<<endl;
gets(time);
cout<<"data?"<<endl;
gets(data);
fp = fopen("file.txt","w");
fprintf(fp,"%s\n",time);
fprintf(fp,"%s",data);
fclose(fp);
}
で、本当は「file.txt」ってなってるファイル名を、キーボードから受け取るようにして(filenameとは宣言したものの…)
dataに、
「 0 1.99400005840289e-007 -1.99400005840289e-007 9.89100023673223e-014 2.63400000595493e-012
1e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89000006022811e-014 2.63400000595493e-012
2e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89100023673223e-014 2.63400000595493e-012
4.000015229e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89299991211411e-014 2.63400000595493e-012
…」みたいな改行を含んだ文字をコピーして実行画面(コマンドプロンプト)に貼り付けてテキストファイルを作りたいんですがよく分かりません。

669 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:48:54 ]
>>667
調べたい整数をユーザに入力させたい、ってとこか?
それならこんなかんじ。

int main(int argc, char *argv[])
{
int *a;
int n, i, g;

printf("調べたい整数の数は?: ");
scanf("%d", &n);
a = malloc(n * sizeof(int));
for (i = 0; i < n; i++) {
printf("%d 個目の整数を入力してください: ", i+1);
scanf("%d", &a[i]);
}

g = a[0];
--- >>613 と同様 --
free(a);
return 0;
}



670 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:01:12 ]
>>612
解答あり

>>600の(2)できる方おねがいします

671 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:10:20 ]
>>663
それでお願いできますか?

672 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:14:23 ]
>>665
理解できなかったのならなぜ質問しなかったのだろう?
その感じだと実際に動作するコードを書くのではなく
アルゴリズムや疑似コードをレポートにして提出しろってことなのか?

673 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:19:45 ]
>>668
余計なお世話だけど、 time って関数があるから time という変数名は避けたほうがいいかも。

fp = fopen("file.txt", "w");
fprintf(fp, "%s\n", time);
while (fgets(data, sizeof(data), stdin) != NULL) {
fprintf(fp, "%s", data);
}
fclose(fp);

とすれば、Ctrl-D を入力するまで読み取り続けます

674 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:21:11 ]
>>671
よく考えたら、表示のときだけマルチバイト文字使って、内部データは
普通の int とか char とか好きなので行けるわ
もう一点確認だけど、どっちからどっちに球が飛んでいけばいいの?

675 名前:デフォルトの名無しさん [2008/11/12(水) 16:22:19 ]
生活安全課のボツボツキモデブ●創価●警官名言集www
「俺の脅迫のおかげで家から出れなくした。俺の手柄だ!」
「昼間は市役所のパトロール隊を使う。夜は消防団を使う。」
「●指導●じゃない、パトロールを●お願い●してるだけだ。人権侵害行為は俺の責任じゃない!」

熊本隆談www

676 名前:デフォルトの名無しさん [2008/11/12(水) 16:23:34 ]
>>669

: In function ‘main’:
:22: 警告: incompatible implicit declaration of built-in function ‘malloc’
:24:8: 警告: 不明なエスケープシーケンス '\$'


だそうです

677 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:29:14 ]
>>676
#include <stdlib.h> を追加。
それから
a = (int *)malloc(n * sizeof(int));
と、キャストしたほうがいいかも。
下のは知らん。日本語の文字列が正しく読まれてないのかもしれない。
適当に文字列を半角英数字のみにしてみて。

678 名前:デフォルトの名無しさん [2008/11/12(水) 16:36:38 ]
テスト中orz
1.から100までの整数で3の倍数の整数の合計を求めるプログラムをFor文を利用して作ってください。
2.1の問題をForの変わりにWhile文で頼みます。

余裕があれば、
3.タクシー料金:最初の2kmまで650円 以後400mごとに90円としたとき、乗車距離(km)を入力し、
料金求める。
おねがいします。

679 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:41:59 ]
>>678
テストぐらい自分でやれ!



680 名前:デフォルトの名無しさん [2008/11/12(水) 16:42:11 ]
>>816
/*1.*/
#include <stdio.h>
int main(void){
int i, sum = 0;
for(i = 1; i <= 100; i++){
if (i % 3 == 0) sum += i;
}
printf("合計は %d\n", sum);
}
/*2.*/
#include <stdio.h>
int main(void){
int i = 1, sum = 0;
while(i <= 100){
if (i % 3 == 0) sum += i;
i++;
}
printf("合計は %d\n", sum);
}
/*3.*/
#include <stdio.h>
int main(void){
double kyori;
int ryokin;
printf("乗車距離(km): ");
scanf("%lf", &kyori);
if (kyori < 2) ryokin = 650;
else ryokin = 650 + (kyori / 400) * 90;
printf("料金は %d円です。\n", ryokin);
}

681 名前:639 mailto:sage [2008/11/12(水) 16:43:13 ]
>>673
ありがとう!ありがとう!改行文字も出来ました。
でもCtrl-Dを入力せずに、貼り付けた文字の最後まで行ったら自動で終了するのは出来ないんでしょうか?
>>668に書いた数値データ、何百行もあるのですが、最後の行まで読み込んだら終了させたいです。

682 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:59:53 ]
>>667
出来ました!
マジでありがとうございます

683 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:02:22 ]
>>681
何をもって読み込みを終了するかが決められないからムリかな。
>>673 のコードでは、EOF (Ctrl-D) をもって終了としてるから、たとえば
echo "cputime\ndata1\ndata2" | ./a.out
などとすることは可能。

しかし一体何をしたいんだ?
その数値データはテキストファイルに保存されてるの?
それなら CPUtime だけを入力して、数値データはそのテキストファイルから読み取ればいいわけだけど。

684 名前:デフォルトの名無しさん [2008/11/12(水) 17:09:50 ]
>>680
ラスト10min
ありがとう。たすかりました。

685 名前:639 mailto:sage [2008/11/12(水) 17:14:19 ]
>>683
<<しかし一体何をしたいんだ?
これ、大学の数値実験で出た何百行もの値(SPICEっていう電気回路のCADツールを使って出た値)で、この数値をコピーして、gnuplotでグラフを書きたいんだ。
@SPICEからデータ(数値)をコピーして取り出す。
Aテキストファイルに貼り付ける。
B作成したテキストファイルからgnuplotでグラフを描く。
この一連の作業をプログラムで作りたかったんだ…。
一応数値データも要るので、gnuplotに直接書き込んで終了という訳にもいかず、テキストファイルも残したいんです。

686 名前:デフォルトの名無しさん [2008/11/12(水) 17:29:19 ]
すみませんがどなたか>>584をやって頂けないでしょうか頂けないでしょうか。
>>586さんのいうとおりisalphaとtoupperを使えばいいのはわかっているんですが、
どうやってそれをソースに書きかえればいいのかまったくわからないので困っています。
今日が締切なのでお願いします。

687 名前:デフォルトの名無しさん mailto:587 [2008/11/12(水) 17:44:51 ]
>>587です
亀ですが>>592の方ありがとうございました
嫌いと言いながらやってくれる優しさに惚れた
また明日結果報告させて頂きます

688 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:46:37 ]
宿題でお聞きしたいのですが…問題は以下のようなものです。

「直行座標系X-Yにより定められている平面上で、0 < X,Y < 1の正方領域をX,Y方向にそれぞれ(n1 - 1)個、(n2 - 1)個に等分割して、その座標を出力する。」

自分で、以下のようなプログラムを作ってみました。

#include<stdio.h>
#define n1 7
#define n2 7

int main(){
double X[n1], Y[n2];
int i, j;

for(i = 0; i < n1; i++){
*(X + i) = ((1 / (n1 - 1)) * (double)i);
}
for(i = 0; i < n2; i++){
*(Y + i) = ((1 / (n2 - 1)) * (double)j);
}

for(i = 0; i < n1; i++){
for(j = 0; j < n2; j++){
printf("(%lf, %lf) ", *(X + i), *(Y + j));
}
printf("\n");
}
}

すると、(0.0000000, 0.0000000)の座標で埋め尽くされてしまいました…
玄人の皆様、お助け下さい…

689 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:53:04 ]
>>688
double にキャストする位置がおかしい。

- *(X + i) = ((1 / (n1 - 1)) * (double)i);
+ *(X + i) = (1.0 / (n1 - 1)) * i;

Y も同様。



690 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:53:46 ]
>>688
1/(n1 -1) ← 分母分子ともに整数だと、整数の除算が行われるから
1.0/(n1 - 1) とか 1/(n1 - 1.0) とか、どっか double にしないと暗黙の型変換は起こらない

あと

*(Y + i) = ((1 / (n2 - 1)) * (double)j); ← i でループ回してるんだkら (double)j じゃなくて i だな

691 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 18:08:49 ]
>>689,>>690
どうもありがとうございます、そういうことなのですか(^^;
皆さんに教わらなければ、多分あと2日くらいは悩んでたと思います。

また質問させて頂く時もあるかと思いますので、その時はまたよろしくお願いします。

692 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 19:05:39 ]
[1] 授業単元 プログラミング演習
[2] 問題文: 10個のデータをキーボードから適当に入力し(ランダムなデータ),1次元配列に格納する.
        バブルソート法により,小さい順に並べ替えるプログラムを作成しなさい.
        結果をソートの経過を全てprintfで表示すること.
        
[3] 環境
[3.1] OS:Windows Vista 
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年 11月19日 13時
[5] その他の制限: 関数やポインタはまだ習ってないです。よろしくお願いします。


693 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:29:20 ]
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):
0度から360度までのSin(x)の値を文字コード*を使ってグラフを表示するプログラムをC言語で作成せよ。
実行結果の例をアップローダーに貼り付けました。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8012.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005
 [3.3] 言語: C
[4] 期限: 2008年11月13日
[5] その他の制限: ファイルの入出力まで習いました。

よろしくお願いします。

694 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:30:58 ]
>>491
まだ間に合うのかな
風向きとか、スキルとかまだ実装してないけど、イメージとしてこんな感じでよいの?
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8013.txt

695 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:35:13 ]
>>674
特に指定はされていませんので作りやすいもので結構です

696 名前:694 mailto:sage [2008/11/12(水) 20:56:48 ]
>>695
ちょっと改造して、いちおう2個のパラメータとるようにしてみたけど、
やっつけのきたねーコードだw
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8014.txt


697 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:24:45 ]
>>696
はい、大丈夫です
ありがとうございます!

698 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:48:47 ]
[1] 応用プログラミング演習
[2] wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタをかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意)
[3] 環境
 [3.1] OS: Windows
 [3.2] 開発環境:VC++ 6.0
 [3.3] 言語:C言語
[4]今月中
[5]制限なし

ただの授業なのですが、研究で使うレベルのプログラムなのでかなり難しいです↓
ただ原理としては簡単らしいのですが、wavを扱ったことがないのでチンプンカンプンです。
1週間ずっと考え続けても無理でした(ノД`)
どなたか手伝ってくれたら嬉しいです。

699 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:52:42 ]
>>698
>wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタをかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意)

これだけで作れたらすごいわ



700 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:21:42 ]
まず、ウインドウ関数を決めないとね。

701 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:00:30 ]
>>600
(2)ですけどリスト構造に格納する際に、次数の大きい順にしておいて先頭から順に出力ということはなんとなく分かったのですがそこから進めない・・・

702 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:25:19 ]
>>698
どのあたりまでライブラリの使用を認められてるか書け
wavファイルの読み取りからやらされるのか?

703 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:38:30 ]
[1]情報処理 C
[2]組み合わせn Cm を計算する関数を作成しなさい.main関数にてキーボードから2つ?然数n,mを
読み込み後,作成した関数を呼び出しその動作を確認しなさい.
但し,以下の条件を満たすものを作成すること
@2つの?然数は1回のscanfで読み込むこと.(データ区切りはスペース)
Ascanfはmain関数側に実装すること.
B入力はn mの並びにすること.
C作成した関数側で「n>=mを満?しない時」,「n,mが?然数ではないとき」は n Cm =0とな
るようにしなさい.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年 11月中
[5] その他の制限:

Cのいい作り方を思いつきません…


704 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:45:05 ]
4だけ?
if (n < m || n < 0 || m < 0) return 0;
ってするだけじゃないのか?
(自然数に0を含む感じになってます)



705 名前:デフォルトの名無しさん [2008/11/13(木) 00:24:46 ]
                 ∴
         ∵  ∴  ∴∵∴    ∴
     ∴∵∴∵∴∵∴∵∴∵∴∵∴∴∵
       ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
   ∴∵∴∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴
      ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵/ ⌒ヽ∴∵∴∵∴
    ∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵| |   |∴∵∴∵
  ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∪ / ノ∴∵∴∵∴∵
..  ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵| ||∵∴∵∴∵
.∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∪∪∴∵∴∵∴∵
.∵∴∵∴∵∴∵∴∵:(・)∴∴.(・)∵∴∵∴∵∴∵∴∵∴∵∴∵∴
∵∴∵∴∵∴∵∴∵∴/ ○\∵∴∵∴∵∴∵∴∵∴∵∴
..∵∴∵∴∵∴∵∴∵/三 | 三ヽ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
. ∴∵∴∵∴∵∴∵ | __|__ │∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵     tanasinn
.∵∴∵∴∵∴∵∴∵|  ===  │∵∴∵∴∵∴∵∴∵∴∵∴
.∵∴∵∴∵∴∵∴∵\___/∵∴∵∴∵∴∵∴∵∴∵∴
..∴∴∵/ ̄.. \∴∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴
∴∵∴/    ,. i ∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
∴∵∴|    /.| |.∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
  ∵∴|   | :| |.∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴
    ∴| |  |::| |.∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
    ∴| | |∵U∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴
      | | |∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵
     / / / ∵∴∵∴∵∴∵∴∵∴∵ ∵
    / / /       ∴∵∴∵∴ ∴
   .しし’          ∵

706 名前:639 mailto:sage [2008/11/13(木) 01:23:09 ]
>>639
+ >>668 >>681 >>685
なんだけど、レスが無いので分からないorスルーになっているということだとは思いますが((´;ω;`))
最後に一つだけ質問お願いします。

>>673
の「Ctrl-Dを入力するまで読み取り続けます」なんですけど、「Ctrl+d(コントロールキー+d)」と入力しても「^d」と画面に出力されるだけで書き込みが終了しません。
「コントロール + D(大文字)」、「コントロール + マイナス + D」などなどあり得なさそうな入力も試しましたが、終了しませんでした。
僕は一体どうすれば?
アホな質問だったらごめんよぉ(´・ω・`)

707 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:24:48 ]
>>706
ctrl + z
にしてみろ

708 名前:さそり [2008/11/13(木) 01:30:20 ]
[1] 授業単元:ファイル読み込み
[2] ファイルを読み込んで.hファイルに書き込むのが狙いなんですが
  sample.txtテキストファイルの中身が
  kina="mikan"+"momo"
shika="hidemaru"*100+"keiko"
と50行ぐらい続いていて左辺の値とダブルクオートくくりの
  文字を抽出してsample.hに一文字取ったら改行して書き込んでいくのですが
  どうしたらいいでしょうか??困っておりまして皆様のお力をお借り
  したいと思っています。どうぞよろしくお願いします。
[3] 環境
 [3.1] OS:ソラリス
 [3.2
 [3.3] 言語:C
[4] 期限:今週中
[5]


709 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:46:00 ]
日本語が謎すぎる!



710 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:47:17 ]
今日はあむちゃんあるんですかね

711 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 02:18:46 ]
>>699
すみません。。
これ以上どう詳しく書いたらいいのかわかりません(ノД`)
>>700
窓関数はなんでもいいです。
おそらくハミングが一番いいのかと思ったのですが…
>>702
やり方は自由です。
とにかく動いたらいいのでライブラリの制限はありません。
はい。。wavの読み取りからやらないといけません。
まずそこから躓いています。
wavファイルを一次元配列に格納することはできたのですが(たぶん…)、
それをどう処理すべきかがわかりません。
悪戦苦闘して調べまくったのですが、なかなかできず、ここに助けにもらいに来た次第です。

712 名前:デフォルトの名無しさん [2008/11/13(木) 03:15:24 ]
[1]情報処理 C
[2]ユーザが調べたい整数n個の数の最小公倍数を求めよ
手順は、もし、ユーザが12と8と9と48のLCMを調べたい時
@LCM(12,8)=24
ALCM(LCM(12,8),9)=LCM(24,9)=72
BLCM(LCM(12,8),9),48)=LCM(72,48)=144
といった形である
これを調べたい数を自由に変えることができ、尚且、ユーザが調べたい整数の個数でも対応出来るように作れ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 今日の23時59分
[5] その他の制限:


お願いします

713 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 04:36:55 ]
>>712
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8015.c

714 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 06:43:21 ]
>>708
その入力例に対する出力の例を書け
日本語そのまま取ると sample.h は
m
i
k
a
n
m
o
n
o
h
i
d
e
m
:
になるがよいのか?

715 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 08:40:37 ]
600の(2)の期限せまってるのでどうかお願いします
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8016.txt
似たようなのは見つけたのですが・・・

716 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 10:50:18 ]
>>703
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8017.c
一部余分なコードあり(コメントアウトで無効にしてある)
パスカルの三角形を使用しているため、階乗で求めるやり方ではない。

717 名前:716 mailto:sage [2008/11/13(木) 10:51:39 ]
> n Cm を計算する関数を作成
もしていないんで、適当にnとmを受け継いだら結果を返す仕様に変更してちょっ。

718 名前:587 [2008/11/13(木) 11:01:08 ]
>>592
問題なく読み込めました
助かりました、有難うございます!

719 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 11:03:51 ]
>>715
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8018.txt



720 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:01:00 ]
[1] 授業単元:C++
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8020.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VS2008
 [3.3] 言語:C++
[4] 期限:2008年11月20日まで

よろしくお願いします。

721 名前:デフォルトの名無しさん [2008/11/13(木) 12:01:07 ]
>>713
hhh.c: In function ‘main’:
hhh.c:29: 警告: ignoring return value of ‘realloc’, declared with attribute warn_unused_result

というエラーがでました……

722 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:11:27 ]
>>721
gcc -Wall (チェックが厳しいオプション) でコンパイルしても出て何もこないぞ
それにそれはエラーじゃなくて警告

723 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:32:33 ]
>>708 たぶん違う気がするけど >>714 の通りに1文字1行で出力させるとこうなる
#include <stdio.h>
int main()
{
FILE *fp;
char *p, buf[256];
int lhs, in_quote;

fp = fopen("sample.txt", "r");
if (fp == NULL) {
printf("Cannot open sample.txt\n");
return 1;
}
while(fgets(buf, 256, fp) != NULL) {
lhs = 1;
in_quote = 0;
for(p = buf; *p != '\0'; p++)
if (*p == '=')
lhs = 0;
else if (*p == '"')
if (in_quote)
in_quote = 0;
else
in_quote = 1;
else if (lhs || in_quote)
printf("%c\n", *p);
}
}


724 名前:デフォルトの名無しさん [2008/11/13(木) 12:35:53 ]
なんどもやってるんですが、この表示がでて、この先に進まないんです……

725 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:37:18 ]
>>724>>722

726 名前:デフォルトの名無しさん [2008/11/13(木) 13:23:00 ]
[1] 授業単元:C言語
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Visual C 2008
 [3.3] 言語:C
[4] 期限:明日まで

七個の文字列の長さ(文字数)をカウントして、文字列とともに表示せよ。
ただし、ポインタを使用して処理すること

カウントの仕方がわかりません・・・
お願いします。

#include<stdio.h>

int main(){
char *name[] ={"Izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada",NULL};


727 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:27:10 ]
>>726
#include<stdio.h>

int main(){
char *name[] ={"Izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada",NULL};
char *p;
int i, n;

for(i = 0; i < 7; i++){
n = 0;
for(p = name[i]; *p != '\0'; p++)
n++;
printf("%s:%d\n", name[i], n);
}
return 0;
}


728 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:27:32 ]
>>724

>>722 じゃないが

先に進めないってどういうことだよ?
ロードモジュールはできているはずだ。

729 名前:639 mailto:sage [2008/11/13(木) 13:43:00 ]
>>707
出来たぅおありがとう!



730 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:43:34 ]
コンパイルだけして実行してないんじゃないの?

731 名前:デフォルトの名無しさん [2008/11/13(木) 13:49:12 ]
>>727

ありがとうございます!
*p != '\0'が何を表してるのか教えてくれるとありがたいです!

732 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:53:03 ]
>>731
文字列の最後=¥0だから それをみている

733 名前:727 mailto:sage [2008/11/13(木) 13:54:39 ]
>>731
Cの標準的な約束事で、文字列の配列の最後の文字の次に '\0'(NULL文字)を置くことになっている。
*p != '\0' は、文字の終りに来ていない間繰り返すという意味
*p はポインタ p が指している値(文字)だっていうのはいいんだよね?

734 名前:デフォルトの名無しさん [2008/11/13(木) 14:03:03 ]
>>733
丁寧な説明ありがとうございます!
'\0'はNULL文字のことなんですね!
やっとわかりました。


735 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:14:25 ]
>>734

それだけかよw

736 名前:デフォルトの名無しさん [2008/11/13(木) 14:26:23 ]
>>724
たった今動きました
こちらの凡ミスだったようです。申し訳ございません

ですが、今度はinput >が限りなく続いて終わらないです……
というより、結果がでてもプログラムが終了しないのです

737 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:23:25 ]
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8023.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] gccなど
 [3.3] 言語:Cのみ
[4] 期限:11月17日まで
[5] その他の制限
特に無いですが、角度が45度から増大していく現象の原因が分かれば大丈夫です。
dtの値を小さくすることで誤差は小さくなりますが、ルンゲクッタ法としては
おかしい(精度的に)と思うので・・・。よろしくお願いします。

738 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:13:59 ]
f1=dt*f(X0,v);
g1=dt*q(X0,v);

f2=dt*f(X0+f1/2.0,v+g1/2.0);
g2=dt*q(X0+f1/2.0,v+g1/2.0);

f3=dt*f(X0+f2/2.0,v+g2/2.0);
g3=dt*q(X0+f2/2.0,v+g2/2.0);

f4=dt*f(X0+f3,v+g3);
g4=dt*q(X0+f3,v+g3);

X0+=(f1+ 2.0*f2 +2.0*f3+ f4)/6.0;
v+=(g1+ 2.0*g2+ 2.0*g3+ g4)/6.0;


739 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:14:34 ]
double q(double X0, double v){
return -g*sin(X0)/l;
}
double f(double X0, double v){
return v;
}




740 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 18:58:45 ]
>>712 >>736 >>722
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8025.c
最初に入力する数値の個数を決める仕様に変更。callocを使用。

741 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:00:03 ]
>>712 >>722  >>736
ttp://www.bohyoh.com/CandCPP/C/Library/calloc.html
> その領域は、すべてのビットが0で初期化される。

742 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:09:45 ]
>>722
もっと厳しくして見やがれ

743 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:26:38 ]
>>740
結果だけでよいなら領域確保必要すらないよな
main()
{
int l = 1, n;;
while(1){
printf("数値を入力してください:");
scanf("%d", &n);
if(n == 0)
break;
l = lcm(l, n);
}
printf("最小公倍数は %d です。\n", l);
}

↑lcm は >>740 と同じものを利用、'0' 入力で入力終了。


744 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:30:27 ]
>>703
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8026.c

745 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 21:36:51 ]
>>703
もし数字以外、小数を入力した場合など、自然数に該当しないものが入力されたらって言うなら
文字列として厳密に判別する仕組みを取り込んで、条件をクリアしたらatoi()でint型に
代入するとか。

746 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 22:44:18 ]
>>566
お礼が遅れてすみません・・・
早い返答ありがとうございました

747 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 23:52:14 ]
今来た。
未解決問題ってどれ?

748 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 00:17:13 ]
>>747
>>720
>>698



749 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 00:46:42 ]
>>747
>>692-693




750 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 01:13:30 ]
>>692
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8028.c

751 名前:さそり [2008/11/14(金) 01:16:07 ]
708番で質問したさそりです。
>>714
>>723
ご返信ありがとうございます。
テキストファイル読み込みをした後に.hファイルに
書式付で書き込むのですが.
たとえば
PIKA1="P_1"+"P_3"
CILA="L_SAM"*1000"ERIKA"
これが100行ぐらい続くファイルがあるとして
左辺の値とダブルクオートでくくられた文字を抽出して
.hファイルに書き込むのですが上記の場合だと
PIKA1,P_1,P_3
CILA,L_SAM,ERIKAをとりだして

P_MAN: PIKA
P_MAN: P_1
P_MAN: P_3
P_MAN: CILA
P_MAN: L_SAM
P_MAN: ERIKA
という形で.hファイルに出力させたいのです。
今非常に困っていましてどなたか助けてください。
どうぞよろしくお願いします。

なお左辺と右辺は必ず=で区切られています。
左辺の値はダブルクオートで区切られていない。
基本的に始まりのダブルクオートが見つかって、終わりのダブルクオート
が見つかった場合のくくり文字を抽出するようにする。

752 名前:723 mailto:sage [2008/11/14(金) 01:27:48 ]
>>751
P_MAN: ていうのがどっから湧いてきたのか不明だから無視したけど、
基本的には >>723 をちょこっと改造すればいける
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8029.txt


753 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 01:41:41 ]
>>751
#include<stdio.h>

#define ONELINE_MAX 1024

int xxx(FILE *fp_in, FILE *fp_out){
char oneline[ONELINE_MAX+1+1], word[ONELINE_MAX+1], quote[2];
int i, n;

while(fgets(oneline, sizeof(oneline), fp_in)){
for(i=0;;){
if(sscanf(&oneline[i], "%*[^\"]%n%1[\"]", &n, quote)==1) i+=n;
if(sscanf(&oneline[i], "\"%[^\"]%1[\"]%n", word, quote, &n)==2){
i+=n;
fprintf(fp_out, "P_MAN: %s\n", word);
}else if(sscanf(&oneline[i], "\"%1[\"]%n", quote, &n)==1){
i+=n;
}else{
break;
}
}
}

return 0;
}

int main(void){
xxx(stdin, stdout);

return 0;
}

754 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 02:09:06 ]
>>660
「その」授業でPCに触れてないだけでは。

755 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:01:01 ]
ちょっといいですか?
ヌル文字(\0)って0と同じ扱いですか?
0=\0っていうことですか?

756 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:05:49 ]
ですぅ

757 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:24:43 ]
空文字は文字コードは0x00に割り当てられてますからね、
まぁコードを参照する値は0ですな。

758 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:52:41 ]
そもそも\0は八進法で文字コードを指定する書き方。
'\123' == (char)0123とか他の値でも成り立つ。

759 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 04:14:53 ]
\0の\は8進数を意味していたのか・・・ふむふむ、なるほど メモメモ



760 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 04:35:39 ]
\r とか \n とか \t とかね。

761 名前:デフォルトの名無しさん [2008/11/14(金) 05:41:32 ]
以前>>408で書き込んだものです。
そのときに作って頂いたプログラミングで数箇所訂正部分を言われたのでその訂正をお願いします。
その指摘箇所とは2行目の(int *, int *, int *);の部分と26行目の*in_val, int *odd_tally, int *even、
そして35行目のint *oddと40行目のint *evenです。

作って頂いた方はCプログラミングと言っていたのでそれが問題なのではないかと思っています。
今自分が受講しているクラスはC++なのでどなたかそれ用に作り変えて頂けないでしょうか。
一応前回の問題なども載せておきます。
[1] 授業単元:C++
[2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7970.txt   
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: Visualstudio 2005
 [3.3] 言語:C++
[4] 期限:2008年11月14日

何分初心者でわからないことが多いのでお手数ですがお願いします。



762 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 06:49:37 ]
>>761
こうかな
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8030.txt

763 名前:デフォルトの名無しさん [2008/11/14(金) 07:17:37 ]
>>762
お早い返信助かります。
自分ではいまいち分からないのですがこれで提出させて頂きます。
何度もありがとうございます。

764 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 07:18:59 ]
>>763
ポインタ私を参照渡しに変えてるよ
入出力の部分をもうちょっと c++ っぽくするとこうなる
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8031.txt

765 名前:デフォルトの名無しさん [2008/11/14(金) 07:40:00 ]
>>764
わざわざありがとうございます。
後者のほうが自分にも分かりやすかったのでそちらを使わせて頂きます。
お忙しい中本当にありがとうございます。

766 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 10:43:47 ]
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
キーボードから整数を入力し,それを配列に順に代入し,その後,和と平均を求めるプログラムを作りなさい
-整数の入力は負の数が入力されたとき終了
・配列は最大100個までの入力に対応できるようにする

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月17日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。

767 名前:デフォルトの名無しさん [2008/11/14(金) 10:50:28 ]
>>766
#include <stdio.h>
int main(void){
int i, n, sum, a[100];
i = 0;
do {
scanf("%d", &a[i]);
} while(a[i++] >= 0 && i < 100);
n = i;
sum = a[0];
for(i = 1; i < n; i++) sum += a[i];
printf("和: %d, 平均: %lg\n", sum, (double)sum / (double)n);
return 0;
}


768 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 10:59:48 ]
>>766
#include <stdio.h>
int main()
{
int i, sum = 0, num[100], n = 0;
double ave;
for(i = 0; i < 100; i++){
printf("整数を入力:");
scanf("%d", &num[i]);
if(num[i] < 0)
break;
n++;
}
for(i = 0; i < n; i++)
sum += num[i];
ave = (double) sum / n;
printf("合計:%d 平均:%f\n", sum, ave);
return 0;
}

769 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:06:44 ]
>>767
大変助かりました。
本当に有難う御座いました。



770 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:08:40 ]
>>767-768
大変助かりました。
本当に有難う御座いました。


771 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:27:13 ]
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・初項a0で公差dの等差数列の一般項anは an = an-1 + d で表すことができる
・a0とdを入力し,a0〜a10までの各項を配列a[0]〜a[10]に求め,それを下の実行結果例のように表示するプログラムを作りなさい

実行結果例 数字は右揃えでお願いします。
a[ 1] = 1
a[ 2] = 1
a[ 3] = 2
a[ 4] = 3
a[ 5] = 5
a[ 6] = 8
a[ 7] = 13
a[ 8] = 21
a[ 9] = 34
a[10] = 55

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月17日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。

772 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:36:41 ]
>>771
その結果例、等差数列じゃなくてフィボナッチ数列だろw
実際はどっちをやりたいんだ?
↓ は等差数列
#include <stdio.h>
int main()
{
int i, d, a[11];
printf("初項:");
scanf("%d", &a[0]);
printf("公差:");
scanf("%d", &d);
for(i = 0; i <= 10; i++)
a[i + 1] = a[i] + d;
for(i = 0; i <= 10; i++)
printf("a[%d] = %d\n", i, a[i]);
}


773 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:39:45 ]
>数字は右揃えでお願いします。
らしいので
 printf("a[%d] = %d\n", i, a[i]);
より
 printf("a[%2d] = %d\n", i, a[i]);

※ 実例の右辺 左揃えだけど… そっちも右に揃えるのかな?

774 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:42:47 ]
>>772
すいません、お手数ですが、フィボナッチ数列の方もお願いします。

775 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:44:26 ]
>>773
実例の右辺も右揃えでお願いします。

776 名前:デフォルトの名無しさん [2008/11/14(金) 11:47:50 ]
[1] 授業単元: データ構造
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8032.txt
[3] 環境
 [3.1] WindowsXP
 [3.2] VC 6.0
 [3.3] C
[4] 期限: 2008.11.20

よろしくお願いします。

777 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 12:01:30 ]
>>774
右揃えにしたいところは %d → %2d (2桁の場合) や %3d (3桁の場合) にすれ
↓ フィボナッチ
#include <stdio.h>
int main()
{
int i, a[11];
a[1] = 1;
a[2] = 1;
for(i = 3; i <= 10; i++)
a[i] = a[i - 1] + a[i - 2];
for(i = 1; i <= 10; i++)
printf("a[%2d] = %3d\n", i, a[i]);
return 0;
}


778 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 12:05:24 ]
>>777
詳しく教えていただき本当に有難う御座いました。
大変助かりました。

779 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 13:14:16 ]
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・10個の整数を入力し,それを配列a[0]〜a[9]に入れ,その後,その中の最大値を求めて表示するプログラムを作りなさい

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月17日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。



780 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 15:49:49 ]
#include <stdio.h>

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

for(i=0; i<10; i++)
scanf("%d", &a[i]);

max = a[0];
for(i=1; i<10; i++){
if(max < a[i])
max = a[i];
}

printf("max = %d\n", max);

return 0;
}

781 名前:デフォルトの名無しさん [2008/11/14(金) 16:56:51 ]
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):hpgoda.eng.niigata-u.ac.jp/lecture2008/Cprogramming/6/6.html
一番下
[3] C
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
習ったもの
配列 if


[4] 期限:なるべく早くお願いします


782 名前:デフォルトの名無しさん [2008/11/14(金) 17:00:16 ]
失礼します、質問です。

1
2
3
4
5
3
7
5
6

のようなcsvデータの1〜5行目を読み合計を出します。
その後連続で、 2〜6、3〜7、4〜8・・・と
読み込んで合計を計算していくプログラムを教えてください。
よろしくお願いいたします。

783 名前:639 mailto:sage [2008/11/14(金) 17:02:30 ]
6 名前:639[sage] 投稿日:2008/11/13(木) 01:23:09
>>639
+ >>668 >>681 >>685
たびたびすいません。本当に最後の質問を。
以下のプログラムwhileの部分、Ctrl-Z を入力するまで読み取り続けるのを、
「Enterキーを入力するまで読み取り続ける」ようにするにはどうすればできますか?

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int main(){
char time[100], data[10000];
char filename[20];
FILE *fp, *plot;
cout<<"filename?"<<endl;
gets(filename);
cout<<"CPUtime?"<<endl;
gets(time);
cout<<"data?"<<endl;
gets(data);
/* fp = fopen(filename,"w");
fprintf(fp,"#%s\n",time);
fclose(fp);*/
fp = fopen(filename, "w");
fprintf(fp, "#%s\n", time);
fprintf(fp,"#%s",data);
while (fgets(data, sizeof(data), stdin) != NULL) {
fprintf(fp, "%s", data);
}
}

784 名前:692 mailto:sage [2008/11/14(金) 17:06:34 ]
>>750
ありがとうございます

785 名前:755 mailto:sage [2008/11/14(金) 17:16:13 ]
どうもありがとうございましたm(_ _)m
数字の0と塗る文字を比較する部分で変な結果になったのでした。

786 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:12:50 ]
>>781
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8033.txt

787 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:18:35 ]
>>782
CSVって言ってるけど、1行1個の数値だけならこんな感じか
#include <stdio.h>
main()
{
int a[5], n = 0, sum = 0;
while(scanf("%d", &a[n % 5]) == 1) {
sum += a[n % 5];
if (n >= 4) {
printf("sum (%d - %d) = %d\n", n - 4, n, sum);
sum -= a[(n - 4) % 5];
}
n++;
}
}


788 名前:デフォルトの名無しさん [2008/11/14(金) 18:56:12 ]
>>787
782です。
これを1000万行ほど連続でやりたいんです。

789 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:59:51 ]
1000万行ほど連続で処理できなかったから文句言ってんだよね



790 名前:デフォルトの名無しさん [2008/11/14(金) 19:02:58 ]
782です。
実際は256個のデータの連続計算なんですが、
ファイルサイズが10000行を超えたあたりで
エラーが出て計算できなくなってしまいます。
どうしたらいいでしょうか?

791 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:03:56 ]
[1] 授業単元: プログラミング
[2] 問題文: キーボードから打ち込んだ数字が完全数で
      あるか調べるプログラムを作る。
[3] 環境
 [3.1] OS: Windows
 [3.2] gcc
 [3.3] 言語:C言語
[4] 期限: 11月15日12時まで
[5] その他の制限: 特になし


792 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:10:14 ]
>>790

OSはなに?

1000万?

793 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:21:38 ]
>>790
OSレベルの問題ってことはないの?
>>787 は領域の動的確保とかやってないから、
n が溢れる (21億くらい?) までは原理的に動作変わらないよ
$ yes 1 | ./add
sum (0 - 4) = 5
:
sum (120000000 - 120000004) = 5
:
まだ続いてる。

794 名前:デフォルトの名無しさん [2008/11/14(金) 19:23:41 ]
[1] 授業単元:
[2] 入力された各行の先頭の単語だけを表示するプログラムを作れ。
[3] 環境
 [3.1] OS:mac
 [3.2] gcc
 [3.3] c
[4] 期限: なし
[5] なし

お願いします

795 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:32:05 ]
>>794
「単語」にどういう文字が含まれていてよいかに依存するが、a-zA-Z0-9- に限定すればこんな感じ
#include <stdio.h>
int main()
{
char buf[256], str[256];
while(fgets(buf, 256, stdin) != EOF)
if(sscanf(buf, "%[a-zA-Z0-9-]", str) == 1)
printf("%s\n", str);
}


796 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:33:12 ]
>>794
区切り文字が不明

797 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:34:53 ]
>>790
1行256要素のcsvなの?
じゃあプログラムも変わってくるね。

これが仕事の発注なら追加費用だね。

798 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:42:56 ]
>>791
#include <stdio.h>
int main()
{
int n, m, sum;

while(scanf("%d", &n) == 1) {
sum = 0;
for(m = n / 2; m > 0; m--)
if (n % m == 0)
sum += m;
if (sum == n)
printf("%d は完全数です。\n", n);
else
printf("%d は完全数でではありません。\n", n);
}
}


799 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:46:51 ]
>>797
テンプレ無視の質問だししょうがない



800 名前:794 [2008/11/14(金) 19:50:34 ]
単語の区切りは空白が来たときでいいそうです


801 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:52:35 ]
[1] 授業単元:プログラミング言語

[2] 実行画面で
  fprintf(plot,"set xlabel\"time[sec]\"\n")
  と表示される様に以下のプログラムを書き換える。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: 不明…一応MicrosoftからダウンロードしたVisual C++
 [3.3] 言語: C++
[4] 期限 無し
[5] その他の制限: @関数を使って。AFILE *plotと宣言せずに。7行目の「r =」の右側の文字を全て"文字列"としてaに渡せるように)。

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int f(){
char r;
r = fprintf(plot,"set xlabel\"time[sec]\"\n");
return r;
}
int main(){
char a;
a = f();
cout<<a<<endl;
}

802 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:53:31 ]
>>800
ふつうは単語の直後のカンマとかピリオドとか落とすだろ?

803 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:59:21 ]
>>801
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
char * f(){
char *r;
r = "fprintf(plot, \"set xlabel\\\"time[sec]\\\"\\n\")";
return r;
}
int main(){
char *a;
a = f();
cout << a << endl;
}

804 名前:794 [2008/11/14(金) 20:00:25 ]
そう言われるとそうなのですが、始めたばかりなもので・・・・・

805 名前:801 mailto:sage [2008/11/14(金) 20:02:57 ]
>>803
早っ!
ありがとうございますw

806 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:06:24 ]
>>783
Enterキーを入力≒改行を入力 だから、>>668との両立は基本的に無理。
ただ、termios や ncurses のようなものを使えば可能かもしれない。
ってかいい加減にスレチ。

807 名前:teru [2008/11/14(金) 20:26:13 ]
プログラムにゲーム的要素を取り入れてみましょう。
例えば、迷路を抜けるプログラムを作り、
途中にある宝物を見つけなければクリアーできないとか、(これはフラグを使うことになる)
または、途中に各種イベントを配置しておき、
そこでの評価を点数化することで最後に総得点を競うといった応用が考えられます。
自由に考えることで、面白いプログラムを作成してみることができるはずだ。

1、プログラミング上の工夫(アルゴリズムが見えやすい、拡張性が高い、など)

2、コンテンツそのものの面白さ

簡単なゲームでいいです。
よろしくお願いします。

808 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:30:46 ]
>>807
>>1の書式を満たしてくれ
あとその文面は改造する元のプログラムがあるみたいだが?

809 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:58:57 ]
元なんてなくて、ゲームごと作る課題かと。



810 名前:703 mailto:sage [2008/11/14(金) 21:22:28 ]
無事完成しました。ありがとうございます。


#include<stdio.h>
int fact(int n);
int fact1(int r);
int main(void)
{
int n,r,m,nCr;
printf("n r ->");
scanf("%d %d",&n,&r);
m=n-r;
if (n < m || n < 0 || m < 0)
return printf("nCr=0\n");
nCr=fact(n)/(fact1(r)*fact(m));
printf("nCr=%d\n",nCr);
return 0;
}

int fact(int n)
{
if(n==0) return 1;
else return n*fact(n-1);
}

int fact1(int r)
{
if(r==0) return 1;
else return r*fact1(r-1);
}

811 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:25:44 ]
>>810
>>744

812 名前:デフォルトの名無しさん [2008/11/15(土) 00:12:42 ]
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):GPで画像を合成して再構成するときに45度ずつ回転して出力しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2008年11月18日
[5] その他の制限:よろしくお願いします。

813 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 00:35:27 ]
>>810
階乗、漸化式、再帰、を使ったやり方かい・・・
余談だが、int型だと符号なしでも、12の階乗が限度。
対策として、分母の階乗を考慮して、乗数を減らすことも出来るが・・・
まぁ、階乗を使う必要がある問題ならそれで良いけど、パスカルの三角形は
より値が大きくなっても求められるが、それも限度はあるけど。

814 名前:デフォルトの名無しさん [2008/11/15(土) 01:33:40 ]
どなたか>>472をCで作成お願いします!

815 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 01:55:16 ]
>>814
死ね

816 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:33:31 ]
>>814
調べりゃソースはある

817 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:35:56 ]
>>815
おっと、死ねとはどうかと。あまりにも下衆過ぎやせんか?言葉を慎めよ

818 名前:デフォルトの名無しさん [2008/11/15(土) 02:39:42 ]
[1] 授業単元:応用プログラミング
[2] 問題文(含コード&リンク): 並列再帰を使ってハノイの塔問題を処理するプログラムを組め.
               コード上で円盤の数も選択できるようにせよ.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2008年11月17日 午後5時
[5] その他の制限: Cは一通り習っていますが,ライブラリはなるべく使わずにお願いします.

どなたかよろしくお願いします.

819 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:41:50 ]
>>815
書き込む内容によってはえらいことになるよ?
気をつけたほうがいいと思う。



820 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:44:14 ]
[1] 授業単元: プログラミング
[2] 問題文: 入力したISBNコードが正しいか判断するプログラムを
       作成せよ。(配列とfor文を使うこと)

[3] 環境
 [3.1] OS: Windows
 [3.2] gcc
 [3.3] 言語:C言語
[4] 期限: 11月15日12時まで
[5] その他の制限: 特になし



821 名前:820 mailto:sage [2008/11/15(土) 02:51:40 ]
回答まだですか?

822 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:52:23 ]
>>820
旧式と新式どっちだよ

823 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:54:37 ]
ttp://ja.wikipedia.org/wiki/ISBN
ハイフンやその間の数字の数、チェックデジットも?

824 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:56:26 ]
>>821
いや俺が280だから。

>>822
新式です。

825 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:58:17 ]
>>823
ハイフンを打ち込まず
4-793-2792-8
なら
479327928とそのまま打ち込む感じでお願いします。


826 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:28:25 ]
>>820ですが
自己解決しました。

827 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:30:00 ]
してません
勝手に人の振りしないでください

828 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:46:50 ]
すみません。ISDNの間違いでした。

829 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:47:03 ]
なにをもって「正しい」と判断するんだ?
単にチェックデジットがあってればいいだけ?



830 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:57:00 ]
>>826 >>821
通報して良い?本人じゃなくても、第三者にも偽者ってバレてるんだけど?

831 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:59:11 ]
正しいというのは、チェックデジットのこともあるが、それは末尾だし
末尾を算出するのは、その手前の数によるし・・・
問題は、ハイフンごとに分けられているそれぞれの数値も
範囲が決められているとか、この世に存在するものかどうか
何かデータベースを参照して正しいかを調べるのか?それが問題だ。
考えすぎかもしれんが。

832 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 05:17:25 ]
最初の3行は978,979の数字3文字,次の1文字は国番号で決まっているから,残りは
4文字(出版者記号),4文字(書名記号),チェックディジットになるんだよな?
ちょっとやってみるわ.

833 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 07:20:34 ]
テンプレに書いてあるのにトリップ使わないのが悪い

834 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 10:37:10 ]
>>833
やりかたがよくわかりませんし、
今事情があって他人のPCを使っています。
情報漏洩したら面倒なのでやりたくないです。

835 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 10:47:32 ]
頭悪すぎる

836 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:24:01 ]
これがゆとりか。

837 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:25:28 ]
それマジでいってんのか?


838 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:54:12 ]
>>820
先頭3桁のチェックと末尾のチェックデジットのチェックのみ。
書式は >>825 のような13桁の数字のみを受け付ける。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8034.txt

839 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:55:06 ]
>>780
大変助かりました。
本当に有難う御座いました。



840 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 12:13:15 ]
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
・配列を利用し,2008年の指定された月の1日が何曜日か表示するプログラムを作成せよ
-日=0,月=1,火=2,...,土=6と数値化して計算
・その数値によって何曜日かを表示する
-2008年1月1日が火曜日(=2)であることを利用する
-求める月の前の月前までの日数を加算し7で割った余りを考える
-各月の日数を以下のような形で配列に入れておく
  days[ ]={0,31,29,...,31}

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月17日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子
            配列の初期化は習いました。
お願いします。

841 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 12:24:18 ]
>>840
#include <stdio.h>
int main()
{
int y, m, q, h;
char *s[] = {"土", "日", "月", "火", "水", "木", "金"};
puts("西暦の年、月、日をスペース区切りで入れてください");
scanf("%d %d %d", &y, &m, &q);
h = (((q + ((m + 1)*26/10) + (y % 100) + ((y % 100)/4) +
((y / 100)/4) - 2*(y / 100)) % 7) + 7 ) % 7;
printf("%d年%d月%d日は%s曜日です\n", y, m, q, s[h]);
return 0;
}


842 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 12:28:16 ]
ごめん全然問題文よんでなかった

843 名前:デフォルトの名無しさん [2008/11/15(土) 13:12:50 ]
[1] 授業単元: アルゴリズムデータ構造U
[2] 問題文(含コード&リンク):
複素数a,bを標準入力から入力し、それぞれの絶対値を求め、2つの複素数の和、差、積、商を求め
標準出力に出力するプログラムを作りたい。これらを求める関数として、複素数の絶対値を求める関数
および和、差、積、商を求める関数が
double cabs(struct mycomplex)
struct mycomplex wa(struct mycomplex,struct mycomplex)
struct mycomplex sa(struct mycomplex,struct mycomplex)
struct mycomplex seki(struct mycomplex,struct mycomplex)
struct mycomplex shou(struct mycomplex,struct mycomplex)
として作ることにした。これらの絶対値、和、差、積と商を求める関数を解答せよ
なおこの構造体は予めCの処理系には用意されているが、それを利用せず独立に考えよ。
[3] 環境
 [3.1] OS: Windows
 [3.2]
 [3.3] 言語: C

[4] 期限: 11月16日まで

[5] その他の制限:構造体の問題です 問題文に沿ってお願いします。




844 名前:デフォルトの名無しさん [2008/11/15(土) 13:18:37 ]
843の問題です
#include<stdio.h>
#include<math.h>
struct mycomplex {
double re;
double im;
};

int main()
{
struct mycomplex a,b;
struct mycomplex wa(struct mycomplex,struct mycomplex);
struct mycomplex sa(struct mycomplex,struct mycomplex);
struct mycomplex seki(struct mycomplex,struct mycomplex);
struct mycomplex shou(struct mycomplex,struct mycomplex);
double cabs(struct mycomplex);
struct mycomplex cinput(void);
void cprint(struct mycomplex);
a=cinput(); b=cinput();
cprint(wa(a,b)); cprint(sa(a,b)); cprint(seki(a,b)); cprint(shou(a,b));
printf("絶対値 cabs(a)=%f\n",carbs(a)); printf("絶対値 cabs(b)=%f\n",cabs(b));}



845 名前:デフォルトの名無しさん [2008/11/15(土) 13:20:11 ]
844の問題の続きです
struct mycomplex cinput(void)
{
struct mycomplex z;
scanf("%f %f",&z.re,&z.im);
return z;
}

void cprint(struct mycomplex z)
{
printf("複素数 = %f + i*%f\n",z.re,z.im);
}
誰かお願いします

846 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:11:56 ]
>>843
struct mycomplex wa(struct mycomplex a, struct mycomplex b)
{
struct mycomplex z = { a.re+b.re, a.im+b.im };
return z;
}

struct mycomplex sa(struct mycomplex a, struct mycomplex b)
{
struct mycomplex z = { a.re-b.re, a.im-b.im };
return z;
}

struct mycomplex seki(struct mycomplex a, struct mycomplex b)
{
struct mycomplex z = { a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re };
return z;
}

struct mycomplex shou(struct mycomplex a, struct mycomplex b)
{
struct mycomplex z = {
(a.re*b.re + a.im*b.im) / (b.re*b.re + b.im*b.im),
(a.im*b.re - a.re*b.im) / (b.re*b.re + b.im*b.im)
};
return z;
}

double cabs(struct mycomplex a)
{
return hypot(a.re, a.im);
}

847 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:18:06 ]
全然わかりません。よろしくお願いします。

[1] 授業単元:応用プログラミング論
[2] 問題文(含コード&リンク):
ある任意の点X(a,b)、Y(c,d)を乱数で求め、
X,Yからなる線分に1辺が平行であり、四角形の中心とその線分との距離が30pixelになるような四角形を描写せよ。
四角形は20×40のものを使用。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual C++ 2008
 [3.3] 言語:C++
[4] 期限: 2008年11月18日13時まで
[5] その他の制限:とくになし。

848 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:43:41 ]
四角形が20*40なのに中心から線分までの距離が30かあ。

849 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:49:46 ]
いいんじゃないか?仮に20の方が平行な辺だとしてもね。



850 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:03:00 ]
あ。読み間違えてた。
線分XYを一辺とするのかと思いこんでた。
     X
┌─┐│
└─┘│
     Y
こういうことね。

851 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:06:09 ]
┌─┤
└─┤
じゃないんだねww?

852 名前:デフォルトの名無しさん [2008/11/15(土) 18:45:07 ]
846のかた
ありがとうございます


853 名前: ◆hXvyVozAPo mailto:sage [2008/11/15(土) 19:11:10 ]
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
以下のようなプログラムを作成しなさい.

int型変数xを宣言し標準入力で適当な数値を代入する。
その変数xのアドレスを引数として、アドレスと値を表示する関数を作成せよ。

実行例
./a
? 5
変数xのアドレスは 0x00 です
変数xの値は 5 です
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名 Cygwin
 [3.3] 言語:C
[4] 期限: 11月16日 17時まで
[5] その他の制限: 授業はまだまだ初歩レベルみたいです。

854 名前:デフォルトの名無しさん [2008/11/15(土) 19:24:18 ]
#include<stdio.h>
#include<math.h>
struct mycomplex {
double re;
double im;
};
int main()
{
struct mycomplex a,b;
struct mycomplex wa(struct mycomplex,struct mycomplex);
struct mycomplex sa(struct mycomplex,struct mycomplex);
struct mycomplex seki(struct mycomplex,struct mycomplex);
struct mycomplex shou(struct mycomplex,struct mycomplex);
double cabs(struct mycomplex);
struct mycomplex cinput(void);
void cprint(struct mycomplex);
a=cinput(); b=cinput();
cprint(wa(a,b)); cprint(sa(a,b)); cprint(seki(a,b)); cprint(shou(a,b));
printf("絶対値 cabs(a)=%f\n",carbs(a)); printf("絶対値 cabs(b)=%f\n",cabs(b));
}
struct mycomplex cinput(void)
{
struct mycomplex z;
scanf("%f %f",&z.re,&z.im);
return z;


855 名前:デフォルトの名無しさん [2008/11/15(土) 19:29:32 ]
}
struct mycomplex cinput(void) {
struct mycomplex z;
scanf("%f %f",&z.re,&z.im);
return z; }
void cprint(struct mycomplex z) {
printf("複素数 = %f + i*%f\n",z.re,z.im); }
struct mycomplex wa(struct mycomplex a, struct mycomplex b) {
struct mycomplex z = { a.re+b.re, a.im+b.im };
return z; }
struct mycomplex sa(struct mycomplex a, struct mycomplex b) {
struct mycomplex z = { a.re-b.re, a.im-b.im };
return z; }
struct mycomplex seki(struct mycomplex a, struct mycomplex b) {
struct mycomplex z = { a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re };
return z; }
struct mycomplex shou(struct mycomplex a, struct mycomplex b) {
struct mycomplex z = {
(a.re*b.re + a.im*b.im) / (b.re*b.re + b.im*b.im),
(a.im*b.re - a.re*b.im) / (b.re*b.re + b.im*b.im)
};
return z; }
double cabs(struct mycomplex a) {
return hypot(a.re, a.im); }
すいません、動かないんで何処が違うか教えてください
854の続きです



856 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:32:14 ]
>>853
#include<stdio.h>
void pp(int *x)
{
printf("変数xのアドレスは 0x%p です\n", x);
printf("変数xの値は %d です\n", *x);
}
int main(void)
{
int x;
fputs("? ", stdout);
scanf("%d", &x);
pp(&x);
return 0;
}

857 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:35:21 ]
>>855
見づらいし
インデントしなおすのもめんどくさいから
素直にろだにあげろカス

858 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:37:24 ]
>>855
carbs → acabs

859 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:49:51 ]
>>854
関数宣言を main の外へ出せ



860 名前:デフォルトの名無しさん [2008/11/15(土) 20:07:38 ]
859の方
わからないので、8036でアップいましたので修正お願いします
ほかの方も教えてくれるとありがたいです

861 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:13:17 ]
C++です。
二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作りたいんです
 
 
整数1は37
整数2は28
28〜37までの全整数の和は325
for文は使わずにお願いします。
 
 
よろしくお願いしますm(_ _)m



862 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:19:13 ]
>>860
関数宣言を main 関数の外へ
scanf のフォーマットが違った。 %f -> %lf
main 関数の最後に return 0; を追加
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8037.txt

863 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:26:58 ]
>>859
別に関数宣言は問題ではないと思うが

標準ライブラリのcabs()と被るのでacabs()に名前変更
main()には、return 0;でもつけてね
cinput()内のscanf()は、%fではなくて%lfにする
shou()内の(b.re * b.re + b.im * b.im) != 0 を保証すべき
acabs()でhypot()呼んでいるので、必要に応じてリンクする






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<337KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef