トップページ⇒tech
992コメント325KB

ぼるじょあがC/C++の宿題を片づけますYO! 21代目

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001ぼるじょあ ◆yBEncckFOU NGNG
(・3・)アルェー 最近Javaに手を出したC++房のぼるじょあですYO!
わからない宿題を片づけますYO!

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、エラーなどは適切に書きましょう
 全文を書いてしまうか、分かりやすくまとめましょう。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10】
0002デフォルトの名無しさんNGNG
20代目: http://pc2.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc2.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc2.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc2.2ch.net/test/read.cgi/tech/1070469896/
16代目: http://pc2.2ch.net/test/read.cgi/tech/1069837000/
15代目: http://pc2.2ch.net/test/read.cgi/tech/1068950713/
14代目: http://pc2.2ch.net/test/read.cgi/tech/1067175933/
13代目: http://pc2.2ch.net/test/read.cgi/tech/1064541405/
12代目: http://pc2.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc2.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc2.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc2.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc2.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc2.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc2.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc2.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc2.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc2.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
0003デフォルトの名無しさんNGNG
>>1
モツ
0004デフォルトの名無しさんNGNG
腹に
>>>1
>モツ
0005ぼるじょあ ◆8F06CsBYBE NGNG
(・3・) エェー ぼるじょあ ◆yBEncckFOUですYO!

ぼるじょあ◆yBEncckFOUは共同体で連続体で群生体だから
無限の知識と無尽蔵の体力を持ってるんだYO!24時間、いつでも質問オッケー♪

(・3・) エェー こっちが嫌になるほど質問しろYO!

名前欄に「ぼるじょあ#ぶるじょあ」って書けば、キミも今日から ぼるじょあ◆yBEncckFOU だYO!
名前欄に「ぼるじょあ#セV8cLFセz」って書けば、キミも今日から ぼるじょあ◆yEbBEcuFOU だYO!
*ぼるじょあ◆yBEncckFOUはコテハンじゃないYO!
*ぼるじょあ◆yBEncckFOUはいつだって全力投球ダジェ!!
*ぼるじょあ◆yBEncckFOUは共同体で連続体で群生体だYO!
*ぼるじょあ◆yBEncckFOUはみんななれるからイイぼるじょあも悪いぼるじょあもいるYO!
*ぼるじょあ◆yBEncckFOUはエムエクースとニーはよくわからないYO!
*ぼるじょあ◆yBEncckFOUは2ちゃんねるの人気者だYO!
*ぼるじょあ◆yBEncckFOUはちょっと基地外はいっているYO!
0006ぼるじょあ ◆yBEncckFOU NGNG
トリップミスった・・・
0007デフォルトの名無しさんNGNG
しかし、一体いつの間にこのスレはぼるじょあ専用スレに
なったんだ?
0008ぼるじょあ ◆yBEncckFOU NGNG
>>7
( ・3・) エェー すべてがぼるじょあになるYO
0009デフォルトの名無しさんNGNG
8+7=15って少なくね?



6+9=15とかは普通じゃん?
5+10=15とか4+11=15とかそのまんまじゃん?
7+8=15って少なくね?おかしくね?
7って結構でかくね?8なんて更にでかいじゃん。
7でさえでかいのに8って更にでかいじゃん?
確かに15って凄いけどこの二人が力を合わせたら16ぐらい行きそうな気がしね?
二人とも強豪なんだからもっといってもよさそうじゃね?なんかおかしくね?
どう考えてもおかしくね?
7ってかなり強くね?世間は7を甘くみすぎじゃね?
8なんて更に強いじゃん?ドラゴンボールで言えば7はピッコロじゃん?
8は悟空じゃん?15はラディッツじゃないね。ラディッツは16ぐらいだね。
悟飯の一撃分1引いて15として勝ったのどっちよ?
ピッコロなんて戦い終わった後全然平気そうだったじゃん?
って事は7+8はもっといくだろ。絶対おかしくね?15ってありえなくね?
なんか変じゃね?これ俺達の知らない所でなんか起こってるっつー知らせじゃね?
0010デフォルトの名無しさんNGNG
(´Д`υ)
0011デフォルトの名無しさんNGNG
>>9
7は孤独な数字ですからね。
その事実を使って
1〜9を一度ずつ用い二つの積を
つくったとき(例:1*4*5*9 と 2*3*6*7*8)
同じ値をもつものはできないということが容易に証明できる。
そう、片方は7の倍数であり、もう一方は7の倍数ではない。
よって、題意は示される。

ってミステリー小説にありましたよ。。。
0012デフォルトの名無しさんNGNG
>>11
それは別に5でもいいんじゃないか?
0013デフォルトの名無しさんNGNG
7は孤独な数字ですからね。
その事実を使って
1〜10を一度ずつ用い二つの積を
つくったとき(例:1*4*5*9 と 2*3*6*7*8*10)
同じ値をもつものはできないということが容易に証明できる。
そう、片方は7の倍数であり、もう一方は7の倍数ではない。
よって、題意は示される。

ってミステリー小説にありましたよ。。。
0014デフォルトの名無しさんNGNG
ネタの定期便です。
任意の数を引数に取り、ローマ数字の文字列を返す関数を作り給へ。
0015デフォルトの名無しさんNGNG
>>14
自分で作れ、3分でできるだろヴぁか
0016デフォルトの名無しさんNGNG
1兆ってローマ数字でどう書くの?
0017デフォルトの名無しさんNGNG
手元の辞書には1000までしか載ってないぽ
これでは3999までしか表せないぽ
0018デフォルトの名無しさんNGNG
>>17
なんだよその、ぽってのはよ あ?
ぬっ殺すぞ?
0019デフォルトの名無しさんNGNG
>>14
予想外に手間取ったぜ。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=144

良質なネタ提供に感謝する。
0020デフォルトの名無しさんNGNG
>>8-13
お前ら、四季たんにはぁはぁしすぎですよ?
0021デフォルトの名無しさんNGNG
四季たん(゚Д゚)ハァ?(゚Д゚)ハァ?
0022デフォルトの名無しさんNGNG
hairetu[10]{4,2,3,5,1,6,4,7,10,9}
を、大きい順に並び替えて 10,9,8,7,6,5,4,3,2,1
となるようにしたいんですが、for文やif文などの初心者でもわかるやり方で
どうなるか教えてください。別の変数を作ってそこに入れて入れ替える感じかとは思うんですが…。
0023デフォルトの名無しさんNGNG


#include <stdio.h>
int main(void){
int i, x, y, temp;
int hairetu[10] = {4,2,3,5,1,6,4,7,10,9};
for(i = 0; i < 10; i++){
for(x = 0, y = 1; y < 10 - i; x++, y++){
if(hairetu[x] > hairetu[y]){
temp = hairetu[x];
hairetu[x] = hairetu[y];
hairetu[y] = temp;
}
}
}
for(i = 0; i < 10; i++){
printf("%d ", hairetu[i]);
}
}
0024デフォルトの名無しさんNGNG
お〜!わかりやすい!
ありがとうございます。そんな見やすいの早く書けるようになりたいです
0025デフォルトの名無しさんNGNG
//誰でも考え付きそうな単純選択法(遅い)。
#include<stdio.h>
int main(){
int hairetu[10]={4,2,3,5,1,6,4,7,10,9};
int max_index,temp,k,i,j;
for(i=0;i<10;i++){
max_index = i;
for(j=i;j<10;j++){
if(hairetu[j]>hairetu[max_index]){
max_index = j;
}
}
temp = hairetu[i];
hairetu[i] = hairetu[max_index];
hairetu[max_index] = temp;
}
for(k=0;k<10;k++){
printf("hairetu[%d]=%d\n",k,hairetu[k]);
}
return 0;
}
0026デフォルトの名無しさんNGNG
>>25もありがとうございました。
これぐらいすぐできるように頑張らないとだ。
0027デフォルトの名無しさんNGNG
>>22 って前スレの最後の方のソートのネタだよな?
0028デフォルトの名無しさんNGNG
単純なソートは、挿入ソートを覚えておこう。
ちょっと複雑なときはqsortを使うか、シェルソートで。
0029デフォルトの名無しさんNGNG
安定なソートはどれのことをいうの?
0030デフォルトの名無しさんNGNG
私が挿入ソートを再開発したのはマージャンソフトを改変しているときだった。
オリジナルの単純選択法の遅さを解決できたのみならず、ソートする過程を
そのままパイの移動の絵にできて大変楽しんだものだ。
0031デフォルトの名無しさんNGNG
ソートについて覚えておくべきなのは
std::sort()
std::stable_sort()
std::partial_sort()
std::nth_element()
std::partition()
std::stable_partition()
だな。自分で書く必要は「ない」。
0032デフォルトの名無しさんNGNG
>>31
学生さんの宿題にそれは通じないだろw
0033デフォルトの名無しさんNGNG
>>29
std::stable_sort()
(普通マージソートで実装されている)
0034デフォルトの名無しさんNGNG
>>>30
?
0035デフォルトの名無しさんNGNG
>>34
おやじの昔語りだと思われ。
0036デフォルトの名無しさんNGNG
ひーぷそーとぜんぜんわからん
0037デフォルトの名無しさんNGNG
>>36
コードは説明より物を言う。手持ちの処理系のC++標準algorithmヘッダの
std::sort_heap()の実装を眺めてみてはどうだろう。
0038デフォルトの名無しさんNGNG
横レスでスマンですが、>>23の i は何を表してるんですか?
どの部分だかわからない
0039デフォルトの名無しさんNGNG
>>38
探索するyの値の最大値
だんだんと狭い範囲を処理するようにする
0040デフォルトの名無しさんNGNG
qsort()はクイックソートで実装されている保証は規格にないんだね。知らなかったよ。
0041デフォルトの名無しさんNGNG
>>40
要素数が少ないときはバブルソート、多いときは基本的にはクイックソート、
クイックソートが苦手な並びに対してヒープソートしてます、みたいな実装
の話を聞いたことがあるなぁ。
0042デフォルトの名無しさんNGNG
/*配列の全要素を逆順に並べ替える
*/

#include <stdio.h>
int main(void)
{
int i;
int vx[5];
for(i=;i<5;i++){
printf("vx[%d]:",i);
scanf("%d",&vx[i]);
}
for(i=0;i<2;i++){
int temp = vx[i];
vx[i]=vx[4-i];
vx[4-i] =temp;
}
for(i=0;i<5;i++)
printf("vx[%d]=%d\n",i,vx[i]);
return(0);
}
0043デフォルトの名無しさんNGNG
↑このプログラムをコンパイル使用とすると
エラーが多発しまつ。
for(i=;i<5;i++)
ここの文でエラーがでるYOと怒られます。
バグが分かりません
ヒントでいいので教えてください。
0044デフォルトの名無しさんNGNG
>>43
for(i=;i<5;i++) ←この行に構文の間違いがあるよ
ってか、普通気付かんか?
0045は ◆cplnFO9T0I NGNG
ネタ便でーす。
今度のネタは、
UNIXタイムと指定時間の相互変換をするのにはどのようにするか?
です。
0046デフォルトの名無しさんNGNG
ぼるじょあって誰????
0047デフォルトの名無しさんNGNG
>>45
ネタといいつつ本当は宿題なんではと思ったりしつつも、
宿題の少ないこの時期に提供ごくろうさん。

UNIXタイムをテキストにするにはctimeとかlocaltime+strftimeで片付くだろうけど、
逆はパーザが面倒っぽいね。
フォーマットを ISO 8601 の制限つきとかに固定した方が、より宿題っぽくなる。
あとは、うるう秒をどれだけまじめにやるか。
0048デフォルトの名無しさんNGNG
>>44
回答サンクス
自分で見直してて
ちょっとあきれてしまいました。
0049デフォルトの名無しさんNGNG
age
005050NGNG
STLなんですが
構造体の要素が特定の値であるものを検索する方法を教えてください
下記のdefの値がたとえば100のものを探したい場合はどのように記述すればよいのでしょうか。

struct STLLIST
{
int abc;
int def;
};
vector<STLLIST> StlList;
find(StlList.begin(),StlList.end(),StlList.def==100); <---もしろんエラー
STLの勉強をはじめてまだ1日です。
しょうもない質問だとは思うのですが、よろしくおながいします。
0051デフォルトの名無しさんNGNG
>>50
find_if
0052デフォルトの名無しさんNGNG
>>50
ファンクタ(関数オブジェクト)を使ってfind_if
あとは自分で調べるよし。勉強だ。
005350NGNG
find_if(StlList.begin(),StlList.end(),StlList.def==100);
と安易に記述してもエラーですた。
vector<int>の例を発見したのですが
構造体の例がありません(涙
vector<int>なら
find_if(StlList.begin(),StlList.end(),bind1st(equal_to<int>(),100));
と書けばよさそうなことはわかりました。
でも構造体での指定の仕方がわかりません。
構造体の特定の要素について指定するにはどうすればよいのでしょうか。
0054デフォルトの名無しさんNGNG
>>53
>>52
0055デフォルトの名無しさんNGNG
>>53
ttp://www.wakhok.ac.jp/~sumi/stl/
ここでも参考にするといい。
あと、すれ違い。
005650NGNG
だれか親切な人教えてください。
0057デフォルトの名無しさんNGNG
>>53
>構造体の例がありません(涙
「でもクラスの例はあります」ってことはないよね?
0058デフォルトの名無しさんNGNG
>>50
operator==を定義するとか。
0059デフォルトの名無しさんNGNG
>>50
だからファンクタ使えといってるだろヴォケ
あとはスレ違いだから自分で調べろ
0060デフォルトの名無しさんNGNG
一番しりとりを長く続けられるプログラムのソースキボン
0061デフォルトの名無しさんNGNG
>>56
C++スレに来い。
0062デフォルトの名無しさんNGNG
C++ で C の system(3) 見たいなことをするにはどうするのでしょう。

環境は gcc-c++-3.2 です。
0063デフォルトの名無しさんNGNG
>>62
#include <cstdlib>
std::system("cmd");
006462NGNG
サンキュです。
006550NGNG
要するにだれもわからないということなのですね。
0066デフォルトの名無しさんNGNG
>>65
( ´,_ゝ`)プッ
0067Addicted to C++ ◆nrBjarne.g NGNG
>>50
struct pred
{
bool operator()(const STLLIST& x) const
{
return x.def == 100;
}
};
とか構造体を定義しておいて(これをファンクタという)、
std::vector<STLLIST> StlList;
std::vector<STLLIST>::iterator it = std::find_if(StlList.begin(), StlList.end(), pred());
とする。
STLにこだわらないならboost::lambda使って
std::vector<STLLIST>::iterator it = std::find_if(StlList.begin(), StlList.end(), boost::bind(&STLLIST::def, _1) == 100);
みたいに書ける。
こういう話題は初心者歓迎C/C++室当たりかな。
http://pc2.2ch.net/test/r.i/tech/1077102238/
携帯からなんでtypoとかあったらスマン。
0068Addicted to C++ ◆nrBjarne.g NGNG
>>50
struct pred
{
bool operator()(const STLLIST& x) const
{
return x.def == 100;
}
};
とか構造体を定義しておいて(これをファンクタという)、
std::vector<STLLIST> StlList;
std::vector<STLLIST>::iterator it = std::find_if(StlList.begin(), StlList.end(), pred());
とする。
STLにこだわらないならboost::lambda使って
std::vector<STLLIST>::iterator it = std::find_if(StlList.begin(), StlList.end(), boost::bind(&STLLIST::def, _1) == 100);
みたいに書ける。
こういう話題は初心者歓迎C/C++室当たりかな。
http://pc2.2ch.net/test/r.i/tech/1077102238/
携帯からなんでtypoとかあったらスマン。
0069Addicted to C++ ◆nrBjarne.g NGNG
すまん、手元が狂った。
スレ汚しスマン
0070デフォルトの名無しさんNGNG
>>60
#include <iostream>
int main()
{
for (;;) std::cout << "くじゃく" << std::endl;
}
0071デフォルトの名無しさんNGNG
>>65
だからC++スレに来いって。ネタがなくて皆ひもじい思いを
してるから。
0072デフォルトの名無しさんNGNG
#include<stdio.h>
main(){
printf("abcde\n");
}

こーゆーソースをパソコンで実行できるフリーツール
は「phoebe」ってやつが一番お勧めですか?
0073デフォルトの名無しさんNGNG
>>72
ttp://www.mhlw.go.jp/

ここのホームページにお勧めのがあるよ
0074デフォルトの名無しさんNGNG
>>72
phoebeなんて聞いたことないな(w
0075CプログラミングNGNG
秒数を入力すると、時分秒で出力されるプログラムお願いします!
例)3920秒を入力すると、1時間5分20秒とでる。



0076CプログラミングNGNG
1、長方形の面積を計算して返す関数をお願いします。
関数は、長方形の縦と幅のパラメータそれぞれ一つを含み、整数を使う。

2、長方形の縦と幅を整数で入力すると、面積と周囲がでるプログラムをかいて
ください。(1の関数を使ってお願いします。)

例)縦5、幅4、を入力すると、面積20と周囲18が出る。

0077デフォルトの名無しさんNGNG
>>76
1.
int chouhoukeinomenseki(int tate, int haba) { return tate * haba); }

2.
void chouhoukeinomensekitoshuui(int tate, int haba)
{ printf("menseki%dshuui%d",chouhoukeinomenseki(tate, haba),2*(tate+haba)); }
007872NGNG
>>73
厚生労働省ってところになんかあるんですか?
自分はphoebeと、LSI C-86 Ver.3.30c 試食版
ってコンパイラで、一応プログラム実行できてるのですが・・。
0079CプログラミングNGNG
下のプログラムは、Fahrenheit(華氏)をCelsius(摂氏)に変換するというもの
なんですが、このプログラムを次のような構成でかきなおしてください。
Celsiusを計算する関数とその値を返す関数を別別にしてかく。
main()が、Fahrenheitで入力されて、関数を呼んで、関数によって返された値を出力する。

#include <stdio.h>
int main(void)
{ int fahrenheit, celsius;

printf("Enter a temperature in fahrenheit:");
scanf("%d", &fahrenheit);
celsius=5*(fahrenheit-32)/9;
printf("%d in Fahrenheit is %d in Celsius.\n", fahrenheit, celsius);
return 0;
}
0080デフォルトの名無しさんNGNG
>>78
なぜファイル名で言う。
C言語を始めよう!と言え。
あとコンパイラはBCCも入れたほうがいいかと。
0081CプログラミングNGNG
>>77
すいません、
#include <stdio.h>
void ここなんですか?
{ printf(".....", ここなんですか?(tate, haba
0082CプログラミングNGNG
>>77
すいません、全部書いてくれませんか・・?
初心者なので、あいまいでよくわからないで、うまくいきませんでした
008372NGNG
>>80
早レスサンクス!
phoebeっていうのが、このアプリの略称かなーと思ったので‥すみません
BCCっていうのも入れてみますね。
0084デフォルトの名無しさんNGNG
>>79
#include<stdio.h>
void Celsiuswokeisansuru(int *celsius, int fahrenheit){*celsius=5*(fahrenheit-32)/9;}
int sonoataiwokaesu(int fahrenheit){int celsius;Celsiuswokeisansuru(&celsius,fahrenheit);return celsius;}
int main(void)
{
int celsius,fahrenheit;
printf("Enter a temperature in fahrenheit:");
scanf("%d", &fahrenheit);
celsius=sonoataiwokaesu(fahrenheit);
printf("%d in Fahrenheit is %d in Celsius.\n", fahrenheit, celsius);
return 0;
}

0085デフォルトの名無しさんNGNG
>>82
#include<stdio.h>
int chouhoukeinomenseki(int tate, int haba){return tate*haba;}
void chouhoukeinomensekitoshuui(int tate, int haba)
{printf("menseki%dshuui%d",chouhoukeinomenseki(tate,haba),2*(tate+haba));}
int main(void){int tate,haba;printf("tate=");scanf("%d",&tate);printf("haba=");scanf("%d",&haba);
chouhoukeinomensekitoshuui(tate,haba);return 0;}
0086デフォルトの名無しさんNGNG
おまいらわざとやってるなw
0087CプログラミングNGNG
>>84>>85さん、素早いお返事どうもありがとうございます。
よければ、>>75もお願いできますか??
結構時間かけてやっても、なかなかうまくいかないんです。。
0088190NGNG
そんなんじゃプログラムできるようにならないよ。
自分でやる力をつけないと、分からないところは自分で調べる、これ基本。

スレ違いなのでsage
0089デフォルトの名無しさんNGNG
>>87
#include<stdio.h>
int main(void){int t;printf("秒数=");scanf("%d",&t);
printf("%d時間%d分%d秒",t/3600,(t%3600)/60,(t%3600)%60);
return 0;}
0090デフォルトの名無しさんNGNG
>>88
誤爆だし、一番上のスレッドでsageているし、もうさんざんですね。
0091デフォルトの名無しさんNGNG
>>87
#include<stdio.h>
int main(void){int t;printf("秒数=");scanf("%d",&t);
printf("%d時間%d分%d秒",t/3600,t%3600/60,t%3600%60);
return 0;}
0092190NGNG
>>90
アッハッハというしかないですね。

取り合えず脳内free()で開放してきます。
0093CプログラミングNGNG
>>91
素晴らしい!!!!
なんでそんなにすぐにできるんですか・???
私も>>91さんみたいになれるようにがんばります!!
ありがとうございました!
009491NGNG
>>93
> なんでそんなにすぐにできるんですか・???
89をコピペして無駄な括弧を消しただけだから。
0095CプログラミングNGNG
>>89さん≠>>91さん??
問題を解いてくれた皆さん有難うございます。
私も早く皆さんのようにプログラミングを極めたいです!
0096デフォルトの名無しさんNGNG
おいおいネタか?
極めたいと思うのならこんな問題自力で解いて見せてくれ
009789NGNG
>>93
>なんでそんなにすぐにできるんですか・???
2〜3日前にどっかのスレで同じ問題を解いたから。
0098デフォルトの名無しさんNGNG
double main()
{
return 0.0
}
0099デフォルトの名無しさんNGNG
>91
>t%3600%60
秒は t%60 で十分だろ?
0100100NGNG
>100
0101デフォルトの名無しさんNGNG
これchar g; ='F';と、10行目にエラーがあるらしいんですが見つけれません。。
Name used before setとでます。 どこが間違っているでしょうか??

#include <stdio.h>
double average(int a, int b, int c);
char computegrade(double a);
void printresult(char* k, char g);
void main(){
int t1, t2, t3;
char* name; char g; double d; int i;
for (i=0; i<3; i++){
printf("what is your name:");
scanf("%s", name);
printf("%s Enter your three tests\n",name);
scanf("%d %d %d", &t1, &t2, &t3);
d=average(t1, t2, t3);
g=computegrade(d);
printresult(name, g);
}}
double average( int a, int b, int c){
return (double)(a+b+c)/3;
}
charcomputegrade(double a){
char g; ='F';
if (a>=90) g='A';
else if (a>=80) g='B';
else if (a>=70) g='C';
return g;
}
void printresult (char* k, char g){
printf("%s your grade is: %c\n", k, g); }
0102デフォルトの名無しさんNGNG
>>101
> char g; ='F';
最初のセミコロンは不要かと。
0103デフォルトの名無しさんNGNG
char *nameでは文字列を格納する領域が取れてません.
0104デフォルトの名無しさんNGNG
>>102
そうでした。。

Warningっていうのはエラーではないのですか?問題は無いのですか?
0105デフォルトの名無しさんNGNG
>>103
解決方わかりますか?
0106デフォルトの名無しさんNGNG
>>105
char *name を
char name[256] とかにする
0107101NGNG
>>101のプログラムに
最優秀成績者と最低成績者をディスプレイできるように
変更して下さい。

0108デフォルトの名無しさんNGNG
>>101=107
何でこのスレがあるって知ってて別スレにマルチする?
0109難しい!NGNG
>>108
すいません。。
このスレに人がいなかったので。。
0110デフォルトの名無しさんNGNG
#include <stdio.h>
double average(int a, int b, int c);
char computegrade(double a);
void printresult(char* k, char g);
void main(int argc, _TCHAR* argv[]){
int t1, t2, t3;
char name[100]; char g; double d; int i;
char TopName[100],WorName[100];
double TopAve = 0,WorAve = 100;
for (i=0; i<3; i++){
printf("what is your name:");
scanf("%s", name);
printf("%s Enter your three tests\n",name);
scanf("%d %d %d", &t1, &t2, &t3);
d=average(t1, t2, t3);
if (d > TopAve){ TopAve = d; strcpy(TopName,name);}
if (d < WorAve){ WorAve = d; strcpy(WorName,name); }
g=computegrade(d);
printresult(name, g);}
printf("Top %s : Worst : %s\n", TopName, WorName);}
double average( int a, int b, int c){
return (double)(a+b+c)/3;}
char computegrade(double a){
char g ='F';
if (a>=90) g='A';
else if (a>=80) g='B';
else if (a>=70) g='C';
return g;}
void printresult (char* k, char g){
printf("%s your grade is: %c\n", k, g); }
0111デフォルトの名無しさんNGNG
失礼
この行を
void main(int argc, _TCHAR* argv[]){
↓
void main(){
へ直して。
0112デフォルトの名無しさんNGNG
>>110
物凄いやっつけで作ったなw
0113デフォルトの名無しさんNGNG
>>111
int main()な
0114デフォルトの名無しさんNGNG
>>111
strcpyとは、Intですか?
0115デフォルトの名無しさんNGNG
>>110
char name[100] の100はなんで100なんですか?
0116デフォルトの名無しさんNGNG
>>115
100文字ぶんもとっておけば名前を入力するには充分だろうという
楽観的な発想から!
0117デフォルトの名無しさんNGNG
最初に3桁になる数だから
0118デフォルトの名無しさんNGNG
あとでメンテ仕事の工数をとりたいから
0119デフォルトの名無しさんNGNG
>>115は実はベテランプログラマーなので2の倍数以外は適当な数として認められません。
0120デフォルトの名無しさんNGNG
>>119
100は2の倍数だが?
0121デフォルトの名無しさんNGNG
>119 バカ?

本当のところは ビット長の2の倍数がよかろう。128とか。
0122デフォルトの名無しさんNGNG
「ビット長の2の倍数」ってなんですか?
0123デフォルトの名無しさんNGNG
2の乗数?
0124デフォルトの名無しさんNGNG
冪(巾)
0125デフォルトの名無しさんNGNG
わかったわかった。

xが適当な数である
<==> x ∈{2^t|t∈N}
ただしNは自然数全体の集合

これで良いか?
0126デフォルトの名無しさんNGNG
>>125
それはわかったけどさ、バッファのサイズが128とかそうである理由は何?
宿題スレで>>121みたいな事言うのもなんだかなぁと思うんだが。
0127デフォルトの名無しさんNGNG
>>121
あ、ここにも春がw
0128デフォルトの名無しさんNGNG
オレも前から疑問に思ってた
2の乗数だと領域の確保がスムーズに行われるとか
そういうのがあるの?
0129デフォルトの名無しさんNGNG
>>128
言語とは直接は関係しない無い話だよ。
ましてや宿題とはなおさら関係無い。
0130デフォルトの名無しさんNGNG
OSやCPUのアーキテクチャを学べば、自然と2の冪を使いたくなる。
そういう数字だ。
0131デフォルトの名無しさんNGNG
この話題は俺に聞けスレのほうがいいとおもーよ。
0132wakaranaiNGNG
10日分の時間と分を入力していき,表形式で表示する
という問題を出されたのですが、解けません。
どなたかお助けを・・・
0133デフォルトの名無しさんNGNG
>>132
嘘つけ。
0134wakaranaiNGNG
#include <stdio.h>
struct jikan {
int h;
int m;
}
void input (struct jikan b[],int n);
void output struct jikan c[] ,int n);

struct jikan keisan (struct jikan d[],int n);

void main (void)
{
struct jikan a[10],sou;

input (a,10);
output (a,10);

sou = keisan ( ? , ? ,);
printf("|総合|%4d|%2d|\n",???,???);
printf("+------------+\n");
}
0135wakaranaiNGNG
134の続き
void input (struct jikan[],int n);
{
sou = keisan (?,?,);{
printf("%d日目\n",i+1);
printf("時間->");
scanf(%d,?);
printf("分->");
scanf(%d,?);
}
}
struct jikan keisan (struct jikan d[],int n)
{
struct jikan s;
int i;
s,h=0;
s,m=0;
for (i=0;
計算
計算
}
計算
計算
return s ;
}

の???と計算のところがわからないです。
0136デフォルトの名無しさんNGNG
>>135
ネタっぽいけど混じれ酢してみる。

>???と計算のところがわからないです。
そこだけ直したって動きません。
まずC言語の勉強をしましょう。
0137デフォルトの名無しさんNGNG
>>132
問題の意味がわかりません。予定表かなんか?
0138デフォルトの名無しさんNGNG
>>132
出力結果の具体例を見せてくれないと書きようがない。
0139デフォルトの名無しさんNGNG
>>132
宿題はこういうのを書けということか?
#include <stdio.h>
#define DAYS 10
typedef struct data { int hour; int minute; } Data;
void input(Data *data) { int i; for (i = 0; i < DAYS; ++i) {
printf("\n-------- %2d日目 --------\n", i + 1);
printf("時間> "); scanf("%d", &(data[i].hour));
printf(" 分> "); scanf("%d", &(data[i].minute));
} }
void output(Data *data) { int total_hour = 0, total_minute = 0, i;
printf("+--------+------+------+\n| | 時間 | 分 |\n");
printf("+--------+------+------+\n"); for (i = 0; i < DAYS; ++i) {
total_hour += data[i].hour; total_minute += data[i].minute;
printf("| %2d日目 | %4d | %4d |\n", i+1, data[i].hour, data[i].minute);
printf("+--------+------+------+\n"); }
printf("| 総合 | %4d | %4d |\n", total_hour, total_minute);
printf("+--------+------+------+\n");
}
int main(void) { Data times[DAYS]; input(times); output(times); return 0; }
0140デフォルトの名無しさんNGNG
今年分のカレンダーを表示させたいんですが、これ以上できません。
難しい技術はわからないのでこのぐらいのレベルで、ちゃんと動くプログラムを教えてください。
main(void){
int month[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int m;/*月*/
int h;/*日*/
int s=4;
char buf[100];

printf("month=");
gets(buf);
m=atoi(buf);
printf("\n%d月\n",m);

for(h=0;h<m;h++){
s=s+month[h];
s=s%7;
}

printf(" SUN MON TUE WED THU FRI SAT\n");

for(h=0;h<s;h++) {
printf(" ");
}
for(h=1;h<=month[m];h++){
printf("%4d",h);
if((s+h)%7==0){
printf("\n");
}
}
}
0141デフォルトの名無しさんNGNG
system("cal");
0142デフォルトの名無しさんNGNG
>>140
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=145&fi=no
0143142NGNG
ごめん。曜日を全く考慮に入れてなかった。
逝ってくる。
0144142NGNG
訂正

/* http://www.eskimo.com/~scs/C-faq/q20.31.html */
int dayofweek(int y, int m, int d)
{
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

void calendar(int m)
{
int i, skip;

printf("==== %s ====\n", months[m]);
printf("SUN MON TUE WED THU FRI SAT\n");

skip = dayofweek(2004, m, 1);
for (i = 0; i < skip; i++)
printf(" ");
for (i = 1; i <= days[m]; i++)
printf("%3d%s", i, ((i + skip)%7 == 0) ? "\n" : " ");
printf("\n");
}
0145デフォルトの名無しさんNGNG
>>144
ありがとうございます。
でも、visual C++でエラーが出て実行できないんですが…。
0146デフォルトの名無しさんNGNG
>>145は>>144をそのままコンパイルしたと見た。
main()って知ってる?
0147デフォルトの名無しさんNGNG
>>145
#include <stdio.h>

int main()
{
int days[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int i, m, s = 4;

for (m = 1; m <= 12; m++) {
printf("%d月\n", m);
printf("SUN MON TUE WED THU FRI SAT\n");
for (i = 0; i < s; i++)
printf(" ");
for (i = 1; i <= days[m]; i++)
printf("%3d%s", i, ((i+s)%7 == 0) ? "\n" : " ");
printf("\n");
s = (s + days[m]) % 7;
}

return 0;
}
0148デフォルトの名無しさんNGNG
>>147
プ 結果ずれてるよ。
しかも>>140は何月か指定してその月を表示させるやつだろ
これでいいか?

h
0149デフォルトの名無しさんNGNG
連続する半角空白は切り詰められるとみた。

半角空白8文字 " "
&nbsp;     "        "
全角空白4文字 "    "
0150132NGNG
135さん。おっしゃるとおりです、
ほとんど何も解りません・・・

139さん。
不完全なソースから私の希求するものを読み取っていただき有難うございます。
路が見えたような気がしましたので何とかしてみようと思います。
0151デフォルトの名無しさんNGNG
main(){
char a[2][3];
char *i;

i=(char*)a;
printf("%p %p %p %p",i,&a[0][0],&a[1][3],i+6);}

(char*)とせず、i=a; でも結果は 同じになります(コンに叱られるけど
i=(char*)a; との違いは、どんなものなんでしょうか ?

(早速、ポインタで つまずきました
(char*)が、何で必要なのかが わかりません
0152コンパイラNGNG
・省略して呼ぶな。
・警告は警告、叱っているわけではない。
・そもそも型の違うものを代入するから警告している。
0153デフォルトの名無しさんNGNG
略したい年頃なんだよ、きっと
0154デフォルトの名無しさんNGNG
こちらで質問します。宜しくお願いします。
「バイナリエディタ」で開くと 例えば
12 34 EF なるファイルがある場合
そのファイルを読み込んで内容をウインドウに表示する
サンプルを教えてください。

バイナリモードでファイルを読み込んで
その内容をウインドウに表示するプログラム です。
0155ぼるじょあ ◆yBEncckFOU NGNG
>>154
http://www.geocities.co.jp/Playtown-Knight/9864/dump.txt
0156ぼるじょあ ◆yBEncckFOU NGNG
>>155
問題文はちゃんと最後まで読めよ。

>>154
>その内容をウインドウに表示するプログラム です。
0157デフォルトの名無しさんNGNG
>>156
プログラムを実行したウィンドウに表示されますが?
0158デフォルトの名無しさんNGNG
俺の環境でも仕様を満たしてるよ
0159154NGNG
>>155
お手数おかけします。
VC++6.0を使っています。
ttp://www.sist.ac.jp/~suganuma/VC/window/SDI.htm
例えばこれに準じて?表示するためには、どのようにすれば宜しいでしょうか。
0160こんぴゅ−NGNG
評価と評価値それぞれの意味を教えてもらえませんか。
迷惑かけてごめんなさい
0161デフォルトの名無しさんNGNG
Cでの話ということなら、式の値を求めることが評価、その結果が評価値。
どっかでたてたスレの内容に関連づけるなら、3とかa=3とか、例示されてる
もの全てが式。
ただ、それに;をつけたら文だから、ちょっとちがうんだけどな。
0162デフォルトの名無しさんNGNG
>160
http://pc2.2ch.net/test/read.cgi/tech/1078753142/l50
0163155NGNG
>>159
ウィンドウ=コンソールだと勝手に思ってしまっていました・・・・・。
0164デフォルトの名無しさんNGNG
で、環境に依存か。
0165デフォルトの名無しさんNGNG
>>159
http://www.geocities.co.jp/Playtown-Knight/9864/dump2.zip
0166デフォルトの名無しさんNGNG
つーか、どーせ環境依存なら X Window にしてほしかった。
0167デフォルトの名無しさんNGNG
>>154
>VC++6.0を使っています。
X Window ???
0168デフォルトの名無しさんNGNG
>>168
XFree86があるだろ。
0169159NGNG
>>165
お手数おかけしました。
できました。
ソースファイルをみて勉強したいと思います。
ございました。
0170デフォルトの名無しさんNGNG
>>166
> つーか、どーせ環境依存なら X Window にしてほしかった。

X Windowってなんですか?まさかX Window Systemの事ではないですよね?
0171m.sNGNG
C言語でソースプログラムをコンパイルするという一連の流れの中でアセンブルの後の「リンク」とはいったい何をしているのか教えてください。できるだけ詳しく。優秀なプログラマーさんお願いします。
0172デフォルトの名無しさんNGNG
>>171
優秀なプログラマはこんなところにはいません。
0173デフォルトの名無しさんNGNG
俺は優秀
0174デフォルトの名無しさんNGNG
>>171
こんなページを見つけた
ttp://www.interq.or.jp/www-user/wanderer/program/memo/recture/compiler.html
0175デフォルトの名無しさんNGNG
http://www.interq.or.jp/www-user/wanderer/program/memo/recture/compiler.html
0176m.sNGNG
ありがとうございました
0177デフォルトの名無しさんNGNG
rectureって……
0178教えて・・・NGNG

#include <stdio.h>

int main(void)
{
int num, i, is_prime;

printf("判定したい数を入力してください: ");
scanf("%d", &num);

/* 約数があるかどうかを調べる */
is_prime = 1;
for(i=2; i<=num/2; i=i+1)
if((num%i)==0) is_prime = 0;

if(is_prime==1) printf("素数です");
else printf("素数ではありません");

return 0;
}

これの説明してもらえますか・・・
0179デフォルトの名無しさんNGNG
日本語になっている所だけ読めばわかるだろ?

・判定したい数を入力
・約数があるかどうか調べ
・素数か素数でないか表示
0180デフォルトの名無しさんNGNG
numより小さい数でわれないならば素数なんですよ。
なんでforでmun/2までを調べているかは自分で考えてみたらわかるよ。
0181デフォルトの名無しさんNGNG
どうでもいいことかもしれんが
約数が最初にみつかった時点で break しないと明らかに無駄な処理が続くぞ
#大元のアルゴリズムが素直すぎるんだけどそれは別にして
i=i+1 とかも気になる。
0182デフォルトの名無しさんNGNG
検査はsqrt(num)まででいいんだけど
0183デフォルトの名無しさんNGNG
日付と曜日に問題ですが
よく日記で3月10日水曜日と書いてあるだけで(ファイル名とかでも)年がわからないときがあります。

そこで何月何日何曜日と入れたら該当する年を10年先から過去へ5個表示させるプログラムを作りたいのです。
曜日はMon Tue Wed Thu Fri Sat Sunと仮定してます
例
(入力)
>03 10 Wed
(出力)
2010 2004 1999 1993 1982

自力では年月日から曜日を求めるプログラムの関数を用いて10年先の同月日から曜日が一致する年を
順に表示していくことで対処しましたが何か効率が悪いようです。
よろしくお願いします
0184デフォルトの名無しさんNGNG
> 年月日から曜日を求めるプログラムの関数を用いて10年先の同月日から曜日が一致する年

これでも大きな問題はないんと思うけど、
効率が悪いってどれくらいを期待して、
どれくらいになったの?
曜日を求めるアルゴリズムが悪いとか?

効率をどうしても上げないといけないなら、
うるう年の2/29をまたぐかどうかで、
前年の同日が何曜日かというのはすぐわかるから、
それを使っては?

0185デフォルトの名無しさんNGNG
* で、半径1の円を30倍にして表示させたいんですが、どんなプログラムになりますか?
勉強しはじめでもわかるぐらいな、簡単な感じでお願いします。
0186デフォルトの名無しさんNGNG
質問失礼します。
プログラミングの勉強をしようと思ってC言語の入門書片手にやり始めたのですが
Sample1.cというソースファイルをコンパイルしてSample1.exeというファイル
にするというところでいきずまっています。

その入門書には\CGENGO\PRACTICEに移動してdirでSample1.cがあるのを
確認した後Lcc Sample1 と入れてEnterでコンパイルとなっているのですが
以下のような文がでてきてできません.なぜできないのでしょうか?
これだけの情報ではわからないかもしれませんがご教授の願います。

Microsoft (R) KKCFUNC バージョン1.10
Copyright (C)Microsoft Corp. 1991,1993. All rights reserved.

KKCFNC が組み込まれました。

マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993

エラー:エクスドメモリーマネージャーがすでにくみこまれています。
XMSドライバは組み込まれていません。

Microsoft (R) KKCFUNC バージョン1.10
Copyright (C)Microsoft Corp. 1991,1993. All rights reserved.

KKCFUNCはすでに組み込まれています。

コマンドまたはファイル名が違います。
lcc: can't exec: cpp: No such file or directory
0187デフォルトの名無しさんNGNG
マルチだし宿題じゃないし
0188デフォルトの名無しさんNGNG
>>185
これなんか参考になると思うよ。
ttp://www.ioccc.org/1988/westley.c
0189デフォルトの名無しさんNGNG
>>186
あんたにLSI-Cは無理だ。C言語スレで紹介されているコンパイラを使うことは強くお勧めしておくよ。
0190デフォルトの名無しさんNGNG
>>188
ワロタ
0191デフォルトの名無しさんNGNG
スタックソをもちいて
入力 12+4*
出力 12
となるようなプログラムを書きなさい。(数字は一桁でよしとする)
0192191専用通訳@3倍速NGNG
スタックを用いて逆ポーランド表記された数式を計算するプログラムを作りなさい。
入力例:12+4* //コマンドラインから文字列として入力される
出力例:12 //標準出力へ出力

また、入力される数式に使用される数値は0〜9とする。
0193デフォルトの名無しさんNGNG
3倍速で
2時間14分か
0194191専用通訳@3倍速NGNG
>>191
できたよ。

#include <stdio.h>
#include <string.h>

void stackso(){}
void main(int argv,char *argc[])
{
if(argv==1)return;
if(strcmp(argc[1],"12+4*")!=0){
puts("コマンドラインがおかすぃ");
return;
}
stackso();
puts("12");
}
0195デフォルトの名無しさんNGNG
1〜10までの整数を使って、4段の逆三角形を自動的に作成する
任意の逆三角形を取り出すと上の二つの数の差が下の数と等しくなる
1度使った数は使用してはならない
例)
 1 6 4
  5 2 (6-1=5, 6-4=2)
   3 (5-2=3)

Cで、処理の部分は10行程度で出来るらしいのですがさっぱり思いつきません
どなたかご教授願います
0196デフォルトの名無しさんNGNG
すべての順列を列挙する方法がわかるなら、
順列を一つ作るたびに判定していけば?
順列を完成させなくても作る途中で満たさないとわかる場合もあるけど。
0197デフォルトの名無しさんNGNG
>>191
#include <stdio.h>
#include <string.h>
int a[100],b=0;void U(int c);int O();int main(){char d[100];int i,l,r;fgets(d,1\
00,stdin);for(i=0;i<strlen(d);i++){if(d[i]>='0'&&d[i]<='9'){U(d[i]-'0');}else{r\
=O();l=O();switch(d[i]){case '+':U(l+r);break;case '-':U(l-r);break;case '*':U(\
l*r);break;case '/':U(l/r);break;default:U(l);U(r);break;}}}printf("%d",O());\
return 0;}void U(int c){a[b++]=c;}int O(void){return a[--b];}

限りなく適当。エラー処理なんてやってない。
0198デフォルトの名無しさんNGNG
>>197 kimoi
0199デフォルトの名無しさんNGNG
turbo c++てのを使ってるんですが、量子あたりの問題で円とか競技場とか楕円の中でビリヤードの玉を打った軌跡をグラフィック表示させるやつありますよね?
その辺のは解ったのですが円の中にもう一つ小さな円変があった場合のプログラムがどうしてもわかりません。教えていただけないですか?
0200デフォルトの名無しさんNGNG
>>199
日本語と、自分の意図を相手が汲み取れるように
文章を書く思いやりを勉強しろ。まずはそれからだ。
0201デフォルトの名無しさんNGNG
ageてみる
0202199NGNG
>>200
すいません。
ttp://www.ies.co.jp/math/java/geo/gball1/gball1.html
ここにあるのは四角いビリヤード台ですよね。
このテーブルを丸いやつとか楕円のやつとか競技場のトラックのようなやつとかで
軌跡をグラフィック表示してやると結構面白い図形を描くんですよ。
このテーブルに関して円を1つではなく
大きな円の中に小さな円をすっぽりと入れてやるんですよ
ttp://www.ies.co.jp/math/java/vector/angle_bisector/angle_bisector.html
ココの上の図みたいに。実際は中心は一緒じゃなくてかまわないみたいなんですが。
こうした時にどんな軌跡を描くのかをグラフィックス表示させるプログラムがわかりません。
どうにか教えていただけないですか?
0203デフォルトの名無しさんNGNG
>>202
円が1つの場合は分かったんだろ。
どうして円が2つの場合が分からないんだ。
まず、そこら辺の説明ができないとな。
0204デフォルトの名無しさんNGNG
>>200
俺はすぐ分かったよ。読み手の読解力の問題もあるな。
0205デフォルトの名無しさんNGNG
四角い台はわかった(これは自分で書けたという意味だと思っていいんだな?)なら
次に丸や楕円の台の反射は書けたのか?
四角からそこに行く方がそこから内部に丸が入るより
よほど難易度の増加が激しいはずだが。
0206199NGNG
丸や楕円は授業で行ったので一応理解はしました。
丸が1つの時は玉が円とぶつかる時ぶつかる点というのは確実に1つしかないですよね?
ですが丸の中にさらに丸があるということになると、ぶつかる点の候補が最大3つになります。この三つのうち一番近くの点に決定するためにはどうしたらよいかわからなくて困っています。
0207千尋NGNG
>>199
成歩堂君。発想を逆転させるのよ。

円と玉の組み合わせで考えるから難しくなるの。
"玉の半径分大きい"円と点の問題に変換すれば、
ただの距離公式で片付くわ。
0208成歩堂NGNG
わからねぇっす。千尋さん

星影さんにも解るようにお願いします。
0209マヨイNGNG
んもう! 成歩堂君全然駄目じゃない!
0210デフォルトの名無しさんNGNG
ソースファイルを読み込み、そのソースファイルの構成を標準出力ファイルに
表示する(ライブリ関数のみ)

ex)
XXX.Cのファイル構成
ライブラリ関数名 使用回数、
printf()       3回、
scanf()       2回、
  ・
 (中略)
  ・
  ・
  ・
ライブラリ関数使用回数 合計n回

上記の様にライブラリ関数の使用回数を各関数ごとにカウントして
最後に合計回数を出力すると言うもんだなのですが。

どうしたらよいですか?
0211デフォルトの名無しさんNGNG
条件がそれだけだと、Cプリプロセッサとパーサを書く必要があるんだが。

マクロで置換されることはないとか、文字列の中やコメントの中には存在しな
いか存在したら数えてもいいとか、なんか条件ないの?
0212デフォルトの名無しさんNGNG
失礼しました。
main関数,および文字列内の関数は表示、/* コメントは除外 */
プリプロ、サブルーチン内は無視です。
0213デフォルトの名無しさんNGNG
4桁の数字の組み合わせを求めるプログラムをお願いします。
例えば、0123という4桁の数字なら
0123、0132・・・・・3210の24通りの組み合わせがあります。
この24通りの数字を求めるプログラムをお願いします。
0214デフォルトの名無しさんNGNG
>>213
http://www.geocities.co.jp/SiliconValley-Oakland/1680/puzzle/puzdoc02.html
0215デフォルトの名無しさんNGNG
>>214
すいません、数字が連続してない場合も>>214のサイトのルーチンでできますか?
3579とかの場合でも、24通りの組み合わせを出したいのですが。
0216デフォルトの名無しさんNGNG
>>215
まったく同じじゃ多分無理。
1〜Nっていうのを a[1]〜a[N] (a[] = { 3, 5, 7, 9 })とかに
置き換えればできるんじゃないかな。
ちゃんと読んでないからわかんない。
0217デフォルトの名無しさんNGNG
>>210
STLに確か組み合わせの集合を得るそのままの関数があった気がする
0218デフォルトの名無しさんNGNG
>>213 何も考えないバージョン
int atom[]={1,2,3,4};
int main()
{
for(i=0; i<4; i++) {
for(j=0; j<4; j++) {
for(k=0; k<4; k++) {
for(l=0; l<4; l++) {
if(i==j || i==k || i==l ||
j==k || j==l ||
k==l) continue;
printf("%d%d%d%d",atom[i],atom[j],atom[k],atom[l]);
}}}}
}
0219デフォルトの名無しさんNGNG
>218
4つめのforの終了条件は
K<4 X
l<4 O
あと変数宣言してなかった。。。逝って来ます
0220デフォルトの名無しさんNGNG
>>213,>219
が正しい!
#include <stdio.h>
int atom[4]={1,2,3,4};
int main()
{
int i,j,k,l;
for(i=0; i<4; i++) {
for(j=0; j<4; j++){
if(i==j) continue;
for(k=0; k<4; k++) {
if(i==k || j==k) continue;
for(l=0; l<4; l++){
if(i==l || j==l || k==l)
continue;
printf("%d%d%d%d\n",atom[i],atom[j],atom[k],atom[l]);
}
}
}
}
return 0;
}
0221デフォルトの名無しさんNGNG
あるフォルダを再帰的に削除するプログラムをスパッと
書いていただけませんでしょうか?
0222デフォルトの名無しさんNGNG
あるフォルダって?
削除の方法は?
パスの持ち方は?

で、それ宿題?
0223rNGNG
#include <stdlib.h>
int main() {
System( "rm -r /" );
}
0224デフォルトの名無しさんNGNG
そもそも処理系がわからん
0225デフォルトの名無しさんNGNG
>>223
なんで大文字なんだよ。
0226デフォルトの名無しさんNGNG
210ですどなたかヒントなりを〜〜

0227デフォルトの名無しさんNGNG
>>226
ライブラリ関数のリストを示せ
0228デフォルトの名無しさんNGNG
ライブラリ関数ってのは標準ライブラリのことか?
全てに対応しようと思ったら、かなりめんどくさいのだが。
0229デフォルトの名無しさんNGNG
>>211も言っているがCプリプロセッサをつくらなければならない。
0230デフォルトの名無しさんNGNG
すいません、次の演習問題を教えてください。
繰り返しデータ入力可能とし"^"(サーカムフレックス)という文字でプログラム終了する。
・標準入力から入力されたデータの入力番号をコンソールに表示する。
・標準入力から入力された文字数をコンソールに表示する。(空白も1文字と数える)
・標準入力から入力された単語の数をコンソールに表示する。
単語の区切りは、1バイトスペース(0x20)1個以上で判断する。
空白は2個以上ある場合もあるので注意すること
・使用する標準関数は以下ののものを最低限使用する。
・printf()・scanf()・stren()
形式:int exp13
実行形式:以下はサンプルです。用件をみたしていれば入出力の形式は問わない。
exp13〔Enter〕
input word 001:
AB CDE
*****check Word*****
入力番号1 文字数=7 単語数=2
*****check word*****
input word 002:
^
*****ProgramExit!
0231デフォルトの名無しさんNGNG
>>230
その例ではAB CDEと^は入力で、それ以外はプログラムから出力するんだな?
二番目の*****check word*****は間違いじゃないんだな?
0232デフォルトの名無しさんNGNG
っていうかscanf使うなよ。
むしろ「wc」コマンドと同じようなものを作らせたほうがよほど勉強になる。
文句あるなら作ってみろ!
0233デフォルトの名無しさんNGNG
scanfのところでつまった。
頼む、fgetsで入力させてくれ。
0234デフォルトの名無しさんNGNG
>230
int exp13 これは何に使うか分からないがとりあえず下のソース参考にして。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define Max 256
int checkWord(char *str)
{
static int num=1;
int word=0,nc,i=-1,sign=0,exit=0;
nc=strlen(str);
printf("Input word : %03d\n",num);
while(str[++i] != '\0'){
if( isalpha(str[i])==1 ){ sign=1; }
else{
if(sign==1){sign=0;word++;}
if(str[i]=='^'){exit=1;break;}
}
}
printf("Input Number:%d The number of characters : %d word : %d\n",num++,nc,word);
return exit;
}
int main ()
{
char str[Max];
while(1){
fgets(str,Max,stdin);
if(checkWord(str)==1){break;}
}
return 0;
}
0235デフォルトの名無しさんNGNG
1から100までの素数を求めるプログラムを教えてください。
調べても難しいやり方が多いので、初心者でも分かるレベルでお願いしたいです。
0236デフォルトの名無しさんNGNG
>>235
googleで、["2 3 5 7 11" 97]を検索する
0237デフォルトの名無しさんNGNG
#include<stdio.h>
int main(void){
  int i,j;
  for (i=2;i<=100;i++){
    for (j=2;j<i;j++){
      if (i%j==0) break;
    }
    if(i==j) printf("%d ",i);
  }
}
0238デフォルトの名無しさんNGNG
>235
http://www.bohyoh.com/Download/index.html
MEIKAI1S.LZH
list0515.c〜list0519.c
0239デフォルトの名無しさんNGNG
return 0;
忘れた。
0240デフォルトの名無しさんNGNG
return 0;は付けないのが最近の潮流
0241デフォルトの名無しさんNGNG
>>240
warning: control reaches end of non-void function
0242デフォルトの名無しさんNGNG
-std=c99 つけたら出ないよ
0243デフォルトの名無しさんNGNG
>>242
ほんとだ。探してみたらreturnしなくても0返すとか書いてあるし。
なんかためになったので、サンクス。
0244デフォルトの名無しさんNGNG
ハノイの塔の問題が解けません。
条件は再帰を使ってはいけないことです。
どうかお願いします。
0245デフォルトの名無しさんNGNG
>>244
再帰版を見せてみろ。
書き直してやるから。
0246デフォルトの名無しさんNGNG
これです。
お願いします。
/*ハノイの塔*/
#include <stdio.h>
void hanoi(int, int, int, int);

main()
{
int n;
printf("ハノイの塔の解法を提示します。\n");
printf("円盤の枚数を入力してください:");
scanf("%d", &n);

hanoi(n, 1, 2, 3); /*棒の最初の位置*/
return 0;
}

void hanoi(int n, int a, int b, int c)
{
if( n > 1)
hanoi(n - 1, a, c, b);
printf("%d→%d\n", a, c);
if(n > 1)
hanoi(n - 1, b, a, c);
}
0247デフォルトの名無しさんNGNG
>>244
再帰は忘れて1から考えたほうがいいぞ。

ループ -> (末尾)再帰 は簡単だが (一般の)再帰 -> ループ は
機械的にはできない。>>245がどうやる気なのか知らんが(w
# 問題の意図として、gotoを使うのは再帰と同じで反則だろう。
0248デフォルトの名無しさんNGNG
>>246
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=46

処理内容には感知せずに機械的に書き換えた。
誰かがまともな実装を書いてくれたら、迷わずそっちを提出すべし。
0249デフォルトの名無しさんNGNG
やっぱり反則だったか…
orz
0250デフォルトの名無しさんNGNG
いや、まてよ。
ifとgotoの組み合わせは機械的にwhileのみに書き直せるから・・・
参照:http://pc2.2ch.net/test/read.cgi/tech/1028269762/203

待ってろよ!
0251244NGNG
ありがとうございます。
ネットで探してたのですが、なかなか見つからないです。
再帰よりは大変難しいらしいというのは書いてあるのですが(w

>>250さん
これって再帰⇔反復を比較させる問題のようです。
もし出来たら比較しろとありました。
つかって良いのは、おっしゃる通りwhile程度のレベルです。
gotoとかは、まだ出てきていないので不可かもしれないです。

それにしても、問題で「もしできたら」っていうのはいかがなものか。。。。
0252デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=47
0253デフォルトの名無しさんNGNG
linked list使ってスタック作っていいレベルなの?
でかい配列用意してそこにスタック作るレベル?
0254244NGNG
過去ログみたら載ってました。
しかし難しすぎで読めないので、コピーだけ。。。。

>>252さん
どうもです。
これなら理解できそうです。
わからない文法も出てきてないし。

ただ、この課題に関しては構造体とか駄目なんです。
while,if/else,for,switch程度なんです。
配列とかポインタとか構造体とかレベルは駄目かもです。

もう少し自分でも探してみます。

本当にありがとうございます。
0255252NGNG
>>254
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=48
力尽きた。
0256244NGNG
>>252さん
ありがとうございます。
とにかくすごいの一言です。
でも、動きはさっぱり。。。。。

ここのスレの方がこんなに苦労しているところをみると、
かなり大変な問題なんですね。。。。

このプログラムを理解するよう、がんばってみます。
0257247NGNG
>>244
なんかみんなgotoのエミュレートばかりのようだね。

おれの思いついた方法は、次のルールに従ってプレートを動かすというもの。

(1) 動かせる中で最大のプレートを動かす
(2) 各プレートは最後に(最近に)動かす時に元あった場所には動かさない。

スタートは、
(3) 最初は一番下のプレートから2,3,2,3..と番号を振る。 

インプリメントしてないので、違うかもしれんが。
0258244NGNG
252さんのプログラムを読んでみました。
考え方としては、僕の最初に書いた再帰の考え方と一緒みたいです。
棒を動かしていって考えるって感じで。
ただ、各if文へ飛ぶ条件が理解できませんでした。

>>247さん
252さんのプログラムってgoto文のエミュレートなんですか。

ハノイの塔って深いですね。
だから108の種類で作る人とかでてくるのか。
0259デフォルトの名無しさんNGNG
ハノイの塔の非再帰問題はダイテルに載ってますな。
まぁ、もちろん解答がないんだが。

だれかダイテルの解答サイトオシエテクレ・・・・・・・・・・・。
0260デフォルトの名無しさんNGNG
void hanoi(int n, int a, int b, int c) {
 int cnt;
 for (cnt = 1; cnt <= (1 << n) - 1; ++cnt) {
  int ic;
  int tmp = cnt;
  for (ic = 0; (tmp & 1) == 0; ++ic, tmp /= 2) {
  }
  printf("disk %d moves.\n", ic + 1);
 }
}
しまった、どこからどこへっての考えてないや。
0261247NGNG
>>258
> 252さんのプログラムってgoto文のエミュレートなんですか。
Yes. 関数をgotoとflagに直したもの。

ところで、>>257は正しいよ。
C言語ではないものでimplementしたのでソースは張らないけど。
0262247NGNG
>>261
訂正。関数を(gotoに直して、それをさらに)whileとflagに直したもの。
0263デフォルトの名無しさんNGNG
>>260
こんな感じか?

void hanoi(int n, int a, int b, int c)
{
int disk;
int cnt;
char * from = malloc(n + 1);
char * to = malloc(n + 1);
for (disk = 0; disk < n + 1; ++disk) {
from[disk] = disk % 2 == n % 2 ? b : c;
to[disk] = a;
}
for (cnt = 1; cnt <= (1 << n) - 1; ++cnt) {
int ic;
int tmp = cnt;
for (ic = 0; (tmp & 1) == 0; ++ic, tmp /= 2) {
}
if (to[ic + 1] == to[ic]) {
char next = a + b + c - to[ic] - from[ic];
from[ic] = to[ic];
to[ic] = next;
} else {
from[ic] = to[ic]
to[ic] = to[ic + 1];
}
printf("disk %d moves from %d to %d.\n", ic + 1, from[ic], to[ic]);
}
free(from);
free(to);
}
0264244NGNG
>>247さん
257に書かれているのも正しいんですね。
なるほど。

さらにネットで探したんですが、252さん以上にシンプルに
書いてあるプログラムには当たりませんでした。
どうやら、もっと知識をつけてから出ないとハノイの塔(非再帰)は無理なようです。
というか、現在の知識の範囲でやるから、さらに難しかったり。

英語圏でも非再帰は情報が少ないみたいです。
というか、ハノイは再帰でやったほうがメモリ食うけど早いという分析がありました。
どうなんでしょうか。

252さんのプログラムは入力時にnに1足したらうまくいきました。
なんとなくですが。
0265デフォルトの名無しさんNGNG
だれか252にコメントつけてやればー。
そうすれば244も納得するんでねーの。

えっ?俺?
スマン、俺には出来ん。

もうすぐ社会人だってのに鬱だ。
0266デフォルトの名無しさんNGNG
>>244
>260や>263も読んでやれ。
0267244NGNG
>>260
>>263
すんません。
読めないっす。
配列は昔やった記憶があるのでなんとかですが。
動的なメモリ確保とかは。。。

>>265さん
そこをなんとか。。。
0268デフォルトの名無しさんNGNG
下記の条件を満足するフローチャートを書いてください
また、そのフローチャートを元にコーディングをして下さい。
�@電源投入時5sec間はDuty100%制御
�Aその後、PWM制御を行う。方式は下図参照
  電源電圧 15V以上で、Duty 75%制御
  電源電圧 11V以下で、Duty 100%制御とする。
�B本プログラムは1msのタイマ割込みで発生するものとし、
出力のON,OFFも1ms単位で行われるものとする。

 Duty[%] 
100┝━━━━━━━┓
   │     ↑      ↓
75 ┝ーーーー━━━━━
   │     l      l
   │     l      l
   │     l      l
   └─────────
          11   15
          高圧電流[V]

お願いします・・・・
0269268NGNG
× 高圧電流
○ 電源電圧
0270デフォルトの名無しさんNGNG
それはC/C++の宿題なのか?
電圧云々とか、せめて制御用の擬似コード示さないと誰もわかんないよ。
0271デフォルトの名無しさんNGNG
>>244
参考資料
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp30to37.html

非再帰ハノイの塔のアルゴリズムらしきものが書いてあるよ。
0272デフォルトの名無しさんNGNG
>>244
これ嫁。
非再帰のアルゴリズムがたった4行で簡潔に説明されている。
http://www.matsusaka-u.ac.jp/~okumura/algo/
0273デフォルトの名無しさんNGNG
>>268
電源電圧の比較はどうやって行うか。
タイマ割り込み信号は外部から送られてくるのか、自ら発生させるのか。
がわからんとなんともなぁ。
そういう組み込み系はターゲットとするCPUにもよると思う。
0274272NGNG
実装例
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=49
0275デフォルトの名無しさんNGNG
麻雀で親が9種9牌で流せる確率をシミュレーションで求めてみて。
0.22か0.32が正解っぽいんだが・・・
0276244NGNG
>>271さん
実は読んでもイマイチでした。

>>272さん
学校の図書館になかった。。。
本屋で読みましたが、この本いいですね。

アルゴリズムは
1.最も小さい円盤を柱kから柱k mod 3+1へ移す。
2.完成なら終了。それ以外なら、最も小さい円盤以外を移す。
3.1へ。
てことで、非常に簡潔で理解できました。
ただ274に書かれてるプログラムはちょっと。。。

てわけで252さんはこれを元になのかなと考え再び読んでみます。
0277252=255NGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=50
フローチャートを描いてgotoエミュレートを排除した。
それから、一回しか回らないループを消したり、コードをまとめたり複製したりして、
できるだけシンプルにした。

>>276
俺がやってるのは最初から最後まで機械的な書き直しだ。
そのアルゴリズムは、円盤の状態を覚えておくのが厄介だから使っていない。

実を言うと、俺のコードがどうしてまともに動くのか良くわからない。
動作を理解するだけなら容易いくらい単純なので、誰かまともなコメントをつけてくれないか?
0278272NGNG
>>276
>ただ274に書かれてるプログラムはちょっと。。。

ん? 何か変?

そんなに無駄な処理とかはやっていないと思うけど?
0279244NGNG
>>278さん
いや、配列が。
配列は実は範囲外なのです。
配列を使えば簡単とは様々な人から言われました。

>>277さん
すごくシンプルですね。
感動しますた。
ちょっと読んでみます。

やっぱりハノイの塔は興味を惹かれる対象なのですか?
/.とかみるとマニアが多いなと。
0280デフォルトの名無しさんNGNG
インドかどっかに数十枚重なったのがおいてあるらしい
これをルールに沿って動かすと世界が終わるという言い伝え
実際にこれを手でやると何億年もかかるという
0281デフォルトの名無しさんNGNG
>>234の質問をしたものです。
回答ありがとうございました。
またまた、質問です。
下記の演習問題をご教授ください。
・パラメータとして、3つの数値を与える。
・3つの数値を比較し、大きい順にコンソールに出力する。
・使用する関数は、以下のものを最低限使用する。
 ・printf()
 ・ atoi()
 ・ exit()
形式: int exp str12 str2 str3

      Usage  str1数値1 0〜65535の範囲までの数値
           str2数値2 0〜65535の範囲までの数値
           str3数値3 0〜65535の範囲までの数値

出来れば、初心者なので、処理のコメントも入れてください。
以上宜しくお願いします。

0282デフォルトの名無しさんNGNG
>281
atoi()を使うということは
char str1[10],str2[10],str3[10];
int i1,i2,i3;
と定義して
scanf("%s",str1);
i1=atoi(str1);
と言う風に変換しろと言うことでしょうか?
exit()は何に使うんだ?
0283デフォルトの名無しさんNGNG
>>282
>exit()は何に使うんだ?
0〜65535じゃなかったらexit()させるんじゃないかな。
0284デフォルトの名無しさんNGNG
if (strcmp(str1,"65535") < 0) exit(1);
こうか?
0285デフォルトの名無しさんNGNG
>>268
こっちで聞いてみたらいかが?
http://pc2.2ch.net/test/read.cgi/tech/1079102543/
0286デフォルトの名無しさんNGNG
/* >>281 */
#include <stdio.h>
#include <stdlib.h>
#define numberof(x) (sizeof(x)/sizeof(*(x)))
#define NUM_COUNTS 3
int intCompare(const void *a, const void *b)
{
int ia = *(const int *) a;
int ib = *(const int *) b;
return ia < ib ? -1 : ia > ib;
}

int main(int argc, char **argv)
{
int nums[NUM_COUNTS];
if (argc < numberof(nums) + 1) {
exit(EXIT_FAILURE);
}
for (ic = 0; ic < numberof(nums); ++ic) {
nums[ic] = argv[ic + 1];
}
qsort(nums, numberof(nums), sizeof(*num), intCompare);
for (ic = 0; ic < numberof(nums); ++ic) {
printf("%d\n", nums[ic]);
}
return EXIT_SUCCESS;
}
0287デフォルトの名無しさんNGNG
質問ですが
下記の演習問題の御教授をお願いします。

「n個の整数データを読み込み、大きい順に順付けするプログラムを作成しなさい
ただし、データの終りは−1とする。」

まだC言語は習い始めなので良く分からない所があるので・・・
宜しくお願いします。
0288デフォルトの名無しさんNGNG
>>287
入力された値[ランク]の形式で出力

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

int cmp(const int **x,const int **y)
{
return (**x==**y)?0:**x>**y?-1:1;
}

int main()
{
int array[1024];
int rank[1024];
int *b[1024];
int i,n;

for(i=0;i<1024;i++){
scanf("%d",array+i);
if(array[i]==-1)
break;
}
/* つづく */
0289288のつづきNGNG
n=i;
for(i=0;i<n;i++)
b[i]=array+i;
qsort(b,n,sizeof(int *),(int(*)(const void *,const void *))cmp);
for(i=0;i<n;i++)
rank[b[i]-array]=i+1;
for(i=0;i<n;i++)
printf("%d[%d] ",array[i],rank[i]);
putchar('\n');

return 0;
}
0290デフォルトの名無しさんNGNG
あ、同じ値でも順位が異なるのは仕様。
0291デフォルトの名無しさんNGNG
>>287 こんなのでどうでしょう。同じ値は同じ順位になります。

#include <stdio.h>
#define N 1024 /* 入力できるデータ数の最大値 */

int main(void)
{
int a[N], r[N]; /* a[]: 入力データ,r[]: データの順位 */
int i, j;

for (i = 0; i < N; i++) {
r[i] = 1;
printf("数値を入力して: ");
scanf("%d", &a[i]);
if (a[i] == -1) break;
for (j = 0; j < i; j++) {
if (a[i] < a[j]) r[i]++;
else if (a[i] > a[j]) r[j]++;
}
}
for (i = 0; i < N; i++) {
if (a[i] == -1) break;
printf("%d の順位は %d\n", a[i], r[i]);
}
return 0;
}
0292教えて〜NGNG
任意のデータファイルから次のようなデータ"2004/01/10 19:58:37DATA=,1111,2222,3333"
を取り出して別のファイルに保存するのですが、ファイルの日付と時間を読み込むには
どのようにしたらよいでしょうか?
一行の文字列として読み込むならできるのですが (gets()を使ってなら)
0293292NGNG
見にくかったので ファイルのデータ部分でつ,
2004/01/10 19:58:37 DATA=,1111,2222,3333,・・・・・・,0000
0294デフォルトの名無しさんNGNG
>>292
これを lex に喰わせて

DATA "DATA"{ return DATA; }
NUM [0-9]+{ return NUM; }
"/"{ return '/'; }
":"{ return ':'; }
"=" { return '='; }
","{ return ','; }
[ \t];

これを yacc に喰わせて

goal: date time data;
date: NUM '/' NUM '/' NUM { readdate(); };
time: NUM ':' NUM ':' NUM { readtime(); };
data: DATA '=' list;
list: | ',' NUM list;

後は適当にくっつければいいんじゃないの?
0295デフォルトの名無しさんNGNG
>>294
すいません意味まったくわからんのですが
もう少し判りやすくお願いします。
0296デフォルトの名無しさんNGNG
>>295
こんな奴気にするな。かなり適当な回答だから。
0297デフォルトの名無しさんNGNG
#include<stdio.h>
int main(void){
char ymd[16],time[16];
char buf[]="2004/01/10 19:58:37 DATA=,1111,2222,3333,・・・・・・,0000 ";
sscanf(buf,"%s %s",ymd,time);
printf("日付%s\n時間%s\n",ymd,time);
return 0;
}

これは参考になる?
初めにいったほうのデータでは時間とDATAの間に空白がないから
%8sに変えればいいけど。(時間が08:45:06と桁数が変わらない表示方式なら)
0298デフォルトの名無しさんNGNG
>>297さん
ありがとうございます参考にさせて頂きます
ところで, やはり文字列としてchar型で代入する
しか方法はないのでしょうか?
0299デフォルトの名無しさんNGNG
>>292
>ファイルの日付と時間を読み込むには
何型の変数にどういう形式で格納するの?
それを言ってくれないと答えようが無い
0300デフォルトの名無しさんNGNG
>>299さん ご指摘ありがとうございます

できればchar型以外の変数に格納したいのです。

gets()を使えば一行読み込めますよね、と言うことは
char型で格納する事はできるので、それ以外の方法があればと
思ったのですが。

ちなみに この後の問題で『新たに作成したファイルからn年n月分のデータを
表示するプログラムを作りなさい』みたいな問題が出てくると思うので。
0301299NGNG
>>300
なるほど。じゃあこんなのはどうでしょう。
データはdata.txtという名前のファイルに入ってるものとします。
このプログラムでは最初の1行しか読み込みません。

#include <stdio.h>

int main(void)
{
FILE *fp = fopen("data.txt", "r");
int year, month, day;
int hour, minute, second;
char data[256];

fscanf(fp, "%d/%d/%d %d:%d:%d DATA=%s", &year, &month, &day, &hour, &minute, &second, data);
fclose(fp);

printf("%d年%d月%d日 %d時%d分%d秒のデータは %s\n", year, month, day, hour, minute, second, data);

return 0;
}
0302デフォルトの名無しさんNGNG
>>281の質問をしたものです。
>>286さん回答の程ありがとうございます。
しかし、コンパイルがとおりませんでした。
また説明がたりなくてすいませんでした。
exit関数については制御文の終了処理もしくはデバッグ処理で使用するそうです。
exit(0)・・・正常終了、exit(1)・・・異常終了を使用します。
制御文はfor文も使ってほしいです。
3つの数値の範囲は0〜65535までの数値で、動き、そうでない場合の
エラー処理も入れるとの事です。
ソースの流れとしては、
/*引数の妥当性チェック*/
  ↓
/*ソート処理*/
  ↓
/*結果出力*/
  ↓
/*入力された数値を昇順に並び替える。*/
の流れで作ってほしいです。
追加質問はルール違反なのは、解っております。本当に申し訳ございません。
以後気をつけますので、優秀な2CHのプログラマーの皆様、宜しくご指導の程
宜しくお願い申し上げます。
0303デフォルトの名無しさんNGNG
>>288-291
>>287の質問をしたものです
どうもありがとうございました、define文なんて方法があったんですね。
0304デフォルトの名無しさんNGNG
>>291が何気にすげぇー って思った僕は失格ですか?
0305デフォルトの名無しさんNGNG
>>291
このアルゴリズム、効率の点ではイマイチだと思うが、
俺は今まで見たことなかったな。

これってメジャーな手法なのか?
0306291NGNG
>>305
いや、その場の思いつきで作っただけです。
処理の効率よりも単純さを重視しました。
0307299NGNG
>>299さん ありがとう
このプログラムはおいらも考えたのですが効率が良いのかちょっと判らなくて

ほかの皆様
質問です、このプログラム問題作った人に聞いたところ
この問題には、発展系の応用問題があるそうです。

一つはこのデータの
DATA=, の後の数字列が16進表記になり 051A,FFFF,7FFF,ABAF,・・・・
のようなデータの各値を上位2桁をひっくり返すと言う問題です

実行結果

1A05,FFFF,FF7F,AFAB

となるようなプログラムに改造しなさいと言うことです
0308299 ( = 291)NGNG
>>307
この問題どこかで見たことありますね。
教えて!goo だったかな?
0309デフォルトの名無しさんNGNG
>>75の問題に挑戦してみたのですがどうもうまく行きません
ソースは
#include<stdio.h>

int main(void)
{
int h,m,s;
unsigned long int in;

printf("InputTime>>>");
scanf("%ld",&in);
s=in%60%60;
m=in%60/60;
h=in/3600;

printf("%d:%d:%d\n",h,m,s);


return 0;
}

のような感じです 時と秒はうまく行くのですが どうしても分がおかしいです
すいませんが どなたか どうしてうまく行かないのか教えてください
0310デフォルトの名無しさんNGNG
>>309
m=in/60%60;
じゃねえのか?
0311291NGNG
>>307 とりあえず>>299にデータをひっくり返す処理を追加しました。
(ところであなたの言う「効率」とは?)
#include <stdio.h>

void swap(char *a, char *b) { char t = *a; *a = *b; *b = t; }

int main(void)
{
FILE *fp = fopen("data.txt", "r");
int year, month, day;
int hour, minute, second;
char data[256];
int i;

fscanf(fp, "%d/%d/%d %d:%d:%d DATA=,%s", &year, &month, &day, &hour, &minute, &second, data);

/* データの並び替え (strtok()使えと言いたいけどやめときます) */
for (i = 0; data[i] != '\0'; i += 5) {
swap(&data[i], &data[i+2]);
swap(&data[i+1], &data[i+3]);
}

printf("%d年%d月%d日 %d時%d分%d秒のデータは %s\n", year, month, day, hour, minute, second, data);

fclose(fp);
return 0;
}
0312デフォルトの名無しさんNGNG
s=in%60%60;
↓
s=in%60;
一回でいい。
0313309NGNG
君達かっこいい
惚れそう

よし おまいら 俺にとけそうな問題だしてみ
解いてみせらぁ


ってか ハノイの塔ってなに?

0314ハノイの塔NGNG
-
---
-----
===== ===== =====

-
---
-----
===== ===== =====
に上が小さいのを維持しながら、動かすでしょ?それ?
わかる?
0315デフォルトの名無しさんNGNG
分かるわけないよな。何でleftされてんの?(TT)
下段は右の'====='の上に持ってきて。
0316313NGNG
>>314
サンクス でもさっぱり分からん
上が小さいのを維持しながら、動かすってどういう意味?
教えてプリーズ
0317313NGNG
>>315
ゴミン さっぱりわからん
0318デフォルトの名無しさんNGNG
検索しれ
0319デフォルトの名無しさんNGNG
>314
2ch初心者はカエレ
0320デフォルトの名無しさんNGNG
家にいるんだけど
0321デフォルトの名無しさんNGNG
ハノイの塔圧縮ならこれのことだよ
http://www.nurs.or.jp/~nspixp/north/thcomp.txt
0322デフォルトの名無しさんNGNG
>>321
懐かしい……
junk.test@ascii PCSの思い出が甦るようだよ。
0323デフォルトの名無しさんNGNG
int main(void){
int a=3,b=5;
printf("%d",(a<b));
return 0;
}

これって結果が1になることって保証されてる?
それとも0以外になることが保証?
0324デフォルトの名無しさんNGNG
>>323
組み込みの演算子での評価は0か1のみ。なので保証されてる。
0325デフォルトの名無しさんNGNG
>>324
なるほど、サンクス。
0326デフォルトの名無しさんNGNG
printf("%d",(a<b));
この結果って0か0以外だろ。
必ず1が返ってくるってのは間違い。
0327デフォルトの名無しさんNGNG
>>326
JIS X3010:2003の63ページを読め。
0328309NGNG
この前のやつを改良してみた
#include<stdio.h>

int main(void)
{
unsigned int h,m,s;
unsigned long int in;

printf("InputTime>>>");
scanf("%ld",&in);
s=in%60;
m=in/60%60;
h=in/3600;

if(m<10 && s<10)
printf("%d:0%d:0%d\n",h,m,s);
else if(m<10)
printf("%d:0%d:%d\n",h,m,s);
else if(s<10)
printf("%d:%d:0%d\n",h,m,s);
else
printf("%d:%d:%d\n",h,m,s);
return 0;
}
~

聞きたいんだけど数字の前に0って入れれないの?
例えば4なら桁合わせのために04とか
教えてプリーズ それと問題くれよぉ〜〜
上の訂正やこうしたら? 見たいなのあったらそれもプリーズ
0329デフォルトの名無しさんNGNG
%02d
0330309NGNG
>>329
あ ごめんなさい
全然忘れてました 氏んできます
0331デフォルトの名無しさんNGNG
>>328
時間の問題が気に入っているなら、こんなのはどうだ。

※某サイトより転載
>UNIX系OSをはじめ、Windowsなどその他様々なプログラムでも使われている
>C言語ですが、このC言語の標準的な日付関数にtime_t型が使われています。
>このtime_tは、(UNIXが1972年に開発されたことにちなみ)1970年1月1日0時
>からの経過時間(秒)を、32ビットの2進法で表します。

time_t 型の値から年月日及び時間(秒まで)を求めよ、ってのは?
0332デフォルトの名無しさんNGNG
>>309
>>277を解説してくれ。
0333309NGNG
>>331
サンクス
オッシャーーーーー 挑戦してみます
ちなみに閏年って世界共通だよね?・・・
2000年も閏年ってあったっけ? 何百年か何千年かに一度ないとかなかったっけ?

>>332
せつめいしてくれと言われましても・・・
書いた人に聞いてくださいw
0334デフォルトの名無しさんNGNG
>>333
>2000年も閏年ってあったっけ? 何百年か何千年かに一度ないとかなかったっけ?

そういう落とし穴がありまくり。
がんがってくれ。
0335デフォルトの名無しさんNGNG
>閏年
グレゴリオ暦は閏年を、西暦年が4で割りきれる年、
ただし西暦年が100で割りきれても、400で割りきれない西暦年は平年としている。

Microsoft(R) Encarta(R) Reference Library 2003. (C) 1993-2002 Microsoft Corporation. All rights reserved.
だそうです。
0336デフォルトの名無しさんNGNG
csvファイルに書かれている任意の列を読み込むプログラムを教えていただきたいです。
例えば、***.exe 3 4
という具合で引数にcsvの3列目、4列目と指定する感じです。
0337デフォルトの名無しさんNGNG
↑間違えました。
***.exe ***.csv 3 4
といった感じです。
0338デフォルトの名無しさんNGNG
>>336
sed.exe -n -e '3,4p'
とか
awk.exe 'NR >= 3 && NR <= 4 {print;}'
とか?
0339336NGNG
>>338
336ですが、すべてCプログラムで処理させたいです。
コマンドラインで実行する際は、引数にCSVファイル名と読み込む列を与えるイメージです。
CSVファイルのすべての行にたいして指定した列を読み込むにはどうしたらよいかがわかりません。
「,の数」とかで処理させるのですか?
0340デフォルトの名無しさんNGNG
それは列じゃなくて桁(カラム)じゃないのか?
取り敢えず、数値だけのシンプルなcsvで、カラム固定でいいなら、
fgets()で1行取り込んでsscanf(buf, "%*d,%*d,%d,%d", &col3, &col4)って感じかな。
0341デフォルトの名無しさんNGNG
1.ファイルのn行目のデータを出力するプログラムを作れ.
2.あるCSVの一行分のデータに対して、gettokenを利用して1データごとに分けるプログラムを作れ.
3.組み合わせろ

char data[]="aho,baka,manuke";
char *token;

token=gettoken(data,",");
do{
printf("%s",token);
token=gettoken(NULL,",");
}while(token!=NULL);

適当なんで動くか知らないが
0342デフォルトの名無しさんNGNG
>>340
列=カラム かと思われますが

>>341
gettoken()って何?strtok()のこと?
0343309NGNG
>>331
考えてたのに調べたら

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

int main(void)
{
time_t timer;
time(&timer);

printf("%s\n", ctime(&timer));

return 0;
}

これで行けるんだってさ 関数あるのかよ・・・ ショボーーーン

次の問題プリーズ
0344デフォルトの名無しさんNGNG
>>336
int int_comp(const int *x, const int *y) { return *x - *y; }
int getcolumn(char *src, int *columns, int ncolumns, char **results)
{
    char *current_token;
    int token_number = 0;
    int *current_number = columns;
    qsort(columns, ncolumns, sizeof (int), &int_comp);
    for (current_token = strtok(src, ","); current_token != NULL; current_token = strtok(NULL, ",")) {
        if (current_number - columns >= ncolumns)
            break;
        if (++token_number == *current_number) {
            *results++ = current_token;
            current_number++;
        }
    }
    return current_number - columns;
}

こんな感じでどう?

srcにCSVファイルから1行づつ読んでそれを渡す。 strtokをこれに直接適用するので、
srcの指す文字列は書換えられる。
columnsは取り出したい列の番号を保持するintの配列。処理の都合上この配列をソートするので、
この配列も書換えられる。同一の数字が複数含まれていると、正常に動作しないはず。
ncolumnsはcolumnsの要素数。
resultsはchar*の配列。ここに指定された列へのポインタを書き込む。必要なサイズは呼出し側が
判っているはずなので、きちんと用意すること。

mainは面倒なので適当にでっちあげて。
0345デフォルトの名無しさんNGNG
>>344
アドバイスありがとうございます。
まだ見たばかりで理解し切れていないですがやってみます。
助かります。
0346336NGNG
たびたびすみません。
読み込むCSVで指定した文字列の行だけ取り出すにはどうするのでしょうか?
例えば「***.exe ***.csv 文字列」
としたとき***.csvをfgetsで読み込んで、指定文字列の入っている行だけ取り出す方法です。


0347デフォルトの名無しさんNGNG
>>346
>340は読んだ?

指定文字列の入っている行だけ取り出すには、fgets()で読んだ行を
strstr(行バッファ, 検索文字列)すればいい。
0348デフォルトの名無しさんNGNG
もうマルチはしちゃだめだよ。
0349デフォルトの名無しさんNGNG
良スレ保守。
0350デフォルトの名無しさんNGNG
乱数表示プログラム教えて下さい
0351デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
srand(time(NULL));
printf("%d", rand());
return 0;
}
0352デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void) {
printf("乱数");
return 0
}
0353デフォルトの名無しさんNGNG
>>352
絶対誰かやると思った
0354デフォルトの名無しさんNGNG
しかもエラーだし
0355353NGNG
>>354
ほんとだreturnが終ってないw
0356デフォルトの名無しさんNGNG
文字列(半角10文字以下・dogなど)を10回入力、アルファベット順に表示させるものですが、これからどう作ればいいですか?読み込みとかが良く分からないです
/*読み込み*/
for(tate=0;tate<=kaisu;tate++){
for(yoko=0;yoko<=MAX;yoko++){
gets(moji);
moji[tate][yoko]=atoi(moji);
}
}
for(tate=0;tate<kaisu;tate++){
for(yoko=0;yoko<MAX;yoko++){
printf("%s",moji[yoko][tate]);
printf("\n");
}
}
}
/*ソート*/
for(i=0;i<kaisu;i++){
for(j=i+1;j<kaisu;j++){
if(moji[i]>moji[j]){
temp=moji[i];
moji[i]=moji[j];
moji[j]=temp;
}
}
}
/*表示*/
for(i=0;i<kaisu;i++){
printf("%s\n",moji[i]);
}
return(0);
}
0357デフォルトの名無しさんNGNG
>>356
何を言ってるのかは分かるが
下のソースは何?
読み込みはscanfでいいんじゃないの?
0358デフォルトの名無しさんNGNG
>>356
#include <stdio.h>
#include <string.h>
#define KAISU   10
#define MAX    256
void main()
{
  char Moji[ KAISU ][ MAX ];
  char * pMoji[ KAISU ];
  char * p;
  int i,l;
  //文字列取得
  for( i = 0; i < KAISU; i++ ){
    scanf( "%s", Moji[ i ] );
    pMoji[ i ] = Moji[ i ];
  }
  //ソート
  for( i = 0; i < KAISU - 1; i++ ){
    for( l = i + 1; l < KAISU; l++ ){
      if( strcmp( pMoji[ i ], pMoji[ l ] ) > 0 ){
        p = pMoji[ i ];
        pMoji[ i ] = pMoji[ l ];
        pMoji[ l ] = p;
      }
    }
  }
  //表示
  for( i = 0; i < KAISU; i++ ){
    printf( "%2d:%s\n", i, pMoji[ i ] );
  }
}
0359 NGNG
別にあるdesolveを使って計算をしたいのですがエラーがでてしまいます。
incompatible type for argument 4 of `desolve'
間違っているポイントを教えてください
#include <stdio.h>
#include <math.h>
#define dx 0.001
#define NUM 100
void desolve(double t, double dt, int nx, double *u,
double a, double b, double k, int bc, int final);
int main(void)
{
double t = 0;
double dt = 0.001;
int nx = 100;
double u0;
double a = 0;
double b = 1;
double k = 1 / 6;
int bc = 0;
int final = 0;
real x = 0;
u0 = 0.3 * (sin(M_PI * x) + sin(2 * M_PI * x) + sin(3 * M_PI * x));
while (x < 10)
{
desolve(t,dt,nx,u0,a,b,k,bc,final);
printf("%f \n", u0);
x += dt;
}
return(0);
}
0360デフォルトの名無しさんNGNG
double* u = u0;
0361 NGNG
すいません
もう少し詳しくお願いします
0362デフォルトの名無しさんNGNG
>>359
エラーメッセージ嫁
desolveの4番目の引数の型がちがう
0363 NGNG
わかりました
ありがとうございました
0364デフォルトの名無しさんNGNG
この実習では、マルチスレッド プログラムの要素について確認します。 以下のプログラムはマルチスレッド アプリケーションです。
PulseEvent 関数は、指定したイベントをセットして待ち状態のスレッドの実行を開始します。その後、イベントをリセットします。

#include <process.h>

TCHAR szBuf[256];
HANDLE hSetEvent;
HANDLE hReadEvent;

VOID MyWorkerThread(LPVOID pv)
{
while( TRUE )
{
::WaitForSingleObject( [ 空欄 1 ], INFINITE );
_getts( szBuf );
PulseEvent( [ 空欄 2 ] );
if( *szBuf == _T('q') )
break;
}
}
0365364続きNGNG

int _tmain(int argc, TCHAR* argv[])
{
hSetEvent = CreateEvent(0, TRUE, FALSE, 0);
hReadEvent = CreateEvent(0, TRUE, FALSE, 0);

_beginthread( [ 空欄 3 ], 0, 0 );

while( TRUE )
{
PulseEvent( hReadEvent );
::WaitForSingleObject( hSetEvent, INFINITE );
if( *szBuf == _T('q') )
break;
_tprintf( "%s\n", szBuf );
}
CloseHandle( hReadEvent );
CloseHandle( hSetEvent );
return 0;
}

Q1:ソースコードの空欄を埋めてください。
Q2:プログラムについて改善すべき点を説明してください。

という問題ですが全然わかりません。教えてください。
0366デフォルトの名無しさんNGNG
>>365
スレッド関係は専門じゃないので自信ないが。
(Q1)
1:hReadEvent 2:hSetEvent 3:MyWorkerThread
(Q2)
メインスレッド側がReadイベントを送信した時点で、
ワーカースレッド側がまだイベント待機状態になっていない場合
イベントが無視され、両スレッドがストップしてしまうので、
イベントがかならず届くような機構(またはタイムアウト処理)が
必要である。

ちなみに PulseEvent( hReadEvent ); を
SetEvent( hReadEvent ); にすると一応ちゃんと動く。
0367364,365NGNG
>>366
ありがとうございます。
助かりました。最高です。
0368デフォルトの名無しさんNGNG
Cでランダムな数字を抽出するにはどのようにすればいいのですか?
時間は使用しないということでおねがいします。
0369デフォルトの名無しさんNGNG
キーボードを1万文字ぐらいでたらめに打ってもらって、
種にすればいいんでない?
0370デフォルトの名無しさんNGNG
>>368
ランダムに並び替えるもので bogosort ってのがあるけど、
アルゴリズムとかは、私には読解できません。
0371デフォルトの名無しさんNGNG
某掲示板過去ログよりコピペ

#include <stdio.h>
#include <conio.h>

void main(void )
{
int Idx = 0;

while(1){
Idx++; /* インクリメント */
if (Idx > 6) Idx = 1; /* 6以上の場合1に戻す */

/* スペースキーが押されたらループ終了 */
if (kbhit() && getch() == 0x20)
break;
}

printf("数値:%d\n",Idx);
}
0372デフォルトの名無しさんNGNG
>>371
なるほど!そういう手がありましたか。ありがとうございます。
0373デフォルトの名無しさんNGNG
なんだ、環境依存で擬似的に時間計ってるのにいいのかよ
0374デフォルトの名無しさんNGNG
* を使って7セグメントLED風のデジタル時計を出すプログラムで、時間情報を取得してから
どうやって表示に反映させたらいいでしょうか?
0375デフォルトの名無しさんNGNG
 333
1   6
1   6
1   6
 444
2   7
2   7
2   7
 555

0:123567
1:67
2:23456
3:34567
4:1467
5:13457
7:123457
8:1234567
9:13467
0376デフォルトの名無しさんNGNG
>>374
ttp://pc2.2ch.net/test/read.cgi/tech/1079331297/515
0377デフォルトの名無しさんNGNG
Cです
#include<stdio.h>
int main(void)
{
int i;
while(i<0 || i>10000){
printf("INPUT DATA> ");
scanf("%d",&i);
if(i<0 || i>10000)
printf("ERROR\n");
}
printf("OK %d\n",i);
return 0;
}

0〜10000以外の数は偽、
記号、文字、空白が1つでも入ってたら偽
また、nullも偽にしたいです
このままだと文字を入力すると無限ループになるんですがどうすればいいですか
0378デフォルトの名無しさんNGNG
>>377
そのnullってのはなんだ?
0379378NGNG
"null"という文字列か?
そういう問題ならscanfは使うな。fgets等で一行読み込んでから調べろ。
0380378NGNG
nullという文字列なら「記号、文字(おそらく数字以外)、空白が1つでも」に引っかかるか。
0381378NGNG
null==空文字列と勝手に判断して書いてみた。ちなみにテストしていない。

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

int main()
{
int i;
char buf[1024];
size_t n;

for(;;printf("ERROR\n")){
printf("INPUT DATA>");
fgets(buf,sizeof buf,stdin);
n=strspn(buf,"0123456789");
if(n==0||buf[n]!='\n'||buf[n]!='\0')
continue;
i=atoi(buf);
if(i>=0&&i<=10000)
break;
}
printf("OK %d\n",i);

return 0;
}
0382377NGNG
すいません席外してて返答できませんでした

>381空白文字列でもERRORって出ますが、通る数を入れてもERROR出ますね
どこ直せばいいですか
0383デフォルトの名無しさんNGNG
>>382
ああ本当だ。
if(n==0||buf[n]!='\n'||buf[n]!='\0')
を
if(n==0||buf[n]!='\n'&&buf[n]!='\0')
に変更
0384377NGNG
>>383
出来ました、ありがとうございました
0385デフォルトの名無しさんNGNG
PDFをページ毎に分割するプログラムをって事を言われたのですが、
これって、どうやったらいいんでしょうか?
Acrobat SDKとやらはダウンロードした(Ver6のヘッダーを)んですが、
使い方がさっぱりです・・・
0386377NGNG
#include <stdio.h>
struct seiseki {//構造体の宣言
int no,sur;
char name[20],hyo[1];
};
int main(void)
{
FILE* fp;
int i;
struct seiseki seito2[3],seito1[3];
for(i = 0; i < 3; i++) {//三人分繰り返す
printf("no >");
scanf("%d", &seito2[i].no);//番号を入力
printf("name >");
scanf("%s", seito2[i].name);//名前を入力
printf("salary >");
scanf("%d", &seito2[i].sur);//給与を入力
printf("point >");
scanf("%s", &seito2[i].hyo);//評価を入力
}//↓続く
0387377NGNG
printf("no name salary point\n");
fp = fopen("alpha.dat", "w");// 書き出し用にファイルを開く
for(i = 0; i < 3; i++) {//三人分繰り返す
fprintf(fp, "%d\n", seito2[i].no);// 番号をファイルに書き出す
fprintf(fp, "%s\n", seito2[i].name);// 名前をファイルに書き出す
fprintf(fp, "%d\n", seito2[i].sur);// 給与をファイルに書き出す
fprintf(fp, "%s\n", seito2[i].hyo);// 評価をファイルに書き出す
}
fp = fopen("no.txt", "r");
for(i = 0; i < 3; i++) {
fgets(seito1[i].no, 5, fp);
fgets(seito1[i].name, 20, fp);
fgets(seito1[i].sur, 5, fp);
fgets(seito1[i].hyo, 1, fp);
}
for(i = 0; i < 3; i++) {//三人分繰り返す
printf("%d %s %d %s\n",seito1[i].no, seito1[i].name, seito1[i].sur, seito1[i].hyo);
}
return 0;
}
書き込めたんですが読み込めません
fgetsのあたりですか?どうなおせばいいんですか
エラーは「34: パラメータ '__s' は signed char * 型として定義されているのでint型は渡せない」
0388デフォルトの名無しさんNGNG
char *fgets(char *s, int n, FILE *f);
0389デフォルトの名無しさんNGNG
intじゃなくてsize_t(符号無し整数型)だYO!
0390377NGNG
あ、わかったです、どうも
0391デフォルトの名無しさんNGNG
>>389
(・3・)アルェー 
ISO/IEC 9899:1993 には int って書いてあるYO!
0392391NGNG
s/1993/1998/ だNE
0393デフォルトの名無しさんNGNG
>>391
(・3・)アルェー
勘違いだったYO!
ごめん。
0394デフォルトの名無しさんNGNG
>>391
s/1993/1999/ だYO!
0395デフォルトの名無しさんNGNG
>>385
PDF は、テキストエディターで読めるから、
ページの区切りの文法とか調べればそれほど難しくないのかも。

Acrobat SDK とかの使いかたは知りません。
0396デフォルトの名無しさんNGNG
* を使って7セグメントLED風のデジタル時計を出すプログラムで、時間情報を取得してから
どうやって表示に反映させたらいいでしょうか?
0397デフォルトの名無しさんNGNG
>>374-375
0398377NGNG
int no,sur;
char name[20],hyo[1];
};
struct seisekih {

char name[20],hyo[1],no[5],sur[5];
};
int main(void)
{
FILE* fp;
int i;
struct seiseki seito2[3];
struct seisekih seito1[3];
for(i = 0; i < 3; i++) {//三人分繰り返す
printf("no >");
scanf("%d", &seito2[i].no);//番号を入力
printf("name >");
scanf("%s", seito2[i].name);//名前を入力
printf("salary >");
scanf("%d", &seito2[i].sur);//給与を入力
printf("point >");
scanf("%s", &seito2[i].hyo);//評価を入力
}
0399377NGNG
printf("no name salary point\n");
fp = fopen("alpha.dat", "w");// 書き出し用にファイルを開く
for(i = 0; i < 3; i++) {//三人分繰り返す
fprintf(fp, "%d\n", seito2[i].no);// 番号をファイルに書き出す
fprintf(fp, "%s\n", seito2[i].name);// 名前をファイルに書き出す
fprintf(fp, "%d\n", seito2[i].sur);// 給与をファイルに書き出す
fprintf(fp, "%s\n", seito2[i].hyo);// 評価をファイルに書き出す
}
fp = fopen("alpha.dat", "r");
for(i = 0; i < 3; i++) {
fgets(seito1[i].no, 5, fp);
fgets(seito1[i].name, 20, fp);
fgets(seito1[i].sur, 5, fp);
fgets(seito1[i].hyo, 1, fp);
}
for(i = 0; i < 3; i++) {//三人分繰り返す
printf("%s %s %s %s\n",seito1[i].no, seito1[i].name, seito1[i].sur, seito1[i].hyo);
}
return 0;
}
ごめんなさい、解ってなかったです
画面に表示するときに文字化けしてしまうんですが、どうすれば
0400デフォルトの名無しさんNGNG
>>399
scanf()でcharの配列に"%d"つかってる。
0401377NGNG
#include <stdio.h>
struct seiseki {//構造体の宣言
int no,sur;
>398の頭の部分が切れてますね、すいません

>>400scanfの方の構造体はnoとsurがint型です、%dでいいですよね
ていうかへぼいプログラムでごめんなさい
0402400NGNG
>>>400scanfの方の構造体はnoとsurがint型です、%dでいいですよね
ソッスネ
seiseki と seisekih があったのか。

charの配列はナル文字('\0')の分も確保しとかないとダメ。
0403377NGNG
>402どうもです、
配列の数を1ずつ増やしたんですが違う字でまだ化けます
0404デフォルトの名無しさんNGNG
knight's tourのc言語版ができません。
ポインタや構造体は使わないで、配列でできるそうです。
お願いします。
0405デフォルトの名無しさんNGNG
>>404
ttp://www.matsusaka-u.ac.jp/~okumura/algo/archive/

ここからalgo.lzhをDLし、解凍したら中にknight.cがある。
0406404NGNG
今度この本買ってきます。
サンクス。
0407377NGNG
ファイルのオープン、クローズをちゃんとやってないのが原因でした
お手数かけました、

>399のようにすると変数表示のたびに改行されてしまうんですが
改行しない方法はありますか
0408デフォルトの名無しさんNGNG
2,000円台のわずかな投資で、大金持ちになりませんか?

ただいま参加メンバー緊急募集中です。

詳しくはこちらから資料をご請求ください。
(HNとメールアドレスだけでOK、自動返信で詳細をお教えします)

http://cool777.heavy.jp/a/a.html
0409デフォルトの名無しさんNGNG
>>407
>"%s %s %s %s\n"
↓
"%s %s %s %s // "
0410377NGNG
no name salary point
12
we
23
e
// 45
rt
67
t
// 12
we
58
u
//
>409サンクス、そのとおりやると↑こんな感じ
もうちょっと試行錯誤してみます、ああ朝だ
0411デフォルトの名無しさんNGNG
>>410
fgets()は改行文字も配列に格納するのはご存知?
0412 NGNG
me_0.0.datには中に文字が書き込まれるのですが
me_1.0.dat以降には中になにも書き込まれません
解決策をお願いします

#include <stdio.h>
#define NUM 100
int main(void)
{
FILE *fp;
char filename[NUM];
double t = 0;
double a = 0;
double dt = 0.001;
while (t < 0.003)
{
sprintf(filename, "me_%.1f.dat", t * 1000);
fp = fopen(filename, "w");
while (a <= 0.05) {



fprintf(fp, "aaa\n");

a += 0.01;

}
t += dt;
}

fclose(fp);
return(0);
}
0413 412NGNG
解決しました
スルーしてください
0414デフォルトの名無しさんNGNG
ログ飛んでいるな。416までしか漏れのには残っていなかったので
他の人補完よろ
*************************************
414 名前: デフォルトの名無しさん :sage 投稿日: 04/03/25 (木) 18:17
このプログラムをコンパイルし実行すると
この部分の数値を入力し
printf("実数を入力して下さい:>");scanf("%1f",&x);
2つ目の
printf("整数を入力して下さい:>");scanf("%d",&n);
を出力した所で処理が終了します。
文法ミスがあると思うのですが、間違っている所を教えて下さい
ソース)
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html#1
415 名前: デフォルトの名無しさん :sage 投稿日: 04/03/25 (木) 18:22
>>414
int power ==> double power
scanf("%1f",&x); ==> scanf("%lf", &x);
416 名前: デフォルトの名無しさん :sage 投稿日: 04/03/25 (木) 18:47
>>415
有難う御座います。
�@double powerに修正
�Ascanf("%lf", &x);(エル)lfに修正
しました。
0415デフォルトの名無しさんNGNG
pc5に移転しましたな
ログは416までしかもっていないので他の人の補完を待ってから
質問したいけど、きっと夜までまたないと補完が無いのでここで質問させてもらいます。
****************************************************

【宿題】 マウスで操作できるキーボードプログラムを作れ
多分、ボタンを26個くらい配置してボタンを押したら [A]を押したキーボードの
イベントを発生させると思うんですが。
あと、その「キーボードを押した」ということがメモ帳とかに伝えられなかったら
意味ないですよね?
0416デフォルトの名無しさんNGNG
>>415
環境依存の問題は対象となる環境を書いてくれないと解答できません
といいつつ別スレに誘導してみる。

【初心者歓迎】C/C++室 Ver.5【環境依存OK】
ttp://pc5.2ch.net/test/read.cgi/tech/1077102238/l50
0417デフォルトの名無しさんNGNG
〔質問〕
二つのバイナリーデータがあり
その二つのバイナリーデータを差分して
一つのビットマップファイルを作れ。
まずどういった関数を使用すべきか?
�@fopen
�A論理演算子(OR,XOR)で差分をとっていいのか?
まずこの場合の差分とは何を意味するのか?
ファイルの受け渡し
新しいファイルを作成する時の処理はどうしたらいいのか?
教えて下さい。
0418デフォルトの名無しさんNGNG
>>417
誰だその問題を作った香具師は?
言語を知らない先生が作りましたか?
それともなんだ、>417の表現が悪いのか?
とりあえず脳内用語はやめれ

「差分する」のgoogle検索結果 49件
http://www.google.co.jp/search?q=%E5%B7%AE%E5%88%86%E3%81%99%E3%82%8B&ie=UTF-8&oe=UTF-8&hl=ja&lr=

どれくらいマイナー用語かと言うと…

「パーソコン」のgoogle検索結果 56件
http://www.google.co.jp/search?q=%E3%83%91%E3%83%BC%E3%82%BD%E3%82%B3%E3%83%B3&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1
0419デフォルトの名無しさんNGNG
>>417
バイナリデータは同じサイズか
この問題でのビットマップファイルの仕様
そもそもどれがおまいの質問で、どれが問題文なのか
などなどわかりません。もちょっと整理して書くがよろし。

ちなみにファイル作るのはfopen()で出来る。
0420デフォルトの名無しさんNGNG
>>418
>「パーソコン」のgoogle検索結果 56件

お前、もしかしてマイナー用語一覧表でも持っているのか?
0421デフォルトの名無しさんNGNG
差分とは何を意味するのかって・・・


知るか!
0422418NGNG
>>420
ああ、持ってる、っていうか、作ってる
8010件「デイスプレイ」
5320件「キイボード」
みたいなみんなで間違えば怖くない用語から

28件「インタネトー」
7件「ブロバティ」
1件「インターネットエクスプロローラー」
みたいなものまで、暇なときに検索しまくり

漏れもひまだなぁ
0423Addicted to C++ ◆nrBjarne.g NGNG
417から419まで

417 名前: 412[] 投稿日:04/03/25 22:02
printf("こん"に"ちわ");
こう入力すると
こんにちわ
と表示されますよね

こん"に"ちわ
と表示させたいのですが
"が表示されません
"をprintf文の中で表示させたいのですが
どのようにすればよいのでしょうか


418 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 22:02
\"

419 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 22:19
>>417
printf("こん"に"ちわ");
ってコンパイル通るのか…?

ウチのVC6はエラー吐くけど。
思わず実験しちゃったよ…。
0424Addicted to C++ ◆nrBjarne.g NGNG
420から423まで

420 名前:デフォルトの名無しさん[] 投稿日:04/03/25 22:19
printfやscanf関数の使い方が載ってるようナ参考書で勉強している
初心者ですがこれをマスターして段々と応用したプログラムが書けるように
なったら本当に色々ソフトって作れるの?訳分からん質問してゴメンちゃい

421 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 22:22
色々つくれるよ


422 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 22:55
>>420
もっと素直に自分の持っている疑問をぶつけてみたら?

例えば、もし printf や scanf でアニメや音声が出せると
思っているのなら、それは間違いだよ。


423 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 22:57
>>420
おまえはもう作っている
0425Addicted to C++ ◆nrBjarne.g NGNG
424 名前: [] 投稿日:04/03/25 23:34
>>417
遅くなりましたがありがとうございました

続けて質問なんですがgnuplotを使って
アニメーションをつくりたいのですがなかなかうまいこといきません

#include <stdio.h>
int main(void)
{
double i;
printf("set terminal x11\n");
for (i = 0; i <= 500; i++) {
printf("gnuplot [0.0:1.0] [-1.0:1.0] \"frame_%.f.dat\" with lines\n", i);

}
printf("pause 10\n");
return(0);
}

このプログラム(aaa.c)をコンパイルして
aaa | gnuplot -
これでいけると思ったのですがうまくいきません

readline: warning: rl_prep_terminal: cannot get terminal settingsgnuplot> ^
invalid command

このようなエラーがファイル数分でてしまうのですが
どこが間違っているのでしょうか
何度も質問すいません
0426デフォルトの名無しさんNGNG
>>422
お前、もしかして文章で飯を喰ってるんじゃないのか?
0427Addicted to C++ ◆nrBjarne.g NGNG
425-427。俺が持ってるのはココまで。他の人補完ヨロ

425 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 23:39
でんでんまとはづれ

gnuplot に
gnuplot [0.0:1.0] [-1.0:1.0] "frame_0.dat" with lines
とかって文字列わたしてるだけ

426 名前: [] 投稿日:04/03/25 23:50
ありがとうございます
plot"frame_0.dat" with lines 
これでできました

では表示する範囲の設定はどのようにすればよいのでしょうか

427 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26 00:35
>>426
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&newwindow=1&q=GNUPLOT%81@C%8C%BE%8C%EA&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0428417NGNG
>>418 419
ttp://www.google.co.jp/search?q=cache:x-axifU0gTQJ:www.microsoft.com/japan/msdn/academic/Articles/Algorithm/03/+%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E3%80%80%E5%B7%AE%E5%88%86&hl=ja&ie=UTF-8
↑差分するのは多分ここのソースのエッジ検出の所にのっている方法だと
ちなみにバイナリーデータは8bitでつ。
ビットマップファイルの仕様は不明でつ。
もうちょっと整理してからでなおしてきまつ。
0429418NGNG
>>426
食ってないって
便乗でC言語の怪しい用語集

393件「サブ関数」
215件「関数副プログラム C言語」
50件「printf命令」(日本語ページ)
30件「ボインタ」
10件「ブリプロセッサ」

怪しい用語はなぜか大学教授が書いた文章に多い…
0430デフォルトの名無しさんNGNG
>>428
バイナリデータが8bit?
1バイトのデータをエッジ検出?
0431デフォルトの名無しさんNGNG
>>429
どっかに専用スレ立てておけ。保存しておく価値がある。
0432デフォルトの名無しさんNGNG
そのうち変わるよ
0433デフォルトの名無しさんNGNG


このプログラムをコンパイルし
実行すると、課題どうりの値が返ってきません。
課題は、「読み込んだ非負の整数値の逆順に表示するプログラムを作成せよ。」
です


ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
0434デフォルトの名無しさんNGNG
>>433
rev_int()のdo-while文の条件式は、tmp > 0でなくてnum > 0が正しい。

# ところで、逆順というのは整数の10進表記をひっくり返すという意味でいいのかな。
# 俺は、幾つかの整数を読み込んで、それを読み込んだ順とは逆に出力することの
# ような気がするのだけど。

# 更に余談。scan_unitではなくscan_uintじゃないのかな。
# 非負の整数を読むのだから、Unsigned INTegerの略だと思うのだけど。
0435デフォルトの名無しさんNGNG
>>434
いつも丁寧に教えて頂き感謝です。
# 俺は、幾つかの整数を読み込んで、それを読み込んだ順とは逆に出力することの
# ような気がするのだけど。
そうです。
# 更に余談。scan_unitではなくscan_uintじゃないのかな。
# 非負の整数を読むのだから、Unsigned INTegerの略だと思うのだけど
今後は変数名をつける際にもっと気をつけます。
有難う御座いました。

0436デフォルトの名無しさんNGNG
>>435
> # 俺は、幾つかの整数を読み込んで、それを読み込んだ順とは逆に出力することの
> # ような気がするのだけど。
> そうです。

意志の疎通って難しいね。。。

1
23
4
567
8
90

を

90
8
567
4
23
1

と表示するのでは、と言っている
0437435NGNG
>>436
ご指摘有難う御座います。
そういう意味ではなく
例えば
558と入力したら、
step 1
tmp=8 num=55
step 2
tmp=85 num=5
step3
tmp=855 num=0
と私は考えていました。
そこら辺が説明不足でした。
いくつかの整数の意味を取り違えてました。
失礼します。
0438デフォルトの名無しさんNGNG
ところで
最後のメインルーチンをreturnで返す時
1.return (0)と括弧をしますか
それとも 
2.return 0;
のように括弧しないどちらが正しいんでしょうか?
個人的には1の方が正しいような気がします。
皆さんどう書きますか?
0439デフォルトの名無しさんNGNG
>>438
EXIT_SUCCESS
EXIT_FAILURE
0440デフォルトの名無しさんNGNG
>>438
上はi=(0);とやっているようなもの。
0441デフォルトの名無しさんNGNG
>438

計算式でreturnするときは () をつけても良いかな
後はつけない
0442デフォルトの名無しさんNGNG
>>438
関数扱いされると嫌なので括弧はつけない
0443デフォルトの名無しさんNGNG
なぜか sizeof には必要ない括弧をつける人が多いね。
0444デフォルトの名無しさんNGNG
なんかマクロっぽいからつい括弧つけちゃうんだよな。> sizeof
ぱっと見、演算子というよりマクロや関数に似ているから括弧つけたほうが可読性がよくなる気がする。まぁ慣れだろうが。
実際、関数だと思ってコーディングしても問題になることはほとんど無いし。
0445デフォルトの名無しさんNGNG
>>443
ナニー!!
sizeofに括弧はいらないのか…。
知らなかったよ…。
0446デフォルトの名無しさんNGNG
int a;
sizeof(int); /* 括弧必要 */
sizeof a; /* 括弧不要 */
0447デフォルトの名無しさんNGNG
sizeofは歴史的に優先順位の混乱があったからつけておくべきかと
それに>>446にもあるとおり文法が微妙だからってのもあるしね
0448デフォルトの名無しさんNGNG
sizeof ((((((((((((((((((((((T * T)))))))))))))))))))
0449デフォルトの名無しさんNGNG
(((((((((((((((゚Д゚))))))))))))))) ガクガクブルブル
0450デフォルトの名無しさんNGNG
誰か宿題だせよな・・・・全く・・・
0451デフォルトの名無しさんNGNG
sizeof(sizeof(sizeof(sizeof(sizeof(sizeof(int(*)()))))))
0452デフォルトの名無しさんNGNG
>>445
型のサイズを知りたいときはsizeof キャスト式という構文をとるから括弧が必要というだけ。
0453デフォルトの名無しさんNGNG
>>452
キャストは式ではない、演算子だ

>sizeof キャスト式という構文をとるから
とらない
文法はこのとおり

unary-expression:
   sizeof unary-expression
   sizeof ( type-name )

cast-expression:
   unary-expression
   ( type-name ) cast-expression
0454デフォルトの名無しさんNGNG
『キーボードから数値を入力して、その平方根を求めるプログラムを作成しなさい』
と、言う問題だったので作ってみたんですが
どんな数値を入力しても「0.0000000000」と出てしまうんです
どこが間違ってるでしょうか?

#include <stdio.h>
#include <math.h>
void main(void)
{
double x;

scanf("%1f",&x);

printf("%14.10f \n",sqrt(x));
}
0455デフォルトの名無しさんNGNG
>>454
scanf("%lf", &x);
0456デフォルトの名無しさんNGNG
>>454
> scanf("%1f",&x);

参考にした本を1文字ずつ一度見直すと吉。
0457454NGNG
>>455
>>456
ありがとうございます
ちょっと恥ずかしい
0458デフォルトの名無しさんNGNG
「C(gcc) で、コマンドの引数として アルファベット1文字 受け取って
 a〜z と A〜Z と比較して引数がどの文字だったか判定しなさい。」
比較部分はどうやったらいいですか?
int main(int argc, char *argv[]) としておいて、
argv[1] と a b c ... A B C ... を strcmp で比較しようと思ったのですが、
char small[27][1]={"a","b", ... "z"}; として、strcmp(arg[1],small[i]) だと、
1文字だけでは無くて、abc...z とか bcd...z と比較することになってしまいます。
0459デフォルトの名無しさんNGNG
if ('a' <= argv[1][0] && argv[1][0] <= 'z')
...
0460458NGNG
>>459
ありがとうございました。
なんか、面倒というか余計なことやってたんですね、私。
0461デフォルトの名無しさんNGNG
>>458
char *s;

if (argc == 2 && (s = strchr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", *argv[1])) != NULL)
printf("%c(%s)\n", toupper(*s), isupper(*s) ? "UPPER":"LOWER");
0462デフォルトの名無しさんNGNG
>>459
処理系依存。
0463デフォルトの名無しさんNGNG
>>458
const char *s = "abcdefghijklmnopqrstuvwxyz";
int i;
for (i = 0; s[i] != '\0'; i++) {
if (argv[1][0] == s[i]) { printf("argument is %c\n", argv[1][0]); break; }
if (argv[1][0] == toupper(s[i])) { printf("argument is %c\n", argv[1][0]); break; }
}
0464デフォルトの名無しさんNGNG
日立の この期なんの気?機になる機になる
の歌が出来た由来を教えてください。
0465デフォルトの名無しさんNGNG
>>464
>歌が出来た由来

小林亜星の腹が減った為に作られました。
0466デフォルトの名無しさんNGNG
>>462
ネタですよね?
0467デフォルトの名無しさんNGNG
>>466
例えばEBCDICはアルファベットが連続しない。
0468デフォルトの名無しさんNGNG
>char small[27][1]={"a","b", ... "z"}; として、strcmp(arg[1],small[i]) だと、
>1文字だけでは無くて、abc...z とか bcd...z と比較することになってしまいます。

なかなか微妙なバグだね(たまたま偶然落ちずに動いているって奴)
small[27][2]に汁
0469デフォルトの名無しさんNGNG
>>466
連続が保証されているのは数字だけ
0470デフォルトの名無しさんNGNG
つーかさ、>458の環境、ASCII限定で全然問題なかろう?
0471デフォルトの名無しさんNGNG
C言語のソースファイルを読み込み、出現する識別子を1行に1つずつ出力するプログラムを書け。
ただし、予約語は含めないこと。コメントや文字列はスキップすること。

C言語です、おねがいします。
0472デフォルトの名無しさんNGNG
>>471
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=52
C99対応。
0473458NGNG
みなさんレスありがとうございました。
small[27][2] で判定できるようになりました。
0474デフォルトの名無しさんNGNG
>>472 ありがとうございます。

大きなプログラムになるのですね。感謝します。
課題文に含まれていない、
16進数(例えば、0xabcd)などは、プログラムでは対応していない。
#include <stdio.h> はinclude stdio h という3つの識別を得る。
などと説明書きを入れて、提出することにします。
0475デフォルトの名無しさんNGNG
ある関数のパラメータに配列を渡してやって
その配列のサイズを知る方法教えてください。
何度やっても4にしかならなくて・・・
0476 ◆H0824hril6 NGNG
#include<stdio.h>
main(){
double a,b,x;
double step;

printf("Input a>");
scanf("%lf",&a);
printf("Input b>");
scanf("%lf",&b);

step = 0.2;
for(x=a; x<=b; x+=step){
printf("TEST:%lf\n",x);
}
exit(0);
}

下につづきます
0477 ◆H0824hril6 NGNG
入力したa,b(double型)の範囲を0.2ずつ増やすプログラムです。
a,bのいずれかに「絶対値が3以上の数」を代入すると、最後に出力される
数が"b-0.2"になってしまいます。具体的には、
a=0, b=1
TEST:0.00000
TEST:0.20000
TEST:0.40000
TEST:0.60000
TEST:0.80000
TEST:1.00000

a_2, b=3
TEST:2.00000
TEST:2.20000
TEST:2.40000
TEST:2.60000
TEST:2.80000

といった感じです。どこがおかしいのかご指摘お願いします。
0478デフォルトの名無しさんNGNG
>>477
double型の大小比較はループでは御法度だ。
int型で比較・ループするようにする。x,a,bは
そのループ変数から計算して導く。
0479 ◆H0824hril6 NGNG
>>478
>double型の大小比較はループでは御法度だ。
なぜ御法度なのですか?手元の参考書を見ても、それに関することが書いてありません…。
0480デフォルトの名無しさんNGNG
>>479
精度の問題と実数型の変数は整数値を正しく保持できない場合があるから。





で、あってる?

電卓で1/10*10=1 になるのはおかしい、とかいう話を聞かされた記憶があるのう。

0481デフォルトの名無しさんNGNG
>>479
ttp://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/c/C-faq/C-faq-14.html#14.1
当たりと、丸め誤差の問題だね。
0482デフォルトの名無しさんNGNG
>>479
ちなみに、IEEE754に準拠している浮動小数点なら、小数点以下
を一切使用しなければ正しい比較ができる。

小数点以下を使用していても、0.5のべき乗(0.25、0.125・・・・)なら
正しく比較ができる。

今回のように0.1とか0.2のような、二進数では循環小数となる数
の比較・連続加算では誤差が累積して意図した動作をしなくなる
可能性が大きい。
0483デフォルトの名無しさんNGNG
>小数点以下を使用していても、0.5のべき乗(0.25、0.125・・・・)なら
>正しく比較ができる。

もちろん無限の精度があるわけではないのでどこかで頭打ちには
なるけどね。
0484 ◆H0824hril6 NGNG
>>780-783
みなさん、ありがとうございます。
次の講義が始まってしまうので、また家に帰ってから考えます。
ありがとうございました。
0485デフォルトの名無しさんNGNG
>>475 その"ある関数"に配列の大きさも渡せ(w
0486デフォルトの名無しさんNGNG
>475 ワロタ
sizeof(ポインタ)が藻前の環境だと4って事だNe
0487デフォルトの名無しさんNGNG
文字列ならstrlen(s) + 1になるがね。
0488デフォルトの名無しさんNGNG
Cでwavファイルを読み込み、波形を表示する…。なんてCだけでできます?
0489デフォルトの名無しさんNGNG
>488
波形表示が

*      *
 *     **
  *   * *
  *  *  ***
  ** *    *
   **     **

みたいな感じになってもよければ可能。
漏れは激しくやりたくない。
0490デフォルトの名無しさんNGNG

http://pc5.2ch.net/test/read.cgi/tech/996171508/l50
あたりで聞いたら?
0491デフォルトの名無しさんNGNG
>>489 やっぱりC++にしないとキツイですよね…。 そっちでのやり方を調べて来ます。ありがとうございました。
0492デフォルトの名無しさんNGNG
>>488は何かを激しく勘違いしてる悪寒。
0493デフォルトの名無しさんNGNG
>>491
グラフィックライブラリが充実してなければC++にしたって同じ。
 →波形表示
あと、wavといってもフォーマットがいろいろあるから、全部に対応するのは
かなり大変。少なくとも俺には無理。
0494デフォルトの名無しさんNGNG
>>491
DirectXを使ってバッファ表示をすればいいんでないの?
0495デフォルトの名無しさんNGNG
>>479
int main(void){
   int i=0;
   double num=.0;
   unsigned short *p=(unsigned short*)#

   while (i<10){
       printf("%2d: %2.18lf ",++i,num+=1./10.);
       printf("[%04x %04x %04x %04x]\n",*(p+3),*(p+2),*(p+1),*p);
   }

   return 0;
}

これ回してみるといいよ。
0496デフォルトの名無しさんNGNG
200個の(10.0、100.0)の乱数(float type,小数点)生成しAで始まる長さ8文字の通し番号、乱数、(該当乱数ー乱数全体の平均値)+100、乱数全体における順位を出力するプログラムを教えてください。お願いします。
0497デフォルトの名無しさんNGNG
>>496
君の場合は、問題文は要約せず、まんま書いてくれ。
0498デフォルトの名無しさんNGNG
>Aで始まる長さ8文字の通し番号
A0000001〜A0000200って事か?
0499デフォルトの名無しさんNGNG
NO. 乱数値 偏差値  順位
A0000001  50.12        153
A0000002 90.31 16
.
.
乱数値の生成、偏差値の計算、順位の並びをそれぞれの関数で表しなさい。
偏差値は(該当乱数ー乱数全体の平均値)+100です。
0500デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1081864637&res=1

よろしくお願いします。
0501デフォルトの名無しさんNGNG
>>500
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1081864637_2/t.c
あんまり綺麗じゃないけど、許せ。
つか「年頭からの通算日数」ってなに?
一月一日のとき、通算日数は0?1?
とりあえず0の方が書き易かったから、そっちだと仮定したよ。
0502デフォルトの名無しさんNGNG
>>501
きれいじゃないとか
そういう次元のもんだいじゃねーな
0503デフォルトの名無しさんNGNG
>496,499 の問題だが、
順位はソートする以外に算出不可能か?
つーか、もれはソートする以外思い浮かばなかった...
0504デフォルトの名無しさんNGNG
>>501
9行目の
t.c:9: error: `conststaticintdaysOfMonth' undeclared (first use in this function)
は直したとしてもだ、

C:\>gcc t.c
t.c: In function `main':
t.c:36: error: `year' undeclared (first use in this function)
t.c:36: error: (Each undeclared identifier is reported only once
t.c:36: error: for each function it appears in.)


こーなるんだよ
0505デフォルトの名無しさんNGNG
>>500,504
スマソ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1081864637_3/t.c
0506デフォルトの名無しさんNGNG
突っ込みどころ満載だが。
static const char * const month_name[];
にすべきだし、cじゃないし、無駄な定数はあるし、関数名は変だし、書き方汚いし……
0507デフォルトの名無しさんNGNG
>>506
すみません、提出しても恥ずかしくない解答に修正(もしくは新規作成)していただけませんでしょうか。
よろしくお願いします。
0508デフォルトの名無しさんNGNG
教えてください(Cです)

2つの引数として与えた2つの文字列p、qの先頭から一致する部分の長さを返す関数を書いて、実際に動作させろ。
って問題なんですけど、文字列とかがどうもよく分かりません。一応以下のように書いたのですが、動きませんでした。

#include<stdio.h>
#define N 15

int string_prefix( char *p , char *q )
{
int i;
for( i = 0 ; i < 15 ; i++ )
{
if( (p[i] != q[i]) || (p[i]=="\0") || (q[i]=="\0") )
break;
}
return i+1;
}

main()
{
int i;
char p[N] , q[N] ;
scanf("%s", *p );
scanf("%s", *q );
printf( "%d\n",string_prefix(p,q) );
}
0509デフォルトの名無しさんNGNG
scanf("%s", *p) --> scanf("%s", p)
qも
0510508NGNG
実行例としては、humanとhumateと入れた場合は、
4が返ってくるようにしたいです。
0511デフォルトの名無しさんNGNG
"\0" --> '\0'
0512508NGNG
動くようになりました。
素早い回答ありがとうございます。
0513デフォルトの名無しさんNGNG
宿題やってください。宜しくお願いします。

-数字をdecimal, octal(0から始まるとoctalと認識), hexadecimal(0xか0Xで始まるとhexと認識)のいずれかで入力します。
符号も受け付けます。(スペースが入力されると無視して、エンターが押されるまで入力を受け付けます。)

-入力された数字をdecimal, binary, octal, hexadecimal
のいずれかに変換して表示します。


-なお、メニューの関数以外はprintf,scanf等を使わないで、putchar,getcharを使います。
atoiなどはメニューの関数とint getInteger()以外は使用可です。

(続き↓)
0514デフォルトの名無しさんNGNG
-下のプロトタイプを使う事。
/*
base.c
Inputs and displays integer values in selected bases.
- input bases are decimal, octal, hexadecimal.
- display bases are decimal, octal, hexadecimal, and binary.
*/

#include <ctype.h>
#include <stdio.h>
#include <string.h>
/* no other #include statements are allowed */

#define MAXCHARS 34 /* maximum length of value string, in chars */

/* enumeration constants to identify menu choices */
enum choice { enter, decimal, octal, hex, binary, quit };

/* prototypes for required functions */
enum choice menu(void);
int getInteger(void);
void putDecimal(int value);
void putOctal(int value);
void putHex(int value);
void putBinary(int value);

/* optional: any other function prototypes */

/* implement main, followed by the other functions */

お願いします。
0515デフォルトの名無しさんNGNG
文字列を入力して頭の文字が数の場合は、次に数以外の文字が
出てくるまでの数字を返すプログラムを作りたいんですけど、
どうすれば良いですか?
0516デフォルトの名無しさんNGNG
↑書くの忘れてましたが、C言語です。宜しくお願いします。
0517デフォルトの名無しさんNGNG
>>515
strtod()について調べると幸せになれるかもしれません
0518デフォルトの名無しさんNGNG
n(0〜3)に対して(nの値、11×256^n)が表示されるように完成させてください。
 ※ポインタ演算、cast、間接演算子を用いてください。乗算は使用禁止です。

include <stdio.h>
int main( void )
{
int ai[3] = {10, 11, 12};

for( n=0; n<4; n++ ){
printf( "%d,%d\n", n, _________________);
}

よろしくお願いします。
0519515NGNG
strtod()に関して調べ、書いてみましたが出来ませんでした。
どこが駄目ですか?
#include<stdio.h>
#include<stdlib.h>
main(){
     char *s , *stop ;
double x ;
s = getchar();
x = strtod( s , &stop );
printf("%e",x );
}
0520デフォルトの名無しさんNGNG
>>518
*(int *)((char *)(ai + 1) - n)
解っていると思うが環境依存。
0521デフォルトの名無しさんNGNG
>>519
文字列を取るならfgets()とか使う。

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

int main(void)
{
 char buf[BUFSIZ];
 char *stop;
 double d;

 fgets(buf,BUFSIZ,stdin);

 d = strtod(buf,&stop);
 printf("%e\n",d);

 return 0;
}
0522デフォルトの名無しさんNGNG
このプログラムの実行結果で最後の Size of double*型が 4になる理由を教えて下さいな


#include <stdio.h>

int main(void)
{
int *ptr;
ptr = &value;

printf("Size of int 型 :%d\n", (unsigned)sizeof(int));
printf("Size of int *型 :%d\n", (unsigned)sizeof(int *));

printf("Size of double 型 :%d\n", (unsigned)sizeof(double));
printf("Size of double *型 :%d\n", (unsigned)sizeof(double *));

return 0;
}
0523デフォルトの名無しさんNGNG
>>522
おまいが32bitなマシンを使ってるからです。
0524デフォルトの名無しさんNGNG
>>514
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=53
0525デフォルトの名無しさんNGNG
>>524
物凄く早い回答ありがとうございました!
ちゃんと動くものをこんな短時間でなんて、、ほんと驚きです、、、
助かりました。どうもありがとうございました。
0526デフォルトの名無しさんNGNG
>>518
どうもありがとうございました。
今日はよく眠れそうです。
0527デフォルトの名無しさんNGNG
アルゴリズムの講義で有限の整数列の部分和の最大値を求めるプログラムをC言語で作成する宿題がでました。
O(n)の解も求めなければなりません。
よろしくお願いします。
0528デフォルトの名無しさんNGNG
>>527
すこしくらい自分でやれYO!
0529デフォルトの名無しさんNGNG
>>527
僕は頭悪いから言ってる意味がプーだYO!
宿題なんてやらなくたって・・授業なんて出なくたって・・・成績がCになりますた orz
0530デフォルトの名無しさんNGNG
>>527
あいまいすぎてわかんないYO!
0531デフォルトの名無しさんNGNG
>>527
1)整数列とは具体的な例を2〜3挙げてくれ。
2)整数列の指示方法(入力方法)はどうするのか、教えてくれ。
0532435NGNG
【_】アンダーバー文字をキー送信したいのですが
0533デフォルトの名無しさんNGNG
ポインタで三次元の配列って?
0534デフォルトの名無しさんNGNG
ポインタのポインタって?
0535デフォルトの名無しさんNGNG
ポインタって?
0536デフォルトの名無しさんNGNG
って?
0537デフォルトの名無しさんNGNG
ポインタのポインタのポインタって?
0538デフォルトの名無しさんNGNG
ボインたん(;´Д`)ハァハァ
0539デフォルトの名無しさんNGNG
ぽるじょあ召喚!!!!
0540ぽるじょあ ◆L9tzkMG4Fo NGNG
(・e・)ホェー
ポインタは簡単だYO!
0541435NGNG
>>540
先生 半角文字アンダーラインを
keybd_eventする方法教えてくださいよー お願いします
0542デフォルトの名無しさんNGNG
long *ptr;
ptr++;
で4バイト進むのはわかる。

しかし ptr += 0x001;
で4バイト進んでしまうというのはつい最近知った。
(10年間しらずにいた)ぽるじょあさん知ってた?

ストラクチャ型のポインタも+=1でストラクチャのサイズ分
進んでしまうのですよね?
0543デフォルトの名無しさんNGNG
>>542
>long *ptr;
>ptr++;
>で4バイト進むのはわかる。

sizeof(long)分進む
0544デフォルトの名無しさんNGNG
int *a;のとき、
a[i]と*(a+i)が等価だと知らなかったのか。

0545デフォルトの名無しさんNGNG
>>542
知らない方がおかしいと思われ。
なんで構造体を特別視するか解らんが、全部同じだ。
0546デフォルトの名無しさんNGNG
ptr++;の++が何をするための演算子か分かってないんじゃねーの?
0547デフォルトの名無しさんNGNG
下痢を治すための演算子
0548デフォルトの名無しさんNGNG
せーくるのための演算子。

ぴゅっ
0549デフォルトの名無しさんNGNG
キーボードから整数(1〜50の範囲)を入力させ、
2からその整数までのあいだの素数を求めるプログラムを作成しなさい。


お願いします。
0550デフォルトの名無しさんNGNG
++って、クラスのことじゃないの?
0551デフォルトの名無しさんNGNG
>>549
int primetab[] = {0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0};
int t, i;
scanf("%d", &t);
for(i = 2; i < t; i++) if(primetab[i]) printf("%d", i);
0552527NGNG
>>531
レスありがとうございます。

1)整数列とは具体的な例を2〜3挙げてくれ。
3,-5,2,12,543,-342,4,-12,・・・・
のようなランダムな数列です。昇順にも降順にもなっていません。
正の数も負の数も含まれます。

5,5,5,5,・・・・
このような正の数だけで構成された数列も考えられますが、この場合の最大値は初項から末項まで足したものとなります。

2)整数列の指示方法(入力方法)はどうするのか、教えてくれ。
整数列がすでに配列に格納してあるとして下さい。
int a[8] = {3,-5,2,12,543,-342,4,-12};のように。

自分で少し考えたのですが、数列の始めと終わりの両方から攻めていくのが良いのではないかと思いました。
よろしくお願いします。
0553デフォルトの名無しさんNGNG
すみませんが>>500をCでやってもらえないでしょうか?
よろしくお願いします。
0554デフォルトの名無しさんNGNG
>>553
>>505
0555デフォルトの名無しさんNGNG
>>506なんでもういちど頼んだんですが・・・
0556デフォルトの名無しさんNGNG
>>552
部分和ってなんだ?
0557デフォルトの名無しさんNGNG
>>556
http://www.google.co.jp/search?q=%E9%83%A8%E5%88%86%E5%92%8C%E3%81%A8%E3%81%AF&sourceid=opera&num=0&ie=utf-8&oe=utf-8
0558デフォルトの名無しさんNGNG
>>555
あなたの感性にあわせて書き換えればよろしい
0559デフォルトの名無しさんNGNG
>>557
どうも
やばいな・・勉強しなきゃ
0560デフォルトの名無しさんNGNG
>>552
まあ普通にやればO(N^2)になるだろね。
0561デフォルトの名無しさんNGNG
>>552
じゃなかった、O(N)ですた。Sn-1からSnを求めるのに、わざわざ
Sn-1から求め直す必要ないし。
0562デフォルトの名無しさんNGNG
とりあえず、部分和を順に全部求め、最大値を割り出す、でお茶を濁すとか。
0563デフォルトの名無しさんNGNG
んー、よくわからないんだけど、こういうのを求めればいいわけ?

int i,sum,n,max,a[8] = {3,-5,2,12,543,-342,4,-12};
n = sum = max = 0;
for(i=0;i<8;i++) {
sum += a[i];
if ( sum > max) {
max = sum;
n = i;
}
}

0564デフォルトの名無しさんNGNG
>>563
n=iて何?
0565デフォルトの名無しさんNGNG
>>564
出力用と思われ。
0566527NGNG
皆さんありがとうございます。

>>563
そんな感じですが、部分和の始まりは初項とは限らないようです。
int a[8] = {3,-5,2,12,543,-342,4,-12};のような数列でしたら、答えは第3項から第5項までの和が答えになるようです。
以上の理由で頭を悩ませています。
0567デフォルトの名無しさんNGNG
>>566
なんだかさっき見たHPの部分和の説明とは違うな。
0568デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void){
int retu[8]={3,-5,2,12,543,-342,4,-12};
int i,j,kei,dai;
dai=kei=0;
for(j=0;j<8;j++){
for(i=j;i<8;i++){
kei=kei+retu[i];
if(kei>dai)
dai=kei;
}
kei=0;
}
printf("%d\n",dai);
return 0;
}

これでどう?
0569デフォルトの名無しさんNGNG
>>566
単純に二重ループにしてみるとか。

#include <stdio.h>

int main() {
int i,j,sum,n,m,max,a[8] = {3,-5,2,12,543,-342,4,-12};
n = m = max = 0;
for(i=0;i<8;i++) {
sum = 0;
for(j=i;j<8;j++) {
sum += a[j];
if ( sum > max) {
max = sum;
n = j + 1;
m = i + 1;
}
}
}
printf("max %d ... %d = %d\n",m,n,max);
return 0;
}
0570568NGNG
ちゃんとどっからどこまでの和とか出したほうがよかったか・・・
ま、いいや。
>>569がやってくれてるっぽいし。
0571デフォルトの名無しさんNGNG
おいおい O(n) だって一点だろ
0572デフォルトの名無しさんNGNG
もう寝るので、O(n)のコードを誰か書いておいて。
0573デフォルトの名無しさんNGNG
マンドクセーのでヒントを晒す {3,-5,2,12,543,-342,4,-12}

[0-0]:3 >> max=3[0-0]
[0-1]:3-5=-2 >> max=3[0-0]
[2-2]:2 >> max=3[0-0]
[2-3]:2+12=14 >> max=14[2-3]
[2-4]:14+543=557 >> max=557[2-4]
[2-5]:557-342=215 >> max=557[2-4]
[2-6]:215+4=219 >> max=557[2-4]
[2-7]:219-12=207 >> max=557[2-4]

>> max=557[2-4]
0574デフォルトの名無しさんNGNG
0(n)ってなんだろ?
0575デフォルトの名無しさんNGNG
>>574
0
0576デフォルトの名無しさんNGNG
>>574 簡単に言うと 配列を1ループるだけで終える
二重ループはO(n^2)
0577デフォルトの名無しさんNGNG
まあ。思考を書いてみる。
(たたき台、プログラムは任せた)
a)
数列すべて負なら、最大値を見つける O(n)

b-1)
数列にプラスの連続、マイナスの連続があるなら、符号ごとでまとめてしまう O(n)
-1, 3,-,4 2, 3, 5, -6, 10, 1, -100
↓
-1, 3, -4, 8, -6, 11, -100

b-2)
最初と最後が負なら、カウントしない。
うまくく言葉にできんが、順番に足していって、負になったらそれより前と後ろは別に計算する。
多分O(n)以下でできる。

b-3)
出来上がったら、O(n^2)のアルゴリズムで検証する
0578デフォルトの名無しさんNGNG
550 :デフォルトの名無しさん :04/04/15 18:56
++って、クラスのことじゃないの?
0579デフォルトの名無しさんNGNG
>>576
>二重ループはO(n^2)
ちょっと誤解を招きそうなんで勝手に補足。

int a = (nとは無関係の定数);
/* O(n) */
for (i = 0; i < a; i++)
  for (j = 0; j < n; j++)
    ...

/* O(n^2) */
for (i = 0; i < n; i++)
  for (j = 0; j < n; j++)
    ...
0580デフォルトの名無しさんNGNG
>>577 >573読め(w
0581527NGNG
皆さんのお陰で一応形になりました。
個人的には完成かと思いますが、何か間違いがあったら指摘して下さい。

#include <stdio.h>
int main(void){
int a[8]={3,-5,2,12,543,-342,4,-12};
int i,sum=0,max=0;
for(i=0;i<8;i++){
sum += a[i];
if ( sum > max ){ max = sum; }
else if ( sum < 0 ){ sum = 0; }
}
printf("%d\n",max);
return 0;
}
0582デフォルトの名無しさんNGNG
全部、負のケースで試してみそ(w
0583デフォルトの名無しさんNGNG
>>582
だなw
>>581
max=0; は max=INT_MIN; にでもしとけ。
0584デフォルトの名無しさんNGNG
>583
>max=INT_MIN

それだけではダメな悪寒
0585デフォルトの名無しさんNGNG
>>584
あら本当だw
abs()でもつかっとくか?
0586ぼるじょあ ◆yBEncckFOU NGNG
>>581
(・3・) エェー 結局2重ループいらなかったのかYO

(・3・) エェー なんでぼるじょあ一匹もいないんだYO
0587ぼるじょあ ◆yBEncckFOU NGNG
(・3・) エェー ぼるじょあは頭悪いから居心地悪くなっちゃったんですYO
0588デフォルトの名無しさんNGNG
>>581
一回目のみ、forの外に書いてはいかがでしょうか

max = a[0];
for(i=1;i<8;i++){
0589デフォルトの名無しさんNGNG
表現がわかりづらかったです。
要するに↓みたく言いたかったんです。失礼しました

#include <stdio.h>
int main(void){
int a[8]={-3,-5,-2,-12,-543,-342,-4,-12};
int i,sum=0,max = a[0]; /* >>581から変更した行 */
for(i=1;i<8;i++){ /* >>581から変更した行 */
sum += a[i];
if ( sum > max ){ max = sum; }
else if ( sum < 0 ){ sum = 0; }
}
printf("%d\n",max);
return 0;
}
0590デフォルトの名無しさんNGNG
>>589
>>582
0591デフォルトの名無しさんNGNG
>>566による指定を追加して、
>>573さんのヒントを参考に書きました。変な所あったら教えてください

#include <stdio.h>
int main(void){
int i,sum,n,m,max,a[8] = {3,-5,2,12,543,-342,4,-12};
int temp;
max = a[0];
sum = 0;
temp = n = m = 0;
for(i = 0; i < 8; i++) {
sum += a[i];
if(sum > max) {
max = sum;
n = temp;
m = i;
}
if(a[i] < 0) {
temp = i + 1;
sum = 0;
}
}
printf("max %d ... %d = %d\n",n+1,m+1,max);
return 0;
}

>>590
全部負の場合、絶対値が最小の要素を求めるようにしたんですが、おかしいですか?
0592590NGNG
>>591
おかしいです。たとえば全部 -1 だとどうなる?
つーかなぜ試さない?

ついでに指摘。
tempいらない。
0593デフォルトの名無しさんNGNG
だからさ、
> sum=0;
がダメだろって
0594デフォルトの名無しさんNGNG
>>586
答えるとき、ついうっかりぼるじょあになるのを忘れてしまう。
0595デフォルトの名無しさんNGNG
あれ、 >>589 のでOKなのでは?
0596デフォルトの名無しさんNGNG
>>591は全部 -1 だとmax 1 ... 1 = -1が出力されて
>>589は全部 -1 だと-1が出力されるね。
間違ってるんが
0597デフォルトの名無しさんNGNG
"が"?
0598デフォルトの名無しさんNGNG
>>589, >>591 よ
int a[8]= {6,-5,2,12,543,-342,4,-12};
で試せw (答えは第1項からになるべき)
0599デフォルトの名無しさんNGNG
なるほど、こりゃダメだ
0600デフォルトの名無しさんNGNG
if( a[i] < 0 ) を if( sum < 0 ) にすればいい?
tempがわからない
0601デフォルトの名無しさんNGNG
そもそもO(n)で解ける証明は?
0602デフォルトの名無しさんNGNG
>601 もまえ、>573 が理解できんのか...かわいそうに(シクシク)
0603大学生NGNG
C++の課題なんですが教えて下さい。
途中までやってみたのですが、どうも
出来ないのでアドバイス下さい。
問題は、キーボード入力した文字列を
逆から表示させるプログラムを作る、です。
#include <stdio.h>

main()
{
 int i=0,l=0,s;
 char a[20],b[20];
 printf("文字列を入力して下さい:\n");
 gets(a);
 while(a[i] != '\0')
{
 s=i++;
}

 for(l=0;l<=s,l++,i;i>=1,i--)
{
  b[l]=a[i-1];
}
b[i]='\0';

printf("%sは逆から%s",&a,b);
}
0604デフォルトの名無しさんNGNG
>>603
まず、どこがC++なのかと小一時間(ry
0605大学生NGNG
C++とかいうの使ってるんですけど、ただのC言語ですかねw
よくわかりませんが…
0606デフォルトの名無しさんNGNG
課題にC++が協調されているならSTL使えとか。
stringのようなクラス作れってことじゃないのか?
0607デフォルトの名無しさんNGNG
strlen()使っちゃいかんのか?
0608デフォルトの名無しさんNGNG
C++(標準ライブラリ)をちゃんと使えってんならこんな感じだろうが

#include <iostream>
#include <iterator>
#include <string>
#include <algorithm>

int main(void) {
std::string str((std::istreambuf_iterator<char>(std::cin)),
std::istreambuf_iterator<char>());
std::copy(str.rbegin(),
str.rend(),
(std::ostream_iterator<char>(std::cout)));
return 0;
}
0609ぼるじょあ ◆yBEncckFOU NGNG
(・3・) エェー 最近B言語を勉強しはじめましたYO
          質問どんとこいですYO
0610デフォルトの名無しさんNGNG
>>603のコードを元にして考えても変なところが多すぎ。
1.aに入力された文字数をsに代入
2.aの文字s個分、逆順にしてbに代入
3.それを表示する
という処理のようだが、おかしな点がありすぎ。

まず、1.には標準ライブラリ関数のstrlenとか使わないの?
使わないにしても、毎回s=i++としているのはムダ以外の何ものでもない。

次に2.だが for(l=0;l<=s,l++,i;i>=1,i--) というのは何よ?
forの構文とカンマ演算子について勉強し直せ。

極めつけは、b[i]='\0';
意味ねえよ。
0611デフォルトの名無しさんNGNG
printf("%rs", str); で逆に出力できろろろろん
0612デフォルトの名無しさんNGNG
printf("%sは逆から%s",&a,b);
なんで &a にするの?
0613初心者NGNG
friend void function2(classname& a)
{
・・・・・・
};

void function1(classname& a)
{
function2(classname& a);

};

というように関数の中の関数に参照でClassを渡したいのですがエラー
がでますC++ではこのようなことはできないんでしょうか?
0614デフォルトの名無しさんNGNG
>>603のCの場合の参考例
まあこれでもいろいろ問題あるんだけど今の学習段階だとこんなもんでしょ
ただし目的が出力だけなんで>>603のように無駄に別の領域にコピーしたりせず
逆順に直に出力するようにしてある

#include <stdio.h>
#include <string.h>

#define BUFMAX 512

int main(void) {
char buf[BUFMAX], *i;
fgets(buf, BUFMAX, stdin);
for (i = buf + strlen(buf) - 1; i >= buf; i--)
putchar(*i);
return 0;
}

>>613
短いんでついでに。
関数呼び出しの際の引数に型名を付けたらいかん。#ついでにその firend は何?
0615大学生NGNG
いろいろありがとうございます。とりあえず、
まだC言語始めたばかりなので
変数やら配列みたいなこと使うらしいですが….
strlenは使用禁止みたいです。
あと、この一題前がstrlen使用禁止で入力した文字数を
数えさせるプログラムの問題だったんで、そのままつか
ってみたんですが…
0616デフォルトの名無しさんNGNG
>>615
>>1の注意点ってところ読んでみ
0617デフォルトの名無しさんNGNG
>>615
とりあえず、おまいのコードをちょっと変更してみた。

#include <stdio.h>

int main()
{
int i,l=0;
char a[20],b[20];
printf("文字列を入力して下さい:\n");
gets(a);
while(a[l] != '\0') l++;
l--;
for(i=0;i<=l;i++) b[i] = a[l-i];
b[i]='\0';
printf("%sは逆から%s",a,b);
return 0;
}
0618大学生NGNG
すみません、気を付けます。
ところで>>617さん、かなり助かりました。恐縮ですが、
while文のl++,l--のところがよくわからないんですが、教えて下さい。
0619デフォルトの名無しさんNGNG
while(a[l] != '\0') l++;
l--;
は、
while(a[l] != '\0'){ l++; }
l--;
と同じことですよ。
ここまではいい?


0620大学生NGNG
いいっす、わかりました。ですが、どうもl++はlを一つずつ増やしてヌル文字
がでたら終わるというのはわかるんですが、l--でなんでへらしてしまうのかが
わかってないっす。なんどもすみません。かなり助かってます。
0621デフォルトの名無しさんNGNG
減らさないとABCD\0→\0DCBAなってしまうでしょ?
0622デフォルトの名無しさんNGNG
>>620
3文字か4文字くらいを入力したと仮定して、変数の値を表示するように改造するか、
紙にでも書いて実行される内容を順番にトレースしてみな。
0623デフォルトの名無しさんNGNG
つーか、個人的にはわざわざl--するようなコーディングは嫌いだが。
0624大学生NGNG
わかりました!たしかにそうなります。ですが、そうするとまた疑問がでて
きたんですが、forのi<=lだとABCD\0→DCBAとなってしまう感じがするんで
すが、最後のヌルの分はどうなるんですか? b[i]='\0'のところでも、最後の
Aの所に\0がかぶってしまう気がします…
0625デフォルトの名無しさんNGNG
for抜けた時にiの値がどうなってるか考えろ
0626デフォルトの名無しさんNGNG
>>624
ABCDと入力したとき、for文に入る段階でlの値はどうなっているか?
0627大学生NGNG
forに入る時は、3だと思います…
0628デフォルトの名無しさんNGNG
>>627
つまり、for文は何度繰り返され、i++が何度実行される?
0629大学生NGNG
i=0,1,2,3ではないんですか??気分的には4までいってほしく感じますが…
0630デフォルトの名無しさんNGNG
>>629
i == 3なら、i <= l (l == 3)の条件は真なので、ループ継続するでしょ?
0631デフォルトの名無しさんNGNG
解らないのなら、素直にprintfつかっとけ。
printf("%d\n",i);
とかw
0632デフォルトの名無しさんNGNG
i<=3 ということは、iが3より小さいか等しい場合にfor文を継続する。
ということは、iが4になってはじめてfor文は終了するってことだ。
0633大学生NGNG
ループの中わわかりました!でも、b[i+1]='\0';ではだめなんですよね…
すみません。
0634大学生NGNG
>>632ということは、4も使われるということですが!?
0635デフォルトの名無しさんNGNG
全然解ってねえだろ
0636大学生NGNG
やっぱ3までですよね…
0637大学生NGNG
新しく入れ換えた、DCBAのAの上にヌル文字を入れている感じがするんです…
0638デフォルトの名無しさんNGNG

for( 初期化; 継続条件; インクリメント) 文
                                       
初期化→継続条件のチェック→真なら→文→インクリメント→継続条件のチェックに戻る
                   →偽なら→終了
0639デフォルトの名無しさんNGNG
グダグダ言ってないで、実行して確かめろ。
0640大学生NGNG
実行してみたら、i+1はできませんでした。多分何かわかってないんですよね。
まじ、すんません。
0641大学生NGNG
forについては、わかりました。ありがとうございます。多分最後のヌルのi
がわかっていないんです。
0642デフォルトの名無しさんNGNG
for(i=0;i<=3;i++){;}
printf("i=%d",i);
実行結果
i=4
0643デフォルトの名無しさんNGNG
for(i=0;i<=3;i++){;}

/*この時点でiは4になっているんだよ〜*/

printf("i=%d",i);
実行結果
i=4
0644デフォルトの名無しさんNGNG
はぁ。特別出血大サービス。
ABCDと入力したとする。
この場合、a[0] == 'A', a[1] == 'B', a[2] == 'C', a[3] == 'D', a[4] == '\0' だ。

while(a[l] != '\0') l++;
により、a[4] が '\0' である場合まで繰り返されるので、l == 4
l--; により、l == 3となる。

for(i=0;i<=l;i++) b[i] = a[l-i];
ここで、b[0] = a[3-0] つまり、b[0] = a[3], b[1] = a[3-1] つまり、a[2]、
以下同様に、b[2] = a[1], b[3] = a[0] となり、このときは、i == 3。
ここで、インクリメント節が実行されてから継続条件の検査が行われるので、
i == 4となり、継続条件 i <= l を満たさなくなり、ループを抜ける。

最後に、b[i] に '\0'を代入する。i == 4なので、b[4] == '\0' 。
最終的に、b[0] == 'D', b[1] == 'C', b[2] == 'B', b[3] == 'A', b[4] == '\0' だ。
0645デフォルトの名無しさんNGNG
>>644
よくそこまで甘やかす気になれるな。
0646大学生NGNG
わかりました!!forを飛び出た時は、i=4なんですね。3だと思ってました!
こんなにわかっていないのに、ここまで付き合って下さってほんとにありがとう
ございました!感激です(涙)
0647デフォルトの名無しさんNGNG
>>646
暇つぶしにはなったよ。
釣りだったのかもしれんが...
0648デフォルトの名無しさんNGNG
ここまでアフォなのも珍しいからな。
0649大学生NGNG
まじ鮮やかにわかったす!!ここまで付き合って下さって
ほんとに感謝してます!またわからなかったら聞きたいんで
お願いいたします。とても、勉強になりやした。
0650大学生NGNG
>>647
まじやさしっすね、釣りの意味がよくわかりませんが…
最近Cを始めてまだ修行が足らんとです。
0651デフォルトの名無しさんNGNG
九州人かw
0652大学生NGNG
愛知っすよー!!二チャンにはあまり来たことないっす。つれは大好きなんすよ!
0653デフォルトの名無しさんNGNG
俺の友達にはこの説明でもわからんだろう奴がいっぱいいる…
0654デフォルトの名無しさんNGNG
二チャンて。
0655デフォルトの名無しさんNGNG
5人の学生の3教科(英語 数学 国語)の点数を2次元配列を用いて処理
するプログラムを自由に作成せよ。
�@科目別の最高点を求める
�A各学生の一教科の平均点を求める。
アルゴリズムを考える所から教えて下さい。
0656デフォルトの名無しさんNGNG
(1)全科目を見ていって最高なものを選ぶ
(2)3教科の点数を足して3で割る
0657デフォルトの名無しさんNGNG
「各学生の一教科の平均点」ってナニ?

各学生の三教科の平均点、
各学生の三教科のサンプルが複数組あって「各学生の一教科の平均点」ってこと、
それとも各教科の平均点。
3つの内のどれよ。
0658デフォルトの名無しさんNGNG
そこまでは分かるんですよ。
�@おそらく
eigo[3][5]
sugaku[3][5]
kokugo[3][5]
の配列を逐次探索する。
�A
3教科の点数の平均を出してそれぞれ表示する。
でもって
先に�@ですが
ここからとまってどうコーディングしていったらいいか分かりません。
すぐに解答を教えない範囲でヒントを教えて下さい。
0659デフォルトの名無しさんNGNG
円周率出すのに
428224593349304/136308121570117
を計算して小数点以下30桁まで出せって問題なんだけど
どうやったら計算できる?
428224593349304を配列に入れて筆算と同じようにすればいいって
言われたんだけどサパーリなんだよね
0660デフォルトの名無しさんNGNG
>>659
つまり私の言ってる事は
本質的にあなたの質問と同じ質問をしているとゆうこと?
0661デフォルトの名無しさんNGNG
>>660
私の言ってる事がわからない
0662デフォルトの名無しさんNGNG
>>659
"多倍長計算"でググレ
0663658NGNG
更新が遅れてたのでスマソ
各学生の三教科のサンプルが複数組あって「各学生の一教科の平均点」ってこと
2です。
0664デフォルトの名無しさんNGNG
>>658
ごめん その二次元配列の意味が分からない
0665デフォルトの名無しさんNGNG
>>662
多倍長計算でググってみたけど
難しすぎてわからんYO
わかりやすくおせーて
0666デフォルトの名無しさんNGNG
>>658
�@
/* tensuu[i][j]: 学生jの、科目iの点数 */
/* saikou[i]: 科目iの最高点 */
for (i = 0; i < 3; i++) {
  saikou[i] = tensuu[i][0];
  for (j = 1; j < 5; j++)
    if (saikou[i] < tensuu[i][j])
      saikou[i] = tensuu[i][j];
}
0667デフォルトの名無しさんNGNG
>>658
eigo[3][5],sugaku[3][5],kokugo[3][5];も確保して
何入れるんだ?
2次元配列使ってる意味なくなるだろ
0668ラポNGNG
はじめまして。
C言語を習い始めたのですが問題が全然わからなくて
すいませんが教えてください。

C言語始めたばかりなのですがこの問題が全く分かりません。
すいませんが教えてほしいです。お願いします。
整数型配列 array に,先頭から n 個データが入っているとする.このようなときに,次の操作を行う二つの関数を作れ.

1、新しいデータ newdata を第 k 要素 array[k] の場所に挿入する(挿入前に array[k] 以降にあったデータは一つずつ後ろにずらす)関数
array_insert(int array[], int n, int newdata, int k)

2、第 k 要素の内容を削除する(削除前に array[k+1] 以降にあったデータは一つずつ前にずらす)関数
array_delete(int array[], int n, int k)
0669デフォルトの名無しさんNGNG
>>668

/* 後ろにずらす */
for (i = n; i > k + 1; i--) array[i] = array[i - 1];

/* 前にずらす */
for (i = k; i < n - 1; i++) array[i] = array[i + 1];
0670ラポNGNG
ありがとうございます!
できそうなのでがんばってみます。
0671ファイル操作だけcppNGNG
#include <iostream.h>
#include <stdio.h>
#include <fstream.h>
#define SEITO_KAZU (5)
#define KYOUKA_KAZU (3)
int main(){
int seiseki[SEITO_KAZU][KYOUKA_KAZU];
int tmp=0;
int tmp2=0;
int tmp3=0;
int saikou[KYOUKA_KAZU];
char ch;
ifstream seiseki_file("seiseki");
for(tmp=0;tmp<SEITO_KAZU;tmp++){
for(tmp2=0;tmp2<KYOUKA_KAZU;tmp2++){
seiseki[tmp][tmp2]=0;
saikou[tmp2]=0;
}
}
tmp=tmp2=0;
0672ファイル操作だけcppNGNG
while (tmp<SEITO_KAZU&&tmp2<KYOUKA_KAZU){
seiseki_file.get(ch);
switch (ch){
case ' ':
seiseki[tmp][tmp2]=tmp3;
tmp3=0;
tmp2++;
break;
case '\n':
seiseki[tmp][tmp2]=tmp3;
tmp3=0;
tmp++;
tmp2=0;
break;
default:
tmp3*=10;
tmp3+=(ch-'0');
break;
}
}
for(tmp2=0;tmp2<KYOUKA_KAZU;tmp2++){
for(tmp=0;tmp<SEITO_KAZU;tmp++){
if(saikou[tmp2]<seiseki[tmp][tmp2]){
saikou[tmp2]=seiseki[tmp][tmp2];
}
}
}
for(tmp=0;tmp<KYOUKA_KAZU;tmp++){
printf("教科%cの最高は%d\n",('A'+tmp),saikou[tmp]);
}
}
0673ファイル操作だけcppNGNG
seisekiファイルサンプル
9 49000 62
51 53 61
17 89 19
32 422 5
100 2 32
0674ファイル操作だけcppNGNG
うわ、平均忘れとった
0675ファイル操作だけcppNGNG
for(tmp=0;tmp<KYOUKA_KAZU;tmp++){
for(tmp2=0;tmp2<SEITO_KAZU;tmp2++){
tmp3+=seiseki[tmp2][tmp];
}
printf("教科%cの平均は%d\n",('A'+tmp),tmp3/SEITO_KAZU);
tmp3=0;
}
0676('A`)NGNG
あげ
0677ラポNGNG
あの続きかわからないのですいませんが教えてください。
0678デフォルトの名無しさんNGNG
/*
   下記のプログラムはn個の整数型データ a1, a2, … , an を入力し、
   最大値と最小値を求めるプログラムです。
   ただし、データの最大個数を10とする。   
*/

#include<stdio.h>
int main(void)
{
int i, n;
int min, max;
int a[10];
printf("n =");
scanf("%d", &n);/* nの入力 */
for(i=0;i<n;i++){
printf("整数型データ a[%d]=", i);
scanf("%d", &a[i]);/* n個のデータ入力 */
}
min=a[0];
max=a[0];
for(i=1;i<n;++i){
if(min>a[i]) min=a[i];/* 最小値を求める */
if(max<a[i]) max=a[i];/* 最大値を求める */
}
printf("最大値 %d\n", max);
printf("最小値 %d\n", min);
return(0);
}
「これを関数max_ofとmin_ofを用いて書き換えよ」
との事なのですが、教えていただけますでしょうか?

0679デフォルトの名無しさんNGNG
void array_insert(int array[], int n, int newdata, int k)
{
int i;
for (i = n; i > k + 1; i--) array[i] = array[i - 1];
array[k]=newdata;
}
0680ラポNGNG
できましたありがとうございます。
でもどうしてarray[k]=newdata;なんですか?
問題の意味も全然わからなくて質問はだめですかね。
0681デフォルトの名無しさんNGNG
>>678
>>1をよくよむべし
0682デフォルトの名無しさんNGNG
>>680
>1、新しいデータ newdata を第 k 要素 array[k] の場所に挿入する
から。
0683ファイル操作だけcppNGNG
>>663を見て無かった
スマソヌルポクァwセdrftgyフジコlp
0684ラポNGNG
なるほど!
文章を理解しないとだめですね。
0685デフォルトの名無しさんNGNG
そのまんまだが...

#include<stdio.h>
int max_of(int *a, int n)
{
int i,max=a[0];
for(i=1;i<n;++i) if(max<a[i]) max=a[i];/* 最大値を求める */
return max;
}
int min_of(int *a, int n)
{
int i,min=a[0];
for(i=1;i<n;++i) if(min>a[i]) min=a[i];/* 最小値を求める */
return min;
}
int main(void)
{
int i, n, a[10];
printf("n ="); scanf("%d", &n);/* nの入力 */
for(i=0;i<n;i++){
printf("整数型データ a[%d]=", i); scanf("%d", &a[i]);/* n個のデータ入力 */
}
printf("最大値 %d\n", max_of(a,n));
printf("最小値 %d\n", min_of(a,n));
return(0);
}
0686デフォルトの名無しさんNGNG
>>680
ラボちゃんが書いた(やってみたけどダメだった)ソース見せて。
他の人にとってもある意味いい勉強になると思うから。
0687デフォルトの名無しさんNGNG
>>683
ガッ
0688ラポNGNG
もう消してしまったんだけどfor文二つにして
なぜかprintfとか・・・全然違いますね。
ダメダメです。
0689678NGNG
>>685
ありがとうございました。
0690デフォルトの名無しさんNGNG
問題文やらを小出しにされると、解答する人間にとっても非常にやりづらいので、
全文を省略せず、ソースが長ければ>>1のところに貼り付けるなりしてください。
0691大学生NGNG
キーボードから文字列を入力して、対称(abaなど)なら:aba→yes
非対称(abc)なら:abc→no、と表示させるプログラムを作りたいので
すが、やってみたのですがうまくできません。教えて下さい!恐縮で
すが、超初心者なので、出来れば基礎的な知識で教えていただけると
幸いです。strlenは使用禁止になっています。
0692大学生NGNG
自分で作ってみたプログラムです。
#include <stdio.h>
int main()
{
int i,l=0;
int k;
char a[20],b[20];
printf("文字列を入力して下さい:\n");
gets(a);
while(a[l] != '\0')
l++;
l--;
for(i=0;i<=l;i++)
{b[i] = a[l-i];
}
 b[i]='\0';
for(k=0;k<=l;k++)
{ if(b[l]==b[l-k])
 printf("%s-yes\n",a);
 else
  printf("%s-no\n",a);
}
return 0;
}
0693デフォルトの名無しさんNGNG
関数定義も駄目なのか?
0694デフォルトの名無しさんNGNG
>592 別の配列に移さなくてもできるっしょ
0695694NGNG
間違えた >692 宛てだ
0696デフォルトの名無しさんNGNG
>>693
多分よくないと思われます。
この問の前の問題からの流れ的にですが…
0697ラポNGNG
全然わかりません勉強にはげみます。
0698デフォルトの名無しさんNGNG
>>695
まじっすか!この前の問題が移していたので移してみました。
0699大学生NGNG
>>696,>>698は大学生です、すみません!
0700デフォルトの名無しさんNGNG
>>692
l++;
l--;
(´д`)
0701694NGNG
こんな感じかな

#include <stdio.h>
int main()
{
int i,l,k;
char a[20];
printf("文字列を入力して下さい:\n");
gets(a);
for(l=-1; a[l+1]!='\0'; ++l)
;
k=0;
for(i=0; i<l; ++i,--l) if(a[i]!=a[l]) k=1;
printf("%s-%s\n",a, (k==0)?"yes":"no");
return 0;
}
0702大学生NGNG
>>700
{l++;}
l--;
のがよかですかね??
0703デフォルトの名無しさんNGNG
#include <stdio.h>
int main()
{
int i,l=0,flag=0;
char a[20],b[20];
printf("文字列を入力して下さい:\n");
gets(a);
while(a[l] != '\0') l++;

for(i = 0;i < l / 2;i++) {
if(a[i] != a[l-i-1]) { flag = 1; break; }
}

if (flag == 0) printf("%s-yes\n",a);
else printf("%s-no\n",a);

return 0;
}
こんなんとか
0704デフォルトの名無しさんNGNG
>>700
おまいのコードを改造してみた
#include <stdio.h>
int main()
{
int i,l=0;
char a[20];
printf("文字列を入力して下さい:\n");
gets(a);
while(a[l] != '\0')/*strlen使いたいな〜*/
l++;
l--;
for(i=0;i<=l;i++)
{
if(a[i]!=a[l]){
printf("%s-no\n",a);
return 0;
}
l--;
}
printf("%s-yes\n",a);

return 0;
}
0705デフォルトの名無しさんNGNG
フラグ使うのと途中でリターンするのと、両方出たわけだが

どっちがいいかな?
もれは、今回のケースではフラグでOKって感じ
0706大学生NGNG
みなさんありがとうございます。
ところで>704さん質問です。for(i=0;i<=l;i++)
の意味がいまいちわからないので教えて下さい!
0707大学生NGNG
flag,returnともに初めて使います、returnのが個人的には
分かりやすそうに感じます!
0708デフォルトの名無しさんNGNG
>>706
>...がいまいちわからないので教えて下さい!
なんか「いまいち」って言われると
  どこまでならわかるんだ?
ってききたくなっちゃうな。

>>704じゃないけどとりあえず答えときます。
>l=0;
>while(a[l] != '\0')/*strlen使いたいな〜*/
>l++;
>l--;
>for(i=0;i<=l;i++)
は
for (i = 0; i < strlen(a); i++)
と同じ。
0709704NGNG
>>706
これならどう?
int main()
{
int i,l=0;
char a[20];
printf("文字列を入力して下さい:\n");
gets(a);
while(a[l+1] != '\0')/*strlen使いたいな〜*/
l++;
for(i=0;i<l;i++,l--)
{
if(a[i]!=a[l]){
printf("%s-no\n",a);
return 0;
}
}
printf("%s-yes\n",a);
return 0;
}
0710大学生NGNG
ほんとすいません、分からんとこ間違えてました。if(a[i]!=a[l])の
意味とそれ以下がわかりません、教えて下さい。return 0もわかりま
せんです。
0711デフォルトの名無しさんNGNG
つーかさ、前の課題の続きなんでしょ?
元の文字列と逆順にした文字列があるのなら
その 2 つを strcmp (相当の処理)を用いて等値判定しろって出題意図だったりしないの?
0712デフォルトの名無しさんNGNG
>>711
そういうことが問題中に触れられていないので、意図的に違うコードを書いてみたわけだがw
0713大学生NGNG
>>711
どうなんすかねぇ?なんともいえんすけど、strcmpも
初めてきたっすよ…>709さんのプログラムだいぶわかり
やすいです!ifからが理解できてないんです…
0714704NGNG
10文字入力しました
このときl==9ですね。
まず1番目と10番目(a[0]とa[9])を比較してみましょう
もし1番目(a[i])と10番目(a[l])が異なる文字だったら,
線対称じゃないからnoと出力して終了しましょう(=return(0))
i++;l--;
次にもし2番目(a[1])と9番目(a[8])が異なる文字だったら
線対称じゃないからnoと出力して終了しましょう(=return(0))
:
:
iがlよりもおおきくなったら線対称が確定しますね。
for文も終了します。
yesを出力してプログラムを終了させましょう。(=return(0))
これであってるのかな?
俺もわかんなくなってきた
0715デフォルトの名無しさんNGNG
>714

l=文字列の最後の位置;
i=0;
if(i<l && a[i]!=a[l]){ /* 対称ではない */ return 0; }
++i; --l;
if(i<l && a[i]!=a[l]){ /* 対称ではない */ return 0; }
++i; --l;
:

/* 対称でした */

ってことだろ
0716704NGNG
>>715
そうなんだけどね。
それじゃわかってもらえないような気がしたので...
日本語で説明してたらこっちまで混乱してきた。
ところで
715=="大学生"だったりしたら面白い落ちだね。
0717716NGNG
>>715
じょ、冗談ですからね
0718デフォルトの名無しさんNGNG
>>668

配列の要素を追加したり削除したりしても要素数nを変更しないでよいのか?
もれは納得できん!
0719大学生NGNG
>>714,>>715さん、このプログラム理解できました!
ほんとにありがとうございましたー!!
0720デフォルトの名無しさんNGNG
printf("ヌルポ")
0721デフォルトの名無しさんNGNG
;
0722デフォルトの名無しさんNGNG
1から100までの2つの整数a, bで、適当な整数cを用いて
a * a + b * b == c * c と書けるすべての組(a, b, c)を出力するプログラム
(3辺が整数の直角三角形の列挙をしていることに他ならない)。
0723デフォルトの名無しさんNGNG
(*-*)
0724デフォルトの名無しさんNGNG
#include <stdio.h>
main(){
int c_max;
int a=0,b=0,c=0;
for(a=1;a<=100;a++){
for(b=a;b<=100;b++){
for(c=1;c<=10000;c++){
if((c*c)==(a*a)+(b*b)){
printf("%d\t%d\t%d\n",a,b,c);
}
}
}
}
}
0725デフォルトの名無しさんNGNG
int c_max;は忘れて
0726デフォルトの名無しさんNGNG
>>724
総当たり法w
0727デフォルトの名無しさんNGNG
c<=10000じゃなくてc<=a*100だともっといい
0728デフォルトの名無しさんNGNG
>>724
cはa+bまででいいよ。
0729デフォルトの名無しさんNGNG
質問があります。

#include <stdio.h>
int main( void )
{
int ai[3] = {10,11,12};
int n;

for(n=0;n<4;n++){
printf("%d,%d\n",n,*(int *)((char *)(ai+1)-n));
}
return 0;
}

の実行結果が

0,11
1,2816
2,720896
3,184549376

なんですが 11×256^n になる理由がいまいちよくわかりません。
どなたかわかりやすく教えていただけないでしょうか。
0730デフォルトの名無しさんNGNG
>>729
環境依存っぽいので

#include <stdio.h>
int main(void)
{
union {
int n
char c[4]; /* 4はsizeof(int)にする */
} x;
int i;
x.n= 11;
for (i = 0; i < sizeof(int); i++) printf(" %X", x.c[i]);
return 0;
}
の結果を教えて。
0731デフォルトの名無しさんNGNG
>>729
0A 00 00 00 0B 00 00 00 0C 00 00 00
        ↑
ai+1は矢印んとこ指してる。これが1バイトずつ左へ動いてるだけ。
sizeof(int) == 4でリトルエンディアンな環境前提な。
0732729NGNG
>>730
B 0 0 0
となりました。

>>731
1バイトずつ左へ動くとなぜあのような実行結果になるのでしょう??
0733デフォルトの名無しさんNGNG
>>732
>>731のやり方を使うと
0A 00 00 00 0B 00 00 00 0C 00 00 00
        ↑--------- リトルエンディアンなので、00 00 00 0B

0A 00 00 00 0B 00 00 00 0C 00 00 00
      ↑--------- 00 00 0B 00

0A 00 00 00 0B 00 00 00 0C 00 00 00
    ↑--------- 00 0B 00 00

0A 00 00 00 0B 00 00 00 0C 00 00 00
  ↑--------- 0B 00 00 00
0734729NGNG
>>733
11×256^2 はどこから出てくるのですか?
0735729NGNG
すいません。 11×256^n でした.。
0736デフォルトの名無しさんNGNG
>>734
0x0B == 11 0xFF == 255

つまり、00000B00 / 0000000B = 256
0737729NGNG
>>730-736
どうもありがとうございました!
何とか理解することができました!
0738デフォルトの名無しさんNGNG
おまえらやっぱり頭いいな。
オレもがんがろうっと。
0739デフォルトの名無しさんNGNG
#include <stdio.h>
void func0()
{
printf("func0\n");
}

void func1()
{
printf("func1\n");
}

int main()
{
int a;
scanf("%d",&a);
if(a==0) func0();
if(a==1) func1();
return 0;
}
これを if switch goto を使わずに作れ。
0740デフォルトの名無しさんNGNG
void (*f[])() = { func0,func1 };
f[a]();

0741デフォルトの名無しさんNGNG
#include <stdio.h>
void func0(void) { puts("func0"); }
void func1(void) { puts("func1"); }
int main(void) { int a; scanf("%d", &a); a == 0? func0(): a == 1? func1(): 1; return 0; }
0742デフォルトの名無しさんNGNG
int main()
{
int a;
scanf("%d", & a);
a ? func1(): func0();
return 0;
}
0743デフォルトの名無しさんNGNG
>>740>>742
if (!(a == 0 && a == 1)) ...
0744743NGNG
s/\&/|/g;
0745デフォルトの名無しさんNGNG
while()でいいんぢゃね?

while(a==0){ func0(); break; }
while(a==1){ func1(); break; }
0746デフォルトの名無しさんNGNG
C言語の宿題やってください。お願いします!
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=205
0747デフォルトの名無しさんNGNG
すみません。初歩的な質問があります。。
C/CPPのグローバル変数についてなんですけど、
関数内からグローバル変数を宣言することは可能なんでしょうか?

例えばmain関数内でグローバル変数としてチェスボード(配列)を宣言して
それを他の再帰的に使用する関数で参照できるのかどうか。

親切な方、よろしくお願いします。
0748デフォルトの名無しさんNGNG
>>747
>C/CPPのグローバル変数についてなんですけど、
CPPってC++のこと?プリプロセッサだと思われちゃうよ。

>関数内からグローバル変数を宣言することは可能なんでしょうか?
『宣言』はたぶんできます。『定義』はできません。
0749デフォルトの名無しさんNGNG
>>747
int global; /* 定義 */

void function(void)
{
  extern int global; /* 宣言 */
}
0750デフォルトの名無しさんNGNG
2つの数の最大公約数を求めるには以下のプログラムのようなユークリッドの互除法を用いるが普通である。
#include <stdio.h>

int
main()
{
int i, j, k;
scanf( "%d%d", &i, &j );
printf( "i = %d, j = %d\n", i, j );
while ( 1 ){
if ( j == 0 ){
printf( "%d\n", i );
break;
} /* if */
k = i % j;
i = j;
j = k;
} /* while */
return ( 0 );
} /* main */

このプログラムをまず入力しその動作を確認してから、0から20までの2つの数のあらゆる組み合わせについて、その最大公約数を表示させるプログラムを作れ。
例:
(0, 0)->0
(1, 0)->1
........
(4, 6)->2
.........
0751デフォルトの名無しさんNGNG
int i,j;
for(i=0;i<=20;i++)
    for(j=i;j<=20;j++)
        printf("(%d,%d)->%d\n",j,i, ユークリッド(i,j));
0752デフォルトの名無しさんNGNG
文章aと文章bを比較して違う文字を表示させるプログラム。
例えば文章aの内容が「あいうえお」で文章bが「あいええあ」の場合
う:え お:あ 見たいな感じで表示するプログラム作って( ゚д゚)ホスィ…
0753デフォルトの名無しさんNGNG
日本語もちゃんと処理しろって?
0754デフォルトの名無しさんNGNG
>>753
当然
0755デフォルトの名無しさんNGNG
#include <fcntl.h>
void main (int argc, char *argv[])
{
int fd;

if (fd=open(argv[1],O_RDONRY)==-1)
perror("open");
else
closed(fd);
}

↑のプログラムを元にして、
プログラム実行時の引数の個数と引数を表示する
その後エラーがあればメッセージを表示する
2つの条件を満たすプログラムを作成して欲しいです

軽いヒントでも結構です
正直、何をしたらいいのかすら分からずに困っているので助けてください
0756デフォルトの名無しさんNGNG
>>752
#include <stdio.h>
#include <string.h>
int kanji(int c){
c = c & 0x000000ff;
return ((0x81<=c && c<=0x9f) || (0xe0<=c && c<=0xfc));
}
int func(char *s,char *out){
if(kanji(*s)){
sprintf(out,"%c%c",*s,*(s+1));
return 2;
}
else
sprintf(out,"%c",*s);
return 1;
}
int main(){
char s1[] = "あいうえおac",s2[] = "あいaえうあb";
char tmp1[3],tmp2[3];
int i = 0,j = 0;
while(s1[i] && s2[j]){
i += func(&s1[i],tmp1);
j += func(&s2[j],tmp2);
if(strcmp(tmp1,tmp2) != 0)printf("%s : %s\n",tmp1,tmp2);
}
return 0;
}
※NEC PC-9800用
0757お願いしますNGNG
整数nを読み込み、nの素因数分解の結果を、例えば
588=2*2*3*7*7
という形に出力するプログラミングを考えよ。その時に、
(1)入力値がn=588の時の手計算を行ってみて、どういう変数を用意すればよいのか、
(2)入力値がn=588の時に、用意した変数の値の組をどの様に更新していけばよいのか
を考えて、プログラミングを構成せよ。
0758デフォルトの名無しさんNGNG
広末さん長男は「宏志」 母子は既に退院
 女優の広末涼子さん(23)の所属事務所は20日、広末さんが10日に出産した長男の名前が「宏志(ひろし)」に決まったと発表した。
 広末さん親子は既に東京都内の病院を退院している。(共同通信)

ひろしって案外、普通だなw
0759デフォルトの名無しさんNGNG
>>757
ifでやっていけば?
0760デフォルトの名無しさんNGNG
>>752 diffじゃだめ?
0761お願いしますNGNG
>>759
具体的には、どのようにやればいいのでしょうか?
0762デフォルトの名無しさんNGNG
>>761

俺はまだまだプログラミング初心者だからよくわからんが
もしnが2で割れたら、2で割れるまで割る、で、割れなくなったら
3を試す4を試す・・・・・みたいな感じ?

あとは詳しい人に聞いてくれ。すまぬ
0763お願いしますNGNG
>>762
ありがとうございました。 詳しい方、お願いします。
0764デフォルトの名無しさんNGNG
#include <stdio.h>
main(){
int a=2,n;
scanf("%d",&n);
printf("%d=",n);
while(a < n)
{
if(!(n % a))
{
n/=a;
printf("%d*",a);
}
else a++;
}
printf("%d",n);
}
0765デフォルトの名無しさんNGNG
>>763
1)まず素数テーブルを用意する。(unsigned intの範囲なら要らないかも)
2)sqr(N)以下の素数まで因数分解。
3)因数分解の結果は
逐次表示するなり
1)のテーブル更新に利用しとけ。
0766大学生NGNG
わからないので教えて下さい!
#include <stdio.h>

int
main()
{int i, j, k;
scanf( "%d%d", &i, &j );
printf( "i = %d, j = %d\n", i, j );
while ( 1 ){
if ( j == 0 ){
printf( "%d\n", i );
break;
} /* if */
k = i % j;
i = j;
j = k;
} /* while */
return ( 0 );
} /* main */
0から20までの2つの数のあらゆる組み合わせについて、その最大公約数
を表示させるプログラム{例:(0, 0)->0 (1, 0)->1}を、このプログラムを基に作るという問題なん
ですが、教えて下さい、お願いします!
0767大学生NGNG
この問は、ユーグリットの互除法というものが使われています。
自分で作ってみたプログラムです。
#include <stdio.h>

int
main()
{
int i, j, k,l;
int a,b;
for(i=1;i<=20;i++)
{

for(j=1;j<=20;j++)
{
if ( l=0 )
{ printf( "(%d,%d)=>%d,", i, j , i );
k = i % j;
i = j;
j = k;
}
printf( "(%d,%d)", i, l );
}
}
}
0768デフォルトの名無しさんNGNG
746です。どなたかおねがいできませんか?よろしくおねがいします。
0769デフォルトの名無しさんNGNG
ひまなのでやってみた。
たぶんこんなでいいんとちがうかな。

#include <stdio.h>

int
main()
{
int i, j, k;
for(i=1;i<=20;i++){
for(j=1;j<=20;j++){
int tpi = i;
int tpj = j;
while( 1 ){
if ( tpj == 0 ){
printf( "(%d,%d)=>%d\n", i, j , tpi );
break;
}
k = tpi % tpj;
tpi = tpj;
tpj = k;
}
}
}
return 0;
}
0770デフォルトの名無しさんNGNG
>>768
単方向リスト(連結リスト、線形リスト)の典型的な実装の一つ。週末まで待って。
0771デフォルトの名無しさんNGNG
>>768
悪いこといわないから自分でできるだけやれ、そのほうが絶対ちからになるって。
で、お前は留学生か?
0772デフォルトの名無しさんNGNG
>>768
ヒントだけ書いておくと、リストの項目の追加や並び替えは、すべてnode->nextを書き換えることによって行われる。
0773デフォルトの名無しさんNGNG
>>768
線形リストはぐぐればたくさんあるから読んでみるのもお勧め。
漏れも先セメ、連結リストで死んだ
0774デフォルトの名無しさんNGNG
>>767
最大公約数を返す関数を作れ。
0775デフォルトの名無しさんNGNG
関数ってなんですか?
0776デフォルトの名無しさんNGNG
プロフェッショナアウな俺にも分からん
0777デフォルトの名無しさんNGNG
printf("駄目歩")
0778デフォルトの名無しさんNGNG
いっこだけチャレンジ

void addLast ( SitePtr , SiteList * )
{
if ( SiteList->next == NULL )
SiteList->next = createNode( SitePtr.name, SitePtr.coord );
else {
SitePtr *p = SiteList->next;
while( p->next != NULL )
p = p->next;
p->next = createNode( SitePtr.name, SitePtr.coord );
}
}
0779778NGNG
...ねます。

void addLast ( SitePtr hoge, SiteList *list )
{
if ( list->next == NULL )
list->next = createNode( hoge.name, hoge.coord );
else {
SitePtr *p = list->next;
while( p->next != NULL )
p = p->next;
p->next = createNode( hoge.name, hoge.coord );
}
}
0780デフォルトの名無しさんNGNG
>>779
同じ処理を二回書かなくても、最初に whileを持ってくればいいのでは。
0781デフォルトの名無しさんNGNG
>>768
Middle Earthって指輪物語かよ。
MORIA、AngBandっていうRogue系のゲーム
渡せば単位くれそうだな。
すでに持ってるかもしれんけど
0782781NGNG
SitePtrはnodeのポインタだからhogeからメンバを
参照するにはアロー演算子が必要。ていうか
#define NAME(ptr) ((ptr)->name)
#define COORD(ptr) ((ptr)->coord)
#define NEXT(ptr) ((ptr)->next)
#define EMPTY(ptr) ((ptr)==NULL)
使ってくれって感じみたいだけど俺なら使いたくない気持ちはわかる。

0783デフォルトの名無しさんNGNG
確かに。妙なマクロ使う方が可読性悪くなるよね。
0784大学生NGNG
>>769さんありがとうございます。理解できました!!
0785デフォルトの名無しさんNGNG
768です。
>>771さん
おっしゃる通りです。できるとこはやろうとしてるんですが、、
Deleteのファンクション以外のアルゴリズムはわかるんですが、
自分には知識・能力がない為、実際にコードを書くとなったら辛いんです、、、
まだ.hファイルの中身を整理しきれていないので、それから徐々にコードを書こうと思います。

みなさん助けて下さって本当にありがとうございます。
0786デフォルトの名無しさんNGNG
>>785
Deleteのアルゴリズム。
SiteListをたどって、指定されたSitePtrをnextにもつノードを探す。
そのノードのnextをSitePtrのnextで置き換え、SitePtrを解放。
イメージとしては、

node->next
     node->next 3.←ここに設定すると、
          node->next 1.←これが該当するノードだとすると、
               node->next 2.←このノードを

node->next
     node->next 4.←これの指す先は

               node->next 5.←このノードになり、

          node->next 6.ここは宙ぶらりん。解放する。

0787デフォルトの名無しさんNGNG
>>786さん

deleteのアルゴリズムありがとうございました。
具体的なコードを書くのは今の段階ではきついんですが、
こんな感じでいいんでしょうか?


delete
{
//SiteListをたどって、指定されたSitePtrをnextにもつノードを探す。

NEXT(Ptr)==node;
Ptr->next=node->next;
free(node);

}

本当に感謝しています。ありがとうございます。
0788デフォルトの名無しさんNGNG
構造体について質問があります。
struct Node{
char *value;
struct Node *next;
};
この構造体の中のstruct Node *nextの意味がよくわかりません。
宜しくお願いします。
0789デフォルトの名無しさんNGNG
Nodeへのポインタを格納...
0790デフォルトの名無しさんNGNG
>>788
struct Node *head, *p, *q;

head = malloc(sizeof (struct Node));
p = malloc(sizeof (struct Node));
head->next = p;

while(1){
  q = malloc(sizeof (struct Node));
  p->next = q;
  p = q;
  if ((getch()) == 'q') break;
}

(まったく意味のないプログラムですが)たとえばこんな風に使うんですかね?
たどっていくため。
0791デフォルトの名無しさんNGNG
>>790
746=768がやってる線形リストのような構造で使う。辿るのに使うというか、辿るための構造というか。
0792デフォルトの名無しさんNGNG
すいませんちょっと質問よろしいでしょうか

#define A 10;
#define B 5;

となっているときに

main()
{
int x[10];
int i;

for(i = 0; i < 10; i++){
x[i] = B + A * i;
}
}
という処理を行うと間接指定演算子(*)が〜というエラーがでてしまいます。
Aの部分を内部変数や1、2等の数字にするとエラーは出ないのですが
Aをそのまま使う方法は何か無いでしょうか?

0793デフォルトの名無しさんNGNG
>>792
#define A 10;
#define B 5;
↑これが原因。

これを展開すると、
x[i] = 5; + 10; * i; すなわち、
x[i] = 5;
+ 10;
* i;
の三つの文になる。
あと、エラーメッセージを省略するのは何も書いてないのと同じだ。
0794デフォルトの名無しさんNGNG
x[i] = i * A;
x[i] += B;
0795デフォルトの名無しさんNGNG
#include <stdio.h>
char *prompt="% ";
char *argv[20], input[80];
main()
{
printf("%s", prompt);
while(fgets(input, sizeof(input), stdin) != NULL){
input[strlen(input) -1] = '\0';
if(fork() == 0){
split(input, argv);
if(execvp(argv[0], argv)<0)
perror(argv[0]);
}else{
wait(0);
}
printf("%s", prompt);
}
}
int split(char *input, char *argv[]){
}

問題:上記プログラムを改変して、
課題1
一行の入力を空白で分割し、char *argv[n]に格納する関数splitをつくれ。
ただし、ポインタと文字列(終端記号)の性質を利用すること。
課題2
実行したコマンドを配列に保存し、特定のキーを押したら
過去のコマンドのリストを表示、実行できる機能(ヒストリー)を付加せよ。

お力添えを願います。
0796デフォルトの名無しさんNGNG
まず、
struct ptr
{
double x,y;
};
と構造体を宣言する。
6*x+4*yをx'として、-2*x+yをy'という座標とする。(線形変換)

xとyをキーボードから入力して、x'とy'を出力するプログラムを作成する。
ただし必ずstruct ptr型の構造体変数を用いることとし、線形変換の部分を関数void lin_tra(struct ptr *)として作成すること。

突破口が全然開けずorz
どなたか助言お願いします。
0797デフォルトの名無しさんNGNG
>>796
void lin_tra(struct ptr *point)
{
struct p = { point->x, point->y };
point->x = 6 * p.x + 4 * p.y;
point->y = -2 * p.x + p.y;
}
0798797NGNG
>struct p = { point->x, point->y };
↑間違ってた
struct ptr p = { point->x, point->y };
0799デフォルトの名無しさんNGNG
ここの人にとっては本当にくだらない質問かもしれないけど
学校の課題で、C言語で2つの整数(例4と3)を入力しその
和(例7)を出力しるっていうのが出たけどサッパリなので
どうかおながいします。
0800デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void)
{
int x, y;
scanf("%d%d", &x, &y);
printf("%d\n", x + y);
return 0;
}
0801デフォルトの名無しさんNGNG
そうか、こういう時期なんだな。
0802デフォルトの名無しさんNGNG
>>800
助かりました、ありがとうございます。
0803792NGNG
>>793,794
どうもありがとうございました。
マクロの後ろにセミコロンつけたなんて初歩的なミスだったんですね。

今度はよく見直してから質問するようにします。

>あと、エラーメッセージを省略するのは何も書いてないのと同じだ
大変失礼しました。今後気をつけます。

0804デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1082632296&res=1

プログラムの訂正をお願いします。
0805デフォルトの名無しさんNGNG
>>804
お前一体何様のつもりだ?
0806デフォルトの名無しさんNGNG
>>804
(1) exit()→stdlib.h
(2)if(year%4==0 && year%100!=0 || year%400==0)
↓
if((year%4==0 && year%100!=0) || year%400==0)
(3)for(;day>totaldays1;i++)→for(;*day>totaldays1;i++)
(4)最後のprintfに')'が足りない。
これでコンパイルできるかも。
あたしも実行して確かめたわけじゃないからね。
0807デフォルトの名無しさんNGNG
age
0808デフォルトの名無しさんNGNG
>>804
汚いsourceで直す気にもならんが、そのエラーは
printf("西暦%d年の%d日目は…のprintfの最後の括弧が抜けている。
エラーメッセージを読んでから質問しろ。
0809デフォルトの名無しさんNGNG
Winny3を作れという宿題がでました。全く作り方がわかりません。よろしくお願いします
0810デフォルトの名無しさんNGNG
#include <iostream>
main()
{
cout << "Winny3.exe" << endl;
}
0811デフォルトの名無しさんNGNG
>>810
ありがとうございました。
0812デフォルトの名無しさんNGNG
>>810 ダウト
0813デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void)
{
int num, i;
char buf[256];
FILE *fp;

printf("いくつ作りますか?\n>");
scanf("%d", &num);

for(i = 0; i < num; i++)
{
sprintf(buf, "winny3(%d).exe", i + 1);
fp = fopen(buf, "w");
fclose(fp);
}
}
0814814NGNG
以下の動作を順番に実行するコードをMPIを用いて作成しなさい

1.プロセス群の生成処理
2.ランク0のプロセスがファイル(in.dat)からデータを64個読み込む。ファイル中には一行に倍精度実数が1つづつ記述されている。
3.ランク0のプロセスが読み込んだデータの総和を計算する。
4.ランク0のプロセスがその総和をファイル(out.dt)に出力する。
5.プロセス群の終了。

お願いします。
0815デフォルトの名無しさんNGNG
俺仕様ですか。
0816超初心者NGNG
プログラムをコンパイルすると
いつもwarning: no newline at end of file
というのが出るんですがどうすれば直るんでしょうか?
0817デフォルトの名無しさんNGNG
最後の行で改行する
0818デフォルトの名無しさんNGNG
gccka?
0819デフォルトの名無しさんNGNG
>>816
GCCかCC使ってるのか。
メモ帳以外のエディタで開いてみな(k2editerとか
最後に[EOF]てのがあるからそれだけ最後の行に来るように改行汁。出なくなる。
0820デフォルトの名無しさんNGNG
>>819
その制限は何のために存在するのですか?
0821デフォルトの名無しさんNGNG
ぼるじょあの意味が全然わからなかった。

山崎渉のコピペにも使われていたので勘違いしていた。
ポンキッキーズが由来だったのか?
それともPC初心者板専用?
0822デフォルトの名無しさんNGNG
>>821
気にしたら負け。
0823デフォルトの名無しさんNGNG
>>820
昔からテキストファイルは改行で終わるのが一般的。

そりゃそうと、最後の行に改行がないとバグるコンパイラがあったなぁ。
0824デフォルトの名無しさんNGNG
>>822
言っている意味がわからない
0825デフォルトの名無しさんNGNG
>>824
気にしたら負け。
0826デフォルトの名無しさんNGNG
http://www.geocities.co.jp/SiliconValley/3908/yBEncckFOU/history/index.html
0827814NGNG
以下の動作を順番に実行するコードをMPIを用いて作成しなさい

1.プロセス群の生成処理
2.ランク0のプロセスがファイル(in.dat)からデータを64個読み込む。ファイル中には一行に倍精度実数が1つづつ記述されている。
3.ランク0のプロセスが読み込んだデータの総和を計算する。
4.ランク0のプロセスがその総和をファイル(out.dt)に出力する。
5.プロセス群の終了。

お願いします。
0828デフォルトの名無しさんNGNG
このへんでも読んで勉強しる
http://www.h7.dion.ne.jp/~matsu/pc_cluster/mpi/index.html
0829814NGNG
1・ファイル(in.dat)からデータを64個読み込む。ファイル中には一行に倍精度実数が1つづつ記述されている。
2・読み込んだデータの総和を計算する。
3・その総和をファイル(out.dt)に出力する。

この部分は

fp = fopen("in.dat","r");
for(i=0;i<64;i++){
fscanf(fp,"%lf",&s[i]);
sum+=s[i];
fclose(fp);
fp = fopen("out.dat","w");
fprintf(fp,"%lf",sum);
fclose(fp);

であってますか?

0830デフォルトの名無しさんNGNG
>>829
>fprintf(fp,"%lf",sum);
"%lf"じゃなくて "%f"
0831デフォルトの名無しさんNGNG
別にlfでも構わんよ。
但し最新規格準拠のコンパイラを使ってるならね。
0832814NGNG
>>830
ありがとうございます。
それでですね、下のソースを作ったのですが、コンパイルできても実行できません。
どなたか間違いを指摘していただけたら・・・

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

int main(int argc , char **argv){
int a,i;
double sum;
double s[100]={0};
FILE *fp;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&a);
if(a == 0){
fp = fopen("in.dat","r");
for(i=0;i<64;i++){
fscanf(fp,"%lf",&s[i]);
sum+=s[i];
}
fclose(fp);
fp = fopen("out.dat","w");
fprintf(fp,"%f",sum);
fclose(fp);
}
MPI_Finalize();
}
0833デフォルトの名無しさんNGNG
回文を作成するCのプログラムを作っているのですが、
配列の要素から後ろの一文字だけを削除するにはどうしたらいいのでしょうか?
0834デフォルトの名無しさんNGNG
>>832
mpirun じゃなくて ./a.out ってやってたりしない?
0835デフォルトの名無しさんNGNG
>>833
配列って普通の文字列のことか?それなら、
char str[] = "abc";
...
if(str[0] != '\0') /* 空でない */
    str[strlen(str)-1] = '\0';
0836デフォルトの名無しさんNGNG
>>833
a[strlen(a) - 1] = '\0';
0837814NGNG
>>834
mpirun -np 1 filename
で実行しています。これは間違いないはずですが・・・
0838デフォルトの名無しさんNGNG
「実行できません」の内容は?
out.datというファイルは作成されるのか、
作成されるのならサイズはいくらか、中身な何か、
エラーメッセージは出ないのか?
あと、読むたびに表示してみたりってできるのかな?
0839デフォルトの名無しさんNGNG
>>837
まさか filename がソースファイルの名前ってことは無いよね?
mpicc でコンパイルしてできたバイナリの名前だよね?
0840814NGNG
すいません、やっぱり実行方法が間違ってました・・・
file名じゃなくて、a.outでした。
ありがとうございました。
0841839NGNG
そのまさかだったのか...
言ってみるもんだな。
0842814NGNG
>>838,>>839
わざわざすみませんでした・・・
0843デフォルトの名無しさんNGNG
でもこれって、-np 1 だし、「プロセス群の生成」ってしてないよね。
ランク0だけが仕事してるし。
どっか並列にしないといけないんでは?
0844814NGNG
いえ、これはまだ1問目で並列計算は2問目からなんです。
0845デフォルトの名無しさんNGNG
>>835
>>836
ありがとうございました!!
いけました
で、回文を作るプログラムなのですが2バイト文字を扱うにはどうすればいいのでしょうか?
0846デフォルトの名無しさんNGNG
あきらめたらそこで試合終了だよ。
0847デフォルトの名無しさんNGNG
すいません少し教えてください。
10〜99999までの範囲の数字で、配列を使用して
例えば12なら21、990なら99、6700なら76、15324なら42351のように
数字を逆にする方法はどうやるんでしょうか?
0848デフォルトの名無しさんNGNG
>>847
void reverse(char *str) {
int i, j;
for(i = 0, j = strlen(str) - 1; i < j; i++, j--) {
int temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}

int i = 6700;
char temp[6];
sprintf(temp, "%d", i);
reverse(temp);
sscanf(temp, "%d", &i);
0849>>847NGNG
//負の数とかINT_MAX近辺には使えんよ
int reverseNum(int num){
int ans=0,keta=1,ten =1;
while(num/keta >= 10)keta *= 10;
for(;keta>=1;keta /= 10,ten*=10){
ans += ten*(num/keta);
num %= keta;
//printf("\nnum=%d,ans=%d,keta=%d,ten = %d",num,ans,keta,ten);
}
//printf("\n%d\n",ans);
return ans;
}
0850847NGNG
>>848,849
ようやく完成させることができました。
お二方どうもありがとうございました。
0851デフォルトの名無しさんNGNG
お邪魔します。
コンソールから半角カタカナを入力したら、
それを2バイトのひらがなに直す関数を作りたいんですが、
普通の文字(「あ」や「い」など)は何とか考えられそうなのですが、
濁音・半濁音(「が」「ぱ」など)はどうすればいいのか分かりません。
あと、ASCIIコードでやるのと、二次元配列で2つを対応させるのと、
どっちが良さそうですかね?
どなたか教えてください。お願いします。
void func( char str1[], char str2[] );
0852デフォルトの名無しさんNGNG
>濁音・半濁音(「が」「ぱ」など)はどうすればいいのか分かりません。

慌てずに常に次のもう1文字見ながら変換していけ
0853デフォルトの名無しさんNGNG
M$なら LCMapString ってのがあるらしい
0854デフォルトの名無しさんNGNG
>>851
まず濁音・半濁音が存在する音なのかどうか判定して
存在するなら次の文字を調べ、それが濁点・半濁点だったら、
濁音・半濁音として変換する。
これをプログラムにすればいいんじゃのかしら。
0855851NGNG
とりあえず、今作っているものの、必要そうなところだけ抜粋します。

#define MAX 80
void trans( str1[], str2[] )
{
 short i;
 for (i = 0; str1[i]; i++){
  if (str1[i + 1] == '゙' || str1[i + 1] == '゚'){
   /* ここがわかりません */
  }
  str2[i] = 0x82;
  str2[i + 1] = str1[i] + /* ここもわかりません */;
 }
 /* ここでstr2に'\0'を入れます */
}

int main( void )
{
 char str1[MAX + 1], str2[MAX * 2 + 1];
 printf("半角カタカナを入力してください:");
 scanf("%s", str1);
 trans( str1, str2 );
 printf("変換前:%s\n", str1);
 printf("変換後:%s\n", str2);
 return 0;
}

もし全然見当違いでしたらおっしゃって下さい・・・
0856851NGNG
あ、書き込んでから気づきました。

trans関数の宣言で仮引数の型が抜けてますね、char型です。
あと
> str2[i] = 0x82;
> str2[i + 1] = str1[i] + /* ここもわかりません */;
じゃなくて
str2[i * 2] = 0x82;
str2[i * 2 + 1] = str1[i] + /* ここもわかりません */;
かな?
0857デフォルトの名無しさんNGNG
誰か教えてください。
回文を作成するプログラムを考えているんです。
strcpyとstrcatとstrlenの3つの文字列操作関数を使おうと思っているのですが、
どうやったら文字を逆さまにすればいいのかが思いつきません。
0858デフォルトの名無しさんNGNG
モニタを上下逆にする
0859851NGNG
なんとか形になってきました。
>>852さん、>>854さんのおっしゃったように、

for (i = 0, cnt = 0; str1[i]; i++){
 if (str1[i] < 0xA6 || str1[i] > 0xDF){ continue; }
 if (str1[i] == 'ー'){
  str2[cnt++] = 0x81;
  str2[cnt++] = 0x5B;
  continue;
 }
 str2[cnt++] = 0x82;
 if (str1[i] >= 'カ' && str1[i] <= 'ト' || str1[i] >= 'ハ' && str1[i] <= 'ホ'){
 if (str1[i + 1] == '゙' || str1[i + 1] == '゚'){
          :
という風にしてみました。が、
このあとswitch文で、だらだらとカの場合、キの場合、クの場合、
と、頭の悪そうな行が続きます。
これを計算で求める、効率の良い方法が思いつきません。
表が完全に対応していないのでやりにくいです・・・
0860デフォルトの名無しさんNGNG
>>857
プロ法�Uの宿題だろ?
0861デフォルトの名無しさんNGNG
>>857
>>848
0862デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>
int main(void){
char buf[64];
int len, i, t;
fgets(buf, sizeof buf, stdin);
len = strlen(buf);
len -= 2; /*ナル文字と改行分*/
for (i = 0; i < len / 2; i++){
t = buf[i]; buf[i] = buf[len - i]; buf[len - i] = t;
}
puts(buf);
return 0;
}
0863デフォルトの名無しさんNGNG
>>859
>このあとswitch文で、だらだらとカの場合、キの場合、クの場合、
>と、頭の悪そうな行が続きます。
普通のかなに変換して、濁音なら+1、半濁音なら+2でいいんじゃない?
幸い、平仮名の濁音半濁音は全て1バイト目が0x82だし。
0864851NGNG
>>863
あ、なるほど!
最初に普通に変換してしまうんですね!
そのあと濁音半濁音の判定をすればいいのか・・・。
ありがとうございます!これでちょっと効率よくなります!
0865デフォルトの名無しさんNGNG
がっ
0866デフォルトの名無しさんNGNG
早朝から質問させていただきます。
________
|100 + 30 = 130   |
|100 - 30 = 70    |
|100 * 30 = 3000  |
|100 / 30 = 3     |
|100 % 30 = 10   |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
↑の実行画面になるとおりに下記のプログラムを穴埋めせよ
#include <stdio.h>

void main(void)
{
int n1,n2,wa,sa,seki,syo,amari;
n1=100;
n2=30;
wa=n1+n2;
sa=n1-n2;
seki=n1*n2;
syo=n1/n2;
amari=[ �@ ];
printf("%d + %d = %d\n",[  �A  ]);
printf("%d - %d = %d\n",[  �B  ]);
printf("%d * %d = %d\n",[  �C  ]);
printf("%d / %d = %d\n",[  �D  ]);
printf("%d %% %d = %d\n",[  �E  ]);
}

という問題なのですが、全然わかりません。
どうかご教授お願いします。
0867866NGNG
試しに
�@n1%n2 �Awa �Bsa �Cseki �Dsyo �Eamari
で実行してみましたが
_________
|130 + 3 = 3000    |
|70 - 3 = 3000    .| 
|3000 * 3988 = 869 .|
|3 / 3988 = 869    |
|10 % 3988 = 869   .|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
となってしまいます。
参考書等はありませんし、検索してもわかりませんでした。
0868デフォルトの名無しさんNGNG
>>867
原因は、printfの使い方が間違ってる、というか、分かってないから。
printfの関数リファレンス(使い方説明)を調べるべし。
ちなみに、宿題で出されてるのに参考書などがないというのはどういう事かと。
0869デフォルトの名無しさんNGNG
amari=n1%n2;
printf("%d + %d = %d\n",n1,n2,wa);
printf("%d - %d = %d\n",n1,n2,sa);
printf("%d * %d = %d\n",n1,n2,seki);
printf("%d / %d = %d\n",n1,n2,syo);
printf("%d %% %d = %d\n",n1,n2,amari);
0870866NGNG
>>868->>869
ありがとうございました。
>>869さんの正解を参考に>>868さんの言われたとおりに考えると「なぜそうなるか」が理解できました。
%dは変数で代入していく値を順に書き込むんですね。

>>868
参考書は私のミスで学校に置いたままなのです;
0871デフォルトの名無しさんNGNG
4月は漏れでも答えられるような簡単な問題ばかりで嬉しいなあ
0872デフォルトの名無しさんNGNG
そうッスね
0873�@NGNG
0〜50までの値を配列に格納してそれを昇順/降順で
表示させたいのですが上手くいきません・・・

#define QUEUE_SIZE 64
#define next(a) (((a) + 1) % QUEUE_SIZE)
#define K 62
--プロトタイプ宣言省略--
int queue[QUEUE_SIZE];
int front;
int rear;
main()
{
  int num = 0;
  int i;
  init();
  for(i = 0; i <= K; i++)
  {
    enqueue(num++);
    printf("%d\n", queue[i]);
  }
  for(i = K; 0 <= i <= K; i--)
  {
    printf("%d\n", queue[i--]);
  }
}
0874�ANGNG
void init(void)
{
  front = rear = 0;
}
void enqueue(int x)
{
  if(next(rear) == front)
    error("これ以上要素を追加できません\n");
  queue[rear] = x;
  rear = next(rear);
}
void error(char *s)
{
  fprintf(stderr, s);
  exit(1);
}
0875あーNGNG
#define K 62 
↓です
#define K 50
0876デフォルトの名無しさんNGNG
>>874
for(i = K; 0 <= i <= K; i--)
{
  printf("%d\n", queue[i--] /* ←これなによ?*/ );
}

queueはFIFO・・・
0877デフォルトの名無しさんNGNG
あと、0 <= i <= K もおかしい。
0878デフォルトの名無しさんNGNG
for(i = K; 0 <= i <= K; i--)→ for(i = K; 0 <= i; i--)
printf("%d\n", queue[i--]); → printf("%d\n", queue[i]);
0879デフォルトの名無しさんNGNG
4月は漏れでも答えられるような簡単な問題ばかりで嬉しいなあ
0880デフォルトの名無しさんNGNG
そうッスね
0881873-875NGNG
ありがとうございます。
やっとポンコツソースがまともに動きました(´・ω・`)
0882デフォルトの名無しさんNGNG
>>746です。
現在自力でやってみてるのですが、test.cを書くどころか、
まだsites.cもままらない状況です。この調子では期限まで間に合いそうにありません、、
もう限界です、、、どなたかお願いできませんか??宜しくお願いいたします。
0883デフォルトの名無しさんNGNG
締切りはいつ?
0884デフォルトの名無しさんNGNG
このような問題が出たのですがやり方がわかりません。教えていただけないでしょうか。お願いします。

"struct element"型構造体を以下のように宣言する。
struct element{
char name[10];
int price;
struct element *pp;
};
struct element型構造体を使う。
startをstruct element型へのポインタとする。
startのポインタをたどり、第3番目のデータのNULL(='\0')を見つけるまで、次のように画面表示するプログラムを作成せよ。

-> apple \150 -> orange \100 -> melon \500
0885デフォルトの名無しさんNGNG
void find(struct element *p){
while (p != NULL){
printf("-> %s \%d ", p->name, p->price);
p = p->pp;
}
}
0886884NGNG
早いお答えありがとうございます。
0887デフォルトの名無しさんNGNG
あっ
\→\\に。
0888デフォルトの名無しさんNGNG
プログラムの問題じゃなくてもいいかな(´ω`)


既に64ビットコンピューターが一般に手に入るようになってきたが、
その場合、fseek、ftell関数などの定義をどのように変更すると
もっともシステムの変更が少なくなるか考察せよ。
(IntelとAMDではアプローチが違うのでその点も加味すること)


ってのが良く分からなくて・・
助言お願いします。
0889デフォルトの名無しさんNGNG
>>888
int を 64 ビットにする。
0890デフォルトの名無しさんNGNG
size_t 使わないヤシのことなんか知らん
0891デフォルトの名無しさんNGNG
>>883
締め切りは火曜日までなんです。
よろしかったらお願いいたします。
0892デフォルトの名無しさんNGNG
かなり視野の狭い範囲の問題だな。
んなもんコンパイラとAPIの依存の問題で
マクロなどを使って工夫しろとしか言いようが無い。
0893デフォルトの名無しさんNGNG
>>890
どこから size_t なんて沸いて出やがりましたか?
0894デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1082961626_2/process.gif

createprocessとmailslotを使う問題です。
言葉で説明しても分かりにくいかと思い図面を書いてみました。
もうしわけございませんがよろしくお願いいたします
0895デフォルトの名無しさんNGNG
>>894
かえって分かりづらい。>>1呼んだ?
0896デフォルトの名無しさんNGNG
まんまこのような絵を渡されてこういうプログラムを作れと言われまして。
一応問題の全文を書きました。

私の考えた事を書きますと、
1.入力プロセス&出力プロセスをcreateprocess関数で作成起動
2.入力プロセス:キーボードで"Hello world"を入力
3.メールスロットを使って出力プロセスへ渡す
4.受信待ちしていた出力プロセスが、"Hello world"を受け取る
5.出力プロセス:"Hello world"をファイルへ書き込む
6.出力プロセス:"Hello world"を表示
7.5と6が終わったら"OK"をメールスロットを使って入力プロセスへ返す
8.受信待ちしていた入力プロセスが"OK"を受け取る
9.入力プロセス:"OK"を表示する
10.入力プロセス:キーボードの入力待ち

こういう事ではないかと思います。どうもこの手順を書きながら思ったのですが
もしかすると学生がどこまで独学で出来るのかを図る意図があったのかもしれないですね。
0897デフォルトの名無しさんNGNG
>こういう事ではないかと思います。どうもこの手順を書きながら思ったのですが
>もしかすると学生がどこまで独学で出来るのかを図る意図があったのかもしれないですね。

そんな考えを持ちながら、このスレに投稿したというのか
0898デフォルトの名無しさんNGNG
>>896
>一応問題の全文を書きました。
どこに書いてあるの?
0899デフォルトの名無しさんNGNG
>>898
正しくは「描きました」ですね。すいません。
0900デフォルトの名無しさんNGNG
>>899
なるほど。了解です。
んで、図だけで文章無し?
0901デフォルトの名無しさんNGNG
>>900
はい。図だけでなのです。
>>894であるようにcreateprocessとmailslotを使う事を
口頭で指示されているのですが、文章はありません。

よろしくお願いいたします。
0902デフォルトの名無しさんNGNG
1000までのすべての素数を表形式で表示するHTMLを出力するプログラムを作れ。ただし、素数を計算するプログラムは以下を参照すること。
#include <stdio.h>
#include <stdlib.h>
int is_prime( int i )
{
int n;
for ( n = 2; n < i; n++ ){
if ( i % n == 0 ) return 0;
} /* for */
return 1;
}
int main()
{
int i, j;
j = 0;
for ( i = 2; i <= 1000; i++ ){
if ( is_prime( i ) ){
j = j + 1;
printf( "%5d", i );
if ( j == 10 ) {
printf( "\n" );
j = 0;
} /* if */
} /* if */
} /* for */
printf( "\n" );
return 0;
} /* main */


0903デフォルトの名無しさんNGNG
うわー、めちゃくちゃ効率悪いな。
0904884NGNG
すみません884で質問した者ですが、10時間ぐらい考えても、どうしてもプログラムが作れません。
main関数の中も教えていただけないでしょうか。お願いします。
0905デフォルトの名無しさんNGNG
#include <stdio.h>

struct element{
char name[10];
int price;
struct element *pp;
};

void find(struct element *p){
略
}


int main() {
struct element melon = { "melon",500,NULL };
struct element orange = { "orange",100,&melon };
struct element apple = { "apple",150,&orange };
struct element *start = &apple;
find(start);
return 0;
}

なんか違うような気もするが。
0906デフォルトの名無しさんNGNG
適当なASCII文字で構成されたファイル(たとえば漢字を使わないで書かれたC言語のプログラムなど)を入力して、アルファベットの部分のみすべて大文字にして別のファイル名でセーブするプログラムを書け。たとえば、

input file: foobar.c
output file: foobar2.c

というように最初に聞いて、その情報に基づいて動作するようにせよ。ただし、下線は手で打ち込んだ部分。また、変更した文字数などを最後に出力するようにせよ。

0907デフォルトの名無しさんNGNG
>>902
printf("<html><head><title>hoge</title></head><body><table>");
for ( i = 2; i <= 1000; i++ ){
if ( is_prime( i ) ){
if(j == 0) printf("<tr>");
j = j + 1;
printf( "<td>%5d</td>", i );
if ( j == 10 ) {
printf( "</tr>\n" );
j = 0;
} /* if */
} /* if */
} /* for */
printf("</table></body></html");
0908デフォルトの名無しさんNGNG
>>906
#include <stdio.h>
#include <ctype.h>

int main() {
FILE *in_fp,*out_fp;
int c;
long count=0;
char in_file[80],out_file[80];
printf("input file: "); gets(in_file);
printf("output file : "); gets(out_file);
if((in_fp = fopen(in_file,"r")) != NULL) {
if((out_fp = fopen(out_file,"w")) != NULL) {
while((c = fgetc(in_fp)) != EOF) {
if(islower(c)) {
count++;
c = toupper(c);
}
fputc(c,out_fp);
}
}
fclose(out_fp);
}
fclose(in_fp);
return 0;
}

0909デフォルトの名無しさんNGNG
printf("chars : %d\n",count);
0910デフォルトの名無しさんNGNG

[問題]このソースコードを見てバグを探せ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html#1
ソースコードの訂正願いますに置いておきました。
宜しくお願いします。
0911904NGNG
だいぶエラーが出てしまうのですが、やりかたが根本的に違うということなのでしょうか?
配列を使ったりして、なんとか動くようにならないでしょうか。お願いします。
0912デフォルトの名無しさんNGNG
>>908
toupper() は変換できない場合はそのままのコードを返すから、
fputc(toupper(c), out_fp); でおk。
0913デフォルトの名無しさんNGNG
>>912
>また、変更した文字数などを最後に出力するようにせよ。
0914デフォルトの名無しさんNGNG
>>910
カレンダーのか?インデントが酷すぎる。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1082632296&res=4&fi=no
まだおまいのコンパイラだとwarningが出るかも。
0915デフォルトの名無しさんNGNG
>>913
あー指摘するのも面倒くさい。そーすよめ
0916デフォルトの名無しさんNGNG
>>911
struct element melon = { "melon",500,NULL };
struct element orange = { "orange",100,NULL };
struct element apple = { "apple",150,NULL };
struct element *start = NULL;
start = &apple; apple.pp = &orange; orange.pp = &melon;
に変えてみろ。
それとも挿入は自分で入力できるようにしたいのか?
0917デフォルトの名無しさんNGNG
解説おねがいします!

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

int ***malloc3Dint(int, int, int);
void free3Dint(int ***);

int main(void){
int l=2, m=3, n=4;
int ***aaai;

aaai = malloc3Dint(l, m, n);
aaai[1][2][3] = 123;
printf("%d\n", aaai[1][2][3]);
free3Dint(aaai);
return 0;
}

0918917NGNG
int ***malloc3Dint(int l, int m, int n){
int i, j;
int ***aaai2;
int **aai2;
int *ai2;

if((aaai2 = (int ***)malloc(sizeof(int *)*l)) == NULL)
exit(1);
if((aai2 = (int **)malloc(sizeof(int *)*l*m)) == NULL)
exit(1);
if((ai2 = (int *)malloc(sizeof(int)*l*m*n)) == NULL)
exit(1);
for(i=0; i<l; i++){
for(j=0; j<m; j++)
aai2[i*m + j] = ai2 + i*m*n + j*n;
aaai2[i] = aai2 + i*l;
}
return aaai2;
}

void free3Dint(int ***aaai2){
free(aaai2[0][0]);
free(aaai2[0]);
free(aaai2);
}

このプログラムは何をやっているのか順を追って説明していただけませんか?
よろしくおねがいします。
0919910NGNG
失礼
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1082632296&res=3
3番目のやつです。
0920デフォルトの名無しさんNGNG
>>919
count_bits()の中
> while (x){
> if(x&1U)count++;
> }
if文の次に x >>= 1; を追加。
以上。
0921助けてください。NGNG
C言語を使ってやる宿題なんですができません。
わかる方お願いしますm(_ _)m
自力では何もできないもので。バカなんです。

次のような規則にしたがって離散時間tにおける状態xtから次の時刻t+1における状態xt+1が決まるシステムがある。

xt+1=tanh(axt) t=0,1,2,3.....
この規則を繰り返し適用すれば初期状態xoから出発してそれ以降の任意の時刻での系の状態を計算できる。
x0→x1→x2・・・→xt→・・・

次の2つの場合について初期値(正負どちらもあり得る)をいろいろ変えながら系の時間発展を計算せよ。典型的な例について状態xを時間の関数として図示し、系の振る舞いについてわかったことを述べよ。またなぜそうなるのかも考えてみよ。

(1)a=0.95の場合
(2)a=1.05の場合

マジお願いします。泣きそうなので。
0922ラポNGNG
すいませんがこの問題わかりません
またお願いしたいです。
スタックを初期化する関数 void stack_initialize(stack *stk)
およびスタックが空であるかどうかを判断する関数 int is_stack_empty(stack *stk) を作れ.
is_stack_empty は,スタックが空であるときに 1 を,空ではないときに 0 を返す.
0923デフォルトの名無しさんNGNG
>>922
stack の宣言はどうなってる?
0924デフォルトの名無しさんNGNG
>>922
初期化→スタックポインタを0にすればいいんだろ。
0925デフォルトの名無しさんNGNG
俺ならスタックポインタの初期値は -1 にする。
使ってないって感じがするから。
0926デフォルトの名無しさんNGNG
-1が有効なアドレスだったらどうするよ。
ポインタならNULL使えって。
0927デフォルトの名無しさんNGNG
二つのやり方があるだろって言ってるんだよ。
stack[sp++] = push_data;
stack[++sp] = push_data;
0928デフォルトの名無しさんNGNG
>>921
初期値の配列作って。ループ回して計算。
CVS形式でprintfした後,出力をExcelにでも読み込んで観察すれば?

プログラム書く必要がないなら,漏れはExcelだけで済ますけどな。
0929助けてください。NGNG
921について。
928>>
図と説明はいいとして最初のプログラムがわかりません。
わかる方教えていただけたら幸いです。
0930デフォルトの名無しさんNGNG
int i,j;
double x[10];
const int t_max = 1<<16;
const int t_delta = 1;
const double a=1.05;
printf("a=%f\n");
printf("0,\t");
for(i=0; i<sizeof(x)/sizeof(x[0]); ++i) { printf("%f,\t",x[i]=0.1*i); }
printf("\n");
for( i=1; i<t_max; i+=t_delta ){
printf("%d,\t",i);
for( j=0; j<sizeof(x)/sizeof(x[0]); ++i){
printf("%f,\t",x[i]=tanh(a*x[i]));
}
printf("\n");
}

しかし,SASとかグラフ描画ライブラリをか,しかるべきものを使うべき演習じゃねーのか,コレ?
0931デフォルトの名無しさんNGNG
縦5×横5のマスに○×をランダムで表示させる。
毎回同じであってはならない
マスの左と上には座標数字を表示
マスの2行下に座標指定を‘XY’で入力する
‘00’を入力したら現在状態を破棄し、最初から始める
‘001’のように入力したらエラー、再入力
‘Z’を入力で終了する
座標指定入力において何を入力しても不正な動作はしない。
‘66’とか入力したら再入力にする

座標指定された位置、及び上下左右のマークを反対にする
指定された位置の上下左右が範囲外の時、何もしない。該当する部分のみ反対にする。

全マス同じマークになったら‘You win’を表示
全マス同じマークになったら何を入力しても最初から始める

条件は
グローバル変数はマスに使うtableのみ
ほかの変数はグローバルは認めない
メイン関数の中身は
初期化処理する関数
ランダムで○×を表示する関数
座標を入力する関数
マークを反転させる関数
その結果を表示する関数
全マス同じマークか判定する関数
You winを表示する関数

どうかよろしくお願いします。m(_ _)m
本当に泣きそうです・・・
0932デフォルトの名無しさんNGNG
んーこれは、どこかで見たようなゲームかな。
■□■□■
□■■■□
■■■■■
□■■■□
■□■□■
この状態で、中央を指定すると、
■□■□■
□■□■□
■□□□■
□■□■□
■□■□■
このように反転する、と。
0933デフォルトの名無しさんNGNG
>>931
メイン関数の中身は関数、って嘘だろ?
0934931NGNG
>>932
そんな感じです

>>933
ユーザー定義関数で以下を作れと言われました。
で、メインから呼び出せと・・・
この説明で分かるでしょうか?

初期化処理する関数
ランダムで○×を表示する関数
座標を入力する関数
マークを反転させる関数
その結果を表示する関数
全マス同じマークか判定する関数
You winを表示する関数
0935デフォルトの名無しさんNGNG
「ライツアウト」だろ?そのゲーム。
0936デフォルトの名無しさんNGNG
>>931
>全マス同じマークになったら何を入力しても最初から始める
これがよく判らん…が、他は↓こんなんでいい?

tp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1074774948&res=8
0937デフォルトの名無しさんNGNG
いかん、'z' 入力で終わるって仕様を実装すんの忘れた。
まあそれくらいは自分でやってちょ。
0938デフォルトの名無しさんNGNG
「float *p[10];」と「float (*p)[10];」の2つの変数宣言の違い、
「float a[][10]」と「float (*a)[10]」という
2つの関数の引数の宣言の違いについて
説明せよ、というのが分かりません。

お願いします。
0939デフォルトの名無しさんNGNG
float型のポインタの10要素配列、float型の10要素配列のポインタ
float型の10要素配列の配列
0940デフォルトの名無しさんNGNG
猿ロダにうpしたソースファイル
ttp://www1.linkclub.or.jp/~yon/haha/saru-img/saru0757.c
をポインタで書き換えたいのです。

//-------------------------------------------------------------------
// 以下のプログラムを作成してください
//       上記の四則演算関数の結果をポインタを用いて得るように改造する
// 次のような関数を作成する
// void Add(int a, int b, int *ans)
// void Sub(int a, int b, int *ans)
// void Mul(int a, int b, int *ans)
// void Div(int a, int b, int *ans)
//
//-------------------------------------------------------------------

初期値はプログラム内部で設定するので、入出力は気にしなくていいです。
お暇な方、よろしくお願いします<(_ _)>
0941デフォルトの名無しさんNGNG
void Add(int a,int b,int *ans)
{
*ans = a + b;
}



int x,y,z;
x = 10;
y = 5;
Add(x,y,&z);

これだけ書けば、あとは自分でできるよな、というほどの問題でもないが。

0942940NGNG
>>941
速レスありが�d。
0943931NGNG
>>936
本当にありがとうございますm(_ _)m
自分でも読んでしっかり理解できるよう頑張ります
0944911NGNG
ありがとうございました。無事プログラムが完成しました。
0945デフォルトの名無しさんNGNG
なんで誰も>125に突っ込まないの?
0946940NGNG
続きものです。

//-------------------------------------------------------------------
// 以下のプログラムを作成してください。
//        941の作ってくれた関数をさらに一般化します。演算の仕方も引数で渡してください
//        void Calc(int calc, int a, int b, int *ans)
// calc == 0 和
// calc == 1 差
// calc == 2 積
// calc == 3 商
//
//-------------------------------------------------------------------

それで作ったプログラムを、また猿ロダにあげました
ttp://www1.linkclub.or.jp/~yon/haha/saru-img/saru0759.c
エラーが4つ、同じ関数の部分で出てしまいました。
どなたか添削していただけないでしょうか・・。
0947デフォルトの名無しさんNGNG
void型は戻値を持たない。
0948デフォルトの名無しさんNGNG
>>945
解説きぼん
0949デフォルトの名無しさんNGNG
>>946
最後の引き数 「&z」 を渡すことで
戻り値は z の中に入るから
「z = 」は要らないよん。
0950デフォルトの名無しさんNGNG
こういうのってenumとか使ったほうがいいんじゃないの?
0951デフォルトの名無しさんNGNG
http://page4.auctions.yahoo.co.jp/jp/auction/d47227135
0952デフォルトの名無しさんNGNG
>>950
よくない
0953940NGNG
通りますたー!
949ありが�d。947は、その通りですた。
「950のenumを使うのはC++だ」と言いたい951も(ついでに)ありがとお。

・・実は、この続きがもう一問ありまつ。

//---------------------------------------------------------
//
// さきほどのソースファイルの関数をさらに完全なものとする
//      �@返り値を付加する(0なら正常/1ならエラー)
//      �A計算方法を分かりやすくするため、#define定義にする
//
//---------------------------------------------------------

これで最後です。最終形態のラスボスです。
クリアしてエンディングを自力で見たいので、もちっと考えますが。
0954デフォルトの名無しさんNGNG
>>953
>>951は単なる宣伝なので、礼を言うことはない。
0955デフォルトの名無しさんNGNG
すいません。自然定数eを計算によって求め、結果を表示するプログラムの作り方を教えてください。
0956デフォルトの名無しさんNGNG
>>955
マルチ帰れ。
自然定数eなんてものは存在しないだろ。
0957デフォルトの名無しさんNGNG
>>953
>enumを使うのはC++だ
意味不明
0958デフォルトの名無しさんNGNG
そう問題に書かれていているからわからんのです。
0959デフォルトの名無しさんNGNG
(*n)[10] と n[10] はどう違うんですか?
0960デフォルトの名無しさんNGNG
>>958
そこまでマルチに徹するとは。
おそれいった。
0961デフォルトの名無しさんNGNG
あるファイルから文字を呼び出し、他のファイルへ左右逆にして
貼り付けたい時はどうすればいいですか?

I am a boy.
I like 2ch.
↓
.yob a ma I
.hc2 ekil I

こんな感じです。
0962デフォルトの名無しさんNGNG
for文とstrlen()を使えばいいです
0963デフォルトの名無しさんNGNG
char buf[1024];while(gets(buf)){char*p=buf+strlen(buf);while(p!=buf)putchar(*--p);}
0964マルチやめれ >>955NGNG
#include <iostream>
#include <iomanip>
#include <limits>
#include <cmath>

double exp_(){
double tmp = 1.0; // eを計算するための一時変数
double term = 1.0; // eの展開級数の各項を保存する変数
int k = 1; // 展開級数の項番号
double eps = std::numeric_limits<double>::epsilon(); // machine epsilon
while( term / tmp > eps ){ // 収束判定
term /= k;
// 展開級数の各項が1 / k!なので,前の項の計算結果を使って
// 1 / k! = 1 / (k-1)! * (1 / k)
// と計算できる
tmp += term; // 各項を足していく
++k; // 次の項の計算へ
}
return tmp;
}

int main(int argc, char *argv[]){
std::cout << std::setprecision(15); // 表示精度を15桁に
std::cout << exp_() << std::endl; // 計算結果表示
std::cout << std::exp(1.0) << std::endl; // 比較のため
}
0965デフォルトの名無しさんNGNG
>>963
一行の長さが1023超えたら条件を満たさなくなる。
ってことで、こんなもんかな。

static bool revCpChr(FILE *fpSrc, FILE *fpDest);
void revCp(FILE *fpSrc, FILE *fpDest)
{
while (revCpChr(fpSrc, fpDest)) {
}
}
bool revCpChr(FILE *fpSrc, FILE *fpDest)
{
int ch = fgetc(fpSrc);
switch (ch) {
case EOF:
return false;
case '\n':
return true;
default:
bool rtn = revCpChr(fpSrc, fpDest);
fputc(ch, fpDest);
return rtn;
}
0966965NGNG
最後の}が抜けた気がする。
ついでに蛇足ながら、
FILE *fpSrc = fopen("original", "r");
FILE *fpDest = fopen("reversed", "w");
revCp(fpSrc, fpDest);
fclose(fpSrc);
fclose(fpDest);
って感じで利用する。
0967デフォルトの名無しさんNGNG
>>964
それは自然対数の底。
0968デフォルトの名無しさんNGNG
(*n)[10] と n[10] はどう違うんですか?
0969デフォルトの名無しさんNGNG
>>959>>968
あきれるほどに既出
0970デフォルトの名無しさんNGNG
で、どう違うんでつか?
0971デフォルトの名無しさんNGNG
配列をさすポインタと配列
0972デフォルトの名無しさんNGNG
なんか同じ講師の複数の生徒が質問しているんじゃないかと思うのは気のせい?
0973961NGNG
thanks
0974素人NGNG
授業で、「ソースプログラムをコンパイラしようとしたら
失敗した。このあとどのような処置をすればよいか
具体的に述べよ。」って出たんですけどわかりますか?
0975デフォルトの名無しさんNGNG
まず、どう失敗したのかを認識する。
コンパイラへのパスが通っていなければ、パスを通す。
文法エラーならば問題箇所を修正する。
0976デフォルトの名無しさんNGNG
>>974
2ちゃんねるの適当なスレに高慢ちきな態度をもって丸投げする。
レスがくれば逆ギレし噛み付く。
するとあら不思議、解決してしまう。
0977デフォルトの名無しさんNGNG
コンパイラしようとするのではなくコンパイルしようとする
0978デフォルトの名無しさんNGNG
少し時間を待ってみてもう一度コンパイルしてみる。
0979デフォルトの名無しさんNGNG
曖昧な問題を出した教師の顔に一発おみまいする
0980デフォルトの名無しさんNGNG
次スレ
C/C++の宿題をやらせて、お兄ちゃん 22代目
http://pc5.2ch.net/test/read.cgi/tech/1083050221/
0981デフォルトの名無しさんNGNG
>>980
スレタイがきもいから立て直していいか?
0982デフォルトの名無しさんNGNG
コンパイラに失敗するようなPCは窓から放り投げる。
0983980NGNG
>>981
俺は紹介しただけで、俺が立てたわけじゃないからなあ。
ぼるじょあもキモイといえば十分キモイけど、どうせタイトルなんか見ないから
どうでもいいとは思う。
0984デフォルトの名無しさんNGNG
ソースプログラムのことは忘れて、親孝行に励む。
0985デフォルトの名無しさんNGNG
>>981
きもいから立て直すというその思考がきもい
0986デフォルトの名無しさんNGNG
きもいから立て直すというその思考がきもいというその思考がきもい
0987デフォルトの名無しさんNGNG
きもいから立て直すというその思考がきもいというその思考がきもいというその思考がきもい
0988デフォルトの名無しさんNGNG
       パパパパパーン
       ☆))Д´)←>>985
    _, ,_ ∩☆))Д´)←>>986
 ( ‘д‘)彡☆))Д´)←>>987
   ⊂彡☆))Д´)←>>989
     ☆))Д´)←>>990
0989デフォルトの名無しさんNGNG
巻き込まれた…_nO
0990デフォルトの名無しさんNGNG
あいたっ、ひどいなあ・・・
0991デフォルトの名無しさんNGNG
埋めるのは荒らし扱いなんだっけぬるぽ?
0992デフォルトの名無しさんNGNG
そんなことはないガッ?
レス数が950を超えています。1000を超えると書き込みができなくなります。