今時は小学校でもプログラミング教えてるぞ
>>950 ('∀` とおもったらcygwinさんが/dev/dspをサポーチしてくれてた!!!やった!楽しスwwwwwwwwwwww
>>946 そうでした。
動かしてみたら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) を作成
だけが正常に表示されて他は出ません。
アドバイスか添削お願いします。
>>936 ,
>>942 ,
>>954 コンパイラの吐くメッセージの事を言ってるならコピペしてよ
void printf_cd(int,int);
↓
void print_cd(int,int);
956 :
デフォルトの名無しさん :2006/11/06(月) 03:23:12
>>953 どうせコンパイルでき、実行できただけ喜んでんだろw
>>894 結局のところ、if文とswitch文を正しく把握してるかどうか試されてるだけだと思うぞ。
エレガントな書き方ではないが、if文をswitch文に置き換えることは可能だし。
あと、自力で考えないでこんなところに丸投げしてる奴に、教授を非難する資格はないよ。
>>894 通常は教員としての仕事は評価されない上に、
簡単な問題に対する質問に時間をとられて研究できなくなると
教員にとっての死活問題になるからなぁ…
ここの住人からすれば面白くない問題を出したという意味で、
叩かれても仕方ないけどね
>>956 音鳴ったスwwww
やべぇwwww
Win32API使うのなんて目じゃないくらいに簡単wwwww
うは、これでUDP broadcast使ってネット越しに音流せるwwww
960 :
デフォルトの名無しさん :2006/11/06(月) 04:18:35
ヲタ発見
(^ω^) フヒヒ 何とでも言うがいいぉ どうせボクの足元にも及ばない愚民の鳴き声なんだぉ フヒヒヒヒッヒ
コマンドからいくつか引数を取って 一つの文字列につきメモリをその都度動的に確保し 逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして 出力するプログラム (動的メモリ割り当て) スレ違いと言われここに来ました 誰か教えて下さい
964 :
963 :2006/11/06(月) 07:03:07
すいませんちゃんと書きます [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):コマンドからいくつか引数を取って 一つの文字列につきメモリをその都度動的に確保し 逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして 出力するプログラム [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: (gcc [3.3] 言語: (C [4] 期限: 今日 [5] その他の制限:
965 :
デフォルトの名無しさん :2006/11/06(月) 07:06:51
いってることがさっぱりわけわか そんなプログラム作ってなんの役に立つの?
966 :
963 :2006/11/06(月) 07:20:57
動的メモリ割り当ての復習らしいです 宿題なんでやらなきゃどうしようもない あとコマンドじゃなくてコマンドラインです 例えば ./○○○ orange appleと入力したら egnarO elppA となるようなプログラムです 誰か教えて下さい
>>964 適当に
#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;
}
/*
*/ 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; }
>>967 あ、メモリリーク。C++にどっぷり毒されてるから開放忘れてた。
修正修正
while(*++argv){
char*p = strrev_(capitalize(strdup_(*argv)));
if(!p){perror("main:");break;}else puts(p);
free(p);
}
970 :
894 :2006/11/06(月) 07:37:16
>>957 ここに課題を持込んでここの住人の人達に解いてもらい、その上で教員を
批判するような発言をする権利など無いというのは反論する余地がありません。反省します。
あと、まだ少しですが時間はあるので自分の頭を使って考えてみます。
>>958 自分はまだ研究室に配属されていないので忘れがちですが、先生方の本業は自分の研究ですから
このようなルーチンワークに時間を割かれるのを嫌うということを考えもしませんでした・・・。
971 :
963 :2006/11/06(月) 07:51:03
>>967-969 ありがとうございます
だけど自分アマチュアなんでちょっと分からない
下のやつ改造して教えてくれませんか?
(間違いは多々あるとおもいますが…)
あと他に条件で一度確保したメモリは次の文字列を処理する前に解放せよ
ってのがありました
#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);
}
972 :
デフォルトの名無しさん :2006/11/06(月) 08:07:49
>>969 C++にどっぷりだと開放忘れる?
意味不明
C#やJAVAなんておこちゃま言語につかりすぎてるだけでは?
今日ageて書き込んでる奴は同一人物かな 批判しかしねぇー
974 :
963 :2006/11/06(月) 08:23:17
>>967 967さん上の改造して作れませんか?
マジで分からないです
>>941 瑣末なことだけど1/nから足していった方がよくね
mainでは有効数字5桁しかいらないからどうでもいいといえばどうでもいいが
>>972 スマートポインタにどっぷりなんだろうよ。
>>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;
}
977 :
デフォルトの名無しさん :2006/11/06(月) 13:45:17
問題1 整数xに1を加えた値を返す関数inc(x)と、1を引いた値を返す関数dec(x)をつくれ。 問題2 整数xを2倍した値を返す関数mult2(x)をつくれ。但し、乗算*を使ってはいけない。 問題1で用いたinc(x)とdec(x)を用いること。 (ヒント:inc(x)とdec(x)を同じ回数だけdec(x)が0になるまで繰り返す) テンプレ無視ってスマソor2
>>977 int inc(x){return x+1;}
int dec(x){return x-1;}
>>977 何のためのテンプレなんだよ
謝りゃいいって思ってるんならとっとと辞めちまえ
というわけで
>>1
>>977 int mult2(x){pow(inc(x),2)-pow(x,2)+dec(0);}
>>977 #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;
}
#include <stdio.h> int 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
>>955 コピーのやりかたがわからなかったもので。
学校のPCだとコンパイラの表示を選択してエンター押せばできるんですが
家のやつだと同じコンパイラなのに選択すらできません。
でもそれ直したら動きました。こういうミス多いな。。何回も見たのに。
ありがとうございました。
>>979 携帯なんだよそれくらい察しろカス
授業中なんだから早く答えろ
そのうち テスト中なんだから早く答えろ とかレスがつく日がくるのかも
>>977 int 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;
}
前に「XX日OO時からテストなんでお前ら時間開けとけよ」とか言ってた奴がいたな。
>>988 xが負の場合どうするの?
int mult2(int x){ int i,j; i=x; j=x; while(i&&j){ i=inc(i); j=dec(j); } return i+j; }
991 :
990 :2006/11/06(月) 16:07:12
アホな題意を守りつつ書いたつもりなんだが 読み返してみると982がやってることとほとんど変わらないのが悲しい
992 :
889 :2006/11/06(月) 17:59:19
みなさんありがとうございます。 助かります。
993 :
963 :2006/11/06(月) 18:45:30
>>976 本当にありがとうございました
感謝です
994 :
デフォルトの名無しさん :2006/11/06(月) 20:13:35
sqrt()関数を使わずに平方根を求めるにはどうしたらいいですか?
995 :
デフォルトの名無しさん :2006/11/06(月) 20:18:46
>>994 級数展開でもニュートン法でもやりかたはよりどりみどり
>>994 ニュートン法の学習的実装。
#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;
}
新スレたったから埋めるかね
埋め
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。