C/C++の宿題を片付けます 44代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/05/24(火) 14:55:32・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:Windows/Linux/等々
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか
[5] その他の制限:どこまで習っているか、等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【前スレ】
C/C++の宿題を片付けます 43代目
http://pc8.2ch.net/test/read.cgi/tech/1115794784/
【歴代スレは>>2-13】
0002デフォルトの名無しさん
2005/05/24(火) 14:55:5541代目: http://pc8.2ch.net/test/read.cgi/tech/1109542053/
40代目: http://pc5.2ch.net/test/read.cgi/tech/1107625122/
39代目: http://pc5.2ch.net/test/read.cgi/tech/1106650397/
38代目: http://pc5.2ch.net/test/read.cgi/tech/1105541524/
37代目: http://pc5.2ch.net/test/read.cgi/tech/1103913840/
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
0003デフォルトの名無しさん
2005/05/24(火) 14:56:1928代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
0004デフォルトの名無しさん
2005/05/24(火) 14:56:4013代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
09代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
08代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
07代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
06代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
05代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
04代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
03代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
02代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
01代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
0005デフォルトの名無しさん
2005/05/24(火) 14:58:29でも、どこまで習ってるかなんて必要かなぁ
0006デフォルトの名無しさん
2005/05/24(火) 15:05:28ま、もっともそういう奴はテンプレなんか読んじゃいないし、
自分の使っている環境もろくに判ってないワケだが・・・。
0007↓どこがおかしい?
2005/05/24(火) 16:24:45void main(void)
{
int kazu;
kazu=1;
scanf("%d\n",&kazu);
while(kazu<50)
{
printf("%d\n",&kazu);
kazu=kazu+1;
}
を実行して、1と2を入力したら、
1
2
1245052
1245052
1245052
1245052
.
.
.
と出てきた。
ちなみにMicrosoft Visual C++(Win32?)使用。
0008デフォルトの名無しさん
2005/05/24(火) 16:28:17mainの"}"が(ry
printf("%d\n",&kazu);
0009デフォルトの名無しさん
2005/05/24(火) 16:29:02void main(void)
printf("%d\n",&kazu);
ここ。
0010↓どこがおかしい?
2005/05/24(火) 16:29:530011デフォルトの名無しさん
2005/05/24(火) 16:32:13・void main(void)は間違い。
・scanf("%d\n",&kazu);の\nは冗長。
・printf("%d\n",&kazu);の&kazuは間違い。
・中括弧の対応があっていない。
0012デフォルトの名無しさん
2005/05/24(火) 16:34:5000137
2005/05/24(火) 16:35:260014デフォルトの名無しさん
2005/05/24(火) 16:38:240015デフォルトの名無しさん
2005/05/24(火) 16:38:53規格に則ってないから。
0016デフォルトの名無しさん
2005/05/24(火) 16:40:57テンプレ読めといえば一旦は片付くのかも。
情報の後だし禁止は入れてほしい。
あと、その後どうなったかもできれば報告してほしいなー。
0017デフォルトの名無しさん
2005/05/24(火) 16:44:05main の型を void で定義したら先輩に怒られた。
A
ANSI Cでは main 関数の型は int と決められています。 void とするのは間違いです。
にも関らず、ある種の参考書には main の型を void として説明しているようです。
また、初心者に限らず熟練したプログラマーがこのように書くことが珍しくありません。
このため、特に初心者のプログラマーは何も考えずに(あるいは特に決まった値を戻す必要がないと思って)
main の型を void にしてしまうことがありますが、ネットではこれは非難の対象になりがちです。
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa6.html
0018デフォルトの名無しさん
2005/05/24(火) 16:45:22後だし禁止って、全文書けって事じゃないのか?
00197
2005/05/24(火) 16:46:170020デフォルトの名無しさん
2005/05/24(火) 16:51:57日本語も読めないのか?どこの国の人間だよ
0021デフォルトの名無しさん
2005/05/24(火) 16:52:44Cを勉強したいならコッチへ
【初心者歓迎】C/C++室 Ver.17【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1115958601/
0023デフォルトの名無しさん
2005/05/24(火) 16:53:52「関数の型」ってのが分からないんだと思うぞ
0024デフォルトの名無しさん
2005/05/24(火) 16:54:14だから、日本語も読めないのかと聞いている。
002516
2005/05/24(火) 16:56:06書いてあったな。すまん。
0026デフォルトの名無しさん
2005/05/24(火) 17:16:49[1] 授業単元: プログラミング1
[2] 問題文:
■■ネットワークプログラミング■■
2台のマシン(tokiとken)でソケットを用いた通信を行ってもらいます.
以下に送信側と受信側の動作を説明します.
・送信側
アルファベットのみで構成された文字列を1文字ずつ読み込みます(任意のファ
イルから文字列を読み込んでもよい).
そして,シーケンス番号と共に構造体に格納し,ソケットを用いて受信側に
送信する.
・受信側
受信したデータををAckとして,シーケンス番号と受信した文字を変換した
小文字なら大文字に,大文字なら小文字に)文字を構造体に格納し,送信側へ
送信する.
送信側では,受信用プロセスと,送信用プロセスを用意してください.
通信には,UDPを用い,ポート番号は1万+学籍番号の下3桁(10111など)と
2万+学籍番号の下3桁(20111など)を使ってください.
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:5月26日まで
よろしくお願いします。
0027デフォルトの名無しさん
2005/05/24(火) 17:18:23前スレをちゃんと読め。それとも回答者はシカトか?
0028デフォルトの名無しさん
2005/05/24(火) 17:19:07最低だな
0029前スレ193
2005/05/24(火) 17:25:570030デフォルトの名無しさん
2005/05/24(火) 17:38:21[2] 問題文: 自然数nを入力して受け付けて、さらにn個の整数を入力として
受け付ける。入力として受け付けたn個の整数を、受け付けた順とは逆順に
出力せよ。ただし、n>=0、n<=256であることを仮定してよい。
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ(バージョン):VC++
[3.3] 言語:C++
[4] 期限:今日中にどうかよろしくおねがいします。
初歩的な問題で申し訳ありません。
0031デフォルトの名無しさん
2005/05/24(火) 17:43:42#include <stdio.h>
int main(void)
{
int a[255],i=0,n=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=n-1;i>=0;i--){
printf("%d",a[i]);
}
return 0;
}
003231
2005/05/24(火) 17:45:10×:int a[255],i=0,n=0;
○:int a[256],i=0,n=0;
>>30
あと、細かい部分は自分でやってね
0033デフォルトの名無しさん
2005/05/24(火) 17:46:17オチツケ。
a[256]じゃないとマズかろう。
0034デフォルトの名無しさん
2005/05/24(火) 17:50:03すばやい回答をありがとうございました。
すごく助かりました。
0035デフォルトの名無しさん
2005/05/24(火) 17:55:26#include <stdio.h>
#include <stdlib.h>
void print(int n)
{
if (n) {
int val;
scanf("%d", & val);
print(n - 1);
printf("%d\n", val);
}
}
int main()
{
int n = 0;
scanf("%d", & n);
print(n);
return 0;
}
0036デフォルトの名無しさん
2005/05/24(火) 18:01:17とりあえずもちつけ
0037デフォルトの名無しさん
2005/05/24(火) 18:10:27再起が使いたい年頃なのさ。目を瞑ってやれ。
0038デフォルトの名無しさん
2005/05/24(火) 18:23:26自分の精液でも飲んでろってこった。
0039デフォルトの名無しさん
2005/05/24(火) 18:24:11再帰的なオナニー?
0040デフォルトの名無しさん
2005/05/24(火) 18:41:13while(1)
{
semen = onane(side_dish);
drink(semen);
}
0041デフォルトの名無しさん
2005/05/24(火) 18:48:31再帰版の一つのメリットはサイズの制限がスタックにのみ依存することだがね。
>35は別に無理矢理とは思わないけどなぁ。
#再帰的発想方法ができない人には辛かろうが、そうでない人には自然な発想だと思うし。
0042デフォルトの名無しさん
2005/05/24(火) 18:48:42{
while(1){
if(rand()%3==1)
ona(2D_onechan);
else if(rand()%3==2)
ona(2D_imouto);
else
ona(3D_youjo);
}
}
0043デフォルトの名無しさん
2005/05/24(火) 18:49:21[2] 問題文(含コード&リンク): 1以上100以下の整数のうち2または7の倍数であるが、
3の倍数ではない数を出力し、いくつあるか数える
プログラムを作成しなさい。また出力は5個ごとに
改行すること。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年5月29日
[5] その他の制限: for を使うところまで一応習いました
まだまだド素人ですが教えていただけるとうれしいです。
0044デフォルトの名無しさん
2005/05/24(火) 18:51:15テラワロスwww
0045デフォルトの名無しさん
2005/05/24(火) 19:02:07#include<stdio.h>
int main(){
int i,j=0;
for(i=0;i<100;i+=7){
if(i%3 != 0){
printf("%d",i);
if(++j%5==0)printf("\n");
else printf(" ");
}
}
return 0;
}
0046デフォルトの名無しさん
2005/05/24(火) 19:06:30なんか違うような希ガス
0047デフォルトの名無しさん
2005/05/24(火) 19:07:15数えた結果は出力しろとはかかれていないが一応出力してみた。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ic;
int cnt = 0;
for (ic = 1; ic <= 100; ++ic) {
if ((ic % 2 == 0 || ic % 7 == 0) && ic % 3 != 0) {
++cnt;
printf("%d", ic);
putchar(cnt % 5 == 0 ? '\n' : ' ');
}
}
printf("\n%d\n", cnt);
return 0;
}
これは再帰で書きようがないだろうなぁ。
004845
2005/05/24(火) 19:07:17#include<stdio.h>
int main(){
int i,j=0;
for(i=1;i<=100;++i){
if((i%2==0 || i%7==0) && i%3!=0){
printf("%d",i);
if(++j%5==0)printf("\n");
else printf(" ");
}
}
return 0;
}
004945
2005/05/24(火) 19:08:460050デフォルトの名無しさん
2005/05/24(火) 19:09:58カウントはしてるじゃん。カウントはw
0051デフォルトの名無しさん
2005/05/24(火) 19:15:22スタックって小さいよ。ヒープとかの方がずっと大きい。
出題者もたぶん再帰を使って書くのは意図していないと思う。最大入力数に制限をつけているあたり。
それにC/C++では再帰はあまり使われないから、いざ使うとなるとみんな珍しがる。(んで異質だから叩くと)
0052デフォルトの名無しさん
2005/05/24(火) 19:21:45スタックサイズが環境依存だからなぁ。
でかい配列も関数内ではとりずらい。
(いや、マニュアル読めってのは当然だが)
0053デフォルトの名無しさん
2005/05/24(火) 19:23:51簡単にクイックソートを実装したいときに使うし。
0054デフォルトの名無しさん
2005/05/24(火) 19:34:35再起を使用して然るべき問題ならば誰も何も言いはせぬ。
0055デフォルトの名無しさん
2005/05/24(火) 21:24:20#include <stdio.h>
void f(int i, int n) {
if (i == 300)
printf("\n%d\n", n);
else {
int j = i % 100;
if ((j % 2 || j % 7 == 6) && j % 3 != 2)
printf("%d%c", j + 1, ++n % 5 ? ' ' : '\n');
f(i + 3, n);
}
}
int main() {
f(0, 0);
return 0;
}
0056デフォルトの名無しさん
2005/05/24(火) 23:10:41もう回答はでてるのでわかり易さを重視してみた。
#include <stdio.h>
#define NumMax (100)
#define LFN (5)
int main(){
char Num[NumMax+1];
int i,j=0;
for(i=0;i<=NumMax;i++){
Num[i]=0;
}
for(i=0;i<=NumMax;i +=2){
Num[i]=1;
}
for(i=0;i<=NumMax;i +=7){
Num[i]=1;
}
for(i=0;i<=NumMax;i +=3){
Num[i]=-1;
}
for(i=0;i<=NumMax;i++){
if(Num[i]==1){
printf("%3d ",i);
if(j % LFN == LFN-1){
printf("\n");
}
j++;
}
}
printf("\n");
return 0;
}
0057デフォルトの名無しさん
2005/05/25(水) 01:49:58情報処理概論�T
〔2〕問題文(含コード&リンク)
秒単位で表現された時間をよみこみ、時間、分、秒の単位に変換して
結果を出力するプログラムを作りなさい
3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年5月30日まで
[5] その他の制限:whileを途中まで習いました
初歩的ですみません;どうぞよろしくお願いします。
0058デフォルトの名無しさん
2005/05/25(水) 01:54:02その秒とは1970年1月1日00:00:00からの経過時間か?
よみこむってどこから?
0059デフォルトの名無しさん
2005/05/25(水) 02:03:40こういうことかい?
006059
2005/05/25(水) 02:04:00#include <stdio.h>
int main(void) {
int t, h, m, s;
printf("input time:"); scanf("%d", &t);
h = t / 3600; t -= h * 3600;
m = t / 60; t -= m * 60;
s = t;
printf("%dh %dmin %dsec", h, m, s);
return 0;
}
0061デフォルトの名無しさん
2005/05/25(水) 09:00:42[2] 問題文:
適当な英単語がいくつか入っているchar型の2次元配列を作って、
それがローマ字であればそのままで、ローマ字以外であればNULLで埋めて別の配列に入れる。例えば…
word[0]="nagoya"→そのままout[0]へ
word[1]="this"→thiまではいいがsが適合しないので消してout[1]へ
word[2]="pen"→そのままout[2]へ
という具合です。よろしくお願いします。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ:gcc
[3.3] 言語:C
[4] 期限:今週中
[5] その他の制限:ポインタ習ってません。
006261
2005/05/25(水) 09:11:42○ word[1]="this"→thiまではいいがsが適合しないので全て消してout[1]へ
の間違いでした。なおローマ字表は
http://www.tax-pro.co.jp/u-mas/roman.htm
です。ただ数が多いので一部を示していただけるだけでもちろん充分です。
006361
2005/05/25(水) 09:22:24格納する際、英文字のままでなくローマ字規則に従って日本語化ってできますか?
できるならその方がありがたいです。
0064デフォルトの名無しさん
2005/05/25(水) 09:28:40それ、真面目に考えるとかなりめんどいぞ。
・word[1]を消すのではなく、out[1]をナル文字で埋めればいいのかな?
・'の扱いはどうする?
・促音はどこまで許容?
・ポインタを習っていないと言うが、ポインタの概念なしに配列操作はできないのだが。
・例えばsprintf(), strcpy()などは使っていいのか悪いのか。
まぁ、真面目に解析するとかなに置き換える一歩手前まで作らなきゃならんからカナ化はできるだろうけど。
いずれにしても、ただの宿題じゃないだろ、それ。
006561
2005/05/25(水) 09:40:44そうです。wordを元にoutをいじっていくことになります。分かり辛く申し訳ないです。
・'の扱いはどうする?
う〜ん…ややこしいのでないことにしてください。>>61の例文の範囲でお願いします。
・促音はどこまで許容?
ぎゃ(gya)は使っても、ゃ(xya)を単独でローマ字として使うことは一般的にありませんので、
ぁぃぅぇぉ等は省けます。
・ポインタを習っていないと言うが、ポインタの概念なしに配列操作はできないのだが。
関数を使うとして、入力配列も出力配列も関数に読み込むことで操作できませんか?
word[0][0]=out[0][0]で一文字ずつ読み込むとかで…
・例えばsprintf(), strcpy()などは使っていいのか悪いのか。
現知識では分かりませんが、stdio.h等に初めから入っている関数でしょうか?
それでしたらOKです。
宿題というか、実験の一部になります。とりあえず大学行ってきます。
もしお時間がありましたらどうぞよろしくお願いします。
0066デフォルトの名無しさん
2005/05/25(水) 10:33:42元々余りなかったやる気がさっぱり失せた…
0068デフォルトの名無しさん
2005/05/25(水) 11:22:19http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
の123
こんなもんでいけるだろ。後は自分で理解しろ。
0069デフォルトの名無しさん
2005/05/25(水) 11:44:46/* ローマ字→カナ変換テーブル */
/* char *roma2kana_tb[][2]とかやりたいが・・・ */
char roma2kana_tab[][2][10] = {
/* ローマ字のつづりの長い順で書く */
{ { "gya", "ぎゃ" } },
{ { "ka", "か" } },
{ { "a", "あ" } },
};
/* ローマ→かな変換 ローマ字(in)からかな(out)へ。
文字列全部を変換できればゼロを、つづりがヘンなら非ゼロを返す。
outは十分な大きさを持っていること。効率は重視していない。
バグ:inが長さ0のとき、引数がNULLのときの対処はしていない。
*/
int roma2kana(char *in, char *out)
{
while (*in) {
int i;
for (i = 0; i < sizeof(roma2kana_tab) /sizeof(roma2kana_tab[0]); i++)
if (strncmp(in, roma2kana_tab[i][0], strlen(roma2kana_tab[i][0])) == 0)
goto FOUND;
return -1; /* 見つからなかった */
FOUND:
strcpy(out, roma2kana_tab[i][1]);
in += strlen(roma2kana_tab[i][0]); /* ここ、ポインタ使ってるよねぇ・・・えらい人たすけて */
out += strlen(roma2kana_tab[i][1]);
}
return 0;
}
0070デフォルトの名無しさん
2005/05/25(水) 11:54:08教授が教えてくれるまで待っているつもりか?
自分で調べようとはしないのか?
高校生じゃねぇんだから、甘ったれるなと。
0071デフォルトの名無しさん
2005/05/25(水) 12:01:54>>984
>>986
ありがとうございます。しかっり見ないでまた書き込みました。
すいません。
0072デフォルトの名無しさん
2005/05/25(水) 12:03:44[1] 授業単元:シミュレーション
[2] 問題文(含コード&リンク):
二人のプレイヤーABが交互に四個ずつ将棋の駒を転がし、1000点を目指し競う。
表裏になれば1点、横になれば5点、縦になれば10点、逆立ちすれば20点の得点で
それぞれの確率は表40%、裏40%、横10%、縦6%、逆立ち4%である。
一回の勝負毎にどちらが勝ったかを表示させ何回で勝負がついたか、その時ABの得点はそれぞれいくらかも表示させる
[3] 環境
[3.1] OS:xp
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:明日
お願いします。
0073デフォルトの名無しさん
2005/05/25(水) 12:09:42[2] 問題文(含コード&リンク):
型tの二つの引数を交換するマクロswap(t,x,y)を定義しなさい。
このマクロはブロック構造を使い、swap(double,one,two)に対して,
以下のような出力が得られるものとする。
Cのコンパイラgccは-Eオプションを付けてソースファイルをコンパイルすると
プリプロセッサの処理までを行い、
結果を標準出力に出力する。
これを利用して正しく展開されることを確かめなさい。
{
double temp;
temp = one;
one = two;
two = temp;
}
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc なのか。。。?
[3.3] 言語:C
[4] 期限:5月27日10時まで
0074デフォルトの名無しさん
2005/05/25(水) 12:21:00>>73
#endif
0075デフォルトの名無しさん
2005/05/25(水) 12:21:58#define swap(t, x, y) \
{\
t temp;\
temp = x;\
x = y;\
y = temp;\
}
/* 別にプリプロセッサの確認だけならmain作らんでもよかろ */
swap(double, one, two)
0076デフォルトの名無しさん
2005/05/25(水) 12:49:02http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/461.c
面白かったから、kan'inやthimpoにも対応してみた。
0077デフォルトの名無しさん
2005/05/25(水) 12:50:22俺は61じゃないけど…大卒にコンプレックスでもあるのか?お前
007876
2005/05/25(水) 12:54:51・#include <string.h>を追加
・mainの定義をint main(void)...に変更
でよろしく。
0079デフォルトの名無しさん
2005/05/25(水) 13:03:19学ぶ気力などないわ。
0080デフォルトの名無しさん
2005/05/25(水) 13:05:57[1] 授業単元:プログラミング�T
[2] 問題文(含コード&リンク):逐次検索のプログラムを作りなさい。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):Microsoft Visual C++ 6.0
[3.3] 言語:C
[4] 期限:2005年5月25日20:00まで
[5] その他の制限:下に自分が考えたプログラムとエラーメッセージを
載せますので、どこを直せばよいかお教えください。お願いします。
008170
2005/05/25(水) 13:07:18コンプレックスか・・・そうだな。あるな。
ちゃんと大学卒業してきてプログラムの単位まで取っている奴に
なんで typedef から教えなくちゃならんのかと・・・。
0082デフォルトの名無しさん
2005/05/25(水) 13:09:26どうしてコンプレックスなんて単語が
でてくるんだろう…
008344代26前スレ958、
2005/05/25(水) 13:10:57>>984
>>986
>>実行形式をsender, receiver, reflectorにlnして実行。
>>sender, seceiverがtoki, reflectorがkenな。
実行形式をlnしてっどうゆうことですか?
プログラム2つ必要ではないのですか?
008480
2005/05/25(水) 13:11:03#include <stdlib.h>
#include <time.h>
#define rnd() (1.0 / (RAND_MAX + 1.0)) * rand() * 10
#define X 7
#define DATA 100
#define NOT_FOUND -1
typedef int keytype;
int seqsrch2(keytype X, keytype a[ ], int m, int n);
void showdata(int a[ ], int size);
008580
2005/05/25(水) 13:11:38{
int i;
int d[DATA];
int y;
srand((unsigned) time(NULL));
for (i = 0; i < 5; i++)
{
d[i] = rnd();
}
printf("配列の中身:");
showdata(d, 5);
printf("探索対象:%d\n", X);
printf("探索結果:");
y = seqsrch2(X, d, 0, 6);
if (y != -1)
printf("%d は %d 番目にあります。\n", X, y + 1);
printf("%d はありません。\n", X);
}
008680
2005/05/25(水) 13:12:10{
if (m > n)
return NOT_FOUND;
a[n + 1] = X;
while (a[m] != X)
m++;
if (m <= n)
return m;
return NOT_FOUND;
}
void showdata(int a[ ], int size)
{
int i;
for (i = 0; i < size; i++)
{
printf("%d " , a[i]);
}
printf("\n\n");
}
008780
2005/05/25(水) 13:12:47D:\tikuji.c(11) : error C2143: 構文エラー : '{' が 'constant' の前に必要です。
D:\tikuji.c(11) : error C2059: 構文エラー : ''
D:\tikuji.c(11) : error C2059: 構文エラー : ')'
D:\tikuji.c(25) : warning C4244: '=' : 'double ' から 'int ' に変換しました。データが失われているかもしれません。
D:\tikuji.c(34) : warning C4013: 関数 'seqsrch2' は定義されていません。int 型の値を返す外部関数と見なします。
D:\tikuji.c(40) : error C2143: 構文エラー : ')' が 'constant' の前に必要です。
D:\tikuji.c(40) : error C2143: 構文エラー : '{' が 'constant' の前に必要です。
D:\tikuji.c(40) : error C2059: 構文エラー : ''
D:\tikuji.c(40) : error C2059: 構文エラー : ')'
どうかお願いします。
0088デフォルトの名無しさん
2005/05/25(水) 13:19:58宿題丸投げスレのここで説教垂れてる>>70が滑稽だからだろ。
0089デフォルトの名無しさん
2005/05/25(水) 13:20:34int seqsrch2(keytype X, keytype a[ ], int m, int n);
のXはマクロで既に定義されてあるので、変数としては使えない。
0090デフォルトの名無しさん
2005/05/25(水) 13:22:56[2] 問題文(含コード&リンク):
>>73
上記の問題で定義したマクロは、引数にtempswap(double,temp,temp1)
に対しては正しいプログラムとはならない。
このような場合でも正しいプログラムに展開されるようにマクロの定義を
変更しなさい。(##を使用する。)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc ?
[3.3] 言語:C
[4] 期限:5月27日10時まで
0091デフォルトの名無しさん
2005/05/25(水) 13:24:47#include <stdio.h>
#include <stdlib.h>
/* [0,1)の乱数 */
double random(void) { return rand() / (MAX_RAND + 1.0); }
/* 確率に従い得点を求める */
int point(void) {double r = random(); return (r < 0.8) ? 1 : (r < 0.9) ? 5 : (r < 0.96) ? 10 : 20; }
/* なんか疲れてきた */
int main(void)
{
int score[2] = {0};
int player = 1;
do {
player ^= 1;
score[player] += point() + point() + point() + point();
} while (score[player] < 1000);
printf("%c の勝ち(A %d, B %d)\n", "AB"[player], score[0], score[1]);
return 0;
}
0092デフォルトの名無しさん
2005/05/25(水) 13:24:53[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
>>73
上記の問題で定義したマクロは、引数にtempと言う変数が渡される
swap(double,temp,temp1)に対しては正しいプログラムとはならない。
このような場合でも正しいプログラムに展開されるようにマクロの定義を
変更しなさい。(##を使用する。)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc ?
[3.3] 言語:C
[4] 期限:5月27日10時まで
0093デフォルトの名無しさん
2005/05/25(水) 13:32:10[2] 問題文
クラスN人の試験の点数を配列grade〔 〕に
格納し、総和平均を求めよ。
さらに最高点、最低点を求められるようにせよ、
最高点の人の番号も出るようにせよ、
[3] 環境
[3.1] OS:UNIX FreeBSD
[3.2] コンパイラ(バージョン):gcc なのか。。。?
[3.3] 言語:C
[4] 期限:6月1日午後6時
配列を習ったときに出た問題なのですが・・・・
いまいちわかりません、よろしくお願いします。m( )m
0095デフォルトの名無しさん
2005/05/25(水) 13:36:02複数行で書くとどうなりますか?
009680
2005/05/25(水) 13:39:26ありがとうございます。
2つの「keytype X」を削除してコンパイルしましたら、
実行ファイルまで作れました。
しかし、すぐに「問題が発生したためtikuji.exeを終了します。」
と表示されるのですが、どういうことでしょうか?
なにかまずいことでもしてしまったのでしょうか?
教えてください。
0097デフォルトの名無しさん
2005/05/25(水) 13:39:32あー。これではエラーがでるかswap(int, i, f)とかで。
まあいいか、だれか、直しておいて。
複数行でどう書くかは前に書いた方法参照。(めんどいのよ)
>>94 配列って、最初からデータ入ってます?
(個人的興味からだけれど・・・教科書おしえてください)
0098デフォルトの名無しさん
2005/05/25(水) 13:39:43b.c:3: 文法エラー が '{' トークンの前にあります
b.c:5: `x' がここでは定義されていません (関数の中ではない)
b.c:5: 警告: データ定義が型や記憶クラスを持っていません
b.c:6: `y' がここでは定義されていません (関数の中ではない)
b.c:6: 警告: データ定義が型や記憶クラスを持っていません
b.c:7: 初期化子の要素が定数ではありません
b.c:7: 警告: データ定義が型や記憶クラスを持っていません
b.c:8: 文法エラー が '}' トークンの前にあります
0099デフォルトの名無しさん
2005/05/25(水) 13:41:330100デフォルトの名無しさん
2005/05/25(水) 13:44:090101デフォルトの名無しさん
2005/05/25(水) 13:45:00ドアホウ!keytype Xは関数の中で使ってるじゃないか。
マクロのXか変数のXとどっちか名前を変えろって
いってんだよ。
0102デフォルトの名無しさん
2005/05/25(水) 13:47:17[2] 問題文(含コード&リンク):
3] 環境
[3.1] OS:Win2000
[3.2] コンパイラ(バージョン):VC++
[3.3] 言語:C++
まず自分で以下のような入力ファイルを作成。
004 東京 20050524 00001 東京商店 15000
003 横浜 20050321 00002 横浜商店 20000
002 千葉 20050103 00001 東京商店 30000
004 東京 20050603 00003 関東商事 50000
.
.
.
.
左から、支点コード、支店名、販売日、販売先コード、販売先名、売上金額
ファイルの中身はソートされていない。
販売日と売上金額はint型、その他はchar型。
このファイルを読み込み、バブルソートを行い、新たに出力ファイルを
作成し、そのファイルにソートしたものを出力。
その際、mallocでメモリを確保すること。
入力ファイルを構造体と考えて、mallocでメモリを確保するらしいのですが
ポインタが良く分かっていないので、まったくできません。
どなたかお願いします。
教科書はないですね、講師が黒板に説明を延々と書いていく授業です。
0104デフォルトの名無しさん
2005/05/25(水) 13:50:03結果を標準出力に出力しないといけないんですけど?
0105デフォルトの名無しさん
2005/05/25(水) 13:50:12>>97
ほらよ
# define swap(type, x, y) \
do{ \
type temp ## x ## y = x; \
x = y; \
y = temp ## x ## y; \
}while(0) \
/**/
0106デフォルトの名無しさん
2005/05/25(水) 13:57:09gcc -E でプリプロセッサ出力を得れば、後はコンパイルする必要ないんだろ?
0107デフォルトの名無しさん
2005/05/25(水) 14:06:31[2] 問題文(含コード&リンク):
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0)
n = -n;
i = 0;
do {
s[i++] = n % 10 + '\0';
} while ((n /= 10) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
void reverse(char s[])
{int c, i, j;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}}
上記のitoaに変更を加え、符号無し整数nをb進数の文字表現に変更し、
sに格納する関数itob(n,s,b)を記述しなさい。bの値の範囲は2から36
までとし、10以上の数にはアルファベットを使用しなさい。
(数字とアルファベット26文字で36進数まで扱える)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc ?
[3.3] 言語:C
[4] 期限:5月27日10時まで
010880
2005/05/25(水) 14:08:37すみません。本当にドアホウです。
変数のほうのXをzに変えましたが、それでも出てきます。
どうしたらいいでしょうか?
int seqsrch2(keytype x, keytype a[ ], int m, int n)
{
・・・
}
は「C言語による最新アルゴリズム事典」に載っていたものを
使いました。
それで、探す数字を7にしたくてマクロで定義したのです。
訳も分からずプログラムを書いているドアホですみません。
0109デフォルトの名無しさん
2005/05/25(水) 14:09:20[2] 問題文:
ユーザーに 正の整数 n を入力してもらい、その階乗 n! を求めるプログラムを作成せよ。
階乗は、
n! = n * (n-1) * (n-2) * .... * 3 * 2 * 1
= 1 * 2 * 3 * 4 * ... * (n-1) * n
で定義される。 たとえば、n = 5 のときは 5 * 4 * 3 * 2 * 1 = 120 となる
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:制御構造(繰り返し)まで習いました。
どなたかご教授お願いします。
0110デフォルトの名無しさん
2005/05/25(水) 14:10:55> s[i++] = n % 10 + '\0';
は
> s[i++] = n % 10 + '0';
の間違いか?
0111デフォルトの名無しさん
2005/05/25(水) 14:10:560112デフォルトの名無しさん
2005/05/25(水) 14:11:58>>106
{
t temp;
temp = x;
x = y;
y = temp;
}
としか出力されませんが?
{
double temp;
temp = one;
one = two;
two = temp;
}
と出力されて欲しいのですが
0113デフォルトの名無しさん
2005/05/25(水) 14:15:09s[i] = '\0';
\はバックスラッシュです。
0114デフォルトの名無しさん
2005/05/25(水) 14:23:09static const char scpcCaraTable[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void itoa( int n, int b, char s[] )
{
int i, sign;
if ( ( sign = n ) < 0 ) n = -n;
i = 0;
do {
s[ i++ ] = scpcCaraTable[ n % b ];
} while ( ( n /= b ) > 0);
if ( sign < 0 ) s[ i++ ] = '-';
s[ i ] = '\0';
reverse( s );
}
0115デフォルトの名無しさん
2005/05/25(水) 14:23:25どもです。でも
syogi-k.c:5: error: conflicting types for `random'
c:/language/djgpp/include/stdlib.h:121: error: previous declaration of `random
syogi-k.c: In function `random':
syogi-k.c:5: error: `MAX_RAND' undeclared (first use in this function)
syogi-k.c:5: error: (Each undeclared identifier is reported only once
syogi-k.c:5: error: for each function it appears in.)
なんかこんなエラーが出ました_no
0116デフォルトの名無しさん
2005/05/25(水) 14:27:29ありがとうございます。
できればmainの書き方も教えてください。
0117デフォルトの名無しさん
2005/05/25(水) 14:27:50関数名がrandomじゃねー。
0118デフォルトの名無しさん
2005/05/25(水) 14:40:28/* [0,1)の乱数 */
double my_random(void) { return rand() / (RAND_MAX + 1.0); }
/* 確率に従い得点を求める */
int point(void) {double r = my_random(); return (r < 0.8) ? 1 : (r < 0.9) ? 5 : (r < 0.96) ? 10 : 20; }
0119デフォルトの名無しさん
2005/05/25(水) 14:48:40#include <stdio.h>
#include <string.h>
void itoa( int n, int b, char s[] );
void reverse( char s[] );
static const char scpcCaraTable[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int main( void ) {
char iScore[ 40 ];
itoa( 10000000, 2, iScore );
printf( "%s\n", iScore );
return ( 0 );
}
void itoa( int n, int b, char s[] ) {
int i, sign;
if ( ( sign = n ) < 0 ) n = -n;
i = 0; do { s[ i++ ] = scpcCaraTable[ n % b ]; } while ( ( n /= b ) > 0);
if ( sign < 0 ) s[ i++ ] = '-';
s[ i ] = '\0'; reverse( s );
}
void reverse( char s[] ) {
int c, i, j;
for ( i = 0, j = strlen( s ) - 1; i < j; i++, j-- ) { c = s[ i ]; s[ i] = s[ j ]; s[ j ] = c; }
}
0120デフォルトの名無しさん
2005/05/25(水) 15:09:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/462.c
0121デフォルトの名無しさん
2005/05/25(水) 15:10:27>84-86のソースで、>86の文だけ'X'を'x'とでもしてみろ。
>>73
>75を適当なファイル(仮にfoo.c)に保存し、gcc -Eを実行(先の例ではgcc -E foo.c)してみたか?
それでも>112のように出力されるのか?
>>107
直接宿題には関係ないが、>113は>110の質問の回答になってないぞ。
0122デフォルトの名無しさん
2005/05/25(水) 15:13:17出題者に減点。
0123デフォルトの名無しさん
2005/05/25(水) 15:20:39あぁエラーなくいけました。ついでに
>>一回の勝負毎にどちらが勝ったかを表示させ何回で勝負がついたか
の部分はどこに何を追加すればいいんでしょうか…。
0124デフォルトの名無しさん
2005/05/25(水) 15:23:57lnコマンドしらんのか? man lnして味噌。
0125デフォルトの名無しさん
2005/05/25(水) 15:26:140126デフォルトの名無しさん
2005/05/25(水) 15:28:210127デフォルトの名無しさん
2005/05/25(水) 15:31:48の続きに、
if (player == 1) {
print1Turn(score);
}
とでもしておき、
void print1Turn(int * score)
{
printf("現時点で");
if (score[0] < score[1]) {
printf("Bがリード\n");
} else if (score[0] > score[1]) {
printf("Aがリード\n");
} else {
printf("両者タイ\n");
}
を追加すれば経過表示はできるだろ。
あーでも、最終ターンで同時に1000超えたらどうするんだろ。
まぁ頑張れw>>123
0128デフォルトの名無しさん
2005/05/25(水) 16:07:08thxです。少しだけ変えて何とか提出できる形になりました。
0129デフォルトの名無しさん
2005/05/25(水) 17:03:110130デフォルトの名無しさん
2005/05/25(水) 17:28:30再帰をならってないなら、Fact2をだすとよいと思う。
#include <stdio.h>
unsigned int Fact(unsigned int n){
if(n==1) return 1;
return Fact(n-1)*n;
}
unsigned int Fact2(unsigned int n){
unsigned int i=0;
unsigned int val=1;
for(i=1;i<=n;i++){
val *= i;
}
return val;
}
int main(){
unsigned int val;
val=Fact2(5);
printf("%d",val);
return 0;
}
0131デフォルトの名無しさん
2005/05/25(水) 17:46:35使用すると、
「外部参照3が未解決です」やメンバ関数に対して、未解決のシンボルが参照されました、というような
エラーが消えません。
ちなみに、
template <class data_t> class TList
を
/*template <class data_t>*/ class TList
にして、
data_t型のメンバを全部int型にして、テンプレートクラスではなく、int型にしか使えない
リストクラスとして使用すると期待通りの動きをします。
一体何が原因でリンクエラーが起こるのでしょうか?
0132デフォルトの名無しさん
2005/05/25(水) 18:08:06#include <stdio.h>
#define N (10)
#define Max(a,b) ((a>b)? a:b)/*aとbのうち大きい方を返すマクロ。3項演算子*/
#define Min(a,b) ((a>b)? b:a)/*aとbのうち小さい方を返すマクロ*/
int main(){
int grade[N];
int i=0,top=0,min,max,ave,all;
printf("input... grade[%d]\n",N);
for(i=0;i<N;i++){
scanf("%d",&grade[i]);
}
puts("input end");
min= grade[0];/*最初の値を閾値とする。*/
max= grade[0];/*同上*/
all=0;
for(i=0;i<N;i++){
if(grade[top]<grade[i]){/*topの位置とiの位置とで中身の大きい方の位置をtopに記録*/
top=i;
}
min=Min(min,grade[i]);/*最小を記録*/
max=Max(max,grade[i]);/*最大を記録*/
all+=grade[i];/*総和を出す。*/
}
ave = all / N;/*平均値を出す。*/
printf("最大:%d\n最小:%d\n合計:%d\n平均%d\n最高値は%d番目でした。\n",max,min,all,ave,top+1);
return 0;
}
0133デフォルトの名無しさん
2005/05/25(水) 18:10:44VCしか知らないが、
ヘッダとソースを分けるとそういうエラーに悩まされることがある。
ヘッダにじか書きすると消えると思う。
0134デフォルトの名無しさん
2005/05/25(水) 18:15:500135デフォルトの名無しさん
2005/05/25(水) 18:16:22ありがとう!
既に解決してたけど、感謝するよ!
0136デフォルトの名無しさん
2005/05/25(水) 18:17:55重たいと思う。VCとかでステップ実行すればわかるけど、すっごい深いところまで潜らないとデータにアクセスできなかったりする。
0137デフォルトの名無しさん
2005/05/25(水) 18:21:26そりゃ良かった。;)
0138デフォルトの名無しさん
2005/05/25(水) 18:30:16[2] 問題文(含コード&リンク):浮動小数点型データを5個入力して、最大値、最小値、平均を求めよ。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年05月26日1:30まで
0139デフォルトの名無しさん
2005/05/25(水) 18:31:430140デフォルトの名無しさん
2005/05/25(水) 18:35:06[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/463.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:5月30日まで
[5] その他の制限:特に無し
頭を抱えてもう十数時間・・・自分の貧弱頭ではもう限界ですorz
ご指南よろしくおねがいします。
0141デフォルトの名無しさん
2005/05/25(水) 19:08:24ぜってぇメンテナンスしたくないコードだな。
0142デフォルトの名無しさん
2005/05/25(水) 19:10:02コンパイルは通していない。
筋はあってると思うのであとは旨くやってくれ。
/*グローバル変数。*/
static Digit *NotUse;
void freenum(Digit *in){/*渡されるデータの構造はリングリストを前提にしている。*/
if(NotUse == NULL){
NotUse=in;
return;
}
NotUse->prev->next = in->next;
in->next->prev = NotUse->prev;
NotUse->prev=in;
in->next = Notuse;
return;
}
Digit *newdigit(void){
Digit *a;
if(NotUse != NULL){
a=NotUse;
if(NotUse->next != NotUse){
NotUse->next=NotUse->prev->next;
NotUse->prev=NotUse->next->prev;
}
}else{ a=(Digit *)malloc(sizeof(Digit)); }
if(a==NULL)
{
fprintf(stderr, "メモリ不足\n");
exit(1);
}
return a;
}
0144デフォルトの名無しさん
2005/05/25(水) 19:22:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/464.txt
0145デフォルトの名無しさん
2005/05/25(水) 19:26:14[2] 問題文(含コード&リンク):自分の姓名(例”Tarou Koudai”)を表示せよ。
ただし、配列a[]を用いて、これを文字列で初期化し、
1文字づつ出力せよ。さらにポインタpを用いて、同様に1文字づつ出力せよ。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:5月26日 A.M3:00まで できれば早めにお願いします。
レベルは低いと思いますがお願いします。
0146デフォルトの名無しさん
2005/05/25(水) 19:30:47#include <stdio.h>
#include <string.h>
int main()
{
const char a[] = "hoge";
const char *p = a;
int i, length = strlen(a);
for (int i = 0; i < length; i++)
putchar(a[i]);
putchar('\n');
while (*p++)
putchar(*p);
return 0;
}
0147デフォルトの名無しさん
2005/05/25(水) 19:32:47http://pc8.2ch.net/test/read.cgi/tech/1115794784/919-926
同じ学校の生徒?
その学校やばくない?
0148デフォルトの名無しさん
2005/05/25(水) 19:37:02課題2問出た?
0149デフォルトの名無しさん
2005/05/25(水) 19:46:23>while (*p++)
なのに
>for (int i = 0; i < length; i++)
0150デフォルトの名無しさん
2005/05/25(水) 19:49:28[2] 問題文(含コード&リンク):
double型の変数をchar型の変数[文字列]に変更する関数について考察し、
可能ならば関数[void dtostr(double d,char str[])]を作成せよ
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):VC++
[3.3] 言語:C
[4] 期限:2005年5月31日まで
[5] その他の制限:ポインタ、標準関数使用不可。
可能不可能だけでも、お願いします。
0151デフォルトの名無しさん
2005/05/25(水) 19:51:15>[2] 問題文(含コード&リンク):
>double型の変数をchar型の変数[文字列]に変更する関数について考察し、
>可能ならば関数[void dtostr(double d,char str[])]を作成せよ
不可能
0152デフォルトの名無しさん
2005/05/25(水) 19:59:550153デフォルトの名無しさん
2005/05/25(水) 20:00:47たとえば
double var;
ならば「double型の変数」とはvarを指す。
この場合「char型の変数[文字列]に変更」では"var"に変更することを指し、
「void dtostr(double d,char str[])」という関数の作成は不可能と判断する。
0154長いんで分割します
2005/05/25(水) 20:14:04[2] 問題文(含コード&リンク):
整数値を扱うための線形連結リストにおいて、セルの挿入、削除を行う関数を定義し
それを利用して標準入力から入力されたデータが小さい順に並ぶようにリストにセルを挿入し、
完成したリストの内容を標準出力に出力せよ。実行結果として、以下のデータを入力した結果を示すこと。
4 1 7 9 0 6 3 5 8 2
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年5月27日まで
[5] その他の制限:セルの定義、挿入、削除の関数は以下のものを利用すること。
/*セルの定義*/
struct cell {
int value;
struct cell *next;
};
0155150
2005/05/25(水) 20:14:56double型の変数dとcharの文字列strを引数とし、
dの値を文字列に変換して、strに代入する関数を作りなさい。
です。
授業中にunsigned int版をやったとき、
そういう関数が正解だったので。
わかりにくく書いてすいません。
0156& ◆D71jwTqGtw
2005/05/25(水) 20:15:59void insert_cell(struct cell **pointer, int new_value)
{
struct cell *new_cell;
new_cell = (struct cell *)malloc(sizeof(struct cell));
new_cell->value = new_value;
new_cell->next = *pointer;
*pointer = new_cell;
}
/*削除関数*/
void delete_cell(struct cell **pointer)
{
struct cell *target;
target = *pointer;
*pointer = target->next;
free((void *)target);
}
入力する度に昇順になるよう挿入するらしいですがポインタで混乱しまくってます。
よろしくお願いします。
0157デフォルトの名無しさん
2005/05/25(水) 20:18:220158デフォルトの名無しさん
2005/05/25(水) 20:23:54[5] その他の制限:ポインタ、標準関数使用不可。
0159デフォルトの名無しさん
2005/05/25(水) 20:26:52考察
俺には不可能と判断する。
でいいじゃん。
0160デフォルトの名無しさん
2005/05/25(水) 20:29:21関数の引数の char str[] はポインタなので制限によりこの関数は作成不可能。
0161デフォルトの名無しさん
2005/05/25(水) 20:48:35問題だね。
0162デフォルトの名無しさん
2005/05/25(水) 21:37:51アドバイスありがとうございます。
とりあえず自力で書き加えてみましたがやっぱりうまく動いてくれない・・・OTZ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/465.txt
016380
2005/05/25(水) 22:04:14ありがとうございます。
ご指摘通り直したら、ちゃんと問題なくできました。
どうもありがとうございました。
ドアホなので、今から樹海に行きます。
0164150
2005/05/25(水) 22:05:17ポインタは習ってないから使えないけど
この使い方はありということでお願いします。
>>161
宿題では、int型からchar型も出されて、こっちは必須で、自力でといたんですが、
double型は点数欲しければ解けという感じです。
0165デフォルトの名無しさん
2005/05/25(水) 22:08:44重たいと言い切る根拠が勘かよ。
キミが思ってるより、コンパイラは頭いいよ。
0166デフォルトの名無しさん
2005/05/25(水) 22:09:48点数が何だ、そんなことのために君は自分の倫理を貶めたいのか。
必須問題が自力で解けたんなら十分じゃないか。
それは学校の点数なんかよりはるかに価値のあることだぞ。
とか言ってみる。
0167デフォルトの名無しさん
2005/05/25(水) 22:14:130168デフォルトの名無しさん
2005/05/25(水) 22:22:04こんな感じ。
void freenum(Digit *in) {
Digit *p, *next;
for (p = in; p; p = next) {
next = p->next;
p->next = NotUse;
NotUse = p;
}
}
Digit *newdigit(void) {
Digit *a = NotUse;
if (a) {
NotUse = a->next;
}
else {
a = (Digit *)malloc(sizeof(Digit));
if (a == NULL) {
fprintf(stderr, "メモリ不足\n");
exit(1);
}
}
return a;
}
0169デフォルトの名無しさん
2005/05/25(水) 22:23:40だがそれは建前だからなぁ。
いくらそんなこと言ったところで、評価は点数で決まる。
0170デフォルトの名無しさん
2005/05/25(水) 22:29:52[1] 授業単元:C言語
[2] 問題文
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):Microsoft Visual C++
[3.3] 言語:C
[4] 期限:2005年5月26日まで
[5] 問題文は下に書きます
0171デフォルトの名無しさん
2005/05/25(水) 22:34:110172170
2005/05/25(水) 22:35:40#define NONBLANK 'a'
int main()
{
int c, lastc;
lastc = NONBLANK;
while ((c = getchar()) != EOF){
if(c != ' ')
putchar(c);
else if(lastc != ' ')
putchar(c);
lastc = c;
}
return 0;
}
問題 連続で入力されたブランクが何故1つに置き換えられたか説明してください?
0173デフォルトの名無しさん
2005/05/25(水) 22:38:030174デフォルトの名無しさん
2005/05/25(水) 22:40:59回答 連続で入力されたブランクを1つに置き換えるプログラムだから?
0175デフォルトの名無しさん
2005/05/25(水) 22:46:50lastc a □■■■□□□□■■■
0176デフォルトの名無しさん
2005/05/25(水) 22:53:52デバッグめんどかった。
一応動くよ。細かいところはしっかりチェックしてクレイ。
やっぱね、リストの付け替え関数くらいないとバグの元だと思う。
なんかあるたびに付け替え処理書いてるんじゃ自信なくなっちゃう。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/466.txt
0177デフォルトの名無しさん
2005/05/25(水) 22:59:32ご回答ありがとうございます。
頂いたアドバイスを元に理解に勤めたいと思います。
0178デフォルトの名無しさん
2005/05/25(水) 23:05:46フラグ変数であるlastcに空白文字が入っていない時に限り一文字空白を表示するから。
cに空白文字が代入されたとき、されないとき等しくlastcにバックアップを書き込んでいるため。
あと、cに空白文字が入ったときは描画をスキップしているので空白を描画できるソース中のポジションは1個しかない。
まとまりないな。
0180工大花子
2005/05/25(水) 23:36:58[2] 問題文(含コード&リンク): 不動小数点型データを5個入力して、最大値、平均、最小値を求めよ。
[3] 環境
[3.1] OS:Windowsxp
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年5月26日7:00まで
[5] その他の制限:ヨロシクお願いします。
0181デフォルトの名無しさん
2005/05/25(水) 23:38:54残念ながら私の環境では小数点が浮き動く型しか御座いませんのでお力にはなれません
0182工大花子
2005/05/25(水) 23:48:45それでもいいのでお願いします。
0183デフォルトの名無しさん
2005/05/25(水) 23:50:33ちょっとやってみたけど思いのほかめんどい。
浮動小数点数の特定の桁だけ抜き出すのがなかなかうまくいかない。
しばし待たれよ。
0184デフォルトの名無しさん
2005/05/25(水) 23:51:07不動小数点は固定小数点と意訳せずに不動小数点と解釈しましたw
まあ、つっこみはエロイ人よろしく
#include <stdio.h>
int main()
{
int i ;
double v ;
double sum, max, min ;
sum = 0.0 ;
scanf( "%lf", &v ) ;
sum += v ;
max = min = v ;
for( i = 1 ; i < 5 ; i++ ){
scanf( "%lf", &v ) ;
sum += v ;
if( max < v ) max = v ;
if( min > v ) min = v ;
}
printf( "max=%lf,avr=%lf,min=%lf\n", max, sum / 5, min ) ;
return 0;
}
0185デフォルトの名無しさん
2005/05/25(水) 23:52:46X 不動小数点は固定小数点と意訳せずに不動小数点と解釈しましたw
○ 不動小数点は固定小数点と意訳せずに浮動小数点と解釈しましたw
orz...
0186工大花子
2005/05/25(水) 23:53:01本当に助かりました。ありがとうございます。
0187デフォルトの名無しさん
2005/05/26(木) 00:11:06過去レスで似たようなのがあったよ。
convSyouで出力先をchar[]に変えればいいんじゃない
#include <stdio.h>
#include <string.h>
void convSei( int i ){
int mask = 0x40000000 ;
for( ; mask > 0 ; mask /= 2 ){
if( ( mask <= i ) ) putchar( ( mask & i ) ? '1' : '0' ) ;
}
}
void convSyou( double d ){
putchar( '.' ) ;
int i ;
d -= (int)d;
for( i = 0 ; i < 5 ; i++ ){
d *= 2 ;
putchar( ( (int)d & 1 ) ? '1' : '0' ) ;
if( d - (int)d <= 0.0 ) break ;
}
}
int main( int argc, char* argv[] ){
double d ;
sscanf( argv[1], "%lf", &d ) ;
convSei( (int)d ) ;
convSyou( d ) ;
return 0 ;
}
0188デフォルトの名無しさん
2005/05/26(木) 00:41:07ポインタを使わずに、どうやってchar str[]に入れるかが問題
char str[]だけは許されるらしいので
それを、どう上手く解釈してやるかが問題を解くポイントだと思う
0189デフォルトの名無しさん
2005/05/26(木) 00:47:33元の問題には書かれていないが、10進数にするんじゃなかろうか?
そのコードはパッと見2進表示っぽいし、正の小数部分にしか対応してない。
いきなりintへのキャストが入っているのでintに入りきらない値を渡したら変な結果になりそう。
0190デフォルトの名無しさん
2005/05/26(木) 00:57:410191デフォルトの名無しさん
2005/05/26(木) 01:04:05後は10掛けながらintにキャストして整数部分を取って出力して...の繰り返し
これでできると思うけど、すんげえダセえし効率悪そうだな。
でも実数の二進表現って(まあ大抵IEEEだろうが)環境依存だしなあ
0192前スレ922
2005/05/26(木) 01:20:292と3の回答をしてくださった分を教えてください。
0193デフォルトの名無しさん
2005/05/26(木) 01:26:29http://makimo.to/2ch/pc8_tech/1115/1115794784.html
0195デフォルトの名無しさん
2005/05/26(木) 01:37:06二進表現ってことは規定されてるんだっけ?
0196デフォルトの名無しさん
2005/05/26(木) 01:38:45おいおい、真剣みが無い奴だな
0197デフォルトの名無しさん
2005/05/26(木) 01:51:38http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/467.zip
この手の問題はコンピュータ専門のとこだろ。
この程度で行き詰るようなら、進路変更したほうがいいよ。
たぶんまだ若いんだから十分間に合うよ。
0198デフォルトの名無しさん
2005/05/26(木) 02:30:030199デフォルトの名無しさん
2005/05/26(木) 04:13:26その線で逝ってみた。
bcc+bcpadでやってみた。
どこかがまずいらしく、
ときどき
ごごごーとデバガが
あがってくる。
これの129番に貼った。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
0200150
2005/05/26(木) 06:47:12>188
str[i]='0'とかで入れることはできます。
>189,191
一応、10進表示です。
>199
ありがとうございます。、これを元に自分も頑張ってみます。
0201デフォルトの名無しさん
2005/05/26(木) 08:14:050202デフォルトの名無しさん
2005/05/26(木) 08:56:28stdout に 出力すること
0203デフォルトの名無しさん
2005/05/26(木) 11:18:02ありがとうございます。
memcpyを使わないで解く方法はありませんでしょうか?
0204デフォルトの名無しさん
2005/05/26(木) 12:59:35贅沢言うなヴォケ。
後は自分で解け。
0205デフォルトの名無しさん
2005/05/26(木) 13:59:04>>136の説明のどこら辺が勘なのか、頭の悪い俺に教えてくれるかな?
ちなみに、増減する敵キャラlistで管理してループさせたりすると、確実に重いぞ。
それは経験済みだ。
0206デフォルトの名無しさん
2005/05/26(木) 14:06:53じゃあ聞くが、list以外にどんなコンテナを使ったら軽かったんだ?
この問いに答えられないようじゃ、お前さんの妄想と言われても仕方ないな。
0207デフォルトの名無しさん
2005/05/26(木) 14:11:46自作リストだ。最初の質問の流れから言って、自作を引き合いに出すのはナシじゃないだろう?
0208デフォルトの名無しさん
2005/05/26(木) 14:36:47ケッ。脳内自作かよ。せいぜいヲナニーしてろってこった。
0209デフォルトの名無しさん
2005/05/26(木) 14:42:39それまでに入力された数値を総和を出力するプログラム
main()は1文字を入力させて関数count()に渡す
count()は"?"が渡された場合には0、それ以外には1を返し
main()ではその返り値が0の場合に処理を終了させる
数字のカウントと出力はcountで行う
yorosiku
0210デフォルトの名無しさん
2005/05/26(木) 14:57:02減らすときは線形検索しなきゃいけないからちょっと重いが、
追加は先頭または末尾につけるだけなのでそんなに重くないはず。(末尾はそこまで移動させのがちょっとおもいかな。
独自実装なら現在指している場所に挿入とかも可能だし。
これはSTLに限らずそうだとおもうんだが。
コンテナの選択を誤ったってことじゃないだろうか。
0211デフォルトの名無しさん
2005/05/26(木) 14:59:16>yorosiku
イヤダ。
テンプレよんでくれ。
0212デフォルトの名無しさん
2005/05/26(木) 15:26:04#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <cctype>
using namespace std;
namespace kadai {
int count(char ch)
{ static int p;return ch=='?'?0:isdigit(ch)?!!(cout<<(p+=ch-'0')<<endl):1;}
};
int main()
{
find_if(istream_iterator<char>(cin), istream_iterator<char>(),
not1(ptr_fun(kadai::count)));
}
俺って優しいよな。
0214109
2005/05/26(木) 15:47:40>>130
レス遅くなってすいません。
ってか教えてもらうまでもなく、自分でよく考えたら作れました。
どうもありがとうございました。
0215デフォルトの名無しさん
2005/05/26(木) 16:11:05プログラミング言語
[2]問題文(含コード&リンク)
5次式の任意の係数をキーボードより入力し,
F(x)= 0.0 となる x の値を求めよ。
入力した任意の係数及び処理した結果は,
保存ファイルへ出力のこと。A=0 のとき終了,
それ以外は,繰り返しとする。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年5月30日まで
[5] その他の制限:while,for,ifまでは一応なりました。
どうかよろしくお願いします。
0216デフォルトの名無しさん
2005/05/26(木) 16:23:560217デフォルトの名無しさん
2005/05/26(木) 17:15:32〔2〕問題文(含コード&リンク)
入力した文字列(最大20文字)を一度別の関数にうつし、そこで表示せよ。
そして、その文字のa〜z、0〜9の数字の個数を表示せよ。
例 abd2 と打ったら
abd2 ←この表示は別の関数にうつし、そこでpurintfした物
a=1
b=1
c=0
e=0
・
・
・
l=0
2=1
・
・
3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:5月27日
[5] その他の制限:main以外の関数を自分で作れるという事まで習いました。どのような手を使って解いてもいいと言われました。
情報科に入ったのはいいですけど、女子一人のため周りに相談できずC言語厳しいです(´・ω・`)ショボーン
一番最初の形式はわかるのですが、カウントしていく&表示するプログラムがわからないです。
0218デフォルトの名無しさん
2005/05/26(木) 17:46:46要カスタマイズ。
ここでは女子とか言われても対応できないので、早く知人ができるといいね。
#include <stdio.h>
#define DATAMAX (20)
void output(char *data){/*for 7BitAscii*/
char character[128];
int i;
for(i=0;i<128;i++){
character[i]=0;
}
while(* data ) character[* data++]++;/* 添え字の*の横の空白は消しちゃだめ。*/
for(i=0;i<128;i++){
if(i% 5==4){
printf("\n");
}
printf("%d:[%c]:%d ",i,i,character[i]);/*表示部*/
}
printf("\n");
}
int main(){
char buf[DATAMAX+1];
fgets(buf,DATAMAX+1,stdin);
buf[DATAMAX]='\0';
output(buf);
}
0219デフォルトの名無しさん
2005/05/26(木) 17:54:51その手(女性と称する)があるのか!
0220デフォルトの名無しさん
2005/05/26(木) 17:55:37・ここにいる回答者はプログラムが得意であって他の分野に精通しているかはランダムです。
この一文入れてほしいね。
0221デフォルトの名無しさん
2005/05/26(木) 17:58:48数学がわからない者に5次式と漠然といわれても理解できないです。
さらにぐぐるさんが教えてくれないようなのは絶望的。
式プリーズ。式プリーズ。
もしくは参考になるページを・・・。
以上広告の裏でした。
0222デフォルトの名無しさん
2005/05/26(木) 18:00:30人によっては優先順位上がるかもね。
でもここで自称女性がいてもなんもしてやれないし。
あまり意味があるようには思えないが。
0223デフォルトの名無しさん
2005/05/26(木) 18:03:150224デフォルトの名無しさん
2005/05/26(木) 18:07:49すいません、ありがとうございました。
自宅にはC言語のプログラムがないので、明日早朝に学校に行って試してみます。
正直、後半部のプログラムがさっぱりわからないので今日参考書片手に勉強しようと思います。
教科書も先生もvoid main(void)とやっていたのですが、ここのテンプレ見て勉強になりました。
これから色々と勉強していきます(`・ω・´)シャキーン
0225デフォルトの名無しさん
2005/05/26(木) 18:11:425次以上の方程式には代数的な解の公式が存在しないとのこと
近似解を出せってことなのだろうか…?
0226デフォルトの名無しさん
2005/05/26(木) 18:12:06タダで使えるBorland C++ Part4
http://pc8.2ch.net/test/read.cgi/tech/1091066805/
Microsoft Visual C++ Toolkit 2003 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1109618655/
0227デフォルトの名無しさん
2005/05/26(木) 18:23:00>fgets(buf,DATAMAX+1,stdin);
>buf[DATAMAX]='\0';
常套句なんだからもっと自然に書こうよ。つーか、buf[DATAMAX]はないだろ。
--
char * p;
fgets(buf, sizeof(buf), stdin);
/* 末尾の改行を取り除く処理 */
p = strchr(buf, '\n');
if (p) {
* p = '\0';
}
--
それにしても、なんで空白を消しちゃいけないんだろ。
0228デフォルトの名無しさん
2005/05/26(木) 18:24:16y=(x^5*a)+(x^4*b)+(x^3*c)+(x^2*d)+(x*e)+f;
こんな式でいいのか?
もう数学なんて数年やってないんでな、不備はゆるしてくれ。
( ^記号は察してくれ。汗。)
0229デフォルトの名無しさん
2005/05/26(木) 18:25:37わかり難いのは小手先のテクニックだけで、
それほど難度があるソースではないので、
がんばって解析してください。
0230デフォルトの名無しさん
2005/05/26(木) 18:27:15いやね演算の優先順位にじしんがなかったんだよ。
それだけだ。汗。
0231デフォルトの名無しさん
2005/05/26(木) 18:32:54空白で優先順位は制御できない。
0232デフォルトの名無しさん
2005/05/26(木) 18:40:18うへ。勉強になった。
ドンドン怪しくなってきたな。
0233デフォルトの名無しさん
2005/05/26(木) 18:47:37こんな感じか?
#include <float.h>
#include <math.h>
#include <stdio.h>
double solve(double a[], double initial_x = 0) {
double old_x = initial_x, x = old_x;
do {
old_x = x;
x = (-a[0] + old_x * old_x * (a[2] + old_x * (2 * a[3] + old_x * (3 * a[4] + 4 * old_x * a[5])))) / (a[1] + old_x * (2 * a[2] + old_x * (3 * a[3] + old_x * (4 * a[4] + 5 * old_x * a[5]))));
} while (abs(x - old_x) > DBL_EPSILON);
return x;
}
int main(void) {
FILE* fp = fopen("result", "w");
double initial_x, a[6];
int i;
for (; ; ) {
for (i = 0; i <= 5; i++) {
printf("input coefficient of x^%d:", i);
scanf("%lf", a + i);
}
if (a[5] == 0) break;
printf("input initial value:");
scanf("%lf", &initial_x);
fprintf(fp, "coefficient list:%f %f %f %f %f %f\nresult:%f\n", a[0], a[1], a[2], a[3], a[4], a[5], solve(a, initial_x));
}
fclose(fp);
return 0;
}
0234grass
2005/05/26(木) 18:48:13五次式ですがこんな関数で答えだせます。
double proossess()
{
double x = 0.0; double y;
while( (y=calc(x))==0 ){ x += y/delta(x); }
return(y);
}
calc(x) は 与えられた 関数f のf(x)を求めます。
delta(x) は 与えられた 関数fの導関数で f'(x)を求めます。
たしかニュートン法っていうアルゴリズムだったと思います。
注意)
発散するような関数には使えません
f=tan(x)とか
0235デフォルトの名無しさん
2005/05/26(木) 18:50:41ありがとうございます。お店で買わない限り無理かと思ってた・・・。
これで自宅学習できます(`・ω・´)シャキーン
>>227
>の部分のをーー からーーに置き換えた方がいいって事なのかな?
それにしても、配列やって関数やってなんでこんな課題出されたんだろ・・・。
知らない書き方ばっかりだし、今日は徹夜の予感ヽ(´Д`;)ノ
0236デフォルトの名無しさん
2005/05/26(木) 18:53:51修正版。
#include <stdio.h>
#include <string.h>
#define DATAMAX (20)
void output(char *data){/*for 7BitAscii*/
char character[128];
int i;
printf("Input:[%s]\n",data);
for(i=0;i<128;i++){
character[i]=0;
}
while(*data ) character[*data++]++;
for(i=0;i<128;i++){
if(i% 5==4){
printf("\n");
}
printf("%d:[%c]:%d ",i,i,character[i]);/*表示部*/
}
printf("\n");
}
int main(){
char buf[DATAMAX+1];
char *p;
fgets(buf,DATAMAX+1,stdin);
/*buf[DATAMAX]='\0';*/
p=strchr(buf,'\n');
if(p) *p='\0';
output(buf);
return 0;
}
0237デフォルトの名無しさん
2005/05/26(木) 18:59:04[2] 問題文:
人数nを読み込んだあと、配列に身長のデータを読み込んでいき、
入力された身長を10cmごとにわけたヒストグラムを作成するプログラム。
<実行例>
150<=x<160 : *** 3名
160<=x<170 : ***** 5名
.
.
.
190<=x<200 : * 1名
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C
[4] 期限:今日からだいたい1週間。
配列がいまいちわからないのでお願いします。
0238デフォルトの名無しさん
2005/05/26(木) 18:59:10[2] 問題文:
人数nを読み込んだあと、配列に身長のデータを読み込んでいき、
入力された身長を10cmごとにわけたヒストグラムを作成するプログラム。
<実行例>
150<=x<160 : *** 3名
160<=x<170 : ***** 5名
.
.
.
190<=x<200 : * 1名
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C
[4] 期限:今日からだいたい1週間。
配列がいまいちわからないのでお願いします。
0239grass:234
2005/05/26(木) 18:59:18初めて書き込む grass と申すものです。
以後お見知りおきを
0240grass:234
2005/05/26(木) 19:04:49具体的な答えでなくてすいません
10cmごとに区分けするのなら身長のデータを読み込む度に
身長/10 を添え字にした配列の中身をインクリメントすればカウントできます。
表示部の*は
void print_bar(int i)
{
while(i){
printf("*");
i--;
}
}
で大丈夫だと思います。
バー表示後の改行を忘れずに。
0241デフォルトの名無しさん
2005/05/26(木) 19:06:39”任意の係数をキーボードより入力”
ってどんな入力方法なんだ?
0242デフォルトの名無しさん
2005/05/26(木) 19:07:57挨拶なんて別にいいから流れを読もうね。
0243grass:234
2005/05/26(木) 19:16:52キーボードからデータを取り込むとしてデータ読み込み部を書きます。
double counter[20];
char buffer[16];
void read_and_prossess(int n)
{
int i;
double tall;
/* counter 初期化 */
for(i = 0;i < 20;i++){ counter[i] = 0; }
for(i = 0;i < n;i++){
gets(buffer);
tall = atof(buffer);
counter[(int)tall /10] ++;
}
}
これで配列counterにそれぞれの範囲内にいる人数が格納されます。
counter[i]には i*10<=身長<(i+1)*10 の人数が入ります。
ただしこの関数は身長200以上を入れると暴走する可能性のある不完全な物です。
>>242
はい、すみません。
0244デフォルトの名無しさん
2005/05/26(木) 19:35:05#include <stdio.h>
PutSter(int n){
while(n){
printf("*");
n--;
}
}
int main(){
int N,i,k;
int data[30];
puts("Input N...");
scanf("%d",&N);
for(i=0;i<30;i++)data[i]=0;
for(i=0;i<N;i++){
puts("Input height...");
scanf("%d",&k);
k= k/10;
if(k<0 || k>=30){
puts("invalid data");
i--;
continue;
}
data[k]++;
}
for(i = 0;i<30;i++){
printf("%d-%d:",i*10,(i+1)*10-1);
PutSter(data[i]);
printf("\n");
}
return 0;
}
0245デフォルトの名無しさん
2005/05/26(木) 19:39:22#include <stdio.h>
#include <stdlib.h>
int main(){
int i, j, c, n, imin, imax;
double *height, tmp, max, min;
scanf("%d", &n);
height = (double *)malloc(sizeof(double)*n);
for(i = 0; i < n; i++) scanf("%lf", &height[i]);
/* ぶくぶくソート */
for(i = 0; i < n-1; i++){
for(j = n-1; j > i ;j--){
if(height[j] < height[j-1]){
tmp = height[j]; height[j] = height[j-1]; height[j-1] = tmp;
}
}
}
min = height[0]; max = height[n-1]; imin = (int)min / 10 * 10; imax = (int)max / 10 * 10;
j = 0;
for(i = imin; i <= imax; i+=10){
printf("%d <=x< %d : ", i, i+10); c = 0;
while(j < n && height[j] < i+10){
printf("*"); j++; c++;
}
printf(" %d名\n", c);
}
return 0;
}
0246デフォルトの名無しさん
2005/05/26(木) 20:14:04[2] 問題文(含コード&リンク):文字列strと一致するファイルあるいは
ディレクトリがカレントディレクトリにあれば1を返し、なければ0を返す関数
int schfile(char *str)を作成せよ。
[3] 環境
[3.1] OS:Free BSD
[3.2] コンパイラ(バージョン): cc
[3.3] 言語:C
[4] 期限:できれば今すぐに
[5] その他の制限:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int schfile(char *str){
から書き出してください。
お願いします。
0247デフォルトの名無しさん
2005/05/26(木) 20:40:37#include<stdlib.h>
#include<string.h>
int schfile(char *str){return rand()%2;}
0248デフォルトの名無しさん
2005/05/26(木) 20:54:07#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
int schfile(char *str){
DIR *fp;
struct dirent *p;
int result = 0;
fp = opendir( "." );
while( ( p=readdir(fp) )!=NULL ){
if( strcmp( str, p->d_name ) ) continue;
result = 1;
break;
}
closedir(fp );
return result;
}
int main( int argc, char *argv[] )
{
printf( "result = %d\n", schfile( argv[1] ) );
return 0;
}
0249デフォルトの名無しさん
2005/05/26(木) 20:55:04OSの違いを吸収できなかった。
ファイルあるかどうかだけなら簡単なんだけどね。
0250249
2005/05/26(木) 20:56:340251デフォルトの名無しさん
2005/05/26(木) 21:01:30POSIXか。
ANSI-Cのほうしかしらなかった。
0252246
2005/05/26(木) 21:55:39dirent.hを使わずに出来ませんか?
0253デフォルトの名無しさん
2005/05/26(木) 22:17:50リードオンリでfopenできればファイルかディレクトリがある。
0254デフォルトの名無しさん
2005/05/26(木) 22:23:14じゃ、こうしろ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int schfile(char *str){
#include <dirent.h>
DIR *fp;
0255デフォルトの名無しさん
2005/05/26(木) 22:26:53ヘッダから推測すると、system(3)を使うような気がする。
0256デフォルトの名無しさん
2005/05/26(木) 22:28:33最適化って知ってる?
0257初心者
2005/05/26(木) 22:56:520258デフォルトの名無しさん
2005/05/26(木) 23:04:56y'=cos(x) とかそういうことではないよな?
0259初心者
2005/05/26(木) 23:07:55説明不足で申し訳ありません。
0260デフォルトの名無しさん
2005/05/26(木) 23:39:220261デフォルトの名無しさん
2005/05/26(木) 23:41:350262デフォルトの名無しさん
2005/05/26(木) 23:43:05学校の数値解析という授業でy=sin(x)を微分するプログラムを作れという宿題が出ました。はっきりいってまったくわからなくてこまってます。ぜひお教えください。
528 名前:デフォルトの名無しさん :2005/05/26(木) 23:01:19
>>527
数値的な微分でいいのか解析的な微分が必要なのかくらいは書いてくれ。
そんだけの情報じゃ私たちも全くわからなくて困ります。
529 名前:初心者 :2005/05/26(木) 23:05:06
申し訳ありませんでした。
問題は数値的な微分です。
逐次計算式を作って計算するプログラムを作れといわれました。
530 名前:デフォルトの名無しさん :2005/05/26(木) 23:05:55
>>527
宿題スレに逝け
0263デフォルトの名無しさん
2005/05/26(木) 23:49:45こういうことかね?
#include <stdio.h>
#include <math.h>
#define DELTA 0.001
int main() {
double x;
for (x = -1.0; x < 1.0; x += DELTA)
printf("sin'(%f)=%f\n", x, (sin(x + DELTA) - sin(x)) / DELTA);
return 0;
}
0264デフォルトの名無しさん
2005/05/27(金) 01:44:50権限がないとファイルがあっても開けない
0265デフォルトの名無しさん
2005/05/27(金) 07:09:43[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
仲の悪いaとbが映画館で出会ってしまい、空席が5席ある。
それぞれの関の番号とx,y座標は下の表のとおりである。
このなかからaとbの二人が座るべきもっとも離れた2つの座席a,bを見つけなさい
座席番号 x座標 y座標
1 1,1 5,2
5 3,4 1,6
10 2,3 2,6
15 6,4 5,7
16 7,6 7,8
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ(バージョン):知らない(´・ω・`)
[3.3] 言語:C
[4] 期限:今日のお昼過ぎOTL
[5] その他の制限:まだ5,6回の授業しかやってませんので初歩的なことしかやってません。けど漏れはぜんぜんわからない・・・
いざやろうと思ったらぜんぜんわからないです。時間ないけど、誰かお願い・・・
0266デフォルトの名無しさん
2005/05/27(金) 08:35:15丸投げならいいけど、やる気があるなら「ぜんぜんわからない」ではなくちっとは考えてみよう。
例えば、二点間の距離の求め方は知ってるよな?
5点から2点の組み合わせを全部生成して、その距離を求めて最大のものを探せばいい。
#オプションでaとbが最も近い座席を考えてもいいね。
0267デフォルトの名無しさん
2005/05/27(金) 08:35:18空席番号1にX座標が1,1で、Y座標が5,2ってどういうこと?
小数点?座標に小数点使うのもアレげなんだが。
よくわかんないんだが、
(ax-bx)*(ax-bx)+(ay-by)*(ay-by)の一番大きいのを求めて
その座標番号の組を表示すればいいんじゃね?
ルートがついてないのは、ルートあるなしで大小関係がかわんないため。
0268デフォルトの名無しさん
2005/05/27(金) 08:35:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/477.c
0269初心者B
2005/05/27(金) 11:04:08点数(0〜100点)を複数入力して、合計点、平均点、最高点、最低点、60点未満の件数を求め出力するプログラムを作成しなさい。なお-1が入力されたら入力終了すること。
出力結果例
30 (入力)
85 (入力)
45 (入力)
70 (入力)
-1 (入力)
合計:200点 平均:57.5点 (出力)
最高:85点 最低:30点 (出力)
60点未満:2名 (出力)
0270デフォルトの名無しさん
2005/05/27(金) 11:12:13double avg;
while (scanf("%d", &a) == 1 && a > 0) {
count++;
sum += a;
if (a > max) max = a;
if (a < min) min = a;
if (a < 60) under60++;
}
avg = (double) sum / count;
printf("%d %f %d %d %d\n", sum, avg, max, min under60);
0271デフォルトの名無しさん
2005/05/27(金) 11:29:39#include<stdio.h>
int main(int argc,char **argv){
int total=0,min=100,max=0,n=0,u60=0,tmp;
do{
scanf("%d",&tmp);
if(tmp!=-1){
total+=tmp;
n++;
if(min>tmp)min=tmp;
if(max<tmp)max=tmp;
if(tmp<60) u60++;
}
}while(tmp!=-1);
if(n!=0){
printf("合計:%d点 平均:%f点\n",total,(double)total/n);
printf("最高:%d点 最低:%d点\n",max,min);
printf("60点未満:%d名\n",u60);
}else{
/* なにも入力されてません */
}
return 0;
}
>>270 だと0点が勘定に入らない a>0を どうにか変えればなんとか
0272デフォルトの名無しさん
2005/05/27(金) 11:46:130273デフォルトの名無しさん
2005/05/27(金) 12:30:45>>271
レスサンクス
参考にさせてもらいますた
0274デフォルトの名無しさん
2005/05/27(金) 16:31:38[2] 問題文(含コード&リンク):標準入力から得た文字列中の数字をすべて"0"に変換するプログラムを書け
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):GCC
[3.3] 言語:C
[4] 期限:2005年5月29日24:59まで または 無期限 のいずれか
[5] その他の制限:特に制限なしだけど、出来るだけ短いプログラムでお願いします
0275デフォルトの名無しさん
2005/05/27(金) 16:36:22int main(void)
{
int ch;
while ((ch = getchar()) != EOF)
putchar(isdigit(ch) ? '0' : ch);
return 0;
}
0276デフォルトの名無しさん
2005/05/27(金) 16:38:51123hoge456->0hoge0??
0277217後日談
2005/05/27(金) 16:39:10今、勉強してるのは組み込みマイコン系だからvoid〜でやれ、
int mainはc++の書き方とか言われました。
結局>>236のプログラムのint mainをvoid main(void)にしてcharでDATAMAXを設定し
output(指定した変数)にして、outputをプロトコル関数に指定した最後にreturnをつけてみました。
0278デフォルトの名無しさん
2005/05/27(金) 16:41:16[2]問題文:配列に先頭から順にアルファベットの小文字を乱数発生関数を使用してランダムに20個詰め,
配列要素の値(文字)を添え字とともに表示するプログラムを作成しなさい。
ただし,同じ文字が複数回現れてもかまわない。
ヒント: 文字'a'はASCIIコードで97(十進数)で,a〜zのASCIIコードは連続していることを利用する。
つまり,'a'は97+0,'b'は97+1, ... , 'z'は97+25となる。すなわち,アルファベットは26文字
なので,乱数は0から25までを発生させ,それを利用する。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C言語
[4] 期限:2005年5月27日18時まで
期限ぎりぎりまで考えたのですがさっぱり、、先輩方助けて下さい
0279278
2005/05/27(金) 16:44:32[2]問題文:配列に先頭から順に0から15までの数字を乱数発生関数を使ってランダムに20個詰め,添え字と
ともに表示する。その後,キーボードから数字を入力し,線形探索を使って,その数値と一致
する要素があれば添え字を表示し(複数あれば全て表示)無ければ,No Dataと表示するプロ
グラムを作成しなさい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C言語
[4] 期限:2005年5月27日18時まで
2つあるのですがこちらのほうもさっぱり、、、
0280デフォルトの名無しさん
2005/05/27(金) 16:53:49テスト環境はLinux。乱数初期化のとこ動かなかったら適当に替えてくれ。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define NUM 20
int main( void )
{
char buff[NUM+1];
int count;
srand( getpid() );
for( count=0; count<NUM; count++ )
buff[count] = 'a' + rand() % 26;
buff[NUM] = '\0';
for( count=0; count<NUM; count++ )
printf( "%2d:%c\n", count, buff[count] );
puts("");
return 0;
}
大変参考になりました!
0283デフォルトの名無しさん
2005/05/27(金) 16:59:20#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define NUM 20
int main( void )
{
int buff[NUM];
int count, val;
srand( getpid() );
for( count=0; count<NUM; count++ )
buff[count] = rand() % 16;
printf( "input number(0-15):" ); fflush(stdout);
scanf( "%d", &val );
for( count=0; count<NUM; count++ )
if( buff[count] == val ){
printf( "%d:%d\n", count, buff[count] );
return 0;
}
puts("No Data\n");
return 0;
}
0284デフォルトの名無しさん
2005/05/27(金) 17:03:37複数対応だったな。スマソ
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define NUM 20
int main( void )
{
int buff[NUM];
int count, val, flg;
srand( getpid() );
for( count=0; count<NUM; count++ )
buff[count] = rand() % 16;
printf( "input number(0-15):" ); fflush(stdout);
scanf( "%d", &val );
flg = 0;
for( count=0; count<NUM; count++ )
if( buff[count] == val ){
printf( "%d:%d\n", count, buff[count] );
flg = 1;
}
if( ! flg )
puts("No Data\n");
return 0;
}
0285デフォルトの名無しさん
2005/05/27(金) 17:10:53自分で何とかできるならそれはそれで良し。
そういう能力はどこでも必要だし、旨いことやってくださいな。
0286デフォルトの名無しさん
2005/05/27(金) 17:16:53[2]問題文:配列に先頭から順に150から199までの50個の整数値を入れる。その後,キーボードから入力された
整数値が入っている配列を2分探索法で探し,その添え字の番号を表示するプログラムを作成しなさい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C言語
[4] 期限:2005年5月27日17時50分まで
これできないと単位が、、、どなたか助けてください。
0287デフォルトの名無しさん
2005/05/27(金) 17:20:23一応 int main(void)はCでも規格に採用されている正式なもの。
だから頭の片隅にでも入れておいても損は無い。
0288デフォルトの名無しさん
2005/05/27(金) 17:37:49#include <stdio.h>
#define NUM 50
int main( void )
{
int data[NUM];
int count,val,start,end,pos;
for( count=0; count<NUM; count++ )
data[count]=150+count;
printf( "input number(150-199): "); fflush(stdout);
scanf( "%d", &val );
start=0; end = NUM-1;
while(1){
pos = ( end + start ) / 2;
if( data[pos] == val ){
break;
}
else if( data[pos] > val ){
end = pos - 1;
}
else {
start = pos + 1;
}
}
printf( "%d\n", pos );
return 0;
}
0289デフォルトの名無しさん
2005/05/27(金) 17:50:49折角作ったからage。
#include <stdio.h>
#define NUMBASE (150)
#define NUMMAX (199)
#define ARRAYMAX (50)
int main(){
int i,in,pos,len;
int data[ARRAYMAX];
for(i=0;i<ARRAYMAX;i++){
data[i]=i+NUMBASE;
}
printf("Input Num(%d-%d)",NUMBASE,NUMMAX);
scanf("%d",&in);
if(in>NUMMAX || in<NUMBASE){
puts("invalid value");
return 0;
}
in-= NUMBASE;
pos= ARRAYMAX/2;
len=ARRAYMAX /2;
while(1){
if(pos==in) break;
len /= 2;
if(len == 0) len=1;
if(pos<in) pos+= len;
else pos -= len;
}
printf("Array[%d]=%d\n",pos,data[pos]);
return 0;
}
0290デフォルトの名無しさん
2005/05/27(金) 18:00:360291デフォルトの名無しさん
2005/05/27(金) 19:00:18[2]while、for、do-whileの3種類のループを用いて、
読み込んだ整数の段数を持つピラミッドを表示するプログラムを作れ。
例: inuput number of lines: 3
| * |
| *** |
| ***** |
[3]環境
[3.1]UNIX
[3.2]cc,gcc,Fortran(バージョンは分かりませんが、数年前のものです)
[3.3] 言語:C
[4] 期限:5月31日
[5] 初習者用問題なので、単純に書けると思うのですが…。
空白の空け方が分かりません。多重ループを使うと思うのですが。
0292デフォルトの名無しさん
2005/05/27(金) 19:01:35| *** |
| ***** |
0293デフォルトの名無しさん
2005/05/27(金) 19:11:24[2]問題文:
整数nを与えると、0〜n-1の整数の中からn個を選択するという操作をし、その全ての組み合わせを画面にプリントアウトする関数を作成せよ。
数の選択では重複を認める。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語: C
[4] 期限:5/30
0294デフォルトの名無しさん
2005/05/27(金) 19:13:20#include <stdio.h>
int main(void){
int n, i, j;
printf("inuput number of lines:");
scanf("%d", &n);
if(n < 1) return 0;
for(i = 0; i < n; i++){
printf("|");
j = 0;
while(j++ < n - i){
printf(" ");
};
j = 0;
do{
printf("*");
}while(j++ < 2*i);
j = 0;
while(j++ < n - i){
printf(" ");
};
printf("|\n");
}
return 0;
}
0295デフォルトの名無しさん
2005/05/27(金) 19:23:37[2] 問題文(含コード&リンク):
(1)shellコマンド‘echo’と同じ機能を持つ、
新コマンド‘myecho’を作成せよ
(2)設定されている全環境変数を表示するプログラムを作成せよ
(3)‘pwd’と同じ機能を持つ‘mypwd’を作成せよ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C言語
[4] 期限:5月30日まで
よろしくおねがいします。
(1)shellコマンド‘echo’と同じ機能を持つ、新コマンド
‘myecho’を作成せよ
(2)設定されている全環境変数を表示するプログラムを作成せよ
(3)‘pwd’と同じ機能を持つ‘mypwd’を作成せよ
0296295
2005/05/27(金) 19:25:050297291
2005/05/27(金) 19:33:45うわー、すいません。
do,while,for それぞれを使い、三つのプログラムを書け、という課題です。
それと、|、はいりません。
0298デフォルトの名無しさん
2005/05/27(金) 19:37:57forのみ。do whileやwhileへの書き換えは機械的にできる。
出来なければ勉強しなさい。
#include <stdio.h>
int main(void) {
int n, i, j;
printf("input number of lines:"); scanf("%d", &n);
for (i = 0; i < n; i++) {
for (j = 0; j < n - i - 1; j++)
printf(" ");
for (j = 0; j < 2 * i + 1; j++)
printf("*");
printf("\n");
}
return 0;
}
0300デフォルトの名無しさん
2005/05/27(金) 20:00:15#include <stdio.h>
int main( void )
{
unsigned int num, val, max, count1, count2, div;
printf( "inuput number of lines(1-100): " ); fflush(stdout);
scanf( "%d", &num );
max=1;
for( count1=0; count1<num; count1++ )
max *= num;
for( count1=0; count1<max; count1++ ) {
printf( "%d: ", count1 );
div = max;
val = count1;
for( count2=0; count2<num-1; count2++ ){
div /= num;
printf( "%d ", val/div );
val %= div;
}
printf( "%d\n", val );
}
return 0;
}
0301デフォルトの名無しさん
2005/05/27(金) 20:07:04> 関数を作成せよ。
0302デフォルトの名無しさん
2005/05/27(金) 20:08:01main関数だろうが、文句あっか
0303デフォルトの名無しさん
2005/05/27(金) 23:34:47if((num1==1&&num2==2&&num3==3)||(num1==2&&num2==3&&num3==1)||(num1==3&&num2==1&&num3==2))
これもっと簡略できませんか?馬鹿ですみません;
0304デフォルトの名無しさん
2005/05/27(金) 23:40:36ここは質問スレじゃありませんよ
0305デフォルトの名無しさん
2005/05/27(金) 23:54:18順列…じゃないよね?
#include <stdio.h>
#include <stdlib.h>
void hoge2(int n, int m, int depth, int *p){
int i;
if(n == depth){
for(i = 0; i < n; i++) printf("%d ", p[i]);
printf("\n");
return;
}
for(i = m; i < n; i++){
p[depth] = i;
hoge2(n, i, depth+1, p);
}
}
void hoge(int n){
int *p;
p = (int *)malloc(sizeof(int)*n);
hoge2(n, 0, 0, p);
free(p);
}
int main(void){
int n;
scanf("%d", &n);
if(n < 1) return 0;
hoge(n);
return 0;
}
0306デフォルトの名無しさん
2005/05/28(土) 00:52:12if((1<<num1)|(1<<num2)|(1<<num3) == 0x0e)
0307306
2005/05/28(土) 00:54:02num1〜3が1〜3の値しか取らないとかの制限があれば簡単にできるかも。
0308デフォルトの名無しさん
2005/05/28(土) 03:13:51int list[3+1]={0};
++list[num1];
++list[num2];
++list[num3];
if(list[1] && list[2] && list[3])
...マンドクセーカ orz
0309デフォルトの名無しさん
2005/05/28(土) 05:35:14C言語なら俺に聞けあたりのネタだしな。
0310デフォルトの名無しさん
2005/05/28(土) 05:58:13とりあえずretry
tmp = ((num3 & 3) | ((num2 & 3) << 2) | ((num1 & 3) << 4));
tmp |= (tmp << 6);
if ((tmp & 63) == 27 || ((tmp >> 2 ) & 63) == 27 ||
((tmp >> 4) & 63) == 27) {
意味なし
0311デフォルトの名無しさん
2005/05/28(土) 11:24:201 3 5 9 3
A=2 5 8 B=8 4
4 6 9 7 5
とするとき、AとBの積Cを求めて表示するプログラムを制作せよ
どなたかこの問題をやってもらえませんか?よろしくお願いします
0312311
2005/05/28(土) 11:30:551 3 5
2 5 8=A
4 6 9
9 3
8 4=B
7 5
正しくは↑です
0313デフォルトの名無しさん
2005/05/28(土) 11:56:56テンプレ読もうね
#include <stdio.h>
int main( void )
{
int A[3][3]={{1,3,5},{2,5,8},{4,6,9}},
B[3][2]={{9,3},{8,4},{7,5}},
C[3][2], sum, row, col, count;
for( row=0;row<3;row++ )
for( col=0;col<2;col++ ){
C[row][col]=0;
for(count=0;count<3;count++)
C[row][col]+= A[row][count]*B[count][col];
}
for( row=0;row<3;row++ ){
for( col=0;col<2;col++ )
printf( "%d ", C[row][col] );
puts("");
}
return 0;
}
0314デフォルトの名無しさん
2005/05/28(土) 11:59:44if(num1+num2+num3==6)
0315311
2005/05/28(土) 12:35:12ありがとうございました!
これからは気をつけます
0316デフォルトの名無しさん
2005/05/28(土) 13:49:182+2+2 とかだめじゃん
0317デフォルトの名無しさん
2005/05/28(土) 14:17:130319デフォルトの名無しさん
2005/05/28(土) 15:26:033*2*1 とかだめじゃん
0320デフォルトの名無しさん
2005/05/28(土) 15:57:50つまり
1,2,3
2,3,1
3,1,2
だけ判定しろってことか...orz
0321デフォルトの名無しさん
2005/05/28(土) 16:15:30P(num2-num1) && P(num3-num2) && P(num
0322デフォルトの名無しさん
2005/05/28(土) 20:40:10int main(int argc,char **argv){
int num1,num2,num3;
for(num1=1;num1<10;num1++)
for(num2=1;num2<10;num2++)
for(num3=1;num3<10;num3++)
if((num3-num1+3)%3==2 && num1*num2*num3==6)
printf("num1=%d num2=%d num3=%d\n",num1,num2,num3);
return 0;
}
123
231
321
と116がおまけで付いてきてもいいなら
0323デフォルトの名無しさん
2005/05/28(土) 20:49:380324デフォルトの名無しさん
2005/05/28(土) 21:25:05問3
char型変数aにscanfを用いて一文字読み込み、文字型 2進、8進、10進、
16進に変換して出力しなさい。
出力例
a?A
文字 = A
8進 = 101
10進 = 65
16進 = 41
2進 = 1000001
b?abcdefg
文字列 = abcdefg
アルゴリズムは自力で何とかしますんで、よろしくです。。。
0325デフォルトの名無しさん
2005/05/28(土) 21:49:422進以外
#include<stdio.h>
int main(int argc,char **argv){
char a;
printf("a?");
scanf("%c",&a);
printf("文字 = %c\n",a);
printf("8進 = %o\n",a);
printf("10進 = %d\n",a);
printf("16進 = %x\n",a);
return 0;
}
0326デフォルトの名無しさん
2005/05/28(土) 22:11:242進
#include<stdio.h>
int main(void){
int flag = 0, i;
char a, tmp;
printf("a?");
scanf("%c",&a);
printf("2進 = ");
tmp = a;
for(i = sizeof(char)*8; i > 0; i--){
if(tmp&(1<<(sizeof(char)*8-1))){
printf("1");
flag = 1;
}
else if(flag) printf("0");
tmp<<=1;
}
printf("\n");
return 0;
}
0327デフォルトの名無しさん
2005/05/28(土) 22:12:28激しく無駄ぢゃん
元の>303見れ
0328デフォルトの名無しさん
2005/05/28(土) 22:18:01全部
#include<stdio.h>
int main(void) {
int index = 0, left = 0;
char a, x, s[16], temp;
printf("a?"); scanf("%c", &a);
printf("文字=%c\n", a);
x = a;
do {
s[index++] = x % 2 + '0';
x >>= 1;
} while (x);
s[index--] = '\0';
while (left < index) {
temp = s[left];
s[left] = s[index];
s[index] = temp;
++left;
--index;
}
printf(" 2進=%s\n", s);
printf(" 8進=%o\n", a);
printf("10進=%d\n", a);
printf("16進=%x\n", a);
return 0;
}
0330デフォルトの名無しさん
2005/05/28(土) 23:29:40[2] 問題文(含コード&リンク):
1.main()において一次元配列data[10]に数値を入力し、配列の先頭アドレスと要素数の個数が入っている変数のアドレスを
因数にして配列中で最大値の格納されているアドレスを返す関数int *max_data(int *tbl,int *kosu)
2.a[]="What You See Is What You Get",b[]="=WYSIWYG"の文字列を連結してc[40]に格納する
処理は書く配列の線t脳アドレスを引数として関数void renketu(char *moji1,char *moji2,char *kekka)で文字列の連結を行い
結果はmain関数にて出力
[3] 環境
[3.1] OS:WindowsNT
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/
[4] 期限:月曜
[5] その他の制限:ポインタを習い終わったばかり
0331デフォルトの名無しさん
2005/05/28(土) 23:36:090332デフォルトの名無しさん
2005/05/28(土) 23:44:401.
int *max_data(int *tbl, int *kosu) {
int *max = tbl, i;
for (i = 1; i < *kosu; i++)
if (*max < tbl[i])
max = tbl + i;
return max;
}
2.
#include <stdio.h>
#include <string.h>
void renketu(char *moji1, char *moji2, char *kekka) {
while(*kekka++ = *moji1++){}
kekka--;
while(*kekka++ = *moji2++){}
}
int main(void) {
char a[]="What You See Is What You Get", b[]="=WYSIWYG", s[128];
renketu(a, b, s);
printf("%s", s);
}
0333332
2005/05/28(土) 23:45:010334デフォルトの名無しさん
2005/05/28(土) 23:57:11{ int i,*maxPos=tbl;
for(i=1; i<*kosu; ++i) if(*(tbl+i)>*maxPos) maxPos=tbl+i;
return maxPos;
}
void renketu(char *moji1,char *moji2,char *kekka)
{ int i=0;
while(*moji1) *(kekka+(i++))=*moji1++;
while(*moji2) *(kekka+(i++))=*moji2++;
*(kekka+i)='\0';
}
0335デフォルトの名無しさん
2005/05/29(日) 00:08:30入力するのはaだけじゃまいか?
0336デフォルトの名無しさん
2005/05/29(日) 00:10:21i=1からでよかったっけ?先頭要素って*tblで参照するような気がするのだが、私の記憶違いかな。
0337デフォルトの名無しさん
2005/05/29(日) 00:19:38もまえはコードの意味がわかっていないだけだ
0338デフォルトの名無しさん
2005/05/29(日) 00:57:03おっと、bを忘れていた。
0339デフォルトの名無しさん
2005/05/29(日) 01:12:57[2] 問題文(含コード&リンク):
2*((d^2y)/(dx^2))+0.5*(dy/dx)+2.5y=1
y(x=0)=0,dy/dx(x=0)=0.1の時、この微分方程式をルンゲッタ法によって
数値計算し、x軸=0.01刻みでyの値を表示するプログラム書け。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): Visual studio .NET 2003
[3.3] 言語:C
[4] 期限:2005年5月29日23:59
[5] その他の制限:
使用できるヘッダーファイルは"stdio.h","string.h","stdlib.h","math.h"
位だと思います。
よろしくお願いします。
0340デフォルトの名無しさん
2005/05/29(日) 01:21:12ルンゲッタ法に該当するページが見つかりませんでした。 by Google
0341デフォルトの名無しさん
2005/05/29(日) 01:34:15多分ルンゲクッタ法の間違いだと思われる
0342デフォルトの名無しさん
2005/05/29(日) 01:38:530343デフォルトの名無しさん
2005/05/29(日) 03:44:33[2] 問題文:
正方行列(2×2行列)の和、差を求める(入力、出力をファイルで行う)プログラムを作成せよ。
なお、和と差は関数にして、1つのソースプログラムで作ること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年5月30日まで
[5] その他の制限:
行列の要素の入出力をファイルで行うところがよくわかりません。
よろしくお願いしますm(_)m
0344デフォルトの名無しさん
2005/05/29(日) 04:29:55入出力ファイルのフォーマットが分からないとどうしようもない
好きなように仮定して良いの?
0345856
2005/05/29(日) 04:43:09[2] 問題文:
与えられたプログラムを以下のように直せ
・円を右から2個半円にする
・円の上に赤、下に黄の接線を引く
・一番右の半円に緑、右から2番目に青の色をつける
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):Visual Studio .net 2003
[3.3] 言語:C
[4] 期限:2005年5月30日5:30まで
0346856
2005/05/29(日) 04:45:00#include <windows.h>
#define APP_NAME TEXT("Sample_MainWindow")
LRESULT CALLBACK WindowProc (
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
) {
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
LineTo(hdc , 400 , 100);
0347856
2005/05/29(日) 04:45:27Arc(hdc , 110 , 10 , 200 , 100 , 100 , 0 , 210 , 0);
Pie(hdc , 210 , 10 , 300 , 100 , 200 , 0 , 310 , 0);
Chord(hdc , 310 , 10 , 400 , 100 , 300 , 0 , 410 , 0);
EndPaint(hWnd , &ps);
return 0;
}
return DefWindowProc(hWnd , uMsg , wParam , lParam);
}
int WINAPI WinMain(
HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR lpCmdLine, int nCmdShow
) {
WNDCLASS wc;
MSG msg;
0348856
2005/05/29(日) 04:45:41wc.lpfnWndProc= WindowProc;
wc.cbClsExtra= 0;
wc.cbWndExtra= 0;
wc.hInstance= hInstance;
wc.hIcon= LoadIcon(NULL , IDI_APPLICATION);
wc.hCursor= LoadCursor(NULL , IDC_ARROW);
wc.hbrBackground= (HBRUSH)COLOR_BACKGROUND + 1;
wc.lpszMenuName= NULL;
wc.lpszClassName= APP_NAME;
if (!RegisterClass(&wc)) return 0;
if (CreateWindow(
APP_NAME , TEXT(__FILE__) ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT , CW_USEDEFAULT,
CW_USEDEFAULT , CW_USEDEFAULT,
NULL , NULL , hInstance , NULL
) == NULL) return 0;
while(GetMessage(&msg , NULL , 0 , 0) > 0) {
DispatchMessage(&msg);
}
return msg.wParam;
}
0349デフォルトの名無しさん
2005/05/29(日) 07:30:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/478.c
0351≠349
2005/05/29(日) 10:17:37それと、どんなエラーが出た?
0352339
2005/05/29(日) 10:38:22今PCがネットに繋がってないので詳しくは書けないのですが、
31〜37行目にかけて、関数へのポインタを通して実行される
呼び出しに対する引数が多すぎます。
60行目が6番目の引数をdouble(double,double,double)から
(_cdel*)(void)に変換できません。
みたいな感じで出ます。
0353339
2005/05/29(日) 10:42:39拡張子がcppになっていました。
拡張子をcに変えたら無事コンパイル出来ました。
ありがとうございました。
0354デフォルトの名無しさん
2005/05/29(日) 11:53:13同じ半角英数なのに幅が違ってしまいます。
下の例だと全て幅は同じですが。
同じ10文字なのに半角数字とアルファベットでは幅が違ってしまうのです。
これを解消するにはどうしたらいいでしょう。
例:
1234567890
ABCDEFGHIJ
abcdefghij
(ここだと横幅は全て同じ)
0355デフォルトの名無しさん
2005/05/29(日) 12:13:21スレ違い。プロポーショナルフォント(MS Pとか)使うからだろ。
0356デフォルトの名無しさん
2005/05/29(日) 12:18:11文字列strの中に,文字cが含まれていれば(複数ある場合には,最も先頭側と する),その文字へのポインタを返し,含まれていなければ,NULLを返す関数 char *str_char(const char *str, int c) を作成せよ.
#include<stdio.h>
char *str_char(const char *str, int c){
while(*str){
if(*str== c){
return *str;
}
str++;
}
return NULL;
}
main(){
char *str;
scanf("%s", str);
printf("%s\n", *str_char(str, 'c'));
}
どこをなおせばいいですかね?
0357デフォルトの名無しさん
2005/05/29(日) 12:21:46char *str; を char str[100]; とかに直してみ。
0358デフォルトの名無しさん
2005/05/29(日) 12:27:13ありがとうございます。
0359デフォルトの名無しさん
2005/05/29(日) 12:33:22CreatePen,SelectObject,DeleteObject,
LineTo,Arcとかでできるはず
MSDNライブラリを少しは見ようよ
0360デフォルトの名無しさん
2005/05/29(日) 12:41:33char *str_char(const char *str, int c)
{
while (*str)
{
if (*str== c)
{
return *str; ← これあかんでー
}
str++;
}
return NULL;
}
0361デフォルトの名無しさん
2005/05/29(日) 12:47:11ファイルのフォーマットについては特に指定はありませんでした。
自分で仮定して良いのだと思います。キーボードからの入出力なら出来た
のですが、ファイル入出力がどうもうまくいかないです・・・。
よろしくお願いします。
0362デフォルトの名無しさん
2005/05/29(日) 13:23:53for (a=0; a<10000; a=a+1){
cout << a << "\n";}
と入力したものをワードパッドなどに
格納する方法があったと思うのですが
検索にかけてもなかなか見つかりません。
本当にやろうとしているプログラムはaの範囲が
非常に大きくdatファイルでは表示しきれないんです…
もしご存知の方がいらっしゃいましたら
やり方を教えていただけませんでしょうか?
0363デフォルトの名無しさん
2005/05/29(日) 13:26:16コンパイルして出来たプログラムのファイル名がhoge.exeならhoge > foo.txtとすることで
coutの出力先がコンソールからfoo.txtへ変わる。
後はそれをワードパッドで開けばいい。
0364339
2005/05/29(日) 13:26:25このfuncはdy/dxで、func2はd^2y/dx^2を表しているのでしょうか?
あと、それぞれの変数が何を表しているのかを教えていただけるとありがたいのですが。
よろしくお願いします。
0365デフォルトの名無しさん
2005/05/29(日) 13:37:572×2の正方行列の演算なら、入力に四個のA行列要素と四個のB行列要素
をファイルから読みこみ、出力にC行列の四つの要素をファイルに書き込めれば
いいわけですよね?つまりファイルにあらかじめ記入したデータを行列の配列に
格納して、計算結果の要素を見やすくファイルに出力してあげる感じですよね・・・
ソースについてはよくわからないので、教えていただけますか?
0366デフォルトの名無しさん
2005/05/29(日) 13:43:46すまん
double func2( double x, double y, double dy )
{
return -0.25 *dy -1.25 * y + 0.5;
}
だったな。
テスト用のままだった。
0367デフォルトの名無しさん
2005/05/29(日) 14:11:54ついでに <math.h>はいらんかったな
0368362
2005/05/29(日) 14:27:22さっそくの解答ありがとうございます。
しかし僕が馬鹿で何をしていいのか分かりません。
保存名をfoo.txtとしてみたんですが・・・
もう少しだけ教えてくれませんでしょうか?
0369デフォルトの名無しさん
2005/05/29(日) 14:42:34DOS窓とかコマンドプロンプトでぐぐれ。
0370デフォルトの名無しさん
2005/05/29(日) 14:49:50知らないのではないだろうか
0371デフォルトの名無しさん
2005/05/29(日) 14:55:33notepad foo.txtとか
start foo.txtとか(普通は関連付けで開けるはず)
ちなみに、エクスプローラー立ち上げるには
start .
な。
・・・エクスプローラーのフォルダとDOS窓のディレクトリは同一という認識がねぇかもな。
0372デフォルトの名無しさん
2005/05/29(日) 14:58:40どうなおせばいいんですか?
0373デフォルトの名無しさん
2005/05/29(日) 15:03:23ポインタを返さんと。
0374デフォルトの名無しさん
2005/05/29(日) 15:05:00そんなことはもう試しました
そこまで初心者じゃありません
0375デフォルトの名無しさん
2005/05/29(日) 15:07:20はあ?
そこ、間違ってるのは事実なんだから
だったら、間違ったままのソースのせるなよ
0376デフォルトの名無しさん
2005/05/29(日) 15:08:16もういいです。私より初心者みたいですね。
0377デフォルトの名無しさん
2005/05/29(日) 15:08:47まあまあ、もちつけ。
試したのか。
じゃあ、今できてる分をもいちど、さらしてみ?
と釣られてみよう。
0378デフォルトの名無しさん
2005/05/29(日) 15:09:40あなたじゃ話になりません
他の方よろしくお願いしますね
0379デフォルトの名無しさん
2005/05/29(日) 15:11:070380372
2005/05/29(日) 15:12:59質問したのは自分なのですが、374は自分じゃありません。
return str;
こうしろってことですか?ポインタを返すってよくわからないんですよね。
0381デフォルトの名無しさん
2005/05/29(日) 15:15:49return *strではstrというポインタの指す値を返してしまう。
0382372
2005/05/29(日) 15:18:210383デフォルトの名無しさん
2005/05/29(日) 15:20:35あと>>357も忘れんといてな。
要するに、char型のポインタの指す先がまだ確保されてないので、
実行結果が不定となるため、例としてchar型の配列を使っただけ。
malloc/freeを使うのが正攻法だが、ちと初心者には面倒かも。
0384デフォルトの名無しさん
2005/05/29(日) 15:21:26_ ´-─ ¬く  ̄  ̄ミ- 、
,,,,/ _==-ミァ-─‐-、 \''''''''''''ー--、,,,,,_
_,,,,-''"/ , ‐''" \ \、_,,,ー''ゞ" `ゞ、
-' " / / / | \ ヽ /"`
_,,-''''''"""''''' / / / / / || | i ヽ i /
´"''、. i / / / / / / || || |│ |ノス /
'、 |// / /___, -一ァ| /! |ト、|│ | | く」/
'、 |,-‐¬ ---┘'7 |! ハ! |,、-┼十|!/\/\
, -‐ ''" し' '´_ /,ィ二l |ト、/!ヽト、\_ヽ!|!l\:.. /
,r/ __ ,イ|リ ヾハ! ヽ! ,ィ⌒ヾミリノ/:::... \
/ ||ヽ -' / ̄ )` __ |ヒノ:} '` ,;\/\/
,r ' ヾ、 ,-、____ , イ ̄,r==- ==-' レ' /| |
/ ヽ `ーソ ' | |ト、,ヘ ′"" "" / / || |
. / \_ / | ハ ヽ`゙'ヘ ' ' / / | | | 1000GET
/ / / | ヽ 川\ 0 //! | | | |
/ / / 八 \川| |`ト- .. __ , イ‐ァヘ | | || |!
/ / / / \ \ 「`ー- 、 / .〉 ト、| ヽ、
,イ /-─=¬ニヘ、_ \ 厂\ 厂ヽ /!| | `ー=ヘ
-‐  ̄ /─ '  ̄ ├- ヽ\ \ノ\ \ 人 ハ!ヽ || |-┤ ヽ
/ /!‐-- | |\ ト、_`ヽ oヽ ト、! || |‐┤- ヽ
// 〉 __ / ├‐- || | 川-‐ | | 厂7! ハ! ├:┤  ̄ヽ
/ / ー ─  ̄ ├‐- リ || ハ!ヘ | | ト┤|/′ ヾ,┤ ゙i_
‐ ' 〉‐- | / /\ .|o | /ヽ/(′ ∨ \
0386856
2005/05/29(日) 15:33:47ありがとうございます!しかし・・・
MSDNライブラリ?さっぱり・・・orz
0387デフォルトの名無しさん
2005/05/29(日) 15:47:52一発ネタなら
ttp://pc5.2ch.net/tech/kako/1070/10704/1070469896.html#R365
流れで好きなのは
ttp://pc5.2ch.net/tech/kako/1069/10698/1069837000.html#R214
かな。
楽しめるネタで一つよろしく。
#スレの意義を忘れてるなワシ。
0388856
2005/05/29(日) 16:11:52LineTo?を使うとこまでわかったんですが・・・
0389デフォルトの名無しさん
2005/05/29(日) 16:15:51質問の仕方が下手だ。
MSDNの内容が理解できないのかMSDNのアドレスがわからんのかという点や、どこまで出来ているのか伝わってこん。
とりあえず俺は今VC使えんので下記参照。
MSDN
ttp://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_createpen.asp
ttp://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_selectobject.asp
ttp://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_deleteobject.asp
ttp://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_lineto.asp
ttp://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_arc.asp
使用例(猫でも分かるプログラミング)
ttp://www.kumei.ne.jp/c_lang/sdk/sdk_25.htm
ttp://www.kumei.ne.jp/c_lang/index_sdk.html
0390デフォルトの名無しさん
2005/05/29(日) 16:17:02一行目激しく同意。
ぶん殴りたくなってくる。
0391デフォルトの名無しさん
2005/05/29(日) 16:17:39のキャラの名前教えてください。
0392デフォルトの名無しさん
2005/05/29(日) 16:24:06禿藁
0393デフォルトの名無しさん
2005/05/29(日) 16:36:04それで、どこがわからないんだい?
0394デフォルトの名無しさん
2005/05/29(日) 18:02:380395デフォルトの名無しさん
2005/05/29(日) 18:15:10VS2003のヘルプにMSDNライブラリってないか
キーワード検索が便利だよ
0396デフォルトの名無しさん
2005/05/29(日) 18:50:46この前、PCがクラッシュしたときにJaneのログも巻き込んでなくなったので…。
0397デフォルトの名無しさん
2005/05/29(日) 20:14:340398デフォルトの名無しさん
2005/05/29(日) 21:49:39…一行目?
0399デフォルトの名無しさん
2005/05/29(日) 21:50:570400デフォルトの名無しさん
2005/05/29(日) 21:53:5020代目…〜795
21代目…〜815
24代目…〜984
26棹 …〜984
39代目…〜964
43代目…〜945
が半端だった…orz(ちなみにこちらも全部dat)
0401デフォルトの名無しさん
2005/05/29(日) 21:57:320402デフォルトの名無しさん
2005/05/29(日) 22:03:09大文字固定にはできるんですが。
0403デフォルトの名無しさん
2005/05/29(日) 22:06:34APIかMFCかはっきりさせて、当該スレへ。
0404デフォルトの名無しさん
2005/05/29(日) 22:06:5022〜24 〜1001
25 〜961
26,27. 紛失
28〜44 〜1001
OK?
0405デフォルトの名無しさん
2005/05/29(日) 22:33:470406デフォルトの名無しさん
2005/05/29(日) 22:42:4444の410〜1000うpキボンヌ
0408デフォルトの名無しさん
2005/05/29(日) 23:41:26にくちゃんねるのdatじゃいかんのかい。
0409デフォルトの名無しさん
2005/05/30(月) 01:43:07グローバル変数を使うなって問題で
#include<stdio.h>
#define x 50 ←もしやこれもアウト?
int se[x][1]; ←これはやはりグローバル変数と見なされるのでしょうか
main(){
int y,z;
〜略〜
}
0410デフォルトの名無しさん
2005/05/30(月) 01:51:52【質問テンプレ】
[1] 授業単元: プログラミング入門
[2] 問題文(含コード&リンク): コンピュータとジャンケンで対戦するプログラムを作成せよ。
条件:�@ユーザーが糸冬 了を宣言するまで繰り返し対戦を行う。
�A終了後、対戦成績を表示する。(何勝何敗何分)
�Bコンピュータの手は適宜決定する。完全にランダムでもいいし、戦略的な要素を持たせてみるのも面白い。
�Cユーザーの手を見てから、コンピュータが決定しないこと。(後だし禁止)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:来週まで
[5] その他の制限:初歩的な授業で、制御構造、配列、関数まで習いました。 その程度の知識でお願いします。
よろしくお願いします…(´・ω:;.:...
0411デフォルトの名無しさん
2005/05/30(月) 01:57:32#define x 50 ←セーフ
int se[x][1]; ←アウト(sexって…)
0412デフォルトの名無しさん
2005/05/30(月) 02:09:390413デフォルトの名無しさん
2005/05/30(月) 02:13:51前回の結果と次にプレイヤーが出した手の統計を取って、一番勝つ確率が高い手を選ぶ。
ただしそれだと逆読みされるので多少ランダムな要素も混ぜる。
相手が次に出す手が40%の精度でしかわからないときはランダム要素が強くて良いが、
相手の手が90%わかっているのならその手に偏らせたほうが勝てる確率が高い。
プレイヤーがチョキを出す確率が50%で、パーを出す確率が40%だと、
CPUはグーを出せば50%の確率で勝てるが、40%の確率で負ける。
CPUがチョキを出せば40%の確率で勝て、負ける確率はわずか10%など、
その辺も考慮してみると面白い。
0414デフォルトの名無しさん
2005/05/30(月) 02:36:22どもー もう泣きそう
計算する関数を使うこと+グローバル関数使うなで集計のしようがなくて(´・ω・`)ショボーン
for(){関数}
で関数を複数回使っても一回一回その中で使った変数は破棄されるヨネ・・・戻り値で戻してまた引数として取り組む。。か
0415デフォルトの名無しさん
2005/05/30(月) 02:42:46グローバル変数使うなってのはごくごく当たり前の制限だぞ。
たとえそう制限されてなくても使わないのが当然。
0416デフォルトの名無しさん
2005/05/30(月) 02:49:28それ出題者はポインタの仕組みを理解して欲しいだけだと思うぞ。
0417デフォルトの名無しさん
2005/05/30(月) 02:50:46なるほど、もう少し頑張ってみます(`・ω・´)
0418デフォルトの名無しさん
2005/05/30(月) 03:02:05int se[50][1];
int i,j;
printf();
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<2;j++){
se[i][j] = input();
}
}
}
float input(void){
int a;
scanf("%f",&a);
return(a);
}
かなり省略してしまいましたがこのように二次配列に読み込むようなのを作ったとき
例えばn = 2で入力して次に 100 2 100 2と入れた時
[0][0] = 100
[0][1] = 2
まではいいのですが
[1][0] = 100
[1][1] = 2
と読み込んだ瞬間[1][0]地点で[0][1]が勝手に100になってしまい苦戦してるのですがどこか間違ったやり方してるところありますか?
かれこれこれだけに1時間以上(´;ω;`) 説明下手でスンマソン
マシーンがLinuxなんで今覚えてる限り打ち込んだので全てが一緒じゃないのですが
0419418
2005/05/30(月) 03:04:470420デフォルトの名無しさん
2005/05/30(月) 03:56:39int se[50][1];と書いておいてse[0][1]に代入を試みるとは何事。
↑ ↑この数字は「要素数」
0421デフォルトの名無しさん
2005/05/30(月) 03:59:26以前貼ったやつ。ま、参考に。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int i,m,e,w[3]={0},j;
char h[][9] = {"グー","チョキ","パー","勝ち","負け","引き分け"};
srand((unsigned)time(0));
for(i=0;i<5;i++){
printf("%s:0 %s:1 %s:2\n",h,h+1,h+2);scanf("%d",&m);
++w[j=(m==(e=(double)rand()/RAND_MAX*3)?2:(m+1)%3==e?0:1)];
printf("YOU:%s,PC:%s,%s\n\n",h+m,h+e,h+j+3);
}
printf("%s:%d,%s:%d,%s:%d,勝率:%d%%",h+3,*w,h+4,w[1],h+5,w[2],*w*100/5);
return 0;
}
0422デフォルトの名無しさん
2005/05/30(月) 06:16:39int se[50][1]で使える配列ってのse[0][0]、se[1][0]、se[2][0], ... , se[49][0]の50個しかないゾということ。
int se[50][2]とすれば、se[0][0], se[0][1], se[1][0], se[1][1], ... , se[49][0], se[49][1]の100個使える。
0423デフォルトの名無しさん
2005/05/30(月) 09:02:25なぁんかググっても説明が無いんすよ
なんすか番兵って?
0424デフォルトの名無しさん
2005/05/30(月) 09:09:54[2] 問題文(含コード&リンク):
�@文字列strの中に,文字cが含まれていれば(複数ある場合には,最も先頭側と する),その添字を返し,含まれていなければ,-1を返す関数 int
str_char(const char str[], int c) を作成せよ.
�A文字列str内のすべての数字文字を削除する関数 void del_digit(char str[])
を作成せよ.例えば,「AB1C9」を受け取ったら,「ABC」を返す.
[3] 環境
[3.1] OS:iMac
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限 :無期限
どうかよろしくお願いします(´・ω・`)
0425デフォルトの名無しさん
2005/05/30(月) 09:13:35isalpha使えばいいわ
0426デフォルトの名無しさん
2005/05/30(月) 09:16:56線形 番兵
でググればいいのでないのかな
なんかここ面白い
http://www.akita-pu.ac.jp/system/elect/comp1/kusakari/japanese/teaching/SoftTech/2004/note/8/Slide18.html
0427デフォルトの名無しさん
2005/05/30(月) 09:17:39Sentinel
0428デフォルトの名無しさん
2005/05/30(月) 09:24:22int str_char(const char str[], int c)
{ int i; for (i = 0; str[i]; i++) if (str[i] == c) return i; return -1; }
int is_digit(int c) {return c >= '0' && c <= '9'; }
void del_digit(char str[])
{ int i, j; for (i = j = 0; str[i]; i++) if (!is_digit(str[i])) str[j++] = str[i]; str[j] = '\0';}
0430デフォルトの名無しさん
2005/05/30(月) 09:41:320431C言語初心者
2005/05/30(月) 10:13:58変数aとbにそれぞれ整数を入力し、絶対値の大きい値を表示するプログラムを作成しなさい。
出力結果
a?5
b?-15
大きい値は-15
0432デフォルトの名無しさん
2005/05/30(月) 10:25:49#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
int a, b;
printf("a?");
scanf("%d", &a);
printf("b?");
scanf("%d", &b);
printf("大きい値は%d\n", abs(a) > abs(b) ? a : b);
return 0;
}
0433431
2005/05/30(月) 10:42:36サンクス。
何とか自分でできますた。よろしければこの問題もお願いします。
入力された値が2の倍数かつ5の倍数であればokを表示させ、それ以外であれば、errorを表示させる。
出力結果1
Input=>12
error
出力結果2
Input=>15
error
出力結果3
Input=>20
ok
0434デフォルトの名無しさん
2005/05/30(月) 10:49:46#include <stdio.h>
int
main(void)
{
int a;
printf("Input=>");
scanf("%d", &a);
printf("%s\n", a % 2 == 0 && a % 5 == 0 ? "ok" : "error");
return 0;
}
0435デフォルトの名無しさん
2005/05/30(月) 10:54:190436デフォルトの名無しさん
2005/05/30(月) 10:57:170437デフォルトの名無しさん
2005/05/30(月) 11:01:16リアルで勘違いしてた
スマン
0438デフォルトの名無しさん
2005/05/30(月) 12:18:16[2] 問題文(含コード&リンク):
シーザ暗号を作ってテストしなさい
(例えばABCと入力するとBCDと変換されるように)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):Visual C++
[3.3] 言語:C
[4] 期限:6/3まで
[5] その他の制限:
void angou(char *ps)⇔void kaidoku(char *ps)
こういうヒント(?)みたいなものはあるんですが…
お願いします。
0439438
2005/05/30(月) 13:00:05void angou(char *ps);
void kaidoku(char *ps);
上記ののメソッドを定義し、シーザ暗号を実装せよ。
例:IBM→HAL
対象:半角データのみ
ただしA→Z、a→z、0→9、その他の記号は処理なし
お願いします。
0440デフォルトの名無しさん
2005/05/30(月) 13:13:260441デフォルトの名無しさん
2005/05/30(月) 13:48:56# include <string.h>
# include <stdio.h>
const char lower[] = "abcdefghijklmnopqrstuvwxyza";
const char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZA";
const char digits[] = "01234567890";
char angou_char(char x)
{
char *p;
if(p = strchr(lower, x)) return p[1];
if(p = strchr(upper, x)) return p[1];
if(p = strchr(digits, x)) return p[1];
return x;
}
char kaidoku_char(char x)
{
char *p;
if(p = strchr(lower + 1, x)) return p[-1];
if(p = strchr(upper + 1, x)) return p[-1];
if(p = strchr(digits + 1, x)) return p[-1];
return x;
}
void angou(char *ps){while(*ps){*ps = angou_char(*ps); ps++;}}
void kaidoku(char *ps){while(*ps){*ps = kaidoku_char(*ps); ps++;}}
0442デフォルトの名無しさん
2005/05/30(月) 15:34:47自分の知識では書ききれません。誰か助けてください。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define samesign(x, y) (((x) > 0) == ((y) > 0)) /* 同符号なら真 */
double bisect(double a, double b, double tolerance, double (*f)(double), char **error){ double c, fa, fb, fc;
*error = NULL;
if (tolerance < 0) tolerance = 0;
if (b < a) { c = a; a = b; b = c; }
0443続き
2005/05/30(月) 15:35:12if (fa == 0) return a;
fb = f(b);
if (fb == 0) return b;
if (samesign(fa, fb)) {
*error = "区間の両端で関数値が同符号です.";
return 0;
}
for ( ; ; ) {
c = (a + b) / 2;
if (c - a <= tolerance || b - c <= tolerance)
break;
fc = f(c);
if (fc == 0)
return c;
if (samesign(fc, fa)) {
a = c;
fa = fc;
} else {
b = c;
fb = fc;
}
}
0444続き
2005/05/30(月) 15:35:47double func(double x){
return x * double log(double x) - 1;
}
/* テスト */
int main(){
char *error;
double x;
x = bisect(1, 2, 0, func, &error); /* $1 \le x \le 2$ の間で解を求める */
if (error){
printf("%s\n", error);
}else{
printf("x = % -24.16g\n", x);
}
return EXIT_SUCCESS;
警告文が下です。
In function func':
32:parse error before double'
In function main'
37:Parse error before double'
39:x undeclared
39:(eaxh undeclared identifier
is reported only once for each function it appears in.)
ちなみに、元はx^2-2=0の求根プログラムでした。
他人のソースを変えただけなんですが、このプログラム自体が読めません。
よかったら誰か助けてください。
0445続き
2005/05/30(月) 15:39:37[2] 問題文(含コード&リンク): 二分法を使って方程式の解を求める
[3] 環境
[3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):XP5.1 コマンドプロンプト
[3.3] 言語:C[4] 期限:2005年5月30日:17時まで
[5] その他の制限:C言語を使う、二分法もしくはニュートン法を使う
以上です。
0446デフォルトの名無しさん
2005/05/30(月) 17:38:52「bisect()の後に次を追加」
return c;
}
「func()のreturnを変更」
return x * log(x) - 1;
0447デフォルトの名無しさん
2005/05/30(月) 18:16:22なメモリ領域だけをmallocにより確保し、
その中を配列と同様に利用しているものである。
なお、メモリ内での配列の要素の配列順序は宣言による場合と
同じにする。
(1)下線部を埋めてプログラムを完成せよ。
(2)こうした手法の利点と欠点を述べよ。(箇条書で良い)
#include<stdlib.h>
#include<stdio.h>
int *hairetu(int *ai,int i,int j,int k,int l,int m,int n)
{ return _________________________________; }
int main(void)
{
int l=2, m=3, n=4;
int *ai;
ai = __________________________________________;
*hairetu(ai,1,2,3,l,m,n)=12345;
printf("ai[1][2][3]=%d\n", *hairetu(ai,1,2,3,l,m,n));
free(ai);
return 0;
}
0448447
2005/05/30(月) 18:19:59[2] 問題文(含コード&リンク):上記
[3] 環境
[3.1] OS:Windows/Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年5月31日10:00まで
0449デフォルトの名無しさん
2005/05/30(月) 18:30:27#include<stdlib.h>
#include<stdio.h>
int *hairetu(int *ai,int i,int j,int k,int l,int m,int n)
{ return ( 0 <= i && i < l && 0 <= j && j < m && 0 <= k && k < n ) ? ai[ ( i * m + j ) * n + k ] : 0; }
int main(void)
{
int l=2, m=3, n=4;
int *ai;
ai = ( int * )malloc( sizeof( int ) * l * m * n ); if ( ai == NULL ) return 1;
*hairetu(ai,1,2,3,l,m,n)=12345;
printf("ai[1][2][3]=%d\n", *hairetu(ai,1,2,3,l,m,n));
free(ai);
return 0;
}
0450デフォルトの名無しさん
2005/05/30(月) 18:32:26簡易化してくれる方はいませんか?
0451449
2005/05/30(月) 18:37:52ゴメン、間違った。
{ return ( 0 <= i && i < l && 0 <= j && j < m && 0 <= k && k < n ) ? ai[ ( i * m + j ) * n + k ] : 0; }
↓
{ return ( ai + ( 0 <= i && i < l && 0 <= j && j < m && 0 <= k && k < n ) ? ( i * m + j ) * n + k : 0 ); }
利点:
なし
欠点:
変数の無駄遣い。
関数の無駄遣い。
異常発生の可能性に対する処理が甘い。
コードを第三者が見たときに理解されるまで時間とコストの無駄である。
0452デフォルトの名無しさん
2005/05/30(月) 18:38:34+b
0453デフォルトの名無しさん
2005/05/30(月) 18:38:49#include<stdio.h>
int main(void) {
int index = 0, left = 0;
char a, x, s[16], b[256], temp;
printf("a?"); scanf("%c", &a);
printf("\n文字 = %c\n", a);
printf("8進 = %o\n", a);
printf("10進 = %d\n", a);
printf("16進 = %x\n", a);
x = a;
do {
s[index++] = x % 2 + '0';
x >>= 1;
} while (x);
s[index--] = '\0';
while (left < index) {
temp = s[left];
s[left] = s[index];
s[index] = temp;
++left;
--index;
}
printf("2進 = %s\n\n", s);
printf("b?"); scanf("%s", &b);
printf("\n文字列 = %s", b);
return 0;
}
0454デフォルトの名無しさん
2005/05/30(月) 18:42:45利点
・可変長配列を扱える
・動的確保のメリットを享受できる
・配列インデックスのオーバーレンジを常に検出する手法を提供できる
欠点
・直感的でない
・動的確保のデメリットを引き摺ってしまう
・オーバーヘッドが少なからず存在する
・一文字変数が混乱に拍車を掛けている
・内部構造が露呈されてしまう
結論
・こったことした割りには使えねぇなぁ
改善提案
・メモリアロケート、解放、セッター、ゲッターを一つのソースに押し込めてI/Fだけを公開することでいくつかの欠点は改善できる
(その場合、事実上C++のクラスの設計手法を流用することが検討できる)
0455デフォルトの名無しさん
2005/05/30(月) 18:43:53[2] 問題文(含コード&リンク):2つの整数データのうち大きい方を選ぶ関数を作り、
これを利用して5つのデータの最大値を求めよ。
[3] 環境
[3.1] OS:Windos XP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年06月01日1:00まで できれば早めにお願いします。
[5] その他の制限:関数を使うということしか、わかりません。
簡単な問題だと思いますが、どうぞよろしくお願いします。
0458デフォルトの名無しさん
2005/05/30(月) 18:51:11#include <stdio.h>
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int a, b, c, d, e;
scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
printf("%d\n", max(max(max(a, b), max(c, d)), e));
return 0;
}
0459291
2005/05/30(月) 19:05:49whileはできましたがdo-whileができません。
回答お願いします。一応自分でやってみたのも載せてみます…。
whileの中に式が3つも入っているのが間違いの原因なんだと思うんですが。
include <stdio.h>
int main(void)
{
int n, i, j;
printf("input number of lines:");
scanf("%d",&n);
do{
do{
printf(" ");
}while(j=0; j<n-i-1; j++);
do{
printf("*");
printf("\n");
}while(j=0; j<2*i+1; j++);
}while(i=0; i<n; i++);
return 0;
}
0460デフォルトの名無しさん
2005/05/30(月) 19:07:23ありがとうございます。できました。関数の使い方がまったく、
わからなかったので感謝しています。
0461デフォルトの名無しさん
2005/05/30(月) 19:16:36while(j=0; j<n-i-1; j++);
while(j=0; j<2*i+1; j++);
while(i=0; i<n; i++);
for文?
0462デフォルトの名無しさん
2005/05/30(月) 19:24:49#include <stdio.h>
int main(void)
{
int n, i, j;
printf("input number of lines:");
scanf("%d",&n);
i=0;
do{
j=0;
do{
printf(" ");
}while(j++ < n-i);
j=0;
do{
printf("*");
}while(j++ < 2*i);
printf("\n");
}while(i++ < n);
return 0;
}
0463デフォルトの名無しさん
2005/05/30(月) 19:38:24ありがとうございます。ありがとうございまず。
さて、できなかった理由を考察してみます。
0464デフォルトの名無しさん
2005/05/30(月) 19:45:28[2] 問題文(含コード&リンク):
キーボードから入力した値の逆数を求め、答えを表示させるプログラムを作成せよ。
割り切れない場合は循環部も表示させよ。
ただし、入力する値は正の整数で、小数点以下の桁数は50桁までとする。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月5日16:00まで
[5] その他の制限:
繰り返しにはfor文を使うこと
条件分岐はif文を使うこと
いろいろ調べてみたのですがわかりませんでした・・・。
よろしくお願いします。
0465424
2005/05/30(月) 19:48:58ありがとうございました。無事解決することができました。
�Aのほうですが、添字演算子を用いずに行うことは可能でしょうか?
0466デフォルトの名無しさん
2005/05/30(月) 19:59:00情報処理概論�T
〔2〕問題文(含コード&リンク)
秒単位で表現された時間をよみこみ、時間、分、秒の単位に変換して
結果を出力するプログラムを作りなさい
3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月1日まで
[5] その他の制限:whileを途中まで習いました
#include <stdio.h>
int main(void) {
int t, h, m, s;
printf("input time:"); scanf("%d", &t);
h = t / 3600; t -= h * 3600;
m = t / 60; t -= m * 60;
s = t;
printf("%dh %dmin %dsec", h, m, s);
return 0;
}
上のプログラムのt -= h * 3600やt -= m * 60;についている
「-」と「return 0;」の意味がわからないのですが、
どういうことですか?
書いたプログラムについて説明しなければならないので未知のことは
避けたいのですが、上記のものを使わない回答もできますか?
あれば教えてください。
大変遅くなりましたが前回答えてくださった方本当にありがとうございました!!
0467デフォルトの名無しさん
2005/05/30(月) 20:04:42ttp://www9.plala.or.jp/sgwr-t/c/sec14.html#s14-2
0468デフォルトの名無しさん
2005/05/30(月) 20:47:15(Value -= data ) => Value = Value - data
つまり、Valueからdata分を引いてまたValueに格納する意味を持つ。
0469デフォルトの名無しさん
2005/05/30(月) 20:55:11return 0;
というのは関数からの返り値を設定している。(この場合はmainの。
void以外の返り値を設定した場合必ず関数の末尾につけなければいけない。
返り値の設定は関数の宣言したときに決定して、その後はそれに従わなければならない。
0470デフォルトの名無しさん
2005/05/30(月) 20:56:44補足。
自作関数の場合は別に返り値の値は0でなくとも良い。
0471デフォルトの名無しさん
2005/05/30(月) 21:07:48[2] 問題文:テキストデータを読み込み、その内容を表示をさせる。
その際、一部の項目を昇順にソートさせて表示させる。
テキストの内容は以下の通り。ソートさせるのは「tanka」の数値。
no namae tanka
01 缶ビール 500
02 赤ワイン 1200
03 白ワイン 1000
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):bcc
[3.3] 言語:C
[4] 期限:2005年5月31日:12時まで
構造体・共用体まで習ったのですが、いまいち理解が出来てません。
よろしくお願いします。
0472デフォルトの名無しさん
2005/05/30(月) 21:42:33#include <stdlib.h>
typedef struct { int no; char namae[100]; int tanka; } Recode;
int read_recode(FILE *fp, Recode *r, int n)
{int i;char fmt[20];sprintf(fmt, "%%d %%%ds %%d", (int) (sizeof(r->namae) - 1));
for (i = 0; i < n && fscanf(fmt, &r->no, &r->namae, &r->tanka) ; i++, r++) ;
return i;
}
void write_recode(FILE *fp, Recode *r, int n)
{
int i;
for (i = 0; i < n; i++, r++) printf("%02d %s %d\n", r->no, r->namae, r->tanka);
}
int compare_recode(const void *va, const void *vb)
{
Recode *a = (Recode *) va; Recode *b = (Recode *) vb
return a->tanka - b->tanka; /* オーバーフローするかも */
}
void sort_recode(Recode *r, int n)
{
qsort(r, n, sizeof(*r), compare_recode);
}
int main(void)
{
Recode r[100];
int n = read_recode(stdio, r, sizeof(r)/sizeof(r[0));
sort_recode(r, n);
write_recode(stdout, r, n);
return 0;
}
0473デフォルトの名無しさん
2005/05/30(月) 21:56:25[2] 問題文:
class Score {
// デフォルト属性は非公開
int scores[4];
int average;
void calc_average(){
int tmp=0;
for( int i=0; i < 4 ; i ++ )tmp+=scores[i];
average = tmp/4;
}
public: // 必要なものだけ「公開」する.
void set_score(int index, int value){
scores[index] = value;
calc_average();
}
int get_score(int index){
return scores[index];
}
int get_average(){
return average;
}
};
上記について, 領域外アクセスの危険性がなくなるよう, Scoreを改良して下さい.
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ(バージョン):VC++
[3.3] 言語:C++
[4] 期限:一週間
領域外のアクセスが来た場合にどういう処理をして
どういう値を返せばいいのかよくわかりません。
どうぞよろしくお願いします。
0474デフォルトの名無しさん
2005/05/30(月) 22:09:28BOOST::optionalを返すという手がある。
冗長な方法だと、
SetはintにしてGetをポインタにする。(Getは異常値としてNULLを返す。
ポインタにした場合、返ってきた変数の寿命を明確にするべきだと思う。(次、Setするまで有効とか。
ただ、識者はもっといい方法を知ってるかもしれないな。
0475デフォルトの名無しさん
2005/05/30(月) 22:12:04例外を投げれば良いんじゃないか?
0476デフォルトの名無しさん
2005/05/30(月) 22:12:31マジックナンバーをconst定数にしたほうがよくないか?
0477デフォルトの名無しさん
2005/05/30(月) 22:24:01[2] 問題文(含コード&リンク):
A.宣言による場合 short d[L][M][N]
B.動的確保による場合(Aと同じサイズとする)
・short型の3次元配列を生成した場合について、以下の説明をせよ。
(AとBの両方について。short型とポインタ型のサイズはそれぞれ2バイトと4バイトとする)
(1)メモリ使用量(L,M,Nを用いて表せ)
(2)関数への渡し方
(3)関数での受け方
[3] 環境
[3.1] OS:WindowsXP/Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:明日の10時まで
[5] その他の制限:なし
プログラムではないのですが、どなたかよろしくお願いいたします。
0478デフォルトの名無しさん
2005/05/30(月) 22:40:24A.宣言による場合 short d[L][M][N]
B.動的確保による場合 short (*p)[M][N}
(1)メモリ使用量(L,M,Nを用いて表せ)
A.2*L*M*N
B.2*L*M*N+4+α
(2)関数への渡し方
A.f(d);
B.f(p);
(3)関数での受け方
A.f(short (*d)[M][N])
B.f(short (*p)[M][N])
0479デフォルトの名無しさん
2005/05/30(月) 22:41:30#include <stdio.h>
int main(void){
int n, i, tmp;
printf("正の整数を入力して下さい->");
scanf("%d", &n);
if(n < 1) return 0;
printf("%dの逆数は ", n);
if(n == 1){
printf("1\n");
return 0;
}
tmp = 1;
printf("0.");
for(i = 0; i < 50; i++){
tmp *= 10;
printf("%d", tmp / n);
tmp %= n;
if(tmp == 0) break;
}
printf("\n");
return 0;
}
0480477
2005/05/30(月) 23:02:09動的確保による場合は、おそらくポインタのポインタのポインタを使うことを
期待されているような気がするのですが、その場合は、
メモリ使用量=L*M*N*sizeof(X)+L*M*sizeof(X *)+L*sizeof(X **)+sizeof(X ***)バイト
X:配列の型
でいいでしょうか?
もしよかったら、Xにはそれぞれ何が入るのか教えてください。
あと、その場合の関数での受け方は
f(X型 ***p)ですか?
0481デフォルトの名無しさん
2005/05/30(月) 23:10:28> おそらくポインタのポインタのポインタを使うことを
> 期待されているような気がするのですが
んなこたー無いだろ。
0482477
2005/05/30(月) 23:18:31int m=2,n=3;
int **aai;
int *tmp;
aai=(int **)malloc(sizeof(int *)*m;
tmp=(int *)malloc(sizeof(int)*m*n;
というのを使っていたので、これの3次元配列を期待していると思っているのですが、
どうでしょうか?
0483デフォルトの名無しさん
2005/05/30(月) 23:36:17可変配列を作るならそうだが、配列の大きさが確定なら
リニアに一度に確保する方が効率的と思わんかね。
0484デフォルトの名無しさん
2005/05/30(月) 23:42:04おそらく出題者はその解答を期待しているだろうが、
「動的に確保する」という条件しか与えられていない以上、
>>478 は間違いではない。
0485471
2005/05/30(月) 23:45:22早速上げていただきありがとうございました。
ところで同じ結果を求めるにあたって
構造体と共用体を両方使って書くことは可能でしょうか?
0486477
2005/05/30(月) 23:46:23説明しろとあるのですが、
関数の渡し方と受け方はどのように説明したらよいのでしょうか?
0487デフォルトの名無しさん
2005/05/30(月) 23:54:55どうしても両方使って書けと言うのなら不可能ではないが、
この問題で共用体を使うのは全く意味がない。
0488デフォルトの名無しさん
2005/05/30(月) 23:58:04>>478では説明になっていないか?
仮に動的確保の方法を short ***p としたら、
渡し方: f(p)、受け方: f(short ***p)
より的確な説明があると思うか?
0489477
2005/05/31(火) 00:14:44思っていましたが、確かにそれ以上何を説明するのかがわからないので、このまま
出そうと思います。何回もありがとうございました。
0490485
2005/05/31(火) 00:28:09授業の時にこの問題の説明で、共用体に関数fopenとfputsを使ったやり方でも
出来たら解いてみよと言われたので、もしよろしかったらご教授願えないでしょうか。
0491442
2005/05/31(火) 01:13:21有難う御座いました。
0492デフォルトの名無しさん
2005/05/31(火) 03:01:180493デフォルトの名無しさん
2005/05/31(火) 06:05:06・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
(>>1より)
ヒントだけでもあげやう。
>>472 を元にするなら、
・微妙にバグってるんでバグを取る。
・fopen()はmain()の中でやる。(サブルーチンは対応してる)
・fputs()を使うには邪道だが、write_recode()でsprintf()→fputs()を使う。
・共用体については、「この問題では使いどころがない」と注釈を入れる。
出来たのを、あげてくれると、他の人にもわかりやすいので、よろしく。
0494デフォルトの名無しさん
2005/05/31(火) 09:42:48あぁ〜なるほど。有難うございました!
0495デフォルトの名無しさん
2005/05/31(火) 10:01:24[2] 問題文(含コード&リンク):配列に大きさの異なる10個の整数を先頭から順に詰める。この10個のデータの最小値をくり返し文をつかってさがす。
最小値とそれがはいっている配列要素の添字を表示する。しかしキーボードから入力するかわりに0~99の乱数を10個発生させるものとする。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C言語
[4] 期限:2005年5月31日18時まで
期限ぎりぎりまで考えたのですがさっぱり、、先輩方よろしくおねがいします。
0496デフォルトの名無しさん
2005/05/31(火) 10:22:55[2] 問題文(含コード&リンク): 配列に0から99の乱数を10個つめなさい。
この配列をバブルソートを用いて昇順に並べ替えなさい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C言語
[4] 期限:2005年6月1日朝9時まで
明日までの課題なのですがさっぱり,よろしくおねがいします。
0497デフォルトの名無しさん
2005/05/31(火) 10:24:04#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
int main( void )
{
int num[10], min_idx, count1, count2, flg;
srand( getpid() );
for( count1=0; count1<10; count1++ ) {
do {
flg = 0;
num[count1] = rand() % 100;
for( count2=0; count2<count1; count2++ ){
if( num[count2] == num[count1] ) {
flg = 1;
break;
}
}
} while( flg );
}
min_idx=0;
for( count1=1; count1<10; count1++ ){
if ( num[count1] < num[min_idx] )
min_idx = count1;
}
printf( "%d %d\n", num[min_idx], min_idx );
return 0;
}
0498デフォルトの名無しさん
2005/05/31(火) 10:31:590499デフォルトの名無しさん
2005/05/31(火) 10:35:08#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
int main( void )
{
int num[10], count1, count2, val;
srand( getpid() );
for( count1=0; count1<10; count1++ )
num[count1] = rand() % 100;
for( count1=1; count1<10; count1++ ){
printf( "%d ", num[count1] );
}
puts("");
for( count1=0; count1<10-1; count1++ )
for( count2=10-1; count2>count1; count2-- )
if( num[count2]<num[count2-1] ){
val = num[count2];
num[count2]=num[count2-1];
num[count2-1]= val;
}
for( count1=1; count1<10; count1++ ){
printf( "%d ", num[count1] );
}
puts("");
return 0;
}
0500デフォルトの名無しさん
2005/05/31(火) 11:05:33復の式を用いて、近似的に x の平方根を求めるプログラムを作成。
--
xの平方根は、次の計算を| s(i+1)-s(i) | < ε, i=1,2,...となるまで繰
り返すことによって求めることができる。εは収束判定数である。
s(i+1) = ( s(i) + x / s(i)) / 2
ただし、s(1) = 1 。
なお、ε=0.00001として計算する。
明日の昼までにお願いします...
0501デフォルトの名無しさん
2005/05/31(火) 11:29:38授業までに完成させれませんでした・・・無念。
0502デフォルトの名無しさん
2005/05/31(火) 11:30:22マルチウザス
>905 :デフォルトの名無しさん :2005/05/31(火) 11:03:06
>これどーやるの?
>キーボ ードから実数 x を入力し、ニュートン法と呼ばれる次のような反
>復の式を用いて、近似的に x の平方根を求めるプログラムを作成せよ。
>--
> xの平方根は、次の計算を| s(i+1)-s(i) | < ε, i=1,2,...となるまで繰
>り返すことによって求めることができる。εは収束判定数である。
>
> s(i+1) = ( s(i) + x / s(i)) / 2
>ただし、s(1) = 1 とする。
>
> なお、ε=0.00001として計算すること。
0503デフォルトの名無しさん
2005/05/31(火) 11:44:24答えちゃったじゃん
ていうかこっちが宿題スレじゃん
まちがえた
0504デフォルトの名無しさん
2005/05/31(火) 12:02:57プログラミングのレポートで「検討と考察」って
どういうこと書けばいいでしょう…orz
0505デフォルトの名無しさん
2005/05/31(火) 12:05:01こぶしでなぐりつけたあと、くびをしめてころす
0507デフォルトの名無しさん
2005/05/31(火) 12:55:02[2] 問題文:文字列str内のすべての数字文字を削除する関数 void del_digit(char str[])
を添字演算子を用いずに作成せよ.例えば,「AB1C9」を受け取ったら,「ABC」を 返す.
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):bcc
[3.3] 言語:C
[4] 期限:2005年6月1日
添字演算子を用いずにというところでつまづいています…
0508デフォルトの名無しさん
2005/05/31(火) 12:59:23{
return c >= '0' && c <= '9';
}
void del_digit(char str[])
{
char *s, *t;
for (s = t = str; *s; s++)
if (!is_digit(*s))
*t++ = *s;
*t = '\0';
}
0509デフォルトの名無しさん
2005/05/31(火) 13:33:02他の手法と比較し、今の手法を使っている理由を示す。
現在の手法の限界を書く。
同種の手法で解ける問題を書く・・・など。
0510太郎
2005/05/31(火) 13:36:01[2] 問題文(含コード&リンク):
3種類の括弧 (), {}, [] を含む文字列において,括弧の対応に
整合性がとれているかを判断する関数 int parenthesisCheck(char str[]) を作れ。
この関数は文字列 str 内の括弧の整合性がとれていれば 1 を,とれていなければ 0 を
関数値として返す。ただし,str 内の括弧以外の文字は無視する。
もちろん,文字列 str はヌル文字 '\0' で終了しているものとする。
たとえば, (a[b(cd){e}][f]) は整合性がとれているが,
(a[b(cd){e})][f] は整合性がとれていない。
ヒント:スタックを用いる。文字列を最初から見ていき,
開き括弧があるとそれをスタックに push する。閉じ括弧があると,
スタックからデータを pop し,それが閉じ括弧と対応するかどうかを判定する。
[3] 環境
[3.1] VineLinux最新版
[3.2] コンパイラ(バージョン) gcc
[3.3] 言語:C
[4] 期限:2005年5月31日24:00まで
お願いします。
0511デフォルトの名無しさん
2005/05/31(火) 13:50:12char *ks="({]",*ke=")}]",s=1,t[256];
while(*p){for(i=0;i<3;i++){if(*p==ks[i])t[s++]=i;else if(*p==ke[i])if(t>1&&t[s-1]==i)s--;else return 0;}p++}
return 1;
0512デフォルトの名無しさん
2005/05/31(火) 13:53:42{
char stack[100];
int sp = 0;
for ( ; *str; str++) {
switch (*str) {
case '(': case '{': case '[':
if (sp >= sizeof(stack)/sizeof(stack[0]))
return 0; /* スタックオーバーフロー */
stack[sp++] = *str;
break;
case ')':
if (sp <= 0)
return 0;
if (*stack[--sp] != '(')
return 0;
break;
/* } や ]についても同様 */
}
}
return 1;
}
0513デフォルトの名無しさん
2005/05/31(火) 13:59:580514デフォルトの名無しさん
2005/05/31(火) 14:04:04スタック残を忘れてた
>>512の方が優秀だな
0515デフォルトの名無しさん
2005/05/31(火) 14:07:57素でボケた。
if (stack[--sp] != '(')
ね。
0516太郎
2005/05/31(火) 14:43:58助かりましたー。
0517デフォルトの名無しさん
2005/05/31(火) 14:50:48あれ?2次エロ画像は?
0519デフォルトの名無しさん
2005/05/31(火) 18:49:010520デフォルトの名無しさん
2005/05/31(火) 18:49:050521デフォルトの名無しさん
2005/05/31(火) 18:58:12[2] 問題文(含コード&リンク):
-9999を読み込むまで次々と整数値を読み込んでいき、合計値および平均値を表示するプログラム。
なお、最後に読み込んだ-9999は合計には加えない。do while文を使用すること。
変数は下記を使用すること。
int i; ←カウンタ
int n; ←整数値入力エリア
int sum; ←合計算出エリア
実行結果
1個目:15 2個目:65
3個目:84 4個目:96
5個目:23 6個目:45
7個目:85 8個目:-9
9個目:57 10個目:-9999
合計 : 461
平均 : 51.22
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C++
[4] 期限:明日まで。
[5] その他の制限:
よろしくお願いします。
0522デフォルトの名無しさん
2005/05/31(火) 19:02:51[2] 問題文(含コード&リンク): 正の実係数a,bによって定義される関数f(x)=ax-bx^3を考える。
(x>=0)の定義域においてf(x)を最大化するxの値をx_0とするとき、f(x)を0からx_0まで
積分した値を求めるプログラムをお願いします。 ∫[0〜x_0]f(x)dx
[3] 環境
[3.1] OS:WinXp
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 明日
0523デフォルトの名無しさん
2005/05/31(火) 19:08:570524デフォルトの名無しさん
2005/05/31(火) 19:26:36i = sum = 0;
do {
if (scasnf("%d", &n) != 0 && n != -9999)
break;
sum += n;
i++;
} while (1);
if (i > 0)
printf("合計 %d\n平均 %f\n", sum, (double) sum / i);
>>522
f'(x) = -2bx^2+a = 0 のところで最大がある。
このとき、x^2 = a / -2b ∴ x = ±√(a/-2b)
・・・なんか数学板のネタな気がしてきた・・・挫折。
0525デフォルトの名無しさん
2005/05/31(火) 19:38:27微分するとa-2bx^2だから、x=0のときの傾きはaで正。
なので、x_0 ≠ 0。
頂点は傾きが0だから、
a-2bx^2=0
a = 2bx^2
x = ±√(a/2b)
a > 0、b >0 だから
x_0=√(a/2b)
あとは、f(x)を積分。
0526デフォルトの名無しさん
2005/05/31(火) 20:05:20f(x)=ax-bx^3 とすると。
・f'(x) = a - 3bx^2 = 0 のとき、x = ±√(a/3b)
・3次関数の形が↓極小↑極大↓
・a>0, b>0
なので、x >= 0とき f(x)の最大値はx = √(a/3b)のときである。これが、x_0。
∫f(x)dx = ax^2/2 - bx^4/4 + C;
定積分してやると、
(5a^2)/(36b)
・・・うーん。なんか計算ミスしてそぉだ。
まあ、そんなわけで。
double func(double a, double b)
{
return 5.0 * a * a / 36.0 / b;
}
ってことでどーだろーか。
0527デフォルトの名無しさん
2005/05/31(火) 20:41:17[1] 授業単元: 情報処理基礎
[2] 問題文(含コード&リンク): データの個数のnお呼びnこのデータをファイルから読み込み、
そのデータについて、データ数、最大値、最小値、平均、不偏分散、
標準偏差を計算しファイルに出力するプログラムを作成し、プログラム、
出力結果を1つのファイルにしてプリントアウトし提出せよ
[3] 環境
[3.1] OS:Windows/Linux/等々 Windous
[3.2] コンパイラ(バージョン): Borland C++compiler
[3.3] 言語:C
[4] 期限:2005年6月1日14:30まで
[5] その他の制限:
0528527
2005/05/31(火) 20:42:39void filedta(FIL *in int,int*n1,double data[])/*データを読み込みデータ数データを返す*/
voidaverage(int n,double data[],double *max double *min,double *ave,double *vor,double *sigma,FILE *out)
/*
max min ave vor sigmaを計算して結果をファイルに書き出すとともにメンプログラムに返す
*/
プログラムのアルゴリズム
使用する変数関数の宣言
|
入力ファイルの先頭アドレスを指定する←FILE*in in=fopen();使用
|
出力ファイルの先頭アドレスを指定する←FILE*out out=fopen();使用
|
入力データの読み込み n,data[]←ファイルが見つからない場合はエラーメッセージを
| プリントアウト 関数filedata()
最大値、最小値、平均、不偏分散、標準偏差の計算とファイルへの出力←関数average()
よろしくお願いします
0529デフォルトの名無しさん
2005/05/31(火) 20:58:510530デフォルトの名無しさん
2005/05/31(火) 22:00:12filedata()ってばバッファオーバーランを回避できないよなぁ。
agerage()の計算と出力を同時に行うのは・・・やっぱしイヤ。
センセ、下手な教え方せんでください。
とりあえず、要点だけ。
e に平均が入っているとして、
double s = 0; /* 偏差平方和 */
for (i = 0; i < n; i++)
s += (data[i] - e) * (data[i] - e);
*vor = s / (n - 1); /* 不偏分散 */
*sigma = sqrt(s / n); /* 標準偏差 */
平均、最大、最小の各値はの求め方はさんざん書いてあるので、これで十分でしょう。
0531521
2005/05/31(火) 22:35:52この問題ってbreak文なしでも記述できるんでしょうか?
0532デフォルトの名無しさん
2005/05/31(火) 22:46:330533デフォルトの名無しさん
2005/05/31(火) 23:35:39i = -1;
n = sum = 0;
do {
sum += n;
i++;
} while (!scanf("%d", &n) || n != -9999);
0534デフォルトの名無しさん
2005/05/31(火) 23:59:06.i ノソ~ノ ハ .)リ
从* ´ー` リノシ おやしみだっぺ
/^^ ^^\
(_つ ・ 人 ・) )
0535デフォルトの名無しさん
2005/06/01(水) 00:01:49[2] 整数データを標準入力から与え,小さい順に並び替え,出力するプログラムを作りなさい。
ただし、プログラムの仕様は以下の通りです。
(1)0が入力されたら、入力の終わりとする。
(2)標準入力された正数データのみを計算の対象とし、最後に入力された0はデータには含めない。
(3)あらかじめ用意した配列サイズを越えた場合,あるいは入力が一つもない場合は,その旨,エラーを表示し
実行を終了すること。
(4)配列サイズは各自で設定して構わない。
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C++
[4] 期限:6月3日
よろしくお願いします。
0536デフォルトの名無しさん
2005/06/01(水) 00:06:48[2] 問題文(含コード&リンク):ファイルを比較するプログラムを作成せよ。
コンパイラで「dif ファイル名1 ファイル名2」と入力すれば比較することができるようにする。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:
ファイルのコピー「cp ファイル名1 ファイル名2」は、検索したりして出来たのですが比較がさっぱりわかりません。
よろしくお願いします。
0537デフォルトの名無しさん
2005/06/01(水) 00:38:38エラーチェックは省略。適宜追加してくれ。
#include <stdio.h>
int main(int argc, char **argv) {
FILE *fp1 = fopen(argv[1], "rb");
FILE *fp2 = fopen(argv[2], "rb");
int c1, c2;
do {
c1 = getc(fp1);
c2 = getc(fp2);
} while (c1 == c2 && c1 != EOF);
printf (c1 == c2 ? "おなじ\n" : "ちがう\n");
fclose(fp1);
fclose(fp2);
return 0;
}
0538デフォルトの名無しさん
2005/06/01(水) 01:11:44[2] 問題文(含コード&リンク):基数の変換「○進法→○進法」に
するプログラムを作りなさい。(例:3進法→5進法)
ただし、整数に限ってよい。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):VC++
[3.3] 言語:C
[4] 期限:2005年6月1日14:00まで
[5] その他の制限:下のアルゴリズムを使うこと。
int conv2(int d1, int m1, int x1[], int d2, int m2, int x2[])
{
int i, j, r, t;
for(i = 0; m1 > 0 && i < m2; i++){
r = 0;
for(j = m1 - 1; j >= 0; j--){
t = d1 * r + x1[j];
x1[j] = t / d2;
r = t % d2;
}
x2[i] = r;
while(m1 > 0 && x1[m1 - 1] == 0)
m1--;
}
if(m1 == 0)
return i;
else
return -1;
}
どうかお願いします。教えてください。
0539536
2005/06/01(水) 01:12:16ありがとうございます。
早速やってみたんですが、「argcが使われていません」と出ました。
でも「dif ファイル名1 ファイル名2」で実行してみたら比較できました。
0540デフォルトの名無しさん
2005/06/01(水) 01:29:26ttp://www.uplo.net/www/vip11776.zip
0541538
2005/06/01(水) 01:30:41『conv2()は,d1進m1桁の数x1[]を,d2進たかだかm2桁の数x2[]に
変換し,変換後の桁数を返す。
変換後の桁数がm2を超えれば-1を返す。』
付け足しをしてすみません。
考えても分からなかったので、助けてください。
お願いします。
0542デフォルトの名無しさん
2005/06/01(水) 02:09:00[2] 問題文(含コード&リンク):
英文をリダイレクションを使って、プログラムの標準入力から読み込み、
リスト構造に格納するプログラムを作成せよ。
標準入力からのテキストの読み込みには、readword関数を用いること。
例えば入力文字が「Hello, how are you doing?」の場合,
「Hello」「 how」「 are」「 you」「 doing」の5つの文字列をリスト構造に格納した後に
Hello
how
are
you
doing
と出力したいのです。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:金曜日まで
一応プログラムを書いてみました。
リスト構造がまだよく理解できていないので、突っ込みどころ満載だと思いますが…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/480.txt
現在コンパイル時に表示されるエラーは下の通りです。
kadai03D-1.c: In function `main':
kadai03D-1.c:26: warning: passing arg 1 of `insert' makes integer from pointer without a cast
kadai03D-1.c: In function `insert':
kadai03D-1.c:79: warning: passing arg 2 of `strcpy' makes pointer from integer without a cast
よろしくお願いします。
0543デフォルトの名無しさん
2005/06/01(水) 02:38:02なんかグチャグチャでスマソ
#include <stdio.h>
#include <stdlib.h>
#define M1MAX 20
#define M2MAX 20
/* ここにconv2貼り付け */
int main(void){
int d1, d2;
int i = 0, tmp, m1, m2;
int x1[M1MAX], x2[M2MAX];
char buf[M1MAX+1];
char table[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("何進数の数入力すんの?(1-36)>");
scanf("%d", &d1);
printf("%d進数の数入力すれば>", d1);
scanf("%s", buf);
while(buf[i] != '\0') i++;
m1 = i;
0544デフォルトの名無しさん
2005/06/01(水) 02:39:01for(i = m1 - 1; i >= 0; i--){
tmp = m1 - i - 1;
if(buf[tmp] >= '0' && buf[tmp] <= '9'){
x1[i] = buf[tmp] - '0';
}else if(buf[tmp] >= 'A' && buf[tmp] <= 'Z'){
x1[i] = buf[tmp] - 'A' + 10;
}else{
printf("入力おかしくない?\n");
exit(2);
}
if(x1[i] > d1 - 1){
printf("これ%d進法じゃなくない?\n", d1);
exit(2);
}
}
printf("何進数の数にしたいの?(1-36)>");
scanf("%d", &d2);
m2 = conv2(d1, m1, x1, d2, M2MAX, x2);
if(m2 != -1){
for(i = m2 - 1; i >= 0; i--){
printf("%c", table[x2[i]]);
}
}
else{
printf("なんか無理っぽい");
}
printf("\n");
return 0;
}
0545デフォルトの名無しさん
2005/06/01(水) 02:41:08insert関数の引数のchar stringをchar *stringにすればいいよ
0546デフォルトの名無しさん
2005/06/01(水) 02:42:54エラーメッセージをよく読めば分かるのに。
insert()の第一引数は、char stringになってるけど
これは間違いで、char* stringのつもり
でしょ。
0547546
2005/06/01(水) 02:43:150548デフォルトの名無しさん
2005/06/01(水) 03:33:16insert()がheadを返してるせいで、
ずっとpがNULLになってるから、p==NULLが評価されることでリストが逆順になっちゃってるね。
insert()はr(現在のノード)を返すようにして、pを変化させるのがいくない?
0549デフォルトの名無しさん
2005/06/01(水) 04:07:12[1] 授業単元: STL
[2] 問題文(含コード&リンク):文章のスペルチェックをするプログラム。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):MSVC
[3.3] 言語:C++
[4] 期限:なるべく早く
[5] その他の制限:
std::set<std::string>(dictionaryを格納し、検索する),
std::map<std::string,std::string>を使用。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/482.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/483.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/484.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/485.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/486.txt
にEnglish Word 辞書があります。(サイズが大きいので、5つにわけました)
それを1つのファイルDictionary.txtにしてください。それを読み込みます。
input.txtにスペルチェックする文章が入っています。
それと先の辞書と比較し、ない単語は、ユーザーにi,a,r,cのどれかを入力させます。
i:一度その一語だけを無視する。
a:ファイルの中にあるその単語全てを無視する。
r:一度その一語を他の単語に書き換える。書き換える単語は聞く。
c:ファイルの中にあるその単語全てを他の単語に書き換える。
書き換える単語は一度だけ聞く。
サンプルラン http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/487.txt
main.cpp http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/481.txt
どうか、よろしくお願いします。
0550デフォルトの名無しさん
2005/06/01(水) 05:53:23嫌ですぅ
0553デフォルトの名無しさん
2005/06/01(水) 10:25:48[2] 問題文:
問題1.複利計算
キーボードから
数値 x 円と
預ける年数 r 年と
年利率 a %
を入力してもらい、複利計算で貯金がどれくらい増えるかを計算するプログラムを作成せよ。
なお複利計算は 10000 円を年利0.8%でまわした場合
・1年後には 10000*(1+0.008) = 10080
・2年後には 10080*(1+0.008) = 10160
・3年後には 10100*(1+0.008) = 10241
となるような計算である。
問題2.qの剰余系
キーボードから、整数値Nと整数値qを入力してもらい、
1〜Nのうちで qで割り切れるものを表示させるプログラムを作成しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C
[4] 期限:6/7まで
[5] その他の制限:条件分岐と繰り返しまで習いました。
条件分岐と繰り返しの複合問題です。
昨日1日かけて考えてもわからなかったので、
2問ありますが、どなたかご教授お願いします。
0554デフォルトの名無しさん
2005/06/01(水) 11:30:11まだ初心者だからスマートにはかけなかったが…
#include<stdio.h>
main(){
double money,rate;
int yeah,i;
printf("いくら預けますか?:");
scanf("%lf",&money);
printf("年利率を設定してください(%):");
scanf("%lf",&rate);
printf("何年預けますか?:");
scanf("%d",&yeah);
printf("%f円を年利率%f%で%d年預けます\n",money,rate,yeah);
rate=0.001*rate;
for(i=0;i<yeah;i++) money=money*(1+rate);
printf("%d年後の預金は%f円です。\n",yeah,money);
}
0555デフォルトの名無しさん
2005/06/01(水) 11:40:29の"SUN", "MON", "TUE","WED", "THU", "FRI", "SAT"の部分をキーボードから
入力させるようにしたいのですが、
for( i = 0; i < 7; i++ )
{
printf( "data %d >>>", i + 1 );
gets( strings[i] );
}
のようにしてもできませんでした。どのようにすればよいでしょうか?
0556デフォルトの名無しさん
2005/06/01(水) 11:43:38問題2も作った
#include<stdio.h>
main(){
int N,q,i;
printf("整数を入力してください:");
scanf("%d",&N);
printf("割る数を入力してください:");
scanf("%d",&q);
printf("1〜%dのうちで%dで割り切れる数字は以下の通りです\n",N,q);
for(i=1;i<=N;i++){
if(i%q==0) printf("%d ",i);
}
}
数値が大きくなったら処理に時間がかかるけど…まぁ、大丈夫だと思う。
…って俺は自分の課題も終わってないのに何してるんだorz
0557デフォルトの名無しさん
2005/06/01(水) 11:45:12・利率の計算が間違っている。0.001ではないな。
・預金の場合、毎年切り捨てて計算するべき。0.1円を預けるわけではないのだから。
>>555
・説明が下手なんだから部分ではなく全体を貼れ。
・但しここは宿題スレだから初心者スレにでも逝け。
0558デフォルトの名無しさん
2005/06/01(水) 12:03:58malloc()
0559デフォルトの名無しさん
2005/06/01(水) 12:04:46指摘サンクス!
おお…確かに利率が間違ってる。問題文に書かれたとおりに計算してしまいました
やっぱり切り捨てた方が良いですね。書く時にどっちにしようか迷ったんですけど…
ということで改良(?)版を
#include<stdio.h>
main(){
double rate;
int money,yeah,i;
printf("いくら預けますか?:");
scanf("%d",&money);
printf("年利率を設定してください(%):");
scanf("%lf",&rate);
printf("何年預けますか?:");
scanf("%d",&yeah);
printf("%d円を年利率%f%で%d年預けます\n",money,rate,yeah);
rate=0.01*rate;
for(i=0;i<yeah;i++) money=money*(1+rate);
printf("%d年後の預金は%d円です。\n",yeah,money);
}
0560デフォルトの名無しさん
2005/06/01(水) 12:15:41for(i=0;i<yeah;i++) money=money*(1+rate);
じゃなくて
rate=0.01*rate+1.0;
for(i=0;i<yeah;i++) money=money*rate;
のほうがいいん希ガス?
0561デフォルトの名無しさん
2005/06/01(水) 12:16:57orz
0562デフォルトの名無しさん
2005/06/01(水) 12:26:33[2] 問題文(含コード&リンク):
『ある個数のデータ群の中の最小値を見つける。さらにそのデータは何番目のデータだったかを探る』
このアルゴリズムを考えて、フローチャートまたはPADで示すこと。
使用するメモリはどんな役割を持っているかも記述すること。』
[4] 期限:2005/06/07 (金)
かなり初歩的な問題なのだろうと思いますが、教授の説明が
あまりに下手糞なので、もうお手上げ状態です。
どなたか僕に分かりやすく解説してくれませんか?
よろしくお願いします。
0563562
2005/06/01(水) 12:30:28[4] 期限:2005/06/03 (金)
よろしくお願いします・・・
0564デフォルトの名無しさん
2005/06/01(水) 12:58:36問題文はこれです。
http://pc8.2ch.net/test/read.cgi/tech/1116914132/549
辞書のリンクが間違ってました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/482.zip
です。以下4つとも同じく、txtではなくzipです。
自分なりにやってみたのですが、これです。 Runはします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/488.txt
空白を読み込めないのと、選択のc(たぶんstd::map<std::string,std::string>を使うのかな?)、
あと既存の関数の使い方がわかりません。
どなたかご教授してください。
お願いします。
0565デフォルトの名無しさん
2005/06/01(水) 13:07:54アルゴリズムが分からないのか?
それともフローチャート or PADでの示し方が分からないのか?
前者ならこれを見てフローチャート or PAD作れ。
ttp://www.uplo.net/www/vip11872.zip
0566デフォルトの名無しさん
2005/06/01(水) 13:10:19なぜ
bool charIsPartOfWord(const char c)
にisalpha()を使わないのか悩む。
0567デフォルトの名無しさん
2005/06/01(水) 13:43:20[2] 問題文(含コード&リンク): case文を用いて、3〜5が入力されたら春。6〜8が入力されたら夏。
9〜11は秋。12〜2は冬を表示するプログラム。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月2日まで
[5] その他の制限:case文の基礎まで
case文をそのまま繋げて提出したところ、(case:3 printf("春"); case:4 printf("春")…)もっとシンプルにするようにと言われてしまいました。
caseの条件をまとめるというのは可能なのでしょうか?
0568デフォルトの名無しさん
2005/06/01(水) 13:47:16case 3: case 4: case 5:
printf("春");
break;
/* あとはためしてみなっせ */
}
0569デフォルトの名無しさん
2005/06/01(水) 13:48:42switch ( ... ) {
case 1 :
case 2 :
case 12 :
...;
break;
case 3 :
case 4 :
case 5 :
...;
break;
case 6 :
case 7 :
case 8 :
...;
break;
case 9 :
case 10 :
case 11 :
...;
break;
}
基本だ。
0570デフォルトの名無しさん
2005/06/01(水) 13:53:53[2] 問題文(1): 任意の個数の整数を入力し、それを格納した配列と要素数を返す関数うを作りなさい。また、適当なmain関数を補って実行例を示しなさい。
[2] 問題文(2): 任意の長さの1行分の文字列を任意の行数分入力し、EOFを入力すると逆順に表示するプログラムを作成せよ。
[3] 環境
[3.1] OS:WinXP SP2
[3.2] コンパイラ:VC++
[3.3] 言語:C
[4] 期限:今日中でお願いします。
両方ポインタで作成しなさい、だそうです。
宜しくお願いします。
0571デフォルトの名無しさん
2005/06/01(水) 14:01:51alloc系統は習っている?
0572570
2005/06/01(水) 14:04:30はい。授業でも出てきています。
まだしっかりと理解できていませんが・・・・・。
0573デフォルトの名無しさん
2005/06/01(水) 14:04:42int readint(FILE *fp, int *buf, int n)
{
int i;
for (i = 0; i < n && fscanf(fp, "%d", buf) == 1; i++, buf++)
;
return i;
}
int main(void)
{
int buf[100];
int n = readint(stdin, buf, 100);
/* あとはてきとーにnとbufの表示をしてください */
return 0;
}
問い2を取り掛かる前に質問。構造体習いました?あと、malloc()習いました?
0574570
2005/06/01(水) 14:08:28早いレスありがとうございます。
571さんにもレスした通りですが、reallocやmallocは授業で習いました。
0575デフォルトの名無しさん
2005/06/01(水) 14:15:59http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
仁クン謎の失踪!?負けるな!赤西仁
http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
仁クン謎の失踪!?負けるな!赤西仁
http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
0576デフォルトの名無しさん
2005/06/01(水) 14:16:04http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
仁クン謎の失踪!?負けるな!赤西仁
http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
仁クン謎の失踪!?負けるな!赤西仁
http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
0577デフォルトの名無しさん
2005/06/01(水) 14:16:10http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
仁クン謎の失踪!?負けるな!赤西仁
http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
仁クン謎の失踪!?負けるな!赤西仁
http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
0578570
2005/06/01(水) 14:16:14構造体はまだ習っていませんが、うちの教授は習っていないことを使っても良いといっていました。
0579デフォルトの名無しさん
2005/06/01(水) 14:16:18http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
仁クン謎の失踪!?負けるな!赤西仁
http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
仁クン謎の失踪!?負けるな!赤西仁
http://air.ath.cx/~kp/pera/034/
最強KAT−TUN!!!
http://air.ath.cx/~kp/pera/035/
亀ちゃんサイト集めちゃいました!!
http://air.ath.cx/~kp/pera/036/
ジャニーズの誘惑!!!
http://air.ath.cx/~kp/pera/037/
0580デフォルトの名無しさん
2005/06/01(水) 14:25:12#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct List { char *line, struct List *next; };
void *ealloc(size_t) { void *p = malloc(size_t); if (p == NULL) { fprintf(stderr, "no enough memory\n"); exit(2); } return p; }
char *estrdup(char *s) { char *t = (char *) malloc(strlen(s) + 1); strcpy(t, s); return t; };
int main(void) {
char line[200];
List *head = 0, *list;
while (fgets(line, sizeof(line), stdin)) {
list = (List *) ealloc(sizeof(*list));
list->line = estrdup(line);
list->next = head;
head = list;
}
for (list = head; list; list = list->next)
fputs(list->line, stdout);
return 0;
}
0581570
2005/06/01(水) 14:30:03>>580サン
ありがとうございます。長い文字列の対応は、こちらで処理したいと思います。
本当に助かりました。
他の皆さんも、本当に助かりました。ありがとうございます。
0582デフォルトの名無しさん
2005/06/01(水) 14:30:57わかりません。
先生がオタなので・・・。
0583570
2005/06/01(水) 14:38:45コンパイルしたところ、17エラーの1警告でした。
error C2143: 構文エラー : ':' が 'type' の前に必要です。
error C2059: 構文エラー : 'type'
error C2055: 関数定義内で仮引数リスト以外が使われていました。
error C2143: 構文エラー : ')' が 'type' の前に必要です。
error C2198: 'malloc' : 実引数が少なすぎます。
error C2059: 構文エラー : ')'
error C2065: 'List' : 定義されていない識別子です。
error C2065: 'head' : 定義されていない識別子です。
error C2106: '=' : 左のオペランドが、左辺値になっていません。
error C2065: 'list' : 定義されていない識別子です。
error C2100: 間接指定演算子 (*) の使い方が不正です。
error C2059: 構文エラー : ')'
error C2223: '->line' : 左側が構造体か共用体に対するポインタではありません。
error C2223: '->next' : 左側が構造体か共用体に対するポインタではありません。
error C2223: '->next' : 左側が構造体か共用体に対するポインタではありません。
error C2223: '->line' : 左側が構造体か共用体に対するポインタではありません。
warning C4133: 'function' : 'struct _iobuf *' と 'const char *' の間で型に互換性がありません。
error C2198: 'fputs' : 実引数が少なすぎます。
よろしかったら修正をお願いします。
0584デフォルトの名無しさん
2005/06/01(水) 15:04:320585デフォルトの名無しさん
2005/06/01(水) 15:14:33ありがとうございます。
>506
改善できる問題点があるなら最初から良いほうのプログラムに
しなくてよいのですか?わざとあまりよくないほうを書いて
考察のところで直す、といった形をとるのでしょうか。
0586デフォルトの名無しさん
2005/06/01(水) 15:20:21プギャー
0587デフォルトの名無しさん
2005/06/01(水) 15:27:52【問題文】
<処理内容>
unsigned intt型の整数n、mの値を読み込み、n×mの計算を
シフト演算を用いて行う。結果はunsigned long型の変数に格納し
表示する。
n×mの計算をシフト演算で行うには次のようにする。
�@x=0、s=0とする。ここで、sシフト数で、xは結果を格納する
変数である。
�Anをsビット右シフトし、最右端のビットをチェックする。
1ならばmをsビット左シフトしたものにxを加える。
�B �Aでnをsビット右シフトしたものが0に等しければ、
xに乗算結果が格納される。さもなければ、sに1を
加えて�Aに戻る。
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ(バージョン):Visual C++
[3.3] 言語:C
よろしくお願いします。
0588デフォルトの名無しさん
2005/06/01(水) 15:46:37for ( x = 0, s = 0; n >> s; s++ ) if ( ( n >> s ) & 0x00000001 ) x += m << s;
0589デフォルトの名無しさん
2005/06/01(水) 16:29:59その後で考察書けばよろし。
0590553
2005/06/01(水) 16:47:13>>556
>>557
>>559
>>560
答えてくださった方、早速の解答どうもありがとうございます。
すごく助かりました。
並びにアドバイスをくれた皆様方も、ありがとうございました。
ちなみに僕は問題1は、
for(i=0;i<yeah;i++) {money=money*rate/100+maney;}
でやってみました。
0591553
2005/06/01(水) 16:49:05maney×→money
0592デフォルトの名無しさん
2005/06/01(水) 18:05:43[2]次のプログラムは外部変数に定義され、初期化された10個のint型データの平均を求め、各データと平均との差を表示するプログラムである。
このプログラムを以下のような関数の翻訳単位にファイルを分け、同様な動作をするプログラムを作成せよ。
型関数名引数・パラメータ機能戻り値
floatget_aveなし平均値を求め表示平均値
voidprint_data配列の添字、平均値1つのデータと平均値との差を求め表示なし
プログラム
/*
program : average.c
comments : 結合(linkage)を用いて、平均・差を求める。
*/
#include <stdio.h>
int score[10]={3,5,8,9,10,6,7,9,8,3};
int main(){
int i;
float ave = 0.0, dif;
for(i=0; i<10; i++) ave = ave + (float)score[i];
ave = ave / 10.0;
printf("ave = %3.1f\n",ave);
for(i=0; i<10; i++){
dif = score[i] - ave;
printf("score[%02d]=%2d Difference from average = %4.1f\n",i,score[i],dif);
}
return(0);
}
[3]環境
[3.1]MAC OS�]
[3.2]gcc version 3.3 20030304 (Apple Computer, Inc. build 1666)
[3.3]C
[4]2005年6月2日am6:00あたりまで
[5]特になし
宜しくお願いします。
0593デフォルトの名無しさん
2005/06/01(水) 19:28:40// 型 関数名 引数・パラメータ 機能 戻り値
// float get_ave なし 平均値を求め表示 平均値
// void print_data 配列の添字、平均値 1つのデータと平均値との差を求め表示 なし
#include <stdio.h>
int score[10]={3,5,8,9,10,6,7,9,8,3};
float get_ave(void){
int i;
float ave = 0.0, dif;
for(i=0; i<10; i++) ave = ave + (float)score[i];
ave = ave / 10.0;
printf("ave = %3.1f\n",ave);
return ave;
}
void print_data(int i, float ave){
float dif;
dif = score[i] - ave;
printf("score[%02d]=%2d Difference from average = %4.1f\n",i,score[i],dif);
}
int main(){
int i; float ave;
ave = get_ave();
for(i=0; i<10; i++) print_data(i, ave);
return(0);
}
0594デフォルトの名無しさん
2005/06/01(水) 19:30:33[2] 問題文:
人数nをキーボードから入力し、配列に身長のデータを読み込んでいき、
入力された身長を10cmごとにわけたヒストグラムを作成するプログラム。
<実行例>
何人の身長を入力しますか? 4
1人目の身長143
2人目の身長186
3人目の身長203
4人目の身長183
140<=x<150 : * 1名
180<=x<190 : ** 2名
200<=x<210 : * 1名
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C言語
[4] 期限:なるべく早めに・・・
[5] 制限など:習った場所は、変数宣言、条件文(for if while)、配列(数配列)、
関数です。
お願いしますm(_ _)m
0595デフォルトの名無しさん
2005/06/01(水) 19:43:33>>244
>>245
0598工大花子
2005/06/01(水) 21:00:08[2] 問題文(含コード&リンク): 3角形の3辺の長さa,b,cを与えて、面積areaを求める関数を作れ。ただしs=(a+b+c)/2として、area=s(s-a)(s-b)(s-c)の平方根である。
[3] 環境
[3.1] OS:Windowsxp
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月1日24:00まで
[5] その他の制限:よろしくお願いします
0599デフォルトの名無しさん
2005/06/01(水) 21:01:32【問題文】
電卓を作成する。データ取り込みは標準入力(キーボード)
ー使用可能関数ー
文字列から数値への変換 double atof(char*)<stdlib.h>
べき乗double pow(double x, double y)<math.h>
文字列の比較 int strcmp(char*, char*) <string.h>
数字か否か int isdigit(unsigned int c)<ctype.h>
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ(バージョン):VC6.0
[3.3] 言語:C++
[4] 期限:本日中にお願いします
[5] 制限など:自分で書いてみたらこのような感じになりました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/489.txt
問題点1:一部の制御部分の行い方がわからなくなりました。
2:エラー個所をコンパイルしないようにしたのですが、処理が行われて
いないみたいです。どのようにすれば直るのかよろしくお願いします。
0600デフォルトの名無しさん
2005/06/01(水) 21:32:38一応、問題文どおりに作ってみた。
#include<stdio.h>
#include<math.h>
main(){
double a, b, c, s, area;
printf("3辺の長さを入力してください\n");
printf("a =");
scanf("%lf",&a);
printf("b =");
scanf("%lf",&b);
printf("c =");
scanf("%lf",&c);
s = (a+b+c) / 2;
area = sqrt( s * (s-a) * (s-b) * (s-c));
printf("入力された三角形の面積は%fです。\n",area);
}
0601デフォルトの名無しさん
2005/06/01(水) 22:49:270602デフォルトの名無しさん
2005/06/01(水) 22:49:49ぱっと見。
;忘れ、{}の整合性崩れ、returnしてない
グローバル変数と同じ変数
関数宣言ねぇ。
0603デフォルトの名無しさん
2005/06/01(水) 22:52:41つthread
0604デフォルトの名無しさん
2005/06/01(水) 23:03:030605604
2005/06/01(水) 23:13:03当たり前だが滅多なことでは終了しないプログラムだ
#include <time.h>
#include <stdio.h>
int Sleep(double second) {
time_t start, end;
if ((start = time(NULL)) == (time_t)-1) return 0;
do {
if ((end = time(NULL)) == (time_t)-1) return 0;
} while (difftime(end, start) < second);
return 1;
}
int DisplayTimeEveryFiveSeconds(void) {
time_t t;
while ((t = time(NULL)) != (time_t)-1) {
puts(ctime(&t));
if (!Sleep(5)) return 0;
}
return 1;
}
int main(void) {
return !DisplayTimeEveryFiveSeconds();
}
0606デフォルトの名無しさん
2005/06/01(水) 23:18:21【質問テンプレ】
[1] 授業単元: STL
[2] 問題文(含コード&リンク):文章のスペルチェックをするプログラム。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):MSVC
[3.3] 言語:C++
[4] 期限:なるべく早く
[5] その他の制限:
std::set<std::string>(dictionaryを格納し、検索する), std::map<std::string,std::string>を使用。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/482.zip
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/483.zip
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/484.zip
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/485.zip
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/486.zip
にEnglish Word 辞書があります。(サイズが大きいので、5つにわけました)
それを1つのファイルDictionary.txtにしてください。それを読み込みます。
input.txtにスペルチェックする文章が入っています。
それと先の辞書と比較し、ない単語は、ユーザーにi,a,r,cのどれかを入力させます。
i:一度その一語だけを無視する。
a:ファイルの中にあるその単語全てを無視する。
r:一度その一語を他の単語に書き換える。書き換える単語は聞く。
c:ファイルの中にあるその単語全てを他の単語に書き換える。 書き換える単語は一度だけ聞く。
サンプルラン http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/487.txt
途中まで自分でやったやつ。Runはします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/488.txt
空白を読み込めないのと、選択のc(たぶんstd::map<std::string,std::string>を使うのかな?)、
あと既存の関数の使い方がわかりません。
どなたか、どうぞご教授お願いします。
0607デフォルトの名無しさん
2005/06/02(木) 00:16:47なんか原型とどめてないかも…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/490.txt
0608544
2005/06/02(木) 00:36:53皆さんありがとうございます!!
とりあえず、言われたとおり引数をポインタ型にしたところ
コンパイル時には問題なかったのですが、実行するとcore dumpしてしまいます。
他に不都合な点はないでしょうか…
0609542
2005/06/02(木) 00:38:080610デフォルトの名無しさん
2005/06/02(木) 00:46:31せっかくcore吐いてるんならstack trace見ればいいのに。
ま、まじめに読んでねーけど
1) pが最初に初期化されてない(不定)のまま使われてる
2) 最初にmalloc()したheadのnextポインタの値が不定のままになる
ってとこじゃねーかな。あやしいのは。
0611デフォルトの名無しさん
2005/06/02(木) 00:52:41http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/491.cpp
0612デフォルトの名無しさん
2005/06/02(木) 01:10:00ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/492.txt
0613デフォルトの名無しさん
2005/06/02(木) 02:29:11最初のheadは使われてないから、最初のmalloc()の後にでもp = headとかしたらいい。
insert()をrを返すようにして、それをpでうけるようにしたら、
ループが回る度にpが最新のノードをさすようになる。
p = insert(string, p , head); headを引数にする必要はないと思うけど。
最初にp = headにすれば、pがNULLになるときがないから。
あと、insert()のr->nextは次のノードがないうちは空なんだからNULLを代入した方がいい。
0614デフォルトの名無しさん
2005/06/02(木) 02:56:21[2] 問題文(含コード&リンク): あらかじめテキスト化された音声信号のファイル「data.txt」をリダイレクトで入力し
波形として描画するプログラムを作成せよ。
グラフィックウィンドウを簡単に書くためのヘッダファイルが用意されているのでそれを使うこと。
[3] 環境
[3.1] OS:Solaris8
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年06月04日まで
具体的なソースというよりは波形として描画するというのがよくわかりません
テキスト化された音声信号のファイル「deta.txt」は
-1
7
7
-1
0
-2
-2
0
0
2
2
こんな感じで書かれており全部で10020行あります。
この数字の意味もイマイチよくわかりません12kHzでサンプリングされた音声信号をテキスト化したものだそうです。
グラフィックウィンドウを簡単に書くためのヘッダファイルというのはどうやら先生が自作したらしく
点を打ったり、線を引いたり、円を書いたりということが簡単にできるようになっています。
X軸を時間軸、Y軸をdata.txtの内容軸としてグラフをつくればいいんですかね
信号処理のことも勉強したことないのでよくわからないんですが
アドバイスよろしくお願いします。
0615デフォルトの名無しさん
2005/06/02(木) 03:10:22返信ありがとうございます!!
とりあえず、家の環境ではリダイレクションが行えないので今日でも学校でやってみたいと思います。
あと先生にメールで質問したところ、以下のようなプログラムを作るうえでのヒント(?)をもらいました。
1. まず,単語を格納する領域(以下単語格納領域)と次のデータへのポインタ(次ポインタ)を持つリスト構造を構造体で宣言する.
2. 1単語分のリスト構造体データをmalloc関数で確保する。
3. readword関数を使って1単語を読み込み,リスト構造体データの単語格納領域に保存する.
4. 1単語分の構造体データをリストの末尾に連結する.つまり,末尾データの次ポインタを追加するリスト構造体データへのアドレスに更新する.
追加されたデータの次ポインタはnullにしておく.このようにnullポインタを使うことで末尾データの目印にしておく.
なお,リスト先頭データのアドレスは,ポインター型変数headに記憶させておく.
5. 2.〜 5. の処理を繰り返し行い、単語がすべて読み込まれたら6.に行く.
6. リストの先頭から終わりまで単語を表示する。
もしかしたら最初に書いたプログラムは自分の知識が乏しいまま書いたため、この条件にあっていないようなプログラム
(特にheadに記憶させるところとか)
になっているかもしれません…大幅な改変が必要なのかもしれませんが引き続き宜しくお願いします。
0616デフォルトの名無しさん
2005/06/02(木) 03:26:50はあ。まあ当然ながらそのヘッダファイルとやらがないと何も出来ないわな。
0617614
2005/06/02(木) 09:33:41テキスト化された音声信号のファイル「data.txt」
グラフィックウィンドウを簡単に書くためのヘッダファイル「gw.h」
gw.hの中身を見てみたんですが
どうやら「Xlib.h」をインクルードしているようなので
X Windows Systemに関連するもののようなので
Windows環境ではできないかもしれないです。
0618デフォルトの名無しさん
2005/06/02(木) 09:53:57>X軸を時間軸、Y軸をdata.txtの内容軸としてグラフをつくればいいんですかね
その通り。とりあえず作って味噌。
ポイントだけならこんな感じになるべさ。
□■■□□□□□□□□
□□□□□□□□□□□
□□□□□□□□□□□
□□□□□□□□□□□
□□□□□□□□□□□
□□□□□□□□□■■
□□□□□□□□□□□
○○○○●○○●●○○ 0
■□□■□□□□□□□
□□□□□■■□□□□
→時間軸(データ行)
↑信号Lv(データ値)
0619デフォルトの名無しさん
2005/06/02(木) 10:10:31レスありがとうございます。
なるほどやはりそういうことでしたか
音声の波形というとWindowsの録音ツールにあるような波をイメージしていたので
本当にこの考え方でいいのかなーと不安に思っていたので安心しました。
あとはX軸、Y軸の間隔の幅を調整したりして見やすくなるようにすればいいわけですよね
自宅にSolarisがないんで簡単に試せないのが痛いところです;;
WindowsやらLinuxやらで出来たらいいんですけど。。。
アドバイスありがとうございました。
またつまづいたらよろしくおねがいしますm(__)m
0620デフォルトの名無しさん
2005/06/02(木) 10:14:59ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/493.txt
0621デフォルトの名無しさん
2005/06/02(木) 10:21:57リダイレクションが行えない環境ってどんなだ?
コマンドプロンプトでいくらでもできると思うのだが?
0622デフォルトの名無しさん
2005/06/02(木) 11:31:37[2] 問題文(含コード&リンク): 要素10の配列があり。1〜10の数値で初期化
同一配列中で右に一つずつシフトするプログラム
を作成せよ。
0 1 2 3 ・・・ 9
↓
9 0 1 2 ・・・ 8
↑の様な感じです。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): Visual C++
[3.3] 言語:C++
[4] 期限:できれば今日中に
[5] その他の制限:配列まで習いました。
よろしくお願いします。
0623デフォルトの名無しさん
2005/06/02(木) 12:30:16int dim[10]={0,1,2,3,4,5,6,7,8,9};
const int stock=dim[0];
for(int i=0;i<9;dim[i]=dim[i+++1]);
dim[i]=stock;
0624デフォルトの名無しさん
2005/06/02(木) 12:32:100625デフォルトの名無しさん
2005/06/02(木) 12:33:050626デフォルトの名無しさん
2005/06/02(木) 12:42:30> i+++1
初心者相手に、この書き方はあんまりじゃないか?
0627デフォルトの名無しさん
2005/06/02(木) 13:00:37それ右じゃなくて左
正しくはこうだな。
int dim[10]={1,2,3,4,5,6,7,8,9,10};
const int stock = dim[9];
for(int i=9;i>0;dim[i]=dim[i---1]);
dim[i]=stock;
0628デフォルトの名無しさん
2005/06/02(木) 13:04:35dim[i] = stock;
のところ。すでにiは無効だな。
(VC++では有効なのかもしれんが、バグだろ)
const int stok = dim[0];
これもマズ。1度しかシフト(ローテートだと思うが・・)できんやん。
0629デフォルトの名無しさん
2005/06/02(木) 13:10:01問題は
要素10の配列があり。1〜10の数値で初期化
実例は
0 1 2 3 ・・・ 9
↓
9 0 1 2 ・・・ 8
このうっかりさんがー
0630デフォルトの名無しさん
2005/06/02(木) 13:11:50「の様な感じです。」って書いてある。
「こうしてくれ」ではない。
0631692
2005/06/02(木) 13:14:310632デフォルトの名無しさん
2005/06/02(木) 13:18:250633デフォルトの名無しさん
2005/06/02(木) 13:19:090634デフォルトの名無しさん
2005/06/02(木) 13:36:38[2] 問題文:
<3平方の定理が成り立つ組み合わせ>
キーボードから整数値 N を与えてもらい
a = 1〜N, b = 1〜N, c = 1〜N の範囲内で
a(2乗)+b(2乗)= c(2乗)
が成り立つ組み合わせを全て表示させなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:6/7まで
[5] その他の制限:制御構造(条件分岐と繰り返し)まで
2乗の部分はa2とかになって表示できないので、(2乗)としています。
自分ではいくら考えてみてもわからないので、
どなたかご教授お願いします。
0635デフォルトの名無しさん
2005/06/02(木) 13:46:50for ( a = 1; a <= N; a++)
for ( b = 1; b <= N; b++)
for ( c = 1; c <= N; c++)
if ( a*a + b*b == c*c)
printf("a == %d, b == %d, c == %d", a, b, c) ;
0636デフォルトの名無しさん
2005/06/02(木) 13:52:18int a;
int b;
int c;
double Cdush;
N = 100;
for ( a = 1; a <= N; a++ ) {
for ( b = a; b <= N; b++ ) {
Cdush = ( double )a * ( double )a + ( double )b * ( double )b;
c = ( int )sqrt( Cdush );
if ( c > N ) break;
if ( Cdush == ( double )c * ( double )c ) {
printf( "a = %d, b = %d, c = %d\n", a, b, c );
}
}
}
0637デフォルトの名無しさん
2005/06/02(木) 13:58:35ありがとうございます。
これちょっと勉強します。
0638634
2005/06/02(木) 14:04:33>>636
早速のレスありがとうございます。
言い忘れてたのですが、
最初の部分は
#include <stdio.h>
int main (void)
{
で始めてください。
せっかく書いてくれたのに申し訳ありません。
よろしくお願いします。
0639デフォルトの名無しさん
2005/06/02(木) 14:05:55それぐらい自分でやれよw
0640デフォルトの名無しさん
2005/06/02(木) 14:20:39[1] 授業単元: 基本プログラミング
[2] 問題文:
正の整数地を読み込み、その段数(1〜10)のピラミッドを表示するプログラムを作成せよ
ただし、if、switch文は使用せず、メインの繰り返しにはfor文を使用すること(他の処理で使う分にはかまわない)
また、範囲外の段数を入力した場合には”指定された段数は処理できません”と表示してプログラムを完了すること
実行例:
段数を入力してください:3
*
***
*****
段数を入力してください:12
指定された段数は処理できません
[3] 環境
[3.1] OS:unix(emacs)
[3.2] コンパイラ(バージョン):不明
[3.3] 言語:C++
[4] 期限:2005年6月3日9:00まで
[5] その他の制限:forまで習っています。あと書き出しは#include<iostream>です。
forを三回使うのかな…以外はまったくわからないので何方かご教授のほどをお願いします。
0641デフォルトの名無しさん
2005/06/02(木) 14:33:03最近のヤツはiostream.hからiostreamに変更されとるんか?
0642デフォルトの名無しさん
2005/06/02(木) 14:39:45<math.h>が使えない様子なので修正。
#include <stdio.h>
int main( void )
{
unsigned int N;
unsigned int a, b, c;
unsigned int AnsA, AnsB;
do {
printf( "N ( 1 ~ 46340 ) = ?" );
scanf( "%d", &N );
} while ( N < 1 || 46340 < N ) ;
for ( a = 1; a <= N; a++ ) {
for ( b = a + 1; b <= N; b++ ) {
AnsA = a * a + b * b;
for ( c = b + 1; c <= N; c++ ) {
AnsB = c * c;
if ( AnsA == AnsB ) printf("a = %d, b = %d, c = %d\n", a, b, c );
if ( AnsA <= AnsB ) break;
}
}
}
return ( 0 );
}
0643デフォルトの名無しさん
2005/06/02(木) 15:28:50void
DrawPyramid(unsigned int n){
if(n==0 || n>10){
std::cout<<"指定された段数は処理できません"<<std::endl;
return;
}
unsigned inti=0;
for(i=0;i<n;++i){
std::cout<<"\n";
const unsigned int space = n-i-1,ass=i*2+1;
unsigned int k;
for(k=0;k<space;++k)
std::cout<<' ';
for(k=0;k<ass;++k)
std::cout<<'*';
}
std::cout<<std::endl;
}
0644デフォルトの名無しさん
2005/06/02(木) 15:33:30using namespace std;
int main()
{
int num, cnt = 1, spaces;
cout << "段数を入力してください:";
cin >> num;
if (num > 10 || num < 1){
cout << "指定された段数は処理できません\n";
} else {
spaces = num - 1;
for (int i = 1; i <= num; i++){
for (int k = 1; k <= spaces; k++) cout << " ";
for (int j = 1; j <= cnt; j++) cout << "*";
cnt += 2;
spaces --;
putchar('\n');
}
}
return 0;
}
0645デフォルトの名無しさん
2005/06/02(木) 15:34:19リロードし忘れた
0646デフォルトの名無しさん
2005/06/02(木) 15:50:01素早い回答ありがとうございます!
分からないところが何カ所かあるけど頑張って調べてみます。
0647デフォルトの名無しさん
2005/06/02(木) 15:54:10>最近のヤツはiostream.hからiostreamに変更されとるんか?
iostreamが標準で、iostream.hは互換性のために残されてる古い形式という形だったはず
0648デフォルトの名無しさん
2005/06/02(木) 16:02:390649デフォルトの名無しさん
2005/06/02(木) 17:19:30主語ぐらいきちんと書こうな
人に聞く前に自分で立ち読みしに行って確認しろ
0650デフォルトの名無しさん
2005/06/02(木) 18:13:46うちの周りじゃプログラミングの本はそんなに無いな。
0651デフォルトの名無しさん
2005/06/02(木) 18:19:08#include <iostream>
#include <string>
#include <iomanip>
int main()
{
int n;
std::cout << "段数を入力してください:";
std::cin >> n;
for (; 0 < n && n <= 10; )
{
for (int i = 1; i <= n; ++i)
std::cout << std::setw(n + i - 1) << std::string(std::string::size_type(2 * i - 1), '*') << std::endl;
std::cout << "段数を入力してください:";
std::cin >> n;
}
std::cout << "指定された段数は処理できません";
}
0652デフォルトの名無しさん
2005/06/02(木) 19:04:30[2] 問題文(含コード&リンク):
課題1 scanf() 関数で、int 型の変数は & をつけなければならないのに、文字列は & をつけないのはなぜですか? 下記のプログラムを例にして解説してください。また 下記のプログラムで ss ヘ入力するのは間違いです。なぜ間違いなのか解説してください。
#include <stdio.h>
int main()
{
int n;
char s[100];
char *ss;
scanf( "%d", &n); /* int 型では & をつける */
scanf( "%s", s); /* 文字列では & をつけない */
scanf( "%s", ss); /* なぜ誤り? */
...
}
0653デフォルトの名無しさん
2005/06/02(木) 19:06:25課題2-1 下記のプログラムは正しいプログラムですが
/* Prog. A */
#include <stdio.h>
int main()
{
char s[6]="Hello";
char *ss;
ss=s;
printf("%s\n", ss);
}
下記のプログラムは誤りです。
/* Prog. B */
#include <stdio.h>
int main()
{
char s[6];
char *ss;
ss="Hello";
s=ss;
printf("%s\n", s);
}
その理由を解説してください。
[3] 環境
[3.1] OS:Linux [3.2] コンパイラ(バージョン): 不明 [3.3] 言語:C
[4] 期限:明日
0654デフォルトの名無しさん
2005/06/02(木) 19:07:24ポインタ勉強汁
0655デフォルトの名無しさん
2005/06/02(木) 19:11:24答えても良いけど、これが理解できないならこの先授業について行けまい。
それでも構わないなら答えよう・・・、この先もこのスレで答えて貰える確実性は無いが。
0656デフォルトの名無しさん
2005/06/02(木) 19:15:20お願いします、明日までにレポートにして提出しないといけないのでosz
0657デフォルトの名無しさん
2005/06/02(木) 19:22:57教えてあげればいいじゃん。
解説付けてあげればいいじゃん。
お前のやっていることは単なる怠惰か嫌がらせだって知ってる?
どうせ、答えない事が質問者の為になる、とか言うんだろうけど実際にはそんなこと無いんだよねぇ。
0658デフォルトの名無しさん
2005/06/02(木) 19:27:43課題1
scanf( "%d", &n); アドレスを渡している
scanf( "%s", s); アドレスを渡している
scanf( "%s", ss); ポインタを渡している
課題2
#include <stdio.h>
int main()
{
char s[6];
char *ss;
ss="Hello"; これでは初期化できない
s=ss; アドレスをポインタに代入すべきなのに逆になっている
printf("%s\n", s); 配列のアドレスを渡している。ポインタを宣言している意味がない。
}
0659デフォルトの名無しさん
2005/06/02(木) 19:32:24その論理は課題1で
int n, *p = &n;
scanf("%d", p); ポインタを渡している
となって破綻する。
課題2
ss="Hello"; 初期化ではないが、"Hello"という文字列リテラルの先頭
アドレスをポインタに代入するので(式としては)妥当
なのでコメントがおかしい。それから、「意味がない」ことと「誤りである」と
いうことは全く異なる。
0660デフォルトの名無しさん
2005/06/02(木) 19:39:07char s[6]="Hello";
/* Prog. B */ では
char s[6];
char *ss;
ss="Hello";
とやってるから
初期化したいのだろうという意を汲み取って
「ss="Hello"; これでは初期化できない 」
と書きますた
0661デフォルトの名無しさん
2005/06/02(木) 19:39:53scanf("%s", ss);
が誤りなのは、ポインタssの値が不定だから。
scanf()は、引数として渡されたアドレスに解析結果を書き込む。
よって、引数としては、変数のアドレスなり配列のアドレスなり
malloc()された領域のアドレスなり、要するに書き込み可能な
領域をちゃんと指しているアドレスを渡さなければならない。
>>653
s = ss;
が間違っている。Cでは配列に対する代入はできない。
初期化では
char s[6] = "hello";
のように書くことが可能だが、代入と初期化は異なる。
0662デフォルトの名無しさん
2005/06/02(木) 19:41:23ttp://www.gokigenyou.com/chara/c_shimako01.gif
第2位 ミルフィーユ桜葉
ttp://www.broccoli.co.jp/ga/anime04/character/image/chara_01.gif
第3位 ナージャ・アップルフィールド
ttp://www.asahi.co.jp/nadja/chara/image/z_nadja.gif
第4位 梓川月乃
ttp://www.sonymusic.co.jp/Animation/yakitate/character/image/tsukino.jpg
第5位 ファイン
ttp://www.tv-tokyo.co.jp/anime/futagohime/images/chara/fine.gif
第6位 小島桐絵
ttp://www.girls-bravo.tv/img_character/pct_003_costume_17.jpg
第7位 アンゴルモア
ttp://www.sunrise-inc.co.jp/keroro/character/etc/images/moa.jpg
第8位 サラ・ハリファ
ttp://www.aniplex.co.jp/galleryfake/character/image/bo_sara.jpg
第9位 レイン
ttp://www.tv-tokyo.co.jp/anime/futagohime/images/chara/rein.gif
第10位 田名部愛
ttp://www.planet-es.net/TECHNORA/debri/img/img_chara002.jpg
0663デフォルトの名無しさん
2005/06/02(木) 19:46:53まずメモリ確保の面から見ると
int n; /* int変数 1個分のメモリが確保されている。 */
char s[100]; /* char変数 100個分のメモリが確保されている。 */
char *ss; /* charへのポインタ変数 1個分のメモリが確保されている。 */
&n は int変数 n へのポインタ(先頭アドレス)
s は char変数 s[] へのポインタ(先頭アドレス)
ここで注意すべきは s は &s[0] と等価であるという事。
つまり、
scanf( "%s", s );
は
scanf( "%s", &s[0] );
と等価である。
scanf() の引数は格納すべき変数へのポインタ(先頭アドレス)である必要があるため、
ポインタ変数である ss はこのプログラム上では適切ではない。
ただし、
ss = s;
の様に、プログラム中にポインタ変数 ss に変数へのポインタを渡している場合は正しい使い方と言える。
0664デフォルトの名無しさん
2005/06/02(木) 19:55:02[2]
[3]
[3.1] OS:UNIX
[3.2] fortran
[3.3] 言語:C言語
[4] 期限:6月5日
[5] その他の制限:基本的な数学関数まで。<math.h>。
e^x = 1 + x + (1/2!)x^2 + (1/3!)x^3 + ,,,,,+ (1/N!)x^N
問題文:
(上式のxの値を1次から5次の場合で展開し、)
(それぞれの次数の時にmath.hにあるexp関数で出した結果と比較してみる。)
xの値はファイルから入力するようにし、ファイルの最後になったら処理を終えるようにする。
xの値を書くファイルには、1行に一つの数字だけを書くようにしてみて下さい。
0665デフォルトの名無しさん
2005/06/02(木) 19:55:08返信ありがとうございます、少しずつわかってきました。
ひとまずレポート仕上げちゃいます
0666デフォルトの名無しさん
2005/06/02(木) 19:58:16[3.1] OS:UNIX
[3.2] fortran
[3.3] 言語:C言語
ワケワカンネ
0667デフォルトの名無しさん
2005/06/02(木) 20:28:02では
[3.1] OS:UNIX
[3.2] コンパイラ(バージョン):不明
[3.3] 言語:C言語
0668デフォルトの名無しさん
2005/06/02(木) 20:37:03[3.2] コンパイラ(バージョン):g77(不明)
0669デフォルトの名無しさん
2005/06/02(木) 23:53:39#include <stdio.h>
#include <math.h>
int main( int argc, char *argv[] )
{
char buff[256];
FILE *fp;
double val, result, col;
int count;
fp = fopen( argv[1], "r" );
printf( " x 1次 2次 3次 4次 5次 exp\n" );
while( fgets( buff, sizeof(buff), fp ) ){
sscanf( buff, "%lf", &val );
printf( "%e", val );
result = 1.0;
col = 1.0;
for( count=1; count<=5; count++ ){
col *= ( val / (double)count );
result += col;
printf( "\t%e", result );
}
printf( "\t%e\n", exp(val) );
}
fclose( fp );
return 0;
}
0670デフォルトの名無しさん
2005/06/03(金) 00:20:37[2] 問題文:任意の長さの整数値を読み込み、グラフ化して表示することができるプログラムを作れ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ:gcc
[3.3] 言語:C
[4] 無期限
[5] その他の制限:ファイルの入力はリダイレクションを利用します。
課題用に400個ほどのデータファイルが用意されていてそれを使います。
今考えているのは読み込んだ数字をnとしてn回だけFor文で*を表示させるようにしてグラフにしようと思っているのですが
読み込むデータの長さが不定の場合、一次元配列に格納してあれこれやるという方法は避けた方がいいのでしょうか?
0671デフォルトの名無しさん
2005/06/03(金) 00:29:23任意なのは整数の個数なのか、整数の長さなのか?
データは数字が羅列されているだけなのか、表題もあるのか?
微妙にわからんな。
例えばどういうデータファイルになるか>>1のアップローダーにアップしてみてくれないか?
0672デフォルトの名無しさん
2005/06/03(金) 00:30:00[2] 問題文(含コード&リンク): 円の半径を入力し、面積と円周の長さを出力するプログラムを作れ。
なお、円周率πは#define文を用いて定数宣言を利用すること。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン):??
[3.3] 言語:C
[4] 期限:明日の午後の授業には提出です。
[5] その他の制限:大学に入って初めてプログラムを知り1時間習っただけの初心者です。
回答いただいても色々質問するかもしれませんがどうかよろしくお願いします。
0673デフォルトの名無しさん
2005/06/03(金) 00:40:29#include <stdio.h>
#define PI 3.1415926535898
int main(void) {
double r;
printf("半径:"); scanf("%lf", &r);
printf("面積:%f\n円周:%f", PI * r * r, 2 * PI * r);
return 0;
}
0674デフォルトの名無しさん
2005/06/03(金) 00:42:120675672
2005/06/03(金) 01:00:46ありがとうございます!
PIというのは初見なのですがどういう意味があるのですか?
あと最後のreturn 0の意味を教えていただけますか、申し訳ありません。
0676デフォルトの名無しさん
2005/06/03(金) 01:03:150677670
2005/06/03(金) 01:04:58ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/494.txt
こんな感じで400個(行?)ほど書かれているデータを使います。
整数の長さは最大で+-7000くらいだったと思います。
表題などはありません。
0678672=アフォ
2005/06/03(金) 01:07:41あと、return 0はどういう意味があるんでしょうか?
0679デフォルトの名無しさん
2005/06/03(金) 01:08:490680デフォルトの名無しさん
2005/06/03(金) 01:10:29PIは>>676に書いたとおりπのこと。日本人がパイと書くようにローマ字(abcde…のこと)を
使う人がπのことを書くときに使う書き方。
ちなみにα,β,γ,δ→alpha, beta, gamma, delta
最後の return 0; は見た通りmain関数の戻り値が0ということ。
こんな課題程度なら値は何でもいいんだが、コンパイル後のプログラムを
使ってシェルプログラムを組む時とかに利用することもあるので、普通(エラー無し)は
0を返す習慣になってる。
0681デフォルトの名無しさん
2005/06/03(金) 01:11:02まぁ、return 0は書かなくても一応動くけどな
0682デフォルトの名無しさん
2005/06/03(金) 01:13:30つ gcc -Wall
0683デフォルトの名無しさん
2005/06/03(金) 01:18:57わなあ。
この程度のおもちゃプログラムの返り値をシェルから見て何かに利用することなど
無いし、まさにどうでもいい話だ。
0684デフォルトの名無しさん
2005/06/03(金) 01:23:35はじめ皆さんありがとうございました。
0685デフォルトの名無しさん
2005/06/03(金) 01:43:42(固定長の)1次元配列を使う方法が素直だと思う。
・いったんメモリに読み込む
・max,minを得る
・グラフの幅とmax,minから(縮小)率を決める。
・for文で出力
ってな具合だろうけれども。
固定長の配列が嫌ならメモリの動的確保(malloc, realloc)を使うとか。
0686671
2005/06/03(金) 02:34:21http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/495.txt
0687670
2005/06/03(金) 03:09:26>>686さん
ありがとうございます!
686さんのソースを見させてもらったんですが
まだまだ勉強不足な私には理解するのに時間が掛かりそうです。
Lv1のキャラがいきなりLv50で装備できるようになる武器を
裏技で装備してしまったような感じでw
初心者の癖にこんな大作を提出すると怒られそうなんで
まずは理解できるように頑張ろうと思います。
685さんの仰るとおりに固定長の一次元配列を使ってみようと思います
任意の長さの整数値を取り扱えるようにしたいので
最初にLinuxのコマンドで行数を調べてその都度書き換えてコンパイルしなおせば
一応任意の長さに対応できるということになると思うのでw
malloc,やreallocも試してみたいのですがまだポインタがあまり理解できていないので
今回はやめておきます
お二人ともアドバイスありがとうございました!
0688デフォルトの名無しさん
2005/06/03(金) 03:12:31↑プログラミングコンテストの去年の国内予選の過去問なんだけど一日中考えてるけど解けね、、
解ける神はおりませんか
0689デフォルトの名無しさん
2005/06/03(金) 03:50:12X と Y の二次元配列を 0 で初期化。
(どのくらいの大きさなら良いかはInputを読んで計算すれば判る)
点から半径1.0の円の範囲内の配列に +1 していく。
最大値を表示する。
0690689
2005/06/03(金) 04:05:480691デフォルトの名無しさん
2005/06/03(金) 05:56:55とか言ってみるテスト。Cのソースは書けません。
0692从*・ 。.・) ◆SayuminPM.
2005/06/03(金) 06:05:47http://www.is.titech.ac.jp/~mikurub1/cgi-bin/icpc/fswiki/wiki.cgi?page=2004%2FEhime%2Fpreliminary%2FD
0693688
2005/06/03(金) 08:22:33おぉ、こんなサイトが!悲しいけど参考にします
考えてくれた方ありがとうございました(;´д⊂)
0694デフォルトの名無しさん
2005/06/03(金) 11:35:43>最初にLinuxのコマンドで行数を調べてその都度書き換えてコンパイルしなおせば
>一応任意の長さに対応できるということになると思うのでw
なんかややこしいこと考えてるなぁ。
動くかしらんけど。 >>573 ってのもあるな。
for (i = 0; i < n && fscanf(fp, "%d", buf) == 1; i++, buf++)
↓
for (i = 0; i < n; && fscanf(fp, "%d", &buf[i]) == 1; i++)
とでもしとけば、ポインタ使わんで済むだろう。
0695デフォルトの名無しさん
2005/06/03(金) 19:11:13[2] 問題文(含コード&リンク): 10進数で入力した値を、n(2〜9)進数に変換するプログラムをお願いします。
[3] 環境
[3.1] OS:Windows/Linux/等々 WindowsXP
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 6月5日まで
0696デフォルトの名無しさん
2005/06/03(金) 19:36:11#include <stdio.h>
char* to_base_n(int x, char* s, int n) {
int index = 0;
do {
s[index++] = x % n + '0';
x /= n;
} while (x);
s[index--] = '\0';
int left = 0;
while (left < index) {
char temp = s[left];
s[left] = s[index];
s[index] = temp;
++left;
--index;
}
return s;
}
int main(void) {
int x, i;
char s[128];
printf("数:"); scanf("%d", &x);
for (i = 2; i < 10; i++)
printf("%d進数:%s\n", i, to_base_n(x, s, i));
return 0;
}
0697デフォルトの名無しさん
2005/06/03(金) 20:17:40どうもありがとうございます。
0698デフォルトの名無しさん
2005/06/03(金) 20:44:31[2] e^x = 1 + x + (1/2!)x^2 + (1/3!)x^3 + ,,,,,+ (1/N!)x^N
(上式のxの値を1次から5次の場合で展開し、)
(それぞれの次数の時にmath.hにあるexp関数で出した結果と比較してみる。)
xの値はファイルから入力するようにし、ファイルの最後になったら処理を終えるようにする。
xの値を書くファイルには、1行に一つの数字だけを書くようにしてみて下さい。
[3]
[3.1] OS:UNIX
[3.2] コンパイラ:gcc(gcc Developer Station 2000 Version 1.1.2.7)
[3.3] 言語:C言語
[4] 期限:6月5日
[5]その他の制限:基本的な数学関数まで。<math.h>。
664で書き込みしたものです。
詳細が分かったので、再度書き込みました。
668でなぜか自演されました。
>>669
ありがとうございます。
コンパイルできたのですが、セグメント例外(core dumped)と表示され、
プログラムを実行することができませんでした。
それと、今やっている授業内容と比べてこれは難しいプログラムでした。
教えてもらう側で心苦しいのですが、簡単になりませんでしょうか。
0699デフォルトの名無しさん
2005/06/03(金) 21:55:24ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/497.txt
0700デフォルトの名無しさん
2005/06/03(金) 23:45:39Cでやる方法を教えてください
0701デフォルトの名無しさん
2005/06/03(金) 23:48:35どういう風に?
0702デフォルトの名無しさん
2005/06/04(土) 00:11:37int を char* にしたいなら ltoa とか sprintf とか
0703デフォルトの名無しさん
2005/06/04(土) 00:19:15プログラムの引数にxの値の入ったファイル名を指定すること。
(例)
program xdata.txt
どこが難しいのか具体的に書くこと。
0704デフォルトの名無しさん
2005/06/04(土) 03:22:11[2] 問題文):
f(x)=|cos(x)|を一周期積分しなさい。
[3] 環境
[3.1] OS:Windows2000
[3.2] コンパイラ(バージョン): Visual C++ Standard6.0
[3.3] 言語:C++
[4] 期限:6月4日夕方
[5] その他の制限:
ありません。とにかくC++で動くものができればOKです。
一応、シンプソンの公式推奨、とのことです。
0705デフォルトの名無しさん
2005/06/04(土) 04:51:40main(int argc,char **argv)
{
printf("4\n");
}
0706デフォルトの名無しさん
2005/06/04(土) 05:01:28[1] 授業単元: C言語
[2] 問題文(含コード&リンク): 1+1 の結果を出力せよ。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ(バージョン): VC++2003
[3.3] 言語:C++
[4] 期限:2005年06月04日05:10まで
[5] その他の制限:特になし
よろしくお願いします。
0707デフォルトの名無しさん
2005/06/04(土) 06:02:42ちなみに _itoa() は非標準な。
0708デフォルトの名無しさん
2005/06/04(土) 06:12:28#include <stdio.h>
int main(){
printf("10");
}
0709デフォルトの名無しさん
2005/06/04(土) 10:35:50アスキー「 」を「2010200B100101」にもどして表示する。
要するに変換前「 」、変換後「2010200B100101」としたいです。
説明が下手ですいません。どなたかおしえてください。
0710デフォルトの名無しさん
2005/06/04(土) 10:44:530711デフォルトの名無しさん
2005/06/04(土) 11:33:02暇つぶしに書いてみた。あれ、「一周期」ってゼロからパイまで?絶対値ついてるしな・・・。
まー適宜なおして。
#include <iostream>
using namespace std;
double simpson(double a, double b, int n, double (* pf)(double));
double f(double x);
int main()
{
const int M = 1000000;
cout << simpson(0, 2*M_PI, M, f) << endl;
return 0;
}
double simpson(double a, double b, int m, double (* pf)(double))
{
int n = 2 * m;
double d = (b - a) / n;
double sum = pf(a);
double x = a;
for (int i = 1; i < n; i ++)
{
x += d;
sum += (i & 1 ? 4 : 2) * pf(x);
}
sum += pf(b);
return sum * d / 3;
}
double f(double x)
{
return fabs(cos(x));
}
0712デフォルトの名無しさん
2005/06/04(土) 12:06:30基本周期ならそれでOKでつ。
0713デフォルトの名無しさん
2005/06/04(土) 12:17:170714デフォルトの名無しさん
2005/06/04(土) 12:51:43[2] 問題文(含コード&リンク): 配列に1から1000までのデ‐タを格納し100ごとに表示させよ、
このとき1から100まで101から200まで、、、
という風に現在どの部分表示しているか解るように工夫せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限: 無期限
とりあえず1から1000を格納して100ずつ表示するというのは出来るのですが
現在どこを表示しているのかを解るようにする方法がわかりません。
0715デフォルトの名無しさん
2005/06/04(土) 12:55:390716デフォルトの名無しさん
2005/06/04(土) 13:31:26問題の意味が分かりません。
0717716
2005/06/04(土) 13:31:570718デフォルトの名無しさん
2005/06/04(土) 13:33:04>現在どこを表示しているのかを解るようにする方法がわかりません。
出来てるところまで書いて。
0719デフォルトの名無しさん
2005/06/04(土) 13:59:13#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 1000
#define PRINT_NUM 100
int a[MAX_NUM];
int main()
{
int begin, end,i, cnt;
char buf[256];
for(i = 0; i < MAX_NUM; i++) a[i] = i+1;
for(;;)
{
printf("\n開始番号を入力 (-1で終了) > ");
begin = atoi(fgets(buf, sizeof(buf), stdin));
if( begin == -1 ) break;
if( begin < 1 || begin > MAX_NUM)
{
puts("\n<< 入力エラー >>");
continue;
}
end = begin + PRINT_NUM - 1;
if( end > MAX_NUM ) end = MAX_NUM;
printf("\n[ %d - %d ]\n", begin, end);
for(i = begin - 1, cnt = 0; i != end; ++i, ++cnt )
printf("%d%c", a[i], cnt % 10==9 ? '\n' : ' ');
}
return 0;
}
0720デフォルトの名無しさん
2005/06/04(土) 14:05:00for ( i = 0; i < 1000; ) {
printf( "%d ~ %d\n", i, i + 99 );
do printf( "%d\t", a[i]++ ); while ( i % 100 != 0 );
getch();
}
0721720
2005/06/04(土) 14:05:520722デフォルトの名無しさん
2005/06/04(土) 14:17:543→3→3→3(Chained Arrow Notation)
0723714
2005/06/04(土) 14:42:06#include <stdio.h>
int main()
{
int data[1000];
int x, y, c1, c2;
for(x = 1; x <= 1000; x++){
data[x] = x;
}
c1 = 1;
c2 = 10;
for(x = 1; x <= 100; x++){
for(y = c1; y <= c2; y++){
printf("%4d", data[y]);
}
printf("\n");
c1 = c2;
c2 = c2+10;
}
return 0;
}
こんな感じです スマートじゃないかもしれませんが^^;
例えばchar型の配列に"x から yまで"と入れてxとyの部分にc1とc2の内容を入れて表示するってのは可能なんでしょうか
0724デフォルトの名無しさん
2005/06/04(土) 14:57:56int data[1000 + 1];
for(x = 1; x <= 100; x++){
printf("%d - %d: ", c1, c2);
for(y = c1; y <= c2; y++){
printf("%4d", data[y]);
}
0725デフォルトの名無しさん
2005/06/04(土) 16:12:04エチーなやつ、ういやつ
0726デフォルトの名無しさん
2005/06/04(土) 17:57:41ありがとうございます。
一部間違いありましたが、ちょっと手直ししたらちゃんとうごいたっぽいです。
ありがとうございました!
0727デフォルトの名無しさん
2005/06/04(土) 19:09:24int main(){
printf("田");
}
0728デフォルトの名無しさん
2005/06/04(土) 20:25:45#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int dataIndex;
int main(void){
char buffer[1024];
char **Data;
int i, max;
dataIndex = 0;
printf("How many data do you input? ->");
scanf("%d", &max);
Data = (char **)malloc(max*sizeof(char *));
while( dataIndex < max) {
scanf( "%s" , buffer );
if ( strcmp( "end" , buffer ) == 0 ) break;
Data[dataIndex] = (char *)malloc((strlen(buffer) + 1) * sizeof(char));
strcpy(Data[dataIndex], buffer);
dataIndex = dataIndex + 1;
}
printf( "----\n" );
for ( i = 0 ; i < dataIndex ; i++ ) {
printf( "%s\n" , Data[i] );
free(Data[i]);
}
free(Data);
return 0;
}
0729デフォルトの名無しさん
2005/06/04(土) 21:38:19[2] 問題文(含コード&リンク):学籍番号(3桁)と点数を学籍番号000が入力
されるまで読み込み、最高点の人の点数と学籍番号、最低点の人の点数と学籍
番号、および全員の平均点を表示しなさい。最高点、最低点が同じ人が複数いた
場合、一人だけ出力すればよい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限: 無期限
0730デフォルトの名無しさん
2005/06/04(土) 21:42:43[2] 問題文(含コード&リンク):二つの整数を入力し、小さい方の数以上
で大きい方の数以下の整数をすべて加えた値を表示しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限: 無期限
0731デフォルトの名無しさん
2005/06/04(土) 22:17:50どっかで見たような問題だが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/500.c
0732デフォルトの名無しさん
2005/06/04(土) 22:22:02おお、有難う御座います!!
助かりましたm(_ _)m
0733デフォルトの名無しさん
2005/06/04(土) 22:26:09>>731
これは構造体の練習問題なんじゃないの?
0734デフォルトの名無しさん
2005/06/04(土) 22:53:14まず,pattern に対して以下のように情報を収集して next[i] (1 ≦ i ≦ pattern_len) という配列を作る:
1 ≦ i ≦ pattern_len に対して,0 ≦ j ≦ i - 2 の範囲で j を動かして,
pattern[0] 〜 pattern[j] と pattern[i - 1 - j] 〜 pattern[i - 1] が完全に一致するようなできるだけ大きい j を選んで,next[i] = j + 1とする.
そのような j が無いときは,next[i] = 0 とする.
どういう事やってるの?
0735デフォルトの名無しさん
2005/06/04(土) 23:02:03[2] 問題文(含コード&リンク):
起動中である自己プログラムのCRC、又はMD5値を取得し
CRC、MD5値が"111111"で無い場合、自己プログラムを終了する関数を作りなさい。
CRC,MD5値はどちらか一方を選択する事。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):VC++
[3.3] 言語:C 又は C++
[4] 期限: 一ヶ月以内
終了は解っているのですがCRCなどの取得が解りません。
APIを使うんじゃないか?と思って検索しておりますが見つからず
課題前にMSDNの使い方やネットでリフェンス(英語)を見る方法だったので
それで調べるのかと思ってますが見つかりません。お力をお貸し下さいませ。
0736デフォルトの名無しさん
2005/06/04(土) 23:20:34#include <stdio.h>
int main( void )
{
int min, max, sum, counter;
scanf( "%d %d", &min, &max );
sum = 0;
for( counter=min; counter<=max; counter++ )
sum += counter;
printf( "%d %d %d\n", min, max, sum );
return 0;
}
0737デフォルトの名無しさん
2005/06/04(土) 23:31:5430点
0738デフォルトの名無しさん
2005/06/04(土) 23:39:06どうもありがとうございます
0739デフォルトの名無しさん
2005/06/04(土) 23:43:35FastHashDllでも使え。
0740デフォルトの名無しさん
2005/06/04(土) 23:55:26#include <stdlib.h>
#include <time.h>
main()
{
int n,r,hand;
printf("ジャンケンをします\nグーは0、チョキは1、パーは2を入力してください:");
scanf("&lf",&n);
srand(time(NULL));
r = rand();
hand=rand()%3;
if (n==hand) printf("\nコンピュータは %d\n引き分けです\n\n",hand);
else if (((n==0) && (hand==1)) || ((n==1) && (hand==2)) || ((n==2) && (hand==0)))
printf("\nコンピュータは %d\nあなたの勝ちです\n\n",hand);
else if (((n==0) && (hand==2)) || ((n==1) && (hand==0)) || ((n==2) && (hand==1)))
printf("\nコンピュータは %d\nあなたの負けです\n\n",hand);
}
これなんですが、0を入力したときはちゃんと動作するんですが、1と2を入力した時はおかしな答えが出てきてしまいます
どうしてでしょうか?
ifまでしかまだ習ってないんでそこをよろしくお願いします
0741デフォルトの名無しさん
2005/06/04(土) 23:57:41intなのにscanf("&lf",&n)って、なにやってんだ俺……
0742614
2005/06/05(日) 00:21:53一応波形のように表示させることはできたんですが
ウィンドウが640x480なのにたいして与えられるデータ値が
+ー6800前後(Y軸)、データの量が10020個(X軸)と入りきらないという事態になりました
一応クリックする度に600個づつ表示出来るようにして10020個の問題はクリアしたつもりなのですが、
X軸、Y軸の間隔の調整方法でなにか良いアイディア在りませんでしょうか?
0743デフォルトの名無しさん
2005/06/05(日) 00:41:18画面の大きさv:0〜480(上下逆の場合は適宜変える)
v=(6800+p)*480/(+6800-(-6800))
v=(6800-p)*480/(+6800-(-6800))(逆)
vがintなら割る順序に気をつけるかdoubleに変換するか
試行錯誤すると。
0744デフォルトの名無しさん
2005/06/05(日) 09:54:39[2] 問題文: 繰り返し(for文 or while文) printf scanf if文
をすべて使って 自由にプログラムを完成させよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:6月8日
[5] その他の制限:for文まで習ってます。
0745デフォルトの名無しさん
2005/06/05(日) 10:18:41あんた、昨日もどっかのスレにあげてなかった?
ちょっと自分でやってみ。
で、わからんとこを質問してみろ。
0746デフォルトの名無しさん
2005/06/05(日) 10:20:34元データの精度にもよるけど、音声データは連続して
少しずつ変化していくから、隣接しているデータの平均を取ったり、
一部のデータを無視したりしても結果はそんなには変わらないと思うが。
もしくは、Wav編集ソフトのようにY軸を小さくして複数段で表示したりするとか。
http://www.hookup.co.jp/software/vegas5/images/wav_multi.jpg
0747デフォルトの名無しさん
2005/06/05(日) 10:58:29[2] 問題文(含コード&リンク): tの値を変化させていった時の、sin((2πf)t)の波形を出力する。fは任意。
[3] 環境
[3.1] OS:windows xp
[3.2] コンパイラ(バージョン):Visual C++ 6.0
[3.3] 言語:C
[4] 期限:2005/6/5
[5] その他の制限:
一応、以下のプログラムを書いて実行したのですが、一般的なsinカーブになりません。
出力はcsvファイルにして、Excelでグラフを描けるようにしたいのですが。
どうぞ、ご教授お願いいたします。
0748747
2005/06/05(日) 10:59:08#include <stdio.h>
#include <math.h>
#include <string.h>
main()
{
FILE *fp;
char fn[1000];
int i;
double D[1000],pi,f;
pi=3.1415;
f=10;
strcpy(fn,"sin.csv");
fp=fopen(fn,"w");
for(i=0 ; i<1000 ; i++)
{
D[i]=sin((2*pi*f)*i*0.1);
fprintf(fp,"%f\n",D[i]);
}
}
0749デフォルトの名無しさん
2005/06/05(日) 11:04:20↓
D[i]=sin(2*pi/f*i);
(fを周期と考えたとき)
または、
D[i]=sin(2*pi*1000/f*i);
(Dの長さを単位としてfを周波数と考えたとき)
0750747
2005/06/05(日) 11:14:10ありがとうございます。
何だかできそうなのですが、
いまいち何が悪かったのか分かりません(汗)
何かご指摘がございましたら、教えてくださいませ。
0751614
2005/06/05(日) 11:41:42>>746さん
レスありがとうございます。
>>743さんの式を使ってみたらうまくいきました。
ただこの式の効果というか仕組がよく理解できません
よかったら教えてもらえませんか?
あとはX軸をどうやって全体表示させるか考えようとおもいます
(課題の指示に全体を表示させるようにあったので)
>>746さんのいうとおり 何段かに別けるか、
一部無視してみたりいろいろためしてみようとおもいます。
0752デフォルトの名無しさん
2005/06/05(日) 12:24:21目盛りが-6800〜6800まであるグラフを目盛り0〜479がある別のグラフに形を似せて書くとき、
どういう座標変換がされるかを考えるとよい。
0753デフォルトの名無しさん
2005/06/05(日) 12:45:30『C言語による最新アルゴリズム辞典』で検索。
全ソースコードが引っかかるはず。
zip内のファイル名がcrcとか着いてるのを探せばいいんでないかい?
0754デフォルトの名無しさん
2005/06/05(日) 12:56:08[2] 問題文 :ユークリッドの互除法に従って2つの自然数の最大公約数を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月6日
[5] その他の制限:C言語を習ってまだ1ヶ月で繰り返し処理までは習っています。
0755デフォルトの名無しさん
2005/06/05(日) 12:57:45int gcd (int a, int b) {
if (b == 0) return a;
else {return gcd2 (b, a%b);}
}
0756デフォルトの名無しさん
2005/06/05(日) 12:58:29○else {return gcd (b, a%b);}
0757デフォルトの名無しさん
2005/06/05(日) 12:59:13{
int tmp;
if (a < 1 || b < 1)
return 0;
while (a % b != 0) {
tmp = a % b;
a = b;
b = tmp;
}
returm b;
}
0758デフォルトの名無しさん
2005/06/05(日) 12:59:50int gcd (int a, int b) {
register int g, c, e = 0;
while (a&1 + b&1 == 0) {a = a>>1; b = b>>1; e++;}
while (a&1 == 0) a = a>>1;
while (b&1 == 0) b = b>>1;
while (b != 0 && b != 1) {
c = (a-b); c = c>=0?c:-c; // c = abs (a-b);
a = a>=b?b:a; // a = min (a, b);
b = c; while (b&1 == 0) b = b>>1;
}
if (b == 0) g = a * power (2, e);
if (b == 1) g = power (2, e);
return g;
}
0759デフォルトの名無しさん
2005/06/05(日) 13:00:12int n = 1;
while (b) {if (b&1) n = n*a; b = b >> 1; a = a*a;}
return n;
}
0760なかじま
2005/06/05(日) 13:01:36#define MAX 3
int main(void)
{
int num[MAX];
int cnt;
for(cnt=0; cnt<MAX; cnt++)
{
printf("Input number %d ",cnt+1);
scanf("%d",&num[cnt]);
}
for(cnt=MAX; cnt>0; cnt--)
{
printf("number %d(%06d)\n",cnt, num[cnt]);
}
return 0;
}
number1〜3まで入力して、numbe3から1の順で格納された値を表示するというプログラムなのですが、表示のときnumber3だけ入力していない4が表示されます。すいませんアドバイスください。
0761754
2005/06/05(日) 13:02:12ということ以外は習ってないので良く分からないです。
0762デフォルトの名無しさん
2005/06/05(日) 13:06:04関数というのは、値を入力して値を出力するものを言う。
return 〜というのは関数を終了して〜を出力するという意味。
関数の中ならどこで使っても良い。
0763754
2005/06/05(日) 13:10:45ありがとうございます。なんとなく分かりました。
でも授業では習ってないので、return文を使わない
方法で>>754の問題のプログラムを教えていただきたいですm(_ _)m
0764デフォルトの名無しさん
2005/06/05(日) 13:12:33{
int tmp;
if (a >= 1 && b >= 1) {
while (a % b != 0) {
tmp = a % b;
a = b;
b = tmp;
}
}
returm b;
}
0765デフォルトの名無しさん
2005/06/05(日) 13:13:13嫌です。
あの関数を提出しなさい。
0766デフォルトの名無しさん
2005/06/05(日) 13:24:37習っていないものを使って何が悪い。
0767デフォルトの名無しさん
2005/06/05(日) 13:28:46習ってないものを使うとインターネットから拾ってきたものだと怪しまれるからじゃない?
0768デフォルトの名無しさん
2005/06/05(日) 13:29:440769デフォルトの名無しさん
2005/06/05(日) 13:30:38「独学で勉強した」とも考えられる。
0770デフォルトの名無しさん
2005/06/05(日) 13:32:42あー。プログラミングは独学のほうがレベル高いからなぁ。
学校の場合、よい教官にあたらんとな。
0771デフォルトの名無しさん
2005/06/05(日) 13:37:55>D[i]=sin(2*pi*1000/f*i);
>(Dの長さを単位としてfを周波数と考えたとき)
おいおい、fが周波数ならこんな式にはならんだろう。
>>747=748
時間軸が短いだけじゃない?
>D[i]=sin((2*pi*f)*i*0.1);
の0.1をもっと小さい値(0.01〜0.05くらい?)にすれば
多分求めてる波形が出るはず。
0772デフォルトの名無しさん
2005/06/05(日) 13:42:22d:\home>cl a.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
a.c
コマンド ラインのエラー D2027 : '.\c2' を実行できませんでした。
なんでなんじゃー。ぐすん。
0773735
2005/06/05(日) 13:59:21見ました。FlashDLLより解りやすそうだったのですが
CRC**t と CRC** の違いが解りません。
tが付いてるファイルは何なのでしょうか?
0774デフォルトの名無しさん
2005/06/05(日) 14:08:02>753ではないけど。
チェックサムでもCRCでもMD5でもいいんだけどさ、まずは
Validator = GetValidator(自己ファイル全体)
というところをk何が得たほうがよくね?
0775デフォルトの名無しさん
2005/06/05(日) 14:09:070776デフォルトの名無しさん
2005/06/05(日) 14:09:19\\ ∧_∧ ノノノ _∧ ノノノ _∧ ノノノ _∧
╋┏┓ \ ( ´∀`) ゚∋゚)´∀`) ゚∋゚)´∀`) ゚∋゚)´∀`)
┃┣┫━━> ⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ ⌒ヽ ━━┃┃┃
╋ ┃ / . へ \ へ \ へ \ へ \ へ \ へ \ へ \. ・ ・ ・
/ / \.\ \\ .\\ \\ \\ .\\ . \\
レ ノ ノヽ_つノ ヽ_ミ ヽ_つ ヽ_ミ ヽ_つ ヽ_ミ ヽ_つ
/ / / / / / / / / / / / / /
/ /| / /| / /| / /| / . /|/ /| / /|
0777デフォルトの名無しさん
2005/06/05(日) 14:09:401 ≦ i ≦ pattern_len に対して,0 ≦ j ≦ i - 2 の範囲で j を動かして,pattern[0] 〜 pattern[j] と pattern[i - 1 - j] 〜 pattern[i - 1] が完全に一致するようなできるだけ大きい j を選んで,next[i] = j + 1とする.
そのような j が無いときは,next[i] = 0 とする.
KMP法のテーブル表を作るんだけど教えてください
0778デフォルトの名無しさん
2005/06/05(日) 14:19:15>774
GetValidatorってMSDNに載ってないけどどうやって使う?
>>775
廃刊してたと思う。
0779デフォルトの名無しさん
2005/06/05(日) 14:50:38[1] 授業単元: データ構造とアルゴリズム
[2] 問題文(含コード&リンク):スタックのpush,pop関数を連結リストで実現せよ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:6月7日まで
[5] その他の制限:
連結リストを使ってpop,push関数をつくりスタックを実現せよという問題なのですが、
以下のプログラムを書いて実行すると、セグメントエラー(coreを出力しました)
とでて実行できません。
順に1,3,5をプッシュしてそのあとポップを実行する、というものです
あと同様にenqueue,dequeue関数をつくりキューを実現せよというものもあり
そちらもできれば教授お願いします。
よろしくお願いいたします。
0780デフォルトの名無しさん
2005/06/05(日) 14:51:08#include<malloc.h>
struct LIST{
int data;
struct LIST *next;
};
struct LIST *head,*tail,*new;
void push(int x)
{
new=(struct LIST *)malloc(sizeof(struct LIST));
new->data=x;
new->next=head;
head=new;
}
int pop(void){
int x;
x=head->data;
head=head->next;
return(x);
}
int main(void){
tail=NULL;
head=NULL;
push(1); push(3); push(5);
printf("stack data={%d,%d,%d}\n",head->data,
head->next->data,head->next->next->data);
printf("output data(stack)=%d\n",pop());
return(0);
}
0781デフォルトの名無しさん
2005/06/05(日) 15:04:33小一時間(r
0782デフォルトの名無しさん
2005/06/05(日) 15:06:19で?それがcore吐く原因?
0783デフォルトの名無しさん
2005/06/05(日) 15:07:13struct LIST *head,*tail,*new;
0784781
2005/06/05(日) 15:12:21と
head->next->data
head->next->next->data
なんてやってるからてっきりそうだと思ったんでつが。違ってたならスマソ
0785デフォルトの名無しさん
2005/06/05(日) 15:13:280786デフォルトの名無しさん
2005/06/05(日) 15:17:03自信が無いなら語らないほうがいいよ
0787デフォルトの名無しさん
2005/06/05(日) 15:28:470788デフォルトの名無しさん
2005/06/05(日) 15:33:21あおられてますよ(失笑)
0789デフォルトの名無しさん
2005/06/05(日) 15:42:42new=(struct LIST *)malloc(sizeof(struct LIST));
に失敗したとか(w
0790デフォルトの名無しさん
2005/06/05(日) 15:46:53$ ./a.out
stack data={5,3,1}
output data(stack)=5
$ gcc --version
gcc (GCC) 3.3.5-20050130 (Gentoo Linux 3.3.5.20050130-r1, ssp-3.3.5.20050130-1, pie-8.7.7.1)
以下略。
0791デフォルトの名無しさん
2005/06/05(日) 15:58:16>>786
0792デフォルトの名無しさん
2005/06/05(日) 16:00:320793デフォルトの名無しさん
2005/06/05(日) 16:03:27答えは簡単だからヒントを…
配列の格納をもう一度かんがえてみ
scanfの段階ではnum[0]から格納しているのに対して
入力された値を出力するところではnum[3]から出力しようとしてる
num[3]には何か値を入力してるか?
0794デフォルトの名無しさん
2005/06/05(日) 16:06:120795789
2005/06/05(日) 16:14:530796デフォルトの名無しさん
2005/06/05(日) 16:40:40互換でない型変換(関数 main ) ってのが出てしまいます
(´;ω;`)ナンダヨソレ・・・。 どうかデバッグお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/501.txt
エラーの行や問題も書いてありますが正しくコンパイルされてても実行がうまくいくか自信ありません・・・
よかったら間違いを訂正して下さると嬉しいです orz
0797デフォルトの名無しさん
2005/06/05(日) 16:48:20×(struct list)
○(struct list *)
0798& ◆.1WWo/rNig
2005/06/05(日) 16:48:35[2] 問題文(含コード&リンク):
以下のようなプログラムを書け。
形式
コマンド名 モード 行数 ファイル...
機能
モード(8進数)で指定されたアクセス権でファイルを作成し、
その内容は、各行が%一文字のみからなり(すなわち、改行文字を含めて2
バイトからなり)、行数(10進数)で指定された行数のテキストとなるよ
うにする。ファイルは1個以上任意個指定できるものとする。 同名のファ
イルがすでに存在する場合はエラーとする。 指定されたファイルが複数
の場合で、処理の途中でエラーが発生した場合でも、未作成のファイル
があれば、処理を中断することなく残りのファイルを作成すること。
[3] 環境
[3.1] vineLinux最新版
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年6月5日24:00まで
[5] その他の制限:どこまで習っているか、等々
お願いいたします。
0799デフォルトの名無しさん
2005/06/05(日) 16:50:26明日提出期限なのに、今から送って間に合うのか?
0801デフォルトの名無しさん
2005/06/05(日) 17:19:03コンパイラ Microsoft.NET Framework SDK
ちょっとお尋ねしたいのですが、ファイルからデータa.datを読み込むプログラムで
ファイルの場所を、
fp = fopen("C:\Documents and Settings\Owner\My Documents\a.out","rt");
というふうに書いて実行すると、以下のようになってしまいます
yomikomi.c
yomikomi.c(12) : warning C4129: 'D' : エスケープ シーケンスとして正しく認識され
ませんでした。
yomikomi.c(12) : warning C4129: 'O' : エスケープ シーケンスとして正しく認識され
ませんでした。
yomikomi.c(12) : warning C4129: 'M' : エスケープ シーケンスとして正しく認識され
ませんでした。
正しくファイルの場所を記述するにはfp = fopen(" ","rt");の中身をどうすればよいのでしょうか?
0802デフォルトの名無しさん
2005/06/05(日) 17:20:18\ではなく\\と書け
0803デフォルトの名無しさん
2005/06/05(日) 17:25:21#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main( int argc, char *argv[] )
{
mode_t mode;
int line, fd, i, j;
sscanf( argv[1], "%o", &mode );
line = atoi( argv[2] );
for ( i = 3; i < argc; i++ ) {
if ( -1 == ( fd = open( argv[i], O_WRONLY | O_CREAT | O_EXCL, mode ) ) ) {
printf( "エラー %s\n", argv[i] );
} else {
for ( j = 0; j < line; j++ ) {
write( fd, "%\n", 2 );
}
close( fd );
}
}
}
0804デフォルトの名無しさん
2005/06/05(日) 17:29:57ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/504.txt
0805801
2005/06/05(日) 17:41:51こういうことでしょうか?
fp = fopen("C:\\Documents and Settings\\Owner\\My Documents\\a.dat","rt");
if (fp==NULL){
printf("Error: File not found.\n");
exit(1);
}
しかし実行してもエラーになってしまうのですが・・・
a.datも確かにマイドキュメントの中です。
C:\Documents and Settings\Owner\My Documents>yomikomi.exe
Error: File not found.
0806デフォルトの名無しさん
2005/06/05(日) 17:50:33フォルダ名にスペースがある
0807801
2005/06/05(日) 18:02:16"C:\\DocumentsandSettings\\Owner\\MyDocuments\\a.dat"
"C:\\DocumentsandSettings\\Owner\\MyDocuments\a.dat"
破れかぶれで色々試していますが、一向にファイルが読み込めません(ノД`)
0808デフォルトの名無しさん
2005/06/05(日) 18:05:140809デフォルトの名無しさん
2005/06/05(日) 18:09:160810デフォルトの名無しさん
2005/06/05(日) 18:12:18ほらやっぱwindowsならではのお約束って体験してみないと身につかないし
0811デフォルトの名無しさん
2005/06/05(日) 18:31:260812デフォルトの名無しさん
2005/06/05(日) 18:33:060813デフォルトの名無しさん
2005/06/05(日) 18:35:020814デフォルトの名無しさん
2005/06/05(日) 19:06:05宣言時に int a[]={1,2,3,4,5};
はわかるのですが、
そのあとに同じようにしても代入できません
0815デフォルトの名無しさん
2005/06/05(日) 19:10:32memcpy()はforループなどを使って明示的に初期化しる
0816801
2005/06/05(日) 19:53:23ありがとうございます。解決しますた
0817デフォルトの名無しさん
2005/06/05(日) 20:44:24そこでC99の複合リテラルですよ。
どうせmemcpyとかが必要だけど。
0818デフォルトの名無しさん
2005/06/05(日) 21:11:400819デフォルトの名無しさん
2005/06/05(日) 21:24:090820デフォルトの名無しさん
2005/06/05(日) 22:23:59わざわざ新しいCに手を出すぐらいならC++で良し。
0821デフォルトの名無しさん
2005/06/05(日) 23:17:22こんな感じでいいのだろうか。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/505.txt
0822デフォルトの名無しさん
2005/06/05(日) 23:29:11そんなもの誰もCに期待していない。
お前素人?
0823デフォルトの名無しさん
2005/06/05(日) 23:35:32むしろJava
0824デフォルトの名無しさん
2005/06/05(日) 23:36:31Javaでいいような領域でそもそも今時Cなんぞ使うものか
0825デフォルトの名無しさん
2005/06/05(日) 23:38:270826デフォルトの名無しさん
2005/06/06(月) 00:30:18[2] 問題文(含コード&リンク):
3つの整数をキーボードから読み取って
その合計を求めるプログラムを次の条件で作りなさい
�@変数は3個だけ使用 �Ascanfは繰り返し処理
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):gcc ・・・かな?
[3.3] 言語:C
[4] 期限:2005年6月6日午後3時まで
どうしてもわかりません。よろしくお願いします。
0827デフォルトの名無しさん
2005/06/06(月) 00:32:10大学でそれなら諦めた方が良いよ。
教科書あるだろ?
0828デフォルトの名無しさん
2005/06/06(月) 00:36:19[2] 問題文(含コード&リンク):
int型の配列に格納された数値を効率よくファイルに書き込む
方法をご教授ください。
// データ格納バッファ
unsigned int i[50];
// 数値格納関数(定期的に1msec毎に定期的にコールされる)
void func(unsigned int j)
{
static unsigned char idx;
if(idx > 50)
idx = 0;
i[idx++] = j;
}
ファイル出力イメージは以下のとおりです。
(テキスト形式)
34
56
123
・
・
・
この場合、i[]に数値を代入する代わりにfprintf等の関数を用いれば
ファイル書き込みが可能とは思いますが、毎回ファイル書き込みにいかずに、
バッファリングされたものを効率よくファイル書き込みできる方法を
教えてください。 ファイルアクセスを極力少なくしたいと考えています。
よろしくお願いいたします。
[3] 環境
[3.1] OS:Windows
[3.3] 言語:どちらでも可
0829デフォルトの名無しさん
2005/06/06(月) 00:38:26#include <stdio.h>
int main(){
int i,a,b,c;/*変数宣言*/
int *p[]={&a,&b,&c};/*ポインタを宣言*/
puts("Input...");
for(i=0;i<3;i++){
scanf("%d",p[i]);/*標準入力から入力*/
}
printf("%d",a+b+c);/*表示*/
}
0830デフォルトの名無しさん
2005/06/06(月) 00:39:19まさに
> ファイルアクセスを極力少なく
するために、デフォルトでバッファリングを行ってくれるから。
0831デフォルトの名無しさん
2005/06/06(月) 00:44:03すみませんが変数は3つでお願いします。
0832829ではないが
2005/06/06(月) 00:52:25#include?<stdio.h>
int?main(){
????int?i,sum,tmp;/*変数宣言*/
????puts("Input...");
????for(i=0;i<3;i++){
????????scanf("%d",&tmp);/*標準入力から入力*/
????????sum += tmp;
????}
????printf("%d",tmp);/*表示*/
}
0833デフォルトの名無しさん
2005/06/06(月) 00:54:38#include <stdio.h>
int main(void) {
int i, sum, n; /* 変数3つ */
sum = 0;
for( i = 0 ; i < 3 ; i++ ) {
scanf("%d", &n);
sum += n;
}
printf("Sum = %d\n", sum);
return 0;
}
0834激しく文字化けしたorz
2005/06/06(月) 00:55:08int main(void){
int i, sum, tmp;
puts("Input...");
for(i = 0; i < 3; i++){
scanf("%d", &tmp);
sum += tmp;
}
printf("%d", sum);
return 0;
}
0835デフォルトの名無しさん
2005/06/06(月) 00:58:05[2] 問題文(含コード&リンク):
文字列s、fが与えられ、文字列sの中で文字列fが最初に現れる位置を見つけ、その位置を返す関数searchを作れ。
例:s = tractor f = act → actor
[3] 環境
[3.1] OS:Windows XP
[3.2] bcc551
[3.3] 言語:C
[4] 期限:2005年6月10日
[5]このsearchってのは要するにライブラリ関数のstrstrって奴と同じものらしいです。
以下のようなものを作ってみたのですが、コンパイルは出来るのに実行するとセグメントエラーがおきます。何故でしょうか?
#include<stdio.h>
char *search(char *s, char *f){
char *w;
if(s[0] == f[0]){
w = search(s+1, f+1);
if(w == s+1) return s;
}
return search(s+1,f);
}
int main(){
char s[] = "tractor";
char f[] = "actor";
printf("%s\n",search(s,f));
}
0836デフォルトの名無しさん
2005/06/06(月) 01:01:02追ってみれば無限再帰することが分かる。ちゃんと終端チェックしないと。
0837デフォルトの名無しさん
2005/06/06(月) 01:02:430838デフォルトの名無しさん
2005/06/06(月) 01:05:49つーかあんたは lisper なのか?
0839デフォルトの名無しさん
2005/06/06(月) 01:08:35まあ俺も素直に書くなら二重ループになるだろうけどさ。
0840835
2005/06/06(月) 01:09:59それとセグメントエラーって何なんですか?
0842デフォルトの名無しさん
2005/06/06(月) 01:13:09まあいいけどさ
普通は、参照または書き込みできないメモリにアクセスしようとした
という意味ね
基本的なメモリ保護機能のあるOSでの話だけど。
0843デフォルトの名無しさん
2005/06/06(月) 01:15:52なるほどね。
>>839にはlisperと決め付けたと言われるし、なんかコエー。
0844デフォルトの名無しさん
2005/06/06(月) 01:22:29~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
~~~~~~~~~~~~~~~~~~~~
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0845デフォルトの名無しさん
2005/06/06(月) 01:31:020846デフォルトの名無しさん
2005/06/06(月) 01:47:55こういうものを作ってみたなりよ。うちの環境では1clock()かからない。
@P3-1Ghz&i815Chipset(今となっては結構ぷあな環境かな。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/506.txt
0847デフォルトの名無しさん
2005/06/06(月) 01:49:470848デフォルトの名無しさん
2005/06/06(月) 02:09:52デバッグ中に65MBのファイルをはいたときはびびった。
あれだけ作るのに10秒かかってないし。
こえーこえー。
0849デフォルトの名無しさん
2005/06/06(月) 02:23:17fflush() なしか・・・何を図ってるの?
0850デフォルトの名無しさん
2005/06/06(月) 02:29:50まともな Operating System ならライブラリ関数が最適にバッファリングしてくれて
システムコール呼び出し回数を減らしてくれる
それにファイルに書き込んだからってすぐにハードディスクに書き込まれるわけじゃない
ちゃんとOSバッファリングしてる
それを制御しようとしたら Kernel レベルの実装をやってください
0851デフォルトの名無しさん
2005/06/06(月) 02:30:170852デフォルトの名無しさん
2005/06/06(月) 02:32:05カーネルレベルのバッファリングとライブラリレベルのバッファリングは
違うので、ごっちゃにすると誤解をまねく恐れが。
stdioの場合は、ライブラリレベル、つまりユーザコードのレベルで
バッファリングが行われる。
で、そのバッファリングモードを変える方法もあるし、たんに明示的に
fflush()を呼ぶこともできる。
0853デフォルトの名無しさん
2005/06/06(月) 02:34:23fflush???
一応、fprintf*DATAMAX(=50)の速度についてなんだけど、気にするほど遅くないということが出たと思ったんだが。
*-*-*-*-*-*-*-*-実験中*-*-*-*-*-*-*-*-*;
fflushをprintf("end - %d\n\n",clock());の前においてみたけど、やっぱり1clock()かかりませんでしたよ。
こんな感じじゃだめかしらん??
0854デフォルトの名無しさん
2005/06/06(月) 02:37:49で、CLOCKS_PER_SEC はいくつですか?
0855デフォルトの名無しさん
2005/06/06(月) 02:45:210856デフォルトの名無しさん
2005/06/06(月) 03:02:361000でdefineされてた。グローバル変数だと思っていた。(汗
>>クロック
3年ほど前に習ったときはアプリ起動からのmsecと教えられたような気がする。(Windowsの40日問題もこれ系だったきがする。
CLOCKS_PER_SECが変数だと勘違いしてたので動的にその値が変わるもんだと思っていた。
よく考えてみると理解してないかもしれない。(大汗
たぶん、アプリ起動時からのmsecで良いと思う。
0857デフォルトの名無しさん
2005/06/06(月) 03:09:32sleep(10) だけのプログラムの場合、プログラムの実行時間は10秒だけど、
clock は、限りなく0に近い値を返す。
この場合、ファイルI/Oのkernel処理の時間は含まれない。
0858デフォルトの名無しさん
2005/06/06(月) 03:15:090859デフォルトの名無しさん
2005/06/06(月) 03:16:31ありゃ。思ってたのとぜんぜん違う。
clockが使えないとなると、WINAPI使うとかしないとだめか。うげ〜。
勉強になったよ。
レスthx。
0860デフォルトの名無しさん
2005/06/06(月) 03:17:06そだね。この話もぼちぼち終わりにしておきますか。
0861デフォルトの名無しさん
2005/06/06(月) 03:23:520862デフォルトの名無しさん
2005/06/06(月) 03:43:29おやすみ
0863太郎
2005/06/06(月) 10:34:54様
ありがとうございます。
ここのみなさんやさしい。。。
0864デフォルトの名無しさん
2005/06/06(月) 10:40:44[2] 問題文(含コード&リンク):
待ち行列を初期化する関数 void queueInitialize(queue_t *que) と,
待ち行列が空であるかどうかを判断する関数 int queueEmptyQ(queue_t *que)
とを作れ。ただし, queueEmptyQ は,待ち行列が空であるときに 1 を,空で
はないときに 0 を返すものとする。
[3] 環境
[3.1] VineLinux
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月6日02:00まで
0865864
2005/06/06(月) 10:41:55遅ればせながらお願いします。
0866デフォルトの名無しさん
2005/06/06(月) 10:51:41[2] 問題文(含コード&リンク): 標準入力からテキストファイルを読み込んで、
ファイルに出現する各文字の出現頻度データを出力するプログラムを作成せよ。
文字コードとその出現頻度を1行ずつ並べたデータを出力するようにせよ。
なお、頻度集計の対象とするのは、コードが0〜127の範囲に入る文字に限るものとする。
出力するデータの形式は、各行は2つの数字からなり、1番目を文字コード、1文字あけて2番目をその文字の出現頻度とする。
プログラムを実行するときは、上記の形式でstdoutにデータを出力したものとすれば、
それをパイプで送り込む事で、xgraphというソフトウェアによってグラフを描く事ができる。
%./char_hist < char_hist.c | xgraph
(プログラム名をchar_histとする。)
なお文字コードと文字の対応関係は「man ascii」で調べられる。
[3] 環境
[3.1] OS:Windows/Linux/等々 :Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか:C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか:今週中に
[5] その他の制限:どこまで習っているか、等々 :関数、配列などを習って、今回は「文字列と標準入出力」というところを習いました。
できるだけ簡単なプログラムでお願いします。
よろしくお願いしますm( __ __ )m
0867デフォルトの名無しさん
2005/06/06(月) 11:36:29#include <stdio.h>
#include <string.h>
int main( void )
{
int code, count[128], i;
memset( &count[0], 0, sizeof( count ) );
while ( EOF != ( code = fgetc( stdin ) ) ) {
if( code >= 0 && code <= 127 ) {
count[code]++;
}
}
for ( i = 0; i < 128; i++ ) {
printf( "%d %d\n", i, count[i] );
}
}
0868デフォルトの名無しさん
2005/06/06(月) 12:19:54#include <stdio.h>
#define LOWER 0
#define UPPER 127
#define MAXLEN ((UPPER-LOWER)+1)
int
main(void)
{
int c, i;
long tot, freq[MAXLEN];
/* 配列とカウンタを初期化する */
for (i = 0; i < MAXLEN; i++)
freq[i] = 0;
tot = 0;
/* 標準入力を読みこみ、データを集計する */
while ((c = getchar()) != EOF)
if (c >= LOWER && c <= UPPER)
{
++freq[c-LOWER];
++tot;
}
/* データがあれば標準出力に出力する */
if (tot > 0)
{
for (i = 0; i < MAXLEN; i++)
printf("%d %.0f\n", i, (freq[i] == 0) ? 0 : (100.0*freq[i])/tot);
}
return 0;
}
0869デフォルトの名無しさん
2005/06/06(月) 12:32:41初心者スマソ
0870デフォルトの名無しさん
2005/06/06(月) 13:27:28[1] 授業単元: プログラミングA
[2] 問題文(含コード&リンク): パスワードの桁数を最初に入力させ、パスワードをランダム(アルファベットと数字)に生成するプログラムを作成せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン): borland
[3.3] 言語:C
[4] 期限:今日の17時までにお願いします(T_T)
よろしくおねがいします(T_T)
0871デフォルトの名無しさん
2005/06/06(月) 14:08:30mallocで確保した領域の解放は自分でやってくれ。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *str;
int num, i, j, c;
scanf("%d", &num);
str = (char*)malloc(sizeof(char) * num + 1);
srand(getpid());
for(i = 0; i < num; i++)
{
while(1)
{
c = rand() % 128;
if(isalnum(c) != 0)
{
break;
}
}
str[i] = c;
}
printf("%s\n", str);
return 0;
}
0872デフォルトの名無しさん
2005/06/06(月) 14:09:330873デフォルトの名無しさん
2005/06/06(月) 14:14:10#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *str;
int num, i, c;
scanf("%d", &num);
str = (char*)malloc(sizeof(char) * num + 1);
srand(getpid());
for(i = 0; i < num; i++)
{
while(1)
{
c = rand() % 128;
if(isalnum(c) != 0)
{
break;
}
}
str[i] = c;
}
str[num] = '\0';
printf("%s\n", str);
return 0;
}
0874デフォルトの名無しさん
2005/06/06(月) 14:21:53867 出現回数(回)
868 出現確率(%)
AABC (改行無し)
のをWindowsXPで試してみたら
(867) (868)
65 2 50
66 1 25
67 1 25
って出た
0875デフォルトの名無しさん
2005/06/06(月) 14:29:27[2] unsigned char型変数を宣言し、その中のビット位置と、
ビットの状態(1か0か)を読み込み、実際にその位置のビットを
指定された状態にセットするるプログラムを作成しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:6月9日まで
0877デフォルトの名無しさん
2005/06/06(月) 14:49:56普段new/deleteだからfreeの使い方をわすr(ry
0878デフォルトの名無しさん
2005/06/06(月) 15:06:20unsigned char data, mask;
int pos, bit;
/* pos と bit に入力 */
mask = 1 << pos;
if (bit == 0)
data &= ~ mask;
else
data |= mask;
/* 結果出力 */
0879デフォルトの名無しさん
2005/06/06(月) 15:13:43ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/507.txt
0880デフォルトの名無しさん
2005/06/06(月) 15:31:16自演乙
0882デフォルトの名無しさん
2005/06/06(月) 15:40:27???
0883デフォルトの名無しさん
2005/06/06(月) 16:09:222.問題文:正整数n(2以上) を入力させ、nを素因数分解するプログラムを作れ。2*3*3...のように出力しなさい。
3.環境
OS:Linux
言語:C
4.期限:2005/06/08
いくら考えてもわかんないorz
0884デフォルトの名無しさん
2005/06/06(月) 16:10:14[1] ゼミ
[2] スケールフリーネットワークを生成したいです。
これは以下の規則を持ちます。
1.ノードの初期値は2、リンク数は1。ノードは1つづつ増えていきかならず二つのリンクを得、100マデ試行を繰り返します。
2.新規ノードは二つのリンクを得ますがリンク数を多くもつノードほどリンクを張りやすい傾向にあります。
つまり一方のノードが他方の2倍のリンクを持つとき、倍もつほうはリンク数も倍の確率で得やすいということです。
ただし、リンクは重複を許しません。
3.得られたリンク数がベキ法則に従うことを図に示します。(これはエクセルに出力して図を描くので自分でやります)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年6月7日の23:59まで
[5] 基礎はすべて習っています。ネ申頼みまつ
0885デフォルトの名無しさん
2005/06/06(月) 16:10:33math.h は利用しても良いの?
0886デフォルトの名無しさん
2005/06/06(月) 16:25:52再起を使う方法
#include <stdio.h>
int iOutput = 0;
void _function_034( int v, int i )
{
while ( i < v ) {
if ( ( v % i ) == 0 ) {
if ( iOutput ) printf( " *" );
iOutput = 1;
printf( " %d", i );
_function_034( v / i, i );
break;
}
i++;
}
if ( i == v ) {
if ( iOutput ) printf( " *" );
printf( " %d\n", i );
return;
}
}
int main( void )
{
int n = 311112546;
_function_034( n, 2 );
return ( EXIT_SUCCESS );
}
0887デフォルトの名無しさん
2005/06/06(月) 16:26:130888デフォルトの名無しさん
2005/06/06(月) 16:29:56環境依存だから、そのまま出すのはまずいがLinuxならgccだろうから多分動く。
#include <stdio.h>
void print_prime_factorization(int n) {
void aux(int n, int k, const char * del) {
if (n == 1) {
puts("");
return;
}
if (!(n % k)) {
printf("%s%d", del, k);
aux(n / k, k, "*");
} else {
aux(n, k + 1, del);
}
}
aux(n, 2, "");
}
int main(void)
{
int n;
scanf("%d", &n);
print_prime_factorization(n);
return 0;
}
0889デフォルトの名無しさん
2005/06/06(月) 16:42:51math.h バージョン
#include <stdio.h>
#include <math.h>
int iOutput = 0;
int main( void )
{
int n = 217483645;
int i = 2;
while ( i < ( int )sqrt( ( double )n ) ) {
if ( ( n % i ) == 0 ) {
if ( iOutput ) printf( " *" );
iOutput = 1;
printf( " %d", i );
n /= i;
} else {
i++;
}
}
if ( iOutput ) printf( " *" );
printf( " %d\n", n );
return ( 0 );
}
0890デフォルトの名無しさん
2005/06/06(月) 17:30:26>>888
>>889
どうもありがとうございます。
とりあえず全部やってみます。
0891デフォルトの名無しさん
2005/06/06(月) 17:34:28>>888 で大きな素数(例えば 2147483647)を入れると
Stack Overflow になる。
0892888
2005/06/06(月) 18:14:42末尾再帰は最適化してくれるんじゃなかったのか?>gcc
いずれにせよそのまま出せるような解答ではないわけだが。
0893デフォルトの名無しさん
2005/06/06(月) 19:06:59球の半径を1から10まで1ずつ変化させ、球の表面積と体積を出力しなさい
補足 表面積S=4πr二乗 体積 V=4/3πr三乗 π=3.141592
二種類のループ(while,for,whileの無限ループ)を使いなさい。
出力例: 半径R= 表面積S= 体積V=
誰か助けて下さい。
0894864
2005/06/06(月) 19:08:15[1] 授業単元:アドバンスプログラミングA
[2] 問題文(含コード&リンク):
待ち行列を初期化する関数 void queueInitialize(queue_t *que) と,
待ち行列が空であるかどうかを判断する関数 int queueEmptyQ(queue_t *que)
とを作れ。ただし, queueEmptyQ は,待ち行列が空であるときに 1 を,空で
はないときに 0 を返すものとする。
[3] 環境
[3.1] VineLinux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月7日02:00まで
です。お願いしますm(__)m
0895デフォルトの名無しさん
2005/06/06(月) 19:20:01// for使用
#include <stdio.h>
#define PI 3.141592
int main(){
int r;
for(r = 1; r <= 10; r++) printf("半径R=%d 表面積S=%f 体積V=%f\n", r, 4*PI*r*r, 4*PI*r*r*r/3);
return 0;
}
// while使用
#include <stdio.h>
#define PI 3.141592
int main(){
int r = 1;
while(r <= 10){ printf("半径R=%d 表面積S=%f 体積V=%f\n", r, 4*PI*r*r, 4*PI*r*r*r/3); r++; }
return 0;
}
// while無限ループ使用
#include <stdio.h>
#define PI 3.141592
int main(){
int r = 1;
while(1){ printf("半径R=%d 表面積S=%f 体積V=%f\n", r, 4*PI*r*r, 4*PI*r*r*r/3); r++; if(r > 10) break; }
return 0;
}
0896デフォルトの名無しさん
2005/06/06(月) 19:24:08queue_tってどんな風に定義されてるの?
0897デフォルトの名無しさん
2005/06/06(月) 19:27:170898894
2005/06/06(月) 19:41:02様
すいません。
初心者でよくわからないんですが
このページのレポート問題です。。
http://www.kyoto-su.ac.jp/%7Eyamada/ap/queue.html#report
おねがいします。。
0899デフォルトの名無しさん
2005/06/06(月) 19:51:21void queueInitialize(queue_t *que){
que->head = 0;
que->num = 0;
}
int queueEmptyQ(queue_t *que){
return que->num ? 0 : 1;
}
0900デフォルトの名無しさん
2005/06/06(月) 19:56:34[2] 問題文(含コード&リンク): 月を入力すると、その季節を表示するプログラムを作る。
不適当な数字を入力した場合もう一度入力を促すようにする。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:今日の9時まで。
[5] その他の制限:どこまで習っているか、等々
0901デフォルトの名無しさん
2005/06/06(月) 19:57:04自分でできたところまで書いてみます。
#include <stdio.h>
int main(void)
{
int month;
printf("input month:");
scanf("%d",&month);
if(month >=3 && month <=5)
puts("It is spring.");
else if(month >=6 && month <=8)
puts("It is summer.");
else if(month >=9 && month <=11)
puts("It is autumn.");
else if(month ==1 || month ==2 || month ==12)
puts ("It is winter.");
return 0;
}
0902デフォルトの名無しさん
2005/06/06(月) 20:09:220903デフォルトの名無しさん
2005/06/06(月) 20:10:510904デフォルトの名無しさん
2005/06/06(月) 20:16:44printf("input month:");
scanf("%d",&month);
if(month >= 1 && month <= 12) break;
}
0905デフォルトの名無しさん
2005/06/06(月) 20:17:26だいぶ遅れたがスケールフリーネットワークのやつ。
問題読み違えてなきゃいいけど、一応確認。
>ノードの初期値は2、リンク数は1
ってノードが二つあって1つのリンクでつながってるってことだよね?
あと、リンクは無向だよね?(有向だとつじつま合わん希ガス)
とりあえず書いた分だけ書き込んどく。
あーネットワークの構造とか一切記録してないけど。w
ネットワークの構造を保存しておきたければ
list<int> を list<Network> とかやって Network クラスつくって隣接ノードのリストでも記録しておけばいいんでないかと思う。
#include <iostream>
#include <list>
using namespace std;
typedef list<int> List;
typedef List::iterator Iter;
void rearrange_list(List & ranking, Iter & iter);
0906905
2005/06/06(月) 20:18:57{
List ranking; // リンクの数が多い順にひたすらならべる。
srand((unsigned)time(0));
ranking.push_back(1);
ranking.push_back(1);
int total_links = 2;
for (int i = 0; i < 100; i ++)
{
int next = rand() % total_links; // 変数名わかりづらくてスマソ
Iter iter1, iter2;
for (iter1 = ranking.begin(); iter1 != ranking.end(); iter1 ++)
{
next -= * iter1;
if (next < 0)
{
total_links ++;
(* iter1) ++;
break;
}
}
rearrange_list(ranking, iter1); // 並び替え
0907905
2005/06/06(月) 20:20:09for (iter2 = ranking.begin(); iter2 != ranking.end(); iter2 ++)
{
if (iter1 == iter2) // 重複を回避
{
continue;
}
next -= * iter2;
if (next < 0)
{
total_links ++;
(* iter2) ++;
break;
}
}
rearrange_list(ranking, iter2); // 並び替え
ranking.push_back(2);
total_links += 2;
}
0908905
2005/06/06(月) 20:20:43int count = 1;
for (Iter iter = ranking.begin(); iter != ranking.end(); iter ++)
{
if (prev && * iter == prev)
{
count ++;
}
else
{
cout << * iter << " 個リンクを持つノードは " << count << "個" << endl;
prev = * iter;
count = 1;
}
}
return 0;
}
0909905
2005/06/06(月) 20:21:04{
// インクリメントされた iter の所以外は全部ソートされてる(はず)なので、
// ひたすらリストをさかのぼる。
Iter iter_back = iter, iter_prev = iter;
iter_back --;
for (; iter_back != ranking.begin() && * iter_back < * iter; iter_back --)
{
iter_prev = iter_back;
}
if (* iter_prev < * iter)
{
ranking.splice(iter_back, ranking, iter);
}
}
0910デフォルトの名無しさん
2005/06/06(月) 20:32:51ムリポ。
>>904
えーそれ以降に何繋げたらいいんでしょうか
0911デフォルトの名無しさん
2005/06/06(月) 20:34:24[1] 言語処理
[2] 入力された文字列をランダムに入れ替えるプログラムを作れ。
<例>
input=>hello
hloel
↑が全然出来ません。
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:2005年6月8日の23:59まで
[5] ポインタをかじったくらい
どなたか助けてください。
0912デフォルトの名無しさん
2005/06/06(月) 20:40:35while文の中に、
>>901を入れてみるんだ。
ガンガレ
0913905
2005/06/06(月) 20:43:30クソ長いクセに一箇所間違ってました。
下から3行目 iter_back ではなく iter_prev でした。
とりあえず逝ってきます。
0914デフォルトの名無しさん
2005/06/06(月) 20:43:59あと、>>901にコンパイルさえできなかったって
書いてあるけど、コピペしたら
普通に動いたよん。
0915デフォルトの名無しさん
2005/06/06(月) 20:45:20百害あって一理無しでまったく意味がない
scanf()で戻り値チェックしないのはfopen()の戻り値をチェックしないのと
同じだ
0916デフォルトの名無しさん
2005/06/06(月) 20:51:41#include <stdio.h>
#include <string.h>
void swap(char *a, char *b)
{
nbsp;nbsp;nbsp;nbsp;char tmp;
nbsp;nbsp;nbsp;nbsp;tmp = *a, *a = *b, *b = tmp;
}
void random_shuffle(char *start, char *last)
{
nbsp;nbsp;nbsp;nbsp;char *next = start;
nbsp;nbsp;nbsp;nbsp;size_t index;
nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;for (index = 2; ++next != last; ++index)
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;swap(next, first + (rand() % index));
}
int main()
{
nbsp;nbsp;nbsp;nbsp;char buff[1024];
nbsp;nbsp;nbsp;nbsp;char *p;
nbsp;nbsp;nbsp;nbsp;while (fgets(buff, sizeof buff, stdin)) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;if (p = strchr(buff, '\n'))
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;*p = '\0';
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;random_shuffle(buff, buff + strlen(buff));
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;puts(buff);
nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;return 0;
}
0917916
2005/06/06(月) 20:52:29#include <stdio.h>
#include <string.h>
void swap(char *a, char *b)
{
char tmp;
tmp = *a, *a = *b, *b = tmp;
}
void random_shuffle(char *start, char *last)
{
char *next = start;
size_t index;
for (index = 2; ++next != last; ++index)
swap(next, first + (rand() % index));
}
int main()
{
char buff[1024];
char *p;
while (fgets(buff, sizeof buff, stdin)) {
if (p = strchr(buff, '\n'))
*p = '\0';
random_shuffle(buff, buff + strlen(buff));
puts(buff);
}
return 0;
}
0918デフォルトの名無しさん
2005/06/06(月) 20:52:56どう反応しようか…
つ
0920デフォルトの名無しさん
2005/06/06(月) 21:48:37[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
アラビア数字(1,2,3,4・・・)を入力すると、それに対応したローマ数字(�T,�U,�V,�W,・・・)を返すプログラムを作成せよ。
なお、配列を使って表現すること。
数字は10まで表現できればよい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:06月17日まで
[5] その他の制限:問題にも書きましたが、配列を必ず使わないと駄目だそうです。
よろしくお願いします。
0921デフォルトの名無しさん
2005/06/06(月) 22:03:24int main(void) {
static const char *Rome[] = {"�T", "�U", "�V", "�W", "�X", "�Y", "�Z", "�[", "�\"};
char buf[16];
if (fgets(buf, sizeof buf, stdin)) {
int n = atoi(buf) - 1;
if (0 <= n && n < 10) {
puts(Rome[n]);
return EXIT_SUCCESS;
}
}
fputs("エラー:1〜10の数として認識できなかった。\n", stderr);
return EXIT_FAILURE;
}
0922デフォルトの名無しさん
2005/06/06(月) 22:07:36ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/508.txt
かぶっちまったけどclass化してみた。
サンプルは500で実行してるけど100に直して実行してみてくれ。
0923884
2005/06/06(月) 22:14:06レス禿げしく感謝!!
#include<time.h>
が落ちていましたが、ちゃんと出力されています!�dクス
0924デフォルトの名無しさん
2005/06/06(月) 22:14:20[2]問題文(含コード&リンク):
1main関数およびkeyequal, keyltを実装して3.5節(次レスに書きます)で示した二分探索木のプログラムを完成させ、データの挿入・探索が行えることを確認せよ。
2格納済みのデータをkeyの順に一覧表示する関数を実装せよ。
3keyを指定して、二分探索木からデータを削除する関数を実装せよ。
4課題1,2,3のプログラムを、ローマ字表記された氏名をkeyとすることができるように変更せよ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):cc
[3.3] 言語:C
[4] 期限:06月8日の午後2時まで
よろしくお願いしますm(__)m。
0925924
2005/06/06(月) 22:18:48typedef int KEY;
typedef struct node {
KEY data;
struct node *left, *right;
} NODE;
NODE *root=NULL;
0926924
2005/06/06(月) 22:19:25typedef int KEY;
typedef struct node {
KEY data;
struct node *left, *right;
} NODE;
NODE *root=NULL;
0927924
2005/06/06(月) 22:19:56return NULL;
else if (keylt(key, (*p)->data))
p =&(*p)->left;
else
p = &(*p)->right;
}
if ((new=malloc(sizeof(NODE))) == NULL) {
printf("Out of memory!\n");
exit(0);
}
new->left = NULL;
new->right = NULL;
new->data = key;
*p = new;
return new;
}
0929828
2005/06/06(月) 22:56:24>>830
fprintfについての知識があいまいなため、
詳細を勉強し実装検討をしてみます。
>>850
今回の実行環境はWindowsですが、
将来的にはマイコンに移植したいと考えています。
OSは未搭載の予定ですが、ファイルアクセス(open,read,write etc)に関しては
実装済み(パクリもの)となっているのでfprintfでの実装を検討してみます。
>>846
サンプルコードどうもです。
実装時の参考とさせていただきます。
0930デフォルトの名無しさん
2005/06/06(月) 23:17:11[2] 問題文(含コード&リンク):1000以下の整数2数を入力させ、その和を出力するプログラムを作りなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):Visual C++
[3.3] 言語:C
[4] 期限:2005/6/10まで
以下までは組まれているのですが、ここから分かりません…お願いします。
#include <stdio.h>
int i_input();//1:integer 0:string
int char2int(char []);
main(){
char s[80];
printf("%d\n",i_input(s));
}
int i_input(char a[]){
int i;
printf("1000以下の整数を入力してください。\n");
gets(a);
i=0;
while(a[i]){
if(!(a{i]>='0' && a[i]<='9')) return 0;
i++;
}
return 1;
}
0931デフォルトの名無しさん
2005/06/06(月) 23:46:34a[i]だよな?
0932sage
2005/06/06(月) 23:51:47#include <stdio.h>
int main()
{
int m, n;
if (scanf("%d %d", &m, &n) != 2 || m > 1000 || n > 1000) {
fprintf(stderr, "1000以下の2数を入力してください\n");
return 1;
}
printf("%d\n", m + n);
return 0;
}
0933デフォルトの名無しさん
2005/06/07(火) 00:01:16[2] 問題文(含コード&リンク): 「コマンドラインから指定された文字列を使い、何か応答(出力)するプログラムを作れ。」
[3] 環境
[3.1] OS:unix
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年06月10日16:30まで
課題の意味がわかりません。「コマンドラインから指定」???
ランダムで表示が変わるおみくじとか作れば良いのかな?違います?
0934デフォルトの名無しさん
2005/06/07(火) 00:05:47#include <stdio.h>
int main(int argc, char *argv[]){
if(argc > 1){
printf("%sなんて言う人絶対狂ってますよ!\n", argv[1]);
}
return 0;
}
0935デフォルトの名無しさん
2005/06/07(火) 00:08:22ああ〜なんかそういうの見たことありますわ、サンクス。
じっくり調べてやってみます。
見当違いのレポートを出さずにすんで良かった。
0936デフォルトの名無しさん
2005/06/07(火) 02:04:01お願いします。
0937デフォルトの名無しさん
2005/06/07(火) 02:37:42お前さんがどのプログラムを有名と言っているのかは知らんが、
俺の知っている数当てゲームはコレ
#include<stdio.h>
main(){
int d, x;
unsigned int seed;
printf("number hitting game\n");
printf("Input an integer to seed = ");
scanf("%d",&seed);
srand(seed);
x = rand();
x %= 10000;
do{
printf("Hit my number(0-9999) = ");
scanf("%d", &d);
if(x > d) printf("greater than %d\n", d);
else if(x < d) printf("less than %d\n", d);
}while(x != d);
printf("Congratulations !\n");
}
0938デフォルトの名無しさん
2005/06/07(火) 03:01:56#include <stdio.h>
int i,p,v,c,n,z,a[10];long time(long *);void srand(unsigned);void main(void){
for(srand(time(NULL)),i=0;i<10;)a[i++]=-1;for(a[z=p=rand()%9+1]=0,i=1;i<=3;)if
(a[p=rand()%10]<0){a[p]=i++;z=z*10+p;}for(c=0;c<10;){printf("[%2d] >> ",++c);
scanf("%d",&n);for(v=0,i=4;i;n/=10)v+=(a[p=n%10]==--i)?10:(a[p]>=0);if(v==40)
break;printf("%14c## %2dH %2dB\n",' ',v/10,v%10);}printf("\n <<%d>>\n",z);}
0939デフォルトの名無しさん
2005/06/07(火) 03:02:19俺も何が有名かは知らんが、「数当て」でなく「数字当て」であることを考慮すると
# include <stdio.h>
# include <stdlib.h>
int main(void)
{
int digits[4];
int i;
srand((unsigned)time(0));
for(i = 0; i < 4; i++)
digits[i] = (10.0 * rand() - 1) / RAND_MAX;
while(1)
{
int abs_sum = 0;
puts("guess four numbers");
for(i = 0; i < 4; i++)
{
int input;
scanf("%1d", &input);
abs_sum += abs(input - digits[i]);
}
if(abs_sum == 0)
break;
printf("Sum of absolute difference is %d.\n", abs_sum);
}
puts("Excellent!");
return 0;
}
0940デフォルトの名無しさん
2005/06/07(火) 03:07:44[2] 問題文(含コード&リンク): 2つの自然数a,bを読み込み、1から100までの整数のうちでaで割り切れ
かつbで割り切れない整数をすべて求めるプログラムを作れ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン): cc
[3.3] 言語:C
[4] 期限:2005年06月14日12:00まで
よろしくお願いしますm(__)m
0941894
2005/06/07(火) 03:39:01遅れてすいません。
ありがとうございました。
0942デフォルトの名無しさん
2005/06/07(火) 03:46:35int main(void)
{
int a, b, i;
printf("a = "); scanf("%d", &a);
printf("b = "); scanf("%d", &b);
for (i = 1; i <= 100; i++)
if ( i % a == 0 && i % b != 0)
printf("%d ", i);
return 0;
}
0943デフォルトの名無しさん
2005/06/07(火) 03:49:48#include <stdio.h>
int main(void) {
int a,b,st=1,ed=100,p;
printf("input a b ");
scanf("%d %d",&a,&b);
if(a==b || a<1 || b<2 || a%b==0){
/* 勘弁してくれ */
}else{
p=st/a*a;
if(p<st)p+=a;
while(p<=ed){
if(p%b) printf("%d ",p);
p+=a;
}
printf("\n");
}
return 0;
}
0944デフォルトの名無しさん
2005/06/07(火) 06:42:30if(num1*num2*num3==6&&(num1%3==num2%3-1||(num1==2&&num2==3))&&num1>0&&num2>0)
0946デフォルトの名無しさん
2005/06/07(火) 12:21:58[2] 問題文(含コード&リンク): クラスカルのアルゴリズムを用いて,最小全域木を求めるプログラムを作成せよ.
* プログラムは,標準入力からグラフデータを読み込み,最小全域木を出力する.
* グラフデータは,以下の形式で与えられる:3
(0,1):13
(0,2):8
(1,2):11
* プログラムの動作例を以下に示す(上記グラフのデータファイルを graph.txt とする).
% ./kruskal < graph.txt
Min spanning tree:
(5,2) (4,0) (2,1) (4,3) (1,0)
[3] 環境
[3.1] OS:Linux
[3.2] 言語:C
[4] 期限:2005年06月10日12:00まで
[5]プログラムの雛形は以下です。「がんばって作る」のところをお願いします
0947デフォルトの名無しさん
2005/06/07(火) 12:27:10#include <stdlib.h>
// グラフを表す構造体
typedef struct {
int numNodes; // 節の数
int numEdges; // 枝の数
char *matrix; // グラフの隣接行列表現
} GRAPH;
void loadGraph(GRAPH *graph);
void setEdge(GRAPH *graph, int x, int y, int len);
int getEdge(GRAPH *graph, int x, int y);
void destroyGraph(GRAPH *graph);
int main(int argc, char *argv[])
{
GRAPH graph;
loadGraph(&graph);
// がんばって作る
destroyGraph(&graph);
return 0;
}
0948デフォルトの名無しさん
2005/06/07(火) 12:27:52{
int x, y, len, numNodes, numEdges;
scanf("%d\n", &numNodes);
graph->numNodes = numNodes;
graph->matrix = (char *)calloc(numNodes * numNodes, sizeof(char)); // 隣接行列の確保
if (graph->matrix == NULL) {
fprintf(stderr, "%d: memory overflow!\n", __LINE__);
exit(1);
}
// 枝データの読み込み
numEdges = 0;
while (scanf("(%d,%d):%d\n", &x, &y, &len) != EOF) {
setEdge(graph, x, y, len);
numEdges++;
}
// 枝数の登録
graph->numEdges = numEdges;
}
0949デフォルトの名無しさん
2005/06/07(火) 12:28:05* グラフに枝 (x,y) を登録する
* 引数: graph - グラフ
* : x - 節1
* : y - 節2
* : len - 枝の長さ
*/
void setEdge(GRAPH *graph, int x, int y, int len)
{
*(graph->matrix + x * graph->numNodes + y) = (char)len;
*(graph->matrix + y * graph->numNodes + x) = (char)len;
}
int getEdge(GRAPH *graph, int x, int y)
{
return (int)*(graph->matrix + x * graph->numNodes + y);
}
void destroyGraph(GRAPH *graph)
{
free(graph->matrix);
}
0950デフォルトの名無しさん
2005/06/07(火) 12:55:17* グラフデータは,以下の形式で与えられる:
3
(0,1):13
(0,2):8
(1,2):11
* プログラムの動作例を以下に示す(上記グラフのデータファイルを graph.txt とする).
% ./kruskal < graph.txt
Min spanning tree:
(5,2) (4,0) (2,1) (4,3) (1,0)
3〜5 って何?
0951デフォルトの名無しさん
2005/06/07(火) 13:55:21int minX, minY, minCost;
int IndexX, IndexY, IndexCost;
printf( "Min spanning tree:\n" );
while ( graph.numEdges ) {
for ( minCost = 0, IndexX = 0; IndexX < graph.numNodes; IndexX++ ) for ( IndexY = IndexX + 1; IndexY < graph.numNodes; IndexY++ ) if ( ( IndexCost = getEdge( &graph, IndexY, IndexX ) ) > 0 && ( minCost == 0 || minCost > IndexCost ) ) {
minX = IndexX; minY = IndexY; minCost = IndexCost;
}
if ( !minCost ) break;
printf( "(%d,%d)", minX, minY ); setEdge( &graph, minX, minY, -1 ); graph.numEdges--;
for ( IndexX = 0; IndexX < graph.numNodes; IndexX++ ) {
if ( IndexX != minX && IndexX != minY ) {
if ( getEdge( &graph, IndexX, minX ) < 0 ) { setEdge( &graph, IndexX, minY, 0 ); graph.numEdges--; }
if ( getEdge( &graph, IndexX, minY ) < 0 ) { setEdge( &graph, IndexX, minX, 0 ); graph.numEdges--; }
}
}
}
printf( "\n" );
0952デフォルトの名無しさん
2005/06/07(火) 14:38:58#include <stdio.h>
int
main()
{
int a, b;
if (scanf("%d%d", &a, &b) == 2) {
int i = a, j = b;
while (i < 100) {
while (j < i)
j += b;
if (i < j)
printf("%d\n", i);
i += a;
}
}
return 0;
}
0953デフォルトの名無しさん
2005/06/07(火) 14:48:42[2]数字を10個入力し、配列に格納する。隣同士を入れ換えた後
その配列を出力する。ただし、用意する配列は一つとする。
入力を格納した配列内部で実際に隣同士を入れ換えること。
出力時に入れ換えるのは不可とする。
[3]環境
[3.1]windows98
[3.2]?
[3.3]C++
[4]6月8日午前10時まで
[5]for,while,if,配列くらいしかまだ習っていません。
途中までしかできませんでした。
どうかお願いします。
0954デフォルトの名無しさん
2005/06/07(火) 14:48:47し,キーボードやマウスの入力によって,どちらかの図形の羽根の角度や長さを簡単に変
更できるようにしておくこと.ウィンドウの右下部分に自分の名前,名列番号を表示させ
ること.(20点満点.マウスやキーボードによる変更ができない場合は10点満点)
上の条件でレポートが出ちゃいました。このレポートが出来る方いましたら、どうかよろしくお願いします。。。
挑戦してみてください。
0955デフォルトの名無しさん
2005/06/07(火) 15:07:41>隣同士を入れ換えた後
って
1 2 3 4 5 6 7 8 9 10
の順で入力したら
2 1 4 3 6 5 8 7 10 9
って入れ替えるの?
0956デフォルトの名無しさん
2005/06/07(火) 15:17:22まずキーボードの入力で線分や文字列が描けるサンプルを>>1のあぷろだに上げてほしい。
あと環境がわからないので>>1のテンプレにそって書いてほしい。
何でもいいなら作れるかもしれないけど
採点者がそれを認めるかどうかは全くわからないので
0957デフォルトの名無しさん
2005/06/07(火) 15:20:40どっちがいいと思う?
1.
int chkchar(const int s)
{
if (('0' <= s && s <= '9') || ('A' <= s && s <= 'Z') || ('a' <= s && s <= 'z'))
return 1 ;
else
return 0 ;
}
2.
int chkchar(const int s)
{
if (('0' <= s && s <= '9') || ('A' <= s && s <= 'Z') || ('a' <= s && s <= 'z'))
return 1 ;
return 0 ;
}
0958953
2005/06/07(火) 15:20:43そんな感じです!!
0959デフォルトの名無しさん
2005/06/07(火) 15:22:19つ isalnum()
0960957
2005/06/07(火) 15:24:430961デフォルトの名無しさん
2005/06/07(火) 15:30:25オレならこうする。
後から条件の追加も楽だしね。
int chkchar(const int s)
{
if ( '0' <= s && s <= '9' ) return 1;
if ( 'A' <= s && s <= 'Z' ) return 1;
if ( 'a' <= s && s <= 'z' ) return 1;
return 0 ;
}
0962デフォルトの名無しさん
2005/06/07(火) 15:30:59int chkchar(const int s){
char a[]="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i=0;
while(a[i])
if(a[i++]==s) return 1;
return 0;
}
ASCIIでなくても何とかなる。EBCDICの呪(ry
0963デフォルトの名無しさん
2005/06/07(火) 15:40:12[2] 問題文(含コード&リンク): 二人の名前(平仮名、片仮名、漢字、アルファベット)を入力し、
相性を%(0〜100)で表示するプログラムを作りなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):Visual C++
[3.3] 言語:C
[4] 期限:2005年6月9日まで
よろしくお願いします
0964デフォルトの名無しさん
2005/06/07(火) 15:43:47相性の計算方法は?
0965デフォルトの名無しさん
2005/06/07(火) 15:44:52#define MYCTYPE_LOWER0x0001
#define MYCTYPE_UPPER0x0002
#define MYCTYPE_ALPHA(MYCTYPE_LOWER|MYCTYPE_UPPER)
#define MYCTYPE_DIGIT0x0004
#define MYCTYPE_XDIGIT0x0008
unsigned short MYctype_[0x100];
#define MYislower(x) ((MYctype_[(x)&0xff])&MYCTYPE_LOWER)
#define MYisupper(x) ((MYctype_[(x)&0xff])&MYCTYPE_UPPER)
#define MYisdigit(x) ((MYctype_[(x)&0xff])&MYCTYPE_DIGIT)
#define MYisalnum(x) ((MYctype_[(x)&0xff])&(MYCTYPE_DIGIT|MYCTYPE_ALPHA))
#define MYisxdigit(x) ((MYctype_[(x)&0xff])&MYCTYPE_XDIGIT)
static
void
setup_sub(char* p, unsigned short b)
{
while (*p) {
MYctype_[*p] |= b;
p++;
}
}
void
setup()
{
setup_sub("0123456789", MYCTYPE_DIGIT);
setup_sub("abcdefghijklmnopqrstuvwxyz", MYCTYPE_LOWER);
setup_sub("ABCDEFGHIJKLMNOPQRSTUVWXYZ", MYCTYPE_UPPER);
setup_sub("0123456789abcdefABCDEF", MYCTYPE_XDIGIT);
}
0966デフォルトの名無しさん
2005/06/07(火) 15:47:51101で割るとかなんとか、そういうことを聞いたような…詳しくはちょっと分からなくて
すみません吊ってきますorz
0967デフォルトの名無しさん
2005/06/07(火) 15:58:12[2] 問題文:
24ビットと8ビットのbmpファイルがある。
このどちらを読み込んでも元画像をモノクロ化したbmp画像を出力せよ。
なお、bmp画像以外のファイル、対応してない形式のbmp画像、
これらを読み込んだ時「〜という理由でファイルを生成できない」
といった内容のエラーメッセージを出力すること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:Visual C++
[3.3] 言語:C++
[4] 期限:2005年06月16日まで
[5] その他の制限:mallocを使用
これを落とすと留年してしまうのでどうかよろしくお願いします!
0968デフォルトの名無しさん
2005/06/07(火) 15:59:37#include <stdio.h>
int main(void) {
int a[10],i,tmp;
for(i=0;i<10;i++){
printf("input a[%d] ",i);
scanf("%d",&(a[i]));
}
for(i=0;i<5;i++){
tmp=a[2*i];a[2*i]=a[2*i+1];a[2*i+1]=tmp;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
0969デフォルトの名無しさん
2005/06/07(火) 16:00:520970デフォルトの名無しさん
2005/06/07(火) 17:19:06[2] 問題文: 羽根の角度や長さが異なる2つのミュラーリヤー図形を表示するWindowsプログラム.ただ
し,キーボードやマウスの入力によって,どちらかの図形の羽根の角度や長さを簡単に変
更できるようにしておくこと.ウィンドウの右下部分に自分の名前,名列番号を表示させ
ること.(20点満点.マウスやキーボードによる変更ができない場合は10点満点)
[3] 環境
[3.1] OS:windows2000
[3.2] コンパイラ:Visual C++
[3.3] 言語:C++
[4] 期限:2005年06月12日
0971デフォルトの名無しさん
2005/06/07(火) 17:37:48[2] 縦5横7の二次元配列を適当な整数で初期化し、縦5個の要素の総和を
横7の分だけ求め出力せよ。
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ:Visual C++
[3.3] 言語:C++
[4] 期限:2005年06月8日
どうかよろしくお願いします
0972デフォルトの名無しさん
2005/06/07(火) 18:17:09[2] RSSファイルはXMLで記述されているので、木構造で管理できる。
ダウンロードしたRSSを読み込んで、特定分野(社会、スポーツなど)の記事タイトルと配信時間を表示するプログラムを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ:cc
[3.3] 言語:C
[4] 期限:2005年06月8日 午後1時30分
[5] 木構造で作る
よろしくお願いします。
0973デフォルトの名無しさん
2005/06/07(火) 18:22:05using namespace std;
int main()
{
int array[5][7] = { {1,2,3,4,5,6,7},{1,2,3,4,5,6,7},{1,2,3,4,5,6,7},{1,2,3,4,5,6,7},{1,2,3,4,5,6,7} };
int ans = 0;
for (int i = 0; i < 5; i++){
for (int j = 0; j < 7; j++){
cout.width(3);
cout << array[i][j];
}
putchar('\n');
}
cout << "-----------------------\n";
for (int j = 0; j < 7; j++){
for (int i = 0; i < 5; i++){
ans += array[i][j];
}
cout.width(3);
cout << ans;
ans = 0;
}
return 0;
}
0974デフォルトの名無しさん
2005/06/07(火) 20:45:29[2] 以下の式に対応した、プログラムを作成せよ。
計算例:cal2 17 + 4 more * 43 more / 3.5
計算例:cal2 17 + 4
2項目以降も計算が続く場合は継続を示す単語"more"が入力されるものとする。
2項計算の場合はmoreは必要ない。
条件:
・文字列"more"の比較にstrcmp関数は使わない。
(それ以外の文字列の比較には使用可)
・比較に使う文字列"more"はグローバル定数で定義する。:const char〜
・入力項が"more"かどうかの判定は以下の関数で行う
関数名:chk_more
引数1:比較対象の文字列
戻り値:bool型 ture:"more"/flase:"more"以外
[3] 環境
[3.1] OS:WinXP
[3.2] コンパイラ:VC++
[3.3] 言語:C++
[4] 期限:2005年06月8日 午前7時
[5] ここまで完成しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/509.txt
しかし、注釈を書いた部分がおかしいみたいで動きません。
どのようにすればよいのかよろしくお願いします。
表示するメッセージは既に組み込み済みとなっています。
0975デフォルトの名無しさん
2005/06/07(火) 21:10:29using namespace std;
string g_more = "more";
bool chk_more(const string& s)
{
return s == g_more;
}
0976デフォルトの名無しさん
2005/06/07(火) 22:18:46ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/513.txt
変更点
・main関数内の式チェック部分
・関数chk_more全部
・関数code_not全部
他はいじってない…と思う
0978デフォルトの名無しさん
2005/06/07(火) 22:45:09[2] 問題文(含コード&リンク): 乗除、剰余演算は一切使わず、代わりにシフト演算とビット列演算のみを用いて、
入力された10進数の値を、2進数と16進数にそれぞれ変換するプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows/Linux/等々 WindowsXP
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 6月8日まで
よろしくお願いします。
0980デフォルトの名無しさん
2005/06/08(水) 00:05:27ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/514.txt
0981980
2005/06/08(水) 00:06:59忘れた
0982デフォルトの名無しさん
2005/06/08(水) 00:08:44#include <stdio.h>
int main () {
unsigned u;
int i, n;
printf("10進数を入力しろ: ");
scanf("%u", &u);
for (n = 1; n <= 4; n += 3) {
printf("%d進数: ", 1 << n);
for (i = sizeof u * 8 - n; i >= 0; i -= n)
putchar("0123456789abcdef"[(u >> i) & ((1 << n) - 1)]);
putchar('\n');
}
return 0;
}
0983978
2005/06/08(水) 00:11:31どうもありがとうございました。
0984デフォルトの名無しさん
2005/06/08(水) 02:13:32列)、C=A+B(AとBの行列和)、C=A*B(AとBの行列積)の計算結果を表示するプ
ログラムを作成し、実行しなさい。ただし、配列の要素へのアクセスにはポイン
タを使用し、また、各要素は100以下であるものとします。
入出力例)
Matrix A
Please input three elements in row#1:285
Please input three elements in row#2:937
Please input three elements in row#3.678
0985デフォルトの名無しさん
2005/06/08(水) 02:18:19A =
(a, b, c)
(d, e, f)
(g, h, i)
の転置って
A^t =
(a, d, g)
(b, e, h)
(c, f, i)
でおk?
0986デフォルトの名無しさん
2005/06/08(水) 02:30:110987デフォルトの名無しさん
2005/06/08(水) 02:37:59http://pc8.2ch.net/test/read.cgi/tech/1118165596/
0988デフォルトの名無しさん
2005/06/08(水) 02:51:01Please input three elements in row#1:2185
という入力はどう解釈するの?
21, 8, 5
or
2, 18, 5
or
2, 1, 85
099073
2005/06/08(水) 11:45:54[2] 問題文(含コード&リンク):n×nの大きさの実行例A、Bをキーボードより読み込んで
行列の積C=A×Bを計算し、その結果を画面に出力するプロ
グラムを作成しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年6月14日18:30まで
[5] その他の制限:2次元配列とfor分は使うそうです。
あと、定数nは記号定数宣言のconstを使って
10に定義するそうです。
困っています。作成してくださったらうれしいです。ちゃんと後で
すべての意味を勉強します!
0991デフォルトの名無しさん
2005/06/08(水) 12:15:11http://pc8.2ch.net/test/read.cgi/tech/1118165596/
0992デフォルトの名無しさん
2005/06/08(水) 17:08:1710進数の値が入力された時点で、それは2進数でもあり16進数でもあるわけだが。
0993デフォルトの名無しさん
2005/06/08(水) 19:54:26私のマイゾウキン!
どこー!?
0994デフォルトの名無しさん
2005/06/08(水) 19:55:130995デフォルトの名無しさん
2005/06/08(水) 19:56:480996デフォルトの名無しさん
2005/06/08(水) 19:58:16私のマイゾウキン。
出てくる。
あぁ。
でてくるわぁ。
0997デフォルトの名無しさん
2005/06/08(水) 19:59:520998デフォルトの名無しさん
2005/06/08(水) 20:01:450999デフォルトの名無しさん
2005/06/08(水) 20:04:04ここで倒れるわけには・・・。
1000デフォルトの名無しさん
2005/06/08(水) 20:05:4010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。