1 :
デフォルトの名無しさん :
2008/12/16(火) 19:45:29 BE:198809273-PLT(36020)
鏡を見ろよ、メガネピッツァさん?
,. -―-、 <-‐ヘ、9ノ‐> 从!イノiノヘilト これどうぞ ゙ヘ(!|´ヮ`ノリ シュッ シュッ シュッ、アレ? /∩と彡 / 彡 ノ,! / ./ ミ ξ ξ く/ ./ 旦 旦 / ./ / / ミ ξ / / 旦 | ̄ ̄ ̄ ̄ ̄| | |
>>前スレ998 a * Pn * (1 - area/Pn); だとすると、 a * (Pn -area) と言うことだもの。 整理されていない時点でおかしいし、内容も・・・
>>前スレ992 int word(char s[]){ int i, word_num=0, prev_is_space=1; for(i=0;s[i];i++){ if(!isspace(s[i]) && prev_is_space) word_num++; prev_is_space=isspace(s[i]); } return word_num; } >>前スレ996 一文字目が isspace に該当するときに余分に +1 される
7 :
998 :2008/12/16(火) 20:59:33
>>1 乙
char* s[250] = "aa bb\n";
int i = 0;
int n = 0;
while(s[n])
{
while(isspace(s[n]) && s[n])
{
n++;
}
if(s[n]) i++;
while(!isspace(s[n]) && s[n])
{
n++;
}
}
こういうのはどうだろう。
結局汚名挽回してるだけな気もするorz
>>1 さん乙
[1] 授業単元:科学実習@
[2] 問題文:
sum=1の2乗+2の2乗+・・・・Nの2乗
[3] 環境
[3.1] OS: Windows xp
[3.2]コンパイラ: gcc -o
[3.3] C言語
[4] 期限: 2008年12月31日まで
[5] その他の制限: 入力にscanf使用禁止
お願いします。
汚名は返上すべき
10 :
デフォルトの名無しさん :2008/12/16(火) 21:13:42
わざと挽回にしてるのが理解できないとかw
>>8 /* 酔っ払ってるから(ry *\
#include <stdio.h>
#include <stdlib.h>
#define SIZE 256
int main(void)
{
char buff[SIZE];
int N, sum = 0, i;
printf("N = "); N = atoi(fgets(buff, SIZE, stdin));
for (i = 1; i <= N; ++i) sum += i * i;
printf("1 x 1 + 2 x 2 + ... + %d x %d = %d\n", N, N, sum);
return 0;
}
前スレ992です。 前スレ995,996,998,999,本スレ5,7さんありがとうございました。 996さんのおっしゃったとおり、区切り文字が連続する場合は1つの区切り文字としたかったので、 みなさんのレスを参考に、以下のようにしてみました。 int word(char s[]){ int n, i, j; i = 0; j = strlen(s); for(n = 0; n < j; n++){ if(!isspace(s[n]) && isspace(s[n+1])){ i = i + 1; } } return i; } これで実行したところ、aa bbでも2と出力されました。 if(isspace(s[n]) != 0){ の部分を if(!isspace(s[n]) && isspace(s[n+1])){ とすることで連続して空白文字がきた場合はカウントせず、 文字+空白文字となっているときのみカウントするようにしました。
前スレの962です。 申し訳ありませんが、もう一度お尋ねしたいと思います。 [2] 問題文(含コード&リンク): フィボナッチ数列という有名な数列がある。 以下のプログラムはある整数を入力し、その整数以下のもっとも大きなフィボナッチ数列に含まれる整数を返すものである。 #include <stdio.h> int main(void){ int limit,new=1,pre=0,work result; scanf("%d", &limit); while(new<=limit){ /*printf("%d %d\n,pre,new);トレース用*/ work=new; new=work+pre; pre=work; } result =pre; printf("%d\n", result); }
17 :
16 :2008/12/16(火) 21:48:01
>>16 の続き
このプログラムの一部を関数にして書き換えたとする。
#include <stdio.h>
/*ここに関数を記述*/
int main(void){
int limit,result;
scanf("%d",&limit);
result=fibnum(limit);
printf("%d\n, result);
}
「ここに関数を記述」とある部分に関数を記述し、プログラムを完成させなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC6.0
[3.3] 言語:C
18 :
16 :2008/12/16(火) 21:48:52
>>17 の続き
いただいた回答を元に実行してみたのですが…
#include <stdio.h>
void fibnum(int limit){
int f0, f1;
f0 = 0; f1 = 1;
printf("%d\n", f0);
printf("%d\n", f1);
while(1){
f0 += f1;
if (f0 > limit) return;
printf("%d\n", f0);
f1 += f0;
if (f1 > limit) return;
printf("%d\n", f1);
}
}
(上記の通り)
return result;
}
19 :
デフォルトの名無しさん :2008/12/16(火) 21:49:09
テンプレに沿ってないですが… 以下のプログラムをstdio.h型ではなくiostream型に書き換えるとどうなるんでしょうか? printfとかscanfとかはcinやcoutに書き換えられるってのは自分で調べて分かったのですがどうもコンパイルするとエラーになってしまうんです。 printfとかscanf以外にも書き換えられる部分があればお願いします。 あと、それぞれの行がどういった命令を出してるのか解説もお願いします…。 for(i=0;i<8;i++){//最初i=0でi<8まで増えていく と言った感じで…。 #include <stdio.h> int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10}; void k(){if(m[p]==0) for(i=0;i<8;i++){ for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++; if(c&&m[v]==t){a+=c;v=p; if(d)do m[v]=t,v+=r[i]; while(m[v]!=t); }}} char*h="・○●\n"; int main(){for(i=1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0){for(p=9;p<82;++p)k(),printf("%.2s",&h[m[p]*2]); if(a)for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d",&p,&i),p+=i*9):++p; else if(s)s=0,printf("pass"); else break;t=3-t; } return 0; }
20 :
16 :2008/12/16(火) 21:49:26
>>18 の続き
\\FILESV7\UN$\NE200071\デスクトップ\V\v.cpp(28) : error C2440: '=' : 'void' から 'int' に変換することはできません。
(新しい動作 ; ヘルプを参照)
void 型の式は他の型へ変換できません。
とエラーがでてしまいます…なぜでしょうか?
長々と、何度も申し訳ありません。
どなたか回答していただけたら嬉しいです。
>>20 #include <stdio.h>
void fibnum(int limit) {
int f0, f1;
f0 = 0; f1 = 1;
printf("%d\n", f0);
printf("%d\n", f1);
while(1){
f0 += f1;
if (f0 > limit) return;
printf("%d\n", f0);
f1 += f0;
if (f1 > limit) return;
printf("%d\n", f1);
}
}
int main(void){
int limit,result;
scanf("%d",&limit);
result=fibnum(limit);
printf("%d\n, result);
return 0;
}
指定された整数以下の最も大きなフィボナッチ数列に含まれる整数を返していないから。 要するにその関数は題意を満たしていない。
>>16 ー17
#include <stdio.h>
/*ここに関数を記述*/
int fibnum(int limit) {
int a,b,c;
for(a=1,b=1,c=0; c<=limit; c=a+b) {a=b; b=c;}
return b;
}
int main(void){
int limit,result;
scanf("%d",&limit);
result=fibnum(limit);
printf("%d\n", result);
return 0;
}
>>17 >>16 を使うのか。
#include <stdio.h>
int fibnum(int limit){
int new=1,pre=0,work,result;
while(new<=limit){
work=new; new=work+pre; pre=work;
}
return pre;
}
int main(void){
int limit,result;
scanf("%d",&limit);
result=fibnum(limit);
printf("%d\n", result);
return 0;
}
25 :
16 :2008/12/16(火) 22:09:56
26 :
16 :2008/12/16(火) 22:13:47
>>23 すみません、回答していただいたものを見落としていました
無事に実行できました、ありがとうございます!
>>8 sum = N * (N+1) * (2*N+1) / 6;
29 :
14 :2008/12/16(火) 22:20:26
>>15 「word("word?");」と入力したとき、英単語「word」は2つあるにもかかわらず、
出力結果は1になってしまう、ということでしょうか?
自由課題、カモーン!タイピング、スロットマシン、15パズル、ヒットエンドラーン!じゃなくて ブローも用意してアルヨー!
お手隙の方がいたら
>>13 をお願いします。
途中まででも結構です
初心者なんやけどCとC++って C++ = C + αみたいに Cが強化されたのがC++ってことでいいのかな? CでできることはC++で全て可能 とか
>>34 大人しくここから出ていけよ、何か気に入らない発言があると
罵倒しないと気が済まない、一言居士
>>33 C++というくらいだから、Cに何かを付け加えたもの。
一番大きいのはクラス。
つまんない人がいますよね プログラムを作る人はこうなのだろうかと思うと、悲しくなってくる
C++はCのソースそのままでは動作が違うんだが、付け加えたものなんて嘘つくな
>>37 そんなスレ違いな発言を敢えてするお前もどうかと。
>>38 Cにだって、ANSIとC99では動作が違う
そのくらいの差だろう
>>41 ANSIとは?C99とは?
馬鹿丸出しですね
初心者なんやけどC++とC#って ┌─┐ │ ++ │ ++ └─┘ みたいにC++が更に強化されたのがC#ってことでいいのかな?
いいよ。
>>44 わかってないんだろうなこの馬鹿は
答えてみろよ
>>43 冗談でそういわれている。
シンタックスは、似ているように見えるが、全く別物。
知的に問題のある人の基地外発言↓
42 名前:デフォルトの名無しさん 投稿日:2008/12/16(火) 23:26:58
>>41 ANSIとは?C99とは?
馬鹿丸出しですね
↑特徴:罵倒(バカ、アホといった類)の言葉を平然と投げかける。
これだけで人間性の低さが露呈しているのだが、本人は気づかないんでしょうね。
この世に、自分が知っていること、知らないことなんていくらでもあるが、
知らないようなことを持ち出して、知らなかったことを責め立てるくせに、
いざ自分が重要なことを知らないと他人から指摘されると、逆切れして
無関係な話を始め、お前は(自分がよく熟知していると自身のあることを持ち出して)
〜を知っているのか?自分基準でそれをこう答えないと、知らないことにするぞ、みたいな
自分の経験不足を無視して、相手の粗探しを始める。
あと、すれ違いだから、他所でやれ。
51 :
14 :2008/12/16(火) 23:34:26
ほんと馬鹿丸出しですね 知らないなら知らなかったと言えばいいのに
53 :
14 :2008/12/16(火) 23:35:17
>>39 前スレで既出だったんですね
ご親切にありがとうございました!
[1] 興味本位で勉強中 [2] 問題文 a->1 ,b->2 ,c->3...............,y->25 z->26 (空白)->27として入力して、入力した英文を数字に変換するプログラム 例えば「a pen」なら「12716514」 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 お願いします
>>52 いや、あんた誰にレスしてんだ?無関係な人にレスして、自分の発言の汚さを
指摘されているって気づかない?バカだの丸出しだの、言動が低俗過ぎ。
そういう奴が言う言葉なんて、相手の粗探しをしようとしているとしか思えないのだが。
相手が何を知らないか、指摘すらしてないじゃん。自分はそうは思わない、程度の主張しかせず
相手にされていないって気づかない?w
>>58 もちっとC言語について詳しくなってから発言しろ、青二才。
宿題スレだろ。スレ違いな発言で罵倒し合ってんじゃねー、出てけよ。
無関係な発言するなよ、出てけよ基地外 > バカとか平気で使う
精神レベルの低いお子ちゃまねぇ〜、おっぱい飲ーみたーいのぉ?
>>59 ぷっ、鸚鵡返ししか出来なくなったな。そういう 罵倒 しかしなくなった時点で
まともに議論が出来なくなったという証拠。言いたいことがあるなら、お前が
説明すれば良いだろ。ただし、スレタイを読めるくらいの日本語力をつけてから
日本語を話せよ、お子ちゃま。
42 名前:デフォルトの名無しさん 投稿日:2008/12/16(火) 23:26:58
>>41 ANSIとは?C99とは?
馬鹿丸出しですね < 罵倒発言をするのが当たり前
46 名前:デフォルトの名無しさん 投稿日:2008/12/16(火) 23:28:19
>>44 わかってないんだろうなこの馬鹿は < また馬鹿を使ってる
答えてみろよ < 挑発しているが、自分が答えられていないことに気づいていないw
52 名前:デフォルトの名無しさん 投稿日:2008/12/16(火) 23:34:43
ほんと馬鹿丸出しですね < また馬鹿w
知らないなら知らなかったと言えばいいのに < 何も説明していない自分が知らないくせにw
↑必死すぎ。レス乞食は、相手にすると粘着してスレに常駐して
自分に反論したであろう者に、罵倒レスで揺さぶって反応を楽しむという
まともな社会人とも思えぬ言動をし、暇人であることをわざわざ
自己紹介するから面倒。時間帯からして、昼夜逆転したあいつだろうな。
これから明け方まで、こいつが担当するだろうけど、幼稚なソースコードに要注意。
自分こそが、正当な説明をせずに、相手を揺さぶって情報を引き出そうと
必死になっていることに気づいていないんでしょうね。知っている人は知っている。
C99とISO、ANSI準拠を知らない無知は放置よろ。
理解できてないなら黙ってればいいのに
>>43 C++はCに1を加えたもの、もしくは、加える前の状態であるが、後で1加えられた状態になるもの
C♯はCを半音上げたもの
>>2-1000 とりあえず、スレッド違いなレスポンスは、控えるようにしてね。私のレスポンスを含めて。
チャットのように掲示板を使うガキは、もう一度掲示板の本質を考えてね。
最近ム板の一部のスレッドが、荒れているから、ID強制にした方が、良いと思う。
さて、リアルブートするか。
ttp://ja.wikipedia.org/wiki/C99 > 少なくとも現時点の最新版に関しては、C++のC言語に対する上位互換性は完全に失われた。
検索すれば分かるものを。あと、C++コンパイラでCのソースが通るとか、
あれこれ言ったらキリがないんで。言語の使用とコンパイラの仕様も別に考えてくれ。
インターフェースなどの環境のこともあるが、所詮は0と1の数値データを
ちょちょいのちょいと操作、処理しているのさ。実行しているコンピュータ、
汎用電子”計算機”がな。
目の前にある文字や色のデータ、これもある法則や画像の形式に応じて
数値データが並んでいるんであって、それを色や形のあるものにしているのがソフト。
ある数値データを、ある法則に則って処理をしているわけだが。
ソフトは結局、OSやハードウェアの性能の範囲内の処理をしているのさ、ふっ。
あっ、宿題?今日は疲れたから、明日やってあげるね。麻呂のクソースでw
我ながら、ちょっと陶酔しちゃったぜ、かっちょえ〜〜!
wikiがソースかよwwwwww
>>66 0と1の数値データを操作しているという点には同意しかねる
それを了承するとは。 興味があって勉強中ならもっと自分で頑張ってみてはどうかね
>>54 こんな感じ?文字定数('a' みたいなの)使えばASCIIコード知らなくてもできるよ
#include <stdio.h>
int main()
{
int c;
while((c = getchar()) != '\n')
if(c >= 'a' && c <= 'z')
printf("%d", c - 'a' + 1);
else if (c == ' ')
printf("%d", c - ' ' + 27);
putchar('\n');
return 0;
}
73 :
デフォルトの名無しさん :2008/12/17(水) 00:40:55
>>68 なんで?事実だよ。0と1とはっきり記述されていはいないが、
磁気で記録するメディアには+か-、CDではレーザーの反射を読み取る仕組みが
挙げられ、穴が開いているかいないか、さらに、PC内部では電気信号で
やはり+か-かで、あとはそれらの組み合わせで、より多くのパターンを表現しているんだし。
ビットくらい、知っているだろ?そういうこと。
76 :
デフォルトの名無しさん :2008/12/17(水) 00:49:26
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 文字列をコピーする関数を作成せよ。 char *my_strncpy(char *s1, char *s2, int n); ただし、s2の文字列をs1へ、最大でn文字未満コピーするようにし、 s1がCの文字列の条件を満たすように作成せよ。 また、return valueはコピーした文字のポインタとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 17日まで [5] その他の制限: ポインタを習っています。 ポインタの考え方が難しくてよくわかりません。 詳しい説明も付けてくれるとありがたいです。 よろしくお願いします。
>>67 そこまで言うなら、wikiに事実無根や間違いがあるなら指摘しな。
他の資料を見ても、単純に言い切れない過去の歴史と仕様は存在しているし。
あと、何かと笑うだけの奴も無能。説明と言う説明が出来ていないから。
頼む、ランクはともかく、大学で実験や研究をしていない奴は黙っていてくれ。
そういう機関でそれなりのものを見てくれば、汎用電子計算機に対する考えは変わるよ。
少なくとも、目の前の色や画像データでウハウハやったり、KI・MO・I!文字データで
ウヒウヒやっている奴らが、0と1のデジタルデータに翻弄されているように見えるから。
その文章や画像も、真面目なものなら良いけどさ。例え風景を撮影した写真も、
所詮は0と1の組み合わせの数値データ。それをハードなりソフトで展開して
人間が認識できるある形になっているが、もとは無機質なデジタルメディアに記録された数値データ。
>>63 お前が無知だということは、よーく分かった。お前が説明できないなら、黙っていれば良いだろw
あと、お前にお似合いのプレゼント。ちゃんとコンパイルして実行してくれw
#include <stdio.h>
int main(void) {
int num[]={89,111,117,32,105,115,32,97,32,98,105,103,32,102,111,111,108,32,109,97,110,46,32,72,97,104,97,104,97,46},i;
for(i=0; i<sizeof(num)/sizeof(num[0]); i++) putchar(num[i]);
return 0;
}
79 :
14 :2008/12/17(水) 00:52:26
>>69 おかげ様で納得のいくプログラムになりました。
ご助力ありがとうございました。
80 :
デフォルトの名無しさん :2008/12/17(水) 00:54:22
step f1 f2 f3 f4 10 2.434 4.234 3.242 4.566 20 2.767 4.756 3.666 4.867 30 2.534 4.555 3.777 4.555 40 2.777 5.355 4.244 5.424 というデータファイルがあり、これをファイル入力して離散し、最終的に 0か1のデータにしたいです。そのためにまずこのテキストからf1,f2,f3,f4の 最大値(2.777,5.335,4.244,5.424)と最小値(2.434,4.234,3.242,4.555)を 見つけ出し、(データの値−最小値)/(最大値−最小値)で各値を算出し step f1 f2 f3 f4 10 1 0 1 1 20 1 1 1 1 30 0 1 0 1 40 1 1 0 0 とう具合の結果を出したいのですが、できるかたよろしくお願いします。 自分で作ったものの頓珍漢な結果しか算出されません。TT
>>80 宿題なのかな?
まずは頓珍漢なコードを見せてもらおうか
0と1が思い浮かばなくても、ファイルのダンプをすれば、実行プログラム、テキストファイル、 画像データ、その他ファイルも、数値データの塊で、それを扱っているハードが 0と1の組み合わせで扱っていることくらい、普通に理解できる。 テレビを見て、画面の中に人がいるとは思わんだろ?w あの映像も、何かハードウェアが映し出した映像を展開しているように、 数値データ(ファイル)をソフトに応じて実装された性能の範囲内で 処理を行っているのだよ、ワトソン君。
この説明で相手より優位に立てると思ってる知能の低さが泣けてくる。
http://cns-guide.sfc.keio.ac.jp/2002/2/1/1.html > コンピュータ内部のすべての情報は ``デジタルデータ'' という情報形式で保存されています.
> デジタルデータとは,数字に置き替えられる形式の情報のことを指し,
> `0'と`1'の2通りの数字によって表現できます.文章や写真,映像,音声など
> 現実にあるさまざまな形式の情報は,デジタルデータに変換できます.
そういうこと。間違っていないことを、自分はそうは思いませんでは通用しないのが、
客観的な考えや意見が必要な人間社会で適合するには、重要なスキルだぞ。
嘘を言っていない人を嘘つき呼ばわりは、干されるだけ。もちっと理解力を身に着けような。
>>74 #include <stdio.h>
int main()
{
int r = 0, x, y;
char op;
if (scanf("%d%d %c", &x, &y, &op) != 3)
return 1;
switch (op)
{
case '+': r = x + y; break;
case '-': r = x - y; break;
case '*': r = x * y; break;
case '/': r = x / y; break;
}
printf("%d\n", r);
return 0;
}
ぶっちゃけ、ここで聞いて要らん薮蛇出した奴には一緒っていっててもいいだろ。
誰と戦ってるんだお前。
90 :
デフォルトの名無しさん :2008/12/17(水) 01:51:40
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 「果物名 単価 個数」の形式の取引のデータのファイルを読み込む。ファイルを読み込み終わった後に、「取引の総数」、 「合計の金額」、「金額が最大であった取引の(整数計算でする)」、「1取引あたりの平均金額(整数計算でする)」、 「金額の最大であった取引(最初を1とする)の番号」と「その金額」をprintfを用いて標準出力に表示するプログラムを作れ。 入力データファイルには /home/sample/PE1/2008/e12.txt を用いる。(ファイル名はfopenの因数に文字列定数として書いてよい) ファイルの全データを格納できるような大きな配列を用いてはいけない。(平均は、金額の合計と取引の総数から計算できる) 個数と金額は、ゼロまたは府の値にならないとする。また、取引金額の最大値が複数の取引に現れることはないものとする。 出力の形式は次の実行結果の例を参考にせよ。 取り引数10 合計金額6424円 合計個数57個 平均112円/個 642円/取引 最大の取引は6番目で2064円 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年12月18日20時まで [5] その他の制限:制限なし よろしくお願いします。
これをc++のiostreamを使ったものに書き換えてください #include <stdio.h> int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10}; void k(){if(m[p]==0) for(i=0;i<8;i++){ for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++; if(c&&m[v]==t){a+=c;v=p; if(d)do m[v]=t,v+=r[i]; while(m[v]!=t); }}} char*h="・○●\n"; int main(){for(i=1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0){for(p=9;p<82;++p)k(),printf("%.2s",&h[m[p]*2]); if(a)for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d",&p,&i),p+=i*9):++p; else if(s)s=0,printf("pass"); else break;t=3-t; } return 0; }
>>76 strncpy と同じ仕様でよければこうかな
#include <stdio.h>
char *my_strncpy(char *s1, char *s2, int n){
int i;
for(i = 0; *s2 != '\0' && i < n; i++)
s1[i] = *s2++;
while(i < n)
s1[i++] = '\0';
return s1;
}
int main()
{
char *p, s1[257] = "zzzzzzzzzzzzzzz";
p = my_strncpy(s1, "sample", 7);
printf("p: %s s1: %s \n", p, s1);
return 0;
}
94 :
デフォルトの名無しさん :2008/12/17(水) 02:15:25
>>93 はい、分かりやすいように改行してみて、色々いじくってみたんですがエラーになってしまってお手上げで…
>>91 #include <stdio.h> ⇒ #include <iostream>
printf("%.2s", &h[m[p]*2]); ⇒ cout << h[m[p]*2];
scanf("%d %d", &p, &i) ⇒ cin >> p >> i
余計なことだが、カンマで 1つの文に複数の式書くのってなんかきもいな
改行しただけで諦めただろwwwwww
97 :
>>83 前半 :2008/12/17(水) 02:18:18
#include <stdio.h> #include <stdlib.h> #define MAX 4 int main(void) { FILE*fp; char fname[80]; int step, a, b, c, d; int f1[MAX], f2[MAX], f3[MAX], f4[MAX]; double max1, max2, max3, max4; double min1, min2, min3, min4; printf("入力ファイル名:"); gets(fname); fp=fopen(fname,"r"); if(fp==NULL){ printf("%sをオープンできません\n",fname); exit(1); }
98 :
>>83 中半1 :2008/12/17(水) 02:20:41
while(fscanf(fp,"%d%d%d%d%d%", &step, &a, &b, &c, &d)!=EOF){ max1=f1[0]; /*データの最大値*/ for(i=1;i<MAX;i++){ if(f1[i]>max1) max1=f1[i]; } max2=f2[0]; for(i=1;i<MAX;i++){ if(f2[i]>max2) max2=f2[i]; } max3=f3[0]; for(i=1;i<MAX;i++){ if(f3[i]>max3) max3=f3[i]; } max4=f4[0]; for(i=1;i<MAX;i++){ if(f4[i]>max4) max4=f4[i]; }
FILE*fp; char fname[80]; int step, a, b, c, d; int f1[MAX], f2[MAX], f3[MAX], f4[MAX]; double max1, max2, max3, max4; double min1, min2, min3, min4; printf("入力ファイル名:"); gets(fname); fp=fopen(fname,"r"); if(fp==NULL){ printf("%sをオープンできません\n",fname); exit(1); }
max1=f1[0]; /*データの最大値*/ for(i=1;i<MAX;i++){ if(f1[i]>max1) max1=f1[i]; } max3=f3[0]; for(i=1;i<MAX;i++){ if(f3[i]>max3) max3=f3[i]; } max2=f2[0]; for(i=1;i<MAX;i++){ if(f2[i]>max2) max2=f2[i]; } max4=f4[0];
おお、俺大人気。延々01の話されたよ! もっとハードウェアに落ちた話かと思って、閾を超える超えないで判断していて、それを便宜上01に してるだけ、といいたかった。 物理的な話だと思いこんでたからピットのtypoかと思ったりもしたのに。 デジタルデータは0と1なんだよ!とかここで講釈しても何になるというのかね。
103 :
>>83 中半2 :2008/12/17(水) 02:25:14
min1=f1[0]; /*データの最小値*/ for(i=1;i<MAX;i++){ if(f1[i]<min1) min1=f1[i]; } min2=f2[0]; for(i=1;i<MAX;i++){ if(f2[i]<min2) min2=f2[i]; } min3=f3[0]; for(i=1;i<MAX;i++){ if(f3[i]<min3) min3=f3[i]; } min4=f4[0]; for(i=1;i<MAX;i++){ if(f4[i]<min4) min4=f4[i]; }
104 :
>>83 last :2008/12/17(水) 02:26:39
for(i=0;i<MAX;i++) /*離散データ算出*/ f1[i]=(f1[i]-min1)/(max1-min1); for(i=0;i<MAX;i++) f2[i]=(f2[i]-min2)/(max2-min2); for(i=0;i<MAX;i++) f3[i]=(f3[i]-min3)/(max3-min3); for(i=0;i<MAX;i++) f4[i]=(f4[i]-min4)/(max4-min4); printf("%d %d %d %d %d ",step,f1[i],f2[i],f3[i],f4[i]); } fclose(fp); return(0); }
>>101 いや、普通に比喩としても、仕組みの説明でも0と1の話は出るよ。
有るか無いか?あるいは符号化の話では矩形はなども用いられて。
まぁ、デジタル機器の仕組みを知る上では、重要な知識だよ。
ただ、本当に0と1という文字の形や、画像にしてもアナログ方式みたいな 形式ではなく、あくまでも 信号 や 符号 ということで用いられる。
何を0として、何を1とするか、そこから考えないとだめじゃない?という ハードよりの視点になってしまってたです。ごめんなさい。
108 :
デフォルトの名無しさん :2008/12/17(水) 02:37:48
1を3で割れば仕組みが分かる。
>>102 for (k=1; k<=512; k++) {
int idx=-1;
/* ransu配列に一致するデータがあるか探す */
for (l=0; l<=15; l++){
if (k == ransu[l]) {
idx = l;
break;
}
}
if (idx != -1)
{
/* 見つかってたならransu1の値で振り分け */
switch (ransu1[l]) {
case 0:
for (b=0; b<=14; b++) {
fprintf(fpw1,"%d\n", dt15[b]);
}
break;
case 1:
for (c=0; c<=16; c++) {
fprintf(fpw1,"%d\n", dt17[c]);
}
break;
}
}
/* elseなのかどうかあまり解説見てない */
for (d=0; d<=15; d++) {
fprintf(fpw1,"%d\n", dt16[d]);
}
}
って麻呂みたいに書いてすぐミスに気づくとかorz - if (idx != -1) + if (idx != 16) です。 とりあえずこういう風に分けてみるのはどうでしょうか。
ほんとだめだわ。。
>>110 無しでお願いします。
吊ってくる
>>102 大雑把にこういうことがしたいのか?と思た
void fukumarete_ita_tokino_shori(int k) {
if (ransu1[k] == 0)
printf("dt15を書き込む処理\n");
else
printf("dt17を書き込む処理\n");
}
void fukumarete_inai_tokino_shori(void) {
printf("dt16を書き込む処理\n");
}
// 含まれたら1、無いなら 0
int ransu_ni_fukumareru_ka_douka(int k) {
int i;
for (i=0; i<16; i++)
if (ransu[i] == k)
return 1;
return 0;
}
//メイン処理〜
for (k=1; k<=512; k++)
{
if (ransu_ni_fukumareru_ka_douka(k))
fukumarete_ita_tokino_shori(k);
else
fukumarete_inai_tokino_shori();
}
for (k=1; k<=512; k++) { for (l=0; l<=15; l++){ if (k == ransu[l]) { switch (ransu1[l]) { case 0: for (b=0; b<=14; b++) { fprintf(fpw1,"%d\n", dt15[b]); } break; case 1: for (c=0; c<=16; c++) { fprintf(fpw1,"%d\n", dt17[c]); } break; } break; } } if(l==16){ for (d=0; d<=15; d++) { fprintf(fpw1,"%d\n", dt16[d]); } } }
114 :
デフォルトの名無しさん :2008/12/17(水) 06:35:56
[1]授業単元:C言語 [2]問題文: 文字列をバイナリファイルに書き込み、書き込んだデータをテキストファイルへ書き込め。 [3]環境 [3.1]OS:WindowsXP [3.2]コンパイラ名: visualC++2005 [3.3]言語:C [4]期限:2008年12月19日AM9時00分まで [5]特にありません。
>>80 長いコードは炉だでよろしく
変数の型がでたらめだったり、a, b, c, d に取り込んだ値をいつ使うのか不明だったり
いろいろ突っ込みどころがあるけど、
> (データの値−最小値)/(最大値−最小値)で各値を算出し
これ整数(0, 1)にならないんだけど、何をもって1を出力したいのか書いてください禿
いちおう、何らかの意味の 0, 1 を出力するコードはできている
>>114 UNIX環境だとどちらも違いでないな
#include <stdio.h>
#include <string.h>
int main()
{
char *s = "we will complete your home work!\n";
FILE *fb = fopen("data.bin", "wb"), *ft = fopen("data.txt", "w");
fwrite(s, sizeof(char), strlen(s), fb);
fprintf(ft, "%s", s);
return 0;
}
117 :
デフォルトの名無しさん :2008/12/17(水) 09:33:20
>>117 コンパイルしてないからミスったらごめん
void getAverage(int kokugo[], int sansuu[], int rika[], float result[], int length)
{
int i;
for (i=0; i<length; i++)
result[i] = (float)(kokugo[i] + sansuu[i] + rika[i]) / 3;
}
119 :
デフォルトの名無しさん :2008/12/17(水) 10:43:46
>>119 あとね、
using namespace std;
をincludeの下に書いておこう
もしくは
std::cout
みたいにstd:: をつける
121 :
デフォルトの名無しさん :2008/12/17(水) 11:10:31
>>120 ありがとうございます!
using namespace std;
っての授業で使ってたんでこれを使うと自然に習った事を使ってるように見えるのですごく助かります!
前すれ
>>461 どなたかお願いします(;´д`)
[1] 授業単元:プログラミング応用演習
[2] 問題文:
データベースのソート機能プログラム
・商品のデータ(名前と個数)を各項目で昇順・降順でソートできるようにする。
・まずどのフィールドでソートするか尋ねる文を表示し、
入力されたら、次に表示を降順か昇順か選ばせる文を表示する。
二つが入力されたら全フィールドでのソートを実行する。
・商品の名前はポインタ配列で宣言する。
・ソートにはバブルソートを用いる。
・個数の数値の入れ替えにはswap関数を用いる。
(商品名(ポインタ配列)の入れ替えは外部関数でなくてもよい)
・文字列の比較には標準のstrcmp関数を使う。(昇順はA-Z、降順はZ-A)
<商品名> <個数>
bread 199
rice 74
potate 33
egg 284
meat 131
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C言語
[4] 期限:12月22日(月)
124 :
デフォルトの名無しさん :2008/12/17(水) 12:36:28
[1] 授業単元: [2] 問題文(含コード&リンク): "TOKYO"などの文字列を扱うにはchar型の配列を用いる。 ただし、文字列はNULL文字を含むので、"TOKYO"を配列で 表現するにはchar s[6]; あるいは char[]="TOKYO"; と宣言する。このとき、初期化方法は、 char s[6]="TOKYO"; あるいは char s[]="TOKYO"; であり、また char[6]={'T','O','K','Y','O','\0'}; /* \0はNULL文字*/ としてもよい。 このとき、文字数をカウントするプログラムを関数を用いて どなたか作成しなさい。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc32) [3.3] 言語: (C) [4] 期限: ([2008年12月21日18:00まで] ) [5] その他の制限: (なし) よろしくお願いします。
126 :
デフォルトの名無しさん :2008/12/17(水) 12:46:25
>>124 #include <stdio.h>
int mystrlen(const char *s) {
int c = 0;
while(*s++) c++;
return c;
}
int main(void) {
char s[] = "TOKYO";
printf("%sの文字数は%d\n", s, mystrlen(s));
return 0;
}
[1] 授業単元:
[2] 問題文:
個人データを表す構造体personは、氏名、年齢、身長、体重、BMI(= 体重 / 身長^2)のメンバからなる。
BMIからは肥満度を判別することができる(プログラム中に場合分けしてあるのでそちらを参考)。
以上から、肥満度と標準体重(= 22 * 身長^2)を求めるプログラムを作成せよ。
ただし、(リダイレクト)入力した値とBMIを構造体メンバに格納し、それらメンバの値、肥満度、標準体重を出力すること。
また、BMIおよび標準体重を計算する関数と肥満度を計算する関数を作成して利用すること。
[3] 環境
[3.1] OS:win
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:リダイレクト処理を行ってプログラムを実行する。
頑張ってはみたものの、自分の力ではこれが精一杯でした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8366.txt 改善点など、助言をいただきたいです。
申し訳ないですが2問お願いしたいです。。。 while文を使うということは分かるのですが @ キーボードから文字列を1行(改行するまで)読み込み、文字列を逆向きに出力するプログラムを作成しなさい。 【実行例】 文字列を入力: This is a pen. 逆向き出力 = .nep a si sihT A キーボードから文字列を1行(改行するまで)読み込み、つぎに検索する文字keyを1文字読み込む。 最初に入力した文字列の中に、文字keyと一致する文字が何文字あるかを数えて出力するプログラムを作成しなさい。 ただし、空白や記号などを全てカウントして構わない。 ただし、キーボードから文字を(文字列ではなく)1文字読み込むには、getchar文を使う。 char key; key = getchar(); と記述すれば、キーボードから文字を1文字だけ読み込んで key の中に代入してくれる。 scanf("%c",&key); を使っても構わない。 【実行例】 文字列を入力: This is a pen. 文字key:s 文字sの頻度=2
>>127 助言はちょっとめんどいので、とりあえず動きそうな感じに。
合ってるかは分からないけど
int level(person * p)
{
if (p->bmi < 18.5) return 0;
else if (p->bmi >= 18.5 && p->bmi < 25) return 1;
else if (p->bmi >= 25 && p->bmi < 30) return 2;
else if (p->bmi >= 30 && p->bmi < 35) return 3;
else if (p->bmi >= 35 && p->bmi < 40) return 4;
else return 5;
}
int main()
{
person p[N];
int i;
double NW;
char * hogehoge[] = { "Light", "Normal", "Heavy 1", "Heavy 2", "Heavy 3", "Heavy 4" };
for(i = 0; i < N; i++)
{
fscanf(stdin, "%s %d %lf %lf", p[i].name, &p[i].age, &p[i].height, &p[i].weight);
NW = func(p[i].height, p[i].weight, &p[i]);
printf("%10s %3d歳 %fcm %fkg | 肥満度は「%s」, 標準体重 = %fkg です。\n", p[i].name, p[i].age, p[i].height, p[i].weight, hogehoge[level(&p[i])], NW);
}
return 0;
}
[1] 授業単元:
[2] 問題文:
個人データを表す構造体personは、氏名、年齢、身長、体重、BMI(= 体重 / 身長^2)のメンバからなる。
BMIからは肥満度を判別することができる(プログラム中に場合分けしてあるのでそちらを参考)。
以上から、肥満度と標準体重(= 22 * 身長^2)を求めるプログラムを作成せよ。
ただし、(リダイレクト)入力した値とBMIを構造体メンバに格納し、それらメンバの値、肥満度、標準体重を出力すること。
また、BMIおよび標準体重を計算する関数と肥満度を計算する関数を作成して利用すること。
[3] 環境
[3.1] OS:win
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:リダイレクト処理を行ってプログラムを実行する。
頑張ってはみたものの、自分の力ではこれが精一杯でした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8366.txt 改善点など、助言をいただきたいです。
すみません、
>>130 はスルーして下さい(^^;
>>129 ありがとうございます。どうやら大丈夫そうです。
実は、関数で場合分けして数値を返して・・・というのは考えていたのですが、返り値をどうにか文字列にできないかとググり、真似したものが投稿したものです。
課題は
>>129 で提出しようと思いますが、もし文字列を返す関数で定義できるのであれば、教えていただきたいです。
>>131 char * level(person * p)
{
static char * hogehoge[] = { "Light", "Normal", "Heavy 1", "Heavy 2", "Heavy 3", "Heavy 4" };
if (p->bmi < 18.5) return hogehoge[0];
else if (p->bmi >= 18.5 && p->bmi < 25) return hogehoge[1];
else if (p->bmi >= 25 && p->bmi < 30) return hogehoge[2];
else if (p->bmi >= 30 && p->bmi < 35) return hogehoge[3];
else if (p->bmi >= 35 && p->bmi < 40) return hogehoge[4];
else return hogehoge[5];
}
>>131 もしかしたら見当はずれかもしれませんが、関数内でポインタ配列を定義しても、関数を抜けると消滅してしまうということはないのでしょうか??
>>134 そうなんですか!! (@o@
ちょっとstaticについてググってきます。ありがとうございました。
136 :
デフォルトの名無しさん :2008/12/17(水) 15:47:10
[1] 授業単元: [2] 問題文(含コード&リンク): aのx乗(a>0,a≠1,x∈Z)を求める関数power(a,x)を 作成してくなさい。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc32) [3.3] 言語: (C) [4] 期限: ([2008年12月20日18:00まで] ) [5] その他の制限: (なし)
138 :
デフォルトの名無しさん :2008/12/17(水) 15:51:14
環境 unixだったけ? 言語: C 期限: 今日 12月17日16:30まで^^; 次のプログラムは、階乗計算の関数factを作りsin(x)をテーラー展開した式でsin(30°)をもとめるプログラムです、抜けている所があります。(___)を埋めて完成しなさい 2k-1 5 k-1 x Σ (-1) ーーーーーー k=1 (2k-1)! ※うまく指数が表せませんでした、見にくくて申し訳ないです。 #include<stdio.h> #include<(____)> int (___)(int m); int main(void); int main(void){ double x, s; int k; x =(___*________________)/180.0; s =(__); for( k=__; k <=__ k++){ s__ pow(___,___)*pow(__,_______)/fact(____); } printf("sin=%.7__\n",s); return(0); } int fact(int m) { int s = 1, i; if (m___0) return (__); else for(i=1;i<=m;i++) s (___) i; return (___); }
授業中かよw
140 :
デフォルトの名無しさん :2008/12/17(水) 15:59:25
Unixな奴です。 C言語 1.正整数nを入力し、nまでで4で割り切れる数(4の倍数)の和を出力するfor文を利用したプログラムをつくりなさい 4+8+12+・・・・= ??? 2.1の問題でfor文の変わりにWhile文を利用して作りなさい。 3.ある駐車場の駐車料金は、1時間(60分まで)350円で、以降15分ごとに90円です。 入庫時刻と出庫時刻を入力し、駐車料金を算出すプログラムを作りなさい。 次のプログラムは、階乗計算の関数factを作りsin(x)をテーラー展開した式でsin(30°)をもとめるプログラムです、抜けている所があります。(___)を埋めて完成しなさい です、お願いします。なにもわからず瀕死状態です。テスト中です;;
141 :
デフォルトの名無しさん :2008/12/17(水) 16:05:10
>136 全然わからないんです。 ヒントに A=aのx乗 両辺の対数をとる loge A=xloge a となり A=eのloge a となる log xはlog(x)と書く. と書いてありました。
>>136 #include <stdio.h>
double power(int a, int x)
{
if (x == 0) return 1.0;
if (x < 0) return power(a, x + 1) / a;
if (x > 0) return power(a, x - 1) * a;
}
int main()
{
printf("%g\n", power(2, -3));
return 0;
}
144 :
テスト中 :2008/12/17(水) 16:23:45
すげえ。
そろそろタイムリミットなんじゃないの?テスト。 テスト中に2chリロードしまくってるとか超笑える
提出の余裕をもってる可能性も考慮しろ
148 :
テスト中 :2008/12/17(水) 16:29:05
もう\(^o^)/ オワタ ...
149 :
テスト中 :2008/12/17(水) 16:30:52
ぐは OUT のゴング(チャイム)
>>140 (1)
#include <stdio.h>
#define HOGE 4
int main(void)
{
int n=50;
int num;
int result = 0;
for (num = n / HOGE; num>0; num--)
result += num * HOGE;
printf("n=%d sum=%d\n", n, result);
return 0;
}
無茶しやがって・・・
>>140 (2)
#include <stdio.h>
#define HOGE 4
int main(void)
{
int n=50;
int result = 0;
int num = n / HOGE;
while (num>0)
result += num-- * HOGE;
printf("n=%d sum=%d\n", n, result);
return 0;
}
154 :
デフォルトの名無しさん :2008/12/17(水) 16:57:45
>>128 1.
#include <stdio.h>
int main(void){
char c[100] = "";
int i;
printf("文字列を入力:");
gets(c);
printf("逆向き出力:");
for(i = 99; i >= 0; i--) putchar(c[i]);
putchar('\n');
return 0;
}
155 :
デフォルトの名無しさん :2008/12/17(水) 16:58:42
>>128 2.
include <stdio.h>
int main(void){
char c[100] = "";
char key;
int i, j = 0;
printf("文字列を入力:");
gets(c);
printf("文字key:");
key = getchar();
printf("文字%cの頻度=", key);
for(i = 0; i < 100; i++) if(c[i] == key) j++;
printf("%d\n", j);
return 0;
}
>>140 (3)
#include <stdio.h>
int main(void)
{
int time0, time1, temp;
int result = 350;
printf("入庫");
scanf("%2d:%2d", &time0, &temp);
time0 = time0 * 60 + temp;
printf("出庫");
scanf("%2d:%2d", &time1, &temp);
time1 = time1 * 60 + temp;
if (time0 >= time1)
return 1;
time1 -= (time0 + 60);
if (time1 > 0)
result += 90 * (time1 / 15 + 1);
printf("%d円\n", result);
return 0;
}
157 :
デフォルトの名無しさん :2008/12/17(水) 17:09:50
>>119 です。
>>91 をiostreamを使った型に
>>95 と
>>120 を参考に書き直してみたのですが以下
のようなエラーが出ます。
21行目は「t-2?(cin >> p >>i),p+=i*9:):++p;」なのですが)の前に;を入れた
ら余計に沢山エラー文が出てしまいます。どうかお助けください!
#include <iostream>
using namespace std;
int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};
void k(){if(m[p]==0)
for(i=0;i<8;i++){
for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;
if(c&&m[v]==t){a+=c;v=p;if(d)do m[v]=t,v+=r[i];
while(m[v]!=t);}}}
char*h="・○●\n";int main(){for(i=1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;
for(;;a=d=0){for(p=9;p<82;++p)k(),cout<<h[m[p]*2];
if(a)
for(d=a=s=p=8;a==8;k())
t-2?(cin>>p>>i),p+=i*9):++p;else if(s)s=0,cout<<"pass";
else break;
t=3-t;
}return 0;}
エラー文
In function 'int main()':last.cpp:21: error:expected primary-expression before ')' token
last.cpp:21: error: expected `;'before ')' token
158 :
デフォルトの名無しさん :2008/12/17(水) 17:14:35
あ、改行が多すぎて書き込めなくて改行を消したので21行目ではないですが、該当ヶ所は同じです。 宜しくお願いします!
括弧の数がおかしいじゃん っつーか、やめとけ。
160 :
デフォルトの名無しさん :2008/12/17(水) 17:23:03
そんなペースでやってるようじゃらちがあかんということ。 1年ぐらいかけるつもりなら止めないけど
レイアウトを整えて 変数の意味を理解し次第replaceして 短くするための記述方法を開く。i++*9とか。 理解してないうちにprintfをcoutにしてみました!とか何でそう無謀な方向に進むのかがわからんよ。
163 :
デフォルトの名無しさん :2008/12/17(水) 17:38:54
>>161-162 必修だから仕方なくやってるだけなんで、自分のものにしたいなんて思ってないんです。
どう直せばよろしいんでしょうか…('`)
>>163 >必修だから仕方なくやってるだけなんで、自分のものにしたいなんて思ってないんです。
その心意気が気に入ったのでコンパイル時にエラーが出ないようにしといた。
#include <iostream>
using namespace std;int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};
void k(){if(m[p]==0)for(i=0;i<8;i++){for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;if(
c&&m[v]==t){a+=c;v=p;if(d)do m[v]=t,v+=r[i];while(m[v]!=t);}}}char*h="・○●\n"
;int main(){for(i=1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0
){for(p=9;p<82;++p)k(),cout<<h[m[p]*2];if(a)for(d=a=s=p=8;a==8;k())t-2?(cin>>p
>>i),(p+=i*9):++p;else if(s)s=0,cout<<"pass"; else break;t=3-t;}return 0;}
168 :
前スレ987 :2008/12/17(水) 18:02:50
171 :
デフォルトの名無しさん :2008/12/17(水) 18:06:57
>>164 ありがとうございます!
>>165 このスレの119代目で教えてもらいましたw
そのスレの中身も参考になりました。どうやって動くか分からなかったのでw
あ、
>>162 さんの短くする方法を使って申し訳ないんですがまた書いて欲しいです…学校で習った記述と違う部分があるので…
本当にすいません'`
>>163 なーんだ。じゃあそれが必修であるような学科に入ったのが間違いだよ
>>153 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 128
#define Y 15
#define H 5
int main(void)
{
char buff[N];
int year[Y], height[H];
int i, j;
FILE *fp = fopen("cshukudai.csv", "r");
for (i = 0; i < Y; ++i) year[i] = 0; for (i = 0; i < Y; ++i) height[i] = 0;
while (fgets(buff, N, fp) != NULL) {
strtok(buff, ",");
year[atoi(strtok(NULL, ",")) - 1975]++;
height[(atoi(strtok(NULL, ",")) - 166) / 5]++;
}
puts("生まれた年のヒストグラム");
for (i = 0; i < Y; ++i) {
printf("%4d:", 1975 + i);
for (j = 0; j < year[i]; ++j) putchar('*'); puts("");
}
puts("\n身長のヒストグラム");
for (i = 0; i < H; ++i) {
printf("%3d-%3d:", 166 + 5 * i, 170 + 5 * i);
for (j = 0; j < height[i]; ++j) putchar('*'); puts("");
}
fclose(fp);
return 0;
}
1箇所間違えてた >for (i = 0; i < Y; ++i) year[i] = 0; for (i = 0; i < Y; ++i) height[i] = 0; for (i = 0; i < Y; ++i) year[i] = 0; for (i = 0; i < H; ++i) height[i] = 0;
>>153 です
>>174 さん
すいません、書くのを忘れていましたが
読み込みファイル(cshukudai.csv)の数値を変えると、表示結果も変わるようにするんでしたorz
例えば、生まれた年の最低値は1975年ですが
cshukudai.csvの誰か一人の生まれた年を1970年に変更すると
ヒストグラムは、1970:* 1971: 1972:... と表示されるようにしたいんです。
分かりにくくてすいません。。。
178 :
168 :2008/12/17(水) 18:47:24
期限は18日3時の間違えです すいません
179 :
デフォルトの名無しさん :2008/12/17(水) 19:19:41
なんで7行オセロを宿題に出すの?自由課題なの?
>>179 なんでそんな、個人的などうでも良い質問をして
宿題に答えるのとは直接関係の無いレスしてんの?
馬鹿なの?野次馬なの?
182 :
前スレ866 :2008/12/17(水) 19:54:31
[2] 問題文(含コード&リンク) 1.数式を入力する(例:x^2y^3 + 2x^2z^3 - y^5) 2.並び替える(優先順位:乗数が大きいものが先、乗数が同じ場合は係数が大きいものを優先する) [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] 言語:C [4] 期限: 2008年12月17日 数式を読み込んで式を個別に別けるとこまでは出来たんですが、(x^2y^3, +2x^2z^3, -y^5) この別けた式から係数と乗数をどのようにして摘出するかアドバイスもらえませんか?
7行オセロとか変態的だからコピってもバレること請け合いなのに。
前スレの931の方 どうもありがとうございます。
187 :
デフォルトの名無しさん :2008/12/17(水) 20:18:27
>>181 じゃあお前が7行オセロの宿題に答えてやれよwww
188 :
デフォルトの名無しさん :2008/12/17(水) 20:23:41
>>182 係数、xの乗数、yの乗数をひとまとめにしてスタックに入れてやればいいんじゃね?
xの2乗と1乗が同時に出ることがないのならば。
>>181 はコンパイルできなくてイライラがたまってきた質問者
>>187 > じゃあお前が
ここは個人を指定、名指しして答えてもらうスレでもないんだが、
マジでスレタイと
>>1 が読めるようになってから、社会に出ろよ、ガキ
[1] 授業単元: 暇潰し [2] 問題文: 9桁までの素数で、 右から一桁ずつ桁数を減らしていった数が全て素数であるもの を昇順に全て出力する (1行に1つずつ)。 最後に、1行空けて総数を出力すること。 出力先は、標準出力のこと。 例) 233 => 23x => 2xx 23 や 2 も上記条件を満たす素数である。 また、 「左」から一桁ずつ桁数を減らしていった数が全て素数であるもの も同様に求めよ。 例) 223 => x23 => xx3 [3] 環境 OS,コンパイラは、特に指定しない。 言語は、 C/C++ のどちらでも。 [4] 期限: 12/25 [5] その他の制限: プログラムの実行時間は、2秒以下とする。
192 :
182 :2008/12/17(水) 20:37:29
>>188 どうしたらいいですかね?
^の後の数字にしたら乗数が2桁以上のときに対応できないし…
文字列から数字だけを抽出する方法とかないですか?
>>192 strto?()たとえば、strtol()で調べてみるといいよ。
>>192 ^の後ろに続く数字は全部乗数(っていうんだっけ?)として扱えばいいんじゃない?
195 :
デフォルトの名無しさん :2008/12/17(水) 20:41:23
>>192 いや乗数が2桁のときはスタックの考え方でいけるだろ
例えば1つ目の数値があったとして2つ目の数値が来たら
1つ目の数値×10+2つ目の数値を記憶するとか。
197 :
デフォルトの名無しさん :2008/12/17(水) 20:49:12
>>197 !?
うわ、見てませんでした。すいません。
ありがとうございます。
200 :
デフォルトの名無しさん :2008/12/17(水) 21:15:44
202 :
201 :2008/12/17(水) 21:19:29
83に訂正!
204 :
デフォルトの名無しさん :2008/12/17(水) 21:24:31
>>204 いちいち文字配列に書き込むのは良いのかよ?
どちらにしろ、一時的に記憶領域を確保して記録している点は同じだろ。
意見するにしても、考えが浅はか過ぎるんだよ、未熟者ってのは。
自分がそうしないこと=ありえない、間違っているという考えは、
多様化する社会では通用しない、孤立する考え、思想。
まぁ、この世は不平等でも、C言語のライブラリは開発環境さえあれば、 誰でも同じものを共通して利用することが出来る。 しかし、経済力や技術力の差で、一般ピーポー君は いくら高性能なエンジンを積んでも、混雑する路上を移動。 一方、金持ち、ヘリの免許とヘリを所有している大企業の社長は 昼食のために、ヘリで移動。費用は雲泥の差だがなw そういうこと。
独走過ぎて他人に読めないソース書かれても困ったもんだがなw 個人的にはあのクソースはGJだとは思うがwww
208 :
191 :2008/12/17(水) 21:36:53
>>202 83 で正解です。
因みに、最後(83番目)の素数は、73939133。
209 :
デフォルトの名無しさん :2008/12/17(水) 21:39:46
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 「果物名 単価 個数」の形式の取引のデータのファイルを読み込む。ファイルを読み込み終わった後に、「取引の総数」、 「合計の金額」、「金額が最大であった取引の(整数計算でする)」、「1取引あたりの平均金額(整数計算でする)」、 「金額の最大であった取引(最初を1とする)の番号」と「その金額」をprintfを用いて標準出力に表示するプログラムを作れ。 入力データファイルには /home/sample/PE1/2008/e12.txt を用いる。(ファイル名はfopenの因数に文字列定数として書いてよい) ファイルの全データを格納できるような大きな配列を用いてはいけない。(平均は、金額の合計と取引の総数から計算できる) 個数と金額は、ゼロまたは府の値にならないとする。また、取引金額の最大値が複数の取引に現れることはないものとする。 出力の形式は次の実行結果の例。 取り引数10 合計金額6424円 合計個数57個 平均112円/個 642円/取引 最大の取引は6番目で2064円 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年12月17日23時59分 [5] その他の制限:制限なし
使えるものは使え。テンポラリーファイルだって、普通に使われているんだが? 技術力にしても、知識にしても、ここの連中はレベルが低すぎるんだよ。
211 :
デフォルトの名無しさん :2008/12/17(水) 21:54:03
>>209 ちょーてきとー
#include<stdio.h>
int main(){
int max_i=0,max_total=0;
int i,num,cost;
int sum = 0;
int total_num = 0;
if(!freopen("/home/sample/PE1/2008/e12.txt","r",stdin)){
perror("/home/sample/PE1/2008/e12.txt");
return;
}
for(i=0;scanf("%*s%d%d",&num,&cost)!=EOF;++i){
int total = num*cost;
if(total > max_total){
max_total = total;
max_i = i;
}
sum += total;
total_num += num;
}
printf("取り引数%d\n",i);
printf("合計金額%d円 合計個数%d個\n",sum,total_num);
if(i)printf("平均%d円/個 %d円/取引\n",sum/total_num,sum/i);
printf("最大の取引は%d番目で%d円",max_i+1,max_total);
}
[1] 授業単元: 科学実習T [2] 問題文: 以下の配列を小さい順にならべ変えるプログラムを作れ。 int numbers{10} = {82,47,2,29,95,15,38,66,51.72} [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン:gcc -o [3.3] 言語: C言語 [4] 期限: 2008年12月31日23時59分 [5] その他の制限:特になし、お願いします。
>>214 ほい
#include <stdlib.h>
int compare(const int *a, const int *b)
{
return *a - *b;
}
main()
{
int numbers{10} = {82,47,2,29,95,15,38,66,51.72} ;
int i;
qsort(numbers, sizeof(numbers) / sizeof(int), sizeof(int), (int (*)(const void*, const void*))compare);
for (i = 0; i < 10; i++) {
printf("%d", data[i]);
}
printf("\n");
}
>>191 > プログラムの実行時間は、2秒以下とする。
CPUの性能で差が出るのに?
>>191 2166個目の数は999962683で合ってる?
2166個だとprint文で結構掛かりそう
219 :
217 :2008/12/17(水) 22:55:47
それまで求めた素数を使ってもおkなんでしょ? 右にずらす、つまり10で割っていった値がそれ以前に求めた素数に 該当すればおk。
なにいってんだ?
222 :
217 :2008/12/17(水) 23:00:26
>>221 だから理解力のない、日本語力もない馬鹿はレスするなつってんだよ、基地外
224 :
217 :2008/12/17(水) 23:01:23
ん、右にずらす前の素数判定で時間食うか
>>221 それまで求めた値を使えば、わざわざ右にずらした値が
素数か、また求めなおす必要もないんだが?池沼は黙ってろよ。
>>224 エラトステネスの篩を使うのもありじゃね?ただ、いくら速度を求めても
最終的にはCPUの性能に左右される。
単純にふるいがけすると10億要素必要だからキツイ。 2 3の倍数を除いたとしても3億なのでキツイ。 9桁までの素数を配列に詰めて2分探索するのがいいと思う
[1] 授業単元: ネットワークプログラミング演習
[2] 問題文:
HTTP1.1プロトコルを満たすサーバとクライアントを作れ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8377.zip までは出来たんですが、
サーバが、fgetsしてクライアントの要求のGET /index.htmlを確認したら、残りの要求を無視するようにすると、ときどきパイプ破壊と表示されてプログラムが停止します。
これってどういう原因で起きてるんでしょう?(sarver.cの70行目前後です)
後、のこった要求を
while(fgets (str, STR_SIZE, ns_read));
で読もうとするとfgetsのところから進まなくなります。
これもなぜなんでしょう?
[3] 環境 Linux gcc
[4] 期限: 明日の昼頃まで
[5] その他の制限: とくになし
みにくいソースですけどよろしくお願いします。
他にも改善点などあれば教えていただきたいです。
処理の中で求めてその一覧をキャッシュして使うのは何も問題ないっしょ 9桁だからintにおさまるし、悪くはないと思う。
>>225 右にずらすって考え方がそもそもおかしい。
元の素数に数値を足してそれが素数か判定してくのが早い。
>>231 問題文がそうなんだが?いちいち五月蝿いなぁ、あんたは。
いやいや、
>>231 じゃないが、そういう順で判定を行えとは書かれてないよ。
そういう形の数であるかどうかだけなので、組み立てた結果そういう数字になっているというのもありだと思う。
が、そっちの方が速いかどうかは俺には分からん。
>>219 実行速度確認したかったけどコンパイルできなかった…
Borland C++なんですけど
long longをintにすれば?
それまで求めた素数を10倍して、10未満の素数を足してそれが素数か? それを繰り返せばおkってか?
10未満の素数ではなく、1 3 7 9 について吟味すればいいんじゃないかな。
240 :
デフォルトの名無しさん :2008/12/17(水) 23:37:47
242 :
191 :2008/12/17(水) 23:48:08
レス遅くなりました ごめんなさい
>>213 ,217,218
ですね。
最後の素数は、 999962683 です。
桁制限を外せば、
全部で 4260 個で
最後の素数は、357686312646216567629137 (24桁)だそうです。
どちらも有限集合なんですね。
にしても、回答が速いですね。
すごい。
>>216 32ビット CPU 動作周波数1GHz 以上を想定してました。
>>233 さんの言う通り、
求め方を指定したつもりは無かったです。
>>219 一桁の素数はハードコーディングでもよかった・・・スミマセン
999962683 > 99996268 < ん?
9999626 < んん? 999962 < んんん? 99996 < んんんん? 9999 < んんんんん? 999 < んんんんんん? 99 < んんんんんんん? 9 < えっ!?
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 数学と英語の成績の2つのファイルを読んで処理する。 数学の成績ファイル math.txt の各行は「学生番号」「名前」「数学の得点」のデータがあり 英語の成績ファイル english.txt は「学生番号」「名前」「英語の得点」のデータがある。 2つのファイルの行数は同じ。原則的に学生も同じ順序だが、いくつかは間違っている。 2つのファイルを読み込み、両ファイルで学生番号が一致する学生は「2科目得点の和が140点以上」 かを判定し、そうなら「学生番号」「名前」「数学の得点」「英語の得点」「合計得点」を、 不一致ならば「<番号>と<番号>で一致せず」を1行でreport.txtという名のファイルに出力。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年12月18日12時00分
>>242 へええ、有限なんだねぇ。
そりゃそうか、と納得する一方で、なんか残念な気持ちも。
麻呂の会社は有限でおじゃるが、残念でもないでおじゃるよ。
249 :
デフォルトの名無しさん :2008/12/18(木) 00:26:52
250 :
デフォルトの名無しさん :2008/12/18(木) 01:20:48
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):下のレス [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年12月24日 13:00 [5] その他の制限: ヒントを使って作るらしいです。よろしくお願いします。
252 :
251 :2008/12/18(木) 02:10:48
[2]問題文 下記プログラムは 文字列Tokyo を逆順に表示するプログラムである. #include<stdio.h> main() { static char string[ ]=“Tokyo”; char *cp; cp = string + 6; while(--cp >= string) putchar(*cp); putchar(‘\n’); } 実行結果 oykoT 上記プログラムを関数recpy()を作成して書き直しなさい.main関数をヒントに示す.データのやり取りにはポインタを用いること
253 :
251 :2008/12/18(木) 02:11:20
関数作成のヒント *ptr1 *ptr2 tempc の3つの変数を宣言して使用する. 逆に表示させるためには,文字の入れ替えをしなくてはならない.ソートプログラムを思い出す. char *recpy(ptr) char *ptr; { char *ptr1, *ptr2, tempc; ptr1 = ptr2 = ■■■ ここは考える ■■■; while(■■■ ここは考える ■■■){ ■■■ ここは考える ■■■ } --ptr2; while(■■■ ここは考える ■■■) { 文字列の入れ替え }
スレ違いで申し訳ありませんが、
>>191 の答えのソースはありますか?
自分でも作ってみましたが、83個でしたが、昇順に並べるところまでは出来なかったものでして。
どうスレ違いか分からないが、
>>191 が満足してるということはどこかにうまく動作するコードがあるだろう。
そのコードを入手、提出することで
>>254 >>191 のいずれかまたは両方の評価が下がるだろう。
>>255 > どうスレ違いか
宿題じゃないから。ある人が出した、突発的な課題だから。
授業単元が暇つぶしだw
>>255 > のいずれかまたは両方の評価が下がるだろう。
なんで評価が下がるか、こっちの方が分からんわ・・・
同じコードが複数提出されたらそりゃ減点だろ
>>191 なんか乗り遅れて悔しいぜ。 昇順にしてない分だけ
>>219 より早いかもしれない
#include<stdio.h>
#include<time.h>
int isprime(int value){
int i;
if(value<=1) return 0;
if(value%2==0) return value==2;
for(i=3;i*i<=value;i+=2) if(value%i==0) return 0;
return 1;
}
void foo(int value, int digit, int maximum){
int i, next_value;
if(isprime(value)){
printf("%d\n", value);
if(value>=maximum/10) return;
next_value=value, digit*=10; // こっちが左から消しても素数
// next_value=value*10, digit=1; // こっちが右から消しても素数
for(i=1;i<=9;i++){
next_value+=digit;
if(next_value>maximum) return;
foo(next_value, digit, maximum);
}
}
}
int main(void){
int i;
clock_t s;
s=clock();
for(i=1;i<=9;i++) foo(i, 1, 1000000000);
printf("%.3f[sec]\n", (double)(clock()-s)/CLOCKS_PER_SEC);
return 0;
}
>>260 右からのは83個と少ないから速いね。自分のも
>>260 のも、自分の環境では
0 〜 15ms で終了してるから、ほぼ処理時間は同じかな。自分も並び替えてはいないけど。
>>226 エラトステネスの篩でやってみた
10^9 以下の素数をすべて求める段階だけで 60 秒かかる (PentiumM 1.7GHz)
素数テーブルが完成した後から時間を計ると早い(0.10秒)けどねw
>>262 すまん、思いつきで言ったが、明らかに効率が悪いとすぐに分かったw
264 :
250 :2008/12/18(木) 04:04:06
>>209 =
>>90 てんめぇ、せっかく人が作ってやってんのに、同じ宿題書き込んでんじゃねーよ。
10個程度しかレス見られないのかよ、カス。
同じ学校の別の生徒だろ
>>268 #include<stdio.h>
int main(void)
{
unsigned int x=0x10fa; /*演算対象の初期化*/
unsigned int y=0x000F;
printf("%X AND %04X : %04X\n",x,y,x&y);
printf("%X OR %04X : %04X\n",x,y,x|y);
printf("%X XOR %04X : %04X\n",x,y,x^y);
printf("%X >> 2 : %04X\n",x,x
>>2 );
printf("%X << 2 : %04X\n",x,x<<2);
return 0;
}
スイマセン、どなたか
>>239 の方を解いてもらえないでしょうか?
>>239 (あまり検証してない)
#include <stdio.h>
#define NINZU 3
#define KAMOKU 4
int main()
{
int ten[NINZU][KAMOKU]={ /*国語、算数、理科、社会の順に格納*/
{69,62,68,72}, /*伊藤くんの成績*/
{28,100,88,48}, /*田中さんの成績*/
{60,48,65,76}}; /*林くんの成績*/
int total = 0; /*合計点数*/
int i, j, all60over;
for (i=0; i<NINZU; i++) {
total = 0;
all60over = 1;
for (j=0; j<KAMOKU; j++) {
total += ten[i][j];
if (ten[i][j] < 60) all60over = 0;
}
if (total >= 260 || all60over) {
printf("OK\n");
} else {
printf("NG\n");
}
}
return 0;
}
>>268 っつか、演算子を使わずに実装しろってオチは無かろうな?
273 :
268 :2008/12/18(木) 07:15:39
>>240 それくらい短い問題文なら、upローダ使わなくて、直接書いても大丈夫だと思う。
#include <stdio.h>
int getTeenagerCount(int *age){
return *age<0?0:(*age/10==1)+getTeenagerCount(age+1);
}
int main(){
int age[] = {18,29,10,19,22,9,20,-1};
printf("The number of teenager:%d\n",getTeenagerCount(age));
}
276 :
250 :2008/12/18(木) 10:59:58
8391zip 住所録 と書いてあるものです
>>245 のものですが
リミットが迫ってるので出来るだけ早くお願いします。
278 :
250 :2008/12/18(木) 12:25:46
リミット過ぎてしまいましたが もしよろしければ引き続きお願いたします<(_ _)>
「2科目得点の和が140点以上」かを判定したらどうするの? 入力はどんな形式のファイルになっているの? 入力は正しい形式になっていると仮定してもよいの?
281 :
166 :2008/12/18(木) 12:44:27
>>167 習ってない関数が多いので、だめだと言われました・・・
すみませんが、もう一度お願いします。
283 :
デフォルトの名無しさん :2008/12/18(木) 13:20:40
>>245 ファイル形式はcsvでよろしいでしょうか?
カマかけられたんじゃないの?
前スレ972のどこに習ってない関数が・・・
>>278 そもそも課題の内容が分からないし、
そのコンパイルも通らないファイルをどうしたいのかさえ
288 :
281 :2008/12/18(木) 14:23:38
>>284 >>286 const、boolなどです。
というより、例あるのだから、それにあてはめてやれと言われました。
>>290 はじめのは
GET /
が見つからなかったときに無限ループしてるんじゃないかと思った。
後のは、無限に読み込もうと待ってる気がする。
UNIXプログラムはうろ覚えだから的外れだったらごめんw
>>290 >後、のこった要求を
何が残る予定なんだ?
>>292 client側から以下(client.cの76,77行目)でGET /%s HTTP/1.1\r\nHOST: %s\r\n\r\nを送信します
size = sprintf (str, "GET /%s HTTP/1.1\r\nHOST: %s\r\n\r\n", url.path, url.host);
write (s, str, size+1);
server側はこれを受け取って処理するんですが
パスだけ取得できればいいんで、はじめは、fgets (str, STR_SIZE, ns_read);でGET /%s HTTP/1.1だけ読み込んで
そこからパスを取得してそれ以降の処理をしてました
でも、どうやらclient側から送信された文字列を全部受け取らずにそれ以降の処理に進むとパイプ破壊のエラーが出ることが分かったんで、
while(fgets (str, STR_SIZE, ns_read));でclient側から送信された文字列を全て(残りの”HOST: %s\r\n\r\n”の部分)取得しようとしたら、このwhile分の2回目のループのfgetsの部分で
止まってそれ以降プログラムが動かないみたいなんです
とりあえず、while(fgets (str, STR_SIZE, ns_read));をfgets (str, STR_SIZE, ns_read);に書き換えればパイプ破壊も起きず問題なく動くんですが、
ネット上のechoサーバサンプルコード見てても、特に何が原因でこうなってるのかよく分からなかったので質問させてもらいました
>>291 一応それ以降まで進んでることは確認してます
”HOST: %s\r\n”も読み込んで次に実行されたfgetsで止まってる見たいです
>>293 >止まってそれ以降プログラムが動かないみたいなんです
client側が次に何か送って来るのを待っているんだから
295 :
182 :2008/12/18(木) 16:01:54
int i=0,j=0,//イテレータ jousu[10],//乗数を格納 TEMP;//ソート用 char bunkatsu[10][NAGASA] = {},//別けた式を格納 TEMP_MOJI[10][NAGASA] = {}; for(i=0;i<tate-1;i++){ for (j=tate-1;j>i;j--){ if (jousu[j-1] < jousu[j]) {//前の要素のほうが大きいなら //乗数配列の交換 TEMP = jousu[j]; jousu[j] = jousu[j-1]; jousu[j-1]= TEMP; //分割式配列の交換 TEMP_MOJI[j] = bunkatsu[j]; bunkatsu[j] = bunkatsu[j-1]; bunkatsu[j-1] = TEMP_MOJI[j]; } } } これでソートしようと思ってるんだけど、分割式配列の交換で代入できない型ってエラーが出ます。 char型で統一してるのに駄目なの?
296 :
デフォルトの名無しさん :2008/12/18(木) 16:05:17
>>295 プログラム全体を貼り付けてよ
できればうpろだに
>>293 >>291 だけど、言いたかったのは
>>293 がうまく言ってくれたw
ns_readから読み込むと、普通のファイルと違ってパイプから読みこむから、読み込みたいときにパイプが空っぽだと、誰からパイプに入れてくれるのをずっと待ってるんだよ。
298 :
デフォルトの名無しさん :2008/12/18(木) 16:38:48
[1] 授業単元: [2] 問題文(含コード&リンク): 「エラトステネスのふるい」は素数を求めるアルゴリズムです。 このアルゴリズムを用いて、100までの素数をすべて表示する プログラムを作成してみよう。 (ヒント) 101個の配列aを用意して、添字2〜100を数として扱います。 数2がふるいに入っている状態はa[2]=1、ふるいから取り 除かれた場合はa[2]=0となるようにします。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc32) [3.3] 言語: (C) [4] 期限: ([2008年12月20日18:00まで] ) [5] その他の制限: (なし)
299 :
デフォルトの名無しさん :2008/12/18(木) 16:50:55
[1] 授業単元: [2] 問題文(含コード&リンク): year年 month月のカレンダーを表示するプログラムを作成してみよう。 ヒント 次の関数を作ってカレンダーを作成してみよう。 int leap(int year) 閏年の判定 int days(int year,int month) year年(month-1)月終了時までの日数のずれ void cal_print(int year,int month) year年month月の表示 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc32) [3.3] 言語: (C) [4] 期限: ([2008年12月20日18:00まで] ) [5] その他の制限: (なし)
>>298 #include <stdio.h>
int main(void)
{
int i, j;
int a[101];
for(i=2; i<101; i++)
a[i] = 1;
for(i=2; i<=10; i++){
for(j=i+1; j<101; j++){
if(j%i == 0){
a[j] = 0;
}
}
}
for(i=2; i<101; i++){
if(a[i]){
printf("%d\n", i);
}
}
return 0;
}
302 :
301 :2008/12/18(木) 17:19:13
間違えた for(i=2; i<=10; i++){ if(a[i]){ for(j=i+1; j<101; j++){ if(j%i == 0){ a[j] = 0; } } } }
>>301 ちょっとふいたw 答えは合っているが、ちょっと違う。
304 :
デフォルトの名無しさん :2008/12/18(木) 17:20:27
>>229 クライアントの write (1, str, size+1);も変だな。サイズ大きすぎるだろ。
>>298 #include <stdio.h>
#define MAX 101
int main(void) {
int i,j,k;
int a[MAX]={0,0,1};
for(i=3; i<101; i++) a[i] = 1;
for(i=2; i<=10; i++) {
if(a[i]==1) for(k=i,j=i*2; j<101; j+=k) a[j] = 0;
}
for(i=2; i<101; i++)
if(a[i]) printf("%d ", i);
return 0;
}
>>298 #include <stdio.h>
#define MAX 101
int main(void) {
int a[MAX]={0,0,1},i,j,k;
for(i=3; i<MAX; i++) a[i] = 1;
for(i=2; i*i<=MAX; i++) { if(a[i]==1) for(k=i,j=i*2; j<101; j+=k) a[j] = 0; }
for(i=2; i<MAX; i++) if(a[i]) printf("%d ", i);
return 0;
}
struct Point { int x; int y; }p; int length_vector(struct Point p) { int a,b,c,d; a=pow(p.x , 2 ); b=pow(p.y , 2 ); c = a + b; d =sqrt(c); return d ; } int main(void) { struct Point p; printf("Input Point X: "); scanf("%lf", &p.x); printf("Input Point Y: "); scanf("%lf", &p.y); print_v(p); /* print_vを使用して,座標の表示 */ printf("The length of vector: %f\n", length_vector(p) ); return 0; } なぜ動かん!
print_v()を定義していないし、整数型じゃなくて浮動小数点型を使うべき
310 :
デフォルトの名無しさん :2008/12/18(木) 18:03:36
313 :
デフォルトの名無しさん :2008/12/18(木) 19:33:38
>>245 の者ですが
>>280 で少し間違いがあったみたいなのでもう一度お願いします。
途中まで、あってるか確証はありませんが、自分でやったのでこの続きをお願いします。
#include<stdio.h>
int main(void)
{
FILE *fp1,*fp2, *fp3;
int num, math, eng, total;
char name[20];
fp1=fopen("/home/sample/PE1/2008/e12math.txt","r");
if(fp1==NULL){
printf("open error\n");exit(1);
}
fp2=fopen("/home/sample/PE1/2008/e12eng.txt","w");
if(fp2==NULL){
printf("open error\n");exit(1);
}
fp3=fopen("report.txt.","x");
while(fscanf(pf1,"%d %s %d",&num,name,&math)!=EOF){
315 :
デフォルトの名無しさん :2008/12/18(木) 19:51:22
やり方も、できれば
>>313 のような漢字でお願いします
>漢字 感じ
何で英語が"w"ww
>>316 どこら辺が
>>313 っぽくなればいいのかが読み取れないなぁ。
別に
>>280 と大差あるように見えない。
変数名をtypoしたりcloseをOS任せにする辺りが特徴?
[1] 授業単元: 科学実習T [2] 問題文: 16進数を入力するプログラムを作れ。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン:gcc -o [3.3] 言語: C言語 [4] 期限: 2008年12月31日23時59分 [5] その他の制限:scanfは使用禁止。よろしくお願いします。
>>320 #include <stdio.h>
#include <stdlib.h>
int main()
{
char s[1000];
int x;
fgets(s, 1000, stdin);
x = strtol(s, NULL, 16);
return 0;
}
>>320 #include <stdio.h>
int main()
{
char str[256];
unsigned int n;
fgets(str, 256, stdin);
sscanf(str, "%x", &n);
return 0;
}
>>313 =315であると仮定して
検証に使った math.txt と eng.txt
そして実際にはどういう結果(出力)が欲しかったのか
それを示さないと何とも言えない。
math.txtに10人、eng.txtに11人あると最後の人が検出できなさそうにも見える
325 :
280 :2008/12/18(木) 21:32:49
今気づいたが29行目くらいに else を漬け忘れているような気がする
>>324 問題文に > 2つのファイルの行数は同じ とあるので。
C言語にて、数列(12,43,17,23,57,50,17,41, 7,63)をクイックソートを用いて降順にソートしなさい。 なお、整列完了までの途中経過を表示せよ。 いろいろなサイトで公開されているクイックソート昇順のプログラムを弄ってみたのですが どうしてもうまく行きません。よろしくお願いします。 また、このプログラムを改良し、左端・中央・右端の3要素の中をうちを枢軸 右端)とする 場合のプログラムを考えよ。 に関しては自分で考えてみるつもりなのですが、もし良ければお願いします
>>325 ほんとだ。よく見ず難癖つけてすまんかった>行数
>>328 ,329
ありがとうございます。
ですが、今回は数列(12,43,17,23,57,50,17,41, 7,63)が指定されているので、
これをscanfでの入力もしくは、プログラム内に埋め込みという形で出来ないでしょうか?
331 :
デフォルトの名無しさん :2008/12/18(木) 22:40:26
授業単元:C言語 問題 0〜9、+、−、×、÷、(、)、を使った整数式を ポーランド記法を使ったツリー構造に変換し出力。 さらに計算し解を出力するプログラムを作成。 ただし整数式は標準入力から式ブロックで入力され"quit"が 入力されるまで繰り返し入力できるものとする ※割り算によって発生する小数部は切り捨ててよい ※入力式の誤り判定は不必要とする ※ただし−符号は考慮すること 環境:WS コンパイラ:gcc 制約:breakは原則使用禁止(Selectcase文は除く) scanfは使用禁止 以上です。お願いします
>>331 breakの代わりにgoto使ってもいい?
333 :
デフォルトの名無しさん :2008/12/18(木) 22:55:40
>>332 様
聞いたことないのでだめかと…
基本的にループや条件分岐から抜け出すプログラムはだめだそうです
335 :
102 :2008/12/18(木) 23:06:31
>>484 >>487 ありがとうございます
EOFがないから終端の判断ができないってことですかね
サーバからクライアントにファイル内容を送信するときはEOFも送るからうまく止まってくれるという認識で大丈夫でしょうか?
readとかfgetsでEOFまで読めるかどうかとか考えたことなかったんで本当に助かりました
意図してるより少ない行数しか来なかったときは、
実際に使われてるプログラムではタイムアウトなどで対応してるんでしょうか?
参考になるサイトかソースも教えて頂けると助かります
>>334 ありがとうございます。何度も何度も申し訳ないのですが
左端、中央、右端の3要素の中央値を枢軸(右端)になるように改良していただけないでしょうか?
>>337 それって、本当にクイックイックソートなの?
いや、だったら普通にpの値を変えてやれば良いじゃん・・・
数列(7,12,17,17,23,41,43,50,57,63)をクイックソートで降順に整列す場合 左端、中央、右端の3要素の中央値を中軸(右端)とする改良をした場合の途中経過を表に記述せよ。 ただし、交換毎にその結果を1行で記述し、整列するまで記述せよ このような課題です
>>341 よう分からんけど、とりあえずソートは出来るから、提示してあるコードのpを
p=a[right]; に変更して。
あと、free(a);は削除。
整列後が 63 57 50 17 23 41 43 17 12 7 になるのですが、不完全ですよね?
63 57 50 43 41 23 17 17 12 7 になったけど?
もう一度見直してみます・・・ 変なところを弄ったかな?
数列(12,43,17,23,57,50,17,41, 7,63)ですと問題なく降順になるのですが、 今回の数列(7,12,17,17,23,41,43,50,57,63)に変更するとうまくいきません
ある範囲を与えた時、左端も右端も17で同じ値のときにミスってたか・・・ さぁ考えよー。オラ知らんw
do-whileの等号部分を弄ったらいいんじゃね? 試してないしろくすっぽ考えてないけどさ。
ソース全部おじさんにみせてみなさい 降順になったのはたまたまpivotが最大値、もしくは最小値から離れた値だったのでは?
知恵熱で頭がやばい・・・
なるほど・・・さすがですね。 本当にありがとうございました。
[1] 授業単元: C [2] 問題文: x(n+1){2x(n) (0≦x(n)≦1/2) :2(1-x(n)) (1/2<x(n)≦1) の漸化式を使いx(n)の結果が何周期で元に同じ答えに戻るのかをカウントするプログラム n=1のときのx(n)の数値は0.08とする。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: [12月19日08:00まで] [5] その他の制限:特になし お願いします。
>>355 同じ答えに戻らないな
0 に収束した
xn は double なんでしょ?
359 :
デフォルトの名無しさん :2008/12/19(金) 01:53:23
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 文字列の大小比較(辞書式順)を行う関数 int my_strcmp(char *s1, char *s2) を作成せよ。ただし、return valueはs1<s2なら-1、s1=s2なら0、s1>s2なら1とする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 朝になるまで [5] その他の制限: ポインタを習っています。 解説も付けてくれるとありがたいです。 よろしくお願いします。
>>358 はい、確かにdoubleです。
手計算だとn=11のときに0.08に戻る計算のはずですが・・・
>>361 double 演算て加減算で誤差乗るからdoubleの意味で完全に一致することはなくなってしまうんだけど許容誤差が与えられれば収束するね
#include <stdio.h>
int main()
{
double xn = 0.08;
int i = 0;
do {
printf("xn:%.20f\n", xn);
if (xn >= 0 && xn <= 0.5)
xn = 2 * xn;
else if (xn > 0.5 && xn <= 1.0)
xn = 2*(1 - xn);
i++;
} while(xn != 0.08);
printf("%d回\n", i);
return 0;
}
普通はdoubleは等号比較なんてしないんだけど
こんなね #define START 0.08 #define E 10e-8 }while(!(START-E<=xn&&xn<=START+E));
印字可能な文字(SPを含む)は、印字できないような文字(DELを除く)より 文字コードの値は高いから、問題なし。標準ライブラリのstrcmpでも結果は同じ。
367 :
デフォルトの名無しさん :2008/12/19(金) 03:00:16
解の公式を加算減算だけで表したいんだがどういうプログラムになるのかわからない・・・
>>366 value=my_strcmp("a","");
が一致になっちゃうよ
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 授業で作った関数を使って8王妃問題の解を示す [3] 環境 [3.1] OS: ウィンドウズ [3.2] gcc [3.3] 言語: C [4] 今週中 [5] 授業で作った以下の関数を使用すること。 一つ目(その場所に置けるかどうか判定する) int search(int bd[],int i){ int j; for(j=1;j<i;j++){ if(bd[i]==bd[j]) { return 0; } else if(bd[i]+i==bd[j]+j) { return 0; } else if(bd[i]-i==bd[j]-j) { return 0; } } return 1;
つづき int PrintBoard(int no,int bd[]) { int i,j; printf("%d番目の解\n",no); for(i=1;i<=8;i++){ for(j=1;j<=bd[i]-1;j++){ printf(" ."); } printf(" Q"); for(j=bd[i]+1;j<=8;j++){ printf(" ."); } printf("\n"); } printf("\n"); return 0; }
371 :
239 :2008/12/19(金) 06:42:07
>>371 271だと具体的にどういう不備があったの?
373 :
239 :2008/12/19(金) 07:06:58
>>372 271ですと各点数と合計と氏名が表示されないのでわかりにくいと指摘されまして
374 :
271 :2008/12/19(金) 07:11:16
> /*合格条件で使う変数 all60over の初期化で0を設定しました やめてくださいよw > 合格条件の「全科目60点以上」(例:伊藤の全科目で60点以上あるのか?)なのかを知るために > all 60overに「全科目60点以上なら1 どれか一つでも60未満があれば0 といった感じをif文で作りたいのですが > わかりません あったはずですけど、今はなぜかなくなってますね? > あと氏名を表示させたいのですがどこで表示させればいいかがわかりません そうなるだろうなあと思ってました。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):ディレクトリ内の全てのjpg画像をpbm画像にするプログラムの作成. [3] 環境 [3.1] OS:Linux(Ubuntu) [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:出来れば今日中に [5]system関数を使ってlinux内のdjpegなどを使っても可です またシェルでも構いません 宜しくお願いします
>>368 にゃるへそ。それじゃ、do whileにすればおk
>>375 linux内にきっとあるconvertを使ってもいい?
>>377 >>375 > [5]system関数を使ってlinux内のdjpegなどを使っても可です
ってあるから、なんでもありなんじゃね?
>>377 ディレクトリ内のやつを一括で変換出来れば何でも良いですよ
381 :
デフォルトの名無しさん :2008/12/19(金) 12:42:35
>>375 #include <stdlib.h>
int main()
{
system("mogrify -format pbm *.jpg");
return 0;
}
見てのとおり、.jpg だけ変換
.jpegは変換しない
>>378 標準ライブラリのstrcmpでも同じように検証してみな
>>381 ありです.
今までImageMagick知らんかった..便利ですね
385 :
◆fYK1SYi0VA :2008/12/19(金) 15:41:29
[1] 授業単元: 情報処理U
[2] 問題文(含コード&リンク):
サンプルプログラムを使用して、ポインタの線形リストを作成し、追加・削除・検索・表示がが出来ること。
ファイルからデータの読み込み、ファイルへのデータの保存が出来ること。
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: 分かりません
[3.3] 言語: C言語
[4] 期限: 12月22日
[5] その他:
教えて貰いたい部分は関数void yomu(List *list)のプログラムを書き換えて、
data.txtから3項目のデータを読み込めるようにしてほしいのです。
3項目は、整数型・文字型[10]・文字型[10]になっています。
プログラムは少し長いですが、手を加えて欲しいのは関数void yomu(List *list)の内容です。
読み込むファイル(data.txt)にはどのような内容になっているかについては、ソースプログラムの前に説明をします。
どなたかよろしくおねがいします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8402.txt
>>191 うっし、並び替えも含めてAthlonXP 2800+ (2GHz)で約0.5秒で終了するコードが書けた。
自己満足。公開はしないが。
387 :
デフォルトの名無しさん :2008/12/19(金) 16:02:03
[課題1:] 下記の画像i1.bmp(マスク画像 Mi1.bmp)を幅600×高さ400の画像の中心に配置し、背景を緑色(r=0x00, g=0xc0, b=0x00)にしたBMP画像を生成するプログラム1を作成せよ。
http://o.pic.to/s9pf6 誰かプログラミングしてください(>人<)
388 :
デフォルトの名無しさん :2008/12/19(金) 16:05:17
>>387 忘れてましたが、C言語でお願いします(>人<)
390 :
デフォルトの名無しさん :2008/12/19(金) 16:47:19
1] 授業単元:C言語 [2] 問題文(含コード&リンク):正の整数nを読み込んで、 1+1/1!+1/2!+・・・1/n! を計算し、その値を表示するプログラムを表示しなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: visualC++2005 [3.3] 言語: C [4] 期限: 12月19日18:30まで [5] 特になし よろしくお願いしますm(__)m
>>390 #include <stdio.h>
int main(void) {
double a,b; int i,n;
printf("Input n > ");
scanf("%d",&n);
if(n<0) return 1;
for(i=1,a=1.0,b=1.0; i<=n; i++) {
b=b/(double)i;
a+=b;
}
printf("%lf\n",a);
return 0;
}
393 :
デフォルトの名無しさん :2008/12/19(金) 17:13:51
>>389 すいません、訂正します。
[1] 授業単元: プログラミング実習II
[2] 問題文(含コード&リンク):下記の画像i1.bmp(マスク画像 Mi1.bmp)を幅600×高さ400の画像の中心に配置し、
背景を緑色(r=0x00, g=0xc0, b=0x00)にしたBMP画像を生成するプログラム1を作成せよ。
[3] 環境
[3.1] OS: xp
[3.2] コンパイラ名とバージョン: いつも「bcc32 ファイル名 -lm」でコンパイルしてます。
[3.3] 言語: C言語
[4] 期限: 2009 / 01 / 09
[5] その他の制限: 本テーマで利用するC言語の知識:・シフト、論理演算 ・16進表示 ・数学関数(sin, cos) ・malloc関数 ・バイナリファイル
期限は1月9日ですが、早いとうれしいです。
よろしくお願いします。
394 :
デフォルトの名無しさん :2008/12/19(金) 17:15:07
>>392 450〜550ms。自分が作ったコードとほぼ同じ時間かな。
まぁ、ほぼ似たアルゴリズムにはなるが、自分は再帰を使用したけど。
[1] 授業単元:C [2] 問題文:最大10人分の名前を格納するポインタ配列を宣言し、 キーボードから一人づつ名前を入力し、その名前の文字列を格納できるメモリ領域を 確保してから名前の文字列を格納し、さらにそのメモリ領域へのポインタを配列に格納する。 最後に入力した人数分について、名前が格納されているアドレスと名前の文字列を出力するコードを 作成せよ。 [3] 環境 [3.1] OS: Fedora 10 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日まで #include <stdio.h> int main(void){ char *name[10],tmp[20]; int i,c=0; printf("名前を最大10人分入力して下さい。\n"); for(i=0; i<10; i++){ scanf("%s",tmp); name[i] = (char *)malloc(sizeof(char)*(strlen(tmp)); strcpy(name[i],tmp); c++; } for(i=0; i<=c; i++)printf("%x %s\n",name[i],name[i]); return 0; } 10人に満たなくても、ctrl-Dで入力を終了出来るようにしたいのですが、できませんでした。
399 :
デフォルトの名無しさん :2008/12/19(金) 17:29:56
400 :
デフォルトの名無しさん :2008/12/19(金) 17:31:04
>>398 キー入力部分を
if (scanf("%s", tmp) != 1) break;
にでもしてみたら?
>>393 授業ではどうやってwindows bitmapを扱うことになってるんだ?
APIとか使うのか?
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
バブルソートの実行時間を測定するプログラムを書きなさい。
乱数の出力に関してはSFMTを使用しなさい。
作ったプログラムを、比較回数をカウントできるように改良しなさい。
さらに、代入回数をカウントできるように改良しなさい。
なお、後に選択ソートや挿入ソートで実行時間の測定や代入回数のカウントを行うため、
実行用プログラムと、ソート単体のプログラムを分けなさい。
[3] 環境
[3.1] OS: Windows VISTA
[3.2] コンパイラ名とバージョン:bcc 5.5.1 for Win32
[3.3] 言語: C言語
[4] 期限: 年内
[5] その他の制限:この課題はソースの提出ではなく、出力結果を表に表し
結果に関する解説をするものですから、とくに制限はありません。
ですが、授業で作ったサンプルを元に、実行時間を測定するプログラムまでは作りましたので、
もし良ければ応用して欲しいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8403.c http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8404.c SFMTを使用したプログラムを書くと以下のエラーとなります。
警告 W8027 SFMT.c 255: forを含む関数はインライン展開できない
警告 W8027 SFMT.c 280: forを含む関数はインライン展開できない
協力お願いします
>>403 > #include "sfmt.h"
このヘッダファイルはどこよ?
>>404 ソースと同じディレクトリに入れればいいと教わりました。
406 :
デフォルトの名無しさん :2008/12/19(金) 18:30:05
[1]授業単元:プログラミング1 [2] 問題文(含コード&リンク): 1990/1/1以降の年月日を与えられると、 その年がうるう年かどうか、またその日が何曜日かを表す値を返す関数 「int wday(int y, int m, int d)」 を作りなさい。なお、 ・1990/1/1が月曜日であること。 ・うるう年は4で割り切れて100で割り切れない年、あるいは400で割り切れる年である。 を利用することとする。 年月日は、整数値で与え、 ・西暦年はy ・月はm ・日はd で表すものとする。 関数が返す値は次の整数値とする。 ・普通の年の時… 月曜日は1 火曜日は2 水曜日は3 木曜日は4 金曜日は5 土曜日は6 日曜日は0 ・うるう年の時… 月曜日は11 火曜日は12 水曜日は13 木曜日は14 金曜日は15 土曜日は16 日曜日は10 また、動作を確認するための適切なmain関数なども作成しなさい。 [3.1] OS: WindowsXP [3.2] visualstudio Win32 [3.3] 言語: C言語 [4] 期限:2008/12/24 [5] その他の制限: 変数・データの出入力・演算子・条件分岐・繰り返し・配列を習い、 今回は、関数を自分で作ってみることが目的です。 どなたかよろしくお願いします(><)!!
407 :
デフォルトの名無しさん :2008/12/19(金) 18:31:59
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 0〜9、+、−、×、÷、(、)、を使った整数式を ポーランド記法を使ったツリー構造に変換し出力。 さらに計算し解を出力するプログラムを作成。 ただし整数式は標準入力から式ブロックで入力され"quit"が 入力されるまで繰り返し入力できるものとする ※割り算によって発生する小数部は切り捨ててよい ※入力式の誤り判定は不必要とする ※ただし−符号は考慮すること [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc ヴァージョンは不明です;; [3.3] 言語: C [4] 期限: 2008年内 [5] 制約:break,gotoなどループや条件分岐から抜けるものは使用不可能(Selectcaseは除く) 以前書き込みましたがテンプレの存在を知らずにかいたため訂正いたしました よろしくお願いします
408 :
,,・´∀`・,,)っ-○◎● :2008/12/19(金) 18:36:05
>>403 SFMTって広大の斉藤君のやつだろ?
SSE2依存のライブラリ使うのになんでbcc使うの?馬鹿なの?死ぬの?
出題者がコンパイラ指定したなら文句言ってきなさい。
もし君の独断でbccを使ってるなら、コンパイラ変えなさい。
CygwinかVS2008 Express使いなさい。
>>405 そうなんだけど、そのヘッダファイルも提示してくれよw
>>403 >>404 が言っているのは、sfmt.hってファイルは提示してくれないのか、ってことだろう。
このソース読みにくいし、危険なコードが見えるんだが・・・
main()内のint型変数nは、初期化してから使おうな。警告が出てもいいレベルだけどな。
411 :
,,・´∀`・,,)っ-○◎● :2008/12/19(金) 18:39:39
ちなみに「警告」はエラーじゃないです。 「インライン関数をインライン展開できませんでした」ってだけなんで特に気にする事じゃないです。 むしろ「エラー」を見て欲しい。
412 :
,,・´∀`・,,)っ-○◎● :2008/12/19(金) 18:40:55
414 :
,,・´∀`・,,)っ-○◎● :2008/12/19(金) 18:53:48
それよりemmintrin.hが無いとかのエラー出てないか? gcc推してるならCygwinのほうがいいかもしれないが VS2008 Expressでもいいと思う
>>408 が見えなかったが、NGに指定してた団子かw
とりあえずsageるか
いきなり難しいことを言われてちょっと混乱気味なのですが、 GCC環境でこの課題は出来ないって事ですか? SFMTの部分を無視して、普通に乱数を作り 比較回数と代入回数を求めるプログラムをお願いできませんか?
むしろGCCを使え。Cygwinをインストールするときにgccを選択すればいい。 Visual C++ 2008 Expressでもいい。 Borland C++ 5.5.1使ってるんだろ? もう一度聞くけど、bccでコンパイルしてemmintrin.hが無いとかのエラー出てないか? エラーを確認しろ。「警告」はエラーではない。
乱数発生の部分は自分で作っても問題ないんでしょ? いくつかのサンプルで、実行結果と処理時間を計測して出せば良いんでしょ? あと、見下す発言をする団子は、京産大未満
>>417 味方になってやるから教員のメールアドレス教えてよ。
ちなみにKOとかじゃないよね?
うちのマイミクに1年生向けの講義受け持ってる非常勤講師がいるけど。
>>417 まあいいや、とりあえずバブルソートの関数でっちあげてみたからとりあえずこれで出してみなよ。
っていうか、代入回数って何を指してるんだ?
順序入替の回数のことだと脳内補完したけど
#include <stdio.h>
void bubble_sort(int x[], int n)
{
int i, j, t;
int numOfComp = 0;
int numOfSwap = 0;
for (i = n - 1; i >= 0; i--) {
for (j = 1; j <= i; j++) {
numOfCmp ++;
if (a[j-1] > x[j]) {
numOfSwap ++;
t = x[j-1];
x[j-1] = x[j];
x[j] = t;
}
}
}
printf("比較回数: %d\n", numOfCmp);
printf("代入回数: %d\n", numOfSwap);
}
バブルソート本体はこんな感じでいいんだろ?
別ファイルにしろって言ってるように見えるが。
>>418 そのようなエラーはないです。
C:\c>bcc32 btime.c bubble.c sfmt.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
btime.c:
bubble.c:
SFMT.c:
警告 W8027 SFMT.c 255: forを含む関数はインライン展開できない
警告 W8027 SFMT.c 280: forを含む関数はインライン展開できない
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
>>419 問題にはSFMT指定されていますが、違う物を使って問題ないと思います。
課題は、バブル・選択・挿入ソートで、データ数が5000・10000・15000・20000の時の
実行時間、比較回数、代入回数を表にして、それに関しての説明などです。
>>421 アドレスを教えるのはちょっと・・・
こっちでも確認した。 SSE2使用のdefineしなきゃbccでもコンパイルできるんだな。 逆に俺のほうが教えられたよ。っていうか斉藤君にも教えておくか。 で、btime.cがmainで、課題で作るのはbubble.cの中身だけだろ。 確認してみて。
まつもとまことさんじゃないんだ? だんごのAAって ´∀` に、ほっぺたの・なのか ・∀・ にしかめ眉をつけたのか それが気になって仕方ないんだけど
団子は基地外だから、放置、スルーした方が良いよ。 いわゆる構ってちゃんって奴。うざすぎ。自作板では嫌われ者だぞ。
>>426 たまに松本研究室から俺宛にメールくるけどいつも斉藤君だよ。
松本教授と話したことが無い。忙しいだけなのか足元みられてるのかは知らんが。
というか、SFMT自体、彼の修士論文のネタだし。
>>425 bubble.c insert.c select.cは教科書に載っている物を使用です。
先ほどアップした物も、教科書に載っている物です。
実行用のデータは授業の配付資料に書いてあるもので、SFMT用に手を加えてアップしてみました。
アップしたデータの時点で、時間測定は出来るので、これに比較回数と交換回数(代入回数と書いてある場所もあり)
をカウント出来る物に改良する。
データ数が5000・10000・15000・20000の時の時間と回数を出し、コレを元に
1,バブルソートと選択ソートの実行時間が異なる理由を簡潔に説明
2,上記を図表を用いて具体的に説明
というのが課題です。
随分懐かしいブログだな
>>428 そっかあ。ずいぶんgeekっぽい教授に思えたからせっせとがんばってるのかと思った。
>>427 今このスレを見てる限りあなたの方がうざいんですけど。。。
>>434 自作自演かよ、基地外w
お前の方がうぜぇよ。スレタイ読めよ、何馴れ合い、個人的な雑談を始めてんだよ?
とっとと宿題に答えるなり、無関係な話なら他所でやれや、日本語もろくに読めないガキ。
ほらやっぱり。うぜえ。
>>434 =
>>403 か。答えてもらう側のくせして、偉そうにしてんじゃねーよ。
団子も、自分が解ける課題には食いつくくせに、馬鹿だの死ぬだの言っておきながら
答える気も無く、あっ、それ知ってる程度のことを言いたいだけだろ。
バブルソートなんて、効率が悪いのは分かりきっているし、その程度の課題も
自力で解けない奴が、のうのうと単位だけ貰って卒業って、どんだけレベルの低い学校だよ?
学校名を名乗れ。就職内定の逆ブラックリストにしてやんよ?
441 :
434 :2008/12/19(金) 20:36:08
>>439 おお、出題者が自演してると思われたのか。
だんごの自演とどっちなのか悩んでたw
そんな見る目ない人が人事権持ってる会社ってどこ?
パートナー企業に選ばないようにするから教えてくれw
\ / \ 丶 i. | / ./ / \ ヽ i. .| / / / \ ヽ i | / / / \ -‐ ー __ わ た し で す -- 二 / ̄\ = 二  ̄ | ^o^ |  ̄ -‐ \_/ ‐- / / ヽ \ / 丶 \ / / / | i, 丶 \ / / / | i, 丶 \
バブルソートが効率が悪い?www 安定型だからデータ構造やサイズによってはむしろ有用なのに。 その程度で採否基準きめるなんて随分レベルの低い会社だな。企業名名乗れよ。ブラック企業リストにしてやんよ。
> 自分が解ける課題には食いつくくせに
そういうあなたもねw
よくミスってる人だよね?あ、まちがえた。あ、またまちがえた。っていう。
今がんばってどれかの課題のコード書いてるんでしょ?
次はミスしないでね。
でも、「俺は回答者さまだぞー!」って雰囲気はすごいステキ。がんばってね。
>>443 確かに破壊型は時々残念な結果を生むね
挿入ソートならともかくバブルソートは無いわ
>>438 実行してみたのですが・・・・
C:\c>bcc32 btime.c bsort.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
btime.c:
bsort.c:
エラー E2451 bsort.c 10: 未定義のシンボル numOfCmp(関数 bubble_sort )
エラー E2451 bsort.c 11: 未定義のシンボル a(関数 bubble_sort )
警告 W8004 bsort.c 21: 'numOfComp' に代入した値は使われていない(関数 bubble_sort
)
*** 2 errors in Compile ***
>>439 残念ながら
>>434 =
>>403 ではありません。。。
Win32顧問コントロールって、リストビューのヘッダ押すとソートする機能あるよね。
あれ内部アルゴリズムはバブルソートかなんかだと思うよ。
少なくとも、nの2乗のオーダーの何かっぽい。
1万超えるとアホみたいに遅くなる。
大量にデータ扱う場合は遅くてしょうがないからオーナーデータで処理するけど(描画もオーナードロー)
クイックソートとかにしちゃうとまたおかしなことになるからね。
昔std::sortを安易につかっちゃって大目玉食らったことがある。結局stable_sortで落ち着いたけど。
>>445 リンケージリストならそうするだろうな。配列ではまずありえねぇ。
>>446 変数名あわせるのミスってたわ。修正してみた。
まあその辺も自分で直せる事も必要な能力だけど。
void bubble_sort(int x[], int n)
{
int i, j, t;
int numOfCmp = 0;
int numOfSwap = 0;
for (i = n - 1; i >= 0; i--) {
for (j = 1; j <= i; j++) {
numOfCmp ++;
if (x[j-1] > x[j]) {
numOfSwap ++;
t = x[j-1];
x[j-1] = x[j];
x[j] = t;
}
}
}
printf("比較回数: %d\n", numOfCmp);
printf("代入回数: %d\n", numOfSwap);
}
>>447 挿入ソートをなんか勘違いしてるだろ
別に配列でも使えるぞ
なるほど・・・うまく実行できました。 これの選択ソート、挿入ソート版もお願いできないでしょうか? よく課題を見返すと、クイックソートとマージソートについても同じ事をやならいといけないみたいです。
>>450 使えるが、配列の途中にデータを挿入すると、後ろの要素を1個ずつ移動しないといけないよね?
ソートの対象をポインタ配列にしてなおかつリングバッファとして使うとそれなりに速くはなるが。
そんなmemmoveラッシュな実装ってやだな
456 :
デフォルトの名無しさん :2008/12/19(金) 22:01:54
本当に困っています。
この
>>385 の問題分かる方お願いします。
選択ソートに関して、プログラムを変更してみたのですが、比較回数と交換回数が何百個も表示されてしまいます。 どこに問題がありますか? #include <stdio.h> void select_sort (int x[] , int n ) { int i , j, tmp , low_index , low_data ; int hikaku = 0, koukan = 0; for (i = 0 ; i < n-1 ; i++ ) { low_data =x[i] ; low_index = i ; for(j = i + 1 ; j < n ; j++){ hikaku++; if(low_data > x[j]){ low_data = x[j]; low_index = j; } } tmp = x[i]; koukan++; x[i] = x[low_index]; x[low_index] =tmp; printf("比較回数: %d\n", hikaku); printf("代入回数: %d\n", koukan); } }
>>456 /* ファイルを読込、表示させる */
while( fgets(n, 100, fp) != NULL ){ /* ファイルから1行読み込むのをNULLまで繰り返す */
printf("%s",n);
}
ここで読み込むようにすればいいわけ?
sscanfって、使ったことある?
Data newNode;
として
sscanf(n, "番号:%d 氏名:%s なまえ:%s \n", &(newNode.no), newNode.name, newNode.namae);
InsertRear(list, newNode);
でいいんじゃないの?
番号 氏名 なまえ
なんて文字列をデータに保存するのかって疑問もあるが
459 :
403 :2008/12/19(金) 23:13:46
結局のところ、BCCでSFMTの利用は出来ないのでしょうか? どうしても警告が消えません 警告 W8027 SFMT.c 255: forを含む関数はインライン展開できない 警告 W8027 SFMT.c 280: forを含む関数はインライン展開できない
警告だから無視すればいいんじゃねーの? だ
無視して実行すると、VISTAのデータ実行防止で強制終了になってしまいます。
データ実行防止で云々は別の問題な気がするが。 bccには何か拘りある?どっちにしろ現状あまり薦められないが。
コマンドプロンプトを管理者モードで実行してみたのですが、結局同じエラーで強制終了でした。 学校のXPマシンでもこの警告は出ていたのですが、実行してみなかったので XPだったらどうなったのか。。。
とりあえず、適当に乱数を用意して、とっととそれぞれのソートの
必要な検証データを記録したら?別に、乱数発生については、
コードの提出はせず、結果を出して報告すれば良いんでしょ?
安定型は比較回数は要素の数で分かるし。ただ、記述を間違えると
交換回数に差が出るよ。
基本選択法だが、
>>457 と
>>463 のように。
>>444 > よくミスってる人だよね?あ、まちがえた。あ、またまちがえた。っていう
誰かと勘違いしてね?それは答えている人だろ?妄想しすぎで、あんたがキモイよ。
>>440 口先だけのお前が黙ってろ
そうですね。結果だけでいいので、今問題なく動いている状態で調べてレポートを書いてみます
>>469 いや、
>>1 が読めない人?自分紹介の雑談スレじゃないんだよ、ここ。
ましてや、団子と話がしたいなら、団子が運営しているサイトにでも行ってくれ。
第三者からして見たら、そんな雑談こそ邪魔。
質問者ならごちゃごちゃ言わずに宿題貼れようっとうしい 回答されないからって文句たれんな
472 :
>>385>>456 :2008/12/20(土) 00:01:26
InsertRear関数本体前に使用されたInsertRearがint型とみなされた。 しかし実際はvoidなのでエラーになったと。 InsertRearのプロトタイプ宣言をするか、 関数本体をもっと上に移動しなさい。
[1] 授業単元:休日プログラミング [2] 問題文(含コード&リンク): 標準入力から整数n,d [dは非0]を入力し、 商n/dを小数の形式で標準出力へ出力してください。 商は丸めることなく表示してください。 循環小数の場合は、小数部の循環する部分を括弧で囲みます。 例:13/8=1.625 100/7=14.{285714} 123/(-99900)=-0.00{123} [3] 環境 [3.1] OS:問いません [3.2] コンパイラ名とバージョン:問いません [3.3] 言語:C/C++のどちらでも可です [4] 期限:2008/12/21 24:00 [5] その他の制限:特にありません
>循環小数の場合は、小数部の循環する部分を括弧で囲みます。 ここってどうやって判定するん? プロ教えて?
476 :
>>385>>456 :2008/12/20(土) 00:43:23
sscanf の2番目の引数の最後の改行入らなくね? 動かしてないから当たってるかどうかはしらんけど。
>>474 さあ、検算してくれたまへ
#include<map>
#include<vector>
#include<iostream>
int main(void){
int n, d, amari;
std::map<int, int> amari_map;
std::vector<int> result;
std::cout << "input n d :";
std::cin >> n >> d;
if(d==0) return 1;
std::cout << n/d << ".";
if(n<0) n=-n;
if(d<0) d=-d;
for(int i=0;(amari=n%d);++i){
if(amari_map.find(amari)!=amari_map.end()) break;
n=amari*10;
amari_map[amari]=i;
result.push_back(n/d);
}
if(amari){
int j=amari_map.find(amari)->second;
for(int i=0;i<j;i++) std::cout << result[i];
std::cout << "{";
for(int i=j;i<result.size();i++) std::cout << result[i];
std::cout << "}";
}else{
for(int i=0;i<result.size();i++) std::cout << result[i];
}
return 0;
}
479 :
>>385>>456 :2008/12/20(土) 01:04:00
>>477 \nを削除して実行してみましたが、実行結果は変わりませんでした。
けど、確かに\nは不要かもしれません。
ありがとうございます
482 :
478 :2008/12/20(土) 01:10:31
>>474 >>478 の修正版 ( abs(n)<abs(d) かつ n*d<0 の時に対応させた )
#include<map>
#include<vector>
#include<iostream>
int main(void){
int n, d, amari;
std::map<int, int> amari_map;
std::vector<int> result;
std::cout << "input n d :";
std::cin >> n >> d;
if(d==0) return 1;
if(d<0) n=-n, d=-d;
if(n<0) std::cout << "-", n=-n;
std::cout << n/d << ".";
for(int i=0;(amari=n%d);++i){
if(amari_map.find(amari)!=amari_map.end()) break;
n=amari*10;
amari_map[amari]=i;
result.push_back(n/d);
}
if(amari){
int j=amari_map.find(amari)->second;
for(int i=0;i<j;i++) std::cout << result[i];
std::cout << "{";
for(int i=j;i<result.size();i++) std::cout << result[i];
std::cout << "}";
}else{
for(int i=0;i<result.size();i++) std::cout << result[i];
}
return 0;
}
>>482 C++はよくわかんねえ。
アルゴリズムを川柳で説明してみて。
>>484 なんとなく
解いてみたなら
それっぽい
486 :
>>385>>456 :2008/12/20(土) 01:19:49
>>483 実行してみましたが、出力結果は変わりませんでした。
sscanf()のある行を、
/* ファイルを読込、表示させる */
while ( fgets(n, 100, fp) != NULL) {
sscanf( n, "番号:%d 氏名:%s なまえ:%s \n", &(newNode.no), newNode.name, newNode.namae);
InsertRear( list, newNode );
}
fclose(fp); /*ファイルクローズ*/
変更パターン1
sscanf( n, "番号:%d 氏名:%s なまえ:%s\n", &(newNode.no), newNode.name, newNode.namae);
変更パターン2
sscanf( n, "番号:%d 氏名:%s なまえ:%s", &(newNode.no), newNode.name, newNode.namae);
変更パターン3
sscanf( n, "番号:%d 氏名:%s なまえ:%s ", &(newNode.no), newNode.name, newNode.namae);
> 循環小数の場合は、小数部の循環する部分を括弧で囲みます。 これをCでやるとどうなるの?
>>214 実行したところ214が上手く作動しないんですが。
>>488 他にもソートのソースは出ているから、それを流用しちゃって。
配列のポインタと、要素数を与えてやれば良いだけだし。
>>486 data.txtのなまえのコロンが全角になってるのが問題ではなかろうか
>>486 481無視かよ
いいから、黙ってコロンを全部半角にしろ(データファイルも)
>>489 季語無いから川柳だろ
493 :
>>385>>456 :2008/12/20(土) 01:32:56
495 :
>>385>>456 :2008/12/20(土) 01:37:22
>>492 確認してきましたが、全て半角になっていました。
遅レスですまぬが
>>376 do while にすると大体は正しく動くと思うのだが
"hoge" と "hogera" とかはよろしくない気がする。順序逆でも。
もし修正済みだったらごめん
このスレば わがスレと思ふ 宿題の 欠けたることも なしと思へば
>>496 ん〜、最初を hoge にして 2番目を hogera で比較したが、
strcmpも自作の比較関数も、両方ともマイナスで返ってきたよ。
あと、両方とも空の場合、文字列と言うべきかは別として、
2つとも同じ文字列だと解釈しても成立。
>>498 今ちゃんとコード読んだんだけど、fgets使ってるから
"hoge\n"と"hogera\n"を比較してることになるんじゃないのかな?
まあ課題だし、問題ないのかもしれないけど
>>499 そうだけど、それでもstrcmpと比較しても、値はともかく正負、0は一致したよ。
もし改行コードを抜いて空文字にしても、長い方が辞書順では大きい値として
処理されて返ってくるから、問題はなし。while文が完了するのは
一致した時だし。ただ、一方に改行コード、もう一方を改行コード無しで
同じ文字だと認識しても、それはそれで改行コードの違いを
関数は判定するわけだから、改行コードの方が長いと解釈して問題なし。
strcmpでも同じ結果になるよ。
ちと補足 一方に改行コード、もう一方を改行コード無しで、それより前の 印字可能な文字が同じだった場合
502 :
496 :2008/12/20(土) 02:43:56
>>500 do-whileってこういう修正?
俺がこれを勘違いしてるんだったらすまん
do{
if(*s1 != *s2) {
if(*s1-*s2>0) return 1;
else return -1;
}
else { s1++; s2++; }
}while( *s1 && *s2);
>>495 それが真実なら、
>>476 のをうpするときにわざわざ全角に変えたということになるが?
俺にはdata.txtに全角コロンがあるように見えるし、ソースにも全角コロンが8文字ほど含まれているように見える
念のため言っておくと、全部ってのは文字通りソースとデータファイルに含まれるコロン全部だよ
一部(sscanfの箇所)だけみて全部半角だなんて言っていることは想像に難くないが
まぁ、あのコードじゃ不完全だし、それじゃどうとか言うくらいなら、 自分で書いたら?
>>359 まんどくせっ
#include <stdio.h>
int my_strcmp(const char *s1, const char *s2) {
while( *s1 && *s2 ) {
if(*s1!=*s2) break;
s1++; s2++;
}
if(*s1-*s2>0) return 1;
else if(*s1-*s2<0) return -1;
return 0;
}
#define MAX 100
int main(void)
{
char s1[MAX],s2[MAX],value;
printf("Input string 1 > "); fgets(s1,MAX,stdin);
printf("Input string 2 > "); fgets(s2,MAX,stdin);
value=my_strcmp(s1,s2);
printf("value:%d\n",value);
if(value==0) printf("一致\n");
else printf("不一致\n");
return 0;
}
507 :
87 :2008/12/20(土) 05:51:26
[1] 授業単元: ソフトウェア制作実習 [2] 問題文(含コード&リンク): 斜面を落下する球体の瞬間速度を求めるプログラムを作りなさい。 球体の重量、斜面の傾斜角[θ]、測定位置[cm](落下位置からの距離)を自由に設定可能なものとし 測定位置における、瞬間速度を算出するプログラムを作りなさい。空気抵抗、斜面とボール間の摩擦、は考慮に入れなくてもよい。 なお、必要な行には説明も入れること。 [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語:/C [4] 期限: 2009/1/7 [5] その他の制限: なし 科目がちょっと違う気もしますが、どなたかお願いします…
508 :
デフォルトの名無しさん :2008/12/20(土) 06:32:20
>>507 #include <stdio.h>
#include <math.h>
/* 重力加速度 */
#define G 9.8
int main(void) {
/* 傾斜角[ラジアン] */
double r = 0.5233;
/* 距離[cm] */
double x = 10.0;
printf("速度[m/s] = %d\n", (2 * G * sin(r) * x / 100) ** 0.5);
return 0;
}
こんな簡単な計算式をわざわざプログラミングする意味がわからん。
[1] 授業単元: 科学実習T [2] 問題文(含コード&リンク): 入力された数を16進数で表示するプログラムを作れ。 但し、文字(数字やアルファベット)を表示するのに関数putchar()を使うこと(scanfは禁止)。 (例)hexという名前のプログラムを作り、217を入力した場合以下のようになる。 Q:hello>hex Input?217 Kotae = D9 Q:hello> (注意この例でInput?やKotaeの部分を入力したものではなく、 プログラムが表示した部分である。これらはできるだけわかりやすいものにすることが望ましい。) [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc -O [3.3] 言語: C言語 [4] 期限: 12月25日 [5] その他の制限:特になし
>>509 Input?ときてKotae=というのはどうかと思うがやってみた。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i;
int number;
char hex_table[] = "0123456789ABCDEF";
char temp_str[256];
printf("Input? ");
fgets(temp_str, 256, stdin);
number = atoi(temp_str);
for (i=28; i>=0; i-=4)
if ((number>>i)&15)
break;
printf("Kotae = ");
for (; i>=0; i-=4)
putchar(hex_table[(number>>i)&15]);
printf("\n");
return 0;
}
その効率っていうのは処理速度とかそんなのですか?
for(p=buf; *p; *p++) { if(isalpha(*p)!= 0) { Hind[*p - 'A']++; } }
>>516 すまん、チェックせずそのままコピってた
>>513 ループの回数だね
>>512 は26回ファイルを読み込んでるけど、それは関数の仕様が1文字ずつしか数えられないから
実際にはファイルの読み込みは1回で済むよ
>>514 freq 関数の中で
if(isalpha(*p)!= 0)
{
この行を挿入→ Hind[*p - 'A']++;
}
ていうか
>>510 とほとんど同じ問題だなこれ
教示
テンプレ
523 :
520 :2008/12/20(土) 14:16:34
>>523 先頭に<string.h>
char *name; → char name[36];
hashtable[i].name = name; → strcpy(hashtable[i].name, name);
実行チェックはしていない
525 :
520 :2008/12/20(土) 14:47:27
>>524 ありがとうございます。
無事表示されました。
やっぱり登録のやり方がまずかったみたいですね
登録の関数からreturnすると、氏名が消えてたみたいです
>>525 変数のスコープとか
ポインタの基本、文字列の扱いについてとか
ぐぐって調べるといいかもね。
これ以上はスレ違いだから初心者スレとか別の場所で頑張って
>>514 幾らなんでも、変数名にハインドはありえなさすぎw
一瞬何事かと思ったよ
528 :
デフォルトの名無しさん :2008/12/20(土) 16:32:00
団子はランクF未満のクズ
530 :
デフォルトの名無しさん :2008/12/21(日) 00:27:40
自由課題 オセロの”ベース”を作ってもらいたいです。 環境Mac 言語C++ 期限12月21日 123456 1・・・・・・ 2・・・・・・ 3・・○●・・ 4・・●○・・ 5・・・・・・ 6・・・・・・ ↑こんな感じです。 「(3,2)などの座標を入力すれば○と●が交互に置かれて、挟まれたら裏返る」という、ベースの段階を作ってもらいたいです。 人vs人でプレーするものが良いです。上の図のように、座標を表す数字もお願いします。 後から自分で、○と●の数をカウントしたり、どっちが勝ったか表示されるように手を加えたいと思っています。 そのため、大学ではiostreamで書いているので私が後から理解できるようにiostreamを使って欲しいです。 注文が多く時間も少なくて申し訳ないですが、どうかよろしくお願いしますm(__)m
7行オセロでは無理だったか・・・・
532 :
デフォルトの名無しさん :2008/12/21(日) 00:59:50
>>531 はい><
本当によろしくお願いします。。。
7行はアルゴリズムから7行とはよく言ったもんだ。
「リバーシのアルゴリズム」ってそのものズバリな本があったな。図書館いってみ? もしくはジュンク堂
535 :
デフォルトの名無しさん :2008/12/21(日) 02:19:03
[1] 授業単元: 画像処理 [2] 問題文(含コード&リンク): 画像のヒストグラムを調べるプログラムの作成。 及び2値化画像を作成するプログラム。 [3] 環境 [3.1] OS:Windows (LINUXでも可) [3.2] コンパイラ名とバージョン: bcc(linuxはgcc) [3.3] 言語: C言語 [4] 期限: 2008年12月22日 お願いします。
画像ってなんだよ
>>535 画像の形式もわからないし、2値化の閾値をどうするのかも示されていないのに無理
>>530 7行に収めましたのでどうぞ。
#include<iostream>
char*h="・○● \n 12345678",*r="ABCKMUVW";int p,t,a,d,c,v,i,m[101],s;
void k(){for(i=!m[++p]*8;i--;){for(c=0,v=p;m[v+=r[i]-76]==3-t;)c++;if(c&&m[v]==
t){a+=c;v=p;if(d)while(m[v]=t,m[v+=r[i]-76]-t);}}}int main(){for(i=10,m[46]=m[
55]=t=2;i--;m[i*10]=3,m[i*10+1]=m[i+1]=4+i)m[45]=m[56]=s=1;for(;t=3-t;a=d=p=0){
for(;p<91;k())std::cout<<h[m[p]*2]<<h[m[p]*2+1];if(a)for(d=a=s=p=8;a==8;k())std
::cin>>p>>i,p+=i*10;else if(s)s=0,std::cout<<"pass";else break;}return 0;}
>>534 キモイからレスしないでくれる?名前くらい変えろ、目立ちたがり屋
540 :
デフォルトの名無しさん :2008/12/21(日) 11:44:10
[1] 授業単元: 乱数 [2] 問題文(含コード&リンク):半径1の4次元球の体積を求めよ。ただし疑似乱数の組数をK(独立した疑似乱数の組の数)から2Kに変化させたときの面積の計算値の相対変化が10^(-2)以下となった場合収束しているものとする。 得られた結果は解析的に計算した値とあっているか? ちなみにn次元球の体積は、 nが偶数のとき:{(r^n)/n!!}*(2π)^(n/2) nが奇数のとき:{(r^n)/n!!}*2*(2π)^((n-1)/2) である。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:今年まで [5] その他の制限:特になし お願いします
544 :
デフォルトの名無しさん :2008/12/21(日) 17:49:30
[1] 授業単元: CをC++へ
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8418.txt [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 2800
[3.3] 言語: CをC++へ
[4] 期限: 2008/12/23の朝
[5] その他の制限: 前スレで頼んで作ってもらったんですが 先生に見せたら
「実行がドス画面じゃ寂しいのでC++にしてみようか」といわれました。。。
最初は自分でやろうとしたんですがC++をあまりやったことがないので時間が足りなくて・・・
それと追加で悪いのですが 木の状態ごとに色づけ(今は星マークになっています)と全て終わっときに
1、最初に戻る or 2、終わりにする の選択肢をお願いします。
頼んでばかりですみません><
>>544 >「実行がドス画面じゃ寂しいのでC++にしてみようか」
意味不明
WindowsAPIやMFCを使えってことか?
546 :
デフォルトの名無しさん :2008/12/21(日) 18:08:48
>>545 すみません。。。
おっしゃるとおりWindowsAPIかMFCで作れといわれました
ばれた上で遊ばれてるな
>>543 俺の勘違いでなければ、main関数の前にプロトタイプ宣言書いて
main内の呼び出しを2行くらい書き換えるだけだと思うのだが
>>544 普通に、出来ませんでしたって答えれば良い話じゃね?
550 :
デフォルトの名無しさん :2008/12/21(日) 18:19:37
>>544 2800年にもVC++が出るのか・・・
551 :
デフォルトの名無しさん :2008/12/21(日) 18:19:44
できないからここで頼んでいるんです>< 分かりきったことまで書かないとあなたは気がすまないんですか!
552 :
デフォルトの名無しさん :2008/12/21(日) 18:21:12
逆ギレktkr
そんなこといってないで早く作ってください!
[1] 授業単元: 実験 [2] 問題文(含コード&リンク): 以下のtexファイルがあるとして、 \documentclass[10pt,a4paper]{jsarticle} \begin{document} \begin{verbatim} -3.703516e-01 -2.062342e+00 1.141508e-01 3.205204e-02 3.591625e-02 2.718481e-02 \end{verbatim} \begin{enumerate} \item Composition: \begin{eqnarray} \hat{\mu}=\mu+g\tilde{\mu}\\ \end{eqnarray} \end{enumerate} \end{document} texファイルはここまで。このファイルをverbatim内の数値だけを書き換えるプログラムを作りなさい ほかの記述はまったくかえずに。つまり改行とかtabとかもまったくそのまま [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語:C [4] 期限: 2009/12/22 [5] その他の制限: なし これって可能なのかな?
>>555 int data[DATA_NUM] = {105,244,303,506,13,95,394,55,1,925}; /*探索対象データ*/
int sh, i;
printf("検索値:");
scanf("%d", sh);
for(i=0;i<DATA_NUM;i++){
if(sh==data[i]){
break;
}
}
if( i<DATA_NUM ) {
puts("見つかりました");
} else {
puts("見つかりませんでした");
}
559 :
デフォルトの名無しさん :2008/12/21(日) 18:42:09
逆切れしたのは誰か知りませんが放っておいて 焦って2008を2800って書きました。
>>549 「できませんでした」って言うのも考えたんですが
これの単位を落とすと非常にまずいので不安材料は消しておきたいんです。
不安を抱えたまま新年ってのも嫌ですしね・・・
>>559 WinAPIとか習ってるの?
現実に出来ないような物を急に「できました」って持って行って平気なの?
561 :
デフォルトの名無しさん :2008/12/21(日) 18:47:58
[1] 授業単元:文字列の比較 [2] 問題文(含コード&リンク):最長5文字の文字列を2列入力する。 char型の配列にそれぞれ格納後、それらを比較、 文字列が同じだったら「equal」と表示し、違ったら「not」と表示するプログラムを作成せよ。 エラー仕様:6文字目以降の入力。→先頭から5文字を有効とし、6文字目以降は無視する。 例: 文字列1:abcde 文字列2:abcde equal 例2: 文字列1:abcd 文字列2:1234 not 例3: 文字列1:12345 文字列2:12345abc equal といった感じにしていただきたいのです。 [3] 環境 [3.1] OS: WinXP [3.2] Borland C++ Compiler 5.5 [3.3] 言語: C言語 [4] 期限: ([2008年12月22日06:00まで] [5] インクルードファイルはstdio.hとstring.hのみでstring.hの方はstrcpyとstrlen、strcmp、fgetsまでしか習っていません。 何卒よろしくお願いします。
>>559 >逆ギレ
テンプレになりすましに関しての注意書きがある。
これを守ってない以上はおまいの責任だろ
まあ普通は気にしなくてもあんまり問題起きないんだけどさ
>>561 char str1[128], str2[128];
printf("文字列1");
scanf("%s",str1);
printf("文字列2");
scanf("%s",str2);
if(0 == strncmp(str1,str2,5)){
puts("equal");
} else {
puts("not");
}
動作確認はしていない。
もしstrncmp使っちゃいけなかったら、str1[5] = '\0'とかすればよいと思う。
564 :
デフォルトの名無しさん :2008/12/21(日) 18:59:40
>>560 一応授業のほうでやったんですけど 授業なら教科書通りにやればいいんですが
自作(作ってもらったものですが)を変換するとなるとやり方が難しくて・・・
全ての時間をそれに費やせばできるかもなんですが 他の授業もあってそこまで時間が取れなくて・・・
>>561 #include <stdio.h>
int main(void)
{
char str1[100], str2[100];
int i;
fgets(str1, 100, stdin);
fgets(str2, 100, stdin);
for (i = 0; i < 5; i++) {
if (str1[i] != str2[i]) break;
}
printf("str1 = %sstr2 = %s", str1, str2);
printf((i == 5) ? "equal\n" : "not\n");
return 0;
}
>>564 要件も理解していないようでは、時間があっても無理なんじゃね?
567 :
デフォルトの名無しさん :2008/12/21(日) 19:04:43
[1] 授業単元:c++builder [2] 問題文:下記に記載 [3] 環境 [3.1] OS: windows xp [3.2]c++ builder5 [3.3] 言語:c++ builder [5] その他の制限:なし 0に対応するmemo1の値は正常値で1に対応する値はエラー値として考え memo1とmemo2を見比べてエラー値のあった部分はその前後の0(正常値)から 線形補間していきmemo3のように線形補間された配列を書き出すプログラムを作りたいのですが どのように書いていけばよいのでしょうか? お手数ですがよろしくお願いします。
>>564 出来た分を持って行って妙なダメだしが出るくらいだから、単位はムリじゃないのか?
「可」ぐらいで通るのかも知れないけど・・・
569 :
デフォルトの名無しさん :2008/12/21(日) 19:05:56
memo1 memo2 memo3 5.6 0 5.6 6.1 0 6.1 6.1 0 6.1 7.2 ← 0 7.2 10 1 7.26 9.0 1 7.32 10 1 7.38 4.0 1 7.44 7.5 ← 0 7.5 5.9 0 5.9 5.4 0 5.4 5.5 0 5.5 5.4 ← 0 5.4 10 1 5.35 10 1 5.3 4.5 1 5.25 5.2 ← 0 5.2 6.1 0 6.2 ・ ・ ・ ・ ・ ・
570 :
デフォルトの名無しさん :2008/12/21(日) 19:05:58
>>563 561ですが、strncmp使ってない場合、どこをstr1[5] = '\0'等に書き換えればよいですか。
教えていただけるとありがたいです。
>>570 char str1[128], str2[128];
printf("文字列1:");
scanf("%s",str1);
printf("文字列2:");
scanf("%s",str2);
str1[5] = '\0';
str2[5] = '\0';
if(0 == strcmp(str1,str2)){
puts("equal");
} else {
puts("not");
}
572 :
デフォルトの名無しさん :2008/12/21(日) 19:16:07
574 :
デフォルトの名無しさん :2008/12/21(日) 19:47:20
[1] 授業単元:文字列の計算
[2] 問題文(含コード&リンク):最大8桁の整数を入力させ、それぞれをint型に格納する。
入力後、3数値の和を求め出力するプログラムを作成しなさい。
(エラー仕様:9文字以上の入力→先頭から8文字までを有効とし、9文字目以降を無視。
負の数、整数以外を入力:「Error!!数字文字以外の入力」と表示して終了。
改行のみの入力:「Error!!改行のみの入力」と表示して終了。
以下は仮プログラムになります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8419.txt このプログラムの3数値の和を算出する部分を
インクルードファイルmath.hを使わない形に書き換えてもらいたいのです。
[3] 環境
[3.1] OS: WinXP SP2
[3.2] Borland C++ Compiler 5.5
[3.3] 言語: C言語
[4] 期限: ([2008年12月22日06:00まで]
[5] インクルードファイルはstdio.hとstring.hのみで
string.hの方はstrcpyとstrlen、strcmp、fgetsまでしか習っていません。
よろしくお願いします。
頼んだほうで悪いですけど言わせてもらいます。 別に「単位は無理じゃないか?」とか「時間があっても無理だろ?」 とかの意見は求めていませんので。 やってくださる方がいたらお願いします というお話です。 以後関係のない発言はスルーさせてもらいます。
トリ付けなかった結果がこれだよ!!!!!!
>>574 forのループを逆(デクリメント)にして、ループごとに10かけていけばいいと思うよ
>>574 サンプルプログラムで、2箇所ある
value[i]+=(temp[j]-'0')*(int)pow(10,strlen(temp)-(j+1));//3数値の加算
を
value[i] *= 10;
value[i] += (temp[j]-'0');//数値の加算
に変更する。
>>575 ぶっちゃけ、要件も示されていないと、誰もどうしようもないけどな
580 :
デフォルトの名無しさん :2008/12/21(日) 20:11:42
クルッ . ハ,,ハ ミ _ ドスッ . ( ゚ω゚ )彡―─┴┴─― * * * \ / つ お断りし / ハ,,ハ * * \ 〜′ /´ └―─┬/ ( ゚ω゚ ) お断りします * ハ,,ハ * \ ∪ ∪ / / \ * ( ゚ω゚ ) * .\ / ((⊂ ) ノ\つ)) * お断りします * . \∧∧∧∧/ (_⌒ヽ * * < お > ヽ ヘ } * * * < の し 断 > ε≡Ξ ノノ `J ────────────< 予 ま わ >──────────── . オコトワリ < 感 す り > ハ,,ハ ハ,,ハ .ハ,,ハ <. !! > ハ,,ハ . .( ゚ω゚ ) . ( ゚ω゚ ) ( ゚ω゚ ) /∨∨∨∨\ ( ゚ω゚ )<お断り .ハ,,ハ │ │ │ / .\ します>( ゚ω゚ ) ,(\│/)(\│/)(\│ /. \ / ♪お断りします♪ \ / ハ,,ハ ハ,,ハ .ハ,,ハ ハ,,ハ\ . ( ゚ω゚ ) ( ゚ω゚ ) ( ゚ω゚ ) ( ゚ω゚ )
581 :
デフォルトの名無しさん :2008/12/21(日) 20:24:35
>>577 10かける処理はどこに入れればいいのでしょうか。
>>588 やってみたんですが、
123456789
123456789
123
と入力したら
9 + 9 + 123 = 141
となってしまったのですが。
582 :
デフォルトの名無しさん :2008/12/21(日) 20:29:28
>>574 なんで%uでscanfして一気に足さないで複雑な処理をしてるの?
583 :
デフォルトの名無しさん :2008/12/21(日) 20:34:51
584 :
デフォルトの名無しさん :2008/12/21(日) 20:36:48
ごめんどっちでもいいか
>>583 横からですまんが
それやると、最終的に10倍されて出てくる気がする
586 :
デフォルトの名無しさん :2008/12/21(日) 20:39:01
C++でvectorと配列の両方で動くmedian関数をつくっているのですが template<class T> double median(T hw){ int size=sizeof(hw)/sizeof(hw[0]); if(size==0){ throw domain_error("hwの中身がない"); } sort(&hw[0],&hw[size-1],my_compare2); int mid = size/2; return size%2==0 ? (hw[mid]+hw[mid-1])/2 : hw[mid]; } のようにtemplateを利用していますがsizeofで配列の要素の数は求められるのですが vectorの要素の数が求められなくて困っています。 両方の要素数をもとめる方法を教えてください。
>>586 本当に配列の方がうまくいったの?w
特殊化すればいいんじゃね
引数がvectorと配列だけで想定されているので特殊化してしまうと、templateで作成する意味がなくなってしまうのですが 説明が遅れてもうしわけないのですが、宿題が出された講義ではtemplateあたりやっていたのでおそらくtemplateは使うものとするみたいです
544ですが いろいろ書き忘れがあったようなのでもう1度書かせていただきます。
[1] 授業単元: CをC++へ
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8418.txt [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 2008
[3.3] 言語: C++
[4] 期限: 2008/12/23の朝
[5] その他の制限: 上記のものをWinAPIかMFCでお願いします。
追加で悪いのですが 木の状態ごとに色づけ(今は星マークになっています)と全て終わっときに
1、最初に戻る or 2、終わりにする の選択肢をお願いします。
なにか必要事項で足りないことがあれば質問してください。
よろしくお願いします。
[1] 授業単元: 乱数 [2] 問題文(含コード&リンク):半径1の4次元球の体積を求めよ。ただし疑似乱数の組数をK(独立した疑似乱数の組の数)から2Kに変化させたときの面積の計算値の相対変化が10^(-2)以下となった場合収束しているものとする。 得られた結果は解析的に計算した値とあっているか? ちなみにn次元球の体積は、 nが偶数のとき:{(r^n)/n!!}*(2π)^(n/2) nが奇数のとき:{(r^n)/n!!}*2*(2π)^((n-1)/2) である。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:今年まで [5] その他の制限:特になし お願いします
>>554 できるけど \input 使えばいいじゃん
間違いないぜ
596 :
デフォルトの名無しさん :2008/12/22(月) 00:36:54
>>597 "translation server error"
600 :
デフォルトの名無しさん :2008/12/22(月) 02:13:15
605 :
デフォルトの名無しさん :2008/12/22(月) 13:31:26
574です。 ありがとうございました。
>>604 (1)
#include<stdio.h>
int main(void){
int i,num,data[10];
for(i=0;i<10;i++)
scanf("%d",&data[i]);
scanf("%d",&num);
for(i=0;i<10;i++) if(num==data[i]) break;
i=(i+1)%11;
printf("%d番目\n",i);
return 0;
}
(2)
#include<stdio.h>
int main(void){
int i,num,a=0,b=99,m,data[100];
for (i=0; i<100; i++)
data[i] = i+1;
scanf("%d", &num);
for (i=0;;i++){
if(a>b) {printf("not found.");break;}
m=(a+b)/2;
if(data[m]==num) {printf("%d番目 ループ%d回\n", m + 1, i);break;}
if(data[m]>num) b = m - 1;
else a=m+1;
}
return 0;
}
>>607 できれば2つ別々の解でお願いできませんか
どこからどこまでがQ1とQ2かわからないので
> // Q1 answer > // Q2 answer とかちゃんと書いてあるのに、読めないのか ていうか読んでないのか
610 :
607 :2008/12/22(月) 17:35:43
>>609 なんかありがたいことにフォローしてくれる人がいてビックリ。
>>609 いや読んだんですけどreturn 0以下のプログラムはQ1,Q2共通なんでしょうか?
//Q2がどこまでなのかわからなくて・・すみません
612 :
デフォルトの名無しさん :2008/12/22(月) 17:40:46
>>611 ふつーにプログラムの流れ考えれば、return 0 まででしょ
main 以降の関数は、main の中で呼んでいる部分があれば使うし
なければ使わない。それだけ。
もしかして関数とかまだ習ってないの?
>>612 ちょっと疑問。
void InsertNode(Node **top,int val,char *name)
と定義されてる関数があるのに
void putval(char *vname,int vval);
でいいの?
まだ完璧に習っているわけではないので正直分からないところも多いです。 できることならQ1とQ2のコードを別々の解として教えてほしいのですが それぞれ問題がちがうので・・
617 :
デフォルトの名無しさん :2008/12/22(月) 18:22:03
>>614 やはり1つにまとめたほうがいいですかね?
まずは基本的な線形リストの関数を作って、そこから
2つの関数に対応するように作っている途中だったので
似たような関数があると思います;
inegetval関数とputval関数以外の関数は自分で作ったので無駄なら
消しちゃって下さい。
619 :
618 :2008/12/22(月) 18:29:12
>>607 をQ1の答えとQ2の答えをそれぞれ別々のソースコードにしてもらうことはできませんか
未熟者ゆえ分けてもらわなければどれがリニアサーチとバイナリサーチかわかりません。
>>617 まとめると意味わからなくなるけど
せっかく操作対象となる線形リストを指定できるような形で関数定義されてるんだから
void putval(Node *list, char *vname,int vval);
の方がしっくりくるかなと思ったのよ。
618さんが答えだしてくれてるんで消えます。
623 :
デフォルトの名無しさん :2008/12/22(月) 18:39:59
>>618 迅速な回答ありがとうございます。
これはintgetvalとputval関数以外はそのままでいいってことですよね?
>>615 この中に、完璧に習っている人が一人でもいると思っているのならそれは大間違いだ。
625 :
デフォルトの名無しさん :2008/12/22(月) 18:42:35
>>621 自分もそのように思ったのですが元々定義されていた関数の引数の
個数を増やしていいのかわからなかったのであのようにしてました。
考えて下さっただけでもありがたいです!
>>622 ありがとうございました。やっと違いが分かりました
[1] 授業単元:コンピュータプログラム [2] 問題文:n行n列のデータをキーボードから入力し、対角要素を並べ換える。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++ Express Edition [3.3] 言語:C [4] 期限:2008年12月25日 [5] その他の制限:ポインタを使用。並べ換えの例として、3行3列の場合 12 13 24 12 20 91 20 18 80 ⇒ 13 18 22 91 22 34 24 80 34 となる。 よろしくお願いします。
>>628 対角要素並び変わってないじゃん
転置してるだけじゃね?
[1] 授業単元:C [2] 問題文(含コード&リンク): 10個の要素を持つint型配列arrayとint型の変数(配列要素)を指し示すポインタpを定義し、 キーボードから入力した10個の整数を配列要素に順次ポインタpを移動させながら代入し、 同様に入力した値とアドレスをポインタpを移動しながら出力する。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日迄 問題文がよく理解できないまま書いたところ、入力していない値が出てしまいました。 #include <stdio.h> int main(void) { int array[10], *p, i; *array=*p; printf("入力:"); for(i=0; i<10; i++){ scanf("%d",&p); p++; } for(i=0; i<10; i++){ printf("数値:%d 場所:%x\n",p,&array[i]); p++; } return 0; }
>>633 #include <stdio.h>
int main(void)
{
int array[10], *p, i;
p=array;
printf("入力:");
for(i=0; i<10; i++){
scanf("%d",p);
p++;
}
p=array;
for(i=0; i<10; i++){
printf("数値:%d 場所:%x\n",*p,&array[i]);
p++;
}
return 0;
}
[1] 授業単元: C [2] 問題文(含コード&リンク): 画像ファイルを開いてメモリに読み込んで別名でメモリの内容を保存、またRGB成分ごとにグレースケールで保存 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:BCC [3.3] 言語:C [4] 期限:08/12/23/16:00 [5] その他の制限:ヘッダ構造体の宣言も行う よろしくお願いします。
>>636 >>636 #include<stdio.h>
int main()
{
int x1 = 5;
int x2 = 10;
int x3[2] = {20,25};
int *px[5];
int **ppx;
px[0] = NULL;
px[1] = &x1;
px[2] = &x2;
px[3] = x3;
px[4] = NULL;
ppx = &px[3]
return 0;
}
>>637 >>535 に対するレスにもあるけど、
画像ファイルの形式が分からない以上、
誰も答えてくれんぞ。
すみません、初めてのC言語のため全くわからない状態です。 [1] 授業単元:小型計測制御システム開発 [2] 問題 入力:温度センサー 出力:LCD 割り込み:INTを使用 これを満たすプログラムの作成 [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン: MPLAB IDE v.8.15 [3.3] 言語: C言語のみ [4] 期限: [2008年12月27日] [5] その他の制限:PICを用いて実際に作成します 使用PIC:マイクロチップ社 PIC16F877 40ピンのDIPで入出力ピンが33本あり、最大8チャンネルの10ビットAD変換機を内蔵 割り込み要因が最大14、動作電圧2〜6V、内蔵プログラムメモリの容量8KW 必ずこのPICを使用しなければいけません よろしくお願いします。
このスレ見てるといろんなアルゴリズムを学べるな
>>641 チップ名の他にピンの割付とかLCDの詳細がないと無理。
ピンが無いと、頭にピンと来ないってかぁ?なんつって
>>640 BMPといわれても、まともに実装するととんでもない事になる
テスト用の画像ファイル出せよ
スイマセン、どなたか630を解いて頂けないでしょうか?
>>646 #define MAX_LENGTH 255
#include<stdio.h>
int main()
{
int i;
int num;
char inputs[ MAX_LENGTH + 1 ];
char outputs[ MAX_LENGTH + 1 ];
memset( &inputs, '\0', MAX_LENGTH + 1 );
memset( &outputs, '\0', MAX_LENGTH + 1 );
printf( "inputs:");
gets( inputs );
printf( "num:" );
scanf( "%d", &num );
i = 0;
while ( i < num ) {
*( outputs + i ) = *( inputs + i );
if ( *( outputs + i ) == '\0' ) {
break;
}
i++;
}
printf( "outputs:");
puts( outputs );
return 0;
}
getsはやめようぜ。
>>646 #include<stdio.h>
#define MAX_NUM 100
int main() {
char inputs[MAX_NUM], outputs[MAX_NUM];
int num, i;
printf("inputs>");
fgets(inputs, MAX_NUM, stdin);
printf("num>");
scanf("%d", &num);
for (i = 0; i < MAX_NUM-1 && i < num && inputs[i] != '\n'; i ++)
outputs[i] = inputs[i];
outputs[i] = 0;
printf("outputs=%s\n", outputs);
return 0;
}
649 :
help me :2008/12/23(火) 08:41:02
651 :
help me :2008/12/23(火) 08:59:50
離散データを直線でフィットして、微分をしなさい。 データを局所的にy=ax+b でフィットしてa だけを採用すればよい。とか、 例(5点微分) 微分する点の前後2点を含めて直線でフィットしながら傾きを求める。 などと教わりましたが、あまり理解ができませんでした。
数値微分
>651 それ3点じゃね? (f(x+1) - f(x-1))/2?
655 :
637 :2008/12/23(火) 12:27:44
すみません、上げ直します。
[1] 授業単元: C
[2] 問題文(含コード&リンク):BMP画像ファイルを開いてメモリに読み込んで別名でメモリの内容を保存、またRGB成分ごとにグレースケールで保存
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:BCC
[3.3] 言語:C
[4] 期限:08/12/23/16:00
[5] その他の制限:BITMAPFILE、INFOヘッダ構造体の宣言も行う、Heightは正数を想定
参考画像:
ttp://www6.uploader.jp/user/yuuki0617/images/yuuki0617_uljp00104.bmp 各構造体を宣言して、mainの方で構造体変数で呼び出し、ファイルをバイナリモードで開き、その後で詰まっています・・・
>>655 ってことはまぁ24bit限定でいいかな?
構造体のアライメントに関して習っている?
658 :
637 :2008/12/23(火) 13:11:11
>>656 はい、大丈夫です。
>>657 オフセットのパディングに関してはwindows.hをインクルードすればOKとだけ言われました・・・
スレ違いすまん
>>645 WIN API 解禁だったとして、まともに実装するのは DIBSECTION 経由で BITMAP 生成
dc に連結して GetPixel で取得 出力側はこっちの都合の良い color space で
ってコースになるのかな?
661 :
デフォルトの名無しさん :2008/12/23(火) 17:05:36
662 :
661 :2008/12/23(火) 18:21:31
#include<stdio.h>の↑のstruct vnodeは無視してください; 後期限は22時まででお願いします。 色々とすみません<(_ _)>
663 :
デフォルトの名無しさん :2008/12/23(火) 19:02:59
どんな問題なのか一行くらい書けばいいのに
>>665 #include<stdio.h>
long int my_pow(long int x,long int n); /*べき乗を計算する関数*/
int main(void)
{
int x,n;
long int result;
printf("input x n : "); /*データの入力*/
scanf("%d %d",&x,&n);
result = my_pow(x,n); /*べき乗の計算*/
printf("%d\n",result); /*結果の表示*/
return 0;
}
long int my_pow(long int x,long int n)
{
if(n<1)return 1;
return x*my_pow(x,n-1);
}
>>666 激しく同意。それでスレ内に全く同じ問題がないか検索すればいいのに
>>665 #include<stdio.h>
long int my_pow(int x, int n);/*べき乗を計算する関数*/
int main()
{
int x, n;
long int result;
printf("input x n : "); /*データの入力*/
scanf("%d %d",&x,&n);
result = my_pow(x, n); /*べき乗の計算*/
printf("%d ** %d = %d", x, n, result); /*結果の表示*/
return 0;
}
long int my_pow(int x, int n)
{
long int result = 1;
while (n-- > 0)
result *= x;
return result;
}
long my_pow(long x, long y) { return (long)pow(x,y);}
670 :
661 :2008/12/23(火) 20:26:50
>>661 は線形リストの操作に関する問題です、
よろしくお願いします<(_ _)>
setvarだけ修正した方が速いと思うからうpヨロ。
>>671 #include以下のソースに
setvar(*vname)という関数(他に関数が必要ならそれも)をつくってほしいのですが
何をupすればよろしいでしょうか?
>>672 自分で作ったエラーのやつ出してみろってこと。
675 :
デフォルトの名無しさん :2008/12/23(火) 21:59:14
>>674 void setvar(char *vname)
{
Node *ptr=list
while(ptr->next!=NULL)
ptr=ptr->next;
ptr->next=AllocNode();
Node *x=ptr->next;
strcpy(x->name,vname);
}
です。
つっこみどころが多いと思いますがよろしくお願いします。
mainでどのように使ったかのかも知りたいところだけど、 別の部分でちゃんと結尾にNULLセットできてないとエスパー。
677 :
デフォルトの名無しさん :2008/12/23(火) 22:19:01
>>676 すみません、別の部分とは他の関数で結尾にNULLがセットされてないと
いうことでしょうか?
あの関数を使用するソースはyaccソースなので必要最低限の所を
だけ書いたのですが。。
多分、変数listの宣言時にNULLをセットしてないとかだと超能力。
679 :
デフォルトの名無しさん :2008/12/23(火) 22:37:29
変数listはmain関数の中のInitList(&list)でNULLに初期化している つもりでしたが違いますかね?; 色々とおかしいところは変更して下さっていいのでお願いできないでしょうか?
>>661 のソースだと特に問題ない気がする。
面倒だからエラーが出るというソース全部を出して。
エラーがでるといったソースは
>>661 のソースのsetvar関数を
>>675 のように
した場合にBus errorになってしまいます。
>>675 listがNULLの場合のsetvarの挙動はどうなってんの?
>>675 Node *xの宣言を関数の先頭に持ってくるとどうなる?
684 :
デフォルトの名無しさん :2008/12/23(火) 22:54:15
685 :
デフォルトの名無しさん :2008/12/23(火) 23:04:44
Node *xをまず宣言して x=ptr->next; としてもBUS ERRORでした;
>>684 ファイル先頭の部分がコンパイルできねえ。
gccの環境を詳しく教えて。
yacc使ってるからじゃない?
これcじゃなくてyaccだろwwwwwww
ってそう言ってたか
>>684 共用体とプリプロセッサの順番を変えるくらいしか思いつかないよ
692 :
デフォルトの名無しさん :2008/12/23(火) 23:19:51
yaccですけどリストの部分はcでできると言っていたので
あの部分だけ書いたのですが;;
>>686 gccの環境とはなんでしょうか?
ちなみにターミナルというアプリを使用しています。
自分はyacc ファイル名.yでy.tab.cといファイルを作り
gcc y.tab.c -llでコンパイルできました。
lexソースがいるからコンパイルできないのでしょうか?
必要ならlexソースもあげますが。。
>>690 (B)は、
10x
20x
12x
18x
になるから1番。
694 :
デフォルトの名無しさん :2008/12/23(火) 23:23:27
>>691 そうですか、yaccの部分を変えないといけないみたいですね。
スレ違いになってきましたので、そろそろ撤退します;
皆様ご迷惑をおかけしました、スレ汚しすみません<(_ _)>
695 :
help me :2008/12/23(火) 23:34:32
>>664 おー、ありがとうございます。お礼遅くなりすみません。
>>690 void printBinary(unsigned x)
{
int i;
for (i = 7; i >= 0; i--) {
if(x >> i & 0x1)
putchar('1');
else
putchar('0');
}
putchar('\n');
}
int main(void)
{
unsigned n,m;
printf("Input non-negative integer: ");
scanf("%d", &n); /* n:元の数 */
/* 左に 4 ビットシフト */
m = n << 4;
printf("%u / %u = %d\n", m, n, m/n);
/* 左に 2 ビットシフトして元の数を加える */
m = (n << 2) + n;
printf("%u / %u = %d\n", m, n, m/n);
/* 16の倍数か確認 */
if ((n & 0x0f) == 0)
printf("%u %% 16 = 0 \n", n);
else
printf("%u %% 16 != 0 \n", n);
printBinary(n);
return 0;
}
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): Σ[n=1,10](n^3-2n) の値を計算し表示するプログラムを以下の条件において作成してください。 【条件1】少なくとも一つ以上の関数を用い、マクロも適宣用いること。 【条件2】関数のプロトタイプとマクロをヘッダーファイルにまとめ(proen11_2.h)、インクルードすること。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日
指定されてないです、自分で作れってことだと思います。
702 :
デフォルトの名無しさん :2008/12/24(水) 02:46:04
>>699 > マクロも適宣用いること
あれ?目が悪くなったのかな。適宜の"宜"に隙間が空いてるように見えるんだけど
それはさておき、マクロは適宜使用なので適切な局面がなかったので使用しませんでしたとでも答えれば良い
---- proen11_2.h ----
int sum(int, int, int (*)(int));
---- proen11_2.c ----
#include <stdio.h>
#include "proen11_2.h"
int main() {
int f(int);
printf("%d\n", sum(1, 10, f));
return 0;
}
int f(int n) { return n*n*n - 2*n; }
int sum(int begin, int end, int (*f)(int)) {
int i, sum = 0;
for(i = begin; i <= end; ++i) sum += f(i);
return sum;
}
703 名前:デフォルトの名無しさん 投稿日:2008/12/24(水) 03:27:15
>>699 > マクロも適宣用いること
あれ?目が悪くなったのかな。適宜の"宜"に隙間が空いてるように見えるんだけど
それはさておき、マクロは適宜使用なので適切な局面がなかったので使用しませんでしたとでも答えれば良い
703 名前:デフォルトの名無しさん 投稿日:2008/12/24(水) 03:27:15
>>699 > マクロも適宣用いること
あれ?目が悪くなったのかな。適宜の"宜"に隙間が空いてるように見えるんだけど
それはさておき、マクロは適宜使用なので適切な局面がなかったので使用しませんでしたとでも答えれば良い
メインの中に関数宣言きもい!
>>703 ツンデレだなぁ。素直に言えよ、目が悪くなりました、マクロの記述が分かりません、と。
素直が一番だよ?捻くれていたり、ごちゃごちゃ言う一言居士って嫌われるよ?
>>703 分からない・・・・。
自分の知識では限界が。
とりあえず教科書読んできます
ありがとうございました
問題文には適宜と書かれていたが、ここで質問した人がそれを適切に読めなかったのか、 あるいは、本当に出題者が間違えて記入した問題文を出してしまったか。 にしても、適宜と言う表現が適切だろうけど、いちいち自分の目がおかしくなったのかな?だの マクロは使うのが適切じゃないからとか言い訳するのはどうかと。 別に、答えなければいけないという義務は、このスレにはありませんからw
712 :
デフォルトの名無しさん :2008/12/24(水) 05:17:28
生放送にニコニコ大百科の製作者が職場から生放送してるぞ
※ひろゆきも起きてます
http://live.nicovideo.jp/watch/lv22734 http://live.nicovideo.jp/recent >グニャラくん ★
>「ニコニコ大百科」及び「お絵カキコ」「ピコカキコ」の開発者である。
>ニコニコ大百科の開発者であるとともにユーザーサポート要員でもあり
>要望板、不具合板等でユーザーの報告を受けて修正、追加する作業を行っている。
>
>ユーザーとフランクに(しかし丁寧に)接してくれるうえに、仕事が速く、不具合板で報告があってからものの数分で「修正しました!」と返事が返ってくることも度々である。
>書き込み日時を見ると深夜遅いことも多く、おまけに土日でも普通に掲示板にいることがあり、ちゃんと休みをとっているのかユーザーから心配されるほどである。
>
>実のところメインの業務は「Senna」の開発であり、ニコニコ大百科は副業である
>ニコニコ大百科の縁の下の力持ち的存在であり、現状なくてはならない存在と言える
どんな問題なのか一行くらい書けばいいのに
>>714 その手の「過程も示せ」系の宿題は
このスレでは往々にして、解だけポンと出されて終わりなことが多いから
今からもう一度、自分で考えておいた方が得策
718 :
デフォルトの名無しさん :2008/12/24(水) 10:01:29
>>703 そんなにしてまで汎用性持たせる必要あるのかと。
お前は関数のポインタ使いたかっただけ違うんかと。
>>720 わざわざ宣言しなくてもいいよ。
自分の意見が採用されなかったから拗ねるって、
どんだけガキなんだか。
>>720 リンクを一回クリックするのがそんなに面倒なのかw
>>1 > 気に入らない質問やその他や発言はスルーの方向で。
これが読めない、文盲が最近は多いんですね。
725 :
718 :2008/12/24(水) 11:06:02
あの、投稿し直したほうがいいでしょうか
回答者が減ることを学生どもに忠告する親切心のつもりだったんだがね。
ちなみに、
>>715 ≠
>>720
729 :
718 :2008/12/24(水) 11:31:16
730 :
デフォルトの名無しさん :2008/12/24(水) 11:35:54
>>714 試してないけどとりあえず。
#include <stdio.h>
#include <limits.h>
int x, y, z;
int g(int z, int x) { y = 2 * x - y + 3 * z; x = z; return y - 123; }
int f(int x) { z = 7; z = g(x - 1, x + 1); return x - z; }
int main(void)
{
int x;
x = 100; y = 23; z = -72;
{
/* 頭を使わずループでゴリゴリ */
int i, j;
for (i = INT_MIN; i <= INT_MAX; ++i)
for (j = INT_MIN; j <= INT_MAX; ++j)
y = f(x + i);
z = f(x + y + j);
if ((x == 100) && (y == -14684) && (z == 11167)) {
printf("ア = %d, イ = %d\n", i, j);
return 0;
}
}
puts("not found...");
return 0;
}
for(j = ...) のループに { } つけるの忘れてた。まあいいか。
733 :
714 :2008/12/24(水) 12:09:12
734 :
714 :2008/12/24(水) 13:07:26
実行してみたら、違う値になってしまいました 自分でもいろいろ試していますがうまくいきません
>>735 void swap(void *a,void *b,int length)
{
char *p,*q;
int i;
char t;
p=(char*)a;
q=(char*)b;
/*
ここを考えましょう。
*/
for (i = 0; i < length; i++, p++, q++)
{
t = *p;
*p = *q;
*q = t;
}
return;
}
737 :
デフォルトの名無しさん :2008/12/24(水) 13:34:18
>>741 void s_swap(char **str_a, char **str_b)
ぢゃねーかな(もとがポインタなので、ポインタのポインタで受け取らないといけない)。
>>738 とりあえず名前だけで並び替えるとこんな感じかな
int size = sizeof(x) / sizeof(x[0]); /* 配列の要素数 */
int i, j;
Person temp;
for (i = 0; i < size - 1; ++i) {
for (j = i + 1; j < size; ++j) {
if (strcmp(x[i].name, x[j].name) > 0) {
temp = x[i];
x[i] = x[j];
x[j] = temp;
}
}
}
for (i = 0; i < size; ++i)
printf("%15s, %4.1f, %3.1f\n", x[i].name, x[i].height, x[i].weight);
745 :
デフォルトの名無しさん :2008/12/24(水) 16:00:29
>>740 すいません忘れてました。
問い1ですが、for文使用不可でした……
>>747 検索の対象となるデータを全て検索したら、終了させなきゃ。
>>743 ありがとうございます!!
あのwhile文の条件は、配列の要素を定義するときに最後にNULLがあれば使えるものでした。
今回は要素数を求めなければできないですよね。今気付きました。
身長・体重ソートも自分でできそうです。
>>748 具体的には何を書き足せばいいんでしょうか
752 :
デフォルトの名無しさん :2008/12/24(水) 17:23:19
>>746 i++はなぜか使ってないわ行列を意識しているのかx成分とy成分が逆な気持ち悪いソースだなwww
>>753 何も実行されないんじゃなくて終わるまですごく時間がかかるの
だからずっと待ってなきゃダメなの
>>746 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFLEN 80
#define N 4
int a[N][N], b[N][N];
int is_rotated(void)
{
int rotated = 1, i, j;
for (i = 0; i < N; ++i) for (j = 0; j < N; ++j) if (a[i][j] != b[N - (j + 1)][i]) rotated = 0; if (rotated) return 1; rotated = 1;
for (i = 0; i < N; ++i) for (j = 0; j < N; ++j) if (a[i][j] != b[N - (i + 1)][N - (j + 1)]) rotated = 0; if (rotated) return 1; rotated = 1;
for (i = 0; i < N; ++i) for (j = 0; j < N; ++j) if (a[i][j] != b[j][N - (i + 1)]) rotated = 0; if (rotated) return 1; return 0;
}
int main(void)
{
int i, j;
char buf[BUFLEN];
printf("%dx%dの行列aを入力してください\n", N, N);
for (i = 0; i < N; ++i) {
a[i][0] = atoi(strtok(fgets(buf, BUFLEN, stdin), " "));
for (j = 1; j < N; ++j) a[i][j] = atoi(strtok(NULL, " "));
}
printf("%dx%dの行列bを入力してください\n", N, N);
for (i = 0; i < N; ++i) {
b[i][0] = atoi(strtok(fgets(buf, BUFLEN, stdin), " "));
for (j = 1; j < N; ++j) b[i][j] = atoi(strtok(NULL, " "));
}
printf("is_rotated()の結果は%dです\n", is_rotated());
}
>>734 uploader に上がってる奴もどこかで計算違いしてるんじゃね?
どうせ似たようなことをやらにゃいかんからがんがれ
インクリメントを使いこなす講座
>>714 問題文orコードまちがえてんじゃねーの?
答えがあるような気がしない
>>734 取りあえず、手計算で方程式解いて
a=816, b=-223
は出た(設問のア、イはa,bに変更)
因みに最終的な連立方程式は
-16a + 5b = -14171
3a - b = 2671
で、ロダのはyの代入を一箇所見逃してるのと、
最後のzの代入直前の符号ミスがひとつ
てか、Mathematica使えば瞬殺なんだがなあ
>>731 はyとzが書き換えられるのを考えてなかったわ。
答えはもう出てるけど一応修正。
#include <stdio.h>
#include <limits.h>
int x, y, z;
int g(int z, int x) { y = 2 * x - y + 3 * z; x = z; return y - 123; }
int f(int x) { z = 7; z = g(x - 1, x + 1); return x - z; }
int main(void)
{
int x;
x = 100; y = 23; z = -72;
{
/* 頭を使わずループでゴリゴリ */
int i, j;
int tempy, tempz;
for (i = INT_MIN; i <= INT_MAX; ++i)
for (j =INT_MIN; j <= INT_MAX; ++j) {
tempy = y; tempz = z;
y = f(x + i);
z = f(x + y + j);
if ((x == 100) && (y == -14684) && (z == 11167)) {
printf("ア = %d, イ = %d\n", i, j);
return 0;
}
y = tempy; z = tempz;
}
}
puts("not found...");
return 0;
}
[1] 授業単元:C 構造体 [2] 問題文(含コード&リンク): 氏名(文字列)、身長(倍精度実数)、体重、の3つのデータの 構造体personを定義し、リストのとおり構造体変数の配列x[]を初期化する。 x[]の要素について次の順に印字出力せよ。 1、名前をアルファベット順に印字 2、身長について昇順に印字 3、体重について昇順に印字 ただし、名前が同一の場合は身長または体重の昇順に印字。身長または体重が同一のとき 氏名のアルファベット順に印字。 リストpersonは person x[] ={{"Tanaka", 180.6,67.9},{"Fujiwara",180.4,67.0}}; など適当に作る。 [3] 環境 [3.1] OS: Windows [3.2] visual C [3.3] 言語: C [4] 期限: 明日 めんどくさい内容ですが、よろしくお願いします。
これって流行ってるのか?
764 :
デフォルトの名無しさん :2008/12/25(木) 01:05:58
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 下記プログラムは 文字列Tokyo を逆順に表示するプログラムである. #include<stdio.h> main() { static char string[ ]=“Tokyo”; char *cp; cp = string + 6; while(--cp >= string) putchar(*cp); putchar(‘\n’); } 実行結果 oykoT 上記プログラムを関数recpy()を作成して書き直しなさい.main関数をヒントに示す.データのやり取りにはポインタを用いること [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009年1月7日 13:00 [5] その他の制限: よろしくお願いします。
何度も出てくる課題はネタなのでスルーで
769 :
デフォルトの名無しさん :2008/12/25(木) 05:18:49
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): int型配列に格納して出力させるプログラム。 >ただし、6桁以上の文字列が入力された場合は、先頭から5 文字までを有効とし、6 文字目以降を無視する。 エラー仕様に、負の数が入力された場合、整数以外が入力された場合、改行のみの入力はエラーメッセージを表示して終了 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日の昼 [5] その他の制限: よろしくお願いします。
?????????
>>769 #include<stdio.h>
int main(void)
{
int i, j, a[5];
char temp[100];
gets(temp);
if(temp[0] == NULL) { /* 改行のみの入力 */
printf("Error!!改行のみの入力\n");
return 1;
}
else if (temp[0] == '-') { /* 負の数 */
printf("Error!!負の数\n");
return 1;
}
else {
for(i = 0; i < 5; i++){
if (temp[i] == NULL) break;
if(temp[i] < '0' || temp[i] > '9') { /* 数値以外の入力 */
printf("Error!!数字文字以外の入力\n");
return 1;
}
a[i] = temp[i] - '0';
}
}
printf("整数は");
for (j = 0; j < i; j++) printf("%d", a[j]);
printf("\n");
return 0;
}
>769 >int型配列に格納して出力 のところがよく分からなかったが、こんなかんじですか? // int型配列を拡張しながら入力された5桁の数字を格納&出力していくプログラム。 // 6桁以上入力されたり、整数以外([0-9]+にマッチしない場合)は即座にエラーメッセージを出して終了。 // という動作を行ってくれるはず。メモ帳で作ったので動作確認してません。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char buf[16]; int *arr, x=0, size=16, grow=16, n, i, figure=5; if( (arr = (int *)malloc(size)) != NULL ){ while( fgets( buf, sizeof(buf), stdin ) ){ for( i=0; buf[i]!=NULL && i<=figure; ++i ){ if( buf[i]<'0' || '9'<buf[i] ){ i=figure+1; break; } n = n*10 + (buf[i]-'0'); } if( i > figure ){ break; } arr[x] = n; if( ++x >= size ){ size+=grow; arr=(int *)realloc( arr, size ); } printf( "arr[%d] = %d\n", x, n ); } puts("Input error."); }else{ printf( "malloc failed." ); } }
#include <string.h> はインクルードする必要なかった...
774 :
デフォルトの名無しさん :2008/12/25(木) 08:01:36
775 :
デフォルトの名無しさん :2008/12/25(木) 08:21:51
776 :
デフォルトの名無しさん :2008/12/25(木) 11:41:23
[1] 授業単元: プログラミング演習2 [2] 問題文(含コード&リンク): (通常課題6-1) 以下の仕様で収支残高管理プログラムを作成せよ.ただし,残高処理の関数を独自で定義すること.その際,ファイルポインタについてはグローバル変数として宣言しても良い. 初期状態を除いてプログラム実行時に既存の残高額のファイル(balance.txt)を読み込む.ファイルが存在する場合に限り,balance.txt)を読み込む処理をすれば良い. 各処理を選択するメニュー画面を残高額とともに表示する.可能であれば,残高は桁区切りカンマを用いて表示すること. 終了時にその時点の残高額をファイル(balance.txt)に書き込む. ヒント:最初にbalance.txtを読み込みモードで開いて読み込んだ後は,即座にファイルを閉じ,最後の書き込み時に,改めて書き込みモードで開いて同名のファイルに書き込みをすれば良い. また,ファイルからの金額の読み込みにはfscanfを,書き込みにはfprintfを使用すると良い. [3] 環境 [3.1] OS: Windows [3.3] 言語:C [4] 期限: [2008年12月26日13:00まで]
777 :
デフォルトの名無しさん :2008/12/25(木) 11:43:02
[1] 授業単元: プログラミング演習2 [2] 問題文(含コード&リンク): (通常課題6-2) 以下の仕様で英単語管理プログラムを作成せよ.配列の要素数を変更可能にするなどプリプロセッサ制御文を用いて拡張性の高いプログラムになるように工夫せよ.また,分割コンパイルしやすいように各機能別に関数化すること. 初期状態を除いてプログラム実行時に既存の英単語リストのファイル(list.txt)を読み込み,2次元配列に格納する. (例:char words[単語数][単語文字数] ただし、単語数、単語文字数の部分には、プリプロセッサ制御文を用いること) 単語登録,リスト表示,終了の各機能が選択可能なメニュー画面を表示する.ただし,登録可能な単語数を表示し,リスト内と同一単語の登録は受付けない.また,リスト表示は登録した英単語を含めるものとする. プログラム終了時に,新しくできた英単語リストを,読み出したファイルと同名のファイル(list.txt)に書き込む.なお,英単語リストのファイルは,1行1単語として出力するものとする. ヒント:文字列の比較は「strcmp関数」,文字列のコピーは「strcpy関数」をそれぞれ使用し,引数の指定は各自で調査せよ.ヘッダーファイルには「<string.h>」を追加する必要がある. [3] 環境 [3.1] OS: Windows [3.3] 言語:C [4] 期限: [2008年12月26日13:00まで]
778 :
デフォルトの名無しさん :2008/12/25(木) 11:44:16
[1] 授業単元: プログラミング演習2 [2] 問題文(含コード&リンク): (応用課題6-A1) 通常課題6-2に以下の機能として変更または追加してプログラムを拡張せよ. リストファイル(words.txt)の読み込みと更新. すべての英単語をアルファベット順(昇順)に並べ替えて画面にリスト表示する機能.並べ替え(ソート)の方法は各自で調査せよ. リスト内の不要になった単語を削除する機能.ただし,削除確認を要求して削除機能を中止可能にする. 昇順リスト表示,単語削除の機能も選択できるようにメニュー画面に付加. [3] 環境 [3.1] OS: Windows [3.3] 言語:C [4] 期限: [2008年12月26日13:00まで
プログラミングの宿題って基本的なアルゴリズム学べるからいいよねえ 独学ではこうはいかなかった わざわざ図書館から本借りて目を凝らして仕組みを覚えたなあ
780 :
デフォルトの名無しさん :2008/12/25(木) 12:58:16
>>776 balance.txtをあげろ
あとメニューの項目は?具体的にどう処理してほしい?
>>777 list.txtをあげろ
>>778 words.txtをあげろ
781 :
デフォルトの名無しさん :2008/12/25(木) 13:12:42
>>780 メニューの項目は
[1] 収入
[2] 支出
[99] 終了
balance.txt
list.txt
words.txt
は自分でこれらの名前をつけてテキストファイルを保存するので指定はありません。
782 :
初心者 :2008/12/25(木) 15:55:09
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 社会、理科、英語の得点から平均点と評価を与えるプログラムである。 各個人のデータは@「出席番号」A「文系・理系の区分」B「社会」C「理科」 D「英語」E「3教科の平均」F「評価」からなる。ただし、具体的にデータとして 入れるのは@ABCDのみ。(残りはプログラムに処理させる)データは構造体で宣言する。「3教科平均」では、各人の社会・理科・英語の平均点を代入しておく。 「評価」には「文系であれば社会と英語の平均、理系であれば理科と英語の平均」に 応じて80以上はA、70〜79はB、60〜69はC、59以下はDといれる。出力はこれらを全て 埋めたものを表形式で出力する。さらに、「3教科の平均」で昇順にソートしておく。 (値の入れ替えはswap関数をつくる) ●検証用データ(変数の宣言時に代入しておく) 出席番号 文系・理系 社会 理科 英語 0001 文系 85 32 74 0002 理系 33 68 52 0003 理系 69 97 83 0004 文系 72 60 65 0005 文系 46 72 88 0006 文系 85 41 79 0007 理系 77 85 52 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 今週中までぐらいに [5] その他の制限:繰り返し文、条件判断文、構造体などを勉強しました。 初心者なので、初心者にもわかるようなプログラムをお願いします。
784 :
783 :2008/12/25(木) 16:10:07
あ、いらん物いれてた… FILE *fileopen(char *, char *); ↑この行カットしてくれ
785 :
デフォルトの名無しさん :2008/12/25(木) 16:28:35
解答欄に16進数を記入する場合は、0Xを除いた形で解答して下さい。 int a; a = 0XAB; a = a << 4; この時点での 変数aの値_____(16進) 答えと解き方を教えてください。 お願いします。
>>785 printf ( "この時点での 変数aの値 %x (16進)", a ) ;
787 :
デフォルトの名無しさん :2008/12/25(木) 16:49:37
>>786 変数aの値が何になるかと
なんでその値になるかの解き方
という意味です。
>>785 0xAB (16進) : 10101011 (2進)
4ビットシフト 101010110000 (2進) : 0xAB0 (16進)
この時点での 変数aの値 AB0 (16進)
792 :
デフォルトの名無しさん :2008/12/25(木) 17:26:23
>>790 16進数の場合左の4ビット消えて4つ0つける
という方法じゃないんですか??
794 :
デフォルトの名無しさん :2008/12/25(木) 17:33:57
>>794 16進数一文字分が4ビットなのはわかるよな?
それで左に4ビットずらしたんだからそりゃ右に0がついた形になるだろーが
環境書いてないけどwindowsとかの32bit環境であるなら int型は4Byte 0xAB (16進) = 00000000000000000000000010101011 (2進数) 4bit左シフトすると 00000000000000000000101010110000 =0xAB0 ここまでだったらたとえH8Sなどの16bit環境でも同じ
テンプレに沿って環境を書かないからもめるいい例だな。
799 :
デフォルトの名無しさん :2008/12/25(木) 18:03:21
右に4ビットシフトした場合は どうなるんですか?
右に4ビットシフトして左に4ビットシフトした場合は どうなるんですか?
符号無し整数のときは シフトによって生じた空きbitは0で埋めることになっているが この問題はただのintで符号付き整数のため何で埋めるかはコンパイラに依存する 何度も言われてるが環境を書け もしくは死ねばいいのに
論理シフトでも算術シフトでもなくてもよかったのか・・・どっちかなんだと思ってたよ・・・・
gccやVSだったら 符号なし整数なら論理シフト 符号有り整数なら算術シフトとなっているが これはC言語の規格の規格ではなく独自のもの この問題に限っては結果は変わらないが みんなが気にしているのはもっと大きくシフトしたときに誤解が生じるからだろう たとえばaを左に24bitシフトして右に24bitもどしたときときに 一見もとの値に戻りそうな気がするけどそうじゃないのは解るよね?
>>787 プログラムじゃなくて筆記で数値を書く必要があるってこと?
807 :
735 :2008/12/25(木) 19:47:05
>>736 遅くなってすみません。ありがとうございました。
808 :
デフォルトの名無しさん :2008/12/25(木) 19:50:22
[2] 問題文:自然数 a,p,q について a^q (aのq乗)を p で割ったときの余りを計算する関数 modpow(a,q,p) を作成せよ また、それを用いて modpow(2,q,71) (q=1,2,…,70) 及び modpow(a,345,691) (a=1,2,…,50) を全て求めよ [3] 環境 [3.1] OS:Linux [3.3] 言語:C [4] 期限:12月30日まで [5] その他の制限:特に無いです。よろしくお願いします
>>809 #include <stdio.h>
int modpow(int a, int q, int p);
int main()
{
int i;
puts("modpow(2,q,71)");
for (i = 1; i <= 70 ; ++i) {
printf("modpow(2,%2d,71) = %3d\n", i, modpow(2, i, 71));
}
puts("modpow(a,345,691)");
for (i = 1; i <= 59 ; ++i) {
printf("modpow(%2d,345,691) = %3d\n", i, modpow(i, 345, 691));
}
return 0;
}
int modpow(int a, int q, int p)
{
int i, sum = 1;
for (i = 0; i < q; ++i) {
sum = (sum * a) % p;
}
return sum;
}
812 :
デフォルトの名無しさん :2008/12/25(木) 20:13:13
>>809 #include <math.h> を加え
double modpow (int a,int b,int c) {
return pow((double)a,(double)b) % (double)c;
}
別にint型のままでいいなら
int modpow (int a,int b,int c) {
return pow(a,b) % c;
}
んで
int a,q;
for(i = 1;q <= 70;i++) printf("%d ",modpow(2,q,71));
for(i = 1;q <= 50;i++) printf("%d ",modpow(a,345,71));
pow(a,q) はaのq乗を求めるっぽいけどdouble専用だったか忘れた
剰余演算にdouble来ると怒られなかったっけ?
816 :
813 :2008/12/25(木) 20:43:54
>>809 for文こと間違えたw
for(a = 1;a <= 70;a++) 〜
for(q = 1;q <= 50;q++) 〜 だな
うん、多分これは絶対コンパイルエラーでる
今修正したけど絶対出る
817 :
809 :2008/12/25(木) 21:03:49
>>813 んなことしたら、あっという間にオーバーフローして使い物にならんわw
因みに、巨大な整数を扱うときに使うアルゴリズムはこんな感じ
int modpow(int a, int q, int p)
{
int i, x = 1;
for(i = 1 << 30; i > 0; i >>= 1) {
x = (x * x) % p;
if(q & i) x = (x * a) % p;
}
return x;
}
>>809 これって、授業の趣旨にもよるよなあ
何の制限もない(プログラミングの基礎)ならオーバーフローとか
気にしなくてもいいだろうが、
ちょっと整数論とかやったあとだと剰余の扱いをうまく計算しろっていう
課題にも見える
int型は確か-37750〜37750の65535+1個の整数だったっけか?
>>820 0が正に入るから、負の数の方が一個多い
>>820 そりゃ 16bit 系の場合だな。正確には -32768 〜 32767 の 65536 個
int のサイズはプラットフォーム依存だから
普通のPCみたいな32bit系だったら -2147483648 〜 2147483647 だよ
>>821 0は正に入らないし、正に含めたら負と同じ数だろ
1] 授業単元: 科学実習T [2] 問題文: 16進数を入力するプログラムを作れ 例 hello>inputhex inputhex? answer: 1000 このように対応する10進数を表示する。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン:gcc -o [3.3] 言語: C言語 [4] 期限: 2009年1月10日 [5] その他の制限:scanf使用不可です、よろしくお願いします。
あかん、単純な足し算にも頭が回らない・・・ ちょっと顔洗ってくる
825 :
821 :2008/12/25(木) 23:17:23
ビット表現上の話だよ? ていうか自分で -2147483648 〜 2147483647 って書いてるじゃん
>>808 #include<stdio.h>
int main(void)
{
int i, j, a, sum = 0;
char temp[100];
for (i = 0; i < 5; i++) {
a = 0;
gets(temp);
if(temp[0] == NULL) {
printf("Error!!改行のみの入力\n");
return 1;
}
else if (temp[0] == '-') { /* 負の数 */
printf("Error!!負の数\n");
return 1;
}
else {
for(j = 0; j < 5; j++){
if (temp[j] == NULL) break;
if(temp[j] < '0' || temp[j] > '9') { /* 数値以外の入力 */
printf("Error!!数字文字以外の入力\n");
return 1;
}
a =a * 10 + (temp[j] - '0');
}
}
sum += a;
}
printf("和は%d\n", sum);
return 0;
}
>>823 #include <stdlib.h>
#include <stdio.h>
int main()
{
char s[1000];
int x;
fputs("hello>inputhex\ninputhex? ", stdout);
fgets(s, 1000, stdin);
x = strtol(s, NULL, 16);
printf("answer: %d\n", x);
return 0;
}
828 :
822 :2008/12/25(木) 23:32:13
>>825 つまり -2147483648 〜 -1 の個数は 0 〜 2147483647 の個数よりも1多いと言いたいのですね、わかります (^^)
829 :
821 :2008/12/25(木) 23:40:14
いや、そうじゃなくて・・・
負の数: -2147483648 〜 -1
ゼロ: 0
正の数: 1 〜 2147483647
そもそもは
>>820 「-37750〜37750の・・・」 に対する突っ込みだよ
煽りにマジレスすんのつかれた
先頭の1ビットを符号で使い、残りを値として使うわけだが、 0は先頭も0になっているわけだが、先頭が1でそれ以下が全て0でも マイナスの値として使われているため、正と負では表現できるパターンに 1つ差があるということで。
832 :
初心者 :2008/12/26(金) 00:40:20
どなたか<<782をおねがいします。 わからなくて困ってます。教えてください。
>>782 #include<stdio.h>
enum{BU=1,RI}; // おいしい季節
struct data_t{
int num, k, s, r, e;
}*p, data[]={
{1, BU, 85, 32, 74},{2, RI , 33, 68, 52},{3, RI , 69, 97, 83},{4, BU, 72, 60, 65},
{5, BU, 46, 72, 88},{6, BU, 85, 41, 79},{7, RI , 77, 85, 52}
};
double ave3(struct data_t *data){return (data->s+data->r+data->e)/3.0;} // やらないか
void swap(struct data_t *a, struct data_t *b){struct data_t tmp;tmp=*a;*a=*b;*b=tmp;}
const char *rank(struct data_t *data){
int score=-1;
if(data->k==BU) score=(data->s+data->e)/2;
if(data->k==RI) score=(data->r+data->e)/2;
if(score>80) return "A";
if(score>70) return "B";
if(score>60) return "C";
if(score>=0) return "D";
return "Unknown";
}
const char *symbol(int k){return (k==RI)?"理系":(k==BU)?"文系":"不明";}
int main(void){
int i, j, data_num=7;
for(i=0;i<data_num;i++)
for(j=0;j+1<data_num-i;j++)
if(ave3(&data[j])>ave3(&data[j+1])) swap(&data[j], &data[j+1]);
for(i=0,p=data;i<data_num;i++,p++)
printf("%04d %s %3d %3d %3d %6.2f %s\n", p->num, symbol(p->k), p->s, p->r, p->e, ave3(p), rank(p));
return 0;
}
★コンパイル確認済みか検証済みかそれともドラフトレベルか 明記下さると幸甚です。 ★回答ソースに問題文の一部を転記して下さることをお願いします。 ★アップローダーサイトを使わず、レスにソースを貼る場合でも 同様です。(問題文の箇条書きを1行明記) ★一言コメントを入れて下さると助かります。
当方〜でコンパイルとか書いているあいつか。っつか、コンパイル、実行を確認したものを 提示するのを原則とし、コンパイルしていないならしていないと書けば良いだろ。
>>839 #include <stdio.h>
#include <string.h>
void main ( void )
{
FILE *fpRead, *fpWrite ;
char savefile[256] ;
char buff[200] ;
size_t len, i, pos ;
printf ( "新規のテキストファイルの名前を入力してください\n->" ) ;
gets_s( savefile, 256 ) ;
fopen_s ( &fpWrite, savefile, "w" ) ;
fopen_s ( &fpRead, "test.c", "r" ) ;
while ( fgets(buff, 200, fpRead) != NULL ){
len = strlen(buff) ;
for ( i = 0 ; i < 4 ; i++ ){
for ( pos = 0 ; (i+pos) < len-1 ; pos += 4 ){
fprintf ( fpWrite, "%c", buff[i+pos] );
}
}
fprintf ( fpWrite, "\n" ) ;
}
fclose ( fpRead ) ;
fclose ( fpWrite ) ;
}
void main (笑)
842 :
デフォルトの名無しさん :2008/12/26(金) 17:20:36
結果の英文が笑える
845 :
844 :2008/12/26(金) 18:16:27
訂正 if(a < 1001 && a > 0) これじゃ0を含まなくなるから ↓ if(a < 1001 && a >= 0) こんな感じにしといて
問題文だとsetterの方で値チェックするんじゃないかって気がするけどまぁ 質問者しだいだよね
847 :
デフォルトの名無しさん :2008/12/26(金) 18:21:38
>>846 setter でチェックしようとすると 戻りの void が仇になるね。
set から即 get で渡した値と異なっていたら再要求 とかも無駄が多い感じだな
例外投げるって話ならvoid戻りでも平気なんだろうけど 正常処理でループ抜けて、例外が来たらループ継続ってなんかいやな感じがする。
おねがいします
初歩的な問題を依頼するときは、どこまで習ってるのか書いて欲しいな。
>>850 とかstrncmpを習った直後の問題だったらstrncmp使ってないと減点だろうし
その他の制限:特になし
>>854 ほんとに制限無かったら
>>850 は
return strstr(txt, pat) != NULL ? (int)(ans - buff1) : -1;
とか書くんだけどさ、こういう初歩的な問題だと
多分出題者は上記のような答えは望んでないだろ?
×return strstr(txt, pat) != NULL ? (int)(ans - buff1) : -1; ○return strstr(txt, pat) != NULL ? (int)(pat - txt) : -1;
すまん、コードは間違ってた。 俺が悪かった、忘れてくれ。 カチャ ;y=ー( ゚д゚)・∵. ターン \/| y |)
めんどくさいから一部だけ定義でいいやもう 丸写しは否認する
860 :
デフォルトの名無しさん :2008/12/26(金) 23:53:15
プログラミングの授業のかだいなんですけど,わかるひといたらおしえてください #include <stdio.h> int main(void) { int i, t; int now[1001], prev[1001]; for(i = 0; i < 500; i++) { now[i] = 0; } now[500] = 1; printf("%d %d\n", 500, 0); for(i = 501; i < 1001; i++) { now[i] = 0; } for(i = 0; i < 1001; i++) { prev[i] = now[i]; } for(t = 1; t < 256; t++) { now[0] = 0; now[1000] = 0; for(i = 1; i < 1000; i++) { if (prev[i-1] == prev[i+1]) { now[i] = 0; } else { now[i] = 1; printf("%d %d\n", i, -t); } } for(i =0; i < 1001; i++) { prev[i] = now[i]; } } return (0);} を書き換えて、2行目以降、下記のルールに従うプログラム を作成して下さい。1行目は上のプログラムと同じにしてください。 時刻t-1での 場所i-1, i, i+1の値 111 110 101 100 011 010 001 000 時刻tでの場所iの値 0 0 0 1 1 1 1 0
コードも問題も意味不すぎる
それでもこのスレにはエスパーがいると信じてるから・・・・・
for文多すぎだろjk・・・
まず元のコードから解読してみる t は時刻で 1〜 256 の値 i は位置を表していて、0〜1000 の値 初期時刻で i == 500 の位置だけが 1 で、他が 0 場所 i において、両端の点の前時刻(t-1)の値が0のとき0で それ以外は 1 の値をとる これって要は波動方程式みたいな偏微分方程式の近似解じゃね? 時間がたつにつれて i = 500 を中心として奇数の場所が1になっていって、 t = 256 のときに 245〜755 までの奇数の位置で 1 になるんだな
865 :
デフォルトの名無しさん :2008/12/27(土) 00:26:10
意味不ですよね・・ シルピンスキーのガスケットといわれるフラクタル図形(の近似図形)のものらしいです。 めんどうでしたらスルーしてください^^;
「下記のルール」はおそらくこういう意味だろう prev[i-1], prev[i], prev[i+1] の並びが (1,1,1) (1,1,0) (1,0,1) (0,0,0) のとき now[i] = 0 で (1,0,0) (0,1,1) (0,1,0) (0,0,1) のとき now[i] = 1 ってこと だとすれば、 if(prev[i - 1] == prev[i + 1] ){ now[i] = 0; } else { now[i] = 1; printf("%d %d\n", i, -t); } の代わりに switch (prev[i + 1] | prev[i] << 1 | prev[i - 1] << 2) { case 7: case 6: case 5: case 0: now[i] = 0; break; case 4: case 3: case 2: case 1: now[i] = 1; printf("%d %d\n", i, -t); } と書けばおk
変換テーブル使えばルールの変更に柔軟に対応できる int map[8] = { 0, 1, 1, 1, 1, 0, 0, 0 }; now[i] = map[prev[i + 1] | prev[i] << 1 | prev[i - 1] << 2];
868 :
866 :2008/12/27(土) 01:11:31
>>865 本当にルールあってるのかなー
シルピンスキーのガスケットにはみえねえ
■■■
■■ ■
■■ ■■■■
■■ ■ ■
■■ ■■■■ ■■■
■■ ■ ■ ■
■■ ■■■■ ■■■■■■
■■ ■ ■■■ ■
■■ ■■■■ ■■ ■ ■■■
■■ ■ ■ ■■■■ ■■ ■
■■ ■■■■ ■■ ■ ■ ■■■■
■■ ■ ■■■ ■■ ■■ ■ ■
■■ ■■■■ ■■ ■■■ ■■■ ■■ ■■■
■■ ■ ■ ■■■ ■ ■■■ ■ ■
■■ ■■■■ ■■ ■ ■ ■■■■■ ■■■■■■■
■■ ■ ■■■ ■■■■ ■ ■■■ ■
■■ ■■■■ ■■ ■■■ ■■ ■■ ■ ■■■
■■ ■ ■ ■■■ ■ ■■ ■■■ ■■■■ ■■ ■
■■ ■■■■ ■■ ■ ■■■■■■ ■ ■ ■■■ ■■■■
■■ ■ ■■■ ■■■■ ■■■■ ■■■ ■■ ■ ■
■■ ■■■■ ■■ ■■■ ■ ■■ ■ ■ ■ ■■■ ■■■
■■ ■ ■ ■■■ ■ ■■■ ■■ ■ ■■■ ■■ ■ ■ ■ ■
■■ ■■■■ ■■ ■ ■■■ ■ ■ ■■■■ ■ ■ ■■ ■■■■■■
ルールを {0, 0, 1, 1, 1, 1, 0, 0} にすると見事に自己相似なガスケットになるが二等辺三角形にはならない .. .. .. .. ..■■ .. .. .. .. ..■ ..■ .. .. .. .. ..■■■■ .. .. .. .. ..■ .. .. ..■ .. .. .. .. ..■■ .. ..■■ .. .. .. .. ..■ ..■ ..■ ..■ .. .. .. .. ..■■■■■■■■ .. .. .. .. ..■ .. .. .. .. .. .. ..■ .. .. .. .. ..■■ .. .. .. .. .. ..■■ .. .. .. .. ..■ ..■ .. .. .. .. ..■ ..■ .. .. .. .. ..■■■■ .. .. .. ..■■■■ .. .. .. .. ..■ .. .. ..■ .. .. ..■ .. .. ..■ .. .. .. .. ..■■ .. ..■■ .. ..■■ .. ..■■ .. .. .. .. ..■ ..■ ..■ ..■ ..■ ..■ ..■ ..■ .. .. .. .. ..■■■■■■■■■■■■■■■■ .. .. .. .. ..■ .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..■ .. .. .. .. ..■■ .. .. .. .. .. .. .. .. .. .. .. .. .. ..■■ .. .. .. .. ..■ ..■ .. .. .. .. .. .. .. .. .. .. .. .. ..■ ..■ .. .. .. .. ..■■■■ .. .. .. .. .. .. .. .. .. .. .. ..■■■■ .. .. .. .. ..■ .. .. ..■ .. .. .. .. .. .. .. .. .. .. ..■ .. .. ..■ .. .. .. .. ..■■ .. ..■■ .. .. .. .. .. .. .. .. .. ..■■ .. ..■■ .. .. .. .. ..■ ..■ ..■ ..■ .. .. .. .. .. .. .. .. ..■ ..■ ..■ ..■ .. .. .. .. ..■■■■■■■■ .. .. .. .. .. .. .. ..■■■■■■■■ .. .. .. .. ..■ .. .. .. .. .. .. ..■ .. .. .. .. .. .. ..■ .. .. .. .. .. .. ..■ .. .. .. .. ..■■ .. .. .. .. .. ..■■ .. .. .. .. .. ..■■ .. .. .. .. .. ..■■ .. .. .. .. ..■ ..■ .. .. .. .. ..■ ..■ .. .. .. .. ..■ ..■ .. .. .. .. ..■ ..■
何その、ケツの割れ目を前にもってくれば良いんじゃね?みたいな 安直な言い掛かりは?w
(☄・д・)☄
前スレの終わりごろにも、"ロジスティック差分方程式"を間違って書いてるやつがいたっけ。 今回も、ルールがおかしいのでは?
>>875 #include <stdlib.h>
#include <stdio.h>
int fmap[7][2] = { { 'M', 1000 }, { 'D', 500 }, { 'C', 100 }, { 'L', 50 }, { 'X', 10 }, { 'V', 5 }, { 'I', 1 } };
int main()
{
char buf[8];
int n, i;
while(1) {
fputs("Input integer (0 QUIT) ====>", stdout);
fgets(buf, sizeof(buf), stdin);
fflush(stdin);
n = atoi(buf);
if(!n) break;
printf("%d ===> ", n);
for(i = 0; i < 7; ++i) {
while(n >= fmap[i][1]) {
n -= fmap[i][1];
printf("%c", fmap[i][0]);
}
}
putchar('\n');
}
return 0;
}
879 :
デフォルトの名無しさん :2008/12/27(土) 15:27:20
880 :
875 :2008/12/27(土) 15:51:56
881 :
デフォルトの名無しさん :2008/12/27(土) 15:56:09
(☄・д・)☄
885 :
デフォルトの名無しさん :2008/12/27(土) 20:18:06
[1] 授業単元:プログラミング [2] 問題文 男子は A1、A2、A3 の3人 女子は B1、B2、B3 の3人がいます。 その際の、 男女がそれぞれあぶれない、カップルの組み合わせ六通りを 出力させなさい。 出力例 A1&B1、A2&B2、A3&B3 A1&B1、A2&B3、A3&B2 A1&B2、A2&B3、A3&B1 A1&B2、A2&B1、A3&B3 A1&B3、A2&B1、A3&B2 A1&B3、A2&B2、A3&B1 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:[2008年12月29日 00:00 まで] [5] もし、APIが使えそうな場合でも、APIは使わないで欲しいです。 是非、よろしくお願いいたします。
本当にAPI使わないとぶっちゃけなにもできないんだけどまぁ気にせず無視すればいいんだろうな・・・・・
コンソールでいいんだよね?念のため聞くけど
>>885 #include<stdio.h>
int main(void)
{
int a, b, i, j, m, n;
n = 3;
for (m = 1, i = n; i > 0; i--) m *= i;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
a = j;
b = (i%2) ? (m + (i/2) - j)%3: (j + (i/2))%3;
printf("A%d & B%d ,", a+1, b+1);
}
printf("\n");
}
return 0;
}
>>885 a[2] = 6 - (a[0] + a[1]) と置いて(パターン数/2)+1回目以降のa[0]とa[1]をスワップさせればあら不思議
パターン数わかってないとできないし、要素数3じゃないとできないのもあれだけどねえ
int i;
int a[3];
for(i = 1;i <= 6;i++) {
int a[3];
if(i < 4) {
a[0] = (i%3)+1;
a[1] = (i+1)%3+1;
a[2] = 6 - (a[0]+a[1]);
printf("%d, %d, %d \n",a[0],a[1],a[2]);
}
if(i >= 4) {
a[1] = (i%3)+1;
a[0] = (i+1)%3+1;
a[2] = 6 - (a[0]+a[1]);
printf("%d, %d, %d \n",a[0],a[1],a[2]);
}
}
>>890 #include<stdio.h>
int main(void)
{
int num;
scanf("%d", &num);
if(num==1 || num==10)
printf("%d", num*10);
else if(num==2 || num==20)
printf("%d", num*20);
else
printf("%d", 0);
return 0;
}
#include<stdio.h>
int main(void)
{
int num;
scanf("%d", &num);
switch(num)
{
case 1:
case 10:
printf("%d", num*10); break;
case 2:
case 20:
printf("%d", num*20); break;
default:
printf("%d", 0); break;
}
return 0;
}
>>890 VC++使わなくていいよ
つかなんでこんな簡単な奴もできねえんだよ・・・
こんな簡単なやつも出来ないやつだからここに来るわけだ
こんな簡単な宿題しか答えられないけど、それ未満の奴がいるから このスレでは偉そうになるわけだw
宿題依頼した奴はまるごとソースコピって提出してるのかな
当たり前だろ。 今は論文でさえ、まるごとコピーで卒業できる時代だぜ。
ところで、まだ未回答の質問ってあったりするのかな。 スレない探すのもめんどいね
論文の複製、別名付与が悪だった時代→20世紀 論文の複製、無修正別名付与、或は修正後同名付与が善になる 時代→21世紀 このパラダイムシフトの意味がわからないオコチャマ が回答者として集うスレでつねw
>>900 意味が分からないから詳しく教えてくれないか?
>論文の複製、別名付与が悪だった時代→20世紀 おりはこの頃、理系大学単位不足で中退しました。。。。。。
>>902 ってことは、その頃にその大学の卒業生はまだまともだった可能性が高いな
>903 まともかな?コピー機の前に20人ぐらい並ぶ時代だったけど。
ま、取り敢えず名前を売る為に、カラ売りのように 完成度の本質的に低いプログラムを握らせて後から 修正して辻褄を合わるやり方は今後一切通用しなく なるだろな。
907 :
デフォルトの名無しさん :2008/12/29(月) 00:51:52
[1]授業単元:上級C言語プログラミング [2]問題文: OS上で一般ユーザー権限のないプログラムがスタックオーバーフローを使って管理 者権限を得て動作するようなプログラムを作成せよ。 [3]環境 [3.1]OS:windows XP [3.2]コンパイラ名: cygwin [3.3]言語:C [4]期限:2008年12月31日午後5時まで [5]特になし。 全く見当がつかないのでどうかよろしくお願いします。
>>907 さてと、ちょっとおじさんと、警察署に行こうか?
大晦日まで宿題か・・・ 学生さんも大変だw
911 :
907 :2008/12/29(月) 05:04:13
すいません、勘違いでした。 問題は、スタックオーバーフローによって本来起こり得ない動作 をするプログラム(printf文で文字を出力等)を作成せよとのことです。 完全にやってることハッカーですもんねw すいませんがどなたかよろしくお願いします。
×ハッカー
○バッカー
>>907 マジレスしとこうか
スタックオーバーフローを利用したその手の手法は
現行のOSじゃ不可能
途中で落っこちる
>>907 #include<stdio.h>
#include<string.h>
int main(void){
char a[]="Good morning.";
char b[]="Good afternoon.";
char c[]="Good evening.";
strcat(b, "!dummy!");
puts(a);
puts(b);
puts(c);
return 0;
}
それはスタックじゃなくてバッファではなかろうか。
スタック領域だからいいんじゃね?
>>914 いまどきの libc なんかは、スタックと自動変数の位置差をランダムに変える仕様になってるからな
>>916 printf文で文字を出力等といってるからバッファ溢れでいいんじゃね
もともと
>>907 が「勘違い」だったことを考えると
>>916 これならスタックオーバフローでおk?
ってか環境(コンパイラ等)によっては動かんだろうけど
#include<stdio.h>
void b(void);
void a(void *dummy){
void **p;
printf("%s begin\n", __FUNCTION__);
p=&dummy;
p[-1]=b;
printf("%s end\n", __FUNCTION__);
}
void b(void){
int dummy;
printf("%s begin\n", __FUNCTION__);
a(&dummy);
printf("%s end\n", __FUNCTION__);
}
int main(void){
b();
return 0;
}
c言語からスタックって見えるのかな?なんか言語の機能として定義されてる? マシン語に落とした時に呼び出し規約などのabiとして 結果的にスタック問題が発生する事があるのかもしれないけど、 posix,win32レベルじゃないと分からないよね? ましてや権限云々など。
921 :
746 :2008/12/29(月) 11:50:12
>>924 #include<stdio.h>
#define MAXNUM 1000
int main(void)
{
char flag[MAXNUM+1]={1,1};
int i, j;
for(i=0;i*i<=MAXNUM;i++)
{
if(!flag[i])
{
for(j=i*2;j<=MAXNUM;j+=i) flag[j]=1;
}
}
for(i=0;i<=MAXNUM;i++)
{
if(!flag[i])
{
printf(" %4d", i);
}
}
return 0;
}
927 :
デフォルトの名無しさん :2008/12/29(月) 22:16:50
[1] 授業単元:実践プログラミング
[2] 問題文(含コード&リンク):
ttp://www.jra.go.jp/JRADB/accessO.html にある数値の中から
問(1) 100.0以上1000.0未満の数
問(2) 1000.0以上10000.0未満の数
問(3) 10000以上の数
がそれぞれいくつあるか数えるプログラムを作れるなら作りなさい。(加点課題)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual C++ 2008 Express Edition
[3.3] 言語:C
[4] 期限:2008年1月3日第5R発走時刻までに教授に送信
[5] その他の制限:今は構造体を習い始めたところ。関数までは基本的なものなら理解できる。
928 :
デフォルトの名無しさん :2008/12/29(月) 22:17:42
URL直じゃアクセスできんな あとプログラムでwebページ取得しろっていう意味でいいのか?
930 :
924 :2008/12/29(月) 22:23:48
931 :
デフォルトの名無しさん :2008/12/30(火) 00:01:45
>>929 URLさえ変えれば問(1)〜(3)の範囲にあるオッズを探して買い方が何通りあるか探してくれるようなものにすれば良いみたい。
あとは、出来さえすれば良いので習ってない知識使うも自由、問題文の解釈も自由、らしい。
教授の趣味丸出しの課題ですいません
accessOはどこ?
>>929 サーバーにメタデータを要求する仕組みを解析するのって簡単にできるん?
scanf関数(数字入力)の後にfgets関数(文字列入力)を入れたらfgetsの方に 勝手に改行が入ってしまいます。 <例> scanf("%d",&menu); fgets(ptr,LEN,stdin); どうすればよいのでしょうか?
>>934 scanf()系の関数とgets()系の関数は混ぜて使わない方が良い
どっちかに統一したらよい
>>933 postしたりするだけで済む(とは限らないけどさ)んじゃねーの?
それなら、htmlちらっとみればできんじゃね?
どの道URLで取得は絶対に不可能なんだよなぁwどの情報表示なのかわかんねーもんww
>>935 getsで統一したい場合、文字列として数字を読みこまなきゃだめですかね?
そこからコード変換して。
>>937 fgetsしたものをsscanfにかけるのが楽かと、バッファの扱いに関してはだけど
整数のオーバーフローとかはまた別で
>>934 よくあるのは、fgets した後に sscanf かな
その例だと
fgets(ptr, LEN, stdin);
sscanf(ptr, "%d", &menu);
fgets(ptr, LEN, stdin);
混ぜるなの理由は、scanf したとき '\n' は stdin ストリームから取り込まれないので
次の fgets の最初の文字が '\n' になるので結果的に fgets は空の文字列になって
しまうんだな
fgetsの前に fflush(stdin); または rewind(stdin); つけたらできなかったっけ?
char tmp[128]; int menu; fgets(tmp,128,stdin); sscanf(tmp,"%d",&menu); 試しにこうしてみたら動きました。 tmpの型サイズが[128]となっているのが不細工で気に入りませんが、 わざわざポインタを使うのもどうかと思ったので。(数字入力は関数として作っています。なのでptrは使えない) もっと美しい方法があれば知りたいです。
書式が決まってるなら scanf だけでも結構いける
>>940 それはM$のCのみの処理系依存
標準では使えない
>>933 メタデータというか、GETリクエストして得られたHTMLを解析すればいいと思う。
みれないのは現在そのファイルがないのか、アクセス制限なのか分からないけれど、
後者であればブラウザで表示するまでのパケットをみればどうにかなるんじゃない?
公開ページだからせいぜいReferer程度のものと思うけれど。
あと、こういう課題が出るくらいだからその辺(通信まわり)の知識もあるでしょきっと。
>>944 勘違いしてないか?getしてもなんの意味もないだろ?
>>927 学習レベルと要求に差がありすぎない?
なんか条件があるはず
>>927 提示されたURLがpostリクエストの結果表示に過ぎないから
URLの入力で・・・
って言う問題文は明らかにおかしい、URLだけじゃ不正ページになるだけだもの
どこか勘違いしてるはず
>>927 <table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="gray12"><font color="#FA3515">エラー013</font></td>
</tr>
<tr>
<td><strong><font color="#FF0000" size="6">パラメータエラー</font></strong></td>
</tr>
そのページの一部を切り抜いてきたものだけど、
例えば、100%, gray12bといった数字が少しでも含まれるものも対象?
あと16進数のFA3515は、3515と解釈すればいいのかな…?
>>948 >>931 安価がないからな・・・
これ見る限り不正ページは意図したものではないんじゃねー?
>>945 あんまりサイトみてなかった。
こりゃ確かにPOSTしないとだめでした。
まあ、なもんで、
>>947 のURLだけじゃダメというのは同意。
あとは何をPOSTすればいいか分かればOKだねー
もしかすると、double配列から指定範囲の要素毎にカウントするだけのプログラムなのかもね 単にサンプルとしてこのページの値で初期化しろって。
952 :
デフォルトの名無しさん :2008/12/30(火) 09:26:42
>>940 動作がMS環境依存で移植性がないのと、ファイルからリダイレクトしたときの動作がかなり怪しくなるので不可。
リアル大坊のときはこんな厨テク使ってた。
#define endscanf() do {} while (getchar() != '\n')
fputsって2回以上評価されることもある?
>>954 rewindより遥かにましだよ。まさに厨テクという言葉がお似合いだけど。
>>938 gets()とscanf()ってあまりよろしくないんですね
てっきりそれでもいいかなと思ってました。
[1] 文字列の比較、計算
[2] 一度提出したのですが、まったく仕様を満たしていないと言われたので組みなおしをお願いしたいのですが…。
以下のリンクに問題、一度提出したプログラム、それに対する指摘を入れてあるのでお願いします。
http://toku.xdisc.net/cgi/up/ttt/nm7318.zip (テンプレにあったアップローダーにアクセスできなかったので別のところから借りました。)
[3] 環境
[3.1] WinXP
[3.2] Borland C++ Compiler 5.5
[3.3] 言語:C言語
[4] 期限:[2008年1月2日22:00まで]
[5] 原則的にgoto 文は使用しない。
do while ループに関してはできるかぎり使用せず、while に統一する。
※キーボードからの入力は、scanf 関数およびgets 関数を使用せず、getchar 関数または、
fgets 関数を使用すること。
961 :
デフォルトの名無しさん :2008/12/30(火) 20:19:13
>>958 3数値の和を求める問題で、getchar関数を使うとして、1数値目を8文字目まで読み込んで後は読み捨てるとすると、
2数値目を読み込むとき今度困ったりしない?2数値目は9文字目から改行までにするの?それとも
次の改行が終わって(改行は1個とは限らない)次の数値が始まる所にするの?
いずれにしても厳しい先生だなw
>>959 すいません。
ルールにgets、puts等を使ってはいけないというのを見逃してしまいまして。
申し訳ないです。自分のミスです。
>>960 ありがとうございます。
このプログラムから最後の
”Input \"c\" to continue”を抜かして、比較が終わったら、
何かキーを押して終了します。
を表示したいのですが…。
どうすればよろしいでしょうか。
>>961 文字を入れる→改行が入力されたら2つ目の数値へ。
1数値目が入力される→改行が2回、等の場合は2つ目の数値が入力される前に改行が入力されたので
”Error!!:数字文字以外の入力”と表示されるようにしていただきたいのです。
ex. 1234567→改行を2回入力したとき
1番目の数値入力:1234567
Error!!:数字文字以外の入力
何かキーを押して終了。
という感じです。
お願いします。
[1] 授業単元:プログラム基礎
[2]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8499.txt [3] 環境
[3.1] WinVista
[3.2] Visual C++ 2008 Express Edition
[3.3] C
[4] 期限:特になし
[5] 指定:特になし
英単語管理プログラムで、既にプログラムはできています。
>配列の要素数を変更可能にするなどプリプロセッサ制御文を用いて拡張性の高いプログラムになるように工夫せよ.また,分割コンパイルしやすいように各機能別に関数化すること.
とあるのですが、綺麗に関数を分ける方法がわかりません。
独学で無理矢理分割しても自分のためにならないと思うので、各機能の関数化をお願いしたいです。
>>963 まずはfopen周りをなんとかした方がいい。
自分のためになるよ!
>>965 変な覚え方するより、セオリーに従った方法で覚えたほうが絶対いいと思うのですが、、
先生に質問しようにも学校は休みですし、他にも課題は大量にあるので。
967 :
965 :2008/12/30(火) 23:53:24
解答がまともである保証はあるのかな?
>>967 それは見れば大体分かることだと思います。
for文を使わず一つ一つの処理を書いてたり
else文を使わずにifの連続で判断をしていたり、と
プログラミングってちょっとした知識を知っているかどうかでプログラムの美しさは
全然変わってくると思っているので。
無駄を省いてどう”短く"書くか に限る
それだけの実力があるなら投げることないと思うのだが
>>968 >それは見れば大体分かること
自分のコード見てどこがまずいかは見れば大体分かるよな?
まずはそっちを修正しようぜ。
>>971 「まずい」というのはわかりませんが、「どうにかならないのかな?」と思うところはあります。
しかしそれを直す方法はわかりません(とりあえずは調べていますが)
まだ知識に乏しい初心者がくるところに「どこが問題かわかるだろ?そこを直せよ」なんて、 錯誤もいいところじゃね。
>>972 普通、それはわかってないと言う。「大体わかる」とか書くから誤解される。
>>974 こうでも書かないと「まずは自分で調べろ」と言われそうなので。
はっきりいって10枚程度のスライドでプリプロセッサだの関数だのと見せられた程度でわかるわけがわかりません。
参考サイトなんかを見てもバックグランドとなる知識がないため完璧に理解することができません。
おまけに「拡張性の高いプログラムになるように工夫せよ.また,分割コンパイルしやすいように」とわりますが、
こんなところまで教えてくれる初心者向けサイトはありません。(拡張性が高いはまだしも、分割コンパイルなんてやったことすらないのに)
だからここに来たわけです。ここなら経験豊富な人も多いだろうと思ったので。
分割するほどの処理じゃないから、そのままの方がいいような
>>975 >こうでも書かないと「まずは自分で調べろ」と言われそうなので。
うそだったわけだ。
――掲示板で聞くことは自分で調べると言わない。 質問スレですらそうなのに、ましてここは宿題スレだ。
>>977 ファイル操作してるところを関数にしてみたら
>>979 個人的に直したいと思うのは、
メニュー選択時の数字入力方式
flag、tmpcは省略できるのではないか
menu関数はもっと別のアプローチがあるのではないか(現時点では初めのメニュー分にしか対応できない)
こんな感じです。
しかしその前にこれらを関数分割化することが大事だと思うので。
どうでもいいことに噛みついてんなよ根暗共
>>981 ファイルのオープン等は外部関数でやってもよいのですか?
仮に
void file(){
fp=fopen("list.txt","w");
}
void main(){
file();
fclose(fp);
}
(fpの宣言等は省略)とやってもできるのか?
fpはグローバル変数としなければならないのか?
等々疑問が大量に湧いてきます。これらを虱潰しにやっていっても、もっと効率のよい方法があると思うと・・・
>>984 単語登録毎に、ファイル読み込み、重複チェック、書き込みやれば、処理が簡潔にならない?
>>985 とりあえずこのプログラムは仕様書の内容に忠実に再現してあるので、それは駄目なようです。
(初めにファイルを読み込み、無ければ作成。次にそれを配列に格納。後は処理を繰り返し、最後にファイルに格納)
考えるほど頭が痛くなってきます。
文字を入力して格納するにしても、文字の入力だけを関数にすればいいのか、格納まで行えばいいのか(格納するにはポインタを使うべきなのか、グローバル関数にするべきなのか)
>>985 そんな拡張性のない方法はどうかと
あと改行の扱い方が半端無いなこれ
>>988 staticやら#if 0やら、自分の知らない手法が大量に出ているので、一つ一つ調べていって理解してみます。
ありがとうございました!
少し教えていただきたいのですが、あの二次元配列の何が問題だったのでしょうか?
文章サイズも+1しているようですが(改行コード用?)
>>989 ヌル文字('\0')用。
せっかくキリのいい256にしてるのに+1してるのはちょっとムズかゆかったりするけど、
まぁ個人的な話。
992 :
デフォルトの名無しさん :2008/12/31(水) 13:14:43
>>992 123456789改行
abc
と入力したら
Error!! 数字文字以外の入力
Error!! 改行のみの入力
123456789 + 0 + 0 =123456789
何かキーを押して終了
と出て、
改行を3回入力したら
Error!! 改行のみの入力
Error!! 改行のみの入力
Error!! 改行のみの入力
何かキーを押して終了
と出たのですが、
これを
数字文字以外が入力された場合はその時点で
Error!! 数字文字以外の入力とだけ表示しそこで終了。
改行が入力された時点で
Error!! 改行のみ入力とだけ表示し終了するようにしたいのですが。
お願いします。
994 :
デフォルトの名無しさん :2008/12/31(水) 16:33:53
>>993 break; を return 0; に変えればいいと思う
[1] 授業単元:情報処理2
[2] 問題文(含コード&リンク):
A[3][3]={{3.0,0.01,0.1},{0.01,2.0,0.1},{0.1,0.01,1.0}}の固有値をヤコビ法で求める
[3] 環境
[3.1] Linux(Ubuntu)
[3.2] コンパイラ名とバージョン: gcc4.2.4-1ubuntu3
[3.3] 言語: C
[4] 期限: 2009年1月15日13:00まで
[5] その他の制限: 特になし
たぶん途中まではできていると思うのですが無限ループしてしまいます。
どこがよくないのかを教えてください。お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8504.c
996 :
デフォルトの名無しさん :2008/12/31(水) 16:40:40
>>995 Visual C++ 2008 EE だと無限ループしなかったよ
すいません。 最後の方に無限ループしないようにnでストッパーをつけています。 それを外すと無限ループして値も収束してくれません。
998 :
デフォルトの名無しさん :2008/12/31(水) 17:01:27
>>997 じゃあpでbreak;しなかったってことでしょ?
毎回p=0と初期化してるのはなんで?
右上にある要素を数えたいと思ったんですが・・・ すいません、もう一回よく考えてきます
1000 :
デフォルトの名無しさん :2008/12/31(水) 17:29:02
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。