C/C++の宿題を片付け ..
[2ch|▼Menu]
528:デフォルトの名無しさん
07/11/14 23:32:29
>>474 課題1-4
合格最低人数を引数にして合格最低点を求めるプログラムを作成しなさい。
但し、引数のとりかたは付録を参照すること。

void border(int count)
{
char number[7];
int score;

score = 101;
while (count > 0 && scanf("%s %d", number, &score) == 2)
count--;
printf("%d\n", score);
}

529:デフォルトの名無しさん
07/11/14 23:33:08
>>479
#include <stdio.h>
#include <math.h>

int main()
{
    int n;

    printf(" n n*n 1/n sqrt(n) n∧(3/1)\n");
    for (n=1 ; n<=25 ; n++)
    {
        printf("%2d ",n);
        printf("%3d ",n*n);
        printf("%.5f ",(float)1/n);
        printf("%.5f ",sqrt((float)n));
        printf("%.5f ",powf((float)n, (float)1/3));
        printf("\n");
    }

    return 0;
}


530:デフォルトの名無しさん
07/11/15 00:31:07
>>474 課題1-1
99999 以下の整数の引数をとり、受験番号を C00001 から順に C00002 のように引数の数だけ発生させ、
さらに各受験番号に対して乱数で発生させた点数を組み合わせたテストファイルを作るプログラムを作りなさい。
但し、点数は、 0 点から 5 点までを乱数で 20 回発生させ和を取ることで求めなさい。
引数のとりかた、乱数の発生の仕方は付録を参照のこと。

void list(int count)
{
int number, score, i;

for (number = 1; number <= count; number++) {
score = 0;
for (i = 0; i < 20; i++)
score += myrand();
printf("C%05d %d\n", number, score);
}
}

531:デフォルトの名無しさん
07/11/15 01:24:00
>>479
当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。
C++ の書式設定を駆使しています。3 項演算子をネストさせています。
ので、宿題の答えとしては難ありですが、細かいところまで題意を満たす
ためには致し方なかったのでした。すみません。
詳しめの参考書を見てください。

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


532:デフォルトの名無しさん
07/11/15 01:36:26
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

unsigned long long 型の x, y に対して
x^2 を y で割った余り計算しなさい。
ただし x^2 がオーバーフローする
可能性があることに注意すること。

[3] 環境
 [3.1] OS: Windows (Cygwin)
 [3.2] コンパイラ名とバージョン: gcc 4.0
 [3.3] 言語: どちらでも可
[4] 期限: 16日まで
[5] その他の制限: 特にありません

おねがいします

533:デフォルトの名無しさん
07/11/15 01:57:19
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
 URLリンク(kansai2channeler.hp.infoseek.co.jp)
 URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 4.0
 [3.3] 言語: C
[4] 期限: 11/16 pm5:00
[5] その他の制限: 特にありません。

 よろしくお願いします。


534:デフォルトの名無しさん
07/11/15 02:14:51
メイン関数において、2つの放物線
 y=ax2+bx+c
 y=px2+qx+r
の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。
関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし
てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場
合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が
有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数
から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個
存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。


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

535:デフォルトの名無しさん
07/11/15 03:48:36
移項して判別式で判定すりゃいいんだから、>>433のを適当に変えればいいだけだろ。

536:デフォルトの名無しさん
07/11/15 03:54:15
>>534
あの、>>460 に問題がありましたら何がまずいのか教えてください。


537:デフォルトの名無しさん
07/11/15 03:58:19
>>474 課題1-3
点数表を読み込み、点数の高い順に出力するプログラムを作成しなさい。
プログラムにおいて点数表の容量を制限してはいけない。
コンピュータのメモリが許す限り大きな点数表も表示できること。

int compare(const char *a, const char *b)
{
return atoi(b + 7) - atoi(a + 7);
}

void rank(void)
{
int size, count;
char *buffer;

fseek(stdin, 0L, SEEK_END);
size = 10;
count = ftell(stdin) / (size + 1);
buffer = (char *)calloc(count, size);
fseek(stdin, 0L, SEEK_SET);
fread(buffer, size, count, stdin);
qsort(buffer, count, size, compare);
fwrite(buffer, size, count, stdout);
free(buffer);
}

538:デフォルトの名無しさん
07/11/15 07:02:14
>>532
#include <iostream>
using namespace std;
#define N 4294967295 // 2^32 - 1


unsigned int amari(unsigned int x, unsigned int y){
int k=x-y;
if(k<0)k=-k;
if(x>k)x=k;
k=N/x;
int p=x/k,l=x%k;
return ((x*k)%y)*p+((x*l)%y)%y;}

main(){
int x=97,y=123;
cout<<amari(x,y)<<" "<<(x*x)%y;
}

539:538
07/11/15 07:28:16
バグがあったよ

540:デフォルトの名無しさん
07/11/15 07:44:16
あと型が違うんじゃね?

541:デフォルトの名無しさん
07/11/15 10:01:04
>>494
07KC189

542:デフォルトの名無しさん
07/11/15 11:57:29
画像の指定範囲を決めてそこだけを出力するプログラム教えてください。

543:デフォルトの名無しさん
07/11/15 12:21:54
[1] 授業単元: 確率論
[2] 問題文:
ここに書きました。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
図はこうです
URLリンク(toku.xdisc.net)
[3] 環境
 [3.1] OS: LINUX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11月15日24:00
[5] その他の制限:
お願いします。

544:538
07/11/15 13:48:07
#include <iostream>
using namespace std;
typedef unsigned long int Nsu;
Nsu N;

Nsu amari(Nsu x, Nsu y){
int a;
x%=y;
a=x-y;
if(a<0)a=-a; if(x>a)x=a;
a=N/x;
int p=x/a, q=x%a , r=0;
for(int i=0;i<p;i++){r+=(a*x)%y; r%=y;}
r+=(q*x)%y; r%=y;
return r;}

main(){
N=-1;
Nsu x,y;
x=(1<<16)-17;
y=(1<<14)-3;
cout<<amari(x,y)<<" "<<(x*x)%y;
}

545:デフォルトの名無しさん
07/11/15 15:14:41
>>541
存在しない学籍書いてるんじゃねーよ
04kc〜06kcのどれかだろ? 2年〜4年のどれかなんだから

546:デフォルトの名無しさん
07/11/15 16:45:36
>>543
とりあえず「重き」ってなんなんだ?
「重さ」だよな……
それともオレの知らない専門的な言い回しなのか……

547:デフォルトの名無しさん
07/11/15 16:51:37
>>543
>>257 >>258 でダメな理由は?

548:デフォルトの名無しさん
07/11/15 17:04:22
重みじゃないの?

549:デフォルトの名無しさん
07/11/15 17:07:26
>>544
x%y が0の場合にゼロ除算

550:デフォルトの名無し
07/11/15 17:27:31
1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):

文字列を正数に変換せよ。

入力が空の場合は処理を終了。「入力されていません」と表示。
入力の最大入力桁数は4バイトとし、桁あふれに対して「4文字で入力してください」と表示。
入力が半角数字以外に対しては「半角数字以外入力できません」と表示。
入力がゼロの場合は「0は入力できません」と表示。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 4.0
 [3.3] 言語: C言語

[4] 期限: 今週中にお願いします。
[5] その他の制限: 特にありません


551:デフォルトの名無しさん
07/11/15 17:37:23
>>550
突っ込むべき部分があるな
入力の最大入力桁数は四バイト? それとも四文字?
-129のような文字列は129に変換?
129を変換したあとの数字は、1290? それとも0129?

552:デフォルトの名無しさん
07/11/15 18:56:30
>>550
#include<stdio.h>
#include<string.h>
#include<ctype.h>

int get_value(void){
char buf[4+1+1]; // 4文字オーバーチェック + 終端 \0
int i, value=0, buflen;

fgets(buf, sizeof(buf), stdin);
buflen=strlen(buf);

if(buf[buflen-1]=='\n') buf[--buflen]='\0';
if(buflen<=0){ puts("入力されていません"); return -1; }
if(buflen>4){ puts("4文字以内で入力してください"); return -1; }
for(i=0;buf[i];i++){
if(!isdigit(buf[i])){ puts("半角数字以外入力できません"); return -1; }
value=value*10+buf[i]-'0';
}
if(value==0) puts("0は入力できません");

return value;
}

int main(void){
int value;

value=get_value();
if(value>0) printf("\n%d\n", value);

return 0;
}

553:デフォルトの名無しさん
07/11/15 19:41:05
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
   サンプルプログラムは、窓口が1個で,行列が窓口の前にできる場合に,時間と共に窓口の前にできる行列の様子を調べるものである.
(1)サンプルプログラム内の乱数処理を   srand関数とrand関数を使用するように書き換えなさい。
(2)参考プログラムを元に,パラメータs, q, aを構造体のメンバ   として扱うプログラムBに変更しなさい.
(3)作成したプログラムを変更し,窓口が2個の場合にも(すなわち1個または2個の場合に)対応できるようにしなさい。
このとき,窓口の個数(1または2)もパラメータLやM,  シミュレーション時間と同様に入力して指定できるようにしなさい.
なお,新しく到着した客は,最も短い行列(待っている人が少ない窓口)に並ぶものとする.  
全ての窓口の行列が同じ長さの場合には,一様な確率  (窓口が2個の場合は1/2の確率)で並ぶ窓口を決定するものとする.
(4)窓口が3個以上にも対応できるようにしなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc32
 [3.3] 言語: C
[4] 期限: 明日までです…
[5] その他の制限: 特に無いと思います

554:デフォルトの名無しさん
07/11/15 20:10:23
>>547

実際はね、重きじゃなくて入力データなんです。
入力データ(配列でいうとdata[50][5])が移動間を動く感じなんですけど
各状態にデータがあって、その入力データを各状態のデータによって
計算して出された値を各移動確率とかけるというわけなんですけど。
で書いてくださったプログラムにおいて、
for(cnt=0;cnt<50;cnt++){それを50回
 for(i=0;i<7;i++)cal_next_gs(list[i]);は7つの状態間で1回の移動につき確率計算
}
ってのはわかるんです。1次元配列として引数として渡せば
できるのかなーと今思いました。
for(cnt=0;cnt<50;cnt++){それを50回
 for(i=0;i<7;i++)cal_next_gs(list[i],data[cnt]);は7つの状態間で1回の移動につき確率計算
}

void cal_next_gs(struct gstate *gs,float data[5])
{
//計算して移動確率を計算
}
でいけそうな感じがします。

555:デフォルトの名無しさん
07/11/15 21:27:17
>>527
ありがとうございました。

556:デフォルトの名無しさん
07/11/15 21:38:48
>>554
何をいいたいのか、いまいち分からないんだが、
どんな入力に対してどんな出力が欲しいの?

電気回路上の電流のシミュレーション?

557:デフォルトの名無しさん
07/11/15 21:58:18
入力に対して隠れマルコフモデル(HMM)を使って確率を出すんですけど、
この例では3状態のHMMと2状態のHMMを使って最終的にendにたどりつくとこの
状態の確率が出力値となるんです。
で1つの移動に対して入力1フレームを正規分布によって評価し確率を出す。
その正規分布をHMMで評価するんです。
そのHMMには平均分散、移動確率とあるんですけど、
平均分散を正規分布で用いて確率をだして、移動確率をかけて
最終的な移動の確率となるんです。

前につくってもらったのが移動確率でのみの計算でした



558:デフォルトの名無しさん
07/11/15 22:01:52
神経衰弱を行うゲームを作成すること。
ただし、カードは52枚全て使用し、絵柄の
区別は無いものとする。

このプログラムをお願いします。(^_^)

559:デフォルトの名無しさん
07/11/15 22:02:55
すみません、どなたか>>489をお願いします。
自分でもあつかましいと承知しているのですが、
どうにも分からないので・・・。
コンパイラ名はVS2005のようです。
よろしくお願いします。

560:デフォルトの名無しさん
07/11/15 22:12:59
557ですけど
頼んだのは移動してくる確率が2つだったらグリッドで計算できたんですけど
3つの場合どうすればいいのかわからなくて。
しかも下のやつも計算しなくてはならなくて。
なので質問させていただきました

561:デフォルトの名無しさん
07/11/15 22:30:13
>>543
>この(startから状態1への移動確率)X(重き)と
>(状態1の状態確率)X(状態1から状態1への移動確率)X(重き)と、(状態11の状態確率)X(状態11
>から状態1への移動確率)X(重き)の和が状態1の状態確率となります。
状態1ってループしてるけど単純にこれでいいの?
(状態1の状態確率)X(状態1から状態1への移動確率)X(状態1から状態1への移動確率)X(重き)
...
とかは考えなくてもよし?

562:デフォルトの名無しさん
07/11/15 22:36:35
>>543
>>246 の問題だと矢印にくっつく数値(状態遷移確率)が固定だったのを
時間(移動回数)によって矢印にくっつく数値(状態遷移確率)を変化させたいと言う事でいい?

563:デフォルトの名無しさん
07/11/15 22:40:42
>>561
考えなくていいです。
>>562
そうです。
実際は入力に対して各HMMの1つの状態の平均分散から
正規分布により出力確率を出してそのHMMから移動確率を出して
確率X移動確率なんですけど
簡単のために、出力確率を重きとしてるわけです。

564:デフォルトの名無しさん
07/11/15 22:43:05
移動確率を出す関数だけ。

enum states { START, FIRST, SECON, THIRD, TENTH, ELEVE, E_N_D };
enum states movProbMap( enum states from, enum states to )
{
return from == START ? (to == FIRST ? 0.5 : to == TENTH ? 0.5 : 0.0) :
from == FIRST ? (to == FIRST ? 0.6 : to == SECON ? 0.3 : to == ELEVE ? 0.1 : 0.0) :
from == SECON ? (to == SECON ? 0.7 : to == THIRD ? 0.3 : 0.0) :
from == THIRD ? (to == THIRD ? 0.8 : to == E_N_D ? 0.2 : 0.0) :
from == TENTH ? (to == TENTH ? 0.6 : to == ELEVE ? 0.4 : 0.0) :
from == ELEVE ? (to == ELEVE ? 0.7 : to == FIRST ? 0.2 : to == E_N_D ? 0.1 : 0.0) :
0.0;
}


565:デフォルトの名無しさん
07/11/15 22:44:10
激しく無意味だな。スマン無視してくれ。


566:デフォルトの名無しさん
07/11/15 22:47:07
>>564
これは一体何でしょう?
実数を返したいんじゃないの???

567:デフォルトの名無しさん
07/11/15 22:55:57
enum states -> double
で。

568:デフォルトの名無しさん
07/11/15 23:10:49
>>543
使い方は data.txt をリダイレクトするだけ
lzh 内のファイル名間違えたけど気にしない
ans478 < data.txt
URLリンク(kansai2channeler.hp.infoseek.co.jp)

569:デフォルトの名無しさん
07/11/15 23:32:51
>>568
ありがたいんですけど
これちょっと使いかたわからなくて。
gcc ans478.cして実行のときになにか入力しないといけないんですか?

570:デフォルトの名無しさん
07/11/15 23:35:27
本来なら
ans478
と打って実行するところを
ans478 < data.txt
のようにしてdata.txtを標準入力にリダイレクト

571:デフォルトの名無しさん
07/11/15 23:36:42
>>489
#include<stdio.h>

int main(void){
int i, num, max=0;

for(i=20071114;i<=20071114+6-1;i++){
scanf("%d", &num);
if(num>max) max=num;
}
printf("%d\n", max);

return 0;
}

572:デフォルトの名無しさん
07/11/15 23:39:49
>>570
できました。。。
さっきできなかったのに。
ありがとうございます。

自分で作りなおしてから
できなかったらこれも試してみます


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4711日前に更新/222 KB
担当:undef