C/C++の宿題を片付けます 75代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/10/19(木) 20:39:01【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
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
0951デフォルトの名無しさん
2006/11/06(月) 03:03:060952デフォルトの名無しさん
2006/11/06(月) 03:05:190953デフォルトの名無しさん
2006/11/06(月) 03:06:48('∀` とおもったらcygwinさんが/dev/dspをサポーチしてくれてた!!!やった!楽しスwwwwwwwwwwww
0954936=942
2006/11/06(月) 03:14:33そうでした。
動かしてみたら11行目のprint_cd(a,b); あたりにエラー出てまず動きません。
プログラムの書き方自体に問題があるようです。
mainからgcdとprint_cdを呼び出すようんしたいんですが、
2つを同時にする方法が分かりません。
ちなみに11行目のprint_cd(a,b); 削除したらプログラムは動作するようになりますが
>>508の問題文の
# 2つの自然数 a, b に対し, a と b の最大公約数を求める関数 int gcd(int a, int b) を作成
だけが正常に表示されて他は出ません。
アドバイスか添削お願いします。
0955デフォルトの名無しさん
2006/11/06(月) 03:17:30コンパイラの吐くメッセージの事を言ってるならコピペしてよ
void printf_cd(int,int);
↓
void print_cd(int,int);
0956デフォルトの名無しさん
2006/11/06(月) 03:23:12どうせコンパイルでき、実行できただけ喜んでんだろw
0957デフォルトの名無しさん
2006/11/06(月) 03:30:05結局のところ、if文とswitch文を正しく把握してるかどうか試されてるだけだと思うぞ。
エレガントな書き方ではないが、if文をswitch文に置き換えることは可能だし。
あと、自力で考えないでこんなところに丸投げしてる奴に、教授を非難する資格はないよ。
0958デフォルトの名無しさん
2006/11/06(月) 03:39:55通常は教員としての仕事は評価されない上に、
簡単な問題に対する質問に時間をとられて研究できなくなると
教員にとっての死活問題になるからなぁ…
ここの住人からすれば面白くない問題を出したという意味で、
叩かれても仕方ないけどね
0959デフォルトの名無しさん
2006/11/06(月) 03:46:11音鳴ったスwwww
やべぇwwww
Win32API使うのなんて目じゃないくらいに簡単wwwww
うは、これでUDP broadcast使ってネット越しに音流せるwwww
0960デフォルトの名無しさん
2006/11/06(月) 04:18:350961デフォルトの名無しさん
2006/11/06(月) 04:30:21何とでも言うがいいぉ
どうせボクの足元にも及ばない愚民の鳴き声なんだぉ
フヒヒヒヒッヒ
0962デフォルトの名無しさん
2006/11/06(月) 04:33:44参考サイトはここだぉ
/dev/dsp on cygwin
http://www.sixnine.net/cygwin/cygwin-doc/devices.html
0963デフォルトの名無しさん
2006/11/06(月) 06:57:48一つの文字列につきメモリをその都度動的に確保し
逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして
出力するプログラム
(動的メモリ割り当て)
スレ違いと言われここに来ました
誰か教えて下さい
0964963
2006/11/06(月) 07:03:07[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):コマンドからいくつか引数を取って
一つの文字列につきメモリをその都度動的に確保し
逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして
出力するプログラム
[3] 環境
[3.1] OS: unix
[3.2] コンパイラ名とバージョン: (gcc
[3.3] 言語: (C
[4] 期限: 今日
[5] その他の制限:
0965デフォルトの名無しさん
2006/11/06(月) 07:06:51そんなプログラム作ってなんの役に立つの?
0966963
2006/11/06(月) 07:20:57宿題なんでやらなきゃどうしようもない
あとコマンドじゃなくてコマンドラインです
例えば
./○○○ orange appleと入力したら
egnarO
elppA
となるようなプログラムです
誰か教えて下さい
0967デフォルトの名無しさん
2006/11/06(月) 07:24:25適当に
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stddef.h>
#include<ctype.h>
char*strdup_(char*s);
char*capitalize(char*s);
char*strrev_(char*s);
int main(int argc,char**argv){
(void)argc;//unused
while(*++argv){
char*p = strrev_(capitalize(strdup_(*argv)));
if(!p){perror("main:");break;}else puts(p);
}
return 0;
}
/*
0968デフォルトの名無しさん
2006/11/06(月) 07:25:26*/
char*strdup_(char*s){
size_t len = strlen(s);
char*p = (char*)malloc(len+1);
if(p)memcpy(p,s,len+1);
return p;
}
char*capitalize(char*s){
if(s)*s = (char)toupper(*s);
return s;
}
char*strrev_(char*s){
size_t len,i;
if(!s)return s;
len = strlen(s);
for(i=0;i<--len;++i){char c=s[i];s[i]=s[len];s[len]=c;}
return s;
}
0969デフォルトの名無しさん
2006/11/06(月) 07:29:47あ、メモリリーク。C++にどっぷり毒されてるから開放忘れてた。
修正修正
while(*++argv){
char*p = strrev_(capitalize(strdup_(*argv)));
if(!p){perror("main:");break;}else puts(p);
free(p);
}
0970894
2006/11/06(月) 07:37:16ここに課題を持込んでここの住人の人達に解いてもらい、その上で教員を
批判するような発言をする権利など無いというのは反論する余地がありません。反省します。
あと、まだ少しですが時間はあるので自分の頭を使って考えてみます。
>>958
自分はまだ研究室に配属されていないので忘れがちですが、先生方の本業は自分の研究ですから
このようなルーチンワークに時間を割かれるのを嫌うということを考えもしませんでした・・・。
0971963
2006/11/06(月) 07:51:03ありがとうございます
だけど自分アマチュアなんでちょっと分からない
下のやつ改造して教えてくれませんか?
(間違いは多々あるとおもいますが…)
あと他に条件で一度確保したメモリは次の文字列を処理する前に解放せよ
ってのがありました
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
int i, j, elem;
char *array;
if(argc == 1){
exit(1);
}
elem = argc - 1;
array = malloc(elem * sizeof(char));
ここらへんがわかりません
printf("\n");
free(array);
}
0972デフォルトの名無しさん
2006/11/06(月) 08:07:49C++にどっぷりだと開放忘れる?
意味不明
C#やJAVAなんておこちゃま言語につかりすぎてるだけでは?
0973デフォルトの名無しさん
2006/11/06(月) 08:21:20批判しかしねぇー
0975デフォルトの名無しさん
2006/11/06(月) 10:07:53瑣末なことだけど1/nから足していった方がよくね
mainでは有効数字5桁しかいらないからどうでもいいといえばどうでもいいが
0976デフォルトの名無しさん
2006/11/06(月) 10:26:10スマートポインタにどっぷりなんだろうよ。
>>974
俺は>>967ではないが。これ以上初心者向けには(俺には)できない。
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i, j, length;
char *a, temp;
if (argc == 1) exit(1); /* 引数なしなら終了 */
for (i = 1; i < argc; i++) { /* それぞれの引数に対して */
length = strlen(argv[i]); /* 引数の文字数 */
a = malloc(length + 1); /* 文字数分だけメモリの確保 */
strcpy(a, argv[i]); /* aに引数をコピー */
for (j = 0; j < length / 2; j++) { /* 文字列を反転 */
temp = a[j]; /* あらかじめ文字を保存しておいて */
a[j] = a[length - j - 1]; /* 手前を後ろの文字で置き換えて */
a[length - j - 1] = temp; /* 後ろの文字をあらかじめ保存した文字で置き換える */
}
a[length - 1] = toupper(a[length - 1]); /* 最後の文字を大文字に */
printf(a); /* 表示 */
free(a); /* 確保したメモリの開放 */
printf("\n"); /* 改行 */
}
return 0;
}
0977デフォルトの名無しさん
2006/11/06(月) 13:45:17問題2 整数xを2倍した値を返す関数mult2(x)をつくれ。但し、乗算*を使ってはいけない。
問題1で用いたinc(x)とdec(x)を用いること。
(ヒント:inc(x)とdec(x)を同じ回数だけdec(x)が0になるまで繰り返す)
テンプレ無視ってスマソor2
0978デフォルトの名無しさん
2006/11/06(月) 13:47:02int inc(x){return x+1;}
int dec(x){return x-1;}
0979デフォルトの名無しさん
2006/11/06(月) 13:47:27何のためのテンプレなんだよ
謝りゃいいって思ってるんならとっとと辞めちまえ
というわけで>>1
0980デフォルトの名無しさん
2006/11/06(月) 13:52:27int mult2(x){pow(inc(x),2)-pow(x,2)+dec(0);}
0981デフォルトの名無しさん
2006/11/06(月) 14:52:15#include <stdio.h>
int inc(int x) {return x + 1;}
int dec(int x) {return x - 1;}
int mul2(int x) {
int x2;
for (x2 = x; x != 0; x = dec(x), x2 = inc(x2)) ;
return x2;
}
int main(void) {
printf("%d\n", mul2(10));
return 0;
}
0982デフォルトの名無しさん
2006/11/06(月) 15:01:20int inc(int x) {return x + 1;}
int dec(int x) {return x - 1;}
int mul2(int x) {
return dec(x)+inc(x);
}
int main(void) {
printf("%d\n", mul2(10));
return 0;
}
(ヒント:inc(x)とdec(x)を同じ回数だけdec(x)が0になるまで繰り返す)
使ってないけどw
0983936=942
2006/11/06(月) 15:29:07コピーのやりかたがわからなかったもので。
学校のPCだとコンパイラの表示を選択してエンター押せばできるんですが
家のやつだと同じコンパイラなのに選択すらできません。
でもそれ直したら動きました。こういうミス多いな。。何回も見たのに。
ありがとうございました。
0984デフォルトの名無しさん
2006/11/06(月) 15:32:36携帯なんだよそれくらい察しろカス
授業中なんだから早く答えろ
0985デフォルトの名無しさん
2006/11/06(月) 15:40:02その発想はなかったわ
0986デフォルトの名無しさん
2006/11/06(月) 15:40:29それは宿題ではないな
0987デフォルトの名無しさん
2006/11/06(月) 15:42:36テスト中なんだから早く答えろ
とかレスがつく日がくるのかも
0988俺のが正しい
2006/11/06(月) 15:46:53int inc(int x) {return x + 1;}
int dec(int x) {return x - 1;}
int mult2(int x){
int i,y;
i=x;
y=x;
while(i>0){
y=inc(y);
i=dec(i);
}
return y;
}
0989デフォルトの名無しさん
2006/11/06(月) 15:53:28>>988
xが負の場合どうするの?
0990デフォルトの名無しさん
2006/11/06(月) 16:01:51int i,j;
i=x;
j=x;
while(i&&j){
i=inc(i);
j=dec(j);
}
return i+j;
}
0991990
2006/11/06(月) 16:07:12読み返してみると982がやってることとほとんど変わらないのが悲しい
0992889
2006/11/06(月) 17:59:19助かります。
0994デフォルトの名無しさん
2006/11/06(月) 20:13:350995デフォルトの名無しさん
2006/11/06(月) 20:18:46級数展開でもニュートン法でもやりかたはよりどりみどり
0996デフォルトの名無しさん
2006/11/06(月) 20:21:10pow( x, 0.5)
0997デフォルトの名無しさん
2006/11/06(月) 20:31:27ニュートン法の学習的実装。
#include <stdio.h>
#define eps 0.00000001
double myroot(double x) {
double ym = x, yn;
do {
yn = ym;
ym = 0.5 * (yn * yn + x) / yn;
} while (ym - yn > eps || yn - ym > eps);
return ym;
}
int main(void) {
printf("%.8f\n", myroot(2));
return 0;
}
0998デフォルトの名無しさん
2006/11/06(月) 20:51:000999デフォルトの名無しさん
2006/11/06(月) 20:52:05次こっちよ
1000デフォルトの名無しさん
2006/11/06(月) 20:52:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。