C/C++の宿題を片付けます 121代目at TECH
C/C++の宿題を片付けます 121代目 - 暇つぶし2ch686:デフォルトの名無しさん
09/01/11 22:20:53
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
3] 環境 
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: visualc++2005
 [3.3] 言語:C
[4] 期限:2009年1月12日AM7時
[5] その他の制限:できるだけ簡単な関数でお願いします


687:デフォルトの名無しさん
09/01/11 22:37:01
>>686
もとからバグってるとかないだろ。
原文でよこせ

688:デフォルトの名無しさん
09/01/11 22:40:23
>>686
do{
printf("入力して下さい\n");
scanf("%d",&n);
}while(n<0);

689:デフォルトの名無しさん
09/01/11 22:42:46
>>688
こんなじゃね?
#include<stdio.h>
int main(){
int n;
int flag=2;

do{
printf("入力して下さい\n");
scanf("%d",&n);
if(n<0){
flag--;
}else{
printf("%d\n",2*n);
flag=2;
}
}while(flag);
printf("終了します\n");
return 0;
}


690:585 ◆i9Dvbn/Lf6
09/01/12 00:23:57
お願いします。

[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
二重振り子を微小振動させるとして、厳密な数値解及び解析的な近似解を初期振れ角Θを機動時に指定して、
アニメーション表示させるプログラムを表示しなさい。
グラフィックはgnuplotでもEGGXでもどちらでもよい。
教材の一部を貼っておきます。
URLリンク(up2.viploader.net)
URLリンク(up2.viploader.net)
URLリンク(up2.viploader.net)
zipで専用ロダにもあげておきます
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ([2009年1月22日まで]

691:デフォルトの名無しさん
09/01/12 00:30:43
>>690
数式みると拒否反応が出る
現役の時でも怪しかったというのに今となってはどうにもならんw

692:674
09/01/12 00:41:03
>>675>>676>>677

ありがとうございます。

693:675
09/01/12 00:44:18
>>692
待て!

694:デフォルトの名無しさん
09/01/12 00:51:01
>>693
自分でまいた種だw

695:デフォルトの名無しさん
09/01/12 00:53:07
>>690
ぶっちゃけ式も読めない。
3枚目の1も2も付いてないΦは何の角度?

696:デフォルトの名無しさん
09/01/12 00:59:31
>>695
二枚目の式に対して三枚目の近似を適用した結果だから…
どうなるんだろう
紙に書かないとわからんw

697:sage
09/01/12 00:59:35
[1] 授業単元: c言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語
[4] 期限: 2009年 1月 13日
[5] その他の制限:できるだけ単純なプログラムにてお願いいたします。

後できればアルゴリズムを簡単でよければプログラムの下の方に書いていただけると助かります。
まる投げとはいっても一応自分で理解できなければ意味がないと思うので。

是非よろしくお願いいたします。


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

698:デフォルトの名無しさん
09/01/12 01:01:56
>>686
2回連続で負の数が入力されたら終了ってことでいいんだよな?

#include <stdio.h>

int main(void)
{
int n;
int flag = 0;

do {
printf("入力してください\n");
scanf("%d", &n);
if (n < 0) flag++; else { flag = 0; printf("%d\n", 2 * n); }
} while (flag != 2);
printf("終了します\n");

return 0;
}

699:デフォルトの名無しさん
09/01/12 01:02:02
ほんとに3枚目の式合ってるんかな。
もしくは情報不足か

700:585 ◆i9Dvbn/Lf6
09/01/12 01:16:14
とにかくさっぱりわからないので、少しでもお願いします
これで最後なんです

701:デフォルトの名無しさん
09/01/12 01:33:22
[1] 授業単元: c言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:visualc++2005
 [3.3] 言語: C言語
[4] 期限: 2009年 1月12日 12:00まで
[5] その他の制限:特になし

よろしくお願いします。



702:デフォルトの名無しさん
09/01/12 01:47:26
>>697 1問目 枝狩りしてないので n=100 (190569292 通り) くらいが限界。ついでにすぐに計算結果が long を超える
#include<stdio.h>
#include<stdlib.h>

int min(int a, int b){
if(a<b) return a;
return b;
}

long huga(int n, int maximum){
int i;
long ret=0;

for(i=min(n, maximum);i>0;i--){
if(n-i>0) ret+=huga(n-i, min(i, maximum));
else ret++;
}
return ret;
}

long hoge(int n){
return huga(n, n);
}

int main(int argc, char *argv[]){
int n=4;

if(argc==2) n=atoi(argv[1]);
printf("払い方は %ld 通り (n=%d)\n", hoge(n), n);

return 0;
}

703:デフォルトの名無しさん
09/01/12 02:02:34
>>697 3問目
#include<stdio.h>
#include<stdlib.h>
#define ADJUST(v) (((v)=='1' || (v)=='0')?(v):'X')
int myNOT(int A){
if(A=='1') return '0';
if(A=='0') return '1';
return 'X';
}
int myOR(int A, int B){
if(A=='1' || B=='1') return '1';
if(A=='0' && B=='0') return '0';
return 'X';
}
int myAND(int A, int B){
if(A=='0' || B=='0') return '0';
if(A=='1' && B=='1') return '1';
return 'X';
}
int myRSFF(int S, int R, int Q){
if(S=='0' && R=='0') return ADJUST(Q);
if(S=='1' && R=='0') return '1';
if(S=='0' && R=='1') return '0';
return 'X';
}
int main(void){
char buf[3][10];
scanf("%9s%9s%9s", buf[0], buf[1], buf[2]);
printf("S=%c R=%c Q=%c --> Q'=%c\n", buf[0][0], buf[1][0], buf[2][0], myRSFF(buf[0][0], buf[1][0], buf[2][0]));
return 0;
}

704:703
09/01/12 02:04:19
>>703 は無しで^^;

705:デフォルトの名無しさん
09/01/12 02:13:30
>>695
プログラム無知の数学科出身のおれの意見を書かせてくれ
おそらく二重振り子の原理はφ_1の角度にある玉が原点方向に向かって振れる運動と
φ_2の角度にある玉が原点方向に振れる運動で初期の角度に大きな違いがある
なので一枚目の画像の青い玉の連結が連立微分方程式において重要な役割を得る
が、しかしもしΔφ=φ_1-φ_2=φ≒0ならば、青い玉の部分を考えず(二重振り子にならない)
φ_1≒φ_2になるので考える振り子の運動方程式は直線OQの単振り子のそれに近似できる
φはΔφの限りなく0に近い値のことを指していると思われる

706:デフォルトの名無しさん
09/01/12 02:14:28
今後、宿題に答えてもらうには、一問1,000円の課金にしない?

707:703
09/01/12 02:17:30
>>697 3問目
#include<stdio.h>
#include<stdlib.h>
#define ADJUST(v) (((v)=='1' || (v)=='0')?(v):'X')
int myNOT(int A){
if(A=='1') return '0';
if(A=='0') return '1';
return 'X';
}
int myOR(int A, int B){
if(A=='1' || B=='1') return '1';
if(A=='0' && B=='0') return '0';
return 'X';
}
int myAND(int A, int B){
if(A=='0' || B=='0') return '0';
if(A=='1' && B=='1') return '1';
return 'X';
}
int myNOR(int A, int B){ return myNOT(myOR(A, B)); }
int myNAND(int A, int B){ return myNOT(myAND(A, B)); }
int myXOR(int A, int B){ return myOR(myAND(myNOT(A), B), myAND(A, myNOT(B))); }
int myRSFF(int S, int R, int Q){
return myXOR(myOR(myAND(myNOR(S, R), Q), myAND(myXOR(S, R), S)), myAND(myAND(S, R), 'X'));
}
int main(void){
char buf[3][10];
scanf("%9s%9s%9s", buf[0], buf[1], buf[2]);
printf("S=%c R=%c Q=%c --> Q'=%c\n", buf[0][0], buf[1][0], buf[2][0], myRSFF(buf[0][0], buf[1][0], buf[2][0]));
return 0;
}

708:703
09/01/12 02:31:05
>>707 は S=0 R=X Q=0 --> Q'=0 になっちまうけど
X 出すべきかな?www

709:不完全なソース
09/01/12 03:11:21
>>682
頭に0がつく数字を考慮しない場合

#include <stdio.h>

void main(){

int gakuban;

printf("学籍番号??? ");
scanf("%d",&gakuban);
if(999999<gakuban<10000000)
printf("学籍番号は7桁の数字で入力して下さい\n");
else
printf("e-mailアドレス: g%d@~~~~~~\n",gakuban);
}

で動くが、例を見る限り0が頭につく数を考慮しなきゃダメそうだね

710:デフォルトの名無しさん
09/01/12 04:01:02
>>697 2問目
#include<stdio.h>
#include<math.h>

#define PI (3.1415926535897932384626433832795)
#define DELTA (0.01)

double Calc(double t, double digree){
double radian, x, y, vx0, vy0, v0=138000/3600.0, x0=0.0, y0=1.80, g=9.8;

radian=digree/180*PI;
vx0=v0*cos(radian);
vy0=v0*sin(radian);
x=x0+vx0*t;
y=y0+vy0*t-g*t*t/2;
printf("%e,%e\n", x, y);

return y;
}

int main(void){
double t, digree=0.0, *pdigree;

pdigree=&digree;
scanf("%lf", pdigree);
for(t=0.0;Calc(t, digree)>=0.0;t+=DELTA);

return 0;
}

711:デフォルトの名無しさん
09/01/12 04:40:23
>>701 以下、2問目の解答。main内のwhileの行と不要な関数を消せば1問目になるよ。
#include<stdio.h>
#include<stdlib.h>
typedef struct node_ { int v; struct node_ *l, *r; } node, *pnode;
pnode root = NULL;
void insert_r(pnode *t, pnode n) { if (*t) insert_r(n->v < (*t)->v ? &(*t)->l : &(*t)->r, n); else *t=n; }
void insert(int v) { pnode n = malloc(sizeof(node)); n->v=v; n->l=n->r=NULL; insert_r(&root, n); }
void erase_r(pnode *t, int v) {
if (*t)
if ((*t)->v == v) { pnode l = (*t)->l, r = (*t)->r; free(*t); *t = r; if (l) insert_r(t, l); }
else erase_r(v < (*t)->v ? &(*t)->l : &(*t)->r, v);
}
void erase(int v) { erase_r(&root, v); }
void print_r(pnode n) { if (n) { print_r(n->l); printf(" %d", n->v); print_r(n->r); } }
void print() { printf("data ="); print_r(root); printf("\n"); }
int input_value() { int v=0; printf("数値>"); scanf("%d", &v); return v; }
int menu() {
char s[100]; printf("a=追加、b=削除、c=表示 >"); scanf("%99s", s);
switch(s[0]) {
case 'a': insert(input_value()); break;
case 'b': erase(input_value()); break;
case 'c': print(); return 0;
}
return 1;
}
int main() {
int i; for (i = 0; i < 20; i ++) insert(rand()%101); print();
while (root && menu());
return 0;
}

712:デフォルトの名無しさん
09/01/12 06:01:16
>>711
不要な関数とはどれのことですか?

713:デフォルトの名無しさん
09/01/12 06:40:22
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境 
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: visualc++2005
 [3.3] 言語:C
[4] 期限:2009年1月12日AM10時
[5] その他の制限:できるだけ簡単な関数でお願いします



714:デフォルトの名無しさん
09/01/12 08:47:46
>>648
お願いします

715:デフォルトの名無しさん
09/01/12 09:06:40
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Stdio 2005
 [3.3] 言語: C
[4] 期限: 1/12 22:00
[5] その他の制限:ヒントを参考に作成して下さい

よろしくお願いします

716:デフォルトの名無しさん
09/01/12 09:55:21
>>695
クソすぎる
そのφはφ_2のTypoだしD'とかいらないし
氏ねばいいのに

717:デフォルトの名無しさん
09/01/12 10:26:10
>>713
URLリンク(kansai2channeler.hp.infoseek.co.jp)

718:デフォルトの名無しさん
09/01/12 10:36:54
>>715
URLリンク(kansai2channeler.hp.infoseek.co.jp)

719:デフォルトの名無しさん
09/01/12 11:06:48
>>709
おっしゃるとおり、0の場合も考えないといけないんです・・・
どうもintでやると先頭0だと0が消えちゃうのでintは無理なんでしょうか?

720:デフォルトの名無しさん
09/01/12 11:12:03
>>715
#include <stdio.h>
#define BUFFSIZE 256
#define FGETS(buff) fgets(buff, BUFFSIZE, stdin); *(strchr(buff, '\n')) = '\0'
int main(void)
{
FILE *ifp, *ofp;
char buff[BUFFSIZE];
int i = 0;

printf("入力ファイル名を入力:");
FGETS(buff);
ifp = fopen(buff, "r");
printf("%sを入力しました。\n", buff);


printf("出力ファイル名を出力:");
FGETS(buff);
ofp = fopen(buff, "w");
printf("%sを出力しました。\n", buff);

while (fgets(buff, BUFFSIZE, ifp) != NULL)
fprintf(ofp, "%4d: %s", ++i, buff);

fclose(ifp);
fclose(ofp);
return 0;
}

721:デフォルトの名無しさん
09/01/12 11:24:14
早急のお返事ありがとうございます。
>>702
long huga(int n, int maximum){
int i;
long ret=0;

for(i=min(n, maximum);i>0;i--){
if(n-i>0) ret+=huga(n-i, min(i, maximum));
else ret++;
}
return ret;
}
の処理は何を表しているのでしょうか?

後アルゴリズムがいまいちプログラムから読み取ることができないので簡単に説明していただけると助かるのですが・・・

自分で考えても思いつかなくて。

722:デフォルトの名無しさん
09/01/12 11:27:42
>>719
入力が7桁以下の場合でもOKなら

#include <stdio.h>

int main()
{

int gakuban;

printf("学籍番号??? ");
scanf("%d",&gakuban);
if(0 < gakuban && gakuban < 10000000) {
printf("e-mailアドレス: g%07d@~~~~~~\n",gakuban);
} else {
printf("学籍番号は7桁の数字で入力して下さい\n");
}

return 0;
}


723:デフォルトの名無しさん
09/01/12 11:32:28
>>682
#include <stdio.h>
#include <ctype.h>
#define BUFFSIZE 16
#define N 7
int main(void)
{
char buff[BUFFSIZE];
int i;
printf("学籍番号??? "); fgets(buff, BUFFSIZE, stdin);
for (i = 0; buff[i] != '\0'; ++i) if (!isdigit(buff[i])) break;
if (i != N) {
printf("学籍番号は7桁の数字で入力してください\n");
return 1;
}
buff[N] = '\0';
printf("e-mailアドレス: g%s@~~~~~~~~\n", buff);
return 0;
}

724:デフォルトの名無しさん
09/01/12 11:34:16
どなたか>>666をお願いできませんでしょうか

725:デフォルトの名無しさん
09/01/12 11:54:35
>>721
二つ目以降の数字についてはすでに使用した数字以下の数字を使うことで
順列を並べ替えたものを除外しています。そのために引数 maximum を使ってます
例) n=4 のとき
4 採用
3 1 採用
1 3 除外
2 2 採用
2 1 1 採用
1 2 1 除外
1 1 2 除外
1 1 1 1 採用


今、huga という関数が自然数 n および maximum を満たす
すべての組み合わせの数を数え上げることができると*仮定*します
ある数 i (1≦i≦n かつ i≦maximum) を使用すると決定したときの
組み合わせ数は huga(n-i, min(i, maximum)) で求まります(仮定より)

n=4 の時
4 0 → 1通り (これが else ret++;)
3 1 → huga(1, 1) 通り
2 2 → huga(2, 2) 通り
1 3 → huga(3, 1) 通り
ということで n=4 の時の総組み合わせ数は
1 + huga(1, 1) + huga(2, 2) + huga(3, 1)
になります

仮定を証明するのは自分でどうぞ

726:デフォルトの名無しさん
09/01/12 14:05:36
>>666
問1
URLリンク(kansai2channeler.hp.infoseek.co.jp)

727:585 ◆i9Dvbn/Lf6
09/01/12 14:25:48
お願いします。

[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
二重振り子を微小振動させるとして、厳密な数値解及び解析的な近似解を初期振れ角Θを機動時に指定して、
アニメーション表示させるプログラムを表示しなさい。
グラフィックはgnuplotでもEGGXでもどちらでもよい。
教材の一部を貼っておきます。
URLリンク(up2.viploader.net)
URLリンク(up2.viploader.net)
URLリンク(up2.viploader.net)
zipで専用ロダにもあげておきます
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ([2009年1月22日まで]

さっぱりわからないので少しだけでもお願いします

728:デフォルトの名無しさん
09/01/12 14:27:11
>>666
問1
出遅れたけど、せっかく作ったから
URLリンク(kansai2channeler.hp.infoseek.co.jp)

問2は実行結果の何がどう間違っているかを教えてくれると解が早いんだけど。

729:デフォルトの名無しさん
09/01/12 14:40:41
>>726>>728
助かりました本当にありがとうございます。

>>728
失礼しました

実行結果が

総文字数:296
単語数:83
行数:16

となるのが正しいのですが、
自分が作ったものでは

総文字数 :315
単語数 :87
行数 :20

と、異なった結果が出てしまいます。

730:デフォルトの名無しさん
09/01/12 14:56:03
>>729
>>666 を見る限り、「文章の終端」 == 「空行が2つ連続」としているから、
char word[][50] の最後にもう一つ空行を入れてやればそのコードで正しく動く。

731:デフォルトの名無しさん
09/01/12 15:13:49
>>730
分かりました、ありがとうございます。
助かりました

732:デフォルトの名無しさん
09/01/12 15:25:47
初めまして、今Cを勉強してて。
問題文というか、ポインタと構造体が理解できなくて苦しんでいます。

URLリンク(codepad.org)
このようなプログラムを組んだのですが。

mainでのAA[0]、AA[1]の値が、関数に行くとmainのAA[0]がAA[1]に入ってしまいます。
全く原因が分からず苦戦してます。
もしよろしければご教授願います。

やりたいこととしては32bit×32bit=64bitの桁あふれを解消するということです。

733:デフォルトの名無しさん
09/01/12 15:27:06
>>732
スレ違い
帰れ

734:デフォルトの名無しさん
09/01/12 15:32:17
>>733さん
一応課題なのでこのスレに来たのですが・・・
期限は明日です・・・

735:デフォルトの名無しさん
09/01/12 15:36:20
>>732
ああもうマルチうざい
これやるから帰れ
URLリンク(codepad.org)

736:デフォルトの名無しさん
09/01/12 15:39:18
>>734
死ね。


737:デフォルトの名無しさん
09/01/12 15:39:59
>>735さん
有難うございます。
すぐに出来るってすごいですね・・・

多倍長やるのに構造体って必要ないんですか?

738:デフォルトの名無しさん
09/01/12 15:43:24
>>736
やっ、やめて下さい、殺さないで下さい、通報しますよ?

739:デフォルトの名無しさん
09/01/12 15:54:39
>>722
ありがとうございます
やはり配列使うしかないのでしょうか・・・
>>723
できるのですが、残念ながらbuffや、stdin,breakは習ってないのです。ごめんなさい。

740:デフォルトの名無しさん
09/01/12 16:19:09
>>1
>・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。

741:デフォルトの名無しさん
09/01/12 16:22:30
>>739
>>722でダメなのか?


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