C/C++の宿題を片付けます 96代目
■ このスレッドは過去ログ倉庫に格納されています
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
【前スレ】
C/C++の宿題を片付けます 95代目
http://pc11.2ch.net/test/read.cgi/tech/1187944110/
0669デフォルトの名無しさん
2007/10/03(水) 10:21:53・1バイトは通常8ビットであり、古くは6ビット、7ビット、9ビットの物が存在した。
・よって「常に8ビット」を表すために情報通信分野ではオクテットという用語がある。
その機械で1バイトが8ビット以外と定められているのなら、バイト以外ありえないが。
まさかオクテットだなどと言うまい?
0670デフォルトの名無しさん
2007/10/03(水) 10:22:24負け犬の遠吠え乙w 正確な説明も出来ないくせに他人をバカ呼ばわりしてんじゃねーよ
0671デフォルトの名無しさん
2007/10/03(水) 10:23:54問題はそこじゃない。>>650が無知だったという証拠は?
詳しくと突っ込まれて答えたのがそうでない環境があるってことだけだろ?
そんなの知ってんだよ、こっちは情報関係の分野を専攻してたからねぇ。
具体的に答えたのはむしろボケた俺の方だろ?w
0672デフォルトの名無しさん
2007/10/03(水) 10:26:12やめてくれるんだろう。
何回このパターン見たことか。
0673デフォルトの名無しさん
2007/10/03(水) 10:27:56>>655のバカが突っ込んだつもりで不勉強を晒しただけだな。
他人をバカ呼ばわりする前に自分の知ったかな不十分な知識で偉そうにしていて
相手を勝手に無知、不勉強にするな。調べもしない奴こそいい加減。
悪いがこっちは調べたんじゃなくて知ってたが、敢えて誰もが見られる文献に
リンクをしただけ。普通は自分で調べるだろ、調べる奴は。
0674デフォルトの名無しさん
2007/10/03(水) 10:36:35相変わらず恐ろしいほどの瞬発力だ
0675デフォルトの名無しさん
2007/10/03(水) 10:45:04まあ、わかりやすいから見かけたら即あぼーんで対処するしかないな。
馬鹿は馬鹿である引け目があるが故に馬鹿と指摘されると馬鹿のように怒り始めるから
あまり馬鹿にしてやらないほうが良い。馬鹿にも馬鹿なりの自尊心というやつがあるの
だろう。本当に馬鹿ではなく自分に絶対の自信があるのなら、馬鹿にされても聞き流せ
るはずだから、本来はとても馬鹿馬鹿しい事だが。まあ、わざわざ相手して馬鹿をみる
こともない。
0676デフォルトの名無しさん
2007/10/03(水) 10:46:320677デフォルトの名無しさん
2007/10/03(水) 10:50:16相変わらずだなここも
0678デフォルトの名無しさん
2007/10/03(水) 13:28:34あぼーんするのが面倒だ
0679デフォルトの名無しさん
2007/10/03(水) 15:18:030680デフォルトの名無しさん
2007/10/03(水) 15:36:19長くても一日放置すれば飽きるみたいだし
0681デフォルトの名無しさん
2007/10/03(水) 23:37:15[2] 問題文(含コード&リンク):
「年(西暦)」「月」を入力したら,その月のカレンダーを表示するプログラムを作成しなさい。ただし,下記の条件を満たすものとする。
【条件】
(1)カレンダークラスを作成し,main関数でカレンダークラスの実体を生成し,カレンダークラス内のメンバ関数(show関数)を呼び出してカレンダーを表示する。
(2)カレンダークラスはカプセル化されていること。
(3)カレンダー表示には,年,月および曜日,日を表示すること。
(4)「閏年」「祝日」「六曜」「節句」「二十四節気」の表記を可能にする。
(5)上記以外については自由に作成してよい。
[3] 環境
[3.1] OS: Windows VISTA or XP
[3.2] visual studio 2005
[3.3] 言語: C++
[4] 期限: 2007/10/5まで。
[5] その他の制限: 特になし
よろしくお願いします。
0682デフォルトの名無しさん
2007/10/03(水) 23:43:05「六曜」の計算式plz
0683デフォルトの名無しさん
2007/10/04(木) 00:06:49(月+日)÷6=?…あまり
大安 0
赤口 1
先勝 2
友引 3
先負 4
仏滅 5
例:
十五夜(8月15日) : 8+15=23, 23÷6=3あまり5→仏滅
十三夜(9月13日) : 9+13=22, 22÷6=3あまり4→先負
七夕(7月7日): 7+7=14, 14÷6=2あまり2→先勝
0684デフォルトの名無しさん
2007/10/04(木) 00:11:44六曜は月の暦(太陰暦)だから太陽暦での月の途中でリセットされるよ
0685デフォルトの名無しさん
2007/10/04(木) 00:25:37そんな単純な計算式で出るなんて初めて知った・・・
0686デフォルトの名無しさん
2007/10/04(木) 00:36:500687デフォルトの名無しさん
2007/10/04(木) 00:44:540688デフォルトの名無しさん
2007/10/04(木) 00:51:38海上保安庁の
http://www1.kaiho.mlit.go.jp/KOHO/syoshi/pr_eph.htm
に計算式があるようだが 解読できないです。
0689デフォルトの名無しさん
2007/10/04(木) 02:50:41[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5013.txt
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10月5日6:00まで
[5] その他の制限: ありません
大変お手数ですが、よろしくお願いいたします
0690デフォルトの名無しさん
2007/10/04(木) 03:55:44問題2の1つ目のループの計測
2つ目以降は計測してるループのとことかnの値とかそこらへんを書きかえればok
#include <stdio.h>
#include <sys/time.h>
int main(void)
{
int i, j, n, sum;
hrtime_t start, finish;
printf("1.\n");
printf("+----+---------+---------+---------+---------+---------+\n");
printf("| n | 2000000| 4000000| 6000000| 8000000| 10000000|\n");
printf("+----+---------+---------+---------+---------+---------+\n");
printf("|time|");
for(n=2000000; n<=10000000; n+=2000000) {
start = gethrtime(); /* 計測開始 */
sum = 0;
for(i=0; i<n; i++) sum++;
finish = gethrtime(); /* 計測終了 */
printf("%9f|", (double)(finish-start) / NANSEC);
}
printf("\n+----+---------+---------+---------+---------+---------+\n");
return 0;
}
0691デフォルトの名無しさん
2007/10/04(木) 04:02:44関数名が情けないことになってるので、書きなおしておいて
#include<stdio.h>
int kaijo(int n){
if(n<=1) return 1;
return n*kaijo(n-1);
}
double touhikyusu(double a0, double x, int n){
if(n<=0) return a0;
return touhikyusu(a0*x, x, n-1);
}
int fibonacchi(int n){
if(n<=1) return 1;
return fibonacchi(n-1)+fibonacchi(n-2);
}
double honer(double x, double keisu[], int keisu_num){
if(keisu_num<=0) return 0.0;
return honer(x, keisu, keisu_num-1)*x+keisu[keisu_num-1];
}
int main(void){
double sum;
printf("%d\n", kaijo(10));
for(i=0,sum=0.0;i<10;i++) sum+=touhikyusu(1.0, 2.0, i));
printf("%f\n", sum);
printf("%d\n", fibonacchi(10));
printf("%f\n", honer(2.0, (double [5]){1.0, 2.0, 3.0, 4.0, 5.0}, 5));
return 0;
}
0692デフォルトの名無しさん
2007/10/04(木) 04:34:390693デフォルトの名無しさん
2007/10/04(木) 09:51:290694デフォルトの名無しさん
2007/10/04(木) 10:17:28if(n<=0) return a0;
return touhikyusu(a0, r, n-1)*r+a0;
}
0695デフォルトの名無しさん
2007/10/04(木) 11:27:50なにそれ?
0696デフォルトの名無しさん
2007/10/04(木) 12:37:01double function(double a, double r, int n){
return n==1 ? a : a*pow(r,n-1) + function(a, r, n-1);
}
0697デフォルトの名無しさん
2007/10/04(木) 12:48:16普通初項というとa1じゃないか?
それ以外は良いと思うが
0698 ◆JdKMFRogo6
2007/10/04(木) 15:10:08[2] 問題文(含コード&リンク):
処理の前後で clock() の値を保存しておき、その差をとり、プログラムの実行時間を求めよ。
[3] 環境
[3.1] OS: Windows XP
[3.2] VC
[3.3] 言語: C++
[4] 期限: 2007/10/7まで。
[5] その他の制限:
include<time.h>を用いる。
int t1, t2, t0;
t1 =?
処理
t2 =?
t0 = t2 - t1;
結果表示
制限というかイメージ的には、こんな感じかなぁとは思うのですが式がわかりませんでした。
大変お手数ですが、よろしくお願いいたします
0699デフォルトの名無しさん
2007/10/04(木) 15:43:28処理の内容は何でもいいの?
0700デフォルトの名無しさん
2007/10/04(木) 17:42:53[2] 問題文(含コード&リンク):
ディレクトリの中身のファイル20個をランダムに取り出して違うディレクトリに5個にコピーしろ。
[3] 環境
[3.1] OS: LINUX
[3.2] VC
[3.3] 言語: C++
[4] 期限: 2007/10/7まで。
[5] その他の制限:
今ホームディレクトリにいて
そこにdataというディレクトリがありも、またdata2というディレクトリがあるとします。
dataというディレクトリに1.dat〜20.datのファイルがあるとします。
そのディレクトリのファイルをランダムに5個取り出して、data2にいれてください。
data/〜.datのファイルの数20の番号からランダムに番号を選んでそのファイルを
〜とするべきなのかな?
0701デフォルトの名無しさん
2007/10/04(木) 18:11:54LinuxなのにVC?
0702デフォルトの名無しさん
2007/10/04(木) 18:14:19上のを。
0703デフォルトの名無しさん
2007/10/04(木) 18:20:100704デフォルトの名無しさん
2007/10/04(木) 18:36:04きちんと環境を書かないと解答なんてできないよ。
0705デフォルトの名無しさん
2007/10/04(木) 18:52:58681です
六用の部分は省いても良いです。
0706デフォルトの名無しさん
2007/10/04(木) 19:09:39例えば目の不自由な人を「めくら」と言う等、本人の人格に関わりの無い身体的特徴をあげつらって侮辱するのは差別ではないか、って事らしい。
チビとかデブも駄目らしい。
ハゲは「髪の不自由な人」、チビは「身長の不自由な人」、デブは「脂肪燃焼の不自由な人」って言うそうな。
0707デフォルトの名無しさん
2007/10/04(木) 19:41:06[2] 問題文(含コード&リンク):
ディレクトリの中身のファイル20個をランダムに
取り出して違うディレクトリに5個にコピーしなさい。
[3] 環境
[3.1] OS: LINUX
[3.2] (gcc )
[3.3] 言語: C
[4] 期限: 10月5日の朝までにできてればいいです。
[5] その他の制限:
今ホームディレクトリにいて
そこにdataというディレクトリがありも、またdata2というディレクトリがあるとします。
dataというディレクトリに1.dat〜20.datのファイルがあるとします。
そのディレクトリのファイルをランダムに5個取り出して、data2にいれてください。
data/〜.datのファイルの数20の番号からランダムに番号を選んでそのファイルを
〜とするべきなのかな?
0708デフォルトの名無しさん
2007/10/04(木) 22:48:21[2] 問題文(含コード&リンク):
α=1/1+10^(pKa-pH)。pKaとpHを引数として
αを求める関数を書け。
[3] 環境
[3.1] OS: windowsXP
[3.3] 言語:C
[4] 期限:来週月曜日まで。
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ありません。
累乗計算がうまくいきません。
よろしくおねがいします。
0709デフォルトの名無しさん
2007/10/04(木) 22:52:320710デフォルトの名無しさん
2007/10/04(木) 23:01:38#include <math.h>
int main(void)
{
double pka,ph,a;
printf("Enter pKa.\n");
printf("pka="); scanf("%f",&pka);
printf("\nEnter pH.\n");
printf("pH="); scanf("%f",&ph);
a=pow(10,pka-ph);
printf("degree of disassociation=%f\n",1/(1+a));
return 0;
}
こんな感じでやってみたのですが・・・。
powは小数の累乗でもできますか?
0711デフォルトの名無しさん
2007/10/04(木) 23:03:05powは
double pow(double,double)
だから小数を使う。この意味は習ってないのかな
0712デフォルトの名無しさん
2007/10/04(木) 23:05:290713デフォルトの名無しさん
2007/10/04(木) 23:08:10double f(double pKa, double pH) { return 1 / ( 1 + pow(10, pKa - pH)); }
0714デフォルトの名無しさん
2007/10/04(木) 23:10:09%fの方がもともと正式
0715デフォルトの名無しさん
2007/10/04(木) 23:23:00#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char filelist[20][FILENAME_MAX], *work[20], *temp;
char cmd[FILENAME_MAX*2+10];
int i, index;
for(i=0;i<20;i++){
sprintf(filelist[i], "data/%d.dat", i+1);
work[i]=filelist[i];
}
for(i=1;i<20;i++){
index=rand()%(i+1);
temp=work[i];
work[i]=work[index];
work[index]=temp;
}
for(i=0;i<5;i++){
sprintf(cmd, "cp -p %s data2/", work[i]);
system(cmd);
}
return 0;
}
0716デフォルトの名無しさん
2007/10/04(木) 23:33:390717デフォルトの名無しさん
2007/10/04(木) 23:45:21こういうこと?
for(i=0;i<5;i++){
index=(rand()%(20-i))+i;
temp=work[i];
work[i]=work[index];
work[index]=temp;
}
0718デフォルトの名無しさん
2007/10/04(木) 23:53:39index = rand() % (20 - i);
sprintf(cmd, "cp -p %s data2/", work[index]);
system(cmd);
work[index] = work[19-i];
}
0719デフォルトの名無しさん
2007/10/05(金) 00:12:37[2] 問題文(含コード&リンク):
#include <stdio.h>
int main(void)
{
int no = 1;
int sum = 0;
do{
sum = sum + no;
no = no + 1;
}while (no <= 5);
printf("1から5までを足した値は%dです。\n", sum);
return (0);
}
問題 上のプログラムに対し、変数noとsumの値がどのように変わっていくのか
が、わかるように、その過程が出力されるようにプログラムを変更する。
ヒント)ループ処理の中で変数noとsumの出力処理を行う
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限:10月5日午前1時30分まで
0720デフォルトの名無しさん
2007/10/05(金) 00:41:27sum = sum + no;
no = no + 1;
printf("no:[%d] sum:[%d]\n", no, sum); // この行を追加する
}while (no <= 5);
0721デフォルトの名無しさん
2007/10/05(金) 00:49:47>double pka,ph,a;
>printf("pka="); scanf("%f",&pka);
>printf("pH="); scanf("%f",&ph);
本当に上手くいってないのは累乗計算なのかな?
0722デフォルトの名無しさん
2007/10/05(金) 00:51:11no = no + 1;
の前の行に入れた方がよくね?
というかこれforでよくね?
まだ習ってないのか?
0723デフォルトの名無しさん
2007/10/05(金) 01:01:38はじめに表示したら、最終的なnoの値が表示されない。
2か所にprintfとかめんどくせ
こんな理由でそこにしてみた。
ってか、この課題をわざわざ書き込みするってことは授業を全く聞いていないレベルだと思うし
0724 ◆JdKMFRogo6
2007/10/05(金) 01:29:24遅れてすいません。処理の内容は何でもかまいません。
プログラムの時間を計ってみろとの課題なので四則演算でも何でもOKです。
0725デフォルトの名無しさん
2007/10/05(金) 09:38:30[2] 問題文(含コード&リンク):
数当てゲームの作成
ルール1
1〜9の数字を重複しない4桁の数字を使う。
4桁の数字は毎回違う数字となるように工夫すること(rand()とsrand()を適切に
利用)
ルール2
数字と桁位置が一致する場合をHIT。
ルール3
数字は一致するが桁が一致しいない場合をBlow
ルール4
4HIT0BLOWで終了
ルール5
12回以内に見つけなければYOU lostと表示し終了
12回以内に見つけかればYOU winと表示し終了
よろしくお願いいたします。
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (borand 5.5)
[3.3] 言語: (C++)
0726デフォルトの名無しさん
2007/10/05(金) 10:56:112314とか?
HITは4321てことでいいのかな
0727デフォルトの名無しさん
2007/10/05(金) 11:03:020728デフォルトの名無しさん
2007/10/05(金) 11:37:16ぐぐりますた
てっきり12個乱数を発生させて、それぞれ1桁目が1、2桁目が2、……て判定すんのかと思ってた
てか既存のゲームだったんですね
0729デフォルトの名無しさん
2007/10/05(金) 11:52:301レスに縮めたから、適当だけど
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i;
char num[] = "123456789", ans[4], input[5], *result[] = {"win", "lost"};
srand(time(NULL));
for(i=0; i<4; i++) {
int index = rand() % (9-i);
ans[i] = num[index];
num[index] = num[8-i];
}
for(i=0; i<12; i++) {
int j, k, hit = 0, blow = 0;
fgets(input, sizeof input, stdin);
while(getchar()!='\n');
for(j=0; j<4; j++) if(input[j]==ans[j]) hit++;
for(j=0; j<4; j++) {
for(k=0; k<4; k++) if(input[j]==ans[k] && j!=k) blow++;
}
printf("HIT:%d BLOW:%d\n", hit, blow);
if(hit==4) break;
}
printf("You %s!\n", result[i==12]);
return 0;
}
0730デフォルトの名無しさん
2007/10/05(金) 14:09:361レスに抑えようとして失敗した上、効率悪そうな当てる方
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5014.txt
0731デフォルトの名無しさん
2007/10/05(金) 16:23:02#include <math.h>
int main() {
int i, j, k, aim[4], input, hit, blow;
srand((unsigned)time(NULL));
for (i = 0; i < 4; ) {
aim[i] = 1 + rand() % 9;
for (j = 0; j < i; j++)
if (aim[i] == aim[j]) break;
i += i == j ? 1 : 0;
}
for (i = 0; i < 12; i++) {
hit = 0, blow = 0;
do {
printf("%2d:", i + 1);
if (scanf("%d", &input) != 1)
while (getchar() != '\n');
} while(input < 1000 || 9999 < input);
for (j = 0; j < 4; j++)
if (aim[j] == input / (int)pow(10, 3 - j) % 10) hit++;
for (j = 0; j < 4; j++)
for (k = 0; k < 4; k++)
if (j != k && aim[j] == input / (int)pow(10, 3 - k) % 10) blow++;
printf(" %dHIT%dBLOW\n", hit, blow);
if (4 <= hit) break;
}
printf("YOU %s (%d%d%d%d)\n", i < 12 ? "win" : "lost", aim[0], aim[1], aim[2], aim[3]);
}
0732731
2007/10/05(金) 16:26:08intでやってみた、というだけ。作る前に>>129さんのを見てしまったので、
似た感じのつくりになってしまったと思います。
4桁の数字を作る、ってだけでも色々方法がありそうです。
*/
0733デフォルトの名無しさん
2007/10/05(金) 17:26:46[2] 問題文:1,2項の行列とベクトルx[3](成分(1,5,10))の積と表示
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: ([2007年10月6日まで]
[5] その他の制限: for,if,caseなどは習いました。
お願いします。
0734デフォルトの名無しさん
2007/10/05(金) 17:48:441,2項ってなんだ?
0735デフォルトの名無しさん
2007/10/05(金) 18:11:40[2] 問題文:十進数で1000から10000までの値を36進数で示し、コンマ区切りでファイルresult.txtに格納するファイルを作成せよ。
ただし、1桁の数値は、0〜9、A〜Zであらわすものとする。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Wedit Win32 Vertion4.0
[3.3] 言語: C
[4] 期限: ([2007年10月5日 20:00まで]
[5] その他の制限: ポインタや構造体ファイルの入出力は習いました。
よろしくお願いします。
0736デフォルトの名無しさん
2007/10/05(金) 18:37:20#include <stdio.h>
static const char *str = "0123456789abcdefghijklmnopqrstuvwxyz";
int main(void){
FILE *fp = fopen("result.txt", "w");
int n;
char buf[16], *p, *q;
if(!fp)
return 1;
do{
scanf("%d", &n);
}while(n < 1000 || n > 10000);
for(p = buf; n/36 != 0; p++, n /= 36)
*p = str[n%36];
*p = str[n];
for(q = buf; p != q; p--)
fprintf(fp, "%c,", *p);
fprintf(fp, "%c\n", *p);
fclose(fp);
return 0;
}
0737デフォルトの名無しさん
2007/10/05(金) 18:51:38助かりました!
もうひとつ質問してもよろしいでしょうか?
0738デフォルトの名無しさん
2007/10/05(金) 18:55:59それ以外のことなら、こちらに。
"C言語なら俺に聞け(入門篇) Part 19"
http://pc11.2ch.net/test/read.cgi/tech/1190342593/
0739デフォルトの名無しさん
2007/10/05(金) 19:05:56この問題もお願いします。
問題文
下記のように2つの浮動小数点の値と名前の100人分のデータがコンマで区切られてファイルinput.datに入っている。
10.2,Hnako 18.2,Taro …、…、…… }100人分
以下の型の構造体のメンバ、Xおよびnameに上記を代入し、Xの大きいほうから並び替えて表示するプログラムを作成せよ。
typedef struct{
double X;
}B;
typedef struct{
char name[20];
B*b;
}A;
ただし、並び替えて表示する関数は、次のプロトタイプ形式で、すでに作成されいるものとする。
void sortA(A*);
0740デフォルトの名無しさん
2007/10/05(金) 19:39:060741デフォルトの名無しさん
2007/10/05(金) 19:46:18他の偉い人に任せる。
0742デフォルトの名無しさん
2007/10/05(金) 19:47:00のんびりやってたらなんか明らかにタイミング逃しますた
とりあえずせっかく書いたので載せとく。hitとblowの判定が多少簡単なはず。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int num[9] = {0} , cnt , hit = 0 , blow = 0 , r , i;
char input , *result = "Lose...";
srand(time(NULL));
for (i=0; i<4; i++){
r = rand()%(9-i);
if (!num[r]) num[r] = i + 1;
else num[9 - num[r]] = i + 1;
}
for (cnt=0; cnt<12; cnt++,hit=blow=0){
putchar('>');
for (i=0; i<4; i++){
input = (char)getchar() - '1';
if (input < 0 || input >=9) {i--;continue;}
if (num[input] == i + 1) hit++;
else if (num[input]) blow++;
}
while (getchar() != '\n');
printf(" %dHIT , %dBLOW\n" , hit , blow);
if (hit == 4) {result = "Win!"; break;}
}
printf("You %s" , result);
return 0;
}
0743デフォルトの名無しさん
2007/10/05(金) 19:57:24[2] 問題文(含コード&リンク):英単語(英文字で最大15文字)を*が出るまで
読み込み、読み込んだ英単語の文字数を計算して、文字数分布(同一文字数の出現回数)
を表示するプログラム
ただし、文字数を計算するプログラムでは文字列を格納する領域は配列を使用する。
配列の要素を指定するときは、配列と添え字をしようしないで
配列の先頭番地を記憶するポインタ変数を宣言して使用する。
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:10月8日まで
[5] その他の制限:制限は特にないです
よろしくお願いします。
0744デフォルトの名無しさん
2007/10/05(金) 20:36:16Cの勉強がてら書いてみた.
#include <stdio.h>
#include <string.h>
#define itemof(array, index) (*(array+index))
#define MAXSTRLEN 15
#define SCANFORMAT(n) _SCANFORMAT(n)
#define _SCANFORMAT(n) "%"#n"s"
int main(void){
int i, strlentable[MAXSTRLEN];
char str[MAXSTRLEN+1];
for(i=0;i<MAXSTRLEN;i++)
itemof(strlentable, i-1)=0;
while(1){
scanf(SCANFORMAT(MAXSTRLEN), str);
if(strcmp(str,"*")==0)
break;
else{
int _strlen=strlen(str);
itemof(strlentable, _strlen-1)++;
}
}
for(i=0;i<MAXSTRLEN;i++)
printf("count of strlen==%d =%d\n", i, itemof(strlentable, i-1));
}
0745デフォルトの名無しさん
2007/10/05(金) 20:37:02まてよ
もしかして,strlen()はつかっちゃいけないのか?
0746デフォルトの名無しさん
2007/10/05(金) 20:46:19ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5015.c
0747デフォルトの名無しさん
2007/10/05(金) 20:58:08おかげで理解しながら分かりました。
>>745さん
strlen()は使っても大丈夫です。
0748デフォルトの名無しさん
2007/10/05(金) 21:01:36使っても良かったか
ところでバグを見つけた.
最後のprintf()は
> printf("count of strlen==%d =%d\n", i, itemof(strlentable, i-1));
printf("count of strlen==%d =%d\n", i, itemof(strlentable, i));
だ
0749デフォルトの名無しさん
2007/10/05(金) 21:23:08[2] 問題文:3つの引数として渡された要素数を持つdouble型の3次元配列と同等の領域(3次元配列表記でアクセスできるdouble型値の格納領域)を確保し、
その領域の先頭アドレスを返す関数。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Wedit Win32 Vertion4.0
[3.3] 言語: C
[4] 期限: ([2007年10月6日]
[5] その他の制限:特に無し
よろしくお願いします。
0750デフォルトの名無しさん
2007/10/05(金) 21:39:39一応聞くけど,標準のmalloc()関数は使っていいの?
0751デフォルトの名無しさん
2007/10/05(金) 21:56:45大丈夫だと思います。
0752デフォルトの名無しさん
2007/10/05(金) 22:37:58malloc()使えるなら
double * _(int r1, int r2, int r3){ return (0<r1 && 0<r2 && 0<r3) ? (double*)malloc(sizeof(double)*r1*r2*r3) : NULL; }
でいいと思われる.
0753デフォルトの名無しさん
2007/10/05(金) 22:41:51詳しくお願いします。
0754デフォルトの名無しさん
2007/10/05(金) 22:50:140755デフォルトの名無しさん
2007/10/05(金) 22:53:060756デフォルトの名無しさん
2007/10/05(金) 22:58:17助かりました。
0757デフォルトの名無しさん
2007/10/05(金) 23:17:51[1] 授業単元: C言語
[2] 問題文:キューに関する問題。8つのマスに0〜9の数字を入力。-入力で最古のデータ削除。
先頭の数字hpが後から入れた数字tpに追い越されないこと。8つのマスがフル、または空になったら警告。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Cpad for Borland C++ Compiler ver.2.31
[3.3] 言語: C
[4] 期限: ([2007年10月09日]
[5] その他の制限:特に無し
すみませんがもしよろしければ、よろしくお願いします。
0758デフォルトの名無しさん
2007/10/06(土) 00:04:50>先頭の数字hpが後から入れた数字tpに追い越されないこと。
この条件の意味が今ひとつ分からんのだけど。
「追い越されない」って何ぞ?
普通にキューなら良いの?
0759デフォルトの名無しさん
2007/10/06(土) 00:44:26double ***d3_alloc(int x, int y, int z){
double ***ret=NULL, **index=NULL, *data=NULL;
int i;
data=malloc(sizeof(*data)*x*y*z);
index=malloc(sizeof(*index)*y*z);
ret=malloc(sizeof(*ret)*z);
if(data==NULL || index==NULL || ret==NULL){
free(data);
free(index);
free(ret);
return NULL;
}
for(i=0;i<y*z;i++) index[i]=&data[i*x];
for(i=0;i<z;i++) ret[i]=&index[i*y];
return ret;
}
void d3_free(double ***d3){
free(d3[0][0]);
free(d3[0]);
free(d3);
}
0760デフォルトの名無しさん
2007/10/06(土) 01:22:50レス無かったんで単なるキュー
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5018.txt
0761デフォルトの名無しさん
2007/10/06(土) 07:47:36[2] 問題文:2つの3次元ベクトル(a[3],b[3])を作り、その内積を計算/表示する
(ベクトル成分(a[0]etc.)はscanfで読み込むこと)
(内積(a[0]*b[0]+a[1]*b[1]+a[2]*b[2])はfor文で計算)
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: ([2007年10月7日まで]
[5] その他の制限: for,if,caseなどは習いました。
0762デフォルトの名無しさん
2007/10/06(土) 07:57:33int main(void)
{
double a[3], b[3], ip = 0;
int i;
printf("ベクトルaを入力:");
for(i=0; i<3; i++) {
scanf("%lf", a + i);
}
printf("ベクトルbを入力:");
for(i=0; i<3; i++) {
scanf("%lf", b + i);
}
for(i=0; i<3; i++) ip += a[i] * b[i];
printf("ベクトルaとベクトルbの内積は%f\n", ip);
return 0;
}
0763デフォルトの名無しさん
2007/10/06(土) 08:48:21ipってなんですか?
0764デフォルトの名無しさん
2007/10/06(土) 08:50:52自分で内積求めろって言っといてそれはないだろ
0765デフォルトの名無しさん
2007/10/06(土) 09:36:42本当に知らないんです。習ってませんし、教科書にも載ってませんでした。
でも課題で出たんです。
ipを別の文字に置き換えてはできないんですか?
家でプログラミングできないので確かめられません。
すみません。
エディタの体験版とってもできないんです
0766デフォルトの名無しさん
2007/10/06(土) 09:53:540767デフォルトの名無しさん
2007/10/06(土) 10:04:020768デフォルトの名無しさん
2007/10/06(土) 10:07:21結論だけ言えば、他の文字でも良い。
ipは「変数」または「オート変数」と呼ぶ。
まずは、「変数、C言語」あたりをキーワードにして、
検索かけてみると良いんじゃないかな?
■ このスレッドは過去ログ倉庫に格納されています