C/C++の宿題を片付けます 78代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/12/04(月) 08:58:40【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 77代目
http://pc8.2ch.net/test/read.cgi/tech/1164079451/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=0&H=&view=table&link2ch=on&shw=2000&D=tech
0002デフォルトの名無しさん
2006/12/04(月) 09:16:16[2]
いろいろな整数地a,bに対して、tを媒介変数として、座標が
x=cos(2πat)
y=sin(2πbt)
で表される曲線(リサージュ)を描くlisajous関数を作成しなさい
[3]C言語(emacs)
[4]12/6
[5]for,while,if文 ポインター 文字列 1,2次配列 関数
いまならってる範囲でグラフの描き方がわかりません。すいませんが力を貸してください。
0003デフォルトの名無しさん
2006/12/04(月) 10:11:16出来ればネット上にあるといいんですがありませんか?
概要だけでも説明してもらえないですか?やり方わかればできると思うんですが...
x + y = 1, x, y >= 0の条件の下で(2x + y)^2 + (x - y)^2 + (x + 2y)^2の最小値を求める
という問題の変数を増やした場合
x(1) + ・・・+ x(n) = 1, x(i) >= 0の条件の下でΣ{i=1,m} (Σ{j=1,n} a(i,j) * x(j))^2の最小値
はどのように解いたらいいのかわかりますか?
0004デフォルトの名無しさん
2006/12/04(月) 10:19:520005デフォルトの名無しさん
2006/12/04(月) 10:21:59[1]プログラム演習
[2]
一定の文字からなる列sを読み込み、以下の条件を満たす同じ個数の文字からなる列tを出力するプログラムを作りなさい。
ただし、以下での単語とは空白以外の文字からなる列のこととする。
1,s中の単語は同じ順番で t に現われる
2,t中では単語は一つの空白に区切られる
3,t中に最初の単語の最初の文字から最後の単語の文字までは列全体のちゅうおうに位置し、前後は空白である
例えば文字の列
_This___is__a____good___program___
を入力すると
______This_is_a_good_program______
が出力される。ここで、_は空白を表すものとする。
[3]C言語
[4]12/7
[5]for,while,if文 ポインター 文字列 1,2次配列 関数の書き方
00063
2006/12/04(月) 10:47:22出来たら報告しますね
ありがとうございました
0007デフォルトの名無しさん
2006/12/04(月) 10:57:51とりあえずさくらのサーバーレンタルしてきて、NAMAZUでも入れようかと思ったけど
一番安いプランじゃシェルログインできなかった(ズコー
プラン変更してくる
00083
2006/12/04(月) 11:02:45perlが動けば無料サーバーでも動かせますよ
ただしインディックスは自前で用意する必要がありますが
00093
2006/12/04(月) 11:18:27簡単でした
0010デフォルトの名無しさん
2006/12/04(月) 12:23:56#include <stdio.h>
#include <string.h>
int main(void)
{
int i, j, l, count = 0;
char str[256];
gets(str);
l = strlen(str);
for(i=0; i<l-1; i++) {
if(str[i]==' ') {
while(str[i+1]==' '){
for(j=i; j<l; j++) str[j] = str[j+1];
count++;
}
}
}
for(i=0; i<l; i++) str[l-1-i] = str[l-1-count/2-i];
for(i=0; i<(count-count/2); i++) str[l-1-i] = ' ';
for(i=0; i<count/2; i++) str[i] = ' ';
puts(str);
return 0;
}
0011デフォルトの名無しさん
2006/12/04(月) 12:34:23とりあえず予定地ね
まだ何も無いけど
0012デフォルトの名無しさん
2006/12/04(月) 12:35:37ググれば出てくる
0013デフォルトの名無しさん
2006/12/04(月) 13:02:17[2] 問題文(含コード&リンク):
以下のプログラムを参考に、
指定したファイルの内容に行番号をつけて表示し、
さらに、空白(スペース)、タブ、改行を除く文字数を
表示しなさい。
---------------------------サンプル-------------------------------
#include <stdio.h>
int main( void )
{
FILE *fp;
char c;
char inFileName[64];
char str[256];
printf("File name ?"); scanf("%s", inFileName);
if (( fp = fopen( inFileName, "r")) == NULL) {
perror("fopen"); exit(1);
}
while( fgets( str, 256, fp) )
printf("%s", str);
fclose( fp );
}
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 12月6日12:00
[5] その他の制限:特になし
0014デフォルトの名無しさん
2006/12/04(月) 14:16:26[2]
いろいろな整数地a,bに対して、tを媒介変数として、座標が
x=cos(2πat)
y=sin(2πbt)
で表される曲線(リサージュ)を描くlisajous関数を作成しなさい
[3]C言語(emacs)
[4]12/6
[5]for,while,if文 ポインター 文字列 1,2次配列 関数
おねがいします
0015しんご
2006/12/04(月) 14:29:07実行結果が次のようになるプログラムをつくりなさい。
例
Please enter a statemant: This is a programming class
Total 5 words. Each word contains;
This: 4 letters.
is: 2 letters.
a: 1 letters.
programming: 11 letters.
class: 5 letters.
ただし、単語数の上限は30、一単語の最大文字数は20と仮定する。
文章入力にはgets関数を使用する。
という問題なんですがよろしくお願いします。
0016デフォルトの名無しさん
2006/12/04(月) 14:32:36断る。
0017デフォルトの名無しさん
2006/12/04(月) 14:36:500018デフォルトの名無しさん
2006/12/04(月) 15:02:40[2] wavファイルを読み込んで、一番音の強い部分の前後1秒間をwavで出力
し、音の一番強かった時間を表示するプログラムを作成せよ。
って課題なのですが、どうかご助力お願いします。
[3] Windows C言語
[4] 期限:2006年12月11日まで
[5] 特になし
入力WAVファイルの量子化ビット数、チャネル数、コーデック、サンプリング周波数。
0020デフォルトの名無しさん
2006/12/04(月) 15:18:44ファイルヘッダ
0021デフォルトの名無しさん
2006/12/04(月) 15:19:41wavで出力とはファイルに出力?1秒に満たなかった場合は無音?カット?
強い部分が複数の場合は?
対応範囲。まさか全種類に対応しろってか?
0023デフォルトの名無しさん
2006/12/04(月) 15:59:36#include <stdio.h>
int main( void )
{
FILE *fp;
int i,lcnt=1,size=0;
char inFileName[64]; char str[256];
printf("File name ?"); scanf("%s", inFileName);
if (( fp = fopen( inFileName, "r")) == NULL) {
perror("fopen"); exit(1);
}
while( fgets( str, 256, fp) ) {
i=0; printf("%d\t%s",lcnt, str);
while(str[i]){
switch(str[i]){ case '\n': lcnt++;break;
case '\t': case ' ': break;default:size++;break;
}i++;}}
printf("total: %d characters\n",size);
fclose( fp );
}
マジ適当。マジデバッグしてない。
ちゃんと動いてるのか確認してから出すべし。
>>17の突っ込みに対応する為に最後のprintfは
printf("total: %d character%s\n",size,size>1?"s":"");
でもいいかもしれん(三項演算子キライだけど。)
0024デフォルトの名無しさん
2006/12/04(月) 16:49:40[2] 問題文(含コード&リンク):
整数 ID の二分木を表示する関数(簡単なものがスライドにあるのでそのまま打ち込んでも良いが、もっと見やすく拡張したほうが良い)と
二分探査木を作る関数(スライドにもあるが改変しても良い)を作り、二分探査木に以下のようなデータを入力した結果を表示せよ。
データは並んでいる順に入力すること。
(ア)1,2,3,4,5,6,7
(イ)1,7,2,6,3,5,4
(ウ)4,2,1,6,3,5,7
ソース http://www.geocities.jp/c_prog2011/struct3.ppt
[3] 環境
[3.1] OS: Windows XP Home Edition SP2
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005 Academic Edition
[3.3] 言語: C
[4] 期限: 2006年12月6日23:59まで
[5] その他の制限: 線形リストの基本は学んだが二分木は初めてです。
よろしくお願いします。
0025デフォルトの名無しさん
2006/12/04(月) 16:50:26[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3087.txt
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio 2003
[3.3] 言語: C
[4] 期限: 12月6日
0026デフォルトの名無しさん
2006/12/04(月) 17:15:03意味解らんなぁ。
リングバッファはFIFOなんだから入れた順に取り出されるだけだろ。
(*) は何の意味だろう。
追い越しとか全然考慮してない。
#include<stdio.h>
#define QMAX 32
#define QO() printf("%d\n",qo())
int WP = 0;
int RP = 0;
int QUEUE[QMAX];
void qi(int a){QUEUE[WP]=a; WP=(WP+1)%QMAX;}
int qo(){int ret=QUEUE[RP]; RP=(RP+1)%QMAX;return ret;}
int main(void){qi(1);qi(2);qi(3);qi(4);QO();QO();qi(5);qi(6);qi(7);QO();qi(8);QO();
qi(9);qi(10);QO();QO();QO();QO();QO();QO();return 0;}
0028デフォルトの名無しさん
2006/12/04(月) 18:59:53[2] 問題文
以下の様に動作するプログラムを作成する.
コマンド選択で,追加,リスト表示,検索,変更,削除が行える在庫管理プログラムを作成する.
データは,品名 単価 数量の形式で品を行ごとに管理するファイルとする.
上の機能ルーチンは,全て関数として作成すること.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3085.txt
[3] 環境
[3.1] OS:Windows
[3.2] Cygwin
[3.3] 言語:C言語
[4] 期限:12月8日
よろしくおねがいします。
0029デフォルトの名無しさん
2006/12/04(月) 19:00:20>>>919
>候補表示中にポインタがウィンドウ外に行ったとき、
>ウィンドウ外をクリックされたときの挙動はどうしたらいい?
候補中にウィンドウ外をクリックされたときは挙動を起こさず
ウィンドウ内に戻ったらそのまま続くでお願いします。
主キーは?
0031デフォルトの名無しさん
2006/12/04(月) 19:46:43[2] 問題文:文章だとわかりにくいので、画像をご覧ください。。。
ttp://up.kabubu.net/cgi/img2/17722.jpg
[3] 環境
[3.1] OS: WinXP HOME
[3.2] コンパイラ名とバージョン:VC++ 2005
[3.3] 言語:C++
[4] 期限:できれば本日中に・・・
よろしくお願いします。
0032デフォルトの名無しさん
2006/12/04(月) 19:59:38あと4時間しかねーじゃねーかw
0033デフォルトの名無しさん
2006/12/04(月) 20:08:58#include <stdio.h>
#include <math.h>
#define VAL_MAX (12)
int main( void ) {
double a[VAL_MAX], ave = 0.0, ss = 0.0, var, std;
int i;
for( i = 0; i < VAL_MAX; i++ ) {
printf( "a[%d]:", i + 1 ); scanf( "%lf", a + i );
}
for( i = 0; i < VAL_MAX; i++ )
ave += a[i];
ave /= (double)VAL_MAX;
for( i = 0; i < VAL_MAX; i++ )
ss += ( a[i] - ave ) * ( a[i] - ave );
var = ss / (double)VAL_MAX;
std = sqrt( var );
printf( "Ave = %lf, Var = %lf, Std = %lf\n", ave, var, std );
return 0;
}
003431
2006/12/04(月) 20:14:26早速、ありがとうございます。
しかし、「#define VAL_MAX (12) 」をまだ習ってないので。。。
for文を使って解く方法でお願いします。
0035デフォルトの名無しさん
2006/12/04(月) 20:24:050036デフォルトの名無しさん
2006/12/04(月) 20:25:130037デフォルトの名無しさん
2006/12/04(月) 20:26:32[2] 問題文(含コード&リンク):
* 2つの整数 x と y の全ての公約数を求めて配列 d に格納する関数 void compute_cd(int x, int y, int d[]) を作成せよ.
ただし, 配列 d へのデータの格納には 0 をターミネータとして用いよ. 例えば, 公約数が 1, 2, 3, 6 の場合,
d[0]=1, d[1]=2, d[2]=3, d[3]=6, d[4]=0 となるようにせよ.
* 公約数の表示は print_cd を呼び出して行うのではなく, main から compute_cd を呼び出し,
配列に格納された公約数を main の中で表示するようにせよ.
[3] 環境
[3.1] OS:windows
[3.2] cygwin
[3.3] C
[4] 期限:2006年12月7日
[5] あるプログラムを書き換えるようにやる問題です。
一応、原型が留まっていたほうが嬉しいので次にそのプログラムを貼ります
003837
2006/12/04(月) 20:32:37int g,i;
g=gcd(a,b);
for(i=1;i<=g;i++){
if(g%i==0){
printf("%d ",i);
}
}
}
int gcd(int a,int b){
int z;
while((z=a%b)!=0){
a=b;
b=z;
}
return b;
}
最大公約数を計算する関数と求める関数はこれを使っていました。
今度は最大公約数を計算して配列に入れるプログラム
もしくはこの計算する関数自体を配列に入れるプログラムを作りたいです。
関数だけで結構です。よろしくお願いします。
0039デフォルトの名無しさん
2006/12/04(月) 20:34:11#defineがダメなら
ポインタ演算とかプリプロセッサとか、
もしかしてdouble使うのもまずいんじゃないか。
004031
2006/12/04(月) 20:37:49ありがとうございます!
VALを12に変えて#defineを消して、ちゃんと動きました。
また何かありましたらよろしくおねがいします。
0043デフォルトの名無しさん
2006/12/04(月) 20:43:14他人事だからどうでもいいけど、
>>33のソースはポインタ演算使ってるから
もしポインタ演算やった事ないなら
printf( "a[%d]:", i + 1 ); scanf( "%lf", a + i );
を
printf( "a[%d]:", i + 1 ); scanf( "%lf", &a[i] );
にしたほうが人に頼んだってバレづらいぞ。
0044デフォルトの名無しさん
2006/12/04(月) 20:43:17void print_cd(int x,int y, int d[]){
int g,i;
g=gcd(a,b);
for(i=1;i<=g;i++){
if(g%i==0){
*d++=i;
}
}
*d = 0;
}
0045デフォルトの名無しさん
2006/12/04(月) 20:51:16俺みたいな人間もいるんだぜ
少しは配慮してくれよ
004637
2006/12/04(月) 21:26:20print_cd(a,b,d)
とかでやったら何も出なかったりエラー出たりです。
まさかここで詰まるとは思いませんでした。
0047デフォルトの名無しさん
2006/12/04(月) 21:35:43条件は満たした( ´,_ゝ`)
#include <stdio.h>
void lisajous(int a,int b){
char str[1024];
sprintf(str,
"echo \"set parametric;"
"set samples 400;"
"plot cos(2*pi*%d*t),sin(2*pi*%d*t)\""
"| gnuplot -persist",a,b);
system(str);
}
0048デフォルトの名無しさん
2006/12/04(月) 21:46:2444じゃないが関数名はcompute_cd(int x, int y, int d[])にしなきゃいけないんじゃないのか?
0049デフォルトの名無しさん
2006/12/04(月) 21:50:20そのはずだったけど元のがa,bでされてるから>>44の内容もa,bで作られてるし
a,bと書きましたが実物を全部x,yに置き換えます。
005131
2006/12/04(月) 21:52:04測定データ:
の下へ入力した値を表示させることができません。
どうしたらよいのでしょうか?
ttp://up.kabubu.net/cgi/img2/17722.jpg
0052デフォルトの名無しさん
2006/12/04(月) 21:52:48じゃあmainの中で配列を宣言してないとか?
0053デフォルトの名無しさん
2006/12/04(月) 21:56:07してるつもりなんですけど勘違いしてるかもです。
int d[];
って入れたら中になんか入れろやってエラー出るんですが、
意味が分かりません。
128とか適当な数字入れても無理です。どうするのでしょうか。
0054デフォルトの名無しさん
2006/12/04(月) 22:02:43main の中で配列 int d[サイズ]; のように宣言してる?
0055デフォルトの名無しさん
2006/12/04(月) 22:06:59int main (void){
int a,b,d[];
printf("a bの値>>");
scanf("%d %d",&a,&b);
ほかの関数(a,b);
compute_cd(a,b,d); もしくはcompute_cd(a,b,d[]);
return 0;}
これがメインです。[]をなくしたりいろいろ試しても正常にいきません。
0056デフォルトの名無しさん
2006/12/04(月) 22:08:35[2]
いろいろな整数地a,bに対して、tを媒介変数として、座標が
x=cos(2πat)
y=sin(2πbt)
で表される曲線(リサージュ)を描くlisajous関数を作成しなさい
[3]C言語(emacs)
[4]12/6
[5]for,while,if文 ポインター 文字列 1,2次配列 関数
0057デフォルトの名無しさん
2006/12/04(月) 22:09:04compute_cd(a, b, d)
でいけるはずだけど。
0058デフォルトの名無しさん
2006/12/04(月) 22:09:552行目の
int a,b,d[];
dのサイズ入れなあかん
int a,b,d[100]; とか
0059デフォルトの名無しさん
2006/12/04(月) 22:10:53for(i=0; d[i]; i++) printf("%d ", d[i]);
mainの中でやらなきゃダメよ。
0060デフォルトの名無しさん
2006/12/04(月) 22:12:30それ最初にやったらエラーは出ないけど何も表示されませんでした。
今やってみてもですけど
0061デフォルトの名無しさん
2006/12/04(月) 22:16:39暗黙のキャストがあるので必要ではない。
単なる習慣。
0062デフォルトの名無しさん
2006/12/04(月) 22:17:40どっかにソースうp
0063デフォルトの名無しさん
2006/12/04(月) 22:18:43何も表示されないのはcompute_cd()関数には表示が含まれてないから。
渡した配列に約数を格納しただけ。
>59のをcompute_cdの後に追加すれば表示される。
「配列に格納された公約数を main の中で表示するようにせよ」
ってのはそういう意味。
0064デフォルトの名無しさん
2006/12/04(月) 22:22:07でもおかしいよな
006533
2006/12/04(月) 22:23:42a[i] をループで printf() するだけだろ。
そのくらいは自分で直せ。
その程度の事も自分で出来ないなら学校を辞めるべきだ。
もっとも >>31 の問題自体も人に聞くレベルのものでは無い。
0066デフォルトの名無しさん
2006/12/04(月) 22:23:45どこがおかしい?
0067デフォルトの名無しさん
2006/12/04(月) 22:26:26真ん中の d[i] って何か式を評価しているのか?
0068デフォルトの名無しさん
2006/12/04(月) 22:28:14>配列 d へのデータの格納には 0 をターミネータとして用いよ
0069デフォルトの名無しさん
2006/12/04(月) 22:31:000070デフォルトの名無しさん
2006/12/04(月) 22:32:51007160
2006/12/04(月) 22:34:10配列をよく分かってませんでした。
あと、*d++と*dを使わないポインタ無し版はどうしたらいいでしょうか。
課題はポインタ有りと無し2種類出さなくてはいけないです。
単純に*を消して()入れるくらいに考えてたんですが
0072デフォルトの名無しさん
2006/12/04(月) 22:35:03この問題でd[i]==0を使わない配列の表示方法を教えてくれ
0073デフォルトの名無しさん
2006/12/04(月) 22:39:08!(否定)があるじょのいこ?
0074デフォルトの名無しさん
2006/12/04(月) 22:41:21while( d[i] ) printf("%d ", d[i++]);
0075デフォルトの名無しさん
2006/12/04(月) 22:41:34ポインタなし
void compute_cd(int x,int y, int d[]){
int g,i,j;
g=gcd(a,b);
for(i=1,j=0;i<=g;i++){
if(g%i==0){
d[j]=i;
j++;
}
}
d[j] = 0;
}
>73
d[i]を評価しないでって意味で頼む
0076デフォルトの名無しさん
2006/12/04(月) 22:46:30真偽で判断すりゃええがな
007731
2006/12/04(月) 22:47:12007837
2006/12/04(月) 22:53:34iとdだけで考えていました><ありがとうございます。
根本的にわかってない部分があるから早く冬休みに最初から見直したいんですが
忙しいからお世話になりました。
007928
2006/12/04(月) 23:06:03主キーってこれかな?
apple 200 50
orange 100 100
banana 50 500
実行結果を
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3089.txt
こんな感じにしたいのです。
0080デフォルトの名無しさん
2006/12/04(月) 23:23:520081デフォルトの名無しさん
2006/12/05(火) 00:05:18俺>>30じゃないけど
主キーってのは重複することが許されないもの
たとえば
apple 100 40
apple 50 20
と言う追加が許されない(appleが2つあることが許されない)なら
apple が主キーになる
0082デフォルトの名無しさん
2006/12/05(火) 00:55:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3090.c
がんばったけど誤差があったらごめん
0083デフォルトの名無しさん
2006/12/05(火) 01:31:17http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3091.txt
ブレゼンハムは実装してない(おぃ
大丈夫、まだ時間はあるし君ならできるさ!
0084デフォルトの名無しさん
2006/12/05(火) 01:39:04(主キーはいらない)
各品目に対して値段は一つだけ
0085デフォルトの名無しさん
2006/12/05(火) 02:20:37どうせ、次の課題で測定値をふやして求めろみたいなのでるんだろうから
作っておいた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3092.txt
0086デフォルトの名無しさん
2006/12/05(火) 10:30:58malloc習ってません>< と返って来るにmalloc(100)
0087デフォルトの名無しさん
2006/12/05(火) 10:40:210088デフォルトの名無しさん
2006/12/05(火) 10:55:220089デフォルトの名無しさん
2006/12/05(火) 11:11:49もういないかな?
一応書いたから、うぷっとくよ。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28881
ところでこの課題やってて、strncpyがナル文字を付加してくれないことを知ったんだが、なんかカッコイイ方法ないかな?
上記URLのコードだと、コピー元に空文字を指定して、「コピー元が足りない分はナル文字で埋める」という仕様を利用してるんだが、どうにもかっこ悪い。
誰かハックきぼん。
0090デフォルトの名無しさん
2006/12/05(火) 11:23:27意外とナル派も多かった
ナル文字 の検索結果 約 600 件中 1 - 10 件目 (0.22 秒)
0091デフォルトの名無しさん
2006/12/05(火) 12:49:00つstrtok
0092デフォルトの名無しさん
2006/12/05(火) 13:15:06[2] 問題文(含コード&リンク):
コマンドライン版 加減乗除 演算機の作成
※必ずコマンドラインから入力データを与えてください.本課題の必須要件です.
使い方: calc 数値1 [+|-|*|/] 数値2
(例)calc 4 + 2 <enter>
6.00
上記の例に示すようなコマンドライン版の超簡単な加減乗除演算機を作成してください.
加減乗除ですから,+ - * / の4つのオペレータ(加減乗除演算子)を考えるだけで十分です.
括弧の処理はなくて構いません.
括弧による優先順位や四則演算の優先順位を考慮すると格段に難しい問題になります.
したがって本課題では考慮の必要はありません.
コマンドラインから与える「数値1」と「数値2」は実際には文字列として main 関数に渡されます.ご注意ください.
例にあるように,コマンド名calcと数値1の間には半角スペースを入れます.同様に数値1とオペレータの間にも半角スペースを入れます.もちろんオペレータと数値2の間にもスペースが必要です.
例では小数点以下2桁で結果を表示しています.表示方法は各自で工夫してください.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: ([2006年12月09日20:00まで]
[5] その他の制限:なし
よろしくお願いいたします。
0093デフォルトの名無しさん
2006/12/05(火) 13:19:53[2] 問題文(含コード&リンク):
キーボードから入力した文章を単語単位で切り出し
総単語数と各単語の文字数を表示せよ。単語の区切りは半角スペース。
単語数の上限は30、一単語の最大文字数は20と仮定
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語:C
[4] 期限:12月5日夕方まで
[5] その他の制限:文字入力にはgets関数を使用。ポインタだけでかければ
更に可
0094デフォルトの名無しさん
2006/12/05(火) 13:24:351:4個の1桁の数字からなる順列を乱数で生成
(4個の数字は全て異なる)
2:4個の数字の順列を入力
3:生成した順列と入力の順列を比較
(数と位置があっている「hit])
(数はあるけれど位置が違う「blow])
4:hit数とblow数を表示
5:順列があたるまで入力を繰り返す
実行例
Number?:0123
Hits:0,Blows:1
Number?:0124
Hits:0,Blows:0
Number?:3567
Hits:3,Blows:0
Number?:3568
Hits:3,Blows:0
Number?:3569
Hits:4,Blows:0
Trials:5
0095デフォルトの名無しさん
2006/12/05(火) 13:46:06[2] 問題文(含コード&リンク): 数値を順番に読み込んで二次元の配列に格納する
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: どちらでも可
0096デフォルトの名無しさん
2006/12/05(火) 13:46:26http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28882
0097デフォルトの名無しさん
2006/12/05(火) 13:49:03テンプレにも従わずに図々しい
>>95
配列のサイズは?
入力のしかたは?
0098デフォルトの名無しさん
2006/12/05(火) 13:49:08>>15に同じのあるぞ。
回答は、>>89にある。
0099デフォルトの名無しさん
2006/12/05(火) 13:56:56バッファを直接カット。strtokの方がいいんだろうけど。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3093.c
0101デフォルトの名無しさん
2006/12/05(火) 14:15:31配列のサイズは4
入力の仕方はscanfです
0102デフォルトの名無しさん
2006/12/05(火) 14:19:33ソース汚いけど出来たぞ。テンプレに書き直したらUPする。
010394
2006/12/05(火) 14:24:110104のいまんさん
2006/12/05(火) 14:28:010105デフォルトの名無しさん
2006/12/05(火) 14:28:380106デフォルトの名無しさん
2006/12/05(火) 14:31:58どうも
0107デフォルトの名無しさん
2006/12/05(火) 14:43:58ExitWindowsEx(EWX_POWEROFF, 0);
でおk
0108のいまんさん
2006/12/05(火) 14:47:11これはOnDraw()関数に書き込むんですか?
0109デフォルト名無しさん
2006/12/05(火) 14:47:42[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:Linux (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン:コンパイラはgcc
[3.3] 言語: C言語
[4] 期限: ([2006年12月19日12:00まで]
[5] その他の制限: 無し
0110デフォルトの名無しさん
2006/12/05(火) 14:54:32プラットホームSDKもってないからヒントだけ。
1、ウインドウを出す。
2、WindowProcのWM_RBUTTONDOWNで、InvalidateRectを呼ぶ。またはfillrectで白塗りする。
そんな感じ。
0111デフォルトの名無しさん
2006/12/05(火) 14:54:37コードを書く前に言っておくッ!
おれは今>>109の宿題をほんのちょっぴりだが体験した
い…いや…体験したというよりはまったく理解を超えていたのだが……
,. -‐'''''""¨¨¨ヽ
(.___,,,... -ァァフ| あ…ありのまま 今 起こった事を話すぜ!
|i i| }! }} //|
|l、{ j} /,,ィ//| 『内容がないよう』
i|:!ヾ、_ノ/ u {:}//ヘ
|リ u' } ,ノ _,!V,ハ |
/´fト、_{ル{,ィ'eラ , タ人 な… 何を言ってるのか わからねーと思うが
/' ヾ|宀| {´,)⌒`/ |<ヽトiゝ おれも何をされたのかわからなかった
,゙ / )ヽ iLレ u' | | ヾlトハ〉
|/_/ ハ !ニ⊇ '/:} V:::::ヽ 頭がどうにかなりそうだった…
// 二二二7'T'' /u' __ /:::::::/`ヽ
/'´r -―一ァ‐゙T´ '"´ /::::/-‐ \ C言語だとかC++だとか
/ // 广¨´ /' /:::::/´ ̄`ヽ ⌒ヽ そんなチャチなもんじゃあ 断じてねえ
ノ ' / ノ:::::`ー-、___/:::::// ヽ }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::... イ もっと恐ろしいものの片鱗を味わったぜ…
0112デフォルトの名無しさん
2006/12/05(火) 14:55:39ハゲワロタ
0114173
2006/12/05(火) 15:10:58ネ申
0115デフォルトの名無しさん
2006/12/05(火) 15:12:34[2] 問題文(含コード&リンク):
1:4この1桁のすうじからなる順列を乱数で生成
2:4個の数字の順列を入力
3:生成した順列と入力の順列を比較
(数と位置が合っている[hit],数はあるけど位置が違う[blow])
4:ヒット数とブロー数を表示
5:順列があたるまで入力を繰り返す
[3] 環境
[3.1] OS:Linux (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン:コンパイラはgcc
[3.3] 言語: C言語
[4] 期限: ([2006年12月19日12:00まで]
[5] その他の制限: 無し
0116のいまんさん
2006/12/05(火) 15:12:43[2] 問題文(含コード&リンク): 例題2.1を以下の点について拡張せよ.
マウスを左クリックしたときに追加される文字列を各自変更すること.
マウスを右クリックしたときに,クリアすること.(マウスを右クリックすると何も表示されなくなる.)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC++ 6
[3.3] 言語: C++
[4] 期限: 12月5日17:00まで
[5] その他の制限:
0117115
2006/12/05(火) 15:14:27[4] 期限: ([2006年12月12日12:00まで]
0119デフォルトの名無しさん
2006/12/05(火) 15:24:23[2] 問題文(含コード&リンク): ライブラリ関数「strcmp(char str1,char str2」
と同じ処理をする関数を記述せよ。
[3] 環境
[3.1] OS:windows xp
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
[4] 期限: ([2006年12月8日)
[5] その他の制限: for文、if文、ポインタなし、
for(i=0;str1[i]=str2[i];i++)はわかるんですけど、
if文の分け方がいまいちわかりません。
どうかお願いします。
0120デフォルトの名無しさん
2006/12/05(火) 15:34:14これってstrcpyだよな
最後セミコロンいるけど
0121のいまんさん
2006/12/05(火) 15:44:420122115
2006/12/05(火) 15:54:13[3] 環境
[3.1] OS:Linux
0123デフォルトの名無しさん
2006/12/05(火) 16:03:58ヒット&ブロウでいいと思ったのでそういうものつくってみた。
カスタマイズはご自分で!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4
int main(){
int Number[N],In[N];
int i,j,hit,blow;
srand(time(NULL));
for(i=0;i<N;i++){Number[i]=rand()%10;In[i]=0;}
do{
printf("%d桁の数を入力!:",N);
for(i=0;i<N;i++){if((In[i]=getchar()) ==EOF) break;
In[i]-='0';}
fflush(stdin);hit=0,blow=0;
for(i=0;i<N;i++){if(Number[i]==In[i]) hit++;}
for(i=0;i<N;i++){for(j=0;j<N;j++){if(Number[i]==In[j]) {
blow++;
break;
}}}
for(i=0;i<N;i++) printf("%d-",In[i]);
printf("%dHit,%dBlow\n",hit,blow-hit);
}while(hit!=N);
for(i=0;i<N;i++) printf("%d",Number[i]);
puts("\nComplete!!");
}
0124デフォルトの名無しさん
2006/12/05(火) 16:15:40ライブラリ関数「strcmp(char str1,char str2」
なんてないと思うんですけど.....
strcmp(char* str1,char* str2) なのか?
上だと文字列が関数に引き渡せないんじゃないか?
0125デフォルトの名無しさん
2006/12/05(火) 16:21:42gcc3.4.4のコードを張ってみる。
google code searchって便利だね。
GPLライセンス付けて提出すればOKじゃね?
int
strcmp (const char *s1, const char *s2)
{
#ifdef __OPTIMIZE__
if (inside_main)
abort ();
#endif
while (*s1 != 0 && *s1 == *s2)
s1++, s2++;
if (*s1 == 0 || *s2 == 0)
return (unsigned char) *s1 - (unsigned char) *s2;
return *s1 - *s2;
}
0126デフォルトの名無しさん
2006/12/05(火) 16:22:54い)を画面表示し,さらに文字列s1 の後ろに文字列s2 を連結して画面表示するプログラムを
作成しなさい.ただし,文字列s1 と文字列s2 を連結したものを一度文字列s1 に格納してから
表示を行うこと.また,strlen(),strcat()等の関数を使ってはならない.
よろしくお願いします。
0127デフォルトの名無しさん
2006/12/05(火) 16:26:01関数名が違うよ?(笑)
0128のいまんさん
2006/12/05(火) 16:30:09>>116です。
0129デフォルトの名無しさん
2006/12/05(火) 16:34:23それくらい各自で直せ。
0131デフォルトの名無しさん
2006/12/05(火) 16:38:100132デフォルトの名無しさん
2006/12/05(火) 16:40:56OnRButtonDown( UINT nFlags, CPoint point ){
CClientDC hdc(this);
RECT rt;
CBlush bl(RGB(0,0,0));
this->GetClientRect(&rt);
hdc->FillRect(&rt,&bl);
return;
}
0133のいまんさん
2006/12/05(火) 16:46:34エラーがでちゃいますね。
CBlush blはどこから持ってきた関数なんですか?
0134デフォルトの名無しさん
2006/12/05(火) 16:48:36http://www.cppdoc.com/example/mfc/mfc.html
参考にして書いた。
0135かき☆
2006/12/05(火) 16:52:00簡単すぎたらすみません;;;;
【2以上の整数を読み込み素数であるかどうかを判定する文をつくる】
というのなんですけど...
お願いします!!!m(_ _。)m ペコリ
0136デフォルトの名無しさん
2006/12/05(火) 16:53:32テンプレ書いてくれとあれほど・・・。
0137かき☆
2006/12/05(火) 16:59:520138のいまんさん
2006/12/05(火) 16:59:57FullRectが構造体、共有体のポインタではないとでるんですが・・・。
0139デフォルトの名無しさん
2006/12/05(火) 17:01:50ちゃんと>>1をよんでくれ。
0140デフォルトの名無しさん
2006/12/05(火) 17:03:43hdc->FillRect(&rt,&bl);
を
hdc.FillRect(&rt,&bl);
に変更。
0141デフォルトの名無しさん
2006/12/05(火) 17:03:47コピペができる人でないと難しい。
0142のいまんさん
2006/12/05(火) 17:04:19FillRectだったですね。
0143揚げ物2号
2006/12/05(火) 17:04:20[2] 問題文(含コード&リンク):二次元配列
[3] 環境
[3.1] OS:windows xp
[3.2] コンパイラ名とバージョン:わかりません
[3.3] 言語: C
[4] 期限: 12月6日1:00まで
[5] その他の制限: defineは使わずに。二次配列(hyo[i][j])を使って
作る。
1から3までの3種類の商品について、1月から12月までの売り上げ個数
を入力すると、商品ごとの合計売り上げ個数と月ごとの合計売り上げ個数を
表示するプログラム。
0144のいまんさん
2006/12/05(火) 17:07:15エラーがなくなったのですが、右クリックをすると画面が黒くなって、左クリックをすると元の画面に戻ってしまいます。
0146かき☆
2006/12/05(火) 17:08:28[2]2以上の整数を読み込み素数であるかどうかを判定する文をつくる
[3]C言語
[4]12月12日
[5]for文if文switch文while文break文は習ってます
お願いします!!
0147デフォルトの名無しさん
2006/12/05(火) 17:16:21FillRectは四角形の塗りつぶしメソッド。
CBlush bl(RGB(0,0,0));
RGBで色を指定してる部分をうまく合わせてくれ。
0は色を発色しないという意味になるから、そこをなんとか。
0148のいまんさん
2006/12/05(火) 17:20:36でも左クリックすると、もともと右クリックで消える前にあった文字列が表示されるんですよね・・・・。
0149デフォルトの名無しさん
2006/12/05(火) 17:32:19#include <stdio.h>
int main() {
int n, i, j, k, f = 1;
scanf("%d", &n);
for(i=2;i<n;i++) {
if(n%2) {
switch(n%i) {
case 0: f = 0; break;
}
}
}
j = 0;
while(j<100) {
j++;
}
}
if(n == 1) f = 0;
printf("%s", f ? "素数" : "非素数");
return 0;
}
0150149
2006/12/05(火) 17:35:14間違えた
#include <stdio.h>
int main() {
int n, i, j, k, f = 1;
scanf("%d", &n);
for(i=2;i<n;i++) {
switch(n%i) {
case 0: f = 0; break;
}
}
j = 0;
while(j<100) {
j++;
}
if(n == 1) f = 0;
printf("%s", f ? "素数" : "非素数");
return 0;
}
0151デフォルトの名無しさん
2006/12/05(火) 17:37:24むー。もしかして、ダブルバッファリングしてるのか。
それなら、バックバッファにFillRectすればOK。
情報が小出しなのはやめてくれーTT
0152デフォルトの名無しさん
2006/12/05(火) 17:44:580153かき☆
2006/12/05(火) 17:46:30ありがとうございます☆
これは何桁でも使えますか??なぜkを定義してつかってないのですか??
0154のいまんさん
2006/12/05(火) 17:47:39バックバッファとはなんでしょう?
0155デフォルトの名無しさん
2006/12/05(火) 17:48:47#include <stdio.h>
int main(void)
{
int num, i, rem;
printf("整数を入力:");
scanf("%d",&num);
for(i=2;i<num;i++)
{
rem = num % i;
if(rem == 0)
{
printf("%dは素数ではない\n", num);
return 0;
}
}
printf("%dは素数\n",num);
return 0;
}
0156デフォルトの名無しさん
2006/12/05(火) 17:49:33スレのレベルがどんどん下がる
そのうち「2つの整数の和を求めるプログラムがわかりません><」
とか来るぞ
0157デフォルトの名無しさん
2006/12/05(火) 17:52:24intの最大値まで使える
kがいらないなら外せばいい
0158揚げ物2号
2006/12/05(火) 17:53:07[2] 問題文: 1から3までの3種類の商品について、1月から12月までの売り上げ個数
を入力すると、商品ごとの合計売り上げ個数と月ごとの合計売り上げ個数を
表示するプログラム。
[3] 環境
[3.1] OS:windows xp
[3.2] コンパイラ名とバージョン:わかりません
[3.3] 言語: C
[4] 期限: 12月6日1:00まで
[5] その他の制限: defineは使わずに。二次配列(hyo[i][j])を使って
作る。
143でミスってたので、もう1度書き直しました。
0160デフォルトの名無しさん
2006/12/05(火) 17:59:37[2] Buffonの針の問題
床に間隔2Lの平行線を引き、長さ2a(<2L)の針をN本用意すればランダムに針を投げn本が平行線に交差する。
確率はn/N=2a/πLとなる。
a=Lの場合はしたがってP=n/N=2/πになる。
これを用いてπの値を求めるプログラムを作成せよ。
[3] 環境
[3.1 Windows
[3.2] Borland C++ Compiler 5.5
[3.3] C++
[4] 12月11日まで
0161デフォルトの名無しさん
2006/12/05(火) 18:05:46そろそろ余裕がなくなってきたからこれが最後。
ダブルバッファリングのバックバッファというのは主対象と類似したものをもう一個用意して、下準備するためのもの。
グラフィックの場合は表示される領域と同じだけの大きさの領域を確保してそこに下準備として描画する。
グラフィックにおける恩恵は画面のチラツキなどを防止するという効能がある。
そんなわけでやね、どこかにDrawTextかなんかで文字列をバックバッファに書き込んでる所があるはずだから、
そこを探し出してこぴーして変更してみてくれ。
そもそも、MFC知らないんだってば。TT
じゃ、がんばってくれ。
0162デフォルトの名無しさん
2006/12/05(火) 18:06:080163デフォルトの名無しさん
2006/12/05(火) 18:10:11[2] 問題文(含コード&リンク):以下の機能をもつプログラムを作る
・行列(要素は整数型、3行x3列)に値を入力する
・行列を表示する
・利用者が入力した列番号に基づいて、行列の2つの列を入れ替える
・転置行列を求める
ただし、以下の機能を持つ関数のプログラムを個別に作り、一つにまとめる。
主プログラム(main)
行列に値を入力する関数
行列を表示する関数
利用者が入力した列番号に基づいて、行列の2つの列を入れ替える関数
転置行列を求める関数
機能の一覧(終了、行列成分を入力、表示、列の入れ替え、転置)を表示する関数
(行列は大域変数とし、2次元配列を用いて表現すること)
[3] 環境
[3.1] OS:Windows
[3.2] バージョン:VC++2005
[3.3] 言語:C++
[4] 期限:12/7 木曜日
[5] その他の制限:何という呼び名かよくわかりませんが、行列計算がプログラムを長々と書かなくてもできるような機能があるみたいですが、そういうのを使うのは無しと制限されました。
入出力ライブラリは
#include <iostream>
using namespace std; っていうのしか習ってません。
よろしくお願いします。
0164デフォルトの名無しさん
2006/12/05(火) 18:13:31これって無限に広い平面状で投げるわけじゃないよね?
0165のいまんさん
2006/12/05(火) 18:17:500166かき☆
2006/12/05(火) 18:18:21本当にありがとうございます☆
幼稚な内容でごめんない[壁]ノ_<。)丁寧に教えてくださってありがとうございます☆
0167デフォルトの名無しさん
2006/12/05(火) 18:30:540168デフォルトの名無しさん
2006/12/05(火) 18:38:04興味が有ったので少し調べたら、
『無限平面に無限長の線分が等間隔に無限本存在する』イメージで良いみたい。
結局、ランダムな要素とは『針の中心から直近の線分までの距離』と『針の角度』だけだから。
0169デフォルトの名無しさん
2006/12/05(火) 18:45:17別に有限と仮定しちまってもおkだぜ
0170デフォルトの名無しさん
2006/12/05(火) 18:47:37なるほど、平行線も無限本ね
とすると有限で考えられるな
0171デフォルトの名無しさん
2006/12/05(火) 19:09:50doubleでa,Lを、intでN,nを宣言して
for(int i=0;i<N;i++)if(L*rand()/RAND_MAX+a*cos(M_PI/2*rand()/RAND_MAX)>=L)n++;;cout << 2*a*N/n/L << endl;
0172デフォルトの名無しさん
2006/12/05(火) 19:26:45自分勝手な感情をやたらと公の場で敢えて表現しちゃう
自分勝手な奴こそ(ry
0173デフォルトの名無しさん
2006/12/05(火) 19:28:52わざわざ名前消してsageて自分擁護ですか
0174デフォルトの名無しさん
2006/12/05(火) 19:31:36自分勝手な判断基準で公の場に自分のみっともない恥を晒して
バカだなぁw お前みたいなのは世間知らずって言うんだよw
良く周りから、つまらないことで笑われるだろ?w
悪いが俺は顔文字を使った本人じゃないw
お望みどおりお前のバカ発言を晒しageしちゃるw
0175デフォルトの名無しさん
2006/12/05(火) 19:36:33どこを縦読み?
0176デフォルトの名無しさん
2006/12/05(火) 19:40:35ぷぷっ、そういうことでしか場を濁すことしか出来なくなったかw
宿題に答える気がないなら失せろ、俺もこれ以上お前みたいな
世間知らずの知能、知性の低い奴を相手にはしない
もっと広い世の中を知るんだな、井の中の蛙w
0177デフォルトの名無しさん
2006/12/05(火) 19:43:220178のいまんさん
2006/12/05(火) 19:45:410180デフォルトの名無しさん
2006/12/05(火) 20:05:40今ココ見たんで、よくわからんけど
文字の追加、クリアだけなら
イチイチ画面を塗りつぶす必要は無いのでは?
例えばウィンドウクラスのメンバに文字を格納するバッファを持っておいて
それをOnDraw()内でTextOut()で描画して
左クリック→バッファに文字追加
右クリック→バッファの内容をクリア
とすればいいのでない?
0181デフォルトの名無しさん
2006/12/05(火) 20:12:540182デフォルトの名無しさん
2006/12/05(火) 20:16:07例題2.1がどんなモンだか示さないのでは、エスパーでもない限り
どうしようもないよな。
0183のいまんさん
2006/12/05(火) 21:00:26表示する文字列を格納するためのメンバー変数を追加.
onDraw に文字列を表示する記述を追加
クラスウィザードで,「マウスの左ボタンを押した」というイベントに対するメッセージハンドラを生成する.
生成したメッセージハンドラに,文字列を1文字分長くするという記述を追加.
例題2.1はこんな感じです。
0184デフォルトの名無しさん
2006/12/05(火) 21:06:540185デフォルトの名無しさん
2006/12/05(火) 21:24:35そういうノリなら>>180でおkっぽいな
0186のいまんさん
2006/12/05(火) 21:31:590187デフォルトの名無しさん
2006/12/05(火) 22:08:11・Viewクラスに文字列を保持するメンバ変数Aを追加した
・OnLButtonUp()あたりに、Aに値をセットするコードを記述した
・OnDraw()に、Aの内容をTextOut()か何かで描画するコードを記述した
んだろ?
んなら、
・OnRButtonUp()あたりに、Aの値をクリアするコードを記述する
でおk。
Aの型がCStringなら、
A = "";
の一行を追加するだけだ。
0188のいまんさん
2006/12/05(火) 22:21:320189デフォルトの名無しさん
2006/12/05(火) 22:24:59申し訳ありませんが教えてください。
0190デフォルトの名無しさん
2006/12/05(火) 22:29:08どうしてもわからないんじゃないだろ
素直にやる気がないので教科書も見る気はない、検索する気もないって言えよ
int a=1, b=0, c=a/b, d = a%b;
0191デフォルトの名無しさん
2006/12/05(火) 22:32:34のサンプルソースw
0192デフォルトの名無しさん
2006/12/05(火) 22:33:18うちの学校、プログラミングの教科書とかないんですよ。
本当に助かります。
0193デフォルトの名無しさん
2006/12/05(火) 22:33:51本屋逝け。
0194デフォルトの名無しさん
2006/12/05(火) 22:35:060195デフォルトの名無しさん
2006/12/05(火) 22:36:380196デフォルトの名無しさん
2006/12/05(火) 22:37:04本人が無いと主張しているし、無いのでは?
蔵書が少ない図書室をあはれむ。
0197デフォルトの名無しさん
2006/12/05(火) 22:38:23Cの入門書とか大量に有るから。
別にD言語とか、そんな新しい言語とかサポートが行き屆いてない言語じゃないんだからw
0198デフォルトの名無しさん
2006/12/05(火) 22:39:39今度図書室とか本屋とか覗いて見ます!
とてもいい情報をありがとうございました!
0199デフォルトの名無しさん
2006/12/05(火) 22:42:520200デフォルトの名無しさん
2006/12/05(火) 22:47:49勉強になります!
0201デフォルトの名無しさん
2006/12/05(火) 22:49:070202デフォルトの名無しさん
2006/12/05(火) 22:50:120203デフォルトの名無しさん
2006/12/05(火) 22:50:45ありがとうございました☆
0204デフォルトの名無しさん
2006/12/05(火) 22:51:440205デフォルトの名無しさん
2006/12/05(火) 22:52:270206デフォルトの名無しさん
2006/12/05(火) 23:00:070207デフォルトの名無しさん
2006/12/05(火) 23:17:16>善意に見せかけた悪意の答え
見分けられるようになれば2ちゃんは便利
ようは使い方次第だぜ
0208デフォルトの名無しさん
2006/12/05(火) 23:19:160209デフォルトの名無しさん
2006/12/05(火) 23:28:58�@学生番号(3桁の整数)と氏名(アルファベットで姓のみ)をメンバとする構造体を定義し,キーボードから学生番号と氏名を5名分読み込むプログラムを作成しなさい.
ただし,3桁以外の整数値を入力した場合は再入力するようにし,最後に5名分のデータをすべて表示すること.
〔実行結果〕
学生番号(3桁の整数)> 444
氏名(アルファベットで姓のみ)> Takeda
…………
学生番号(3桁の整数)
学生番号(3桁の整数) > 99
学生番号(3桁の整数)> 631
氏名(アルファベットで姓のみ)> Sato
学生番号(3桁の整数)> 107
氏名(アルファベットで姓のみ)> Furukawa
〔5名分のデータ表示例〕
学生番号: 444 氏名: Takeda
学生番号: 221 氏名: Kato
学生番号: 859 氏名: Azuma
学生番号: 631 氏名: Sato
学生番号: 107 氏名: Furukawa
�A �@の構造体に,身長,体重,肥満度のメンバ(いずれも浮動小数点数)を加えた構造体を新たに定義する.
また,あらかじめ5名分の学生番号と氏名のデータ(任意、実際の学生番号と一致する必要は全くない)で初期化しておく.
まず,この5名のデータにキーボードから身長[m],体重[kg]のデータ(任意)を入力する.
次に,個人ごとの構造体データへのポインタを受け取り,身長,体重から肥満度[%] を計算する関数を作成し,その関数を用いて各人の肥満度を表示するプログラムを作成しなさい.
ただし,肥満要注意の人(肥満度30%以上)には,任意の注意マークをつけること.肥満度は次の式で計算され,0%のとき標準体重,正の値は肥満型,負の値は痩せ型を表わす(BMI (Body Mass Index)の計算式より).
肥満度[%] = {体重/(身長×身長×22)}×100−100
[3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: C [4] 期限: 12月11日
0210デフォルトの名無しさん
2006/12/05(火) 23:36:38その問題文だと色々表示方法があると思うんだが、きっちり正確なんだろうな?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3095.txt
#define使えないとやりにくいな
0211デフォルトの名無しさん
2006/12/05(火) 23:55:27[2] 問題文(含コード&リンク):
整数値が1行に1つづつ記入されたファイルがあるとする(最大100行)。この
ファイル名をコマンドライン引数で指定し、その内容をintの配列に格納して
順に表示するプログラムを作成せよ。なお、本プログラムの作成にあたって
は以下の3つにソースを分割し、makeコマンドによって実行ファイルを生成
するようにすること。
1.main()関数を含むファイル。
2.指定されたファイルの内容を全て読み込む関数(引数はファイル名とintの
配列を示すポインタ、返り値は読み込んだ整数値の個数)を含むファイル。
3.ポインタで示されたintの配列を順に表示する関数(引数はintの配列を
示すポインタと格納された整数値の個数)を含むファイル。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の16時
[5] その他の制限: 大域変数を用いてはならない。2および3の関数はmain
関数から、それぞれ1回づつ呼び出されるようにする。
よろしくお願い致します。
0212デフォルトの名無しさん
2006/12/06(水) 00:48:53各ファイルに分けてmake
/* -- 1.c -- */
#include <stdio.h>
#include "h.h"
main(int argc, char *argv[]){
int a[100];
pt(a, rd(argv[1], a));
return 0;
}
/* -- 2.c -- */
#include <stdio.h>
int rd(char *f, int *a)
{
int *b = a;
FILE *fp = fopen(f, "r");
while (fscanf(fp, "%d", b++) != EOF)
;
return --b-a;
}
/* -- 3.c -- */
#include <stdio.h>
void pt(int *a, int i)
{
while (i-- > 0)
printf("%d\n", *a++);
}
/* -- h.h -- */
int rd(char *, int *);
void pt(int *, int);
0213212
2006/12/06(水) 00:49:54/* ccの行の先頭はtabをおく */
a: 1.o 2.o 3.o
cc -o a 1.o 2.o 3.o
.c.o:
cc -c $<
1.o: h.h
0214デフォルトの名無しさん
2006/12/06(水) 00:52:100215デフォルトの名無しさん
2006/12/06(水) 01:32:58[1]プログラミング演習
[2]
1,Y=sin(X)のグラフを書きなさい。ただし0<X<2πとする
2,名前と点数からなる複数のデータを入力し、点数にしたがって並び替えなさい。
3,(1)文字列を入力しその長さを出力するプログラムを作りなさい
(2)数字の文字列を読み込んで、それぞれの数字の出現回数を出力するプログラムを作りなさい
4,次の積分を台形法により求めよ。またシンプソンの積分公式で求めよ
∫sinxdx=1(積分範囲は[0,π/2])
[3]C++
[4]12月7日
[5] その他の制限:特にありません
よろしくお願いします。
0216デフォルトの名無しさん
2006/12/06(水) 01:48:400218デフォルトの名無しさん
2006/12/06(水) 02:03:36全部丸投げかよw
どれか一個くらい解け
0219 ◆GJenck4cmw
2006/12/06(水) 02:05:39[2] 問題文(含コード&リンク): 1万円以上の金額を入力し、必要となる金種別の
枚数計算を行い、結果を配列Aに設定するプログラム
をつくれ。ただし、使用する金種は、1万円・千円
百円・十円・一円も5種類のみとし、配列Bに予め
値が格納されているとする。結果は配列Aと配列Bの
内容を印刷せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Borland C++Compiler 5.5
[3.3] 言語: C++
[4] 期限:2006年12月6日午前8:00 まで
[5] その他の制限:C言語を習い始めて3ヶ月と6日です。
1次元配列を習っているところなので1次元配列を
使用した形でよろしくお願いします。
0220デフォルトの名無しさん
2006/12/06(水) 02:07:17ごめん、でも全部じゃないんだ。
これでも半分は自力でやって後残りなんだよ。
0221デフォルトの名無しさん
2006/12/06(水) 02:19:53半分やったっていう問題plz
0222デフォルトの名無しさん
2006/12/06(水) 02:28:32俺、前もこのシンプソンの積分問題ちがった形式で見て、答え書いたぞ
シンプソンの積分以外の条件はもう見る気しないから、前はったソース貼るから見て
勝手に考えてちょーだい
//台形公式と2次のシンプソン則に基づく数値積分を行う
#include <stdio.h>
double func(double x);
double integra10(double (*func_p)(double x),double a, double b, unsigned int n);
main(){
double a,b;//区間
unsigned int n;//分割数
printf("積分区間 [a,b]と区間数n a,b,n : ");
scanf("%lf,%lf,%ud", &a,&b,&n);
printf("長方形近似 I=%20.17f\n",integra10(func,a,b,n));
}
double func(double x){ return(2.0/(1.0+x*x));}
double integra10(double (*func_p)(double x), double a, double b, unsigned int n)
{
double dx ; double h0, hn, hsum = 0.0,x , sum = 0.0; unsigned int i;
if(n == 0 && b == a)
return 0;
dx = (b - a)/n; h0 = (*func_p)(a); hn = (*func_p)(b);
for(i = 1, x = a + dx; i < n -1; x+= dx, i++){ hsum += (*func_p)(x); }
if(((h0 + hn + (2 * hsum)) * dx / 2) < 0 )
return (((h0 + hn + (2 * hsum)) * dx / 2) * -1);
else
return ((h0 + hn + (2 * hsum)) * dx / 2);
}
0223デフォルトの名無しさん
2006/12/06(水) 02:36:07[2] 問題文:
学生の成績データがseisekiというファイルに以下のように格納されて
いる。
20060001 88
20060002 97
20060003 58
20060004 77
・
・
このファイル内のデータを入力し、�@データの組数(学生何人分のデー
タが格納されているか)、�A成績の最高点と最高点の学生の学籍番号、
�B成績の最低点と最低点の学生の学籍番号、�C成績の平均点、を求
め、以下の形式で画面に表示するプログラムを作成せよ。なお、最高
点もしくは最低点をとった学生が複数いる場合、それぞれファイルに
近いほうのデータ内の学籍番号を示すこと。
0224デフォルトの名無しさん
2006/12/06(水) 02:36:52・次の計算をしろ
e=(1/1!)+(1/2!)+・・・+(1/10!)
・データの数n(n≦50),及び,n個の整数データを読み込み
読み込んだデータを読み込んだ順と逆の順で出力(nの値は出力しない)するプログラムを書け
なお,各データは1つ以上のスペースを空けて出力すること.
0225デフォルトの名無しさん
2006/12/06(水) 02:36:56学生数: ・・名
最高点: ・・点、学籍番号・・の学生が該当する。
最低点: ・・点、学籍番号・・の学生が該当する。
平均点: ・・点
ファイル内のデータ組数が多くても、正しく処理できるようにせよ。
(ファイル内のデータをすべてメモリに読み出してから処理するので
はなく、ファイルからデータを読み出しながら処理をするようにせよ
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006/12/06
[5] その他の制限:先日、ファイルの入出力を教えていただいたばかり
です。
0226デフォルトの名無しさん
2006/12/06(水) 02:38:39配列Bに10000やら1000が初期値として入ってるってこと?
0227223
2006/12/06(水) 02:39:000228デフォルトの名無しさん
2006/12/06(水) 02:51:34ありがとうございます。
つか最初の問題と難しさが違いすぎるなこれ。
>>221
224が解いた問題です。
0229 ◆GJenck4cmw
2006/12/06(水) 02:55:57そうです。
0230デフォルトの名無しさん
2006/12/06(水) 03:02:57#include<stdio.h>
int main (void){
int A[5] = {0, 0, 0, 0, 0};
int B[5] = {10000, 1000, 100, 10, 1};
int money, i;
printf("input money: ");
scanf("%d", &money);
for(i = 0 ; i < 5; i++){
while(money >= B[i]){
money = money - B[i];
A[i] = A[i] + 1;
}
}
for(i = 0; i < 5; i++){
printf("A[%d] = %d\n", i, A[i]);
}
for(i = 0; i < 5; i++){
printf("B[%d] = %d\n", i, B[i]);
}
return 0;
}
こういうことかな?
寝ぼけてるので問題読み間違えてたらごめん。
3ヶ月と6日ならこんな感じのプログラムでいいのかな。
0231230
2006/12/06(水) 03:08:090232デフォルトの名無しさん
2006/12/06(水) 03:17:57using namespace std;
int main (void){
int A[5] = {0, 0, 0, 0, 0};
int B[5] = {10000, 1000, 100, 10, 1};
int money, i;
cout << "input money: " << endl;
cin >> money;
cout << money << endl;
for(i = 0 ; i < 5; i++){
while(money >= B[i]){
money = money - B[i];
A[i] = A[i] + 1;
}
}
for(i = 0; i < 5; i++){
cout << "A[" << i << "] = " << A[i] << endl;
}
for(i = 0; i < 5; i++){
cout << "B[" << i << "] = " << B[i] << endl;
}
return 0;
}
0233232
2006/12/06(水) 03:20:49gdgd
0234 ◆GJenck4cmw
2006/12/06(水) 03:36:42できました。゚(゚ノ∀`゚)゚。
ほんとうにありがとうございます。
参考によく考えてみますね。
0235215
2006/12/06(水) 03:38:52でも1問出来たので改めて
[1]プログラミング演習
[2]
1,Y=sin(X)のグラフを書きなさい。ただし0<X<2πとする
2,(1)文字列を入力しその長さを出力するプログラムを作りなさい
(2)数字の文字列を読み込んで、それぞれの数字の出現回数を出力するプログラムを作りなさい
3,次の積分を台形法により求めよ。またシンプソンの積分公式で求めよ
∫sinxdx=1(積分範囲は[0,π/2])
[3]C
[4]12月7日
[5] その他の制限:特にありません
よろしくお願いします。
0236デフォルトの名無しさん
2006/12/06(水) 03:55:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3096.txt
( ^ω^)できたお
0237デフォルトの名無しさん
2006/12/06(水) 04:01:372-1
#include<stdio.h>
#include<string.h>
main(){
char s[30000];
scanf("%s", s);
printf("%d\n", strlen(s));
return 0;
}
30000字まで。
0238デフォルトの名無しさん
2006/12/06(水) 04:08:100239デフォルトの名無しさん
2006/12/06(水) 04:08:52ありがとうございます。
自分ももうちょい頑張ってみますね
0240デフォルトの名無しさん
2006/12/06(水) 04:12:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3097.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3098.txt
おら、無理矢理つくったわクラスで
全然安全実装じゃないけどねーーー!!!!!
こんなめんどくさいのやってられっか
3097.txtがヘッダーだ
これインクルードして3098.txtみたいな形で確認して一応出来てる。
安全じゃないけどねーーーーーーーーーーーーーーー
0241デフォルトの名無しさん
2006/12/06(水) 04:24:36自分はこんなプログラムは到底できなかったです。
自分みたいな初心者というか、タコ野郎向けにこんな長いプログラムを書いてもらって、ありがとうございました。
これで、自分以外のタコも救われます。
0242デフォルトの名無しさん
2006/12/06(水) 05:30:032-1
#include<stdio.h>
void main(){
char st[100];
scanf("%s",st);
printf("語長:%d\n",strlen(st));
}
2-2
#include <stdio.h>
#include <ctype.h>
int main(){
char st[100];
int count[10];
char zero='0';
for(int i=0;i<10;i++)count[i]=0;
scanf("%s",st);
for (i=0;st[i];i++){
if(!isdigit(st[i])){
printf("半角数字だけで頼むわ\n");
return 1;
}
count[st[i]-zero]++;
}
for (i=0;i<10;i++)printf("%dの数%d個\n",i,count[i]);
return 0;
}
0243242
2006/12/06(水) 05:31:130244デフォルトの名無しさん
2006/12/06(水) 11:41:50#include <math.h>
#include <stdio.h>
#define PI 3.1415926535898
double f(double x) {return sin(x);}
double trapezoidal(double a, double b, int n) {
double s = 0., h = (b - a) / n; int i;
for (i = 1; i < n; ++i) s += f(a + i * h);
s *= 2; s += f(a) + f(b); s *= h / 2;
return s;
}
double simpson(double a, double b, int n) {
double s = 0., c0, c1 = a; int i;
for (i = 0; i < n; ++i) {
c0 = c1; c1 = a + (b - a) * (i + 1) / n;
s += (c1 - c0) * (f(c0) + 4 * f((c0 + c1) / 2) + f(c1)) / 6;
}
return s;
}
int main(void) {
int n = 2; double a = 0, b = PI / 2, a1, a2 = trapezoidal(a, b, n), e = 0.000001;
do {
a1 = a2; a2 = trapezoidal(a, b, n <<= 1);
} while (fabs(a1 - a2) > e);
printf("台形 : S=%f\n", a2, n);
n = 2; a2 = simpson(a, b, n);
do {
a1 = a2; a2 = simpson(a, b, n <<= 1);
} while (fabs(a1 - a2) > e);
printf("シンプソン : S=%f\n", a2, n);
return 0;
}
0245デフォルトの名無しさん
2006/12/06(水) 11:54:03#include <math.h>
#include <stdio.h>
#define PI 3.1415926535898
double f(double x) {return sin(x);}
double trapezoidal(double a, double b, int n) {
double s = 0., h = (b - a) / n; int i;
for (i = 1; i < n; ++i) s += f(a + i * h);
s *= 2; s += f(a) + f(b); s *= h / 2;
return s;
}
double simpson(double a, double b, int n) {
double s = 0., c0, c1 = a; int i;
for (i = 0; i < n; ++i) {
c0 = c1; c1 = a + (b - a) * (i + 1) / n;
s += (c1 - c0) * (f(c0) + 4 * f((c0 + c1) / 2) + f(c1)) / 6;
}
return s;
}
int main(void) {
int n = 2; double a = 0, b = PI / 2, a1, a2 = trapezoidal(a, b, n), e = 0.000001;
do {
a1 = a2; a2 = trapezoidal(a, b, n <<= 1);
} while (fabs(a1 - a2) > e);
printf("台形 : S=%f\n", a2);
n = 2; a2 = simpson(a, b, n);
do {
a1 = a2; a2 = simpson(a, b, n <<= 1);
} while (fabs(a1 - a2) > e);
printf("シンプソン : S=%f\n", a2);
return 0;
}
0246デフォルトの名無しさん
2006/12/06(水) 12:00:30[2]
出来なくて困っています。
[1]
200×200の画像を、右下図のようなグラデーションを付けて作成しましょう。
?? プロジェクト名:10grad ファイル名:10grad.c
?? 入力:四角の幅と高さ,出力ファイル名(grad.bmp)
?? 出力:右下に示すようなbmp画像(色にグラデーションを付ける)
?? 数値の入力にatoi関数を利用しましょう
?? 画像のメモリはmalloc関数を用いて動的に確保しましょう
[2]
200x200画素の画像の中心に指定した底辺と高さの三角形
を配置したプログラムを作成しよう。画像は1次元配列で動
的にメモリを確保しよう。
?? プロジェクト名:10triangle ファイル名:10triangle.c
?? 入力:出力ファイル名(triangle.bmp)
?? 出力:例に示すようなbmp画像(色は自由・グラデーションも可)
?? 数値の入力にはatoi関数を利用しましょう
?? 画像のメモリはmalloc関数を用いて動的に確保しましょう
?? ソースファイルと結果のbmp画像をWordに貼り付けて、A4の大きさ
で1ページに印刷して提出しましょう
?? 入力した数値は明記しましょう(値は自由)
?? 画像は白黒でもOKです
例)三角形の画像
詳細は
http://mobiledatabank.jp/s/src/MDBS1055.pdf
の練習問題と課題です。よろしくお願いします。
[3]XP
[4]12月10日
0247デフォルトの名無しさん
2006/12/06(水) 12:40:10フローチャートまでつけてくれてるのか
親切な先生だなw
0248デフォルトの名無しさん
2006/12/06(水) 13:08:55[2] 問題文:
学生の成績データがseisekiというファイルに以下のように格納されて
いる。
20060001 88
20060002 97
20060003 58
20060004 77
・
・
このファイル内のデータを入力し、�@データの組数(学生何人分のデー
タが格納されているか)、�A成績の最高点と最高点の学生の学籍番号、
�B成績の最低点と最低点の学生の学籍番号、�C成績の平均点、を求
め、以下の形式で画面に表示するプログラムを作成せよ。なお、最高
点もしくは最低点をとった学生が複数いる場合、それぞれファイルに
近いほうのデータ内の学籍番号を示すこと。
0249デフォルトの名無しさん
2006/12/06(水) 13:09:50学生数: ・・名
最高点: ・・点、学籍番号・・の学生が該当する。
最低点: ・・点、学籍番号・・の学生が該当する。
平均点: ・・点
ファイル内のデータ組数が多くても、正しく処理できるようにせよ。
(ファイル内のデータをすべてメモリに読み出してから処理するので
はなく、ファイルからデータを読み出しながら処理をするようにせよ
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006/12/06
[5] その他の制限:先日、ファイルの入出力を教えていただいたばかり
です。
0250デフォルトの名無しさん
2006/12/06(水) 13:31:21意味分からん>ファイルに近い
0251デフォルトの名無しさん
2006/12/06(水) 13:35:07学籍番号は8桁、点数は0〜100点、データはdata.txtにあるものと仮定する。
#include <stdio.h>
#include <string.h>
int main(void) {
char gakuseki[9], min_gakuseki[9], max_gakuseki[9];
int num_gakusei = 0, score, max_score = -1, min_score = 101, total_score = 0;
FILE* fp = fopen("data.txt", "r");
if (fp == NULL) return -1;
while (fscanf(fp, "%s%d", gakuseki, &score) != EOF) {
if (score > max_score) {
max_score = score;
strcpy(max_gakuseki, gakuseki);
} else if (score < min_score) {
min_score = score;
strcpy(min_gakuseki, gakuseki);
}
++num_gakusei;
total_score += score;
}
fclose(fp);
printf("学生数: %d名\n", num_gakusei);
printf("最高点: %d点、学籍番号%sの学生が該当する。\n", max_score, max_gakuseki);
printf("最低点: %d点、学籍番号%sの学生が該当する。\n", min_score, min_gakuseki);
printf("平均点: %f点\n", (double)total_score / num_gakusei);
return 0;
}
0252デフォルトの名無しさん
2006/12/06(水) 15:37:00[2] 問題文(含コード&リンク):
以下の処理を行うプログラムを作成しなさい.ただし,文字列s,t の要素数は50 とすること.
strlen(),strcmp()等の関数を使ってはならない.
(1) キーボードから文字列を入力し,文字列s に格納する.
(2) 文字列sを逆順に並べ替えたものを文字列t に格納する.
(3) 文字列sと文字列t が同一であるかどうかを比較し,その結果を画面表示する.
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C/C++)
よろしくお願いします。
0253デフォルトの名無しさん
2006/12/06(水) 15:38:22どうやって文字入力をするんだろう
0254デフォルトの名無しさん
2006/12/06(水) 15:39:13[2] 問題文(含コード&リンク):
int型の変数3個(※配列で宣言する)に数値を入力し、その合計を求めて表示する
プログラムを作成せよ。
プログラムの作成にあたり、以下に従うこと。
・入力数値を格納するint型の配列はmain()関数内で宣言すること
・指定された個数の数値の合計を求める関数getsum()を自作して使うこと。
getsum()関数の仕様は以下の通り。
----- getsum() ----------------------------------------------------
int getsum(int *pnum, int numcnt);
引数 :pnum :数値を格納している配列の先頭アドレス
numcnt :和を求める変数の個数
返却値:算出した和
処理 :指定された個数の変数の和を求める
-------------------------------------------------------------------
※getsum()は、「int getsum(int *, const int);」としてもよい
《実行例》
Enter number(1) : 10
Enter number(2) : 23
Enter number(3) : 41
Sum = 74
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 本日中にお願いします
[5] その他の制限: 簡単なポインタと配列までは進んでいます。
0255デフォルトの名無しさん
2006/12/06(水) 15:46:51#include <stdio.h>
int getsum(int *pnum, int numcnt)
{
int i, sum = 0;
for(i=0; i<numcnt; i++) sum += pnum[i];
return sum;
}
int main(void)
{
int i, a[3];
for(i=0; i<3; i++) {
printf("Enter number(%d) : ", i + 1);
scanf("%d", &a[i]);
}
printf("Sum = %d\n", getsum(a, 3));
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int getsum(int* pnum, int numcnt){int res=0;do{res+=pnum[--numcnt];
}while(numcnt);return res;}
int main(void){int ary[3],i,sum;char tmp[100];for(i=0;i<sizeof(ary)/sizeof(int);i++){
printf("Enter number(%d) :",i+1);fgets(tmp,sizeof(tmp),stdin);ary[i]=atoi(tmp);}
sum=getsum(ary,sizeof(ary)/sizeof(int));printf("Sum = %d\n",sum);return 0;}
0257デフォルトの名無しさん
2006/12/06(水) 15:50:260258デフォルトの名無しさん
2006/12/06(水) 16:02:40#include <stdio.h>
int main(void)
{
int i, j;
char s[256], t[256];
gets(s);
for(i=0; s[i]; i++);
for(j=0; j<i; j++) t[j] = s[i-1-j];
t[i] = '\0';
for(j=0; j<i; j++) if(s[j]!=t[j]) break;
if(i==j) printf("s=t\n");
else printf("s!=t\n");
return 0;
}
0259デフォルトの名無しさん
2006/12/06(水) 16:23:59要素数は50だそうな。
0260デフォルトの名無しさん
2006/12/06(水) 16:37:46[2] 問題文(含コード&リンク): 実数 x と自然数 p に対し、階乗冪 x[p] = x(x-1)‥(x-p+1) を計算する関数 pow_f(x, p) を、再帰的に定義する。
なお、初期条件 x[0] = 1.0 である。まず、漸化式 x[p] = x[p-1] * (x-p+1) を立てる。
正実数および負実数に対して実行せよ。
[3] 環境
[3.1] OS: (Windows/Linux/等々) windowsXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) bcc32
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [2006年12月13日まで]
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
0261デフォルトの名無しさん
2006/12/06(水) 16:54:35double pow_f(double x, int p) {
return p ? (x-p+1)*f(x, p-1) : 1.0;
}
0262デフォルトの名無しさん
2006/12/06(水) 16:55:270263デフォルトの名無しさん
2006/12/06(水) 17:02:09double型の変数3つ(※配列で宣言する)に値を入力し、その平均値を求めて表示
するプログラムを作成せよ。
プログラムの作成にあたり以下の仕様に従うこと。
・double型の変数3つはmain()関数内で宣言すること
・double型の変数3つに対する数値入力は別関数inpnum()にて行うこと。
void inpnum(double *dp);
返り値:なし
引数 :dp:数値を格納する変数配列の先頭アドレス
処理 :変数配列に値を入力する
※main()関数内の配列変数を別関数inpnum()にて扱うため、引数として
ポインタを用いる
※3変数の入力を促す表示もinpnum()内で行う
・平均値の算出は別関数getave()関数にて行うこと。
double getave(double *dp, int numcnt);
返り値:平均値
引数 :dp :数値変数配列の先頭アドレス
numcnt:平均値算出対象変数の個数(3が渡されてくる)
処理 :平均値を算出する
実行例
Enter number(1) : 1.1
Enter number(2) : 5.4
Enter number(3) : 3.2
Average : 3.233333
[3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C
[4] 期限: 2006/12/6
0264デフォルトの名無しさん
2006/12/06(水) 17:03:17[2] 問題文(含コード&リンク):下記のプログラムで、ip,jp,kpのポインタのみを使用してi,jの値を入れ替えて表示するようにしなさい。またST型構造体のポインタstpを使用し、st[1].a[4]の値を表示しなさい。
#include
typedef struct{
int i; char a[10]; } ST;
int main()
{ int i,j,k;
ST st[3]={1,"ABCDE",2,"FGHIJ",3,"KLMNO"}, *stp=st;
int *ip=&i, *jp=&j, *kp=&k;
i=3 , j=1;
ip=&i, jp=&j, kp=&k;
ここにi,jを入れ替えるための式を書く何行使ってもよいが、操作できるのはip,jp,kpのみ printf("i=%d j=%d \n", i, j);
printf("st[1].a[4]=%c \n",ここにstpを使った式を書く); return 0;
}
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: lcc
[3.3] 言語: C
[4] 期限: 12月10日まで
0265デフォルトの名無しさん
2006/12/06(水) 17:11:16下記のプログラムというのを正確に書きなおします。
すみません。
#include <stdio.h>
typedef struct{
int i;
char a[10];
} ST;
int main(){
int i,j,k;
ST st[3]={1,"ABCDE",2,"FGHIJ",3,"KLMNO"}, *stp=st;
int *ip=&i, *jp=&j, *kp=&k;
i=3 , j=1;
ip=&i, jp=&j, kp=&k;
ここにi,jを入れ替えるための式を書く。
操作できるのはip,jp,kpのみ
printf("i=%d j=%d \n", i, j);
printf("st[1].a[4]=%c \n",ここにstpを使った式を書く);
return 0;
}
0266デフォルトの名無しさん
2006/12/06(水) 17:24:21*ip^=*jp^=*ip^=*jp;
0267デフォルトの名無しさん
2006/12/06(水) 17:25:33*kp = *ip;
*ip = *jp;
*jp = *kp;
(stp+1)->a[4] or stp[1].a[4]
>int *ip=&i, *jp=&j, *kp=&k;
>ip=&i, jp=&j, kp=&k;
下のはいらないだろ。
0268デフォルトの名無しさん
2006/12/06(水) 17:36:25#include <stdio.h>
void inpnum(double *dp)
{
int i;
for(i=0; i<3; i++) {
printf("Enter number(%d) : ", i + 1);
scanf("%lf", dp + i);
}
}
double getave(double *dp, int numcnt)
{
double sum = 0;
int i;
for(i=0; i<numcnt; i++) {
sum += *(dp + i);
}
return sum / numcnt;
}
int main(void)
{
double a[3];
inpnum(a);
printf("Average : %f\n", getave(a, 3));
return 0;
}
0269デフォルトの名無しさん
2006/12/06(水) 19:03:30[2] 問題文: 正弦関数sin xを計算する関数を作りなさい。また、標準関数sin(X)と結果を比較しなさい。
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:2006年12月14日まで
[5] その他の制限
C言語は学習し始めて半年ぐらいです。
それぞれx,sin x, sin(X)の結果が縦に並んだ表のように出力しろとのことでした。
正弦を求めるアルゴリズムは。
0271デフォルトの名無しさん
2006/12/06(水) 19:28:10アルゴリズム?数式のことでいいのかな?
指定されたのは
sin x=x-(x^3/3!)+(x^5/5!)-(x^7/7!)+(x^9/9!)-(x^11/11!)
です
0272デフォルトの名無しさん
2006/12/06(水) 19:36:51あーなんで後出しするんだよ
書いちまったのに
0273デフォルトの名無しさん
2006/12/06(水) 19:41:22すいませんです。
ルール破ったからうpしてくれないよねぇ
なんだ。ただのマクローリン展開か。
http://c-kadai.sakura.ne.jp/index.php?itemid=6&catid=5
0275デフォルトの名無しさん
2006/12/06(水) 19:58:53そこまで原理主義的に対処する気はないが
アルゴリズムを指定されているのに書かない理由が理解できない
0276RISA
2006/12/06(水) 20:02:01[2] 問題文(含コード&リンク):
入力:2次元平面上のn点からなる集合S(ただしどの3点も一直線上にない)
出力:Sの凸包CH(S) (SH(S)とはSを含む凸集合で最小のもの)
[3][3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 2006年12月8日
[5] その他の制限:構造体(struct)を用いること
出来るだけ早く、よろしくお願いします(o>_<o)
0277デフォルトの名無しさん
2006/12/06(水) 20:07:510278デフォルトの名無しさん
2006/12/06(水) 20:10:59言語なんでもいいの?
0279デフォルトの名無しさん
2006/12/06(水) 20:13:47> [3][3.3] 言語: (C/C++/どちらでも可 のいずれか)
が理解できないならやらなくて良いよ
0280デフォルトの名無しさん
2006/12/06(水) 20:14:38C
C++
どちらでも可
の三択のようです
0281デフォルトの名無しさん
2006/12/06(水) 20:16:00おいおいテンプレコピっただけだろ
どちらでも可と言いたいのなら「のいずれか」はいらないんだし
0282デフォルトの名無しさん
2006/12/06(水) 20:16:40あとどう出力するんだ
0283デフォルトの名無しさん
2006/12/06(水) 20:17:020284デフォルトの名無しさん
2006/12/06(水) 20:18:14で、入力はどう受け取るんだ?
0285RISA
2006/12/06(水) 20:28:54言語はC++です。
SH(S)はCH(S)の書き間違いです。
出力は何角形になるかを出力したいです。
0286デフォルトの名無しさん
2006/12/06(水) 20:32:05入力はファイルから?それとも手打ち?
0287RISA
2006/12/06(水) 20:41:100288デフォルトの名無しさん
2006/12/06(水) 20:42:21http://www.infor.kanazawa-it.ac.jp/~koblab/home/d1504310/acm/library/makeConvexHull.html
0291デフォルトの名無しさん
2006/12/06(水) 21:03:36[2] 問題文(含コード&リンク):
30人のテストの得点データを読み込む。
得点は0点以上100点以下である。各点数の人数を求め、その人数を点数毎
に*の数で示しなさい。また、最も多い得点と、最も少ない得点を示しなさい。
[3] 言語: C
[4] 期限: 12/10/2006
[5] その他の制限:ポインタなし、if,for文でお願いします。
0292デフォルトの名無しさん
2006/12/06(水) 21:20:08読み込み方は?
0293デフォルトの名無しさん
2006/12/06(水) 21:21:450294デフォルトの名無しさん
2006/12/06(水) 21:53:25[2] 問題文(含コード&リンク):
aからzまで書かれたファイルがあり、これを読み込み読み込んだ順とは
逆に表示させるようにせよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の朝10時00分〆
[5] その他の制限:
お願いします。
0295デフォルトの名無しさん
2006/12/06(水) 22:11:18マジ適当。
#include <stdio.h>
#include <stdlib.h>
#define FNAME "a.txt"
int main(){
int size=0,i=0,*str=NULL;
FILE *fp=NULL;
if(!(fp=fopen("r")))
return -1;
fseek(fp,0,SEEK_END);
size = ftell(fp);
fseek(fp,0,SEEK_SET);
str = (int *)malloc(size+1);
while((str[i++] = fgetc(fp)) != EOF);
while(i--)printf("%c",str[i]);
free(str)
return 0;
}
0296294
2006/12/06(水) 22:34:59レスありがとうございます。
これは
while((str[i++] = fgetc(fp)) != EOF);
while(i--)printf("%c",str[i]);
の部分が逆に表示させるというか、while(i--)にしているから逆に
表示させることが出来るのですか?つまりwhile(i++)にしていたら通常の
表示になるってことですか?
0297デフォルトの名無しさん
2006/12/06(水) 22:41:48そう
>つまりwhile(i++)にしていたら通常の表示になるってことですか?
違う
while((str[i++] = fgetc(fp)) != EOF)printf("%d",i);
while(i--)printf("%c",str[i])printf("%d",i);
こうやってiの値でも確認してみ
0298デフォルトの名無しさん
2006/12/06(水) 22:42:56二つ目は
while(i--)printf("%c %d ",str[i], i);
0300デフォルトの名無しさん
2006/12/06(水) 22:55:12頭の中でiの値を動かしてみるんだ
あとはコンパイラ落として家のPCに入れればいい
0301デフォルトの名無しさん
2006/12/06(水) 22:57:28[2] 問題文:名前と点数からなる複数のデータを入力し、点数にしたがって並び替えよ
[3] 環境
[3.1] windowsXP
[3.3] C言語
[4] 12月8日
[5]その他の制限
よろしくお願いします
0302デフォルトの名無しさん
2006/12/06(水) 23:00:45[2] 問題文(含コード&リンク):
変数iとjが15×15のマトリスク方程式を解くプログラムを作成せよ。
右辺ベクトルは既知数とし、境界条件(ノイマン)を用いよ。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限 : 月曜日の朝8:00〆
[5] その他の制限:
出来れば、詳しい説明付きでお願いします><。。。
0303デフォルトの名無しさん
2006/12/06(水) 23:05:18値をキーボードから入力して計算を実行するプログラムです。
0304299
2006/12/06(水) 23:13:18#include <stdio.h>
#include <string.h>
#define COLSIZE 80
int main(void)
{
char buffer[COLSIZE + 1];
FILE *fp1, *fp2;
fp1 = fopen("a.txt", "r");
while(fgets(buffer, COLSIZE + 1, fp1) != NULL){
printf("%s", buffer);
}
fclose(fp1);
return 0;
}
"a.txt"はa〜zまでが入ったファイル名です。
なんですが、これだと、a〜zまで順に表示してしまいます。
これを変えてz〜aまで順に表示させたいのですが、どうなるでしょうか?
0305RISA
2006/12/06(水) 23:16:14授業で外積を使っているので、角度ではなく、できれば外積を使った方法で行いたいのですがooo
0306デフォルトの名無しさん
2006/12/06(水) 23:20:11できれば後から後から条件を追加しないで欲しい。
他にも何かあれば今のうちに言っておこう
0307デフォルトの名無しさん
2006/12/06(水) 23:30:30配列をつかって、scanfで入力です!
0308RISA
2006/12/07(木) 00:08:16・3点の位置関係を確認する方法があればよいのではないか。
・それをどのように使うか。
というのが、アルゴリズム設計のアイデアとして与えられています。
0309RISA
2006/12/07(木) 00:14:01どの座標が多角形の頂点となっているかも出力したいです。
0312デフォルトの名無しさん
2006/12/07(木) 00:32:42[2]問題文:44.44と-0.1111×102を入力し、
この二つの数値を足した結果を表示するプログラムをscanfを用いずに記述する。
[3]環境
[3-1] OS: Windows XP
[3-2]コンパイ名とバージョン:Visual Studio 2003
[3-3]言語:C++
[4]期限:14日
0313デフォルトの名無しさん
2006/12/07(木) 00:39:18[2]問題文:下記構造体型配列を作る。
データは入力すること。
確認のため各配列要素を表示すること。
20 40 10 50 30
CD GH AB IJ EF
[3]環境
[3-1] OS: Windows XP
[3-2]コンパイ名とバージョン:Visual Studio 2003
[3-3]言語:C++
[4]期限:14日
0314304
2006/12/07(木) 00:45:33#include <stdio.h>
#define COLSIZE 80
int main(void)
{
char buffer[COLSIZE + 1];
FILE *fp1;
fp1 = fopen("a.txt", "r");
while(fgets(buffer, COLSIZE + 1, fp1) != NULL){
printf("%s", buffer);
}
fclose(fp1);
return 0;
}
0315デフォルトの名無しさん
2006/12/07(木) 00:50:53#include <iostream>
main(){
char s[100];
fgets(s, 100, stdin);
printf("%lf", 44.44+(-0.1111*102));
return 0;
}
好きに入力しちゃって
0316デフォルトの名無しさん
2006/12/07(木) 01:15:32#include <stdio.h>
#define COLSIZE 80
int main(void)
{
char buffer[COLSIZE + 1];
FILE *fp1;
int i, length;
fp1 = fopen("a.txt", "r");
/*
while(fgets(buffer, COLSIZE + 1, fp1) != NULL){
printf("%s", buffer);
}
*/
fgets(buffer, COLSIZE + 1, fp1);
length = strlen(buffer)-1;
for(i=0;i<=length;i++)
{printf("%c", buffer[length-i]);}
fclose(fp1);
return 0;
}
a.txtが単にabc...xyzだけならfgetsは1回でいいかと。
%sはbufferを文字列として一度に出力してしまうので逆にならない。
bufferの文字を添字で(後ろから順に)指定して%cで1文字ずつ出力。
0317314
2006/12/07(木) 01:28:09ありがとうございます。
プログラミングのやつを家のPCに入れてコンパイルして実行したのですが
これだとaのみしか表示されませんでした…
0318デフォルトの名無しさん
2006/12/07(木) 01:33:08a.txtって
abcdefghijklmnopqrstuvwxyz
だよね?俺は無事にできてるんだけどな
0319デフォルトの名無しさん
2006/12/07(木) 01:41:15なんか見たことあると思ったら
877 名前: ◆s2cIPM3PTs [] 投稿日:2006/12/02(土) 23:05:15
[1] 授業単元:プログラミング初級
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3067.txt
[3] 環境
どうしてもforならint jを宣言しておいて
while (ninzuu[i]--) → for (j = 0; j < ninzuu[i]; j++)
0320319
2006/12/07(木) 01:43:10http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3071.txt
0321291
2006/12/07(木) 02:24:51マルチポストになってしまってすいません。
解決しました!ありがとうございます!
0322デフォルトの名無しさん
2006/12/07(木) 02:33:030323 ◆xScV5ptEhM
2006/12/07(木) 03:27:18[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3102.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語: C
[4] 期限: 12月8日
[5] その他の制限:
・指示がない限りライブラリ関数を使用できない。
宜しくお願いします。
0324デフォルトの名無しさん
2006/12/07(木) 05:37:05[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3084.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3103.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Borland(bcc32)
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限: なんとか自力で終わらせられるところまで終わらせましたが、答えが出ないときがあります。
具体的にどこがおかしいぞという指摘だけでもお願いします。
0325デフォルトの名無しさん
2006/12/07(木) 06:54:03過去ログ4つしかうpってないけどとりあえずこんな感じ
0326デフォルトの名無しさん
2006/12/07(木) 07:02:00>if( EPS < ((fabs(x[i-1] - x[i-2]))/fabs(x[i-2]))
符号の向きちがわね?
0327デフォルトの名無しさん
2006/12/07(木) 07:03:14ttp://f4.aaa.livedoor.jp/~pointc/No.18366.html
なんか、ここで質問した人と同じ学校?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3104.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3105.c
これで良いんだろうか?
0328デフォルトの名無しさん
2006/12/07(木) 07:06:371だけちょい訂正
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3106.c
0329デフォルトの名無しさん
2006/12/07(木) 07:06:50あとさあ、宿題やってる限りはどうでもいいことだけど
cにおいてfloat型の存在は脳から消していいよ
0330デフォルトの名無しさん
2006/12/07(木) 07:08:511だけまた訂正、すまそw
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3107.c
0331デフォルトの名無しさん
2006/12/07(木) 10:20:13よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
0332デフォルトの名無しさん
2006/12/07(木) 10:48:500333デフォルトの名無しさん
2006/12/07(木) 11:09:110334デフォルトの名無しさん
2006/12/07(木) 11:20:540335デフォルトの名無しさん
2006/12/07(木) 12:20:290336デフォルトの名無しさん
2006/12/07(木) 12:27:030337デフォルトの名無しさん
2006/12/07(木) 12:33:440338デフォルトの名無しさん
2006/12/07(木) 12:55:19それと、このプログラムはステップ1-5 を実行した時点で、ソート済み位置より前の要素 は小さい順に並ぶらしいんですけど、その説明はどういう風にしたらいいでしょうか?
#define N 30 // 配列要素の個数
#include <iostream>using namespace std;
void main() {
int hairetsu[N] = {636, 80, 246, 766, 881, 383,
244, 671, 503, 331,444, 723, 916,
287, 492, 719, 476, 187, 704, 115,
774, 334, 618, 625, 582, 938, 427,
831, 899, 909}; // ソート対象の配列
int sortedPos, pos, insert, insertPos; // ソート済み位置,現在位置,挿入要素,挿入位置
// (1) ソート済み位置を、配列先頭の要素番号-1から1ずつ増やしながら、
// 配列末 尾の要素番号-1になるまで以下の処理を繰り返す。
for ( sortedPos = 0; sortedPos < N; sortedPos++ ) {
insert = hairetsu[sortedPos + 1];//ソート済み位置+1の位置に格納されている要素を挿入要素とする。
insertPos = sortedPos + 1;//(1-2) 挿入位置←ソート済み位置+1
pos = sortedPos;// (1-3) 現在位置←ソート済み位置
// (1-4) 現在位置が配列先頭の要素番号以上であり、
// かつ現在位置の要素が 挿入要素よりも大きい限り以下の処理を繰り返す。
while ( pos >= 0 && insert < hairetsu[pos] ) {
hairetsu[pos] = hairetsu[pos - 1];// (1-4-1) 現在位置の要素を1つ後ろの位置に格納する。
insertPos = pos;// (1-4-2) 挿入位置←現在位置
pos = pos + 1;}// (1-4-3) 現在位置を配列の先頭方向に1つ戻す。
insert = hairetsu[insertPos];}// (1-5) 挿入要素を挿入位置に格納する。
// (2) 配列の各要素を表示する。
for ( int i = 0; i < N; i++ ) {cout << hairetsu[i] << " ";}}
よろしくお願いします。
0339デフォルトの名無しさん
2006/12/07(木) 12:56:370340デフォルトの名無しさん
2006/12/07(木) 13:06:54#define N 30 // 配列要素の個数
#include <iostream>
using namespace std;
void main() {
int hairetsu[N] = {636, 80, 246, 766, 881, 383,
244, 671, 503, 331,444, 723, 916,287, 492, 719, 476,
187, 704, 115,774, 334, 618, 625, 582, 938, 427,
831, 899, 909}; //ソート対象の配列
int sortedPos,pos,insert,insertPos; //ソート済み位置,現在位置,挿入要素,挿入位置
//(1)ソート済み位置を、配列先頭の要素番号-1から1ずつ増やしながら、
// 配列末 尾の要素番号-1になるまで以下の処理を繰り返す。
for ( sortedPos = 0; sortedPos < N; sortedPos++ ) {
//(1-1)ソート済み位置+1の位置に格納されている要素を挿入要素とする。
insert = hairetsu[sortedPos + 1];
insertPos = sortedPos + 1;//(1-2)挿入位置←ソート済み位置+1
pos = sortedPos;//(1-3)現在位置←ソート済み位置
//(1-4)現在位置が配列先頭の要素番号以上であり、
// かつ現在位置の要素が 挿入要素よりも大きい限り以下の処理を繰り返す。
while ( pos >= 0 && insert < hairetsu[pos] ) {
//(1-4-1)現在位置の要素を1つ後ろの位置に格納する。
hairetsu[pos] = hairetsu[pos - 1];
insertPos = pos;//(1-4-2)挿入位置←現在位置
pos = pos + 1;}// (1-4-3) 現在位置を配列の先頭方向に1つ戻す。
insert = hairetsu[insertPos];}// (1-5) 挿入要素を挿入位置に格納する。
// (2) 配列の各要素を表示する。
for ( int i = 0; i < N; i++ ) { cout << hairetsu[i] << " ";}}
0341デフォルトの名無しさん
2006/12/07(木) 13:10:47よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
何を言ってるんだお前は。
0343デフォルトの名無しさん
2006/12/07(木) 13:25:00よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
0344デフォルトの名無しさん
2006/12/07(木) 13:34:370345デフォルトの名無しさん
2006/12/07(木) 13:35:05ソートされる様修正してみた。コメントは勝手に削除した。
#define N 30
#include <iostream>
using namespace std;
void main()
{
int hairetsu[ N ] = { 636, 80, 246, 766, 881, 383, 244, 671, 503, 331, 444, 723, 916, 287, 492, 719, 476, 187, 704, 115, 774, 334, 618, 625, 582, 938, 427, 831, 899, 909 };
int sortedPos, pos, insertPos;
for ( sortedPos = 0; sortedPos + 1 < N; sortedPos++ )
for ( insertPos = sortedPos, pos = sortedPos + 1; pos > 0 && hairetsu[ insertPos ] > hairetsu[ pos ]; insertPos--, pos-- )
hairetsu[ insertPos ] ^= hairetsu[ pos ] ^= hairetsu[ insertPos ] ^= hairetsu[ pos ];
for ( int i = 0; i < N; i++ ) { cout << hairetsu[ i ] << " "; }
}
0346デフォルトの名無しさん
2006/12/07(木) 13:35:070347デフォルトの名無しさん
2006/12/07(木) 13:42:18おかげ様で今晩はクソして寝れそうです。
ありがとうございました。
0348デフォルトの名無しさん
2006/12/07(木) 13:49:120349デフォルトの名無しさん
2006/12/07(木) 14:16:51だれかこの交換方法について説明してくれ
0350デフォルトの名無しさん
2006/12/07(木) 14:21:43http://ja.wikipedia.org/wiki/XOR%E4%BA%A4%E6%8F%9B%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
0351デフォルトの名無しさん
2006/12/07(木) 15:03:54[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):行継続の処理をするプログラムを作れ。
一行を文字列として読み込み、その一行を画面に表示するプログラムを作る。
ただし、改行の直前の文字が '\' であったときには、次の行も読み込んで
先の一行に続けるようにすること。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
0352デフォルトの名無しさん
2006/12/07(木) 15:04:53if文の中に記号をごちゃごちゃ入れられると見づらいので
よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
0353 ◆xScV5ptEhM
2006/12/07(木) 15:10:50丁寧な対応ありがとうございました!
参考にさせていただきます。
0354デフォルトの名無しさん
2006/12/07(木) 15:15:59main()
{
int c, prev;
for (prev = 0; (c = getcha
r()) != EOF; prev = c) {
if (c == '\\')&nb
sp;{
if
(prev == '\\') putchar(prev);
} else if (c 
;== '\n') {
if
(prev != '\\') putchar(c);
} else {
if
(prev == '\\')
&n
bsp; putchar(prev);
putchar(
c);
}
}
}
0355354
2006/12/07(木) 15:17:19#include <stdio.h>
main()
{
int c, prev;
for (prev = 0; (c = getchar()) != EOF; prev = c) {
if (c == '\\') {
if (prev == '\\')
putchar(prev);
} else if (c == '\n') {
if (prev != '\\')
putchar(c);
} else {
if (prev == '\\')
putchar(prev);
putchar(c);
}
}
}
0356デフォルトの名無しさん
2006/12/07(木) 15:24:38#include <stdio.h>
#include <ctype.h>
#define MAX 2048
main()
{
char aline[MAX+1];
char *strpos;
strpos = aline;
while((gets(strpos))!=NULL ){
if (aline[strlen(aline)-1]=='\\')
strpos = aline + strlen(aline) -1;
else {
puts(aline);
strpos = aline;
}
}
}
0357デフォルトの名無しさん
2006/12/07(木) 15:35:18[2] 問題文:二つの変数を入力し、その四則演算の結果を表示するプログラムを作成せよ。
・main()関数では2つの入力値を格納する変数および四則演算結果を格納する変数
を宣言する
・2変数の入力を行うための関数inp_num()を作成する。関数仕様は以下の通り。
void inp_num(int *数値1へのポインタ, int *数値2へのポインタ);
※main()関数内の変数(数値1と数値2)に対して別関数inp_num()にて値を
書き込むため、引数としてポインタを用いる
※2変数の入力を促す表示もinp_num()内で行う
・四則演算の結果を求める関数calc()を作成する。関数仕様は以下の通り。
int calc(int 変数1,
int 変数2,
int *足し算結果格納先,
int *引き算結果格納先,
int *掛け算結果格納先,
int *割り算結果格納先
);
返却値: 0:正常終了
-1:エラー(ゼロ除算が発生する場合)
・ゼロ除算がある時には、割り算以外の結果は表示し、割り算結果はエラーが
ある旨の表示を行う
例
Enter number(1) : 23
Enter number(2) : 0
23+0 = 23
23-0 = 23
23*0 = 0
23/0 = Error ←0除算の場合は割り算結果としてErrorを表示する
[3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C
[4] 期限: 2006年12月8日
[5] その他の制限: 初級ポインタまで習いました。
0358デフォルトの名無しさん
2006/12/07(木) 15:45:030359デフォルトの名無しさん
2006/12/07(木) 16:26:28携帯から書くのは、さすがにダルい(´・ω・`)
とにかく文法に慣れなきゃならんから、何も悩まず出来る宿題は有りがたい。
0360326
2006/12/07(木) 17:05:30○不等号の向き
寝てなかったから脳がバグってた
0361デフォルトの名無しさん
2006/12/07(木) 17:11:56[2] 問題文(含コード&リンク):10000個の乱数を発生させ、それらの平均と標準偏差を計算するプログラムを書きなさい。平均を計算する部分、標準偏差を 計算する部分は、それぞれ、別個の関数とすること。
[3] 環境
[3.1] OS: Linux
[3.2] gcc(?よくわかりません。)
[3.3] c言語
[4] 期限:できれば明日まででお願いします。
[5] その他の制限: 関数とポインタを勉強中です。
よろしくお願いします!!
0362デフォルトの名無しさん
2006/12/07(木) 17:18:35[2] 問題文 :棄却法による乱数の生成
P(x)=2/π√(1-x^2)に従う確率変数を生成するプログラムをつくろう.
この場合 [a,b] = [-1, 1] であり, pmax=2/π です.
サンプル数?
1000
シード?
128478
と入力すると, 棄却法を利用して p(x) に従う xをサンプル数
だけ生成し,平均, 分散, および -1.0 と+1.0 の間を何個かのビンに分割して
ヒストグラムを出力するプログラムを作ろう.
ビンの個数は, 8,80 など, 何種類か試そう.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: 2006年12月12日09:00まで
[5] その他
ヒントhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3111.txt
を使って作成して下さい。
0363302
2006/12/07(木) 17:19:48連続な値をとる確率変数 X に対する確率密度 p(x) が区間 [a,b] 以外では
0 であり,[a,b]内での p(x) の最大値を pmax とします.
このとき区間[a,b]の一様乱数 X1 と区間[0, pmax] の一様乱数 X2 を用いて,
次のように X を生成することができます:
(1) X1 と X2 を生成する.
(2) もし,X2 < p(X1) なら X1 を X として採用する。
(3) (1) に戻る.
この手順を繰り返すと,下図の影をつけた部分に点 (X1 ,X2 ) が入ったときにのみ
その点のデータが採用されるため,採用された点の X1 は確率密度 p(X1) に従うことになります.
この方法を von Neumann の採択・棄却法と呼びます.
確率変数のとる値が有限の区間に限られる場合しか使えないことと,
場合によっては棄却される割合が大きくなり計算の効率が悪くなることが欠点です..
0364デフォルトの名無しさん
2006/12/07(木) 17:20:35362です
0365デフォルトの名無しさん
2006/12/07(木) 18:01:59#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
double ave(int*a,int n)
{
return n==0?*a:(ave(a,n-1)+(((double)*(a+n))/n))/(n+1)*n;
}
double sd(int*a,int n,double ave)
{
return n==0?pow((*a-ave)/10000,2):sd(a,n-1,ave)+pow((*(a+n)-ave)/10000,2);
}
int main()
{
int i;
int a[10000];
double av;
srand(time(NULL));
for(i=0;i<10000;i++)a[i]=rand();
av=ave(a,9999);
printf("%lf\n",av);
printf("%lf\n",sqrt(sd(a,9999,av)));
return 0;
}
0366デフォルトの名無しさん
2006/12/07(木) 19:14:37thx
0368デフォルトの名無しさん
2006/12/07(木) 20:50:04ありがとうございます。もう大学のパソコンつかえないんで、明日の朝、やってみます!
0369デフォルトの名無しさん
2006/12/07(木) 22:28:200370デフォルトの名無しさん
2006/12/07(木) 22:32:51struct point {
double x;
double y;
};
を用い、2 次元空間の2 点を対角線とする長方形を示す構造体
struct {
struct point p1;
struct point p2;
};
を、typedef 宣言でrectangle 型と定義し、長方形の面積を求める関数
double area(const rectangle *r)
および、重心を求める関数
struct point centroid(const rectangle *r)
を作成せよ。これを用いて、2 点の座標を入力して長方形を構成し、その面積と重心を表示するプ
ログラムを作成せよ。
座標1 x:1(ENTER)
座標1 y:2(ENTER)
座標2 x:3(ENTER)
座標2 y:4(ENTER)
面積:4.000000
重心:(2.000000, 3.000000)
0371デフォルトの名無しさん
2006/12/07(木) 22:34:54[2] 問題文(含コード&リンク):
>>370
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日の12時まで
[5] その他の制限:
0372デフォルトの名無しさん
2006/12/07(木) 23:02:15[2]問題文:下記構造体型配列を作る。
データは入力すること。
確認のため各配列要素を表示すること。
20 40 10 50 30
CD GH AB IJ EF
[3]環境
[3-1] OS: Windows XP
[3-2]コンパイ名とバージョン:Visual Studio 2003
[3-3]言語:C++
[4]期限:14日
0373デフォルトの名無しさん
2006/12/07(木) 23:06:40[2]問題文:単純交換ソート(バブルソート)をソートの途中、
昇順になった時点でソートを終了するように変更して処理効率をあげる。
[3]環境
[3-1] OS: Windows XP
[3-2]コンパイ名とバージョン:Visual Studio.NET2003
[3-3]言語:C++
[4]期限:14日
0374デフォルトの名無しさん
2006/12/07(木) 23:45:42前にもポストしてたと思うけど
正直問題が何を言ってるのかわからないんだ
構造体の仕様は無いのか
0375359
2006/12/08(金) 00:45:59初心者です。間違ってたらごめん。1/2
#include <stdio.h>
void inp_num(int *x, int *y);
int calc(int cal_x,int cal_y,int *add,int *dif,int *mul,int *div);
int main(void)
{
int x,y,add=0,dif=0,mul=0,div=0;
inp_num(&x,&y);
if(calc(x,y,&add,&dif,&mul,&div)) {
printf("%d+%d=%d\n",x,y,add);
printf("%d-%d=%d\n",x,y,dif);
printf("%d*%d=%d\n",x,y,mul);
printf("%d/%d=Error\n",x,y);
}
else {
printf("\n%d+%d=%d\n",x,y,add);
printf("%d-%d=%d\n",x,y,dif);
printf("%d*%d=%d\n",x,y,mul);
printf("%d/%d=%d\n",x,y,div);
}
return 0;
}
0376359
2006/12/08(金) 00:47:202/2
void inp_num(int *x, int *y)
{
printf("二個の数値を、入力してください。\n");
printf("一つ目:");
scanf("%d",x);
printf("二つ目:");
scanf("%d",y);
}
int calc(int cal_x,int cal_y,int *add,int *dif,int *mul,int *div)
{
*add=cal_x+cal_y;
*dif=cal_x-cal_y;
*mul=cal_x*cal_y;
if(cal_y) {
*div=cal_x/cal_y;
return 0;
}
else return -1;
}
0377359
2006/12/08(金) 01:02:33NULL文字に当たるまで、ひたすら文字を入力させてそれを吐き出すプログラムだと思う。
っで、\が末尾に入力された場合だけ、入力された元の文字(\は抜く)以降の配列に、次に入力された文字を入れて表示。
よくわからないけど。
0378デフォルトの名無しさん
2006/12/08(金) 01:02:37#include <iostream>
inline void swappu(int* x, int* y){
int tmp = *x; *x = *y; *y = tmp;}
int awasort(int* x, int size){
for(int lastswappu = 0;size != 0; size = lastswappu,lastswarppu = 0)
for(int i = 0; i < size; i++)
if(x[i] > x[i+1]){
swappu(&x[i], &x[i+1]);
lastswappu = i;}}
int main(void){
int i, n[10] = {1,6,4,7,8,3,4,5,7,9};
for(i = 0; i != 10; i++) std::cout << n[i] << " "; std::cout << std::endl;
awasort(n, 10);
for(i = 0; i != 10; i++) std::cout << n[i] << " "; std::cout << std::endl;
return 0;
}
0379デフォルトの名無しさん
2006/12/08(金) 01:27:29#include <cstdio>
#include <cstdlib>
int main(void)
{
struct{
int seisu;
char* moji;
}s[5];
for(int i=0; i<5; i++){
scanf("%2d", &s[i].seisu);
}
for(int i=0; i<5; i++){
s[i].moji = (char*)malloc(3);
scanf("%2s", s[i].moji);
}
printf("%d %d %d %d %d\n", s[0].seisu, s[1].seisu, s[2].seisu, s[3].seisu, s[4].seisu);
printf("%s %s %s %s %s\n", s[0].moji, s[1].moji, s[2].moji, s[3].moji, s[4].moji);
return 666;
}
0380デフォルトの名無しさん
2006/12/08(金) 01:54:03#include <stdio.h>
struct point {
double x; double y;};
typedef struct {
struct point p1; struct point p2;
} rectangle;
double area(const rectangle *r){
int x, y;
x = (r->p1.x < r->p2.x) ? r->p2.x - r->p1.x : r->p1.x - r->p2.x;
y = (r->p1.y < r->p2.y) ? r->p2.y - r->p1.y : r->p1.y - r->p2.y;
return x * y;}
struct point centroid(const rectangle *r){
struct point p;
p.x = 0.5 * (r->p1.x < r->p2.x) ? r->p2.x + r->p1.x : r->p1.x + r->p2.x;
p.y = 0.5 * (r->p1.y < r->p2.y) ? r->p2.y + r->p1.y : r->p1.y + r->p2.y;
return p;}
int main(void){
rectangle r;
struct point p;
printf("座標1 x:"); scanf("%lf", &r.p1.x); printf("座標1 y:"); scanf("%lf", &r.p1.y);
printf("座標2 x:"); scanf("%lf", &r.p2.x); printf("座標2 y:"); scanf("%lf", &r.p2.y);
printf("面積:%.6lf\n", area(&r));
p = centroid(&r); printf("重心:(%.6lf, %.6lf)\n", p.x, p.y);}
0381デフォルトの名無しさん
2006/12/08(金) 01:59:30[2] 問題文:sin,cosのテイラー展開を求めるプログラムを作りなさい。
・近似式はネットで探してよい
・近似する項数nを対話的に与えること
・θは0から2πの範囲を適当に分割し、各θに対する近似値、真値を求めること
(真値は関数sin(角度),cos(角度)で求まる
・出力は、(グラフ化を見越した)表形式にすること
[3] 環境
[3.1] OS: (Windows XP)
[3.2] コンパイラ名とバージョン: (Borland C++Compiler 5.5)
[3.3] 言語: (C言語)
[4] 期限: ([2006年12月9日18:00まで] )
[5] その他の制限: (void main(void)以外に、階乗を求める関数をint kaijo(int p)のようにして自分で作り、計算結果をmain関数に返すようにする。)
0382デフォルトの名無しさん
2006/12/08(金) 02:01:35実行結果は以下のようになればよいそうです。
第何項までの近似をしますか:5
角度 sin近似 sin真値 cos近似 cos真値
3.600 0.062791 0.062791 0.998027 0.998027
7.200 0.125333 0.125333 0.992115 0.002115
10.800 0.187381 0.187381 0.982287 0.982287
14.400 0.248690 0.248690 0.968583 0.968583
18.000 0.309017 0.309017 0.951057 0.951057
21.600 0.368125 0.368125 0.929776 0.929776
25.200 0.425779 0.425779 0.904827 0.904827
28.800 0.481754 0.481754 0.876307 0.876307
32.400 0.535827 0.535827 0.844328 0.844328
36.000 0.587785 0.587785 0.809017 0.809017
39.600 0.637424 0.637424 0.770513 0.770513
43.200 0.684547 0.684547 0.728969 0.728969
46.800 0.728969 0.728969 0.684547 0.684547
50.400 0.770513 0.770513 0.637424 0.637424
54.000 0.809017 0.809017 0.587785 0.587785
57.600 0.844328 0.844328 0.535827 0.535827
といった感じに出力されればよいのですが。
0383デフォルトの名無しさん
2006/12/08(金) 02:03:38ワロタ
0384デフォルトの名無しさん
2006/12/08(金) 02:07:48角度が7.2の時の真値が明らかにおかしい件について
0385デフォルトの名無しさん
2006/12/08(金) 02:12:32http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3112.txt
既にレス付いてるけどやったので貼っとく
0386324
2006/12/08(金) 03:11:08仰るとおり向きが違いました。ありがとうございます。
修正してみたのですが、x0=0.5 EPS=0.01のときに-0.000000となるなどやっぱり不安定なようです…
どたなか原因わかりませんでしょうか。
>>329
ありがとうございます。
調べたところfloatは速度が遅く、もう過去のものだと。
そこでdoubleに置換しましたが、今度は値が出ません(汗
double型でも%fであってるし、他におかしいところもなかったように思うんですが…
何がだめなんでしょうか…
0388デフォルトの名無しさん
2006/12/08(金) 03:16:06double型のscanfは%lfだよ
0389デフォルトの名無しさん
2006/12/08(金) 03:16:09#include <math.h>
#include <stdio.h>
//math.hでM_PIが定義されていないコンパイラ用
//#define M_PI 3.14159265358979323846
//#define M_PI_2 1.57079632679489661923
double mynorm(double x){
double pi2=M_PI*2;
x=fmod(x,pi2);
if(x<-M_PI)x+=pi2;
else if(x>M_PI)x-=pi2;
if(x>M_PI_2)x=M_PI-x;
else if(x<-M_PI_2)x=-M_PI-x;
return x;}
double mysin(double x,int kousuu){
x=mynorm(x);
double x2=x*x,y=1;
for(int i=(kousuu<<1)-1;i>=3;i-=2) y=1-x2*y/(i*(i-1));
return x*y;}
double mycos(double x,int kousuu) {return mysin(x+M_PI_2,kousuu);}
void main() {
int kousuu;
printf("第何項までの近似をしますか:");
scanf("%d",&kousuu);
printf("角度 sin近似 sin真値 cos近似 cos真値\n");
double r;
for(double i=3.6;i<=57.61;i+=3.6){
r=i*M_PI*2/360;
printf("%.3f %.6f %.6f %.6f %.6f\n",i,mysin(r,kousuu),sin(r),mycos(r,kousuu),cos(r));
}
}
0390389
2006/12/08(金) 03:17:54その他の制限に書かれている事はあくまでヒントと判断して従っていない。
0392デフォルトの名無しさん
2006/12/08(金) 03:22:32ニュートン法は初期値が悪いと収束するとは限らないけど
初期値は適切なの?
0393324
2006/12/08(金) 03:24:51初期値は与えられたものなので答えはわかりませんが、もしかすると収束しないのかもしれません。
でも今日提出したときに友達が、全部ちゃんと値が出たと言ってたんでやっぱり間違ってたんだなと…
その友達が間違ってたのかもしれませんが
0394デフォルトの名無しさん
2006/12/08(金) 03:30:30よく苦しくなる
0395デフォルトの名無しさん
2006/12/08(金) 03:33:57値から考えて収束してないとかわかることもありますお
0396デフォルトの名無しさん
2006/12/08(金) 03:47:41[2] int型の値を要素とする2次元配列a[N][N]とb[M][M]が大域変数として用意されている。
ここでNとMはマクロであり、適当な正整数値に定義されているものとする。
これらの配列をそれぞれN次正方行列、M次正方行列とみなし、配列aのrow行col列からheight行width列以内にある要素を配列bにコピーする関数
void copy(int row, int col, int width, int height)
を定義せよ。
引数rowとcolは0以上N−1以下の値をとり、heightとwidthは0以上の値をとるものとする。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 2006年12月8日18:00まで
[5] その他の制限: 四則演算、繰り返し文、マクロ、2次元配列
0397デフォルトの名無しさん
2006/12/08(金) 04:02:09期限:明後日
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
0398デフォルトの名無しさん
2006/12/08(金) 04:06:42まんこ!
0399デフォルトの名無しさん
2006/12/08(金) 04:23:41bのどこにコピーするかが分からんが
あと当たり前だけどN<Mという条件があるんだよな?
0400396
2006/12/08(金) 04:31:19配列bの左上にコピーします。
あと、N<Mという条件も確かにあります。
0401デフォルトの名無しさん
2006/12/08(金) 05:01:36void copy(int row, int col, int width, int height)
{
int ekkusu, wai;
if(row < 0 || row > N-1 || col < 0 || col > N-1 || height < 0 || width < 0) return;
for(wai = 0, wai != height && wai < M && row + wai < N, wai++)
for(ekkusu = 0, ekkusu != width && ekkusu < M && col + ekkusu < N, ekkusu++)
b[wai][ekkusu] = a[row+wai][col+ekkusu];
}
0402デフォルトの名無しさん
2006/12/08(金) 05:02:060403デフォルトの名無しさん
2006/12/08(金) 05:24:01void copy(int row,int col,int width,int height)
{
int i,j;
row--;
col--;
for(i = row;i < height;i++){
for(j = col;j < width;j++){
b[i-row][j-col] = a[i][j];
}
}
}
>引数rowとcolは0以上N−1以下の値をとり、heightとwidthは0以上の値をとるものとする。
は自分で付け足してくれ
0404デフォルトの名無しさん
2006/12/08(金) 05:33:43おまえのその糞みたいな注:の文を読む前に
配列ってのは、宣言時には確かにそれだけのメモリを用意するが
後の配列に対する演算方法は、ポインタとして扱える。というかポインタなんだが。
そこがわかってんのか?
int a[2][2] ={{1,1},{2,2}};は
int a[4] = {1,1,2,2}と同じなんだよわかる?
で、おまえは2次元の行列っていってるからには
int a[][]みたいな形の事を1次元配列のa[]みたいな形でつくってくだちゃい
っていってんだろうけど、行列とは、行に対して列が対応する様を現す
数字の集合の表現方法なんだよ。
で、おまえは、何行何列の行列がつくりたいんだよ。
int a[2][3]の形なら、2行3列
int a[3][2]の形なら、3行2列
上記を一次元で現すなら
int a[6]
int a[6]
で聞きたいのはクラスを作る必要があんのか?
どうせ実装するなら、何かの型のポインタをメンバにしてnewでコンストラクタで配列作って
デスクトラクタで破棄するって形だろ。
でクラスをつくるのに、operatorやコピーコンストラクタ
行列演算のメンバ関数、転置行列や、逆行列、余因子展開、行列式の行や列の交換
行ベクトル、列ベクトル、ノルム、正規化・・・
おまえのその馬鹿みたいな課題の内容は、中途半端。そのくせ注:文ではやけに横柄。
自分で作れよ。おまえの注:文の最後の言葉をちょっと代えて君に贈る。
各自よく調べ、よく考え、正確な質問をするように。
えへ〜。久々あおりに乗っちゃった〜。
0405デフォルトの名無しさん
2006/12/08(金) 05:37:040406デフォルトの名無しさん
2006/12/08(金) 05:38:41>>403
早朝からありがとうございます!
0407デフォルトの名無しさん
2006/12/08(金) 08:14:110408382
2006/12/08(金) 08:26:34<math.h>でM_PIは定義されています。
しかしなぜかコンパイルできませんでした。
16:ここでは宣言できない(関数 mysin )
17:式の構文エラー(関数 mysin )
17:未定義のシンボル i(関数 mysin )
17:ステートメントにセミコロン(;)がない(関数 mysin )
17:不正な文字' '(0x8140)(関数 mysin )
18:'x2'に代入した値は使われていない(関数 mysin )
18:パラメータ'kousuu'は一度も使用されない(関数 mysin )
25:ここでは宣言はできない(関数 main )
26:式の構文エラー(関数 main )
26:未定義のシンボル i(関数 mysin )
26:ステートメントにセミコロン(;)がない(関数 main )
*** 9 errors in Compile ***
0409デフォルトの名無しさん
2006/12/08(金) 09:08:13何行目が何故エラーかまでコンパイラが教えてくれてるんだから、
「なぜか」とか言ってないでそのくらい直してみてはどうかと思う
0410デフォルトの名無しさん
2006/12/08(金) 09:14:14どのリンク?
0411デフォルトの名無しさん
2006/12/08(金) 09:19:40実行すると
nan
nan
ってなってしまいます。助けてください!
0412デフォルトの名無しさん
2006/12/08(金) 09:20:11ごめん17行目に全角スペースはいってた
他はうちでは問題ないから自分で何とかして
0413デフォルトの名無しさん
2006/12/08(金) 09:24:420414デフォルトの名無しさん
2006/12/08(金) 09:31:06>>408
これ試してみて
#include <math.h>
#include <stdio.h>
double mynorm(double x){
double pi2=M_PI*2;
x=fmod(x,pi2);
if(x<-M_PI)x+=pi2;
else if(x>M_PI)x-=pi2;
if(x>M_PI_2)x=M_PI-x;
else if(x<-M_PI_2)x=-M_PI-x;
return x;}
double mysin(double x,int kousuu){
x=mynorm(x);
double x2=x*x,y=1;
int i;
for(i=(kousuu<<1)-1;i>=3;i-=2) y=1-x2*y/(i*(i-1));
return x*y;}
double mycos(double x,int kousuu) {return mysin(x+M_PI_2,kousuu);}
void main() {
int kousuu;
printf("第何項までの近似をしますか:");
scanf("%d",&kousuu);
printf("角度 sin近似 sin真値 cos近似 cos真値\n");
double r,i;
for(i=3.6;i<=57.61;i+=3.6){
r=i*M_PI*2/360;
printf("%.3f %.6f %.6f %.6f %.6f\n",i,mysin(r,kousuu),sin(r),mycos(r,kousuu),cos(r));
} }
0415デフォルトの名無しさん
2006/12/08(金) 10:32:49[1] 授業単元:計算物理
[3] 環境
[3.3] 言語: C
[4] 期限: できれば明日まで
↓のプログラムは20個の粒子の移動のシミュレーションをします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3113.c
↑のプログラムを使って、1個の粒子の軌道を追って、原点からどれだけ
離れたか、距離を求めよ。やっかいなのが、周期型境界条件を使ってる
ので、ちゃんとした距離を求めるのに一工夫
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3114.c
↑のは上手くいくと思ってたのに駄目でした。
たのんます。
0416デフォルトの名無しさん
2006/12/08(金) 11:03:21すまんが仕様がわからん。
もう少し詳しく書いてくれん?
0417413
2006/12/08(金) 11:48:07van der waalて言う公式を使って、それぞれの粒子にかかる力を計算します。
で、その力によって、一つ一つの粒子の場所やスピードを計算します。
それが、T_MAXになるまでループします。distていう関数はスピードの分布を記録します。
その分布は(マクスウェル・ボルツマン分布)て言われてます。
ま、その質問は自力でなんとかなりました。
今度はそのコードをちょっといじって、一つの粒子の軌道を追います。
(x_curr[1],y_curr[1]とか)それで、原点からの距離を求めよう、と
いうやつです。スタート時点のポジションを(x0、y0)(これ、どうやって
出すか分からない)としたら、(x_curr[1]-x0)^2+(y_curr[1]-y0)^2、つまり
r^2を出したいのね。
で、やっかいなのが周期型境界条件ってやつなんですが、これは何かというと、
もし粒子のx座標が0より少なくなると、L+xへ移動しますよ、ていうやつ(y
も同様)
r^2を計算するにはこうしたワープもオッケーじゃないと行けないのだ。で、考えたのが
もし、新しいxが0より少なければx_bound[i]にー1を加算。もしxがLより大きければ
x_bound[i]に+1を加算。そうすれば、本当の座標はx_curr[i]+x_bound*Lになるはず。。。
と思ったのですがなんか、駄目です。
0418413
2006/12/08(金) 12:01:43ご指摘お願いします。
0419デフォルトの名無しさん
2006/12/08(金) 13:13:27関数間でいちいち参照渡しするぐらいならグローバル変数のが良くないかい?
0420デフォルトの名無しさん
2006/12/08(金) 13:20:56Cマガジンにグローバル変数を使うのは無能の証拠みたいに
書いてあったな
俺もグローバル変数使うだろうけど 楽だし
0421デフォルトの名無しさん
2006/12/08(金) 13:43:43とりあえず作ってみた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3115.c
0422デフォルトの名無しさん
2006/12/08(金) 13:47:430423デフォルトの名無しさん
2006/12/08(金) 13:55:31これがオカシイのかどうかはワカランが、読んでいて「あれ?」と思った点
initialize関数なんだけど
for(i=0;i<N;i++){
rnd=(double)rand()/RAND_MAX; // ここで1個の乱数を生成して
gx[i]=(i/5)*2+2;
gy[i]=i*2 +1 -(i/5)*10;
x_curr[i]=gx[i]+2*(rnd-0.5)*dr; // Xの位置
y_curr[i]=gy[i]+2*(rnd-0.5)*dr; // Yの位置
vx[i]=2*(rnd-0.5)*v0; // 速度の方向性
if(rnd<0.5) vy[i]=sqrt(v0*v0-vx[i]*vx[i]);
else vy[i]=-sqrt(v0*v0-vx[i]*vx[i]);
x_prev[i]=x_curr[i]-vx[i]*dt;
y_prev[i]=y_curr[i]-vy[i]*dt;
}
に使用しているけど、これってその度に乱数生成しなくて良いの?
0424デフォルトの名無しさん
2006/12/08(金) 13:58:48ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3116.c
0425デフォルトの名無しさん
2006/12/08(金) 14:16:14[2] 問題文(含コード&リンク):
C/C++とVB間で値渡しをするプログラムを作れ。
ヒント:argv
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ: BCC 5.5 VB2005
[3.3] C/C++ VB
[4] 期限: 2006年12月11日9:00まで
0426デフォルトの名無しさん
2006/12/08(金) 16:04:52コンピュータ専門ならまだわかるが、
その他のがっこならどうかと思う問題だな
0427デフォルトの名無しさん
2006/12/08(金) 16:14:30[2] 問題文(含コード&リンク):
銀行口座をハッキングして個人情報を抜け。
ヒント:友達のハッカー
[3] 環境
[3.1] SOS: ・・・−−−・・・
[3.2] コンパイル: ぷよぷよ検定10段
[3.3] C/C Lemon
[4] 期限: 2006年12月11日9:00まで
0428デフォルトの名無しさん
2006/12/08(金) 16:14:33[2] 問題文(含コード&リンク):
買い物で購入した10000円以下の金額を入力し、支払った金額を入力して
おつりと金種及び枚数を求めるプログラムを作成せよ
[3] 環境
[3.1] OS: Windows2000
[3.3] C
[4] 期限: 2006年12月12日12:00まで
0429デフォルトの名無しさん
2006/12/08(金) 16:19:01複数解あるけど全てのパターン列挙するの?
0430デフォルトの名無しさん
2006/12/08(金) 16:23:100431デフォルトの名無しさん
2006/12/08(金) 16:27:241円のものに対して10000円支払った場合に1円玉9999枚のお釣りという答えもあるわけで
枚数が最小になるようにという条件があれば一意に定まるかな
0432デフォルトの名無しさん
2006/12/08(金) 16:31:100433デフォルトの名無しさん
2006/12/08(金) 16:35:34可能性があるということと、常識をごっちゃにしてる馬鹿発見
0434デフォルトの名無しさん
2006/12/08(金) 16:37:31適当なプログラム書くと延々と処理が終わらなかったと思う
0436デフォルトの名無しさん
2006/12/08(金) 16:38:07さすが非常識人だな
恥も無いのか?
0437デフォルトの名無しさん
2006/12/08(金) 16:39:14その組み合わせは一意的であることを証明せよ
0438デフォルトの名無しさん
2006/12/08(金) 16:40:57非常識だろうがなんだろうがここはプログラム板です。
可能性として排除できない場合はそういう場合も考慮するのがプログラム。
そんなことも分からないお前は文系板にでもいってろwwwww
0439デフォルトの名無しさん
2006/12/08(金) 16:43:23結構酷いプログラムだな・・・
ループで回すなんて非効率きわまりない。
割り算使えと。
0440デフォルトの名無しさん
2006/12/08(金) 16:43:25行間の読めない馬鹿はプログラムするなよな
心底迷惑でジャマばかりしやがる
0441デフォルトの名無しさん
2006/12/08(金) 16:47:42横レスだがお前は仕様にないことも独自の判断で勝手にやっちゃうタイプか
いるんだよなそういうはた迷惑な奴
0442デフォルトの名無しさん
2006/12/08(金) 16:49:27すくなくとも9999枚なんて非常識なことはしない
中国のクソ外注じゃあるまいし
0443デフォルトの名無しさん
2006/12/08(金) 16:49:43[2] 問題文:以下の整列済み配列を分割せずに統合(マージ)を繰り返せば、
ソートされる。このプログラムを作成し、結果を出力せよ。
[11.34.58.62][20.61][100][250.300][400]
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:gcc?
[3.3] 言語:C言語
[4] 期限:06年12月09日PM12:00まで
[5] その他の制限:ポインタを使用しろと指示されていますが、よくわかりません
配列それぞれに割り振るということなのでしょうか・・・
0444デフォルトの名無しさん
2006/12/08(金) 16:52:180445デフォルトの名無しさん
2006/12/08(金) 16:57:05禿同。仕様書にないからといって気の利かないプログラムを書く奴だろそいつは。
0446デフォルトの名無しさん
2006/12/08(金) 16:59:360447デフォルトの名無しさん
2006/12/08(金) 17:00:40正直、頭悪い
0448デフォルトの名無しさん
2006/12/08(金) 17:02:11禿同。正直そいつらには付き合ってられない。反論するだけ時間の無駄。
0449デフォルトの名無しさん
2006/12/08(金) 17:07:020450デフォルトの名無しさん
2006/12/08(金) 17:07:30買い物を比喩にした数学の問題なのかによるし、
買い物のシミュレーションだとして店に無限のつり銭の用意があるのかとか
数学の問題だとして全ての場合を列挙するのかだとか、
曖昧な点が多すぎるわけで、
それを確認もしないで常識を持ち出すのはおかしいだろ。
0451デフォルトの名無しさん
2006/12/08(金) 17:10:22買い物のおつりってのは日常的な行為。そこに常識的な判断が入るのは
何らおかしくない。
はい、論破。
0452デフォルトの名無しさん
2006/12/08(金) 17:11:02正直痛いからもうやめれ
0453デフォルトの名無しさん
2006/12/08(金) 17:15:240454デフォルトの名無しさん
2006/12/08(金) 17:21:14難しいな。
どうすればいいんだ?
0455デフォルトの名無しさん
2006/12/08(金) 17:23:24非常識な入力がされてもちゃんと動くプログラムじゃないと
いけないわけだが。お前馬鹿だな
0456デフォルトの名無しさん
2006/12/08(金) 17:28:020457デフォルトの名無しさん
2006/12/08(金) 17:28:301万円を1種類の紙幣、硬貨で表した時、その枚数が他の紙幣、硬貨の枚数と同一にならない事の反証でおk。
0458デフォルトの名無しさん
2006/12/08(金) 17:34:342000+500+500 = 1000+1000+1000
だったりするから注意
0459デフォルトの名無しさん
2006/12/08(金) 17:37:060460デフォルトの名無しさん
2006/12/08(金) 17:38:23誰だっけ、2000円作った人は
0461デフォルトの名無しさん
2006/12/08(金) 17:40:443000 = 2000+1000 で一意
0462デフォルトの名無しさん
2006/12/08(金) 17:40:55[2]
文字列として入力された2つの数値を、
char型の配列とint型を使用して四則演算を行う。
実数にも対応させること。
[3] 環境
[3.1] Linux
[3.2] gcc4.0.2
[3.3] C
[4] 期限: 2006年12月15日
[5] 構造体やポインタの基礎あたり。
0463デフォルトの名無しさん
2006/12/08(金) 17:43:00一般のコインでは成立しない。
たとえば1円、3円、5円があるとき6円を作る方法は二通りあって、
どちらも 2 枚の支払いですむため、一意でない。
一般に、与えられたコイン集合から任意の金額が
一意に支払えるかどうかを判定する問題は NP 完全。
ただ、通常のコイン集合の場合に一意なのは簡単で、
貪欲解法がうまくいくことを詰めれば出る。ただしこれも
一般には駄目で、冒頭の例は貪欲はうまくいくが一意でない例。
通常のコイン集合の場合をやっておく:
X 円を支払う最適な方法が二つあったとき、それぞれにおける
1 円玉の数を a, b とおく。a, b < 5 は明らか
(≧5 なら 5円に置き換ればよりよい解になるので最適性に矛盾)。
また、X の 5 での剰余を考えれば a == b (mod 5) も明らか。
よって a = b。X を (X - a) / 5 とスケーリングすれば以下同様。
0464デフォルトの名無しさん
2006/12/08(金) 17:43:08よくわからん。
>>437
できた。
m円払いたいとする。1円玉m枚から始める。n円玉k枚(k>=2)をn*k円玉1枚で置き換える操作を
「簡約」と呼ぶ。簡約するたびに枚数は減る。任意の払いかたは初期状態から適当に簡約していけば達成できる。
つまり、どのように簡約しても結局は合流することを示せば良い。
n=iとn=jでi!=jのときの簡約はお互い独立なので、合流するのは自明。
i=jのときの簡約は、日本の貨幣体系では上位の金種の価値が下位のものの倍数であることより、
iとjの大きい方に統一することで合流する。
0465デフォルトの名無しさん
2006/12/08(金) 17:46:350467デフォルトの名無しさん
2006/12/08(金) 17:50:570468デフォルトの名無しさん
2006/12/08(金) 17:56:250470デフォルトの名無しさん
2006/12/08(金) 18:13:35なにこれ?なんかうさんくせえ
0471デフォルトの名無しさん
2006/12/08(金) 18:16:04募集されている技士の要件を満たしてないし、やりかたにも賛同できないので、お断りする。
0472デフォルトの名無しさん
2006/12/08(金) 18:21:510473デフォルトの名無しさん
2006/12/08(金) 18:25:080474デフォルトの名無しさん
2006/12/08(金) 19:15:09http://pc8.2ch.net/test/read.cgi/gamedev/1164167428/
0475413
2006/12/08(金) 19:27:04すごく参考になりました。
↓ので、自分のしたかった事が出来たっぽい。ありがと〜
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3117.c
0476デフォルトの名無しさん
2006/12/08(金) 19:35:27ジョークだと思ってにやにやしてたのに、真正だったのか…
0477デフォルトの名無しさん
2006/12/08(金) 20:07:560478デフォルトの名無しさん
2006/12/08(金) 20:10:16http://pc8.2ch.net/test/read.cgi/tech/1163349367/
0479デフォルトの名無しさん
2006/12/08(金) 20:10:20お前は全てのスレを見てるのか?あ?
0480デフォルトの名無しさん
2006/12/08(金) 20:24:42ここの前のスレでこいつが勧誘にきてたんだよ
0481デフォルトの名無しさん
2006/12/08(金) 20:26:46金になるわけでもなし。
0482デフォルトの名無しさん
2006/12/08(金) 21:05:59お前は勧誘にひょいひょいついていくのか?あ?
いいカモだなおい。笑いも出ねえぞ。
0483デフォルトの名無しさん
2006/12/08(金) 21:20:31小難しい厄介な数式、法則を使うような宿題はパスねw
0484デフォルトの名無しさん
2006/12/08(金) 21:28:37解決してない奴でも解けよ
0485382
2006/12/08(金) 21:31:46うまく結果が表示できました。
ただ、cos近似値の計算結果が少しおかしいようなのですが、これはどこか式を作り直せばうまくいきそうですね。
本当にどうもありがとうございました。
でも自分の力でできたわけじゃないから、授業のときには正直にできませんでしたと言うつもりです。
ここのプログラマーの皆さんは本当にすごいですね。
感謝します!!
0486デフォルトの名無しさん
2006/12/08(金) 21:34:06いや、だから 俺でもすぐに解ける が条件ですw
何でも質問してくれ!って意味じゃないっすw
0487デフォルトの名無しさん
2006/12/08(金) 21:34:42要は、「金が欲しい」「おまんこしたい」ってこったろ
0489414
2006/12/08(金) 22:34:25うちでは小数点以下6桁程度では項数6以上取れば誤差でないんだが。
どこかコピペミスしてるんじゃねーの
あとcosのマクローリン展開は使ってないからそこ突っ込まれるかもな
マクローリン展開の性質上sinに帰着させた方が良いと俺は思っているが
時間に余裕があったら無理やりcosも使ったバージョンを書くかもしれないから
朝あたり覗いてみて
0490デフォルトの名無しさん
2006/12/08(金) 22:41:51[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3118.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 11日
[5] その他の制限:
よろしくお願いします。
0491デフォルトの名無しさん
2006/12/08(金) 22:42:30[2] 問題文
・最小値選択法
・バブルソート
・バブルソートにフラグを追加
・番兵を用いた挿入法
・ヒープソート
・クイックソート
これらのソートの特徴を書け
[3] 期限 2006年12月11日月曜日まで
[4] 備考
バブルソートのフラグを追加は理解できました。
フラグがたっている状態=データが既に並んでいる状態になる。ということは理解できました。
ですが、その他の原理が理解出来ません。
スレ違いでしたらスレ汚し申し訳ございませんでした。
0492デフォルトの名無しさん
2006/12/08(金) 22:43:290493デフォルトの名無しさん
2006/12/08(金) 22:46:04なんだからコーディング関係ないしやっぱりスレ違いなんじゃないの?
0494デフォルトの名無しさん
2006/12/08(金) 22:53:320495デフォルトの名無しさん
2006/12/08(金) 23:13:23スレ違いですか。すいません。
>>494
課題は特徴を書くだけでした。
よろしければ馬鹿にも理解できるようご説明していただけると幸いです。
0496デフォルトの名無しさん
2006/12/08(金) 23:16:21わかりやすい
・バブルソート
わかりにくい
・バブルソートにフラグを追加
理解できない
・番兵を用いた挿入法
気持ち悪い
・ヒープソート
かっこいい
・クイックソート
趣味が悪い
0497デフォルトの名無しさん
2006/12/08(金) 23:17:48http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3119.txt
練習がてらやってみた 誰かツッコミお願い
0498デフォルトの名無しさん
2006/12/08(金) 23:30:45(´・ω・`)
・バブルソート
(´・ェ・`)
・バブルソートにフラグを追加
('A`:)
・番兵を用いた挿入法
( ̄ー ̄)
・ヒープソート
\(゚∀゚)/
・クイックソート
ヽ(´ー`)ノ
0499デフォルトの名無しさん
2006/12/08(金) 23:32:39#include<stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
int c,n;
if(argc==1) return 1;
for(n=1;n<argc;n++){
if((fp=fopen(argv[n],"r"))==NULL){
printf("エラー: ファイル %s をオープンできません。\n",argv[n]);
return 1;}
while((c=fgetc(fp))!=EOF) putchar(c);
fclose(fp);}
return 0;
}
0500デフォルトの名無しさん
2006/12/08(金) 23:44:44有難うございます
後で試してみます
0501デフォルトの名無しさん
2006/12/08(金) 23:45:05環境
OS:Windows
言語:どちらでも可
期限:2006年12月12日
よろしくお願いします。
0502デフォルトの名無しさん
2006/12/09(土) 00:00:27ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3121.c
0503デフォルトの名無しさん
2006/12/09(土) 00:07:48[2] 問題文(含コード&リンク):
1
11
121
1331
14641
(以下16行まで)
上記のようなパスカルの三角形を作るプログラムを書け。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc (恐らく)
[3.3] 言語:C++
[4] 期限:できれば明日の9時半頃までにお願いします
[5] その他の制限:if文、while文、for文、一次元配列、二次元配列まで習っています
0504デフォルトの名無しさん
2006/12/09(土) 00:11:18スペースがないとぐちゃぐちゃになるがそれでおk?
0505デフォルトの名無しさん
2006/12/09(土) 00:19:27とりあえず。
# include <iostream>
int main()
{
const int size = 16;
int pascal[size+2][size+2] = {{0}};
pascal[1][1] = 1;
for(int j = 2; j <= size; j++)
for(int i = 1; i <= j; i++)
pascal[j][i] = pascal[j-1][i-1] + pascal[j-1][i];
for(int j = 1; j <= size; j++)
{
for(int i = 1; i <= j; i++)
std::cout << pascal[j][i];
std::cout << '\n';
}
}
0506デフォルトの名無しさん
2006/12/09(土) 00:20:19ありがとうございました。
0507デフォルトの名無しさん
2006/12/09(土) 00:31:47ttp://www.kmonos.net/wlog/62.html
0508デフォルトの名無しさん
2006/12/09(土) 03:40:09http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3122.cpp
0509デフォルトの名無しさん
2006/12/09(土) 03:42:09http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3123.cpp
間違って関係ないソースをうpってもうたんで訂正
0510デフォルトの名無しさん
2006/12/09(土) 04:02:05むひょっ、>>509は17行あったっけ、MAXを15にしてちょっ
0511デフォルトの名無しさん
2006/12/09(土) 09:10:17[1] 授業単元:代数
[2] 問題文:LLLアルゴリズムのプログラムをCで作成せよ。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2006/12/10
0512デフォルトの名無しさん
2006/12/09(土) 09:12:05mathematicaで作成したものがあるのですが、Cで書けず悩んでいます。
mathematica版(正しいかどうか分からないですが・・・)
(*初期化*)
Clear[u];
Clear[gstar];
Clear[a];
Clear[b];
Clear[c];
Clear[i];
y=0;
(*関数の定義*)
Norm[v_]:=Sqrt[v.v];
u[i_, j_]:=(g[i]. gstar[j])/(Norm[gstar[j]]^2)
gstar[i_]:=g[i]-Sum[u[i,j]*gstar[j], {j, 1, i-1}];
GSO[g1_, g2_, g3_, g4_, g5_, g6_, z_]:=Module[{a,b,c},
(*GSO[g[1],g[2],g[3],g[4],g[5],g[6],a]*)
(*a行目以降をGSO計算する*)
(*Gの成分をGにセット*)
G={g1, g2, g3, g4, g5, g6};
(*MとGSTARの成分のセット*)
For[a=z, a<=6, a++,
gstar[a]; (*GSTARの成分セット*)
For[b=1, b<=a, b++, m[a,b]=u[a,b]];
For[c=a+1,c<=6,c++,m[a,c]=0];
];
0513デフォルトの名無しさん
2006/12/09(土) 09:12:44(*Mの成分をMにセット*)
M={{m[1,1],m[1,2],m[1,3],m[1,4],m[1,5],m[1,6]},
{m[2,1],m[2,2],m[2,3],m[2,4],m[2,5],m[2,6]},
{m[3,1],m[3,2],m[3,3],m[3,4],m[3,5],m[3,6]},
{m[4,1],m[4,2],m[4,3],m[4,4],m[4,5],m[4,6]},
{m[5,1],m[5,2],m[5,3],m[5,4],m[5,5],m[5,6]},
{m[6,1],m[6,2],m[6,3],m[6,4],m[6,5],m[6,6]},
};
(*GSTARの成分のセット*)
GSTAR={gstar[1],gstar[2],gstar[3],gstar[4],gstar[5],gstar[6]};
(*GSOの実行回数をインクリメント*)
y++;
(*行列の表示*)
Print["GSOの計算回数"];
Print[y];
Print["各種行列の表示"];
Print["行列M"];
Print[M];
Print["行列G"];
Print[G];
Print["行列GSTAR"];
Print[GSTAR];
(*G=M. GSTARが成り立つかどうかの検証*)
Print["G=M.GSTAR?"];
Print[TrueQ[G==M. GSTAR]];
Print["-------------------------------------------"];
0514デフォルトの名無しさん
2006/12/09(土) 09:25:34ありがとうございます。
説明不足だったんですが、出力される行を入力したら
このパスカルの三角形が出力されるようにしたいんですけど、
どうしたらいいですか?
0515デフォルトの名無しさん
2006/12/09(土) 10:02:57いくらなんでもscanfくらい使えるだろ
0516デフォルトの名無しさん
2006/12/09(土) 10:15:49「やっぱりチョコレートケーキが良かったんですけど…」
0517デフォルトの名無しさん
2006/12/09(土) 10:33:58http://chomework.sakura.ne.jp/search/?query=%83C%83%60%83a%83N&whence=0&max=20&result=normal&sort=score&idxname=new&idxname=old
触ってて気が付いたが
これひょっとしてあんまり役に立たないんじゃ
0518デフォルトの名無しさん
2006/12/09(土) 10:38:390519デフォルトの名無しさん
2006/12/09(土) 10:48:56#include<iostream>
using namespace std;
int main(){int **a;int nMax;cout<<"input = ";cin>>nMax;if(nMax<1)exit(1);
a=new int*[nMax];for(int i=0;i<nMax;i++)a[i]=new int[nMax];a[0][0]=1;
for(int i=1;i<nMax;i++){a[i][0]=1;a[i][1]=i;for(int j=2;j<i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];a[i][i-1]=i;a[i][i]=1;}for(int i=0;i<nMax;i++)
{for(int j=0;j<=i;j++)cout<<a[i][j]<<" ";cout<<endl;}for(int i=0;i<nMax;i++)
delete[]a[i];delete[]a;return 0;}
0520デフォルトの名無しさん
2006/12/09(土) 10:50:09http://idol.bbspink.com/test/read.cgi/hgame/1158922444/573-
0521デフォルトの名無しさん
2006/12/09(土) 12:06:33[2] 少なくとも一方が 100万 以下であるような友愛数をすべて表示するプログラムを書きなさい.
なお,完全数は除いて出力すること.
2つの自然数 n と m について,n のそれ自身を除く約数の和が m となり,
m のそれ自身を除く約数の和が n となるとき,n と m のペアを友愛数と呼ぶ.
例えば,220 と 284 は友愛数
220 の約数は,1,2,4,5,10,11,20,22,44,55,110,220 であり,
1+2+4+5+10+11+20+22+44+55+110 = 284
284 の約数は,1,2,4,71,142,284であり,
1+2+4+71+142 = 220
2つの自然数 n と m について,n=m,すなわち n のそれ自身を除く約数の和が n となるような自然数 n を完全数と呼ぶ (例えば 6).
[3] 環境
[3.1] Windows または UNIX
[3.2] gcc
[3.3] C++
[4] できればこの土日で
[5] if,for,while,簡単な関数,1次配列くらいまで習ってます
0522デフォルトの名無しさん
2006/12/09(土) 12:13:07片方が100万以下ならもう片方がintに収まるって仮定しても大丈夫だよな
0523デフォルトの名無しさん
2006/12/09(土) 12:21:04C++覚えようかなあ
0524デフォルトの名無しさん
2006/12/09(土) 12:31:30#include <cstdio>でprintfは邪道なのかね
0525デフォルトの名無しさん
2006/12/09(土) 12:42:18誰か高速版書いてくれないか
#include <iostream>
using namespace std;
int func(int n) {
int sum = 1;
for(int i=2;i*i<=n;i++) {
if(n%i == 0) {
sum += i;
if(i != n/i)
sum += n/i;
}
}
return sum;
}
int main() {
for(int i=2;i<1000000;i++) {
int f = func(i);
if(f <= i)
continue;
if(func(f) == i) {
cout << i << " " << f << endl;
}
}
return 0;
}
0526デフォルトの名無しさん
2006/12/09(土) 12:43:320527デフォルトの名無しさん
2006/12/09(土) 12:45:120528521
2006/12/09(土) 12:47:320529デフォルトの名無しさん
2006/12/09(土) 13:00:44やってることは 525 と同じだが、func をエラトステネスの篩の変形版で前計算した。
#include <iostream>
using namespace std;
const int n = 1000000;
const int m = 4*n; // margin を4倍くらい取る
int num[m];
int main() {
for (int i = 1; i < m; ++i)
for (int j = i+i; j < m; j+=i)
num[j] += i;
for (int i = 1; i < n; ++i)
if (i < num[i] && i == num[num[i]])
cout << i << "," << num[i] << endl;
}
0530デフォルトの名無しさん
2006/12/09(土) 13:06:42どうもこれをみる限り完全数は友愛数から除くっぽいけど
その処理は?
0531デフォルトの名無しさん
2006/12/09(土) 13:11:210532521
2006/12/09(土) 13:15:26C++でなくCでお願いします
0533デフォルトの名無しさん
2006/12/09(土) 13:21:34すでにプログラムは出てるんだからそれ見て書き換えるくらいできるでしょ
表示してるとこ以外はほどんと変わんないんだし
0534デフォルトの名無しさん
2006/12/09(土) 13:27:000535デフォルトの名無しさん
2006/12/09(土) 13:27:06君は丸投げという言葉の意味が分からんのかね?
0536デフォルトの名無しさん
2006/12/09(土) 13:44:25速度アップ&でかさアップ.結果が合ってるかは知らん
/* (1/2) */
#include <stdio.h>
#define MAX 1000000
int sum[MAX+1];
int sumDivisor(int value){
int i;
int save_value = value;
int least_prime = value;
for (i=2; i*i<=value; i++){
if (value % i == 0){
least_prime = i; break;
}
}
int power_series = 1;
while (value%least_prime == 0){
value /= least_prime;
power_series = power_series * least_prime + 1;
}
sum[save_value] = sum[value]*power_series;
}
0537デフォルトの名無しさん
2006/12/09(土) 13:45:39int main(){
int i;
sum[1] = 1;
for (i=2; i<=MAX; i++){
sumDivisor(i);
}
for (i=1; i<=MAX; i++){
sum[i] -= i;
}
for (i=1; i<=MAX; i++){
if (sum[i] > i && sum[i] <= MAX && sum[sum[i]] == i){
printf("(%d, %d)\n", i, sum[i]);
}
}
return 0;
}
0538デフォルトの名無しさん
2006/12/09(土) 13:51:420539デフォルトの名無しさん
2006/12/09(土) 13:54:21「少なくとも一方が 100万以下」 なので範囲が間違ってる。
0540デフォルトの名無しさん
2006/12/09(土) 13:58:51#include <stdio.h>
#define N 1000000
#define M 4*N // margin を4倍くらい取る
int num[M];
int main(){
int i,j;
for(i = 1;i < M;i++){
for (j = i+i;j < M;j+=i){
num[j] += i;
}
}
for(i = 1;i < N;i++){
if(i < num[i] && i == num[num[i]]){
printf("%d,%d\n",i,num[i]);
}
}
return 0;
}
0541デフォルトの名無しさん
2006/12/09(土) 14:17:26#include <stdio.h>
#define MAX 1000000
int sum[MAX + 1];
void init(void)
{
int i, j;
for( i = 1 ; i <= MAX ; i++ )
for( j = i * 2 ; j <= MAX ; j += i )
sum[j] += i;
}
int sumDivisor(int n)
{
int i, s = 1;
if( n <= MAX ) return sum[n];
for( i = 2 ; i * i < n ; i++ )
if( n % i == 0 ) s += i + n / i;
if( n % i == 0 ) s += i;
return s;
}
int main(void)
{
int n, m;
init();
for( n = 1 ; n <= MAX ; n++ ) {
if( sum[n] <= n ) continue;
if( sumDivisor(sum[n]) == n )
printf("(%d,%d)\n", n, sum[n]);
}
return 0;
}
0542デフォルトの名無しさん
2006/12/09(土) 14:31:251つお願いがあるんだが。datをうpしてはくれまいか。
0543デフォルトの名無しさん
2006/12/09(土) 14:37:000544デフォルトの名無しさん
2006/12/09(土) 14:37:320545デフォルトの名無しさん
2006/12/09(土) 14:46:43いいけどうちもこんな状況
http://chomework.sakura.ne.jp/logindex.html
で全部そろってるわけじゃないよ
もう少し頑張って探せば見つかりそうな気もするけど
それでもよければどうぞ
0547デフォルトの名無しさん
2006/12/09(土) 15:01:32うちも27途中までだな
datでおいてるとこはないっぽい
http://2ch.dumper.jp/key=1089448445
http://220.254.5.211:8000/2ch/pc5_tech/1089/1089448445.html
↑ここにhtmlは1000まであるからhtmltodatとか使って変換するのが良いんじゃないかな
0548デフォルトの名無しさん
2006/12/09(土) 16:03:14http://chomework.sakura.ne.jp/1089448445.dat
変換してあげておいた
0549デフォルトの名無しさん
2006/12/09(土) 16:27:29[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3124.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 11日
[5] その他の制限:
宜しくお願いします。
0550デフォルトの名無しさん
2006/12/09(土) 16:40:01ファイルポインタにstdoutを指定
0552デフォルトの名無しさん
2006/12/09(土) 17:56:17[2] 問題文(含コード&リンク):
乱数生成の標準ライブラリ関数を利用し、
150以上200以下の整数を10個生成して
画面に出力しなさい。
[3] 環境
[3.1] OS: XPpro
[3.2] visual studio2003
[3.3] 言語: C
[4] 期限: ([2006年12月15日まで]
[5] その他の制限:
0553デフォルトの名無しさん
2006/12/09(土) 18:05:33#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i;
//srand(12345);
for(i=0;i<10;i++)
printf("%d\n", 150+rand()%51);
return 0;
}
0554549
2006/12/09(土) 19:48:36ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3124.txt
に関して
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3125.txt
途中まで書いてみてみたのですが
fgetc() を用いる際の stdout周辺について分からないので、
プログラムの訂正よろしくお願いします・・
0555デフォルトの名無しさん
2006/12/09(土) 19:57:01seedのセットした方がよりランダムになるんでないの?
0556デフォルトの名無しさん
2006/12/09(土) 20:05:42ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/putchar.3.html
0557デフォルトの名無しさん
2006/12/09(土) 20:11:04seedのパラメータを固定にするなら、セットしないのと変わらない
0558デフォルトの名無しさん
2006/12/09(土) 21:04:55srand(time(NULL));を追加汁!
0559デフォルトの名無しさん
2006/12/09(土) 21:17:010560デフォルトの名無しさん
2006/12/09(土) 21:47:10レベル1
線形リストを用いて名前と住所のデータを入力、追加、削除、表示するプログラムを作れ。
レベル2
めんどくなった
0561デフォルトの名無しさん
2006/12/09(土) 22:06:38[2] 問題文(含コード&リンク):
ブラックジャック、ポーカー、ババ抜き、7並べのいずれか1つの
プログラムを作れ。
[3] 環境
[3.1] OS: C言語で作ったプログラムが動くものならなんでも
[3.2] bccでもgccでも
[3.3] 言語: C
[4] 期限: ([2006年年末まで]
0562デフォルトの名無しさん
2006/12/09(土) 22:20:0074代目より、七並べ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2783.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2784.c
0563デフォルトの名無しさん
2006/12/09(土) 22:20:08[2] 問題文(含コード&リンク):
tanx+40x-8=0の方程式をニュートン法で解くプログラムを作成せよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] borland
[3.3] C言語
[4] 期限: 明後日
[5] その他の制限: 特に無し。
よろしくお願いします。
0564デフォルトの名無しさん
2006/12/09(土) 22:42:40[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3127.txt
プログラムのmain関数にあるメモリ確保の部分を関数化する。関数名はcreate_nodeとする。(それでmain関数で出力という形です。
それと、二分探索木として、最小値探索を作成せよ。
ただし、最小値の探索の関数は、再帰を使わなくてもかける。
再帰を使った場合と、再帰を使わない場合の、
2種類の関数を作成すること。
[3] 環境
[3.1] OS: WindowsXP
[3.2] visual studio2003
[3.3] C言語
[4] 期限: 15日まで
[5] その他の制限: 特に無し。
よろしくお願いします。
0565デフォルトの名無しさん
2006/12/09(土) 22:51:37[1] 授業単元: 単元って何?
[2] 問題文(含コード&リンク): 2ちゃんのトリップを破るコードを書きなさい(りんくなんかねーよ)
[3] 環境
[3.1] OS:Windows
[3.2] すきにしろ
[3.3] 言語: どちらでも可
[4] 期限: 無制限
[5] その他の制限: 量子コンピュータまだか?
0566デフォルトの名無しさん
2006/12/09(土) 22:55:34#include <stdio.h>
#include <math.h>
double f(double x) { return tan(x) + 40 * x - 8; }
double df(double x) { return 1.0 / (cos(x) * cos(x)) + 40; }
int main(void) {
int x = 0.0, pre; // xの初期値は計画的に。
do {
pre = x;
x -= f(x) / df(x);
} while( fabs(x - pre) > 1e-7 );
// ここで x に近似解が入ってるはず
return 0;
}
0567デフォルトの名無しさん
2006/12/09(土) 23:17:32絶望的につまらない問題をありがとう
0568デフォルトの名無しさん
2006/12/09(土) 23:28:48[2] ニュートン法を用いた解の求め方
[3] 環境
[3.1] OS: WinXP SP2
[3.2] BorlandC++ v5.5
[3.3] C
[4] 期限: 2006/12/10
自力で制作したソースコード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3128.txt
コンパイルエラーが発生。考えてみたけどバグが洗い出せない
/* エラー内容 */
エラー E2188 prog.c 18: 式の構文エラー(関数 main )
エラー E2379 prog.c 18: ステートメントにセミコロン(;)がない(関数 main )
エラー E2188 prog.c 24: 式の構文エラー(関数 main )
警告 W8070 prog.c 34: 関数は値を返すべき(関数 main )
0569デフォルトの名無しさん
2006/12/09(土) 23:31:40[2] 問題文(含コード&リンク):
底面の半径r、高さがh(2つともdouble型)の円錐の体積を計算結果として返す
関数volume_of_cone() を定義することによって、円錐の体積を出力するCプログラム。
[3] 環境
[3.1] Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみ
[4] 期限: ([2006年12月11日 23:00まで
[5] その他の制限:(1) 最初にマクロ定義
#define PI (3.1415926535897932)を入れる
(2)関数volume_of_cone() のプロトタイプ宣言を書いて
main() 関数を書く。
(3)関数volume_of_cone() を書く
0570デフォルトの名無しさん
2006/12/09(土) 23:36:37[2] 問題文(含コード&リンク):
簡単な grep を作る。
キーワードとファイル名を指定して、ファイル内のキーワードがある行の
行番号とキーワードの位置を示すようにしなさい。
例)fprintf.c から File というキーワードを探す
./a.out File fprintf.c
7: char inFileName[ MAXSTR ], outFileName[ MAXSTR ];
-----------^
----------------------------------^
12: strcpy( inFileName, argv[1]); strcpy( outFileName, argv[2]);
-----------------^
------------------------------------------------^
15: if (( fpr=fopen(inFileName,"r"))==NULL) exit(1);
-----------------------^
16: if (( fpw=fopen(outFileName,"w"))==NULL) exit(1);
------------------------^
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:12月13日(水)
[5] その他の制限:特になし
0571デフォルトの名無しさん
2006/12/09(土) 23:42:03>#define EPS pow(10.0, -8);
>#define KMAX 10;
セミコロンいらない
0572デフォルトの名無しさん
2006/12/09(土) 23:46:52cpp32 source.c
で#defineなどの置き換えを行った後のソースが見れるよ
0573568
2006/12/10(日) 00:02:34セミコロン抜いたらコンパイルは通りました。ありがとうございます
計算結果がおかしいようなので、処理の修正をやります
>>572
math.h マクロ abs の重複定義なるエラーが出ましたが、
とりあえずcpp32の使い方を教えていただきありがとうございます。
0574568
2006/12/10(日) 00:11:15追記
#defineで定義したEPSやKMAXに対して置換された値にセミコロンが付いてたので「何だこれ」というコンパイルエラーをはいてたのですね。
で、それを探すにはcpp32で中身を展開したら手っ取り早いということだったのですね。
ありがとうございます
0575デフォルトの名無しさん
2006/12/10(日) 01:02:02#include <stdio.h>
#define PI (3.1415926535897932)
double volume_of_cone(double r, double h);
int main() {
double r,h;
printf("r=?\n");
scanf("%lf", &r);
printf("h=?\n");
scanf("%lf", &h);
printf("answer=%lf\n", volume_of_cone(r,h));
}
double volume_of_cone(double r, double h) {
return r*r*PI*h/3.0;
}
0576デフォルトの名無しさん
2006/12/10(日) 01:35:17[2] 問題文(含コード&リンク):
再帰による数列計算
第1項・第2項の値を1とし、
直前の2つの項の和を項の値とする数列を「フィボナッチ数列」と言う。
この数列のi番目の項を計算する関数は、
以下のように再帰的に記述することができる。
f(i) = f(i-1) + f(i-2) (i > 1のとき)
f(i) = 1 (i = 1のとき)
f(i) = 0 (i = 0のとき)
キーボードから数字を入力して変数aに格納し、
フィボナッチ数列・第a項の値を計算するプログラムを作成せよ。
項の計算は上の定義を使い、再帰的な呼び出しを実行する関数
int Fibonacci(int i)を作成して呼び出すこと。
↑と↓の発展版2つのプログラムの作成をお願いします。
【発展】
指定された項の値を計算は再帰を使わなくても可能である。
再帰を使わず(簡単な反復を使って)コードを作成し、どちらの方が有利か比較しなさい。
【ヒント】
CPUの計算時間を取り出す方法(発展) time.hをインクルードし、標準関数clock()を使う。
clock_t clock(void);詳しい使い方は開発環境でヘルプを参照すること。
「clock_t型」や「clock」で検索するとよい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] visual studio2003
[3.3] C言語
[4] 期限: 16日までまで
[5] その他の制限: 特に無し。
よろしくお願いします。
0577デフォルトの名無しさん
2006/12/10(日) 01:59:19fib.c -- Fibonacci (フィボナッチ) 数列
***********************************************************/
#include <math.h>
int fib1(int n)
{
return (int)(pow((1 + sqrt(5)) / 2, n) / sqrt(5) + 0.5);
}
int fib2(int n)
{
int a, a1, b, b1, c, c1, x, x1, y, y1;
a = 1; b = 1; c = 0; x = 1; y = 0; n--;
while (n > 0) {
if (n & 1) {
x1 = x; y1 = y;
x = a * x1 + b * y1; y = b * x1 + c * y1;
}
n /= 2;
a1 = a; b1 = b; c1 = c;
a = a1 * a1 + b1 * b1;
b = b1 * (a1 + c1);
c = b1 * b1 + c1 * c1;
}
return x;
}
//アルゴリズム事典より
0578デフォルトの名無しさん
2006/12/10(日) 02:02:51#include <stdio.h>
#include <time.h>
//int Fibonacci(int i) { return (i == 0)?0:(i == 1)?1:Fibonacci(i - 1) + Fibonacci(i - 2); } /* 基本版 */
int Fibonacci(int i) { /* 発展版 */
int a,b,c;
for( b = 1, c = 0 ; i >= 0 ; i--, c = b, b = a ) a = b + c;
return c; // 2項先まで求めてるけど気にするな。
}
int main(void)
{
int a, f;
clock_t st;
printf("i=?"); scanf("%d", &a);
st = clock(); // 計算開始クロック
f = Fibonacci(a);
printf("Fibonacci(%d)=%d\n%.3f[sec]\n", a, f,
(double)(clock() - st) / CLOCKS_PER_SEC);
return 0;
}
0579デフォルトの名無しさん
2006/12/10(日) 02:41:29[2] 問題文(含コード&リンク):
自己参照型構造体(リスト)を使ってキューを実装し、
以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加
2 を追加
3 を追加
4 を追加
取り出し
取り出し
5 を追加
6 を追加
7 を追加
取り出し
8 を追加
取り出し
9 を追加
10 を追加
取り出し
取り出し
取り出し
取り出し
取り出し
取り出し
[3] 環境
[3.1] OS: XP
[3.2] visualstudio2003
[3.3] C言語
[4] 期限: 明後日
[5] その他の制限: 特に無し。
よろしくお願いします
0580デフォルトの名無しさん
2006/12/10(日) 02:51:11なんとなくやってみた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3129.txt
0581デフォルトの名無しさん
2006/12/10(日) 03:00:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3130.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3131.c
0582デフォルトの名無しさん
2006/12/10(日) 07:08:26[2] 問題文(含コード&リンク):
以下のことを実行するプログラムを作成しなさい。
スペースで区切った2つの実数を1つの行として、5行分のデータを読み込む。
1つの行にある2つの実数は、2次元座標上の点P(x,y)を示す。
2つの点の組み合わせ全てに対して、2つの点の座標位置、2つの点の距離を1行として出力しなさい。
(Hint:10行分出力されることになる。2重ループを利用すること。)
最も遠い点のペアを出力しなさい。
(添え字番号のペアとして出力する。同点の場合は、どれでも良いから1つだけ出力する)
原点を中心とした2点の角度が最も大きい点のペアを出力しなさい。
(添え字番号のペアとして出力する。同点の場合はどれでも良いから1つだけ出力する。)
以上です。
これらのことを実行するプログラムを1つ作成しなくてはいけないのですが、
よくわからないので、お願いします。
また以上のことを実行するユーザ定義関数を使ったプログラムもお願いします。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 6.0)
[3.3] 言語:C++
[4] 期限:2006/12/11まで
[5] その他の制限:とくになし。
0583デフォルトの名無しさん
2006/12/10(日) 07:55:51ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3133.c
0584デフォルトの名無しさん
2006/12/10(日) 08:35:36いた
0585デフォルトの名無しさん
2006/12/10(日) 10:26:01/*めんどくさいので出力は適当。タブとかあると崩れる*/
/*例外処理は任せた*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUF 2048
int main(int argc, char *argv[]){
char line[BUF], *keyword, *pos;
int i, n = 0, flag, keylen;
FILE *fp = NULL;
keyword = argv[1];
keylen = strlen(keyword);
fp = fopen(argv[2], "r");
while(NULL != fgets(line, sizeof(line), fp)) {
n++;
flag = 0;
for (pos = line; NULL != (pos = strstr(pos, keyword)); pos += keylen) {
if(flag == 0) {
printf("%d:\t%s", n, line);
flag = 1;
}
putchar('\t');
for (i = 0; i < pos - line; i++)putchar('-');
puts("^");
}
}
return 0;
}
0586デフォルトの名無しさん
2006/12/10(日) 11:50:270587デフォルトの名無しさん
2006/12/10(日) 12:00:56昨日の夜に質問して期限も15日までだからそう焦るな
0588デフォルトの名無しさん
2006/12/10(日) 12:15:14[2] 問題文(含コード&リンク):
配列に格納されたデータをソートするプログラムを作成するにあたり、
以下の機能を持つ関数を作成しなさい。
乱数を生成し配列要素に格納する
init_array(int *pa, int n)
配列要素を1行で画面に出力する
output_array(int *pa, int n)
指定された2つアドレスのデータを交換する
swap(int *x, int *y)
[3] 環境
[3.1] OS:XP
[3.2] visualstudio2003
[3.3] C言語
[4] 期限: 12日まで
[5] その他の制限: 特に無し
よろしくお願いします
0589デフォルトの名無しさん
2006/12/10(日) 12:30:26void output_array(int *pa, int n){for(n--;n>=0;n--)printf("%d ",pa[n]);
void swap(int *x, int *y){*x^=*y^*x^=*y;}
0590デフォルトの名無しさん
2006/12/10(日) 13:17:30>void swap(int *x, int *y){*x^=*y^*x^=*y;}
一つの式の中に同じ変数に対する副作用が複数あるので実行結果は未定義。
0591デフォルトの名無しさん
2006/12/10(日) 13:43:21これだけどうしても手に入らない
0592デフォルトの名無しさん
2006/12/10(日) 13:48:39[2] 問題文(含コード&リンク):
課題
HDRを作っている。
出来たばかりのUNIXのファイルシステムがある(NFS/XFS)。通常はファイルの
リストを取るには、"ls"コマンドを使う。現在ではファイルシステムが完成した
ばかりなので、これが無くて不便だ。そこで、
"ls"コマンドを作れ。
<参考>
まずはi-nodeについてよく調べてみること。特に、実際のUNIXシステムで、本当
に本に書いてある通りになっているかどうか、自分で確認すること。ls -iでな
にかはでてくるはず。これがスタートポイントでしょう。wikipediaよりは本を
見た方が良いかも。
他に、i-nodeリスト、物理ディスクと論理ディスク、パーティション、スーパーブロッ
ク、などがキーワードになるはず。c言語では、open()、close()、read()、
lseek()が関係するかも。なお、間接ブロックのことは考えなくてOKです。
[3] 環境
[3.1] OS:Linux(UNIX)
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:12月14日まで
[5] その他の制限: 特になし
ある程度の概念は理解できたのですが、プログラムの書き方がまったく分からない状態です
よろしくお願いします
0593デフォルトの名無しさん
2006/12/10(日) 15:10:39/*とりあえずファイル一覧を表示するプログラム*/
/*参考:http://www.wakhok.ac.jp/~maruyama/Syscall/inode/section3.5.html*/
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc,char *argv[]){
struct dirent *dir = NULL;
DIR *dp = NULL;
if(argc != 2){
printf("usage:\t%s [dir_path]\n",argv[0]);
return 1;
}
if(NULL == (dp = opendir(argv[1]))){
printf("cannot open \"%s\"\n",argv[1]);
return 1;
}
while(NULL != (dir = readdir(dp))){
printf("%s ",dir->d_name);
}
printf("\n");
closedir(dp);
return 0;
}
0594デフォルトの名無しさん
2006/12/10(日) 15:59:23>>592はopendir()のような高級なサーヴィスを使うのではなく、
直接ディレクトリをopen()してディレクトリエントリの情報を読む
ようなプログラムが想定されてる気がする。
たぶん。
0595デフォルトの名無しさん
2006/12/10(日) 16:20:04そういやずいぶん昔、まとめサイト作るっていってたやついたな
おまえか?
0596デフォルトの名無しさん
2006/12/10(日) 16:29:21作ってもいいよ みたいなことを言ったのはログ検索したら
20日前だった
だから別人かな?
0597デフォルトの名無しさん
2006/12/10(日) 16:31:570598デフォルトの名無しさん
2006/12/10(日) 16:46:53[2] 問題文(含コード&リンク):
ポインタを受け渡しする関数を用いて以下のプログラムを作成せよ
1 3人分の学籍番号、氏名(ローマ字)をそれぞれ配列に格納する。
配列は1次元のchar型で宣言する。
2 画面に以下のメッセージを表示し、キーボードからの入力を待つ。
(1)学籍番号を入力して下さい
(2)終了する
3 選択した学籍番号に応じた氏名を画面に表示する。
4 2に戻り(2)を選択するまで処理を繰り返す。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: cygwin
[3.3] 言語: C
[4] 期限: 12月15日
[5] その他の制限: 学籍番号と氏名は
015:taro 037:ziro 054:hanakoでお願いします。
0600デフォルトの名無しさん
2006/12/10(日) 17:13:02[2] 問題文(含コード&リンク):
配列を使ってリングバッファを実装し、以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加
2 を追加
3 を追加
4 を追加 (*)
取り出し
取り出し
5 を追加
6 を追加 (*)
7 を追加
取り出し
8 を追加
取り出し (*)
9 を追加
10 を追加
取り出し
取り出し (*)
取り出し
取り出し
取り出し
取り出し (*)
(終了)
また(*)がついた処理の後に、キューの表示を実行すること。
[3] 環境
[3.1] OS:XP
[3.2] visualstudio2003
[3.3] C言語
[4] 期限: 12日まで
[5] その他の制限: 特に無し
よろしくお願いします
0601デフォルトの名無しさん
2006/12/10(日) 17:38:51[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
チューリングマシンの動作をシミュレーションするプログラムを作成しなさい.
以下の要件を示します.
1 チューリングマシンのプログラムを記述したファイル名とテープに与えるデータを引数とします.
2 チューリングマシンの途中の実行経過が分かるような出力をしなさい.
実行例
./a.out program.txt 10_11_
プログラ ムファイル: program.txt
0 1 1 R 0
0 0 0 R 0
0 _ _ R 1
1 0 0 R 1
1 1 1 R 1
1 _ _ L 2
2 0 1 L 2
2 1 0 L 4
2 _ _ R 3
3 1 _ R 3
3 0 _ R 3
4 1 1 L 4
4 0 0 L 4
4 _ _ L 5
5 1 0 L 5
5 _ 1 R 0
5 0 1 R 0
0602デフォルトの名無しさん
2006/12/10(日) 17:40:17[3.1] OS:MacOSX
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 来週中に。
よろしくお願いします。
0603デフォルトの名無しさん
2006/12/10(日) 17:57:45誰か Wiki でも立ててくれれば適当になんとかするんだが。
俺は管理する気がないのでやらん。
0604デフォルトの名無しさん
2006/12/10(日) 18:00:46チューリングマシンったって、人によって定義が違うこともある。
講義で示された定義を厳密にかいとくれ。
あと program.txt の仕様とテープの仕様も。
0605デフォルトの名無しさん
2006/12/10(日) 18:08:04Wikiの管理くらいならやってもいいが、
恥ずかしい日記を書いてるとこくらいしかスペースが余ってない
レンタルのWikiとかでもいいのか?
0606デフォルトの名無しさん
2006/12/10(日) 18:08:590607デフォルトの名無しさん
2006/12/10(日) 18:25:28レンタルで十分。やってくれるなら助かる。
0608デフォルトの名無しさん
2006/12/10(日) 18:31:48[2] 問題文(含コード&リンク):
値をキーボードから入力して計算を実行し、
変数iとjが15×15のマトリスク方程式を解くプログラムを作成せよ。
右辺ベクトルは既知数とし、境界条件(ノイマン)を用いよ。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限 : 明日の朝8:00〆
[5] その他の制限:
出来れば、詳しい説明付きでお願いします><。。。
0609デフォルトの名無しさん
2006/12/10(日) 18:49:28問題文が全体的に意味不明。
出題されたとおりの問題をきちんと書き写すこと。
0610デフォルトの名無しさん
2006/12/10(日) 19:07:47http://www23.atwiki.jp/homework/
とりあえず作ってみた
ファイルのアップロードを除けばトップページを含めて全て編集可能なはず
かなり手抜きだからやって欲しいことがあれば言ってくれ
やるとは限らないけど
0611デフォルトの名無しさん
2006/12/10(日) 19:12:11乙
0612デフォルトの名無しさん
2006/12/10(日) 19:22:50とりあえず乙。
どういう風に使うの?
0613デフォルトの名無しさん
2006/12/10(日) 19:26:37まとめサイト代わり?
考え無しで作ってしまった
0614601
2006/12/10(日) 19:51:22初期状態:
ヘッドは,与えられたデータの先頭位置にいる
テープ上のデータの読み込み:
テープ上のデータは1,内部状態は0であるので,プログラムの
1行目が該当する.
テープにデータを書き込む:
プログラムの1行目で指定された値をテープに書き込む.
ヘッドの移動と内部状態の変更:
プログラムの1行目で指定された方向(R)に移動.
内部状態も,指定された値(0)に変更.
テープ上のデータの読み込み:
テープ上のデータは0,内部状態は0であるので,プログラムの
2行目が該当する.
テープにデータを書き込む:
プログラムの2行目で指定された値をテープに書き込む.
ヘッドの移動と内部状態の変更:
プログラムの2行目で指定された方向(R)に移動.
内部状態も,指定された値(0)に変更.
テープ上のデータの読み込み:
テープ上のデータは_,内部状態は0であるので,プログラムの
3行目が該当する.
テープにデータを書き込む:
プログラムの3行目で指定された値をテープに書き込む.
ヘッドの移動と内部状態の変更:
プログラムの3行目で指定された方向(R)に移動.
内部状態も,指定された値(1)に変更.
とかかれています。
0615デフォルトの名無しさん
2006/12/10(日) 19:58:51解決してない宿題のリストとか
解決した宿題の解説とか書く?誰かが
0616デフォルトの名無しさん
2006/12/10(日) 20:04:33とすると、オレでも解けるレベルの問題が減るわけか…
0617デフォルトの名無しさん
2006/12/10(日) 20:05:56全然意味不明。人にわかってもらう気無いでしょ。
俺たちは君と同じ講義を取ってはいないんだよ?
たぶん君はきちんと説明できない人だろうから、
配布された資料またはノートの該当部を全部スキャンして
アップロードすれば誰かやるんじゃないかな。
0618デフォルトの名無しさん
2006/12/10(日) 20:26:04未解決のものはwikiに載せなくていいんじゃないかな
正直見にいくの面倒
質問者に解決済みリストを見にいくよう促すだけでいいと思う
0619デフォルトの名無しさん
2006/12/10(日) 20:33:10別解という手もある。
でも、少しずつ異なる解が大量に wiki にあふれる可能性もでてくるな
0620デフォルトの名無しさん
2006/12/10(日) 20:34:330621デフォルトの名無しさん
2006/12/10(日) 20:35:290622デフォルトの名無しさん
2006/12/10(日) 20:37:05http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3137.c
0623デフォルトの名無しさん
2006/12/10(日) 21:05:48という問題で
1 charの配列に文字列を入力させる。
2 その配列の各 char値を加算する
3 1の文字列と2の結果をファイルに出力する
という感じの問題なのはりかいでき
#include <stdio.h>
int main(){
int x[100],i=0,j,sum=0;
while((x[i]=getchar())!='\n' && i<100)
i++;
for(j=0;j<i;j++)
sum+=x[j];
return 0;
}
単純に配列の中身をたしているだけの入力した文字コードの合計を求めるプログラムはつくれたのですがこの先どうしていいかわかりません
0624デフォルトの名無しさん
2006/12/10(日) 21:22:50自分でそこまでいけたならあと一息だ
0625デフォルトの名無しさん
2006/12/10(日) 21:23:03[2] 問題文:数式(y=a*e^-bx+c)のyの値を求めよ。
また数式とx軸に囲まれた決められた範囲の面積を求めよ。
[3] 環境
[3.1] OS:Windows XP SP2
[3.2] コンパイラ名とバージョン:Microsoft Visual C++
[3.3] 言語:C言語
[4] 期限:2006年12月12日
[5] その他の制限:ここでのa,b,c,xの範囲 は入力して決めます。
a=1,b=2,c=3,x=-5〜5 としてyの値と範囲の面積を求めました。
囲まれた面積を台形と考え、0.1や0.01など刻みを入力して求めるようにしました。
上記の入力ではない、数式とx軸が交わるときは誤差が大きくでてしまうので
交わった前後を三角形として考えたいのですが、どうも上手くできません。
よろしくお願いします。
0626デフォルトの名無しさん
2006/12/10(日) 21:34:49charの配列じゃないじゃん
0627549
2006/12/10(日) 22:22:29[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3124.txt
上のをを色々と書き換えしてたのですが
実行するとファイルの中身が消去だったりセグメンテーション違反だったりでさっぱりです…
一応こういう風に書いてみたのですが…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3138.txt
これの訂正を誰かお願いします。
0628デフォルトの名無しさん
2006/12/10(日) 22:37:19ちょwww
俺も作ってたのにひどいお
ここ1週間くらいの苦労が…
0629デフォルトの名無しさん
2006/12/10(日) 22:39:21catはデフォルトで標準出力に出力するんじゃなかったっけ?
もしそうならfp2は常にstdout
0630デフォルトの名無しさん
2006/12/10(日) 22:44:41>>11がそんなんだな
検索エンジンはごぐる様じゃなくって
NAMAZUだけど
0631デフォルトの名無しさん
2006/12/10(日) 22:49:20他の人が作ってる可能性まで考慮してなかった ( ´・ω・`)
0632デフォルトの名無しさん
2006/12/10(日) 22:49:21って感じだけどな
wikiは前にもあったけどそれは管理者しか更新できないよう設定してたので
管理者がやる気を失った途端更新されなくなってしまった
0633デフォルトの名無しさん
2006/12/10(日) 22:50:50同一の動作をさせたいのに二つ以上のパスが存在するのをそんなに頼もしく聞こえるとは・・・\(^o^)/
0634デフォルトの名無しさん
2006/12/10(日) 23:00:03出来てるものが同一じゃないからな
>>11のは単なる検索付きの過去ログ庫。
S/N比は非常に悪いがとりあえず今までの過去ログはほとんどあがってるから
後は誰かが働かなくてもそこそこ機能する
>>610のはwiki。
S/N比は過去ログ庫なんか問題じゃなく高い。
更新の手間とか荒らし対策くらいが難点か
0635デフォルトの名無しさん
2006/12/10(日) 23:01:35コマンドラインに送る文字列はなんて入れてる?
これってコマンドラインに - が含まれてると stdin stdout 指定
それ以外は ファイルを指定ってことだよね
入力と出力のファイルが同じなのはなぜ?
0636627
2006/12/10(日) 23:21:53試すための実行はひとまず ./a.out XXX.txt という感じでしていました
入力と出力のファイルが同じというか
そこをどう指定すれば良いかが分からなくて
if(strcmp(argv[n],"-")==0) {
fp2=stdout;
}
else if((fp2=fopen(argv[n],"w"))==NULL) {
fprintf(stderr,"エラー: ファイル %s をオープンできません。\n",argv[n]);
exit(1);
}
この部分がおかしいとは思うのですが…
0637デフォルトの名無しさん
2006/12/10(日) 23:31:02>>629
0638デフォルトの名無しさん
2006/12/10(日) 23:35:02stdinやstdoutをfcloseしたら問題あった気がする
0639デフォルトの名無しさん
2006/12/10(日) 23:37:16少なくともK&Rには問題ないって書いてあったような。
0640デフォルトの名無しさん
2006/12/10(日) 23:53:01試しに書いてみたけどfcloseしたら駄目みたい
#include <stdio.h>
int main()
{
FILE *fp = stdout;
fclose(fp);
if(fprintf(fp, "%s", "a") < 0)
fprintf(stderr, "error");
return 0;
}
0641デフォルトの名無しさん
2006/12/10(日) 23:56:29100年ROMってろカス
0642デフォルトの名無しさん
2006/12/10(日) 23:59:10>>636というか>>627でfcloseしちゃってるから書いただけ
0643デフォルトの名無しさん
2006/12/11(月) 00:01:390644デフォルトの名無しさん
2006/12/11(月) 00:05:19オマエはどうしようもないカスだな
もう一度良く読んでそれでも理解出来ないのなら200年ROMってろ
0645635
2006/12/11(月) 00:07:01ためしに書いてみた
ただ入力がstdinってのがおかしく思ったので入力は常にファイルからで複数指定可
出力はファイル名の前に - を付けるとそのファイルが出力先になる
ただし - 指定は最初にコマンドラインに現れたファイル一つのみ
以降の - つきファイルは無視
指定なしはstdoutへ
ソース↓
http://sa-wiki.com/upload/src/up0072.txt
ちょっとどきどき
0646デフォルトの名無しさん
2006/12/11(月) 00:08:00>オンラインゲーム「ストーンエイジ」のWikiです。
ちょwwwww
0647デフォルトの名無しさん
2006/12/11(月) 00:08:28言いたかったのは>>643と同じ
実際>>627のソースではfcloseした後に使う可能性あるから
0648635
2006/12/11(月) 00:10:24ミスった
2つめのfor文の
printf("読み込みファイルオープン %s\n",(char*)(argv[n]+1));
これを
printf("入力ファイルオープン %s\n",argv[n]);
に変えといて
0649デフォルトの名無しさん
2006/12/11(月) 00:10:44[2] 問題文(含コード&リンク):
演習
文字列(10文字まで)を入力して、逆順に表示するプログラムを作成せよ。
10文字に満たない場合は、何文字目に\0があるかを調べて、そこから表示する。
(strlen関数は使わないこと)
入力(scanf)のときは%sを使うこと
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限:明日
[5]その他の制限:どうしても前にスペースができたりします。よろしくお願いします。
0650デフォルトの名無しさん
2006/12/11(月) 00:13:370651デフォルトの名無しさん
2006/12/11(月) 00:14:18たぶん違う
cat a.txt - b.txt
を実行したら、
a.txtの中身を表示->標準入力から入力->b.txtの中身を表示
だと思う
0652デフォルトの名無しさん
2006/12/11(月) 00:16:2110文字までって決まってるなら
「10−配列番号」すれば逆順になるだろ
0653デフォルトの名無しさん
2006/12/11(月) 00:17:59薄いと思う。でないとそもそも他に存在して欲しくなくて排除したいのか
と勘ぐってしまうな。
0654635
2006/12/11(月) 00:20:01最初の(書き込み用ファイルのオープン)
if((fp2=fopen((char*)(argv[n]+1),"a"))==NULL)
モード a を
if((fp2=fopen((char*)(argv[n]+1),"w"))==NULL)
モード w にしといて
訂正版
http://sa-wiki.com/upload/src/up0073.txt
>>651
詳しく
>標準入力から入力
何を入力?この入力はどこへ行くの?そもそも>>636が何をしたいのかよく分からんかった
入力したものを出力先にどんどん追加していけばいいのかと思ったんだけど
違ったかな?
0655デフォルトの名無しさん
2006/12/11(月) 00:25:29dumperとか2chミラー系ならやってるけど
0656デフォルトの名無しさん
2006/12/11(月) 00:28:05どうやらソース作ってるみたいだから、見してくれよ!
それ見て直したげるわ
0657デフォルトの名無しさん
2006/12/11(月) 00:33:02基本的には引数で与えられたファイルの中身を表示(標準出力に出力)
ファイル出力機能はなし
-(ハイフン)だった場合は標準入力から入力した(通常はキーボードで打ち込んだ)ものを表示(エコーのような動作)
我ながら説明下手だなorz
0658デフォルトの名無しさん
2006/12/11(月) 00:36:04#include<stdio.h>
main(void){
char name[10];
int i;
printf("Input your name:");
for(i=0; i--;){
scanf("%c",name[i]);
}
for(i=0; i--;){
printf("%c",name[i]);
}
}
学校のPCにデータ残してしまって、こんな感じだったのですが・・・
すみません><
一応学校での授業のURL貼っておきます
ttp://wadatsumi.ipc.musashi-tech.ac.jp/~yasui/compsys/webpp/10th.files/frame.html
0660デフォルトの名無しさん
2006/12/11(月) 00:37:57アッー!
0661デフォルトの名無しさん
2006/12/11(月) 00:38:12安井博士に通報しといた。
0662デフォルトの名無しさん
2006/12/11(月) 00:42:19どうも。サンクスです
0663635
2006/12/11(月) 00:42:42あーエコーね
しかしそれなら出力先に入力ファイルと同じもの指定してるのおかしいよな
最初っから fputc(c,stdout);で良かったんだろうに
>>636の書いてみたソースを見ると入力先、出力先をオプションで指定できるみたいな仕様にしたいのかと思った
>>658
>for(i=0; i--;){
何もせずに終了する予感
0665デフォルトの名無しさん
2006/12/11(月) 00:44:52#include <stdio.h>
#define MAX 10
int main() {
int i,j;
char a[MAX+1]="";
printf("%d文字以内の文字を入力して下さい > ",MAX);
scanf("%s",a);
for(i=0; (i<MAX && a[i]!='\0'); i++);
for(j=i-1; j>=0; j--) printf("%c",a[j]);
return 0;
}
0666デフォルトの名無しさん
2006/12/11(月) 00:46:01宿題解答の依頼をした者です。すみません。
0667デフォルトの名無しさん
2006/12/11(月) 00:47:44stdin/out/err はプログラム終了時及び exit() でクローズされるから、
先にクローズすると問題が有るかも知れない。
でもまぁプログラムが終了した後の話だから目に見える問題は無いと思う。
0668635
2006/12/11(月) 00:50:02名前出してよ
で、文意はいかがなもの?
入力したものを出力にどんどん追加していくって物じゃないの?
俺のソースが目的と違う結果なら…
0669666
2006/12/11(月) 00:55:31>>657に書いてある説明がとても有っているものだとと思いました
0670635
2006/12/11(月) 01:00:28できれば宿題解答の依頼の最初の番号のほうが良かったが
たとえば a.txt - b.txt とした場合
a.txtはファイル入力をそのままstdoutに表示
次のだけど - はstdin からってことだけど stdin の入力の終了はどう判断するの
何かしらの判断が無いと 次の b.txt にいけないけど
それとも CTRL+Zで入力終了とするとか?
0671666
2006/12/11(月) 01:02:150673デフォルトの名無しさん
2006/12/11(月) 01:06:47ありがとうございます><
0674635
2006/12/11(月) 01:12:25いやいやすまん
一番聞かなきゃいけないこと忘れてた
>>627の下のコードの場合ファイルが指定されてた場合出力もファイルになってたわけだがファイルに出力という動作も必要なのか?
すべてstdoutに出力…と言うわけじゃないのね?
それともstdinはstdoutでファイル入力はファイル出力でっていうまぁエコー(?)的な動作を望んでるのかな?
0675666
2006/12/11(月) 01:22:25catコマンドを作れ と言われていただけなので
指定したファイルの中身を表示(すべて標準出力に出力)でファイル出力機能はなし
で良いです。
0676635
2006/12/11(月) 01:28:49そか、ちょっとそれでは簡単すぎだよー
http://sa-wiki.com/upload/src/up0074.txt
キミのソースの出力をすべてstdoutに変更しただけ
0678デフォルトの名無しさん
2006/12/11(月) 01:41:38[2] 問題文(含コード&リンク):
自己参照型構造体(リスト)を使ってスタックを実装し、以下の操作を行った結果取り出された値を画面に出力しなさい。
1 を追加
2 を追加
3 を追加
4 を追加
取り出し
取り出し
5 を追加
6 を追加
7 を追加
取り出し
8 を追加
取り出し
9 を追加
10 を追加
取り出し
取り出し
取り出し
取り出し
取り出し
取り出し
(終了)
[3] 環境
[3.1] OS:XP
[3.2] visualstudio2003
[3.3] C言語
[4] 期限: 12日まで
[5] その他の制限: 特に無し
よろしくお願いします
0679デフォルトの名無しさん
2006/12/11(月) 01:43:50[2] 問題文(含コード&リンク):
ポインタによる疑似間接参照
要素数が10のint型の配列に
キーボードから数値を入力する関数を作成し
(main関数の中で)呼び出しなさい。
配列はmain関数の中で宣言し、
入力の関数には配列のアドレスを引数で与えること。
【ヒント】 void input(int *p)
[3] 環境
[3.1] OS:windowsXP
[3.2] visualstudio2003
[3.3] C言語
[4] 期限: 明日まで
[5] その他の制限: なし
よろしくお願いします。
0680デフォルトの名無しさん
2006/12/11(月) 01:45:570681デフォルトの名無しさん
2006/12/11(月) 01:49:350683デフォルトの名無しさん
2006/12/11(月) 02:22:11Cのプログラムをbcc32でコンパイルしようとしたら
「インクルードファイル'stdio.h'がオープンできない」
と出てきてしまいました。
クラスパスの設定もしてあるし、原因が分かりません。
誰か教えてください。
0684デフォルトの名無しさん
2006/12/11(月) 02:28:130685デフォルトの名無しさん
2006/12/11(月) 02:30:50たらい回しで悪いけど
http://pc8.2ch.net/test/read.cgi/tech/1135127048/
ここの担当じゃね?
って思ったら>>684
0686デフォルトの名無しさん
2006/12/11(月) 02:49:38#include <stdio.h>
void input(int *p);
int main(void) {
int data[10];
input(data);
return 0;
}
void input(int *p) {
int i;
for (i = 0; i < 10; i++) {
scanf("%d", p);
p++;
}
}
0687デフォルトの名無しさん
2006/12/11(月) 02:56:19#include <stdio.h>
void main(void) {
printf("4, 3, 7, 8, 10, 9, 6, 5, 2, 1");
}
0688デフォルトの名無しさん
2006/12/11(月) 03:01:03#include<stdio.h>
#include<stdlib.h>
typedef int STACK_TYPE;
#define STACK_TYPE_SPECIFIER "%d"
typedef struct stack_impl_tag {
struct stack_impl_tag *prev;
STACK_TYPE data;
} StackImpl;
typedef struct stack_tag { StackImpl* ptr; } Stack;
int StackPushImpl(Stack *s, STACK_TYPE x) {
if (s->ptr) {
StackImpl *temp;
if (!(temp = (StackImpl*)malloc(sizeof(StackImpl)))) return 0;
temp->prev = s->ptr; s->ptr = temp;
} else {
if (!(s->ptr = (StackImpl*)malloc(sizeof(StackImpl)))) return 0;
s->ptr->prev = NULL;
}
s->ptr->data = x;
return 1;
}
int StackPush(Stack *s, STACK_TYPE x) {
if (StackPushImpl(s, x)) return 1;
else {
printf("スタックへのプッシュに失敗しました.");
return 0;
}
}
int StackPop(Stack *s, STACK_TYPE *x) {
StackImpl *temp;
if (!s->ptr) {
0689デフォルトの名無しさん
2006/12/11(月) 03:02:34http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0690デフォルトの名無しさん
2006/12/11(月) 03:03:01printf("ポップできません.\n");
return 0;
}
*x = s->ptr->data; temp = s->ptr->prev;
free(s->ptr);
if (temp) s->ptr = temp; else s->ptr = NULL;
printf("ポップしたデータは"STACK_TYPE_SPECIFIER"です.\n", *x);
return 1;
}
void StackInit(Stack *s) { s->ptr = NULL; }
void StackFree(Stack *s) {
StackImpl *t1, *t2 = s->ptr;
while ((t1 = t2) != NULL) {
t2 = t1->prev;
free(t1);
}
}
int main(void) {
Stack s;
STACK_TYPE x;
StackInit(&s);
StackPush(&s, 1); StackPush(&s, 2); StackPush(&s, 3); StackPush(&s, 4); StackPop(&s, &x); StackPop(&s, &x); StackPush(&s, 5);
StackPush(&s, 6); StackPush(&s, 7); StackPop(&s, &x); StackPush(&s, 8); StackPop(&s, &x); StackPush(&s, 9); StackPush(&s, 10);
StackPop(&s, &x); StackPop(&s, &x); StackPop(&s, &x); StackPop(&s, &x); StackPop(&s, &x); StackPop(&s, &x);
StackFree(&s);
return 0;
}
以上。見栄えが悪くなるので、表示とメッセージをPush, Popの中で行うという
暴挙に出ている。が、気にする必要はない。
0691デフォルトの名無しさん
2006/12/11(月) 11:47:13[2] 問題文(含コード&リンク):
自分のウェブサイトへの訪問者を数えて人数を出力するカウンタを作成する場合を考える。
変数はFILE *fpのほか、 int countなど必要と思われるものを用意すること。
人数を格納するファイルは「count.txt」とする。
プログラム(CGI)が実行されると次のような処理を行うと考えられる。
人数を格納しているファイルを開く。(fopen)
うまくファイルが開けた場合
ファイルから人数を読み取り、変数countに格納する。
countを1つ増やす。
countの内容を使って、標準出力にメッセージを出力する。
例)「あなたは○○人目のお客様です」
ファイルに、新しい人数を書き込む。
ファイルを閉じる。(fclose)
【ヒント】
新しい人数を書き込む前に、ひとつ処理が必要です。
[3] 環境
[3.1] OS:windowsXP
[3.2] visualstudio2003
[3.3] C言語
[4] 期限: 明日まで
[5] その他の制限: なし
よろしくお願いします。
0692デフォルトの名無しさん
2006/12/11(月) 11:50:13fseek
0693デフォルトの名無しさん
2006/12/11(月) 12:05:49flock,かlockfでファイルをロックすることではないだろうか。
0694デフォルトの名無しさん
2006/12/11(月) 12:16:560695デフォルトの名無しさん
2006/12/11(月) 12:18:54そのタイミングで排他しても役には立たん。"r+"でfopen()することを
想定しているだろうから、>>692が正解。
↓のような感じで(ここではfseek()ではなくrewind()を使っている)
#include <stdio.h>
#define COUNTER "count.txt"
int main()
{
FILE *fp;
int count = 0;
/* 本当は排他すべき */
if ((fp = fopen(COUNTER, "r+")) == NULL) {
if ((fp = fopen(COUNTER, "w+")) == NULL) {
perror(COUNTER);
exit(2);
}
} else {
fread(&count, sizeof(count), 1, fp);
}
++count;
printf("あなたは%d人目のお客様です\n", count);
rewind(fp);
fwrite(&count, sizeof(count), 1, fp);
fclose(fp);
return 0;
}
0696デフォルトの名無しさん
2006/12/11(月) 13:07:51695の解答なんですけど、↓の
ファイルに、新しい人数を書き込む。
という処理がないです。
0697デフォルトの名無しさん
2006/12/11(月) 13:09:300698デフォルトの名無しさん
2006/12/11(月) 13:14:34[2] 問題文(含コード&リンク
分割コンパイル
引数として受け取ったint型の数値nについて、
1からnまでの総和を計算して返す関数
int sum(int n)
nの階乗を計算して返す関数
int fact(int n)
を作成しなさい。
ただし、main関数を記述するファイルとは別のファイルに作成すること。
[3] 環境
[3.1] OS:XP
[3.2] visualstudio
[3.3] C言語
[4] 期限: 13日まで
[5] その他の制限: 特に無し
よろしくお願いします
0699デフォルトの名無しさん
2006/12/11(月) 13:26:49int sum(int n){return n==0?0:n+sum(n-1);}
int fact(int n){return n==0?1:n*fact(n-1);}
0700デフォルトの名無しさん
2006/12/11(月) 13:48:01分散コンパイルというからには、distccとか使うのかとおもたよ。
0701Avi ◆BER2jLqI72
2006/12/11(月) 14:05:38[2] 問題文(含コード&リンク):短期メモリを用いたタブー検索により、トラベリングセールスマン問題を解くアルゴリズムを設計・実装し、近傍、タブーリストをどのように定義し、パラーメータ調整したかを説明せよ。
また、http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/tsp/
にある、gr21,gr48,kroA100を含む実験データを利用すること。
[3] 環境
[3.1] OS: Vine Linux 3.2
[3.2] コンパイラ名とバージョン:gcc version不明
[3.3] 言語: C
[4] 期限: [2006年12月22日まで]
[5] その他の制限: タブー探索について以下の要素を必須とし、設定を説明すること。
近傍、評価値、タブー制約、タブーリストのサイズ、終了条件。
0703デフォルトの名無しさん
2006/12/11(月) 14:59:08[2] 問題文(含コード&リンク
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3144.txt 元のプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3145.txt 問題文
[3] 環境
[3.1] OS:XP
[3.2] visualstudio
[3.3] C言語
[4] 期限: 13日まで
[5] その他の制限: 特に無し
よろしくお願いします
0704デフォルトの名無しさん
2006/12/11(月) 15:02:10>>698さんですか
0705りん
2006/12/11(月) 15:09:06いろいろと教えてもらってプログラムの方はできたのですが、自分では
まだよく理解できていません。誰かわかる人がいればソースの説明をして
いただけないでしょうか?プログラムは別でのせます。
0706デフォルトの名無しさん
2006/12/11(月) 15:12:35>>704 そうです。
0707りん
2006/12/11(月) 15:13:20#include <string.h>
#define TANGOSU 30
#define MOJISU 20
int main(void)
{
int i;int tango_index;int count;
char buffer[TANGOSU * MOJISU];char splitted[TANGOSU][MOJISU]; char* p;
printf("Please enter a statement: "); gets(buffer);
p = buffer; tango_index = 0; count = 1;
do { p++;
if (' ' == *p || '\0' == *p)
{
strncpy(splitted[tango_index], "", MOJISU); strncpy(splitted[tango_index], p - count, count);
tango_index++; count = 0;}
else
{ count++; }
} while('\0' != *p);
printf("Total %d words. Each words contains;\n", tango_index);
for (i = 0; i < tango_index; ++i)
{
printf("%s: %d letters.\n", splitted[i], strlen(splitted[i]));
}
return 0;
}
0708デフォルトの名無しさん
2006/12/11(月) 15:15:04とりあえずソースを見せてもらおうか。
0709デフォルトの名無しさん
2006/12/11(月) 15:15:33分かるところまではコメントをつけろ。
0710デフォルトの名無しさん
2006/12/11(月) 15:16:57確かにコメントがあればいいね。
勘違いしてれば指摘もしやすいし。
0712デフォルトの名無しさん
2006/12/11(月) 15:24:16>いろいろと教えてもらってプログラムの方はできたのですが
>いろいろと教えてもらってプログラムの方はできたのですが
>いろいろと教えてもらってプログラムの方はできたのですが
>いろいろと教えてもらってプログラムの方はできたのですが
0713デフォルトの名無しさん
2006/12/11(月) 15:24:58カワイソス
0714デフォルトの名無しさん
2006/12/11(月) 15:26:58DQNのまわりもDQNか
0716デフォルトの名無しさん
2006/12/11(月) 15:33:15彼女が学校の友達にあげたらそれが出回っちゃって。
チューターも出回ってることに気付いて、結局彼女がそれを提出できなくなった事がある。
リファクタリングしたり変数増やして冗長にしてやった。
0717デフォルトの名無しさん
2006/12/11(月) 15:33:270718デフォルトの名無しさん
2006/12/11(月) 15:37:280719デフォルトの名無しさん
2006/12/11(月) 15:44:140720デフォルトの名無しさん
2006/12/11(月) 15:45:42まぁでも理解しようとするだけでもえらいね。
或る程度コメントつけたら書き込んでね。
0721デフォルトの名無しさん
2006/12/11(月) 16:08:15[2] 問題文(含コード&リンク):bmp画像をばらばらにする
全ピクセルのRGB情報を取得し、表示する
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2006年12月15日12:00まで
[5] その他の制限: 標準、OpenCVライブラリは使用可です
よろしくお願いします
0722デフォルトの名無しさん
2006/12/11(月) 16:11:50問題文それだけ?
0723デフォルトの名無しさん
2006/12/11(月) 16:11:510724デフォルトの名無しさん
2006/12/11(月) 16:15:180725デフォルトの名無しさん
2006/12/11(月) 16:24:23俺のエスパー能力ではm×nピクセルの画像を
m×n個の1ピクセルの画像にするのではないかという
気がしている
0726デフォルトの名無しさん
2006/12/11(月) 16:25:17さすがに学校はそんな文章で課題は出さないだろ。
出されたまんまのせろよ。
君が自分の言葉で書いたんだろ?
誰も理解してないぞ?
・・・もしそのまんまの文なら学校名がききたい。
0727デフォルトの名無しさん
2006/12/11(月) 16:25:30ばらばらとはピクセルごとの情報を取り出したいと言う事です。
よろしくお願いします
0728デフォルトの名無しさん
2006/12/11(月) 16:26:130729デフォルトの名無しさん
2006/12/11(月) 16:26:580730デフォルトの名無しさん
2006/12/11(月) 16:28:13うちの学校の離散数学のプリントは片言だったりするぞ
作ってるのが日本人じゃないから…
0731デフォルトの名無しさん
2006/12/11(月) 16:29:14口頭でしたので、
ばらばらにするということと、
ピクセルごとの情報を取り出して表示するということを
ノートに走り書きしておりました;;
0732デフォルトの名無しさん
2006/12/11(月) 16:30:57問題出した奴にきいてこい
0733デフォルトの名無しさん
2006/12/11(月) 16:32:56左上の(1,1)から走査して(1,1)(1,2)・・・という
それぞれピクセルの色情報を取得することだと自分で捉えております。
0734デフォルトの名無しさん
2006/12/11(月) 16:34:02どう表示するの?
R:G:B = 137:215:191
R:G:B = 17:155:112
R:G:B = 201:65:106
・
・
とでも表示するの?
0735デフォルトの名無しさん
2006/12/11(月) 16:34:080736デフォルトの名無しさん
2006/12/11(月) 16:35:12↓
すみません 条件が間違えていました!
0737デフォルトの名無しさん
2006/12/11(月) 16:36:11また後だしされてはかなわんよ。
0738デフォルトの名無しさん
2006/12/11(月) 16:36:590739デフォルトの名無しさん
2006/12/11(月) 16:38:52union {
shorta[4];
charb[80];
intc[8];
doubled[2];
} u ;
<メモリダンプ>
0000 0000 00 01 05 0A 08 0F BC 7F 94 02 00 0B 04 02 11 23
0000 0010 01 02 03 55 BA 2F 45 BB AD 23 11 45 00 00 00 00
0000 0020 11 22 33 55 EE FF FF BC 23 01 45 67 FE 00 02 01
0000 0030 00 01 05 0A 08 0F BC 7F 94 02 00 0B 04 02 11 23
0000 0040 01 02 03 55 BA 2F 45 BB AD 23 11 45 00 00 00 00
:
:
すいません、回答お願い致します。
出来れば解説もして頂けると助かります。
0740デフォルトの名無しさん
2006/12/11(月) 16:40:59>>1を読めと何度くりかえさせるんだ
0741デフォルトの名無しさん
2006/12/11(月) 16:42:34>>734
まさしくそれです!
a(0,0) = RGB(100,100,100);
a(0,1) = RGB(100,100,100);
・
・
のように表示したいです
0742デフォルトの名無しさん
2006/12/11(月) 16:55:07R = (pixel>>16)&0xFF;
G = (pixel>>8)&0xFF;
B = pixel&0xFF;
RGB情報の取り出しはこれでいいの?
0743デフォルトの名無しさん
2006/12/11(月) 16:56:220744デフォルトの名無しさん
2006/12/11(月) 16:59:09なんだ。じゃあOpenCV使え。
0745デフォルトの名無しさん
2006/12/11(月) 17:09:24使えと言われても;;
0746デフォルトの名無しさん
2006/12/11(月) 17:11:220747デフォルトの名無しさん
2006/12/11(月) 17:23:500748デフォルトの名無しさん
2006/12/11(月) 17:28:070749デフォルトの名無しさん
2006/12/11(月) 17:45:51[2] 問題文(含コード&リンク):
最大10000行かつ1行が最大255文字のテキストファイルがあると
する。ファイルの内容を1行ずつ読み込んで格納し、各行を辞書式順序に
並べ替えた後、出力するプログラムを作成せよ。プログラムは以下の関数
によって構成せよ。
1.main関数
2.指定されたファイルの内容をすべて読み込む関数。ただし関数の返り値
は読み込んだデータの行数(int)とし、文字列データを格納するための
メモリ領域は動的に確保すること。
3.データを順に表示する関数。
4.2つの文字列へのポインタに対して、それらの値を入れ替える関数。
5.文字列データのソートを行う関数。ソートにはバブルソートを用い、
文字列の比較にはstrcmp関数を用いること。
6.文字列データを格納するために確保したメモリ領域をすべて解放する
関数。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の朝11時00分までです。
[5] その他の制限:
問題にも書いてありますが、
問題で示した6つの関数によって構成する。
ソートにはバブルソートを用いる。
文字列の比較にはstrcmpを用いる。
大域変数は使用禁止。
よろしくお願いします。
0750デフォルトの名無しさん
2006/12/11(月) 17:49:39OpenCV備え付けのメソッドにあるんですか?;;
0751デフォルトの名無しさん
2006/12/11(月) 17:54:36getとか名前のついてるものを調べるといい
0752デフォルトの名無しさん
2006/12/11(月) 18:14:09最初の書き込みでOpenCVがヒントにかかれてたんだから
使うことくらいは分かってたんだろう。
それに、「OpenCV使え」って言って十分だろうとか、うーむ?
0753デフォルトの名無しさん
2006/12/11(月) 18:16:36うーむ?とか言ってないでてめーがなんとかしろよ、屑が
0754748
2006/12/11(月) 18:30:19ここまで聞けば大体分かったから放置しないで解いてあげてもいいんじゃない?
って意味です。なんか勘違いされてそうな気がしたんで一応。
0755デフォルトの名無しさん
2006/12/11(月) 18:32:13[2] 問題文:
西暦1900年から2500年までのうるう年を全て表示するプログラムを作成せよ。
ここでは、西暦を引数としてその年がうるう年であるかを判定する関数を用いよ。
うるう年の定義を以下に記す。
・4で割り切れない年はうるう年ではない
・4で割り切れる場合に、100で割り切れない年はうるう年
・4で割り切れてかつ100でも割り切れる場合に、さらに400でも割り切れればうるう年
・4で割り切れてかつ100でも割り切れる場合に、400で割り切れなければうるう年ではない
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2006年12月12日
[5] その他の制限: ポインタはまだ習っていません。関数だけでお願い致します。
0756デフォルトの名無しさん
2006/12/11(月) 18:44:47よく見たらIPLが入ってるとは書いてないな
http://chihara.naist.jp/people/2004/kenta-t/OpenCV/pukiwiki/index.php?RGBTRIPLE
0757デフォルトの名無しさん
2006/12/11(月) 18:56:02まずはぐぐれ話はそれからだ
0758デフォルトの名無しさん
2006/12/11(月) 18:59:49環境無いからコンパイルできないが。試してみておくれよ
#include <stdio.h>
#include <cv.h>
int main(int argc, char *argv[])
{
int i, j;
IplImage* src;
int sbpp = ((src->depth & 255)/8) * src->nChannels;
src = cvLoadImage(argv[1]);
for (i = 0; i < src->height; i++) {
unsigned char *rgb = (unsigned char*)src->imageData + (y * src->widthStep);
for (j = 0; j < src->width; j++) {
printf("x,y(%d,%d) = RGB(%d,%d,%d)\n", rgb[2], rgb[1], rgb[0]);
s += sbpp;
}
return 0;
}
0759デフォルトの名無しさん
2006/12/11(月) 19:02:110760デフォルトの名無しさん
2006/12/11(月) 19:04:240761デフォルトの名無しさん
2006/12/11(月) 19:06:17うるう年の奴か?
範囲出されてるんやから1年ごと判定せいや
0762758
2006/12/11(月) 19:08:58#include <stdio.h>
#include <cv.h>
int main(int argc, char *argv[])
{
int i, j;
IplImage* src;
int sbpp = ((src->depth & 255)/8) * src->nChannels;
src = cvLoadImage(argv[1]);
for (i = 0; i < src->height; i++) {
unsigned char *rgb = (unsigned char*)src->imageData + (i * src->widthStep);
for (j = 0; j < src->width; j++) {
printf("x,y(%d,%d) = RGB(%d,%d,%d)\n", j, i, rgb[2], rgb[1], rgb[0]);
s += sbpp;
}
return 0;
}
0763デフォルトの名無しさん
2006/12/11(月) 19:12:01ちょっと気になったんだが、間違ってたらゴメン
>int sbpp = ((src->depth & 255)/8) * src->nChannels;
>src = cvLoadImage(argv[1]);
イメージロードする前に src->depth と src->nChannels を使うのはいいのか?
0764デフォルトの名無しさん
2006/12/11(月) 19:14:50いや明らかにダメだろw
普通にsegvるはず
0765デフォルトの名無しさん
2006/12/11(月) 19:15:02ああコンパイルしてえ。
0766デフォルトの名無しさん
2006/12/11(月) 19:29:060767デフォルトの名無しさん
2006/12/11(月) 19:43:56[2] 問題文:
変数valueの12ビット目〜15ビット目(4ビット)をチェック(ビットテスト)して、
ゼロであれば上位2バイトに1を代入、ゼロ以外であれば、2を代入する文を示しなさい。
(32bitのデータです)
intvalue;
[3] 環境
[3.1] OS: (Windows)
[3.2] bcc
[3.3] C言語
[4] 期限: 明日まで
[5] その他の制限: (ビットフィールドを使用して作成する)
すみません、宜しくお願い致します。
0768デフォルトの名無しさん
2006/12/11(月) 19:48:48だよな…他から指摘が無いからいいのかと思ったよ
サンクス
0769デフォルトの名無しさん
2006/12/11(月) 19:54:56http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3146.c
0770デフォルトの名無しさん
2006/12/11(月) 21:03:39ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3147.txt
0772767
2006/12/11(月) 21:13:13有難うございます。これから内容をじっくり見てみます!
0773767
2006/12/11(月) 21:22:40処理する場合はどういう風になるでしょうか。
上位2バイトが1になるということは16ビット分全部1という事なのでしょうか。
宜しくお願い致します。
0774デフォルトの名無しさん
2006/12/11(月) 21:31:21ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3148.txt
0775767
2006/12/11(月) 22:20:50どうもありがとうございます!!
0776749
2006/12/11(月) 22:49:320777デフォルトの名無しさん
2006/12/11(月) 22:50:07union はデータの先頭を各メンバに割り当てる。
int が 4Byte であると仮定すると c[3] は 0x04021123 が該当する。
ちなみに union のサイズはメンバ中の最大サイズにより決定するので例では b の80byteとなる。
c[3] が10進数としていくつを表すかは環境により異なるので、以下の実行結果で求めよ。
char a[] = { 0x04, 0x02, 0x11, 0x23 };
int* b;
b = (int*)a;
printf( "%d\n", *b );
0778デフォルトの名無しさん
2006/12/11(月) 23:24:22ここのstage6-3と6-4の四則演算をするにはどうしたらいいか助言いただけないでしょうか?
0779デフォルトの名無しさん
2006/12/11(月) 23:26:30[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3149.txt
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:明日の正午まで
[5] その他の制限:ポインタ、構造体、配列、関数は習いました
よろしくお願いします
0780デフォルトの名無しさん
2006/12/11(月) 23:58:376-4 ひんと。
scanf("%f%[+-*/]%f",&a,&c,&b);
switch(c){
case '+': …
0781デフォルトの名無しさん
2006/12/12(火) 00:11:59この問題の仕様には矛盾があるなぁ。出題者が素人かと。
2.で『格納する領域は動的に確保』とあるから普通に考えると『読み込んだ文字数+1』を確保する様に
思える。
よって各行毎に領域のサイズが異なる事になる。
しかし、4.で『2つの文字列へのポインタに対して、それらの値を入れ替える』とあるけどサイズが異なる
から strcpy() は使えない。
この矛盾を回避するには2.での領域確保を固定長(255+1)とするか、4.を『2つの文字列へのポインタ
へのポインタに対して、それらの値を入れ替える』に変更する必要がある。
前者の場合、ソート効率が悪すぎるので後者が妥当かと思える。
まぁ明日締め切りでは確認もできないわなぁ...
0782デフォルトの名無しさん
2006/12/12(火) 00:18:32[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:Windows
[3.2] VC2005 MFC
[3.3] 言語: C++
質問ぽい感じなんですけどPolylineで(10,10)から(10,11)に線を引きたい時ってPOINT型にこの座標入れてやると
1ピクセルの点になってしまうのは仕様ですか?2ピクセル分じゃなくて1ピクセルの点になってしまいます。
これは始点か終点どちらが削られているんですか?
お答えお願いします!
0783デフォルトの名無しさん
2006/12/12(火) 00:20:15Polylineってなんだよ?
そういうことはそれを作ったやつに聞け
0784739
2006/12/12(火) 00:28:18どうもありがとうございます!!
0785767
2006/12/12(火) 00:32:02ビットフィールドを使用する方なのですが、恐縮ですが解説、もしくは
ヒントと共に今一度ご教授いただけないでしょうか?
0786デフォルトの名無しさん
2006/12/12(火) 00:33:51メモリを動的に確保と言ってるだけだから
ようはスタティックに strtemp[256] と確保するなと言うだけで
動的にmallloc(255+1)で確保すればいんじゃないか?
0787デフォルトの名無しさん
2006/12/12(火) 00:37:48[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3152.txt
[3] 環境
[3.1] OS:LINUX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:2006年12月12日の正午まで
限界まで粘ったけどそろそろやばそうなので助けを求めます。
お願いします
0788781
2006/12/12(火) 00:53:43それでも良いんだけどね...バブルソートするときに strcpy しまくるのはいかがなものかと...
問題文を読み直したら『ポインタの値を入れ替える』だから、引数をポインタのポインタで与える様にも
読めるかなぁ。単にイチャモンつけてた様な気分。
0789デフォルトの名無しさん
2006/12/12(火) 00:58:52回答ありがとうございます
さっそくそのヒントを得てない頭振り絞ってやってみたんですがどうもだめなのですが
#include <stdio.h>
void main(void)
{
int a,b,c;
printf("演算を入力してください:");
scanf("%f%[+-*/]%f",&a,&c,&b);
switch(c){
case '+':printf("\n%.1f+%.1f=%.1f",a,b,a+b);
break;
case '-':printf("\n%.1f-%.1f=%.1f",a,b,a-b);
break;
case '*':printf("\n%.1f*%.1f=%.1f",a,b,a*b);
break;
case '/':printf("\n%.1f/%.1f=%.1f",a,b,a/b);
break;
default :printf("エラー");
}
}
これではだめなのでしょうか?
0790デフォルトの名無しさん
2006/12/12(火) 01:01:25[2] 問題文(含コード&リンク):
Insertion sort,Merge sort, Heap sort, Quick sort, Randomized quick sort,Selection sortをC言語プログラムで作成し、それぞれのデータ数に対する命令実行回数の計測、評価をする。
各データの総数10万個
ASC||テキスト形式で、1行に1データ
[3] 環境
[3.1] OS:Mac
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:2006年12月15日
よろしくお願いします
0791デフォルトの名無しさん
2006/12/12(火) 01:13:29自作関数ではありません><
0792781
2006/12/12(火) 01:13:40勝手に解釈して書いてみたけど90ステップくらいあるので直接書くの面倒くさい。
どっか適当な晒し場所教えれ。
2時までにレスあれば晒すわ。
0793デフォルトの名無しさん
2006/12/12(火) 01:14:370794デフォルトの名無しさん
2006/12/12(火) 01:14:370795デフォルトの名無しさん
2006/12/12(火) 01:40:14ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3154.c
0796792
2006/12/12(火) 01:54:144カラムタブで書いたのでインデントずれたぁ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3155.txt
0797デフォルトの名無しさん
2006/12/12(火) 01:59:59win32APIの共通的な仕様
http://wisdom.sakura.ne.jp/system/winapi/win32/win23.html
> //ただし、終点自体は描画されません
0798デフォルトの名無しさん
2006/12/12(火) 02:10:15うほっ!ありがとうございました!終点を書かないとはけしからん仕様ですな。
0799デフォルトの名無しさん
2006/12/12(火) 02:12:240800787
2006/12/12(火) 02:32:32このまま期限まで考えてるつもりですが、昨日から自分の中で全く発展がないので正直自信がないです。
どうか僕に突破口を与えてください。どなたかお願いします。
0801デフォルトの名無しさん
2006/12/12(火) 03:45:53こんなかんじかえ?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3156.txt
0802デフォルトの名無しさん
2006/12/12(火) 04:24:50ヒント
>int a,b,c;
>printf("演算を入力してください:");
>scanf("%f%[+-*/]%f",&a,&c,&b);
↑だと
a,b,c は整数型
%fは浮動小数点数型
0803デフォルトの名無しさん
2006/12/12(火) 04:45:44すみません
よそで教えてもらったのでもう結構です
0804デフォルトの名無しさん
2006/12/12(火) 04:59:51マルチレスやめてくれ。
泣きたくなる。
0805デフォルトの名無しさん
2006/12/12(火) 06:01:22おまいはよく頑張った。これからも答えてやってくれ。
てか俺が思うに>>803は成りすましだと思うんだがな。IDがでないことをいいことにさ。
0806デフォルトの名無しさん
2006/12/12(火) 06:33:39この人キモいです
0807デフォルトの名無しさん
2006/12/12(火) 06:36:240808デフォルトの名無しさん
2006/12/12(火) 06:45:320809749
2006/12/12(火) 06:55:59レス遅くなって申し訳ないです。解答ありがとうございます。
ポインタへのポインタについて解説していたので後者の4を『2つの文字列への
ポインタへのポインタに対して、それらの値を入れ替える』に変更だと思いま
す。
問題にミス(?)があったようなので提出期限が延びると思いますし、>>781さん
が教えて下さった解答を見て自分でも考えてみようと思います。
疑問があったら質問するかもしれませんがよろしくお願いします。
0810デフォルトの名無しさん
2006/12/12(火) 08:42:52コード読んだけど何やりたいかわからん。
なんでアルファベットの出現頻度調べるのに2分木使うんだ?
読み込むファイルのフォーマットもわからんし。
単語入力するところはバグってるし。
あのコード流用しないといけないのか?
0811デフォルトの名無しさん
2006/12/12(火) 08:58:59仲間いた。
俺も回答してあげたかったけど何したいかよく解らん。
しかも ReadBuffer をグローバル変数で定義して関数間の受け渡しに使ってるとか超ゴミソースなので
ちゃんと読む気も起きなかった。
>>787
あのソースが出題の一部だとするなら...その学校は辞めた方が良いだろう。
0812デフォルトの名無しさん
2006/12/12(火) 09:39:30期限変わったん?
二分探索木って事はまず二分木をソートするって事?
0813デフォルトの名無しさん
2006/12/12(火) 09:49:09[1] 授業単元: 情報工学実験
[2] 問題文(含コード&リンク):
ファイル関数を扱う問題で
test1.txt
asdsdfga
dsda
test2.txt
ssasfgda
fsda
と二つのテキストファイルが有る。この文字をファイル関数を使い配列に読み込み逐次比較したい。
比較し、同じ文字であれば1を計上し、異なれば0を計上し最終的に合計スコアを出力する。
例えば上記の場合、最初はaとsが比較されスコアは0。次にはsとsが比較されスコアは1を計上する。
[3] 環境
[3.1] OS: Windows/Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: ([2006年12月15日23:59まで
0814813
2006/12/12(火) 09:50:11よろしくおねがいします。
0815デフォルトの名無しさん
2006/12/12(火) 09:54:03if(str[i] == str2[i])
0816デフォルトの名無しさん
2006/12/12(火) 10:05:20float a,b;
char c;
0817デフォルトの名無しさん
2006/12/12(火) 10:07:52まずはソースを見せるんだ
0818せんせ
2006/12/12(火) 10:26:08こらー 吉田ぁー 自分で解けって言っただろがぁー
0819デフォルトの名無しさん
2006/12/12(火) 10:39:420820デフォルトの名無しさん
2006/12/12(火) 10:44:54[2] 問題文(含コード&リンク):
最小公倍数・最大公約数を求める関数を作成し、それを利用するプログラムを作成せよ。関数は下記の通りとする。
void lcm_gcm(int in0,int in1,int *lcm,int *gcm)
lcm最小公倍数(のポインタ)
gcm最大公約数(のポインタ)
戻り値なし
入力に関して
キーボードから、入力値をスペース1つあけて1行で入力する。
出力に関して
最小公倍数、最大公約数の順番でスペース1つあけて出力(+改行)
[3] 環境
[3.1] OS: WindowsXPSP2
[3.2] study Cとかいうやつ
[3.3] 言語: C
[4] 期限: 12/20まで
[5] ポインタまで
これともう一問あるのでお願いします
0821デフォルトの名無しさん
2006/12/12(火) 11:04:00何のプロになるんだ?丸投げのプロか?
0822デフォルトの名無しさん
2006/12/12(火) 11:11:320823デフォルトの名無しさん
2006/12/12(火) 11:12:29void lcm_gcm( int in0, int in1, int *lcm, int *gcm )
{
int i;
for ( i = 2, *lcm = 1; i <= in0 / 2; i++ ) if ( in0 % i == 0 && in1 % i == 0 ) *lcm = i;
if ( in0 % in1 == 0 ) *lcm = in1;
if ( in1 % in0 == 0 ) *lcm = in0;
*gcm = in0 * in1 / *lcm;
}
void main( void )
{
int in0, in1, lcm, gcm;
scanf( "%d %d", &in0, &in1 );
lcm_gcm( in0, in1, &lcm, &gcm );
printf( "%d %d\n", lcm, gcm );
}
0824デフォルトの名無しさん
2006/12/12(火) 11:14:17[2] 問題文(含コード&リンク):
void prime(int in,int *array, int *index)
in入力値
array素数が照準に格納されている配列(のポインタ)
indexarray に現在格納されている数(のポインタ)
in が素数であれば prime()内で+1すること。
戻り値なし
void print_array(int *array,int num)
array 素数が昇順に格納されている配列(のポインタ)
num出力すべき素数の数
戻り値なし
入力に関して
キーボードから、入力値(+改行)のみ入力する。
出力に関して
小さいものから順にスペース1つあけ、改行をいれずに出力。入力値分出力したら、改行。
[3] 環境
[3.1] OS: WindowsXPSP2
[3.2] study Cとかいうやつ
[3.3] 言語: C
[4] 期限: 12/20まで
[5] ポインタまで
>>821
正式な単元名がCプロ入門演習となってるので書いたまでですが?
0825813
2006/12/12(火) 11:16:15http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3160.txt
0826デフォルトの名無しさん
2006/12/12(火) 11:16:18頼む側なんだからな。
0827デフォルトの名無しさん
2006/12/12(火) 11:18:02小さい順にn個(最大100)の素数を求めるプログラムを作成せよ。
以下の素数であれば指定した配列に格納する関数と、結果を表示する関数を利用するものとする。
>>823
お早い解答ありがとうございます
早速はしらせてみます
0828デフォルトの名無しさん
2006/12/12(火) 11:19:19そういう要らんレスするなよ、本当に回答する奴がいなくなるぞ?
態度が悪くて○投げって、逆にお前が困るだろ。
言動をつつしみなさい
0829デフォルトの名無しさん
2006/12/12(火) 11:19:28丸投げの。
0830デフォルトの名無しさん
2006/12/12(火) 11:21:15結局キーボードから入力するのは配列に格納させる素数の数で良いのか?
0831787
2006/12/12(火) 11:26:49問題文を見落としてて、大文字小文字の区別をつけちゃいけなかったみたいなんです。
そうなるように改造していただけないでしょうか
>>810>>811
>>801の人の回答は間違いなんですか?そんなにまずいんですかこの問題・・・
0832デフォルトの名無しさん
2006/12/12(火) 11:27:16ここの常連だ
0833デフォルトの名無しさん
2006/12/12(火) 11:34:19○投げのプロも立派なプロだよ
胸をはって仕事の横流しをすればいい
0834830
2006/12/12(火) 11:35:35返事がねぇが、こんなもんか。
void prime( int in, int *array, int *index )
{
int f, i;
for ( f = 1, i = 0; i < *index && array[ i ] <= sqrt( in ); i++ ) if ( in % array[ i ] == 0 ) f = 0;
if ( f ) array[ (*index)++ ] = in;
}
void print_array( int *array, int num )
{
int i;
for ( i = 0; i < num; i++ ) printf( "%d ", array[ i ] );
printf( "\n" );
}
void _38_main( void )
{
int p[ 100 ], i, index, num;
scanf( "%d", &num );
for ( i = 2, index = 0; index < num; i++ ) prime( i, p, &index );
print_array( p, index );
}
0835デフォルトの名無しさん
2006/12/12(火) 11:44:30801ではないけど解答
元のプログラムは単語をひとつずつ読み込んで集計するやつっぽいから,読み込みの単位を
単語からアルファベット1文字(の文字列)に変更する.
元のプログラムのReadWord関数を次のように書き換えてくれ.余裕があれば関数名も.
int ReadWord(FILE *fp){
int ch;
int i;
do{ /* アルファベット以外を読み飛ばす */
ch=getc(fp);
if(ch == EOF) return (0);
if(ch == '^') return (2);
}while(!isalpha(ch));
buffer[0] = toupper(ch);
buffer[1] = '\0';
return (1);
}
あと,MemoryAllocation関数の最後に
return current;
を加える必要がある.
アルファベットの集計にツリー使う必要はないんだけどね…
0836デフォルトの名無しさん
2006/12/12(火) 11:51:17俺としては○投げされた問題を解答する方が楽だな。
「ここまでは自分で作ったんですけど」とか、そんなのは先生に聞け。
質問文もまともに○投げできない奴はカエレ。
0837デフォルトの名無しさん
2006/12/12(火) 11:53:42自力でとっていない単位じゃ本人も報われないだろうw
0838デフォルトの名無しさん
2006/12/12(火) 11:55:330839デフォルトの名無しさん
2006/12/12(火) 11:58:540840デフォルトの名無しさん
2006/12/12(火) 12:00:58返事が遅れてしまい申し訳ないです
入力に関してはそれでいいと思います。というかそれ以外何かあるのか自分にはわからないです
コードを実行してみたのですがエラーを吐いてうまく動きませんでした
残りは自分でやってみようかと思います。ありがとうございました
0841デフォルトの名無しさん
2006/12/12(火) 12:03:31_38_main() を main() にすれば良いんじゃね?
0843デフォルトの名無しさん
2006/12/12(火) 12:05:430844デフォルトの名無しさん
2006/12/12(火) 12:07:06将来プログラム製作には関われませんって宣言しているんだから心配しなくていいです
0845デフォルトの名無しさん
2006/12/12(火) 12:11:39というか、タイトルがそうでなくても今までも「かもしれません」だったから問題ないかとw
0846デフォルトの名無しさん
2006/12/12(火) 12:15:38801のコードを使ってないか?
書き換えてほしいのは787でupされた元のコード.
0847801
2006/12/12(火) 12:21:15ReadAlphaのさいごを
return toupper(ch);
0848デフォルトの名無しさん
2006/12/12(火) 12:56:49>>812 期限はそのままなんですが、早めに提出しないと見直しできないみたいなので、明日までにお願いします。すみません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3161.txt 問題文1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3163.txt 問題文2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3127.txt 元のプログラム
上記の問題文1と2に従って元のプログラムを修正する課題です。問題文1と2の2つのプログラムを作成します。
あと問題文2に例外があって、二分木のイメージを表示するプログラムが元プログラムにあるのですが、問題文2にそる形で二分木イメージの元プログラムを問題文2で二分探索木イメージで出力するようにお願いします。
0849811
2006/12/12(火) 12:58:49>>801 の書いたのを見ると以下の仕様と読める。
・ファイルを読み出現したアルファベットの個数リストを作成する。
・リストは双方向リンクで作成し文字が昇順になるように動的に生成すること。
・入力された文字の出現回数を表示する。
多分上記の動作をすると思うので正しいだろう。
>>810 も俺もこの仕様を >>787 から読み取れなかっただけ。俺はソース読む段階で放棄したし。
>>787 がもう消えてるので確認できないけど、アルファベットの出現回数を得るだけなら 26 個の
カウンター配列を持てば済む話。
双方向なんかを使ってるから題意が読めない−まぁ双方向リンクがお題目なんだろうけどね。
もう少し必然性のある問題を作れないのかなぁ...とにかく、参考ソースがゴミである事は確か。
0850811
2006/12/12(火) 13:06:260851デフォルトの名無しさん
2006/12/12(火) 13:09:38問題文1と2はどう違うのだ?
0852デフォルトの名無しさん
2006/12/12(火) 13:19:31見直しなんかするの?
0853デフォルトの名無しさん
2006/12/12(火) 13:20:09[2] 問題文(含コード&リンク):入力ファイル(テキストファイル)の中から単語を切り出し
単語部分のみ文字列を反転するプログラムを作る。ただし
単語文字列を格納する配列を用いるとともに、文字列を反
転する関数を用意し引数にはポインタを使用すること。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2006年12月13日8:00まで
[5] その他の制限: stdio.hとstdlib.h以外は習ってないのでできるだけ使わないでお願いします。
よろしくお願いします
0854デフォルトの名無しさん
2006/12/12(火) 13:24:19文字列の反転方法うp汁
0855デフォルトの名無しさん
2006/12/12(火) 13:24:220856デフォルトの名無しさん
2006/12/12(火) 13:24:31ここのそのままコピったらバレるかもしらんやん
変数名変えたりforとwhileを変えたりしないと
0857デフォルトの名無しさん
2006/12/12(火) 13:26:080858デフォルトの名無しさん
2006/12/12(火) 13:27:320859デフォルトの名無しさん
2006/12/12(火) 13:56:330860デフォルトの名無しさん
2006/12/12(火) 14:04:010861デフォルトの名無しさん
2006/12/12(火) 14:07:580862デフォルトの名無しさん
2006/12/12(火) 14:09:08ABCD -> DCBA
ってことでは?
0863デフォルトの名無しさん
2006/12/12(火) 14:09:59[2] 問題文(含コード&リンク):倍精度実数型変数a と,倍精度実数型ポインタ変数p を定義する.このとき,以下の動作を行
うプログラムを作成しなさい.
�@ キーボードから実数を読み込み,a に格納する
�A a の値とa のアドレスを画面表示する
�B a のアドレスをp に代入しておき,p を通じてキーボードから実数を読み込む
�C p の指し示す先の要素の値とp の値を画面表示する
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C)
よろしくお願いします。
0864デフォルトの名無しさん
2006/12/12(火) 14:14:53#include <stdlib.h>
#include <time.h>
#define N 4
int main(){
int Number[N],In[N];
int i,j,hit,blow;
srandom((unsigned) time(0));
for(i=0;i<N;i++){Number[i]=random()%10;In[i]=0;}
do{
printf("%d桁の数を入力!:",N);
for(i=0;i<N;i++){if((In[i]=getchar()) ==EOF) break; // この部分 //
In[i]-='0';}
fflush(stdin);hit=0,blow=0;
for(i=0;i<N;i++){if(Number[i]==In[i]) hit++;}
for(i=0;i<N;i++){for(j=0;j<N;j++){if(Number[i]==In[j]) {
blow++;
break;
}}}
for(i=0;i<N;i++) printf("%d-",In[i]);
printf("(%dHit,%dBlow)\n",hit,blow-hit);
}while(hit!=N);
for(i=0;i<N;i++)printf("%d",Number[i]);
puts("\nComplete!!");
}
0865864
2006/12/12(火) 14:15:55[2] 問題文(含コード&リンク):上記のfor文で数を読み取る部分をscanfの型に直す。
今のままだと、getcharで取り込んだ数が不具合を起こして、入力した数が正常に表示されません。
このプログラムでは一回試行する毎にランダムの数が書き変わってしまいます。
数を言い当ててComplete!が表示されるまで、設定された数が書き変わらないようにしてください。
[3] 環境
[3.1] OS: Linux
[3.2] gcc -o
[3.3] 言語: C
[4] 期限: 2006.12.15
改行が多いため、二つのレスに分けました。
0866デフォルトの名無しさん
2006/12/12(火) 14:42:41ヒット&ブロウだったら同じ数字使えないようにしないと。
0867デフォルトの名無しさん
2006/12/12(火) 14:59:34どうも題意が分かりにくいが、こんな感じでいいのかな。
#include <stdio.h>
#include <string.h>
/* MBS未対応 */
char *reverse(char *s)
{
char *p, *q, tmp;
if (!s || !*s) return s;
for (p = s, q = s + strlen(s) - 1; q > p; ++p, --q) {
tmp = *p;
*p = *q;
*q = tmp;
}
return s;
}
main()
{
char buff[8192];
while (scanf("%8191s", buff) != EOF)
printf("%s\n", reverse(buff));
}
0868デフォルトの名無しさん
2006/12/12(火) 15:01:02各種チェックは省略
scanf("%d", &n);
for(i=0; i<N; i++,n/=10) In[N-1-i] = n % 10;
0869デフォルトの名無しさん
2006/12/12(火) 15:16:34こうじゃねぇ?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3164.txt
0870初心者@携帯
2006/12/12(火) 15:18:21int main(void)
{
int a,*p;
scanf("%d",&a);
printf("a=%d &a=%p",a,&a);
p=&a;
scanf("%d",p);
printf("*p=%d p=%p",*p,p);
return 0;
}
インデントは自分でしてね
0871864
2006/12/12(火) 15:22:45四つの数は全て異なっていなければなりません。
御迷惑をお掛けします。
0872デフォルトの名無しさん
2006/12/12(火) 15:23:47問題文に「文字列を反転する関数を用意し」という記述があるのだが。
0873デフォルトの名無しさん
2006/12/12(火) 15:26:530874デフォルトの名無しさん
2006/12/12(火) 15:43:18[2] 問題文(含コード&リンク):下記
[3] 環境
[3.1] OS:Windows
[3.2] VS2005 C++
[3.3] 言語: C++
サブ関数でa[0]=0 a[1]=1 a[2]=2 と値を入れてメイン関数でこのサブ関数を呼び出してポインタを使ってint a[3]にサブ関数で定めた値を
入れよ。
ポインタは全然わかりません!お願いします><
0875デフォルトの名無しさん
2006/12/12(火) 15:55:27void sub(int *p)
{
int i;
for(i=0; i<3; i++) *(p+i) = i;
}
int main(void)
{
int a[3];
sub(a);
return 0;
}
0876デフォルトの名無しさん
2006/12/12(火) 15:56:11#include <iostream>
using namespace std;
int* sub()
{
int a[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
return a;
}
int main()
{
int a[3];
int* r;
r = sub();
a[0] = r[0];
a[1] = r[1];
a[2] = r[2];
cout << a[0] << endl;
cout << a[1] << endl;
cout << a[2] << endl;
return 0;
}
0877876
2006/12/12(火) 15:57:46問題文からは、こう読めるんだが。
0878869
2006/12/12(火) 16:03:18じゃ関数にした。こっそりバグも埋まってたし...
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3165.txt
>>873
>>867 だと全バイト反転になるけど『単語を切り出し』が気になったんだよね。
abc def ghq -> qhg fed cba は題意と異なる様な気が...
もっとも俺の
cba
fed
qhg
も題意と異なるかな?
それと string.h 使って良いの?
0879デフォルトの名無しさん
2006/12/12(火) 16:08:59いやだから君のプログラムと同じ動作になるよ。
scanf()の仕様、知らんでしょ。
0880デフォルトの名無しさん
2006/12/12(火) 16:18:42[2] 問題文(含コード&リンク):まず,整数型変数a,b,c を定義し,それぞれに10,100,1000 を代入する.次に,整数型ポイ
ンタ変数p を定義し,c のアドレスを代入する.p の値をp+0 からp+9 まで変化させて,*p の値
を画面表示するプログラムを作成しなさい.また,実行結果がなぜそのようになるかを考察しな
さい.
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C)
分かる方、よろしくお願いします。
わざわざ動かないコードを書かせる意味が分からん。
この糞課題を出したクズ教官の名前を晒せ。
0882デフォルトの名無しさん
2006/12/12(火) 16:26:57で、ですね( ;・∀・)もう一ついいですか?2次配列つかった場合ってどうやればいいですか?
Get8の中でd[8]のなかにdata[200][200]の指定のデータを入れたいんですが、どうすれば。。。
void Get8(int i, int j, int *data, int *d)
{
*(d)=data[i][j+1];
*(d+1)=data[i-1][j+1];
*(d+2)=data[i-1][j];
*(d+3)=data[i-1][j-1];
*(d+4)=data[i][j-1];
*(d+5)=data[i+1][j-1];
*(d+6)=data[i+1][j];
*(d+7)=data[i+1][j+1];
}
void main()
{
int d[8];
Get8(i,j,data,d);
}
こんな感じじゃじゃダメっした!上のやつは簡単に書いたやつでdata[200][200]は他のとこで値が入れてあります。iとjはforの中で使ってます。
Get8の中だけ書き直していただけると助かります><お願いします神様!
0883デフォルトの名無しさん
2006/12/12(火) 16:29:17変な値にはなるが、動かなくはないでしょ。
でも、何故cからなんだろ?aからなら考察のしがいもあるのだが。
0884878
2006/12/12(火) 16:30:28知らんかった。有難う。scanf なんて使った事ないからなぁ...
とはいえ先に書いた様に若干、仕様に疑問が残ったので書き直した。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3166.txt
問題文の求める動作はこれではないかと...
0885デフォルトの名無しさん
2006/12/12(火) 16:31:45アドレスが逆から振られる処理系なんじゃない?
0886デフォルトの名無しさん
2006/12/12(火) 16:39:420887デフォルトの名無しさん
2006/12/12(火) 16:45:02#include <stdio.h>
int main()
{
int a = 10,b = 100,c = 1000;
int i,*p = &c;
for(i = 0;i < 10;i++){
printf("*(p + %d) = %d\n",i,*(p + i));
}
return 0;
}
なにがやりたいのかはわからんけど
0888デフォルトの名無しさん
2006/12/12(火) 16:52:08solaris のスタックは後から定義した変数の方が低位アドレスだった気がする。
0889809
2006/12/12(火) 16:52:26とりあえず、学校で動作確認とかしたのですが、
void freeArea(char** ppArea)
{
int i;
for( i = 0; i < MAX_LINE; i++ )
if( ppArea[i] )
free( (void*)ppArea[i] );
free( (void*)ppArea );
}
のif( ppArea[i] )っていうのはミスでしょうか?
エラーは出なかったのですが、これだけだと意味をなさないですよね?
それと
free( (void*)ppArea[i] );
free( (void*)ppArea );
の部分は
free( ppArea[i] );
free( ppArea );
とすると、ちゃんと解放されないですか?
voidが付いてる理由が分からないので外してみたのですが。
それと、提出期限が明後日の朝11時00分までになりました。
0890デフォルトの名無しさん
2006/12/12(火) 16:57:11>>796じゃないが。
>のif( ppArea[i] )っていうのはミスでしょうか?
これはif( ppArea[i] != NULL)と同義。
>とすると、ちゃんと解放されないですか?
される。(void *)がついているのはおそらく暗黙の型変換を嫌ったからだろう。
0891デフォルトの名無しさん
2006/12/12(火) 17:22:43while(1){...}
とかもよく使われる。
0は偽、0以外は真の意味がある。
0892デフォルトの名無しさん
2006/12/12(火) 17:44:40スタック関係ないと思うが。
0893デフォルトの名無しさん
2006/12/12(火) 17:46:35スタックじゃなくヒープ?
いや、スタックでしょ。
0894デフォルトの名無しさん
2006/12/12(火) 17:48:09クラックについての解説が行われるんだよ
たぶん
0895デフォルトの名無しさん
2006/12/12(火) 17:55:08cでは自動変数はスタックに確保される。
引数は、後ろから順にスタックに積まれる。
定義の際、int a,b,c;とした場合、後ろからスタックに積まれるためアドレスはcbaの順になる。
int a;
int b;
int c;
とした場合は、たぶんabcの順に積まれる。
0896デフォルトの名無しさん
2006/12/12(火) 18:13:020897853
2006/12/12(火) 18:20:02867さんのみたいなのを求めてました。題意分かりにくくてすみません。
0898デフォルトの名無しさん
2006/12/12(火) 18:27:44恥ずかしくて出て来られなくなるのもわかるが。
まぁ面白かったからいいけど。
0899デフォルトの名無しさん
2006/12/12(火) 19:38:33どれのこと言ってるの?
自動変数はスタックに積まれるでしょ。
可変長引数を持つ関数を呼び出した時、その関数が持つローカル変数と引数が必ず一定のアドレスだけ離れた形になるように、ローカル変数もスタックに後ろから積まれる。
0900デフォルトの名無しさん
2006/12/12(火) 19:47:460901900
2006/12/12(火) 19:49:500902デフォルトの名無しさん
2006/12/12(火) 19:51:54どこに?
0903π
2006/12/12(火) 19:53:05[2] 問題文(含コード&リンク):
#include <stdio.h>
#include <math.h>
int main(void)
{
int k,n=100;
double h,a=0,s,PAI,X,I,r=1;
h=(r-a)/n;
X=0;
for(k=1; k<=n; k++)
{
X+=sqrt(pow(r,2)-pow(h*k,2));
}
I=h*X;
PAI=4*I/pow(r,2);
printf("PAI=%lf。\n",PAI);
return 0;
}
[3] 環境
[3.1] OS: Windows
[3.2] borland
[3.3] 言語: C
[4] 期限: 今日中にお願い致します
[5] その他の制限: scanfをつかってnの数値を変えて実行できるようにしたい。
πの近似値を求めるプログラムです。nの値を大きくしていけばπの値により近づきます。
nの値をintの所で一々変えて入力して結果を出力するのではなく、
scanfを使ってプログラムを作成したいのですがうまくいきません。
説明不足かもしれませんがお願いいたします。
0904デフォルトの名無しさん
2006/12/12(火) 19:57:10自分が試した方法と、どううまくいかなかったのかを説明してくれ
0905π
2006/12/12(火) 20:07:47#include <math.h>
int main(void)
{
int k,n;
double h,a=0,s,PAI,X,I,r=1;
h=(r-a)/n;
X=0;
while(k<=n)
{
scanf("%d,&n");
X+=sqrt(pow(r,2)-pow(h*k,2));
}
I=h*X;
PAI=4*I/pow(r,2);
printf("PAI=%lf。\n",PAI);
return 0;
}
while文のなかにscanfを入れてみてやってみたのですが、結果がPAI=0.00000となりできませんでした。
for文のときは値を入れてもその後は反応がありませんでした。
0906デフォルトの名無しさん
2006/12/12(火) 20:12:14int k,n;
h=(r-a)/n; ←この段階でnは不定
nを使う前に読み込ませないと
変数宣言の後すぐにscanf
0907デフォルトの名無しさん
2006/12/12(火) 20:31:25>>790おねがいできませんか?
0908デフォルトの名無しさん
2006/12/12(火) 20:42:28せめて全部のソートアルゴリズムのコードがないと
規模がでかすぎて誰もやる人いないと思うぞ。
全部のソートを自前で書き起こす時点ですごい面倒。
0909デフォルトの名無しさん
2006/12/12(火) 20:43:53データをよこせ
まさか10万個のデータも作らせる気か?
0910デフォルトの名無しさん
2006/12/12(火) 20:47:26[2] 問題文(含コード&リンク):
sin(x)の値をマクローリン展開を利用して求めた式で計算するプログラムを作成せよ。
ここでは、ある項数n(ここでnはマクローリン展開後の式における項の数とする)に対して
0<=x<=6.28の範囲でxを変化させて計算を行うプログラムを作成すること。
また、nは1,2,3...20までそれぞれの場合について求める
参考:ttp://yosshy.sansu.org/maclaurin.htm
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 12/13 17:00まで
[5] その他の制限:特にありません
よろしくお願いします
0911デフォルトの名無しさん
2006/12/12(火) 20:55:5910万個のデータ渡されるのアレだなw
>>910
上のほうにあった気がする
0912デフォルトの名無しさん
2006/12/12(火) 20:56:26[2] 問題文(含コード&リンク):
0-255の範囲の乱数を20個生成して配列に格納し、配列中の指定範囲(開始
及び終端インデックスで指定)のみ大きい順に並び替え、当初の配列要素と
比較して出力するプログラムを作る。ただし、指定範囲内のみ並べ替えは
関数として用意し、引数にはポインタを利用すること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 12/13 7:00まで
[5] その他の制限:特にありません
よろしくお願いします
0913デフォルトの名無しさん
2006/12/12(火) 21:15:14[2] 問題文:50個の整数データを読み込み、それらを小さい順に出力する
cプログラムを作成せよ。バブル整列法は使ってはいけない。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみ
[4] 期限: 2006年12月23日12:00まで
よろしくお願いします。
0914デフォルトの名無しさん
2006/12/12(火) 21:19:39前スレにも書いた?
0915796
2006/12/12(火) 21:22:36free( (void*)p ) とか memset( (void*)p, 0x00, size ) とかの (void*) は付けなくても問題は無い。
しかし、warning を生じる環境も過去に存在したので脊髄反射的に付ける様になった。
言わば職業病。
0916デフォルトの名無しさん
2006/12/12(火) 21:25:170917888
2006/12/12(火) 21:31:34自動変数は定義した順にスタックへ積まれるが、アドレス低位→高位に積まれるか
アドレス高位→低位に積まれるかは環境依存。
solaris の場合は後者だったと記憶する。
linux では...バッファオーバーランのバグ追った事が無いので知らん。
引数が後ろから積まれるとは限らない。
Win3.1 の PASCAL 型関数の場合、前から積まれてた。
0918デフォルトの名無しさん
2006/12/12(火) 21:32:39#include <stdio.h>
#include <stdlib.h>
#define MAX 100000
int main(){
int i; FILE *fp;
fp = fopen("data.txt","w");
srand(time(NULL));
for(i = 0;i < MAX;i++) fprintf(fp,"%d\n",rand());
return 0;}
やる気があるならこれでも使ってくれ
俺はソート全部はやる気にならんな
0919787
2006/12/12(火) 21:43:49昼間はお世話になりました。おかげで課題も間に合わせることが出来ました。
これから教えてもらった答えをよみなおしてみます。
ありがとうございました
0920デフォルトの名無しさん
2006/12/12(火) 21:46:23がんばってね。
0921デフォルトの名無しさん
2006/12/12(火) 22:02:54start,endの範囲チェックは自分で足してね
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void f(int *a, int start, int end)
{
int i, j, l, temp, *p;
l = end - start + 1;
p = a + start;
for(i=0; i<l-2; i++) {
for(j=l-1; j>i; j--) {
if(p[j] > p[j-1]) {
temp = p[j];
p[j] = p[j-1];
p[j-1] = temp;
}}}}
int main(void){
int i, start, end,a[20];
srand(time(NULL));
scanf("%d", &start);
scanf("%d", &end);
for(i=0; i<20; i++) a[i] = rand() % 256;
for(i=0; i<20; i++) printf("%3d ", a[i]); putchar('\n');
f(a, start, end);
for(i=0; i<20; i++) printf("%3d ", a[i]); putchar('\n');
return 0;
}
0923デフォルトの名無しさん
2006/12/12(火) 23:40:570924889
2006/12/12(火) 23:44:38if( ppArea[i] )とif( ppArea[i] != NULL)が同義だったのですか、初めて
知りました。
(void *)は付けなくても大丈夫なのですね。分かりました。
あと、
char** allocArea(void)
{
char** ppRet;
int i;
size_t tSize;
tSize = sizeof( char* ) * MAX_LINE;
ppRet = (char**)malloc( tSize );
if( ! ppRet )
return NULL;
memset( (void*)ppRet, 0x00, tSize );
return ppRet;
}
の意味が全く解らない(他のは、意味は解りました。)ので、この関数を
外してコンパイルと実行をしてみたのですが、コンパイルも通って実行も
、まともに出来ました。
しかし、実行して辞書順に並び替わった後に「セグメントエラー」と表示さ
れます。
これを入れると関数が一つ多くなる上に意味が全く解らなくてコメントや
説明が書けないので何とかしたいのですが何か良い方法は無いでしょうか?
例えば、メイン関数の中で1、2行で簡単な表現で表せたり。
0925デフォルトの名無しさん
2006/12/12(火) 23:46:250926デフォルトの名無しさん
2006/12/12(火) 23:56:47Insertion sortでめげそう
10万個のソートってこんなに時間かかるのね
0927デフォルトの名無しさん
2006/12/13(水) 00:01:22char** allocArea(void)
{
char** ppRet;
int i;
size_t tSize;
tSize = sizeof( char* ) * MAX_LINE;//割り当てるメモリのサイズを計算
ppRet = (char**)malloc( tSize );//メモリを割り当てる
if( ! ppRet )
return NULL;//割り当てに失敗したらNULLを返す
memset( (void*)ppRet, 0x00, tSize );//割り当てられた領域を0で埋める
return ppRet;//割り当てられた領域のポインタを返す
}
Cあんまり詳しくないけどこういう事?
0928デフォルトの名無しさん
2006/12/13(水) 00:04:44[1] 授業単元:計算機演習2
[2] 問題文(含コード&リンク):上記のfor文で数を読み取る部分をscanfの型に直す。
今のままだと、getcharで取り込んだ数が不具合を起こして、入力した数が正常に表示されません。
このプログラムでは一回試行する毎にランダムの数が書き変わってしまいます。
数を言い当ててComplete!が表示されるまで、設定された数が書き変わらないようにしてください。
このプログラムは数字4桁の数当てゲームですが、ランダムに選択される数字は全て異なっていなければなりません。
今の状態だと数字が重なる場合があるのでそこを補正してください。
[3] 環境
[3.1] OS: Linux
[3.2] gcc -o
[3.3] 言語: C
[4] 期限: 2006.12.15
0929924
2006/12/13(水) 00:16:00レスありがとうございます。
この関数の一つ一つの行の意味が解らないっていうのもありますし、この
関数自体が何をするためにあるのかも解りません。
それと、問題に「6つの関数から構成する」って書いてあったので、これ
以外の関数だけで十分(説明しにくいのですが、本当は必要ないのにこれを
付け加えることによってプログラムとしてより優れた物にするような物)な
のかと思ってしまって。
0930デフォルトの名無しさん
2006/12/13(水) 00:23:38{
//---- 宣言
//---- 初期化
乱数の初期化
while ( 1 ) {
//---- 入力
算法の選択、長さの入力
switch ( 処理 ) {
case 終了: { return 0; }
case 入力: { 乱列入力; }
case 生成: { 乱列生成; 乱列出力; }
}
//---- 計算
時間計測の開始
整列算法の実行
時間計測の終了
//---- 出力
時間と回数の出力
}
っていう問題ですどう手を着けていいのやら
おねがいします
0931デフォルトの名無しさん
2006/12/13(水) 00:26:43いきなり何を言ってるんだお前は
0932デフォルトの名無しさん
2006/12/13(水) 00:31:18[2] 問題文:0 から n-1 まで長さ n ; n≧1 のシャッフル列を生成する処理 shuffle(arr, n) を再帰的に定義する。以下のような漸化式で考える。
事前処理 arr[n-1] に n-1 を代入
n=1 のとき そのまま返却
n≧2 のとき 再帰呼出 長さ n-1 のシャッフル列の生成 shuffle(arr, n-1)
事後処理 n 未満の整数乱数 r を発生
位置 r と n-1 の要素を交換
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: Cのみ
[4] 期限: 2006年12月13日12:00まで
よろしくお願いします。
0933デフォルトの名無しさん
2006/12/13(水) 00:37:28サンクス
わからんから助けを求めにきたが先行者がいたか・・・
あいつの説明わかりにくいもんなぁ
0934デフォルトの名無しさん
2006/12/13(水) 00:42:41簡単に言えばメモリ領域を確保して 0 で埋める作業をしている
これしないと国有地でバーベキューするみたいな感じだぞ(意味不明?)
ちゃんと自分の敷地くださいと言って国有地を分けてもらわないとバーベキューしたときに怒られます
0935929
2006/12/13(水) 01:01:29下さってるので理解する方向で行こうと思います。
>>934
レスありがとうございます。つまりmallocの奴と同じメモリの動的確保
ってことですか?
でも、それだとしたら、
ファイルを読み込む関数
int readFile(char* sPath,char** ppArea )
{
int iLine = 0;
FILE* fp;
char sBuf[ MAX_LEN + 1 ];
fp = fopen( sPath, "rt" );
while( iLine < MAX_LINE && fgets( sBuf, MAX_LEN, fp ) ) {
ppArea[iLine] = (char*)malloc( strlen( sBuf ) + 1 );
if( ! ppArea[iLine] )
return -1;
strcpy( ppArea[iLine], sBuf );
iLine++;
}
fclose( fp );
return iLine;
}
の
ppArea[iLine] = (char*)malloc( strlen( sBuf ) + 1 );
でメモリの動的確保は行われていると思うのですが…。
0936デフォルトの名無しさん
2006/12/13(水) 01:06:37[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=3170
[3] 環境
[3.1] OS:windows
[3.3] 言語: c++
[4]明日
0937796だっけ?
2006/12/13(水) 01:14:49>>927 の解説でOK。
もし、allocArea() を使いたくない場合は main() の ppArea を配列で定義するんだな。
memset() も習ってないなら
char** ppArea;
↓
int i;
char* ppArea[MAX_LINE];
for( i = 0; i < MAX_LINE; i++ )
ppArea[i] = 0x00;
これで ppArea の確保と初期化ができたので allocArea() は不要となる。
この場合、 freeArea() 内で free( (void*)ppArea ); を行うとセグメンテーションフォルトが生じるので削除する。
だけどよー、スタックに40Kbyteも積む下品なコード書きたくねぇよー。
0938デフォルトの名無しさん
2006/12/13(水) 01:16:32static char *ppArea[MAX_LINE];
でおk。
memset()もいらなくなる。
0939デフォルトの名無しさん
2006/12/13(水) 01:18:43何個か書いていただいたのですが
コンパイルはできるものの題意を満たすように
実行できません 間違いとか分からないんで
教えてください
0940デフォルトの名無しさん
2006/12/13(水) 01:19:04// forkして親子に分かれる
// ...
// 親プロセスにて子の終了待ち
while( wait( (int *)0 ) != pid);
ってのがあったんですが
waitの引数は子の状態情報を記憶しておくポインタを与えるもの
と思ってたんですが
(int *)0
↑0へのポインタを渡すってどういうことでしょう?
またwhileでwaitするのって意味あるんですか?
wait関数が、子プロセスが終了するまで待つのなら
いらないと思うのですが
0941デフォルトの名無しさん
2006/12/13(水) 01:20:00ppRet = (char**)malloc( tSize );
//データを入れる領域を確保してそのポインタを保存
ppArea[iLine] = (char*)malloc( strlen( sBuf ) + 1 );
違い分かる?
0942デフォルトの名無しさん
2006/12/13(水) 01:26:31man 2 wait
wait()にNULLを渡した場合は、「終了ステータスは別に要りませんよ」という
意味になり、wait()は単に子プロセスの終了を待つだけの動作をする。
while()でループしているのは、割り込みなどによってwait()が異常終了した
場合などを考慮しているのだろう。
が、今時wait()を使うこと自体が、本当は良いスタイルではないな。
せめてwaitpid()を使うべき。
0943796だっけ?
2006/12/13(水) 01:27:39熱心だから解説しちゃる。
readFile() での malloc() は読み込んだ一行を保存するための領域だ。
よって (char*) で確保する。
んだども、確保した領域のアドレスは何処に保存する?
allocArea() で確保してる (char**) x 10000 は 10000 行の (char*) を保存する為の領域だ。
つまり
ppArea[0][1][2][3][4]...[9999] のそれぞれに readFile() で確保したアドレスが格納される訳だ。
行数が10000 に満たない場合、ppArea の格納されなかった場所には初期値の NULL が入ってる。
よって、開放する時に
if( ppArea[i] ) free( (void*)ppArea[i] );
ちゅう判定が必要になる訳。
.
説明下手でスマソ。
0944デフォルトの名無しさん
2006/12/13(水) 01:29:29動的に確保する必要はないんだけどな。
static配列で十分。
0945デフォルトの名無しさん
2006/12/13(水) 01:30:06[2] ファイルを読み込み、英字のみか、先頭が英字で二文字目以降が英字または数字である文字列を抽出し、
文字列の長さが長い順に並べ、その文字列の頻度と共に表示するプログラムを作成したい。
但し、文字列の長さが同じものに関しての順序は任意で良い。以下の設問にしたがって回答しなさい。
[3] 環境
[3.1] Windows XP
[3.3] CかC++かJava
[4] 期限: 2006年12月20日20:00まで
[5] その他の制限: Windows の API は使用しないで作って下さい。
0946デフォルトの名無しさん
2006/12/13(水) 01:31:16入力
#include <stdio.h>
#include <ctype.h>
int main(void){
int c0;
char c1;
b='\0';
while((c0=getchar())!=EOF){
if((!isalnum(c1))&&isalnum(c0)){
printf("\n");
}
if(isalnum(c0)){
printf("%c",c0);
}
c1=c0;
}
return 0;
}
0947デフォルトの名無しさん
2006/12/13(水) 01:32:03getchar:1
include:2
isalnum:3
printf:2
return:1
stdio:1
while:1
ctype:1
char:1
main:1
void:1
EOF:1
int:2
if:2
c1:4
c0:6
h:2
n:1
c:1
>>945-947 よろしくお願いします
0949デフォルトの名無しさん
2006/12/13(水) 01:35:290950デフォルトの名無しさん
2006/12/13(水) 01:39:06むしろ、厳密にはmemsetのほうがまずいような。
0951デフォルトの名無しさん
2006/12/13(水) 01:40:21ありがとうございます
(int *)0 でNULLポインタになるんですね
初めて知りました
0952935
2006/12/13(水) 01:40:29レスありがとうございます。
>>941
>>943
レスありがとうございます。
メモリの動的確保って言ってもデータを入れるためのメモリとアドレスを
入れるためのメモリの違いってことだったのですか。
詳しい解説ありがとうございました。
0953デフォルトの名無しさん
2006/12/13(水) 01:41:37staticなオブジェクトが0初期化されるのは立派にC言語の仕様であり
保障されているから心配無用。
どーしてもautoにしたいんなら
char *ppArea[MAX_LINE] = { 0 } ;
でよい。
0954デフォルトの名無しさん
2006/12/13(水) 01:43:420955デフォルトの名無しさん
2006/12/13(水) 01:48:090956796だっけ?
2006/12/13(水) 01:48:18でも多数決で 0x00 は環境依存じゃないということで...
第一 static で取れば下品なコードじゃなくなるな。
>>952
ちゅことで >>938 でOK。だけど freeArea() の一行削除は忘れるな。
>>950
ポインタ変数を全て 0 で埋めてそれが NULL にならないと言うことは...NULL って何?
0957デフォルトの名無しさん
2006/12/13(水) 01:55:000958デフォルトの名無しさん
2006/12/13(水) 02:02:42そりゃ文字列の終端定義。
0960デフォルトの名無しさん
2006/12/13(水) 02:05:34(void *)0はNULLだけど、NULLが全ビット0とは限らない。
0961デフォルトの名無しさん
2006/12/13(水) 02:08:120962デフォルトの名無しさん
2006/12/13(水) 02:08:30#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
class symdata
{
public:
string name;
int cnt;
int len;
symdata() { cnt = 0; len = 0; }
symdata(const string& s, int n)
{ name = s; cnt = n; len = s.length(); }
};
bool cmp(symdata *a, symdata *b)
{
return (a->len > b->len);
}
0963デフォルトの名無しさん
2006/12/13(水) 02:09:43main()
{
string s;
map<string, symdata> table;
vector<symdata*> v;
while (cin >> s) {
if (table.find(s) == table.end()) {
table[s] = symdata(s, 1);
v.push_back(&table[s]);
} else {
++table[s].cnt;
}
}
sort(v.begin(), v.end(), cmp);
for (vector<symdata*>::iterator i = v.begin(); i != v.end(); ++i)
cout << (*i)->name << ":" << (*i)->cnt << endl;
}
0964デフォルトの名無しさん
2006/12/13(水) 02:10:460965デフォルトの名無しさん
2006/12/13(水) 02:12:33次スレ
0966デフォルトの名無しさん
2006/12/13(水) 02:13:40教えていて気持ちがいいね。
熱心だしすぐ理解してくれるし。
でも毎回名前の番号が変わるからちょっと認識しにくかった。
まぁどうでもいいけど。
0967950じゃないが
2006/12/13(水) 02:15:270をポインタに変換したらNULLに変換されるし
(NULLの内部表現が0でない環境ではコンパイラが変換コードを生成する必要がある)
NULL==0は NULL==(void *)0 と解釈されて1を返すけど
memsetはvoid *sの引数を*(unsigned char *)s=0見たいな感じで埋められるから
そこをchar *の値として参照してもNULLじゃないかもしれない
0968デフォルトの名無しさん
2006/12/13(水) 02:15:290969デフォルトの名無しさん
2006/12/13(水) 02:22:43具体的な処理系は知らない。規格の話。
0970デフォルトの名無しさん
2006/12/13(水) 02:26:32memset()はNGかな。
まぁ、NULLのビット表現が0でない処理系なんて、intが16bitだったり
文字セットがEBCDICだったりするような処理系より全然レアっつか
俺は見たことないし、ぶっちゃけ気にする必要はないけどな。
んな処理系で動かしたら、多分他の部分で問題山積みだぞw
0971デフォルトの名無しさん
2006/12/13(水) 02:26:57signed bit の話なら立ってれば補数なので 0 なら立たないよ。
いや、俺が君の話を理解できないだけなんだけど。
まぁ疑問なら試せば良いと思う。
0972デフォルトの名無しさん
2006/12/13(水) 02:29:57>>967が言ってるのは全然そういう話ではない。
memset()は「ビット的に」ゼロにしてしまう。
だから、NULLが「ビット的に」ゼロで無い実装では、それを
「ポインタとして」解釈するとnull pointerではないということになる。
一方、ポインタへのゼロの代入は、たとえNULLが「ビット的に」ゼロでない
実装でも、いつでもnull pointerとして扱われる。
そうした実装の場合、staticなpointerオブジェクトに対しては、
null pointerをあらわすビット値が、おそらくCランタイムの
スタートアップコードによって書き込まれるはずだ。
規格に準拠するならば。
0973デフォルトの名無しさん
2006/12/13(水) 02:44:08けど、不毛だよ。
>>956 で俺が書いた
> ポインタ変数を全て 0 で埋めてそれが NULL にならないと言うことは...NULL って何?
は『ビット的にゼロじゃないNULL』なんか無いだろって事。
君らは『ビット的に非ゼロなNULL』が存在しても良いって前提で話をしてるでしょ。
これは原理主義者と現実主義者の議論でしかないから....
俺はずっと memset() でポインタ初期化を続けるよ、まぁこれも memset() が個別代入より
早いっていう原理主義なんだけどね。
0974デフォルトの名無しさん
2006/12/13(水) 02:48:17単に「規格的はどうか」という議論をしているのに「俺様脳内方針」を
ブチ挙げる君も、随分空気読めてない人だな。
勝手にすれば?としか。
ま、実際問題としてはそれでOKであることは否定しないだろ、誰も。
0975デフォルトの名無しさん
2006/12/13(水) 02:54:37宿題なんだから提出して採点者の前で動けばいいのだ。
じゃだめ?
0976デフォルトの名無しさん
2006/12/13(水) 02:55:410977デフォルトの名無しさん
2006/12/13(水) 02:58:230978デフォルトの名無しさん
2006/12/13(水) 02:58:31サイズ固定の配列をわざわざmalloc()で確保するわ
null pointerに関する規格上の定義も知らないわ
しまいには俺は何がなんでもmemset()で初期化するんだとか逆切れか
なんか面白いもん見せてもらったわw
0979デフォルトの名無しさん
2006/12/13(水) 02:58:56俺が書いたのは話が噛み合わない理由が
・俺は現実的な話をしてる
・俺以外は規格上の話をしてる
事を認めた上で不毛と書いただろ。
噛み合わない話を続けた非は認めるけどな。
0980デフォルトの名無しさん
2006/12/13(水) 03:00:54「現実的な話」かwwwww
0982デフォルトの名無しさん
2006/12/13(水) 03:45:13s州大学だよな?いっそpdfうpしてくれたらもっと早くできたのに ゚・(ノД`)
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3174.txt
・・・レポートは自分で書けよ?
0983982
2006/12/13(水) 03:48:180984982
2006/12/13(水) 03:55:50連投スマソ
0985デフォルトの名無しさん
2006/12/13(水) 03:59:52お前いいやつだな
0986デフォルトの名無しさん
2006/12/13(水) 04:05:00どうせWikiに各種ソートのプログラム置かなきゃいけないからついでだと思って。
地味に面倒だったけどやり始めたら止まらなくなった。
あとグローバル変数の宣言がおかしいところを発見したけど修正は自分でやってくれ
というかなんでこれコンパイルエラーにならないんだろ・・・
0987デフォルトの名無しさん
2006/12/13(水) 06:21:35void shuffle(int *arr, int n)
{
int r, t;
arr[n-1] = n - 1;
if(n==1) return;
else {
shuffle(arr, n-1);
r = rand() % n;
t = arr[n-1];
arr[n-1] = arr[r];
arr[r] = t;
}
}
0988デフォルトの名無しさん
2006/12/13(水) 07:20:24[2] 問題文:
BCDコードに変換する関数を作成しなさい。
IN :ASCIIコード(NULLストップ)
OUT:BCDコード、桁数
[3] 環境
[3.1] OS: (Windows)
[3.2] bcc
[3.3] C言語
[4] 期限: 無期限
[5] その他の制限:
宜しくお願い致します。
0989デフォルトの名無しさん
2006/12/13(水) 08:35:14BCDコードなんだから入力される文字列は0〜9で考えていいんだよな?
あと変換されたBCDコードはどうやって出力すりゃいいんだ?
�@printfで出力?(画面に変換結果表示するだけ)
�A戻り値をchar*にして返す?(受け取った方は不要になったらfreeする必要がある)
�Bそれとも既に確保されてるメモリのポインタを受け取って
そっちに出力?(確保領域が溢れる場合が有る)
とりあえず簡単な�@で書いとく。
#define B(c,n) (((c-0x30)>>n)&0x01)
void strtobcd(char* str)
{
printf("before:\n%s\n",str);
int i=0;
printf("after :\n");
while(str[i]){
if(str[i]<'0' || str[i]>'9'){printf("decode error\n");break;}
printf("%d%d%d%d ",B(str[i],3),B(str[i],2),B(str[i],1),B(str[i],0));
i++;
}
}
0990デフォルトの名無しさん
2006/12/13(水) 09:46:40上2つのテキスト、内容まったく同じじゃね?
0991長岡
2006/12/13(水) 10:16:17お願いします
0992デフォルトの名無しさん
2006/12/13(水) 10:18:35>>1を読んでテンプレ守って書き直してね。
長岡係数って何?
その辺の説明も書こうね。
0993長岡
2006/12/13(水) 10:23:540994デフォルトの名無しさん
2006/12/13(水) 10:25:20ここはBASICのスレじゃねえぞ
0995デフォルトの名無しさん
2006/12/13(水) 10:25:470996デフォルトの名無しさん
2006/12/13(水) 10:27:05Perlの実装ならここにあったよ。
数値積分してるみたいだけど。
http://www-lab.ee.uec.ac.jp/vlab/bridge/nagaoka/integral.html
0997デフォルトの名無しさん
2006/12/13(水) 10:27:37氏ね
1000デフォルトの名無しさん
2006/12/13(水) 10:29:2010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。