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

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2006/11/06(月) 03:05:19
今時は小学校でもプログラミング教えてるぞ
953デフォルトの名無しさん:2006/11/06(月) 03:06:48
>>950
('∀` とおもったらcygwinさんが/dev/dspをサポーチしてくれてた!!!やった!楽しスwwwwwwwwwwww
954936=942:2006/11/06(月) 03:14:33
>>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) を作成
だけが正常に表示されて他は出ません。

アドバイスか添削お願いします。
955デフォルトの名無しさん:2006/11/06(月) 03:17:30
>>936,>>942,>>954
コンパイラの吐くメッセージの事を言ってるならコピペしてよ
void printf_cd(int,int);

void print_cd(int,int);
956デフォルトの名無しさん:2006/11/06(月) 03:23:12
>>953
どうせコンパイルでき、実行できただけ喜んでんだろw
957デフォルトの名無しさん:2006/11/06(月) 03:30:05
>>894
結局のところ、if文とswitch文を正しく把握してるかどうか試されてるだけだと思うぞ。
エレガントな書き方ではないが、if文をswitch文に置き換えることは可能だし。

あと、自力で考えないでこんなところに丸投げしてる奴に、教授を非難する資格はないよ。
958デフォルトの名無しさん:2006/11/06(月) 03:39:55
>>894
通常は教員としての仕事は評価されない上に、
簡単な問題に対する質問に時間をとられて研究できなくなると
教員にとっての死活問題になるからなぁ…

ここの住人からすれば面白くない問題を出したという意味で、
叩かれても仕方ないけどね
959デフォルトの名無しさん:2006/11/06(月) 03:46:11
>>956
音鳴ったスwwww
やべぇwwww
Win32API使うのなんて目じゃないくらいに簡単wwwww

うは、これでUDP broadcast使ってネット越しに音流せるwwww
960デフォルトの名無しさん:2006/11/06(月) 04:18:35
ヲタ発見
961デフォルトの名無しさん:2006/11/06(月) 04:30:21
(^ω^) フヒヒ
       何とでも言うがいいぉ
         どうせボクの足元にも及ばない愚民の鳴き声なんだぉ
      フヒヒヒヒッヒ
962デフォルトの名無しさん:2006/11/06(月) 04:33:44
(^ω^) 愚民共にお礼を言うぉ
       参考サイトはここだぉ
/dev/dsp on cygwin
http://www.sixnine.net/cygwin/cygwin-doc/devices.html
963デフォルトの名無しさん:2006/11/06(月) 06:57:48
コマンドからいくつか引数を取って
一つの文字列につきメモリをその都度動的に確保し
逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして
出力するプログラム
(動的メモリ割り当て)

スレ違いと言われここに来ました
誰か教えて下さい
964963: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
いってることがさっぱりわけわか

そんなプログラム作ってなんの役に立つの?

966963:2006/11/06(月) 07:20:57
動的メモリ割り当ての復習らしいです
宿題なんでやらなきゃどうしようもない
あとコマンドじゃなくてコマンドラインです
例えば
./○○○ orange appleと入力したら
egnarO
elppA
となるようなプログラムです
誰か教えて下さい
967デフォルトの名無しさん:2006/11/06(月) 07:24:25
>>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;
}
/*
968デフォルトの名無しさん: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;
}
969デフォルトの名無しさん:2006/11/06(月) 07:29:47
>>967
あ、メモリリーク。C++にどっぷり毒されてるから開放忘れてた。
修正修正
    while(*++argv){
        char*p = strrev_(capitalize(strdup_(*argv)));
        if(!p){perror("main:");break;}else puts(p);
        free(p);
    }
970894:2006/11/06(月) 07:37:16
>>957
ここに課題を持込んでここの住人の人達に解いてもらい、その上で教員を
批判するような発言をする権利など無いというのは反論する余地がありません。反省します。
あと、まだ少しですが時間はあるので自分の頭を使って考えてみます。

>>958
自分はまだ研究室に配属されていないので忘れがちですが、先生方の本業は自分の研究ですから
このようなルーチンワークに時間を割かれるのを嫌うということを考えもしませんでした・・・。
971963: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なんておこちゃま言語につかりすぎてるだけでは?
973デフォルトの名無しさん:2006/11/06(月) 08:21:20
今日ageて書き込んでる奴は同一人物かな
批判しかしねぇー
974963:2006/11/06(月) 08:23:17
>>967
967さん上の改造して作れませんか?
マジで分からないです
975デフォルトの名無しさん:2006/11/06(月) 10:07:53
>>941
瑣末なことだけど1/nから足していった方がよくね
mainでは有効数字5桁しかいらないからどうでもいいといえばどうでもいいが
976デフォルトの名無しさん:2006/11/06(月) 10:26:10
>>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
978デフォルトの名無しさん:2006/11/06(月) 13:47:02
>>977
int inc(x){return x+1;}
int dec(x){return x-1;}
979デフォルトの名無しさん:2006/11/06(月) 13:47:27
>>977
何のためのテンプレなんだよ
謝りゃいいって思ってるんならとっとと辞めちまえ

というわけで>>1
980デフォルトの名無しさん:2006/11/06(月) 13:52:27
>>977
int mult2(x){pow(inc(x),2)-pow(x,2)+dec(0);}
981デフォルトの名無しさん:2006/11/06(月) 14:52:15
>>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;
}
982デフォルトの名無しさん:2006/11/06(月) 15:01:20
#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
983936=942:2006/11/06(月) 15:29:07
>>955
コピーのやりかたがわからなかったもので。
学校のPCだとコンパイラの表示を選択してエンター押せばできるんですが
家のやつだと同じコンパイラなのに選択すらできません。

でもそれ直したら動きました。こういうミス多いな。。何回も見たのに。
ありがとうございました。
984デフォルトの名無しさん:2006/11/06(月) 15:32:36
>>979
携帯なんだよそれくらい察しろカス
授業中なんだから早く答えろ
985デフォルトの名無しさん:2006/11/06(月) 15:40:02
>>982
その発想はなかったわ
986デフォルトの名無しさん:2006/11/06(月) 15:40:29
>>984
それは宿題ではないな
987デフォルトの名無しさん:2006/11/06(月) 15:42:36
そのうち

テスト中なんだから早く答えろ

とかレスがつく日がくるのかも
988俺のが正しい:2006/11/06(月) 15:46:53
>>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;
}
989デフォルトの名無しさん:2006/11/06(月) 15:53:28
前に「XX日OO時からテストなんでお前ら時間開けとけよ」とか言ってた奴がいたな。

>>988
xが負の場合どうするの?
990デフォルトの名無しさん:2006/11/06(月) 16:01:51
int mult2(int x){
int i,j;
i=x;
j=x;

while(i&&j){
i=inc(i);
j=dec(j);
}

return i+j;
}
991990:2006/11/06(月) 16:07:12
アホな題意を守りつつ書いたつもりなんだが
読み返してみると982がやってることとほとんど変わらないのが悲しい
992889:2006/11/06(月) 17:59:19
みなさんありがとうございます。
助かります。
993963:2006/11/06(月) 18:45:30
>>976
本当にありがとうございました
感謝です
994デフォルトの名無しさん:2006/11/06(月) 20:13:35
sqrt()関数を使わずに平方根を求めるにはどうしたらいいですか?
995デフォルトの名無しさん:2006/11/06(月) 20:18:46
>>994
級数展開でもニュートン法でもやりかたはよりどりみどり
996デフォルトの名無しさん:2006/11/06(月) 20:21:10
>>994
pow( x, 0.5)
997デフォルトの名無しさん:2006/11/06(月) 20:31:27
>>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;
}
998デフォルトの名無しさん:2006/11/06(月) 20:51:00
新スレたったから埋めるかね
999デフォルトの名無しさん:2006/11/06(月) 20:52:05
1000デフォルトの名無しさん:2006/11/06(月) 20:52:22
埋め
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。