C/C++の宿題を片付けます 116代目at TECH
C/C++の宿題を片付けます 116代目 - 暇つぶし2ch24:デフォルトの名無しさん
08/10/03 21:17:00
>>21
リストって一般名詞的な意味じゃなくて
ポインタ使って連結してるあのリストのことでおk?


25:21
08/10/03 21:51:13
>>23
とくに指定されてなかったと思います。
>>24
はい、そのリストです。
宜しくお願いします。

26:デフォルトの名無しさん
08/10/03 23:04:30
>>18
H/W Express5800/110Ge
O/S Windows Server 2003
M/W Oracle10g 10.2.0
W/S IIS6.0


27:デフォルトの名無しさん
08/10/03 23:14:28
>>26
DBMSってミドルウェアに含まれるの?

28:デフォルトの名無しさん
08/10/03 23:26:16
>>26
> M/W Oracle10g 10.2.0
MS SQL Server 2005にしようよ。

29:デフォルトの名無しさん
08/10/03 23:27:31
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
  ★以下の仕様を満たすプログラムをC言語で作成しなさい。
  【仕様】座席予約簡易プログラム
  
  ▽通路を挟んだ5行×5列(1-1~5-5まで)の座席がある列車の座席を予約・キャンル
   するプログラムを作る。
  ▽メニューは、「予約」「キャンセル」「終了」の3種類とする。
  ▽空き状態を0、予約済み状態を1で表現する。初期の予約状態はランダムにしておく。
  ▽「予約」では、予約状況の一覧を表示し、予約する座席数を入力させる。入力数が空席の数以上
であれば、
「空席が足りません」として、再度入力させる。
  ▽次に希望する座席を入力させる(行‐列の順)。入力されたら確認メッセージ
   (「(座席番号)」を予約しますか?)を表示する。Yesならば予約処理をし、「予約しました」と表
示してメニューに戻る。
   Noならばメニューに戻る。
  ▽すでに予約済みの座席を指定した時は、「(座席番号)は予約済みです」とエラーメッセージを表
示し、再度入力させる。
  ▽入力数が2以上のときは複数選択が可能になるようにする(全ての希望を入力した時点で確認メッ
セージを表示)
  ▽入力数が空席の数と同じときは、すぐに予約確認メッセージを表示する。
  ▽「キャンセル」では、「予約」メニューと同様の機能をもたせる(一覧表示・キャンセルする座席
数の入力・
座席番号の入力・確認メッセージ・エラー処理・複数選択機能)
  ▽「終了」では、プログラム終了する。
[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語: C言語
[4] 期限: 来週中ぐらいまで。
[5] その他の制限:条件判断文、繰り返し文、関数(引数、戻り値)、配列を勉強しました      
   これらを使ってお願いします。

30:デフォルトの名無しさん
08/10/03 23:31:30
>>21
URLリンク(kansai2channeler.hp.infoseek.co.jp)

エラー出して終了するときメモリ解放すんの忘れてた。
まあいいか・・

31: ◆3CnrSiNVYE
08/10/04 12:28:13
[1] 授業単元:プログラミング基礎
[2] 問題文:
ファイルを1つまたは複数指定し、
各ファイルに含まれる行数と文字数を数えて画面に出力するプログラムを作れ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:どちらでも
[4] 期限:2008年10月14日
[5] その他の制限:まだ基礎の段階です

32:デフォルトの名無しさん
08/10/04 12:47:39
>>31
#include<stdio.h>

void moji_line_count(const char *filename){
FILE *fp;
int prev='\n', moji, moji_count=0, line_count=0;

if((fp=fopen(filename, "rb"))==NULL) return;
for(;(moji=fgetc(fp))!=EOF;prev=moji,moji_count++) if(moji=='\n') line_count++;
fclose(fp);
if(prev!='\n') line_count++;

printf("File : %s\nCharacter count : %d\nLine count : %d\n\n", filename, moji_count, line_count);
}

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

for(i=1;i<argc;i++) moji_line_count(argv[i]);
return 0;
}

33:デフォルトの名無しさん
08/10/04 12:56:52
>>31
#include <stdio.h>
#include <string.h>
void chomp(char *buf)
{
int len = strlen(buf); if (len > 0 && buf[len - 1] == '\n') buf[len - 1] = '\0';
}
int main(int argc, char *argv[])
{
int i, lines, chars; FILE *fin; char buf[512];
for(i = 1; i < argc; i++) {
fin = fopen(argv[i], "r");
if (fin != NULL) {
lines = chars = 0;
while(fgets(buf, 512, fin) != NULL) {
chomp(buf);
chars += strlen(buf);
lines++;
}
fclose(fin);
printf("ファイル\"%s\"の行数は%d、文字数は%d\n", argv[i], lines, chars);
}
else
fprintf(stderr, "ファイル \"%s\"は開けません。\n", argv[i]);
}
return 0;
}


34:12
08/10/04 13:03:08
>>17
DFTでお願いします。
一通りググってはみたんですけど、どれも難解で各行説明が難しいです…


35:デフォルトの名無しさん
08/10/04 14:34:48
>>29
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int aki;
char zaseki[5][5];
void chomp(char *buf)
{
int len = strlen(buf); if (len > 0 && buf[len - 1] == '\n') buf[len - 1] = '\0';
}
void yoyaku(void)
{
int i, j, n;
char buf[128];
printf("予約状況:\n");
printf(" ");
for(j = 0; j < 5; j++) printf(" %2d", j+1);
printf("\n");
for(i = 0; i < 5; i++)
{
printf(" %2d", i+1);
for(j = 0; j < 5; j++)
if(zaseki[i][j]) printf(" x");
else printf(" .");
printf("\n");
}


36:デフォルトの名無しさん
08/10/04 14:35:37
printf("x: 予約済み .: 空き\n\n");
if (!aki) {
printf("空席がありません。\n");
return;
}
do {
printf("予約する座席数: ");
scanf("%d", &n);
if (aki < n) {
printf("空席が足りません。\n");
continue;
}
} while(0);
if(n <= 0) return;
while(n--) {
rewind(stdin);
printf("予約を希望する座席(行-列): ");
scanf("%d-%d", &i, &j);
if(zaseki[i - 1][j - 1] == 1) {
printf("座席「%d-%d」は予約ずみです。\n", i, j);
n++;
continue;
}


37:デフォルトの名無しさん
08/10/04 14:36:23
printf("座席「%d-%d」を予約しますか?(YES/NO): ", i, j);
rewind(stdin);
fgets(buf, 128, stdin);
chomp(buf);
if (strcmpi(buf, "YES") == 0) {
zaseki[i - 1][j - 1] = 1;
printf("予約しました。\n");
}
}
}
void cancel(void)
{
int i, j, n;
char buf[128];
printf("予約状況:\n");
printf(" ");
for(j = 0; j < 5; j++) printf(" %2d", j+1);
printf("\n");
for(i = 0; i < 5; i++)
{
printf(" %2d", i+1);
for(j = 0; j < 5; j++)
if(zaseki[i][j]) printf(" x");
else printf(" .");
printf("\n");
}


38:デフォルトの名無しさん
08/10/04 14:37:25
printf("x: 予約済み .: 空き\n\n");
if (aki == 5 * 5) {
printf("予約済みの席はありません。\n");
return;
}
do {
printf("キャンセルする座席数: ");
scanf("%d", &n);
if (5*5 - aki < n) {
printf("予約済みの席が足りません。\n\n");
continue;
}
}while(0);
if(n <= 0) return;
while(n--)
{
rewind(stdin);
printf("キャンセルを希望する座席(行-列): ");
scanf("%d-%d", &i, &j);
if(zaseki[i - 1][j - 1] == 0) {
printf("座席「%d-%d」は予約されていません。\n", i, j);
n++;
continue;
}

39:デフォルトの名無しさん
08/10/04 14:38:02
printf("座席「%d-%d」をキャンセルしますか?(YES/NO): ", i, j);
rewind(stdin);
fgets(buf, 128, stdin);
chomp(buf);
if (strcmpi(buf, "YES") == 0) {
zaseki[i - 1][j - 1] = 0;
printf("予約しました。\n");
}
}
}
int main(void)
{
int i, j, m;
aki = 5 * 5;
for(i = 0; i < 5; i++)
for(j = 0; j < 5; j++) {
zaseki[i][j] = rand() & 1;
if(zaseki[i][j]) aki--;
}
do {
printf("\n\nメニュー(1.予約 2.キャンセル 3.終了): ");
scanf("%d", &m);
switch(m){
case 1: yoyaku(); break;
case 2: cancel(); break;
case 3: return 0;
}
} while(1);
}

40:デフォルトの名無しさん
08/10/04 14:52:43
printf("x: 予約済み .: 空き\n\n");
if (aki == 5 * 5) {
printf("予約済みの席はありません。\n");
return;
}
do {
printf("キャンセルする座席数: ");
scanf("%d", &n);
if (5*5 - aki < n) {
printf("予約済みの席が足りません。\n\n");
continue;
}
}while(0);
if(n <= 0) return;
while(n--)
{
rewind(stdin);
printf("キャンセルを希望する座席(行-列): ");
scanf("%d-%d", &i, &j);
if(zaseki[i - 1][j - 1] == 0) {
printf("座席「%d-%d」は予約されていません。\n", i, j);
n++;
continue;
}

41:デフォルトの名無しさん
08/10/04 14:53:42
if((fp=fopen(filename, "rb"))==NULL) return;
for(;(moji=fgetc(fp))!=EOF;prev=moji,moji_count++) if(moji=='\n') line_count++;
fclose(fp);
if(prev!='\n') line_count++;

printf("File : %s\nCharacter count : %d\nLine count : %d\n\n", filename, moji_count, line_count);
}
rewind(stdin);
fgets(buf, 128, stdin);
chomp(buf);
if (strcmpi(buf, "YES") == 0) {
zaseki[i - 1][j - 1] = 1;
printf("予約しました。\n");
}
}
}
void cancel(void)

42:デフォルトの名無しさん
08/10/04 14:54:45
うざす

43:デフォルトの名無しさん
08/10/04 15:16:13
>>35
>>36
>>37
>>38
>>39
>>40
ありがとうございます。本当に助かりました。

44:デフォルトの名無しさん
08/10/04 15:24:52
>>35-41
長ぇwww
うpろだに上げろよw

45:21
08/10/04 15:37:15
>30
早速作って戴いて
ありがとうございます。実行のとき、
./kadai3-2 s aって入力すると不正な文字ですぅって
でるんですが、どこがおかしいですか?
ファイルは入力ファイル、
出力ファイルの順にコマンドラインの引数で指定していると
思うんですが。


46:デフォルトの名無しさん
08/10/04 15:42:58
>>45
おそらくスペースか改行文字かタブ文字が原因

47:デフォルトの名無しさん
08/10/04 15:46:09
>>45
数字と,以外受け付けない
スペースも改行も入れられないよ

48:21
08/10/04 15:49:59
>>46
ん、ん?
スペース入れずにどうやって入力するのですか?

49:デフォルトの名無しさん
08/10/04 15:50:40
>>48
よみこむ中身の方だよ

50:21
08/10/04 15:55:25
>>49
えっと読み込むファイルsの中身は
1,2,3,4,5,6,7
としたんですが、どこかおかしいですか?

51:デフォルトの名無しさん
08/10/04 16:00:22
>>50
最後に改行してるんじゃね?

52:21
08/10/04 16:04:19
>>51
確かめてみたんですが、とくに最後に改行
とかはされていませんでした。

53:デフォルトの名無しさん
08/10/04 16:23:22
>>30

54:デフォルトの名無しさん
08/10/04 16:25:04
ファイルがないときもスコンスコン落ちるし、まあ、大雑把なつくりなんでしょう。
改造するほうがいいよ。

55:21
08/10/04 16:51:48
改造か・・・。
できる気がしないけどちょくらやってみる。
でもこれ再提出の上に期限大分オーバー
しちゃってるんだよなぁ。
はぁ。

56:デフォルトの名無しさん
08/10/04 17:02:56
かなりの初心者です…。質問があります。
入力された数値を二乗して返す、というプログラムなのですが、↓のようにしました。


printf("Enter a floating number > ");
while( scanf("%f",&data) != EOF ){
 printf("%lf^2 = %lf\n",data,SQUARE(data));
 printf("Enter the next value > ");
}


「SQUARE」は二乗するための関数です。
実行してみると、dataの中には何も数値は入っていませんでした(data = 0.000)。
「while文の条件の中で一度scanfを行っているからdataには入力された数値が入っているんじゃないの??」と
思ったのですが、そうはいっていないようです。ループに入っていることは確認できました。
自分のスキルでは解決できないので、力を貸して下さい…(泣)

57:デフォルトの名無しさん
08/10/04 17:06:43
変数はdoubleか?
それならまず%fと%lfを入れ替えてみようか

58:デフォルトの名無しさん
08/10/04 17:17:14
書き忘れてました、double型です。
それで、%f → %lfにしてみたら…大丈夫でした(^^
同時に、勉強の必要性を強く感じました…

ただ、このループはCtrl + Dで終了するはずらしいのですが、それを入力するとなぜか無限ループ開始…(^^;
これについてはどうでしょうか??

59:デフォルトの名無しさん
08/10/04 17:18:38
windowsならCtrl+Z

60:デフォルトの名無しさん
08/10/04 17:23:27
あ、なるほど。学校のPCはLinuxだったからそうなっていたのですね。
確かにCtrl + Zで無事に終了できました。

初心者のばかばかしい質問に答えて下さり、ありがとうございましたm(_ _)m

61:デフォルトの名無しさん
08/10/04 18:33:59
>>55 = 21
課題だから最低限の実装でいいかなと思ってたんですみません。
一応少しマシな実装に直しておきました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

62:デフォルトの名無しさん
08/10/04 20:20:14
三平方の定理の斜辺を求めるプログラムなのですが、
関数をcalcuteとして、a^2 + b^2 = c^2のaとbを入力させて渡そうとしているのですが、コンパイル時にエラーが起こります。
なぜかわかるでしょうか?
以下が関数main、
int main(double *argv[])
{
printf("%f", calcute(argv[1], argv[2]));
return 0;
}
以下がエラーの内容です。
pyt.c:6: error: incompatible type for argument 1 of `calcute'
pyt.c:6: error: incompatible type for argument 2 of `calcute'

63:デフォルトの名無しさん
08/10/04 20:22:23
>>62
int main(double *argv[])
なんだこのふざけた引数は

64:デフォルトの名無しさん
08/10/04 20:24:11
>>63
小数の内容を入力したいのですが・・・

65:デフォルトの名無しさん
08/10/04 20:28:06
>>64

int main(int argc,char *argv[])
{
double a,b;
sscanf(argv[1],"%f",&a);
sscanf(argv[2],"%f",&b);
以下略

66:デフォルトの名無しさん
08/10/04 20:28:56
>>65
勉強不足でした。どうもありがとうございます。

67:デフォルトの名無しさん
08/10/04 20:35:41
>>65
sscanf(argv[1],"%lf",&a);
sscanf(argv[2],"%lf",&b);

68: ◆3CnrSiNVYE
08/10/04 20:43:03
>>32
>>33
ありがとうございます。

ところでこれでファイルを指定するにはどうすればよいのでしょうか?
学校のコンパイラはgccなのですが家ではvisualC++2008を使っているのですが…

69:デフォルトの名無しさん
08/10/04 20:58:43
>>68
横スレですまんが、>>33のソースは間違っているので使わない方がいいよ。
>>32は正しくできている(ちなみに私も作っていろいろなファイルで結果を取りますた)。

VS C++2008なら、コンパイルなりビルドなりしてコマンドプロンプトだったかな(Windowsしらねぇ)からコマンドライン引数としてファイルを渡せばいいと思う。VS C++のIDEくらいなら、引数を指定して実行とかってメニューがあるかもしれない。

70:65
08/10/04 21:03:46
>>67
floatじゃなくてdoubleだから%lfだね。
スマソ

71:デフォルトの名無しさん
08/10/04 21:14:14
>>68
ちょっと調べてみたよ。

プロジェクト(P) -> プロパティ(P)でプロジェクトのプロパティを開く。
構成プロパティ -> デバッグ -> コマンド引数にファイル名を書けば良いと思う。

72:31 ◆3CnrSiNVYE
08/10/04 21:26:24
>>69
>>71
申し訳ありません。ちょっとよくわかりませんでした。
>>71を参考にして適当なテキストファイルのフルパスをコマンド引数に書いてみたのですが、
Ctrl+F5(ビルド)しても「何かキーを押してください」と出て終了してしまいます。

URLリンク(soudan1.biglobe.ne.jp)
ここを参考にしてみたのですが、よくわかりません

73:31 ◆3CnrSiNVYE
08/10/04 21:42:41
なんか宿題の本筋からずれてますね。
visualC++のスレで聞いてきます。

74:デフォルトの名無しさん
08/10/04 23:21:18
1] 授業単元:C++
[2] 問題文(含コード&リンク):八の字を描け。問題→URLリンク(www.dotup.org)
自分でやってみたのですが、出発地点から円を描く事しかできませんでした。
この画像で黄色のところが出発地点で、緑の所が執着地点です→URLリンク(www.dotup.org)
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005又はVisual Studio 2008
 [3.3] 言語:C++
[4] 期限: ([2008年10月6日午前5:00まで
[5] その他の制限:何か説明不足な点がありましたら言って下さい。どうかお願いします。

75:デフォルトの名無しさん
08/10/05 01:19:04
C言語って懐かしいな

76:デフォルトの名無しさん
08/10/05 02:55:53
やったことないからよくわかんないけど、-270度まで回転するのがまずいんでないの?
-90度回転させて、中心点を左の円のものにして+90度からプラス方向に360度回転させて、
元の中心を使って-90度から-270度まで回転させればいくんでない?
やり方は知らないんだけど。

77:デフォルトの名無しさん
08/10/05 09:19:23
半円を4つ描くと思えばいい

78:デフォルトの名無しさん
08/10/05 09:36:52
twintail.jpからel.hなくなってるじゃん
コンパイルできないからうpれよ

79:デフォルトの名無しさん
08/10/05 11:25:26
C と C++ とC# と、後なんか。 何がどう違うの? 簡単な表にしてZIPでくれ。

80:デフォルトの名無しさん
08/10/05 11:29:00
>>79
失せろ

81:デフォルトの名無しさん
08/10/05 11:30:17
>>80 「わかりません」ってハッキリ言えwww

82:デフォルトの名無しさん
08/10/05 11:47:12
>>79
どういう視点で違いを知りたい?

83:デフォルトの名無しさん
08/10/05 13:15:48
みなさん童貞ですか?

84:デフォルトの名無しさん
08/10/05 14:09:03
>>18
ワロタwwww

85:74 ◆5/7mhL.nO6
08/10/05 14:53:36
>>78
elってこれですか?
URLリンク(www.dotup.org)

86:デフォルトの名無しさん
08/10/05 16:52:12
AGE

87:デフォルトの名無しさん
08/10/05 20:01:02
>>12>>16>>34です
どうか助けてもらえませんか…

88:74 ◆5/7mhL.nO6
08/10/05 21:16:20
誰か>>74をお願いいたします。

89:デフォルトの名無しさん
08/10/05 21:16:49
>>87
今から始める。のんびりまってて。

90:デフォルトの名無しさん
08/10/05 21:28:25
>>87
URLリンク(www.nigauri.sakura.ne.jp)

BCC Developerで拡張子を.cppとして作成。
コメントはほとんどなし。
間違ってたらすまない。
まぁ、参考程度にしてもいいし、ゴミ箱直行でもいいし。

91:デフォルトの名無しさん
08/10/05 21:29:00
>>89
いくらでも待ちます。ハチ公のように。
本当にありがとうございます。

92:デフォルトの名無しさん
08/10/05 21:31:49
二度と戻らぬ主人を待ち続けるハチ公であつた。

93:90
08/10/05 21:32:38
あ、>>89さんゴメン。かぶった。
プログラム>>89のほうがいいかもしれないよ。俺あんまりこのスレきたことないから

94:デフォルトの名無しさん
08/10/05 21:33:39
>>90
ありがとうございます。参考にさせてもらいます。
C初めて間もないので、とても為になります。

95:デフォルトの名無しさん
08/10/05 21:44:25
>>93
大丈夫、実はやってない。

96:デフォルトの名無しさん
08/10/05 22:08:56
>>95
マジですか?…
わかりました。では>>90さんのを元に、各行の説明付けに励みたいと思います。
>>90さんありがとうございました。

97:74 ◆5/7mhL.nO6
08/10/05 22:18:48
>>74の「八の字」の描き方もお願いします。
円はできたのですが、八の字はどのようにやったら良いかわかりません。

98:デフォルトの名無しさん
08/10/05 22:22:58
円を二個くっつければ八の字にならないか?

99:デフォルトの名無しさん
08/10/05 22:53:16
○○

でも八の字といえば八の字だよな

100:デフォルトの名無しさん
08/10/05 23:01:11
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):英文文書整形プログラム
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 10月8日
[5] その他の制限:特にありません

よろしくお願いします

101:デフォルトの名無しさん
08/10/06 00:10:49
>>99


こっちじゃね?

102:デフォルトの名無しさん
08/10/06 00:13:13
>>100
そこだけ見るとゼペット爺さんなんか痛い子

103:デフォルトの名無しさん
08/10/06 00:18:39
>>100
51文字目にカンマやピリオドがあったらどうする?

1.直前の単語ごと次の行へ
2.カンマやピリオドが行の先頭にあっても構わない
3.行の後ろにこっそりつける

104:デフォルトの名無しさん
08/10/06 00:29:53
>>103
ピリオドや?などは単語の一部という扱いでいいと思います
ですので「1」で大丈夫です

105:デフォルトの名無しさん
08/10/06 03:10:26
>>97
>>76は?もう期限近いけどさ。

106:デフォルトの名無しさん
08/10/06 04:35:00
>>97
眠れないので作ってみた
void teki_01_dp(void)
{
static float n = 0;
static float inc = 0.1;

for (cnt = 0; cnt < 17; cnt++) {
if (init_fl[cnt] != 0) {
/* 出現済みの敵の場合 */
/* 次の座標を計算 */
#if 0
spx[cnt] += spxg[cnt];
spy[cnt] += spyg[cnt];

zx[cnt] += FrameTime * spx[cnt];
zy[cnt] += FrameTime * spy[cnt];
#else
zx[cnt] += cos(n * PI / 180) * FrameTime * 100;
zy[cnt] += sin(n * PI / 180) * FrameTime * 100;
n += inc;
if (n >= 180.0) {
inc = -0.1;
} else if (n <= -180.0) {
inc = 0.1;
}
#endif
}
}
}
速度とかは超適当す。

107:74 ◆5/7mhL.nO6
08/10/06 07:10:44
>>105
期限は今週中なら一応大丈夫です。

>>106
これはどこのソースに書き込みましたか?

108:106
08/10/06 07:40:39
>>107
うpろだの内容はそのままビルドできんかったので
1.zako_01.cppを新規に作成
2.zako.cppをコピペ
3.teki_reqをtei_01_reqに変更
4.teki_dpをteki_01_dpに変更
5.読みにくかったので全面書き替え!!
5.teki_01_dpに>>106のを書いた
6.teki_01_reqは固定位置出現にした

最終動きのイメージを今見たんだがハチの字の方向が違うかもしれん
そこはまぁ適当によろしこ
ちなみにPIは3.141592にdefineしてある

109:106
08/10/06 07:41:46
書き忘れた
もう仕事に行く時間なので
夜になるまで応答できないかも

110:74 ◆5/7mhL.nO6
08/10/06 08:11:20
>>109
ありがとうございます。
やってみるので、夜になったらまた見てもらえますか?
それまで自分でやってみます。

111:21
08/10/06 11:27:20
>>61
よし動いた。
・・・あれ肝心のソートがされてないorz
誰か13時までに原因を教えてください。

112:デフォルトの名無しさん
08/10/06 12:01:51
1] 授業単元:C++
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
・「年(西暦)」「月」を入力したら,その月のカレンダーを表示するプログラムを作成しなさい。ただし,下記の条件を満たすものとする。

【条件】
(1)カレンダークラスを作成し,main関数でカレンダークラスの実体を生成し,カレンダークラス内のメンバ関数(show関数)を呼び出してカレンダーを表示する。
(2)カレンダークラスはカプセル化されていること。
(3)カレンダー表示には,年,月および曜日,日を表示すること。
(4)上記以外については自由に作成してよい。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio 2008
 [3.3] 言語:C++
[4] 期限: ([2008年10月8日


113:デフォルトの名無しさん
08/10/06 17:59:06
>>112
URLリンク(kansai2channeler.hp.infoseek.co.jp)

問題文のリンクを元に作ったけども
正直カレンダークラスに year と month ないほうが綺麗になると思う

114:デフォルトの名無しさん
08/10/06 18:40:58
[1] 授業単元:プログラミング演習
[2] n*3がたの行列Aと3*mの行列Bの積を計算する
プログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc バージョン5.5
 [3.3] 言語:C
[4] 期限: 10月9日
[5] その他の制限:特にありません

よろしくお願いします。素人でもわかりやすい作りに
していただければ幸いです。



115:デフォルトの名無しさん
08/10/06 18:40:59
>>113
そんなに無理矢理三項演算子使わなくても…

116:デフォルトの名無しさん
08/10/06 18:53:21
>>115
使わないと分かりにくいかなと思って使ったんだけども・・・
取っても結果同じだから、違和感あるなら取ってね

117:デフォルトの名無しさん
08/10/06 19:22:49
#include<stdio.h>
#define n 2
#define m 4
int main(){
int A[n][3] ={{1,2,3}, {4,5,6}};
int B[3][m] ={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int C[n][m],i,j,k,t;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
for(t=0,k=0;k<3;k++){ t += A[i][k]*B[k][j]; }
C[i][j] = t;
}
}
//A
for(i=0;i<n;i++){
for(j=0;j<3;j++){ printf("%3d",A[i][j]); }
printf("\n");
}
//B
for(i=0;i<3;i++){
for(j=0;j<m;j++){ printf("%3d",B[i][j]); }
printf("\n");
}
//C
for(i=0;i<n;i++){
for(j=0;j<m;j++){ printf("%3d",C[i][j]); }
printf("\n");
}

}

118:74 ◆5/7mhL.nO6
08/10/07 00:33:44
>>108のように書いたのですが、

このようなエラーはどう対処したら宜しいのでしょうか?

..\zako_01.cpp(52) : warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。
..\zako_01.cpp(66) : error C2065: 'PI' : 定義されていない識別子です。
..\zako_01.cpp(70) : warning C4305: '=' : 'double' から 'float' へ切り詰めます。
..\zako_01.cpp(72) : warning C4305: '=' : 'double' から 'float' へ切り詰めます。

119:デフォルトの名無しさん
08/10/07 00:42:13
#define PI 3

120:デフォルトの名無しさん
08/10/07 00:55:07
笑ったけど本気にしたらかわいそうだ

>>118
#define PI 3.141592

warningってのは警告だから無視すればいい

121:デフォルトの名無しさん
08/10/07 01:35:20
[1] C言語演習
[2] URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] C
[4] 今週の水曜日

よろしくお願いします。

122:デフォルトの名無しさん
08/10/07 02:49:18
>>118
> >>108のように書いたのですが、

>>108
> ちなみにPIは3.141592にdefineしてある

はぁ。

123:74 ◆5/7mhL.nO6
08/10/07 04:23:57
>>119
>>120
>>122
すみません見落としていました…

とりあえず、>>106を参考に作りました。
URLリンク(www.dotup.org)

するとこのようなエラーが出るのですが…ファイルを見て確認してみて下さい。
zako_01.obj : error LNK2005: "float * zy" (?zy@@3PAMA) は既に zako.obj で定義されています。
zako_01.obj : error LNK2005: "int * init_fl" (?init_fl@@3PAHA) は既に zako.obj で定義されています。
zako_01.obj : error LNK2005: "float * spy" (?spy@@3PAMA) は既に zako.obj で定義されています。
zako_01.obj : error LNK2005: "float * spx" (?spx@@3PAMA) は既に zako.obj で定義されています。
zako_01.obj : error LNK2005: "float * spyg" (?spyg@@3PAMA) は既に zako.obj で定義されています。
zako_01.obj : error LNK2005: "float * zx" (?zx@@3PAMA) は既に zako.obj で定義されています。
zako_01.obj : error LNK2005: "float * spxg" (?spxg@@3PAMA) は既に zako.obj で定義されています。

124:74 ◆5/7mhL.nO6
08/10/07 06:01:05
>>123のエラーは全て自己解決しました。

普通にコンパイルできるのにちゃんと表示されないのですが…
URLリンク(www.dotup.org)

>>108のようにやったのに表示されません…

125:106
08/10/07 07:40:12
すまん。もともとあった内容は省略して書いてた。
----- こっから
//アニメーション-----------------------------
timer_a[cnt]+=FrameTime;
if(timer_a[cnt]>0.1){
timer_a[cnt]=0;
no_a[cnt]++;
if(no_a[cnt]>9) no_a[cnt]=0;//アニメーションのループ
}
//敵の表示
elDraw::Layer((int)zx_a[cnt],(int)zy_a[cnt],tkBMP[cnt],40*no_a[cnt],0,40*no_a[cnt]+40,40);
// SHOW2((int)zx[cnt],(int)zy[cnt]-5,"no= %d",cnt);

}//リクエスト if end
}//for end

if(out_cnt==17){//17個全て消えたか?
for(cnt=0;cnt<17;cnt++){
init_fl_a[cnt]=0;

}
---- ここまで
をkadai_d_dpの最後に追加してみそ。

分かってるとは思うが
//敵の表示
elDraw::Layer((int)zx_a[cnt],(int)zy_a[cnt],tkBMP[cnt],40*no_a[cnt],0,40*no_a[cnt]+40,40);
のコールでビットマップを描画してるので
これ消したら当然何も出ない罠

126:デフォルトの名無しさん
08/10/07 07:58:09
>>124
表示してないからあたりまえ
#define PI 3.141592F
void teki_01_dp(void)
{
static int no[17];//アニメ用
static float timer[17];//アニメ用
static float n = 0.0F;
static float inc = 0.1F;
int cnt;
for (cnt = 0; cnt < 17; cnt++) {
if (init_fl_01[cnt] != 0) {
zx_01[cnt] += cos(n * PI / 180) * FrameTime * 100;
zy_01[cnt] += sin(n * PI / 180) * FrameTime * 100;
n += inc;
if (n >= 180.0) {
inc = -0.1F;
} else if (n <= -180.0) {
inc = 0.1F;
}
timer[cnt]+=FrameTime;
if(timer[cnt]>0.1){
timer[cnt]=0;
no[cnt]++;
if(no[cnt]>9) no[cnt]=0;//アニメーションのループ
}
elDraw::Layer((int)zx_01[cnt],(int)zy_01[cnt],tkBMP[cnt],40*no[cnt],0,40*no[cnt]+40,40);
}
}
}

127:74 ◆5/7mhL.nO6
08/10/07 08:04:53
>>125
>>126
できました!ありがとうございます!
これを元に波線の軌道もやってみますので、分からなくなったら再び質問します。

128:112
08/10/07 10:41:20
>>113
デバックしましたけど何も表示されませんでした。

129:デフォルトの名無しさん
08/10/07 11:03:35
>>128
デバック???
「修正してやったぜ」って意味か?
失礼な奴だな

知らない言葉は調べたほうがいいぜ

130:デフォルトの名無しさん
08/10/07 12:27:22
デバッグ実行のことじゃね

131:デフォルトの名無しさん
08/10/07 12:39:16
VSが「デバッグ開始」て書いてあるから間違って覚えたんだろ

132:デフォルトの名無しさん
08/10/07 12:41:45
>>128
コマンドライン引数が無いときの処理が無いからな


133:デフォルトの名無しさん
08/10/07 13:10:31
>>121
2番目の問題だけ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

134:21
08/10/07 16:58:43
誰か61のプログラムでソートされない原因を
教えてください。
お願いします


135:デフォルトの名無しさん
08/10/07 17:07:23
>>134
やってみたらソートされたが、どんなデータを与えたの?

136:21
08/10/07 17:12:27
>>135
./kadai3-2 s sa
と入力しました。./kadai3-2が実行プログラムで
Sが読み込ませるプログラムでsa

137:21
08/10/07 17:14:56
すいません途切れました。
saが出力させるファイルで
sの中身は1,2,3,4,5,6,7,という
数字が記録されています。
実行するとsaの中身は
1,2,3,4,5,6,7となっていて
ソートされてないのです。


138:デフォルトの名無しさん
08/10/07 17:20:01
>>137
落ち着けよ
意味がわからんよ

139:デフォルトの名無しさん
08/10/07 17:24:26
>>137
見事にソートされているように見えるんだが。。
たとえばsを 3,6,1,5,2,7,4 という内容にしてみたら。

ソートの意味がわかっていないのか、それとも>>21の思っているソートがこちらに伝わっていないのか。

140:21
08/10/07 17:35:18
あっ、あぁ、ほんとだ。
ごめんなさい。
いつのまにか俺のなかで
ソートの種類が勝手に順番を逆にするソート
にすり変わってたorz
思い込みってやだな。
お手数かけました。
心よりお詫び申し上げます。





141:デフォルトの名無しさん
08/10/07 17:54:06
[1] 初級プログラミング
[2]
#include <stdio.h>
int main(void){

int a,b,c,d,e,f,g,h,i,j,k,l,m;//a~m(13個,数は固定)には整数0か1が毎回ランダムに入るとしてください
a=1;b=0;c=0;d=1;e=0:f=1;g=1;h=1;i=1;j=0;k=1;l=1;m=0;//例

printf("%d",a); printf("%d",b); printf("%d",c); printf("%d",d);
printf("%d",e); printf("%d",f); printf("%d",g); printf("%d",h);
printf("%d",i); printf("%d",j); printf("%d",k); printf("%d",l);
printf("%d",m);
printf("\n");

//表示 1001011110110
/*以下に13ビットの値を16進数に変換するプログラムを記述せよ*/

printf("%d",?); printf("%d",?); printf("%d",?); printf("%d",?);
printf("\n");
return 0;
}
abcdefghijklmが
1001011110110 の時は 12f6 と表示 aが4桁めb~eが3桁めf~iが2桁めj~mが1桁めとなるようにする
[3] 環境
[3.1] OS:linux [3.2] gcc3.4 [3.3] c
[4] 期限: 10/8
[5] その他の制限:なし



142:デフォルトの名無しさん
08/10/07 18:01:51
>>141
?を埋める形じゃないとだめ?

143:デフォルトの名無しさん
08/10/07 18:05:07
というわけでもないと思うので、こうしてみたよ。
printf("%d",a); printf("%x", b*8+c*4+d*2+e); printf("%x", f*8+g*4+h*2+i); printf("%x", j*8+k*4+l*2+m);
もしくは
printf("%d",a); printf("%x", b<<3|c<<2|d<<1|e); printf("%x", f<<3|g<<2|h<<1|i); printf("%x", j<<3|k<<2|l<<1|m);

144:141
08/10/07 18:06:39
>>142
?は自分がこんな感じかなと勝手に考えて書いたものですので
無視してもらっても大丈夫です。

145:141
08/10/07 18:20:49
>>142,143
ありがとうございます。出来ました。

146:デフォルトの名無しさん
08/10/07 20:51:46
ソース
URLリンク(kansai2channeler.hp.infoseek.co.jp)
データ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

テキスト形式のデータを読み込んで,マージソートをして
ナップサック問題をとくソートなんだが

item数 n = 100 重量制限 B = 2000
データは item p[i] w[i]の順に並んでるよ

ここにいてるできる奴ならもっと短くできるよね

B5に収まるくらいの美しいソートおしえてたもれ

<stdio.h><stdlib.h><math.h>くらいだけで
シンプルにできる人、たのんます

あっしのノー味噌ではうつくしくできないので.

147:146
08/10/07 20:58:31

×美しいソート
○美しいソース
です;

頭んなか、ソートだらけか….

148:デフォルトの名無しさん
08/10/07 21:15:30
>>1くらい読め

149:デフォルトの名無しさん
08/10/07 21:15:47
>>146
qsort を使うとか

150:146
08/10/07 21:28:19
>>148
宿題を解いて,もっと短くできるから
やってみろって言われたんです;
テンプレどおりに書かなかったのはすみません。

>>149
マージソートで、数十行くらいで作れるらしいです。
それをやれといわれました;
教科書通りにやるのはできるんですが
短くするとなると、なかなか凡人クラスの頭のキレでは難しくて.


151:デフォルトの名無しさん
08/10/07 21:37:13
つstdlib.h

152:デフォルトの名無しさん
08/10/07 22:46:55
まず、このソースが何をしていて、どの辺で苦労して、どのあたりが改善できそうであるかを言ってみて。

153:デフォルトの名無しさん
08/10/07 23:05:45
1] 授業単元: 基礎プログラミング
[2] ニュートンラプソン法を用いてnのルート、及び逆数の関数を作成せよ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 10/8 24:00

154:デフォルトの名無しさん
08/10/08 02:34:55
>>153
URLリンク(kansai2channeler.hp.infoseek.co.jp)

155:デフォルトの名無しさん
08/10/08 02:40:07
ありゃageになってたすまぬ

156:デフォルトの名無しさん
08/10/08 04:21:05
URLリンク(ja.wikipedia.org)
> 2008年8月、史上最大の素数探求のための分散コンピューティング・プロジェクトである
> GIMPSによって、その時点で史上最大とされる素数が発見された。これは知られている中で
> 46番目のメルセンヌ素数、243112609 - 1 であり、十進記数法で表記したときの桁数は
> 1297万8189桁に及ぶ。
上記の史上最大とされる素数を求めるプログラムきぼんぬ

157:デフォルトの名無しさん
08/10/08 09:32:16
>>156
URLリンク(kansai2channeler.hp.infoseek.co.jp)


158:157
08/10/08 09:51:30
2^nの1桁目は0にならないから最後1引くのにループはいらなかった

159:157
08/10/08 09:54:31
#define END_POINT 243112609

#define END_POINT 43112609
の間違いだな(>>156のをそのままコピペしてしまった)

160:デフォルトの名無しさん
08/10/08 11:22:20
>>156
#include <stdio.h>
#define MER_P 43112609
int main(void)
{
int i;
printf("(2^%d) - 1 =\n", END_POINT);
for (i = 0; i < MER_P; i++)
{
printf("1");
}
printf("\n(2進数)\n");
return 0;
}


161:デフォルトの名無しさん
08/10/08 11:23:22
間違えた
#include <stdio.h>
#define MER_P 43112609
int main(void)
{
int i;
printf("(2^%d) - 1 =\n", MER_P);
for (i = 0; i < MER_P; i++)
{
printf("1");
}
printf("\n(2進数)\n");
return 0;
}


162:デフォルトの名無しさん
08/10/08 13:13:55
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
すごろくプログラムを作成しなさい。ただし,下記の条件を満たすものとする。
・すごろくのコマとしてユーザクラスを作成しなさい。
・すごろくのコマを移動させる場所としてマスクラスを作成しなさい。
・main関数でユーザクラスの実体(2つ以上)とマスクラスの実体(5つ以上)を生成しなさい。
・ここで,マスには,「スタート」「ゴール」「1つ進む」「1つ戻る」「2つ進む」「2つ戻る」「スタートへ戻る」「何もしない」の条件があるとする。
・さらに,ユーザは初期状態で「スタート」とし「ゴール」になったら終了とする。
・乱数でサイコロ(1つ)の数字を出しすごろくを行い,片方がゴールしたら終了とする(ちょうどゴールにとまらなくてもよい)。なお,すごろくをプレイしている状況は表示すること。
・あとはすごろくとして成り立っていればどのようにプログラミングしてもよい(他のクラスが必要な場合は追加してもよい)。


[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VisualStudio
 [3.3] 言語:C++
[4] 期限: ([2008年10月16日

163:デフォルトの名無しさん
08/10/08 22:33:18
[1] 授業単元:C言語入門
[2]
#include <stdio.h>

int add(int x, int y)
{
return x+y;
}

int main()
{
int a, b, c;
}
printf("calc a + b\n");
printf("input a b\n");
scanf("%d%d", &a, &b);
c = add(a,b);
printf("result: %d + %d = %d\n", a, b, c);
return 0;
}

void accum(int *x, int y)
{
*x = *x + y;
}
このポインタを使って上の関数addを用いずに同じ動作をするプログラムを作れ。

お願いします(__)

164:デフォルトの名無しさん
08/10/08 22:38:31
>163
問題は正確に

165:デフォルトの名無しさん
08/10/08 22:40:21
#include <stdio.h>
void accum(int *x, int y)
{
*x = *x + y;
}
int main()
{
int a, b;
printf("calc a + b\n");
printf("input a b\n");
scanf("%d %d", &a, &b);
printf("result: %d + %d", a, b);
>>163

accum(&a, b);
printf(" = %d\n", a);
return 0;
}



166:デフォルトの名無しさん
08/10/08 23:12:03
すみません。
VC++をいじってるんですが、double型の値を画面に表示させると
「0.000000」といった感じで小数部が6桁表示されてしまいます。
この小数部の表示桁数を制限したいのですが、何か良い関数など
があれば教えて下さい。
よろしくお願い致します。

167:デフォルトの名無しさん
08/10/08 23:16:43
printf("%5.2lf",12.34);
ってやったらどうだろう

168:デフォルトの名無しさん
08/10/08 23:27:28
それは間違いだ
いやc99ならいける
というレスが続きそうな気がするので先に言っておこう

169:デフォルトの名無しさん
08/10/08 23:29:23
>>168
C99なら…それでもC99ならきっとなんとかしてくれる…

170:お願いします
08/10/08 23:58:33
【質問テンプレ】
[1] 授業単元: アルゴリズムデータ構造2
[2] 問題文(含コード&リンク): 52枚のトランプを5人に配るシミュレーション
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: コマンドプロンプト バージョンはすいません分からないです。
 [3.3] 言語: C言語
[4] 期限: 10月13日(月)まで
[5] その他の制限: 配列でswap関数を使って作ってもらいたいです。

171:お願いします
08/10/09 00:16:55
>>170 アップローダの使い方がいまいち分からなかったので
ソースを貼ります このプログラムを書き換えてください。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i;
char *card[]={"Club","Diamond","Heaart","Spade"};
char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
srand(time(NULL));
i=rand()%52;
printf("%s%s\n",card[i/13],numb[i%13]);
return 0;
}

172:デフォルトの名無しさん
08/10/09 00:37:56
>>171
こんなんでおk?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int*a,int*b){int c = *a;*a=*b;*b = c;}
int main(void)
{
&nbsp; &nbsp; int i,n;
&nbsp; &nbsp; char *card[]={"Club","Diamond","Heaart","Spade"};
&nbsp; &nbsp; char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
&nbsp; &nbsp; int cards[52];
&nbsp; &nbsp; for(i=0;i<52;++i)
&nbsp; &nbsp; &nbsp; &nbsp; cards[i] = i;
&nbsp; &nbsp; srand(time(NULL));
&nbsp; &nbsp; //カードをシャッフルする
&nbsp; &nbsp; for(i=0;i<52;++i)
&nbsp; &nbsp; &nbsp; &nbsp; swap(cards+i,cards+rand()%(52-i)+i);
&nbsp; &nbsp; for(i=0;i<52;++i)
&nbsp; &nbsp; &nbsp; &nbsp; printf("%cさん %s%s\n","ABCDE"[i%5],card[cards[i]/13],numb[cards[i]%13]);
&nbsp; &nbsp; return 0;
}


173:デフォルトの名無しさん
08/10/09 00:39:59
ぎゃあ表示がバグってる。
たぶん空白だけだと思うけど念のためにもう一度。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int*a,int*b){int c = *a;*a=*b;*b = c;}
int main(void)
{
    int i,n;
    char *card[]={"Club","Diamond","Heaart","Spade"};
    char *numb[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
    int cards[52];
    for(i=0;i<52;++i)
        cards[i] = i;
    srand(time(NULL));
    //カードをシャッフルする
    for(i=0;i<52;++i)
        swap(cards+i,cards+rand()%(52-i)+i);
    for(i=0;i<52;++i)
        printf("%cさん %s%s\n","ABCDE"[i%5],card[cards[i]/13],numb[cards[i]%13]);
    return 0;
}

174:デフォルトの名無しさん
08/10/09 04:00:50
1から指定した数までを足し算で計算するプログラム教えてくれ。

175:デフォルトの名無しさん
08/10/09 04:06:52
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d", a * (1 + a) / 2);
return 0;
}

176:デフォルトの名無しさん
08/10/09 15:08:33
[1] 授業単元:ランダムウォークと配列
[2] 問題文(含コード&リンク): 左右に動く点がありそれが連続で右に動いた回数をカウントし出力
一連続は**回 二連続は++回
[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ名とバージョン:Visual Basic 2005
 [3.3] 言語: C++
[4] 期限: 無期限

よろしくお願いします

177:176
08/10/09 15:14:43
失敬
開発環境はMicrosoft Visual Studio 2005です

178:デフォルトの名無しさん
08/10/09 17:20:26
>>176
#include <iostream>
#include <cstdlib>
int main()
{
int i, j, n, r1 = 0, r2 = 0, state = 0;

std::cout << "繰り返し回数 = ";
std::cin >> n;

for (i = 0; i < n; i++) {
j = std::rand() % 2; // 0で左、1で右
if (j == 1) // 右へ動いた
switch (state) {
case 0: // 左へ動いた直後か右へ二回動いた直後
r1++;
state = 1;
break;
case 1:// 右へ一回動いた直後
r1--;
r2++;
state = 0;
break;
default:
break;
}
else
state = 0;
}
std::cout << "一連続は" << r1 << "回 " << "二連続は" << r2 << "回" << std::endl;
}

179:デフォルトの名無しさん
08/10/09 17:21:39
>>176
情報が足りなさすぎるということに気づけないレベルなんだなあ。
単位落としちゃえよ。

180:デフォルトの名無しさん
08/10/09 19:56:21
>>179


181:デフォルトの名無しさん
08/10/09 22:31:09
[1] 授業単元: C言語
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
TCPサーバー URLリンク(kansai2channeler.hp.infoseek.co.jp)
TCPクライアント URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:Visual stdio2005
 [3.3] 言語:C
[4] 期限:10月10日(金)まで
[5] その他の制限:問題文に記述

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

182:デフォルトの名無しさん
08/10/09 22:33:32
すみません

TCPクライアント URLリンク(kansai2channeler.hp.infoseek.co.jp)

でした


183:デフォルトの名無しさん
08/10/09 23:33:58
あと30分で終わらせとか(><

184:デフォルトの名無しさん
08/10/10 00:10:16
[1] 授業単元: C++
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:Visual stdio2005
 [3.3] 言語:C
[4] 期限:10月11日(土)まで
[5] 問題文が英語ですいません。期限が短いのですがお願い致します。

185:デフォルトの名無しさん
08/10/10 00:26:53
[1] 授業単元:C言語
[2] 問題文:a(n+1)=3a(n)+4b(n)
b(n+1)=2a(n)+3b(n)
  の漸化式で1.4142135を算出するプログラム
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月10日 朝7時まで
[5] その他の制限:特になし

手計算だと5回目に算出できましたが、プログラムに仕方がわかりません;

186:デフォルトの名無しさん
08/10/10 00:32:14
>>185
つ数学板

Cの課題とは言えない

187:デフォルトの名無しさん
08/10/10 00:33:31
>>185
せめてnはいくつから始めるのかだけでも言え
それがないと漸化式が解けん

188:デフォルトの名無しさん
08/10/10 00:36:49
>>186
 数学板行ったらCにいけゆわれました;

>>187
 すみません、nは0からです;

189:デフォルトの名無しさん
08/10/10 00:44:22
>>184
#include <iostream>
using namespace std;
int main() {
    for (;;) {
        string name;
        int credit_standing, amount_owed, minimum_payment;
        cin >> name >> credit_standing >> amount_owed;
        if (cin.eof()) break;
        if (credit_standing > 6)
            minimum_payment = (amount_owed <= 20) ? amount_owed
                            : (amount_owed <= 100) ? 10
                            : 0.1 * amount_owed;
        else
            minimum_payment = amount_owed;
        cout << name << " with credit standing " << credit_standing
             << " must pay " << minimum_payment << endl;
    }
    return 0;
}

190:デフォルトの名無しさん
08/10/10 00:58:56
>>185
a(0)とb(0)の初期値は?

191:デフォルトの名無しさん
08/10/10 00:59:43
>>184 なんだCだったか
#include <stdio.h>
int main() {
    char name[32];
    int credit_standing, amount_owed, minimum_payment;
    while (scanf("%31s %d %d", name, &credit_standing, &amount_owed) == 3) {
        if (credit_standing > 6)
            minimum_payment = (amount_owed <= 20) ? amount_owed
                            : (amount_owed <= 100) ? 10
                            : 0.1 * amount_owed;
        else
            minimum_payment = amount_owed;
        printf("%s with credit standing %d must pay %d\n",
               name, credit_standing, minimum_payment);
    }
    return 0;
}

192:デフォルトの名無しさん
08/10/10 01:06:07
>>190
a(0)=7
b(0)=5 です。


193:デフォルトの名無しさん
08/10/10 01:11:24
>>192
#include <stdio.h>
double fa(double a_n, double b_n)
{
return 3 * a_n + 4 * b_n;
}
double fb(double a_n, double b_n)
{
return 2 * a_n + 3 * b_n;
}
int main()
{
double an = 7, bn = 5;
double tmp;
int i;
for (i = 0; i < 10; ++i) {
tmp = fa(an, bn);
bn = fb(an, bn);
an = tmp;
}
printf("%.10f\n", an / bn);
return 0;
}


194:デフォルトの名無しさん
08/10/10 01:21:24
>>193
 ありがとうございます!!助かりました!!

195:デフォルトの名無しさん
08/10/10 01:21:40
>>185 素直に再帰したいけどこれじゃダメなのかな
#include <stdio.h>
int a(int); int b(int);
int a(int n) {
    if (n == 0) return 7;
    else return 3 * a(n-1) + 4 * b(n-1);
}
int b(int n) {
    if (n == 0) return 5;
    else return 2 * a(n-1) + 3 * b(n-1);
}
int main() {
    printf("%.10lf\n", (double)a(10) / b(10));
    return 0;
}

196:デフォルトの名無しさん
08/10/10 01:36:07
>>195
 いえいえ全然ダメじゃないです!本当にありがとうございます!

197:デフォルトの名無しさん
08/10/10 01:39:40
>>189
ありがとうございました。
ちなみに各customerのコードはどのように入力すればいいのですか?
初心者ですいません。

>>191
すみません、言語はC++でした。
書き間違えてしまいました。
お手数おかけしました。


198:181
08/10/10 01:52:36
>>183
すいません言葉足らずでした
改めて貼り直します

[1] 授業単元: C言語
[2] 問題文: URLリンク(kansai2channeler.hp.infoseek.co.jp)
TCPサーバー URLリンク(kansai2channeler.hp.infoseek.co.jp)
TCPクライアント URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:Visual stdio2005
 [3.3] 言語:C
[4] 期限:10月10日(金)13:00まで
[5] その他の制限:問題文に記述

引き続きよろしくお願いいたします

199:デフォルトの名無しさん
08/10/10 06:56:37
>>198
TCPサーバー:URLリンク(kansai2channeler.hp.infoseek.co.jp)
TCPクライアント:URLリンク(kansai2channeler.hp.infoseek.co.jp)


200:デフォルトの名無しさん
08/10/10 12:03:51
>>199
ありがとうございました

201:デフォルトの名無しさん
08/10/10 12:16:32
なぜうp先は関西2ちゃんねらーなんですか

202:デフォルトの名無しさん
08/10/10 15:52:19
[1] 授業単元: c言語
[2] 問題文(含コード&リンク): ペイントソフトを作る
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: Visual studio .NET 2003
 [3.3] 言語: c,c++
[4] 期限: 2週間後の火曜まで
[5] その他の制限: MFCを使用しない

線の描画などはできましたが、ペンの太さや色の変更、 操作のやり直しなどが分かりません
どなたかよろしくお願いします

203:デフォルトの名無しさん
08/10/10 16:39:02
>>202
単線だけでいいんじゃないの
機能つけるときりがないよ
アンドゥとか特に無理

204:デフォルトの名無しさん
08/10/10 17:14:13
>>203
返事ありがとうございます
やはり、アンドゥ機能などは難しいのですかね?
今までc言語はやった事があったのですが
それに比べるとVC++は色々ややこし過ぎて困っています。

画面を左右に分けて、描画とパレットのように分けて作ろうと思っているのですが
雛形みたいなのはあるのでしょうか?

205:デフォルトの名無しさん
08/10/10 19:34:20
1] 授業単元:C++
[2] 問題文:ファイルから波形を読み込み、FFTした結果をテキスト出力する
プログラムを作成せよ。

波形のデータは以下のようなものです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限: [無制限]
[5] その他の制限:まだCの勉強が浅く、色々と検索してみましたがどうもバタフライ演算の
やり方が難しく分かりません。。何か説明不足があれば聞いてください。
FFTで詰まってしまい困っています。どうか、よろしくお願いしますm(_ _)m


206:デフォルトの名無しさん
08/10/10 19:35:12
>>204
宿題できてんじゃん。
色・ふとさ固定、undoできないなどの機能制限がたくさんあるが、それは立派なペイントソフトだよ。

さらに機能追加をしたいのであれば必要に応じてデバイスコンテキストに関する質問その他を
やってけば?宿題スレじゃなく。


207:デフォルトの名無しさん
08/10/11 01:02:05
どなたか>>100お願いできませんか

208:デフォルトの名無しさん
08/10/11 02:44:59
>>207
鬱になったので、途中から手を抜いてしまった。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
PerlでもRubyでも好きなの使った方がラクダと思うけどキリンか。

209:デフォルトの名無しさん
08/10/11 02:57:37
>>204
汚いけど、これじゃだめ??


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

210:デフォルトの名無しさん
08/10/11 02:59:33
>>204じゃなくて>>207でした(´・ω・`)

211:デフォルトの名無しさん
08/10/11 08:13:31
>>202
線じゃなくて、点を打つようにすると太さ変えるのも楽になる
お絵かきチャットでは、線と線を結んでる場合が多いけど
ローカルで使えるペイントソフトはたいてい点を打って点を繋いでると思われる
点をつなげるのは、結構めんどい

アンドゥは、やり方がいくつかある
画像として管理するか
数値データとして管理するか、かな。
突貫でいいなら画像として管理するのを作ったほうが楽かもしれない
どちらが得意かによる

212: ◆ZnBI2EKkq.
08/10/11 12:00:32
[1] 授業単元:情報処理A
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Cygwin gcc 3.4.4
 [3.3] 言語:C
[4] 期限:2008年10月17日 16:00まで
[5] その他の制限:scanf関数は禁止、再帰呼び出しを用いること、エラー処理を入れること

今もやっているのですが、とても期限までに終わる気がしません。。。
誰か助けてください。


213:デフォルトの名無しさん
08/10/11 15:35:33
[1] 授業単元:c++ builder
[2] 加算平均を求めよ
[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ名とバージョン: c++ builder5
 [3.3] 言語: どちらでも可
[4] 期限:2008年10月13日まで

テキスト1には   テキスト2には   テキスト3には
   8         3        4
   5         4        7
   7         9        9
   8         8        5 
   9         3        4
   9         8        9

という形で与えられており、これをOpendialogで読み込んで加算平均しMemo1に

5.33333
8.33333

5.33333
8.66666

のように計算したものを出したいのですがどのようにすればよいでしょうか?
全然わからなくて何度か自分なりにつくっているのですが、うまくいきません。
どなたか助けてもらえませんか
読み込みはなんとかできそうですが加算平均の配列の計算のプログラムの作り方が
どうしてもわかりません。
よろしくお願いします。

214:デフォルトの名無しさん
08/10/11 16:00:03
>>213 Opendialog っていうのが分からなかった
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define NUMBER_OF_FILES 3
int main(void){
FILE *fp_in[NUMBER_OF_FILES], *fp_out;
char *filename_in[NUMBER_OF_FILES]={"テキスト1", "テキスト2", "テキスト3"}, *filename_out="Memo1";
double value[NUMBER_OF_FILES], sum;
int i;
for(i=0;i<NUMBER_OF_FILES;i++){
if((fp_in[i]=fopen(filename_in[i], "r"))==NULL){
fprintf(stderr, "\nError: %s cannot open.\n", filename_in[i]);
exit(1);
}
}
if((fp_out=fopen(filename_out, "w"))==NULL){
fprintf(stderr, "\nError: %s cannot open.\n", filename_out);
exit(2);
}
while(1){
for(i=0,sum=0.0;i<NUMBER_OF_FILES;i++){
if(fscanf(fp_in[i], "%lf", &value[i])!=1) break;
sum+=value[i];
}
if(i<NUMBER_OF_FILES) break;
fprintf(fp_out, "%g\n", floor(sum/NUMBER_OF_FILES*100000)/100000);
}
for(i=0;i<NUMBER_OF_FILES;i++) fclose(fp_in[i]);
fclose(fp_out);
return 0;
}

215:デフォルトの名無しさん
08/10/11 16:01:28
>>212
マージャン知らないと不利な課題だな。

216:デフォルトの名無しさん
08/10/11 16:07:36
>>212
URLリンク(www5f.biglobe.ne.jp)

参考になるかも?

217:デフォルトの名無しさん
08/10/11 16:49:40
>>207 >>100
URLリンク(kansai2channeler.hp.infoseek.co.jp)
一応動くようにしてみた。コマンドライン引数は、すべて実装しているわけではない。
後は好きなようにしてくれ。

218:デフォルトの名無しさん
08/10/11 17:14:43
>>207 >>100
URLリンク(kansai2channeler.hp.infoseek.co.jp)
>>217 の細かい修正とエラー処理追加しておいた。荒れそうなので、これくらいにしておく(鬱)。

219:デフォルトの名無しさん
08/10/11 20:58:59
>>218ありがとうございます。
>>209ファイル入力、標準出力はうまくいきました。
標準入出力、ファイル入出力を成功させるにはどうしたらいいでしょうか。


220:デフォルトの名無しさん
08/10/11 21:08:15
[1] 授業単元: 測量学
[2] 問題文:"度"形式から"度分秒"形式への変換
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: コマンドプロンプト バージョンはすいません分からないです。
 [3.3] 言語: C言語
[4] 期限: 10月13日(月)まで
[5] その他の制限: 簡単な関数のみでお願いします。

(例)
35.2361 → 35°14′9.96″
変換式は、まず
35.2361の小数点部分の0.2361×60=14.166
この結果の整数部分の14が分になります。
そして、14.166の小数点部分の0.166×60=9.96
この結果の9.96が秒になります。
初期値35.2361も出力値35°14′9.96″も文字列です。
初期値が35.2361ではなく、何が初期値でも通用するようにしてください。
また、初期値の小数点以下が2361と4桁と決まっているわけでもありません。

221:デフォルトの名無しさん
08/10/11 21:46:26
>>220
スレリンク(tech板:312-315番)

222:デフォルトの名無しさん
08/10/11 22:01:49
>>220
#include<stdio.h>
#include<math.h>

void convert(char *dms, const char *deg)
{
double x, d, m;
sscanf(deg, "%lf", &x);
x = fabs(modf(x, &d) * 60);
x = modf(x, &m) * 60;
sprintf(dms, "%g°%g′%g″", d, m, x);
}

int main()
{
static const char deg[] = "-35.2361";
char dms[100];
convert(dms, deg);
printf("%s\n", dms);
return 0;
}

223:213
08/10/11 22:03:42
>>214
即レスありがとうございます。大変感謝しています;;
Opendialogはc++builder5のダイアログでファイルを開くというコマンドを示しています
わざわざプログラムを書いていただいたのですが、これをc++builderに
置き換えていくことができませんでした。すいません;;
自分でも今まで書いていたのですが、Memo1には-2と一行書き出されるだけでした;
多分読み込んだ配列の計算としての基本的な計算とプログラムが間違っていると思うのですが、
自分ではどこが間違っているのかわかりませんでした。。
どなたかよければ教えていただけないでしょうか。よろしくお願いします><

224:213
08/10/11 22:08:40
void __fastcall TForm1::Button1Click(TObject *Sender) ファイルを開いてテキスト1を読み込む
{
OpenDialog1->Execute();

Fname1 = OpenDialog1->FileName;

Edit1->Text = Fname1;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) テキスト2を読み込む
{
OpenDialog1->Execute();

Fname2 = OpenDialog1->FileName;

Edit2->Text = Fname2;
}

225:213
08/10/11 22:09:10
void __fastcall TForm1::Button3Click(TObject *Sender) テキスト3を読み込む
{
OpenDialog1->Execute();

Fname3 = OpenDialog1->FileName;

Edit3->Text = Fname3;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender) 3つのテキストを加算平均してMemo1に書き出す
{
AnsiString kasan;
char Fname1[5],Fname2[5],Fname3[5];

for(m=0;m<=5;m++);
{
kasan = (Fname1[m] + Fname2[m] + Fname3[m])/3;
}

Memo1->Lines->Add(kasan);



226:213
08/10/11 22:10:31
長文失礼しました。。
こんな感じです。


227:デフォルトの名無しさん
08/10/12 03:30:31
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <fstream>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE 管理のコンポーネント
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button4Click(TObject *Sender);
private: // ユーザー宣言
AnsiString Fname1;
AnsiString Fname2;
AnsiString Fname3;

228:デフォルトの名無しさん
08/10/12 03:31:35
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

これがUnit1.hね

それからUnit1.cpp

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname1 = OpenDialog1->FileName;
Edit1->Text = Fname1;
}

229:デフォルトの名無しさん
08/10/12 03:32:24
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname2 = OpenDialog1->FileName;
Edit2->Text = Fname2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
OpenDialog1->Execute();
Fname3 = OpenDialog1->FileName;
Edit3->Text = Fname3;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
std::ifstream ifs[3];

ifs[0].open(Fname1.c_str());
ifs[1].open(Fname2.c_str());
ifs[2].open(Fname3.c_str());
for (int i = 0; i < 6; i++) {
double sum, t1, t2, t3;

ifs[0] >> t1;
ifs[1] >> t2;
ifs[2] >> t3;
sum = (t1 + t2 + t3) / 3;
Memo1->Lines->Add(AnsiString(sum));
}
}

230:213
08/10/12 03:59:24
>>227>>228>>229
ありがとうございました!
おかげで正しく算出することができました><

231:デフォルトの名無しさん
08/10/12 04:15:13
[1] 授業単元:アルゴリズム
[2] 引数nに対して、1/nの小数表示を逆配列と動的配列を用いた形でプログラムせよ
  URLリンク(kk.kake.info.waseda.ac.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] cygwin gcc 3.4
 [3.3] 言語: C
[4] 期限: [2008年10月12日00:00まで]
[5] 特になし

全然わかりません……どなたか助けて頂けると幸いです……

232:デフォルトの名無しさん
08/10/12 13:29:10
>>231
URLリンク(kansai2channeler.hp.infoseek.co.jp)

233:デフォルトの名無しさん
08/10/12 14:05:25
>>232
動きました!
あぁ…なんといっていいやら……ありがとうございます!!
これからプログラムの挙動について考えてみたいと思います


234:デフォルトの名無しさん
08/10/12 20:21:40
てs

235:デフォルトの名無しさん
08/10/12 21:59:38
[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):任意の長さの文字列(英字のみ)データをファイルから読み込み(ファイル名をキーボードから入力して読み込ませる)、辞書順に並べ替えて最終結果のみを表示するプログラムを作成せよ。
ただし、データは改行で区切られており、文字列の最大長を64文字、データの最大個数を1000個(1000行)とする。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc (バージョン不明です)
 [3.3] 言語: C言語
[4] 期限: 2008年10月14日23:59まで
[5] その他の制限: バブルソートの基本らしいのですが…str~、getsなど使用する関数や、とりあえず、配列とポインタを使わないといけないんだろう、など断片的なものにしか自信が、持てずプログラムを組んでみたものの実行できません…orz
助けてください…。


236:デフォルトの名無しさん
08/10/12 22:05:11
>>235
問題文には含んでないけど
結局バブルソートは自分で書かなきゃだめなのか?
平たくいえばqsortとstrcmp使っていいか?


237:デフォルトの名無しさん
08/10/12 22:15:10
>>236
qsortという関数はまだ習っていないのでなるべく控えたいのですが、strcmpは自分がプログラムを組んでみた時にも使用しましたので使っていただいて大丈夫です。
早速ありがとうございます。

238:デフォルトの名無しさん
08/10/12 22:31:36
>>235
#include<stdio.h>
#include<string.h>
#define WORD_NUM_MAX 1000
#define WORD_LEN_MAX 64
int main(void){
char word[WORD_NUM_MAX][WORD_LEN_MAX+1+1], tmp[WORD_LEN_MAX+1], *p;
char filename[256];
int i, j, word_num;
FILE *fp;
printf("Input filename : ");
scanf("%255[^\n]", filename);
if((fp=fopen(filename, "r"))==NULL) return 1;
for(word_num=0;word_num<WORD_NUM_MAX;word_num++){
if(fgets(word[word_num], sizeof(word[0]), fp)==NULL) break;
if((p=strchr(word[word_num], '\n'))!=NULL) *p='\0';
}
fclose(fp);
for(i=0;i<word_num;i++){
for(j=0;j+1<word_num-i;j++){
if(strcmp(word[j], word[j+1])>0){
strcpy(tmp, word[j]);
strcpy(word[j], word[j+1]);
strcpy(word[j+1], tmp);
}
}
}
for(i=0;i<word_num;i++) puts(word[i]);
return 0;
}

239:デフォルトの名無しさん
08/10/12 23:21:54
[1] 授業単元:c++ builder
[2] 3科目4人分の得点と科目ごと、個人ごとの平均点を配列を使って作れって
[3] 環境
 [3.1] OS:windows xp
 [3.2] コンパイラ名とバージョン: c++ builder5
 [3.3] 言語: どちらでも可
[4] 期限:2008年10月13日まで



240:デフォルトの名無しさん
08/10/12 23:57:56
>>239
とりあえずgccでは動いた。

#include <stdio.h>

int main(int argc, char *argv[]) {
int score[4][3] = {{90,73,82},{60,50,55},{71,59,80},{95,88,80}};
int i,j;

double personAvg[4];
double classAvg[3];

printf("人別平均\n");

for(i=0; i<4; i++) {
for(j=0; j<3; j++) {
personAvg[i] += score[i][j];
}
personAvg[i] /= 3;
printf("%f\n", personAvg[i]);
}

printf("科目別平均\n");

for(j=0; j<3; j++) {
for(i=0; i<4; i++) {
classAvg[j] += score[i][j];
}
classAvg[j] /= 4;
printf("%f\n", classAvg[j]);
}
}

241:デフォルトの名無しさん
08/10/13 00:07:50
>240
ありがとうございました・・・

世の中すてたもんじゃないっておもいました・・
本当に困ってたので・・・

242:デフォルトの名無しさん
08/10/13 00:17:33
>>241
妙な授業単元に問題文
ついでに抜けてる部分を修正できると思えない人間
言葉からにじみ出てくる、「俺は悪くないよ」オーラ
世の中ろくなもんじゃないよ

243:デフォルトの名無しさん
08/10/13 00:28:25
それは本当の優しさなのだろうか。



244:デフォルトの名無しさん
08/10/13 00:53:39
下記の問題をやっていただける方いませんか?よろしくお願いします
[1]
情報処理
[2]
ある自然数nがある。
このnを和に分解するすべての場合を列挙しなさい。
なお、以下の例のように順列でも組み合わせでもかまわない。

n = 4
1 1 1 1
1 1 2
1 2 1
1 3
2 1 1
2 2
3 1

n = 4
1 1 1 1
1 1 2
1 3
2 2
3 1

[3]
 [3.1] Linux
 [3.2] gcc4.0
 [3.3] C言語
[4]
10月15日23:59
[5] 再帰について習いました

245:デフォルトの名無しさん
08/10/13 01:18:06
>>244
#include<stdio.h>
#define N_MAX 100
int g_result[N_MAX];
void bar(int result_num, int n){
int i;
if(n<=0){
for(i=0;i<result_num;i++) printf(" %d", g_result[i]);
printf("\n");
return;
}
for(i=1;i<=n;i++){
g_result[result_num]=i;
bar(result_num+1, n-i);
}
}

void foo(int n){
int i;
if(n>N_MAX) return;
for(i=1;i<=n-1;i++){
g_result[0]=i;
bar(1, n-i);
}
}
int main(void){
int n=4;
printf("n = %d\n", n);
foo(n);
return 0;
}

246:デフォルトの名無しさん
08/10/13 02:55:57
じゃあ僕は組み合わせで。

#include<stdio.h>
#include<string.h>
int partition(int n,int m,char *exp);
int main(void){
int i,n,c;
do{
printf("nを入力してください。 n=");
scanf("%d",&n);
c=0;
for(i=n;i>0;i--) c += partition(n,i,"");
printf("Total:%d\n",c);
}while(n != 0);
return 0;
}
int partition(int n,int m,char *exp){
int i,c=0;
char ex[100]="";
if(n==m){
printf("%s%d\n",exp,m);
return 1;
}
if(m==0) return 0;
if(n>m){
sprintf(ex,"%s%d+",exp,m);
for(i=m;i>0;i--) c += partition(n-m,i,ex);
return c;
}
return 0;
}

247:デフォルトの名無しさん
08/10/13 02:57:17
>>245
どうもありがとうございました。

248:デフォルトの名無しさん
08/10/13 02:58:05
>>246
こちらもどうもありがとうございました。

>>245,246
ソースを理解していきたいです。

249:デフォルトの名無しさん
08/10/13 11:00:03
どなたか >>205 お願いできませんでしょうか・・

250:デフォルトの名無しさん
08/10/13 12:54:17
[1] 授業単元: C
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: WindowsXP 
[3.2] コンパイラ名とバージョン:VB2008
 [3.3] 言語: C++
[4] 期限: 10/14まで
[5] その他の制限: 特になし。

どなたか、お願いします。

251:デフォルトの名無しさん
08/10/13 14:09:18
>>249
ネットでぱくれ

252:デフォルトの名無しさん
08/10/13 14:34:26
2次方程式ax^2+bx+cの根を計算するプログラムをかきなさい。

という問題です。
//二次方程式の根を計算するプログラム
#include <stdio.h>
void main () {
double a, b, c, d;
printf("3つの数字を入力してください");
scanf("%d %d %d", &a ,&b ,&c);
d = b*b-4*a*c;
printf("二次方程式の根は%d\n",d);
}

のように書いたのですがすべて答えが同じになってしまいます
お願いします。

253:デフォルトの名無しさん
08/10/13 14:36:35
%d →%f

254:デフォルトの名無しさん
08/10/13 14:38:04
>>252
> 2次方程式ax^2+bx+cの根を計算するプログラムをかきなさい。
>
> という問題です。
> //二次方程式の根を計算するプログラム
> #include <stdio.h>
> void main () {
> double a, b, c, d;
> printf("3つの数字を入力してください");
> scanf("%d %d %d", &a ,&b ,&c);
> d = b*b-4*a*c;
> printf("二次方程式の根は%d\n",d);
> }
>
> のように書いたのですがすべて答えが同じになってしまいます
> お願いします。

> scanf("%d %d %d", &a ,&b ,&c);
scanf("%lf %lf %lf", &a ,&b ,&c);

> printf("二次方程式の根は%d\n",d);
printf("二次方程式の根は%f\n",d);


255:235
08/10/13 16:30:13
>>238
お礼が遅れてすいません、ありがとうございます。
…しかしながら…自分の説明不足のせいで大変申し訳ないのですが、
問題文中の「辞書順」=「大文字小文字も区別する」ということなのです…。
つまり、
A<a<B<b<C<c<D<d<・・・・・・・・・・・・・<X<x<Y<y<Z<z
このように並べ替えたいのです。
>>238さんのプログラムを参考に自分でももう少し考えてみますが、あまり自信がないので手助けしていただけたら幸いです…。

大変申し訳ないです。

256:デフォルトの名無しさん
08/10/13 17:26:45
>>253
>>254
ありがとうございます。

どうやら自分が勘違いしてたようで根は二次方程式の解そのものみたいです。
少し自分でも書きなおしてみましたが教科書には
a=0の場合は1次方程式,b=0かどうかをチェックする必要がある。
二次方程式は判別式の符号をチェックする必要があるとかいてありそれがよくわかりません。
よろしくおねがいします。

#include <stdio.h>
#include <math.h>
void main () {
double a, b, c, d;
printf("3つの数字を入力してください");
scanf("%lf %lf %lf", &a ,&b ,&c);
d = sqrt(b*b-4*a*c);
printf("二次方程式の根は%lf,%lf\n",-b+d/2*a,-b+d/2*a);
}



257:デフォルトの名無しさん
08/10/13 17:38:24
>>256
判別式が負だったらどうすればいいの
解なしと表示するのか虚数まで表示するのか


258:デフォルトの名無しさん
08/10/13 17:59:25
>>257
虚数表示でいいと思います。

259:デフォルトの名無しさん
08/10/13 19:37:42
>>235>>255
URLリンク(kansai2channeler.hp.infoseek.co.jp)
main()はあまりいじってない。もっとクールな比較関数を誰か頼む。

260:デフォルトの名無しさん
08/10/13 19:49:40
それなんてstrcasecmp

261:デフォルトの名無しさん
08/10/13 19:51:29
こうするだけでよくね?

#include<stdio.h>
#include<string.h>
#define WORD_NUM_MAX 1000
#define WORD_LEN_MAX 64
int main(void){
char word[WORD_NUM_MAX][WORD_LEN_MAX+1+1], tmp[WORD_LEN_MAX+1], *p;
char filename[256];
int i, j, word_num;
int icmp;
FILE *fp;
printf("Input filename : ");
scanf("%255[^\n]", filename);
if((fp=fopen(filename, "r"))==NULL) return 1;
for(word_num=0;word_num<WORD_NUM_MAX;word_num++){
if(fgets(word[word_num], sizeof(word[0]), fp)==NULL) break;
if((p=strchr(word[word_num], '\n'))!=NULL) *p='\0';
}
fclose(fp);
for(i=0;i<word_num;i++){
for(j=0;j+1<word_num-i;j++){
if((icmp = stricmp(word[j], word[j+1])) == 0 && strcmp(word[j], word[j+1])>0 || icmp >0){
strcpy(tmp, word[j]); strcpy(word[j], word[j+1]); strcpy(word[j+1], tmp);
}
}
}
for(i=0;i<word_num;i++) puts(word[i]);
return 0;
}

262:259
08/10/13 20:19:53
>>260>>261
strcasecmp()もstricmp()も
A<a<B<b<C<c<D<d<・・・・・・・・・・・・・<X<x<Y<y<Z<zの順にならないと思うのだが。
strcasecmp()は、実際にthe The The the the みたいになってうまくいかなかった。
stricmp()も、比較前に文字列を小文字にするから、同じだろう。

263:デフォルトの名無しさん
08/10/13 20:40:25
小文字で比較して一緒だったら、大文字も考慮して比較すればいいと思ったけど、だめなのかなぁ。

264:259
08/10/13 21:07:41
if ( ((icmp = stricmp(word[j], word[j+1])) == 0 && strcmp(word[j], word[j+1])>0) || icmp >0 )
たしかに、論理的にもこれでいけますね。
stricmp()なかったので、作ってやってみました。

265:デフォルトの名無しさん
08/10/13 21:56:11
>>250

の、すごろくをどなたかお願いします。

266:デフォルトの名無しさん
08/10/13 21:57:22
>>261
The book // 1番目
the apple // 3番目
tHe earth // 2番目

これを並べ替えると

the apple // 3番目
The book // 1番目
tHe earth // 2番目

こうなったよ

267:デフォルトの名無しさん
08/10/13 22:17:21
>>258#include <stdio.h>
#include <math.h>
int main() {
  double a, b, c, d, x;
  printf("a^2 * x + b * x + c = 0となるa, b, cを入力してください\n");
  scanf("%lf %lf %lf", &a ,&b, &c);
  if (a == 0) {
    puts("2次方程式ではありません");
    return 1;
  }
  b /= a;
  if (c == 0) {
    printf("x = %g, 0\n", -b);
  } else {
    c /= a;
    b /= 2; /* x^2 + 2b'x + c = 0の形へ */
    d = b * b - c; /* 判別式 */
    if (d > 0) {
      if (b > 0) {
        x = -b - sqrt(d);
      } else {
        x = -b + sqrt(d);
      }
      printf("x = %g, %g\n", x, c / x);
    } else if (d < 0) {
      printf("x = %g ± %gi\n", -b, sqrt(-d));
    } else {
      printf("x = %g\n", -b);
    }
  }
  return 0;
}

268:デフォルトの名無しさん
08/10/13 22:18:01
C言語による最新アルゴリズム事典には、解の公式をそのまま使うと、
|b| ≒ √(b^2 - 4ac)のとき桁落ちを起こすから、桁落ちしないほうだけ公式で求めて、
残りは解と係数の関係(解α, βとしてαβ = c / a)で求めろって書いてあるからそうした。

269:259
08/10/13 22:56:37
>>266 のおっしゃる通りでした。
一瞬、そのテストケースもあったのか、と思ったが、
>>[2] 問題文(含コード&リンク):任意の長さの文字列(英字のみ)データ(>>235)
だから、スペースが入る文字列はテストケースとしては、条件外になる。
しかし、指摘通り今回の問題では、>>261では、スペースをのぞいてひとつの文字列に見せかけて食わせたとき、大文字優先の原則に従っていなくなりますね。

私は、単語だけと思っていたけど、英字だけの文字列だったのね。
これ以上出ると荒れそうなので、私が出るのは止めておくが、誰か>>259よりクールな比較関数頼む。

270:デフォルトの名無しさん
08/10/13 23:12:12
>>250
>>265

ほい、
URLリンク(kansai2channeler.hp.infoseek.co.jp)

でも、VB2008じゃないんで…
VC6なんて、iostreamとかの .h とかは自分の環境に合わせてくれ
それと、ゴール出来ない双六が出来る可能性もあると言えばある

271:デフォルトの名無しさん
08/10/13 23:44:10
てか、strcmpだけで正しく辞書順になるんじゃね?頭こんがらがってきた\(^o^)/

272:デフォルトの名無しさん
08/10/13 23:55:22
>>271
いやasciiコードだとして英字が
A-Zがならんでその次にa-zになるじゃん

273:デフォルトの名無しさん
08/10/14 00:22:14
でも、strcmpの戻り値は辞書式で比較した値でしょ??
URLリンク(msdn.microsoft.com)(VS.80).aspx
難しく考えなくていいんじゃない??

274:デフォルトの名無しさん
08/10/14 00:47:53
Order by case insensitive dictionary order,dictionary order.

Are you OK?

275:デフォルトの名無しさん
08/10/14 00:58:30
>>235
>>238 にこれを追加して strcmp を mystrcmp に変更すれば希望通りになる筈
int mystrcmp(const unsigned char *a, const unsigned char *b){
static int table[256], is_table_initialized=0;
int i;

if(!is_table_initialized){
for(i=0;i<256;i++) table[i]=i*2;
for(i=0;i<26;i++) table['a'+i]=table['A'+i]+1;
is_table_initialized=1;
}
for(;*a!='\0';a++,b++) if(*a!=*b) break;
return table[*a]-table[*b];
}

276:デフォルトの名無しさん
08/10/14 02:04:40
>>273
「辞書式順序」 (dictionary order)というのは英和辞典なんかの並び順のことじゃないぞ。
きちんとした定義を持った数学用語。
URLリンク(ja.wikipedia.org)
1文字目が同じなら2文字目の大小で比較し、
2文字目も同じなら3文字目の大小で比較し、……という順序付けのこと。
>>275なんかももちろん辞書式順序。

strcmpは各文字の大小比較を単純に文字コードの値で比較しており、
それだと>>273の言うとおりなので、>>255の要求には沿わないわけ。

277:デフォルトの名無しさん
08/10/14 13:19:06
どなたか>>162の問題をお願いできないでしょうか?

278:デフォルトの名無しさん
08/10/14 13:23:04
>>277
このスレを「すごろく」で検索

279:デフォルトの名無しさん
08/10/14 15:00:10
[1] 授業単元:プログラミング言語
[2] 問題文:直角三角形の直行する2辺の長さ、a、bともに正の整数(n≧0)が与えられた時、斜辺の長さcをプリントするプログラムを書き、数例に対して実行せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2008年10月15日まで
[5] その他の制限:floatを使えと指示されました。


習い始めたばかりでまったくと言っていいほどわかりません。呆れるほど簡単な問題かもしれませんが、よろしくお願いします!

280:デフォルトの名無しさん
08/10/14 15:08:38
>>279
俺にも出来そうな問題がきた
#include <stdio.h>
#include <math.h>

int main(void)
{
int a, b;
float c;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
c = (float)sqrt(a * a + b * b);
printf("\n答え %f\n", c);
return 0;
}
>数例に対して実行せよ。
の意味がわからないので入力値で計算させた

281:デフォルトの名無しさん
08/10/14 15:22:09
>>280
ありがとうございます!

もう一つお聞きしてもよろしいですか?
書いていただいたプログラムをこのままコピーしてコンパイルして実行したら未定義のシンボルsqrtとか重大なエラーとか出てきてしまったんですが、
この場合はどうすればよろしいのでしょうか?

282:デフォルトの名無しさん
08/10/14 15:23:58
>>281
gcc -lm hoge.c
かな

283:デフォルトの名無しさん
08/10/14 15:29:34
>>282
できました!!本当にありがとうございます!!!
こんな見ず知らずの勉強不足クソ野郎にもかかわらず、ご親切に教えていただきまして大変感謝しております。

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

284:デフォルトの名無しさん
08/10/14 15:39:34
sqrtくらい実装した方がいい

285:デフォルトの名無しさん
08/10/14 15:47:42
たとえばroot(n,c) cのn乗根の作り方

x=n√cとおくとx^n=cとなる。f(x)=x^n-cという関数の根を求めればいい
一般に、f(x)の根はニュートン法で計算できる。

点aでfに接する直線の方程式は、y = f'(a)(x-a) + f(a)
これがy=0としてxについてとくと、x = a + f(a)/f'(a)
この値を新たにaとしておいて、同様の操作をすると収束すれば解が求まる。

286:デフォルトの名無しさん
08/10/14 15:56:34
コンパイルは通してないがおおかたこんな通りだろう

float pow(int n, float c){
int k; float a=1;
for( k=0; k<n; k++)a*=c;
return a; }

float root(int n, float c){
int k; float a=c;
for( k=0; k<50; k++) a += (pow(n,a)-c)/(n*pow(n-1,a));
return a; }

287:デフォルトの名無しさん
08/10/14 16:03:24
#include <stdio.h>

float pow(int n, float c){
int k; float a=1;
for( k=0; k<n; k++)a*=c;
return a; }

float root(int n, float c){
int k; float a=c;
for( k=0; k<50; k++) a -= (pow(n,a)-c)/(n*pow(n-1,a));
return a; }

float sqr(float c){ return root(2,c); }



int main(){
printf("√2 =%f\n",sqr(2));
printf("√3 =%f\n",sqr(3));
}

288:デフォルトの名無しさん
08/10/14 16:06:45
微分、積分して関数で返すライブラリってある?

289:デフォルトの名無しさん
08/10/14 16:44:57
こっちの方が速い
#include <stdio.h>

#define GOSA 0.00001
double pow(int n, double c){
int k; double a=1;
for( k=0; k<n; k++) a*=c;
return a; }


float root(int n, float c){
double x=c,y,z;
while(1){
y=pow(n-1,x); z=x*y;
if(z>c-GOSA && z<c+GOSA)break;
x -= (z-c)/(n*y);
printf("root( %d , %.1f )の計算経過 %f\n",n,c,x);
}
return x; }

float sqr(float c){ return root(2,c); }



int main(){
printf("√2 =%f\n\n",sqr(2));
printf("√3 =%f\n\n",sqr(3));
}

290:デフォルトの名無しさん
08/10/14 16:52:47
これでいいか

#define GOSA 0.00001
float sqr(float c){
double x=c,y;
while(1){
y=x*x;
if(y>c-GOSA)if(y<c+GOSA)break;
x -= (y-c)/(2*x);
printf("sqr( %.1f )の計算経過 %f\n",c,x);
}
return x; }

291:デフォルトの名無しさん
08/10/14 17:04:40
みなさまに質問があります。若干スレチになるかもしれんが、一つ力を貸してくれないだろうか…


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