トップページ⇒tech
1001コメント416KB

C/C++の宿題を片付けます 76代目

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/06(月) 09:04:35
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
>10*10は10行10列ってことか?
そうです。

>いちいち読み込むためのその任意の数字が書かれたファイルを作るのがめんどう。
すみません、気が利きませんでした…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2922.lzh
講義での用意がなかったため適当な物ですが。

>あと、前回が配列だったので、って前回ってどれだよ。
>>368さんのご推察通り、前回の講義です。
0370デフォルトの名無しさん2006/11/11(土) 21:01:53
>>235

#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:43
>>370
2時間だったんだよ〜二日じゃないよ〜><
0372デフォルトの名無しさん2006/11/11(土) 21:50:57
while (1) {
if ((c=fgetc(f1))==EOF) break;
fprintf(fs,"%c",c);
}
while (1) {
if ((c=fgetc(f2))==EOF) break;
fprintf(fs,"%c",c);
}


ここらへんがもにょるな
不思議なプログラムだ
03733492006/11/11(土) 22:05:30
>>369
中身みたら00〜99までの数字が順番に書いてるだけじゃん
そうじゃなくて、少数・負数含むんじゃないの?
それも任意だから、順番じゃないだろうし
指数表現した小数とかも含むのかとかそういう意味で
そういうファイルを作ってって言ったの
0374デフォルトの名無しさん2006/11/11(土) 22:35:35
>>363
#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
>>371
あ〜らら。期限を
>[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
にしたがって書かないからだよ。

テンプレはただ漫然とそこにあるんじゃなくて、過去に発生した誤解などを元に
再び同じ過ちを繰り返さないように調整してあるんだから。
0376デフォルトの名無しさん2006/11/12(日) 00:19:03
[2] 問題文(含コード&リンク):
Hello 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
>>376
意図がいまいちわからんのだがこうかな?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2923.txt
0378デフォルトの名無しさん2006/11/12(日) 00:52:37
>>377
サンクスです! 頭がすっきりしました
03793492006/11/12(日) 01:29:14
>>369
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2924.txt
一応ランダムな数字の10行10列のファイルを作成し、読み取り最大値最小値を表示させる
ようにしたのだけど、どうも、数値は読み込めてるが、表示する値が最大値最小値じゃないようで
ソートの時か、別問題か、わかんないんで他の人にパスします。
03803582006/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
[1] 授業単元:情報基礎
[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回目くらいです。

お願いします。
03823812006/11/12(日) 03:28:11
訂正です。
問題文に以下二つってありますけど、1つなんで気にしないでください。
あと、小数の計算もできるようにお願いします。
0383デフォルトの名無しさん2006/11/12(日) 03:48:23
>374
ゴトゥは使わない方がいいと聞いているのですがいいんですか?
わたしは>363じゃないですけど
0384デフォルトの名無しさん2006/11/12(日) 04:02:27
>>383
gotoは使ってもいいけど、奇麗な構造をブチ壊すような使い方は余り好まれない
ブチ壊した例)
※ブロック記号の"{"と"}"は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
>>381
簡単な計算ってなんだろ・・・四則演算?
基礎の基礎って言ってるからプログラム中で変数決めていいのかな

#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;
}
03863852006/11/12(日) 05:25:15
少数の計算っての見落としてた

宣言部分の int ⇒ double
printfの%dを%f
0387デフォルトの名無しさん2006/11/12(日) 07:01:20
[1] 授業単元:Cプラクティス
[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:52
つ Wikipedia
03893872006/11/12(日) 07:26:23
>>388
Wikipediaに最善手自体は載っているのですが、そこにたどり着くまでの考え方とアルゴリズムが知りたいのです。
0390デフォルトの名無しさん2006/11/12(日) 08:30:57
>>387
これでも十分最善手だとおも
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;
}
}
03913872006/11/12(日) 08:48:03
>>390
先手で、(2,2),(3,3),(3.1),(1,3)と打つと勝ててしました。
何が悪いのか考えてみます。
あと、引き続き>>387をよろしくお願いします。
0392デフォルトの名無しさん2006/11/12(日) 10:23:21
>>387
この手の問題の解法って探索しかなくね?ということで、完全探索アルゴリズムを
実装してみた。まともにチェックしてないけど。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2927.c
0393デフォルトの名無しさん2006/11/12(日) 10:42:15
[1] 授業単元:計算科学
[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:29
○とか×とか、そういうのグーグルは嫌いなんだよ。
0396デフォルトの名無しさん2006/11/12(日) 16:02:13
[1] 授業単元:コンピュータ実習�T
[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:00
int main(void){
  int 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
>>397
//アヤシイ
のところは先にキャストしとくか99.0とか10.0とかにするべきだろう
0399デフォルトの名無しさん2006/11/12(日) 18:18:52
[1] 授業単元:情報処理
[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:09
#include <stdio.h>
main(){
printf("1 4 7 10\n2 5 8 11\n3 6 12");
}
0401デフォルトの名無しさん2006/11/12(日) 18:24:36
[1] 授業単元:C言語基礎�U
[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:38
9がぬけた
0403デフォルトの名無しさん2006/11/12(日) 18:28:24
>>400 ありがとうございます!
04044002006/11/12(日) 18:31:18
ちょっと待て
冗談で書いたのにこれでいいのか
0405デフォルトの名無しさん2006/11/12(日) 18:55:21
>>404 え!?そうなんですか・・・。
すみません。他の方法があれば是非教えてください!!
0406デフォルトの名無しさん2006/11/12(日) 18:58:14
[1] 授業単元:Cプログラミング
[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
>>401

#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
>>399
#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:56
これ、本来なら構文解析ものですぜ、だんな
0410デフォルトの名無しさん2006/11/12(日) 19:12:10
>>408 すみません。俺も最初そう思ったんですが、
よくみたら縦に1、2、3だったんです。

でも、ありがとうございます!!

0411デフォルトの名無しさん2006/11/12(日) 19:13:17
>>406
ttp://www.iwriteiam.nl/html2tex_c.txt
これ使えるんじゃね?w
0412デフォルトの名無しさん2006/11/12(日) 19:20:57
>>411
ごめんなさい。私には理解できませんでした。。。先生いわく、すべてのhtml
を変換するのは大変なので、今回は使われているのだけを変換できれば
いいそうです。
0413デフォルトの名無しさん2006/11/12(日) 19:52:47
>>410
>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
>>407
ありがとうございます!なんとかなりそうです!
0415デフォルトの名無しさん2006/11/12(日) 20:14:00
>>413 ありがとうございます!本当に助かりました!
0416デフォルトの名無しさん2006/11/12(日) 20:35:56
[1] 授業単元: プログラミング
[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:28
配列使わんがな(´・ω・`)
0418デフォルトの名無しさん2006/11/12(日) 21:57:35
4つの文字列のメンバを持つ構造体があります。
struct data
{
char d1[128];
char d2[64];
char d3[32];
char d4[64];
}
この内容をcvsファイルとして出力したのちに、ファイルから読み込みたいのですが…。
一文字ずつfgetsしてカンマを判定して処理するしかないですか?
0419デフォルトの名無しさん2006/11/12(日) 22:11:50
>>418
「"」で囲われた「,」は区切りではない等といったメタな処理が無ければ、
fgets() で一行読み込んで sscanf() で解析するのが定石。
0420デフォルトの名無しさん2006/11/12(日) 22:28:03
>>416
2番目に大きい値がないとはどういう状態だ?
0421416 ◆nZ5tHzSn6E 2006/11/12(日) 22:33:32
トリつけます

>>420
例えば
5 5 5 5
(全て同じ値)

とか

4
(値が1つしかない)

といった感じです。
0422デフォルトの名無しさん2006/11/12(日) 22:53:08
>>418
エラー処理とかやってないけど、これでどうですか?
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
>>416
#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:28
>>393
x=-2*log(1-get_uniform_rand());
04254062006/11/12(日) 23:33:37
html→latexはhtmlとlatex分からないと出来ないと思うのでそこは自分で
かんがえますから
どなたか、配列の中からある文字列に合致するのを選んで処理する方法だけでも
教えていただけないでしょうか?
例えば次のように
it is my pen という文字列が入った配列strからitをthisにmyをyourに変えて
strに入れなおす。みたいな感じで
0426デフォルトの名無しさん2006/11/12(日) 23:40:58
>>406,425
yacc とか bison について調べてみては?
0427416 ◆nZ5tHzSn6E 2006/11/12(日) 23:49:56
>>423
ありがとうございます。
#include <limits.h>は習ってませんが、参考にさせていただきます。
0428デフォルトの名無しさん2006/11/12(日) 23:56:02
>>427
<limits.h>はただのマクロなんで深く考えずに使っていいと思う
後int tmpmax=INT_MIN,tmpnibanme=INT_MIN; を
long型にしてLONG_MINにすれば実行した人をころさずにすむ
04294062006/11/13(月) 00:05:44
宿題スレでこの質問は間違っているとも思いますが、現在リストやポインタ
を習っていて少し行き詰っています。なにか良い参考書はありませんでしょうか?
0430デフォルトの名無しさん2006/11/13(月) 00:06:23
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):1から100までの素数の和を求めるプログラムを書け。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:lcc-win32
 [3.3] 言語:C

検索してみましたが、答えが見つからないのでねがいします。
0431デフォルトの名無しさん2006/11/13(月) 00:09:50
>>430
このスレを素数で検索
0432デフォルトの名無しさん2006/11/13(月) 00:31:14
>>431
問題が少し違うので、どこをどう変えれば1から100までの素数の和になるか教えていただきたいです。お願いします。
0433デフォルトの名無しさん2006/11/13(月) 00:39:12
[1] プログラミング
[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
>>432
#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
>>432
ありがとうございます。すごく助かりました。
0436デフォルトの名無しさん2006/11/13(月) 00:56:11
434で満足できるのか・・・

まあコピペしか能が無いんだから仕方ないか
04374342006/11/13(月) 00:57:32
>>436
一応そこまで配慮したつもり。

>>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:02
>>393
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2929.txt

多分これでいいと思うけど適当に直して下さい。
ビンの個数を変えるには、#define NBIN の所の数字を変えればいいです。
0439デフォルトの名無しさん2006/11/13(月) 01:14:56
>>393
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2930.txt

すまん一ヶ所間違っていたので直した。結果は同じなんだけどね。
間違ってる答えは紛らわしいので削除しといた。
0440デフォルトの名無しさん2006/11/13(月) 01:19:04
[1] 授業単元 : 情報処理
[2] 問題文:2進数で入力されたものを10進数で表示
 [3.1] OS:windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:火曜日の朝6時

0441デフォルトの名無しさん2006/11/13(月) 01:28:28
>>393
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2931.txt

何度もスマネ
xが範囲外の時もsumとsum2に足していたので、hist[]がや平均や分散が
おかしくなっていたので再度修正。

悪いね
0442デフォルトの名無しさん2006/11/13(月) 01:33:29
>>433
すいません、正常に動作したのですが
意味が理解できませんでした。
関数の内容をcharとか使う下に書いたみたいな感じのでお願いできないでしょうか?



if(src >= 'A' && src <= 'Z')
{
diff = 'A'-'a';
s = src - diff;

printf("%c",s);
}

ちなみにこういう感じのを定義もつけて放り込んだらまともに動作しませんでした。
0443デフォルトの名無しさん2006/11/13(月) 02:19:00
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):小さいほうから100番目までの素数の和をもとめよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C

このスレはすべてみて、似た問題の答えからこの問題の答えを出そうとしましたが、できなかったのでお願いします。
0444デフォルトの名無しさん2006/11/13(月) 02:25:59
>>443
# 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
434をリスペクトしてみるか

>>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:19
;ぬけた ねみー
04473872006/11/13(月) 02:33:10
ありがとうございます。
プログラムで探索をする方向で考えます。
0448デフォルトの名無しさん2006/11/13(月) 03:02:39
>>440
#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] 環境
 [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:19
>>449
double (*a)[5] としないとだめだろう?
0451デフォルトの名無しさん2006/11/13(月) 05:03:48
>>449
ポインタの深さが違うからエラーがでたんだよー。
0452デフォルトの名無しさん2006/11/13(月) 05:09:58
>>450
それに変えてみたらWinXPがエラー吐いて止まった件
0453デフォルトの名無しさん2006/11/13(月) 05:20:00
>>452
お前もう一回よく調べてみ。いい加減な事を書くなカス。
0454デフォルトの名無しさん2006/11/13(月) 05:34:00
>>453
そういわれても…。
double a[4][5];
を
double (*a)[5];
としたけれどaにscanfから数値を入れると強制終了する…。
0455デフォルトの名無しさん2006/11/13(月) 05:50:06
>>454
だからscanf()周りを調べろって。自分の思い込みだけで書くな。
0456デフォルトの名無しさん2006/11/13(月) 05:53:08
scanf("%lf", &a[i][j]); のように書いてなかったらアウトだな。
0457デフォルトの名無しさん2006/11/13(月) 05:55:27
scanf("%lf", &a[i][j]);
こう書いてあるけど…。
他に何かミスってる可能性ある…?
0458デフォルトの名無しさん2006/11/13(月) 07:06:11
すげぇ、エスパーがいっぱいだ
0459デフォルトの名無しさん2006/11/13(月) 08:32:17
>>458
おいおい、そんな驚き方したら(w


自 分 が エ ス パ ー じ ゃ な い っ て バ レ て し ま う だ ろ ?
0460デフォルトの名無しさん2006/11/13(月) 09:43:19
>>449
呼び出された関数側では二次元配列の大きさを知ることはできない。
明示的に示すには、関数の最初を変更しないといけない。

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
>461

#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:21
matigaeta

printf("%f",mysum(x,y));
0464デフォルトの名無しさん2006/11/13(月) 12:09:09
>>442
それを使うことが前提なら次は最初から書いてね。ちなみに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:23
>>464
yasashii na...
0466デフォルトの名無しさん2006/11/13(月) 14:05:08
[1] C言語プログラミング
[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 <stdio.h>
#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
>>467
数学関数ライブラリがリンクされていない。
たぶんgccに-lmを渡せば良い。
■ このスレッドは過去ログ倉庫に格納されています