C/C++の宿題を片付け ..
[2ch|▼Menu]
1:デフォルトの名無しさん
07/11/22 03:01:54
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
【C 関数検索 man on WWW】 URLリンク(www.linux.or.jp)
【過去ログ検索】        URLリンク(chomework.sakura.ne.jp)
【wiki】               URLリンク(www23.atwiki.jp)

【前スレ】
C/C++の宿題を片付けます 99代目
スレリンク(tech板)

2:デフォルトの名無しさん
07/11/22 03:06:39
               l三`ー 、_;:;:;:;:;:;:j;:;:;:;:;:;:_;:;:;_;:-三三三三三l
               l三  r=ミ''‐--‐';二,_ ̄    ,三三三彡彡l_
              lミ′   ̄    ー-'"    '=ミニ彡彡/‐、ヽ
                  l;l  ,_-‐ 、    __,,.. - 、       彡彡彳、.//
_______∧,、_‖ `之ヽ、, i l´ _,ィ辷ァ-、、   彡彡'r ノ/_ ______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄'`'` ̄ 1     ̄フ/l l::. ヽこ~ ̄     彡彳~´/  ̄ ̄ ̄ ̄ ̄ ̄
                 ヽ   ´ :l .l:::.         彡ィ-‐'′
                ゝ、  / :.  :r-、        彡′
              / ィ:ヘ  `ヽ:__,ィ='´        彡;ヽ、
          _,,..-‐'7 /:::::::ヽ   _: :_    ヽ      ィ´.}::ヽ ヽ、
      _,-‐'´    {  ヽ:::::::::ヘ `'ー===ー-- '   /ノ /::::::ヘ, ヽー、


3:デフォルトの名無しさん
07/11/22 03:13:28
URLリンク(cmonet.s58.xrea.com)

4:デフォルトの名無しさん
07/11/22 05:21:43
>>902

#!/usr/bin/env ruby

def to_rpol(s)
a = s.reverse.split
a.each_with_index do |e, i|
if e == "("
a[i + 0] = sprintf("%s %s %s", a[i - 3], a[i - 1], a[i - 2])
a[i - 1] = nil; a[i - 2] = nil; a[i - 3] = nil; a[i - 4] = nil
end
end
a.compact!
a.each_with_index do |e, i|
if e == "*" || e == "/"
a[i + 1] = sprintf("%s %s %s", a[i - 1], a[i + 1], e)
a[i + 0] = nil; a[i - 1] = nil
end
end
a.compact!
a.each_with_index do |e, i|
if e == "+" || e == "-"
a[i + 1] = sprintf("%s %s %s", a[i - 1], a[i + 1], e)
a[i + 0] = nil; a[i - 1] = nil
end
end
a.compact!
return a.to_s
end

puts to_rpol("( 5 - 4 ) / 3 + 2 * 1")

5:デフォルトの名無しさん
07/11/22 08:36:21
[1] 授業単元: c
[2] 問題文(含コード&リンク): 名前と点数を格納するデータ部を持つ自己参照型構造体を定義し、
線形リストを実装しなさい。

・構造体の名前は struct grade とし、新たに glist 型として定義する。
・構造体のメンバは、char name[40]、int score、及びポインタnext。
・ノードは3つ作成し、それぞれキーボードからデータを入力する。
・ポインタに値を代入し、ヘッダhdと3つのノードの間を繋ぐ。
・読み出し用のポインタpを使って、リストのデータを順に画面に出力する。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: c
[4] 期限: 11/23まで
[5] その他の制限: #defineは、なしで


6:デフォルトの名無しさん
07/11/22 09:09:49
100オメ!!


7:デフォルトの名無しさん
07/11/22 09:18:04
前スレで流れましたが,お願いします。
1つの状態で3つの数値を確保して比較して値を出してその状態の値みたいな
プログラムのほうがいいかもしれません。

[1] 授業単元:確率論
[2] 問題文(含コード&リンク):
前に>>246で宿題をださせていただきました。
これを対数で計算できるように変更していただきたいんですが。
正しい値がでるプログラム(前につくってもらった)
と今つくってるプログラムと2つのせました。

この前5回くらいの移動までの数値があってるからそのあとはいいかとおもって
できたとおもってたんですけど、7回目くらいから同じ値でとまってしまって。
図はこれです URLリンク(www.borujoa.org)

以前つくってもらったプログラムの値をlogでだしてみたプログラム
URLリンク(kansai2channeler.hp.infoseek.co.jp)
移動確率を対数でだして計算していったプログラム
URLリンク(kansai2channeler.hp.infoseek.co.jp)

logの計算途中で-infとかnanとかでてくるので
それを調べるためにprintf文大量に使ってますけど みにくかったら消してください。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 23日おわるくらいまでには
[5] その他の制限: 特になし


8:デフォルトの名無しさん
07/11/22 09:47:45
>>5

#include<stdio.h>
typedef struct grade{
char name[40];
int score;
struct grade *next;
}glist;

void kadai13()
{
glist a,b,*hd,*p;
hd = &a;
a.next = &b;
b.next = NULL;
sprintf(a.name,"dummy");
a.score = -1;
sprintf(b.name,"tsubasa");
b.score = 60;

p = hd;
while(p!=NULL){
printf("p->name \t%s\n", p->name);
printf("p->score\t%d\n", p->score);
printf("p->next \t%p\n", p->next);
p = p->next;
}
return 0;
}
これを改良お願いします。

9:デフォルトの名無しさん
07/11/22 10:12:35
前993
char s1[100] = "asdfghjklmarik";/*検索対象*/
char *s2 = "mariko";
char *p1 = s1;
char *p2 = s2;
while(*p1 == '\0' || *p2 == '\0'){
if(*p1 == *p2){
p1++;
p2++;
}else{
p1 = p1 - (p2 - s2 - 1);
p2 = s2;
}
}
if(*p2 == '\0') /*有*/;
else /*無*/;


10:デフォルトの名無しさん
07/11/22 10:36:59
最近プログラム開発系の会社に就職した。
PCを使っていろいろやるのは好きなんだけど、
なにせスキルは皆無。
とりあえずC、VB、C++辺りを勉強することになった。
今はVC++を勉強しようとしてるんだけど、
初心者にお勧めなサイトとかあったら教えてほしい。
Cはかなり簡単なプログラミング(scanfとかprintfとかしか使わない程度)
しかやってない。
VBも基礎用の参考書をやった程度。


11:デフォルトの名無しさん
07/11/22 10:58:02
>>10
会社で聞け。つかスレ違い

12:デフォルトの名無しさん
07/11/22 11:27:36
>>11
会社で聞ければいいんだけどね。
社長以外は出向してるし、社長はソフト関係できないから。
ググっても大体Cの知識ないとダメだったし。

質問スレが見当たらなかったわけだが。

13:デフォルトの名無しさん
07/11/22 11:37:53
そんな無能を雇う会社はさっさとつぶれてしまえ

14:デフォルトの名無しさん
07/11/22 11:50:11
社長以外は出向、に突っ込むべきだとは思うんだが。

そんなことより100おめ。

15:デフォルトの名無しさん
07/11/22 13:20:00
[1] 授業単元:C++基礎
[2] 問題文(含コード&リンク):0〜100点までの点数を乱数によって10個表示させるプログラムを作りなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:ming-bit(曖昧…)
 [3.3] 言語:C++
[4] 期限:2007年11月28日12時まで
[5] その他の制限:本当に基礎的な事しかやってないので…出来れば簡単なプログラムでお願いします。


16:デフォルトの名無しさん
07/11/22 15:37:38
[1] 授業単元:C言語プログラミング
[2] 問題文(含コード&リンク):
  5人分の身長から、平均と最高と最低を求めるプログラムを作りなさい
  キーボードから5人分の身長を入力する。
  平均、最高、最低を表示する。
  平均は、小数点第1位まで表示する。
  入力処理途中で「-1」が入力されたら処理を中断し、それまでの入力済みデータを元にして以降の処理を行う。

<実行例>
  身長を入力してください。
  1人目は?: 165
  2人目は?: 143
  3人目は?: 149
  4人目は?: -1

  − 結果 −
  平均: 152.3 cm
  最高: 165 cm
  最低: 143 cm

[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C言語
[4] 期限:2007年11月26日13:00まで
[5] その他の制限:
テキスト「新訂 新C言語入門(ビギナー編)」の第8章(ポインタ)までやりました。
@ 5人分の身長を格納する配列を利用すること
    例) int sinchou[5];
A 次の3つのユーザ関数を作成し、利用すること
    ・平均を求める関数
    ・最高を求める関数
    ・最低を求める関数

17:16
07/11/22 15:42:17
自分でやったプログラムはこれなんですが
#include<stdio.h>

double ave (int x[],int y);
void max (int x[],int y);
void min (int x[],int y);

int main (void)
{
int i,sinchou[5];
double avdt;
printf ("身長を入力してください。\n");
for (i=0;i<5;i++){
printf("%d人目は?:",i+1);
scanf("%d",&sinchou[i]);
if (sinchou[i] == -1) break;
}

avdt = ave (sinchou,i+1);
printf("平均:%.1fcm\n",avdt);
max (sinchou,i+1);
min (sinchou,i+1);
return 0;
}



18:16
07/11/22 15:42:48
double ave (int x[],int y)
{
int i;
int a=0;
for (i=0;i<y;i++){
a += x[y];
}
return a/y;
}
void max (int x[],int y)
{
int i,max=x[0];
for (i=0;i<y;i++){
if (max<x[i]){
max=x[i];
}
}
printf("最高:%d点\n",max);
return;
}
void min (int x[],int y)
{
int i,min=x[0];
for (i=0;i<y;i++){
if (min>x[i]){
min=x[i];
}
}
printf("最低:%d点\n",min);
return;
}


19:16
07/11/22 15:45:06
コンパイルはできたんですが、実行すると
NTVDM CPU は不正命令を検出しました。
と出てしまいます。

どうかお願いします。

20:>>16
07/11/22 16:41:46
#include<stdio.h>

double ave (int x[],int y);
void max (int x[],int y);
void min (int x[],int y);

int main (void)
{
int i,sinchou[5];
double avdt;

printf ("身長を入力してください。\n");
for (i=0;i<5;i++){
printf("%d人目は?:",i+1);
scanf("%d",&sinchou[i]);
if (sinchou[i] == -1) break;
}

avdt = ave (sinchou,i);
printf("平均:%.1fcm\n",avdt);
max (sinchou,i);
min (sinchou,i);

return 0;
}

21:>>16
07/11/22 16:44:48
double ave (int x[],int y)
{
int i;
int a=0;

for (i=0;i<y;i++){ a += x[i]; }

return a/y;
}

void max (int x[],int y)
{
int i,max=*x;

for (i=0;i<y;i++){
if (max<x[i]){ max=x[i]; }
}
printf("最高:%d点\n",max);
}
void min (int x[],int y)
{
int i,min=x[0];
for (i=0;i<y;i++){
if (min>x[i]){ min=x[i]; }
}
printf("最低:%d点\n",min);
}

22:デフォルトの名無しさん
07/11/22 17:18:59
>>15
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int i;
srand(time(NULL));
for(i =0; i<10; i++)
printf("%d\n", (int)(rand * 100));
}

23:デフォルトの名無しさん
07/11/22 17:19:11
[1] 授業単元:アルゴリズム演習
[2] 問題文(含コード&リンク):

各節点がkey,leftchild,rightchildの値とポインタを保持する二分木において、
根のポインタを受け取り、全ての節点のkeyを表示するプログラムを作れ。節点の数はnとする
再帰を使う事、同じ節点のkeyを2回表示する事、定数個以上のメモリを使う事を禁止する
また、その実行時間はnの定数倍で抑えられなければならない

[3] 環境
 [3.1] OS: win
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限: なし

お願いします

24:デフォルトの名無しさん
07/11/22 17:45:34
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  各教科名と点数を入力し、点数の大きい順に教科名と点数をソートして表示させなさい。
#include<stdio.h>
void main(){
  char kyouka[20][10];
  int tensu[20],aa,m,n,k;
printf("教科の数:");
scanf("%d",&n);
for(k=0;k<n;k++){
printf("科目名:");
scanf("%s",&kyouka[k]);
printf("点数:");
scanf("%d",&tensu[k]);
}
for(k=0;k<n;k++){
tensu[k]=0;
}
for(m=n;m>1;m--){
for(k=0;k<m;k++){
if(tensu[k]<tensu[k+1]){
aa=tensu[k];
tensu[k]=tensu[k+1];
tensu[k+1]=aa;
}
}
}
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C++
[4] 期限: 2007年11月23日
  文字配列のソートがわかりません。初心者ですがよろしくおねがいします

25:デフォルトの名無しさん
07/11/22 21:31:08
>>24
Cだけど
URLリンク(kansai2channeler.hp.infoseek.co.jp)
前スレと同じ授業のやつか?

26:デフォルトの名無しさん
07/11/22 23:26:38
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):最大20桁の整数を5つ入力させ、int型配列にそれぞれ格納。入力終了後
5つの数値の和を求め出力する。なお、20桁までを有効とし21桁以降は無視。負の数、整数以外
改行のみの場合はそれぞれエラー表示をし、終了する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限: 11月23日09:00まで
前スレでも質問させていただきましたが、ご回答がなかったので改めて質問させて
いただきます。参考書を読んでも自力で出来ないので、わかる方はご回答よろしくお願いします。

27:デフォルトの名無しさん
07/11/22 23:32:32
>>25
すいません。記入し忘れましたが前スレと同じです。
CはまったくわからないのでC++でおねがいできませんか?

28:デフォルトの名無しさん
07/11/22 23:55:41
>>27
>>24の例がC++じゃなくてCなんだけれど。

29:デフォルトの名無しさん
07/11/23 00:49:59
[1] 授業単元: システム解析

[2] 問題文(含コード&リンク):2変数非線形連立方程式の解を求めるnewton-rapson法のプログラムを作成し以下の問題を解け
@x^2+y^2-8=0 と x+y=0 で初期点(x(x0),y(y0))∈[-4,-4]×[4,4]を10000個とり、初期点に対する収束値の関係を2次元で図示する。
収束値の関係の座標を出すこと。

Ax^3-3xy^2-8=0 と x^3-3x^2y=0 で初期点(x(x0),y(y0))∈[-1/2,-1/2]×[1/2,1/2]を10000個以上(百万個程度を推奨する)とり、初期点に対する収束値の関係を2次元で図示する。
収束値の関係の座標を出すこと。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: ([2007年11月25日23:00まで]
[5]その他:^は累乗を示します。たとえば、x*x=x^2です。
2問ありますが、一問だけでもといていただけると助かります。2変数ということで手も足もでません、、、
よろしくお願いします。

30:デフォルトの名無しさん
07/11/23 00:51:12
C++が理解できてCが理解できないってどういう事だ?
演算子をオーバーロードしてるからその辺の関数を理解できないって事?

31:デフォルトの名無しさん
07/11/23 02:48:28
>>26を作ってみたけど、
>わかる方は
と書いてあるから、わからないながらも色々試行錯誤して作った俺は回答する資格無いな。

32:デフォルトの名無しさん
07/11/23 03:27:36
>>27
ってか基本的に、CであればC++でもある。
C++でコンパイルすればいいじゃん。

33:デフォルトの名無しさん
07/11/23 03:38:20
 

34:デフォルトの名無しさん
07/11/23 04:05:20
>>26
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i , j , k;
int ans[21],tasusuji[5][20],tmp;
int ketasu[5],saidaiketa=0;
char input[50];



35:デフォルトの名無しさん
07/11/23 04:06:53
for(i=0;i<21;i++){ans[i]=0;}

for(i=0;i<5;i++){
printf("%dつ目の数字入力>",i+1);
scanf("%s",input);
for(j=1;;j++){
if(input[j]=='\0'){
ketasu[i]=j;
if(j>20){ketasu[i]=20;} //20ケタ以降切り捨て処理
if(ketasu[i]>saidaiketa){saidaiketa=ketasu[i];}
for(k=19,j=j-1;k>=20-ketasu[i];k--,j--){
if(input[j]<48 || input[j]>58){
printf("Error\n");
printf("\n\n何かキーを押してください\n");
scanf("%s",input);
return 1;
}
tasusuji[i][k]=(int)input[j]-48;
}
break;
}
}
}


36:デフォルトの名無しさん
07/11/23 04:07:42
for(i=0;i<5;i++){
for(j=19;j>=20-ketasu[i];j--){ans[j+1]+=tasusuji[i][j];}
for(j=19;j>=20-saidaiketa;j--){ //繰り上げ処理
if(ans[j+1]>9){
tmp=ans[j+1];
ans[j+1]=tmp%10;
ans[j]=tmp/10+ans[j];
}
}

}
printf("\n");
for(i=0;i<5;i++){
if(i==4){ printf("+)"); }
for(j=0;j<25-ketasu[i];j++){
if(i==4 && j==0){j+=4;}
printf(" ");
}

for(k=20-ketasu[i];k<20;k++){
printf("%d",tasusuji[i][k]);
}
printf("\n");
}
printf(" ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n");

37:デフォルトの名無しさん
07/11/23 04:08:49
for(i=0;i<24-saidaiketa;i++){printf(" "); }
if(ans[20-saidaiketa]==0){printf(" ");}
for(i=20-saidaiketa;i<21;i++){
if(i==20-saidaiketa && ans[i]==0){i++;}
printf("%d",ans[i]);
}
printf("\n\n何かキーを押してください\n");
scanf("%s",input);

return 0;
}


38:デフォルトの名無しさん
07/11/23 04:53:44
[1] 授業単元:C++実習
前スレで出させてもらったのですがスルーされましたのでもう一度お願いします。

[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C++
[4] 期限: 11/25 〜10:00
[5] その他の制限: 特になし

よろしくお願いします。

39:デフォルトの名無しさん
07/11/23 12:38:02
>>38
なんつーか問題に不備がたくさんあってやりにくいんだよね。
いちいち指摘するのも面倒なくらいに細かなところが不明瞭。

本当にこんな問題が出てるのなら、教官を捨てていいと思う。

40:デフォルトの名無しさん
07/11/23 12:38:28
1] 授業単元プログラミング2
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 11/25
[5] その他の制限: 特になし


41:デフォルトの名無しさん
07/11/23 12:44:33
>>38
FletzHikariクラスはFletzAdslクラスを継承するような図に見えるんだけど
クラスの概要って所ではProviderクラスを継承するような文書に読めるし
どっちなんだろ?

42:デフォルトの名無しさん
07/11/23 12:55:55
>>40
URLリンク(kansai2channeler.hp.infoseek.co.jp)

43:デフォルトの名無しさん
07/11/23 13:12:19
>>23
メモリの制約が、かなり厳しいね。

二分木を格納するために O(n) が必要だから
「定数個以上のメモリ」という制限は、普通は達成不能。

木以外の空間が O(1) と解釈しても普通は無理で、
再帰を使うと再帰の深さが木の深さと同じくらいになるから
スタック上に O(木の深さ) くらいの空間が必要になる。

俺は、この二分木の表現では O(1) の空間は不可能だと思う。

44:43
07/11/23 13:17:17
ごめん日本語読み間違えた。再帰を使うことも禁止なんだね。
それでもスタック長が普通は O(木の深さ) になるから、普通は無理。

45:デフォルトの名無しさん
07/11/23 13:33:37
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク):

文字列 s[0], s[1], ..., s[n-1] が与えられる。
これらをすべて含むような最短の文字列を一つ求めよ。

例:s[0] = "abc", s[1] = "bcd" → "abcd"
  s[0] = "abc", s[1] = "ac" → "abcac"
  s[0] = "abc", s[1] = "cab" → "cabc"

[3] 環境
 [3.1] OS:Windows (Cygwin)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++ どちらでもよし
[4] 期限: 2007/11/25 まで
[5] その他の制限:とくになし

46:デフォルトの名無しさん
07/11/23 13:41:59
>>43
すみません、二分木の表現のメモリは無視して構いません。
宿題でなく研究レベルの問題だと言われて出されたんですが、手も足も出ない状態です
メモリ使用量をO(lgn)で抑えることはできるんですが・・・

47:デフォルトの名無しさん
07/11/23 13:49:42
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5

 [3.3] 言語: C++
[4] 期限: 11/25 24時
[5] その他の制限:


僕には難しいので誰かよろしくお願いします。



48:デフォルトの名無しさん
07/11/23 14:07:50
[1] 授業単元プログラミング2
[2] 問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C
[4] 期限: 11/27
[5] その他の制限: 特になし


49:デフォルトの名無しさん
07/11/23 14:35:02
>>46
表示順序や二分木表現を書き換えてはいけない、という制限が
無いので木を O(1) 空間でリストに変形すればいい。

void show(node *root) {
  node *tail = root;
  while (root) {
    printf("%d ", root->key);
    while (tail->leftchild) 
      tail = tail->leftchild;
    tail->leftchild = root->rightchild;
    root = root->leftchild;
  }
}

50:デフォルトの名無しさん
07/11/23 14:44:51
>>48
#define USER 50 /* 登録可能ユーザ数 */
#define NAME 100  /* ユーザ名の最大長 */
int main() {
int users; /* 登録されたユーザ数 */
char *user_list[USER]; /* ユーザ名のリスト */
/* ここにプログラムを書く */
  char work1[NAME], work2[NAME];
  int i;
  printf("何名登録しますか?");
  scanf("%d", &users);
  for (i = 0; i < users; ++i) {
    printf("ユーザNo.%d 苗字:");
    user_list[i] = (char *)malloc(NAME*sizeof(char));
    scanf("%s", work1);
    printf("ユーザNo.%d 名前:");
    scanf("%s", work2);
    sprintf(user_list[i], "%s %s", work1, work2);
  }
  printf("登録された内容を表示します。\n");
  /* ここまで */
for(i = 0; i < users; i++) 
printf("ユーザ[%d]:<%s>\n", i, user_list[i]);
}

51:デフォルトの名無しさん
07/11/23 14:46:58
木を壊したままでも良いのか。
何とか復元してからリターンしようとして頭をひねってた。

52:デフォルトの名無しさん
07/11/23 14:48:24
>>47
内容はともかく、日本語が難しくて解読に疲れた。

53:デフォルトの名無しさん
07/11/23 14:50:15
木を変形するのはありなのか?確かに制限には書かれてないが
多分出題者の意図からは外れてるだろうな

54:デフォルトの名無しさん
07/11/23 14:53:46
ポインタの値が常に偶数だという仮定を置ければ復元もできそうだ。
どっちにしても一時的に木を変形する必要はあるけど。

55:デフォルトの名無しさん
07/11/23 14:57:41
削除の変わりに最下位ビットを立てるとかだね。
あと十分大きな値を足しておくとかでも大丈夫。
まあ計算モデルを仮定しなきゃいけないから綺麗じゃないが。

56:デフォルトの名無しさん
07/11/23 15:18:39
>>38
URLリンク(kansai2channeler.hp.infoseek.co.jp)

C++を勉強中の俺がためしに書いてみた
ツッコミ歓迎

57:デフォルトの名無しさん
07/11/23 15:26:59
Providerクラスが抽象クラスになってなくね?

58:デフォルトの名無しさん
07/11/23 15:27:14
>>56
いつのC++を使ってるの?VC6かい?
newは失敗するとnothrowバージョンでない限りstd::bad_alloc例外を
返し、NULLとか0は返しません。14882:2003

59:デフォルトの名無しさん
07/11/23 16:38:03
>>56
そのコードでは、派生クラスのデスクトラクタが実行されないよ


60:デフォルトの名無しさん
07/11/23 17:48:39
>>47
生産管理のアルゴリズムって、5つくらい前のスレにあったやつじゃダメなのか?


61:56
07/11/23 18:09:02
いまここで
抽象クラスの定義方法知った。
newとmallocの違いを知った。
デストラクタをちゃんと記述しないといけないことを知った。

・・・まだまだ勉強が足りないようで
ツッコミありがとう

62:デフォルトの名無しさん
07/11/23 18:43:13
>>56, 61
全くもって技術的な話ではないが
virtual double cale(double a){}
は綴りが微妙

63:デフォルトの名無しさん
07/11/23 18:51:23
>>23
親頂点に帰れるポインタがあれば、直前にいたポインタと比較することで定数メモリで木を周回できるはずだけど。
直前に親頂点にいたら、左の子供頂点に行く。
直前に左の子供頂点にいたら、自分の key を表示して、右の子供頂点に行く。
直前に右の子供頂点にいたら、親頂点に行く。

あとは親頂点親頂点に戻る方法を考えればいいんだけど。
毎回根から今の頂点を探すってできない気がするんだけど、どうなんだろう?

64:デフォルトの名無しさん
07/11/23 19:14:40
ポインタの付け替え(pointer reversalっていうらしい)を使えば巡回自体はできるんだけど、
そのままだと各節点を3回ずつ表示してしまう。

65:デフォルトの名無しさん
07/11/23 19:36:42
そりゃ単にやり方が悪いだけだ

66:デフォルトの名無しさん
07/11/23 19:50:42
[1]授業単元:Cプログラミング入門
[2]問題文:π(=3.14159265)を用いて入力された数値εに対して
次の不等式を満たす最小の自然数Nを求めるプログラム
をつくりなさい。
|(π^2/6)-{(k=1 N)1/k^2}|<ε
[3]環境
 [3.1]OS:Unix
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限11/24まで
[5]その他の制限
・配列、数学関数は使ってはいけない
・表示は以下のようにする
εの値が:
最小のNは  .

まったくわからないのでどうかお願いいたします。

67:デフォルトの名無しさん
07/11/23 19:51:15
>>65
じゃあどうすれば良い?

68:デフォルトの名無しさん
07/11/23 21:24:59
>>23
URLリンク(kansai2channeler.hp.infoseek.co.jp)

貼ってから気付いたけど、なぜか<malloc.h>をincludeしてるので無視してくれ。
ポインタの付け替えで一時的に木を変形する。子が両方ともNULLであるノードを
一時領域として使う。
10万件のランダムテストに合格したから多分合ってる。

69:デフォルトの名無しさん
07/11/23 21:58:13
>>61
>>59だが
>デストラクタをちゃんと記述しないといけないことを知った。
~Provider(){} //デストラクタは書いてますやん
俺が言いたかったのは、その書き方が間違いだってことだよ
「知った」ではなくなぜそうなのか理解できてないと、後で苦しむよ
Effective C++ 第3版の7項にきちんと、俺が指摘した理由が説明されている。
図書館で借りるか、本屋で立ち読みしてごらん。
さすがメイヤー先生、初学者が犯しやすい間違いをズバリ書いているので
びっくりした。
偉そうにかいてごめんね、ガンガッテ


70:デフォルトの名無しさん
07/11/23 22:06:45
>>61
大ヒント : 仮想関数を持つならばデストラクタは仮想にすべき

71:デフォルトの名無しさん
07/11/23 22:08:49
>>70
Javaの @Override アノテーションとかあればいいのにな

72:デフォルトの名無しさん
07/11/23 22:33:15
>>66
スレリンク(tech板:962番)
スレリンク(tech板:971番)

73:デフォルトの名無しさん
07/11/23 22:34:37
うざいわ。
baseクラスのデストラクタはvirtualにしとけ、でいいじゃん。

74:デフォルトの名無しさん
07/11/23 22:41:55
C++にはその名のとおりの必殺技 "死のダイヤモンド" が存在するからなぁ……

75: ◆S2Crp49aOM
07/11/23 22:52:04
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):
1〜10000の範囲の乱数値を持つ要素数10000の配列から、キーボードで入力した1〜10000値を探索し、
同じ値をもつ配列要素の数を表示するプログラムを二分探索を用いて作成せよ。
[3] 環境
 [3.1] O:Linux
 [3.3] 言語:C
[4] 期限: 2007年11月24日01:30まで
[5] その他の制限:

76:デフォルトの名無しさん
07/11/23 23:00:03
>>75
あと二時間半www

77:デフォルトの名無しさん
07/11/23 23:15:25
[1] 授業単元:明解C++
[2] 問題文(含コード&リンク):演習10-2
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:.net 2003
 [3.3] 言語:C++
[4] 期限:無期限
[5] その他の制限:明解C++で独学しています。単純なクラス作成まで終了。最後の演習問題でつまずいています。


78:デフォルトの名無しさん
07/11/23 23:15:31
>>73
こういう鵜呑みにしているヤツに限って肝心な箇所があやふやなんだよなぁ
オレの職場にもこういうヤツが一人いたよ

79:デフォルトの名無しさん
07/11/23 23:17:04
>>77
「明解C++」の演習10-2だと思われる。
でも、その本を持っていない人間には問題すら分からない。

80:デフォルトの名無しさん
07/11/23 23:19:40
>>78
お前のようなうざい奴はどこにでもいるけどな

81: ◆S2Crp49aOM
07/11/23 23:23:32
>>75
[4] 期限: 2007年11月24日11:30まで

打ち間違えました。
申し訳ないです。

82:デフォルトの名無しさん
07/11/23 23:24:25
80=73
図星なので○け犬の遠吠え

83:デフォルトの名無しさん
07/11/23 23:28:06
うざい上に粘着質

84:デフォルトの名無しさん
07/11/23 23:28:09
その本に答えないの?

85:77
07/11/23 23:32:00
>>84
ありません。

86:デフォルトの名無しさん
07/11/23 23:34:46
>>85
問題書く気はないの?

87:デフォルトの名無しさん
07/11/23 23:35:50
問題を書くのは著作権的にどうよ?

88:デフォルトの名無しさん
07/11/23 23:37:58
学校で先生が出題する問題にも著作権は発生するんだが……。

89:デフォルトの名無しさん
07/11/23 23:38:19
つーか、宿題じゃないでしょ、それ。

90:デフォルトの名無しさん
07/11/23 23:40:27
教科書に市販品使うなんて珍しくもない

91:デフォルトの名無しさん
07/11/23 23:40:55
>>88
著者人格権はあるけど学校の課題なんだkら複製権くらいあるだろ

92:デフォルトの名無しさん
07/11/23 23:42:16
>>79
クラスDate第2版に抽出子を追加せよ。

問題の意味もいまいちわからなくて考えられることは
1.抽出子の定義(演算子>>の多重定義)を使用してDateオブジェクトを作成する。
2.抽出子の定義(演算子>>の多重定義)を使用してDateオブジェクトの内容を変更する。
だと思います。

しかし、わたしにはどちらであっても解答がわかりません。

クラスDate第2版ソース
URLリンク(kansai2channeler.hp.infoseek.co.jp)


93:デフォルトの名無しさん
07/11/23 23:42:50
著作権=COPY RIGHT=複製権

94:デフォルトの名無しさん
07/11/23 23:44:05
イコールじゃないよ

95:77
07/11/23 23:44:13
>>86

>>92に問題を書きました。
よろしくお願いします。

96:デフォルトの名無しさん
07/11/24 00:48:36
>>91
学校の課題なら特別扱いされるという根拠は?


97:デフォルトの名無しさん
07/11/24 00:52:40
>>96
先生=著者

98:デフォルトの名無しさん
07/11/24 00:58:29
2

99:デフォルトの名無しさん
07/11/24 00:59:03
1

100:デフォルトの名無しさん
07/11/24 00:59:42
お前ら著作権法くらい読めよ
プログラミングに関係の深い法律だぞ

101:デフォルトの名無しさん
07/11/24 00:59:43
       ▃▅▆▇██▇▅▃
       █ ████████▆
       █ ████████
    ▃▂  ▓▓▓▓▓▓▓▓▓
   ▀██▇███████████▇▅
    ▼▀█▀██▀▀▀▀■█■▀
      ▍ ▋  ▲▃ ▀▅▃▌ ▌▌
    ▐◣ ▐▂▅▀  ▀▅▃▀█  ▍▍
    ▐▃▀▂▃◢◤   ◥◣▃▂▌ ▎▌
    ◥▋ ▐◥▃▆◤  ◥▃▆◤▍ ▋
     ▊ ▐◣        ◢▌ ▼
     ◢▀▌▀◣  ▆▅  ▃▲ ▋
       ▼ ▀▇◣▃◢▇▀  ▼
     ▂▃◢◤▀ ▃▅▃▅▃▅
    ▐▲▃  ▅▀  ▌▌ ▀█
    ◢████▅▀▅▀▋▐▅▀▼
   ▅█████   ▊ ▊  ▌

102:デフォルトの名無しさん
07/11/24 01:00:30
>>97
先生が著作者だから実質的な問題は発生しないと言いたいわけか
複製権関係ねぇ

103:デフォルトの名無しさん
07/11/24 01:08:01
>>72 同志がいたのか・・。 
  参考にさせていただきます。
  ありがとうございました。

104:デフォルトの名無しさん
07/11/24 01:39:30
つうか教育目的の場合、著作権は無視されるんじゃなかったか?

105:デフォルトの名無しさん
07/11/24 01:47:47
三十五条のことか?

106:デフォルトの名無しさん
07/11/24 01:56:19
>>75
URLリンク(kansai2channeler.hp.infoseek.co.jp)

107:デフォルトの名無しさん
07/11/24 01:59:13
>>104
小学校の教科書だか教材に使われてた詩が、著作権者がクレームつけて使えなくなったって話は聞いたことがあるけど。

108:デフォルトの名無しさん
07/11/24 02:12:50
>>104
それは三十三条のことか?

109:デフォルトの名無しさん
07/11/24 03:00:43
ここって教育の場なん?

110:デフォルトの名無しさん
07/11/24 03:03:26
うん

111:デフォルトの名無しさん
07/11/24 03:26:56
丸投げスレも出世したもんだな

112:デフォルトの名無しさん
07/11/24 04:05:52
でしょ

113:デフォルトの名無しさん
07/11/24 11:12:58
>>77
>>95
少し、もちつけ
コードだけ貼って、問題が全然ナイジャマイカ
モマイの貼った↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これを、どうしろというんだ?
エスパー君だったら分かるのかな?
漏れには全然理解できん

114:デフォルトの名無しさん
07/11/24 13:43:11
>>77
エスパー
ostream& operator<<(ostream& s, const Date& x);

ostream& operator<<(ostream& s, const Date& x){s << x.Year() << x.Month() << x.Day();return s;}
こう?

115:デフォルトの名無しさん
07/11/24 14:52:56
1] 授業単元:コンピュータプログラミング1
[2] 問題文:CD−Rは1枚〜10枚で1枚が100円、11枚から100枚で1枚が90円、101枚以上で1枚が70円とする。
枚数nに対する金額を計算するプログラムを作成しなさい。終了時にはCtrl+Z(Enter)と入力する。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:Fujitsu Fortran & C
 [3.3] 言語: C
[4] 期限: 11/24 
[5] その他の制限: なし
どうかよろしくお願いします。


116:デフォルトの名無しさん
07/11/24 15:07:13
[1] 授業単元: システム解析

[2] 問題文(含コード&リンク):2変数非線形連立方程式の解を求めるnewton-rapson法のプログラムを作成し以下の問題を解け
@x^2+y^2-8=0 と x+y=0 で初期点(x(x0),y(y0))∈[-4,-4]×[4,4]を10000個とり、初期点に対する収束値の関係を2次元で図示する。
収束値の関係の座標を出すこと。

Ax^3-3xy^2-8=0 と x^3-3x^2y=0 で初期点(x(x0),y(y0))∈[-1/2,-1/2]×[1/2,1/2]を10000個以上(百万個程度を推奨する)とり、初期点に対する収束値の関係を2次元で図示する。
収束値の関係の座標を出すこと。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: ([2007年11月25日23:00まで]
[5]その他:^は累乗を示します。たとえば、x*x=x^2です。
2問ありますが、一問だけでもといていただけると助かります。2変数ということで手も足もでません、、、
よろしくお願いします。



117:デフォルトの名無しさん
07/11/24 15:27:56
>>115
#include <stdio.h>

int main()
{
    int i,n,price,pricelist[]={1,10,100, 11,100,90, 101,2147483647, 70};

    while (scanf("%d", &n) != EOF)
    {
        for (i=0 ; i<3 ; i++)
        {
            if (pricelist[i*3]<=n && pricelist[i*3+1]>=n)
            {
                price=pricelist[i*3+2]*n;
                printf("%d円\n", price);
            }
        }
    }

    return 0;
}


118:デフォルトの名無しさん
07/11/24 16:07:51
>>22
ありがとうございます。
やってみます。

119:デフォルトの名無しさん
07/11/24 17:11:28
[1] 授業単元:C++実習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C++
[4] 期限: 11/26 〜10:00
[5] その他の制限: 特になし

よろしくお願いします。

120:デフォルトの名無しさん
07/11/24 17:24:42
>>117
ぎりぎり間に合いました。本当にありがとうございます。

121:デフォルトの名無しさん
07/11/24 20:02:02
>>118
>>22じゃないけど
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int i;
srand(time(NULL));
for(i =0; i<10; i++)
printf("%d\n", (int)(rand()%100));
}

122:デフォルトの名無しさん
07/11/24 23:17:48
>>119
当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

123:デフォルトの名無しさん
07/11/25 00:28:38
>>122
ここまで問題を無視できるのもすばらしい.

124:デフォルトの名無しさん
07/11/25 00:46:51
URLリンク(www.nicovideo.jp)

これだな

125:26
07/11/25 01:02:17
>>34
ありがとうございました。

126:デフォルトの名無しさん
07/11/25 01:38:31
>>5
>>8
どなたかお願いします。

127:デフォルトの名無しさん
07/11/25 01:57:17
>>126
#include <stdio.h>
typedef struct grade{
char name[40];
int score;
struct grade *next;
}glist;
int main(void){
glist header={"", 0, NULL}, node[3], *p;
int i;
p = &header;
for(i=0; i<3; i++){
printf("name->");
scanf("%s", node[i].name);
printf("score->");
scanf("%d", &node[i].score);
node[i].next = NULL;
p->next = &node[i];
p = p->next;
}
p = header.next;
while(p != NULL){
printf("p->name \t%s\n", p->name);
printf("p->score\t%d\n", p->score);
printf("p->next \t%p\n", p->next);
p = p->next;
}
return 0;
}

128:デフォルトの名無しさん
07/11/25 02:51:10
[1] コンピュータ実験
[2]あるファイル(※)を読み込み、数列の中の0の個数と1の個数、
数列の周期を求めるプログラムを作成せよ。

※ファイルの中身は0と1の文字が約20万文字と、改行文字\nで終わるものである。
文字列を01の数列としてみたとき、2周期以上の周期系列となっているのがわかっている。
ファイルに保存されている数字は文字として保存されているので、-'0'をして文字から数字に変換すること。
ファイル名は任意(○○.dat)でよい。

[3] 環境
 [3.1]Windows XP
 [3.2]gcc
 [3.3]C
[4] 2007年11月26日(月)12:00まで
[5] 0と1が書いてあるファイルを用意できないのですが出来ますでしょうか?
よろしくお願いいたします。

129:デフォルトの名無しさん
07/11/25 05:38:26
>>122
ありがとうございます
ですが、ええええ!?

130:デフォルトの名無しさん
07/11/25 05:52:16
>>128
3,4個でいいから、入力データの性質を簡単に全て現したサンプルくらい書けるだろ
かけなきゃまずは問題を理解してここに投下しろ

131:デフォルトの名無しさん
07/11/25 07:54:28
>>128
まずファイルをてきとーに作る
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SIZE 20*10000
#define WAVLEN_MAX 10000
int main()
{
int p,t,i,m,n,s=SIZE;
char *buf,fname[]="test.dat";
FILE *fp;
srand(time(NULL));
t = (double)rand()/(RAND_MAX+1)*WAVLEN_MAX+1;
p = (double)rand()/(RAND_MAX+1)*t;
buf = (char*)malloc(t);
m=0;for(i=0;i<t;i++){buf[i] = rand()&1;m+=buf[i];}
if((fp=fopen(fname,"wt"))==NULL)exit(1);
n=0;for(i=0;i<s;i++){fprintf(fp,"%d",buf[(p+i)%t]);n+=buf[(p+i)%t];}
fprintf(fp,"\n");
fclose(fp);
free(buf);
printf("Total = %d (0:%d 1:%d) / T = %d (0:%d 1:%d)\n",s,s-n,n,t,t-m,m,p);
return 0;
}

132:131
07/11/25 08:01:02
>>128
次に作ったファイルを読み込んで処理する
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
long s,t,i,m,n,*tbl;
char *buf,fname[]="test.dat";
FILE *fp;
if((fp=fopen(fname,"rt"))==NULL)exit(1);
fseek(fp,0,SEEK_END);s=ftell(fp);fseek(fp,0,SEEK_SET);
if((buf=(char*)malloc(s))==NULL)exit(1);
for(s=0;(m=fgetc(fp))>='0';s++)
buf[s]=m-'0';
fclose(fp);
tbl=(long*)malloc(s/2*sizeof(long));
tbl[0]=tbl[1]=0;
for(t=2;t<s/2;t++){
tbl[t]=0;
for(i=t;i<s-t;i++)
tbl[t]+=buf[i] & buf[i+t];
}
n=0;for(i=0;i<s;i++)n+=buf[i];
m=0;for(i=0;i<s/2;i++)if(tbl[i]>m){m=tbl[i];t=i;}
m=0;for(i=t;i<t*2;i++)m+=buf[i];
free(tbl);free(buf);
printf("Total = %d (0:%d 1:%d) / T = %d (0:%d 1:%d)\n",s,s-n,n,t,t-m,m);
return 0;
}

133:デフォルトの名無しさん
07/11/25 09:50:24
>>5
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct grade
{
char name[40];
int score;
struct grade *next;
} glist;
glist *cons(glist car, glist *cdr)
{
glist *l;
if( (l = malloc(sizeof(glist))) == NULL ) exit( EXIT_FAILURE );
sprintf(l->name, car.name);
l->score = car.score;
l->next = cdr;
return l;
}
void printList(glist *ptr)
{
if(ptr == NULL) return;
printf("p->name \t%s\n", ptr->name);
printf("p->score\t%d\n", ptr->score);
printf("p->next \t%p\n", ptr->next);
printList(ptr->next);
return;
}


134:デフォルトの名無しさん
07/11/25 09:51:38
つづき
int main(void)
{
glist a,b;
glist *ptr;
sprintf(a.name, "dummy");
a.score = -1;
sprintf(b.name, "tsubasa");
b.score = 60;
ptr = cons(b, NULL);
ptr = cons(a, ptr);
printList(ptr);
return 0;
}


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

5313日前に更新/123 KB
担当:undef