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 /:::::::ヽ _: :_ ヽ ィ´.}::ヽ ヽ、 _,-‐'´ { ヽ:::::::::ヘ `'ー===ー-- ' /ノ /::::::ヘ, ヽー、
>>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は、なしで
100オメ!!
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;
}
これを改良お願いします。
前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 /*無*/;
最近プログラム開発系の会社に就職した。 PCを使っていろいろやるのは好きなんだけど、 なにせスキルは皆無。 とりあえずC、VB、C++辺りを勉強することになった。 今はVC++を勉強しようとしてるんだけど、 初心者にお勧めなサイトとかあったら教えてほしい。 Cはかなり簡単なプログラミング(scanfとかprintfとかしか使わない程度) しかやってない。 VBも基礎用の参考書をやった程度。
>>11 会社で聞ければいいんだけどね。
社長以外は出向してるし、社長はソフト関係できないから。
ググっても大体Cの知識ないとダメだったし。
質問スレが見当たらなかったわけだが。
そんな無能を雇う会社はさっさとつぶれてしまえ
社長以外は出向、に突っ込むべきだとは思うんだが。 そんなことより100おめ。
[1] 授業単元:C++基礎 [2] 問題文(含コード&リンク):0〜100点までの点数を乱数によって10個表示させるプログラムを作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:ming-bit(曖昧…) [3.3] 言語:C++ [4] 期限:2007年11月28日12時まで [5] その他の制限:本当に基礎的な事しかやってないので…出来れば簡単なプログラムでお願いします。
[1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク): 5人分の身長から、平均と最高と最低を求めるプログラムを作りなさい キーボードから5人分の身長を入力する。 平均、最高、最低を表示する。 平均は、小数点第1位まで表示する。 入力処理途中で「-1」が入力されたら処理を中断し、それまでの入力済みデータを元にして以降の処理を行う。 <実行例> 身長を入力してください。 1人目は?: 165 2人目は?: 143 3人目は?: 149 4人目は?: -1 − 結果 − 平均: 152.3 cm 最高: 165 cm 最低: 143 cm [3] 環境 [3.1] OS:Windows [3.3] 言語:C言語 [4] 期限:2007年11月26日13:00まで [5] その他の制限: テキスト「新訂 新C言語入門(ビギナー編)」の第8章(ポインタ)までやりました。 @ 5人分の身長を格納する配列を利用すること 例) int sinchou[5]; A 次の3つのユーザ関数を作成し、利用すること ・平均を求める関数 ・最高を求める関数 ・最低を求める関数
17 :
16 :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; }
18 :
16 :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; }
19 :
16 :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); }
>>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));
}
[1] 授業単元:アルゴリズム演習 [2] 問題文(含コード&リンク): 各節点がkey,leftchild,rightchildの値とポインタを保持する二分木において、 根のポインタを受け取り、全ての節点のkeyを表示するプログラムを作れ。節点の数はnとする 再帰を使う事、同じ節点のkeyを2回表示する事、定数個以上のメモリを使う事を禁止する また、その実行時間はnの定数倍で抑えられなければならない [3] 環境 [3.1] OS: win [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:無期限 [5] その他の制限: なし お願いします
[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日 文字配列のソートがわかりません。初心者ですがよろしくおねがいします
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まで 前スレでも質問させていただきましたが、ご回答がなかったので改めて質問させて いただきます。参考書を読んでも自力で出来ないので、わかる方はご回答よろしくお願いします。
>>25 すいません。記入し忘れましたが前スレと同じです。
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変数ということで手も足もでません、、、 よろしくお願いします。
C++が理解できてCが理解できないってどういう事だ? 演算子をオーバーロードしてるからその辺の関数を理解できないって事?
>>26 を作ってみたけど、
>わかる方は
と書いてあるから、わからないながらも色々試行錯誤して作った俺は回答する資格無いな。
>>27 ってか基本的に、CであればC++でもある。
C++でコンパイルすればいいじゃん。
>>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];
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; } } }
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");
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 なんつーか問題に不備がたくさんあってやりにくいんだよね。
いちいち指摘するのも面倒なくらいに細かなところが不明瞭。
本当にこんな問題が出てるのなら、教官を捨てていいと思う。
40 :
デフォルトの名無しさん :2007/11/23(金) 12:38:28
>>38 FletzHikariクラスはFletzAdslクラスを継承するような図に見えるんだけど
クラスの概要って所ではProviderクラスを継承するような文書に読めるし
どっちなんだろ?
>>23 メモリの制約が、かなり厳しいね。
二分木を格納するために O(n) が必要だから
「定数個以上のメモリ」という制限は、普通は達成不能。
木以外の空間が O(1) と解釈しても普通は無理で、
再帰を使うと再帰の深さが木の深さと同じくらいになるから
スタック上に O(木の深さ) くらいの空間が必要になる。
俺は、この二分木の表現では O(1) の空間は不可能だと思う。
44 :
43 :2007/11/23(金) 13:17:17
ごめん日本語読み間違えた。再帰を使うことも禁止なんだね。 それでもスタック長が普通は O(木の深さ) になるから、普通は無理。
[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] その他の制限:とくになし
>>43 すみません、二分木の表現のメモリは無視して構いません。
宿題でなく研究レベルの問題だと言われて出されたんですが、手も足も出ない状態です
メモリ使用量をO(lgn)で抑えることはできるんですが・・・
47 :
デフォルトの名無しさん :2007/11/23(金) 13:49:42
48 :
デフォルトの名無しさん :2007/11/23(金) 14:07:50
>>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;
}
}
>>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]);
}
木を壊したままでも良いのか。 何とか復元してからリターンしようとして頭をひねってた。
>>47 内容はともかく、日本語が難しくて解読に疲れた。
木を変形するのはありなのか?確かに制限には書かれてないが 多分出題者の意図からは外れてるだろうな
ポインタの値が常に偶数だという仮定を置ければ復元もできそうだ。 どっちにしても一時的に木を変形する必要はあるけど。
削除の変わりに最下位ビットを立てるとかだね。 あと十分大きな値を足しておくとかでも大丈夫。 まあ計算モデルを仮定しなきゃいけないから綺麗じゃないが。
Providerクラスが抽象クラスになってなくね?
>>56 いつのC++を使ってるの?VC6かい?
newは失敗するとnothrowバージョンでない限りstd::bad_alloc例外を
返し、NULLとか0は返しません。14882:2003
>>56 そのコードでは、派生クラスのデスクトラクタが実行されないよ
>>47 生産管理のアルゴリズムって、5つくらい前のスレにあったやつじゃダメなのか?
61 :
56 :2007/11/23(金) 18:09:02
いまここで 抽象クラスの定義方法知った。 newとmallocの違いを知った。 デストラクタをちゃんと記述しないといけないことを知った。 ・・・まだまだ勉強が足りないようで ツッコミありがとう
>>56 , 61
全くもって技術的な話ではないが
virtual double cale(double a){}
は綴りが微妙
>>23 親頂点に帰れるポインタがあれば、直前にいたポインタと比較することで定数メモリで木を周回できるはずだけど。
直前に親頂点にいたら、左の子供頂点に行く。
直前に左の子供頂点にいたら、自分の key を表示して、右の子供頂点に行く。
直前に右の子供頂点にいたら、親頂点に行く。
あとは親頂点親頂点に戻る方法を考えればいいんだけど。
毎回根から今の頂点を探すってできない気がするんだけど、どうなんだろう?
ポインタの付け替え(pointer reversalっていうらしい)を使えば巡回自体はできるんだけど、 そのままだと各節点を3回ずつ表示してしまう。
そりゃ単にやり方が悪いだけだ
[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は . まったくわからないのでどうかお願いいたします。
>>61 >>59 だが
>デストラクタをちゃんと記述しないといけないことを知った。
~Provider(){} //デストラクタは書いてますやん
俺が言いたかったのは、その書き方が間違いだってことだよ
「知った」ではなくなぜそうなのか理解できてないと、後で苦しむよ
Effective C++ 第3版の7項にきちんと、俺が指摘した理由が説明されている。
図書館で借りるか、本屋で立ち読みしてごらん。
さすがメイヤー先生、初学者が犯しやすい間違いをズバリ書いているので
びっくりした。
偉そうにかいてごめんね、ガンガッテ
>>61 大ヒント : 仮想関数を持つならばデストラクタは仮想にすべき
>>70 Javaの @Override アノテーションとかあればいいのにな
うざいわ。 baseクラスのデストラクタはvirtualにしとけ、でいいじゃん。
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] その他の制限:
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++で独学しています。単純なクラス作成まで終了。最後の演習問題でつまずいています。
>>73 こういう鵜呑みにしているヤツに限って肝心な箇所があやふやなんだよなぁ
オレの職場にもこういうヤツが一人いたよ
>>77 「明解C++」の演習10-2だと思われる。
でも、その本を持っていない人間には問題すら分からない。
>>78 お前のようなうざい奴はどこにでもいるけどな
>>75 [4] 期限: 2007年11月24日11:30まで
打ち間違えました。
申し訳ないです。
80=73 図星なので○け犬の遠吠え
うざい上に粘着質
その本に答えないの?
85 :
77 :2007/11/23(金) 23:32:00
問題を書くのは著作権的にどうよ?
学校で先生が出題する問題にも著作権は発生するんだが……。
つーか、宿題じゃないでしょ、それ。
教科書に市販品使うなんて珍しくもない
>>88 著者人格権はあるけど学校の課題なんだkら複製権くらいあるだろ
92 :
デフォルトの名無しさん :2007/11/23(金) 23:42:16
著作権=COPY RIGHT=複製権
イコールじゃないよ
95 :
77 :2007/11/23(金) 23:44:13
>>91 学校の課題なら特別扱いされるという根拠は?
2
1
お前ら著作権法くらい読めよ プログラミングに関係の深い法律だぞ
▃▅▆▇██▇▅▃ █ ████████▆ █ ████████ ▃▂ ▓▓▓▓▓▓▓▓▓ ▀██▇███████████▇▅ ▼▀█▀██▀▀▀▀■█■▀ ▍ ▋ ▲▃ ▀▅▃▌ ▌▌ ▐◣ ▐▂▅▀ ▀▅▃▀█ ▍▍ ▐▃▀▂▃◢◤ ◥◣▃▂▌ ▎▌ ◥▋ ▐◥▃▆◤ ◥▃▆◤▍ ▋ ▊ ▐◣ ◢▌ ▼ ◢▀▌▀◣ ▆▅ ▃▲ ▋ ▼ ▀▇◣▃◢▇▀ ▼ ▂▃◢◤▀ ▃▅▃▅▃▅ ▐▲▃ ▅▀ ▌▌ ▀█ ◢████▅▀▅▀▋▐▅▀▼ ▅█████ ▊ ▊ ▌
>>97 先生が著作者だから実質的な問題は発生しないと言いたいわけか
複製権関係ねぇ
>>72 同志がいたのか・・。
参考にさせていただきます。
ありがとうございました。
つうか教育目的の場合、著作権は無視されるんじゃなかったか?
三十五条のことか?
106 :
デフォルトの名無しさん :2007/11/24(土) 01:56:19
>>104 小学校の教科書だか教材に使われてた詩が、著作権者がクレームつけて使えなくなったって話は聞いたことがあるけど。
ここって教育の場なん?
うん
丸投げスレも出世したもんだな
でしょ
>>77 エスパー
ostream& operator<<(ostream& s, const Date& x);
を
ostream& operator<<(ostream& s, const Date& x){s << x.Year() << x.Month() << x.Day();return s;}
こう?
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] その他の制限: なし どうかよろしくお願いします。
[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変数ということで手も足もでません、、、 よろしくお願いします。
>>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;
}
>>117 ぎりぎり間に合いました。本当にありがとうございます。
>>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
>>122 ここまで問題を無視できるのもすばらしい.
125 :
26 :2007/11/25(日) 01:02:17
>>34 ありがとうございました。
126 :
デフォルトの名無しさん :2007/11/25(日) 01:38:31
>>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;
}
[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が書いてあるファイルを用意できないのですが出来ますでしょうか? よろしくお願いいたします。
>>122 ありがとうございます
ですが、ええええ!?
>>128 3,4個でいいから、入力データの性質を簡単に全て現したサンプルくらい書けるだろ
かけなきゃまずは問題を理解してここに投下しろ
>>128 まずファイルをてきとーに作る
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SIZE 20*10000
#define WAVLEN_MAX 10000
int main()
{
int p,t,i,m,n,s=SIZE;
char *buf,fname[]="test.dat";
FILE *fp;
srand(time(NULL));
t = (double)rand()/(RAND_MAX+1)*WAVLEN_MAX+1;
p = (double)rand()/(RAND_MAX+1)*t;
buf = (char*)malloc(t);
m=0;for(i=0;i<t;i++){buf[i] = rand()&1;m+=buf[i];}
if((fp=fopen(fname,"wt"))==NULL)exit(1);
n=0;for(i=0;i<s;i++){fprintf(fp,"%d",buf[(p+i)%t]);n+=buf[(p+i)%t];}
fprintf(fp,"\n");
fclose(fp);
free(buf);
printf("Total = %d (0:%d 1:%d) / T = %d (0:%d 1:%d)\n",s,s-n,n,t,t-m,m,p);
return 0;
}
132 :
131 :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;
}
>>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;
}
つづき 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; }
135 :
128 :2007/11/25(日) 11:00:53
>>130 >>131 よく読みなおしたら日本語おかしかった。ごめんなさい。
ファイルはもう.datファイルであるんですが、そこから0と1の数を数えて、
周期探し出すのがわからんのです。
お手数おかけしてすいません。
そのファイルがなければ探しようがないよ
>>135 圧縮したら対してサイズおおきくならないからうp
138 :
デフォルトの名無しさん :2007/11/25(日) 11:51:20
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 よろしくお願いします。
>>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);
>>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;
}
>>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] その他の制限:ポインタは習ってない お願いします。
146 :
128 :2007/11/25(日) 15:00:08
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.配列の読み込み、交換、出力はそれぞれ関数にすること。
149 :
KSCN :2007/11/25(日) 16:41:11
Mathematica でグラフを描き、EPS 形式で保存する。LaTeX を使ってレポートを作成してその中にグラフを挿入し、PDF ファイルに変換したものを提出すること。 っていう課題がでたのですが質問の意味からわかりません。どなたか質問の意味だけでも教えてください。
どうでもいいけど、名前を出す人の方が少ないんだから別人に見せようとしても逆効果だぞ
>>149 何がわからないのかがわからない。
1.クラスで使っているMathematicaというソフトを使って数式を処理してグラフ表示、グラフの画像をEPS形式のファイルに保存。
2.いつもやっているようにLatexでレポート作成。EPS形式ファイルの埋め込みに関しては、配布したテキストを参照の事。
3.pdflatexをつかってPDF形式のファイルを出力。
一通り説明されてるはずなのに、なんで分からないとか言ってんの?
ずっとサボってたのか?
155 :
131 :2007/11/25(日) 19:42:04
>>154 自分の環境ではfscanfで32767文字までしか取得できなかったわけだが・・・
ファイルサイズは228793バイトあるわけで
>>128 >>132 で答えたつもりだったんだけど間違ってたかな?
>>155 こっちの環境では問題なく scanf で取れたよ。
それ以上に、
>>132 は O(n^2) だから、とても終わらないと思うけれど。
あ、こちらの環境は質問者にあわせて WindowsXP (cygwin) の gcc 。 質問者の環境で、これでうまくいかないようなら対処する。
>>158 C, d, n, p, q として想定している桁数は?
任意桁なら、GMP の使用の可否は?
>>158 マルチ?って聞かれてそう答えるのって日本語不自由な人だよね。
162 :
デフォルトの名無しさん :2007/11/25(日) 21:14:03
帰れ
>>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;
}
>>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) は、どうもフラクタル図形を描くかと思われます。
167 :
デフォルトの名無しさん :2007/11/25(日) 22:08:05
169 :
デフォルトの名無しさん :2007/11/25(日) 22:24:46
1から50までの数のうち、素数を表示するプログラムを教えてください。 #difineで50を定義するってのが条件です お願いします
170 :
デフォルトの名無しさん :2007/11/25(日) 22:33:04
>>148 M教授の課題だろ。俺もわかんねえんだおしえてくれ
>>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] 関数は使ってはいけない
>>172 >関数は使ってはいけない
本当にこう言われたのか?
174 :
173 :2007/11/25(日) 22:39:11
>>173 すみません。違います
関数は使わなかったらできませんね(汗
あっ!#difineを使うのか!
177 :
173 :2007/11/25(日) 22:41:37
あ、すまんです;; ありがとうございます。こんなやりかたもあるんですね
178 :
173 :2007/11/25(日) 22:43:44
あとdefineですね。間違いだらけですみません
>>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]);
}
}
}
>>179 最悪な方法に比べればましだけどまだしょっぱい。
>>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;
}
182 :
173 :2007/11/25(日) 22:48:17
(汗
>>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;
}
185 :
122 :2007/11/25(日) 22:53:42
>>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;
}
187 :
122 :2007/11/25(日) 23:00:07
>>119 >>129 訂正:具合のいいものを表示するように SEED の値を変えてください。
重ね重ねすみません。
>>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]); }
レスを跨るようならアップローダを使ってくれないかな。
アップローダなら半角スペースが残るので、カットアンドペーストできれいなソースが手元にわたりますし。
どこの誰が管理してるかわからないようなものを使えるか!
ん、それもそうですね。でもアップローダ経由じゃないソースは 私は基本的にはみません。だってめんどくさいから。
1レス内に自然に入るなら入れて欲しいけどね。空白を 置換して。
新しい宿題のネタになりますでしょうーか。< 変換
sed -e 's/&/\&/g' -e 's/^ /\ /g' -e 's/ / \ /g' -e 's/</\</g' -e 's/>/\>/g'
[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型です
>>184 これは不思議。
アルゴリズムの名前とかある?
>>203 まじか……。
調べる数をリストとして扱うと、こういう処理になるのか。
ちょ、ふるいってプログラムで素数求めるときに必ずやるもんだろw
確かに出てくる確率は多いけど、 ただ単に素数を求めるプログラムを作れって言われたら、 エラトステネスを思いつかなければ、別の手段を使うだろ。
可能性ではなく、教養として知っておくべきだろうな。 教養なんて高尚なもんでもない。常識だ。
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] その他の制限: 特にありませんが定義関数を使うようです お願いします
>>205 ごめん俺、確率的判定アルゴリズムしか知らない・・・
こういう演習で確率的アルゴリズム書いて提出するとどうなるんだろうな
#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++にあるかどうかは分からんので。
>>145 何を求める問題なのかがさっぱり分からないから
問題を書き直したほうがいい
212 :
デフォルトの名無しさん :2007/11/26(月) 10:28:06
期限過ぎちゃいましたけど、 >47お願いします。
>>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);
}
}
[1] 授業単元: プログラミング [2] 問題文 数字の点数を読んで、クラスの平均点、最低点と最高点を求めるプログラムを書け [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: 不明 [3.3] 言語: C#なんだけど、ほかのスレタイ調べても頼めないからみんなたのむ。 [4] 期限: 今週の金曜 [5] その他の制限:結構レベルが低いので複雑なプログラムはご遠慮願います。
#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; }
int ClassMenberNum = 1;
>>214 while(clock() - c < speed); → while(1000*(clock() - c) / CLOCK_PER_SEC < speed);
220 :
学生 :2007/11/26(月) 16:50:23
>>220 ログインできないのでユーザー名とパスワードを教えてください。
223 :
学生 :2007/11/26(月) 16:57:21
>>221 すみません
ユーザー:1424
PASS:1424
両方同じです。
>>222 すみませんでした。以後注意します
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] その他の制限: なし
>>223 大学の鯖に入れって事だろ?
なんか、ギリギリアウトな気がするんだが・・・w
228 :
学生 :2007/11/26(月) 17:12:26
>>227 大丈夫です。過去にも依頼した事がありあす。
このページ作っているのは大学院生です。見ていません
すげぇなぁ、おいw
基本技術者試験とかの設問で、不正アクセスになるのはどれか? という選択肢にありそうだなw
不正アクセスでタイーホ
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] その他の制限: なし
>>232 利用者は関係なくてだね
アクセス制限してる以上、君が公開したところで罪になるのは見た人なんだよ
好奇心から侵入してしまった俺は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] その他の制限:なし
>>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
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)基礎的なことしか習っていないのですがよろしくお願いします。
>>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;
}
>>241 >入力は最大128バイトとする。128バイトを超える入力があった場合は処理を終了する
この部分の仕様を満たしてなくね?
if ( strlen( s ) > 128 ) exit( 0 );とか追加すればいいだけど。
>>242 何ぃ!その部分はmain側だと思ってた!
じゃあそれつけといて下さい
>>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;
}
>>244 valueに値を格納して返す値は正常or変換結果じゃないか?
「変換結果を返す」ってあるけど、普通は正常or異常を返して
正常ならvalueに変換された値が格納されているって感じだな。
>>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;
}
[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] その他の制限:とくになし
よろしくお願いします。
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 なにとぞ、よろしくお願いします。。
251 :
128 :2007/11/26(月) 23:47:54
>>131 >>154 >>132 のでは実行してもなぜか何も表示されませんでした。
自分の環境では
>>154 のプログラムで正しい答えが出ました。
ありがとうございました。
あと数列に直すために色々試したのですができません・・・
これもお願いしていいでしょうか?
よくあんな巨大配列で動いたもんだ
253 :
コーンポタージュ :2007/11/27(火) 00:40:29
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
257 :
216 :2007/11/27(火) 01:33:08
>>238 すまない・・・せっかくといてもらったんだけど、CじゃなくてC#なんだ・・・。
スレッド自体はCかC++なんだけど、
C#のスレッドがなくてここの住人に頼るしかなくてね・・・。
>>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);
}
>>257 むしろ、C/C++じゃコンパイルすら通らないと思うんだが
261 :
デフォルトの名無しさん :2007/11/27(火) 02:43:36
次スレからはスレタイにC#も入れとこう。
>>220 これは善意の人間を犯罪者にするかのような誘導。
不正アクセスに繋がるから、このページに行く必要は全く無い。
>当該アクセス管理者若しくは当該利用権者の承諾を得てする場合は、この限りでない。 正規の利用者からパスワード教えられてアクセスする場合って 不正アクセスになるんだっけ?法律にはうといからよくわからん・・・
>>265 そもそも
>>220 が正規利用者だという確証は一つも無い。
下手をするとhackingを行った犯罪者だということすら考えられる。
そしてそのhackerからpassを教えてもらってアクセスすれば、
我々は立派な犯罪者になってしまう。
故意かどうかって関係ないんだっけ? まぁアクセスしないのが一番確実だけど。
269 :
デフォルトの名無しさん :2007/11/27(火) 10:42:40
[-3、3] fx=1/(1+5X^2) 分点10 (n=9) この条件を使ってラグランジュ補間のプログラムを作れって問題なんですけどさっぱりです。ちなみにC言語です
>>269 とりあえず
>>1 にテンプレートという便利なモノがあるからそれを大いに活用したほうが良い
>>253 せめて問題例データくらい作って置いたらどうかな
頂点10で辺数27でしょ、PG作ってデータまで作るとなると、相当な暇人でもやらんと思う
272 :
デフォルトの名無しさん :2007/11/27(火) 11:16:32
>>270 OSはLinux 知識はCとC++なら多少は分かる とにかく提出したらいいので多少自己流で解かれても大丈夫です
数式も自己流だしなあ。せめて人に通じる式で書こうよ。
>>269 ラグランジュ補間は、本来、N点のデータが与えられた時、
それらの点を繋ぐことのできるxの多項式の係数を求めるという方法です。
プログラミング以前に、数学的な理解がおろそかだと思われます。
もっと言うと、補間に関するソースは至る所に掲載されています。
それを用いれば簡単に目的は達成できます。
え、あれで通じないとは、どんだけ数学弱者なんだよ 俺は解かないけど。
>>277 どこがわかんないか質問してくれれば、その回答はするよ
279 :
デフォルトの名無しさん :2007/11/27(火) 12:12:41
要は難しすぎて僕らには解けません。僕らがわかるのは文字の出力だけです。参りました。
>>272 には是非そのままの態度で自分の求める解答を引き出すテクニックを見せてもらいたい
つまり
>>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回以上のループは使えない
>>284 mの因数分解表をあらかじめ作っておいて判定する
286 :
デフォルトの名無しさん :2007/11/27(火) 12:55:16
訂正 m < 30000 、n< 16 が与えられたとき、mがnで割り切れるか調べるプログラム ただし、/や%や16回以上のループは使えない
別にループが使えないならループを展開しとけば良いだろ
>>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進数ですよね どうやってその値をゲットするんですか
291 :
デフォルトの名無しさん :2007/11/27(火) 13:07:32
>>290 整数を文字列に変換する関数とかは使わないで下さい
最初から誤解の余地が無い言い方で訊けってのは無茶だろ。 問題に対する疑問に答える過程で条件を追加するのは当然のことだと思うが。
文字列で受け取って、「文字のまま」演算を行うようなプログラムを書けばいい。 たとえば、tasu('A', 'B')の戻り値が'C'になるとか、 kakeru('A', 'B')は'B'とか。
テンプレに制限やら書く所まであるのに、完全に無視してそれか? とっとと帰れ帰れ
テンプレの利用は任意だ。 そもそも、答えたくないならお前が黙って帰れよ。
だから、文字のまま判定を行うプログラムを書く。そうすれば10進数の演算と同じ。 例えば tasu(char a, char b) なら、 if ((a=='A' && a=='B') || (a=='B' && a=='A')) return 'C'; っていう式を延々と書けば、これは10進数の演算と全く同じになる。
#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
302 :
コーンポタージュ :2007/11/27(火) 15:11:18
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が完成したものです。
>>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
修正までありがとうございました。 本当に助かりました。 またの機会がありましたら、よろしくお願いします。
[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] その他の制限:特にありません。 よろしくお願いします
[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] その他の制限: 配列・ポインタの使い方、簡単な数式の入力まで習いました。 どこから手をつけてよいか分かりません。お力添え頂ければと思います。
>>307 #include <stdio.h>
#define TRI(a) ((a)*(a)*1.7320508/4.0)
int main( ){ return printf( "%lf\n", TRI(5)); }
[1] 授業単元: C言語 [2] 問題文:入力された文字列のそれぞれの文字をカウントし、出現回数と生起確率を表示させよ。 またそのエントロピーも表示させよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++ 6.0 [3.3] 言語:C [4] 期限:11月28日午前2時まで。 [5] その他の制限:特にありません。 以前ご教示頂いたのですが、データが壊れてしまいました。
311 :
310 :2007/11/27(火) 16:32:53
途中送信orz 何卒よろしくお願いいたします・・・。
[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] その他の制限: なし
>>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] その他の制限: なし
>>313 あなたのいう「さぶ関数」というのは、ひょっとすると「ソート」を行う関数ではありませんか?
ちなみに、c++にはアルゴリズムでsortそのものが存在します。
>>318 たぶんそれだと思います。
問題文が長かったので半分にしてしまったのがいけませんでした。
問題の前半分↓
与えられた個数の正の整数を格納している配列のうち、最大となる値を検出して、その値を
格納している配列要素の値を0に書き換える。すると新しい配列においては、もとの配列で
大きい方から数えて2番目の数値が最大値となっている。さらにもう一度、この新しい配列
における最大値を格納している配列要素の値を0に書き換える。するとこの時点でのさらに
新しい配列では、最初の配列において大きい方から数えて3番目の数値が最大となってい
る。このことを利用して、下記のプログラムを作成せよ。
(ここで示した方法は、いわゆる整列(ソーティング)問題の1つの解法となり得るが、効率的
な方法ではない)
わかるかたお願いします。
>>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;
}
322 :
デフォルトの名無しさん :2007/11/27(火) 20:51:34
>>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;
}
atoiがまずいかも…… my_atoiに直して
>>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;
}
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は、なしで
このスレ見てるとBCCやらgccでいいようなもんをVS2005とか使ってやってるのな もったいない
学校なんてそんなもん
DOS窓の開き方さえ分からないプログラマがどんどん増えるわけですなぁ
>DOS窓 プゲラwwww
332 :
デフォルトの名無しさん :2007/11/27(火) 22:41:54
コマンドプロンプトと言えばいいのかね?
コンソールとかでいいんじゃね? 世の中BIOSの設定ができないプログラマも多いし、別にDOS窓使えなくてもいいと思う (さすがに開き方がわからないのはまずいと思うが)
プロンプト >■ ←こんな感じで点滅してるやつのこと コンソール 大型のコンピュータ(汎用機あるいはメインフレーム)やミニコンピュータに直結され、 運用(運転)目的で操作をするための装置で、コンピュータ・コンソールあるいは単にコンソールともいう。 wikipediaより引用
337 :
デフォルトの名無しさん :2007/11/27(火) 23:43:19
なにが"プゲラwwww"だよ あいつそれしか言えんのかw
>>335 わかりにくい一部だけをコピペしてくるくらいなら、リンク貼れよ
実体が分かればなんだっていいだろ
>>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;
}
>>320 本当にありがとうございました。
それにしても、同じ大学の奴がいるみたいで2重カキコみたいになってしまった・・・
軽く確認したつもりだったんだけど・・・以後気を付けます、つか自分で頑張ります。
<スタックの課題> 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言語の課題です。 問題の意図すら分かりません。
問題の意図とは、
>>343 のような不適格者を落とす事にある。
>>343 その課題出した奴はったおしていいかも
記述が曖昧&過剰、明確に指示して欲しいところが曖昧で具体的なものがない、ついでに冗長すぎる説明で分かりづらくしている
やるきがなくなる
>>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; }
}
... つづく ...
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; } } }
とりあえず書いてみた わざと変数名を分かりづらくしておいた
>>352 たぶん構造体のchar[]をコピーし忘れてるとかだと思いたいんだが
構造体ってメモリコピーでなかったっけ?
仕様と違うとかは正直スマン買った
テンプレ使わなくて申し訳ないです。 皆さんのソースコードを参考にもう少し頭を捻ってみます。 スタックってもっと簡潔に書けるものだと思ってた・・・。
ツンデレ使わなくて〜に見えた 今日はもう寝よう
お、おやすみなさい!
掲示板の特定のレス番号をスナイプするコードを考えているんですが、 何かヒントとかあったら教えてください。お願いします。
>>357 c言語でhttpとかを扱って、それをテキスト解析すればいい。
1.セットしたURLのhtmlファイルを取得する
2.取得したhtmlファイルを解析し、特定の番号の直前を抜き出す(テキスト解析)。
3.特定の番号の直前が不適切なら1.に戻る。
4.目的の番号ならば書き込み動作を行う(たぶんここが面倒くさい)
やることの半分はテキスト解析。
[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時
課題1のプログラムはIDと名前を入力し、それをリスト表示するプログラムを 構造体を用いて作成したものです。
>>358 レスありがとうございます。
できればソースコードなんかいただけないでしょうか?
すみません....
>>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時まで どうかお願いします。
うぜえ
ポインタで指定した文字列を、配列に代入したいんですがどうしたらいいでしょうか?
もしかして新手のAA厨か? 違うか。言うならテンプレ厨?
370 :
310 :2007/11/28(水) 09:34:06
310です。
>>316 の方はありがとうございました!
…が、各出現回数が表示されてないと再提出を喰らってしまいましたorz
このプログラムにどう追加すれば良いのでしょう。
>>364 初項と公差によっては解なしになるんだけど、その場合の処理はどうすんの?
372 :
364 :2007/11/28(水) 09:48:21
>>371 さん
すみません、問題文が抜けてました。
初項<=9307、公差<=346、素数の順番目<=210です。
なんか連投されていてすみません。
そういう意味じゃないんだが
374 :
デフォルトの名無しさん :2007/11/28(水) 10:08:50
そおいう場合はエラー表示で大丈夫です
何度も申し訳ありません…。 また新たな課題を出されたのですが、これはどうすれば良いのでしょう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] その他の制限:特にありません。
>>238 ,259,260
これからあとはなんとかがんばるよ。
ありがと!
すごい初心者の質問ですみませんが・・・ [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 1-3:
for (i = 0; i < N/2; i++) {
if (a[i] == a[N-1-i]) {
printf("a[%d] = %d\n",i, a[i]);
}
}
>>379 偶数、奇数は次のようにして判断できる。
if (n % 2 == 0) {
//偶数
} else {
// 奇数
}
規制かかってるみたいで、書き込みできない。
なので大学のネットからです
>>363 課題1はただのポインタで大丈夫です。(当方の環境では動作確認してあります。)
359を作る上でポインタのポインタにした方が良い場合、変えてもらって大丈夫です。
>>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。
384 :
383 :2007/11/28(水) 15:38:21
なんか所々間違っているが、察してくれ
>>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 多分これ剰余だよね? % 演算子。
386 :
366 :2007/11/28(水) 16:20:33
レス番を間違えてしまいました。すみません。 とりあえず学内のLinuxのPCでも試してみます
>>386 >>383 は間違ってるってば・・・。正しくは、
一般化すると、
nが奇数の場合は、a[(n-1)/2]。
nが偶数の場合は、(a[n/2-1] + a[n/2])/2。
n/2の結果が整数に丸められることを利用すれば、
nが奇数の場合は、a[n/2]。
390 :
389 :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 を追加
>>389-390 ありがとうございます。
ID、名前の挿入は出来てたのですが、適切な位置の検索がやり方が
わからなくてずっと悩んでいました。
実際のプログラム見て納得がいきました、重ねてありがとうございます。
#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); } ここまで一応自力でやってみたんですけど間違っているようで、課題がまったく進まず困っています。 よろしくよろしくお願いします。
394 :
393 :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まで)
よろしくお願いします。
>>394 階乗の計算はpow関数を使う。
x^2がしたいならpow(x,2)だ。
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] その他の制限:初心者です。ポインタはまだ習っていません。できれば簡単なものでお願いいたします。 注文が多くてすいません。 よろしくお願いいたします。
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 改造元の課題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 自分にはそのコードの内容が良く分からないので、組み込むのは難しいです。
【質問】 [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] その他の制限: 制御文、配列、構造体、関数、ポインタ よろしくお願いします。
>>403 > ringoA
> apple
> ringoB
ringoAとringoBはどっからでてきたwwwwwwwwwww
# ringoが2回出てきたからです
→アルファベットで足りない場合はどーすんだろなwwwwwww
405 :
403 :2007/11/29(木) 05:27:46
すみません、間違えますた! 正しくは program ringoA apple ringoB *** data1 *** ringoA apple ringoB でやんすm(_ _)m
[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
点数表を読み込み、点数の高い順に出力するプログラムを作成しなさい。プログラムにおいて点数表の容量を制限してはいけない。
コンピュータのメモリが許す限り大きな点数表も表示できること。
次に、作成した点数表に対し、実行した結果を示しなさい。
課題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
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枚掛け。 これができないと学校卒業できません。本当にお願いします。
>>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;
}
[1] 授業単元:プログラミング2 [2] 問題文(含コード&リンク): 任意の個数の点のx座標をxという配列に、y座標をyという配列に格納する。 同じ点があったら、その旨を出力せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日 [5] その他の制限: 配列まで習ってます
[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()
417 :
416 :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まで
>>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] その他の制限:
引数おかしくね?
おかしいな
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] その他の制限:
>>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]));
}
>>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("』");
}
}
>>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++どちらでもかまいません。
[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] その他の制限:
>>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");}
}
>>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);
}
[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です。
>>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)基礎的なことしか習っていないのですがよろしくお願いします。できれば細かい説明もよろしくお願いします。
まあそのままかいていけばいいじゃないか
[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] その他の制限: ポインタは最近習いました。
>>440 c++でpermutationを使って終り
>>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;
にする。
[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 そのページをコピペすればいいんじゃないの?
このスレで自演で解答して、なんかいいことあんのか? 自演で別人演じて解答催促はたまにする人いるみたいだけど。
[1] 授業単元:プログラミング言語 [2] 問題文 平行四辺形の2辺a,bとそのなす角θを引数として その面積を返却値とする関数areaを作成せよ [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 12月5日 [5] その他の制限: 特に無し お願いします
#include <math.h> double area(double a, double b, double theta) { return a * b * sin(theta); }
double area(double a,double b,double rad) { return 0.5 * a * b * sin(rad); }
平行四辺形だぜ?
453 :
449 :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] その他の制限: 特に無し 出来ればこちらもお願いします
何桁目までおkなのかかいとけお
455 :
453 :2007/12/01(土) 15:39:47
>>454 特に指定されていませんでした
適当な桁数でお願いします
#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; }
457 :
445 :2007/12/01(土) 15:55:33
すみません説明欠落でした。 「Boyer−Moore法による文字列の探索で、ヒットした回数を出力するプログラム」 です。
458 :
453 :2007/12/01(土) 15:57:05
>>456 本当にありがとうございました!!
助かりました><
>>448 難しくて、自分だけが知っていそうな質問を出して、
回答者が間違う様、解けない様を見て喜ぶ。
さらに、自分で正解を書き込んで自分の優秀さをアピールし、悦に入る。
284や431はそんなレベルの問題じゃないだろw
461 :
デフォルトの名無しさん :2007/12/01(土) 19:53:33
>>436 それもう締め切りすぎたろwww
M先生乙!
適度に難しい問題は大歓迎だ 自演でも別に構わない
[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] その他の制限: 特になし
464 :
420 :2007/12/01(土) 20:07:43
>>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;
}
>>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;
}
>>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
最後の行を間違えました。 a^42 * a^21 = a^63 です
>>467 別に自演でもいいけど、
お前は気持ち悪いな。
そういや、昔、
>>463 に似た問題で
「ある金額Aを日本の硬貨・紙幣を使って支払うときに
硬貨・紙幣の枚数が最小になる支払い方を計算せよ。
ただし、再帰やループは使用禁止」
とかいう宿題があったな。
絶対無理だと思ったけど、
結局、誰かが回答出してきて、
世の中、すごいやつはいるなあ、と思った記憶がある。
>>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;
}
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日まで [その他]なし よろしくお願いします。
#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 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
>>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;
}
>>477 a^1 * a^1 = a^2
a^1 * a^2 = a^3
a^3 * a^3 = a^9
おい、てめーが間違ってんぞ
>>470 硬貨・紙幣なら簡単
不規則な数字群だと面倒になる
>>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
[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]その他:
>>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]);
}
489 :
デフォルトの名無しさん :2007/12/02(日) 12:20:58
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);
書き手が居ないのこっちで募集してみる
新ジャンル『アルゴリズム女』
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); } 」
>errlavele ……
VIPのプログラミングスレで宣伝してろよ
[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の値 を画面に表示 ) よろしくお願いします。
497 :
463 :2007/12/02(日) 17:25:02
>>495 なんだか回答を知っているように見える書き込みになってしまっていますが、
この問題は演習の問題として出たもので、質問者は正解を知りません。
なので、n ≦ 4000 を現実的に解ければ計算量はどうでもよいです。
多項式ないしは非常に小さな数のべき乗ならうれしいですが。
字句解析のプログラムの一部分を作れという課題が出されて全く分かりません 誰か↓の関数を作っていただけないでしょうか?。お願いします 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(エラーの場合) */ // (* ここに解答を書き加える *)
>>498 テンプレ(
>>1 を参照)に従って書いていただけないでしょうか?。お願いします
すいません [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)の場合) */ // (* ここに解答を書き加える *)
/* 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 n=4000を試さないのは、止まらないからかなー?
505 :
デフォルトの名無しさん :2007/12/02(日) 21:26:18
女の子をナンパしたいなら、まずはネットナンパから!
出会いやすいサイトから攻めていきましょう。
↓↓↓
【即会いサイト in ブログ】
http://deaigets.blog97.fc2.com/ 〜管理人が実際に出会えている完全無料サイトのみ紹介しています〜
「最近の出会い系サイトの短期攻略方法」
・自分にあったサイトを2〜3個ぐらい選ぶ。
・30〜50通のメールを拡散発射!
・返信メールの振り分け作業。(サクラ排除)
・候補女の子と携帯メアド交換
・女の子と面接
この作業をしているだけで一週間で2〜3人と会えます。
>>504 n=4000は0.004秒で返ってくる
>>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;
}
いきなり質問してすいませんが、int a に配列(data1[0])のアドレスを入れたい場合は a=&data1[0]; でよろしいのでしょうか? これをするとエラーが出てしまうのですが・・・
>>508 a=reinterprit_cast<int>(&data1[0]); かな?
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] その他の制限:
>>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)
>>511 すいませんでした、あと教えてくださった方ありがとうございました。
>>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;
}
>>463 0回目の乗算で作れるのが1種類、
1回目の乗算でも1種類
2回目では2種類、
3回目では3種類、
4回目では5種類、
5回目では8種類。
ということで、a回目で作れる数字の種類は 1, 1, 2, 3, 5, 8, ... という激しく既出の数列になってる
>>516 まあそうあわてるな
一刻も早く完成品を見たい気持ちはわかるが、
アルゴリズムを考えてから30分だけじゃ
実装の完成はオレには無理だ
しばし待て
>>513 実装してみたがダメだった
値が既出だからと言って切って良いとは限らない
例えばn=15のときは1-2-4-5-10のルートが必要
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] その他の制限:
一回に全部書けよ・・・
>>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;
}
}
524 :
474 :2007/12/03(月) 01:41:06
#include <stdio.h> main(){ char a[]={78,85,76,76,80,79,10}; printf("%s",a); } の実行結果を答えよ
526 :
デフォルトの名無しさん :2007/12/03(月) 02:21:20
std::listを使ってやれよ
あたい、わたし
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
>>529 C言語はブロックの先頭でしか変数を宣言できない
531 :
529 :2007/12/03(月) 04:23:45
>>homoじょあさん ありがとうございました。
[1] 授業単元:C言語 [2] 問題文: 数字を12個入力して、3番目に大きな数値を求める [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio.net [3.3] 言語:C [4] 期限:12月3日 24:00 [5] その他の制限: 出来る限りシンプルなものがいいです
>>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
538 :
573の者です :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] その他の制限:特になし
>>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;
}
>>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());
}
>>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;
}
>>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++ で スタックのプログラムお願いします
テンプレに沿ってお願いします
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です。 よろしくお願いします
>>547-549 エディタやらコンパイラの使い方を教えるための課題か?
それだとスレ違い、というか物足りなくて書く気にならん。
>>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]);
}
>>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);
}
('A' 顔にしか見えない
[1] 授業単元:プログラミング演習 [2] 問題文:整数nを入力として受け付けて、1からnまでのn個の整数をファイルに保存せよ。数字の区切りには空白を使用すること。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4]期限: (2007年12月4日09:00まで) [5]その他: (特になし) よろしくお願いします。
>>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);
}
宿題かもーん。
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
よろしくお願いします
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
オッケ ━━━━━━ (ゝ○_○) ━━━━━━ イ !!!!!」
>>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;
}
>>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;
}
567 :
デフォルトの名無しさん :2007/12/04(火) 00:50:48
プログラミングの合間に出会い系
■最近流行りのSM系サイトを知っていますか?
それは「SMプレイをすること」を最終目的とした人達が集まる出会い系サイトのことです。
普通の出会い系サイトと一味違った、熱い出会いが全国各地で繰り広げられています。
《ブログ SM系サイトが会える訳》
http://smsite.blog123.fc2.com/ ブログでは管理人一押しのSM系サイトを紹介しています。
是非ご利用下さい。
>>566 fileがexitしちゃってちゃいかんよなw
double *p;
>>なお、この問題は早々に 2ch に投稿され、既に解答も寄せられています。同じ掲示板に何度も同じ問題を投稿するのはマナー違反ですので、もう新たに 2ch にこの問題を投稿しないようにして下さい。
574 :
566 :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] その他の制限:なし
[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] その他の制限:ソートもポインタを使ってください。 よろしくお願いします。
勝手に2chのマナーを宣言するなんて何様だと思うけどな
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問続けてですが、よろしくお願いします。
>>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;
}
584 :
デフォルトの名無しさん :2007/12/04(火) 21:58:45
[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まで
[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] その他の制限: 特になし
よろしくお願いします。
590 :
デフォルトの名無しさん :2007/12/04(火) 23:22:14
Tempに保存されているキャッシュを改名して任意のフォルダへコピーする プログラムはどのように書けばよいのでしょうか。
591 :
566 :2007/12/04(火) 23:33:23
>>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;
}
[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] その他の制限: 制御文、配列、構造体、関数、ポインタ、ポイ ンタのポインタ、ファイル、ビット よろしくお願いします。
>>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); }
595 :
576 :2007/12/05(水) 00:24:52
596 :
576 :2007/12/05(水) 00:25:57
あっ間違えました・・・
>>582 ありがとうございます!
>>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;
}
入力周りがテキトーなのは仕様。
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 よろしくお願いします
600 :
585 :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 よろしくお願いします
602 :
588 :2007/12/05(水) 03:01:28
>>589 ,592
ありがとうございます
というか既出だったのか…
よく調べもせず申し訳ない
>>240 とは同一人物ではないので同じ講義受けてる誰か、ですかね
宿題かもーん。
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文等)
どうしても分からないのでお願いします。
[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も例外処理でかけれる機能を付いてるのが好ましいです。
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日
>>604 なお、この問題は早々に 2ch に投稿され、既に解答も寄せられています。
同じ掲示板に何度も同じ問題を投稿するのはマナー違反ですので、
もう新たに 2ch にこの問題を投稿しないようにして下さい。
ちょwwwww
>[1] 授業単元:授業 もしかして、真性のアホ?
>>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;
}
東京電気大学がこのスレを使って遊んでるのか・・・?
>>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
>>616 ちょwif文多すぎwww
for(j=0;j<10;j++){
if(score>=i*10 && score<(i+1)*10) bunpu[i]++;
}
くらいにしとけよww
618 :
616 :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
すまん、訂正w for(j=0;j<10;j++){ if(score>=j*10 && score<(j+1)*10) bunpu[j]++; }
と、書いたとたんに
>>617 に指摘されてたw
>>617 みたいにjの増加量はインクリメントにして
条件文を工夫した方が分かりやすいな
>>620 >614は見えない? if文なんて要らんのよ。
# 実際にはエラー処理用に必要だけどね。それでもループは要らんわけだし。
>>621 あ〜そうか…点数を10で割った値を使えば
格納する場所の値を増やせるのか
配列とforとifなどって書いてたからif文は必須なんだと思い込んでた…恥ずかしいorz
どうでもいいけど、なんで>614は
>>566 って書いているんだろう……orz
>>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",
};
って書いちゃダメかな?
>>624 staticにしないと実行時にコピーするコードの分、効率が悪いくらいの違い。
東京電気大学って阿呆なんだね。
と、中卒ニートが申しております。
中卒ニートにバカにされる大学ってw
629 :
デフォルトの名無しさん :2007/12/05(水) 18:08:04
中卒ニート>>>東京電気大学 つまり金の無駄
630 :
デフォルトの名無しさん :2007/12/05(水) 19:22:50
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] その他の制限: (標準ライブラリは使ってはいけない 宜しくお願い致します
何で句読点も打てないんだろうか。 つーかそんな制限ありえなくねえ?アセンブラ使った方がよっぽどましな状況だろ
633 :
デフォルトの名無しさん :2007/12/05(水) 20:00:08
>>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();
}
>>634 コード圧縮しすぎてバグってるw
element *next_head;
if(list_head == NULL) return;
next_head = list_head->next; /* freeして消すのでここで退避 */
こうでないとlist_head==NULLのときに阿呆なメモリにアクセスする。
636 :
562 :2007/12/05(水) 21:45:34
562をどなたかお願いします。 式の書き換え部分だけでもやっていただければ、プログラムはなんとかできそうです!
637 :
デフォルトの名無しさん :2007/12/05(水) 21:59:49
[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
642 :
638 :2007/12/05(水) 22:26:03
ありがとうございます!
>>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();
}
宿題かもーん。
645 :
デフォルトの名無しさん :2007/12/05(水) 22:35:48
C言語で対人用のオセロプログラム作ってください もちろんGUIで^^
もちっと簡単な宿題かもーん。
>>648 ありがとうございます。
長精度整数用アルゴリズムを構成するには、上記公式の中の「定数1」に対応する整数Mを設定しなければならない。
このMを基準として、各値を計算する。
長精度型の変数をA,Y,U,V,W, 通常の整数型の変数をxとおくとき、Mで上の公式を書き直す っていうのはどうしてますか?
Mの値を10^10000とか10^40000とかに設定して計算実験をするんですが
>>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
みたいになってます。
>>651 / ヽ
巳________________|二-
| l_/_jニニコ_iニニ!.
i~^' fエ:エi fエエ)Fi
ヽr > V / ̄ ̄ ̄ ̄ ̄ ̄ ̄
l !ー―‐r l < お前の態度が気に食わない
__,.r-‐人 `ー―' ノ_ \_______
ノ ! ! ゙ー‐-- ̄--‐'"ハ ~^i
ヽ ! ヽ、_ _.ノ i \
ヾV / ! /.入
宿題かもーん。
[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]のプログラムが問題です。分かりにくいと思いますがよろしくお願いいたします。
分かりにくいと思うならちゃんと書き直せ。全く意味を成してない
>>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);
}
>>657 すみません。問題にはこのようにしか書いてないんです。
多分あいている部分を埋めるような感じだと思うのですが・・・
問題用紙には先ほど書いた通りにしか書いてないです。
どこがあいている部分なんだよ
>>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); から }の所
以上が空白の部分ですです。
埋めるための間じゃないだろそれ・・・ せいぜいa=2;とb=3;の間にintを入れるくらいじゃないか?
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; }
答え 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 よろしくお願いします
>>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);
}
すみません、 一度、ウイザードを使用してexeのスケルトンで作ったプロジェクトを ウイザードでdllのスケルトンを作成したプロジェクトに変更することは可能なのでしょうか。
>>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] その他の制限: 制限はなし
すっかり課題を忘れてて手をつけていない
よろしくお願いします
>>672 後出しするな
しかもグローバル変数は使ってるだろ
電気だろうが電機だろうが阿呆は阿呆。
【質問テンプレ】 [1] 授業単元: C言語 [2] 問題文(含コード&リンク):コマンドライン引数から半角アルファベットで構成されている テキストファイルを元に暗号化する,半角アルファベット以外はそのまま出力する。 ↓のfile.txtを読み込んで abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ ↓のようにファイルを出力する zxywvutsrqponmlkjihgfedcba ZXYWVUTSRQPONMLKJIHGFEDCBA [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C [3.3] 言語:C [4] 期限:今日中 お願いします
>>675 なんで電機を庇うの?
あ、ひょっとして件の大学の方ですか?w
プラグラム得意な人と苦手な人って多いよ、あそこ 小テストで if(a==10) とするところをif(a=10)としていてうまくいかずに悩んでたやついた (電大知らない人は電気だと思うだろうね、普通は)
東京電機大なんて始めて聞いたんだけど、Fランですか?
>>679 そのミスは得意な人もたまにうっかりやるミス
>>680 ランクってのはよく知らない(気にしたこともない)
自分も先生から聞かされるまで知らなかったし
でも最近(1〜2年前)駅付近の広告(駅のホームとかだったか?)で見るようになった気がする
知名度はその程度
[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日まであるものとする。 どうかよろしくお願いします。
>>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);
}
すまん、
>>683 のs2[100]はいらない。消し忘れてた
n 個の石が環状に並んでいる.それぞれの石には番号がついており,最初は時計回りに順番に並べられている.番号は 0 から n-1 までの整数である. m 番の石を最初に取り除く.直前に除いた石から時計回りに石をたどって k 個目を取り除く作業を,残り 1個になるまで繰り返すとする. 標準入力から,n, m, k の 3つの整数値が与えられたとき,最後に残る石の番号を答えるプログラムを書きなさい. 普通の継子立てとおなじく考えてたら全然ダメでした。。。ソースお願いします><
>>678 >>680 >>681 一般常識だろ。FAX開発者が初代学長。中学、高校共にlv高いし。国立大合格者毎年出すし。
大学の就職率もそんじょそこらの大学よりぜんぜんいい。
>>685 テンプレに習え。
あとリングバッファでぐぐれ。
>>686 >国立大合格者毎年出すし
これ笑うとこですよね?
>>687 ん? 電機大高校から国立合格者を出すって意味だけど…?
大学から大学合格者出したらそりゃ笑うわw
689 :
工大生 :2007/12/06(木) 14:47:08
C言語の宿題を教えてください。内容は以下の条件を満たすゲームの作成です。 条件は制御文はif(if−else、else−if)文、switch文、繰り返し制御(while,do-while,for文) を一回以上使い、関数は三種類以上作ります。あと配列およびポインタ変数をそれぞれ一つ以上使う。です。 誰か得意な方教えてください。
>国立大合格者毎年出すし ふつーの高校は、いちいちそんなこと言いませんが。
[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 よろしくお願いします
693 :
562 :2007/12/06(木) 17:00:58
562の式の書き換えをどなたか、お願いします↓。
どうやって考えていいかわからず、困っています。
>>651 も参考にしてください。。
695 :
デフォルトの名無しさん :2007/12/06(木) 17:16:07
696 :
デフォルトの名無しさん :2007/12/06(木) 18:23:26
ホントに宿題かもーん。
699 :
デフォルトの名無しさん :2007/12/06(木) 20:45:16
[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
>>700 #include <algorithm>
void intary_rcpy(int v1[],const int v2[],int no){std::reverse_copy(v2, v2+no, v1);}
>>703 いや、俺はそうあるべきだと思う。
あ、たしかに課題の回答としてはどうかと思うがw
705 :
デフォルトの名無しさん :2007/12/06(木) 21:16:31
STL分からない ついでにC++もちょっとしか知らない
しかし車輪の再発明をしろって課題もなんだかなあ。 理解してるか見るためとはいえ
708 :
700 :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);
}
709 :
700 :2007/12/06(木) 21:36:33
(続き)
というプログラムを組んだので、これと似た感じのプログラミングで、
>>700 の内容を組めないでしょうか?
上の内容のプログラムとmax_ofなどから必要なものを持ち出して、
組んでみろと先生は言っていました。
すみません、アホな質問だとは思いますが、どうかお願いします
void intary_rcpy(int v1[], const int v2[], int no) { int i; for(i=0; i<no; i++) v1[i] = v2[no-1-i]; }
>>709 情報の後出しは良くないから気をつけてね
712 :
デフォルトの名無しさん :2007/12/06(木) 22:02:58
フローチャート描かせる宿題なんて都市伝説かと思ってた。
フローチャートを書くのは(若干面倒だけど)そんなに難しくないが、残念ながらスレ違い
了解しました!
720 :
デフォルトの名無しさん :2007/12/06(木) 22:51:51
1] 授業単元: 情報基礎 [2] 問題文(含コード&リンク): 3次方程式を解くプログラムをニュートン法を用いて作成せよ。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限: 12月23日 [5] その他の制限 特にありません。
721 :
692 :2007/12/06(木) 23:04:43
>>694 遅くなってすみません、ありがとうございました
>>722 まさか、こんな早くやっていただけるとは思いませんでした!
シンプソンだけでも感謝です!
本当にありがとうございました。たすかります。
正直だめもとで書き込んだんですが、まさか両方ともやっていただけるとは思いませんでした。
時間を使わせてしまって申し訳ありません。
>>725 さん本当にありがとうございました!
>>726 きにすんなー♪申し訳ないと思うなら、次はもっと面白い課題もってこーいw
気が向いたらやるんで。
XOR暗号って・・・複合化って・・・ いやそれ以前にスレ違いだろ
>>728 せめてテンプレに載せて書いてくれたらやってあげたのに・・・
宿題なんてやっつけてないで、東京電機大学について熱く語ろう!
まともな答えがないのでまた明日きますよっと
>>731 サンクスです。
めちゃくちゃ助かりました。
735 :
デフォルトの名無しさん :2007/12/07(金) 08:59:06
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] その他の制限: 特になし。
740 :
737 :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); } これでずれ修正できたでしょうか 改めてお願いします
ごみくそソースを晒すスレはここですか?
>>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;
}
>>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);
}
9回であたらなかったら点が減らないってのはどうなのよ?
>>742 > return strdup(buf);
これ、free() で解放する必要はないでしょうか?
746 :
737 :2007/12/07(金) 21:30:19
>>743 氏
ありがとうございます
ごみくそーすにここまでやってくださって本当に感謝。助かりました。。。
>>747 では、strdup() の返す値は、スタック上にあるのでしょうか?ヒープ領域でしょうか?
前者なら strdup() の呼び出された関数から抜けると、その返り値は無効になりそうですし、l
後者ならば、やっぱり free() しないと、と考えるのですが。
ANSI の関数じゃないので、挙動がよくわからないのです。
749 :
デフォルトの名無しさん :2007/12/07(金) 22:45:43
>>748 strdupの文字列はmallocされた領域だから、freeしないとダメ
752 :
682 :2007/12/07(金) 23:16:06
684さんありがとうございました。
>>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;
}
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] その他の制限:本当に基礎的な事しかやってないので、 出来れば簡単なプログラムでお願いします。
>>755 #include <stdio.h>
main(void){ return puts("-50") >= 0; }
mallocされた領域だからって必ずfreeしないといけないわけではない。
758 :
デフォルトの名無しさん :2007/12/08(土) 00:53:43
>>756 ありがとうございます。
ちなみに、for文を使ったらどうなるんでしょうか。
>>758 #include <stdio.h>
int main() { int i = 0; for (; i < 1; i++) puts("-50\n"); }
#include <stdio.h> int main(void){ int i; for(i=0;i<1;i++)puts("-50"); return 0; } かぶった orz
>>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);
}
同じネタは一回でいいよ。
え?? 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);
何やってんだorz × for(i=1; i++; i<=100) ○ for(i=1; i<=100; i++)
1] 授業単元:プログラミング [2] 問題文(含コード&リンク):読み込んだ2つの整数の割り算の答えを小数点以下100桁まで表示するプログラムを作りなさい。 [3] 環境 [3.1] OS:Windows [3.3] 言語: C [4] 期限:2007年12月9日9:00
[3.3]とか[5]とかはしょるな
>>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;
}
>>757 プログラム終了時に malloc した領域が OS に帰りますか。また、そうとして、それは処理系の仕事?それともOSの仕事?いずれにしても malloc() した領域を free() しないソースはきれいとは思えませんね、個人的には。
771 :
デフォルトの名無しさん :2007/12/08(土) 11:30:38
プログラム終了時にはfreeしなくても全て消えるはずだ メモリが解放されていないなら、実行中のはずだ freeが必要なのは、サブルーチンから戻るときだ
プログラム終了時にfreeしようとする人間はOSの動作を意識していない。 また、仕様にも無頓着だ。
mallocしたらfreeするのを習慣づけておくのはいいことだよ つい忘れがちになるし
774 :
デフォルトの名無しさん :2007/12/08(土) 12:00:09
習慣にしなくて良い プログラムを終了したら消えるから 長時間起動するアプリでメモリリークが起こったら疑えばよい
もっと燃えるような燃料をお願いします
776 :
デフォルトの名無しさん :2007/12/08(土) 12:05:07
>>771 は素人丸出しですね
少なくとも俺の開発している環境ではアプリ終了後も
確保したメモリ領域は残ってる
安西先生、MMUが欲しいです
環境によってはメモリークの原因特定するの非常にダルイから、 「起こってから」とか悠長なこというのは自分一人でプログラム組む人だけにして欲しい いや宿題スレに来るような人はそもそも将来プログラム組んで欲しくないけど
「はきだめ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 メモリリークとかに気をつければいいんじゃね?w
まぁ趣味で組むなら関係ないことだけどね
たとえ起動するたびにランダムでファイルが消えようと仕様の一言で済むし。
783 :
デフォルトの名無しさん :2007/12/08(土) 12:29:45
>>780 組み込みの某RTOS。
mallocでもnewでも確保したやつは明示的に解放するまでは
システムをリブートするまで消えない。
784 :
デフォルトの名無しさん :2007/12/08(土) 12:35:15
>>783 ほんとかよ?freeしないと消えない暗示にかかっているんじゃないだろうな?
たとえば200M確保して終了するプログラム作ったらその200Mにはアクセスできなくなるのか?
>>776 それは環境依存の現象だね
一般化するのは危険
C言語の仕様ではプログラム終了時のメモリについて規定は無い
つまり、freeしたからといって、もしくはしなかったからといって
確保したメモリがどうなるかは完全に環境依存だ
windows、UNIX、Linuxについてはメモリリークは発生しない(ということになっている)
組み込みに関しては一般論で語るのは愚の骨頂
(組み込みにおいて安易に命令を増やしてよいわけがない)
つまり、理由もなくfreeを追加してよい場面は無いし
理由もなくfreeを書かないといったことも許されるわけがない
ただ、一つだけ言えることは安易に理由もなくfreeを記述することは
バグを増やす原因となりうることを意識しておかなければならないということだ
そもそも、プログラムの起動・終了という概念があるOSですか?
787 :
デフォルトの名無しさん :2007/12/08(土) 12:38:51
>>783 プログラムを終了しても、アクセス出来なくなる領域を残すとは、そのOSのバグでは?
キャッシュに残るとかなら正常だけど、終了してもアクセス不可はやばいよ
メモリ空間がプロセスごとに独立しているのが当たり前と思えるいい時代じゃあないか
おまえら解放、解放って左翼団体かよ
じゃぁmallocは使わない方向で
791 :
デフォルトの名無しさん :2007/12/08(土) 12:49:31
井の中の蛙が多いスレはここですか? そもそもfreeをOSまかせにする奴は メモリやらオブジェクトの生存期間を管理 できてない素人。 プログラム終了時にメモリが解放されると 言い張る奴はOSの仕様と言語仕様を勘違い しているアホ
まぁWindowsとLinuxで宿題の99%はまかなえそうだけどな
>>791 OSの仕様を考えずに、なんでもかんでもfreeするほうがよっぽど素人。
794 :
デフォルトの名無しさん :2007/12/08(土) 12:55:37
メモリの内容自体は確保したかによらずに0か1か入っていて、 確保したら別のソフト、OSからアクセスできるかどうかしか違わないはずだろう アクセスしていたプログラムが終了しても解放されないのはおかしいだろ
795 :
デフォルトの名無しさん :2007/12/08(土) 12:56:44
宿題スレに素人しかいないのは当たり前ジャマイカw
OSの仕様を考えられなかったり、メモリやオブジェクトの生存期間を管理できない素人は、 とりあえずfreeした方がいいのかそれともOSに任せた方がいいのかって話題じゃないのか? 玄人さんは自分の好きなように管理してくださいよ
797 :
デフォルトの名無しさん :2007/12/08(土) 13:03:06
100M確保してそのまま終了した場合、それを10回程度起動させたらメモリ不足になるのか実験してみてくれ
798 :
デフォルトの名無しさん :2007/12/08(土) 13:03:12
>>793 つ [移植性]
別のOSで動かす時に全部に対応するfreeを書かないといけないんだぜ?
いっぺんオープンソースのライブラリとか見てみろ
それなりの経験者が書いているコードを
まあどうみても
>>793 は顔真っ赤にして
恥の上塗りしてるだけにしか見えないが
組み込みで100Mも確保したらそれだけでメモリ不足になりそうだな
800 :
デフォルトの名無しさん :2007/12/08(土) 13:07:12
信念を持ってfreeしない奴はいいんだがな
>>793 みたいに勘違いしてる奴が現場にくると
周りが迷惑する
なのできちんと理解できない初心者のうちは
黙ってfreeしとくのがいいと思います
>>793 ??
個人のスタンスなんてどうでもいいけど、
処理系依存を出来るだけ避けて、
規格合致なCのコードを書こうとするスタンスの何が素人?
802 :
デフォルトの名無しさん :2007/12/08(土) 13:08:54
メモリは16MBしか積んでません!(^O^)
いい加減スレ違いだクソども
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失敗!
スレタイ見てない通りすがりの組込み技術者からすると、 OSあるだけ幸せ。
809 :
デフォルトの名無しさん :2007/12/08(土) 13:16:51
>>807 続けてじゃなくて5M確保したら、解放無しで終了するプログラムを4回実行
mallocできるだけ幸せ
811 :
デフォルトの名無しさん :2007/12/08(土) 13:19:27
812 :
デフォルトの名無しさん :2007/12/08(土) 13:21:06
じゃあ再起動しないと、だめになっちゃうの?そのOSおかしいよ
813 :
デフォルトの名無しさん :2007/12/08(土) 13:28:25
>>812 お前らが使ってる携帯にも使われてますが何か?
freeをした場合にメモリリークになるのか freeをしなかった場合にメモリリークになるのか 環境依存です。
>>770 OSの仕事とかいうに、ちゃんとプログラム内でfreeさせなきゃいけない
でないとメモリリークになる
スレッドモデルでfreeし忘れたら、プロセスが終了するまで、大量にリークしたままの状態になる
もちろん、プロセス終了時に解放されるから、分かってやってるんならいいけど、作法としてはNG
>>801 freeをした場合の不都合については無知なんだね
移植性を考慮した場合、freeはdefineしておくのが常道
817 :
デフォルトの名無しさん :2007/12/08(土) 13:32:30
>>813 OSは正しくプログラムが終了している事を知っているのに、アクセスできないままにしておくのはバグだと思うよ
プログラム終了時にmallocしたメモリ、及びfreeしたメモリがどうなるかなんて 言語仕様には書かれていません
freeしてたらどんなOSでも正しく動作する そんな風に考えていた時期もありました
820 :
デフォルトの名無しさん :2007/12/08(土) 13:38:41
メモリが使えるかどうかアクセス制御しているのはOSであるから、プログラム側で解放しなかった場合、 それを解放するか、しないかはOSが決めることだ しかし、しなかった場合、プログラムが終了しているのにそのままにしておくのはおかしい
メモリリークが起こるって主張は容易に理解できるんだけど、
>>819 みたいなのってどういう意味?
プログラム内でmallocした領域をfreeしちゃいけないって何だ?
解放済みの領域をfreeしたとか、そんなマヌケな話?
おまえら、移植性とか言語仕様とか環境依存とか宿題出されるような素人に関係ない話をこのスレに持ち込むなw
いつものキチガイだから相手するなよ
質問されてるんだからしょうがないじゃないか そういう周辺事項を含めて、宿題が出ているのかもしれない 俺も昔、Unixのメモリ管理のレポートを書かされた気がする 上位アドレスからメモリを確保するか、下位アドレスからメモリを確保するのか、とかそんな話だったかな・・・忘れた
質問者そっちのけで自分理論展開してたようにしか見えなかったが
free必要だよ派 ・きれいとは思えませんね派(感情派) ・サブルーチンから戻るときは必要派(不穏分子?) ・習慣づけておくのはいいことだよ派(みんながそう言ってたよ派) ・俺の環境では確保したメモリ領域は残ってる派(目の前の環境がすべてだよ派) ・趣味で組むなら関係ない派(仕様です系過激派) free不必要だよ派 ・長時間起動するアプリでメモリリークが起こったら疑えばよい(どうせ日次リブートやるんだよ派?) ・windows、UNIX、Linuxでメモリリークは発生しない派(ファンタジー派) ・mallocは使わない派(石橋を叩いてみたけどやっぱり渡らない派)
>>824 それなら質問者と対話しろ
おきざりにするなw
結局、free必要だって言ってる奴は目の前の環境がそうだからそうしろって言ってるだけで OS仕様や言語仕様は全然みてないってことだよな? 対する立場の奴は仕様で規定されてないから確認しろっていう当たり前のことを言ってるだけ
おまえらがくだらない事ばかり言うからぼるじょあスレに客とられてるじゃねーか
aho
>>828 宿題スレに来るような人にOS仕様や言語仕様を見ろだの確認しろって言う方が無茶だろ
>>828 だから、その仕様ってなんだ?
メモリリークになる仕様じゃないのか?
free反対派が何をいいたいのかさっぱりわからない
もっと技術的根拠を明確にして
free() するかどうかなんて、その時の気分でいーんじゃね?
834 :
デフォルトの名無しさん :2007/12/08(土) 14:00:57
メモリ管理しているのはOSであるから、プログラム側で解放しなかった場合、 それを解放するか、しないかはOSが決めることだ しかし、プログラムが正しく終了しているのにメモリアクセス不可にしておくのはおかしい
どうせ清掃員が片付けるからとか言って煙草を道にポイ捨てするような奴らと 同じにおいがするってんだよ とっととガベコレのある言語にでも行っちまえばいいのさ
もともと ------------------- C言語の本をにはたいてい mallocしたメモリーをもう使わないなら放っておけば 終了時に自動的に解放されるので明示的にfreeしなくても良い と書いてあるのですが、先日ある雑誌を見ると 明示的にfreeしないとメモリーリークになる と書かれていました。どちらが正しいのでしょうか。 ------------------- って書き込みがあって、「いやそんなことはない。Free すべきだ」 「環境によってはほっておいても良いよ」って話が続いているだけ。 元々の「free をしなくてもよい」と書かれた文献に関しては 元質問者は返答なし。たぶんびびって逃げたんだろう。
ガベコレのある世界はディ○ニーランドみたいな世界なのか
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() である可能性は低いと思われる。
freeしなくても良い環境とするべき環境があるなら とりあえずしておくのが無難
freeしなければいけない環境なんて存在しないから、するだけ無駄。
・気持ち悪いから解放しとけ ・組み込み(携帯?)の某OSではプログラム終了時にメモリ解放されない 解放したほうが良い理由はこの2つだけ?
組み込み某OSで提供されているのは、実はmallocではない。
習慣づけておくのはいいことだよ派の人としては、 プログラムの途中でもfreeするの忘れたりするから、習慣づけしておいた方がいいと思う みんなプログラム終了するの前提だろ? そういうレベルで言えば組み込みだって電源抜けばメモリリークは解消されるから無視していいだろ
1. freeした時のメリット ・移植性に優れる 2. freeした時のデメリット ・? 3. freeしなかった時のメリット ・? 4. freeしなかった時のデメリット ・特定環境でメモリリークの原因
>>834 ?
もしかしてfree反対ってことを主張している?
反論としては弱いよ
まず、メモリ管理しているのはOSだけじゃなくて、プログラムでもやっている(もちろん物理アドレスの管理なんて出来ないけど)
1プロセスあたりの最大メモリはOSの設定によって定められてるし、(たとえば4GB)
実際の物理メモリの容量だって制限はある
制限が厳しい環境なら当然、メモリは潤沢に使えない
1プロセスあたりに、たかだか数MBのリークを起こしたとしても、
そのプロセスを大量に同時起動しなきゃいけない場合があったら、無視できない値になる
それに、自分で確保した領域は、自分で片付けないとね
あと、メモリアクセス不可にしておくのはおかしい、と言ってる時点で、OSに欠陥がある可能性も考慮しないといけないんだから、
やっぱりfreeはしなきゃ
>>845 プログラムの「終了」時のfreeの話をしている。
850 :
デフォルトの名無しさん :2007/12/08(土) 14:15:53
>>839 メモリリークはどんな環境でも起こるよw
>>839 のいってることはメモリリークした場合に、OSが掃除してくれるかどうかでしょ
851 :
デフォルトの名無しさん :2007/12/08(土) 14:16:27
インライン展開されているルーチンで動的確保をしている場合はメモリーリークするんじゃないの? インライン展開されていないルーチンは毎回自動で解放されるんだろうか
>>847 2. freeした時のデメリット
終了時のfreeに備えるために、プログラムが不必要に複雑になる場合がある。
853 :
デフォルトの名無しさん :2007/12/08(土) 14:17:03
>>849 ちゃんと終了しない可能性があるとしたらどうするんだ??
>>852 たかだかfreeするだけで複雑になる場合、プログラムの設計から見直した方がいいと思うけど?
別にfreeするしないは関係なく。
まともなOSを使っていることを前提に話をしようぜ!
ここでいうメモリリークとは アプリケーションがmallocで確保したメモリを アプリケーション終了後に使用不可能になることを指す 定義厨が現れる前に定義してやったぜ!
まともなOSを使っている場合、サブルーチンから戻るときにfreeしないとメモリ残ってるの?
>OSの不具合によりfreeしなければメモリリークが発生する場合がある これただのバグだろ?特定環境でのバグ回避の手法を一般化する理由はなに?
>OSの不具合によりfreeしなければメモリリークが発生する場合がある そんなOSなら、freeしたってメモリリークが発生するだろう。
>>839 >ANSI Cならメモリーリークは起きない
ごめん。
否定する気は無いんだけど、これ、規格のどの辺?
良く分からん。
>>846 >そういうレベルで言えば組み込みだって電源抜けばメモリリークは解消されるから無視していいだろ
電源抜けば、とかソレは論外じゃねぇ?
どんな環境でも電源抜けばメモリリークは解消するだろ。
mallocしたメモリが関数抜けただけで解放されたら世の中大騒ぎだぜ
実装レベルの話でスマンがfreeは終了遅延の原因になるからタイミングにシビアな環境で安易にやるなよ
>>853 メモリリーク云々以前にゾンビ化してプロセスごとリークする可能性がある。
>>856 えー・・・引いたわ
無理やりすぎるなぁ、そんなこといったら大抵のOSはメモリリークなしってことになる
一気にテンション下がった('A`)
テンションあげるためにオナヌーでもしてくるか
>>862 タイミングにシビアな環境で宿題やらせるなよw
>>862 なるほど!そういう状況があるわけか、勉強になるなぁ
free反対派の意見としては一番しっくりくる
>>862 シビアなら動的に何度も確保せずはじめに必要な分とっておけばよい
シンビアンだけにシビアね
>>861 関数内の変数は解放されるけど、newとかは解放されないの? これがメモリーリークってことなの?
実際にメモリーリークしている簡単な例を挙げてくれ
>>870 プログラム終了時とかそういう話でなく?
丸投げならテンプレ守れ。
初音たんの実装まちがって愛液リークしまくり
おまえらのプログラムが遅いのはfreeを使ってるからだよ
お前ら頭いいなww俺にはさっぱりだ
これを再現するコード尾根
メモリリークの種類
アドレスの上書きによるリーク
このエラーが発生するのは、動的に割り当てられたメモリ ブロックが解放できなくなるような
ポインタの再設定が行われたときです。特に、動的割り当てブロックを指す唯一のポインタが
上書きされたときに、このエラーが発生します。
メモリ領域の解放にともなうリーク
解放したメモリ ブロックの中に、ほかのメモリ ブロックへのポインタが含まれている場合に発生します。
戻り値が無視されたために発生するメモリ リーク
メモリ ブロックを指すポインタを呼び出し元に関数が返した場合に、そのポインタが呼び出し元で無視されたときに発生します。
自動変数の喪失にともなうリーク
あるメモリ ブロックを指すローカル変数 (ポインタ) を関数が持っている場合に、
ポインタをグローバル変数に保存せずに関数が終了したとき、またはポインタを
戻り値として返さずに関数が終了したときに発生します。
http://www.techmatrix.co.jp/products/quality/insure/feature/error_sample3.html
>>869 メモリ領域にはヒープ領域とスタック領域がある
スタック領域に確保されたメモリはスコープ(例えば関数や{}で囲まれた範囲)を抜けると解放される
ヒープ領域はスコープを抜けても解放されない
mallocやnewはヒープ領域に確保されるのでスコープを抜けても解放されない
>>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(); }
- 自動変数の喪失にともなうリーク void foo() { char* p = malloc(10); }
#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] その他の制限: なし
宿題解きに来たらお前ら何の話してんだよw
今の時期に新人研修ってそこはかとなく危険な香りがする
[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] その他の制限: なし よろしくお願いします。
>>880 VERIFY(((BOOL(*)(BOOL))GetProcAddress(hTest, "A"))(TRUE) == FALSE);
VERIFY(((BOOL(*)(BOOL))GetProcAddress(hTest, "A"))(FALSE) == TRUE);
>>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 ありがとうございます。
>>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. ...
オブジェクトの生存時間はプログラムの実行時間の内側だけなので,
プログラムが終了したらオブジェクトも死なないといけない.
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] その他の制限: よろしくお願いします
>>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++;
}
}
>>888 >リンクリスト、スタック、キュー、2分探索木
これ全部使わなきゃいけないのか?
891 :
889 :2007/12/08(土) 15:27:19
そうです・・・
↑すみません、888です・・
>>891 スタックの実装にリンクトリストは使えるけど、
キューや二分探索木の出番を考えるのは難しいぞ。
>>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;
}
キューは無理だろw
まさかリンクリスト、スタック、キュー、2分探索木を同時に使えって話なのか!?
>>887 6.4.2 Identifiers
(;゚д゚)・・・
6.2.4でした。
マジメにthx!
>>895 ファイルから読み込む一時領域としてキューを使えば、キューはまだ何とか。
二分探索木ってどこで使うんだ?
899 :
888 :2007/12/08(土) 15:46:17
>>895 >>896 おそらくキューは外していいのかなと自分では思っているのですが
今までずっと、キューもリンクリストも!?っと思い、混乱しておりました
二分探索木は順序を逆にするのに使えるんだがそうすると次はスタックが余ってしまう
いやいや、それぞれの方法で実装してみてそれぞれの特性を掴め、って課題だろw キューがあるのは、キューがこれにまるで向いていないことを理解させるためじゃないの?
質問! 二分探索木って二分木とどこが違うんですか?
じゃあ、キューは解なしが正解か
スタック、リスト、二分探索木を使って計三回反転させればいい。
反転したデータをキューに詰め込んで、表示する関数に渡せばいいんだろ。
キューとスタックは多くとも二個使えば他方を実装できることが知られてるぞ
BSTって逆順に並べ替えるのにつかえるか?
挿入番号をキーにしてEXTRACT_MAX()をキーの数だけやればいい 壮大な無駄だな
行番号をキーにして全行を順番に挿入して、 最後の行から番号を減らしながら取り出せば良いじゃん
>>906 ああ、そうか。
キューに全部放り込んだあと、別のキューに入れていって、
最後の要素だけ表示して追加はしない、を繰り返せばいいのか。
「せっかくだから」クソワロタwwwwww
>>911 終了時にfreeしないと怒るやつがいるぞ。
こんなプログラムで、freeするやつはバカだが。
つまらん話題を蒸し返すな
つか回答側は別にfreeしてなくても関係ないしな
>>913 いやいやそこはfreeしないでおいて初心者臭さを出すのですよ
917 :
デフォルトの名無しさん :2007/12/08(土) 17:53:13
プログラム終了時にメモリが解放されないのは OSのバグとか言い張ってる池沼がいたみたいだが そもそもプロセスの概念がないOSもあるんだよな もうちょっといろいろな世界を見た方がいいと思った freeで遅延終了? たぶんfreeの実装を一度も見たことないんだな ぬるぽ
ぬ る ぽ !
freeの実装はANSIの規定により処理系依存です。
>freeで遅延終了? 関数コールそのもののオーバーヘッドが気になるような環境で nsecオーダーのタイミングと戦ったことが無いのは、 それはそれで幸せなんで、いーんじゃないかね。
921 :
デフォルトの名無しさん :2007/12/08(土) 18:08:11
処理系依存なのは百も承知なんだが 遅延終了なんたら言ってる奴は自分の所の 環境でどういう処理が行われてるのか 調べたこともないんだと思う ぬるぽ
922 :
デフォルトの名無しさん :2007/12/08(土) 18:13:11
>>920 割込ハンドラとかかな?
そんなシビアな環境ならmalloc系関数は自殺行為です!
プロセスの概念さえないOSに、プログラムの終了なんてあるわけがないこともわからない池沼
924 :
デフォルトの名無しさん :2007/12/08(土) 18:17:08
>>923 プログラムの開始、終了の定義についてkwsk
925 :
デフォルトの名無しさん :2007/12/08(土) 18:26:12
926 :
883 :2007/12/08(土) 18:36:47
骨があり、だが高々30分ほどで終わりそうな宿題プリーズ
[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] その他の制限: とくになし
>>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;
}
930 :
929 :2007/12/08(土) 19:45:40
すまん、50と300なんて入れたらかなり時間かかるなこれw 真面目に作りなおします
ごめん、long longじゃ足りないわ
足りないのはおまえの愛だ
>>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;
>>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;
}
>>934 1,1を入れたら0と表示されましたが。
938 :
デフォルトの名無しさん :2007/12/08(土) 21:11:24
どれもめちゃくちゃ計算量多そうだな でも再帰以外で解けなさそうだし・・・
>>935 ちょwww
doubleを==で比較するなんて恐ろしい子、って言ってもいい?
配列やlonglongを使う意味がわからん……
940 :
デフォルトの名無しさん :2007/12/08(土) 21:13:31
N=50 K=150入れたら俺のPCが本気出し始めたwww
>>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
>>940 直観的だが、[1,2,3,4,5,6]の平均3.5 * ダイスの数が一番パターン多いんじゃないかな?
n=50ならk=175
>>939 あ、しまったw
最初long longで作ってて、桁が足りないからdoubleに変えただけでチェックしてなかった。
でもこの場合-1代入して、-1と比較するだけだから問題なさそうな気もするけど、その辺はわからないです。
>>941 50、300を入れたら1と表示されましたが。
>>938 >>935 は結果を保存してるっぽいから多分速い
doubleとかいい加減だが
あと、再帰はループに直せるはずだから再帰以外で解けないというのは違う…かな?
最大値は26617249029052543563966858745544940456だから 128ビット整数があれば足りるな
a[0]+・・・+a[N-1]=K、 a[i]<=a[i+1]を解けばいいだけだろう はじめに全て1にして余りがあったら分配していけばよいだろう
そうでもなかったな
951 :
929 :2007/12/08(土) 21:36:54
多分、この問題突き詰めていけば数式一本で計算終了できそうな悪寒。
free論争再発の兆し
個数が限定でない和が10倍は解ける? 合計が K となるサイコロのパターンの個数を表示せよ。ただし K ≦ 3000 とする
最低3000個、最高500個必要だが 今思ったがコンビネションのC(m,n)と関係ないか?
C(3000,0) C(2999,1) C(2998,2) の気がしている
>>956 最初コンビネで解こうと思ったら、一つの最大値6ってのをどうすればいいか分からなかったorz
俺の貧弱数学脳によればこれは組み合わせでは解けない、と思う(自信ないが)
959 :
958 :2007/12/08(土) 21:53:13
もっと簡単なしゅくだいかもーん
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にしちまったが気にスンナ
666666 1566666 2466666 3366666 2556666 3456666 という列が生成できればいいと思う
966 :
デフォルトの名無しさん :2007/12/08(土) 22:08:43
>>961 ん?double型の有効桁数超えてない?気のせい?
969 :
デフォルトの名無しさん :2007/12/08(土) 23:53:33
>>968 >>961 うん、有効桁数全然足りてないね
そのプログラムだと n = 50, k = 170 のとき
24456539641287986023030807574303735808
と表示されるけど、正解は
24456535588845712147456213502130798435
のはず。
long long で駄目な時点でdoubleでも無理だわな
ここはアルゴリズムの高速化よりも処理効率の向上を目指しても面白いと思うんだ マルチプロセッサ対応とかSSEとか機械語とか
>>970 だが、アルゴルだけは正しそうなんで、あとは多倍長ライブラリに移植すれば、O(n*k)で計算可能?
多倍長加算に多分O(n)要るから、O(n*n*k)だろ
[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] その他の制限:特になし
# define sign(x) (x<0?-1:x!=0) たぶんこんな感じだと思うけど確認してない
>>975 #define sign(x) ((0<x)-(x<0))
>>975 #define sign(x) ((x)==0 ? 0 : ((x)<0 ? -1 : 1))
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
日本時間です(^_^;)
[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] その他の制限:よろしくお願いします。
あ、くそっ、メッセージ表示忘れた。 42行目をbreak;からputs("ENDが入力されたので、入力処理を終了します。") break;に書き直しだ。
小数点第三位まである視力ってw まぁ、課題だから色々あるんだろうけど…
視力0.005ですが何か?
およそ0でいいだろそんなの。 むしろ小数点以下要らない。
>>983 ありがとうございます
ただENDを入力しても入力処理が終了しないような気がするんですが・・・
あっちゃんと入力終了しました ありがとうございます
992 :
991 :2007/12/09(日) 21:06:23
>>992 inputdataの戻り値をmainでチェックする
994 :
991 :2007/12/09(日) 21:27:52
>>993 あっそういうことですか!
ありがとうございました
せっきす
え? つよきす?
1000
みにきす
1000なら今年受験に合格して、 来年は大学でハーレム形成する
1000なら今年受験合格して、 来年は大学でハーレム形成する
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。