トップページ⇒tech
1001コメント425KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?2BP(12)
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

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

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

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
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/
0693デフォルトの名無しさん2007/10/04(木) 09:51:29
関数名touhikyusuなのに、等比級数を返さないってのはどうよ?
0694デフォルトの名無しさん2007/10/04(木) 10:17:28
double touhikyusu(double a0, double r, int n){
if(n<=0) return a0;
return touhikyusu(a0, r, n-1)*r+a0;
}
0695デフォルトの名無しさん2007/10/04(木) 11:27:50
>>694
なにそれ?
0696デフォルトの名無しさん2007/10/04(木) 12:37:01
等比級数と等比数列がごっちゃになってた

double 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
>>689
普通初項というとa1じゃないか?
それ以外は良いと思うが
0698 ◆JdKMFRogo6 2007/10/04(木) 15:10:08
[1] 授業単元:C++
[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
>>698
処理の内容は何でもいいの?
0700デフォルトの名無しさん2007/10/04(木) 17:42:53
[1] 授業単元:C++
[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:54
>>700
LinuxなのにVC?
0702デフォルトの名無しさん2007/10/04(木) 18:14:19
そこはコピーしてました。
上のを。
0703デフォルトの名無しさん2007/10/04(木) 18:20:10
ちゃんと書けよハゲ
0704デフォルトの名無しさん2007/10/04(木) 18:36:04
ディレクトリなどの概念はOSに依存するので
きちんと環境を書かないと解答なんてできないよ。
0705デフォルトの名無しさん2007/10/04(木) 18:52:58
>>681
681です
六用の部分は省いても良いです。
0706デフォルトの名無しさん2007/10/04(木) 19:09:39
最近はハゲって言っちゃ駄目だそうだよ。
例えば目の不自由な人を「めくら」と言う等、本人の人格に関わりの無い身体的特徴をあげつらって侮辱するのは差別ではないか、って事らしい。
チビとかデブも駄目らしい。
ハゲは「髪の不自由な人」、チビは「身長の不自由な人」、デブは「脂肪燃焼の不自由な人」って言うそうな。
0707デフォルトの名無しさん2007/10/04(木) 19:41:06
[1] 授業単元:実験
[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
[1] 授業単元: 生物実験
[2] 問題文(含コード&リンク):
α=1/1+10^(pKa-pH)。pKaとpHを引数として
αを求める関数を書け。
[3] 環境
 [3.1] OS: windowsXP
 [3.3] 言語:C
[4] 期限:来週月曜日まで。
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ありません。

累乗計算がうまくいきません。
よろしくおねがいします。
0709デフォルトの名無しさん2007/10/04(木) 22:52:32
pow使えば?
0710デフォルトの名無しさん2007/10/04(木) 23:01:38
#include <stdio.h>
#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:05
>>710
powは
double pow(double,double)
だから小数を使う。この意味は習ってないのかな
0712デフォルトの名無しさん2007/10/04(木) 23:05:29
doubleを%fでprintfしていいんだっけ?
0713デフォルトの名無しさん2007/10/04(木) 23:08:10
関数書けってんだから、mainでやるのは違くね?

double f(double pKa, double pH) { return 1 / ( 1 + pow(10, pKa - pH)); }
0714デフォルトの名無しさん2007/10/04(木) 23:10:09
>>712
%fの方がもともと正式
0715デフォルトの名無しさん2007/10/04(木) 23:23:00
>>707
#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:39
逆からやれば全部並び替えなくてもいいのに
0717デフォルトの名無しさん2007/10/04(木) 23:45:21
>>716
こういうこと?
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:39
for(i=0; i<5; i++) {
index = 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
[1] 授業単元: C言語入門
[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:27
do{
sum = sum + no;
no = no + 1;
printf("no:[%d] sum:[%d]\n", no, sum); // この行を追加する
}while (no <= 5);
0721デフォルトの名無しさん2007/10/05(金) 00:49:47
>>710
>double pka,ph,a;
>printf("pka="); scanf("%f",&pka);
>printf("pH="); scanf("%f",&ph);
本当に上手くいってないのは累乗計算なのかな?
0722デフォルトの名無しさん2007/10/05(金) 00:51:11
>>720
no = no + 1;
の前の行に入れた方がよくね?

というかこれforでよくね?
まだ習ってないのか?
0723デフォルトの名無しさん2007/10/05(金) 01:01:38
初期値が0と1はプログラムからはわかる
はじめに表示したら、最終的なnoの値が表示されない。
2か所にprintfとかめんどくせ
こんな理由でそこにしてみた。

ってか、この課題をわざわざ書き込みするってことは授業を全く聞いていないレベルだと思うし
0724 ◆JdKMFRogo6 2007/10/05(金) 01:29:24
>>699
遅れてすいません。処理の内容は何でもかまいません。
プログラムの時間を計ってみろとの課題なので四則演算でも何でもOKです。
0725デフォルトの名無しさん2007/10/05(金) 09:38:30
[1] 授業単元: C言語
[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:11
数字は一致するが桁位置が一致しないてどういうこと?
2314とか?

HITは4321てことでいいのかな
0727デフォルトの名無しさん2007/10/05(金) 11:03:02
HIT&BLOWでググれ
0728デフォルトの名無しさん2007/10/05(金) 11:37:16
>>727
ぐぐりますた
てっきり12個乱数を発生させて、それぞれ1桁目が1、2桁目が2、……て判定すんのかと思ってた
てか既存のゲームだったんですね
0729デフォルトの名無しさん2007/10/05(金) 11:52:30
>>725
1レスに縮めたから、適当だけど
#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:36
>>729
1レスに抑えようとして失敗した上、効率悪そうな当てる方
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5014.txt
0731デフォルトの名無しさん2007/10/05(金) 16:23:02
#include <stdlib.h>
#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]);
}
07327312007/10/05(金) 16:26:08
/*
intでやってみた、というだけ。作る前に>>129さんのを見てしまったので、
似た感じのつくりになってしまったと思います。
4桁の数字を作る、ってだけでも色々方法がありそうです。
*/
0733デフォルトの名無しさん2007/10/05(金) 17:26:46
[1] 授業単元: プログラミング
[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:44
1,2項の行列で15分くらい悩んでる。
1,2項ってなんだ?
0735デフォルトの名無しさん2007/10/05(金) 18:11:40
[1] 授業単元: プログラミング
[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
>>735
#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:06
>>681 期限切れてしまってますが、お願いします。
0741デフォルトの名無しさん2007/10/05(金) 19:46:18
*bの扱いに激しく困る。
他の偉い人に任せる。
0742デフォルトの名無しさん2007/10/05(金) 19:47:00
なんかみんな>>725やってるのでやってみた、筈が、
のんびりやってたらなんか明らかにタイミング逃しますた
とりあえずせっかく書いたので載せとく。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
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):英単語(英文字で最大15文字)を*が出るまで
読み込み、読み込んだ英単語の文字数を計算して、文字数分布(同一文字数の出現回数)
を表示するプログラム
ただし、文字数を計算するプログラムでは文字列を格納する領域は配列を使用する。
配列の要素を指定するときは、配列と添え字をしようしないで
配列の先頭番地を記憶するポインタ変数を宣言して使用する。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:10月8日まで
[5] その他の制限:制限は特にないです

よろしくお願いします。
0744デフォルトの名無しさん2007/10/05(金) 20:36:16
>>743
Cの勉強がてら書いてみた.
#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
>>743
まてよ

もしかして,strlen()はつかっちゃいけないのか?
0746デフォルトの名無しさん2007/10/05(金) 20:46:19
>739
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5015.c
0747デフォルトの名無しさん2007/10/05(金) 20:58:08
>>744さんありがとうございます。
おかげで理解しながら分かりました。

>>745さん
strlen()は使っても大丈夫です。
0748デフォルトの名無しさん2007/10/05(金) 21:01:36
>>747
使っても良かったか

ところでバグを見つけた.
最後の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
[1] 授業単元: プログラミング実習
[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
>>749
一応聞くけど,標準のmalloc()関数は使っていいの?
0751デフォルトの名無しさん2007/10/05(金) 21:56:45
>>750
大丈夫だと思います。
0752デフォルトの名無しさん2007/10/05(金) 22:37:58
>>749
malloc()使えるなら

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:14
詳しくも何も答えだよ
0755デフォルトの名無しさん2007/10/05(金) 22:53:06
>3次元配列表記でアクセスできるdouble型値の格納領域
0756デフォルトの名無しさん2007/10/05(金) 22:58:17
>>754さんありがとうございました。
助かりました。
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
>>757
>先頭の数字hpが後から入れた数字tpに追い越されないこと。
この条件の意味が今ひとつ分からんのだけど。
「追い越されない」って何ぞ?
普通にキューなら良いの?
0759デフォルトの名無しさん2007/10/06(土) 00:44:26
>>749
double ***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
>>757
レス無かったんで単なるキュー

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5018.txt
0761デフォルトの名無しさん2007/10/06(土) 07:47:36
[1] 授業単元: プログラミング
[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:33
#include <stdio.h>

int 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:21
>>762
ipってなんですか?
0764デフォルトの名無しさん2007/10/06(土) 08:50:52
>>763
自分で内積求めろって言っといてそれはないだろ
0765デフォルトの名無しさん2007/10/06(土) 09:36:42
>>764
本当に知らないんです。習ってませんし、教科書にも載ってませんでした。
でも課題で出たんです。
ipを別の文字に置き換えてはできないんですか?
家でプログラミングできないので確かめられません。
すみません。
エディタの体験版とってもできないんです
0766デフォルトの名無しさん2007/10/06(土) 09:53:54
変数名が教科書に載ってるわけねーだろ。
0767デフォルトの名無しさん2007/10/06(土) 10:04:02
習ったところや教科書に載ってる所すらわかってないんだな
0768デフォルトの名無しさん2007/10/06(土) 10:07:21
>>765
結論だけ言えば、他の文字でも良い。
ipは「変数」または「オート変数」と呼ぶ。
まずは、「変数、C言語」あたりをキーワードにして、
検索かけてみると良いんじゃないかな?
0769デフォルトの名無しさん2007/10/06(土) 10:14:23
(内積(a[0]*b[0]+a[1]*b[1]+a[2]*b[2])はfor文で計算) って書いてあるんですが、
ipって必要なんですか?
if,if-else,switch,while,do-while,forしか習ってません。あとint,double,char。
0770デフォルトの名無しさん2007/10/06(土) 10:24:48
ちゃんとレス読んでるの?
単純に、習ったことの理解が出来てないだけだから復習しなさい

ipはinner productの略かな、変数名だから別にcでもdでも何でも良い
0771デフォルトの名無しさん2007/10/06(土) 10:42:28
>>768 >>770
やっと理解できました。ありがとうございました。

迷惑かけてすみませんでした
0772デフォルトの名無しさん2007/10/06(土) 10:45:02
誰か>>733の問題のプログラム教えてください
0773デフォルトの名無しさん2007/10/06(土) 11:06:47
>>772
自分についたレスくらい嫁
0774デフォルトの名無しさん2007/10/06(土) 11:12:26
>>772
734 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/05(金) 17:48:44
1,2項の行列で15分くらい悩んでる。
1,2項ってなんだ?
0775デフォルトの名無しさん2007/10/06(土) 23:23:56
整数値を一つ入力し、入力した内容を2進瑞狽ナ表示するプャ鴻Oラムを作れ=B

瑞ウの数は再帰使bヲば簡単に解けb驍セ。
bナも負数が全く演ッそうにない=B
1の補数なら反転するだけだから分かるけど、
普通は2の補数だもんなぁ。

まぁ恐らく先生もそこまで(負数の事)考慮してないんだろうけどさ…。
0776デフォルトの名無しさん2007/10/06(土) 23:34:04
入力した整数値をそのままビットシフトとかで2進数っぽく出力するのはダメなの?
0777デフォルトの名無しさん2007/10/06(土) 23:56:04
ビットシフトって2進数を二倍する時とかに使う論理シフトの事?
いまいちCの仕組み分かってないんだ。
0778デフォルトの名無しさん2007/10/06(土) 23:59:00
そもそも>>775は質問なのか?
0779デフォルトの名無しさん2007/10/07(日) 00:04:14
質問です。書き方悪かったですね…。
一応途中まで書いたものうpしました。
どうしても2の補数が表示出来そうにありません。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5020.txt
0780デフォルトの名無しさん2007/10/07(日) 00:06:34
#include <stdio.h>
int main(void)
{
int i, n;

n = 2 + 8 + 32 + 128 + 512 + 2048;
printf("\n%d = ", n);
for(i=sizeof(int)*4; i>=0; i--) putchar((n >> i) & 1 ? '1' : '0');

n = -1;
printf("\n%d = ", n);
for(i=sizeof(int)*4; i>=0; i--) putchar((n >> i) & 1 ? '1' : '0');

return 0;
}

こんな感じ>ビットシフト
0781デフォルトの名無しさん2007/10/07(日) 00:42:40
[1] 授業単元:
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5021.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 10月8日22:00まで
[5] その他の制限: 特にありません。
0782デフォルトの名無しさん2007/10/07(日) 00:51:54
>>779
書き方が悪いというか、独り言にしか見えなかった。
テンプレをすべて埋めろ!書き漏らすな!とまでは言わないけど、
居酒屋での愚痴じゃないんだからもう少しまともに書いた方がいいよ

#include<stdio.h>
int main(){
unsigned int i;
int n = -1;
for(i=1<<(sizeof(int)*8-1);i>0;i>>=1)printf("%d",!!(n&i));
return 0;
}
ビットシフトと言われて思いついてみたのを書いたけど、>>780の方がスマートで凹む orz
0783デフォルトの名無しさん2007/10/07(日) 01:03:23
>>782
申し訳ない、仰るとおりです。
今後気をつけます。

シフト演算子なんてものがあったんですね。
こんな簡単に書けるとは…。勉強になります。
0784デフォルトの名無しさん2007/10/07(日) 01:13:06
!!(真の値)
が1になることって保障されてます?
0785デフォルトの名無しさん2007/10/07(日) 01:23:45
C言語の場合、!0で1になることは保証されているはず。自信ないけど。
0786デフォルトの名無しさん2007/10/07(日) 01:25:11
自信持て
0787デフォルトの名無しさん2007/10/07(日) 01:28:05
普通に!=0でいいじゃん
0788デフォルトの名無しさん2007/10/07(日) 01:30:56
!!の方が一般的とか思ってた漏れは逝った方がいいですか?
0789デフォルトの名無しさん2007/10/07(日) 01:37:22
!! Σ(・ω・;)
0790デフォルトの名無しさん2007/10/07(日) 01:58:52
>>781

void preorder(NodePointer node){
printf("%c ",node->key);
if(node->left != tail) preorder(node->left);
if(node->right != tail) preorder(node->right);
}

void inorder(NodePointer node){
if(node->left != tail) inorder(node->left);
printf("%c ",node->key);
if(node->right != tail) inorder(node->right);
}

void postorder(NodePointer node){
if(node->left != tail) postorder(node->left);
if(node->right != tail) postorder(node->right);
printf("%c ",node->key);
}
0791デフォルトの名無しさん2007/10/07(日) 08:43:40
プログラミングの演習で、プログラミングの宿題ではないのですが
用語を習ってなくて自分で調べても意味不明なのでよろしくお願いします

DBMSを使用せずに、Web掲示板をプログラミングすることを考える。
記事番号、記事タイトル、投稿日付時刻、投稿者名、投稿内容(全角400文字以内)をひとつのレコードとして保存管理するものとする。

【問題】
�@このレコードをプレーンテキストで保存するとしたとき、そのファイルの書式を設計せよ。
具体的にはレコードセパレータと、フィールドセパレータを何にするかを書き、どうしてそう設計するかを説明せよ。
�A具体的な例を3レコード示せ。
0792デフォルトの名無しさん2007/10/07(日) 08:46:06
>>791
期限は10月8日17:00までです
スミマセン
■ このスレッドは過去ログ倉庫に格納されています