トップページ⇒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
0175デフォルトの名無しさん2006/11/08(水) 19:05:28
>>174
全部自力って・・・
0176デフォルトの名無しさん2006/11/08(水) 19:31:42
>>175
出来なくもないし画像処理演習
なんだからやっても何の不思議もない
01771732006/11/08(水) 19:40:03
>>174
できれば全部自力でお願いします・・・
0178デフォルトの名無しさん2006/11/08(水) 19:45:00
>>177
http://www.amazon.co.jp/gp/product/4797330457
JPEGはこれをパクれ

JPEGのデコードやらせるくらいの演習だから、拡大縮小は自分でできるよな?
0179デフォルトの名無しさん2006/11/08(水) 19:45:21
>>177
できればとかじゃなくて宿題でどういう指示が出たかが問題なんじゃないの
教員が想定してないレベルの宿題を他人に作らせると後々ややこしくなるだけだぜ
01801732006/11/08(水) 19:54:00
ごちゃごちゃうっせーな
完成品のプログラムを見てヒントもらいたいだけだ
拡大縮小処理もたぶんできてる
libjpeg使ってもいいから早くやって下さい
0181デフォルトの名無しさん2006/11/08(水) 19:58:24
>>180
http://www.amy.hi-ho.ne.jp/jbaba/jpeg11.htm
JPEG->DIBの完成品のプログラムあるよ
0182デフォルトの名無しさん2006/11/08(水) 20:00:15
>>47
#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.));
}
01831732006/11/08(水) 20:20:36
177と180は偽物です。
ライブラリ?は必要なら使ってもよいと思います。
画像の拡大縮小の仕方もわかりません。

>>181
リンク先のプログラムを見てみましたが、どう修正すればいいのかわかりません。

よろしくお願いします。
0184デフォルトの名無しさん2006/11/08(水) 20:58:11
[1] 授業単元: 画像処理
[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
>>172
こんなんでいいんかな。
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
>>184
細線化の対象は黒ドットだけですか?
白も含みますか?
0187デフォルトの名無しさん2006/11/08(水) 21:13:34
>>186
黒だけでいいです。白地に黒い文字を書いてそれが細線化されるような感じでおねがいします。
0188デフォルトの名無しさん2006/11/08(水) 21:13:44
>>47
#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
>>47
ということは 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:42
徹底してるな
0191デフォルトの名無しさん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
>>191
バブルソートでよければ

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:32
バブルソートってなんですか・・
0194デフォルトの名無しさん2006/11/08(水) 22:19:56
>>193
ググレカス
0195デフォルトの名無しさん2006/11/08(水) 22:21:43
なんですかと言われても、、>>192がバブルソートだよ。
つかググれ、その方が早いから。
0196デフォルトの名無しさん2006/11/08(水) 22:26:57
ソート法の一種
あんま早くないけど安定

これくらいの理解でいいんだろうか
0197デフォルトの名無しさん2006/11/08(水) 22:43:36
奴が求めてるポインタを使って答えようか
0198OS2006/11/08(水) 22:54:52
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
第4回課題 セルオートマトンの動作推移を表現する。
・渋滞の様子をC++を使って表現する。
・空白セルと塗りつぶしセルの二つを用意し、塗りつぶしセルは、前が空白セルの場合は、進むことが出来るが、塗りつぶしセルの場合は、進むことが出来ない。(進行方向は左。)
・時間経過と共に、どのような推移をするのかを示す。(塗りつぶしセルがなくなった時点で終了。)
・結果表示は、別ウィンドウが望ましいが、コマンドライン上で構わない。
以下に、例を示す。
問題 □□■□■□が与えられるとする。
t=1 □■□■□□
t=2 ■□■□□□
t=3 □■□□□□
t=4 ■□□□□□
終了
0199OS2006/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
[1] 授業単元:C言語講義
[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
>>201
説明が求められてるだけ、ですよね。
ならバッファオーバーランでググってみれば良いと思う。
0203わからないんです。2006/11/08(水) 23:25:56
OSがAIXで Oracle10を使用したC言語(ProC)について聞いてもよろしいですか?
簡単に言うと、子プロセスがsystem関数で実行したシェル内で別のシェルを実行した場合に戻り値が取得できないんですが。
Oracleにコネクトしないと取得できるのですが。
0204デフォルトの名無しさん2006/11/08(水) 23:28:52
>>203
>>1
0205デフォルトの名無しさん2006/11/08(水) 23:30:26
む、今アップローダー落ちてるか?
0206デフォルトの名無しさん2006/11/08(水) 23:30:49
>>191 再帰関数でよければ・・・

#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
>>206 なんか、voidなのに間違えてreturnしてるけど、
それは問題文がvoid指定されていなければもっと簡略化できたのに
という怨念みたいなもの。
0208デフォルトの名無しさん2006/11/08(水) 23:38:40
[1] 授業単元:プロブラミング
[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
[1]C言語プログラミングB
[2]
今回はファイル入出力の応用で、
ファイルの簡単な暗号化及び複合化を行うプログラムを作成する。
暗号化は改行以外の文字のアスキーコードに1を足す
複合化はその逆の動作を行うこと
引数の2番目が暗号化と複合化のどちらかを決定、
3番目が入力ファイル名を示し、
4番目が出力ファイル名を示す
上記のようなプログラムを作成せよ

[3]OS:Linux コンパイラ:gcc3.4 言語:C
[4]明日
[5]関数・ポインタ・構造体・ファイル入出力まで学びました
02102012006/11/08(水) 23:46:21
>>202
レスありがとうございます。
とりあえず、ぐぐってみましたが、自分と同じような例は、なかったです。

説明と言っても、そこまで詳しく説明しなくても問題ないです。
とりあえず、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:21
>>210
printf("%p %p %p\n", a, b, c);
02122012006/11/08(水) 23:52:08
>>211
レスありがとうございます。
実行しアドレスを調べてみましたが、全部バラバラでした。
このことから何かが読み取れそうですが、解らないです…。
0213デフォルトの名無しさん2006/11/09(木) 00:03:42
>>201
printf("%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
[1] 授業単元:計算機化学
[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
>>214
×int()
○int main()

なんだよこのミス
ありえねぇだろ
02172142006/11/09(木) 00:18:44
>>216
ありがとうございます。
次のエラーに変わったんですけど、どう直したらいいでしょうか。
警告 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
>>217
あきらめる
0219デフォルトの名無しさん2006/11/09(木) 00:27:01
>>208
#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
>>214
多分、計算機化学は計算機科学になおさないと
コンパイルエラーになるんじゃないか?
0221デフォルトの名無しさん2006/11/09(木) 00:40:48
>>214 かっことかせみころんとか、いろいろあるだろう、なぁおい。
0222デフォルトの名無しさん2006/11/09(木) 00:44:03
>>217
よく眺めるんだな
#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 <iostream>
#include <cmath>
using namespace std;
double monte_carlo(){return M_PI}
int main()
{
cout << "piの値は" << monte_carlo();
return 0;
}

モンテカルロ法ならこっちのほうが簡潔だぜ
02242092006/11/09(木) 00:54:30
さっさと回答出してくださいよ屑ども
0225デフォルトの名無しさん2006/11/09(木) 00:56:05
>>223
モンテカルロ法でそこまで高速・高精度に計算するとはお前天才だな
0226デフォルトの名無しさん2006/11/09(木) 00:57:42
>>209
書いたけど、アップローダが死んでるぽいから、代わりのURLちょうだい。
0227デフォルトの名無しさん2006/11/09(木) 00:59:16
>>223
は?お前馬鹿だな!入力とらないとばれるだろ?
02282142006/11/09(木) 01:27:26
>>220
計算機科学ではなく、計算機化学という授業名なんです。

>>221,222
プログラム作れました。
乱数を用いた例として授業で示されたものだったのですが
知識がないので、わからなくて質問させて頂きました。
ありがとうございましたm(__)m
02292262006/11/09(木) 02:03:02
>>209
もう寝る。
#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) ;
}
02302262006/11/09(木) 02:04:19
書き忘れてた。
コマンド名 e 入力ファイル 出力ファイルで暗号化
コマンド名 d 入力ファイル 出力ファイルで復号化ね。
やっつけだけど。
0231デフォルトの名無しさん2006/11/09(木) 02:07:48
>>116 これでおk?
#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;
}
0232602006/11/09(木) 02:45:18
自力でなんとかなりました
変数の初期化のループに誤りがあったようです
0233デフォルトの名無しさん2006/11/09(木) 10:45:59
>>200

#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
>>208
やってることは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
[1]C言語プログラミング
[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
>>235
#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:24
>>235は前スレにも同じのあったな
0238デフォルトの名無しさん2006/11/09(木) 16:17:43
[1] 授業単元:Cプロ入門演習2
[2] 問題文(含コード&リンク):
キーボードから指定した範囲の素数の合計を求める関数を作成し、プログラムを完成させよ
プリントのほうには指定した範囲内の素数も表示されています
[3] 環境
 [3.1] OS: XPSP2
 [3.2] study C
 [3.3] C
[4] 明日まで
[5] その他の制限:引数、戻り値まで習いました
0239デフォルトの名無しさん2006/11/09(木) 16:27:53
>>238
このスレを素数で検索
0240デフォルトの名無しさん2006/11/09(木) 17:35:39
>>239
>>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:11
>>240
1も素数してあげたいけど、都合があってゴメン
0242デフォルトの名無しさん2006/11/09(木) 17:44:42
>>>150のだと1が表示されないのですがどこを変えればいいんでしょうか

「素数の定義」を変える必要があります。
0243デフォルトの名無しさん2006/11/09(木) 18:17:29
>>240
素数(そすう)とは、1とその数自身以外に正の約数を持たない(つまり1とその数以外のどんな自然数によっても割り切れない)、1 より大きな自然数のことである。
0244デフォルトの名無しさん2006/11/09(木) 18:35:56
あれ、でもプリントには1がでてる・・・
間違いって事でいいのかな・・・
0245デフォルトの名無しさん2006/11/09(木) 18:50:08
ええい教師のせいにするな見苦しい
0246デフォルトの名無しさん2006/11/09(木) 18:55:07
1を素数と言うことにしてしまうと、素因数分解が発散してしまうので定義上、素数と認められない。
Ex. 6 = 3 * 2 * 1 * 1 * 1 * ....
0247デフォルトの名無しさん2006/11/09(木) 19:07:59
[1] 授業単元: プログラミング
[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:24
>>247

strrev(char* str, int n)
{
char* p;
for(p = str+n; p != str; p--)
putchar(*p);
}
0249デフォルトの名無しさん2006/11/09(木) 19:16:24
配列いじるなら

char* strrev(char* str, int n)
{
char* p;
for(p = str+n; p > str; p--,str++)
*str = *p;
}
0250デフォルトの名無しさん2006/11/09(木) 19:20:46
>>247
#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
>>248
・戻り値の型がない
・無駄な引き数がある
・おまけに、文字列長-1を渡すと言う不思議な仕様になっている
・更に、最初の一文字が出力されない。
>>249
・戻り値を戻していない
・無駄な引き数がある
・おまけに、文字列長-1を渡すと言う不思議な仕様になっている

ダメすぎ
0252デフォルトの名無しさん2006/11/09(木) 19:25:04
能無しは書くなってやつだな
0253デフォルトの名無しさん2006/11/09(木) 19:27:26
>>251
>>249の問題はそういう次元の話じゃないだろう?
0254デフォルトの名無しさん2006/11/09(木) 19:30:05
>>252
ぶっちゃけここに宿題持ち込むようなクズの宿題がどうなろうとどうでもよくね
ここは能無しがクズの宿題利用して練習するスレだろ
0255デフォルトの名無しさん2006/11/09(木) 19:30:53
まぁおちつけ
02562512006/11/09(木) 19:36:49
>>253
あ、ほんとだ。それどころじゃねぇや。

>>250
・再帰でやるか、再帰でw
・リダイレクトで改行のないテキスト食わせるとぬるぽ
・わざわざ4行にまとめなくていいよ……

奇を衒い過ぎw
0257デフォルトの名無しさん2006/11/09(木) 19:59:20
>・リダイレクトで改行のないテキスト食わせるとぬるぽ
どういう事?
別に問題無いように思えるけど。
0258デフォルトの名無しさん2006/11/09(木) 20:15:13
>>206
これでどうしてソーティングになるのかイマイチわからん。
0259デフォルトの名無しさん2006/11/09(木) 20:20:51
>>246
その式は全く発散してないけど?「発散」を普通と違う意味で使ってるの?

1 を素数とする場合に問題になるのは一意性。
1 を素数としない場合の素因数分解では「順番を除いて一意」という性質が成り立つ。
1 を素数とする場合は 「順番と1倍を除いて一意」という言い方をしないといけない。

ただ、一般の場合は後者のほうが使いやすく、例えば
負の数の素因数分解は「-1倍を除いて一意」という言い方になり、
実係数多項式の素因数分解は「定数倍を除いて一意」という言い方になる。
0260デフォルトの名無しさん2006/11/09(木) 20:28:01
[1] 授業単元: メディア基礎
[2] 問題文(含コード&リンク): 配列にデータを10個読み込み、次いで、その中
で最大のものを求め、その値を書き出すプログラムを
作成せよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: 知りません
 [3.3] 言語:C++
[4] 期限: 本日まで
[5] その他の制限: 特になし

お、お願いしますorz
0261デフォルトの名無しさん2006/11/09(木) 20:41:48
[1] 授業単元:情報処理�U
[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
>>261
#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
>>260
こんなんでどうだべか。
変数名も絶対に他の人と被らない様にしてある親切設計。
#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;
}
02642602006/11/09(木) 21:03:44
>>263
std::cout std::endl
ってのはまだ習ってないんで、
入力するときに使う物をscanf
表示するときに使う物をprintf
にする場合どうしたらいいですかね?
0265デフォルトの名無しさん2006/11/09(木) 21:05:17
>>263
与えられる10個の数値が全て負のときには…
02662602006/11/09(木) 21:12:31
>>265
アッー!!
0267デフォルトの名無しさん2006/11/09(木) 21:12:51
>>264
それもしかして、C++じゃなくてただのCだったりしないか?
0268デフォルトの名無しさん2006/11/09(木) 21:19:19
>>264
オラの裏を書くとは、オメさてはプロだな?
#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:46
>>268
if(saibig<highretu[i])
saibig<highretu[i];
↓
if(i==0 || saibig<highretu[i])
saibig=highretu[i];
じゃね?
0270デフォルトの名無しさん2006/11/09(木) 21:43:12
[1] 授業単元: プログラミング演習�U
[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
1] 授業単元: プログラミング
[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
>>270
>>271
なんでむちゃくちゃ似てるの?
0273デフォルトの名無しさん2006/11/09(木) 21:50:22
>>270
ポインタ使えばいいんだな

#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
>>273
よっしゃおまいは正しいぞ!
ただちょっと天邪鬼さんだったな
■ このスレッドは過去ログ倉庫に格納されています