C/C++の宿題を片付けます 100

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けない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++の宿題を片付けます 99代目
http://pc11.2ch.net/test/read.cgi/tech/1194262698/
2デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/22(木) 03:13:28
4デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/22(木) 09:09:49
100オメ!!
7デフォルトの名無しさん:2007/11/22(木) 09:18:04
前スレで流れましたが,お願いします。
1つの状態で3つの数値を確保して比較して値を出してその状態の値みたいな
プログラムのほうがいいかもしれません。

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

この前5回くらいの移動までの数値があってるからそのあとはいいかとおもって
できたとおもってたんですけど、7回目くらいから同じ値でとまってしまって。
図はこれです http://www.borujoa.org/upload/source/upload15106.jpg

以前つくってもらったプログラムの値をlogでだしてみたプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5311.c
移動確率を対数でだして計算していったプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5312.c

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

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: c
[4] 期限: 23日おわるくらいまでには
[5] その他の制限: 特になし
8デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/22(木) 10:36:59
最近プログラム開発系の会社に就職した。
PCを使っていろいろやるのは好きなんだけど、
なにせスキルは皆無。
とりあえずC、VB、C++辺りを勉強することになった。
今はVC++を勉強しようとしてるんだけど、
初心者にお勧めなサイトとかあったら教えてほしい。
Cはかなり簡単なプログラミング(scanfとかprintfとかしか使わない程度)
しかやってない。
VBも基礎用の参考書をやった程度。
11デフォルトの名無しさん:2007/11/22(木) 10:58:02
>>10
会社で聞け。つかスレ違い
12デフォルトの名無しさん:2007/11/22(木) 11:27:36
>>11
会社で聞ければいいんだけどね。
社長以外は出向してるし、社長はソフト関係できないから。
ググっても大体Cの知識ないとダメだったし。

質問スレが見当たらなかったわけだが。
13デフォルトの名無しさん:2007/11/22(木) 11:37:53
そんな無能を雇う会社はさっさとつぶれてしまえ
14デフォルトの名無しさん:2007/11/22(木) 11:50:11
社長以外は出向、に突っ込むべきだとは思うんだが。

そんなことより100おめ。
15デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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つのユーザ関数を作成し、利用すること
    ・平均を求める関数
    ・最高を求める関数
    ・最低を求める関数
1716:2007/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;
}

1816:2007/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;
}
1916:2007/11/22(木) 15:45:06
コンパイルはできたんですが、実行すると
NTVDM CPU は不正命令を検出しました。
と出てしまいます。

どうかお願いします。
20>>16:2007/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:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/22(木) 21:31:08
>>24
Cだけど
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5304.txt
前スレと同じ授業のやつか?
26デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/22(木) 23:32:32
>>25
すいません。記入し忘れましたが前スレと同じです。
CはまったくわからないのでC++でおねがいできませんか?
28デフォルトの名無しさん:2007/11/22(木) 23:55:41
>>27
>>24の例がC++じゃなくてCなんだけれど。
29デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/23(金) 00:51:12
C++が理解できてCが理解できないってどういう事だ?
演算子をオーバーロードしてるからその辺の関数を理解できないって事?
31デフォルトの名無しさん:2007/11/23(金) 02:48:28
>>26を作ってみたけど、
>わかる方は
と書いてあるから、わからないながらも色々試行錯誤して作った俺は回答する資格無いな。
32デフォルトの名無しさん:2007/11/23(金) 03:27:36
>>27
ってか基本的に、CであればC++でもある。
C++でコンパイルすればいいじゃん。
33デフォルトの名無しさん:2007/11/23(金) 03:38:20
 
34デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/23(金) 04:53:44
[1] 授業単元:C++実習
前スレで出させてもらったのですがスルーされましたのでもう一度お願いします。

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

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

本当にこんな問題が出てるのなら、教官を捨てていいと思う。
40デフォルトの名無しさん:2007/11/23(金) 12:38:28
1] 授業単元プログラミング2
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5307.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 11/25
[5] その他の制限: 特になし
41デフォルトの名無しさん:2007/11/23(金) 12:44:33
>>38
FletzHikariクラスはFletzAdslクラスを継承するような図に見えるんだけど
クラスの概要って所ではProviderクラスを継承するような文書に読めるし
どっちなんだろ?
42デフォルトの名無しさん:2007/11/23(金) 12:55:55
43デフォルトの名無しさん:2007/11/23(金) 13:12:19
>>23
メモリの制約が、かなり厳しいね。

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

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

俺は、この二分木の表現では O(1) の空間は不可能だと思う。
4443:2007/11/23(金) 13:17:17
ごめん日本語読み間違えた。再帰を使うことも禁止なんだね。
それでもスタック長が普通は O(木の深さ) になるから、普通は無理。
45デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/23(金) 13:41:59
>>43
すみません、二分木の表現のメモリは無視して構いません。
宿題でなく研究レベルの問題だと言われて出されたんですが、手も足も出ない状態です
メモリ使用量をO(lgn)で抑えることはできるんですが・・・
47デフォルトの名無しさん:2007/11/23(金) 13:49:42
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5320.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5

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


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

48デフォルトの名無しさん:2007/11/23(金) 14:07:50
[1] 授業単元プログラミング2
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5319.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C
[4] 期限: 11/27
[5] その他の制限: 特になし
49デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/23(金) 14:46:58
木を壊したままでも良いのか。
何とか復元してからリターンしようとして頭をひねってた。
52デフォルトの名無しさん:2007/11/23(金) 14:48:24
>>47
内容はともかく、日本語が難しくて解読に疲れた。
53デフォルトの名無しさん:2007/11/23(金) 14:50:15
木を変形するのはありなのか?確かに制限には書かれてないが
多分出題者の意図からは外れてるだろうな
54デフォルトの名無しさん:2007/11/23(金) 14:53:46
ポインタの値が常に偶数だという仮定を置ければ復元もできそうだ。
どっちにしても一時的に木を変形する必要はあるけど。
55デフォルトの名無しさん:2007/11/23(金) 14:57:41
削除の変わりに最下位ビットを立てるとかだね。
あと十分大きな値を足しておくとかでも大丈夫。
まあ計算モデルを仮定しなきゃいけないから綺麗じゃないが。
56デフォルトの名無しさん:2007/11/23(金) 15:18:39
>>38
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5321.cpp

C++を勉強中の俺がためしに書いてみた
ツッコミ歓迎
57デフォルトの名無しさん:2007/11/23(金) 15:26:59
Providerクラスが抽象クラスになってなくね?
58デフォルトの名無しさん:2007/11/23(金) 15:27:14
>>56
いつのC++を使ってるの?VC6かい?
newは失敗するとnothrowバージョンでない限りstd::bad_alloc例外を
返し、NULLとか0は返しません。14882:2003
59デフォルトの名無しさん:2007/11/23(金) 16:38:03
>>56
そのコードでは、派生クラスのデスクトラクタが実行されないよ
60デフォルトの名無しさん:2007/11/23(金) 17:48:39
>>47
生産管理のアルゴリズムって、5つくらい前のスレにあったやつじゃダメなのか?
6156:2007/11/23(金) 18:09:02
いまここで
抽象クラスの定義方法知った。
newとmallocの違いを知った。
デストラクタをちゃんと記述しないといけないことを知った。

・・・まだまだ勉強が足りないようで
ツッコミありがとう
62デフォルトの名無しさん:2007/11/23(金) 18:43:13
>>56, 61
全くもって技術的な話ではないが
virtual double cale(double a){}
は綴りが微妙
63デフォルトの名無しさん:2007/11/23(金) 18:51:23
>>23
親頂点に帰れるポインタがあれば、直前にいたポインタと比較することで定数メモリで木を周回できるはずだけど。
直前に親頂点にいたら、左の子供頂点に行く。
直前に左の子供頂点にいたら、自分の key を表示して、右の子供頂点に行く。
直前に右の子供頂点にいたら、親頂点に行く。

あとは親頂点親頂点に戻る方法を考えればいいんだけど。
毎回根から今の頂点を探すってできない気がするんだけど、どうなんだろう?
64デフォルトの名無しさん:2007/11/23(金) 19:14:40
ポインタの付け替え(pointer reversalっていうらしい)を使えば巡回自体はできるんだけど、
そのままだと各節点を3回ずつ表示してしまう。
65デフォルトの名無しさん:2007/11/23(金) 19:36:42
そりゃ単にやり方が悪いだけだ
66デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/23(金) 19:51:15
>>65
じゃあどうすれば良い?
68デフォルトの名無しさん:2007/11/23(金) 21:24:59
>>23
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5322.c

貼ってから気付いたけど、なぜか<malloc.h>をincludeしてるので無視してくれ。
ポインタの付け替えで一時的に木を変形する。子が両方ともNULLであるノードを
一時領域として使う。
10万件のランダムテストに合格したから多分合ってる。
69デフォルトの名無しさん:2007/11/23(金) 21:58:13
>>61
>>59だが
>デストラクタをちゃんと記述しないといけないことを知った。
~Provider(){} //デストラクタは書いてますやん
俺が言いたかったのは、その書き方が間違いだってことだよ
「知った」ではなくなぜそうなのか理解できてないと、後で苦しむよ
Effective C++ 第3版の7項にきちんと、俺が指摘した理由が説明されている。
図書館で借りるか、本屋で立ち読みしてごらん。
さすがメイヤー先生、初学者が犯しやすい間違いをズバリ書いているので
びっくりした。
偉そうにかいてごめんね、ガンガッテ
70デフォルトの名無しさん:2007/11/23(金) 22:06:45
>>61
大ヒント : 仮想関数を持つならばデストラクタは仮想にすべき
71デフォルトの名無しさん:2007/11/23(金) 22:08:49
>>70
Javaの @Override アノテーションとかあればいいのにな
72デフォルトの名無しさん:2007/11/23(金) 22:33:15
73デフォルトの名無しさん:2007/11/23(金) 22:34:37
うざいわ。
baseクラスのデストラクタはvirtualにしとけ、でいいじゃん。
74デフォルトの名無しさん:2007/11/23(金) 22:41:55
C++にはその名のとおりの必殺技 "死のダイヤモンド" が存在するからなぁ……
75 ◆S2Crp49aOM :2007/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デフォルトの名無しさん:2007/11/23(金) 23:00:03
>>75
あと二時間半www
77デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/23(金) 23:15:31
>>73
こういう鵜呑みにしているヤツに限って肝心な箇所があやふやなんだよなぁ
オレの職場にもこういうヤツが一人いたよ
79デフォルトの名無しさん:2007/11/23(金) 23:17:04
>>77
「明解C++」の演習10-2だと思われる。
でも、その本を持っていない人間には問題すら分からない。
80デフォルトの名無しさん:2007/11/23(金) 23:19:40
>>78
お前のようなうざい奴はどこにでもいるけどな
81 ◆S2Crp49aOM :2007/11/23(金) 23:23:32
>>75
[4] 期限: 2007年11月24日11:30まで

打ち間違えました。
申し訳ないです。
82デフォルトの名無しさん:2007/11/23(金) 23:24:25
80=73
図星なので○け犬の遠吠え
83デフォルトの名無しさん:2007/11/23(金) 23:28:06
うざい上に粘着質
84デフォルトの名無しさん:2007/11/23(金) 23:28:09
その本に答えないの?
8577:2007/11/23(金) 23:32:00
>>84
ありません。
86デフォルトの名無しさん:2007/11/23(金) 23:34:46
>>85
問題書く気はないの?
87デフォルトの名無しさん:2007/11/23(金) 23:35:50
問題を書くのは著作権的にどうよ?
88デフォルトの名無しさん:2007/11/23(金) 23:37:58
学校で先生が出題する問題にも著作権は発生するんだが……。
89デフォルトの名無しさん:2007/11/23(金) 23:38:19
つーか、宿題じゃないでしょ、それ。
90デフォルトの名無しさん:2007/11/23(金) 23:40:27
教科書に市販品使うなんて珍しくもない
91デフォルトの名無しさん:2007/11/23(金) 23:40:55
>>88
著者人格権はあるけど学校の課題なんだkら複製権くらいあるだろ
92デフォルトの名無しさん:2007/11/23(金) 23:42:16
>>79
クラスDate第2版に抽出子を追加せよ。

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

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

クラスDate第2版ソース
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5323.txt
93デフォルトの名無しさん:2007/11/23(金) 23:42:50
著作権=COPY RIGHT=複製権
94デフォルトの名無しさん:2007/11/23(金) 23:44:05
イコールじゃないよ
9577:2007/11/23(金) 23:44:13
>>86

>>92に問題を書きました。
よろしくお願いします。
96デフォルトの名無しさん:2007/11/24(土) 00:48:36
>>91
学校の課題なら特別扱いされるという根拠は?
97デフォルトの名無しさん:2007/11/24(土) 00:52:40
>>96
先生=著者
98デフォルトの名無しさん:2007/11/24(土) 00:58:29
2
99デフォルトの名無しさん:2007/11/24(土) 00:59:03
1
100デフォルトの名無しさん:2007/11/24(土) 00:59:42
お前ら著作権法くらい読めよ
プログラミングに関係の深い法律だぞ
101デフォルトの名無しさん:2007/11/24(土) 00:59:43
       ▃▅▆▇██▇▅▃
       █ ████████▆
       █ ████████
    ▃▂  ▓▓▓▓▓▓▓▓▓
   ▀██▇███████████▇▅
    ▼▀█▀██▀▀▀▀■█■▀
      ▍ ▋  ▲▃ ▀▅▃▌ ▌▌
    ▐◣ ▐▂▅▀  ▀▅▃▀█  ▍▍
    ▐▃▀▂▃◢◤   ◥◣▃▂▌ ▎▌
    ◥▋ ▐◥▃▆◤  ◥▃▆◤▍ ▋
     ▊ ▐◣        ◢▌ ▼
     ◢▀▌▀◣  ▆▅  ▃▲ ▋
       ▼ ▀▇◣▃◢▇▀  ▼
     ▂▃◢◤▀ ▃▅▃▅▃▅
    ▐▲▃  ▅▀  ▌▌ ▀█
    ◢████▅▀▅▀▋▐▅▀▼
   ▅█████   ▊ ▊  ▌
102デフォルトの名無しさん:2007/11/24(土) 01:00:30
>>97
先生が著作者だから実質的な問題は発生しないと言いたいわけか
複製権関係ねぇ
103デフォルトの名無しさん:2007/11/24(土) 01:08:01
>>72 同志がいたのか・・。 
  参考にさせていただきます。
  ありがとうございました。
104デフォルトの名無しさん:2007/11/24(土) 01:39:30
つうか教育目的の場合、著作権は無視されるんじゃなかったか?
105デフォルトの名無しさん:2007/11/24(土) 01:47:47
三十五条のことか?
106デフォルトの名無しさん:2007/11/24(土) 01:56:19
107デフォルトの名無しさん:2007/11/24(土) 01:59:13
>>104
小学校の教科書だか教材に使われてた詩が、著作権者がクレームつけて使えなくなったって話は聞いたことがあるけど。
108デフォルトの名無しさん:2007/11/24(土) 02:12:50
>>104
それは三十三条のことか?
109デフォルトの名無しさん:2007/11/24(土) 03:00:43
ここって教育の場なん?
110デフォルトの名無しさん:2007/11/24(土) 03:03:26
うん
111デフォルトの名無しさん:2007/11/24(土) 03:26:56
丸投げスレも出世したもんだな
112デフォルトの名無しさん:2007/11/24(土) 04:05:52
でしょ
113デフォルトの名無しさん:2007/11/24(土) 11:12:58
>>77
>>95
少し、もちつけ
コードだけ貼って、問題が全然ナイジャマイカ
モマイの貼った↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5323.txt
これを、どうしろというんだ?
エスパー君だったら分かるのかな?
漏れには全然理解できん
114デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/24(土) 16:07:51
>>22
ありがとうございます。
やってみます。
119デフォルトの名無しさん:2007/11/24(土) 17:11:28
[1] 授業単元:C++実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5325.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C++
[4] 期限: 11/26 〜10:00
[5] その他の制限: 特になし

よろしくお願いします。
120デフォルトの名無しさん:2007/11/24(土) 17:24:42
>>117
ぎりぎり間に合いました。本当にありがとうございます。
121デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/24(土) 23:17:48
>>119
当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5326.txt
123デフォルトの名無しさん:2007/11/25(日) 00:28:38
>>122
ここまで問題を無視できるのもすばらしい.
124デフォルトの名無しさん:2007/11/25(日) 00:46:51
12526:2007/11/25(日) 01:02:17
>>34
ありがとうございました。
126デフォルトの名無しさん:2007/11/25(日) 01:38:31
>>5
>>8
どなたかお願いします。
127デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/11/25(日) 05:38:26
>>122
ありがとうございます
ですが、ええええ!?
130デフォルトの名無しさん:2007/11/25(日) 05:52:16
>>128
3,4個でいいから、入力データの性質を簡単に全て現したサンプルくらい書けるだろ
かけなきゃまずは問題を理解してここに投下しろ
131デフォルトの名無しさん:2007/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;
}
132131:2007/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デフォルトの名無しさん:2007/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デフォルトの名無しさん:2007/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;
}
135128:2007/11/25(日) 11:00:53
>>130>>131
よく読みなおしたら日本語おかしかった。ごめんなさい。
ファイルはもう.datファイルであるんですが、そこから0と1の数を数えて、
周期探し出すのがわからんのです。
お手数おかけしてすいません。
136デフォルトの名無しさん:2007/11/25(日) 11:26:28
そのファイルがなければ探しようがないよ
137デフォルトの名無しさん:2007/11/25(日) 11:30:02
>>135
圧縮したら対してサイズおおきくならないからうp
138デフォルトの名無しさん:2007/11/25(日) 11:51:20
[1] 授業単元プログラミングU
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5327.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 11/26
[5] その他の制限: 特になし
139デフォルトの名無しさん:2007/11/25(日) 12:29:50
>>138
なんであだちゆみ?
140デフォルトの名無しさん:2007/11/25(日) 12:31:40
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
直交座標系の2点A, B のx 座標とy 座標をキーボードから入力し,
三角形OAB の面積を求めるプログラムを作成せよ.ただし点O は
原点(0, 0) とする.
点の名前,x 座標,y 座標を構造体のメンバとせよ.
ポインタによる表現を使うこと.
面積を求めるには以下の公式を使うこと.
2点A (x1, y1),B (x2, y2) に対して,三角形の面積S は
S =1/2|x1*y2 - x2*y1|
[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: Cのみ
[4] 期限: 2007/11/26 18:00

よろしくお願いします。
141デフォルトの名無しさん:2007/11/25(日) 12:33:55
>>138
#include <stdio.h>
#include <string.h>
#define USER 5
#define NAME 100
int main() {
int c,i,found=0;
char m[NAME],n[NAME];
char a_name[USER][NAME]={"Takeuchi Yuko",
"Yada Akiko",
"Ogura Yuko",
"Adachi Yumi",
"Yumi Adachi"}; /* 登録済みのユーザのリスト */
/* ここにプログラムを書く */
while(1){
do{
printf("検索?(Y or N):");
fflush(stdin);
}while((c=getchar())!='y'&&c!='Y'&&c!='n'&&c!='N');
if(c=='n'||c=='N')
break;
printf("名字:");
scanf("%s",m);
printf("名前:");
scanf("%s",n);
142デフォルトの名無しさん:2007/11/25(日) 12:34:27
>>140の続き
for(i=0;i<USER;i++){
if(strstr(a_name[i],m)!=NULL&&strstr(a_name[i],n)!=NULL){
printf("Hit! User#%d:[%s]\n",i,a_name[i]);
found++;
}
}
if(found==0)
printf("入力されたユーザは登録されていません。\n");
else
printf("%d件ユーザが見つかりました。\n",found);
found=0;
}
printf("検索を終わります。\n");
return 0;
}
143デフォルトの名無しさん:2007/11/25(日) 12:35:02
>>142>>141の続きの間違い。
144デフォルトの名無しさん:2007/11/25(日) 12:53:33
>>138
>プログラミングU
進化したプログラミングか
145デフォルトの名無しさん:2007/11/25(日) 14:28:59
[1] 授業単元:暗号理論
[2] 問題文(含コード&リンク):
素数p.qに対してn=p*qが与えられている。

中国人剰余定理を応用して

任意のCとdに対して、modnでのC^dを求めるプログラムを作成せよ。

ヒント
C^d mod n ≡ (C^d mod p,C^d mod q)



[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明後日
[5] その他の制限:ポインタは習ってない

お願いします。
146128:2007/11/25(日) 15:00:08
>>136>>137
圧縮してupすれば大丈夫でしたね・・・。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5328.zip

この中の0と1の個数と、数列の周期を求めるプログラムをお願いします。
147コーンポタージュ:2007/11/25(日) 16:21:51
【質問テンプレ】
[1] 授業単元:グラフ彩色問題
[2] 問題文
 [2.1]グラフ彩色問題に対する近似解法SEQを作成せよ
 [2.2].頂点を次数の降順にソートした後にSEQを適用するプログラムを作成せよ
 [2.3]グラフ彩色問題に対する近似解法RLFを作成せよ
※検索エンジンで“グラフ彩色問題 SEQ”と入力して頂ければ、更に理解が深まるページが見つかるかと思います。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2007年12月7日
[5] その他の制限:特にありません。

よろしくお願いします。
148もりもっこり:2007/11/25(日) 16:32:38
基本的なプログラムだと思うのですが、自分でやってみてもうまくいきません。また他にも課題が多く、非常に困っています。詳しい方よろしくお願いします。


1.数値を順番に読み込んで二次元の配列に格納する。
2.その配列を画面に出力する。
3.次に、2つの整数を読み込む。
4.二次元配列のうち、読み込んだ整数に対応する二つの行(あるいは列)の内容を交換する。
配列の内容を画面に出力する。
5.配列の読み込み、交換、出力はそれぞれ関数にすること。
149KSCN:2007/11/25(日) 16:41:11
Mathematica でグラフを描き、EPS 形式で保存する。LaTeX を使ってレポートを作成してその中にグラフを挿入し、PDF ファイルに変換したものを提出すること。

っていう課題がでたのですが質問の意味からわかりません。どなたか質問の意味だけでも教えてください。
150デフォルトの名無しさん:2007/11/25(日) 16:43:43
どうでもいいけど、名前を出す人の方が少ないんだから別人に見せようとしても逆効果だぞ
151デフォルトの名無しさん:2007/11/25(日) 16:49:49
152デフォルトの名無しさん:2007/11/25(日) 16:50:15
>>149
何がわからないのかがわからない。
1.クラスで使っているMathematicaというソフトを使って数式を処理してグラフ表示、グラフの画像をEPS形式のファイルに保存。
2.いつもやっているようにLatexでレポート作成。EPS形式ファイルの埋め込みに関しては、配布したテキストを参照の事。
3.pdflatexをつかってPDF形式のファイルを出力。

一通り説明されてるはずなのに、なんで分からないとか言ってんの?
ずっとサボってたのか?
153デフォルトの名無しさん:2007/11/25(日) 18:01:02
154デフォルトの名無しさん:2007/11/25(日) 18:24:20
>>128 >>146
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5329.c

結果があってるかはわからんよ。

あと、文字列を数列に直すのは無駄だったから省略しちゃった。
どうしても直したければ、適当にやってくんろ。
155131:2007/11/25(日) 19:42:04
>>154
自分の環境ではfscanfで32767文字までしか取得できなかったわけだが・・・
ファイルサイズは228793バイトあるわけで

>>128
>>132で答えたつもりだったんだけど間違ってたかな?
156デフォルトの名無しさん:2007/11/25(日) 20:30:38
>>155
こっちの環境では問題なく scanf で取れたよ。

それ以上に、>>132 は O(n^2) だから、とても終わらないと思うけれど。
157156=154:2007/11/25(日) 20:33:55
あ、こちらの環境は質問者にあわせて WindowsXP (cygwin) の gcc 。
質問者の環境で、これでうまくいかないようなら対処する。
158デフォルトの名無しさん:2007/11/25(日) 20:48:56
>>153
プログラムがかけないのでお願いします
159デフォルトの名無しさん:2007/11/25(日) 20:56:38
>>158
C, d, n, p, q として想定している桁数は?
任意桁なら、GMP の使用の可否は?
160デフォルトの名無しさん:2007/11/25(日) 20:59:51
>>158
マルチ?って聞かれてそう答えるのって日本語不自由な人だよね。
161デフォルトの名無しさん:2007/11/25(日) 21:04:14
>>160
留学生です
162デフォルトの名無しさん:2007/11/25(日) 21:14:03
[1] 授業単元: C言語基礎
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5330.txt
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C言語
[4] 期限: 11月26日0時まで
よろしくおねがいします
163デフォルトの名無しさん:2007/11/25(日) 21:14:37
帰れ
164デフォルトの名無しさん:2007/11/25(日) 21:24:45
>>162
int dom[] = {-1,31,28,31,30,31,30,31,31,30,31,30,31};
void yesterday(int *y, int *m, int *d) {
  --*d;
  if (*d <= 0) *d = dom[--*m];
  if (*m <= 0) --*y, *m = 12;
}
void tomorrow(int *y, int *m, int *d) {
  ++*d;
  if (*d > dom[*m]) *d = 1, ++*m;
  if (*m > 12) ++*y, *m = 1;
}
void sort3(int *n1, int *n2, int *n3) {
  int tmp;
  if (*n1 > *n2) tmp = *n1, *n1 = *n2, *n2 = tmp;
  if (*n2 > *n3) tmp = *n2, *n2 = *n3, *n3 = tmp;
  if (*n1 > *n2) tmp = *n1, *n1 = *n2, *n2 = tmp;
}
165デフォルトの名無しさん:2007/11/25(日) 21:47:29
>>116
当方で確認した環境は WindowsXP, 処理系は gcc 3.4.4 です。
(1) だけでもやってみました。とにかく初期値と収束解を出すだけのプログラムです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5331.txt

この結果をつらつら眺めると、次の関係があると推測できます。
初期値を x0, y0 とするとき、
1) y0 > x0 ならば、収束値は (x, y) = (-2, 2)
2) y0 < x0 ならば、収束値は (x, y) = (2, -2)
3) x0 = y0 ならば、ヤコビ行列の行列式が 0 となるので、収束しない。
初期値から近い方の解に収束するようです。

なお、問題の(2) は、どうもフラクタル図形を描くかと思われます。
166デフォルトの名無しさん:2007/11/25(日) 22:04:40
>>116
M教授の課題だろ
167デフォルトの名無しさん:2007/11/25(日) 22:08:05
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):(http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5332.txt)
[3] 環境
 [3.1] OS: WindowsXP
 [3.3] 言語: C言語
[4] 期限: 明後日
[5] その他の制限: 今は配列のところを習っています。制限は特にないです。
 お願いします
168デフォルトの名無しさん:2007/11/25(日) 22:13:59
>>167
404
169デフォルトの名無しさん:2007/11/25(日) 22:24:46
1から50までの数のうち、素数を表示するプログラムを教えてください。
#difineで50を定義するってのが条件です

お願いします
170デフォルトの名無しさん:2007/11/25(日) 22:33:04
>>148
M教授の課題だろ。俺もわかんねえんだおしえてくれ
171デフォルトの名無しさん:2007/11/25(日) 22:34:48
>>169
#include <stdio.h>
#define 50
int main(void)
{
printf("2 3 5 7 11 13 17 19 23 29 31 37 41 43 47");
return 0;
}
172>>169:2007/11/25(日) 22:35:19
すみません。>>1読んでませんでした
書き直します
[1] C言語:
[2] 1から50までの数のうち、素数を表示するプログラムを作成せよ。
#difineで50を定義せよ
[3] 環境
 [3.1] WindowsXP
 [3.2] Visual C++2005
 [3.3] C
[4] 期限:無期限
[5] 関数は使ってはいけない
173デフォルトの名無しさん:2007/11/25(日) 22:37:23
>>172
>関数は使ってはいけない

本当にこう言われたのか?
174173:2007/11/25(日) 22:39:11
>>173
すみません。違います
関数は使わなかったらできませんね(汗
175デフォルトの名無しさん:2007/11/25(日) 22:40:05
ところで >>171 はスルーかね
176デフォルトの名無しさん:2007/11/25(日) 22:40:57
あっ!#difineを使うのか!
177173:2007/11/25(日) 22:41:37
あ、すまんです;;
ありがとうございます。こんなやりかたもあるんですね
178173:2007/11/25(日) 22:43:44
あとdefineですね。間違いだらけですみません
179デフォルトの名無しさん:2007/11/25(日) 22:44:59
>>172
#define N 50
main() {
  int i, j;
  int primes[N];
  for (i = 0; i < N; ++i) {
    primes[i] = i;
  }
  primes[1] = 0;
  for (i = 2; i*i < N; ++i) 
    if (primes[i]) {
      for (j = i*i; j < N; j+=i) {
        primes[j] = 0;
      }
    }
  }
  for (i = 0; i < N; ++i) {
    if (primes[i]) {
      printf("%d ", primes[i]);
    }
  }
}
180デフォルトの名無しさん:2007/11/25(日) 22:47:39
>>179
最悪な方法に比べればましだけどまだしょっぱい。
181デフォルトの名無しさん:2007/11/25(日) 22:47:48
>>172
#include <stdio.h>

int main()
{
    printf("2 3 5 7 11 13 17 19 23 29 31 37 41 43 47\n");
    return 0;
}
182173:2007/11/25(日) 22:48:17
(汗
183デフォルトの名無しさん:2007/11/25(日) 22:51:09
>>180
改善点があったら教えてください
184デフォルトの名無しさん:2007/11/25(日) 22:52:10
>>172
#include <stdio.h>
#include <stdlib.h>
#define N 50

int main(void){
int border, i, k;
char *num;
border = N/2;
if((num = malloc( N+1 )) == NULL)return -1;
for(i=0; i<N; i++)num[i] = 1;
i = 2;
while(i <= border){
for(k=i*2; k<=N; k+=i)num[k] = 0;
while(1){
i++;
if(num[i])break;
}
}
for(i=2; i<=N; i++)if(num[i])printf("%d ", i);
free(num);
return 0;
}
185122:2007/11/25(日) 22:53:42
>>119
>>129
ごめんなさい。訂正いたします。
なお、厳密には「有効桁数 4 桁で表示」っていうのは、このやり方ではうまくないです。
SEED に与える定数で、具合のいいものしか表示しないようにしています。すみません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5333.txt
186デフォルトの名無しさん:2007/11/25(日) 22:59:55
>>172
#include <stdio.h>

int main()
{
    int i,j,num[51]={0};

    for (i=2 ; i<51 ; i++)
    {
        if (num[i]==0)
        {
            printf("%d\n", i);
            for (j=i ; j<51 ; j+=i)
            {
                num[j]=1;
            }
        }
    }

    return 0;
}
187122:2007/11/25(日) 23:00:07
>>119 >>129
訂正:具合のいいものを表示するように SEED の値を変えてください。
重ね重ねすみません。
188デフォルトの名無しさん:2007/11/25(日) 23:04:03
>>186
//ちょっとだけ高速化
#include <stdio.h>

int main()
{
    int i,j,num[51]={0};

    for (i=2 ; i*i<51 ; i++)
    {
        if (num[i]==0)
        {
            printf("%d\n", i);
            for (j=i ; j<51 ; j+=i)
            {
                num[j]=1;
            }
        }
    }
    for (i=2 ; i<51 ; i++)
    {
        if (num[i]==0)
        {
            printf("%d\n", i);
        }
    }

    return 0;
}
189コーンポタージュ:2007/11/26(月) 00:15:01
>>147
ちなみにサンプルプログラムは以下の通りです。

/* グラフ彩色問題に対する近似解法(サンプルプログラム) */

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define MAX_N 2000 /* 最大の頂点数 */

int n; /* 頂点数 */
int m; /* 辺数 */
double x[MAX_N], y[MAX_N]; /* 各頂点の座標 */
int a[MAX_N][MAX_N]; /* 隣接行列 */
int color[MAX_N]; /* 色 */
int max_color; /* 最大の色番号 */

/* アルゴリズム本体 */
void sample(){

int i;

for(i = 0; i < n; i++){
color[i] = i % 6;
}
}
190コーンポタージュ:2007/11/26(月) 00:15:42
/* メインプログラム */
int main(int argc, char *argv[]){

FILE *input_file, *output_file;
double start_time, search_time;
int i,j,k1,k2;

/* 引数のチェック */
if(argc <= 1){
fprintf(stderr,"Please input the name of data file!\n");
exit(1);
}

/* 入力データの読み込み */
input_file = fopen(argv[1],"r");
fscanf(input_file, "%d %d\n",&n, &m);
for(i = 0; i < n; i++){
fscanf(input_file,"%lf %lf\n",&(x[i]),&(y[i]));
}
for(i = 0; i < n; i++){ /* 隣接行列の初期化 */
for(j = 0; j < n; j++){
a[i][j] = 0;
}
}
for(i = 0; i < m; i++){
fscanf(input_file,"%d %d\n",&k1,&k2);
a[k1][k2] = a[k2][k1] = 1;
}
191コーンポタージュ:2007/11/26(月) 00:16:16
/* 解の初期化 */
for(i = 0; i < n; i++){
color[i] = -1;
}

/* 入力データの表示 */
printf("n= %d\n",n);
printf("m= %d\n",m);
/* for(i = 0; i < n; i++){
printf("%f\t%f\n",x[i],y[i]);
}
for(i = 0; i < n; i++){
for(j = i+1; j < n; j++){
if(a[i][j] == TRUE){
printf("%d\t%d\n",i,j);
}
}
} */

/* 開始時刻の設定 */
start_time = (double)clock()/CLOCKS_PER_SEC;

/* アルゴリズム本体 */
sample();
192コーンポタージュ:2007/11/26(月) 00:16:50
/* 実行時間の測定 */
search_time = (double)clock()/CLOCKS_PER_SEC - start_time;

/* 制約条件のチェック */
for(i = 0; i < n; i++){
if(color[i] == -1){
printf("No color is assigned!: %d\n",i);
}
}
for(i = 0; i < n; i++){
for(j = i+1; j < n; j++){
if(a[i][j] == 1 && color[i] == color[j]){
printf("%d and %d have the same color %d!\n",i,j,color[i]);
}
}
}
193コーンポタージュ:2007/11/26(月) 00:17:23
/* 入力データおよび解をファイルに出力 */
output_file = fopen("result.txt","w");
fprintf(output_file,"%d\t%d\n",n,m);
for(i = 0; i < n; i++){
fprintf(output_file,"%f\t%f\n",x[i],y[i]);
}
for(i = 0; i < n; i++){
for(j = i+1; j < n; j++){
if(a[i][j] == 1){
fprintf(output_file,"%d\t%d\n",i,j);
}
}
}
for(i = 0; i < n; i++){
fprintf(output_file, "%d\n",color[i]);
}
194デフォルトの名無しさん:2007/11/26(月) 00:18:48
レスを跨るようならアップローダを使ってくれないかな。
195デフォルトの名無しさん:2007/11/26(月) 00:26:22
アップローダなら半角スペースが残るので、カットアンドペーストできれいなソースが手元にわたりますし。
196デフォルトの名無しさん:2007/11/26(月) 00:30:38
どこの誰が管理してるかわからないようなものを使えるか!
197デフォルトの名無しさん:2007/11/26(月) 00:36:13
ん、それもそうですね。でもアップローダ経由じゃないソースは
私は基本的にはみません。だってめんどくさいから。
198デフォルトの名無しさん:2007/11/26(月) 00:41:44
1レス内に自然に入るなら入れて欲しいけどね。空白を &nbsp; 置換して。
199デフォルトの名無しさん:2007/11/26(月) 00:51:45
新しい宿題のネタになりますでしょうーか。<  変換
200デフォルトの名無しさん:2007/11/26(月) 00:56:28
sed -e 's/&/\&amp;/g' -e 's/^ /\&nbsp;/g' -e 's/  / \&nbsp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g'
201デフォルトの名無しさん:2007/11/26(月) 02:15:24
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):()
===memo.txt===
DATA52/a
DATA52/u
DATA52/chi
=============
とかかれたmemo.txtのファイルがあるとして
そのファイルを読み込み"DATA52/"という
文字列を取り除く.
次にa,u,chiをくっつけてauchiとして表示せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 11/26 12:00
[5] その他の制限:
ちなみに構造体配列を使い、struct tfield tdata[1]を宣言し
tdata[0].filenameに"memo.txt"を格納しているとする。
そのmemo.txtをよみこみ処理してtdata[0].wordとして"auchi"を表示してほしいです。
メンバのfilename,wordはchar型です
202デフォルトの名無しさん:2007/11/26(月) 02:17:18
>>184
これは不思議。
アルゴリズムの名前とかある?
203デフォルトの名無しさん:2007/11/26(月) 02:20:40
>>202
エラトステネスのふるい
204デフォルトの名無しさん:2007/11/26(月) 02:26:06
>>203
まじか……。
調べる数をリストとして扱うと、こういう処理になるのか。
205デフォルトの名無しさん:2007/11/26(月) 07:30:51
ちょ、ふるいってプログラムで素数求めるときに必ずやるもんだろw
206デフォルトの名無しさん:2007/11/26(月) 08:16:47
確かに出てくる確率は多いけど、
ただ単に素数を求めるプログラムを作れって言われたら、
エラトステネスを思いつかなければ、別の手段を使うだろ。
207デフォルトの名無しさん:2007/11/26(月) 08:20:35
可能性ではなく、教養として知っておくべきだろうな。
教養なんて高尚なもんでもない。常識だ。
208デフォルトの名無しさん:2007/11/26(月) 08:21:07
[1] 授業単元: プログラム数学
[2] 問題文(含コード&リンク):sinx は
x - x**3/3! + x**5/5! -x**7/7! + ---- (1)
と級数展開される.
式(1)で7項まで取った場合と組み込み関数で求めたsinxの値の差を,
0度から360度まで,プログラムを作成して求めろ
注意1:式(1)をプログラム化する際に,定義関数を利用し,項数と角度を渡すと値を返すような関数
   を作成のこと.
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン: bcpad
 [3.3] 言語: C++
[4] 期限: 11月26日12:00
[5] その他の制限: 特にありませんが定義関数を使うようです
お願いします
209デフォルトの名無しさん:2007/11/26(月) 08:37:54
>>205
ごめん俺、確率的判定アルゴリズムしか知らない・・・
こういう演習で確率的アルゴリズム書いて提出するとどうなるんだろうな
210デフォルトの名無しさん:2007/11/26(月) 08:56:55
#Define Pi 3.14

double series_sin(double degree,int num){
double radian=degree * Pi/180;
double tmp=0;
for(int i=1;i<=num;i++ ){
tmp+=Pow(-1,i+1)*Pow(radian,i*2-1)/Factorial(i*2-1);
}
return tmp;
}

テストも糞も無いけどこれを修正してmath.hのSinと比べればOK
factorialの演算子がC++にあるかどうかは分からんので。
211デフォルトの名無しさん:2007/11/26(月) 09:15:06
>>145
何を求める問題なのかがさっぱり分からないから
問題を書き直したほうがいい
212デフォルトの名無しさん:2007/11/26(月) 10:28:06
期限過ぎちゃいましたけど、
>47お願いします。
213デフォルトの名無しさん:2007/11/26(月) 11:51:43
>>209
なんで謝るの?
214デフォルトの名無しさん:2007/11/26(月) 14:12:00
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5335.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: なし
[5] その他の制限:なし
215デフォルトの名無しさん:2007/11/26(月) 15:42:30
>>214
#include <stdio.h>
#include <time.h>

void gput(const char *s, int speed)
{
clock_t c;
while(*s) {
putchar(*s++);
c = clock();
while(clock() - c < speed);
}
}
216デフォルトの名無しさん:2007/11/26(月) 15:53:26
[1] 授業単元: プログラミング
[2] 問題文 数字の点数を読んで、クラスの平均点、最低点と最高点を求めるプログラムを書け
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C#なんだけど、ほかのスレタイ調べても頼めないからみんなたのむ。
[4] 期限: 今週の金曜
[5] その他の制限:結構レベルが低いので複雑なプログラムはご遠慮願います。
217デフォルトの名無しさん:2007/11/26(月) 16:20:24
#include<stdio.h>
int main(){
int n;
printf("数字の点数を入力してください ",n);
scanf("%d",&n);
printf("平均点 %d\n",n);
printf("最低点 %d\n",n);
printf("最高点 %d\n",n);
return 0;
}
218デフォルトの名無しさん:2007/11/26(月) 16:28:01
int ClassMenberNum = 1;
219デフォルトの名無しさん:2007/11/26(月) 16:48:02
>>214
while(clock() - c < speed); → while(1000*(clock() - c) / CLOCK_PER_SEC < speed);
220学生:2007/11/26(月) 16:50:23
大学の授業で課題が出ました。初めてプログラミングやるので分かりません。
お願いします。自分は全くの初心者ですお願いします。

【C言語・質問】 以下、課題です。

@課題内容
駐車場のシュミュレーション・課題先リンク
http://www.trpt.cst.nihon-u.ac.jp/processing/2006/parking.html

※貴方自身がコンビニやパチンコ店の管理者となり、
イメージして以下の条件は各自自由な値としてよい。

・駐車場の台数 ・平均駐車時間(s)
・駐車時間の標準偏差(s)・駐車車両発生条件(開始時間 s )
・その時間における発生確率(台/s)・駐車車両発生条件(中間時間 s )
・その時間における発生確率(台/s)

例:パチンコ店
駐車場の台数=200台
来店頻度=400秒に1台
平均駐車時間=120分  等

上記の設定で、グラフも出る様にすること。


A課題の参考場所
http://www.trpt.cst.nihon-u.ac.jp/processing/parkingsim.c
上記の言語がベースになる様です。
221デフォルトの名無しさん:2007/11/26(月) 16:53:28
>>220
ログインできないのでユーザー名とパスワードを教えてください。
222デフォルトの名無しさん:2007/11/26(月) 16:54:27
>>220
>>1のテンプレに則ってください
223学生:2007/11/26(月) 16:57:21
>>221
すみません
ユーザー:1424
PASS:1424
両方同じです。

>>222
すみませんでした。以後注意します
224デフォルトの名無しさん:2007/11/26(月) 16:57:39
>>215
>>219
ありがとう!助かります!
225学生:2007/11/26(月) 17:08:27
テンプレに沿って書き直しました。

[1] 授業単元:情報処理
[2] 問題文:上記に掲載しました。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: bcPad 
 [3.3] 言語: C言語
[4] 期限:本日中
[5] その他の制限: 自分はプログラミング素人です。各文字の意味は知っています

226デフォルトの名無しさん:2007/11/26(月) 17:08:48
[1] 授業単元:C言語(システムコール)
[2] 問題文(含コード&リンク):
10から0までの整数を1秒ごとに表示する親プロセスと子プロセスを生成しなさい。

備考
・fork() を用いること
・getpid() を用いて、親プロセスと子プロセスのプロセスIDを表示すること
・wait() を親プロセスで用いない場合と用いた場合を作成すること
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: なし
[5] その他の制限: なし
227デフォルトの名無しさん:2007/11/26(月) 17:10:30
>>223
大学の鯖に入れって事だろ?
なんか、ギリギリアウトな気がするんだが・・・w
228学生:2007/11/26(月) 17:12:26
>>227
大丈夫です。過去にも依頼した事がありあす。

このページ作っているのは大学院生です。見ていません
229デフォルトの名無しさん:2007/11/26(月) 17:18:01
すげぇなぁ、おいw
230デフォルトの名無しさん:2007/11/26(月) 17:19:11
基本技術者試験とかの設問で、不正アクセスになるのはどれか? という選択肢にありそうだなw
231デフォルトの名無しさん:2007/11/26(月) 17:25:44
不正アクセスでタイーホ
232学生:2007/11/26(月) 17:26:50
>>230
多分不二家ですねw

大学の鯖は、情報処理を履修している学生200名が利用していますよ
233デフォルトの名無し:2007/11/26(月) 17:44:19
[1] 授業単元: プログラム演習
[2] 問題文:入力された正の2整数の最大公約数と最小公倍数を算出する。                   1(異常)
・キーボードからの入力が空の場合は処理を終了する。
・キーボードからの最大入力桁数は4バイトとする。
・キーボードからの入力が4バイトを超える場合は処理を終了する。
・キーボードからの入力が正の整数に変換できない場合は処理を終了する
エラーメッセージ
未入力 :入力されていません、桁あふれ:4文字以下で入力してください、数値以外:半角数字以外入力できません、ゼロ入力:0は入力できません
文字列を正数に変換する関数はatoiを使用。
引数 char data[] 文字列
戻り値 : 正数 エラー値 -1 未入力 -2 桁あふれ -3 数値以外-4 ゼロ入力
最大公約数を算出の関数名はgcdでユークリッドの互除法を使用。
引数 int data1 データ1 int data2 データ2
戻り値 : 最大公約数

最小公倍数を算出する関数名はlcm。最小公倍数を算出する際、最大公約数の関数を使用する。
引数 int data1 データ1 int data2 データ2
戻り値 : 最小公倍数
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 11・27まで
[5] その他の制限: なし
234デフォルトの名無しさん:2007/11/26(月) 18:34:03
>>232
利用者は関係なくてだね
アクセス制限してる以上、君が公開したところで罪になるのは見た人なんだよ
235デフォルトの名無しさん:2007/11/26(月) 19:27:26
好奇心から侵入してしまった俺は2chの歴史に刻まれるのか
236デフォルトの名無し:2007/11/26(月) 19:36:51
1] 授業単元: ぷろぐらむ
[2] 問題文:入力された「対象文字列(s)」の中から、「検索文字列(t)」を検索し、
該当した「対象文字列」の添字を戻り値とする関数「search(s,t)」を作成しなさい。
ただし、「対象文字列」が「検索文字列」を含まない場合には「-1」を戻り値とする。

なお、関数「search(s,t)」は別ファイルに分け(main関数とそれ以外の関数)、
分割コンパイルできるように作成しなさい。
このとき、main関数以外の関数宣言が記述されたヘッダファイルを作成し、
main関数のソースファイルにて利用すること。

  (例) 以下の値で動作した場合は、「3」を返す。
       文字列s = “aababcbaa”
       文字列t = “abc”
入力は最大128バイトとする。128バイトを超える入力があった場合は処理を終了する

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限:11月27日まで
[5] その他の制限: なし

237デフォルトの名無し:2007/11/26(月) 19:44:50
1] 授業単元: プログラミング言語
[2] 問題文:与えられた数字文字列を数値(int型)へ変換する関数 AsciiToIntを、ポインタを使用して作成せよ。
      さらに、この関数を使用し、入力された文字列が実際に数値変換されたことを確認するプログラムを作成せよ。
引数 char *s 文字列のポインタ int *value 変換結果
戻り値 : 結果
文字列が空または8桁以上の場合はエラー値を返す。
文字列が数値に変換できない場合はエラー値を返す。

処理手順
文字列が空または8桁以上の場合はエラー値を返す。
先頭の文字列が符号+/-の場合、それを取り除いた文字列をチェック対象とする。
文字列の桁数を取得。
文字列を読み込んで、以下の処理を行う。
先頭文字列が+/-の場合は、符号情報を保持しておく。また、桁数が1の場合は、エラー値を返す。
ASCIIコードを使用し文字列をチェックし、数値以外であった場合はエラー値を返す。
取得した入力文字列の桁数、読み込んだ数値とその桁数より、数値計算を行う。
計算した結果を合計値に加算する。
入力値がマイナスであった場合、合計値に符号を付加する。
合計値を返す。場合は、エラー値を返す。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語
[4] 期限: 11/27
[5] その他の制限:なし
238デフォルトの名無しさん:2007/11/26(月) 21:16:55
>>216
「読む」の意味がいまいちわからないけどこんなんかな

using System;

class Sample{
public static void Main(){
int[] point = new int[5];
int max=int.MinValue, min=int.MaxValue;
double avg=0.0;
try{
for(int i=0; i<5; i++){
Console.Write("{0}人目の得点->", i+1);
point[i] = int.Parse(Console.ReadLine());
}
for(int i=0; i<5; i++){
if(max < point[i]) max = point[i];
if(min > point[i]) min = point[i];
avg += point[i];
}
Console.WriteLine("最高点:{0}点\n最低点:{1}点\n平均点:{2}点", max, min, avg/5);
}
catch{
Console.WriteLine("なんか例外");
}
}
}
239デフォルトの名無しさん:2007/11/26(月) 21:18:15
[1] 授業単元プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5336.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 11/27
[5] その他の制限: 特になし
240デフォルトの名無しさん:2007/11/26(月) 21:25:29
(1)C言語
(2)問題
・与えられた個数の正の整数を格納している配列のうち、最大となる値を検出して、その値を
格納している配列要素の値を0に書き換える。すると新しい配列においては、もとの配列で
大きい方から数えて2番目の数値が最大値となっている。さらにもう一度、この新しい配列
における最大値を格納している配列要素の値を0に書き換える。するとこの時点でのさらに
新しい配列では、最初の配列において大きい方から数えて3番目の数値が最大となってい
る。このことを利用して、下記のプログラムを作成せよ。
(ここで示した方法は、いわゆる整列(ソーティング)問題の1つの解法となり得るが、効率的
な方法ではない)

 まずメイン関数において、キーボードから正の整数の個数(100以内)を入力し、次いで実
際の数値を配列に入力する。そしてメイン関数はサブ関数に、入力した個数と配列を引数とし
て渡す。
 サブ関数は、これらの配列から、まず1番目に大きい数を見つけて、それを別途設けた配列
の先頭の要素に格納し、次に2番目に大きい数を見つけてこれをこの配列の先頭から数えて
2番目の要素に格納し、という処理を最後の数に至るまで繰り返す。これにより新しい配列に
は大きい数から順に並んでいることになるので、これを引数を利用してメイン関数に渡す。(す
なわちサブ関数は引数を3つ持つことになる。1つはデータの個数を示す変数、1つは入力デ
ータを格納する配列、残りの1つはサブ関数で計算した結果を格納する配列である)
 最後にメイン関数はサブ関数で計算された新配列の値を若い方の要素から順に(即ち大き
い数から順に)画面に表示する。またこの数列の中央値を表示する(中央値に小数が含まれ
る場合は、その小数を切り捨てた整数を表示することとする)。
(3)環境
 (3.1) OS:Windows
 (3.2)コンパイラ名とバージョン: 不明
 (3.3)
 (3.4)C言語
(4)期限 :11月30日
(5)基礎的なことしか習っていないのですがよろしくお願いします。
241デフォルトの名無しさん:2007/11/26(月) 21:35:49
>>236
関数だけ作った
#include <string.h>

int search(const char *s, const char *t);

int search(const char *s, const char *t){
char *p;
p = strstr(s, t);
if(p == NULL)return -1;
return p-s;
}
242デフォルトの名無しさん:2007/11/26(月) 21:41:55
>>241
>入力は最大128バイトとする。128バイトを超える入力があった場合は処理を終了する
この部分の仕様を満たしてなくね?
if ( strlen( s ) > 128 ) exit( 0 );とか追加すればいいだけど。
243デフォルトの名無しさん:2007/11/26(月) 21:44:04
>>242
何ぃ!その部分はmain側だと思ってた!
じゃあそれつけといて下さい
244デフォルトの名無しさん:2007/11/26(月) 22:08:23
>>237
関数だけ作った
valueの使い道がわからなかった

#include <stdio.h>
#include <string.h>
#define ERROR_INT 100000000

int AsciiToInt(char *s, int *value){
int calc = 1, cnt, i, ans=0;
cnt = strlen(s);
if(cnt > 8 || cnt <= 0)return ERROR_INT;
if(*s=='+' || *s=='-'){
calc = *s=='+' ? 1 : -1;
s++; cnt--;
}
if(cnt <= 0)return ERROR_INT;
for(i=0; i<cnt; i++){
if(strchr("0123456789", s[i]) == NULL)return ERROR_INT;
ans = ans*10 + s[i]-'0';
}
return ans * calc;
}
245デフォルトの名無しさん:2007/11/26(月) 22:20:15
>>244
valueに値を格納して返す値は正常or変換結果じゃないか?
「変換結果を返す」ってあるけど、普通は正常or異常を返して
正常ならvalueに変換された値が格納されているって感じだな。
246デフォルトの名無しさん:2007/11/26(月) 22:25:25
>>240
#include <stdio.h>
#define N 10

void subfunc(int cnt, int *num, int *ans){
int i, k, pos;
for(i=0; i<cnt; i++){
for(k=1, pos=0; k<cnt; k++){
if(num[pos] < num[k])pos = k;
}
ans[i] = num[pos];
num[pos] = 0;
}
}

int main(void){
int i, num[N], ans[N], sum=0;
for(i=0; i<N; i++){
printf("%d個目->", i+1);
scanf("%d", &num[i]);
}
subfunc(N, num, ans);
for(i=0; i<N; i++){
printf("%d ", ans[i]);
sum += ans[i];
}
printf("\n中央値:%d\n", sum/N);
return 0;
}
247デフォルトの名無しさん:2007/11/26(月) 22:39:13
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://www.vipper.org/vip677010.txt "sample.txt"というファイルを読み込み、グラフにしたとき山になる点を順番と大きさを"result.txt"に出力するプログラムを書け。
ファイルオープンに失敗した場合は失敗した旨を表示させること。
※[3, 10] [6, 6] [9, 9] をresult.txtに出力できるようになればいいみたいです。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: VisualC++2005ExpressEdition
 [3.3] 言語: C
[4] 期限: 11/27
[5] その他の制限:とくになし


よろしくお願いします。
248デフォルトの名無しさん:2007/11/26(月) 23:24:31
249デフォルトの名無しさん:2007/11/26(月) 23:25:04
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
(1)malloc()を用いて元のリストの構造をコピーしたリストを返すプログラム
※再帰的なプログラムをすること。以下を使用。
MyList *cpMyList(MyList *ptr);
(2)malloc()を用いて元のリストの先頭からn個のnodeをコピーしたリストを
返すプログラム
※nがリスト長より長いときにはそこまでの長さんのリストを返せばよい
※再帰的なプログラムにすること。
MyList *cpnMyList(MyList *ptr, int n);
(3)malloc()を用いて与えられた二つのリストをつなげたリストを返すプログラム
MyList *mergeMyList(MyList *ptr1, MyList *ptr2);
-----------------------------------------
冒頭は以下を使用
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node *next;
} MyList;

[3] 環境  [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語  [4] 期限: 11/28

なにとぞ、よろしくお願いします。。
250デフォルトの名無しさん:2007/11/26(月) 23:29:37
↓第1回、国際ニコニコ映画祭 大賞作品
http://www.nicovideo.jp/watch/sm1493205

はっきりいって糞暴力動画
これでいいのか?ニコニコ動画!??
251128:2007/11/26(月) 23:47:54
>>131>>154
>>132のでは実行してもなぜか何も表示されませんでした。
自分の環境では>>154のプログラムで正しい答えが出ました。
ありがとうございました。

あと数列に直すために色々試したのですができません・・・
これもお願いしていいでしょうか?
252デフォルトの名無しさん:2007/11/26(月) 23:52:10
よくあんな巨大配列で動いたもんだ
253コーンポタージュ:2007/11/27(火) 00:40:29
>>147
追加・変更があるので、改めて掲載します。

【質問テンプレ】
[1] 授業単元:グラフ彩色問題
[2] 問題文
 [2.1]グラフ彩色問題に対する近似解法SEQを作成せよ
 [2.2].頂点を次数の降順にソートした後にSEQを適用するプログラムを作成せよ
 [2.3]グラフ彩色問題に対する近似解法RLFを作成せよ

問題の詳細(pdfなので少々重いです。最後の方のプログラミング課題です)
http://www-2ch.net:8080/up/download/1196004537765593.vEHtcV

サンプルプログラム(これを参考にプログラムを解くそうです)
http://www-2ch.net:8080/up/download/1196004323585273.o4l1bm

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:2007年12月7日
[5] その他の制限:特にありません。

よろしくお願いします。
254デフォルトの名無しさん:2007/11/27(火) 00:42:17
>>249
はいよっと、一応条件満たしてると思うけど

MyList *cpMyList(MyList *ptr)
{
MyList* pRet;

if(!ptr) return NULL;
pRet = malloc(sizeof(MyList));
memcpy(pRet, ptr, sizeof(MyList));
pRet->next = cpMyList(pRet->next);
return pRet;
}

MyList *cpnMyList(MyList *ptr, int n)
{
MyList* pRet;

if(!ptr || n==0) return NULL;
pRet = malloc(sizeof(MyList));
memcpy(pRet, ptr, sizeof(MyList));
pRet->next = cpnMyList(pRet->next, n-1);
return pRet;
}
255デフォルトの名無しさん:2007/11/27(火) 00:42:58
>>249
マージする部分ね

MyList *mergeMyList(MyList *ptr1, MyList *ptr2)
{
MyList* pRet;
MyList* pIdx;

if(!ptr1) return cpMyList(ptr2);
pRet = cpMyList(ptr1);
pIdx = pRet;
while(pIdx->next)
pIdx = pIdx->next;
pIdx->next = cpMyList(ptr2);
return pRet;
}
256デフォルトの名無しさん:2007/11/27(火) 00:51:55
>>249
うっぷろーだがあったんだ、こっちに上げといた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5340.txt
257216:2007/11/27(火) 01:33:08
>>238

すまない・・・せっかくといてもらったんだけど、CじゃなくてC#なんだ・・・。
スレッド自体はCかC++なんだけど、
C#のスレッドがなくてここの住人に頼るしかなくてね・・・。
258デフォルトの名無しさん:2007/11/27(火) 01:45:34
>>247
#include <stdio.h>
main()
{
int x , y, old_x = 0, old_y = 0, a = 0;
char line[1000];
FILE *fin,*fout;
if((fin=fopen("sample.txt","r"))==NULL){
printf("sample.txt can't open.\n");
exit(1);
}
if((fout=fopen("result.txt","w"))==NULL){
printf("result.txt can't open.\n");
exit(1);
}
while(fgets(line,1000,fin)!=NULL){
sscanf(line,"%d,%d",&x,&y);
if(y - old_y >= 0){
old_x = x; old_y = y;
a = 1;
}else{
if (a == 1){
fprintf(fout,"[%d,%d]\n",old_x,old_y);
}
old_x = x; old_y = y;
a = 0;
}
}
fclose(fin);
fclose(fout);
}
259デフォルトの名無しさん:2007/11/27(火) 01:59:18
>>257
大丈夫か?>>238はcscでコンパイル・実行可能だぞ?
260デフォルトの名無しさん:2007/11/27(火) 02:04:02
>>257
むしろ、C/C++じゃコンパイルすら通らないと思うんだが
261デフォルトの名無しさん:2007/11/27(火) 02:43:36
>>254>>255>>256さん
ありがとー!!助かります!
262デフォルトの名無しさん:2007/11/27(火) 02:48:59
次スレからはスレタイにC#も入れとこう。
263デフォルトの名無しさん:2007/11/27(火) 03:05:38
>>258
ありがとうございました。
264デフォルトの名無しさん:2007/11/27(火) 09:17:17
>>220
これは善意の人間を犯罪者にするかのような誘導。
不正アクセスに繋がるから、このページに行く必要は全く無い。
265デフォルトの名無しさん:2007/11/27(火) 09:38:45
>当該アクセス管理者若しくは当該利用権者の承諾を得てする場合は、この限りでない。
正規の利用者からパスワード教えられてアクセスする場合って
不正アクセスになるんだっけ?法律にはうといからよくわからん・・・
266デフォルトの名無しさん:2007/11/27(火) 09:51:00
>>265
そもそも>>220が正規利用者だという確証は一つも無い。
下手をするとhackingを行った犯罪者だということすら考えられる。
そしてそのhackerからpassを教えてもらってアクセスすれば、
我々は立派な犯罪者になってしまう。
267デフォルトの名無しさん:2007/11/27(火) 10:02:58
故意かどうかって関係ないんだっけ?
まぁアクセスしないのが一番確実だけど。
268デフォルトの名無しさん:2007/11/27(火) 10:17:33
>>220が、そのIDとパスワードの所持者"本人"であれば、以下の法律
 不正アクセス行為の禁止等に関する法律
 http://law.e-gov.go.jp/htmldata/H11/H11HO128.html
第四条に該当し"許可を得た"ということになるんだが、本人であるという証明がなされていない。

2ちゃんねるにパスワードを掲載する=Web検索のロボットにキャッシュされる。
それと、ログインした人間のIPや環境情報はサーバーログを見ればすぐに判る。
管理していないとしても、しっかり残るので後で掘り返すことが可能。

逮捕者の実例
 News:速報:“2ちゃんねらー”6人逮捕,不正アクセスで
 http://www.itmedia.co.jp/news/bursts/0109/27/2ch.html

第3者が"権利者の許可なく"そのパスワードでログインした場合は不正アクセス。
269デフォルトの名無しさん:2007/11/27(火) 10:42:40
[-3、3] fx=1/(1+5X^2) 分点10 (n=9)
この条件を使ってラグランジュ補間のプログラムを作れって問題なんですけどさっぱりです。ちなみにC言語です
270デフォルトの名無しさん:2007/11/27(火) 10:44:38
>>269
とりあえず>>1にテンプレートという便利なモノがあるからそれを大いに活用したほうが良い
271デフォルトの名無しさん:2007/11/27(火) 11:16:08
>>253
せめて問題例データくらい作って置いたらどうかな
頂点10で辺数27でしょ、PG作ってデータまで作るとなると、相当な暇人でもやらんと思う
272デフォルトの名無しさん:2007/11/27(火) 11:16:32
>>270
OSはLinux 知識はCとC++なら多少は分かる とにかく提出したらいいので多少自己流で解かれても大丈夫です
273デフォルトの名無しさん:2007/11/27(火) 11:17:46
>>272
質問の仕方も自己流にこだわるのかw
274デフォルトの名無しさん:2007/11/27(火) 11:31:34
数式も自己流だしなあ。せめて人に通じる式で書こうよ。
275デフォルトの名無しさん:2007/11/27(火) 11:48:09
>>269
ラグランジュ補間は、本来、N点のデータが与えられた時、
それらの点を繋ぐことのできるxの多項式の係数を求めるという方法です。
プログラミング以前に、数学的な理解がおろそかだと思われます。
もっと言うと、補間に関するソースは至る所に掲載されています。
それを用いれば簡単に目的は達成できます。
276デフォルトの名無しさん:2007/11/27(火) 11:48:56
え、あれで通じないとは、どんだけ数学弱者なんだよ
俺は解かないけど。
277デフォルトの名無しさん:2007/11/27(火) 11:53:03
>>276
そこまで言ったら解いてやれよw
278デフォルトの名無しさん:2007/11/27(火) 12:02:55
>>277
どこがわかんないか質問してくれれば、その回答はするよ
279デフォルトの名無しさん:2007/11/27(火) 12:12:41
要は難しすぎて僕らには解けません。僕らがわかるのは文字の出力だけです。参りました。
280デフォルトの名無しさん:2007/11/27(火) 12:30:53
>>272 には是非そのままの態度で自分の求める解答を引き出すテクニックを見せてもらいたい
281デフォルトの名無しさん:2007/11/27(火) 12:35:37
つまり>>269は、与えられたfxと範囲から10個の点をまず生成して、
その生成された点からラグランジュ補間を行うxの多項式の係数を求め、
元のfxと比較しろという問題なのか?
282デフォルトの名無しさん:2007/11/27(火) 12:37:24
[授業単元]プログラミング
[問題文]
#include <stdio.h>
#include <math.h>
#define EPS 1e-7 /* 収束判定の許容誤差ε */
/* ★ 関数 f(x) とその導関数 df(x) を定義する*/
int main()
{
int n;
double x, y;
printf("n x f(x)\n");
printf("--- ---------- ----------\n");
n = 0;
x = /* ★ 初期値を設定 */
y = f(x);
printf("%3d %10.7f %10.7f\n", n, x, y);
while (/* ★ |f(x)|<ε となったとき終了 */) {
/* ★ 途中の計算結果も出力するように、適切な位置に printf 文を追加せよ */
n++;
x = /* ★ ニュートン・ラフソン法の漸化式 */
y = f(x);
}
return 0;
}
/* end of kadai_8_sample.c */
方程式 x^3 = 2 の解をニュートンラフソン法で求めよ。
収束判定は |x^3 - 2|<10^-7 とする。
初期値は各自で決める
[os] linux
[言語] c
[期限]本日14:00
宜しくお願いします
283デフォルトの名無しさん:2007/11/27(火) 12:44:23
ごめん。俺が間違ってたわ。もういいわ
284デフォルトの名無しさん:2007/11/27(火) 12:52:30
m < 30000 、n< 16 が与えられたとき、mがnで割り切れるか調べるプログラム
ただし、/や%や10回以上のループは使えない
285デフォルトの名無しさん:2007/11/27(火) 12:54:59
>>284
mの因数分解表をあらかじめ作っておいて判定する
286デフォルトの名無しさん:2007/11/27(火) 12:55:16
訂正
m < 30000 、n< 16 が与えられたとき、mがnで割り切れるか調べるプログラム
ただし、/や%や16回以上のループは使えない
287デフォルトの名無しさん:2007/11/27(火) 12:57:28
別にループが使えないならループを展開しとけば良いだろ
288デフォルトの名無しさん:2007/11/27(火) 12:59:47
>>286
2 ・・・  一の位が2の倍数
3 ・・・  各位の数の和が3の倍数
4 ・・・  ・ 下二桁が4の倍数
 ・ 一の位を2で割った数を十の位に足した数が偶数
5 ・・・  一の位が5の倍数
6 ・・・  2かつ3の倍数
7 ・・・  3桁毎に交互に足したり引いたりしてできた数が7の倍数
8 ・・・  ・ 下3桁が8の倍数
 ・ 一の位を2で割り十の位に足して2で割った数を百の位に足した数が偶数
9 ・・・  各位の数の和が9の倍数
10 ・・・  一の位が0
11 ・・・  各位の数を交互に足したり引いたりしてできた数が11の倍数
12 ・・・  3かつ4の倍数
13 ・・・  7の倍数の判定と同じ
14 ・・・  2かつ7の倍数
15 ・・・  3かつ5の倍数
16 ・・・  下4桁を2で割った数が8の倍数(下4桁を4で割った数が4の倍数

ttp://www004.upp.so-net.ne.jp/s_honma/number/multiple.htm
289デフォルトの名無しさん:2007/11/27(火) 13:01:44
>>288
各位って10進数ですよね どうやってその値をゲットするんですか
290デフォルトの名無しさん:2007/11/27(火) 13:04:47
>>289
Cの文字列で一文字ずつmを取得する
291デフォルトの名無しさん:2007/11/27(火) 13:07:32
>>290
整数を文字列に変換する関数とかは使わないで下さい 
292デフォルトの名無しさん:2007/11/27(火) 13:10:01
>>291
は?後付してんじゃねえよ
293デフォルトの名無しさん:2007/11/27(火) 13:12:38
最初から誤解の余地が無い言い方で訊けってのは無茶だろ。
問題に対する疑問に答える過程で条件を追加するのは当然のことだと思うが。
294デフォルトの名無しさん:2007/11/27(火) 13:13:23
文字列で受け取って、「文字のまま」演算を行うようなプログラムを書けばいい。
たとえば、tasu('A', 'B')の戻り値が'C'になるとか、
kakeru('A', 'B')は'B'とか。
295デフォルトの名無しさん:2007/11/27(火) 13:13:51
テンプレに制限やら書く所まであるのに、完全に無視してそれか?
とっとと帰れ帰れ
296デフォルトの名無しさん:2007/11/27(火) 13:16:36
テンプレの利用は任意だ。
そもそも、答えたくないならお前が黙って帰れよ。
297デフォルトの名無しさん:2007/11/27(火) 13:20:28
だから、文字のまま判定を行うプログラムを書く。そうすれば10進数の演算と同じ。
例えば tasu(char a, char b) なら、

if ((a=='A' && a=='B') || (a=='B' && a=='A'))
  return 'C';

っていう式を延々と書けば、これは10進数の演算と全く同じになる。
298デフォルトの名無しさん:2007/11/27(火) 13:21:20
#include<stdio.h>

int mod(int m, int n)
{
int i, num[16]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};

if(m<0 || n<0) return -1;
for(i=16-1;i>=0;i--)
if(m>=num[i]*n)
m-=num[i]*n;

return m;
}

int main(void)
{
mod(20000, 15);

return 0;
}
299デフォルトの名無しさん:2007/11/27(火) 13:26:53
>>298 サンクス
300デフォルトの名無しさん:2007/11/27(火) 13:33:25
301デフォルトの名無しさん:2007/11/27(火) 13:50:54
>>300
残念、>>296だけ俺だ。
302コーンポタージュ:2007/11/27(火) 15:11:18
>>253

問題例
頂点i に色i mod 6 を割当てるプログラム
•ランダム幾何グラフUn,d を作成
•頂点数n,パラメータd を入力とし,単位正方形[0,1]2内に一様かつ独立にn 個の頂点をランダムに分布させ,距離がd
以下の2頂点間に辺を結ぶ
•各頂点の平均次数がnπd2となることが知られている

問題例のプログラム
http://www-2ch.net:8080/up/download/1196004323585273.o4l1bm
303デフォルトの名無しさん:2007/11/27(火) 15:26:14
うわぁ糞スレ
ニート風情が偉そうにε−(´・`)
304デフォルトの名無しさん:2007/11/27(火) 15:31:12
【質問テンプレ】
[1] 授業単元:プログラム言語2
[2] 問題文:課題A で作成したプログラムを以下のように修正する.
* gcc kadai08b.c でコンパイルすると5パーセントの商品価格だけ表示される.
* gcc -DZEI=*** kadai08b.c でコンパイルすると***パーセントの商品価格だけ表示される.
* gcc -DDEBUG kadai08b.c でコンパイルすると5パーセントの消費税と商品価格が表示される
#include <stdio.h>
#include <stdlib.h>
#define a 5
#define TAX(x,y) (x+y)*a/100
#define PRICE(x,y) (x+y)+(x+y)*a/100
int main(void)
{
int x,y;
printf("tax of x+y %d \n", TAX(x,y));
scanf("%d",&x);
printf("lnput an integer y:");
scanf("%d",&x);
printf("tax of x+y: %d \n",);
printf("price of x+y %d \n", PRICE(x,y));
return0;
}
[3] 環境
 [3.1] OS: (Linux/)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4] 期限: ([2007年11月28日まで]
[5] その他の制限: (Cプリプロセッサぐらいまで)
課題Aはなんとか出来ましたが、課題Bがわからないので、宣しくお願いします。
貼りつけたプログラムは、課題Aが完成したものです。
305デフォルトの名無しさん:2007/11/27(火) 15:40:23
>>304
ついでにいろいろ修正した。

#include <stdio.h>
#include <stdlib.h>

#ifdef ZEI
# define a ZEI
#else
# define a 5
#endif
#define TAX(x,y) (x+y)*a/100
#define PRICE(x,y) (x+y)+(x+y)*a/100

int main(void)
{
  int x,y;
  printf("lnput an integer x:");
  scanf("%d",&x);
  printf("lnput an integer y:");
  scanf("%d",&y);
#ifdef DEBUG
  printf("tax of x+y %d \n", TAX(x,y));
#endif
  printf("price of x+y %d \n", PRICE(x,y));
  return 0;
}
306デフォルトの名無しさん:2007/11/27(火) 15:54:20
修正までありがとうございました。
本当に助かりました。
またの機会がありましたら、よろしくお願いします。
307デフォルトの名無しさん:2007/11/27(火) 16:08:10
[1] 授業単元: C言語
[2] 問題文: 1.正三角形の面積を求めるマクロ定義を作る。一辺の長さをaとする
2.課題1で作ったマクロを使って、1辺の長さが5mの正三角形の面積を求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++2005
 [3.3] 言語:C
[4] 期限:11月28日午後10時まで
[5] その他の制限:特にありません。
よろしくお願いします

308デフォルトの名無しさん:2007/11/27(火) 16:23:12

[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):色々な整数値a,bに対してtを媒介変数として、
座標がx=cos(2πat)、y=sin(2πbt)であらわされる曲線を描くリサージュ関数を作成しなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] Astex(?)
 [3.3] 言語:C
[4] 期限: 2007/11/29 19時
[5] その他の制限: 配列・ポインタの使い方、簡単な数式の入力まで習いました。
どこから手をつけてよいか分かりません。お力添え頂ければと思います。
309デフォルトの名無しさん:2007/11/27(火) 16:24:47
>>307
#include <stdio.h>
#define TRI(a) ((a)*(a)*1.7320508/4.0)
int main( ){ return printf( "%lf\n", TRI(5)); }
310デフォルトの名無しさん:2007/11/27(火) 16:32:04
[1] 授業単元: C言語
[2] 問題文:入力された文字列のそれぞれの文字をカウントし、出現回数と生起確率を表示させよ。
      またそのエントロピーも表示させよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:11月28日午前2時まで。
[5] その他の制限:特にありません。

以前ご教示頂いたのですが、データが壊れてしまいました。
311310:2007/11/27(火) 16:32:53
途中送信orz
何卒よろしくお願いいたします・・・。
312デフォルトの名無しさん:2007/11/27(火) 17:20:20
313デフォルトの名無しさん:2007/11/27(火) 17:59:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
 
 メイン関数において、キーボードから正の整数の個数(100以内)を入力し、次いで実
際の数値を配列に入力する。そしてメイン関数はサブ関数に、入力した個数と配列を引数とし
て渡す。
 サブ関数は、これらの配列から、まず1番目に大きい数を見つけて、それを別途設けた配列
の先頭の要素に格納し、次に2番目に大きい数を見つけてこれをこの配列の先頭から数えて
2番目の要素に格納し、という処理を最後の数に至るまで繰り返す。これにより新しい配列に
は大きい数から順に並んでいることになるので、これを引数を利用してメイン関数に渡す。(す
なわちサブ関数は引数を3つ持つことになる。1つはデータの個数を示す変数、1つは入力デ
ータを格納する配列、残りの1つはサブ関数で計算した結果を格納する配列である)
 最後にメイン関数はサブ関数で計算された新配列の値を若い方の要素から順に(即ち大き
い数から順に)画面に表示する。またこの数列の中央値を表示する(中央値に小数が含まれ
る場合は、その小数を切り捨てた整数を表示することとする)。


[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio .NET 2003
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 12月3日
[5] その他の制限:
現在、関数・ポインターについて学んでるところです。
よろしくお願いします。         
314デフォルトの名無し:2007/11/27(火) 18:03:09
以前236でプログラムをお願いしたものです。
ポインタではなく配列でお願いしたいのですが、もう一度お願いできないでしょうか。
できればmainもお願いします。

[1] 授業単元: プログラム演習
[2] 問題文:入力された「対象文字列(s)」の中から、「検索文字列(t)」を検索し、
該当した「対象文字列」の添字を戻り値とする関数「search(s,t)」を作成しなさい。
ただし、「対象文字列」が「検索文字列」を含まない場合には「-1」を戻り値とする。

なお、関数「search(s,t)」は別ファイルに分け(main関数とそれ以外の関数)、
分割コンパイルできるように作成しなさい。
このとき、main関数以外の関数宣言が記述されたヘッダファイルを作成し、
main関数のソースファイルにて利用すること。

引数 char s[] 対象文字列
char t[]  検索文字列
  (例) 以下の値で動作した場合は、「3」を返す。
       文字列s = “aababcbaa”
       文字列t = “abc”
入力は最大128バイトとする。128バイトを超える入力があった場合は処理を終了する

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限:11月27日まで
[5] その他の制限: なし
315デフォルトの名無し:2007/11/27(火) 18:04:22
[1] 授業単元: プログラム演習
[2] 問題文:入力された正の2整数の最大公約数と最小公倍数を算出する。                   
・キーボードからの入力が空の場合は処理を終了する。
・キーボードからの最大入力桁数は4バイトとする。
・キーボードからの入力が4バイトを超える場合は処理を終了する。
・キーボードからの入力が正の整数に変換できない場合は処理を終了する
エラーメッセージ
未入力 :入力されていません、桁あふれ:4文字以下で入力してください、数値以外:半角数字以外入力できません、ゼロ入力:0は入力できません
文字列を正数に変換する関数はatoiを使用。
引数 char data[] 文字列
戻り値 : 正数 エラー値 -1 未入力 -2 桁あふれ -3 数値以外-4 ゼロ入力
最大公約数を算出の関数名はgcdでユークリッドの互除法を使用。
引数 int data1 データ1 int data2 データ2
戻り値 : 最大公約数

最小公倍数を算出する関数名はlcm。最小公倍数を算出する際、最大公約数の関数を使用する。
引数 int data1 データ1 int data2 データ2
戻り値 : 最小公倍数
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 11・28まで
[5] その他の制限: なし
316デフォルトの名無しさん:2007/11/27(火) 18:06:06
>>310
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int i=0,l,c[256]={0};
char buf[256];
double h=0,p;
scanf("%s",buf);
l=strlen(buf);
for(i=0;i<l;i++)
c[buf[i]]++;
for(i=0;i<256;i++)
if(c[i]>0) {
p=(double)c[i]/l;
printf("\"%c\" %lf\n",i,p);
h-=p*log(p);
}
printf("H = %lf\n",h);
return 0;
}
317デフォルトの名無し:2007/11/27(火) 18:14:32
[1] 授業単元: プログラミング
[2] 問題文:
入力された整数0〜9のn個の文字列に対応したヒストグラムを出力するプログラムを作成せよ。
例:(n個の整数文字列=0050011050)
数値0が6個、1が2個、5が2個の場合、以下のように出力する。

   <出力例>
     a[0] = 6 ******
     a[1] = 2 **
     a[2] = 0
     a[3] = 0
     a[4] = 0
     a[5] = 5 **
     a[6] = 0
     a[7] = 0
     a[8] = 0
     a[9] = 0
ただしキーボードからの入力は最大128バイトとし、それを超える場合129バイト以降のデータはカウントしない。
入力データは半角数字のみとし、全角数字の入力は考えない。

文字列カウント関数 count
引数 char inputdata[] 入力データ
   int outputdata[] 出力データ

算出結果をヒストグラムで描写する関数名 hist
引数 int outputdata[]
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C言語
[4] 期限: 11月28日まで
[5] その他の制限: なし
318デフォルトの名無しさん:2007/11/27(火) 19:46:01
>>313
あなたのいう「さぶ関数」というのは、ひょっとすると「ソート」を行う関数ではありませんか?
ちなみに、c++にはアルゴリズムでsortそのものが存在します。
319デフォルトの名無しさん:2007/11/27(火) 19:51:29
>>318

たぶんそれだと思います。
問題文が長かったので半分にしてしまったのがいけませんでした。

問題の前半分↓

 与えられた個数の正の整数を格納している配列のうち、最大となる値を検出して、その値を
格納している配列要素の値を0に書き換える。すると新しい配列においては、もとの配列で
大きい方から数えて2番目の数値が最大値となっている。さらにもう一度、この新しい配列
における最大値を格納している配列要素の値を0に書き換える。するとこの時点でのさらに
新しい配列では、最初の配列において大きい方から数えて3番目の数値が最大となってい
る。このことを利用して、下記のプログラムを作成せよ。
(ここで示した方法は、いわゆる整列(ソーティング)問題の1つの解法となり得るが、効率的
な方法ではない)


わかるかたお願いします。
320デフォルトの名無しさん:2007/11/27(火) 19:56:51
>>313
#include <stdio.h>

#define N 100

void sub_func(int n, int num1[], int num2[])
{
  int i, j, k, max_index;
  for(i = 0, k = 0; i < n; i++){
    for(j = 0, max_index = 0; j < n; j++)
      if(num1[max_index] < num1[j])
        max_index = j;
    num2[k++] = num1[max_index];
    num1[max_index] = -1;
  }
}

int main(void)
{
  int num1[N], num2[N], i, n;
  scanf("%d", &n);
  for(i = 0; i < n; i++)
    scanf("%d", &num1[i]);
  sub_func(n, num1, num2);
  for(i = 0; i < n; i++)
    printf("%d ", num2[i]);
  printf("\n");
  printf("median = %d\n", (num2[(n - 1)/2] + num2[n/2])/2);
  return 0;
}
321デフォルトの名無しさん:2007/11/27(火) 20:34:00
322デフォルトの名無しさん:2007/11/27(火) 20:51:34
1] 授業単元プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5336.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 11/27
[5] その他の制限: 特になし
323デフォルトの名無しさん:2007/11/27(火) 20:56:29
>>315
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int gcd(int data1, int data2){
  int r;
  while(data2 != 0) r = data1%data2, data1 = data2, data2 = r;
  return data1;
}
int lcm(int data1, int data2){ return data1*data2/gcd(data1, data2);}
int atoi(char data[]){
  int i = 0, ret = 0, len = strlen(data);
  if(len == 0) return -1;
  if(len > 4) return -2;
  if(!isdigit(data[0])) return -3;
  if(data[0] == '0') return -4;
  while(isdigit(data[i])) ret = 10*ret + data[i++] - '0';
  return ret;
}
int main(void){
  int data1, data2;
  char data[128];
  scanf("%127s", data);
  data1 = atoi(data);
  scanf("%127s", data);
  data2 = atoi(data);
  if(data1 == -1 || data2 == -1) return printf("未入力 :入力されていません\n"), 1;
  if(data1 == -2 || data2 == -2) return printf("桁あふれ:4文字以下で入力してください\n"), 1;
  if(data1 == -3 || data2 == -3) return printf("数値以外:半角数字以外入力できません\n"), 1;
  if(data1 == -4 || data2 == -4) return printf("ゼロ入力:0は入力できません\n"), 1;
  return printf("最大公約数 : %d\n最小公倍数 : %d\n", gcd(data1, data2), lcm(data1, data2)), 0;
}
324デフォルトの名無しさん:2007/11/27(火) 20:57:02
atoiがまずいかも……
my_atoiに直して
325デフォルトの名無しさん:2007/11/27(火) 21:07:28
>>317
#include <stdio.h>

void count(char inputdata[], int outputdata[])
{
  char number[] = "0123456789", *p = inputdata, *q;
  while(*p != '\0')
    if((q = strchr(number, *p++)) != NULL)
      outputdata[q - number]++;
}

void hist(int outputdata[])
{
  int i, j;
  for(i = 0; i< 10; i++){
    printf("a[%d] = %d ", i, outputdata[i]);
    for(j = 0; j < outputdata[i]; j++)
      putchar('*');
    putchar('\n');
  }
}

int main(void)
{
  int cnt[10] = {0};
  char buf[129];
  scanf("%128s", buf);
  count(buf, cnt);
  hist(cnt);
  return 0;
}
326デフォルトの名無しさん:2007/11/27(火) 21:55:26
327デフォルトの名無しさん:2007/11/27(火) 22:06:24
[1] 授業単元: c
[2] 問題文(含コード&リンク):
int型の配列要素について、
線形探索を実行する関数を作成しなさい。
結果を確認するmain関数も作成すること。
「ヒント」
int linear_search(int *key, int n, int target)

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: c
[4] 期限: 11/29まで
[5] その他の制限: #defineは、なしで
328デフォルトの名無しさん:2007/11/27(火) 22:12:01
このスレ見てるとBCCやらgccでいいようなもんをVS2005とか使ってやってるのな
もったいない
329デフォルトの名無しさん:2007/11/27(火) 22:26:01
学校なんてそんなもん
330デフォルトの名無しさん:2007/11/27(火) 22:29:47
DOS窓の開き方さえ分からないプログラマがどんどん増えるわけですなぁ
331デフォルトの名無しさん:2007/11/27(火) 22:35:23
>DOS窓
プゲラwwww
332デフォルトの名無しさん:2007/11/27(火) 22:41:54
333デフォルトの名無しさん:2007/11/27(火) 23:28:53
コマンドプロンプトと言えばいいのかね?
334デフォルトの名無しさん:2007/11/27(火) 23:36:27
コンソールとかでいいんじゃね?
世の中BIOSの設定ができないプログラマも多いし、別にDOS窓使えなくてもいいと思う
(さすがに開き方がわからないのはまずいと思うが)
335デフォルトの名無しさん:2007/11/27(火) 23:41:33
プロンプト
>■ ←こんな感じで点滅してるやつのこと

コンソール
大型のコンピュータ(汎用機あるいはメインフレーム)やミニコンピュータに直結され、
運用(運転)目的で操作をするための装置で、コンピュータ・コンソールあるいは単にコンソールともいう。
wikipediaより引用
336デフォルトの名無しさん:2007/11/27(火) 23:42:22
>>335
プゲラwwww
337デフォルトの名無しさん:2007/11/27(火) 23:43:19
なにが"プゲラwwww"だよ
あいつそれしか言えんのかw
338デフォルトの名無しさん:2007/11/27(火) 23:47:59
>>335
わかりにくい一部だけをコピペしてくるくらいなら、リンク貼れよ
339デフォルトの名無しさん:2007/11/27(火) 23:49:07
実体が分かればなんだっていいだろ
340デフォルトの名無しさん:2007/11/28(水) 00:09:07
[1] 授業単元: C言語
[2] ファイルからデータを読み込む
[3] 環境
 [3.1] OS: MacOSX
 [3.2] gcc
 [3.3] 言語: C
[4] 期限:28日中にお願いします。

http://www.uploda.net/cgi/uploader2/index.php?file_id=0000045083.udn
341デフォルトの名無しさん:2007/11/28(水) 00:23:34
>>340 多分 3D の頂点と面のデータだろうから second の後半の 3 の部分には 4 なんかが入る可能性もあるが知らね
#include<stdio.h>
#include<stdlib.h>

int main(void){
double (*first)[3];
int (*second)[4];
long i, first_num, second_num;
FILE *fp=stdin;

fscanf(fp, "%ld", &first_num);
fscanf(fp, "%ld", &second_num);
first=malloc(sizeof(*first)*first_num);
second=malloc(sizeof(*second)*second_num);
if(first==NULL || second==NULL) return 1;

for(i=0;i<first_num;i++)
fscanf(fp, "%lf %lf %lf", &first[i][0], &first[i][1], &first[i][2]);
for(i=0;i<second_num;i++)
fscanf(fp, "%d %d %d %d", &second[i][0], &second[i][1], &second[i][2], &second[i][3]);
/*
printf("%ld\n%ld\n", first_num, second_num);
for(i=0;i<first_num;i++)
printf("%.6f %.6f %.6f \n", first[i][0], first[i][1], first[i][2]);
for(i=0;i<second_num;i++)
printf("%d %d %d %d \n", second[i][0], second[i][1], second[i][2], second[i][3]);
*/
free(first);
free(second);

return 0;
}
342デフォルトの名無しさん:2007/11/28(水) 00:44:42
>>320
本当にありがとうございました。
それにしても、同じ大学の奴がいるみたいで2重カキコみたいになってしまった・・・
軽く確認したつもりだったんだけど・・・以後気を付けます、つか自分で頑張ります。
343デフォルトの名無しさん:2007/11/28(水) 00:55:06
<スタックの課題>
1.番号を保持するint型のno、氏名を保持するchar型配列(19文字入力できるこ  と)nameを持つ構造体dateを作成する。
2.data構造体へのポインタを10個保持する配列をmain関数内に作成する(今回は10個でよいが将来的には増える可能性を考慮してほしい)。
3.push関数により、main関数が持つdata構造体へのポインタを10個保持する配列へ指定された内容を保持したdate構造体を作成(メモリアロケートmalloc関数を利用して動的にメモリ確保)して保持する。ただし、no、nameの入力処理に関してはmain関数で行うことにする。
4.pop関数により、main関数が持つdata構造体へのポインタを10個保持する配列からdata構造体のポインタを取得する。ただし、取得したdata構造体のポインタの指す各メンバno、nameの出力処理に関してはmain関数で行うことにする。
5.main関数内で、1.入力、2.出力、3.終了のメニューを作成し、各番号を入力することにより処理を行うものとする。
6.push関数を行ったときに配列が一杯であれば、データが一杯で入力できないことを伝える。また、pop関数を行ったときに配列が空であれば、データが無いことを伝える。


コンパイラはVC++でC言語の課題です。
問題の意図すら分かりません。
344デフォルトの名無しさん:2007/11/28(水) 01:12:21
問題の意図とは、>>343のような不適格者を落とす事にある。
345デフォルトの名無しさん:2007/11/28(水) 01:15:31
>>343
その課題出した奴はったおしていいかも
記述が曖昧&過剰、明確に指示して欲しいところが曖昧で具体的なものがない、ついでに冗長すぎる説明で分かりづらくしている

やるきがなくなる
346デフォルトの名無しさん:2007/11/28(水) 01:20:05
>>343
freeをしないし、よく分からんな。
347デフォルトの名無しさん:2007/11/28(水) 01:21:01
>>343
とりあえず>>1読んで先にそっち理解しようぜ
348 ◆tsGpSwX8mo :2007/11/28(水) 01:31:33
>>343
#include <stdio.h>
#define size (20)
int sm=0;
struct data{ int no; char name[20]; };

void push(struct data **p, struct data v){
    if(sm<size){ *(p[sm])=v; sm++; }
    else printf("Cannot push data\n");
}

struct data *pop(struct data **p){
    if(sm>0){ sm--; return p[sm]; }
    else{ printf("No pop data\n"); return NULL; }
}

... つづく ...
349 ◆tsGpSwX8mo :2007/11/28(水) 01:32:04
int main(void){
    int i, k;
    struct data *d[size], t, *p;
    for(i=0; i<size; i++)
        d[i]=(struct data*)malloc(sizeof(struct data));
    for(;;){
        printf("-----\n1. input\n2. output\n3. exit\ninput number: ");
        scanf("%d", &k);
        switch(k){
        case 1:
            printf("number, name: ");
            scanf("%d,%19s", &t.no, t.name);
            push(d, t);
            break;
        case 2:
            p=pop(d);
            if(p!=NULL)
                printf("number=%d, name=%s\n", p->no, p->name);
            break;
        case 3:
            return;
        }
    }
}
350 ◆tsGpSwX8mo :2007/11/28(水) 01:32:49
とりあえず書いてみた
わざと変数名を分かりづらくしておいた
351デフォルトの名無しさん:2007/11/28(水) 01:37:01
352デフォルトの名無しさん:2007/11/28(水) 01:38:36
とりあえず>>349には間違いがある。
353デフォルトの名無しさん:2007/11/28(水) 01:43:05
>>352
たぶん構造体のchar[]をコピーし忘れてるとかだと思いたいんだが
構造体ってメモリコピーでなかったっけ?

仕様と違うとかは正直スマン買った
354デフォルトの名無しさん:2007/11/28(水) 01:45:12
テンプレ使わなくて申し訳ないです。

皆さんのソースコードを参考にもう少し頭を捻ってみます。
スタックってもっと簡潔に書けるものだと思ってた・・・。
355デフォルトの名無しさん:2007/11/28(水) 02:03:18
ツンデレ使わなくて〜に見えた
今日はもう寝よう
356デフォルトの名無しさん:2007/11/28(水) 02:05:47
お、おやすみなさい!
357デフォルトの名無しさん:2007/11/28(水) 02:14:13
掲示板の特定のレス番号をスナイプするコードを考えているんですが、
何かヒントとかあったら教えてください。お願いします。
358デフォルトの名無しさん:2007/11/28(水) 02:19:01
>>357
c言語でhttpとかを扱って、それをテキスト解析すればいい。

1.セットしたURLのhtmlファイルを取得する
2.取得したhtmlファイルを解析し、特定の番号の直前を抜き出す(テキスト解析)。
3.特定の番号の直前が不適切なら1.に戻る。
4.目的の番号ならば書き込み動作を行う(たぶんここが面倒くさい)

やることの半分はテキスト解析。
359デフォルトの名無しさん:2007/11/28(水) 03:02:09
[1] 授業単元: プログラミング技術
[2] 問題文(含コード&リンク):
課題1に追加して、リストの先頭ポインタを渡すと、
IDと名前を入力させてリストの適切な位置に挿入する
関数void insert_person(PERSON *)を作成せよ。
・メイン関数から呼び出して、動きを確かめる。
 このとき、clear_personよりも前にinsert_person
 を呼び出すように注意すること。
・IDは重複せず、リストをたどるごとに必ず増加する
 ものとする。また、先頭のIDより小さいIDは挿入
 されないものとする。
(実行例)
ID:5
Name:Mary
ID:24
Name:Alice
ID:-1
1:Jhon
5:Mary
24:Alice
insert_ID:20
Name:Fred
5:Mary
20:Fred
24:Alice
課題1「http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5342.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C
[4] 期限:29日 PM:12時
360デフォルトの名無しさん:2007/11/28(水) 03:03:58
課題1のプログラムはIDと名前を入力し、それをリスト表示するプログラムを
構造体を用いて作成したものです。
361デフォルトの名無しさん:2007/11/28(水) 03:39:23
>>358
レスありがとうございます。
できればソースコードなんかいただけないでしょうか?
すみません....
362デフォルトの名無しさん:2007/11/28(水) 03:46:06
363デフォルトの名無しさん:2007/11/28(水) 03:57:14
>>359
これvoid insert_person(PERSON *)であってる?
void insert_person(PERSON **)とか、
PERSON *insert_person(PERSON *)とかじゃない?
364デフォルトの名無しさん:2007/11/28(水) 09:23:34
【質問テンプレ】
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):初項と交差と表示する素数の順番目を入力しその指定した番目の素数を出す。


初項2、交差3、素数の順番目4
A,17
[3] 環境
 [3.1] OS:vineLinux4.1
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)C言語
[4] 期限: 今日の昼2時まで

どうかお願いします。


365デフォルトの名無しさん:2007/11/28(水) 09:24:40
【質問テンプレ】
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):初項と交差と表示する素数の順番目を入力しその指定した番目の素数を出す。


初項2、交差3、素数の順番目4
A,17
[3] 環境
 [3.1] OS:vineLinux4.1
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)C言語
[4] 期限: 今日の昼2時まで

どうかお願いします。


366デフォルトの名無しさん:2007/11/28(水) 09:25:12
【質問テンプレ】
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):初項と交差と表示する素数の順番目を入力しその指定した番目の素数を出す。


初項2、交差3、素数の順番目4
A,17
[3] 環境
 [3.1] OS:vineLinux4.1
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)C言語
[4] 期限: 今日の昼2時まで

どうかお願いします。


367デフォルトの名無しさん:2007/11/28(水) 09:31:51
うぜえ
368デフォルトの名無しさん:2007/11/28(水) 09:33:18
ポインタで指定した文字列を、配列に代入したいんですがどうしたらいいでしょうか?
369デフォルトの名無しさん:2007/11/28(水) 09:33:11
もしかして新手のAA厨か?
違うか。言うならテンプレ厨?
370310:2007/11/28(水) 09:34:06
310です。>>316の方はありがとうございました!
…が、各出現回数が表示されてないと再提出を喰らってしまいましたorz

このプログラムにどう追加すれば良いのでしょう。
371デフォルトの名無しさん:2007/11/28(水) 09:41:09
>>364
初項と公差によっては解なしになるんだけど、その場合の処理はどうすんの?
372364:2007/11/28(水) 09:48:21
>>371さん
すみません、問題文が抜けてました。
初項<=9307、公差<=346、素数の順番目<=210です。
なんか連投されていてすみません。
373デフォルトの名無しさん:2007/11/28(水) 09:58:11
そういう意味じゃないんだが
374デフォルトの名無しさん:2007/11/28(水) 10:08:50
そおいう場合はエラー表示で大丈夫です
375デフォルトの名無しさん:2007/11/28(水) 10:56:21
何度も申し訳ありません…。
また新たな課題を出されたのですが、これはどうすれば良いのでしょうorz

[1] 授業単元: C言語
[2] 問題文:以下のプログラムに、エントロピーを計算し表示させる行を追加しなさい。

int main(void)
{
char buffer[1024];
unsigned int cnt[256];unsigned int all;
int i;
for(i = 0;i < 256;++i) cnt[i] = 0;
gets(buffer);
for(i = 0;buffer[i]!='\0';++i){
++cnt[(unsigned char)buffer[i]];
}
all = i;
printf("文字 出現数 出現確率\n");
for(i = 0;i < 256;++i)
if(isprint(i)&&cnt[i])
printf(" \"%c\" %4u %7.3f\n\%",(unsigned char)i,cnt[i],cnt[i]*100.0/all);
return 0;
}
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:11月28日午後17時まで。
[5] その他の制限:特にありません。

376デフォルトの名無しさん:2007/11/28(水) 11:26:32
>>238,259,260
これからあとはなんとかがんばるよ。
ありがと!
377デフォルトの名無しさん:2007/11/28(水) 11:43:52
すごい初心者の質問ですみませんが・・・

[1] 授業単元: C言語
[2] 問題文: テキストファイルを読み込んで16進数で表示させる
       コマンドプロンプトから、コマンド名とテキストファイル名、
       1行あたりに表示するバイト数を渡せる事

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C++
[4] 期限:11月28日
[5] その他の制限: 特に無し

よろしくおねがいします
378デフォルトの名無しさん:2007/11/28(水) 13:31:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):いろいろな整数値a,bに対してtを媒介変数として、
座標がx=cos(2πat)、y=sin(2πbt)で表される曲線を描くlisajous関数を作成しなさい。
[3] 環境
 [3.1] OS: Windows
 [3.2] Astex
 [3.3] 言語:C
[4] 期限: 2007/11/30 15時
[5] その他の制限:特にありません。お願いします。
379デフォルトの名無しさん:2007/11/28(水) 15:11:05
[1] 授業単元: 基礎プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5348.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: 2007年11月28日(今日)まで(明日の朝までなら大丈夫かも)
[5] その他の制限:
できれば自分が考えたコードを直して作ってもらいたいです。
基本if文やfor文だけで作っていただけるとありがたいです。
380デフォルトの名無しさん:2007/11/28(水) 15:28:02
>>379
1-3:
for (i = 0; i < N/2; i++) {
 if (a[i] == a[N-1-i]) {
  printf("a[%d] = %d\n",i, a[i]);
 }
}
381デフォルトの名無しさん:2007/11/28(水) 15:32:52
>>379
偶数、奇数は次のようにして判断できる。
if (n % 2 == 0) {
 //偶数
} else {
 // 奇数
}
382デフォルトの名無しさん:2007/11/28(水) 15:37:00
規制かかってるみたいで、書き込みできない。
なので大学のネットからです

>>363
課題1はただのポインタで大丈夫です。(当方の環境では動作確認してあります。)

359を作る上でポインタのポインタにした方が良い場合、変えてもらって大丈夫です。
383デフォルトの名無しさん:2007/11/28(水) 15:37:06
>>379
あと結果を参照するときの配列のindexがおかしい。
n = 5の場合は、a[0]〜a[4]まであって、中央値はa[2]。
n = 6の場合は、a[0]〜a[5]まであって、中央値は(a[2] + a[3])/2.。

一般化すると、
nが奇数の場合は、a[(n-1)/2]。
nが偶数の場合は、(a[(n-1)/2-1] + a[(n-1)/2])/2。

n/2の結果が整数に丸められることを利用すれば、
nが奇数の場合は、a[n/2]。
nが偶数の場合は、(a[n/2-1] + a[n/2])/2。
384383:2007/11/28(水) 15:38:21
なんか所々間違っているが、察してくれ
385デフォルトの名無しさん:2007/11/28(水) 15:40:19
>>379
前半はおまいさんのコードにこれを追加すればいいんでないかな。

/* 1-3 */
for(i=0;i<(N+1)/2;i++){ /* 配列の真中まで */
if(a[i]==a[N-i-1])printf(" %d",i);
}

後半は…結構いいところまで行ってるけど
「つまった」の意味がよくわからん。

とりあえず…
・nasi ってなくても while 抜けてから if(n==0) でいいんじゃ?
・if 文の中の比較のつもりだろうけど全部 = になってる。正しくは ==
・l=1; にしたなら l 使ってあげようよ
・m = n/2 多分これ剰余だよね? % 演算子。
386366:2007/11/28(水) 16:20:33
素早いアドバイスありがとうございます。

3の方のアドバイスをいただいたところや最初の入力された要素での繰り返し判定を直してみました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5349.txt

これで今Windows環境下でコマンドプロンプトでコンパイルして実行したのですが、
負の値を入力するとEnterを押した直後にプログラムのウィンドウが消えてしまいます
387×366→○379:2007/11/28(水) 16:22:32
レス番を間違えてしまいました。すみません。
とりあえず学内のLinuxのPCでも試してみます
388デフォルトの名無しさん:2007/11/28(水) 16:48:49
>>386
>>383は間違ってるってば・・・。正しくは、

一般化すると、
nが奇数の場合は、a[(n-1)/2]。
nが偶数の場合は、(a[n/2-1] + a[n/2])/2。

n/2の結果が整数に丸められることを利用すれば、
nが奇数の場合は、a[n/2]。
389デフォルトの名無しさん:2007/11/28(水) 17:24:21
390389:2007/11/28(水) 17:33:53
    head->next = (PERSON*)malloc(sizeof(PERSON));
    (head->next)->id = id;
    strcpy((head->next)->name, name);
の下に
    (head->next)->next = NULL
を追加
391デフォルトの名無しさん:2007/11/28(水) 19:32:54
>>389-390
ありがとうございます。
ID、名前の挿入は出来てたのですが、適切な位置の検索がやり方が
わからなくてずっと悩んでいました。
実際のプログラム見て納得がいきました、重ねてありがとうございます。
392デフォルトの名無しさん:2007/11/28(水) 19:55:05
>>378
>>312じゃダメなの?
393デフォルトの名無しさん:2007/11/28(水) 21:31:53
#include<stdio.h>
#include<math.h>
main()
{
int x1,x2,x3,y1,y2,y3,pq,qr,rp;

printf("点pの座標を入力して下さい----> ");
scanf("%d %d", &x1, y1);
printf("点qの座標を入力して下さい----> ");
scanf("%d %d", &x2, y2);
printf("点rの座標を入力して下さい----> ");
scanf("%d %d", &x3, y3);

pq=sqrt((x2-x1)^2+(y2-y1)^2);
qr=sqrt((x3-x2)^2+(y3-y2)^2);
rp=sqrt((x3-x1)^2+(y3-y1)^2);

if(((pq^2+qr^2)>rp^2)||((pq^2+rp^2)>qr^2)||((qr^2+rp^2)>pq^2))
printf("鋭角三角形\n");

else{
if(((pq^2+qr^2)=rp^2)||((pq^2+rp^2)=qr^2)||((qr^2+rp^2)=pq^2))
printf("直角三角形\n");
else
printf("鈍角三角形\n");
}
printf("pq=%e\n",qr=%e\n",rp=%e\n");
return(0);
}
ここまで一応自力でやってみたんですけど間違っているようで、課題がまったく進まず困っています。
よろしくよろしくお願いします。
394393:2007/11/28(水) 21:37:54
↑すいません>>393テンプレいれるのわすれました^^;

[1] 授業単元:プログラミング
[2] 問題文(1.平面に点P、点Q、点Rが有ります。この3点
のX座標値とY座標値をキーボードから入力して
下さい。
2.辺PQ、辺QR、辺RPの長さを求め表示して下
さい。
3.鋭角三角形、直角三角形、鈍角三角形かを
判別して下さい。
[3] 環境
 [3.1] OS: (WindowsXP)
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: (Cでお願いします)
[4] 期限: (2007/11/28まで)
よろしくお願いします。
395デフォルトの名無しさん:2007/11/28(水) 21:42:18
>>394
階乗の計算はpow関数を使う。
x^2がしたいならpow(x,2)だ。
396デフォルトの名無しさん:2007/11/28(水) 22:28:45
[1] 授業単元: プログラム演習1
[2] 問題文(含コード&リンク):めいろをとくプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5353.zip
処理するファイルがあるのでうpしました。
問題も一緒に入れてあります。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C言語
[4] 期限:30日まで
[5] その他の制限:
経路を埋めると、めいろが壊れてしまってさっぱりです。
よろしくお願いします
397デフォルトの名無しさん:2007/11/28(水) 22:35:00
[1] 授業単元: c
[2] 問題文(含コード&リンク):
1.要素の表示、挿入、削除、線形探索を行う関数を作成しなさい。

2.リストの先頭(ダミー要素の次)に、3つ以上値を追加し、
キーボードからターゲットを入力して、線形探索を実行しなさい。

3.また探索に成功した要素は先頭に移動し、
表示の関数を使ってリストの内容を確認しなさい。

【ヒント】
・構造体の名前は struct grade とし、新たに glist 型として定義する。
・構造体のメンバは、char name[40]、int score、及びポインタnext。
・動的なメモリの確保を使う、要素の挿入の関数を実行して、値を格納する。
・キーボードからターゲット(点数)を入力し、探索を実行する。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: c
[4] 期限: 11/29まで
[5] その他の制限: #defineは、なしで
お願いします
398デフォルトの名無しさん:2007/11/28(水) 22:49:21
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):1(1から90まで適当に、二次元配列に格納されている数値を小さい順に並べ替えなさい。)
2(scanf で取得した数値を 2 ・8 ・16 進数で出力する関数を含んだプログラムを製作しなさい。
条件 出力する際の変換指定子は「s」とする。(文字列として出力すること。)


[3] 環境
 [3.1] OS: Windows XP SP2
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler
 [3.3] 言語: C言語
[4] 期限: 急ぎで申し訳ないのですが11月30日までよろしくお願いいたします。
[5] その他の制限:初心者です。ポインタはまだ習っていません。できれば簡単なものでお願いいたします。
注文が多くてすいません。
よろしくお願いいたします。
399デフォルトの名無しさん:2007/11/29(木) 00:13:06
>>389-390
あれ?何も出ない、止まらない。
400デフォルトの名無しさん:2007/11/29(木) 00:41:44
>>399
このあたりを参考にすると、たぶん課題の意図に従ったアルゴリズムになる。

(リストへの追加)
「Node *n1」*next⇒「Node *n〜」
↑追加「Node *n2」

n2->next = n1->next;
n1->next = n2;
片方向リストではある要素のポインタが分かっているとき
その後にしか挿入できない。

(リストの検索)
*head ⇒n「value=1」*next⇒「value=5」⇒...⇒「value=2」⇒NULL

Node *n;

for(n=head; n!=NULL; n=n->next){
if(n->value==5) printf("見つかった\n");
}
401デフォルトの名無しさん:2007/11/29(木) 01:06:40
402デフォルトの名無しさん:2007/11/29(木) 01:37:38
>>401
改造元の課題1の説明が不十分でした。
課題1の仕様はIDと名前を読み込んでいってIDに「-1」が入力されたら、
IDと名前を読み込み終えて結果をリスト表示する仕様です。
>>359のはIDに「-1」が入力されたら、IDと名前を読み込み終え、追加したいIDと名前の入力を求めてそれを挿入するアルゴリズムです。
ID:1
Name:kawada
ID:3
Name:sozawa
ID:8
Name:ichigo
ID:-1   (ここでID:に-1を入れるとループを抜けてリストを表示。)
1:kawata
3:ozawa
8:ichigo

>>400
自分にはそのコードの内容が良く分からないので、組み込むのは難しいです。
403デフォルトの名無しさん:2007/11/29(木) 01:45:45
【質問】
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
 コマンドラインから入力された文字列に小文字のアルファベットが含まれていた場合にはすべて大文字に変換し、その文字列を昇順にソートして表示するプログラムを作りなさい。
 また、パラメータ文字数が2つ以上入力されなかった場合には、エラーメッセージを表示させ、終了させること。
-----例1------------------------
program ringo apple Ringo
*** data1 ***
ringoA
apple
ringoB
*** data2 ***
APPLE
RINGOA
RINGOB
--------------------------------
---例2--------------------------
program One
Usage : program STR1 STR2 [STR3 ... ]
--------------------------------

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:VisualC++2005ExpressEdition
 [3.3] 言語:C
[4] 期限:2007年11月30日23:59まで
[5] その他の制限: 制御文、配列、構造体、関数、ポインタ
よろしくお願いします。
404デフォルトの名無しさん:2007/11/29(木) 04:32:21
>>403
> ringoA 
> apple 
> ringoB 
ringoAとringoBはどっからでてきたwwwwwwwwwww


# ringoが2回出てきたからです
→アルファベットで足りない場合はどーすんだろなwwwwwww
405403:2007/11/29(木) 05:27:46
すみません、間違えますた!

正しくは

program ringoA apple ringoB
*** data1 ***
ringoA
apple
ringoB

でやんすm(_ _)m
406デフォルトの名無しさん:2007/11/29(木) 06:02:29
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):
課題1-1
99999 以下の整数の引数をとり、受験番号を C00001 から順に C00002 の ように引数の数だけ発生させ、 さらに各受験番号に対して乱数で発生させ た点数を組み合わせたテストファイルを作るプログラムを作りなさい。
但し、点数は、 0 点から 5 点までを乱数で 20 回発生させ和を取ること で求めなさい。 引数のとりかた、乱数の発生の仕方は付録(http://edu.net.c.dendai.ac.jp/ad/1/2007/huroku.html)を参照のこと。

次に、作成したプログラムを利用して、 100 人分のテストファイルを作成 しなさい。

課題1-2
作成した点数表に対して、手作業で合格最低人数を 20人、40人、60人とし たときの合格最低点と合格人数をそれぞれ求めなさい。
但し、合格最低点とは合格最低人数 20 人であれば、 20 位の点数のことである。また、合格人数とは合格最低点以上を得点している人数のこととする。

なお、手作業の代わりに、表計算ソフトを使用しても良い。但し、表計算ソフトを使用した際は、必ず表の使用方法や、使用した関数の説明を行なうこと。

課題1-3
点数表を読み込み、点数の高い順に出力するプログラムを作成しなさい。プログラムにおいて点数表の容量を制限してはいけない。
コンピュータのメモリが許す限り大きな点数表も表示できること。

次に、作成した点数表に対し、実行した結果を示しなさい。
407デフォルトの名無しさん:2007/11/29(木) 06:03:52
課題1-4合格最低人数を引数にして合格最低点を求めるプログラムを作成しなさい。但し、引数のとりかたは付録を参照すること。
そして、プログラムに対して、作成した点数表と、合格最低人数として、 20 人、40人、60人をそれぞれ与え、合格最低点を求めなさい。

課題1-5合格最低点を引数に取り、受験番号順に合格者リストを表示するプログラムを作りなさい。
そして、 1-4 で得られた 3 種類の合格最低点をそれぞれ与え、合格者リストを作成しなさい。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:mingw-jp
 [3.3] 言語:C++
[4] 期限:2007年12月5日20:00
[5] その他の制限: ファイルの入出力は標準入出力でも、ファイルの入出力でもどちらを使用しても良い。
但し、ファイルの入出力を使う際は、ファイルの非存在などのエラー処理は必ず行うこと。
一文字の処理に、文字列の文字数に比例した時間かかったり、一行の処理に全体の行数分の時間がかかるようなプログラムは大幅に減点します。

よろしくお願いします。
408デフォルトの名無しさん:2007/11/29(木) 06:27:43
[1] 授業単元:C言語
[2] 問題文:次のデータに対して0≦x≦1.4の範囲で、台形公式により面積を求めよ。
      データ http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5355.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 2007年12月1日まで
[5] その他の制限:1.入力はテキストファイルからやると楽
         2.出力はディスプレイ上でOK
お願いします。

409デフォルトの名無しさん:2007/11/29(木) 07:00:01
>>359>>402
やりたいのはこういうことじゃない?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5356.txt
410翔 ◆dkJI/P7Y32 :2007/11/29(木) 12:07:13
[1] 授業単元: C
[2] 問題文 C言語を使ったAタイプスロットマシンの作成。
ベル リプレイ   スイカ    チェリー
枚数 15枚 最遊戯OR3枚  8枚    2枚(角4)
確率 1/5 1/10 1/45 1/8
ボーナス確率
BIG 1/150 REG 1/90
ボーナス中確率と払い出し枚数
ベル リプレイ
枚数 15枚 15枚+JACIN
確率 1/5 4/5

リール配列 be=ベル re=リプレイ su=スイカ ch=チェリー 7=big図柄 3=reg図柄
左 re,7 ,3 ,be,re,su,3 ,ch,be,re,su,3 ,ch,be,re,su,ch,su,be,re,su
中 3 ,7 ,3 ,re,be,ch,ch,re,be,7 ,3 ,re,be,ch,7 ,ch,su,re,be,ch,be
右 3 ,7 ,re,be,su,ch,be,re,su,re,ch,7 ,be,su,re,3 ,re,be,su,be,re
操作方法 矢印↑でベット&レバーオン、←、↓、→で左、中、右リール停止
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:C
[4] 期限: ([2007年12月14日まで]
[5] その他の制限:WINAPIを使って画像を表示する。リール図柄はこちらで用意してあります。
 通常ゲーム、確定から終了まで、JAC中にモジュール分割する。
 通常時は3枚掛け、JAC中のみ1枚掛け。
 これができないと学校卒業できません。本当にお願いします。
411デフォルトの名無しさん:2007/11/29(木) 17:32:08
>>403
#include <stdio.h>
#include <string.h>

void upper(char *str){
for(;*str != '\0';++str) if(*str >= 'a' && *str <= 'z') *str += 'A' - 'a';
}
int main(int argc , char **argv){
int i,j;
char *tmp;

if(argc < 1+2){
puts("Usage : program STR1 STR2 [STR3 ... ]");
return 1;
}
puts("*** data1 ***");
for(i=1;i<argc;++i){
puts(argv[i]);
upper(argv[i]);
for(j=i;j>1&&strcmp(argv[j-1],argv[j])>0;--j){
tmp = argv[j-1];
argv[j-1] = argv[j];
argv[j] = tmp;
}
}

puts("*** data2 ***");
for(i=1;i<argc;++i) puts(argv[i]);

return 0;
}
412デフォルトの名無しさん:2007/11/29(木) 17:34:22
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
任意の個数の点のx座標をxという配列に、y座標をyという配列に格納する。

同じ点があったら、その旨を出力せよ

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: 配列まで習ってます
413デフォルトの名無しさん:2007/11/29(木) 21:58:22
>>406-407
http://edu.net.c.dendai.ac.jp/ad/1/2007/kadai.html
なお、この問題は早々に 2ch に投稿され、既に解答も寄せられています。同じ掲示板に何度も同じ問題を投稿するのはマナー違反ですので、もう新たに 2ch にこの問題を投稿しないようにして下さい。

前スレに書いてあるだろ
何回も聞くな糞が
414 ◆RvgyaT7yVY :2007/11/30(金) 00:36:03
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
次のような構造体struct PRICEがある時,3個の商品名と値段を入力する.
その後,商品名を入力するとその値段を出力するプログラムを作成しなさい.
また,商品名にendと入力するとプログラムを終了するようにしなさい.
 struct PRICE{
 char *name;
 int price;
};
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VC6.0
 [3.3] 言語: C++
[4] 期限: 2007年11月30日23:59
[5] その他の制限:
使用する関数は
malloc()
free()
strcpy()
strcmp()
strlen()
printf(), scanf()
415デフォルトの名無しさん:2007/11/30(金) 01:30:42
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5362.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 2007年11月30日18:00まで
[5] その他の制限:リスト構造の単元なので、リスト(単方向、双方向はどちらでも可能)の制作〜活用が条件となっています
416デフォルトの名無しさん:2007/11/30(金) 02:24:29
>>415
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5363.txt
双方向リストで作った。が、投稿してからミスに気づいたorz

case'd':内 Delnode(root,num); => root=Delnode(root,num);
case'a':内 Addnode(root,line); => root=Addnode(root,line);
以上を変更してください。
417416:2007/11/30(金) 02:38:28
先頭要素の削除を考慮してなかったorz
if(num==1){
p=p->next;
free(p->prev);
return p;
}
Delnodeのfor文の前にこのコードを挿入してください。
418デフォルトの名無しさん:2007/11/30(金) 11:45:14
お願いします。
[1] 授業単元: c
[2] 問題文:一定の文字からなる列sを読み込み、以下の条件を満たす同じ個数の文字からなる列tを出力するプログラムを作りなさい。
ただし、以下で単語とは、空白以外の文字からなる列のこととする。
1、s中の単語は同じ順番でtに現れる。
2、t中では単語は1つの空白に区切られる。
3、t中に最初の単語の最初の文字から最後の単語の文字までは列全体の中央に位置し、前後は空白である。
例えば、文字の列
○This○○○is○○a○○○○good○○○program○○○
を入力すると
○○○○○○This○is○a○good○program○○○○○○
が出力される。
ここで、○は空白をあらわすものとする。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: ASTEC-X 6.0
 [3.3] 言語: c
[4] 期限: 12/13まで
419デフォルトの名無しさん:2007/11/30(金) 12:46:51
>>413
ぬあに、半分以上やっちまった
けっこうショックですなw
420デフォルトの名無しさん:2007/11/30(金) 15:05:50
[1] 授業単元:C++、ニュートンラフソン法、二分法
[2] 問題文(含コード&リンク):下記のURLを参照してください。課題0、1,2です。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc 3.2.2-5 Red Hat Linux  (Borland C/C++)
 [3.3] 言語: できるだけC++でお願いします
[4] 期限: 2007/12/3(月) 
[5] その他の制限: コンストラクタ/デストラクタ、継承などはまだ全然習ってないです


非線形方程式についての問題です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5365.zip



期限は12/3(月)ですが過ぎても募集してますのでどうぞよろしくお願いします
421デフォルトの名無しさん:2007/11/30(金) 21:18:44
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):

3つの数値が配列a[0],a[1],a[2]に入っている。ただし負の値はない。

この中から一番小さい数値の配列の添え字を返す int minimum(double x, double y, double z)を定義せよ。
ただし一番小さい値が0の場合は、0でないもので、最小の添え字を返す。

たとえば a[0]=3.0 a[1]=0.0 a[2]=20.0 とすれば、a[0]が最小となるので、0を返す。

もし3つの値がすべて0だったなら-1を返せ


[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2007/12/1 
[5] その他の制限:
422デフォルトの名無しさん:2007/11/30(金) 21:23:39
引数おかしくね?
423デフォルトの名無しさん:2007/11/30(金) 21:25:42
おかしいな
424デフォルトの名無しさん:2007/11/30(金) 21:55:46
int minimum(double x[]) じゃないのか?
425デフォルトの名無しさん:2007/11/30(金) 22:13:24
[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
char型の文字列で'/'が多数含まれているとする。
その文字列の一番右の'/'のあとにかかれている文字列を表示するプログラムを作れ。

つまり'/home/2th/Cpro/kadai2-1/work2/sando.txt'ならsando.txt
'/home/1th/working/prog.c'ならばprog.c
みたいな感じで。

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2007/12/1の12時まで 
[5] その他の制限:
426デフォルトの名無しさん:2007/11/30(金) 22:32:27
>>421

#include <stdio.h>
#include <float.h> /* DBL_MAXを使う場合だけ */

#define EPS 1e-12 /* double型を==で評価したらだめ。*/

/*
* 全部が0なら-1、そうでなければ前から0,1,2番を返す
*/
int minimum(double x,double y,double z)
{
double min = x+y+z; /* x,y,zは非負なのでそれぞれはx+y+zを超過しない*/
/* なんでもありなら float.hでDBLの最大値をゲットするんだ!!
http://www.cc.kyoto-su.ac.jp/~yamada/programming/float.html
double min = DBL_MAX;
*/

int id = -1;
if( (min >= x) && (x >= EPS) ) { min = x; id = 0;}
if( (min >= y) && (y >= EPS) ) { min = y; id = 1;}
if( (min >= z) && (z >= EPS) ) { min = z; id = 2;}
return id;
}

int main(){
double a[3]={3.0 , 0.0 ,20.0};
/* double a[3]={0.0,0.0,0.0}; */
/* double a[3]={3.0,0.01,20.0}; */
printf ("minimun index = %d", minimum(a[0],a[1],a[2]));
}
427デフォルトの名無しさん:2007/11/30(金) 22:42:59
>>425
#include <stdio.h>

int main(){
char buf[]="/home/2th/Cpro/kadai2-1/work2/sando.txt";
int n;
for(n=strlen(buf);n>=0;n--){
if(buf[n]=='/') break;
}
if(n<0) {
printf("/が含まれない");
}else{
/* 次の一行意味わかる?*/
printf("最後の/以降は『%s』です\n",&buf[n+1]);
/* for文を使って地道に表示しても良い…*/
printf("最後の/以降は『");
for(n=n+1;n<strlen(buf);n++){
printf("%c" , buf[n]);
}
printf("』");
}
}
428デフォルトの名無しさん:2007/11/30(金) 22:50:21
>>412
#include <stdio.h>
#define EPS 1e-6
int main(){
double x[]={1.0 , 1.0 , 3.0 , 1.0 , 1.0};
double y[]={1.0 , 2.0 , 1.0 , 1.0 , 1.0};
int n = 5; /* データ件数 */
int i,j;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if( ( fabs(x[i]-x[j]) < EPS ) && ( fabs(y[i] - y[j]) < EPS) )
printf("id=%dとid=%dは同じ座標\n",i,j);
}
}
}
429デフォルトの名無しさん:2007/11/30(金) 23:32:31
最長共通部分列(LCS)問題について教えてください。

ある座標系が2つ(x1,y1),(x2,y2)が存在して、その座標系に
それぞれ10個の要素があったとします。各要素のx1,もしくはx2座標
とy1,y2座標に重複はないものとします。
要素   1 2 3 10
ex 座標系1・・・(x1,y1)={(4,3),(2,6),(5,9),,,,(10,1)}
座標系2・・・(x2,y2)={(1,5),(7,5),(9,8),,,,(3,4)}

この2つの座標系において要素間の位置関係が等しくなっている全ての要素の
のなかで一番要素数が多いものを割り出す。プログラミングは
どのように組めばいいのでしょうか?よろしく願いします。
430デフォルトの名無しさん:2007/11/30(金) 23:35:38
429です。
C、C++どちらでもかまいません。
431デフォルトの名無しさん:2007/11/30(金) 23:38:40
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
 算術演算子を用いずに、引数x,yの和を返す int add(int x,int y)を定義せよ。
同様に、引数x,yの差を返す int subtract(int x,int y)定義せよ。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler
 [3.3] 言語:C
[4] 期限:12/1 02:00まで
[5] その他の制限:
432デフォルトの名無しさん:2007/11/30(金) 23:43:16
>>396 やるきのない迷路解法。
#include <stdio.h>
int main(){
#if 1
int h = 7, w = 11;char buf[7][12] = {
"+-+-+-+-+-+","S | |","+-+ + +-+ +","| | |","+-+ + +-+ +","| | | | |","+-+-+-+-+G+",};
#else
int h = 201, w = 81;char buf[][82] = {
"+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+",
"S | | | | | | | | | | | | | | | |",
: ちゃんと書いてね。秀丸エディタの置換で正規表現選択+\nを"\n,"にするといい感じ。
"+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+G+",
};
#endif
int i,j,s=1,old_s = -1,wall;char c;
while(s != old_s){
int i,j;old_s = s;
s = 0;
for(i=1;i<h-1;i++){for(j=1;j<w-1;j++){if(buf[i][j] == ' '){
wall = 0; s++;
c = buf[i-1][j];if(c != ' ' && (c != 'S' && c != 'G') ) wall++;
c = buf[i+1][j];if(c != ' ' && (c != 'S' && c != 'G') ) wall++;
c = buf[i][j-1];if(c != ' ' && (c != 'S' && c != 'G') ) wall++;
c = buf[i][j+1];if(c != ' ' && (c != 'S' && c != 'G') ) wall++;
if(wall >=3 ) buf[i][j]='#';
}}}
}
for(i=0;i<h;i++){for(j=0;j<w;j++){printf("%c",buf[i][j]);}printf("\n");}
}
433デフォルトの名無しさん:2007/12/01(土) 00:08:48
>>420
当方で確認した環境は WindowsXP(32bit) / gcc 3.4.4 です。
問題 (0), (1) は使う関数は自由とのことですので、ごく簡単なもので
行いました。 (2) は共通接線を求めるのが難しいのでパスしました。
すみません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5366.txt
434デフォルトの名無しさん:2007/12/01(土) 00:27:12
>>431
当方で確認した環境は、WindowsXP / gcc 3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5367.txt
435デフォルトの名無しさん:2007/12/01(土) 01:34:53
>>418 結果のスペースは分りやすくするため全部アンダーバーに置き換えて出力してます。
#include <stdio.h>
#include <string.h>
#define MAXLINE 80
main()
{
int i=0,j=0,len,spclen;
char *l,line[MAXLINE+1],str1[MAXLINE+1],str2[MAXLINE+1];

printf("文字列入力>");
fgets(line,MAXLINE,stdin);
len = strlen(line);
for(i=0;line[i]!='\0';i++){
if(line[i]!=' ')
str1[j++]=line[i];
if(i>0&&line[i-1]!=' '&&line[i]==' ')
str1[j++]='_';
}
str1[j-2]='\0';
spclen = len - strlen(str1);
for(i=0;i<spclen/2;i++)
str2[i]='_';
str2[i]='\0';
strcat(str2,str1);
for(i=0;str2[i]!='\0';i++);
for(j=0;j<spclen/2;j++)
str2[i++]='_';
str2[i]='\0';
printf("列s=%s列t=%s\n",line,str2);
}
436デフォルトの名無しさん:2007/12/01(土) 01:47:22
[1] 授業単元: 数値システム解析法

[2] 問題文(含コード&リンク):2変数非線形連立方程式の解を求めるnewton-rapson法のプログラムを作成し以下の問題を解け
@x^2+y^2-4=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年12月1日23:00まで]
[5]その他:^は累乗を示します。たとえば、x*x=x^2です。
437デフォルトの名無しさん:2007/12/01(土) 01:56:53
>>431
#include <stdio.h>
int add(int x,int y)
{
int w;
do{
w=x;
x=x^y;
y=(w&y)<<1;
}while(y);
return x;
}
int subtract(int x,int y)
{
int w;
do{
w=x;
x=x^y;
y=((~w)&y)<<1;
}while(y);
return x;
}
int main()
{
int a=7,b=-3;
printf("%d + %d = %d\n",a,b,add(a,b));
printf("%d - %d = %d\n",a,b,subtract(a,b));
return 0;
}
438デフォルトの名無しさん:2007/12/01(土) 03:44:14
(1)C言語
(2)問題
・与えられた個数の正の整数を格納している配列のうち、最大となる値を検出して、その値を
格納している配列要素の値を0に書き換える。すると新しい配列においては、もとの配列で
大きい方から数えて2番目の数値が最大値となっている。さらにもう一度、この新しい配列
における最大値を格納している配列要素の値を0に書き換える。するとこの時点でのさらに
新しい配列では、最初の配列において大きい方から数えて3番目の数値が最大となってい
る。このことを利用して、下記のプログラムを作成せよ。
 まずメイン関数において、キーボードから正の整数の個数(100以内)を入力し、次いで実
際の数値を配列に入力する。そしてメイン関数はサブ関数に、入力した個数と配列を引数とし
て渡す。
 サブ関数は、これらの配列から、まず1番目に大きい数を見つけて、それを別途設けた配列
の先頭の要素に格納し、次に2番目に大きい数を見つけてこれをこの配列の先頭から数えて
2番目の要素に格納し、という処理を最後の数に至るまで繰り返す。これにより新しい配列に
は大きい数から順に並んでいることになるので、これを引数を利用してメイン関数に渡す。(す
なわちサブ関数は引数を3つ持つことになる。1つはデータの個数を示す変数、1つは入力デ
ータを格納する配列、残りの1つはサブ関数で計算した結果を格納する配列である)
 最後にメイン関数はサブ関数で計算された新配列の値を若い方の要素から順に(即ち大き
い数から順に)画面に表示する。またこの数列の中央値を表示する(中央値に小数が含まれ
る場合は、その小数を切り捨てた整数を表示することとする)。
(註)中央値とは数列を大きさの順に並べたときの中央に位置する数の値のことである。ここ
で、もし数列のサイズが偶数であったら、中央の2つの平均値をとって中央値とする。
例:15 80 34 8 48 34 11 28 23 56 19→80 56 48 34 34 28 23 19 15 11 8
(3)環境
 (3.1) OS:Windows
 (3.2)コンパイラ名とバージョン: 不明
 (3.4)C言語
(4)期限 :12月2日
(5)基礎的なことしか習っていないのですがよろしくお願いします。できれば細かい説明もよろしくお願いします。
439デフォルトの名無しさん:2007/12/01(土) 08:58:46
まあそのままかいていけばいいじゃないか
440デフォルトの名無しさん:2007/12/01(土) 09:01:48
[1] 授業単元:C
[2] 問題文(含コード&リンク):
組み合わせの数nCrを定義するプログラムを作成する。
/* combination.c : nCr */
#include <stdio.h>
long factorial (int x)
{ int i;
long f;
i = 0; f = 1;
while (i < x) {
++i; f = f * i; }
printf("factorial called, %3d!=%12ld\n", x, f);
return(f);   }
main()  { 
int n, r;
long ncr;
if (scanf("%d %d", &n, &r) != 2) {
printf("Input 2 intergers\n"); exit(1);  }
if (n > 12) {
printf("Too large n=%d > 12\n", n); exit(1);  }
if (n < r) {
printf("Invalid inputs: n=%d < r=%d < r=%d\n", n, r); exit(1);   }
ncr = factorial(n) / (factorial(r) * factorial(n-r));
printf("n=%d, r=%d, nCr=%ld\n", n, r, ncr);  }
これを参考にしてポインタを利用して値を返さないでつくる。
ヒントは変数を追加、値を返さないのでreturnを使わない。
考えてみたけどわかりません。お願いします。
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (不明)
[4] 期限: (12月4日)
[5] その他の制限: ポインタは最近習いました。
441デフォルトの名無しさん:2007/12/01(土) 09:26:35
>>440
c++でpermutationを使って終り
442デフォルトの名無しさん:2007/12/01(土) 09:38:25
>>436
>>116 と同じですね。@だけなら >>165 が回答です。
Aは計算結果はでしてみたのですが、なんだか答えようのない感じです。
443デフォルトの名無しさん:2007/12/01(土) 09:56:45
>>440
ようするに変数のポインタを引数に追加し、そこのアドレスの値を直接書き換えろ、という問題。
void factorial(int x, long *ret){
:
*ret = f;
return;
}

long t1,t2,t3;
t1 = factorial(n);
t2 = factorial(r);
t3 = factorial(n-r);
ncr = t1 / t2 * t3;

なわけだが、これを

long t1,t2,t3;
factorial(n,&t1);
factorial(r,&t2);
factorial(n-r,&t3);
ncr = t1 / t2 * t3;
にする。
444デフォルトの名無しさん:2007/12/01(土) 10:25:51
[1] 授業単元:データ構造とアルゴリズム1
[2] 問題文(含コード&リンク):doublyll.cpp中の cell_insert関数を完成せよ
cell_insertはデータを小さい順を保持し、新しいセルを挿入する関数
doublyll.cpp:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5368.txt
[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio .NET 2005
 [3.3] 言語:c++
[4] 期限:2007年12月1日11:30まで
[5] その他の制限:(どこまで習っているか)構造体、ファイル処理あたりまで

よろしくおねがいします。
445デフォルトの名無しさん:2007/12/01(土) 11:43:05
[1] 授業単元: C言語
[2] 文字列探索の方法である「Boyer-Moore法(BM法)」をプログラム上で実現する。
[3] 環境
 [3.1] Linux
 [3.2] 不明
 [3.3] C
[4] 12月 1日 18時
[5] 特になし。
BM法参考
ttp://www2.starcat.ne.jp/~fussy/algo/algo7-4.htm

よろしくお願いします。
446デフォルトの名無しさん:2007/12/01(土) 11:52:56
>>445
そのページをコピペすればいいんじゃないの?
447デフォルトの名無しさん:2007/12/01(土) 11:57:04
>>284 = >>298 = >>299 = >>431 = >>437
自演&しったか乙。
448デフォルトの名無しさん:2007/12/01(土) 12:39:48
このスレで自演で解答して、なんかいいことあんのか?
自演で別人演じて解答催促はたまにする人いるみたいだけど。
449デフォルトの名無しさん:2007/12/01(土) 14:52:31
[1] 授業単元:プログラミング言語
[2] 問題文 平行四辺形の2辺a,bとそのなす角θを引数として
      その面積を返却値とする関数areaを作成せよ
[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 12月5日
[5] その他の制限: 特に無し

お願いします
450デフォルトの名無しさん:2007/12/01(土) 15:03:07
#include <math.h>

double area(double a, double b, double theta)
{
return a * b * sin(theta);
}
451デフォルトの名無しさん:2007/12/01(土) 15:12:38
double area(double a,double b,double rad)
{
return 0.5 * a * b * sin(rad);
}
452デフォルトの名無しさん:2007/12/01(土) 15:19:22
平行四辺形だぜ?
453449:2007/12/01(土) 15:28:48
ありがとうございました><

1] 授業単元:プログラミング言語
[2] 問題文 乱数を発生するrandを用いて-1から1までの範囲の
乱数100個を生成するプログラムを作成し、正の数の個数
負の数の個数、総数の3つをディスプレイに表示させなさい。
ただし、乱数はsrand関数を用いて毎回異なる種を用意しなさい。
なお関数randの戻り値は0〜RAND_MAXであることを利用しなさい
      
[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 12月5日
[5] その他の制限: 特に無し

出来ればこちらもお願いします
454デフォルトの名無しさん:2007/12/01(土) 15:33:26
何桁目までおkなのかかいとけお
455453:2007/12/01(土) 15:39:47
>>454
特に指定されていませんでした
適当な桁数でお願いします
456デフォルトの名無しさん:2007/12/01(土) 15:46:16
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int i, p = 0, n = 0;
double d;

srand(time(NULL));
for(i=0; i<100; i++) {
d = 2.0 * rand() / RAND_MAX - 1.0;
if(d> 0) p++;
else if(d<0) n++;
}

printf("正の数:%d 負の数%d 総数:100", p, n);

return 0;
}
457445:2007/12/01(土) 15:55:33
すみません説明欠落でした。
「Boyer−Moore法による文字列の探索で、ヒットした回数を出力するプログラム」
です。
458453:2007/12/01(土) 15:57:05
>>456
本当にありがとうございました!!
助かりました><
459デフォルトの名無しさん:2007/12/01(土) 19:45:33
>>448
難しくて、自分だけが知っていそうな質問を出して、
回答者が間違う様、解けない様を見て喜ぶ。
さらに、自分で正解を書き込んで自分の優秀さをアピールし、悦に入る。
460デフォルトの名無しさん:2007/12/01(土) 19:48:37
284や431はそんなレベルの問題じゃないだろw
461デフォルトの名無しさん:2007/12/01(土) 19:53:33
>>436
それもう締め切りすぎたろwww
M先生乙!
462デフォルトの名無しさん:2007/12/01(土) 19:55:53
適度に難しい問題は大歓迎だ
自演でも別に構わない
463デフォルトの名無しさん:2007/12/01(土) 20:07:38
[1] 授業単元: アルゴリズム演習
[2] 問題文(含コード&リンク):

a からスタートし、乗算のみを用いて a^n を高速に計算したい。
(たとえば a^8 ならば
 a^1 * a^1 = a^2、a^2 * a^2 = a^4、 a^4 * a^4 = a^8
と計算することで、3回の乗算で計算することができる。)

n ≦ 4000 が与えられたとき、a^n を計算する最小の乗算回数を求めよ。

[3] 環境
 [3.1] OS: Windows (cygwin)
 [3.2] コンパイラ名とバージョン: gcc4
 [3.3] 言語: どちらでも可
[4] 期限: 12月3日
[5] その他の制限: 特になし
464420:2007/12/01(土) 20:07:43
>>433
超ありがとうございます!
一応自分でも作ってはみたのですがあってるかどうか・・・


>>462
もしよければ>>420の課題2をお願いできませんか?
参考、もしくは改変だけでできそうなら以下のものをお使いください





>>433の方から解いてもらった課題0、1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5366.txt


以下は自作です
課題0
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5370.txt
課題1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5371.txt
465デフォルトの名無しさん:2007/12/01(土) 20:32:34
>>463
#include <stdio.h>

int main(void)
{
int i, j, cnt, n;

scanf("%d", &n);

for(i=0, j=1, cnt=0; j<=n; i++, j<<=1) if(j&n) cnt++;

cnt += i - 2;

printf("%d", cnt);

return 0;
}
466デフォルトの名無しさん:2007/12/01(土) 20:47:17
>>463
#include <stdio.h>

int main(void){
int i, n;

scanf("%d", &n);
for(i=0,n--;n>0;i++,n>>=1);
printf("%d", i);

return 0;
}
467デフォルトの名無しさん:2007/12/01(土) 21:11:35
>>466
n = 7 のとき 3 と出力されますが、間違っています。
正しくは 4 のはずで、以下がその手順です。
 a * a = a^2,
 a^2 * a^2 = a^4,
 a^4 * a^2 = a^6
 a^6 * a = a^7

>>465
n = 63 のとき 10 と出力されますが、間違っています。
正しくは 8 のはずで、以下がその手順です。
 a * a = a^2
 a^2 * a^2 = a^4
 a^4 * a^4 = a^8
 a^8 * a^8 = a^16
 a^16 * a^4 = a^20
 a^20 * a^1 = a^21
 a^21 * a^21 = a^42
 a^42 * a^21 = a^61
468デフォルトの名無しさん:2007/12/01(土) 21:12:22
最後の行を間違えました。 a^42 * a^21 = a^63 です
469デフォルトの名無しさん:2007/12/01(土) 22:08:55
>>467
別に自演でもいいけど、
お前は気持ち悪いな。
470デフォルトの名無しさん:2007/12/01(土) 23:09:22
そういや、昔、>>463に似た問題で
「ある金額Aを日本の硬貨・紙幣を使って支払うときに
 硬貨・紙幣の枚数が最小になる支払い方を計算せよ。
 ただし、再帰やループは使用禁止」
とかいう宿題があったな。

絶対無理だと思ったけど、
結局、誰かが回答出してきて、
世の中、すごいやつはいるなあ、と思った記憶がある。
471デフォルトの名無しさん:2007/12/01(土) 23:17:07
>>470
全然似てないしかなり簡単
昔解いた事があるけど1分も掛からなかった
違う問題じゃない?

#include<stdio.h>
#include<math.h>
int main()
{
int x500,x100,x10;
int money_buf=0;
scanf("%d",&money_buf);
x500=money_buf / 500;
money_buf = money_buf % 500;
x100=money_buf / 100;
money_buf = money_buf % 100;
x10 =money_buf / 10;

if(x500) printf("500円硬貨は%d枚\n",x500);
if(x500) printf("100円硬貨は%d枚\n",x100);
if(x500) printf("10円硬貨は%d枚\n",x10);
return 0;
}
472デフォルトの名無しさん:2007/12/01(土) 23:36:01
>>471
ああ、じゃあ、違う問題なんだろうね。
473デフォルトの名無しさん:2007/12/02(日) 00:34:40
>>470
>絶対無理だと思ったけど
プッ
474デフォルトの名無しさん:2007/12/02(日) 01:00:16
【質問テンプレ】
[1] 授業単元:C/C++
[2] 問題文
テキストファイルを読みこませて
指定された行にある文字列を持ってきて表示する。
例:20行目指定
20行目:A034 59
[3] 環境
[3.1] OS: WindowsXP
[3.2] mingw-jp
[3.3] 言語:C/C++/どちらでも可できればC++
[4]期限:12月4日まで
[その他]なし

よろしくお願いします。
475デフォルトの名無しさん:2007/12/02(日) 01:03:36
#include <stdio.h>
int main()
{
char buf[1000];
FILE * fp = fopen("テキストファイル", "r");
for (int ic = 0; ic < 20; ++ic) fgets(buf, sizeof(buf), fp);
fputs(buf, fp);
return 0;
}
476デフォルトの名無しさん:2007/12/02(日) 01:41:17
477デフォルトの名無しさん:2007/12/02(日) 02:20:47
>>476
n = 9 のとき 5 と出力されますが、間違っています。
正しくは 4 のはずで、以下がその手順です。
 a^1 * a^1 = a^2
 a^2 * a^2 = a^4
 a^4 * a^4 = a^8
 a^8 * a^1 = a^9
478デフォルトの名無しさん:2007/12/02(日) 05:59:19
>>463
#include <stdio.h>
int f(int n)
{
int i, j, cnt;
for(i=0, j=1, cnt=0; j<=n; i++, j<<=1) if(j&n) cnt++;
return cnt + i -2;
}

int main(void)
{
int n, cnt, d = 0;
scanf("%d", &n);
cnt = f(n);
while(n%3==0) {
d += 2;
n/=3;
if(d + f(n) < cnt) cnt = d + f(n);
}

printf("%d", cnt);

return 0;
}
479デフォルトの名無しさん:2007/12/02(日) 07:22:30
>>477
a^1 * a^1 = a^2
a^1 * a^2 = a^3
a^3 * a^3 = a^9

おい、てめーが間違ってんぞ
480デフォルトの名無しさん:2007/12/02(日) 07:39:34
481デフォルトの名無しさん:2007/12/02(日) 08:56:04
>>470
硬貨・紙幣なら簡単
不規則な数字群だと面倒になる
482デフォルトの名無しさん:2007/12/02(日) 09:25:44
>>479
>a^3 * a^3 = a^9
483デフォルトの名無しさん:2007/12/02(日) 09:50:53
>>479
逝ってよし
484デフォルトの名無しさん:2007/12/02(日) 10:41:01
>>478
n = 23 のとき 7 と出力されますが、間違っています。
正しくは 6 のはずで、以下がその手順です。
 a^1 * a^1 = a^2
 a^2 * a^2 = a^4
 a^4 * a^1 = a^5
 a^5 * a^4 = a^9
 a^9 * a^9 = a^18
 a^18 * a^5 = a^23
485デフォルトの名無しさん:2007/12/02(日) 11:01:47
[1] 授業単元: 言語処理

[2] 問題文(含コード&リンク):
単語のファイルword_1.txt
niconico
video
smile
単語のファイルword_2.txt
caps
shift
の2つの使って次のようなファイルを作るプログラムを作れ
1 niconico caps
2 niconico shift
3 video caps
4 video shift
5 smile caps
6 smile shift

単語と単語の間は\tです。一番左の数字は1からスタートしてください。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: ([2007年12月2日23:00まで]
[5]その他:

486デフォルトの名無しさん:2007/12/02(日) 11:22:56
>>485
#include <stdio.h>
#define N 3
#define L 10
int main() {
  char dic1[N][L], dic2[N][L];
  int i, j, k = 0, n = 0, m = 0;
  FILE *fp1 = fopen("word_1.txt", "r");
  FILE *fp2 = fopen("word_2.txt", "r");
  for (; fscanf(fp1, "%s", dic1[n]) == 1; ++n);
  for (; fscanf(fp2, "%s", dic2[m]) == 1; ++m);
  for (i = 0; i < n; ++i) 
    for (j = 0; j < m; ++j) 
      printf("%d\t%s\t%s\n", ++k, dic1[i], dic2[j]);
}
487デフォルトの名無しさん:2007/12/02(日) 12:15:23
>>451
馬鹿だろお前
488デフォルトの名無しさん:2007/12/02(日) 12:17:13
>>487
よく言われる
489デフォルトの名無しさん:2007/12/02(日) 12:20:58
[1] 授業単元 プログラミング
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5376.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 12/4
[5] その他の制限: 特になし
490デフォルトの名無しさん:2007/12/02(日) 13:19:39
int time2sec(struct mytime now) { return (now.hour * 60 + now.minute) * 60 + now.second; }
void print_mytime(struct mytime now) { printf(" %d 時間 %d 分 %d 秒", now.hour, now.minute, now.second); }

printf("時間:");
scanf("%d", &ti.hour);
printf("分:");
scanf("%d", &ti.minute);
printf("秒:");
scanf("%d", &ti.second);
491デフォルトの名無しさん:2007/12/02(日) 14:38:53
>>485
軽犯罪のにおいがプンプン漂ってくる
492デフォルトの名無しさん:2007/12/02(日) 14:42:13
書き手が居ないのこっちで募集してみる

新ジャンル『アルゴリズム女』
http://yutori.2ch.net/test/read.cgi/news4vip/1196506706/

サンプル、稚拙でスマン
/*------------------------------------------------------------------------------*/
男「御昼何食べる?」
女「:end; if ( FALSE == errlavele ) { GOTO step1; } else { GOTO step2; } 」
男「スパゲッティでいいか?」

/*------------------------------------------------------------------------------*/
女「while ( sub() ) { sex(); sex(); sex(); sex(); sex(); sex(); }」
男「くはっこのスキモノめ、オレ体力もつかな♪」
女「sub(){ exit(-1); } 」
493デフォルトの名無しさん:2007/12/02(日) 14:46:44
>errlavele

……
494デフォルトの名無しさん:2007/12/02(日) 15:10:34
VIPのプログラミングスレで宣伝してろよ
495デフォルトの名無しさん:2007/12/02(日) 16:37:49
>>463
計算量に関する制限はある?
496デフォルトの名無しさん:2007/12/02(日) 17:24:25
[1] 授業単元:基礎プログラミング
[2] 問題文:(度、ラジアン、Asin、Acos、Asin+Acosの関
数表を2次元配列を用いて作成
 Aの値は100
 計算する角度は0度から360度で、角度の
増加分は30度
[3] 環境
 [3.1] OS: (Windowsxp)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 )
 [3.3] 言語: (C)
[4] 期限: (12月6日まで)
[5] その他の制限: (配列名  f_t[  ] [  ]
 度、ラジアン、Asin、Acos、Asin+Acosの値
を画面に表示
)
よろしくお願いします。
497463:2007/12/02(日) 17:25:02
>>495
なんだか回答を知っているように見える書き込みになってしまっていますが、
この問題は演習の問題として出たもので、質問者は正解を知りません。

なので、n ≦ 4000 を現実的に解ければ計算量はどうでもよいです。
多項式ないしは非常に小さな数のべき乗ならうれしいですが。
498デフォルトの名無しさん:2007/12/02(日) 19:15:32
字句解析のプログラムの一部分を作れという課題が出されて全く分かりません
誰か↓の関数を作っていただけないでしょうか?。お願いします

char nextChar(char line[], int *lineindex)
{
char ch=line[*lineindex];
if ((ch=='\n') || (ch==0XD) || (ch=='\0')) return('\0');
else {
(*lineindex)++;
return(ch);
}
}

/* char getToken(char line[], int *lineindex, char *str)
文字列lineからトークンを1つ読み出して,文字列strに書き込む.
トークンは' '(空白)または','(カンマ)または'\t'(タブ))で区切られた文字列である.
トークンの文字列の最大値はTOKENSIZE 
戻り値 文字数
    0(文字列が空(先頭が\0)の場合) */
//
(* ここに解答を書き加える *)

/* int tokenizer(char line[], token token[])
文字列lineをトークンに分解して,各token[]のdataに格納する.
トークンは' '(空白)または','(カンマ)で区切られた文字列である.
トークンの文字列の最大値はTOKENSIZE 
戻り値 トークンの数(非負)
    -1(エラーの場合) */
//
(* ここに解答を書き加える *)
499デフォルトの名無しさん:2007/12/02(日) 19:36:07
>>498
テンプレ(>>1を参照)に従って書いていただけないでしょうか?。お願いします
500デフォルトの名無しさん:2007/12/02(日) 19:43:07
すいません

[1] 授業単元:プログラミング
[2] 問題文:字句解析のプログラムの一部分の関数を完成させよ
#include <stdio.h>
#include "token.h"

char nextChar(char line[], int *lineindex)
{
char ch=line[*lineindex];
if ((ch=='\n') || (ch==0XD) || (ch=='\0')) return('\0');
else {
(*lineindex)++;
return(ch);
}
}

/* char getToken(char line[], int *lineindex, char *str)
文字列lineからトークンを1つ読み出して,文字列strに書き込む.
トークンは' '(空白)または','(カンマ)または'\t'(タブ))で区切られた文字列である.
トークンの文字列の最大値はTOKENSIZE 
戻り値 文字数
    0(文字列が空(先頭が\0)の場合) */
//
(* ここに解答を書き加える *)

501デフォルトの名無しさん:2007/12/02(日) 19:43:38
/* int tokenizer(char line[], token token[])
文字列lineをトークンに分解して,各token[]のdataに格納する.
トークンは' '(空白)または','(カンマ)で区切られた文字列である.
トークンの文字列の最大値はTOKENSIZE 
戻り値 トークンの数(非負)
    -1(エラーの場合) */
//
(* ここに解答を書き加える *)


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: 特になし
502 ◆pgRmgTWjLw :2007/12/02(日) 20:43:50
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):1〜10の範囲の乱数値を持つ要素数20の配列を、基本交換法(バブルソート)を用いて、
小さい値に整列するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C言語
[4] 期限:2007年12月02日22:30まで
[5] その他の制限:
503デフォルトの名無しさん:2007/12/02(日) 20:51:16
>>497
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5379.cpp
とりあえず反復深化+枝刈り。
計算量は多分O(n^(k*log log n))くらいで、実質多項式時間だと思うけど、
n=3583で30秒くらい掛かる。もっとマシな方法があるかも。
504デフォルトの名無しさん:2007/12/02(日) 21:25:18
>>503
n=4000を試さないのは、止まらないからかなー?
505デフォルトの名無しさん:2007/12/02(日) 21:26:18

女の子をナンパしたいなら、まずはネットナンパから!
出会いやすいサイトから攻めていきましょう。
↓↓↓
【即会いサイト in ブログ】
http://deaigets.blog97.fc2.com/
〜管理人が実際に出会えている完全無料サイトのみ紹介しています〜

「最近の出会い系サイトの短期攻略方法」
・自分にあったサイトを2〜3個ぐらい選ぶ。
・30〜50通のメールを拡散発射!
・返信メールの振り分け作業。(サクラ排除)
・候補女の子と携帯メアド交換
・女の子と面接
この作業をしているだけで一週間で2〜3人と会えます。
506デフォルトの名無しさん:2007/12/02(日) 21:26:26
>>504
n=4000は0.004秒で返ってくる
507デフォルトの名無しさん:2007/12/02(日) 21:34:19
>>502
こんな感じ・・・だと思う、変数名は適当・・・

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MAX_SIZE 20
#define MAX_RAND 10
#define MIN_RAND 1
int main(){
int randList[MAX_SIZE];
srand((unsigned int)time(NULL));
for(int i = 0; i < MAX_SIZE; i++ ){
randList[i] = rand() % MAX_RAND + MIN_RAND;
}
for(int i = 0 ; i < MAX_SIZE; i++ ){
for(int j = MAX_SIZE - 1;j > i ; j-- ){
if( randList[i] > randList[j]){
int tempData = randList[i];
randList[i] = randList[j];
randList[j] = tempData;
}
}
}
for(int i = 0; i < MAX_SIZE; i++ ){
printf("randList[%d] = %d\n", i, randList[i]);
}
return 0;
}

508デフォルトの名無しさん:2007/12/02(日) 21:50:21
いきなり質問してすいませんが、int a に配列(data1[0])のアドレスを入れたい場合は
a=&data1[0]; でよろしいのでしょうか?
これをするとエラーが出てしまうのですが・・・
509デフォルトの名無しさん:2007/12/02(日) 21:54:24
>>508
a=(int)&data1[0];
510デフォルトの名無しさん:2007/12/02(日) 21:55:56
>>508
a=reinterprit_cast<int>(&data1[0]); かな?
511デフォルトの名無しさん:2007/12/02(日) 21:58:31
>>508
ここ質問スレじゃないよ
512 ◆pgRmgTWjLw :2007/12/02(日) 22:00:03
>>507
ありがとうございます。

[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):1〜100,000の範囲の乱数値を持つ要素数100,000の配列を、基本挿入法を用いて、
小さい順に整列する各プログラムの実行時間を計測し、表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語:C言語
[4] 期限:2007年12月03日00:00まで
[5] その他の制限:
513デフォルトの名無しさん:2007/12/02(日) 22:14:43
>>463
下のような木を作ればいい。

i番目の深さのノードを作るには、
・i-1の値を2倍し、1つのノードの値とする
・0からi-2のノードを辿り、その値をi-1のノードの値とそれぞれ足し、i-1個のノードのそれぞれの値とする
・作成したノードの値を検索し、既出ならそのノードは削除する


0  1  2  3  4

1─2┬4┬8┬16
    │ │ ├12
    │ │ ├8
    │ │ └9
    │ ├6┬(12)
    │ │ ├10
    │ │ ├(8)
    │ │ └7
    │ └5┬(10)
    │    ├(9)
    │    ├(8)
    │    └(7)
    └3┬(6)
      ├(5)
      └(4)
514デフォルトの名無しさん:2007/12/02(日) 22:17:42
>>511すいませんでした、あと教えてくださった方ありがとうございました。
515デフォルトの名無しさん:2007/12/02(日) 22:30:08
>>512
時間かかるから100, 100でしかデバッグしてないけど

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MAX_SIZE 100000
#define MAX_RAND 100000
#define MIN_RAND 1
int main(){
int randList[MAX_SIZE];
srand((unsigned int)time(NULL));
for(int i = 0; i < MAX_SIZE; i++ ){
randList[i] = rand() % MAX_RAND + MIN_RAND;
}

for(int i = 0 ; i < MAX_SIZE; i++ ){
for(int j = i; j > 0 && randList[j - 1] > randList[j]; j-- ){
int tempData = randList[j];
randList[j] = randList[j - 1];
randList[j - 1] = tempData;

printf("readLine[%d] : time: %d, readLine[j - 1] = %d, readLine[j] = %d\n", i, clock(), randList[j - 1], randList[j] );
}
}
printf("**************************************************************\n");
for(int i = 0; i < MAX_SIZE; i++ ){
printf("randList[%d] = %d\n", i, randList[i]);
}
return 0;
}
516デフォルトの名無しさん:2007/12/02(日) 22:34:06
>>513
うだうだ言わずに実装してごらん
517デフォルトの名無しさん:2007/12/02(日) 22:34:59
>>463
0回目の乗算で作れるのが1種類、
1回目の乗算でも1種類
2回目では2種類、
3回目では3種類、
4回目では5種類、
5回目では8種類。
ということで、a回目で作れる数字の種類は 1, 1, 2, 3, 5, 8, ... という激しく既出の数列になってる
518デフォルトの名無しさん:2007/12/02(日) 22:42:08
>>516
まあそうあわてるな
一刻も早く完成品を見たい気持ちはわかるが、
アルゴリズムを考えてから30分だけじゃ
実装の完成はオレには無理だ
しばし待て
519デフォルトの名無しさん:2007/12/02(日) 22:42:22
>>513
実装してみたがダメだった
値が既出だからと言って切って良いとは限らない
例えばn=15のときは1-2-4-5-10のルートが必要
520デフォルトの名無しさん:2007/12/02(日) 22:42:56
>>497
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5380.cpp

503 とほとんど同じ(ID+枝刈り)。ただし、入れてる枝刈りが違う。
521デフォルトの名無しさん:2007/12/02(日) 23:23:02
>>515
感謝です。

[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):1〜100,000の範囲の乱数値を持つ要素数100,000の配列を、基本交換法(バブルソート)、基本挿入法、
基本選択法を用いて、小さい順に整列する各プログラムの整列必要な実行時間を計測し、表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:LINUX
 [3.3] 言語:C言語
[4] 期限:2007年12月03日01:00まで
[5] その他の制限:
522デフォルトの名無しさん:2007/12/02(日) 23:44:34
一回に全部書けよ・・・
523デフォルトの名無しさん:2007/12/03(月) 00:22:38
>>474
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#include <algorithm>
#include <stdexcept>
using namespace std;

struct Line { string str; };

istream& operator >> (istream& is, Line& line) {
    return getline(is, line.str);
}
ostream& operator << (ostream& os, const Line& line) {
    return os << line.str;
}

int main() {
    vector<Line> lines;
    copy(istream_iterator<Line>(cin), istream_iterator<Line>(), back_inserter(lines));
    try {
        cout << lines.at(19) << endl;
    }
    catch (out_of_range&) {
        cout << "none" << endl;
    }
}
524474:2007/12/03(月) 01:41:06
>>475
>>523
助かります。
どうもありがとうございました。
525デフォルトの名無しさん:2007/12/03(月) 02:19:16
#include <stdio.h>

main(){

char a[]={78,85,76,76,80,79,10};
printf("%s",a);
}

の実行結果を答えよ
526デフォルトの名無しさん:2007/12/03(月) 02:21:20
[1] 授業単元: アルゴリズム
[2] 出席番号と点数を読み込ませるプログラムを書いてみたのですが
プログラムにおいて点数表の容量を制限はなし。
コンピュータのメモリが許す限り大きな点数表も表示。
という条件ができません。
どういうこと書き足せばいいかお願いします。
↓書いたプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5386.txt
 [3] 環境
 [3.1] OS: (WindowsXP
 [3.2] mingw-jp
 [3.3] 言語: (C/C++/どちらでも可
527デフォルトの名無しさん:2007/12/03(月) 02:35:44
std::listを使ってやれよ
528デフォルトの名無しさん:2007/12/03(月) 02:52:00
あたい、わたし
529デフォルトの名無しさん:2007/12/03(月) 03:44:01
台形公式により面積を求めよって問題でC++だと起動したんですけどCだと
error C2275: 'FILE' : この型は演算子として使用できません
          : 'FILE' の宣言を確認してください。
error C2065: 'fpin' : 定義されていない識別子です。
っていうエラーがでてしまいます。どなたか解決策を教えてください。
#include <stdio.h>
int main()
{int i, j;
double S, h;
double x[15], y[15];
char c;
h = 0.1;
printf("入力\n");
FILE *fpin;
fpin=fopen("in.txt", "r");
while(fscanf(fpin, "%c", &c) != EOF)
for(i=0; i<15; i++)
{fscanf(fpin, "%lf", &x[i]);
fscanf(fpin, "%lf", &y[i]);
printf("x[%d] = %lf y[%d] = %lf \n", i, x[i], i, y[i]);
}
printf("面積\n");
S = 0.0;
for(i=0; i<14; ++i)
{
S += h*(y[i] + y[i+1])/2.0;
}
printf("S=%15.10lf \n", S);
getchar();
}
入力データ→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5388.txt
530homoじょあ ◆5OLf4yFnuM :2007/12/03(月) 04:16:06
>>529
C言語はブロックの先頭でしか変数を宣言できない
531529:2007/12/03(月) 04:23:45
>>homoじょあさん
ありがとうございました。
532デフォルトの名無しさん:2007/12/03(月) 05:35:28
>>517
でも6回目では15種類だな。
533デフォルトの名無しさん:2007/12/03(月) 06:20:36
534デフォルトの名無しさん:2007/12/03(月) 06:32:26
>>533
それ>>465で既出
535デフォルトの名無しさん:2007/12/03(月) 07:18:03
[1] 授業単元:C言語
[2] 問題文:
数字を12個入力して、3番目に大きな数値を求める
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio.net
 [3.3] 言語:C
[4] 期限:12月3日 24:00
[5] その他の制限:
出来る限りシンプルなものがいいです
536デフォルトの名無しさん:2007/12/03(月) 08:36:59
>>526
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

struct Score {
    string id;
    double value;
};
istream& operator >> (istream& is, Score& score) {
    return is >> score.id >> score.value;
}
ostream& operator << (ostream& os, const Score& score) {
    return os << score.id << " => " << score.value;
}
bool operator < (const Score& lhs, const Score& rhs) {
    return lhs.value < rhs.value;
}

int main() {
    vector<Score> scores;
    copy(istream_iterator<Score>(cin), istream_iterator<Score>(), back_inserter(scores));
    sort(scores.begin(), scores.end());
    copy(scores.begin(), scores.end(), ostream_iterator<Score>(cout, "\n"));
}
537デフォルトの名無しさん:2007/12/03(月) 09:42:31
授業単元:
[2] 問題文(含コード&リンク)要素数6のint型配列datを用意し、適当に初期化する。要素の値が正の値の合計を求めるプログラムを作成しなさい
int dat[6] = {3,-2,8,2,-1,10}
実行例
正の合計=23
538573の者です:2007/12/03(月) 09:56:34
1と2の問題は配列を使用してお願いします
問2:要素数20のchar型配列mojiを用意し、文字を適当に入力する。大文字と小文字の文字数を求めるプログラムを作成しなさい
実行例
文字列入力=>aBCaaCbBaCc
大文字:5
小文字:6
539デフォルトの名無しさん:2007/12/03(月) 11:51:21
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
2つの整数(x、y)(xが分子、yが分母)を引数として与えると、x/yを
標準形にするpプログラムを作成します。ただし、標準化とは以下のような
規則をもちます。
@y=0(分母がゼロ)のときはエラーを返す。
A@以外で、x=0のときは、(0,1)を返す。
Bx/yが負のときはxに−(マイナス)を付けて返す。
Cx、yは最大公約数で割った値を返す。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 2007年12月4日
[5] その他の制限:特になし
540デフォルトの名無しさん:2007/12/03(月) 11:56:33
>>537
#include <iostream>
#include <algorithm>
using namespace std;

struct Sum_positive {
    void operator () (int i) {
        if (0 > i)
            return;
        result += i;
    }
    static int result;
};
int Sum_positive::result;

int main() {
    int dat[6]= { 3, -2, 8, 2, -1, 10};
    Sum_positive sum;
    for_each(&dat[0], &dat[6], sum);
    cout << sum.result << endl;
}
541デフォルトの名無しさん:2007/12/03(月) 12:03:40
>>538
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <cctype>
using namespace std;

struct Is_upper : unary_function<char, bool> {
    bool operator () (char c) {
        return isupper(c);
    }
};

int main() {
    string str;
    cout << "文字列入力=>"; cin >> str;
    cout << count_if(str.begin(), str.end(), Is_upper());
}
542デフォルトの名無しさん:2007/12/03(月) 12:05:39
>>538
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <cctype>
using namespace std;

struct Is_upper : unary_function<char, bool> {
    bool operator () (char c) { return isupper(c); }
};

struct Is_lower : unary_function<char, bool> {
    bool operator () (char c) { return islower(c); }
};

int main() {
    string str;
    cout << "文字列入力=>"; cin >> str;
    cout << "大文字数:" << count_if(str.begin(), str.end(), Is_upper()) << endl;
    cout << "小文字数:" << count_if(str.begin(), str.end(), Is_lower()) << endl;
}
543デフォルトの名無しさん:2007/12/03(月) 12:08:33
>>538
// ごめん。問題文よく読んでなかった orz
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
#include <cctype>
#include <cstring>
using namespace std;

struct Is_upper : unary_function<char, bool> {
    bool operator () (char c) { return isupper(c); }
};

struct Is_lower : unary_function<char, bool> {
    bool operator () (char c) { return islower(c); }
};

int main() {
    char moji[20];
    cout << "文字列入力=>"; cin >> moji;
    cout << "大文字数:" << count_if(&moji[0], &moji[strlen(moji)], Is_upper()) << endl;
    cout << "小文字数:" << count_if(&moji[0], &moji[strlen(moji)], Is_lower()) << endl;
}
544デフォルトの名無しさん:2007/12/03(月) 12:32:59
C++ で スタックのプログラムお願いします
545デフォルトの名無しさん:2007/12/03(月) 13:49:02
テンプレに沿ってお願いします
546デフォルトの名無しさん:2007/12/03(月) 13:54:25
>>544
#include <stack>
547デフォルトの名無しさん:2007/12/03(月) 15:00:43
【質問テンプレ】
[1] 授業単元:プログラム言語2
[2] 問題文:下記に書きます.
[3] 環境[3.1] OS: (Linux/)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: ([2007年12月4日まで]
[5] その他の制限: (Cプリプロセッサ,分割コンパイルぐらいまで)コメント等も入れて頂けるとありがたいです。どうかよろしくお願い致します。
548デフォルトの名無しさん:2007/12/03(月) 15:02:23
0 からある数値(NUM) までの合計を表示するプログラムを,以下の手順で作りなさい.
プログラムにはコメントを追加すること. * ヘッダファイル kadai09a.h を作成し,NUM と関数hyoujiを定義する.
-------------------------------------------------------------
#define NUM 5
extern void hyouji(int, int);
-------------------------------------------------------------
* 以下のプログラムをもとに,main関数の部分をソースファイル kadai09a.c に,関数 hyouji の部分をソースファイル kadai09a1.c に分割する.
-------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
void hyouji(int, int);
int main(void)
{
int i, n;
int sum = 0;
printf("Input non-negative integer: ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
sum += i;
}
hyouji(n, sum);
return 0;
}
void hyouji(int k, int m)
{
printf("The sum of 0 to %d : %d\n", k, m);
}
-------------------------------------------------------------
* 作成した kadai09a.c, kadai09a1.c, kadai09a.h をコンパイルして実行する.
コンパイルと実行の手順もレポートに記述すること.
* NUM の値の変更を行う場合のコンパイルの仕方をレポートに記述すること
549デフォルトの名無しさん:2007/12/03(月) 15:03:34
547ー548です。
よろしくお願いします
550デフォルトの名無しさん:2007/12/03(月) 16:02:58
>>549
>>548がモロに答じゃないのか。
それ以上なにを書けと。
551デフォルトの名無しさん:2007/12/03(月) 16:18:07
>>547-549
エディタやらコンパイラの使い方を教えるための課題か?
それだとスレ違い、というか物足りなくて書く気にならん。
552デフォルトの名無しさん:2007/12/03(月) 16:20:17
>>535
#include<stdio.h>
main(){
int x[12];
int i,j,temp;
for(i=0;i<12;i++){
scanf("%d",&x[i]);
}
for (i=0;i<11;i++){
for (j=11;j>i;j--){
if(x[j-1]<x[j]){
temp=x[j];
x[j]=x[j-1];
x[j-1]=temp;
}
}
}
printf("3番目は%dです\n",x[2]);
}
553デフォルトの名無しさん:2007/12/03(月) 16:36:45
>>538
#include<stdio.h>

main(){
char moji[20];
int i,komoji=0,oomoji=0;

scanf("%s",moji);
for(i=0;i<20;i++){
if('a'<=moji[i] && moji[i]<='z')
komoji++;
else if('A'<=moji[i] && moji[i]<='Z')
oomoji++;
else if(moji[i]=='\0')
break;
}
printf("大文字;%d\n",oomoji);
printf("小文字;%d\n",komoji);
}
554デフォルトの名無しさん:2007/12/03(月) 16:37:04
('A'
顔にしか見えない
555デフォルトの名無しさん:2007/12/03(月) 16:45:44
[1] 授業単元:プログラミング演習
[2] 問題文:整数nを入力として受け付けて、1からnまでのn個の整数をファイルに保存せよ。数字の区切りには空白を使用すること。
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (gcc)
 [3.3] 言語: (C)
[4]期限: (2007年12月4日09:00まで)
[5]その他: (特になし)

よろしくお願いします。
556デフォルトの名無しさん:2007/12/03(月) 16:53:50
>>555
#include<stdio.h>
main(){
FILE *fp;
int n,i;
fp = fopen("filename","w");
scanf("%d",&n);
for(i=0;i<n;i++){
fprintf(fp,"%d ",i+1);
}
fclose(fp);
}
557デフォルトの名無しさん:2007/12/03(月) 18:07:50
宿題かもーん。
558デフォルトの名無しさん:2007/12/03(月) 18:51:40
[1] プログラミング応用
入力電圧を加えたときの出力電圧をオイラー法によって求め、
そのグラフをgnuplot で書け。刻み幅は0.1 と細かくしてみる。
提出物:ソースファイル、実行結果のグラフ出力(png ファイル)
/* 入力電圧 u(t) */
if (t >= 0)
return 1;
return 0;
}
double f(double t, double y)
{
return /* ★ 微分方程式 y'=f(t,y) の右辺を計算 */;

int main(void)
{
double t, y, h;
y = /* ★ 初期値 */;
t = /* ★ 初期値 */;
h = /* ★ 刻み幅 */;
do {
printf("%10.7f %10.7f\n", t, y);
y = /* ★ オイラー法の漸化式を計算 */;
t = /* ★ オイラー法の漸化式を計算 */;
} while (t <= 5);
return 0;
}
[3.1] linux [3.2] 不明 [3.3] c言語
[4] 12月4日16時まで


559デフォルトの名無しさん:2007/12/03(月) 18:52:39
よろしくお願いします

560デフォルトの名無しさん:2007/12/03(月) 19:43:18
[1] 授業単元:C++実習
[2] 問題文(含コード&リンク):()
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5396.txt
[3] 環境
 [3.1] OS: XPpro2
 [3.2] visual studio 2005
 [3.3] 言語: C++
[4] 期限: 12/5 〜10:00
[5] その他の制限: 特になし

よろしくお願いします。
561デフォルトの名無しさん:2007/12/03(月) 20:02:58
>>556
ありがとうございます
562デフォルトの名無しさん:2007/12/03(月) 22:17:52
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
多倍長精度の計算をするためにgmpライブラリを使用して、
ボールウェイン(Bolwein)の4次式で円周率を求めるプログラムを作成せよ。
アルゴリズム
1. 初期化 a=6 - 4√2 ,y=√2 - 1 ,x=2
2. yが0にならない間以下を繰り返す
(1) u = √ { √(1-y^4) }
(2) y =(1-u)/(1+u)
(3) v =(1+y)
(4) w =v*v*v*v
(5) x = x*4
(6) a=a*w - y*(1+y+y*y)*x
3. 円周率π = 1/a

この長精度整数用アルゴリズムを構成するには、上記公式の中の「定数1」に対応する整数Mを設定しなければならない。
このMを基準として、各値を計算する。
長精度型の変数をA,Y,U,V,W, 通常の整数型の変数をxとおくとき、Mで上の公式を書き直し、テキストに記せ。
ヒント:aの初期化では A=6・M-4・√(M・M・2) となる。 

[3] 環境
 [3.1] OS: XP pro
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 12月6日
[5] その他の制限: 特になし
よろしくお願いします。
563デフォルトの名無しさん:2007/12/03(月) 22:54:31
オッケ ━━━━━━ (ゝ○_○) ━━━━━━ イ !!!!!」
564デフォルトの名無しさん:2007/12/03(月) 23:55:22
>>560
#include<iostream>
#include<cstring>
#include <time.h>
using namespace std;
class my_err{
public:
int data;
int errnbr;
char msg[160];
public:
my_err( int dt, int err, char *ss ){
data = dt;
errnbr = err;
if( strlen(ss) < 160 ){
strcpy_s( msg, ss );
}else{
strncpy_s( msg, ss, 159 );
msg[159] = '\0';
}
}
};
int square( int dt ){
if( dt < 0 ){ throw my_err( dt, 1, "負数"); }
if( dt > 100 ){ throw my_err( dt, 2, "Over" ); }
return dt * dt;
}
565デフォルトの名無しさん:2007/12/03(月) 23:59:41
>>560
int main( int argc, char **argv )
{
try{
srand((unsigned int)time(NULL));
for(;;){
int X = (rand() / static_cast<double>(RAND_MAX) * 200) - 100;
cout << square( X ) << endl;

if ( 0 == X ){ break; }
}
cout << square( 50 ) << endl;
cout << square( 120 ) << endl;
}catch( my_err e ){
cout << "エラーデータ=" << e.data << endl;
cout << "エラー番号=" << e.errnbr << endl;
cout << "エラー情報=" << e.msg << endl;
}
return 0;
}
566デフォルトの名無しさん:2007/12/04(火) 00:09:57
[1] 授業単元:プログラミング応用 (ファイル)
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5399.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:VisualC++2005ExpressEdition
 [3.3] 言語:C
[4] 期限:2007年12月4日23:59まで
[5] その他の制限: 制御文、配列、構造体、関数、ポインタ、ダブルポインタ
改行の入れ方は特に気にしなくてもおk。
よろしくお願いします。

567デフォルトの名無しさん:2007/12/04(火) 00:50:48
プログラミングの合間に出会い系

■最近流行りのSM系サイトを知っていますか?

それは「SMプレイをすること」を最終目的とした人達が集まる出会い系サイトのことです。
普通の出会い系サイトと一味違った、熱い出会いが全国各地で繰り広げられています。

《ブログ SM系サイトが会える訳》
http://smsite.blog123.fc2.com/

ブログでは管理人一押しのSM系サイトを紹介しています。
是非ご利用下さい。
568デフォルトの名無しさん:2007/12/04(火) 05:58:57
>>566
fileがexitしちゃってちゃいかんよなw
569デフォルトの名無しさん:2007/12/04(火) 12:28:49
>>566
>ダブルポインタ
何?
570デフォルトの名無しさん:2007/12/04(火) 12:30:28
double *p;
571デフォルトの名無しさん:2007/12/04(火) 13:27:45
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5400.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2007年12月5日24:00まで
[5] その他の制限:
まだポインタやリストを学び始めてあまり経っておらず、そこまで理解していないため、
プログラムが長くなっても構わないので基本的な操作の組み合わせでお願いします。
可能であれば何をしているかの簡単なコメントもつけてくださると助かります。
572デフォルトの名無しさん:2007/12/04(火) 16:58:14
>前スレ474の課題
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):ttp://edu.net.c.dendai.ac.jp/ad/1/2007/kadai.html
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:mingw-jp.bat
 [3.3] 言語:C++
[4] 期限:2007年12月5日20:00まで
[5] その他の制限:Windows の API は使用しない,基本的な文法はわかります(For文等)
での回答をまとめたのが
ttp://www.uploda.org/uporg1143008.txt
なのですが、自分のやり方が悪いのか実行してもうまくできなかったり、途中の部分しかなかったりで困っております。
やっていただける方(プログラムの説明も)にウェブマネー3000円分お支払いしますのでどなかたお願いします。
やっていただける方はメール欄まで連絡お願いします。
573デフォルトの名無しさん:2007/12/04(火) 17:01:12
>>なお、この問題は早々に 2ch に投稿され、既に解答も寄せられています。同じ掲示板に何度も同じ問題を投稿するのはマナー違反ですので、もう新たに 2ch にこの問題を投稿しないようにして下さい。
574566:2007/12/04(火) 17:01:28
>>569

int **data
↑↑↑
こういうの
575デフォルトの名無しさん:2007/12/04(火) 17:01:55
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):RDBの射影、選択、結合を実行するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Windows
 
 [3.3] 言語: どちらでも可
[4] 期限: 2007年12月8日
[5] その他の制限:なし
576デフォルトの名無しさん:2007/12/04(火) 17:17:37
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):

文字型配列の先頭アドレスを受け取り、文字列内の文字を昇順にソートする関数void sort_ch()を作成します。

main()で文字列(最大255文字)を入力させてその先頭アドレスをsort_ch()に渡し、結果を表示するプログラムを作成してください。
表示処理はすべてmain()で行ってください。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VisualC++2005ExpressEdition
 [3.3] 言語:C
[4] 期限:特になし
[5] その他の制限:ソートもポインタを使ってください。
よろしくお願いします。
577デフォルトの名無しさん:2007/12/04(火) 17:18:04
勝手に2chのマナーを宣言するなんて何様だと思うけどな
578デフォルトの名無しさん:2007/12/04(火) 18:35:51
>>577
バカ発見
579デフォルトの名無しさん:2007/12/04(火) 19:03:29
[1] 授業単元: c
[2] 問題文(含コード&リンク): 配列を使ってスタックを実装し、
以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加 2 を追加 3 を追加 4 を追加 取り出し
取り出し 5 を追加 6 を追加 7 を追加 取り出し
8 を追加 取り出し 9 を追加 10 を追加 取り出し
取り出し 取り出し 取り出し 取り出し 取り出し (終了)

スタックを格納する配列、スタックポインタは
ローカル変数で用意しなさい。
(難しければ、グローバル変数で作成してもよい)
作成する関数は、初期化、プッシュ、ポップの3種類とし、
ポップの際に取り出された値を画面に出力すればよい。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: c
[4] 期限: 12/6まで
[5] その他の制限: マクロはできる限り無しで
ローカル変数とグローバル変数の両方をお願いします。
580デフォルトの名無しさん:2007/12/04(火) 19:06:16
[1] 授業単元: c
[2] 問題文(含コード&リンク): 自己参照型構造体(リスト)を使ってスタックを実装し、
以下の操作を行った結果取り出された値を画面に出力しなさい。

1 を追加 2 を追加 3 を追加 4 を追加 取り出し 取り出し
5 を追加 6 を追加 7 を追加 取り出し 8 を追加 取り出し
9 を追加 10 を追加 取り出し 取り出し 取り出し 取り出し
取り出し 取り出し (終了)

【ヒント】
作成した構造体型はtypedefを使って
新しいデータ型として定義しなさい。
スタックポインタは
グローバル変数で用意するとやや簡単である。
余力があれば、ローカル変数で作成してもよい。

作成する関数は、初期化、プッシュ、ポップの3種類とする。
ポップの際に取り出された値を画面に出力すること
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: c
[4] 期限: 12/6まで
[5] その他の制限: マクロはできる限り無しで
グローバル変数だけでいいです。
2問続けてですが、よろしくお願いします。
581デフォルトの名無しさん:2007/12/04(火) 19:14:46
>>571
7まで出来た。
コメントとかは後で追加するわ
あとは8だけ、できれば自力でやれ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5401.txt
582デフォルトの名無しさん:2007/12/04(火) 19:19:51
>>576
#include <stdio.h>

void sort_ch(char *buf) {
  int i, j;
  char key;
  for (i=1; buf[i] != '\0'; ++i) {
    for (j=i; j>=1; --j) {
      if (buf[j] < buf[j-1] ){
        key = buf[j];
        buf[j] = buf[j-1];
        buf[j-1] = key;
      }
    }
  }
}

int main() {
  char buf[256] = {'\0'};
  fgets(buf, sizeof(buf), stdin);
  sort_ch(buf);
  printf("%s\n", buf);
  return 0;
}
583デフォルトの名無しさん:2007/12/04(火) 21:27:47
584デフォルトの名無しさん:2007/12/04(火) 21:58:45
585デフォルトの名無しさん:2007/12/04(火) 21:59:47
[1] 授業単元: パターン情報
[2] 問題文(含コード&リンク):C言語でプログラムを作ってgnuplotで立方体を描く
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc3.4
 [3.3] 言語: C言語
[4] 期限: 2007年12月5日
[5] その他の制限: 特に無し
よろしくお願いします
586デフォルトの名無しさん:2007/12/04(火) 22:04:43
[1] 授業単元:c
[2] 問題文 最初に行列の次元nの値を入力し、配列を使って次の計算をするプログラムを作りなさい。
ただし、nは100以内で、n次の正方行列とする。
行列Aを入力すると、その転置行列tAを計算するプログラム
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc
 [3.3] 言語:C
[4] 期限: 12月6日00:00まで
587デフォルトの名無しさん:2007/12/04(火) 22:17:49
[1] 授業単元:プログラミングU
[2] 問題文(含コード&リンク):()
[1] 授業単元:C++実習
[2] 問題文(含コード&リンク):()
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5396.txt
[3] 環境
 [3.1] OS: XPpro2
 [3.2] visual studio 2005
 [3.3] 言語: C++
[4] 期限: 12/5 〜10:00
[5] その他の制限: 特になし

よろしくお願いします。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 今週中
[5] その他の制限: 特になし

よろしくお願いします。
588デフォルトの名無しさん:2007/12/04(火) 22:24:10
>>587
間違えたorz

[1] 授業単元:プログラミングU
[2] 問題文(含コード&リンク):()
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5404.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 今週中
[5] その他の制限: 特になし
589デフォルトの名無しさん:2007/12/04(火) 23:04:58
>>588
>>240,246
同一人物でないとしたらひどい学校だな
590デフォルトの名無しさん:2007/12/04(火) 23:22:14
Tempに保存されているキャッシュを改名して任意のフォルダへコピーする
プログラムはどのように書けばよいのでしょうか。
591566:2007/12/04(火) 23:33:23
流れそうなのでっと。
>>566
お願いします。
592デフォルトの名無しさん:2007/12/04(火) 23:41:49
>>588
#include <stdio.h>
#include <stdlib.h>
void sub(int count, int *array, int *sorted) {
 int i, max, j, index;
 for (i = 0; i < count; i++) {
  max = 0;
  for (j = 0; j < count; j++) if (*(array + j) > max) { max = *(array + j); index = j; }
  *(sorted + i) = max;
  *(array + index) = 0;
 }
}
int main(int argc, char *argv[]) {
 int count, *array, i, *sorted, sum;
 scanf("%d", &count);
 array = (int *)malloc(sizeof(int) * count);
 for (i = 0; i < count; i++) scanf("%d", &array[i]);
 sorted = (int *)malloc(sizeof(int) * count);
 sub(count, array, sorted);
 sum = 0;
 for (i = 0; i < count; i++) { printf("%d ", sorted[i]); sum += sorted[i]; }
 printf("\n%d\n", sum / count);
 free(sorted);
 free(array);
 return 0;
}
593デフォルトの名無しさん:2007/12/04(火) 23:49:24
[1] 授業単元:プログラミング応用
[2] 問題文(含コード&リンク):
 unsigned char 型の変数を用意し、その変数の第何ビットを変化

させるかを入力させて、次にそのビットを0にするのか1にするか

を入力させて、その変数のビットを変化させ、表示するプログラム

を作成しなさい。
 第何ビットを変化させるかを入力させる時に、0〜7以外であれ

ばエラーメッセージを表示させ、「.」であれば終了させるように

しなさい。
 unsigned char 型の変数の値は最初に0に初期化すること。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:VisualC++2005ExpressEdition
 [3.3] 言語:C++
[4] 期限:2007年12月9日23:59まで
[5] その他の制限: 制御文、配列、構造体、関数、ポインタ、ポイ

ンタのポインタ、ファイル、ビット

よろしくお願いします。
594デフォルトの名無しさん:2007/12/05(水) 00:14:07
>>592 ポインタ表記に統一しといたほうが良さげ

- for (i = 0; i < count; i++) scanf("%d", &array[i]);
+ for (i = 0; i < count; i++) scanf("%d", array + i);

- for (i = 0; i < count; i++) { printf("%d ", sorted[i]); sum += sorted[i]; }
+ for (i = 0; i < count; i++) { printf("%d ", *(sorted + i)); sum += *(sorted + i); }
595576:2007/12/05(水) 00:24:52
>>592
ありがとうございます!
596576:2007/12/05(水) 00:25:57
あっ間違えました・・・

>>582
ありがとうございます!
597デフォルトの名無しさん:2007/12/05(水) 00:30:54
>>593
#include<stdio.h>
int main(void){
unsigned int b = 0;
int n, i;
char c;
while(1){
printf("第何ビットを変化させるかを入力させる\n");
scanf("%s",&c);
if(c == '.') break;
if(c < '0' || '7' < c) printf("エラーメッセージ\n");
else{
n = c - '0';
printf("そのビットを0にするのか1にするかを入力させる\n");
scanf("%s",&c);
if(c == '0') b &= ~( 1 << n );
if(c == '1') b |= 1 << n;
for(i=7; i>=0; --i) printf("%d", !!(b&1<<i) );
printf("\n");
}
}
return 0;
}
入力周りがテキトーなのは仕様。
598デフォルトの名無しさん:2007/12/05(水) 01:34:11
>>586
当方で確認した環境は WindowsXP, 処理系は gcc 3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5405.txt
599デフォルトの名無しさん:2007/12/05(水) 02:22:28
[1] 授業単元:C言語
[2] 問題文
int型の変数bで受け取り、次の演算を行う add_num関数を作成しなさい
【add_num関数の処理】
今回の得点は60点満点で何点ですか?と画面表示した後、キーボードからint型変数cに値を入力する
続いて、変数bにcの値を加算し、その結果を「総合得点:」とともに表示する
次に、main関数でint型変数nを値25でで初期化し、nの値を「現在の得点:」とともに表示した後、add_num関数にnの値を渡すプログラムを作成しなさい

[3] 環境
 [3.1] OS: Windows XP
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 12月5日11時

実行結果例
現在の得点:25
今回の得点は60点満点で何点ですか?
48
総合得点:73

よろしくお願いします
600585:2007/12/05(水) 02:24:51
すみません明日の昼までにおねがいします
601デフォルトの名無しさん:2007/12/05(水) 02:35:03
[1] 授業単元:C言語
[2] 問題文
まず、次のメンバを持つ構造体をtypedef宣言を使用し、data型として準備しなさい。ただし、typedef宣言において構造体タグ名は正雀しなさい
char型の配列変換id(配列サイズ:8)、int型の変数n
main関数では、このdata型の変数personを宣言する。
続いて、実行結果を示すようにキーボードによりpersonのメンバidに「学籍番号」を入力、また、キーボードによりメンバnに「前回までの得点」を入力し、personのメンバnのみの値をadd_num関数に渡すプログラムを作成しなさい
ただし、add_num関数は、int型の変数bに受け取った値を格納し、「今回の得点は60点満点で難点ですか?」の質問とともにキーボードによりint型変数cに得点を入力した後、変数bにcの値を加算し、「総合得点:」とともにその結果を表示するように作成しなさい

[3] 環境
 [3.1] OS: Windows XP
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 12月5日11時

実行結果例
学籍番号を入力してください。
0123456
前回までの得点を入力してください。
25
今回の得点は60点満点で何点ですか?
51
総合得点:76

よろしくお願いします
602588:2007/12/05(水) 03:01:28
>>589,592
ありがとうございます

というか既出だったのか…
よく調べもせず申し訳ない

>>240とは同一人物ではないので同じ講義受けてる誰か、ですかね
603デフォルトの名無しさん:2007/12/05(水) 05:37:26
宿題かもーん。
604デフォルトの名無し:2007/12/05(水) 06:19:43
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):ttp://edu.net.c.dendai.ac.jp/ad/1/2007/kadai.html
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:mingw-jp.bat
 [3.3] 言語:C++
[4] 期限:2007年12月5日20:00まで
[5] その他の制限:Windows の API は使用しない,基本的な文法はわかります(For文等)

どうしても分からないのでお願いします。
605デフォルトの名無しさん:2007/12/05(水) 07:48:34
[1] 授業単元:人生
[2] 問題文(含コード&リンク):DOM操作可能なhtmlパーサを組みなさい。
[3] 環境
 [3.1] OS: Linux(kernel v2.6.x)
 [3.2] gcc 4.0.2 or gcc 3.3.6
 [3.3] 言語: C/C++のどちらでも可能
[4] 期限: 2008年01月01日
[5] その他の制限:
ぐぐった結果、firefoxのhtmlパーサをjavaのラッパからDOM操作可能なxmlパーサに流し込むとか、
phyton用のhtml5lib v0.10をバグフィクスしながらDOMに流し込むとか色々あるんですが、
C/C++で使えるDOM操作可能なhtmlパーサはありませんでした。
環境についてなんですが、実装するマシンが旧式(Pen3-800,256M)でして
できるだけネイティブに実行したいのですが何か手はありませんか?
個人的にはオープンソースのxmlパーサにhtml部分の要素だけ付け加えるのが
一番良いのではないかと思うのですが、
簡単に要素を付け加えれるxmlパーサを知りませんか?
後、壊れたhtmlも例外処理でかけれる機能を付いてるのが好ましいです。
606デフォルトの名無しさん:2007/12/05(水) 07:52:47
>>605
お前それ宿題じゃなくて仕事だろ?

http://www.ibm.com/developerworks/xml/library/x-ctlbx.html

とりあえずここから好きなの選ぶがよろし。
607デフォルトの名無しさん:2007/12/05(水) 08:18:01
>>590
batファイル作ればおk。
608デフォルトの名無しさん:2007/12/05(水) 08:43:53
[1] 授業単元:授業
[2] 問題文 スタックの問題ですPURSHを入力したら文字を入力してくださいとでて一文字入力して格納されPOPと入力したらその入力された文字がでてきますENDと入力したらプログラム終了するプログラムをつくりなさい条件として Void Stk_Push(Char a)と
Char stk_PoP(void)を使ってください
[3] 環境
 [3.1] OS: Windows
[3.3] 言語: C/C++
[4] 期限:12月7日
[5] その他の制限: (標準ライブラリは使ってはいけない

宜しくお願い致します

609デフォルトの名無しさん:2007/12/05(水) 09:41:16
どーしても解けないんです!
お願いしますこれm(_ _)m
↓↓↓
>>566
610デフォルトの名無しさん:2007/12/05(水) 12:24:29
[1] 授業単元:授業
[2] 問題文:
2x+y+3z=11
4x+3y+10z=28
2x+4y;17z=31

Gaussの消去法とLU分解法のプログラムをつくりなさい。
[3] 環境
 [3.1] OS: Windows
[3.3] 言語: C
[4] 期限:12月11日
611デフォルトの名無しさん:2007/12/05(水) 12:32:33
>>604
なお、この問題は早々に 2ch に投稿され、既に解答も寄せられています。
同じ掲示板に何度も同じ問題を投稿するのはマナー違反ですので、
もう新たに 2ch にこの問題を投稿しないようにして下さい。

ちょwwwww

612デフォルトの名無しさん:2007/12/05(水) 13:43:28
>[1] 授業単元:授業
もしかして、真性のアホ?
613デフォルトの名無しさん:2007/12/05(水) 13:57:08
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
ここの "C/C++の宿題を片付けます 100代目"スレの5406.cです。

[3] 環境
 [3.1] OS:windows XP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C
[4] 期限:無期限
[5] その他の制限:配列とforとifなど、簡単な方法を用いて作成せよとのことです。
614デフォルトの名無しさん:2007/12/05(水) 14:10:32
>>566
#include <stdio.h>

int bunpu[10];

int main()
{
static const char * const nth[] = {
"1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", "9th", "10th",
};

for (unsigned ic = 0; ic < sizeof(nth) / sizeof(* nth); ++ic) {
printf("Input %s data >> ", nth[ic]);
int val;
scanf("%d", & val);
++bunpu[val / 10];
}
for (unsigned ic = 0; ic < sizeof(bunpu) / sizeof(* bunpu); ++ic) {
printf("\n %2d - %2d: ", ic * 10, ic * 10 + 9);
for (unsigned cc = 0; cc < bunpu[ic]; ++cc) putchar('*');
}
return 0;
}
615デフォルトの名無しさん:2007/12/05(水) 14:32:24
東京電気大学がこのスレを使って遊んでるのか・・・?
616デフォルトの名無しさん:2007/12/05(水) 14:34:21
>>613
#include<stdio.h>
main(){
int bunpu[10]={0};
int i,j,score;

for(i=0;i<10;i++){
printf("Input %d th data >> ",i+1);
scanf("%d",&score);
if(score>=0 && score<10) bunpu[0]++;
else if(score>=10 && score<20) bunpu[1]++;
else if(score>=20 && score<30) bunpu[2]++;
else if(score>=30 && score<40) bunpu[3]++;
else if(score>=40 && score<50) bunpu[4]++;
else if(score>=50 && score<60) bunpu[5]++;
else if(score>=60 && score<70) bunpu[6]++;
else if(score>=70 && score<80) bunpu[7]++;
else if(score>=80 && score<90) bunpu[8]++;
else if(score>=90 && score<100) bunpu[9]++;
}
printf("\n");

for(i=0;i<100;i+=10){
printf("%2d - %2d: ",i,i+9);
for(j=0;j<bunpu[i/10];j++) printf("*");
printf("\n");
}
}
なんかスマートじゃないけど、簡単な方法って書いてたからこんな感じでw
617デフォルトの名無しさん:2007/12/05(水) 14:40:16
>>616
ちょwif文多すぎwww
for(j=0;j<10;j++){
if(score>=i*10 && score<(i+1)*10) bunpu[i]++;
}
くらいにしとけよww
618616:2007/12/05(水) 14:40:30
#include<stdio.h>
main(){
int bunpu[10]={0};
int i,j,score;

for(i=0;i<10;i++){
printf("Input %d th data >> ",i+1);
scanf("%d",&score);
for(j=0;j<100;j+=10) if(score>=j && score <j+10) bunpu[j/10]++;
}
printf("\n");

for(i=0;i<100;i+=10){
printf("%2d - %2d: ",i,i+9);
for(j=0;j<bunpu[i/10];j++) printf("*");
printf("\n");
}
}
if文のとこはこう書いた方がよかったかな?
これ以上は俺の力じゃ無理ですorz
619デフォルトの名無しさん:2007/12/05(水) 14:41:46
すまん、訂正w
for(j=0;j<10;j++){
if(score>=j*10 && score<(j+1)*10) bunpu[j]++;
}
620デフォルトの名無しさん:2007/12/05(水) 14:42:54
と、書いたとたんに>>617に指摘されてたw
>>617みたいにjの増加量はインクリメントにして
条件文を工夫した方が分かりやすいな
621デフォルトの名無しさん:2007/12/05(水) 14:55:19
>>620
>614は見えない? if文なんて要らんのよ。
# 実際にはエラー処理用に必要だけどね。それでもループは要らんわけだし。
622デフォルトの名無しさん:2007/12/05(水) 15:09:45
>>621
あ〜そうか…点数を10で割った値を使えば
格納する場所の値を増やせるのか

配列とforとifなどって書いてたからif文は必須なんだと思い込んでた…恥ずかしいorz
623デフォルトの名無しさん:2007/12/05(水) 15:20:53
どうでもいいけど、なんで>614は>>566って書いているんだろう……orz
624デフォルトの名無しさん:2007/12/05(水) 15:57:09
>>614
static const char * const nth[] = {
"1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", "9th", "10th",
};
って
char *nth[] = {
"1st", "2nd", "3rd", "4th", "5th", "6th", "7th", "8th", "9th", "10th",
};
って書いちゃダメかな?
625デフォルトの名無しさん:2007/12/05(水) 16:05:53
>>624
staticにしないと実行時にコピーするコードの分、効率が悪いくらいの違い。
626デフォルトの名無しさん:2007/12/05(水) 17:19:24
東京電気大学って阿呆なんだね。
627デフォルトの名無しさん:2007/12/05(水) 17:40:31
と、中卒ニートが申しております。
628デフォルトの名無しさん:2007/12/05(水) 17:46:16
中卒ニートにバカにされる大学ってw
629デフォルトの名無しさん:2007/12/05(水) 18:08:04
中卒ニート>>>東京電気大学
つまり金の無駄
630デフォルトの名無しさん:2007/12/05(水) 19:22:50
[1] 授業単元プログラミングU
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5407.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 12/7
[5] その他の制限: 特になし
631デフォルトの名無しさん:2007/12/05(水) 19:48:38
[1] 授業単元:
[2] 問題文 スタックの問題ですPURSHを入力したら文字を入力してくださいとでて一文字入力して格納されPOPと入力したらその入力された文字がでてきますENDと入力したらプログラム終了するプログラムをつくりなさい条件として Void Stk_Push(Char a)と
Char stk_PoP(void)を使ってください
[3] 環境
 [3.1] OS: Windows
[3.3] 言語: C/C++
[4] 期限:12月7日
[5] その他の制限: (標準ライブラリは使ってはいけない

宜しくお願い致します

632デフォルトの名無しさん:2007/12/05(水) 19:56:59
何で句読点も打てないんだろうか。
つーかそんな制限ありえなくねえ?アセンブラ使った方がよっぽどましな状況だろ
633デフォルトの名無しさん:2007/12/05(水) 20:00:08
>>580
どなたかお願いします。
634デフォルトの名無しさん:2007/12/05(水) 21:38:24
>>633 >>580
#include <stdio.h>
#include <stdlib.h>
struct element_st{
int val;
struct element_st *next;
};
typedef struct element_st element;
element *list_head;
void init(){
list_head = NULL; /* 終端記号 */
}
void push(int n){
element *new_element;
new_element = malloc(sizeof(element)); /* 新しい要素作成 */
new_element->val = n;
new_element->next = list_head;
list_head = new_element; /* [新しい要素]->[古い要素]->[もっと古い要素] */
}
void pop(){
element *next_head = list_head->next; /* freeして消すのでここで退避 */
if(list_head == NULL) return;
printf("poped -> %d\n",list_head->val);
free(list_head);
list_head = next_head;
}
int main(){init();
push(1);push(2);push(3);push(4);pop();pop();
push(5);push(6);push(7);pop();push(8);pop();
push(9);push(10);pop();pop();pop();pop();
pop();pop();
}
635デフォルトの名無しさん:2007/12/05(水) 21:41:38
>>634
コード圧縮しすぎてバグってるw

element *next_head;
if(list_head == NULL) return;
next_head = list_head->next; /* freeして消すのでここで退避 */

こうでないとlist_head==NULLのときに阿呆なメモリにアクセスする。
636562:2007/12/05(水) 21:45:34
562をどなたかお願いします。

式の書き換え部分だけでもやっていただければ、プログラムはなんとかできそうです!
637デフォルトの名無しさん:2007/12/05(水) 21:59:49
638デフォルトの名無しさん:2007/12/05(水) 22:03:47
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):

文字型配列の先頭アドレスと文字を受け取り、文字列中に文字が含まれる個数を返す関数search_chを作成します。

main()で文字列(最大255文字)と文字を入力させ、文字型配列の先頭アドレスと文字をsearch_ch()に渡して処理を行わせ、結果を出力するプログラムを作成してください。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VisualC++2005ExpressEdition
 [3.3] 言語:C
[4] 期限:特になし
[5] その他の制限:配列[]を使わずポインタを使ってください。
よろしくお願いします。
639デフォルトの名無しさん:2007/12/05(水) 22:11:21
640デフォルトの名無しさん:2007/12/05(水) 22:11:35
>>579
グローバル変数を使って、どなたかお願いします。
#include <stdio.h>
#define SIZE 6
#define ERROR_NUM 9999

int stk[SIZE];
int sp;

void init(void);
void push(int dt);
int pop(void);
void show(void);

これを使ってお願いします。
641デフォルトの名無しさん:2007/12/05(水) 22:13:17
>>640
ちっとは頭使えよカス
642638:2007/12/05(水) 22:26:03
ありがとうございます!
643デフォルトの名無しさん:2007/12/05(水) 22:31:37
>>640
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#define SIZE 6
#define ERROR_NUM 9999

int stk[SIZE];
int sp;

void init(void);
void push(int dt);
int pop(void);
void show(void);

void init(){
sp=0;
}
void push(int n){ stk[sp++]=n; }
int pop(){
if(sp==0) return ERROR_NUM;
printf("poped -> %d\n",stk[sp-1]);
return stk[--sp];
}
int main(){init();
push(1);push(2);push(3);push(4);pop();pop();
push(5);push(6);push(7);pop();push(8);pop();
push(9);push(10);pop();pop();pop();pop();
pop();pop();
}
644デフォルトの名無しさん:2007/12/05(水) 22:32:22
宿題かもーん。
645デフォルトの名無しさん:2007/12/05(水) 22:35:48
C言語で対人用のオセロプログラム作ってください
もちろんGUIで^^
646デフォルトの名無しさん:2007/12/05(水) 22:39:23
もちっと簡単な宿題かもーん。
647デフォルトの名無しさん:2007/12/05(水) 22:43:23
>>646
>>562をお願いします。
648デフォルトの名無しさん:2007/12/05(水) 23:08:44
649デフォルトの名無しさん:2007/12/05(水) 23:13:58
>>648
ありがとうございます。

長精度整数用アルゴリズムを構成するには、上記公式の中の「定数1」に対応する整数Mを設定しなければならない。
このMを基準として、各値を計算する。
長精度型の変数をA,Y,U,V,W, 通常の整数型の変数をxとおくとき、Mで上の公式を書き直す  っていうのはどうしてますか?

Mの値を10^10000とか10^40000とかに設定して計算実験をするんですが
650デフォルトの名無しさん:2007/12/05(水) 23:37:01
>>649
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5411.txt

コンパイルした実行ファイルの引数に

1とか、1e10とか1e1000000とかいれとけ。

./a.exe 1

でもあんまり面白くないぞ。PI=M/Aなら0.28...に収束するけどな。
651デフォルトの名無しさん:2007/12/05(水) 23:46:05
>>650
具体的に書き換えた式も書かないといけないので、
A=6・M-4・√(M・M・2)みたいに書いて欲しいです。

ちなみに例として、Gauss-Legendreの公式
初期化 a=1, b=1/√2 , t=1/4, x=1
反復
(1) y=a
(2) a=(a+b)/2
(3) b=√(b×y)
(4) t=t-(y-a)^2 ×x
(5) x=x×2

π=(A+B)^2 /4t

のアルゴリズムがあり、
プログラムでは、

A=M;
B=sqrt(M*M/2)
T=T-(Y-A)*(Y-A)/M*x
x=x*2

みたいになってます。
652デフォルトの名無しさん:2007/12/05(水) 23:51:34
>>651
      /       ヽ
     巳________________|二-      
    | l_/_jニニコ_iニニ!.
    i~^'  fエ:エi  fエエ)Fi
    ヽr      >   V   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     l   !ー―‐r  l  < お前の態度が気に食わない
 __,.r-‐人   `ー―'  ノ_  \_______
ノ   ! !  ゙ー‐-- ̄--‐'"ハ ~^i
 ヽ ! ヽ、_     _.ノ  i  \
ヾV /              ! /.入
653デフォルトの名無しさん:2007/12/05(水) 23:54:35
とりあえず>>1をだな
654デフォルトの名無しさん:2007/12/06(木) 00:03:54
宿題かもーん。
655デフォルトの名無しさん:2007/12/06(木) 00:09:39
>>652
申し訳ありません
656デフォルトの名無しさん:2007/12/06(木) 00:52:32
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):
次のプログラム部分に必要な内容を追加して、プログラムを完成させ結果を調べなさい。
 また、どうしてそのような結果になったか、その理由を考えなさい。
 どうすれば意図どおりに処理できるかを考え、プログラムを修正しなさい。

void sub(int,int);
void main(void){         void sub(int a,int b){
int a=2;      b=3;    a=a+5; b=a*b;
sub(a,b);          return;
printf("a=%d\tb=%d\n",a,b);    }
}
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:visual studio 2005
 [3.3] 言語:C
[4] 期限:2007年12月11日まで
[5] その他の制限:

[2]のプログラムが問題です。分かりにくいと思いますがよろしくお願いいたします。
657デフォルトの名無しさん:2007/12/06(木) 00:56:51
分かりにくいと思うならちゃんと書き直せ。全く意味を成してない
658デフォルトの名無しさん:2007/12/06(木) 01:31:41
>>656 こんなんでつか?
#include<stdio.h>
void sub(int,int);
int main(void){
    int a=2,b=3;
    sub(a,b);
    return 0;
}
void sub(int a,int b){
    a=a+5; b=a*b;
    printf("a=%d\tb=%d\n",a,b);
}
659デフォルトの名無しさん:2007/12/06(木) 01:51:45
>>657
すみません。問題にはこのようにしか書いてないんです。
多分あいている部分を埋めるような感じだと思うのですが・・・
問題用紙には先ほど書いた通りにしか書いてないです。
660デフォルトの名無しさん:2007/12/06(木) 01:58:57
どこがあいている部分なんだよ
661デフォルトの名無しさん:2007/12/06(木) 02:13:44
>>660
void main(void){ から void sub(int a,int b){ の所
int a=2; からb=3; の所
b=3; から a=a+5; b=a*b; の所
sub(a,b); から  return; の所
printf("a=%d\tb=%d\n",a,b); から  }の所

以上が空白の部分ですです。
662デフォルトの名無しさん:2007/12/06(木) 02:16:02
埋めるための間じゃないだろそれ・・・
せいぜいa=2;とb=3;の間にintを入れるくらいじゃないか?
663デフォルトの名無しさん:2007/12/06(木) 02:36:41
void sub(int,int);
void main(void){
int a=2,b=3;
sub(a,b);         
printf("a=%d\tb=%d\n",a,b);   
return;
}

void sub(int a,int b){
   a=a+5; b=a*b;
}
664デフォルトの名無しさん:2007/12/06(木) 02:39:51
答え a=2 b=3

ローカル変数の値渡しなのでmain関数ないのaとbは変更されないため
665デフォルトの名無しさん:2007/12/06(木) 03:45:54
[1] 授業単元:C言語
[2] 問題文
int型の値を変数bで受け取り、次の演算を行ってbの値を返すadd_num関数を作成しなさい。
[add_num関数内の処理]
「今回の得点は60点満点で何点ですか?」と画面表示した後、キーボードからint型変数cに値を入力する。
続いて、変数bにcの値を加算し、bの値を返す。
次に、main関数でint型変数nを値25で初期化し、nの値を「現在の得点:」とともに表示した後、add_num関数にnの値を渡す。そしてadd_num関数が返した値を再び変数nに格納し、nの値を「総合得点:」とともに右のように表示するプログラムを作成しなさい。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 12月6日9:30

実行結果例
現在の得点:25
今回の得点は60点満点で何点ですか?
(48)
総合得点:73
()はキーボード入力

よろしくお願いします
666デフォルトの名無しさん:2007/12/06(木) 03:47:45
[1] 授業単元:C言語
[2] 問題文
まず、次のメンバを持つ構造体をtypedef宣言を使用し、data型として準備しなさい。
ただし、typedef宣言において構造体タグ名は省略しなさい。
char型の配列変数id(配列サイズ:8)、int型の変数n
main関数では、このdata型の変数personを宣言し、そのメンバidを 012345、nを25として初期化する。
続いて、実行結果に示すように「学籍番号・・・の現在の得点:」とともにpersonのメンバidとnを表示した後、personのメンバnのみの値をadd_num関数に渡す。
さらにadd_num関数から戻る値をpersonのメンバnに格納し、「学籍番号・・・の総合得点:」とともにpersonのメンバidとnを右のように表示するプログラムを作成しなさい。
ただし、add_num関数は、int型の変数bに受取った値を格納し、「今回の得点は60点満点で何点ですか?」の質問とともにキーボードによりint型変数cに得点を入力した後、変数bにcの値を加算し、bの値を返すように作成しなさい。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 12月6日9:30
実行結果例
学籍番号012345の現在の得点:25
今回の得点は60点満点で何点ですか?
(45)
学籍番号012345の総合得点:70
()はキーボード入力

よろしくお願いします
667デフォルトの名無しさん:2007/12/06(木) 03:48:47
[1] 授業単元:C言語
[2] 問題文
まず、次のメンバを持つ構造体をtypedef宣言を使用し、data型として準備しなさい。
ただし、typedef宣言において構造体タグ名は省略しなさい。
char型の配列変数id(配列サイズ:8)、int型の変数n
main関数では、このdata型の変数personを宣言し、そのメンバidを 012345、nを25として初期化する。
続いて、実行結果に示すように「学籍番号・・・の現在の得点:」とともにpersonのメンバidとnを表示した後、personをadd_num関数に渡す。
さらにadd_num関数から戻る値をpersonに格納し、「学籍番号・・・の総合得点:」とともにpersonのメンバidとnを表示するプログラムを作成しなさい。
ただし、add_num関数は、data型の構造体person2に受取った内容を格納し、「今回の得点は60点満点で何点ですか?」の質問とともにキーボードによりint型変数cに得点を入力した後、person2のメンバnにcの値を加算し、person2の内容を返すように作成しなさい。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 12月6日9:30

実行結果例
学籍番号012345の現在の得点:25
今回の得点は60点満点で何点ですか?
45
学籍番号012345の総合得点:70


よろしくお願いします
668デフォルトの名無しさん:2007/12/06(木) 03:56:51
[1] 授業単元:C言語
[2] 問題文
まず、次のメンバを持つ構造体をtypedef宣言を使用し、data型として準備しなさい。
ただし、typedef宣言において構造体タグ名は省略しなさい。
char型の配列変数id(配列サイズ:8)、int型の変数n
main関数では、このdata型の配列変数personを配列サイズ5で宣言する。
続いて、person[0]、person[1]、person[3]、person[3]、person[5]の順にこれらの内容を一つずつadd_num関数に渡し、その都度add_num関数から戻る内容をperson[0]、person[2]・・・に格納する。
その後、5つのperson[i]のメンバidとnを「学籍番号・・・の得点」として表示するプログラムを作成しなさい。
ただし、add_num関数は、data型の構造体person2に受取った内容を格納し、「学籍番号7桁を入力してください。」の質問とともにキーボードによりperson2のメンバidに学籍番号を入力、
また、「今回の得点は何点ですか?」の質問とともにキーボードによりperson2のメンバnに得点を入力し、person2の内容を返すように作成しなさい。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] visual studio 2005
 [3.3] 言語: C
[4] 期限: 12月6日9:30

実行結果例

学籍番号7桁を入力してください。
0123456
今回の得点は何点ですか?
70
学籍番号7桁を入力してください。
0124680
今回の得点は何点ですか?
80
学籍番号0123456の得点:70
学籍番号0124680の得点:80

よろしくお願いします
669デフォルトの名無しさん:2007/12/06(木) 04:45:21
>>665だけ作った。後は応用だから自分で頑張れ
#include<stdio.h>

int add_num(int b){
int c;

printf("今回の得点は60点満点で何点ですか?\n");
scanf("%d",&c);
b += c;
return b;
}

main(){
int n=25;

printf("現在の得点:%d\n",n);
n = add_num(n);
printf("総合得点:%d",n);
}
670デフォルトの名無しさん:2007/12/06(木) 05:38:31
すみません、
一度、ウイザードを使用してexeのスケルトンで作ったプロジェクトを
ウイザードでdllのスケルトンを作成したプロジェクトに変更することは可能なのでしょうか。
671デフォルトの名無しさん:2007/12/06(木) 07:39:54
>>670
コードだけちゃっちゃとコピペしたら?
というかここで悩んで相談するより実際にやったほうがずっと早い
672デフォルトの名無しさん:2007/12/06(木) 08:44:55
>>580
グローバル変数を使って、どなたかお願いします。
#include <stdio.h>
#define SIZE 6
#define ERROR_NUM 9999

void init(void);
void push(int dt);
int pop(void);
void show(void);

これを使ってお願いします。 なお、必要のないものは
使わなくて結構です。よろしくお願いします
673デフォルトの名無しさん:2007/12/06(木) 09:29:01

【質問テンプレ】
[1] 授業単元: DirectX
[2] 問題文(含コード&リンク):サンプルソースを元に入力クラスを作成して、表示させた画像を動かす。
(車を動かすので、可能ならアクセルとブレーキを再現)
サンプルソースを下記にうpします。(mainとヘッダーがあるためzipファイルです。)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5415.zip


[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VS2005
 [3.3] 言語: どちらでも可
[4] 期限: 2007年12月6日 17時
[5] その他の制限: 制限はなし

すっかり課題を忘れてて手をつけていない
よろしくお願いします
674デフォルトの名無しさん:2007/12/06(木) 09:30:01
>>672
後出しするな
しかもグローバル変数は使ってるだろ
675デフォルトの名無しさん:2007/12/06(木) 10:54:05
>>615
>>626
>>629
東京電気大学なんてねぇよw
×電気→○電機

漢字すら書けない喪前らの方がよっぽど阿呆だw
676デフォルトの名無しさん:2007/12/06(木) 10:56:41
電気だろうが電機だろうが阿呆は阿呆。
677デフォルトの名無しさん:2007/12/06(木) 11:02:08
【質問テンプレ】
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):コマンドライン引数から半角アルファベットで構成されている
テキストファイルを元に暗号化する,半角アルファベット以外はそのまま出力する。
↓のfile.txtを読み込んで
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
↓のようにファイルを出力する
zxywvutsrqponmlkjihgfedcba
ZXYWVUTSRQPONMLKJIHGFEDCBA

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual C
 [3.3] 言語:C
[4] 期限:今日中

お願いします
678デフォルトの名無しさん:2007/12/06(木) 11:47:54
>>675
なんで電機を庇うの?
あ、ひょっとして件の大学の方ですか?w
679デフォルトの名無しさん:2007/12/06(木) 12:13:04
プラグラム得意な人と苦手な人って多いよ、あそこ

小テストで if(a==10) とするところをif(a=10)としていてうまくいかずに悩んでたやついた

(電大知らない人は電気だと思うだろうね、普通は)
680デフォルトの名無しさん:2007/12/06(木) 12:20:47
東京電機大なんて始めて聞いたんだけど、Fランですか?

>>679
そのミスは得意な人もたまにうっかりやるミス
681デフォルトの名無しさん:2007/12/06(木) 12:44:55
>>680
ランクってのはよく知らない(気にしたこともない)

自分も先生から聞かされるまで知らなかったし
でも最近(1〜2年前)駅付近の広告(駅のホームとかだったか?)で見るようになった気がする

知名度はその程度
682デフォルトの名無しさん:2007/12/06(木) 12:54:22
[1]プログラミング演習

[2.1]1から200までの乱数をつくって、100未満なら3引き、100以上なら5を足す。100回やる。

[2.2]生まれた月と日を入力し、星座が何であるかを出力するプログラムを作成せよ。

[2.3]入力された文字列に同じ文字が複数個あるとき、最初に現れた文字以外を@に置き換える。

[3.1]Windows XP

[3.2]Visual Studio.NET 2003

[3.3]C

[4]2007年12月07日12時まで

[5]2.2において誤ったデータが入力された場合は、再度入力させる仕様とし、また各月ともに31日まであるものとする。

どうかよろしくお願いします。
683デフォルトの名無しさん:2007/12/06(木) 14:01:44
>>682
[2.3]
#include<stdio.h>

main(){
char s[100],s2[100];
int i,c[128];

for(i=0;i<128;i++){
c[i]=0;
}

scanf("%s",s);

for(i=0;s[i]!='\0';i++){
if(c[s[i]]!=0){
s[i]='@';
}
c[s[i]]++;
}
printf("%s",s);
}
684デフォルトの名無しさん:2007/12/06(木) 14:02:26
すまん、>>683のs2[100]はいらない。消し忘れてた
685デフォルトの名無しさん:2007/12/06(木) 14:17:33
n 個の石が環状に並んでいる.それぞれの石には番号がついており,最初は時計回りに順番に並べられている.番号は 0 から n-1 までの整数である.
m 番の石を最初に取り除く.直前に除いた石から時計回りに石をたどって k 個目を取り除く作業を,残り 1個になるまで繰り返すとする.
標準入力から,n, m, k の 3つの整数値が与えられたとき,最後に残る石の番号を答えるプログラムを書きなさい.

普通の継子立てとおなじく考えてたら全然ダメでした。。。ソースお願いします><
686デフォルトの名無しさん:2007/12/06(木) 14:25:05
>>678
>>680
>>681

一般常識だろ。FAX開発者が初代学長。中学、高校共にlv高いし。国立大合格者毎年出すし。
大学の就職率もそんじょそこらの大学よりぜんぜんいい。
687デフォルトの名無しさん:2007/12/06(木) 14:27:38
>>685
テンプレに習え。
あとリングバッファでぐぐれ。

>>686
>国立大合格者毎年出すし
これ笑うとこですよね?
688デフォルトの名無しさん:2007/12/06(木) 14:37:24
>>687
ん? 電機大高校から国立合格者を出すって意味だけど…?
大学から大学合格者出したらそりゃ笑うわw
689工大生:2007/12/06(木) 14:47:08
C言語の宿題を教えてください。内容は以下の条件を満たすゲームの作成です。
条件は制御文はif(if−else、else−if)文、switch文、繰り返し制御(while,do-while,for文)
を一回以上使い、関数は三種類以上作ります。あと配列およびポインタ変数をそれぞれ一つ以上使う。です。
誰か得意な方教えてください。
690デフォルトの名無しさん:2007/12/06(木) 15:01:50
>>689
大学生にもなって>>1も読めませんか?
691デフォルトの名無しさん:2007/12/06(木) 16:30:39
>国立大合格者毎年出すし
ふつーの高校は、いちいちそんなこと言いませんが。
692デフォルトの名無しさん:2007/12/06(木) 16:30:42
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):二次方程式のa b cをキーボードから入力して解を求めるプログラムの作成
a=0を入力するまで繰り返し計算するものとする、入力するa b cの組は5個程度、3種類のすべての解を含むように選ぶこと
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:VS2005
 [3.3] 言語:C++
[4] 期限:12/8 12:00まで
[5] その他の制限:今まで習った関数はprintf、scanf、if、else、whileあたりの基本関数
平方根の計算はsqrt()を使う、#include"stdio.h"のあとに#include"math.h"をつける

前回は解の判別までやりました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5416.txt

よろしくお願いします
693562:2007/12/06(木) 17:00:58
562の式の書き換えをどなたか、お願いします↓。
どうやって考えていいかわからず、困っています。

>>651も参考にしてください。。
694デフォルトの名無しさん:2007/12/06(木) 17:10:44
695デフォルトの名無しさん:2007/12/06(木) 17:16:07
>>693
>>652を参考にしてください。。
696デフォルトの名無しさん:2007/12/06(木) 18:23:26
>>539をお願いします
697デフォルトの名無しさん:2007/12/06(木) 19:02:34
>>695
ホントにお願いします!
698デフォルトの名無しさん:2007/12/06(木) 19:27:23
ホントに宿題かもーん。
699デフォルトの名無しさん:2007/12/06(木) 20:45:16
700デフォルトの名無しさん:2007/12/06(木) 20:47:06
[1] 授業単元:C言語
[2] 問題文

要素数がnoであるint型の配列v2の並びを逆順にしたものを配列v1に格納する関数、
void intary_rcpy(int v1[],const int v2[],int no) {/…/}
を作成せよ

[3] 環境
[3.1] OS:Windows XP
[3.2] VS2005
[3.3] 言語:C++
[4] 期限: 12月7日(金)の午前中まで

よろしくお願いします
701デフォルトの名無しさん:2007/12/06(木) 20:56:47
702デフォルトの名無しさん:2007/12/06(木) 21:00:46
>>700
#include <algorithm>
void intary_rcpy(int v1[],const int v2[],int no){std::reverse_copy(v2, v2+no, v1);}
703デフォルトの名無しさん:2007/12/06(木) 21:06:31
>>702
間違ってはいないが酷いな
704デフォルトの名無しさん:2007/12/06(木) 21:14:03
>>703
いや、俺はそうあるべきだと思う。
あ、たしかに課題の回答としてはどうかと思うがw
705デフォルトの名無しさん:2007/12/06(木) 21:16:31
STL分からない
ついでにC++もちょっとしか知らない
706デフォルトの名無しさん:2007/12/06(木) 21:20:37
しかし車輪の再発明をしろって課題もなんだかなあ。
理解してるか見るためとはいえ
707デフォルトの名無しさん:2007/12/06(木) 21:25:17
>>706
アホですか・・・?
708700:2007/12/06(木) 21:34:32
>>701
ありがとうございます
ですが、sizeofはまだ習っていないので、宿題の提出には使えないと思います。前回の講義で配列の要素を0にする

#include <stdio.h>

void int_set(int vc[],int no)
{
int i;
for(i=0;i<no;i++)
vc[i]=0;
}

int main(void)
{
int i;
int ary1[] = {1,2,3,4,5};
int ary2[] = {3,2,1};

int_set(ary1,5);
int_set(ary2,3);

for(i=0;i<5;i++) printf("ary1[%d]"=%d\n",i,ary1[i]);
for(i=0;i<3;i++) printf("ary2[%d]"=%d\n",i,ary2[i]);

return (0);

}
709700:2007/12/06(木) 21:36:33
(続き)

というプログラムを組んだので、これと似た感じのプログラミングで、
>>700の内容を組めないでしょうか?
上の内容のプログラムとmax_ofなどから必要なものを持ち出して、
組んでみろと先生は言っていました。

すみません、アホな質問だとは思いますが、どうかお願いします
710デフォルトの名無しさん:2007/12/06(木) 21:42:39
void intary_rcpy(int v1[], const int v2[], int no)
{
int i;

for(i=0; i<no; i++) v1[i] = v2[no-1-i];
}
711デフォルトの名無しさん:2007/12/06(木) 21:49:08
>>709
情報の後出しは良くないから気をつけてね
712デフォルトの名無しさん:2007/12/06(木) 22:02:58
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
虫食い算
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5425.zip
シンプソン
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5424.zip
以前このスレで上記のプログラミングをやっていただいたのですが、
課題でこの2つのプログラムについて『 (1) 問題をどのように理解し、どのようなアルゴリズム(算法)で処理を進めるか。
(2) それをフローチャート(流れ図)で表せ。』という課題が出されました。

[3] 環境
 [3.1] OS: WindowsXP
 [3.3] 言語: c
[4] 期限: 12/14まで

リンク先に問題文とプログラムを載せましたが、やはり他人が作成したプログラミングのフローチャートを作ることはこのスレの方でも難しいことなのでしょうか?
面倒かもしれませんが、よろしくお願いします。
713デフォルトの名無しさん:2007/12/06(木) 22:06:23
フローチャート描かせる宿題なんて都市伝説かと思ってた。
714デフォルトの名無しさん:2007/12/06(木) 22:27:44
>>672
>>643にもう答え書いたけど?
715デフォルトの名無しさん:2007/12/06(木) 22:31:04
>>562以外でどの宿題やればいい?
716デフォルトの名無しさん:2007/12/06(木) 22:35:40
>>712お願いできませんか?
717デフォルトの名無しさん:2007/12/06(木) 22:36:28
フローチャートを書くのは(若干面倒だけど)そんなに難しくないが、残念ながらスレ違い
718デフォルトの名無しさん:2007/12/06(木) 22:40:07
了解しました!
719デフォルトの名無しさん:2007/12/06(木) 22:42:46
>>718 ほれた。
720デフォルトの名無しさん:2007/12/06(木) 22:51:51
1] 授業単元: 情報基礎
[2] 問題文(含コード&リンク):
3次方程式を解くプログラムをニュートン法を用いて作成せよ。
[3] 環境
 [3.1] OS: Windows
 [3.3] 言語: C
[4] 期限: 12月23日
[5] その他の制限 特にありません。
721692:2007/12/06(木) 23:04:43
>>694
遅くなってすみません、ありがとうございました
722デフォルトの名無しさん:2007/12/06(木) 23:07:36
723デフォルトの名無しさん:2007/12/06(木) 23:15:00
>>722
まさか、こんな早くやっていただけるとは思いませんでした!
シンプソンだけでも感謝です!
本当にありがとうございました。たすかります。
724デフォルトの名無しさん:2007/12/06(木) 23:22:24
>>723
あと10分まて
725デフォルトの名無しさん:2007/12/06(木) 23:36:40
>>723
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5427.zip

すまん、画像にすんのなかなか面倒でな。
726デフォルトの名無しさん:2007/12/06(木) 23:47:40
正直だめもとで書き込んだんですが、まさか両方ともやっていただけるとは思いませんでした。
時間を使わせてしまって申し訳ありません。
>>725さん本当にありがとうございました!
727デフォルトの名無しさん:2007/12/06(木) 23:49:36
>>726
きにすんなー♪申し訳ないと思うなら、次はもっと面白い課題もってこーいw
気が向いたらやるんで。
728デフォルトの名無しさん:2007/12/06(木) 23:55:43
どなたかお助けください
http://updas.net/up/download/1196919710.zip
このテキストの暗号及び複合化のソースを教えてください
このテキストファイルはXOR暗号されており16進数になっています
KEYは215です
[email protected]
729デフォルトの名無しさん:2007/12/06(木) 23:58:34
XOR暗号って・・・複合化って・・・
いやそれ以前にスレ違いだろ
730デフォルトの名無しさん:2007/12/07(金) 01:43:42
>>728
せめてテンプレに載せて書いてくれたらやってあげたのに・・・
731デフォルトの名無しさん:2007/12/07(金) 03:00:00
>>720
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5428.txt
ニュートン法を知らなかったんで、ニュートン方を解説してるサイトを元にして手探りで作ってみたw
自分が見た例題通りに収束したし、他の場合でもxを代入したら0に限りなく近づいてたんで多分できてるはず。
732デフォルトの名無しさん:2007/12/07(金) 03:10:06
宿題なんてやっつけてないで、東京電機大学について熱く語ろう!
733デフォルトの名無しさん:2007/12/07(金) 03:49:15
まともな答えがないのでまた明日きますよっと
734デフォルトの名無しさん:2007/12/07(金) 06:33:52
>>731
サンクスです。
めちゃくちゃ助かりました。
735デフォルトの名無しさん:2007/12/07(金) 08:59:06
本当に>>539をお願いします
736デフォルトの名無しさん:2007/12/07(金) 13:52:07
737デフォルトの名無しさん:2007/12/07(金) 14:04:15
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
以下のプログラムを改良し次の機能を追加せよ
a.選ばれる数字は1000〜9999の4桁であること
b.ユーザの入力した数字が選ばれた数字と異なる場合その数字が選ばれた数字よりも大きいか小さいかというヒントを表示する
c.n回目で当てた場合ユーザの得点を−n点として表示する
d.10回以上繰り返し入力できないようにし、そのときにはポイントと選ばれた数字を表示する
e.何度も繰り返し実行しポイントを加算(−n点なのでどんどんマイナスになるはずである)していく
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio.NET 2003
 [3.3] 言語:C
[4] 期限:2007年12月9日20:00前後を希望
[5] その他の制限:if文、swich文、while文等繰り返し処理の初歩段階まで。下の文(課題文)で出てる程度までです。

#include<stdio.h>  #include<stdlib.h>  #include<time.h>
int main(void) {  int secret_number;  int guess_number;  srand(time(NULL));
secret_number = rand() % 9 + 1;   while (1) {
printf("Make a guess the number: ");   scanf("%d", &guess_number);
if (guess_number != secret_number) {   printf("You missed.\n");
} else {   printf("Bingo!\n");
break;   }  }  exit(0);  }

どうかひとつお願いします。。
738デフォルトの名無しさん:2007/12/07(金) 15:16:16
[1] 授業単元:数値計算法
[2] 問題文:ガウスの消去法を用いて連立一次方程式を解くプログラムを作りなさい。
      次の方程式を解きなさい。

      @4X1 + X2 - 3X3 + 10X4 = 6
A2X1 + 3X2 + X3 +4X4 = 5
B5X1 - 4X2 - 2X3 + 2X4 =0.5
C-2X1 + 2X2 + 8X3 + 4X4 = 6

***Xの前にある数字は係数。後の数字は小文字の数字でお願いします***   
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C言語(C++!?)
[4] 期限: [2007年12月19日21:00まで]
[5] その他の制限: 特になし。
739デフォルトの名無しさん:2007/12/07(金) 15:17:41
>>737
ずれてる
740737:2007/12/07(金) 15:53:51
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void)
{
int secret_number;
int guess_number;

srand(time(NULL));

secret_number = rand() % 9 + 1;
while (1) {
printf("Make a guess the number: ");
scanf("%d", &guess_number);
if (guess_number != secret_number) {
printf("You missed.\n");
} else {
printf("Bingo!\n");
break;
}
}
exit(0);
}

これでずれ修正できたでしょうか
改めてお願いします
741デフォルトの名無しさん:2007/12/07(金) 16:31:20
ごみくそソースを晒すスレはここですか?
742デフォルトの名無しさん:2007/12/07(金) 16:57:31
>>539
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int gcd(int a, int b){
int c;
while((c=a%b)) a=b,b=c;
return b;
}

char *p(int x, int y){
char buf[100];
int abs_x, abs_y;
if(y==0) return strdup("エラー");
if(x==0) return strdup("(0,1)");
abs_x=abs(x);
abs_y=abs(y);
x/=gcd(abs_x, abs_y);
y/=gcd(abs_x, abs_y);
if(y<0) x=-x,y=-y;
sprintf(buf, "(%d,%d)", x, y);
return strdup(buf);
}

int main(void){
printf("%s\n", p(12,0));
printf("%s\n", p(34,56));
printf("%s\n", p(78,-90));
return 0;
}
743デフォルトの名無しさん:2007/12/07(金) 19:47:21
>>737
ごみくそーす
int main(void){
int secret_number;
int guess_number;
int i, score=0;
srand(time(NULL));
while (1) {
printf("New game!\n");
secret_number = rand() % 9000 + 1000;
for(i=0; i<9; i++){
printf("Make a guess the number: ");
scanf("%d", &guess_number);
if (guess_number < secret_number){
printf("You missed.\n");
printf("guess number < secret number\n\n");
}
else if(guess_number > secret_number){
printf("You missed.\n");
printf("guess number > secret number\n\n");
}
else{
printf("Bingo!\n");
score -= i;
break;
}
}
printf("Secret number was %d.\n", secret_number);
printf("Your score is %d.\n\n", score);
}
exit(0);
}
744デフォルトの名無しさん:2007/12/07(金) 20:30:16
9回であたらなかったら点が減らないってのはどうなのよ?
745デフォルトの名無しさん:2007/12/07(金) 20:57:54
>>742
> return strdup(buf);
これ、free() で解放する必要はないでしょうか?
746737:2007/12/07(金) 21:30:19
>>743
ありがとうございます
ごみくそーすにここまでやってくださって本当に感謝。助かりました。。。
747デフォルトの名無しさん:2007/12/07(金) 21:58:59
>>745
解放しなくて良いよ。
748デフォルトの名無しさん:2007/12/07(金) 22:25:16
>>747
では、strdup() の返す値は、スタック上にあるのでしょうか?ヒープ領域でしょうか?
前者なら strdup() の呼び出された関数から抜けると、その返り値は無効になりそうですし、l
後者ならば、やっぱり free() しないと、と考えるのですが。
ANSI の関数じゃないので、挙動がよくわからないのです。
749デフォルトの名無しさん:2007/12/07(金) 22:45:43
[1] 授業単元プログラミングU
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5407.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 12/7
[5] その他の制限: 特になし


750デフォルトの名無しさん:2007/12/07(金) 22:57:20
>>748
strdupの文字列はmallocされた領域だから、freeしないとダメ
751デフォルトの名無しさん:2007/12/07(金) 23:05:17
>>749
今日までじゃねーかwwww
752682:2007/12/07(金) 23:16:06
684さんありがとうございました。
753デフォルトの名無しさん:2007/12/07(金) 23:32:46
>>748
#include <stdio.h>
#include <memory.h>

/* struct mytime定義 省略 */
struct mytime sec2time(int sec)
{
struct mytime time;
memset(&time, 0x00, sizeof(time));
time.hour = sec/(60*60);
sec %= (60*60);
time.minute = sec/60;
sec %= 60;
time.second = sec;
return time;
}
/* time2sex省略 */
struct mytime add_time(struct mytime s1, struct mytime s2)
{
return sec2time(time2sec(s1) + time2sec(s2));
}
/* print_mytime 省略 */
int main()
{
struct mytime s1 = sec2time(4000);
struct mytime s2 = sec2time(9800);
print_mytime( add_time(s1, s2) );
return 0;
}
754デフォルトの名無しさん:2007/12/07(金) 23:39:06
755デフォルトの名無しさん:2007/12/08(土) 00:25:20
[1] 授業単元:C入門
[2] 問題文(含コード&リンク):1-2+3-4+・・・-100の和
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:?
 [3.3] 言語:C
[4] 期限:2007年12月8日23時
[5] その他の制限:本当に基礎的な事しかやってないので、
出来れば簡単なプログラムでお願いします。
756デフォルトの名無しさん:2007/12/08(土) 00:29:43
>>755
#include <stdio.h>
main(void){ return puts("-50") >= 0; }
757デフォルトの名無しさん:2007/12/08(土) 00:40:51
mallocされた領域だからって必ずfreeしないといけないわけではない。
758デフォルトの名無しさん:2007/12/08(土) 00:53:43
>>756
ありがとうございます。
ちなみに、for文を使ったらどうなるんでしょうか。
759デフォルトの名無しさん:2007/12/08(土) 00:58:30
>>758
#include <stdio.h>
int main() { int i = 0; for (; i < 1; i++) puts("-50\n"); }
760デフォルトの名無しさん:2007/12/08(土) 00:59:38
#include <stdio.h>
int main(void){ int i; for(i=0;i<1;i++)puts("-50"); return 0; }






かぶった orz
761デフォルトの名無しさん:2007/12/08(土) 01:02:42
>>758
#include <stdio.h>
main(void){
int i;

for(i=0;i<1;i++) printf("-50");
}
762デフォルトの名無しさん:2007/12/08(土) 01:11:19
>>758
#include <stdio.h>
main(void){
int i;

for(i=-50; i>-51; i--) printf("%d", i);
}
763デフォルトの名無しさん:2007/12/08(土) 01:14:38
同じネタは一回でいいよ。
764デフォルトの名無しさん:2007/12/08(土) 01:19:54
え??
puts(-50)ってw

int i;
int sum=0;
for(i=1; i++; i<=100) sum = (i%2 == 0) ? (sum-i) : (sum+i);
printf("1-2+3-4+・・・-100の和 = %d\n", sum);
765デフォルトの名無しさん:2007/12/08(土) 01:22:37
何やってんだorz
× for(i=1; i++; i<=100)
○ for(i=1; i<=100; i++)
766デフォルトの名無しさん:2007/12/08(土) 03:35:21
1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):読み込んだ2つの整数の割り算の答えを小数点以下100桁まで表示するプログラムを作りなさい。


[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C
[4] 期限:2007年12月9日9:00

767デフォルトの名無しさん:2007/12/08(土) 03:36:40
[3.3]とか[5]とかはしょるな
768デフォルトの名無しさん:2007/12/08(土) 05:58:56
>>766 もっと素敵なやり方があるかもしれないが
#include <stdio.h>

int main(void)
{
  int n1, n2, i;
 
  scanf("%d%d", &n1, &n2);
 
  printf("%d.", n1/n2);
  n1 = (n1%n2)*10;
  for(i = 0; i < 100; i++){
    printf("%d", n1/n2);
    if(n1%n2 == 0)
    break;
    n1 = (n1%n2)*10;
  }
 
  return 0;
}
769デフォルトの名無しさん:2007/12/08(土) 09:59:27
>>768

#include <stdio.h>

int main(void)
{
int n1, n2, i;

scanf("%d%d", &n1, &n2);

printf("%f...", (float)n1/n2);
printf("(省略されました・・全てを読むにはここを押してください)\n");

return 0;
}
770デフォルトの名無しさん:2007/12/08(土) 11:26:13
>>757
プログラム終了時に malloc した領域が OS に帰りますか。また、そうとして、それは処理系の仕事?それともOSの仕事?いずれにしても malloc() した領域を free() しないソースはきれいとは思えませんね、個人的には。
771デフォルトの名無しさん:2007/12/08(土) 11:30:38
プログラム終了時にはfreeしなくても全て消えるはずだ
メモリが解放されていないなら、実行中のはずだ
freeが必要なのは、サブルーチンから戻るときだ
772デフォルトの名無しさん:2007/12/08(土) 11:51:45
プログラム終了時にfreeしようとする人間はOSの動作を意識していない。
また、仕様にも無頓着だ。
773デフォルトの名無しさん:2007/12/08(土) 11:57:15
mallocしたらfreeするのを習慣づけておくのはいいことだよ
つい忘れがちになるし
774デフォルトの名無しさん:2007/12/08(土) 12:00:09
習慣にしなくて良い プログラムを終了したら消えるから
長時間起動するアプリでメモリリークが起こったら疑えばよい
775デフォルトの名無しさん:2007/12/08(土) 12:02:15
もっと燃えるような燃料をお願いします
776デフォルトの名無しさん:2007/12/08(土) 12:05:07
>>771は素人丸出しですね
少なくとも俺の開発している環境ではアプリ終了後も
確保したメモリ領域は残ってる
安西先生、MMUが欲しいです
777デフォルトの名無しさん:2007/12/08(土) 12:05:28
環境によってはメモリークの原因特定するの非常にダルイから、
「起こってから」とか悠長なこというのは自分一人でプログラム組む人だけにして欲しい

いや宿題スレに来るような人はそもそも将来プログラム組んで欲しくないけど
778デフォルトの名無しさん:2007/12/08(土) 12:05:46
「はきだめC/C++下級者の質問箱」向けのネタだな。
779デフォルトの名無しさん:2007/12/08(土) 12:07:53
プログラム終了時にwwwfreeしない人間はwwwOSの動作を意識していないwwwwwwwww
また、仕様にも無頓着だwwwwwwwwwwwww

自分の環境がwwwすべてだとwwww思うなよwww
バーヤwwwwwwwwwwwwwwwwwwwww

780デフォルトの名無しさん:2007/12/08(土) 12:09:53
>>776
どういう環境なのか、どういうソースだと残るのか書いてみ
781デフォルトの名無しさん:2007/12/08(土) 12:11:47
>>777
か、回答者もですか……?
782デフォルトの名無しさん:2007/12/08(土) 12:13:50
>>781
メモリリークとかに気をつければいいんじゃね?w

まぁ趣味で組むなら関係ないことだけどね
たとえ起動するたびにランダムでファイルが消えようと仕様の一言で済むし。
783デフォルトの名無しさん:2007/12/08(土) 12:29:45
>>780
組み込みの某RTOS。
mallocでもnewでも確保したやつは明示的に解放するまでは
システムをリブートするまで消えない。
784デフォルトの名無しさん:2007/12/08(土) 12:35:15
>>783
ほんとかよ?freeしないと消えない暗示にかかっているんじゃないだろうな?
たとえば200M確保して終了するプログラム作ったらその200Mにはアクセスできなくなるのか?
785デフォルトの名無しさん:2007/12/08(土) 12:36:19
>>776
それは環境依存の現象だね
一般化するのは危険

C言語の仕様ではプログラム終了時のメモリについて規定は無い
つまり、freeしたからといって、もしくはしなかったからといって
確保したメモリがどうなるかは完全に環境依存だ

windows、UNIX、Linuxについてはメモリリークは発生しない(ということになっている)
組み込みに関しては一般論で語るのは愚の骨頂
(組み込みにおいて安易に命令を増やしてよいわけがない)

つまり、理由もなくfreeを追加してよい場面は無いし
理由もなくfreeを書かないといったことも許されるわけがない

ただ、一つだけ言えることは安易に理由もなくfreeを記述することは
バグを増やす原因となりうることを意識しておかなければならないということだ
786デフォルトの名無しさん:2007/12/08(土) 12:37:56
そもそも、プログラムの起動・終了という概念があるOSですか?
787デフォルトの名無しさん:2007/12/08(土) 12:38:51
>>783
プログラムを終了しても、アクセス出来なくなる領域を残すとは、そのOSのバグでは?
キャッシュに残るとかなら正常だけど、終了してもアクセス不可はやばいよ
788デフォルトの名無しさん:2007/12/08(土) 12:38:57
メモリ空間がプロセスごとに独立しているのが当たり前と思えるいい時代じゃあないか
789デフォルトの名無しさん:2007/12/08(土) 12:42:33
おまえら解放、解放って左翼団体かよ
790デフォルトの名無しさん:2007/12/08(土) 12:47:24
じゃぁmallocは使わない方向で
791デフォルトの名無しさん:2007/12/08(土) 12:49:31
井の中の蛙が多いスレはここですか?

そもそもfreeをOSまかせにする奴は
メモリやらオブジェクトの生存期間を管理
できてない素人。

プログラム終了時にメモリが解放されると
言い張る奴はOSの仕様と言語仕様を勘違い
しているアホ
792デフォルトの名無しさん:2007/12/08(土) 12:52:09
まぁWindowsとLinuxで宿題の99%はまかなえそうだけどな
793デフォルトの名無しさん:2007/12/08(土) 12:54:04
>>791
OSの仕様を考えずに、なんでもかんでもfreeするほうがよっぽど素人。
794デフォルトの名無しさん:2007/12/08(土) 12:55:37
メモリの内容自体は確保したかによらずに0か1か入っていて、
確保したら別のソフト、OSからアクセスできるかどうかしか違わないはずだろう
アクセスしていたプログラムが終了しても解放されないのはおかしいだろ
795デフォルトの名無しさん:2007/12/08(土) 12:56:44
宿題スレに素人しかいないのは当たり前ジャマイカw
796デフォルトの名無しさん:2007/12/08(土) 12:59:25
OSの仕様を考えられなかったり、メモリやオブジェクトの生存期間を管理できない素人は、
とりあえずfreeした方がいいのかそれともOSに任せた方がいいのかって話題じゃないのか?
玄人さんは自分の好きなように管理してくださいよ
797デフォルトの名無しさん:2007/12/08(土) 13:03:06
100M確保してそのまま終了した場合、それを10回程度起動させたらメモリ不足になるのか実験してみてくれ
798デフォルトの名無しさん:2007/12/08(土) 13:03:12
>>793
つ [移植性]

別のOSで動かす時に全部に対応するfreeを書かないといけないんだぜ?

いっぺんオープンソースのライブラリとか見てみろ
それなりの経験者が書いているコードを
まあどうみても>>793は顔真っ赤にして
恥の上塗りしてるだけにしか見えないが
799デフォルトの名無しさん:2007/12/08(土) 13:04:45
組み込みで100Mも確保したらそれだけでメモリ不足になりそうだな
800デフォルトの名無しさん:2007/12/08(土) 13:07:12
信念を持ってfreeしない奴はいいんだがな

>>793みたいに勘違いしてる奴が現場にくると
周りが迷惑する

なのできちんと理解できない初心者のうちは
黙ってfreeしとくのがいいと思います
801デフォルトの名無しさん:2007/12/08(土) 13:07:46
>>793
??
個人のスタンスなんてどうでもいいけど、
処理系依存を出来るだけ避けて、
規格合致なCのコードを書こうとするスタンスの何が素人?
802デフォルトの名無しさん:2007/12/08(土) 13:08:54
メモリは16MBしか積んでません!(^O^)
803デフォルトの名無しさん:2007/12/08(土) 13:09:01
いい加減スレ違いだクソども
804デフォルトの名無しさん:2007/12/08(土) 13:10:55
では5Mずつで4回起動不可なのかやってみれば分かる
805デフォルトの名無しさん:2007/12/08(土) 13:12:51
みんなJAVAを使えばいいと思うよ
806デフォルトの名無しさん:2007/12/08(土) 13:14:30
メモリを管理しているのはOSで、アクセス管理しているもOSだ
プログラムが終了しているにもかかわらず、アクセス不可のままにしておくOSは壊れている
807デフォルトの名無しさん:2007/12/08(土) 13:15:30
>>804
だめでした!\(^_^)/
OSもがめてるから3回目でmalloc失敗!
808デフォルトの名無しさん:2007/12/08(土) 13:16:45
スレタイ見てない通りすがりの組込み技術者からすると、
OSあるだけ幸せ。
809デフォルトの名無しさん:2007/12/08(土) 13:16:51
>>807
続けてじゃなくて5M確保したら、解放無しで終了するプログラムを4回実行
810デフォルトの名無しさん:2007/12/08(土) 13:17:15
mallocできるだけ幸せ
811デフォルトの名無しさん:2007/12/08(土) 13:19:27
>>809
そうやりました!
だめでした!
812デフォルトの名無しさん:2007/12/08(土) 13:21:06
じゃあ再起動しないと、だめになっちゃうの?そのOSおかしいよ
813デフォルトの名無しさん:2007/12/08(土) 13:28:25
>>812
お前らが使ってる携帯にも使われてますが何か?
814デフォルトの名無しさん:2007/12/08(土) 13:31:00
  freeをした場合にメモリリークになるのか
  freeをしなかった場合にメモリリークになるのか

環境依存です。
815デフォルトの名無しさん:2007/12/08(土) 13:32:01
>>770
OSの仕事とかいうに、ちゃんとプログラム内でfreeさせなきゃいけない
でないとメモリリークになる
スレッドモデルでfreeし忘れたら、プロセスが終了するまで、大量にリークしたままの状態になる
もちろん、プロセス終了時に解放されるから、分かってやってるんならいいけど、作法としてはNG
816デフォルトの名無しさん:2007/12/08(土) 13:32:19
>>801
freeをした場合の不都合については無知なんだね
移植性を考慮した場合、freeはdefineしておくのが常道
817デフォルトの名無しさん:2007/12/08(土) 13:32:30
>>813
OSは正しくプログラムが終了している事を知っているのに、アクセスできないままにしておくのはバグだと思うよ
818デフォルトの名無しさん:2007/12/08(土) 13:34:11
プログラム終了時にmallocしたメモリ、及びfreeしたメモリがどうなるかなんて
言語仕様には書かれていません
819デフォルトの名無しさん:2007/12/08(土) 13:35:24
freeしてたらどんなOSでも正しく動作する
そんな風に考えていた時期もありました
820デフォルトの名無しさん:2007/12/08(土) 13:38:41
メモリが使えるかどうかアクセス制御しているのはOSであるから、プログラム側で解放しなかった場合、
それを解放するか、しないかはOSが決めることだ
しかし、しなかった場合、プログラムが終了しているのにそのままにしておくのはおかしい
821デフォルトの名無しさん:2007/12/08(土) 13:39:34
メモリリークが起こるって主張は容易に理解できるんだけど、>>819みたいなのってどういう意味?
プログラム内でmallocした領域をfreeしちゃいけないって何だ?
解放済みの領域をfreeしたとか、そんなマヌケな話?
822デフォルトの名無しさん:2007/12/08(土) 13:40:05
おまえら、移植性とか言語仕様とか環境依存とか宿題出されるような素人に関係ない話をこのスレに持ち込むなw
823デフォルトの名無しさん:2007/12/08(土) 13:41:59
いつものキチガイだから相手するなよ
824デフォルトの名無しさん:2007/12/08(土) 13:42:07
質問されてるんだからしょうがないじゃないか
そういう周辺事項を含めて、宿題が出ているのかもしれない
俺も昔、Unixのメモリ管理のレポートを書かされた気がする
上位アドレスからメモリを確保するか、下位アドレスからメモリを確保するのか、とかそんな話だったかな・・・忘れた
825デフォルトの名無しさん:2007/12/08(土) 13:49:47
質問者そっちのけで自分理論展開してたようにしか見えなかったが
826デフォルトの名無しさん:2007/12/08(土) 13:51:27
free必要だよ派
・きれいとは思えませんね派(感情派)
・サブルーチンから戻るときは必要派(不穏分子?)
・習慣づけておくのはいいことだよ派(みんながそう言ってたよ派)
・俺の環境では確保したメモリ領域は残ってる派(目の前の環境がすべてだよ派)
・趣味で組むなら関係ない派(仕様です系過激派)

free不必要だよ派
・長時間起動するアプリでメモリリークが起こったら疑えばよい(どうせ日次リブートやるんだよ派?)
・windows、UNIX、Linuxでメモリリークは発生しない派(ファンタジー派)
・mallocは使わない派(石橋を叩いてみたけどやっぱり渡らない派)
827デフォルトの名無しさん:2007/12/08(土) 13:51:44
>>824
それなら質問者と対話しろ
おきざりにするなw
828デフォルトの名無しさん:2007/12/08(土) 13:55:13
結局、free必要だって言ってる奴は目の前の環境がそうだからそうしろって言ってるだけで
OS仕様や言語仕様は全然みてないってことだよな?

対する立場の奴は仕様で規定されてないから確認しろっていう当たり前のことを言ってるだけ
829デフォルトの名無しさん:2007/12/08(土) 13:56:18
おまえらがくだらない事ばかり言うからぼるじょあスレに客とられてるじゃねーか
830デフォルトの名無しさん:2007/12/08(土) 13:56:56
aho
831デフォルトの名無しさん:2007/12/08(土) 13:58:18
>>828
宿題スレに来るような人にOS仕様や言語仕様を見ろだの確認しろって言う方が無茶だろ
832デフォルトの名無しさん:2007/12/08(土) 13:59:00
>>828
だから、その仕様ってなんだ?
メモリリークになる仕様じゃないのか?
free反対派が何をいいたいのかさっぱりわからない
もっと技術的根拠を明確にして
833デフォルトの名無しさん:2007/12/08(土) 14:00:25
free() するかどうかなんて、その時の気分でいーんじゃね?
834デフォルトの名無しさん:2007/12/08(土) 14:00:57
メモリ管理しているのはOSであるから、プログラム側で解放しなかった場合、
それを解放するか、しないかはOSが決めることだ
しかし、プログラムが正しく終了しているのにメモリアクセス不可にしておくのはおかしい
835デフォルトの名無しさん:2007/12/08(土) 14:03:13
836デフォルトの名無しさん:2007/12/08(土) 14:04:38
どうせ清掃員が片付けるからとか言って煙草を道にポイ捨てするような奴らと
同じにおいがするってんだよ
とっととガベコレのある言語にでも行っちまえばいいのさ
837デフォルトの名無しさん:2007/12/08(土) 14:05:24
もともと
-------------------
C言語の本をにはたいてい
mallocしたメモリーをもう使わないなら放っておけば
終了時に自動的に解放されるので明示的にfreeしなくても良い
と書いてあるのですが、先日ある雑誌を見ると
明示的にfreeしないとメモリーリークになる
と書かれていました。どちらが正しいのでしょうか。
-------------------
って書き込みがあって、「いやそんなことはない。Free すべきだ」
「環境によってはほっておいても良いよ」って話が続いているだけ。

元々の「free をしなくてもよい」と書かれた文献に関しては
元質問者は返答なし。たぶんびびって逃げたんだろう。
838デフォルトの名無しさん:2007/12/08(土) 14:05:56
ガベコレのある世界はディ○ニーランドみたいな世界なのか
839デフォルトの名無しさん:2007/12/08(土) 14:07:04
、malloc() したメモリーを free() せずに終了した場合、

UNIX、MS-DOS、Windows95/98/NTならメモリーリークは起きない
ANSI Cならメモリーリークは起きない
(malloc()/free() という関数仕様から) まともな OS とまともな言語処理系の組み合わせならメモリーリークは起きないと期待してよい
上記のいずれでもない環境ではメモリーリークを起こす可能性がある (しかし free() したからといってメモリーリークが起きないとは保証できない)
840デフォルトの名無しさん:2007/12/08(土) 14:08:06
組み込み用の OS では "ヒープの管理は全部アプリケーション側でやってね" と言うスタンスのものが少なくないそうだ。
この環境で free() 相当の関数を呼び忘れるとメモリーリークが起きるだろうが、これも用意されている関数は
malloc()/free() である可能性は低いと思われる。
841デフォルトの名無しさん:2007/12/08(土) 14:09:21
freeしなくても良い環境とするべき環境があるなら
とりあえずしておくのが無難
842デフォルトの名無しさん:2007/12/08(土) 14:10:42
freeしなければいけない環境なんて存在しないから、するだけ無駄。
843デフォルトの名無しさん:2007/12/08(土) 14:11:08
・気持ち悪いから解放しとけ
・組み込み(携帯?)の某OSではプログラム終了時にメモリ解放されない

解放したほうが良い理由はこの2つだけ?
844デフォルトの名無しさん:2007/12/08(土) 14:12:08
組み込み某OSで提供されているのは、実はmallocではない。
845デフォルトの名無しさん:2007/12/08(土) 14:12:12
>>843
常駐物なら解放しないとまずい
846デフォルトの名無しさん:2007/12/08(土) 14:13:23
習慣づけておくのはいいことだよ派の人としては、
プログラムの途中でもfreeするの忘れたりするから、習慣づけしておいた方がいいと思う

みんなプログラム終了するの前提だろ?
そういうレベルで言えば組み込みだって電源抜けばメモリリークは解消されるから無視していいだろ
847デフォルトの名無しさん:2007/12/08(土) 14:13:39
1. freeした時のメリット
・移植性に優れる

2. freeした時のデメリット
・?

3. freeしなかった時のメリット
・?

4. freeしなかった時のデメリット
・特定環境でメモリリークの原因
848デフォルトの名無しさん:2007/12/08(土) 14:13:47
>>834

もしかしてfree反対ってことを主張している?
反論としては弱いよ
まず、メモリ管理しているのはOSだけじゃなくて、プログラムでもやっている(もちろん物理アドレスの管理なんて出来ないけど)
1プロセスあたりの最大メモリはOSの設定によって定められてるし、(たとえば4GB)
実際の物理メモリの容量だって制限はある
制限が厳しい環境なら当然、メモリは潤沢に使えない
1プロセスあたりに、たかだか数MBのリークを起こしたとしても、
そのプロセスを大量に同時起動しなきゃいけない場合があったら、無視できない値になる
それに、自分で確保した領域は、自分で片付けないとね
あと、メモリアクセス不可にしておくのはおかしい、と言ってる時点で、OSに欠陥がある可能性も考慮しないといけないんだから、
やっぱりfreeはしなきゃ
849デフォルトの名無しさん:2007/12/08(土) 14:14:52
>>845
プログラムの「終了」時のfreeの話をしている。
850デフォルトの名無しさん:2007/12/08(土) 14:15:53
>>839
メモリリークはどんな環境でも起こるよw
>>839のいってることはメモリリークした場合に、OSが掃除してくれるかどうかでしょ
851デフォルトの名無しさん:2007/12/08(土) 14:16:27
インライン展開されているルーチンで動的確保をしている場合はメモリーリークするんじゃないの?
インライン展開されていないルーチンは毎回自動で解放されるんだろうか
852デフォルトの名無しさん:2007/12/08(土) 14:16:38
>>847
2. freeした時のデメリット
終了時のfreeに備えるために、プログラムが不必要に複雑になる場合がある。
853デフォルトの名無しさん:2007/12/08(土) 14:17:03
>>849
ちゃんと終了しない可能性があるとしたらどうするんだ??
854デフォルトの名無しさん:2007/12/08(土) 14:23:10
>>852
たかだかfreeするだけで複雑になる場合、プログラムの設計から見直した方がいいと思うけど?
別にfreeするしないは関係なく。
855デフォルトの名無しさん:2007/12/08(土) 14:24:36
まともなOSを使っていることを前提に話をしようぜ!
856デフォルトの名無しさん:2007/12/08(土) 14:24:53
ここでいうメモリリークとは
アプリケーションがmallocで確保したメモリを
アプリケーション終了後に使用不可能になることを指す

定義厨が現れる前に定義してやったぜ!
857デフォルトの名無しさん:2007/12/08(土) 14:26:06
まともなOSを使っている場合、サブルーチンから戻るときにfreeしないとメモリ残ってるの?
858デフォルトの名無しさん:2007/12/08(土) 14:26:22
>OSの不具合によりfreeしなければメモリリークが発生する場合がある

これただのバグだろ?特定環境でのバグ回避の手法を一般化する理由はなに?
859デフォルトの名無しさん:2007/12/08(土) 14:27:33
>OSの不具合によりfreeしなければメモリリークが発生する場合がある
そんなOSなら、freeしたってメモリリークが発生するだろう。
860デフォルトの名無しさん:2007/12/08(土) 14:27:37
>>839
>ANSI Cならメモリーリークは起きない
ごめん。
否定する気は無いんだけど、これ、規格のどの辺?
良く分からん。

>>846
>そういうレベルで言えば組み込みだって電源抜けばメモリリークは解消されるから無視していいだろ
電源抜けば、とかソレは論外じゃねぇ?
どんな環境でも電源抜けばメモリリークは解消するだろ。
861デフォルトの名無しさん:2007/12/08(土) 14:27:47
mallocしたメモリが関数抜けただけで解放されたら世の中大騒ぎだぜ
862デフォルトの名無しさん:2007/12/08(土) 14:29:08
実装レベルの話でスマンがfreeは終了遅延の原因になるからタイミングにシビアな環境で安易にやるなよ
863デフォルトの名無しさん:2007/12/08(土) 14:29:25
>>853
メモリリーク云々以前にゾンビ化してプロセスごとリークする可能性がある。
864デフォルトの名無しさん:2007/12/08(土) 14:29:34
>>856
えー・・・引いたわ
無理やりすぎるなぁ、そんなこといったら大抵のOSはメモリリークなしってことになる
一気にテンション下がった('A`)
テンションあげるためにオナヌーでもしてくるか
865デフォルトの名無しさん:2007/12/08(土) 14:31:48
>>862
タイミングにシビアな環境で宿題やらせるなよw
866デフォルトの名無しさん:2007/12/08(土) 14:32:03
>>862
なるほど!そういう状況があるわけか、勉強になるなぁ
free反対派の意見としては一番しっくりくる
867デフォルトの名無しさん:2007/12/08(土) 14:32:24
>>862
シビアなら動的に何度も確保せずはじめに必要な分とっておけばよい
868デフォルトの名無しさん:2007/12/08(土) 14:33:25
シンビアンだけにシビアね
869デフォルトの名無しさん:2007/12/08(土) 14:33:46
>>861
関数内の変数は解放されるけど、newとかは解放されないの? これがメモリーリークってことなの?
870デフォルトの名無しさん:2007/12/08(土) 14:34:36
実際にメモリーリークしている簡単な例を挙げてくれ
871デフォルトの名無しさん:2007/12/08(土) 14:37:52
>>870
プログラム終了時とかそういう話でなく?

丸投げならテンプレ守れ。
872デフォルトの名無しさん:2007/12/08(土) 14:39:38
初音たんの実装まちがって愛液リークしまくり
873デフォルトの名無しさん:2007/12/08(土) 14:42:43
おまえらのプログラムが遅いのはfreeを使ってるからだよ
874デフォルトの名無しさん:2007/12/08(土) 14:44:34
お前ら頭いいなww俺にはさっぱりだ
875デフォルトの名無しさん:2007/12/08(土) 14:47:52
これを再現するコード尾根

メモリリークの種類

アドレスの上書きによるリーク
このエラーが発生するのは、動的に割り当てられたメモリ ブロックが解放できなくなるような
ポインタの再設定が行われたときです。特に、動的割り当てブロックを指す唯一のポインタが
上書きされたときに、このエラーが発生します。

メモリ領域の解放にともなうリーク
解放したメモリ ブロックの中に、ほかのメモリ ブロックへのポインタが含まれている場合に発生します。

戻り値が無視されたために発生するメモリ リーク
メモリ ブロックを指すポインタを呼び出し元に関数が返した場合に、そのポインタが呼び出し元で無視されたときに発生します。

自動変数の喪失にともなうリーク
あるメモリ ブロックを指すローカル変数 (ポインタ) を関数が持っている場合に、
ポインタをグローバル変数に保存せずに関数が終了したとき、またはポインタを
戻り値として返さずに関数が終了したときに発生します。
http://www.techmatrix.co.jp/products/quality/insure/feature/error_sample3.html
876デフォルトの名無しさん:2007/12/08(土) 14:49:52
>>869
メモリ領域にはヒープ領域とスタック領域がある
スタック領域に確保されたメモリはスコープ(例えば関数や{}で囲まれた範囲)を抜けると解放される
ヒープ領域はスコープを抜けても解放されない

mallocやnewはヒープ領域に確保されるのでスコープを抜けても解放されない
877デフォルトの名無しさん:2007/12/08(土) 14:51:57
>>875
どれも、終了時にfreeしなかったために起きるものではない。

- アドレスの上書きによるリーク
char *p = malloc(10);
p = malloc(10);

- メモリ領域の解放にともなうリーク
char **p = (char**)malloc(sizeof(char*));
*p = malloc(10);
free(p);

- 戻り値が無視されたために発生するメモリ リーク
char *foo() { return malloc(10); }
void bar() { foo(); }

878デフォルトの名無しさん:2007/12/08(土) 14:53:08
- 自動変数の喪失にともなうリーク
void foo() { char* p = malloc(10); }
879デフォルトの名無しさん:2007/12/08(土) 14:55:23
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *buf;

    buf=(char *)malloc(10);
    printf("<<<%p>>>\n", buf);
    return 0;
}

メモリリーク(環境依存)だぜ!ぃゃっはー!!
880 ◆3HioLDbjnQ :2007/12/08(土) 14:55:50
質問です。宜しくお願い致します。
[1] 授業単元: 新人研修
[2] 問題文(含コード&リンク):
Test.DllからAの関数を呼び出しなさい。
Aの関数は戻り値はBOOL型で、
引数がTRUEならFALSEを返してFALSEならTRUEを返します。
HMODULE hTest = NULL;
hTest = LoadLibrary(_TEXT("Test.dll"));
( ここが宿題です )
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VS2005
 [3.3] 言語:C++
[4] 期限: ([2007年12月08日17:30まで]
[5] その他の制限: なし
881デフォルトの名無しさん:2007/12/08(土) 14:59:02
宿題解きに来たらお前ら何の話してんだよw
882デフォルトの名無しさん:2007/12/08(土) 15:00:59
今の時期に新人研修ってそこはかとなく危険な香りがする
883デフォルトの名無しさん:2007/12/08(土) 15:01:55
[1] 授業単元:コンピュータプログラミング
[2] 問題文:1日目はn円、2日目はn*2円、と前日の倍額を貯金したら何日で1000万円を超えるか?
貯金の合計金額は?を計算するプログラムを作成しなさい。ただし、利子は考えないものとする。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:Fujitsu Fortran & C
 [3.3] 言語: C
[4] 期限: 12/8 
[5] その他の制限: なし
よろしくお願いします。
884デフォルトの名無しさん:2007/12/08(土) 15:03:25
>>880
VERIFY(((BOOL(*)(BOOL))GetProcAddress(hTest, "A"))(TRUE) == FALSE);
VERIFY(((BOOL(*)(BOOL))GetProcAddress(hTest, "A"))(FALSE) == TRUE);
885デフォルトの名無しさん:2007/12/08(土) 15:05:54
>>870
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *hello_project()
{
    const char * member[16]={
"福田明日香","石黒彩","市井紗耶香",
"中澤裕子","後藤真希","保田圭",
"安倍なつみ","辻希美","加護亜依",
"飯田圭織","矢口真里","石川梨華",
"紺野あさ美","小川麻琴","吉澤ひとみ",
"藤本美貴"
    };
    char *buf;
    buf=(char *)malloc(10000);
    strcpy(buf, member[rand()%16]);
    return buf;
}

int main()
{
    int i;
    for (i=0 ; i<100 ; i++)
        printf("%s\n", hello_project());
    getch();
    return 0;
}
886 ◆3HioLDbjnQ :2007/12/08(土) 15:13:40
>882
先月までは、サポート業務してました。

>884
ありがとうございます。
887デフォルトの名無しさん:2007/12/08(土) 15:21:53
>>860
839 じゃないが、ISO/IEC 9899:1999

6.4.2 Storage durations of objects.
1. An object has a storage duration that determines its lifetime. ...
2. The lifetime of an object is the portion of program execution
  during which storage is guaranteed to be reserved for it. ...

オブジェクトの生存時間はプログラムの実行時間の内側だけなので,
プログラムが終了したらオブジェクトも死なないといけない.
888デフォルトの名無しさん:2007/12/08(土) 15:25:07
1] 授業単元: 計算機
[2] 問題文:リンクリスト、スタック、キュー、2分探索木を使って、ファイルから入力した数字を逆順に表示するプログラムを作成
<実行例>
ファイルmath.c
1
5
3
2
4
作成したプログラム使用後
4
2
3
5
1
と表示させる
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 12月10日まで
[5] その他の制限: よろしくお願いします
889デフォルトの名無しさん:2007/12/08(土) 15:26:03
>>883
#include<stdio.h>
#include<math.h>

main(){
int money=0,i=0,n;

printf("一日目の金額:");
scanf("%d",&n);

while(money<=10000000){
money += n*pow(2,i);
printf("%d日目:%d円\n",i+1,money);
i++;
}
}
890デフォルトの名無しさん:2007/12/08(土) 15:26:22
>>888
>リンクリスト、スタック、キュー、2分探索木
これ全部使わなきゃいけないのか?
891889:2007/12/08(土) 15:27:19
そうです・・・
892デフォルトの名無しさん:2007/12/08(土) 15:28:12
↑すみません、888です・・
893デフォルトの名無しさん:2007/12/08(土) 15:29:35
>>891
スタックの実装にリンクトリストは使えるけど、
キューや二分探索木の出番を考えるのは難しいぞ。
894デフォルトの名無しさん:2007/12/08(土) 15:30:18
>>883
#define TARGET 10000000
#include <stdio.h>

int tyotikunissuu(long *base, long add)
{
(*base)+=add;
if (*base > TARGET)
return 1;
return 1+tyotikunissuu(base, add*2);
}

int main()
{
long n;
long chokin=0;
int nissuu;

scanf("%d", &n);
nissuu=tyotikunissuu(&chokin, n);
printf("%d日で%d円の貯金\n", nissuu, chokin);
return 0;
}
895デフォルトの名無しさん:2007/12/08(土) 15:33:49
キューは無理だろw
896デフォルトの名無しさん:2007/12/08(土) 15:36:48
まさかリンクリスト、スタック、キュー、2分探索木を同時に使えって話なのか!?
897デフォルトの名無しさん:2007/12/08(土) 15:39:49
>>887
6.4.2 Identifiers
(;゚д゚)・・・

6.2.4でした。
マジメにthx!
898デフォルトの名無しさん:2007/12/08(土) 15:46:01
>>895
ファイルから読み込む一時領域としてキューを使えば、キューはまだ何とか。
二分探索木ってどこで使うんだ?
899888:2007/12/08(土) 15:46:17
>>895
>>896

おそらくキューは外していいのかなと自分では思っているのですが

今までずっと、キューもリンクリストも!?っと思い、混乱しておりました
900デフォルトの名無しさん:2007/12/08(土) 15:49:49
二分探索木は順序を逆にするのに使えるんだがそうすると次はスタックが余ってしまう
901デフォルトの名無しさん:2007/12/08(土) 15:50:26
いやいや、それぞれの方法で実装してみてそれぞれの特性を掴め、って課題だろw

キューがあるのは、キューがこれにまるで向いていないことを理解させるためじゃないの?
902デフォルトの名無しさん:2007/12/08(土) 15:51:01
質問!
二分探索木って二分木とどこが違うんですか?
903デフォルトの名無しさん:2007/12/08(土) 15:51:10
じゃあ、キューは解なしが正解か
904デフォルトの名無しさん:2007/12/08(土) 15:53:33
スタック、リスト、二分探索木を使って計三回反転させればいい。
905デフォルトの名無しさん:2007/12/08(土) 15:54:41
反転したデータをキューに詰め込んで、表示する関数に渡せばいいんだろ。
906デフォルトの名無しさん:2007/12/08(土) 15:56:56
キューとスタックは多くとも二個使えば他方を実装できることが知られてるぞ
907デフォルトの名無しさん:2007/12/08(土) 16:07:09
BSTって逆順に並べ替えるのにつかえるか?
908デフォルトの名無しさん:2007/12/08(土) 16:09:14
挿入番号をキーにしてEXTRACT_MAX()をキーの数だけやればいい
壮大な無駄だな
909デフォルトの名無しさん:2007/12/08(土) 16:09:49
行番号をキーにして全行を順番に挿入して、
最後の行から番号を減らしながら取り出せば良いじゃん
910デフォルトの名無しさん:2007/12/08(土) 16:13:47
>>906
ああ、そうか。
キューに全部放り込んだあと、別のキューに入れていって、
最後の要素だけ表示して追加はしない、を繰り返せばいいのか。
911デフォルトの名無しさん:2007/12/08(土) 16:16:30
912デフォルトの名無しさん:2007/12/08(土) 16:20:21
「せっかくだから」クソワロタwwwwww
913デフォルトの名無しさん:2007/12/08(土) 16:22:25
>>911
終了時にfreeしないと怒るやつがいるぞ。
こんなプログラムで、freeするやつはバカだが。
914デフォルトの名無しさん:2007/12/08(土) 16:22:59
つまらん話題を蒸し返すな
915デフォルトの名無しさん:2007/12/08(土) 16:29:14
つか回答側は別にfreeしてなくても関係ないしな
916デフォルトの名無しさん:2007/12/08(土) 16:31:01
>>913
いやいやそこはfreeしないでおいて初心者臭さを出すのですよ
917デフォルトの名無しさん:2007/12/08(土) 17:53:13
プログラム終了時にメモリが解放されないのは
OSのバグとか言い張ってる池沼がいたみたいだが
そもそもプロセスの概念がないOSもあるんだよな

もうちょっといろいろな世界を見た方がいいと思った

freeで遅延終了?
たぶんfreeの実装を一度も見たことないんだな

ぬるぽ
918デフォルトの名無しさん:2007/12/08(土) 18:00:02
ぬ る ぽ !
919デフォルトの名無しさん:2007/12/08(土) 18:01:22
freeの実装はANSIの規定により処理系依存です。
920デフォルトの名無しさん:2007/12/08(土) 18:07:09
>freeで遅延終了?
関数コールそのもののオーバーヘッドが気になるような環境で
nsecオーダーのタイミングと戦ったことが無いのは、
それはそれで幸せなんで、いーんじゃないかね。
921デフォルトの名無しさん:2007/12/08(土) 18:08:11
処理系依存なのは百も承知なんだが
遅延終了なんたら言ってる奴は自分の所の
環境でどういう処理が行われてるのか
調べたこともないんだと思う

ぬるぽ
922デフォルトの名無しさん:2007/12/08(土) 18:13:11
>>920
割込ハンドラとかかな?
そんなシビアな環境ならmalloc系関数は自殺行為です!
923デフォルトの名無しさん:2007/12/08(土) 18:13:35
プロセスの概念さえないOSに、プログラムの終了なんてあるわけがないこともわからない池沼
924デフォルトの名無しさん:2007/12/08(土) 18:17:08
>>923
プログラムの開始、終了の定義についてkwsk
925デフォルトの名無しさん:2007/12/08(土) 18:26:12
926883:2007/12/08(土) 18:36:47
>>889
>>894
参考になりました。ありがとうございます。
927デフォルトの名無しさん:2007/12/08(土) 18:43:21
骨があり、だが高々30分ほどで終わりそうな宿題プリーズ
928デフォルトの名無しさん:2007/12/08(土) 19:20:40
[1] 授業単元:
[2] 問題文(含コード&リンク):()

相異なるサイコロを N 個振ったとき、合計が K となる
パターンの個数を表示せよ。ただし N ≦ 50, K ≦ 300 としてよい。

例:
N = 2, K = 4 → 1+3, 2+2, 3+1 の 3 個
N = 3, K = 4 → 1+1+2, 1+2+1, 2+1+1 の 3 個

[3] 環境
 [3.1] OS: 問わず
 [3.2] コンパイラ名とバージョン: 問わず
 [3.3] 言語: どちらでも可
[4] 期限: 12月09日まで
[5] その他の制限: とくになし
929デフォルトの名無しさん:2007/12/08(土) 19:39:42
>>928
#include<stdio.h>

int dice_sum_pattern(unsigned n, unsigned k){
if (n == 1){
if(k <= 6) return 1;
else return 0;
} else {
int p = 0 , i;
for(i = k-1; k-i <= 6 && i > 0; --i) p += dice_sum_pattern(n-1,i);
return p;
}
}

int main(){
int n,k;
printf("The number of dices:");
scanf("%d",&n);
printf("The sum of numbers:");
scanf("%d",&k);
printf("The number of the pattern:%d",dice_sum_pattern(n,k));
return 0;
}
930929:2007/12/08(土) 19:45:40
すまん、50と300なんて入れたらかなり時間かかるなこれw
真面目に作りなおします
931デフォルトの名無しさん:2007/12/08(土) 19:59:58
>>928
long long使って良い?
932デフォルトの名無しさん:2007/12/08(土) 20:13:45
ごめん、long longじゃ足りないわ
933デフォルトの名無しさん:2007/12/08(土) 20:22:48
足りないのはおまえの愛だ
934デフォルトの名無しさん:2007/12/08(土) 21:01:27
>>928
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5434.txt

おまけでパターンも表示している。いらなかったら
- int dmy[50];
- int total_n;
if(k>=1) return 1;
- /* パターン表示 */
- printf("(");
- for(i=0;i<total_n;i++){
- printf("%d",dmy[i]);
- }
- printf(")\n");
- /* ここまで */
return 0;


/* まだダイスが残っていれば、チェックを続ける */
ret = 0;
for(i=1;i<=6;i++){
- dmy[total_n-n] = i; /* total_n-n番目の数値を1〜6に変更 */
ret += dice_sum_pattern(n-1 , k-i);
}

return ret;
935デフォルトの名無しさん:2007/12/08(土) 21:04:35
>>928
#include <iostream>

//typedef long long num_t;
typedef double num_t;

num_t t[51][301];

num_t solve(int n, int k)
{
if(t[n][k] != -1)
return t[n][k];

if(n == 1)
return t[n][k] = (k <= 6 ? 1 : 0);

num_t sum = 0;
for(int i=1;i<k&&i<=6;i++)
sum += solve(n-1, k-i);
return t[n][k] = sum;
}
int main()
{
int n, k;
std::cin >> n >> k;
for(int i=0;i<50;i++)
for(int j=0;j<300;j++)
t[i][j] = -1;
std::cout << solve(n, k) << std::endl;

return 0;
}
936デフォルトの名無しさん:2007/12/08(土) 21:08:56
937デフォルトの名無しさん:2007/12/08(土) 21:09:13
>>934
1,1を入れたら0と表示されましたが。
938デフォルトの名無しさん:2007/12/08(土) 21:11:24
どれもめちゃくちゃ計算量多そうだな
でも再帰以外で解けなさそうだし・・・
939デフォルトの名無しさん:2007/12/08(土) 21:12:10
>>935
ちょwww

doubleを==で比較するなんて恐ろしい子、って言ってもいい?
配列やlonglongを使う意味がわからん……
940デフォルトの名無しさん:2007/12/08(土) 21:13:31
N=50 K=150入れたら俺のPCが本気出し始めたwww
941デフォルトの名無しさん:2007/12/08(土) 21:14:44
>>937
ワロタw
if(n==0){
if(k>=1) return 0; // ここと
/* パターン表示 */
printf("(");
for(i=0;i<total_n;i++){
printf("%d",dmy[i]);
}
printf(")\n");
/* ここまで */
return 1; //ここ
}

orz
942デフォルトの名無しさん:2007/12/08(土) 21:17:30
>>940
直観的だが、[1,2,3,4,5,6]の平均3.5 * ダイスの数が一番パターン多いんじゃないかな?
n=50ならk=175
943デフォルトの名無しさん:2007/12/08(土) 21:20:26
>>939
あ、しまったw
最初long longで作ってて、桁が足りないからdoubleに変えただけでチェックしてなかった。
でもこの場合-1代入して、-1と比較するだけだから問題なさそうな気もするけど、その辺はわからないです。
944デフォルトの名無しさん:2007/12/08(土) 21:20:28
>>941
50、300を入れたら1と表示されましたが。
945デフォルトの名無しさん:2007/12/08(土) 21:22:16
>>937
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5437.txt
なおした。ついでにチェックもいれた。

>>944
50個のダイスが全部6になっている状態以外で300になる?
946デフォルトの名無しさん:2007/12/08(土) 21:22:18
>>928
不真面目に多倍長計算。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5438.cpp

>>939
配列でメモ化しないと計算量が爆発するし、
普通の整数ではオーバーフローする。
947デフォルトの名無しさん:2007/12/08(土) 21:22:50
>>938
>>935は結果を保存してるっぽいから多分速い
doubleとかいい加減だが

あと、再帰はループに直せるはずだから再帰以外で解けないというのは違う…かな?
948デフォルトの名無しさん:2007/12/08(土) 21:28:47
最大値は26617249029052543563966858745544940456だから
128ビット整数があれば足りるな
949デフォルトの名無しさん:2007/12/08(土) 21:31:53
a[0]+・・・+a[N-1]=K、 a[i]<=a[i+1]を解けばいいだけだろう
はじめに全て1にして余りがあったら分配していけばよいだろう
950デフォルトの名無しさん:2007/12/08(土) 21:32:52
そうでもなかったな
951929:2007/12/08(土) 21:36:54
>>928
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5439.txt
mallocで二次元作るのめんどくて一次元にしたら、添え字の計算でミスして余計に時間かかりまくったorz
再帰未使用です
952デフォルトの名無しさん:2007/12/08(土) 21:39:59
多分、この問題突き詰めていけば数式一本で計算終了できそうな悪寒。
953デフォルトの名無しさん:2007/12/08(土) 21:41:40
free論争再発の兆し
954デフォルトの名無しさん:2007/12/08(土) 21:42:59
個数が限定でない和が10倍は解ける?

合計が K となるサイコロのパターンの個数を表示せよ。ただし K ≦ 3000 とする
955デフォルトの名無しさん:2007/12/08(土) 21:44:59
>>954
2^(k-1)
956デフォルトの名無しさん:2007/12/08(土) 21:45:50
最低3000個、最高500個必要だが
今思ったがコンビネションのC(m,n)と関係ないか?
957デフォルトの名無しさん:2007/12/08(土) 21:49:02
C(3000,0)  C(2999,1)  C(2998,2) の気がしている
958デフォルトの名無しさん:2007/12/08(土) 21:49:25
>>956
最初コンビネで解こうと思ったら、一つの最大値6ってのをどうすればいいか分からなかったorz
俺の貧弱数学脳によればこれは組み合わせでは解けない、と思う(自信ないが)
959958:2007/12/08(土) 21:53:13
ああ、>>954の方の話か
>>958は忘れてくれ
960デフォルトの名無しさん:2007/12/08(土) 21:54:38
もっと簡単なしゅくだいかもーん
961デフォルトの名無しさん:2007/12/08(土) 21:57:08
早い奴できたよー

#include<stdio.h>
#define MAX_N_DICE (50)
#define MAX_N_SUM (300)
float result[MAX_N_DICE][MAX_N_SUM];

void prepare(int n_dice)
{
int i, k, sum;
for (k = 0; k < MAX_N_SUM; k++) {
result[n_dice][k] = 0.0;
for (i = 1; i <= 6; i++) {
sum = k+1-i;
if (sum >= (n_dice-1) && sum <= 6*(n_dice-1) && sum < MAX_N_SUM) {
result[n_dice-1][k] += result[n_dice-2][sum-1];
}
}
}
}
962デフォルトの名無しさん:2007/12/08(土) 21:57:43
>>961 つづき

int main()
{
int n, k;
for (k = 0; k < MAX_N_SUM; k++) { result[0][k] = k < 6 ? 1.0f : 0.0f; }
for (n = 1; n <= MAX_N_DICE; n++) { prepare(n); }

printf("The number of dices:");scanf("%d",&n);
printf("The sum of numbers:");scanf("%d",&k);
printf("The number of the pattern: %f", result[n-1][k-1]);
return 0;
}
963デフォルトの名無しさん:2007/12/08(土) 21:59:27
いつものくせでfloatにしちまったが気にスンナ
964デフォルトの名無しさん:2007/12/08(土) 22:01:53
>>651
遅い
965デフォルトの名無しさん:2007/12/08(土) 22:04:26
666666
1566666
2466666
3366666
2556666
3456666
という列が生成できればいいと思う
966デフォルトの名無しさん:2007/12/08(土) 22:08:43
>>961はぇえええええ

>>961の才能に嫉妬w
967デフォルトの名無しさん:2007/12/08(土) 22:17:40
968デフォルトの名無しさん:2007/12/08(土) 22:53:09
>>961
ん?double型の有効桁数超えてない?気のせい?
969デフォルトの名無しさん:2007/12/08(土) 23:53:33
[1] 授業単元プログラミング
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5432.txt
[3] 環境
 [3.1] XP
 [3.2] コンパイラ名とバージョン: visual studio 2005
 [3.3] 言語: C言語
[4] 期限: 12/11
[5] その他の制限: 特になし

970デフォルトの名無しさん:2007/12/08(土) 23:54:01
>>968 >>961
うん、有効桁数全然足りてないね
そのプログラムだと n = 50, k = 170 のとき
24456539641287986023030807574303735808
と表示されるけど、正解は
24456535588845712147456213502130798435
のはず。
971デフォルトの名無しさん:2007/12/08(土) 23:59:21
long long で駄目な時点でdoubleでも無理だわな
972デフォルトの名無しさん:2007/12/09(日) 00:42:24
ここはアルゴリズムの高速化よりも処理効率の向上を目指しても面白いと思うんだ
マルチプロセッサ対応とかSSEとか機械語とか
973デフォルトの名無しさん:2007/12/09(日) 00:47:34
>>970
だが、アルゴルだけは正しそうなんで、あとは多倍長ライブラリに移植すれば、O(n*k)で計算可能?
974デフォルトの名無しさん:2007/12/09(日) 00:50:06
多倍長加算に多分O(n)要るから、O(n*n*k)だろ
975デフォルトの名無しさん:2007/12/09(日) 01:38:44
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1. 以下のような、関数形式マクロで値が負、零、正で、-1、0、1を返すsign()を定義するように、()の中に文字を入れなさい。
# define sign(x)( )


[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C
[4] 期限:2007年12月10日15:00まで
[5] その他の制限:特になし
976デフォルトの名無しさん:2007/12/09(日) 01:41:40
# define sign(x) (x<0?-1:x!=0)
たぶんこんな感じだと思うけど確認してない
977デフォルトの名無しさん:2007/12/09(日) 01:52:17
ちょっと早い気もするが次スレ

C/C++の宿題を片付けます 101代目
http://pc11.2ch.net/test/read.cgi/tech/1197132472/
978デフォルトの名無しさん:2007/12/09(日) 02:26:46
>>975
#define sign(x) ((0<x)-(x<0))
979デフォルトの名無しさん:2007/12/09(日) 04:16:21
>>975
#define sign(x) ((x)==0 ? 0 : ((x)<0 ? -1 : 1))
980デフォルトの名無しさん:2007/12/09(日) 10:37:54
http://qb5.2ch.net/test/read.cgi/operate/1196529079/749

749 名前:マァヴ ◆jxAYUMI09s [] 投稿日:2007/12/08(土) 17:56:40 ID:mzzKkj6v0 ?PLT(25001)
2007年12月11日の 午前11時00分より 正午まで
サーバセンターでスイッチのメンテナンスを行うんだけど
そのスイッチにぶら下がってるサーバはほとんど2chのサーバだったりする(^_^;)

たぶん、大量に繋がらないサーバが出るはず(^_^;)

752 名前:マァヴ ◆jxAYUMI09s [] 投稿日:2007/12/08(土) 18:05:32 ID:mzzKkj6v0 ?PLT(25001)
>749
日本時間です(^_^;)
982デフォルトの名無しさん:2007/12/09(日) 14:25:14
[1] 授業単元:C言語基礎
[2] 問題文(含コード&リンク):

名前、身長、体重、視力(視力構造体)これらのデータをメンバとする構造体を定義し、入力と表示を行うプログラムを作成してください。
入力件数は最大5件で、名前は19文字までの入力とし、範囲外だったならばエラーメッセージを表示し再入力させてください。
名前に”END”が入力された時は入力終了とします。
表示は身長で昇順にソートして出力してください。
また身長、体重は、小数点以下第一位までの表示とします。視力は、小数点以下第三位までの表示とします。
出力の幅は、名前が19文字分、そのほかは5文字分で指定してください。
視力は右、左をメンバとする構造体で扱ってください。
1件分の入力はinput_data()で、表示はdisplay_data()で、ソートはsort_data()でと処理を関数に分けて行ってください。
名前入力の最初に”END”が入力された場合は、その旨のメッセージを出力してください。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VisualC++2005ExpressEdition
 [3.3] 言語:C
[4] 期限:特になし
[5] その他の制限:よろしくお願いします。
983デフォルトの名無しさん:2007/12/09(日) 16:27:55
984デフォルトの名無しさん:2007/12/09(日) 16:31:05
あ、くそっ、メッセージ表示忘れた。
42行目をbreak;からputs("ENDが入力されたので、入力処理を終了します。") break;に書き直しだ。
985デフォルトの名無しさん:2007/12/09(日) 17:00:57
小数点第三位まである視力ってw
まぁ、課題だから色々あるんだろうけど…
986デフォルトの名無しさん:2007/12/09(日) 18:18:51
視力0.005ですが何か?
987デフォルトの名無しさん:2007/12/09(日) 19:10:43
およそ0でいいだろそんなの。
むしろ小数点以下要らない。
988デフォルトの名無しさん:2007/12/09(日) 20:52:24
>>983
ありがとうございます
ただENDを入力しても入力処理が終了しないような気がするんですが・・・
989デフォルトの名無しさん:2007/12/09(日) 20:57:36
>>988
気がするだけ
990デフォルトの名無しさん:2007/12/09(日) 20:59:04
>>983
これはひどいw
991デフォルトの名無しさん:2007/12/09(日) 20:59:46
あっちゃんと入力終了しました
ありがとうございます
992991:2007/12/09(日) 21:06:23
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5453.txt

頑張って自分なりにも作ってみたんですが
どうしてもendで入力終了させることが出来ません
それ以外でもおかしい所があれば
スレ違いかもしれませんが教えてくれませんか?
993デフォルトの名無しさん:2007/12/09(日) 21:14:13
>>992
inputdataの戻り値をmainでチェックする
994991:2007/12/09(日) 21:27:52
>>993
あっそういうことですか!
ありがとうございました
995デフォルトの名無しさん:2007/12/09(日) 22:36:23
せっきす
996デフォルトの名無しさん:2007/12/09(日) 22:48:00
え? つよきす?
997デフォルトの名無しさん:2007/12/09(日) 22:48:38
1000
998デフォルトの名無しさん:2007/12/09(日) 22:49:50
みにきす
999デフォルトの名無しさん:2007/12/09(日) 22:50:45
1000なら今年受験に合格して、
来年は大学でハーレム形成する
1000デフォルトの名無しさん:2007/12/09(日) 22:51:13
1000なら今年受験合格して、
来年は大学でハーレム形成する
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。