[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/22 09:08 / Filesize : 317 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 12:30:56 ]
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
【過去ログ検索】        chomework.sakura.ne.jp/
【wiki】               www23.atwiki.jp/homework/

【前スレ】C/C++の宿題を片付けます 108代目
pc11.2ch.net/test/read.cgi/tech/1211980711/


592 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 05:21:58 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):

要素数 nScores=13 の配列 scores[]={65,0,95,0,0,79,82,0,84,94,86,90,0} から0を除去して、
要素数 nScores=8 の配列 scores[]={65,95,79,82,84,94,86,90} を
求める関数 RemoveZeroElements(array,n) を書きなさい。

main() では次の実行文により、0を除去した配列の要素数を求めて、
ファイルに nScoresscores[] を書き出すこと。

nScores = RemoveZeroElements(scores,nScores);

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VisualC++6.0
 [3.3] 言語:C++
[4] 期限: 6月16日まで
[5] その他の制限:配列、関数などは習いました。

よろしくお願いします。


593 名前:320 mailto:sage [2008/06/15(日) 05:35:24 ]
>>320
どなたかお願いします。

for文で描画しているようなので、for文を書き換えれば出来ると思うのですが
sin波や円を描くためのmath関数を使うのが、自分には難しくて出来ません。

期限は6/19(木曜日)でお願いします。

594 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 05:53:50 ]
int RemoveZeroElements(int *array, int n)
{
int i, j;
for(i=j=0; i<n; i++) if(array[i]) array[j++] = array[i];
return j;
}

595 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 06:45:26 ]
↑と等価だか検証してみそ
int RemoveZeroElements(int *array, int n){
int i=0,j=n;
for(; i<n-1; i++) if(array[i]==0) array[i] = array[i+1] else j=i;
return j+1;
}

596 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 06:47:20 ]
for(; i<n-1; i++) if(array[i]==0) array[i] = array[i+1] ,array[i+1]=0 ;else j=i;

597 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 06:47:51 ]
+1とか-1とか微調整に使用するのは

小 細 工

598 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 07:14:29 ]
>>595,596
お前はここに書き込む資格ないよ

599 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 07:36:45 ]
>>598
処理の速度は度外視して、ローカル変数をi以外使わないで等価なものが書けるかな?
変数が自由に使える世界ばかりじゃないんだよ。勿論再帰は論外

600 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 07:43:12 ]
>>593
期限までまだ時間があるのでヒントだけ:
最初のfor文はクリアしてるだけ。
描画してるのはその直後の
data[0] [128] [128] = 255; /*最大値255, 最小値0*/
の所だよ。ここをfor文で囲う必要があるかな。



601 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 07:55:11 ]
>>599
題意を全く満たしてないクソと等価なもの書いてどうすんだよw

602 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:04:13 ]
>>594がクソというわけか

603 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:07:12 ]
クソはどう見ても595と596だろ。
見ただけじゃ理解できないほど脳みそ腐ってるんなら実行してから物言えよw

604 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:18:29 ]
じゃクソじゃない>>594と等価なローカル変数がiだけのコード書いて皆

605 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:40:34 ]
そもそもなんで変数iだけなんて条件つけてんの?
595と596もj使ってるのに

606 名前:デフォルトの名無しさん [2008/06/15(日) 08:42:03 ]
もうこれでいいじゃん
int CountZeroElements(int *array, int n){
  int c;
  for(c=0; n>=0; n--) c+=(array[n]!=0);
  return c;
}

607 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:42:59 ]
>>606
int CountZeroElements(int *array, int n){ 
  for(int c=0; n>=0; c+=(array[n--]!=0)) ; 
  return c; 


608 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:43:37 ]
問題文も読めない盲は引っ込んでろよ

609 名前:デフォルトの名無しさん [2008/06/15(日) 08:47:41 ]
>>592
C++知らないからCで

int CountZeroElements(int *array, int n){  
  for(int c=0; n>=0; c+=(array[n--]!=0)) ;  
  return c;  
}  

int * RemoveZeroElements(const int * array, int n){
    int i, c, *ret, len;
    len=CountZeroElements(array, n);
    ret=(int*)malloc(sizeof(int)*len);
    for(i=c=0; i<n; i++)
        if(array[i]!=0) ret[c++]=array[i];
    return ret;
}


610 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:48:21 ]
for (i = 0; i < n; ) {
if (array[i] == 0) {
for (--n; i < n; i++) array[i] = array[i + 1];
i = 0;
}
else i++;
}
return n;




611 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:49:55 ]
>>605
クソな595,596が使っているからこそ、ローカル変数を1つだけに
したコードを考えて欲しいんだナ

612 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:53:20 ]
変数一つにすることにどんな意味がある?
>>610は一つになってるけど>>594よりムダが多いだろ

613 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:55:57 ]
int RemoveZeroElements(int *const array, const int n){
int i;

??????????????????

}
この条件ではどーだ?

614 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:56:07 ]
// 学生向けのコード
int RemoveZeroElements(int* array, int n)
{
int len = 0; // 戻り値に使う配列の長さを格納する変数
int* work = new int[n]; // 作業用領域を確保

// 0を除去した配列を作業用領域に作り、配列の長さを求める
for(int i = 0; i != n; ++i)
{
if(array[i] != 0)
{
work[len++] = array[i];
}
}
// 作業用の配列から、引数で与えられた配列に、内容をコピーする。
for(int i = 0; i != len; ++i)
{
array[i] = work[i];
}

delete [] work; // 作業用領域の後始末
return len;
}

615 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 08:56:33 ]
くそコードかいた595=596が話をそらそうとして必死だなw

616 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 09:10:39 ]
[1] 授業単元:プログラミング基礎
[2] 問題文:
自然数nを入力し、nの階乗(1×2×…×n)を計算し、
10進数で表示するプログラムを作りなさい。ただし、n<10000程度までは正しく動くようにすること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年6月27日まで
[5] その他の制限:いまポインタについて習っている所です

617 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 09:15:57 ]
>>616
>>218を参考にしな。

618 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 09:40:43 ]
>>616
#include <stdio.h>
#define N 1000000
int main(void)
{
int i, j, n, fig = 0;
int a[1000] = {0}, temp[1000] ={0};

scanf("%d", &n);
a[0] = 1;

for(i=2; i<=n; i++) {
for(j=0; j<=fig; j++) temp[j] = a[j] * i;
for(j=0; j<=fig; j++) {
if(temp[j] / N) {
a[j] = temp[j] % N;
if(j==fig) fig++;
temp[j+1] += temp[j] / N;
}
else a[j] = temp[j];
}
}

printf("%d", a[fig]);
for(i=fig-1; i>=0; i--) printf("%06d", a[i]);

return 0;
}


619 名前:592 mailto:sage [2008/06/15(日) 09:59:02 ]
コードありがとうございます。

若干流れが荒れてしまって申し訳ない。。。

620 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 10:10:08 ]
>>617-618
ありがとうございました。



621 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 10:11:02 ]
594と610と614以外は参考にしちゃ駄目だから

622 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 10:17:28 ]
>>620
いまどきは滅多にないと思うけど、618は環境によっては正しく動かない可能性あるから。

623 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 10:21:18 ]
IT業界関連社会人を目指す学生向けの回答はこっち
>>614はパソコン愛好会のお遊び勉強会向けのコードで大学の宿題じゃNG
効率はやや悪いが、
1.何を書き換えるかが把握しやすい。
2.ローカル変数をstaticにしている(必要もなくautoにしない)
3.newで許可無く勝手に変数を作っていない
という点に相違がある。こういうのが非常に大事になってくる。
int RemoveZeroElements(int *array, int n){
static int i,j;
for(i=0;i<n;i++){
if(array[i]==0){
for(j=i+1;j<n;j++){//後ろに0でない項があれば、それと交換する
if(array[j]){array[i]=array[j];array[j]=0;break;}
}//for
}//if
}//for
for(i=0;i<n;i++)
if(array[i]==0)
return i+1;
}

624 名前:623 mailto:sage [2008/06/15(日) 10:24:17 ]
return n;が抜けてたから追加しといて

625 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 10:29:00 ]
>>623
>return i+1;
>return i+1;
>return i+1;
>return i+1;

626 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 10:30:43 ]
>>623
なんだこのクソコードw

627 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:23:48 ]
カウンタ用の変数をプログラム全体の実行終了までメモリ上に保持しとくとか・・・。
実行環境はメモリ余りまくりのWindowsXPだというのに・・・。
バカなの?

628 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:42:17 ]
再帰とか普通禁止されてる業務用コードは、リエントラントである
ことなんて要求されないから、ローカル変数をautoに統一だなんて
DOSとかの貧弱なメモリ環境のコード書いてた時の戒律だぜw

実行環境はメモリ余りまくりのWindowsXPだというのに・・・。
それをやらないのってひょっとして

バカなの?

629 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 11:57:23 ]
わざわざ似た文面で返すところを見ると、よっぽど悔しかった模様。

630 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 12:00:31 ]
>>623
すいません、実行すると配列の最後に0が入っちゃうんですけど。
配列の長さも9になってしまいます。



631 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 12:16:42 ]
628は627をわかりやすく補足しただけだろ

632 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 12:20:30 ]
>>320
>>593
誰もやらない理由って言うかさ、問題文と提示コードの内容が違うからじゃね
提示コードで処理してる data[3][Y_SIZE][X_SIZE]ってさ、明らかにPNMフォーマットじゃ無い
しかし問題文はPNMフォーマットを利用って書いてある
意味不明だよ、提示コードも良く分らずに君が書いたのか?

633 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 12:22:59 ]
スレッドセーフを意識しないのが最近の流行なんだ?
よし、俺も関数内static変数バンバン使うぜ!

634 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 12:46:15 ]
>>592
C++ならこんな感じ
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6910.txt

635 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:07:10 ]
>>320
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6911.c

636 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:09:47 ]
>>632
8行目のPS3をP3にし、
21行目の%dの後ろにスペースを一個追加すれば、
ppmを吐くようになる。

637 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:16:15 ]
その上で、16行目を以下の4行で置き換えればとりあえずsinカーブを書くようになるよ。
for (x = 0; x < X_SIZE; x++) {
y = 256 / 6.28 * sin(x / 256.0 * 6.28) + 128;
data[0][y][x] = 255;
}


638 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:17:08 ]
連投すまん、
#include <math.h>
も忘れずに。

639 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:30:50 ]
円を角煮は、パラメトリック表示した円の式を使うのが楽。
(ただし、あまり美しくはかけない。)
double t;
for (t = 0; t < 6.28; t += 0.01) {
x = 128 * cos(t);
y = 128 * sin(t);
data[0][y][x] = 255;
}
ぐらいでどうかな。
渦巻きは、半径(ここでは128)をtにあわせて変化させてやれば良い。


640 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:37:50 ]
不動小数点数をループカウンタに使うなよ。
横着しないでpiから計算すれ。



641 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:39:04 ]
>>640
それぐらいは許容範囲にしてやれw

642 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:28:14 ]
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6912.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C++
[4] 期限: 2008/6/17
[5] その他の制限:問題文の制限のみ

なんだかもう頭の中がごちゃごちゃになってきました
御教授お願いしますorz

643 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:52:12 ]
>>642
#include<stdio.h>
int main()
{
int a[10], i, *pa, *pb;
for(i = 0; i < 10; i ++)
a[i] = i;
pa = a; /* a と &a[0] のどちらでも可 */
printf("a[0]=%d\n", pa[0]); /* pa[0] と *pa のどちらでも可 */
printf("a[4]=%d\n", pa[4]); /* pa[4] と *(pa+4) のどちらでも可 */
pb = a+5; /* a+5 と &a[5] のどちらでも可 */
printf("*(pb-2)=%d\n", *(pb-2)); /* *(pb-2) と pb[-2] のどちらでも可 */
return 0;
}

644 名前: ◆bVi8L9tS1c mailto:sage [2008/06/15(日) 18:29:50 ]
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6913.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C
[4] 期限: 本日24時まで
[5] その他の制限:出来るだけ簡素に

すいません、よろしくお願いします

645 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 18:37:20 ]
>>644
#include <stdio.h>
int char2int(const char *s);
int main(void){
char s[]="123";
int t;
t = char2int(s);
printf("文字列: %s \n", s);
printf("数値: %d \n", t);
return 0;
}
int char2int(const char *s){
int n = 0;
while(*s)
n = n * 10 + (*s++ - '0');
return n;
}

646 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 18:38:36 ]
>>644
#include <stdio.h>
#include <stdlib.h>
int char2int(char const *s);
int main(void){
char s[]="123";
int t = char2int(s);
printf("文字列: %s\n", s);
printf("数値: %d\n", t);
return 0;
}
int char2int(char const *s){
return atoi(s);
}

647 名前: ◆nOwZY.WgD2 mailto:sage [2008/06/15(日) 19:45:02 ]
[1] 授業単元:基礎プログラミング
[2] 問題文:
(1) char*pstrというchar型のアドレスを宣言して、256バイトのメモリ領域を割り当てます。
割り当てたメモリ領域に以下のような文字を入れ、表示させなさい。

I'll finish this book today.

(2) (1)で割り当てたメモリ領域を512バイトに拡張しなさい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ:VC 6.0
 [3.3] 言語:C
[4] 期限: 今日中でお願いします。
[5] その他の制限: malloc関数を使ってください。

648 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 19:47:08 ]
reallocは使用可能?

649 名前: ◆bVi8L9tS1c mailto:sage [2008/06/15(日) 19:47:15 ]
>>645-646
ありがとうございました

650 名前: ◆nOwZY.WgD2 mailto:sage [2008/06/15(日) 19:48:17 ]
すみません書き忘れてました。
(2)はrealloc使用OKです。



651 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 19:53:43 ]
>>647
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *pstr;
pstr = malloc(256);
strcpy(pstr, "I'll finish this book today.");
fputs(pstr, stdout);
pstr = realloc(pstr, 512);
return 0;
}
エラーチェックは省略。

652 名前:231 mailto:sage [2008/06/15(日) 19:56:47 ]
>>562
ありがとうございました!

653 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:18:54 ]
>>320
>>593

既に>>635で出てるが…
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6916.txt

654 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:59:58 ]
>>651
freeつける癖つけましょう

655 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:04:29 ]
昔、あるfjで、exitの前に
freeすべきかどうかで
大論争があったね。

656 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:12:49 ]
[1] 授業単元:プログラミング演習
[2] 問題文:
次をポーランド記法を用いて計算し、標準出力に出力せよ。
* + 3.2 1.6 - 8 / 9.1 0.2

[3] 環境
 [3.1] OS:WindowsVista64
 [3.2] コンパイラ:bcc32
 [3.3] 言語:C
[4] 期限: 今日中でお願いします。
[5] その他の制限: ありません。

657 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:33:10 ]
[1] 授業単元:
C言語
[2] 問題文(含コード&リンク):()
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6917.txt
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6918.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
Microsoft Visual Studio 2008
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
明後日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
二つあります。両方お願いします。


658 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:05:10 ]
>>656
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6919.txt

659 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:11:29 ]
>>658
ありがとうございます。

660 名前:デフォルトの名無しさん [2008/06/15(日) 22:12:38 ]
[1] 授業単元:
[2] 問題文(含コード&リンク):
CSVファイル内のレコードをスペース区切りで入力した文字列でアンド検索せよ
(「あいう けこ」と入力すると「あいうえお,かきくけこ,さしすせそ」というレコードがヒットする)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: ライブラリはなしで

一つの文字列での検索は出来るのですが、複数のときにどうしたらいいのかわかりません…。
今書いているソース↓

FILE *fp= fopen(IN_FILE, "r");
char buff[256]; //CSVファイルのデータ用
char srch[256]; //検索ワード用
gets(srch); //検索するワードの取得
int i = 0; //行数。その後の編集や削除処理でデータを特定するために使用
int line = 0; //ヒットした行数
while(fgets(buff, 256, fp) != NULL)
{
++i;
if(strstr(buff, srch) != NULL)
{
printf("%d%s", i,buff);
++line;
}
}
fclose(fp);



661 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:31:12 ]
>>657
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6920.c
問題017 単純選択法 発展

662 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:38:26 ]
>>660
入力された文字列をスペース区切りで複数の文字列に分割する
分割した文字列ごとに検索する

663 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:44:22 ]
>>657
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6921.c
問題018 単純交換法 配列は乱数で決定しているんで、適当に
自分で入力する形式に変更してたもう

664 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:45:15 ]
>>657
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6922.c

665 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:47:57 ]
>>663 は間違えた・・・

666 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:52:34 ]
>>657
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6923.c
問題018 単純交換法

667 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:57:49 ]
ソートネタ大人気だな

668 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:59:12 ]
そーっと しておいてくれ・・・

669 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 23:09:04 ]
ありがとうございます。

670 名前:657 mailto:sage [2008/06/15(日) 23:14:34 ]
>>669
名前忘れました>>657です。



671 名前: [2008/06/16(月) 00:14:46 ]


672 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:02:14 ]
>>623 がいるからIT(笑)って言われるんだよ

673 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:09:29 ]
>>462
掘り返してすいません
何故さきに余りを求めて足して最後に1000以上なら1000を引くのかがわかりません
どうしてその考えにいたるのかが分かりません
できれば詳しく説明して欲しいのですがよろしいでしょうか?

674 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:11:56 ]
[1] 授業単元:C言語入門
[2] 問題文:二次方程式 ax2+bx+c=0に適当なa,b,cを与えて
      もし実数解をもつならば 解を計算して表示し、
      虚数解であれば「実数解をもちません」と表示
      するような、プログラム if-else文を使って作成せよ
[3] 環境
 [3.1] OS: (WindowsXPです
 [3.3] 言語: (Cになります。
[4] 期限: ([2008年6月16日10:00まで] になります(´;ω;`)

よろしくお願いいたします。。

675 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:21:01 ]
#include <stdio.h>
#include <math.h>

int main(void)
{
double a, b, c, d;

scanf("%lf%lf%lf", &a, &b, &c);

d = b * b - 4 * a * c;

if(d < 0) printf("実数解をもちません\n");
else if(d > 0) printf("%f, %f\n", (-b + sqrt(d))/ (2*a), (-b-sqrt(d)) / (2*a));
else printf("%lf\n", -b / (2 * a));

return 0;
}

676 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:22:01 ]
>>675
っ a==0

677 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:22:07 ]
>>673
> 何故さきに余りを求めて足して
まともに計算したら巨大な数になって、intもlongも超えちゃう。
最終的に下3桁を求めればいいのだから、
乗算と加算だけなら下3桁の範囲だけで計算していれば十分。
合同式とかいうんだっけ?あまり詳しくないけど。

> 1000以上なら1000を引くのか
rtは2000未満なので、余りを求めているのと同じ。

678 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:27:33 ]
>>673
1 + 4 + 27 + 256 において、10で割った余りを求めることにしよう。

1^1 と 2^2 は10を越えていないんでそのままでおk。この時点で余りの合計は5。

3^3は27で10を越え、10で割った余りの7のみを残しておk。5+7=12、
ここで合計も10を越えたから10で割った余りの部分を残して2。

4*4 = 16 は10で割った余りの6のみ残して、次は
本来は16*4 = 64 だが、前の6に4を掛けて24で4のみ残しておk、さらにもう一度
本来は64*4 = 256 だが、前の4に4を掛けて16で6のみでおk
2+6 = 8で、答えはあっているじゃろう。
そうやって、10で割った余りの部分だけを残してべき乗を継続しても成り立つのが分かる。

679 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:33:32 ]
#include <stdio.h>
#define MAX 4
#define MOD 10
int main(void) {
int i, j, rt = 0;
for(i=1; i<=MAX; i++) { int r = 1;
for(j=0; j<i; j++) r = (r * i) % MOD;
rt += r;
if(rt >= MOD) rt%=MOD; } printf("%d\n", rt);
return 0; }

ちょいと拝借して、このソースの MAX 、 MOD を適当に変えてみ。
理屈が成り立つことが分かるから。

680 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:33:50 ]
>>676
>二次方程式



681 名前: ◆nOwZY.WgD2 mailto:sage [2008/06/16(月) 01:35:35 ]
>>651
error C2440: '=' : 'void *' から 'char' に変換できません。
1> この変換が可能なコンテキストはありません。
って出るんですけどどうしたらいいでしょうか

682 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:53:09 ]
>>655
単に strdup() を無神経に使っていることに噛み付いただけなんですけれど‥‥‥。

683 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:17:03 ]
>>681
明示的にキャスト汁
pstr=malloc(256); →pstr=(char *)malloc(256);
pstr=realloc(pstr,512); →pstr=(char *)realloc(pstr,512);


684 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:19:57 ]
>>681
エラーメッセージのコピペかソースコードのコピペで失敗してるんじゃない?

685 名前:デフォルトの名無しさん [2008/06/16(月) 02:20:47 ]
C++だとvoid*を他のポインタ型に代入するときに明示的なキャスト必要なんだっけ?

686 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:20:58 ]
>>681
C++ 扱いでコンパイルしてませんか?

687 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:47:08 ]
[1] 授業単元:C言語入門
[2] 問題文:ある2つの実数aとbを入力し、aの数が3で割り切れる、
      または、bの数が2で割り切れる場合のみに、それらの
      四則演算を行い、その結果を表示するプログラムを作成せよ
[3] 環境
 [3.1] OS: WindowsXP
 [3.3] 言語: C
[4] 期限: 今日中にお願いしたいです。。

よろしくお願いします。

688 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:50:03 ]
>>687
整数ではなくて実数?
実数なら必ず2で割り切れるという扱いでおk?

689 名前: ◆nOwZY.WgD2 mailto:sage [2008/06/16(月) 02:53:04 ]
>>683
それでできました、ありがとうございます><b

690 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 03:14:05 ]
>>688
はい、実数で、
2で割り切れる扱いでお願いいたします(*´д`*)



691 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 03:27:09 ]
>>687
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main(void){
char buf[256];
int i, chk, bufindex;
double a, b;

printf("Input a : ");
scanf("%255s", buf);
if(sscanf(buf, "%lf%n", &a, &bufindex)<1) return 1;
for(i=0,chk=0;i<bufindex;i++) if(isdigit(buf[i])) chk+=buf[i]-'0';
if(chk%3!=0) return 2;

printf("Input b : ");
if(scanf("%lf", &b)<1) return 3;

printf("a+b=%f+%f=%f\n", a, b, a+b);
printf("a-b=%f-%f=%f\n", a, b, a-b);
printf("a*b=%f*%f=%f\n", a, b, a*b);
if(b) printf("a/b=%f/%f=%f\n", a, b, a/b);

return 0;
}

692 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 05:24:04 ]
>>691
それでは「aの数」、「bの数」をどう解釈しても題意を満たさないのでは?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<317KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef