07/06/26 12:05:23
やった!おまいら釣られてやんのっ(プ
コードを見りゃ加算されるわけねーってバレバレじゃんw
254:デフォルトの名無しさん
07/06/26 12:08:09
いや、顔真っ赤にして後釣り宣言しなくていいから。
255:デフォルトの名無しさん
07/06/26 12:12:20
プププッ、ネタでボケて書いたことをマジに受けて茶化し、煽りレス入れている
こんな時間にいる引きこもりニーツがきめぇ~~んだよ(プ
俺?俺は大学の研究室からやw
256:デフォルトの名無しさん
07/06/26 12:14:46
どこの脳内研究室なんだか。
257:デフォルトの名無しさん
07/06/26 12:15:18
都内の某ランクSの大学ですが何か?
258:デフォルトの名無しさん
07/06/26 12:16:38
それじゃ、次のボケをお願いします。もうちょっと判り難いのがいいかな。
259:デフォルトの名無しさん
07/06/26 12:19:03
>257
本当にSランクなら、そもそも釣りなんて無駄なことはしない
260:デフォルトの名無しさん
07/06/26 12:20:19
>>244 を実行してみたけど、1日の表示がおかしい、曜日がきちっと算出されていない。
もうこんなんじゃ、月(付き)合ってらんね~
261:デフォルトの名無しさん
07/06/26 12:21:39
>>259
Sランク級の釣りにビビッてんだろぉ?Sランク級の釣りにお前がチビッているのがわかるぜ?
262:デフォルトの名無しさん
07/06/26 12:25:59
ランクSAITEIのランクSだなw
263:デフォルトの名無しさん
07/06/26 12:28:03
ちっちっち、違うぜ?Sugoi、Super、SutekiのSだぜ?お前らとは質が違うよ、質が。
264:デフォルトの名無しさん
07/06/26 12:31:44
[1] プログラミング基礎
[2] 以下のプログラムは,都道府県名(ローマ字)を入力すると,各都道府県の人口(人)と面積(km2)が列挙されたファイル prefectures.dat
からデータを読み込み,指定した都道府県の人口,面積およびそれらの比である人口密度を表示するプログラムである.
このプログラムを以下の例のように,人口,面積について 日本全体の総和に対する比率(百分率) も表示されるように書き換えよ.
実行例:
nodabls?% ./a.out[Enter]
chiba[Enter]
Statistics of the Chiba
Population = 6056159 (4.7 %)
Area (km^2) = 5156.19 (1.4 %)
Density (per km^2) = 1174.54
[3.1] Unix
[3.2] gcc
[3.3] c
[4] 2007年6月29日(金)
265:デフォルトの名無しさん
07/06/26 12:33:21
続き
プログラム
/* density.c: calculate population density for the given prefecture */
#include <stdio.h>
#include <strings.h>
int main(void)
{
char name[20], query[20];
int pop;
double area, den;
FILE *fp;
fp = fopen("prefectures.dat", "r"); /* ファイルオープン */
if (fp == NULL) { /* オープンに失敗? */
fprintf(stderr, "Can't open file!\n");
return (-1);
}
scanf("%s", query); /* 都道府県名を入力 */
den = -1.0;
/* 1行分の情報を読み込みつつループをファイル末尾まで繰り返し */
while (fscanf(fp, "%s%d%lf", name, &pop, &area) != EOF) {
if (strcasecmp(name, query) == 0) { /* 都道府県名が一致? */
den = pop / area; /* 人口密度 = 人口/面積 */
printf("Statistics of the %s\n", name);
printf("Population = %10d\n", pop);
printf("Area (km^2) = %10.2f\n", area);
printf("Density (per km^2) = %10.2f\n", den);
break; /* ループから抜ける */
266:デフォルトの名無しさん
07/06/26 12:35:32
}
}
fclose(fp); /* ファイルクローズ */
if (den < 0.0) { /* 都道府県名が正しくない? */
fprintf(stderr, "No such prefecture (%s)!\n", query);
return (-1);
}
return (0);
}
267:デフォルトの名無しさん
07/06/26 12:38:46
続き
prefectures.dat ファイル
Hokkaido 5627424 83453.04
Aomori 1436628 9606.33
Iwate 1385037 15278.40
Miyagi 2359991 7285.07
Akita 1145471 11612.11
Yamagata 1216116 9323.34
Fukushima 2091223 13782.48
Ibaraki 2975023 6095.58
Tochigi 2016452 6408.28
Gumma 2024044 6363.16
Saitama 7053689 3797.30
Chiba 6056159 5156.19
Tokyo 12570904 2186.90
Kanagawa 8790900 2415.41
Niigata 2431396 12582.37
Toyama 1111602 4247.22
Ishikawa 1173994 4185.22
Fukui 821589 4188.75
Yamanashi 884531 4465.37
Nagano 2196012 13585.22
Gifu 2107293 10598.18
Shizuoka 3792457 7779.46
Aichi 7254432 5155.84
Mie 1867166 5776.40
Shiga 1380343 4017.36
268:デフォルトの名無しさん
07/06/26 12:40:30
Kyoto 2647523 4612.94
Osaka 8817010 1892.86
Hyogo 5590381 8392.03
Nara 1421367 3691.09
Wakayama 1036061 4725.55
Tottori 606947 3507.17
Shimane 742135 6707.29
Okayama 1957056 7112.13
Hiroshima 2876762 8476.95
Yamaguchi 1492575 6110.45
Tokushima 809974 4145.10
Kagawa 1012261 1875.88
Ehime 1467824 5676.22
Kochi 796211 7104.66
Fukuoka 5049126 4971.01
Saga 866402 2439.23
Nagasaki 1478630 4092.44
Kumamoto 1842140 7403.68
Oita 1209587 6337.97
Miyazaki 1152993 7734.40
Kagoshima 1753144 9186.71
Okinawa 1360830 2271.30
長くなってすみません。よろしくお願いします。
269:デフォルトの名無しさん
07/06/26 12:44:11
次のjavaのプログラムをcに直してください
public class JobShop_EDD{
static int Job=3;
static int Machine=2;
static int K=30;
static int [] duedate={0,7,9,13,14,20};
static int [] [] process={{},{0,3,3,2,},{0,2,3,2},{0,2,3,3},{0,3,2,3},{0,2,2,2}};
static int [] [] route={{},{0,1,2,3},{0,2,1,3},{0,3,1,2},{0,3,2,1},{0,2,1,3}};
static int [] weight={0,2,2,2,2,2};
270:デフォルトの名無しさん
07/06/26 12:45:02
>>252
URLリンク(kansai2channeler.hp.infoseek.co.jp)
直してみたものですが。
月曜じゃないんですか?人伝えに聞いたので曖昧ですが
271:デフォルトの名無しさん
07/06/26 12:49:23
>>270 よくわからんから俺流ツェラーの公式を使ってやんよ
int youbi(int year,int month,int day)
{
if(month<=2) { year--; month+=12; }
return ( year + year/4 - year/100 + year/400 + (13*month+8)/5 + day )%7;
}
272:デフォルトの名無しさん
07/06/26 13:04:56
>>239
>>240
ありがとうございました。またなにかありましたらよろしくおねがいします。
273:デフォルトの名無しさん
07/06/26 14:56:55
>>264
問題が長い時は、ロダにtxtでうpしてリンク貼る
長いソースは拡張子を変えずにロダにうp
複数のレスに別けられると見辛い
>>269
メソッドが無くて、変数だけか。それを構造体にすればいいのか?
274:デフォルトの名無しさん
07/06/26 15:37:20
day[2]じゃねーだろ
275:デフォルトの名無しさん
07/06/26 15:57:25
>>264
URLリンク(kansai2channeler.hp.infoseek.co.jp)
276:デフォルトの名無しさん
07/06/26 16:00:47
264をよろしくお願いします。
277:275
07/06/26 16:05:51
>>264
URLリンク(kansai2channeler.hp.infoseek.co.jp)
278:デフォルトの名無しさん
07/06/26 16:07:10
>>271
有り難うございます。この部分はすり替えておきます。
279:デフォルトの名無しさん
07/06/26 16:11:48
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): コマンドラインで指定した二つのファイルを交換しろ
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++ Compiler 5.5
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
なんかうまく動きません
助けてください
280:デフォルトの名無しさん
07/06/26 16:16:23
一時ファイル使っちゃ駄目なの?
281:デフォルトの名無しさん
07/06/26 16:21:31
while(fputc(*p,fp2) != EOF)
;
多分、*p++なんだろうな
282:デフォルトの名無しさん
07/06/26 16:21:49
>>232
題意に沿ってるかワカランが
URLリンク(kansai2channeler.hp.infoseek.co.jp)
283:デフォルトの名無しさん
07/06/26 16:22:45
訂正
while(fputc(*p,fp2) != EOF)
p++;
のがいいか
284:デフォルトの名無しさん
07/06/26 16:24:07
>>280
どうやって使うんですか?
ファイル入ったばかりでどうしていいのかさっぱりです・・・
>>281
ミスです・・・どうもです
285:デフォルトの名無しさん
07/06/26 16:30:42
w+ → r+
286:デフォルトの名無しさん
07/06/26 16:32:01
>>279
こんなモンでいいと思うよ
#include <stdio.h>
int main(int argc, char **argv)
{
char *tmp;
/* 引数の制限 */
if (argc != 3) {
printf("使用法:<プログラム名> <ファイル名1> <ファイル名2>\n");
return 1;
}
tmp = tmpnam(0);
if (!rename(argv[1], tmp))
if (!rename(argv[2], argv[1]))
if (!rename(tmp, argv[2]))
return 0;
perror("rename");
return 1;
}
287:デフォルトの名無しさん
07/06/26 16:45:04
>>286
名前じゃなくて中身を交換するようにしたいんです
できれば>>279の間違ってる部分を修正してもらえるとありがたいです
288:デフォルトの名無しさん
07/06/26 16:56:08
修正は面倒臭いんだよな
一から作った方がよほど早い
289:デフォルトの名無しさん
07/06/26 16:59:28
そこをなんとか・・・
290:デフォルトの名無しさん
07/06/26 17:11:27
名前の交換も中身の交換も結果としては同じなんだから、簡単なほうがいいと思うけど。
291:デフォルトの名無しさん
07/06/26 17:16:30
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):キーボードから2つのファイル名を指定し、1つめのファイルの末尾に2つめのファイルの内容を追加するプログラムを作成せよ.
ファイル名は最大15文字とする.
ファイルの1行の最大文字数は31文字とする.
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限:
292:デフォルトの名無しさん
07/06/26 17:23:14
>>279 ほれ
#include <stdio.h>
int copy(char *from, char *to)
{
FILE *fi, *fo;
int c;
if ((fi = fopen(from, "rb")) == NULL)
return perror(from), 0;
if ((fo = fopen(to, "wb")) == NULL)
return perror(to), fclose(fi), 0;
while ((c = getc(fi)) != EOF) putc(c, fo);
return fclose(fi), fclose(fo), 1;
}
int main(int argc, char **argv)
{
char *tmp;
int result;
/* 引数の制限 */
if (argc != 3) {
printf("使用法:<プログラム名> <ファイル名1> <ファイル名2>\n");
return 1;
}
tmp = tmpnam(0);
result = (copy(argv[1], tmp) && copy(argv[2], argv[1]) && copy(tmp, argv[2]));
remove(tmp);
return !result;
}
293:286=292
07/06/26 17:34:21
>>279
モード"r+"で2つのファイル開いて一時ファイルを使わずに内容を交換しようという
志自体は面白いが、読み書きのたびにftell()/fseek()の類で読み書き位置を
移動する必要があるし、ファイルサイズが異なるファイルを交換する場合、
最後にファイルサイズを変更する(切り詰める)手段が必要だ。
大抵のシステムにはそうした手段が用意されているが、C標準には存在しない。
まあおとなしく>>286か>>292のコードを使っとけ。
294:デフォルトの名無しさん
07/06/26 17:34:42
>>291
ほれ。
制約の意味がわからんのだが、ファイル名の最大長とか1行の最大長とかはなんかの縛りなのか?
#include <stdio.h>
#ifndef EOF
#define EOF -1
#endif
int main(int argc, char **argv){
char c;
FILE *fp1 = NULL, *fp2 = NULL;
if( (fp1 = fopen(argv[1], "ab")) == NULL ||
(fp2 = fopen(argv[2], "rb")) == NULL)
return -1;
fseek(fp1, 0, SEEK_END);
while((c = fgetc(fp2)) != EOF){
fputc(c, fp1);
}
fclose(fp1);
fclose(fp2);
return 0;
}
295:デフォルトの名無しさん
07/06/26 17:37:02
>>293
デカい方のファイルに合わせてバッファ確保して中身入れ替えりゃいいんじゃねぇの
296:デフォルトの名無しさん
07/06/26 17:39:36
>>295
ファイルを計4回開く気があるのならそれでいいね。
最初に"rb"で開いて一気読みして次に"wb"ね。
質問者の意図とは異なると思うが。
297:デフォルトの名無しさん
07/06/26 17:44:28
なんで4回も開く必要がある
r+とfseek()使え
298:デフォルトの名無しさん
07/06/26 17:46:35
>>297
だから、それだとファイルを切り詰められないでしょ
299:デフォルトの名無しさん
07/06/26 18:14:18
freopenってのがあったような
300:デフォルトの名無しさん
07/06/26 18:23:30
>>291
copy /B file1+file2
301:デフォルトの名無しさん
07/06/26 18:25:29
>>294さん
テストの過去問題なんで、テストの問題のうちなんだと思います。
302:デフォルトの名無しさん
07/06/26 18:54:38
>>301
なるほど、指定のテキストファイル読めとかそーゆう縛りね
んじゃ要求通りだとこんな感じかね?
#include <stdio.h>
#ifndef EOF
#define EOF -1
#endif
#define LINE_MAX 32
#define FILENAME_MAXLENGTH 15
int main(int argc, char** argv){
char buf[LINE_MAX];
FILE *fp1 = NULL, *fp2 = NULL;
if( strlen(argv[1]) > FILENAME_MAXLENGTH || strlen(argv[2]) > FILENAME_MAXLENGTH)
return -2;
if( (fp2 = fopen(argv[2], "rb")) == NULL || (fp1 = fopen(argv[1], "ab")) == NULL)
return -1;
while(fgets(buf, LINE_MAX, fp2) != NULL) // 1行が32文字を超えると切り捨てられるけど
fputs(buf, fp1);
fclose(fp1);
fclose(fp2);
return 0;
}
303:デフォルトの名無しさん
07/06/26 19:39:19
[1] 授業単元: プロC
[2] 問題文(含コード&リンク):
1.まず、 pwd を実行し、成功すれば、 ls を実行する。
ただし、コマンドライン引数はすべてls にそのまま渡すものとする。
2.オプション -c があれば、 date を実行し、その後、 cal を実行する。
オプションを指定しなければ、 date だけを実行する。
ただし、オプション -z timezone があれば、
環境変数TZの値をtimezoneに設定して、各コマンドを実行する。
3.findコマンドを呼び出して、指定されたディレクトリ
(複数可。指定がない場合は、カレントディレクトリ)
以下にあるディレクトリ(指定されたディレクトリ自身も含む)を表示する。
[3] 環境
[3.1] OS:Vine Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限:よろしくお願いします。
304:デフォルトの名無しさん
07/06/26 19:43:44
↑
<サンプルプログラム1>
URLリンク(www.cc.kyoto-su.ac.jp)
<サンプルプログラム2>
URLリンク(www.cc.kyoto-su.ac.jp)
305:デフォルトの名無しさん
07/06/26 19:45:37
↑
書き忘れです(汗)
pwdを実行し、成功すれば、その後、ls -lを実行するプログラムです
306:デフォルトの名無しさん
07/06/26 19:56:11
>>303-305
日本語でおk
307:デフォルトの名無しさん
07/06/26 20:19:36
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
学生のデータベースを作成する。
まずは学生の名前と大学名、学科、生年月日(年はintで月日はshortで定義する)、趣味で構成される構造体を作る。
これらは全て実際には存在するような名前にしないこと。
初めに学生5人が与えられている。->URLリンク(kansai2channeler.hp.infoseek.co.jp)
プログラムは、0から3のうちいずれかを入力し0が入力されるまでプログラムを繰り返す。
0を入力したときプログラムを終了する。
1を入力したときすべての学生をバイナリモードでテキストファイルに出力し、画面上にも出力する。
2を入力したとき何番目かの学生(1と入力したら1番目という風に)を画面上に出力する。
3を入力したとき新しい学生を追加する(名前,大学名,生年月日,趣味)。
またメモリーはでいつでも1人分の学生のデータしか保持しない。
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] 言語: C
[4] 期限: 6/27
[5] その他の制限: 特になし
よろしくお願いします。
308:デフォルトの名無しさん
07/06/26 20:36:36
[1] 授業単元:プログラム技術
[2] 問題文(含コード&リンク):
1.正整数n を入力し,2 ~ n の範囲にある素数およびその個数を求めるプログラムを作成
しなさい.
2.年(西暦),月,日を入力したとき,入力した年月日の曜日を出力するプログラムを作成
しなさい.
3.下の表のような時間を入力したとき,その総時間を求めるプログラムを作成しなさ
い.なお,表のデータは例なので,汎用的に扱えるように,数と
時間は実行時に任意の数を入力すること.
例
1 動画50 分08 秒
2 動画29 分38 秒
3 動画15 分49 秒
4 動画22 分50 秒
5 動画11 分02 秒
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限
来週の火曜辺りまで
[5] その他の制限
なし
よろしくお願いします
309:デフォルトの名無しさん
07/06/26 20:57:36
>>302さんありがとうございました。テストできるようにがんばります。
310:デフォルトの名無しさん
07/06/26 20:59:31
>>308
3は総時間をどう表示すればいい?
合計○○時間△△分□□秒でおk?
311:デフォルトの名無しさん
07/06/26 21:03:40
あと3の時間は
どう入力させればいいんだ?
>>310における○○、△△、□□をそれぞれ入力してもらう形?
それとも、「* 動画** 分** 秒」を全部入力させる形?
312:デフォルトの名無しさん
07/06/26 21:24:41
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
2つのベクトル要素の値をキーボードから読み込み、その内積を計算するプログラムを
作りなさい。要素の値はdouble型であるものとする。
・ベクトルの要素数の指定はオブジェクト形式マクロ(#define指令)で行う(値は6とする)
・ベクトルの要素の値はキーボードから読み込む
・データの読み込みや内積の計算などの繰返し部分はfor文で行う
・結果は、読み込んだ各ベクトルの値を横ベクトルとして表示した後、その次の行に出力する
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限: 6月27日まで
全くわかりません 誰か助けてください
313:308
07/06/26 22:01:13
>>311
○○、△△、□□をそれぞれ入力してもらう形です。
総時間は△△分□□秒でお願いします。
○○時間△△分□□秒でも問題はないとは思いますが・・・・
314:デフォルトの名無しさん
07/06/26 22:14:13
>>312
URLリンク(kansai2channeler.hp.infoseek.co.jp)
315:デフォルトの名無しさん
07/06/26 22:16:32
あー
できてから気づいたけど、
ELEMENTを可変にするならprintfでベクトルを出力してるところは
もっとちゃんと書けばよかったな
カッコとかが汚いと思ったからこんな風に書いたけど
316:デフォルトの名無しさん
07/06/26 22:20:48
>>313
まあ時間あるみたいやし
ゆっくりやらせてもらうわ
他の人でやったるって人が出てきたら俺にかまわずやってください
317:デフォルトの名無しさん
07/06/26 22:29:24
>>314
ありがとうございました
ついでに多次元配列をつかったらどんなプログラムができるんですか?
318:デフォルトの名無しさん
07/06/26 22:31:20
見た目がちょっとよくなるだけで
プログラム自体はほとんど変化しないからあんまり気にしない方がいい
319:デフォルトの名無しさん
07/06/26 22:34:25
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
same.cをファイル入出力対応版に変更しなさい。
same.c →URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 27日正午まで
[5] その他の制限: 特にナシ
実行例
[home@***~/home]% cat filesame.in
ABC
ABC
[home@***~/home]% ./filesame
filename: filesame.in
[home@***~/home]% cat filesame.out
yes
[home@***~/home]%
よろしくお願いします。
320:デフォルトの名無しさん
07/06/26 22:55:27
[1] 授業単元: C言語
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語: C
[4] 期限: 27日まで
[5] その他の制限:再帰法まで習った
よろしくお願いします。
321:デフォルトの名無しさん
07/06/26 23:22:46
[1] 授業単元: C言語
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.3] 言語: C
[4] 期限: 27日まで
よろしくお願いします
322:デフォルトの名無しさん
07/06/26 23:45:03
>>306
おいっ、日本語が読めない在日が何こんなところで日本人の相手をしてんだ?
とっとと祖国へ帰れよ。お前みたいな役立たずはここには必要はない。
323:デフォルトの名無しさん
07/06/26 23:47:07
このスレから役立たずを取り除いたら、何が残るんだっていうんだ
324:デフォルトの名無しさん
07/06/26 23:48:55
>>321
キーボードから読み込む方法?
それって代入に含まれるんじゃないか?
とりあえず
・初期化
int array[] = {0, 1, 2, 3, 4, 5};
要素数を指定しなくても初期化子の数で勝手に合わせてくれる。
固定的なデータを保持する用途とかが一般的なんじゃないかな。
・代入
array[0] = 0;
変動的で、同じような系統のデータをまとめて保持するのに使うのが一般的。
ランダムアクセスには強いが、データの追加と削除に弱い。
まぁconstでもつけなきゃ初期化した配列も普通に代入できるから結局あんま差はない希ガス。
こんなんでいいの?
325:デフォルトの名無しさん
07/06/26 23:49:38
>>320
目に付いた(2)だけ
#include <stdio.h>
double pow_f(double x, int p) {
double f;
if(p==0) return 1;
f = pow_f(x, p-1) * (x-p+1);
return f;
}
int main(void) {
double x;
int p;
scanf("%lf %d",&x ,&p);
printf("%.1f",pow_f(x, p));
return 0;
}
326:デフォルトの名無しさん
07/06/26 23:50:35
>>323
宿題にスマートに答える役立つ人材
327:デフォルトの名無しさん
07/06/26 23:52:59
役立たずがいなくなるということは宿題丸投げ自体が無くなるということだから・・・
人がいるのかいないのか分からないままでdat落ちしてしまうね
328:デフォルトの名無しさん
07/06/26 23:54:30
>>327
出題者はスレの維持に役立っていますので
役立たずではありません
329:デフォルトの名無しさん
07/06/26 23:55:57
もともとそういう趣旨のスレだしな
330:デフォルトの名無しさん
07/06/27 00:02:10
>>320
全部再起なんか使わなくてもできる
非常に悪い再起の例
再起は必要以上にスタック喰い潰すから使わないで済むなら極力使わないほうがいい
って、なんの答えにもなっとらんな
331:デフォルトの名無しさん
07/06/27 00:03:30
綺麗なソースを作ろうと思い、セオリーを守ってる(グローバル変数を極力使わないようにしてる・・・etc)が
実に汚いソースになる。
汚いと分かっていながらどこをどの様に修正すれば良いのか皆目検討つかないから困る。
助けて・・・。
332:デフォルトの名無しさん
07/06/27 00:08:28
>>324
ありがとう
できればもう少し詳しく説明して欲しいです
333:デフォルトの名無しさん
07/06/27 00:17:42
>>331
広域変数は悪じゃない
staticで外部モジュールから参照できないようにするとか
きっちり管理さえすれば忌み嫌うものではない
むしろ広域変数を無理に避けようとして余計マズい設計になることの方が、本来避けるべき
>>332
これ以上詳しく説明しろといわれてもな
Cで使ってる以上は、constにさえ気をつければ初期化も代入もそんな大層な差はない
C++だとまた話が変わってくるんだけど
具体例見るのが一番手っ取り早いから、いろいろ調べてみ
334:デフォルトの名無しさん
07/06/27 00:18:49
>>308 1と2をとりあえず先に
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
335:332
07/06/27 00:26:28
>>333
わかりました
色々ありがとうございました!
336:331
07/06/27 00:28:34
>>333
うん。
今日、指摘された。
staticのスコープは定義された箇所のみが有効範囲だよね?
でもアドレス渡ししたらスコープ外の場所でも値を書き換えたり出来る?
多分、出来たとしてもやっちゃ駄目なんだろうけど・・・。
337:デフォルトの名無しさん
07/06/27 00:38:00
どうでもよいが>>331よ。それは宿題の話なのか。
C言語に関する一般的な相談事ならスレ違いだぞよ。
338:デフォルトの名無しさん
07/06/27 00:41:11
>>336
そう、staticは参照の範囲を同一のファイル内だけに限定できる。
そして、指摘の通り
int g_data = 0; // 広域変数
int *getGlobal(void) { return &g_data; }
みたいなのも、手法としてはある。
利点は、広域変数をモジュールの中に置ける事で、Cでオブジェクト指向もどきな設計ができること。
反面、C++のgetterと違ってポインタを取得できてしまうから、それを通じて外から値を書き換えてしまうこともできる。
でもgotoと一緒で使いどころさえ間違えなければ大丈夫。
339:デフォルトの名無しさん
07/06/27 00:52:26
>>320
再帰で(3)
int arr_max_pos(int arr[], int n){return n?arr[n-1]>arr[arr_max_pos(arr,n-1)]?n-1:arr_max_pos(arr,n-1):0;}
340:デフォルトの名無しさん
07/06/27 00:57:16
>>320 (1)
int div_pow(int n,int p){return n%p?0:div_pow(n/p,p)+1;}
int div_quo(int n,int p){return n%p?n:div_quo(n/p,p);}
341:デフォルトの名無しさん
07/06/27 00:59:12
>>308
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
342:デフォルトの名無しさん
07/06/27 06:44:44
関数内で宣言したstatic変数(下の例ではa__)を自在にいじりたいなら…
下品だけどねw
static int a;
int hoge(){
static int a__ = 123;
a = a__;
return(0);
}
int getglobal(){
a+=10;
return(a);
}
int main(){
hoge();
printf("%d", getglobal());
return(0);
}
343:デフォルトの名無しさん
07/06/27 06:50:26
意味分らん
344:デフォルトの名無しさん
07/06/27 07:25:54
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
以下の式のおいて、刻み幅が0.2のときの解析解をオイラー法で求めよ。
y(0)=0 y'(0)=0
y'=z
z'=-z-2y+cosx
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc-2.95
[3.3] 言語: C、C++どちらでも良い
[4] 期限:6/27
[5] その他の制限:
お手上げ状態です。よろしくお願いします。
345:デフォルトの名無しさん
07/06/27 08:43:25
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 多次元配列
次の表は今年の全日本大学野球選手権における
早稲田大学の試合結果である。
2回戦 1 2 3 4 5 6 7 8 9
早稲田大 0 0 1 0 1 0 0 0 0
九州国際大 0 0 0 0 0 0 0 0 1
準々決勝
早稲田大 0 5 4 0 0 0 0 0 7
関西国際大 0 0 0 0 3 0 0 0 0
準決勝
創価大 1 0 0 0 0 0 0 0 0
早稲田大 6 0 0 1 0 1 0 2 0
決勝
早稲田大 1 0 0 2 0 0 1 0 0
東海大 0 0 0 0 0 1 0 0 0
それぞれの試合について各回の得点と失点(表裏ではないので注意)を 2×9の2次元配列に格納するものとする。
試合分のデータがあるので、4×2×9の3次元配列scoreを用意して、得失点を配列の宣言と同時に初期値として格納しなさい。
また以下の内容を計算して出力しなさい。
4試合の平均得点と平均失点
各回ごと(1から9回)の4試合の平均得点と平均失点
多次元配列の要素を参照するには‥多重ループを使う
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C [4] 期限:来週まで
[5] その他の制限: 特になし
お願いします
346:デフォルトの名無しさん
07/06/27 09:11:52
クソ簡単やないか
なめとんか
347:デフォルトの名無しさん
07/06/27 09:15:34
>>344
y' = z とう条件は不要なんじゃないかと思うが
#include <stdio.h>
#include <math.h>
#define N 100
double f(double y, double z)
{
return -z - 2.0 * y + cos(y);
}
int main(void)
{
double y[N], z[N], dx = 0.2;
int i;
y[0] = z[0] = 0.0;
for (i = 0; i < N; i++) {
y[i] = y[0] + i * dx;
z[i + 1] = z[i] + dx * f(y[i], z[i]);
printf("y = %f, z = %f\n", y[i], z[i]);
}
return 0;
}
348:デフォルトの名無しさん
07/06/27 09:20:12
>>347
師匠。
349:デフォルトの名無しさん
07/06/27 09:23:34
やべえ
double y[N], z[N], dx = 0.2;
を
double y[N + 1], z[N + 1], dx = 0.2;
に直しておいてくれ。
あとf()のcos(y)は題意ではcos(x)になっているが間違いだよな?
350:デフォルトの名無しさん
07/06/27 09:24:42
問題には cosx ってあるが cos y で宜しいんかな?
351:デフォルトの名無しさん
07/06/27 09:27:55
cos x だったとしたら解けん。
352:デフォルトの名無しさん
07/06/27 10:40:57
>>319
#include <stdio.h>
int mycmp(char *m1 ,char *m2)
{
while (*m1 != '\0')
if(*m1++ != *m2++)
return 0;
if(*m1 == *m2)
return 1;
}
int main(int argc, char *argv[])
{
char m1[256], m2[256];
FILE *fp;
fp = fopen(argv[1], "r");
fgets(m1,256,fp);
fgets(m2,256,fp);
fclose(fp);
if(mycmp(m1, m2))
puts("yes");
else
puts("no");
return 0;
}
エラー処理はしてないにょ。動かしてもいないけど、これ以上は自分で。
ちゃんと授業を受けるか、さもなくばIT関連の就職先はあきらめろ。
353:デフォルトの名無しさん
07/06/27 11:36:26
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
「在庫問題」
ある倉庫を考える。この倉庫は営業開始時において、毎日Sトンの初期在庫量を有する。1日の注文量rが確率的に発生するとき、営業終了時間の最終在庫量(S>rの場合)、不足量(S<rの場合)とする。
注文量rが正規分布N(100,20^2);すなわち平均100、標準偏差20の正規分布に従う乱数と仮定する。
平均100、標準偏差20の正規分布に従う乱数は以下で求められる。
0以上、1以下の一様実数乱数をUiとする。それを次式に代入することによって、標準正規乱数Xとなる。
X=U1+U2+……U12-6
Xを次式に代入することによってY(標準偏差20の正規分布に従う乱数)となる。
Y=20X+100
維持費:1トンにつき120円(最終在庫量に対して)
品切損失:1トンにつき180円(不足量に対して)
補充経費:1回につき15000円(補充量に依存せず)
総経費:維持費+品切損失+補充経費
(1)補充発注に関して、自分の採用した決定方法を述べよ。
これは、
2日目以降の初期在庫量が毎回200トンになるようにする。
例えば、第一日目の初期在庫量が125トンだから、その日の注文量が100だとすると125-100=25で最終在庫量25トンだから、その日の
補充量は200-25=175で175トン発注するというふうにする。
(2)そのような補充を行い、1000日間の、初期在庫量、最終在庫量、補充量、総経費について、1日あたりの平均値を求めよ。
なお、第一日目の初期在庫量を125トンとする。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: どちらでも可
[4] 期限: 2007年06月28日12:00まで
[5] その他の制限: なし
度々すいませんm(__)m
354:デフォルトの名無しさん
07/06/27 13:07:42
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
1.まず、 pwd を実行し、成功すれば、 ls を実行する。
ただし、コマンドライン引数はすべてls にそのまま渡すものとする。
2.オプション -c があれば、 date を実行し、その後、 cal を実行する。
オプションを指定しなければ、 date だけを実行する。
ただし、オプション -z timezone があれば、 環境変数TZの値をtimezoneに設定して、各コマンドを実行する。
3.findコマンドを呼び出して、指定されたディレクトリ
(複数可。指定がない場合は、カレントディレクトリ)
以下にあるディレクトリ(指定されたディレクトリ自身も含む)を表示する。
↓サンプルプログラム
pwdを実行し、成功すれば、その後、ls -lを実行するプログラム
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Vine Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限:なし
よろしくお願いします。
355:デフォルトの名無しさん
07/06/27 13:35:02
[1] 授業単元:アルゴリズム論
[2] 問題文(含コード&リンク):
インサートソートに関する問題
左からつめる方式の昇順アルゴリズムである次のソートプログラムを、右からつめる
降順に書き直せ。
ソートプログラム
URLリンク(kansai2channeler.hp.infoseek.co.jp)
inp1.datというファイルには、20個の2桁の整数が入っているものとする。
[3] 環境
[3.1] OS:Windows XP
[3.3] 言語:C言語
[4] 期限:6月28日(木)まで
お願いします
356:バケツ
07/06/27 13:50:59
[1] 授業単元:C言語演習2
[2] 問題文(含コード&リンク):
バケツ法-並び替え(詳細は後述)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ:gcc
[3.3] 言語:C
[4] 期限: できれば早いほうがいいです。
[5] その他の制限: 特にありません
357:バケツ
07/06/27 13:53:03
aka
ao
kuro
これら三つのデータをアルファベット順に並び替える。
この場合、akaの後ろには半角スペースが1つあり、
aoの場合は2つあると考えて並び替える。
1 2 3 4
ao ao aka ao
aka aka ao aka
kuro kuro kuro kuro
優先順位としては
スペース>アルファベットです。
358:バケツ
07/06/27 13:55:07
1は語尾の文字列に焦点を合わせ、
2は前から三番目、3は前から二番目、4は頭文字に焦点を合わせて並び替える。
説明すると、1ではaoはスペース、akaはスペース、kuroはoなので
上記のような順になる。
このようにして最終結果(頭文字の並び替え)がでるまでこの作業を繰り返し、
出力する。
説明不足かもしれませんが、よろしくおねがいします
katori
nakata
murata
hanada
sakata
tanaka
を配列の要素として作成してください。
scanfを用いて作成してもらってもかまいません。
359:デフォルトの名無しさん
07/06/27 14:00:26
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
次のプログラムをユーザー関数を用いて、階層化せよ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:WindowsXP
[3.3] 言語:c言語
[4] 期限:6月28日(木)
リンク先のプログラムは一つ前の問題を自分で書いたものですが、
コンパイルできることを確認しています。
よろしくお願いします。
360:TKO48
07/06/27 14:20:23
ゲーミング
今回からあつかう問題は営業時間から翌日の営業時間の間の補充量を
可変とし、補充量決定方法をけんとうする。
もっとも単純な考え方として①営業終了時の最終在庫量②経費の合計
から翌日の初期在庫量(補充量)を決定
ただし、今回は補充発注1回ごと(補充量によらない)に一定の経費を
支払うものとする
発注する経費は以下のとうりである
維持費:1tにつき120円(最終在庫量にたいして)
品切れ損失:1tにつき180円(不足量にたいして)
補充量:1回につき15.000円(補充量によらない)
課題
注文量が正規分布N(100,20^2);すなわち平均100,標準偏差20
の正規分布に従う乱数と仮定し、毎の補充量を入力することで1000日間
の経過を調べる。
(1)補充発注に関して自分の採用した決定方法を述べよ。
(2)そのような補充を行い、初期在庫量、最終在庫量、補
充量、総経費について、1日あたりの平均値を求めよ。なお、第1日の
初期在庫を125tとする。
お願いします。。。(´・ω・`)
361:デフォルトの名無しさん
07/06/27 15:03:15
>>353
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int xrand()
{
double i, x = 0;
for (i = 1; i <= 12; i++)
x += (double)rand() / RAND_MAX;
return 20 * (x - 6) + 100;
}
int main(void)
{
double fstock_sum = 0, estock_sum = 0, supply_sum = 0, cost_sum = 0;
int i, stock = 125, supply;
srand(time(0));
for (i = 0; i < 1000; i++) {
fstock_sum += stock;
stock -= xrand();
cost_sum += (stock > 0 ? 120 : 180) * abs(stock) + 15000;
if (stock < 0) stock = 0;
estock_sum += stock;
supply = (stock > 200 ? 0 : 200 - stock);
supply_sum += supply;
stock += supply;
}
printf("平均初期在庫: %g\n", fstock_sum / 1000);
printf("平均最終在庫: %g\n", estock_sum / 1000);
printf("平均補充量 : %g\n", supply_sum / 1000);
printf("平均総経費 : %g\n", cost_sum / 1000);
return 0;
}
362:308
07/06/27 16:00:14
>>341
ありがとうございます。危うく最後の動画のコメントの奴そのままで出しそうでした。
363:デフォルトの名無しさん
07/06/27 16:05:52
>>353
>>361
ありがとうございます!m(__)m
本当に悪いんですが、補充発注を1日置きごとすることは出来ませんか?
すいません…
1日目にしたら、次は3日目、次は5日目というふうに
364:デフォルトの名無しさん
07/06/27 16:07:05
>>360
>>353と同じ問題だな。
>>353は(1)について、補充方法を自分で書いている。その場合の解が>>361ね。
君はどうしたいのかな。それも回答者に決めて欲しいの?
365:デフォルトの名無しさん
07/06/27 16:13:15
>>363
- int i, stock = 125, supply;
+ int i, stock = 125, supply, f = 0;
-----------------------------------------
estock_sum += stock;
+ if (!f) {
supply = (stock > 200 ? 0 : 200 - stock);
supply_sum += supply;
stock += supply;
+ }
+ f = !f;
}
366:デフォルトの名無しさん
07/06/27 16:25:30
これの戦略を無駄に考えてみたけど、
一切補充しないという、
ずっと品切れ作戦が実装の楽さの割りに結構いい感じという結論が出た。
367:デフォルトの名無しさん
07/06/27 16:43:31
>>365
早速ありがとうございます!
助かりました
368:デフォルトの名無しさん
07/06/27 17:03:56
>>367
すまん。補充しない日も補充費を計上してたので修正。
>>366のレスで気づいたw
URLリンク(kansai2channeler.hp.infoseek.co.jp)
369:デフォルトの名無しさん
07/06/27 17:12:05
>>368
ありがとうございます!
こちらこそスイマセンでした
370:デフォルトの名無しさん
07/06/27 17:12:47
さらにすまん。
- cost_sum += 15000;
+ if (supply > 0) cost_sum += 15000;
吊ってくる。
371:デフォルトの名無しさん
07/06/27 17:20:38
二分木を表示するプログラムについて教えてください。
なんらかの木を作ったあと、その木へのポインタを引数にして
木を表示したいと思っています。単純にデータだけを、行きがけ順などで
表示するのではなくぱっと見で木とわかるようなものがいいです。
よろしくお願いいたします。
372:デフォルトの名無しさん
07/06/27 17:31:29
>>370
いえいえ、とんでもないです!
頼んでいるのは私の方なんですから
373:デフォルトの名無しさん
07/06/27 18:45:07
fmod()を使って10進数を2進数に変えたいんです。C++
なかなかうまくいかなくて
374:デフォルトの名無しさん
07/06/27 18:58:52
>>371
graphviz用の入力ファイル(ただのテキスト)を作るのが楽かも
↓みたいな感じで
でも、宿題だとそれじゃ不可かな
#include <stdio.h>
typedef struct node {
char *label;
struct node *left, *right;
} node;
void tprint(node *n) {
if (!n) return;
if (n->left)
printf("%s -> %s;\n", n->label, n->left->label);
if (n->right)
printf("%s -> %s;\n", n->label, n->right->label);
tprint(n->left);
tprint(n->right);
}
int main() {
struct node tree[] = {
{ "a", &tree[1], &tree[2] }, { "b", &tree[3], &tree[4] },
{ "c", &tree[5], &tree[6] }, { "d", &tree[7], 0 },
{ "e", 0, &tree[8] }, { "f", 0, 0 }, { "g", 0, 0 },
{ "h", 0, 0 }, { "i", 0, 0 }
};
printf("digraph test {\n");
tprint(&tree[0]);
printf("}\n");
}
375:デフォルトの名無しさん
07/06/27 19:01:31
あの・・・
>>354
をお願いできますか?
376:デフォルトの名無しさん
07/06/27 19:05:51
ヾヽ'::::::::::::::::::::::::::'', / 時 .あ ま ヽ
ヾゝ:::::::::::::::::::::::::::::{ | 間 .わ だ |
ヽ::r----―‐;:::::| | じ て |
ィ:f_、 、_,..,ヽrリ .| ゃ る |
L|` "' ' " ´bノ | な よ |
', 、,.. ,イ ヽ い う /
_ト, ‐;:- / トr-、_ \ な /
, __. ィイ´ |:|: ヽ-- '.: 〃 `i,r-- 、_  ̄ ̄
〃/ '" !:! |:| :、 . .: 〃 i // ` ヽヾ
/ / |:| ヾ,、` ´// ヽ !:! '、`
! |:| // ヾ==' ' i i' |:| ',
| ...:// l / __ , |:|::.. |
とニとヾ_-‐' ∨ i l ' l |< 天 ヾ,-、_: : : .ヽ
と二ヽ` ヽ、_::{:! l l ! |' 夂__ -'_,ド ヽ、_}-、_:ヽ
377:デフォルトの名無しさん
07/06/27 19:08:37
>>373
なんでfmod()使わないといけないの?
378:デフォルトの名無しさん
07/06/27 20:04:00
>>359
中途半端になってしまった
URLリンク(kansai2channeler.hp.infoseek.co.jp)
379:デフォルトの名無しさん
07/06/27 20:07:46
>>362 >>308
>>341 の3つめのreturn 0; の前に free(mvt); を忘れとった・・・もう見てへんよな・・・まぁ良いっか・・・
知~らねっ ^^;
380:デフォルトの名無しさん
07/06/27 20:51:20
fmod()を使うよう指定されました(泣)
381:デフォルトの名無しさん
07/06/27 21:13:32
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 下記のプログラムで
a[3][3] = {{2.4, -3, 6.1}, {-1.1, 2, 3.5}, {0.5, 0, 3.2}}
b[3][3] = {{1.9, -4.7, 2.5}, {2, 0.9, 5.4}, {2.7, 0.6, 3.5}}
c[3][3] = {{-2, -3.5, 0}, {1.4, 7.3, -1}, {2.1, 0.4, 6.2}}
に置き換えたとき、この要素で与えられる行列を求め出力するプログラムを作成せよ。
#include <stdio.h>
int main(void)
{
int i, j, n;
double b[3][3] = {{3.2, -1.5, 3.9}, {3.8, 4, -1.8}, {1.9, -3, 0}};
double c[3] = {-5, 2.7, 1.5};
double a[3] = {1, 5.1, 6.2};
n = 3;
for (i=0; i<n; i++) {
for (j=0; j<n; j++) {
a[i] +=b[i][j] * c[j];
}
printf("y[%d]=%f\n", i, a[i]);
}
return 0;
}
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: 6月30日16:30まで
すみません、よろしくお願いします。
382:デフォルトの名無しさん
07/06/27 22:50:20
>>371 どっかの木構造を解説してるサイトにあったのをパクったやつ
typedef struct tagTree{
int no;
struct tagTree *left, *right;
}Tree;
void PrintTree(Bin *root, int depth)
{
depth++;
if (root != NULL) {
int i;
PrintTree(root->left, depth);
for (i = 0; i < depth; i++)
printf(" ");
printf("%3d\n", root->no);
PrintTree(root->right, depth);
}
}
mainで呼ぶときはdepthを0にすればおk
383:デフォルトの名無しさん
07/06/27 22:53:56
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
getchar関数を使用し、コマンドラインからの数字を10回入力し、
入力の中でもっとも大きな数字を表示しなさい。
※入力桁数のエラーについて対処する事
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: CPAD、LSI C-86 Ver 3.30
[3.3] 言語: C
[4] 期限: できれば今週中
すみません、どなたか分かる方、よろしくお願いします。
384:デフォルトの名無しさん
07/06/27 22:57:07
>>383
実行例くらい書いてくれ。
385:382
07/06/27 23:00:19
>>382
しまった……
typedef struct tagBin{
int no;
struct tagBin *left, *right;
}Bin;
に修正plz
386:デフォルトの名無しさん
07/06/27 23:22:21
>>384
すいません。恥ずかしくてのせてませんでした。
初心者のため、おかしい点等をびしびしあげていただければと思います。
#include <stdio.h>
#include <stdlib.h>
void hikaku(int *pX,int *pY);
int main(void){
int x= 0;
int y,i,j;
char str[100];
printf("数字を入力してください。\n");
for(i=1 ; i < 11; i++){
for(j=0; str[j-1] != '\n'; j++){
str[j] = getchar();}
if(j-1 >= 5){
printf("5桁以上は入力桁数エラーです。0にします。\n");}
else{y = atoi(str);
if(y == 0 && str[0] != '0'){
printf("数字以外は入力できません。0にします。\n");}
else {hikaku(&x ,&y);}}}
printf("最大値は%dです。\n",x);
return 0;}
void hikaku(int *pX,int *pY){
if(*pY > *pX){
*pX = *pY;}}
387:デフォルトの名無しさん
07/06/27 23:25:02
>>386
それは実行例じゃないだろ
388:デフォルトの名無しさん
07/06/27 23:26:12
>>386 それができていてなぜ質問したん?w
389:デフォルトの名無しさん
07/06/28 00:19:51
簡単やん
390:デフォルトの名無しさん
07/06/28 00:22:52
>>355
をお願いしたいのですが
391:デフォルトの名無しさん
07/06/28 00:40:33
>>390
while(j>=0 && x[j]>t) { を
while(j>=0 && x[j]<t) { に変更するだけじゃ駄目かな?
inp1.datとか用意するのだるいからまともに見てないけど
392:デフォルトの名無しさん
07/06/28 00:50:17
>>387
すいません、実行例とは何でしょうか?
>>388
自分でここまでは作ったのですが、最初にアルファベットを打ったときなど
特殊な対応が出来ません。また、全く自信がないためです。
393:デフォルトの名無しさん
07/06/28 00:54:23
今、コンパイルが出来ない環境なので確認できないのですが、いまいち右からつめる
降順の解釈の仕方がわからないんです。
左を右に、昇順を降順にしなくてはいけないので、while(j>=0 && x[j]<t) {の変更
だけでは出来ないと思うのですが。
394:デフォルトの名無しさん
07/06/28 00:56:53
>>392
実行例は例えばこのプログラムを実行するとこういう出力になって欲しいんですよ、的な内容。
入力に関しては、一回charに入れた時点で数字かどうか判定すれば?
どの程度のレベルかわからんが、学校授業で4月開始なら上等なレベルかと。
395:デフォルトの名無しさん
07/06/28 01:00:55
>>392 こんなのはどうかな。
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c, max = -1, m, n, nc = 0, f, sign = 1;
while ((c = getchar()) != EOF) {
if (isdigit(c)) {
n = f = 0;
do {
if ((m = n * 10 + c - '0') < n) f = 1;
n = m;
} while ((c = getchar()) != EOF && isdigit(c));
ungetc(c, stdin);
if (f) puts("桁あふれしますた");
else {
n *= sign;
printf("%d\n", n);
if (n > max) max = n;
if (++nc == 10) break;
}
}
else if (c == '-') { sign = -1; }
else sign = 1;
}
if (max != -1) printf("最大値: %d\n", max);
return 0;
}
396:デフォルトの名無しさん
07/06/28 01:10:04
>>393
ああ、右からつめるってそういうことか
単に降順にすればいいだけかと思ってた
めんどくさいからパス。せめてdatファイルがあればなぁ
397:デフォルトの名無しさん
07/06/28 01:16:17
datファイルでなくても、テキストファイルに整数を入れてinp.txtとしても大丈夫だと思うのですが。
398:デフォルトの名無しさん
07/06/28 01:18:19
>>392
ありがとうございます。
10回数字を入力して(ただし、アルファベット、空欄など数字でないやつははじく。また、小数点にも対応する)
桁数は自分で設定し(私のやつは適当に5桁)、最大値を出力する。
>>入力に関しては、一回charに入れた時点で数字かどうか判定すれば?
ずばり、バッファリングの理解が甘く、そこのプログラムが打てず悩んでいます。
分かる方、どうかやり方をご教授願います。
>>392
すいません。書き忘れてしまったのですが、入力の終了はEOFではなく改行でといわれています。
399:デフォルトの名無しさん
07/06/28 01:19:44
>>398
アンカーのつけかたを覚えなさい。全部自分へのレスになってるよ
400:デフォルトの名無しさん
07/06/28 01:21:49
>>398
全て自分に安価する君に惚れたwww
atoi関数に渡す前に
if ( '0' <= str[ j ] && str[ j ] <= '9' ) {
とかでいいんじゃない?
ソースあんま読んでないから、的外れだったらスマソ。
401:デフォルトの名無しさん
07/06/28 01:22:13
>>397
それを用意するのがだるいんだ
まぁやる気が無いだけなんだけどさ
402:デフォルトの名無しさん
07/06/28 01:22:23
>>399
あせってコピペしてしまいました。大変申し訳ありませんでした。
403:デフォルトの名無しさん
07/06/28 01:23:45
>>378
元のプログラムをあまり書き換えないでお願い出来ますか。
注文ばかりですいません。
404:デフォルトの名無しさん
07/06/28 01:28:23
>>400
atoiの前にif ( '0' <= str[ j ] && str[ j ] <= '9' ) {
??????
すいません意味が分かりません。どういうプログラムになるのでしょうか?
405:デフォルトの名無しさん
07/06/28 01:29:31
>>401
無理を言って申し訳ありません。
では、左からつめるを右からに書き換えるにはどうすればいいでしょうか。
406:デフォルトの名無しさん
07/06/28 01:39:11
>>405
左端が0 右端がn-1
今はj=0とかi=1からだんだん加算されていってn-1までループしているのを
n-1から減算していって0までループさせればいい
407:デフォルトの名無しさん
07/06/28 01:47:17
>>355 >>405
for(i=n-2;i>=0;i--) {
t=x[i];
j=i+1;
while(j<=n-1 && x[j]>t) {
x[j-1]=x[j];
j++;
}
x[j-1]=t;
}
てきとー まさかどこと差し替えればいいかなんか聞くなよ?
408:デフォルトの名無しさん
07/06/28 01:49:57
URLリンク(www.infonet.co.jp)
EBCDICでも0~9は連続したコードに登録されているからおkだお ^ω^
409:デフォルトの名無しさん
07/06/28 01:59:50
>>404
ちょっと無理矢理だけど例えば、str[j] = getchar();に下に次の1文を入れてみる。
if ( (str[j] < '0' || '9' < str[j]) && str[j] != '\n' ) j--;
今回getchar関数によって入力された文字が数字じゃなければ、読み込まなかったことにする。
ただ、改行コードもはじかれちゃうのでそれはOKにしておく。
極力、今のソースに手を加えないで変更しようとしたらこんなのになってゴメン・・・orz
410:デフォルトの名無しさん
07/06/28 02:01:29
>>406>>407
ありがとうございます。参考にさせていただきます。
もうひとつ>>359についてお願いできますか?
>>378さんが答えて下さっているのですが、元のプログラムの値をあまり
書き換えないで欲しいのですが。
411:デフォルトの名無しさん
07/06/28 06:01:56
[1] 授業単元:プログラミング
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:WindowsXP
[3.3] 言語:c言語
[4] 期限:6月30日(木)
412:デフォルトの名無しさん
07/06/28 08:34:40
>411
(1)
#include <stdio.h>
#include <stdlib.h>
void putchar_n(char c1, char c2, int num){
if(num <= 0){
return;
}
putchar(c1);
putchar_n(c1,c2,num-1);
putchar(c2);
}
int main(int argc, char* argv[]){
if(argc != 4){
return 1;
}
putchar_n(argv[1][0],argv[2][0],atoi(argv[3]));
printf("\n");
return 0;
}
413:デフォルトの名無しさん
07/06/28 08:44:04
>>411
(2)
#include <stdio.h>
int main(){
int i = 0;
for(i = 0 ; i+31 < 126+1 ; i++){
printf("%c %d %o %x\n",i+31,i+31,i+31,i+31);
if(i%8 == 7){
printf("--------------------\n");
}
}
return 0;
}
414:デフォルトの名無しさん
07/06/28 10:10:46
>>409
ありがとうございます。
ただやってみたのですが、例えば「fsa256」や「256faj」などを入れるとそれも256として
反映されてしまいます。
何とかはじく方法があればと思うのですが・・・。
415:デフォルトの名無しさん
07/06/28 10:14:22
>>410ですが、>>378さんの書いてくださったプログラムをコンパイルしてみたところ、
35以上でかつ95未満の要素の数の処理は出来たのですが、countの要素の合計の処理が
0となり、うまく処理出来ませんでした。
416:デフォルトの名無しさん
07/06/28 10:39:07
getcharじゃなきゃだめなの?
417:デフォルトの名無しさん
07/06/28 10:46:53
まあそれはいいとして
atoi使わずに
URLリンク(www.bohyoh.com)
使えば済む話だと思う
418:デフォルトの名無しさん
07/06/28 10:55:29
>>415
main()だけ修正
int main(void) {
int i, *x, n, size, count[11] = { 0 }, sum;
setp(&x, array(&size));
for (set(&i,0); less(i,size); inc(&i)) {
set(&n,div(at(x,i),10));
if (less(10,n)) set(&n,10);
inc(&count[n]);
}
for (set(&i,0); less(i,10); inc(&i))
printf("%3d台: %d\n", mul(i,10), at(count,i));
set(&sum,0);
for (set(&i,0); less(i,11); inc(&i))
set(&sum,pls(sum,at(count,i)));
printf("countの要素の合計は%d\n",sum);
if (eq(sum,size))
printf("総和は正しいです\n");
else
printf("総和が違います\n");
for (set(&n,0),set(&i,0); less(i,size); inc(&i))
if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n);
printf("35以上でかつ95未満の要素の数は%d\n", n);
return 0;
}
419:418
07/06/28 10:57:07
すまん、化けたか?
int main(void) {
int i, *x, n, size, count[11] = { 0 }, sum;
setp(&x, array(&size));
for (set(&i,0); less(i,size); inc(&i)) {
set(&n,div(at(x,i),10));
if (less(10,n)) set(&n,10);
inc(&count[n]);
}
for (set(&i,0); less(i,10); inc(&i))
printf("%3d台: %d\n", mul(i,10), at(count,i));
set(&sum,0);
for (set(&i,0); less(i,11); inc(&i))
set(&sum,pls(sum,at(count,i)));
printf("countの要素の合計は%d\n",sum);
if (eq(sum,size))
printf("総和は正しいです\n");
else
printf("総和が違います\n");
for (set(&n,0),set(&i,0); less(i,size); inc(&i))
if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n);
printf("35以上でかつ95未満の要素の数は%d\n", n);
return 0;
}
420:デフォルトの名無しさん
07/06/28 11:02:03
>>414
後から細々と注文をつけるんなら、「正しい入力」を正確に定義汁。
最初に正確に仕様を述べないから、>>1で言う
>・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
の状況に結果的にはなっている。
正規表現で言うと、
^-?[0-9]{0,5}$
以外はエラーと思っていいのかな。
負値はどうする?マイナスの場合の桁数の処理は?スペースも許さない?
00004
は正常?
421:デフォルトの名無しさん
07/06/28 11:30:41
-0や00や-000はどうか?という問題もある。
^(0|[1-9][0-9]{0,4}|-[1-9][0-9]{0,3})$
こうか?
422:デフォルトの名無しさん
07/06/28 12:01:40
>>374>>382
早速のレスありがとうございます。ためしにやってみたのですが、うまくいきませんでした。
できれば、
1
/\
/ \
2 3
/\ /\
4 5 6 7
このように表示できたらいいです。表示するデータは3桁の整数です。
おねがいいたします。
423:デフォルトの名無しさん
07/06/28 12:36:11
[1] 授業単元:プロC
[2] 問題文(含コード&リンク):
コマンドライン引数から十進整数値として解釈できる文字列のみを選び、
値が小さい順に並べ替えて、一行に一つずつ標準出力に出力するプログラムを書け。
ただし、十進整数値として解釈できる文字列とは、正規表現 ^[-+]?[0-9]+$ に
マッチするものとする。
ヒント:小さい順に並べ替えるには、 qsort()が便利です。
こちらも、使い方は、manコマンドで調べることができます。
コマンドライン引数すべてについて、 含まれるアルファベットすべてを対応する大文字に置き換えて、
一行にコマンドライン引数一つずつ標準出力に出力するプログラム。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:今週中
[5] その他の制限: 特になしです
どうかよろしくお願いします。
424:デフォルトの名無しさん
07/06/28 12:44:31
>>419さん、>>378さんのプログラムと変更が無いようなのですが。
コンパイルしても変わりませんでした。
425:デフォルトの名無しさん
07/06/28 12:48:03
>>423
#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp = popen("egrep '^[-+]?[0-9]+$' | sort -n", "w");
while (*++argv)
fprintf(fp, "%s\n", *argv);
pclose(fp);
return 0;
}
426:デフォルトの名無しさん
07/06/28 12:50:09
>>424
もう一度確認してみろ。
427:デフォルトの名無しさん
07/06/28 13:53:21
[1]単元:プログラミング技術
[2]問題文:ローダーのNo.4433にアップしました。
[3]環境
OS:リナックス
コンパイラ:cc
言語:C
[4]期限:できれば本日14時30分ごろまでにお願いします。
どうぞよろしくお願いします。
428:デフォルトの名無しさん
07/06/28 13:54:15
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字型の配列変数mojiに設定されている文字数を答えなさい
char moji[] = "ABCDEFG";
実行画面
文字数:7
429:デフォルトの名無しさん
07/06/28 13:55:39
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題1
文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい
実行画面
文字列入力==>ABC123def
偶数要素:AC2df
奇数要素:B13e
430:デフォルトの名無しさん
07/06/28 14:40:31
>>427
#include <stdio.h>
#include <string.h>
void search(char *s1, char *s2)
{
int i;
char *p = s1;
while((p = strstr(p, s2)) != NULL){
*p++ = '#';
for(i = 0; i < strlen(s1) - 1; i++)
*(p + i) = *(p + i + strlen(s2) - 1);
}
}
int main(void)
{
char text[1024], word[1024];
printf("Please input text : ");
gets(text);
printf("text = %s\n", text);
printf("Please input search word : ");
gets(word);
search(text, word);
printf("text = %s\n", text);
return 0;
}
431:デフォルトの名無しさん
07/06/28 14:44:40
このスレでgets()使うと袋叩きにあうよ。
432:デフォルトの名無しさん
07/06/28 14:45:32
>>427
void search(char *s1, char *s2)
{
while((s1 = strstr(s1, s2)) != NULL){
*s1++ = '#';
strcpy(s1, s1 + strlen(s2) - 1);
}
}
433:デフォルトの名無しさん
07/06/28 14:46:56
>>431
俺だって使いたかねーけど、問題文に指定してあるからな。
434:デフォルトの名無しさん
07/06/28 14:54:08
授業単元:C言語
環境:if文・for文・while文・do~while文・switch~case文・
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:文字配列の操作
問題
文字列と検索文字、置換文字を入力し文字列中の検索文字を置換文字に置き換えなさい
実行画面
文字列(m1)入力==>ABCDEFAABCDABC
削除文字==>A
置換文字==>*
結果文字列(m1):BCDEF**BCD*BC
435:デフォルトの名無しさん
07/06/28 15:06:21
授業単元 関数
言語 C言語
引数の階乗(1*2*3*....*n)を関数を作れ
お願いします
436:デフォルトの名無しさん
07/06/28 15:09:45
int kaijo(int a)
{
if(a == 1){
return 1;
}
return a*kaijo(a-1);
}
437:デフォルトの名無しさん
07/06/28 15:13:47
int kaijo(int a)
{
int i, result=1;
for(i=1; i<a; i++){
result *= i;
}
return result;
}
438:デフォルトの名無しさん
07/06/28 15:14:47
授業単元 関数
言語 C言語
引数の階乗(1*2*3*....*n)を返す関数を作れ
の間違いでした 申し訳ありません
439:デフォルトの名無しさん
07/06/28 15:20:43
>>378はネタだろw
440:デフォルトの名無しさん
07/06/28 15:21:44
>>422
適当だし、エクスプローラ風の樹形図になっちゃうけど、それでよければ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
441:デフォルトの名無しさん
07/06/28 15:24:36
428 429何方かお願いします
442:デフォルトの名無しさん
07/06/28 15:30:51
>>428
int main()
{
char moji[] = "ABCDEFG";
int i;
for(i=0; moji[i] != '\0'; i++);
printf("文字数:%d\n", i);
}
443:デフォルトの名無しさん
07/06/28 16:11:45
マイナスの引数でエラーを出さない平方根を返す関数を作れ
C言語でお願いします
444:デフォルトの名無しさん
07/06/28 16:14:43
>>443
>>1嫁
445:デフォルトの名無しさん
07/06/28 16:23:53
授業単元 関数
問題文 マイナスの引数でエラーを出さない平方根を返す関数を作れ
環境
LINUX
C言語
期限 いつでも
>>1 よんでおらず申し訳ありませんでした
446:デフォルトの名無しさん
07/06/28 16:28:04
負の数が入ったときの動作は?
447:デフォルトの名無しさん
07/06/28 16:28:05
>>439
もしネタだとしたら、真面目にお願いしたいのですが。
448:デフォルトの名無しさん
07/06/28 16:30:52
>>446
例として2の 平方根 だと 1.4142135...
ー2 の 平方根 だと -1.4142135...
となるようにです
449:デフォルトの名無しさん
07/06/28 16:33:41
マイミクしてください!
URLリンク(mixi.jp)
450:デフォルトの名無しさん
07/06/28 17:00:35
>>448
double exsqrt(double x)
{
if(x<0){
x=-x;
return -sqrt(x);
}
return sqrt(x);
}
451:デフォルトの名無しさん
07/06/28 17:01:37
>>447 まじめにやってもこの程度だが
URLリンク(kansai2channeler.hp.infoseek.co.jp)
452:デフォルトの名無しさん
07/06/28 17:14:08
あ~~fmod()を使って10進数を2進数に変えたいんです。C++
453:デフォルトの名無しさん
07/06/28 17:17:17
[1] 授業単元:多次元配列
[2] 問題文(含コード&リンク):
以下のステップに従って,行列表示及び演算を行う関数群を作成し,3行3列の行列A,Bのかけ算を行い,結果を表示するプログラムを作成してください.なお,行列AとBは,キーボードから値を入力するようにしてください.
1.3行3列の行列を表示する関数hyoujiを作成
(メイン関数で任意の値で初期化した3行3列の行列Aを引数にしてhyoujiを呼び出し,内容を表示させ,動作確認を行う)
2.3行3列の行列A,Bの足し算を行い,結果を行列Cに代入する関数tasizanを作成
(メイン関数で任意の値で初期化した3行3列の行列A,B,Cを引数にしてtasizanを呼び出し,関数hyoujiにより行列Cを表示させ,動作確認を行う)
3.tasizanをコピー・雛形にして,3行3列の行列A,Bのかけ算を行い,結果を行列Cに代入する関数kakezanを作成
(メイン関数で任意の値で初期化した3行3列の行列A,B,Cを引数にしてkakezanを呼び出し,関数hyoujiにより行列Cを表示させ,動作確認を行う)
4.キーボードから3行3列の行列に見立てた配列に数値を入力する関数nyuryokuを作成
(メイン関数で任意の値で初期化した3行3列の行列Aを引数にしてnyuryokuを呼び出し,関数hyoujiにより行列Aを表示させ,動作確認を行う)
kakezanのヒント:3重ループにすると効率よくプログラムできます
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名:Borland
[3.3] 言語:C
[4] 期限:7月10日まで
[5] その他の制限:多次元配列までならってます
454:デフォルトの名無しさん
07/06/28 17:30:44
>>451
迅速な返答ありがとうございます。無事実行の確認ができました。
455:デフォルトの名無しさん
07/06/28 19:00:07
>>453
void hyouji(int array[][3])
{
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%3d",array[i][j]);
putchar('\n');
}
}
void tasizan(int A[][3],int B[][3],int C[][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
C[i][j]=A[i][j]+B[i][j];
}
456:455
07/06/28 19:04:02
続き
void kakezan(int A[][3],int B[][3],int C[][3])
{
int i,j,k;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
C[i][j]+=A[i][k]*B[k][j];
}
void nyuryoku(int A[][3])
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++){
printf("A%d%d:",i,j);
scanf("%d",&A[i][j]);
}
}
457:デフォルトの名無しさん
07/06/28 19:08:04
[1] 授業単元:C++
[2] 問題文:
メイン関数で整数numに0が入力されるまでキー入力を繰り返し実行する。
負の値も有効とし、0も有効な値とする。
入力が終了した時点での入力値の最大値上位3つと最小値下位3つを画面に出力する。
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日
[5] その他の制限:出力にはprintf、入力にはscanfの使用
習い始めなため、出来るだけ簡単な物にしてくれると助かる。
お願いします。
458:デフォルトの名無しさん
07/06/28 19:08:46
>>453
#include <stdio.h>
void hyouji(double a[3][3]){
int i, j;
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++) printf("%4.1f", a[i][j]);
printf("\n");
}
}
void tasizan(double a[3][3], double b[3][3], double c[3][3]){
int i, j;
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) c[i][j] = a[i][j] + b[i][j];
}
void kakezan(double a[3][3], double b[3][3], double c[3][3]){
int i, j, k;
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++){
c[i][j] = 0;
for(k = 0; k < 3; k++) c[i][j] += a[i][k]*b[k][j];
}
}
void nyuryoku(double a[3][3]){
int i, j;
for(i = 0; i < 3; i++) for(j = 0; j < 3; j++) scanf("%lf", &a[i][j]);
}
int main(void){
double a[3][3], b[3][3], c[3][3];
nyuryoku(a); nyuryoku(b);
tasizan(a, b, c); hyouji(c);
kakezan(a, b, c); hyouji(c);
return 0;
}
459:デフォルトの名無しさん
07/06/28 19:46:35
[1] 授業単元:C言語実習基礎
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
数字を昇順でソートできるようにする。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C
[4] 期限: 6/29正午まで
[5] その他の制限: 挿入ソート、選択ソートまで習っています。
460:デフォルトの名無しさん
07/06/28 20:04:14
それはソースコードであって問題文ではない。
461:デフォルトの名無しさん
07/06/28 20:43:32
[1] 授業単元:C++研究
[2] 問題文
あるファイルの中にデータとして多くの0と1が書き込まれており、最後の1文字だけがEであるとする。
このとき、0と1の並びに着目し、データを圧縮することを考える。
ここでは、0と1のそれぞれが何個連続して並んでいるかを記録することで圧縮を行う。
たとえば、digit1.datというファイルに
111110000000000000000000000001E
というように0と1が並んでいるとき、
7 1 24 0 1 1
と圧縮できる。このとき圧縮結果に空白を挟むことに注意する。
上記の圧縮方法に従って、任意の0と1から成るデータを圧縮するプログラムを作成せよ。
ただしデータはリダイレクションを使用し、char型変数の1文字ずつ繰り返し世も困れるものとする。
最後には「圧縮完了」と表示のこと。
3] 環境
[3.1] OS:windowsXP
[3.2] cygwin
[3.3] 言語:C++
[4] 期限:明日
[5] その他の制限:C++です。よろしくお願いします
462:デフォルトの名無しさん
07/06/28 20:51:54
[1] 授業単元: プログラミング序論
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C
[4] 期限: 29日まで
よろしくお願いします
463:デフォルトの名無しさん
07/06/28 20:52:00
>繰り返し世も困れる
読み込まれる?
464:デフォルトの名無しさん
07/06/28 20:58:31
>>460
申し訳ありませんでした。
このソースコードを昇順でソートできるように直しなさい。
という問題です。
465:デフォルトの名無しさん
07/06/28 21:07:00
>>462
(1)
#include <stdio.h>
int main(void) {
int array[7] = {4, 5, 0, 6, 2, 2, 4};
int i, sum = 0;
for(i=0;i<7;i++) sum += array[i];
printf("%d", sum);
return 0;
}
466:デフォルトの名無しさん
07/06/28 21:14:41
>>461
#include <iostream>
using namespace std;
int main()
{
streambuf *sb = cin.rdbuf();
int c, cc, n;
const char *sep = "";
while ((c = sb->sbumpc()) >= 0 && c != 'E') {
for (n = 1; (cc = sb->sbumpc()) >= 0 && cc == c; ++n) {}
sb->sungetc();
cout << sep << n << " " << static_cast<char>(c);
sep = " ";
}
cout << "\n圧縮完了\n";
}
467:デフォルトの名無しさん
07/06/28 21:20:17
>>462
(2)
#include <stdio.h>
int main(void) {
int array[7] = {4, 5, 0, 6, 2, 2, 4};
int array2[7] = {0};
int i;
for(i=0;i<7;i++) array2[i] = array[6-i];
for(i=0;i<7;i++) printf("%d", array[i]);
putchar('\n');
for(i=0;i<7;i++) printf("%d", array2[i]);
return 0;
}
468:453
07/06/28 21:40:36
>>455さんありがとうございます
469:462
07/06/28 21:59:36
>>465
>>467
ありがとうございます
470:デフォルトの名無しさん
07/06/28 22:45:46
>>457
(1)
#include <iostream>
#include <math.h>
#define BUF_MAX 64
#define DATA_MAX 128
char datanum=0;
long data[DATA_MAX];
void seikei(char*);
long henkan(char*);
void touroku(long);
void sort();
void output();
471:デフォルトの名無しさん
07/06/28 22:47:05
(2)
int main() {
char i, sign, buf[BUF_MAX];
long input;
do {
input = 0;
for(i=0; i<BUF_MAX; i++)
buf[i] = NULL;
printf("input number\n> ");
scanf("%s", buf);
if(buf[0]==45) sign = 1;
else sign = 0;
seikei(buf);
input = henkan(buf);
if(input==0) break;
else if(sign==1) input = 0-input;
touroku(input);
} while(1);
sort();
output();
return 0;
}
472:デフォルトの名無しさん
07/06/28 22:47:53
(3)
void seikei(char *buf) {
char i, j, max, str[BUF_MAX];
for(i=0; i<BUF_MAX; i++)
str[i] = NULL;
max = (char)strlen(buf);
for(i=0, j=0; i<max; i++) {
if(!(48>buf[i] && buf[i]<57)) {
str[j] = buf[i]-48;
j++;
}
}
for(i=0; i<BUF_MAX; i++)
buf[i] = str[i];
return;
}
long henkan(char *buf) {
char i, figure;
long input=0;
figure = (char)strlen(buf)-1;
for(i=0; buf[i]!=NULL; i++)
input += buf[i] * pow((double)10, (double)figure-i);
return input;
}
473:デフォルトの名無しさん
07/06/28 22:49:12
(4)
void touroku(long input) {
if(datanum<DATA_MAX) {
data[datanum] = input;
datanum++;
}
return;
}
void sort() {
char i, j, higher;
long tmp;
for(i=0; i<datanum; i++) {
for(j=i+1, higher=i; j<datanum; j++) {
if(data[higher]<=data[j]) higher = j;
}
tmp = data[higher];
data[higher] = data[i];
data[i] = tmp;
}
return;
}
474:デフォルトの名無しさん
07/06/28 22:50:56
(5)
void output() {
char i;
for(i=0; i<3; i++) {
if(data[i]==NULL) break;
printf("上位%d位: %d\n", i+1, data[i]);
}
for(i=datanum-1; i>(datanum-4); i--) {
if(data[i]==NULL) break;
printf("下位%d位: %d\n", datanum-i, data[i]);
}
}
単純なデータ構造にしたつもり。
殴り書きでsorry
475:デフォルトの名無しさん
07/06/28 23:19:21
1] 授業単元:c言語
[2] 問題文: 8個の配列データa={1,2,4,6,8,4,5,9}の和WAおよび平均値MA
を求めるプログラムを配列およびfor文を用いて作成せよ。
[3] 環境
[3.1] OS:XP
[3.2] Visual studio.2005
[3.3] 言語:C
[4] 期限:6月29日:3時まで
[5] その他の制限:特になし
よろしくお願いします
476:デフォルトの名無しさん
07/06/28 23:19:34
宿題じゃないんだが
01011010みたいに
日付が4桁4桁になってる
8桁の数字を生成するのはどうするん?
477:デフォルトの名無しさん
07/06/28 23:24:49
宿題スレじゃなくてC/C++質問スレで頼むわ
478:デフォルトの名無しさん
07/06/28 23:26:16
>>345
お願いします
479:デフォルトの名無しさん
07/06/28 23:28:41
>>475
#include <stdio.h>
int main(void){
double MA;
int i, WA=0;
int a[8] = {1, 2, 4, 6, 8, 4, 5, 9};
for(i=0; i<8; i++){
WA += a[i];
}
MA = WA/8.0;
printf("和 : %d", WA);
printf("平均値 : %lf", MA);
return 0;
}
直接書いてコンパイルとかしてないからエラーでたらおせーてね☆
480:デフォルトの名無しさん
07/06/28 23:35:04
>>478
345の結果ってさ、準決勝で早稲田が下になってるやんか、
あれって逆にしてもええのん?
あかんのやったらあかんでええけど、
481:デフォルトの名無しさん
07/06/28 23:36:28
ああごめんよく読んでなかったわ
得点と失点を記録するんやね
482:デフォルトの名無しさん
07/06/29 00:06:37
>>478
URLリンク(kansai2channeler.hp.infoseek.co.jp)
483:デフォルトの名無しさん
07/06/29 00:08:44
defineにこだわってる所為で汚くなってるじゃんとか言わないでね
484:デフォルトの名無しさん
07/06/29 01:02:03
わからねえよボケ!去ね!
485:デフォルトの名無しさん
07/06/29 01:06:28
>>470-474
サンクス。
ただ、素人がここまで書いてしまうと逆に相手に怪しまれると思うのですよ。
問題文を多少屁理屈で変えてもいいので、もう少し短く簡単にして頂ければ幸いです。
加えてもう一問。
[1] 授業単元:C++
[2] 問題文:
メイン関数a,bに任意の値を入力する。
変数aと変数bで加算と乗算を行い計算結果を表示する。
整数の範囲(-2147483648~2147483648)で正常な計算が行えることを確認する。
実数(float,double)は変数やキャスト等で一切使用しない。
[3] 環境
[3.1] OS:窓
[3.3] 言語:C++
[4] 期限:明日の午後
[5] その他の制限:出力にはprintf、入力にはscanfの使用
図々しいことは百も承知ですが、よろしくお願いします。
486:デフォルトの名無しさん
07/06/29 01:10:38
お願いします。
[1]C言語
[2]ファイルを読み込む
I am C.
CAT and ...
を別のファイルに下のように書き込む
1: I am C.
2: CAT and ...
[3.1] OS:Linux
[3.2] gcc 3.4
[3.3] 言語: C
[4]今日の午前中
487:デフォルトの名無しさん
07/06/29 01:20:49
>>486
#include <stdio.h>
int main(void) {
FILE *fop,*fsv;
char buf[32];
int ch;
printf("読み込むファイル名を入力 > ");
scanf("%s",buf);
fop=fopen(buf,"r");
if( fop==NULL ) return 1;
printf("書き込むファイル名を入力 > ");
scanf("%s",buf);
fsv=fopen(buf,"w");
if( fsv==NULL ) { fclose(fop); return 1; }
while( (ch=fgetc(fop))!=EOF ) {
fprintf(stdout,"%c",ch);
fprintf(fsv,"%c",ch);
}
fclose(fop);
fclose(fsv);
return 0;
}
488:デフォルトの名無しさん
07/06/29 01:26:08
[1] 授業単元:情報系ゼミ
[2] 問題文:URLリンク(www.ipsj.or.jp)
上記URLの文中「逆方向のスキャンによる枝刈り(P759)」「ビット列の長さによる枝刈り」
の二項を聞いてる素人にも判る様に説明、解説する。という課題を受けました
しかし今まで習った内容とは明らかにレベルが違いすぎるため、
また、周りが自分を含めプログラムはズブの素人ばかりなので全く理解できず、
一同困惑しています
お時間のある方、この範囲のプログラム文の一行一行がどういう機能を果たしているのかを
馬鹿にも判るように解説して頂けないでしょうか?
よろしくお願いします
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: 不明
[3.3] 言語:C++
[4] 期限:[2007年07月01日まで
[5] その他の制限: まったく習っていない段階
489:デフォルトの名無しさん
07/06/29 01:29:47
あ、書き込むときに
1: ~
2: ~
のように数字をつけたいんです、3行とか4行とかにも対応できるように…。
もしよければおねがいします
490:デフォルトの名無しさん
07/06/29 01:34:37
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: どちらでも可
[4] 期限: 2007年07月01日23:00まで
[5] その他の制限: なし
491:デフォルトの名無しさん
07/06/29 01:41:48
>>489は>>487さんへのレスです。
492:デフォルトの名無しさん
07/06/29 01:53:19
491です。解決しました。あともう一門わからないのがあるので
もしよければお願いします
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面とテキストファイルに表示する
c→4h→1a→2
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:明日
493:492
07/06/29 01:59:20
[2]の例追加
abdcdoddooffffoo
↓
abc→1 df→4 o→5
494:デフォルトの名無しさん
07/06/29 02:01:36
>>491 >>489
>>487 の一部だけ変更。変更部分は↓の一番上と下が一致するところの中
if( fsv==NULL ) { fclose(fop); return 1; }
i=1;
fprintf(stdout,"%d:",i);
fprintf(fsv,"%d:",ch);
while( (ch=fgetc(fop))!=EOF ) {
fprintf(stdout,"%c",ch);
fprintf(fsv,"%c",ch);
if( ch=='\n' ) {
i++;
fprintf(stdout,"%d:",i);
fprintf(fsv,"%d:",ch);
}
}
fclose(fop);
495:デフォルトの名無しさん
07/06/29 02:06:46
>>494 訂正
fprintf(fsv,"%d:",ch); < の2箇所を
fprintf(fsv,"%d:",i); < ,i に変更
496:デフォルトの名無しさん
07/06/29 02:07:39
>>495 じゃなくて、2箇所ある
fprintf(fsv,"%d:",ch); < これを って意味ね。出力結果がおかしいから分かるだろうけど。
497:デフォルトの名無しさん
07/06/29 02:31:05
[1] 授業単元: プログラミング基礎A
[2] 問題文(含コード&リンク):
奇数かどうか判定する関数および,偶数かどうか判定する関数を作成しなさい.
◎以下を参考の事
奇数判定: int isOdd(int i)
数字iが奇数の場合1,
偶数の場合0を返す関数
偶数判定: int isEven(int i)
数字iが偶数の場合1,
奇数の場合0を返す関数
main関数ではif文を使って正しく動いているかどうか
チェックしてください.
※戻り値にはboolを利用してもOKです
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年6月29日10時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
よろしくおねがいします。
498:デフォルトの名無しさん
07/06/29 02:33:07
>>497
int isOdd(int i){return i%2;}
int isEven(int i){return i%2==0;}
499:492
07/06/29 05:10:44
テンプレわかりづらかったので、もっかい質問します
是非、教えてください、お願いします。
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面とテキストファイルに表示する
c→4h→1a→2
ほかの例は
abdcdoddooffffoo
の場合
abc→1 df→4 o→5
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:5時間後くらい
500:492
07/06/29 05:13:41
>>494-496さん本当にありがとうございます!!
501:デフォルトの名無しさん
07/06/29 06:03:57
>>499
#include <stdio.h>
int main(void)
{
int c, nc[256] = {0}, nmax = 0, n, found;
while ((c = getchar()) != EOF) {
nc[c]++;
if (nc[c] > nmax)
nmax = nc[c];
}
for (n = 1; n <= nmax; n++) {
found = 0;
for (c = 0; c < 256; c++) {
if (nc[c] == n) {
putchar(c);
found = 1;
}
}
if (found)
printf("→%d", n);
}
printf("\n");
return 0;
}
502:492
07/06/29 06:27:59
>>501さんありがとうございます。
けどコンパイルしてみたらエラーがたくさん表示されて…。
あとファイルから読み込んで結果を画面に表示してファイルに書き込む
プログラムをつくりたいです。またもしよければアドバイスおねがいします
503:デフォルトの名無しさん
07/06/29 07:02:16
>>500 そういや、int i; も追加だったっけ・・・ってできた?ようだから良いか。
504:492
07/06/29 07:07:45
>>503さんのをアレンジしたらできました!ありがとうございました!!
もしよければ>>499を教えてほしいです…何度もすいません。
505:デフォルトの名無しさん
07/06/29 07:24:24
>>501は全角スペースが入っているからでそ
#include <stdio.h>
int main(void)
{
int c, nc[256] = {0}, nmax = 0, n, found;
while ((c = getchar()) != EOF) {
nc[c]++;
if (nc[c] > nmax)
nmax = nc[c];
}
for (n = 1; n <= nmax; n++) {
found = 0;
for (c = 0; c < 256; c++) {
if (nc[c] == n) {
putchar(c);
found = 1;
}
}
if (found)
printf("→%d", n);
}
printf("\n");
return 0;
}
506:492
07/06/29 07:32:56
これにファイルポインタとか使いしていけばいいんですかね?
これだけだと動きませんでしたので・・・
507:デフォルトの名無しさん
07/06/29 07:38:07
>>506
題意が良くわからないんだが、要するに文字列の中の各アルファベットの数を数えろってことかね?
508:デフォルトの名無しさん
07/06/29 07:39:33
492と493の例だと表示順がわからないんだけど。
出てきた順番でもないし、アルファベット順でも個数順でもない。
509:492
07/06/29 07:44:45
>>507さん、そうですねアルファベット順にしたいです。
cccchaaの例はちょっと間違って書いてましたすいません…。
もうひとつ例としては
aaabcddddee
の場合は
a→3 bcd→4 e→2
です。何度もすいません…アルゴリズムがいまいち思いつかないので…。
510:デフォルトの名無しさん
07/06/29 08:01:13
アルファベットの数を数える部分はできたが、同じ数のものを並べてってのが面倒やな・・・
もう少しで出来そうだが、そこんとこで手詰まり中。まぁ、なんとかなるさ。
511:デフォルトの名無しさん
07/06/29 08:09:25
>>459
ソースコードを昇順ソートできるようにするという問題です。
何度もすみません。
512:デフォルトの名無しさん
07/06/29 08:23:46
>>381お願いします
513:デフォルトの名無しさん
07/06/29 09:13:21
>>509 >>506 >>504 >>499 >>492
汚いソースだが我慢せい
URLリンク(kansai2channeler.hp.infoseek.co.jp)
514:デフォルトの名無しさん
07/06/29 09:15:32
>>509 >>506 >>504 >>499 >>492 訂正
URLリンク(kansai2channeler.hp.infoseek.co.jp)
515:デフォルトの名無しさん
07/06/29 09:27:10
>>509 >>506 >>504 >>499 >>492 さらにマクロでシェイプアップ
URLリンク(kansai2channeler.hp.infoseek.co.jp)