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
0175デフォルトの名無しさん
2006/11/08(水) 19:05:28全部自力って・・・
0176デフォルトの名無しさん
2006/11/08(水) 19:31:42出来なくもないし画像処理演習
なんだからやっても何の不思議もない
0178デフォルトの名無しさん
2006/11/08(水) 19:45:00http://www.amazon.co.jp/gp/product/4797330457
JPEGはこれをパクれ
JPEGのデコードやらせるくらいの演習だから、拡大縮小は自分でできるよな?
0179デフォルトの名無しさん
2006/11/08(水) 19:45:21できればとかじゃなくて宿題でどういう指示が出たかが問題なんじゃないの
教員が想定してないレベルの宿題を他人に作らせると後々ややこしくなるだけだぜ
0180173
2006/11/08(水) 19:54:00完成品のプログラムを見てヒントもらいたいだけだ
拡大縮小処理もたぶんできてる
libjpeg使ってもいいから早くやって下さい
0181デフォルトの名無しさん
2006/11/08(水) 19:58:24http://www.amy.hi-ho.ne.jp/jbaba/jpeg11.htm
JPEG->DIBの完成品のプログラムあるよ
0182デフォルトの名無しさん
2006/11/08(水) 20:00:15#include <stdio.h>
int kaijo(int n) {
if (!n) return 1;
else return n * kaijo(n - 1);
}
double mycos(double x) {
int i, s = -1;
double r = 1, xn = x * x;
for (i = 2; i <= 10; i += 2, xn *= x * x, s *= -1) {
r += s * xn / kaijo(i);
}
return r;
}
double mysin(double x) {
int i, s = -1;
double r = x, xn = x * x * x;
for (i = 3; i <= 11; i += 2, xn *= x * x, s *= -1) {
r += s * xn / kaijo(i);
}
return r;
}
int main(void) {
int i;
printf("x cos sin\n");
for (i = -28; i != 29; i++)
printf("% .1f % .8f % .8f\n", i / 10., mycos(i / 10.), mysin(i / 10.));
}
0183173
2006/11/08(水) 20:20:36ライブラリ?は必要なら使ってもよいと思います。
画像の拡大縮小の仕方もわかりません。
>>181
リンク先のプログラムを見てみましたが、どう修正すればいいのかわかりません。
よろしくお願いします。
0184デフォルトの名無しさん
2006/11/08(水) 20:58:11[2] 問題文(含コード&リンク):細線化しなさい
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:VS2005
[3.3] 言語: VC++ MFC
[5] その他の制限:ゲットピクセルで8近傍を取得して、それの結果で注目点を白にするか黒にするかを決める。
8近傍はd[7]にGet8関数を使って取得。d[0]は注目点の右側でそこから反時計回りで1,2,3とかわっていく。
で、今Get8はできてます。for(n=0; n<=7; n++) d[i]=get8(n,i,j,CDC) で8近傍がdに格納されます。
画像は2値化画像です。
お願いします><
0185デフォルトの名無しさん
2006/11/08(水) 21:00:28こんなんでいいんかな。
void triangle(int data[][Y_SIZE][3], int x1, int y1, int x2, int y2,int x3, int y3){
float x,y;
float dx,dy=0.2;
dx = (float)(x2-x1)/(y2-y1)*dy;
for(x=x1,y=y1;y<=y2;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
dx = (float)(x3-x2)/(y3-y2)*dy;
for(x=x2,y=y2;y<=y3;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
dx = (float)(x3-x1)/(y3-y1)*dy;
for(x=x1,y=y1;y<=y3;y+=dy,x+=dx) memset(data[(int)x][(int)y],0,sizeof(int)*3);
}
0186デフォルトの名無しさん
2006/11/08(水) 21:09:27細線化の対象は黒ドットだけですか?
白も含みますか?
0187デフォルトの名無しさん
2006/11/08(水) 21:13:34黒だけでいいです。白地に黒い文字を書いてそれが細線化されるような感じでおねがいします。
0188デフォルトの名無しさん
2006/11/08(水) 21:13:44#include <stdio.h>
int kaijo(int i) { return (i>0 ? i * kaijo(i-1) : 1 ); }
double enujo(double x, int n) { return (n>0 ? x * enujo(x, n-1) : 1 ); }
double mycosR(double x, int i) { return (i>0 ? enujo(x,i+i-2)/kaijo(i+i-2) - mycosR(x,i-1) : 0); }
double mycos(double x) { return -mycosR(x,6); }
double mysinR(double x, int i) { return (i>0 ? enujo(x,i+i-1)/kaijo(i+i-1) - mysinR(x,i-1) : 0); }
double mysin(double x) { return -mysinR(x,6); }
main(void) {
double x;
for(x=-2.8;x<=2.8;x+=0.1) printf("%.8f %.8f\n",mycos(x),mysin(x));
}
その宿題の意図するところは再帰関数なんジャマイカ?
0189デフォルトの名無しさん
2006/11/08(水) 21:20:39ということは main関数も再帰化したほうがいいのか。
#include <stdio.h>
int kaijo(int i) { return i>0 ? i * kaijo(i-1) : 1 ; }
double enujo(double x, int n) { return n>0 ? x * enujo(x, n-1) : 1 ; }
double mycosR(double x, int i) { return i>0 ? enujo(x,i+i-2)/kaijo(i+i-2) - mycosR(x,i-1) : 0; }
double mycos(double x) { return -mycosR(x,6); }
double mysinR(double x, int i) { return i>0 ? enujo(x,i+i-1)/kaijo(i+i-1) - mysinR(x,i-1) : 0; }
double mysin(double x) { return -mysinR(x,6); }
int mainR(double x) { return x<=2.8 ? printf("%.8f %.8f\n",mycos(x),mysin(x)), mainR(x+0.2) : 1; }
main(void) { mainR(-2.8); }
0190デフォルトの名無しさん
2006/11/08(水) 21:29:420191デフォルトの名無しさん
2006/11/08(水) 22:07:52[1] 授業単元: ポインタ
[2] 問題文(含コード&リンク): 文字型配列の先頭アドレスを受け取り、文字列内の文字を昇順にソート
する関数void sort_ch()を作成せよ。
[3] 環境
[3.1] OS: /Linux/
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: どちらでも可
[4] 期限: 今週いっぱい
[5] その他の制限: ポインタを習っています。
0192デフォルトの名無しさん
2006/11/08(水) 22:16:14バブルソートでよければ
void sort_ch( char *Input, int length )
{
int No;
for(No=0; No < length-1; No++ ){
if( Input[No] > Input[No+1] ){
swap( &Input[No], &Input[No+1] );
}
}
if(length > 2){
sort_ch( Input, length-1 );
}
}
void swap( char *i, char *j )
{
char Buff;
Buff = *i;
*i = *j;
*j = Buff;
}
0193デフォルトの名無しさん
2006/11/08(水) 22:17:320194デフォルトの名無しさん
2006/11/08(水) 22:19:56ググレカス
0195デフォルトの名無しさん
2006/11/08(水) 22:21:43つかググれ、その方が早いから。
0196デフォルトの名無しさん
2006/11/08(水) 22:26:57あんま早くないけど安定
これくらいの理解でいいんだろうか
0197デフォルトの名無しさん
2006/11/08(水) 22:43:360198OS
2006/11/08(水) 22:54:52[2] 問題文(含コード&リンク):
第4回課題 セルオートマトンの動作推移を表現する。
・渋滞の様子をC++を使って表現する。
・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。)
・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。)
・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。
以下に、例を示す。
問題 □□■□■□が与えられるとする。
t=1 □■□■□□
t=2 ■□■□□□
t=3 □■□□□□
t=4 ■□□□□□
終了
0199OS
2006/11/08(水) 22:55:25□□■
は
□■□
となるが、
■□■
は
■■□
となる左側で止めてしまう場合があるのです。
この問題は、渋滞の研究に使うものなので、□は、動ける場所、■は、渋滞していて動けない場所というものです。
ですが、取りあえずは、セルが左側に移動するものを第一段階として作りたかったので、宜しく御願いします。
発展問題に、左側で止めた場合、n秒後に、止めが解除されるとしてプログラムを作れというものもあります。
nは、コマンドラインから入力。(入力方式は問わない。)
(例)
t=1 ■□■
t=2 ■■□
t=3 ■■□
t=4 ■■□
t=5 ■□□
この場合、n=2と指定します。■■□の状態で、2秒、膠着状態が続いてますので。
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: VC6.0
[3.3] 言語: C、C++ (出来ればC++が望ましい。)
[4] 期限: 2006年11月9日 23:59まで(出来れば23時まで。)
[5] その他の制限: 特になし
0200デフォルトの名無しさん
2006/11/08(水) 23:15:11本当に困っているので、助けてください・・・
解説的なものをつけていただけたら幸いです・・
【質問テンプレ】
[1] 授業単元: ポインタ
[2] 問題文(含コード&リンク): 名前(char),身長(double),体重(double)、視力(視力構造体)これらのデータをメンバとする
構造体を定義し、入力と表示を行うプログラムを作成しなさい。
入力件数は最大5件で、名前は19文字までの入力とし、範囲外だったのならば
エラーメッセージを表示し再入力させてください。名前に"END"が入力されたときは
入力終了とする。表示は身長で昇順にソートして出力。
また、身長、体重は小数点以下第一位までの表示とする。視力は小数点以下第三位までの表示とする。
出力の幅は、名前が19文字分、その他は5文字分で指定してください。
視力は右()、左()をメンバとする構造体でで扱ってください。
1件分の入力はinput_data()で、表示はdisplay_data()で、ソートはsort_data()でと処理を関数に分けて行ってください。
名前入力の最初に"END"が入力された場合は、"Input data is nothing!"と出力しなさい。
[3] 環境
[3.1] OS: /Linux/
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: どちらでも可
[4] 期限: 今週いっぱい
[5] その他の制限: 構造体を習っています。
0201デフォルトの名無しさん
2006/11/08(水) 23:16:53[2] 問題文(含コード&リンク):
#include <stdio.h>
#include <string.h>
#define MAX 10
int main(void)
{char a[MAX]="";
char b[MAX]="";
char c[MAX]="Hello";
strcpy(a, c);
strcpy(b, "Good Bye");
printf("%s,%s,%s\n", a, b, c);
return 0;}
このプログラムのbのサイズを1にして実行した時
なぜ実行結果がこのようになるか説明しなさい。
まず、お聞きしたいのが、bのサイズを1にするとは、
char b[MAX]=""; を char b[1]=""; とすれば良いのですよね?
この実行結果は ood Bye,Good Bye,Hello となりましたが、
なぜ、aにHelloではなくGoodbyeが入ってるのですか?
プログラム的にこのようになるのは、おかしい気がするのですが…。
また、なぜGoodbyeのGが消えているのでしょうか?
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の朝9時まで
[5] その他の制限: なし
0202デフォルトの名無しさん
2006/11/08(水) 23:19:16説明が求められてるだけ、ですよね。
ならバッファオーバーランでググってみれば良いと思う。
0203わからないんです。
2006/11/08(水) 23:25:56簡単に言うと、子プロセスがsystem関数で実行したシェル内で別のシェルを実行した場合に戻り値が取得できないんですが。
Oracleにコネクトしないと取得できるのですが。
0204デフォルトの名無しさん
2006/11/08(水) 23:28:52>>1
0205デフォルトの名無しさん
2006/11/08(水) 23:30:260206デフォルトの名無しさん
2006/11/08(水) 23:30:49#include <stdio.h>
char *sort(char *c){return *(c+1)!=0?sort(c+1),(*c>*(c+1) ? *c^=*(c+1),*(c+1)^=*c,*c^=*(c+1):c),sort(c+1):c;}
void sort_ch(char *c){return sort(c);}
main (void) {
char s[32]="/tech/1162771475/";
sort_ch(s);
printf("%s\n",s);
}
0207デフォルトの名無しさん
2006/11/08(水) 23:37:15それは問題文がvoid指定されていなければもっと簡略化できたのに
という怨念みたいなもの。
0208デフォルトの名無しさん
2006/11/08(水) 23:38:40[2] 問題文(含コード&リンク): sin(x)の値をマクローリン展開を用いて計算するプログラムを作成せよ。第20項まで求めることとする。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 11/11
[5] その他の制限:ヒントΣ[n=0→∞]{(-1)^n1}x^2n+1/(2n+1)! 単位はラジアン
0209デフォルトの名無しさん
2006/11/08(水) 23:41:51[2]
今回はファイル入出力の応用で、
ファイルの簡単な暗号化及び複合化を行うプログラムを作成する。
暗号化は改行以外の文字のアスキーコードに1を足す
複合化はその逆の動作を行うこと
引数の2番目が暗号化と複合化のどちらかを決定、
3番目が入力ファイル名を示し、
4番目が出力ファイル名を示す
上記のようなプログラムを作成せよ
[3]OS:Linux コンパイラ:gcc3.4 言語:C
[4]明日
[5]関数・ポインタ・構造体・ファイル入出力まで学びました
0210201
2006/11/08(水) 23:46:21レスありがとうございます。
とりあえず、ぐぐってみましたが、自分と同じような例は、なかったです。
説明と言っても、そこまで詳しく説明しなくても問題ないです。
とりあえず、201で自分がした質問
>まず、お聞きしたいのが、bのサイズを1にするとは、
>char b[MAX]=""; を char b[1]=""; とすれば良いのですよね?
>この実行結果は ood Bye,Good Bye,Hello となりましたが、
>なぜ、aにHelloではなくGoodbyeが入ってるのですか?
>プログラム的にこのようになるのは、おかしい気がするのですが…。
>また、なぜGoodbyeのGが消えているのでしょうか?
の回答を頂ければ、それをヒントに自分で説明できそうです。
0211デフォルトの名無しさん
2006/11/08(水) 23:48:21printf("%p %p %p\n", a, b, c);
0212201
2006/11/08(水) 23:52:08レスありがとうございます。
実行しアドレスを調べてみましたが、全部バラバラでした。
このことから何かが読み取れそうですが、解らないです…。
0213デフォルトの名無しさん
2006/11/09(木) 00:03:42printf("%X %X %X\n",a,b,c);で各々のアドレスを調べてみよう
bのサイズがMAXの時、俺の環境だと
22FF60 22FF50 22FF40
となる
bのサイズが1のときは
22FF60 22FF5F 22FF40
これのダンプをちと書くと
b=MAX
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
22FF40 48 65 6C 6C 6F 00
22FF50 47 6F 6F 64 20 42 79 65 00
22FF60 48 65 6C 6C 6F 00
b=1
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
22FF40 48 65 6C 6C 6F 00
22FF50 47
22FF60 6F 6F 64 20 42 79 65 00
48 65 6C 6C 6F 00は"Hello"、47 6F 6F 64 20 42 79 65 00は"Good Bye"
なんか書くのが面倒になってきたけどようはstrcpy(b, "Good Bye");によって
aの一部が上書きされちまったってわけ
文字のおわりは00で判断するから
b = "Good Bye"
a = "ood Bye"
になるわけ
0214デフォルトの名無しさん
2006/11/09(木) 00:04:54[2] 問題文(含コード&リンク):
//モンテカルロ法でパイを求める
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int ()
{
double p,pai,x,y;
unsigned int k,n,count;
count=0;
cout<<"試行の回数"<<endl;
cin>>n;
srand((unsigned int)time(0));
for(k=0;k=n;k++)
//1以下の乱数を出す
x=(double)rand()/(double)RAND_MAX;
y=(double)rand()/(double)RAND_MAX;
if(x*x+y*y>1)continue;
else(count=count+1)
p=(double)count/n;
pai=p*4.0;
cout<<"paiの値は"<<pai;
return 0;
}
これで実行すると エラー E2040 2.cpp 6: 宣言が正しく終了していない
と、出るんですが6行目のどこを直せばいいのでしょうか。
くだらない質問かもしれませんが、よろしくお願いします。
[3]Windows XP 、Borland C++ 5.5.1 、C++
[4] 期限:無期限
0215デフォルトの名無しさん
2006/11/09(木) 00:07:08○文字列のおわり
0216デフォルトの名無しさん
2006/11/09(木) 00:08:08×int()
○int main()
なんだよこのミス
ありえねぇだろ
0217214
2006/11/09(木) 00:18:44ありがとうございます。
次のエラーに変わったんですけど、どう直したらいいでしょうか。
警告 W8060 2.cpp 14: おそらく不正な代入(関数 main() )
エラー E2033 2.cpp 18: continue の位置が誤っている(関数 main() )
エラー E2379 2.cpp 20: ステートメントにセミコロン(;)がない(関数 main() )
プログラムを勉強し始めたばかりで何もわからないので、ヒントだけでもお願いしますm(__)m
0218デフォルトの名無しさん
2006/11/09(木) 00:25:21あきらめる
0219デフォルトの名無しさん
2006/11/09(木) 00:27:01#include <stdio.h>
double d(double x, double n) {
return n == 0 ? x : -x * x * d(x, n - 1) / (2 * n + 1) / (2 * n);
}
double mysin(double x) {
int i;
double r = 0.;
for (i = 0; i < 20; i++) r += d(x, i);
return r;
}
int main(void) {
double i;
for (i = 0.; i <= 3.1415926535898; i += 0.31415926535898) printf("%f\n", mysin(i));
}
0220デフォルトの名無しさん
2006/11/09(木) 00:27:11多分、計算機化学は計算機科学になおさないと
コンパイルエラーになるんじゃないか?
0221デフォルトの名無しさん
2006/11/09(木) 00:40:480222デフォルトの名無しさん
2006/11/09(木) 00:44:03よく眺めるんだな
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
double x, y;
int n, count = 0;
cout << "試行の回数" << endl;
cin >> n;
srand(static_cast<unsigned int>(time(0)));
for (int i = 0; i < n; ++i) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if (x * x + y * y < 1) ++count;
}
cout << "piの値は" << count * 4.0 / n;
return 0;
}
0223デフォルトの名無しさん
2006/11/09(木) 00:52:42#include <cmath>
using namespace std;
double monte_carlo(){return M_PI}
int main()
{
cout << "piの値は" << monte_carlo();
return 0;
}
モンテカルロ法ならこっちのほうが簡潔だぜ
0224209
2006/11/09(木) 00:54:300225デフォルトの名無しさん
2006/11/09(木) 00:56:05モンテカルロ法でそこまで高速・高精度に計算するとはお前天才だな
0226デフォルトの名無しさん
2006/11/09(木) 00:57:42書いたけど、アップローダが死んでるぽいから、代わりのURLちょうだい。
0227デフォルトの名無しさん
2006/11/09(木) 00:59:16は?お前馬鹿だな!入力とらないとばれるだろ?
0228214
2006/11/09(木) 01:27:26計算機科学ではなく、計算機化学という授業名なんです。
>>221,222
プログラム作れました。
乱数を用いた例として授業で示されたものだったのですが
知識がないので、わからなくて質問させて頂きました。
ありがとうございましたm(__)m
0229226
2006/11/09(木) 02:03:02もう寝る。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
if( argc != 4 ) {printf("Usage : command [e|d] [infile] [outfile]\n") ;}
else {if( 0 == (strcmp(argv[1],"e")) ) {encode(argv[2], argv[3]) ; }
else if(0 == ( strcmp(argv[1],"d")) ) {decode(argv[2], argv[3]) ;}
else {printf("オプションの指定が間違っています。\n") ; }}
return(0) ;
}
int encode(char *iname, char *oname){
FILE *infp, *outfp ;
char c ;
if( NULL == (infp = fopen(iname,"r")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
else {if( NULL == (outfp = fopen(oname, "w")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
while( EOF != (c = getc(infp)) ) {putc((c=='\n'?c:c+1), outfp) ;}}
return(0) ;
}
int decode(char *iname, char *oname){
FILE *infp, *outfp ;
char c ;
if( NULL == (infp = fopen(iname,"r")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ;exit(1) ;}
else {if( NULL == (outfp = fopen(oname, "w")) ) {fprintf(stderr,"ファイルのオープンに失敗しました。\n") ; exit(1) ;}
while( EOF != (c = getc(infp)) ) { putc((c=='\n'?c:c-1), outfp) ; }}
return(0) ;
}
0230226
2006/11/09(木) 02:04:19コマンド名 e 入力ファイル 出力ファイルで暗号化
コマンド名 d 入力ファイル 出力ファイルで復号化ね。
やっつけだけど。
0231デフォルトの名無しさん
2006/11/09(木) 02:07:48#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *func(const char *a, const char *b, const char *c){
char *pb, *pc, *temp, *ret;
int i, keylen;
pb=strstr(a, b);
pc=strstr(a, c);
if(pb==NULL || pc==NULL)
return NULL;
keylen=strlen(b);
if(pb>pc){
temp=pb;pb=pc;pc=temp; // swap(pb, pc)
keylen=strlen(c);
}
if(keylen>=pc-pb) return NULL;
ret=malloc(pc-pb-keylen+1);
for(i=0;i<pc-pb-keylen;i++)
ret[i]=pb[keylen+i];
ret[i]='\0';
return ret;
}
int main(void){
printf("%s\n", func("futongafuttonda", "utton", "uton"));
return 0;
}
023260
2006/11/09(木) 02:45:18変数の初期化のループに誤りがあったようです
0233デフォルトの名無しさん
2006/11/09(木) 10:45:59#include<stdio.h> #include<string.h> #define MAX 5 typedef struct { double
l_eyesight; /*左視力*/ double r_eyesight; /*右視力*/} Eyesight; typedef struct
{char name[20]; /*名前*/ double height; /*身長*/ double weight; /*体重*/
Eyesight eyesight; /*視力*/ } Data; void input_data(Data *, int *); void
display_data(Data *, int *); void sort_data(Data *, int *); int main(){ int *i;
Data data[MAX], x; input_data(data, i); sort_data(data, i); display_data(data,
i); return 0; } /*入力処理*/ void input_data(Data *data, int *n){ char *name;
int i; *n = 0; for (i = 0; i < MAX; i++){ do{ printf("名前:"); scanf("%s",
name); if (strlen(name) > 19){ printf("名前が長すぎです\n"); } else {
strcpy(data[i].name, name); break; } }while(1); if ((strcmp(data[i].name, "END"
) == 0) | (strcmp(data[i].name, "end") == 0)){ if (i == 0){ printf
("Input data is nothing!"); exit(0); } else{ break; }} printf("身長:");
scanf("%lf", &data[i].height); printf("体重:"); scanf("%lf", &data[i].weight);
printf("視力(左):"); scanf("%lf", &data[i].eyesight.l_eyesight);
printf("視力(右):"); scanf("%lf", &data[i].eyesight.r_eyesight); } *n = i; }
/*ソート*/void sort_data(Data *data, int *n){int i, j;Data temp;for (i
= 0;i < *n - 1; i++)for (j = *n - 1; j > i; j--)if (data[j-1].height >
data[j].height){temp = data[j-1]; data[j-1] = data[j]; data[j] = temp; }}
/*表示*/void display_data(Data *data, int *n){int i;for (i = 0; i < *n; i++){
printf("名前:%-19s 身長:%6.1f 体重:%6.1f 視力(左):%6.3f 視力(右):%6.3f\n",
data->name, data->height, data->weight, data->eyesight.l_eyesight,
data->eyesight.l_eyesight); data += 1;} }
0234デフォルトの名無しさん
2006/11/09(木) 10:48:08やってることは219と一緒
課題の内容として「xが0近傍の方が誤差は少ない」ってことを学習するためにやってるなら必要ないけど
単純に精度出したい時はmysin内のコメント外してmynorm使ってください
mainは219と同じ物使うなり適当に
#include <math.h>
//#include <stdio.h>
double mynorm(double x){
/*xを-2π〜+2πにする*/
x=fmod(x,M_PI*2);
/*xを-π〜+πにする*/
if(x<-M_PI)x=x+M_PI*2;
else if(x>M_PI)x=x-M_PI*2;
/*xを-π/2〜+π/2にする*/
if(x>M_PI_2)x=M_PI-x;
else if(x<-1*M_PI_2)x=-M_PI-x;
return x;
}
double mysin(double x){
double x2=x*x,y=1;
int i;
//x=mynorm(x);
for(i=39;i>=3;i=i-2){
y=1-x2*y/(i*(i-1));
}
y=x*y;
return y;
}
0235デフォルトの名無しさん
2006/11/09(木) 12:43:39[2]
問4
引数に3つのファイル名を取ると、最初の二つのファイルを結合し、
3つめのファイルに保存するプログラムを作成せよ
-実行例-
% cat text01.txt
good morning!!
% cat text02.txt
good bye!!
% ./a-2 text01.txt text02.txt text03.txt
% cat text03.txt
good morning!!
good bye!!
[3]OS:Win/Linux コンパイラ:VC/gcc3.4 言語:C
[4]あと2時間ほどです;
[5]ポインタを終えてファイル入出力まで学びました
よろしくお願いします
0236デフォルトの名無しさん
2006/11/09(木) 13:23:30#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv){if (argc < 4) return 1;char buf[1000];sprintf(buf, "/bin/cat '%s' '%s' > '%s'", argv[1], argv[2], argv[3]);return system(buf) >> 8;}
0237デフォルトの名無しさん
2006/11/09(木) 15:59:240238デフォルトの名無しさん
2006/11/09(木) 16:17:43[2] 問題文(含コード&リンク):
キーボードから指定した範囲の素数の合計を求める関数を作成し、プログラムを完成させよ
プリントのほうには指定した範囲内の素数も表示されています
[3] 環境
[3.1] OS: XPSP2
[3.2] study C
[3.3] C
[4] 明日まで
[5] その他の制限:引数、戻り値まで習いました
0239デフォルトの名無しさん
2006/11/09(木) 16:27:53このスレを素数で検索
0240デフォルトの名無しさん
2006/11/09(木) 17:35:39>>150のだと1が表示されないのですがどこを変えればいいんでしょうか
あともう一問お願いします
[2] 問題文(含コード&リンク):
5人の学生の点数を読み込み、得点の高い順に並び替え、右のような得点グラフを作成せよ。
得点グラフは「#」は10点、「*」は1点に相当する。
条件:並び替えを行う関数と、引数として得点を受け取り、得点に応じたグラフを書く関数を
作成してプログラムを完成させなさい
例
1人目 >> 54
2人目 >> 67
3人目 >> 75
4人目 >> 92
5人目 >> 33
----------------------------
得点グラフ
----------------------------
第1位 (92点): #########**
第2位 (75点): #######*****
第3位 (67点): ######*******
第4位 (54点): #####****
第5位 (33点): ###***
0241デフォルトの名無しさん
2006/11/09(木) 17:37:111も素数してあげたいけど、都合があってゴメン
0242デフォルトの名無しさん
2006/11/09(木) 17:44:42「素数の定義」を変える必要があります。
0243デフォルトの名無しさん
2006/11/09(木) 18:17:29素数(そすう)とは、1とその数自身以外に正の約数を持たない(つまり1とその数以外のどんな自然数によっても割り切れない)、1 より大きな自然数のことである。
0244デフォルトの名無しさん
2006/11/09(木) 18:35:56間違いって事でいいのかな・・・
0245デフォルトの名無しさん
2006/11/09(木) 18:50:080246デフォルトの名無しさん
2006/11/09(木) 18:55:07Ex. 6 = 3 * 2 * 1 * 1 * 1 * ....
0247デフォルトの名無しさん
2006/11/09(木) 19:07:59[2] 問題文(含コード&リンク):
入力した文字列を反転するプログラムをポインタ変数を用いて作成せよ.
[実行例]
文字列を入力してください:japan
反転文字列は"napaj"です.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VisualStudo.net2003
[3.3] 言語: C
[4] 期限: 11月12日
[5] その他の制限: お願いします
0248デフォルトの名無しさん
2006/11/09(木) 19:13:24strrev(char* str, int n)
{
char* p;
for(p = str+n; p != str; p--)
putchar(*p);
}
0249デフォルトの名無しさん
2006/11/09(木) 19:16:24char* strrev(char* str, int n)
{
char* p;
for(p = str+n; p > str; p--,str++)
*str = *p;
}
0250デフォルトの名無しさん
2006/11/09(木) 19:20:46#include <stdio.h>
#include <string.h>
void reversePrint(const char * p) {if (* p != '\0') {reversePrint(p + 1); putchar(* p);}}
int main() {char buf[1000]; if (fgets(buf, sizeof(buf), stdin) != NULL) {* strchr(buf, '\n') = '\0'; reversePrint(buf);} return 0;}
0251デフォルトの名無しさん
2006/11/09(木) 19:24:54・戻り値の型がない
・無駄な引き数がある
・おまけに、文字列長-1を渡すと言う不思議な仕様になっている
・更に、最初の一文字が出力されない。
>>249
・戻り値を戻していない
・無駄な引き数がある
・おまけに、文字列長-1を渡すと言う不思議な仕様になっている
ダメすぎ
0252デフォルトの名無しさん
2006/11/09(木) 19:25:040253デフォルトの名無しさん
2006/11/09(木) 19:27:26>>249の問題はそういう次元の話じゃないだろう?
0254デフォルトの名無しさん
2006/11/09(木) 19:30:05ぶっちゃけここに宿題持ち込むようなクズの宿題がどうなろうとどうでもよくね
ここは能無しがクズの宿題利用して練習するスレだろ
0255デフォルトの名無しさん
2006/11/09(木) 19:30:530256251
2006/11/09(木) 19:36:49あ、ほんとだ。それどころじゃねぇや。
>>250
・再帰でやるか、再帰でw
・リダイレクトで改行のないテキスト食わせるとぬるぽ
・わざわざ4行にまとめなくていいよ……
奇を衒い過ぎw
0257デフォルトの名無しさん
2006/11/09(木) 19:59:20どういう事?
別に問題無いように思えるけど。
0258デフォルトの名無しさん
2006/11/09(木) 20:15:13これでどうしてソーティングになるのかイマイチわからん。
0259デフォルトの名無しさん
2006/11/09(木) 20:20:51その式は全く発散してないけど?「発散」を普通と違う意味で使ってるの?
1 を素数とする場合に問題になるのは一意性。
1 を素数としない場合の素因数分解では「順番を除いて一意」という性質が成り立つ。
1 を素数とする場合は 「順番と1倍を除いて一意」という言い方をしないといけない。
ただ、一般の場合は後者のほうが使いやすく、例えば
負の数の素因数分解は「-1倍を除いて一意」という言い方になり、
実係数多項式の素因数分解は「定数倍を除いて一意」という言い方になる。
0260デフォルトの名無しさん
2006/11/09(木) 20:28:01[2] 問題文(含コード&リンク): 配列にデータを10個読み込み、次いで、その中
で最大のものを求め、その値を書き出すプログラムを
作成せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: 知りません
[3.3] 言語:C++
[4] 期限: 本日まで
[5] その他の制限: 特になし
お、お願いしますorz
0261デフォルトの名無しさん
2006/11/09(木) 20:41:48[2] 問題文(含コード&リンク):2を底とするlogを計算するプログラムを作成しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006年11月10日まで
[5] その他の制限:なし
お願いします。
0262デフォルトの名無しさん
2006/11/09(木) 20:50:21#include <stdio.h>
#include <math.h>
main(){
double x,y;
scanf("%d",&x);
y=log(x)/log(2);
printf("%f",y);
}
0263デフォルトの名無しさん
2006/11/09(木) 20:51:09こんなんでどうだべか。
変数名も絶対に他の人と被らない様にしてある親切設計。
#include<iostream>
int main()
{
int hailine[10];
int mostdai = 0;
for(int i=0; i!=10; i++){
std::cout << "数値" << i << " >";
std::cin >> hailine[i];
if(mostdai < hailine[i])
mostdai = hailine[i];
}
std::cout << "最大は" << mostdai << std::endl;
return 0;
}
0264260
2006/11/09(木) 21:03:44std::cout std::endl
ってのはまだ習ってないんで、
入力するときに使う物をscanf
表示するときに使う物をprintf
にする場合どうしたらいいですかね?
0265デフォルトの名無しさん
2006/11/09(木) 21:05:17与えられる10個の数値が全て負のときには…
0267デフォルトの名無しさん
2006/11/09(木) 21:12:51それもしかして、C++じゃなくてただのCだったりしないか?
0268デフォルトの名無しさん
2006/11/09(木) 21:19:19オラの裏を書くとは、オメさてはプロだな?
#include <cstdio>
int main()
{
int highretu[10];
int saibig = 0;
printf("負数は入力しちゃダメ\n");
for(int i=0; i!=10; i++)
scanf("%d", &highretu[i]);
if(saibig<highretu[i])
saibig<highretu[i];
}
printf("最大は%d\n", saibig);
return 0;
}
0269デフォルトの名無しさん
2006/11/09(木) 21:22:46if(saibig<highretu[i])
saibig<highretu[i];
↓
if(i==0 || saibig<highretu[i])
saibig=highretu[i];
じゃね?
0270デフォルトの名無しさん
2006/11/09(木) 21:43:12[2] 問題文(含コード&リンク):
入力した文字列から指定した文字を検索するプログラムをポインタ変数を用いて作成せよ.
[実行例]
文字列を入力してください:Exercise
検索文字を入力してください:e
文字列"Exercise"に"e"は
3番目
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:visualstudio2003
[3.3] 言語: C
[4] 期限: 11月11日
[5] その他の制限: よく考えたけど分かりませんでした。
どなたかお願いします。
0271デフォルトの名無しさん
2006/11/09(木) 21:47:01[2] 問題文:
1.入力した文字列を反転するプログラムをポインタ変数を用いて作成せよ.
2.入力した文字列から指定した文字を検索するプログラムをポインタ変数を用いて作成せよ.
[実行例]
文字列を入力してください:Exercise
検索文字を入力してください:e
文字列"Exercise"に"e"は
3番目
8番目
にあります.
文字列を入力してください:Exercise
検索文字を入力してください:a
そんな文字は入っていない!
[3] 環境
[3.1] OS:Windowsxp
[3.3] 言語:C++
[4] 期限:明日の午前中
よろしくお願いします。
0272デフォルトの名無しさん
2006/11/09(木) 21:50:11>>271
なんでむちゃくちゃ似てるの?
0273デフォルトの名無しさん
2006/11/09(木) 21:50:22ポインタ使えばいいんだな
#include <stdio.h>
#include <string.h>
int main() {
char str[128], str2[128];
char *p;
printf("文字列を入力してください:");
scanf("%s\n", str);
printf("検索文字を入力してください:");
scanf("%s", str2);
p = strstr(str, str2);
printf("文字列\"%s\"に\"%s\"は\n%d番目", str, str2, p-str+1);
return 0;
}
0274デフォルトの名無しさん
2006/11/09(木) 21:53:06よっしゃおまいは正しいぞ!
ただちょっと天邪鬼さんだったな
■ このスレッドは過去ログ倉庫に格納されています