C/C++の宿題を片付けます 76代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/06(月) 09:04:35【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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++の宿題を片付けます 75代目
http://pc8.2ch.net/test/read.cgi/tech/1161257941/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0369デフォルトの名無しさん
2006/11/11(土) 20:20:54そうです。
>いちいち読み込むためのその任意の数字が書かれたファイルを作るのがめんどう。
すみません、気が利きませんでした…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2922.lzh
講義での用意がなかったため適当な物ですが。
>あと、前回が配列だったので、って前回ってどれだよ。
>>368さんのご推察通り、前回の講義です。
0370デフォルトの名無しさん
2006/11/11(土) 21:01:53#include <stdio.h>
#include <stdlib.h>
int main(int argc , char *argv[]) {
FILE *f1,*f2,*fs;
int c;
if (argc < 4) return 1;
if ((f1=fopen(argv[1],"r"))==NULL) exit(1);
if ((f2=fopen(argv[2],"r"))==NULL) exit(1);
if ((fs=fopen(argv[3],"w"))==NULL) exit(1);
while (1) {
if ((c=fgetc(f1))==EOF) break;
fprintf(fs,"%c",c);
}
while (1) {
if ((c=fgetc(f2))==EOF) break;
fprintf(fs,"%c",c);
}
printf("\(^o^)/オワタ\n");
fclose(f1);
fclose(f2);
fclose(fs);
return 0;
}
中学生にも出来た
0371デフォルトの名無しさん
2006/11/11(土) 21:05:432時間だったんだよ〜二日じゃないよ〜><
0372デフォルトの名無しさん
2006/11/11(土) 21:50:57if ((c=fgetc(f1))==EOF) break;
fprintf(fs,"%c",c);
}
while (1) {
if ((c=fgetc(f2))==EOF) break;
fprintf(fs,"%c",c);
}
ここらへんがもにょるな
不思議なプログラムだ
0373349
2006/11/11(土) 22:05:30中身みたら00〜99までの数字が順番に書いてるだけじゃん
そうじゃなくて、少数・負数含むんじゃないの?
それも任意だから、順番じゃないだろうし
指数表現した小数とかも含むのかとかそういう意味で
そういうファイルを作ってって言ったの
0374デフォルトの名無しさん
2006/11/11(土) 22:35:35#include <float.h>
int main(void){
FILE *f=fopen("file.txt","r");
if (!f) goto RET;
char cp_line[1024],*p,*b;
double d,d_min=DBL_MAX,d_max=DBL_MIN;
for(;;){
if (!fgets(cp_line,1024,f)) break;
for(p=cp_line;;){
d=strtod(b=p,&p);
if (p!=b){
if (d<d_min)
d_min=d;
if (d>d_max)
d_max=d;
}
if (!*(p++)) break;
}
}
printf("最小値: %f\n",d_min);printf("最大値: %f\n",d_max);fclose(f);
RET:return 0;
}
こんなんでいい?
0375デフォルトの名無しさん
2006/11/11(土) 23:22:15あ〜らら。期限を
>[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
にしたがって書かないからだよ。
テンプレはただ漫然とそこにあるんじゃなくて、過去に発生した誤解などを元に
再び同じ過ちを繰り返さないように調整してあるんだから。
0376デフォルトの名無しさん
2006/11/12(日) 00:19:03Hello World!
Hello World!
Hello World!
Goodbye World!
Hello World!
Hello World!
Hello World!
Goodbye World!
Hello World!
Hello World!
のように出力するプログラムを、以下の�@〜�Cの各条件で実現せよ。
�@forとifを用いた方法
但し、出力する行数が増えても同じパターンでの出力が可能であるようにせよ。
すなわち、ベタにifで4行目を判定してGoodbye World!にしてはならない。
�Aforとswitch-caseを用いた方法
但し、breakは一度しか使ってはならない。
すなわち、default節を有効に活用せよという事である。
これについても、行数が増えても対応可能なアルゴリズムを考えよ。
�Bwhileとifを用いた方法
注意は�@と同様
�Cwhileとswitch-caseを用いた方法
注意は�Aと同様
[3] 環境 [3.1] WindowsXP [3.2] BCC [3.3] C
[4] 無期限 早めがいいです
[5] 繰り返し文までです
0377デフォルトの名無しさん
2006/11/12(日) 00:39:28意図がいまいちわからんのだがこうかな?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2923.txt
0378デフォルトの名無しさん
2006/11/12(日) 00:52:37サンクスです! 頭がすっきりしました
0379349
2006/11/12(日) 01:29:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2924.txt
一応ランダムな数字の10行10列のファイルを作成し、読み取り最大値最小値を表示させる
ようにしたのだけど、どうも、数値は読み込めてるが、表示する値が最大値最小値じゃないようで
ソートの時か、別問題か、わかんないんで他の人にパスします。
0380358
2006/11/12(日) 02:57:01対称形は、
・元の形の90〜270度回転の3つ
・元の形の反転の0〜360度回転の4つ
のトータル7つではないかと思ったのですが違うのでしょうか。
追加で質問するようになりますが、もう1つが何か教えていただけたら助かります。
ご指摘の通り、for(y=0;y<8;++y)は足りてないですね。
ただ、実行はできているのがフシギです。
compare()は同一かどうかだけの判断にしました。
if文の記述を直す(">"→"==")と、うまく実行できるようになりました。
最後になりましたが、
>>359=360さん、>>361さん、>>364=366さん、>>365さん、ありがとうございました。
0381デフォルトの名無しさん
2006/11/12(日) 03:26:40[2] 問題文(含コード&リンク):
以下の2つをそれぞれプログラムにしてコンパイル・実行させる。
エラーが出なくなったら、1つにまとめてファイル名:1107.txt、レポート第5回送付
1.keisan.c
変数 x と y を用い、簡単な計算をして結果を表示させるプログラム
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: Boland C 5.5.1
[3.3] 言語: C
[4] 期限: 本日(正午12:00)
[5] その他の制限: ほんとの基礎の基礎です。初めて2回目くらいです。
お願いします。
0382381
2006/11/12(日) 03:28:11問題文に以下二つってありますけど、1つなんで気にしないでください。
あと、小数の計算もできるようにお願いします。
0383デフォルトの名無しさん
2006/11/12(日) 03:48:23ゴトゥは使わない方がいいと聞いているのですがいいんですか?
わたしは>363じゃないですけど
0384デフォルトの名無しさん
2006/11/12(日) 04:02:27gotoは使ってもいいけど、奇麗な構造をブチ壊すような使い方は余り好まれない
ブチ壊した例)
※ブロック記号の"{"と"}"はCのブロックステートメントを意味しているわけじゃないです
概念的なくくりだとおもてください
{ ...A... there ... goto here }
{ ...B... goto there
{ ...C... here ... }
}
こんな風になってると、"{"と"}"の構造をブチ壊した構造に出来るので好まれない
>>374はオレなら
int main(..){
if(!〜) return 1;
〜K〜
}
とかにするんじゃないかな
(仮にKが30行くらいのコードだと考えれば、この方法なら可読性を維持できる)
0385デフォルトの名無しさん
2006/11/12(日) 05:22:07簡単な計算ってなんだろ・・・四則演算?
基礎の基礎って言ってるからプログラム中で変数決めていいのかな
#include <stdio.h>
int main(void)
{
int x,y;
x = 10;
y = 10; //x,yは任意
printf("%d",x+y); //上から順に加減乗除
printf("%d",x-y);
printf("%d",x*y);
printf("%d",x/y);
return 0;
}
0386385
2006/11/12(日) 05:25:15宣言部分の int ⇒ double
printfの%dを%f
0387デフォルトの名無しさん
2006/11/12(日) 07:01:20[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2926.txt
このプログラムでは、コンピュ−タがマークを置く位置を乱数で生成している。
三目並べの最善手のアルゴリズムを求めなさい。
また、Computer関数を修正しコンピュ−タが最善手を打つようにプログラムを改良しなさい。
なお、三目並べでは、双方が最善手を打つと引き分けとなる。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C
[4] 期限:2006年11月13日01:00まで
[5] その他の制限:C言語勉強して1年くらいの人が書く感じでお願いします。
この三目並べの最善手がわからなくて、単純に相手が置いた隣とかではだめでした。
どうやったら最善手が求められるのかもお願いします。
0388デフォルトの名無しさん
2006/11/12(日) 07:17:520390デフォルトの名無しさん
2006/11/12(日) 08:30:57これでも十分最善手だとおも
int i,ret,th[2]={turn,human};
for(i=0;i<sizeof(th);i++){
for(*height=0;*height<MAX_HEIGHT;++*height){
for(*width=0;*width<MAX_WIDTH;++*width){
if(board[*width][*height]==EMPTY){
board[*width][*height]=th[i];
ret=IsComplete();
board[*width][*height]=EMPTY;
if(ret)return;
}
}
}
}
if(board[*width=1][*height=1]==EMPTY)return;
for(*height=0;*height<MAX_HEIGHT;++*height){
for(*width=0;*width<MAX_WIDTH;++*width){
if(board[*width][*height]==EMPTY)return;
}
}
0391387
2006/11/12(日) 08:48:03先手で、(2,2),(3,3),(3.1),(1,3)と打つと勝ててしました。
何が悪いのか考えてみます。
あと、引き続き>>387をよろしくお願いします。
0392デフォルトの名無しさん
2006/11/12(日) 10:23:21この手の問題の解法って探索しかなくね?ということで、完全探索アルゴリズムを
実装してみた。まともにチェックしてないけど。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2927.c
0393デフォルトの名無しさん
2006/11/12(日) 10:42:15[2] 問題文
確率変数Xが確率密度関数
0( x < 0)
p(x)=(1/2)e^-x/2( x >=0)
に従うとしよう
サンプル0502sample.cを書き換えて,
サンプル数?
300
シード?
128478
と入力すると, 逆関数法を利用して p(x) に従う xを生成する(ただし, X=-1/alog(1-r)を使う).
これを300回生成し, 平均, 分散, 0.0と4.0の間を何個かのビンに分割して
ヒストグラムを出力するプログラムを作ろう. ビンの個数は, 8,80 など, 何種類か試そう.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: 2006年11月14日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2928.txt
を利用して作ってください
0394デフォルトの名無しさん
2006/11/12(日) 15:25:57○×
って問い合わせしても無視します。なぜでしょうか?
0395デフォルトの名無しさん
2006/11/12(日) 15:41:290396デフォルトの名無しさん
2006/11/12(日) 16:02:13[2] 問題文(含コード&リンク):
構造体に値を設定する。
struct numb {
int n;
double d;
}
の構造体で100の要素を持つ配列を用意する。
メンバー変数 n には 0, 1, 2, - - - 99 を設定し
メンバー変数 d には 0.99, 0.98, 0.97, - - - 0.0 を設定する。
できれば ポインターを使うこと。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 11月15日
[5] その他の制限:特になし
0397デフォルトの名無しさん
2006/11/12(日) 16:07:00int i;
struct numb hoge[100], *p;
for(i=0,p=hoge;i<100;i++){
p[i].n=i;
p[i].d=(99-i)/10; //アヤシイ
}
}
無理にポインタ使ってみた
最近Cやってない
0398デフォルトの名無しさん
2006/11/12(日) 17:18:11//アヤシイ
のところは先にキャストしとくか99.0とか10.0とかにするべきだろう
0399デフォルトの名無しさん
2006/11/12(日) 18:18:52[2] 問題文:1から12の数字を縦3,横4で表記させよ。
<例>1 4 7
2 5
3
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:明日の14時
[5] その他の制限:9月から受講しているのでなるべく簡単な関数でお願いします!
0400デフォルトの名無しさん
2006/11/12(日) 18:24:09main(){
printf("1 4 7 10\n2 5 8 11\n3 6 12");
}
0401デフォルトの名無しさん
2006/11/12(日) 18:24:36[2] 問題文(含コード&リンク):
二次方程式の3つの係数を入力させ、解を出力するプログラムを作れ(0=Ax^2+Bx+C)
実数解が存在しない場合は、「実数解が存在しません」と表示させる事。小数点は第二位まで。
(例1)係数を入力してください
A=3,B=5,C=1
解:x=-1.43,-0.23
(例2)係数を入力してください
A=2,B=3,C=4
解:実数解が存在しません
※係数に応じ、一次方程式になる場合、判別式Dの値によって
実数解が存在しないしない場合、重解となる場合、解が二つ存在する場合、があることに注意。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:11月13日の13:00まで
[5] その他の制限: 特になし
一週間も前から考えていたけれど、全然分かりません。どうかお願いいたします。
0402デフォルトの名無しさん
2006/11/12(日) 18:24:380403デフォルトの名無しさん
2006/11/12(日) 18:28:240404400
2006/11/12(日) 18:31:18冗談で書いたのにこれでいいのか
0405デフォルトの名無しさん
2006/11/12(日) 18:55:21すみません。他の方法があれば是非教えてください!!
0406デフォルトの名無しさん
2006/11/12(日) 18:58:14[2] 問題文(含コード&リンク):html.txtのHTML方式で書かれた文を
LaTEXに書き換え、latex.txtに書き換える。
html.txtの中身
<table>
<tr align="center"><td>Hello world</td><td align="right">Hello</td></tr>
</table>
[3] 環境
[3.1] OS:Linux
[3.2]コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006年11月13日
[5] その他の制限:
0407デフォルトの名無しさん
2006/11/12(日) 19:02:21#include <stdio.h>
#include <math.h>
double hanbetusiki(int a,int b,int c){
return b*b-4*a*c;
}
main(){
int a,b,c;
double d;
printf("係数を入力してください\nA=");
scanf("%d",&a);
printf("B=");
scanf("%d",&b);
printf("C=");
scanf("%d",&c);
d=hanbetusiki(a,b,c);
printf("解:");
if(d>0) printf("x=%.2f,%.2f",(-1.0*b+sqrt(d))/a/2,(-1.0*b-sqrt(d))/a/2);
else if(d==0) printf("x=%.2f",(-1.0*b)/a/2);
else printf("実数解が存在しません");
}
今ひとつ問題の要求とかみ合ってない答えだけど
これでいいのかなあ
0408デフォルトの名無しさん
2006/11/12(日) 19:02:30#include<stdio.h>
int main(){
int i;
for(i=1;i<13;i++){
printf("%3d ",i);
if(i%4==0){ printf("\n"); }
}
return(0);
}
つられてみるw
0409デフォルトの名無しさん
2006/11/12(日) 19:02:560410デフォルトの名無しさん
2006/11/12(日) 19:12:10よくみたら縦に1、2、3だったんです。
でも、ありがとうございます!!
0411デフォルトの名無しさん
2006/11/12(日) 19:13:17ttp://www.iwriteiam.nl/html2tex_c.txt
これ使えるんじゃね?w
0412デフォルトの名無しさん
2006/11/12(日) 19:20:57ごめんなさい。私には理解できませんでした。。。先生いわく、すべてのhtml
を変換するのは大変なので、今回は使われているのだけを変換できれば
いいそうです。
0413デフォルトの名無しさん
2006/11/12(日) 19:52:47>408 を改造してみる。
#include<stdio.h>
int main(){
int i;
for(i=0;i<12;i++){
printf("%3d ",i/4+(i%4)*3+1);
if(i%4==3){ printf("\n"); }
}
return(0);
}
0414デフォルトの名無しさん
2006/11/12(日) 19:53:54ありがとうございます!なんとかなりそうです!
0415デフォルトの名無しさん
2006/11/12(日) 20:14:000416デフォルトの名無しさん
2006/11/12(日) 20:35:56[2] 問題文(含コード&リンク):
キーボードから重複を許して与えられるN個のint型の値の中で、2番目に大きな値を印字するプログラムを作成せよ。そのような値がない場合は「なし」と印字。データの個数N(≧1)はマクロNで与えられるものとする。値は一度に1つずつ入力されるものとする。
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: c
[4] 期限: 2006年11月14日まで
[5] 四則演算、繰り返し、配列ぐらいしかやっていません。
配列の分野の問題です。
0417デフォルトの名無しさん
2006/11/12(日) 21:16:280418デフォルトの名無しさん
2006/11/12(日) 21:57:35struct data
{
char d1[128];
char d2[64];
char d3[32];
char d4[64];
}
この内容をcvsファイルとして出力したのちに、ファイルから読み込みたいのですが…。
一文字ずつfgetsしてカンマを判定して処理するしかないですか?
0419デフォルトの名無しさん
2006/11/12(日) 22:11:50「"」で囲われた「,」は区切りではない等といったメタな処理が無ければ、
fgets() で一行読み込んで sscanf() で解析するのが定石。
0420デフォルトの名無しさん
2006/11/12(日) 22:28:032番目に大きい値がないとはどういう状態だ?
0421416 ◆nZ5tHzSn6E
2006/11/12(日) 22:33:32>>420
例えば
5 5 5 5
(全て同じ値)
とか
4
(値が1つしかない)
といった感じです。
0422デフォルトの名無しさん
2006/11/12(日) 22:53:08エラー処理とかやってないけど、これでどうですか?
data d = {"test","test2","test3","test4"};
fstream f("test.txt", ios::out);
f << d.d1 << ',' << d.d2 << ',' << d.d3 << ',' << d.d4;
f.close();
string s = "";
char buf[128];
f.open("test.txt", ios::in);
while(f.getline(buf, sizeof(buf), ',')){ s += buf; }
f.close();
cout << s << endl;
0423デフォルトの名無しさん
2006/11/12(日) 23:16:41#include <stdio.h>
#include <limits.h>
#define N 10
main(){
int atai[N];
int tmpmax=INT_MIN,tmpnibanme=INT_MIN;
printf("今から%d個の数値を入力してもらいます\n%dを入力したらころします",N,INT_MIN);
for(i=0;i<N;i++){
printf("%d番目の値を入力してください",i+1);
scanf("%d",&atai[i]);
}
for(i=0;i<N;i++){
if(atai[i]>tmpmax){
tmpnibanme=tmpmax;
tmpmax=atai[i];
}
else if(atai[i]>tmpnibanme) tmpnibanme=atai[i];
}
if tmpnibanme>INT_MIN printf("多分%d",tmpnibanme);
else
printf("なし");
}
0424デフォルトの名無しさん
2006/11/12(日) 23:33:28x=-2*log(1-get_uniform_rand());
0425406
2006/11/12(日) 23:33:37かんがえますから
どなたか、配列の中からある文字列に合致するのを選んで処理する方法だけでも
教えていただけないでしょうか?
例えば次のように
it is my pen という文字列が入った配列strからitをthisにmyをyourに変えて
strに入れなおす。みたいな感じで
0426デフォルトの名無しさん
2006/11/12(日) 23:40:58yacc とか bison について調べてみては?
0427416 ◆nZ5tHzSn6E
2006/11/12(日) 23:49:56ありがとうございます。
#include <limits.h>は習ってませんが、参考にさせていただきます。
0428デフォルトの名無しさん
2006/11/12(日) 23:56:02<limits.h>はただのマクロなんで深く考えずに使っていいと思う
後int tmpmax=INT_MIN,tmpnibanme=INT_MIN; を
long型にしてLONG_MINにすれば実行した人をころさずにすむ
0429406
2006/11/13(月) 00:05:44を習っていて少し行き詰っています。なにか良い参考書はありませんでしょうか?
0430デフォルトの名無しさん
2006/11/13(月) 00:06:23[2] 問題文(含コード&リンク):1から100までの素数の和を求めるプログラムを書け。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:lcc-win32
[3.3] 言語:C
検索してみましたが、答えが見つからないのでねがいします。
0431デフォルトの名無しさん
2006/11/13(月) 00:09:50このスレを素数で検索
0432デフォルトの名無しさん
2006/11/13(月) 00:31:14問題が少し違うので、どこをどう変えれば1から100までの素数の和になるか教えていただきたいです。お願いします。
0433デフォルトの名無しさん
2006/11/13(月) 00:39:12[2]
src[] 内の文字が大文字の場合は小文字にして (それ以外の文字はそのまま) dst[] にコピーする関数 str_lcopy(char dst[], char src[]) を作成せよ.
下のような main でこの関数の動作をテストせよ. str_lcopy が src の値を書き換えてならないことに注意. "This is the 21st Century!" を入力して,
src: This is the 21st Century!
dst: this is the 21st century!
力される (dst は正しく変換されるが, src が書き変わっていない) ことを確認せよ.
int main ( void )
{
char src[128], dst[128];
printf("文字列を入力して下さい >> ");
gets(src);
str_lcopy(dst, src);
printf("src: %s\n", src);
printf("dst: %s\n", dst);
return 0;
}
[3]
[3.1] winXP sp2
[3.2] cygwin
[3.3] C
[4] 2006年11月14日火曜
[5] 自力で3時間考えても手に負えませんでした。お願いします。
0434デフォルトの名無しさん
2006/11/13(月) 00:47:34#include <stdio.h>
int main(void) {
int i, j, s = 0;
for (i = 2; i <= 100; i++) {
for (j = 2; j <= i; j++) if (i % j == 0) break;
if (i == j) s += i;
}
printf("%d\n", s);
return 0;
}
0435デフォルトの名無しさん
2006/11/13(月) 00:51:40ありがとうございます。すごく助かりました。
0436デフォルトの名無しさん
2006/11/13(月) 00:56:11まあコピペしか能が無いんだから仕方ないか
0437434
2006/11/13(月) 00:57:32一応そこまで配慮したつもり。
>>433
#include <stdio.h>
#include <ctype.h>
void str_lcopy(char dst[], char src[]) {
char *d = dst, *s = src;
while ((*d++ = tolower(*s++)) != '\0') {}
}
int main (void) {
char src[128], dst[128];
printf("文字列を入力して下さい >> ");
gets(src);
str_lcopy(dst, src);
printf("src: %s\n", src);
printf("dst: %s\n", dst);
return 0;
}
0438デフォルトの名無しさん
2006/11/13(月) 01:11:02http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2929.txt
多分これでいいと思うけど適当に直して下さい。
ビンの個数を変えるには、#define NBIN の所の数字を変えればいいです。
0439デフォルトの名無しさん
2006/11/13(月) 01:14:56http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2930.txt
すまん一ヶ所間違っていたので直した。結果は同じなんだけどね。
間違ってる答えは紛らわしいので削除しといた。
0440デフォルトの名無しさん
2006/11/13(月) 01:19:04[2] 問題文:2進数で入力されたものを10進数で表示
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:火曜日の朝6時
0441デフォルトの名無しさん
2006/11/13(月) 01:28:28http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2931.txt
何度もスマネ
xが範囲外の時もsumとsum2に足していたので、hist[]がや平均や分散が
おかしくなっていたので再度修正。
悪いね
0442デフォルトの名無しさん
2006/11/13(月) 01:33:29すいません、正常に動作したのですが
意味が理解できませんでした。
関数の内容をcharとか使う下に書いたみたいな感じのでお願いできないでしょうか?
if(src >= 'A' && src <= 'Z')
{
diff = 'A'-'a';
s = src - diff;
printf("%c",s);
}
ちなみにこういう感じのを定義もつけて放り込んだらまともに動作しませんでした。
0443デフォルトの名無しさん
2006/11/13(月) 02:19:00[2] 問題文(含コード&リンク):小さいほうから100番目までの素数の和をもとめよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
このスレはすべてみて、似た問題の答えからこの問題の答えを出そうとしましたが、できなかったのでお願いします。
0444デフォルトの名無しさん
2006/11/13(月) 02:25:59# include <stdio.h>
int isprime(int n)
{
int i;
for(i = 2; i < n; i++)
if(n % i == 0)
return 0;
return 1;
}
int main(void)
{
int sum = 0;
int n = 2;
int count = 0;
while(count < 100)
{
if(isprime(n))
{
sum += n;
count++;
}
n++;
}
printf("%d\n", sum);
return 0;
}
0445デフォルトの名無しさん
2006/11/13(月) 02:26:26>>443
#include <stdio.h>
int main(void) {
int i, j, k = 0, s = 0;
for (i = 2; k <= 100; i++) {
for (j = 2; j <= i; j++) if (i % j == 0) break;
if (i == j) {s += i;k++}
}
printf("%d\n", s);
return 0;
}
0446デフォルトの名無しさん
2006/11/13(月) 02:27:190447387
2006/11/13(月) 02:33:10プログラムで探索をする方向で考えます。
0448デフォルトの名無しさん
2006/11/13(月) 03:02:39#include<stdio.h>
#include<stdlib.h>
int main(){
char *s;
int count,i,n;
while(get(s)!EOF) count ++;
n=count-1;
for (i=0;i<n-1;i++){
sum=2^i*(*s);
s++;
};
printf("answer=%d",sum);
return 0;
}
0449デフォルトの名無しさん
2006/11/13(月) 04:34:46[3.1] Windows
[3.2] Borland C++ 5.5.1 for Win32
[3.3] C
[4] 明後日
char Q(char "
void f(doubl *, 〜〜);
と定義された関数に
double a[4][5];
を
f(a, 〜);
と渡したが「問題のあるポインタの変換」と出るので
f(*a, 〜);
と渡したところ正常に動作。
配列の場合"a"はa[0][0]のアドレスを渡せるのでは…?
*aではa[0][0]の中身を渡してしまいそうなのに何故正常に動くのでしょうか…。
")
0450デフォルトの名無しさん
2006/11/13(月) 04:54:19double (*a)[5] としないとだめだろう?
0451デフォルトの名無しさん
2006/11/13(月) 05:03:48ポインタの深さが違うからエラーがでたんだよー。
0452デフォルトの名無しさん
2006/11/13(月) 05:09:58それに変えてみたらWinXPがエラー吐いて止まった件
0453デフォルトの名無しさん
2006/11/13(月) 05:20:00お前もう一回よく調べてみ。いい加減な事を書くなカス。
0454デフォルトの名無しさん
2006/11/13(月) 05:34:00そういわれても…。
double a[4][5];
を
double (*a)[5];
としたけれどaにscanfから数値を入れると強制終了する…。
0455デフォルトの名無しさん
2006/11/13(月) 05:50:06だからscanf()周りを調べろって。自分の思い込みだけで書くな。
0456デフォルトの名無しさん
2006/11/13(月) 05:53:080457デフォルトの名無しさん
2006/11/13(月) 05:55:27こう書いてあるけど…。
他に何かミスってる可能性ある…?
0458デフォルトの名無しさん
2006/11/13(月) 07:06:110459デフォルトの名無しさん
2006/11/13(月) 08:32:17おいおい、そんな驚き方したら(w
自 分 が エ ス パ ー じ ゃ な い っ て バ レ て し ま う だ ろ ?
0460デフォルトの名無しさん
2006/11/13(月) 09:43:19呼び出された関数側では二次元配列の大きさを知ることはできない。
明示的に示すには、関数の最初を変更しないといけない。
void f(double *, 〜〜);
↓
void f(double [][5], 〜〜);
0461デフォルトの名無しさん
2006/11/13(月) 11:17:14[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):x と y の数値の対を読み込むことを繰り返し、
それぞれの和を出力するプログラムを作れ。ただし,和の計算部分には、
2数の和を計算する関数を作って、それを呼び出すこと。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2006年11月14日
0462デフォルトの名無しさん
2006/11/13(月) 11:37:28#include <stdio.h>
double mysum(double x, double y){
return x+y;
}
main(){
double x, y;
while(1){
scanf("%lf",&x);
scanf("%lf",&y);
printf("%f",sum(x,y));
}
}
0463デフォルトの名無しさん
2006/11/13(月) 11:39:21printf("%f",mysum(x,y));
0464デフォルトの名無しさん
2006/11/13(月) 12:09:09それを使うことが前提なら次は最初から書いてね。ちなみにtolower()は、小文字にできるものは
その小文字を、その他の文字はそのままを返す関数(マクロの可能性もある)で、ctype.hに宣言
されている。
#include <stdio.h>
#include <ctype.h>
void str_lcopy(char dst[], char src[]) {
char *d = dst, *s = src;
while (*s != '\0') {
if (*s >= 'A' && *s <= 'Z') {
*d++ = *s++ - ('A'-'a');
} else {
*d++ = *s++;
}
}
*d = '\0';
}
int main (void) {
char src[128], dst[128];
printf("文字列を入力して下さい >> ");
gets(src);
str_lcopy(dst, src);
printf("src: %s\n", src);
printf("dst: %s\n", dst);
return 0;
}
0465デフォルトの名無しさん
2006/11/13(月) 13:35:23yasashii na...
0466デフォルトの名無しさん
2006/11/13(月) 14:05:08[2] 問題文:
配列に格納されたデータをソートするプログラムを作成するにあたり、
以下の機能を持つ関数を作成しなさい。
・乱数を生成し配列要素に格納する
init_array(int *pa, int n)
・配列要素を1行で画面に出力する
output_array(int *pa, int n)
・指定された2つアドレスのデータを交換する
swap(int *x, int *y)
[3.1] OS: windws xp [3.2] visual studio 2003 [3.3] 言語: C
[4] 期限: 11月16日
[5] その他の制限: 反復構造、ソート、探索、ポインタ、ファイル、構造体
よろしくお願いします。
0467デフォルトの名無しさん
2006/11/13(月) 14:05:18#include <math.h>
main(){
double x,y;
scanf("%d",&x);
y=log(x)/log(2);
printf("%f",y);
}
というプログラムにすると
/tmp/ccIE035m.o(.text+0x2e): In function `main':
: undefined reference to `log'
/tmp/ccIE035m.o(.text+0x48): In function `main':
: undefined reference to `log'
collect2: ld はステータス 1 で終了しました
というエラーがでます。何が間違っているんでしょうか?
0468デフォルトの名無しさん
2006/11/13(月) 14:19:07数学関数ライブラリがリンクされていない。
たぶんgccに-lmを渡せば良い。
■ このスレッドは過去ログ倉庫に格納されています