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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 2.9 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++の宿題を片付けます 58代目
http://pc8.2ch.net/test/read.cgi/tech/1137522945/
【過去スレ一覧】
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
2デフォルトの名無しさん:2006/01/27(金) 09:19:11
  ∧__∧
  (`・ω・´) >>1
 .ノ^ yヽ、
 ヽ,,ノ==l ノ
  /  l |
~""""""~"""~"""~"
3デフォルトの名無しさん:2006/01/27(金) 09:23:00
:::::::::::.: .:. . ∧_∧ . . . .: ::::::::
:::::::: :.: . . /彡ミ゛ヽ;)ヽ、. ::: : ::
::::::: :.: . . / :::/:: ヽ、ヽ、i . .:: :.: :::
 ̄ ̄ ̄(_,ノ  ̄ ̄ヽ、_ノ ̄
>>1
4りんご:2006/01/27(金) 12:59:02
【質問テンプレ】
[1] プログラミング入門
[2] タイピングソフトを考えて作成しなさい。
  というだけです。そこで、英語を5文字1文を表示して、その下に
  タイプした文字を表示していく。1行打ち終わった時に、3文字
  以上間違っていたら、もう一度同じ文が表示され、繰り返す…
  というものを作りたいと考えました。
[3] 環境
 [3.1] OS:Unix
 [3.2] よく分かりません。
 [3.3] 言語:C
[4] 期限:2006年1月28日12:00まで
[5] 先ほど、「Cでタイピングソフトを作りたい」というスレを
  立ててしまったのですが、そこにも書いた通り、Cを初めて
  2週間です。
5デフォルトの名無しさん:2006/01/27(金) 13:02:19
>>4
前スレ使い終わってからこっちを使えボケ
スレ削除依頼出してきたのか?
6デフォルトの名無しさん:2006/01/27(金) 13:06:13
それ宿題か?
7デフォルトの名無しさん:2006/01/27(金) 13:42:07
6、4、3、8、1という数字を昇順に並びかえよ。と言う問題が分かりません。
SWAPという並び替えの関数とバブルソートの関数をつかってプログラミングをつくる
のが条件です。あとwhile文は使わずにfor文だけをつかいたいです。
どなたかこの問題を解いて下さいませんか?宜しくお願いします。
8デフォルトの名無しさん:2006/01/27(金) 13:42:56
#include <stdio.h>
#include <time.h>

static struct { const char* kana; const char* alpha; }
  problems[] = {
    {"水俣", "minamata"},
    {"イタイイタイ", "itaiitai"},
    {"四日市", "yokkaichi"},
    {"新潟", "nigata"}
  };

int main(void) {
  int i;
  time_t t = time(NULL);
  for(i=0; i < sizeof(problems) / sizeof(*problems); i++) {
    printf("問題 %d:\n", i+1);
    while(1) {
      int c = 0;
      printf("\t%s (%s)\n", problems[i].kana, problems[i].alpha);
      while(problems[i].alpha[c] == getchar()) c++;
      fseek(stdin, 0, SEEK_END);
      if(problems[i].alpha[c] == '\0') break;
      puts("やり直せ。");
    }
  }
  t = time(NULL) - t;
  printf("評価: あなたは%s。", (t < 1)? "神レベル": (t < 10)? "凡人": "なめくじ");
  return 0;
}
9デフォルトの名無しさん:2006/01/27(金) 14:18:12
前スレ埋め立て完了しますた (。・x・)ゝ
10デフォルトの名無しさん:2006/01/27(金) 14:37:46
>>7
#include <stdio.h>

void swap(int *a, int *b)
{
    int tmp;
    tmp=*a;
    *a=*b;
    *b=tmp;
}

int main()
{
    int num[]={6,4,3,8,1};
    int i, j, num_size;

    num_size=sizeof(num)/sizeof(int);

    for (i=0 ; i<num_size ; i++)
        for (j=num_size-1 ; j>i ; j--)
            if (num[j-1] > num[j])
                swap(&num[j-1], &num[j]);

    for (i=0 ; i<num_size ; i++)
        printf("%d\n", num[i]);

    return 0;
}
11デフォルトの名無しさん:2006/01/27(金) 14:46:22
前すれ埋めた馬鹿どもはなんだ
厨房板やVIPじゃあるまいし
VIPなめるとと酷いお(# ^ω^)
13デフォルトの名無しさん:2006/01/27(金) 14:52:00
V(IPPER)作戦参謀本部
ttp://yy11.kakiko.com/test/read.cgi/news4vip/1122044336/
ワンクリ業者殲滅!
14デフォルトの名無しさん:2006/01/27(金) 14:56:23
>>11
残念ながらプログラム板にもVIPのカス共はいるってことさ
15デフォルトの名無しさん:2006/01/27(金) 15:01:56
VIPから来ました。
16デフォルトの名無しさん:2006/01/27(金) 15:02:28
VIPのほうからきました
17デフォルトの名無しさん:2006/01/27(金) 15:03:13
間違いなくVIPからきました
18デフォルトの名無しさん:2006/01/27(金) 15:03:14
 *     +    巛 ヽ
            〒 !   +    。     +    。     *     。
      +    。  |  |
   *     +   / /   イヤッッホォォォオオォオウ!
       ∧_∧ / /
      (´∀` / / +    。     +    。   *     。
      ,-     f
      / ュヘ    | *     +    。     +   。 +
     〈_} )   |                                それがVIPクオリティ
        /    ! +    。     +    +     *         http://ex7.2ch.net/news4vip/
       ./  ,ヘ  |
 ガタン ||| j  / |  | |||
――――――――――――  
19デフォルトの名無しさん:2006/01/27(金) 15:03:38
Vipからきました
20デフォルトの名無しさん:2006/01/27(金) 15:04:43
ぶいあいぴーからきますた
21デフォルトの名無しさん:2006/01/27(金) 15:04:59


                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´
「vipから来ますた」「vipから来ますた」「vipから来ますた」「vipから来ますた」
22デフォルトの名無しさん:2006/01/27(金) 15:05:01
荒らすなバカ
23デフォルトの名無しさん:2006/01/27(金) 15:05:59
remove関数でvip掃討キボン
24デフォルトの名無しさん:2006/01/27(金) 15:08:22
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´
「vipから来ますた」「vipから来ますた」「vipから来ますた」「vipから来ますた」
25デフォルトの名無しさん:2006/01/27(金) 15:08:44
>>23
NGキーワードに指定しろ
26デフォルトの名無しさん:2006/01/27(金) 15:10:07
>>14格好つけんなよ厨房が( ^ω^)ママの乳でも吸ってろ
27デフォルトの名無しさん:2006/01/27(金) 15:10:41
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´
「VIPからきますた」「VIPからきますた」「VIPからきますた」「VIPからきますた」
28デフォルトの名無しさん:2006/01/27(金) 15:14:23
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
VIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIPVIP
29デフォルトの名無しさん:2006/01/27(金) 15:15:30
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´
「VIPからきますた」「VIPからきますた」「VIPからきますた」「VIPからきますた」
30デフォルトの名無しさん:2006/01/27(金) 15:16:41
31デフォルトの名無しさん:2006/01/27(金) 15:17:40
てか
7はCなら俺に聞けすれでも聞いてたマルチ野郎だぞ
テンプレぐらい守れってんだ
32vipper:2006/01/27(金) 15:19:23
呼んだか?
33デフォルトの名無しさん:2006/01/27(金) 15:19:31
というかバブルソートくらいは自分でやってくれないと
何を教えても無駄な気がするのだが。
34デフォルトの名無しさん:2006/01/27(金) 15:20:57
VIPって何だ?
3530:2006/01/27(金) 15:28:01
まあバブルソートはともかくワイド文字の扱いは難しいし。
というわけでless_wchar_tとmainを修正

int less_wchar_t(wchar_t lhs, wchar_t rhs)
{
int i, len;
static int is_first = 1;
static char temp[] = "0123456789";
static wchar_t table[100];

if (is_first) {
is_first = 0;
len = mbstowcs(table, temp, sizeof(temp)) + 1;
}

for (i = 0; i < len; i++) {
if (table[i] == lhs)
return table[i] != rhs;

if (table[i] == rhs)
return 0;
}

return 0;
}
3630:2006/01/27(金) 15:28:38
int main(void)
{
char table[] = "64381";
wchar_t work[100];
int len;
setlocale(LC_ALL, "");

mbstowcs(work, table, sizeof(work)/sizeof(work[0]) - 1);
printf("before :%ls\n", work);
bubble_sort(work, wcslen(work));
printf("after :%ls\n", work);

return 0;
}
37デフォルトの名無しさん:2006/01/27(金) 15:29:51
プログラミングを作るって何だろう?
38デフォルトの名無しさん:2006/01/27(金) 15:32:44
>>30
>>10じゃ駄目なのか?
39デフォルトの名無しさん:2006/01/27(金) 15:34:08
30は何を必死にそんな答えたがっているのだろうか
40デフォルトの名無しさん:2006/01/27(金) 15:43:17
>>38
駄目だろ。バブルソートの関数を使ってないんだから。
41デフォルトの名無しさん:2006/01/27(金) 15:48:16
VIPから絶対来てません
42デフォルトの名無しさん:2006/01/27(金) 15:52:47
VIPをバカにするやつがいると聞いてやってきましたがここですか?
VIPはおかしなことをする奴は多いけど礼節知らずが多いとは違うんだぞ。
43デフォルトの名無しさん:2006/01/27(金) 15:58:23
>>7
#include <stdio.h>
#include <stdlib.h>

void swap(int* lhs, int* rhs)
{
    int old = *lhs;

    *lhs = *rhs;
    *rhs = old;
}

int bubble_sort(const void* lhs, const void* rhs)
{ return *(int*)lhs - *(int*)rhs; }

int main(void)
{
    int i;
    int n[] = { 6, 4, 3, 8, 1 };

    for (i = 0; i < sizeof(n) / sizeof(n[0]); ++i) {
        swap(&n[i], n + rand() % (sizeof(n) / sizeof(n[0])));
    }

    qsort(n, sizeof(n) / sizeof(n[0]), sizeof(int), &bubble_sort);

    for (i = 0; i < sizeof(n) / sizeof(n[0]); ++i) {
        printf("%d ", n[i]);
    }

    return 0;
}
44デフォルトの名無しさん:2006/01/27(金) 15:58:39
あぁ・・・そうですか。
あんたにとっては葬式中に屁をブッブこきながら笑うのも礼儀知らずのうちに入らないんだろうね。
45デフォルトの名無しさん:2006/01/27(金) 16:01:37
葬式会場だったのか。
46デフォルトの名無しさん:2006/01/27(金) 16:22:33
自分自身は何もやってないくせに
「俺たちVIPPERは凄いことやってる」とか息巻いてるカス共ww
47デフォルトの名無しさん:2006/01/27(金) 16:24:05
逮捕される奴ってVIPPER率たかくね?
48デフォルトの名無しさん:2006/01/27(金) 16:25:47
VIPの悪口書くとVIPPERの内お調子者の連中がくるから
や め れ
49デフォルトの名無しさん:2006/01/27(金) 16:28:08
悪口書いてるのもVIPPERですがなにか?
50デフォルトの名無しさん:2006/01/27(金) 16:28:20
VIPの前を通り過ぎてきました
51デフォルトの名無しさん:2006/01/27(金) 16:30:40
>>49

>>44

>>11
みたいなのをヤメレってことだ
52デフォルトの名無しさん:2006/01/27(金) 16:32:08
>>48
× VIPの悪口書くとVIPPERの内お調子者の連中がくるから
○ VIPの悪口書くと屑VIPPER共の最底辺の連中がくるから
53デフォルトの名無しさん:2006/01/27(金) 16:32:55
>>51
お前が一番煽ってるという事を自覚してないようだな
54デフォルトの名無しさん:2006/01/27(金) 16:39:24
>>53
熱くなるな バグ作り込むぞ
55デフォルトの名無しさん:2006/01/27(金) 16:57:22
ドウモ〜〜〜ッ!!お〜o( ^ω^ )oは〜♪ハジメマシテ〜〜〜ッ☆☆(*^ω^*)ブーン
私は27歳のOLしてるのぉ〜〜〜っ♪(#^ω^#)ブーン
うーんとー、私メル友がすっごくすっごく欲しくってー、\( ^ω^ )/ブーン
探してたら( ^ω^ )なんσ( ^ω^ )とっ!☆彡(ノ^ω^)ノ☆彡ヘ(^ω^ヘ)☆彡(ノ^ω^)ノ☆彡
素敵(^ω^;ブーン!な掲示板♪を発見!!!!( ^ω^)//""" パチパチパチブーン
あやしい所(^ω^;ブーン!とか…{{ (^ω^;) }} ブルブルブーンすごい数の掲示板がありますけど、
これ全部1人の方が管理して   ∩
てなわけで、ついついσ( ^ω^ )  | | /⌒',ノ ̄ ̄`ヽ、―ニ        メキメキメキメキッ!!!!
メル友に、なってσ( ^ω^ )くれる ヽ(^ω/ ´`ヽ _  三,:三ー三,:
え?くれないのぉ〜?(;^ω^ )そんノ .ノヽ--/ ̄ ,    `   ` ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
なってくれなかったら、( ^ω^)乂(^(  }.  ...|  /!
☆○(^ω^)o ぱ〜んちブーン、☆(\ }、ー‐し'ゝL _
( ^ω^ ) いてっ!ダメ!! ゛o(^ω^*)o\_jr--‐‐'´}    ;ーー------------------------------
素敵(^ω^;ブーン!な掲示板♪ブ━`ヾ---‐'ーr‐'"==!!!( ^ω^)//""" パチパチパチブーン
( ^ω^ )きゃ〜〜(^ω^;)やられた〜〜(o^ω^)o ドテッブーン ブ━━(^ω^;)━━ン!
( ^ω^ )←気絶中。。。。・゜゜・o( ^ω^ )o・゜゜・。うぇぇん <( ^ω^;)>ノォオオオオオ!!ブーン 
なあんて(#^ω^#)こんな♪(#^ω^#)キャハブーン 私っ!σ( ^ω^ )だけど、(///^ω^///)
お友達σ( ^ω^ )になってm( ^ω^ )mくださいませませブーン♪(^ω^'*)フフブーン
ということで。(^ω^)vじゃあね〜〜〜ブーン♪( ^ω^ )/~~ ほんじゃo(^ω^ヽ)(/^ω^)o レッツブーン♪
それでは、今から他の掲示(^ω^;ブーン!板も色々見てきまーすC= C= C= C=┌(^ω^)┘ブーン
(*^ω^*)ノ~~マタネー☆'.・*.・:★'.・*.・:☆'.・*.・:★
56デフォルトの名無しさん:2006/01/27(金) 16:58:40
>>7
#include <stdio.h>
void swap(int *a, int *b)
{
    int tmp;
    tmp=*a;
    *a=*b;
    *b=tmp;
}
void bubble_sort(int *num, int num_size)
{
    int i,j;
    for (i=0 ; i<num_size ; i++)
        for (j=num_size-1 ; j>i ; j--)
            if (num[j-1] > num[j])
                swap(&num[j-1], &num[j]);
}

int main()
{
    int num[]={6,4,3,8,1};
    int i, num_size;

    num_size=sizeof(num)/sizeof(int);
    bubble_sort(num, num_size);

    for (i=0 ; i<num_size ; i++)
        printf("%d\n", num[i]);

    return 0;
}
57デフォルトの名無しさん:2006/01/27(金) 17:57:20
1. キーボードから10個の実数を配列 double a[10] に読み込み、合計、平均、
及び最大値、最小値を求めて表示するプログラムを作れ。

ヒント: for(i=0;i<10;i++){ printf("a[%d]=??";i); scanf("%lf",&a[i]);}
でa[0],a[1],...,a[9] を入力!!
(次に) saidai=a[0];
そのあと、計算の為にforループを作るが、
(ループの中で) if (a[i]>saidai) saidai=a[i];
は何を表わすか?きっと最大値を求めるプログラム関連だろう。
しくみがわかれば最小値も同様にわかる。

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows Me
 [3.2] すいません、わかりません
 [3.3] 言語: C
[4] 期限: [2006年01月30日まで]
[5] その他の制限:特にありません。

これがわかりません、教えてください
58デフォルトの名無しさん:2006/01/27(金) 18:07:37
>>57
#include<stdio.h>
int main(void){
double a[10],sum=0.0,saidai,saisyo,c;
int i;
for(i=0;i<10;i++){
scanf("%lf",&a[i]);
sum += a[i];
}
saidai = a[0];
for(i=1;i<10;i++)
if(a[i]>saidai)
saidai = a[i];
saisyo = a[0];
for(i=1;i<10;i++)
if(a[i]<saisyo)
saisyo = a[i];
printf("合計:%f\n平均:%f\n最大:%f\n最小:%f\n",sum,sum/10.0,saidai,saisyo);
return 0;
}
59デフォルトの名無しさん:2006/01/27(金) 18:10:10
>>57

void main(void)
{
int i;
double a[10];
double saidai, saishou, goukei=0, heikin;
for(i=0;i<10;i++) {
printf("a[%d]=??";i);
scanf("%lf",&a[i]);
}
saidai= saishou = a[0];
for(i=0;i<10;i++) {
goukei += a[i];
if(a[i]>saidai) saidai=a[i];
if(a[i]<saishou) saishou=a[i];
}
heikin = goukei / 10;
printf("%lf, %lf, %lf, %lf\n", saidai, saishou, goukei, heikin);
return;
}

出題者の意向にできるだけ忠実にしたつもり。
変数はダサく、初心者っぽくw
60デフォルトの名無しさん:2006/01/27(金) 18:11:21
>>57
#define NUM    10
#include <stdio.h>

int main()
{
    float num[NUM],max,min,avg,sum=0;
    int i;

    for (i=0 ; i<NUM ; i++)
        scanf("%f", &num[i]);

    for (i=0 ; i<NUM ; i++)
        sum+=num[i];

    avg=sum/NUM;

    max=num[0];
    for (i=1 ; i<NUM ; i++)
        if (num[i]>max)
            max=num[i];
    
    min=num[0];
    for (i=1 ; i<NUM ; i++)
        if (num[i]<min)
            min=num[i];

    for (i=0 ; i<NUM ; i++)
        printf("%fd\n", num[i]);
    printf("\nmax:%f\nmin:%f\navg%f\nsum:%f\n", max, min, avg, sum);
    return 0;
}
61デフォルトの名無しさん:2006/01/27(金) 18:13:18
>>59
goukei = saidai= saishou = a[0];
for(i=1;i<10;i++) {
goukei += a[i];
if(a[i]>saidai) saidai=a[i];
if(a[i]<saishou) saishou=a[i];
}

<二修正ダ>
62デフォルトの名無しさん:2006/01/27(金) 18:13:59
averageを求めるのにオーバーフローを恐れて

double average = 0;

for(int i=0;i<10;i++) average += lpArr[i]/10;
ってのはだめかな
63デフォルトの名無しさん:2006/01/27(金) 18:14:30
>>59
saidai= saishou = a[0];
これは何か初心者っぽくないw
64デフォルトの名無しさん:2006/01/27(金) 18:30:48
>>62
そんな小手先の修正でなんとかなるようなオーバーフローならどんなやり方でやっても構わんよ。
実際に現れるオーバーフローを気にしなきゃいかん場合ってのは、そんなのが全然通用しないくらいにヤバくなる。
65デフォルトの名無しさん:2006/01/27(金) 18:33:43
>>63
+=もだめだなw
66デフォルトの名無しさん:2006/01/27(金) 18:33:57
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1556.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1557.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1558.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006/01/30
[5] その他の制限:
1558.txtは自分で一応やってみたものですが、3+4みたいな簡単なモノならできますが
3+4*5みたいになると結果がおかしくなってしまいます。
正しく動くように修正してもらえないでしょうか
67デフォルトの名無しさん:2006/01/27(金) 18:36:46
電卓とか再起ばりばりのプログラム(´・ω・`)
68デフォルトの名無しさん:2006/01/27(金) 18:36:52
>>66
長すぎて読む気が起きん.一から作ったほうが早そう.
69デフォルトの名無しさん:2006/01/27(金) 18:39:08
「ここを書こう」ってとこだけを書くって制約なので・・・
70デフォルトの名無しさん:2006/01/27(金) 19:00:29
マジで読みたくねぇw
71デフォルトの名無しさん:2006/01/27(金) 19:03:57
>>69
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1559.c

結局読む気が起きなかったので,読まずに書いた.いくらかやって動作確認はしたけど合ってる自信は無いよ.
72デフォルトの名無しさん:2006/01/27(金) 19:09:15
宿題の趣旨と異なるじゃん
回答したくなかったら黙殺でいいじゃないか
7371:2006/01/27(金) 19:12:06
>>72
え?趣旨は捕らえてるつもりなんだけど,なんかまずかった?
74デフォルトの名無しさん:2006/01/27(金) 19:16:17
ごめ、リンク先見てなかった
読まずに書いたってあるから1から書いたかと思ってしまったよ。すまない
75デフォルトの名無しさん:2006/01/27(金) 19:38:22
>>71
ありがとうございます
感謝します
76デフォルトの名無しさん:2006/01/27(金) 19:40:53
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): 10人の名前、年齢、電話番号の入ったファイルを作り、それを読み出すプログラムを作れ。
そのとき、ファイル名は画面上で自由に設定でき、ファイルの拡張子はdatとなるようにせよ。
また、ファイル名が8文字を越えると、入力したファイル名は無効となり、再度ファイル名の入力を要請できるようにせよ。
問題上のファイルに新たに1人のデータを追加するためのプログラムを作れ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: すいませんわかりません
 [3.3] 言語:C
[4] 期限:2006年1月30日まで
[5] その他の制限: 初心者なので、あまり難しくないものでお願いします。

前スレで質問の意味がわからないと言われてしまい、答えがもらえませんでした・・・
すみませんがお願いします。
77デフォルトの名無しさん:2006/01/27(金) 19:42:28
意味がわからんもんはわからん
問題文が抽象的過ぎる
そんな抽象的な奴はBasicでもやってろ
78デフォルトの名無しさん:2006/01/27(金) 19:42:41
だから読み込んだデータどうするんだっつの
追記でいいのか上書きなのか
79デフォルトの名無しさん:2006/01/27(金) 19:48:11
そのとき、ファイル名は画面上で自由に設定でき、ファイルの拡張子はdatとなるようにせよ。
また、ファイル名が8文字を越えると、入力したファイル名は無効となり、再度ファイル名の入力を要請できるようにせよ。

はしょってるが、
scanf("%s", filename);
fp = fopen(filename, "r");
while ((c = fgetc(fp)) != EOF) putchar(c);

問題上のファイルに新たに1人のデータを追加するためのプログラムを作れ。
scanf("%s", filename);
getchar();
fgets(buf, sizeof(buf), stdin);
fp = fopen(filename, "a");
fputs(buf, fp);
80デフォルトの名無しさん:2006/01/27(金) 19:49:27
>>76
適当つか文句言っても直さん
#include<stdio.h>
#include<string.h>
int main(void){
FILE *fp;
char str[256],filename[256];
while(1){
printf("ファイル名>");
gets(str);
if(strlen(str)<9)break;
puts("ファイル名は8文字までです");
}
sprintf(filename,"%s.dat",str);
if((fp=fopen(filename,"r"))==NULL){
puts("ファイル読み込みエラー");
return 1;
}
while(fgets(str,256,fp)!=NULL)
printf("%s",str);
fp = fopen(filename,"a");
printf("\n( ´ー`)y−~~で、用件は?>");
gets(str);
fprintf(fp,"\n%s",str);
return 0;
}
81デフォルトの名無しさん:2006/01/27(金) 19:52:57
[1]C言語実習
[2]
文字列の○文字目から○文字目までを抜き出して返す関数を作成しなさい



対象 □□□□△△△△□□□□
    ↓
   5文字目から8文字目まで
    ↓
結果 △△△△

文字列の○文字目から○文字目までを削除して返す関数を作成しなさい



対象 □□□□△△△△□□□□
        ↓
   5文字目から8文字目まで
        ↓
結果 □□□□□□□□

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VC.net
 [3.3] 言語:C言語
[4] 期限:2006年01月30日13:00まで
[5] その他の制限:制限等は全くありません。お願いします。
82デフォルトの名無しさん:2006/01/27(金) 19:56:53
>>81
文字とは全角半角混合か?
83デフォルトの名無しさん:2006/01/27(金) 20:00:10
>>81
基本的に半角で1文字扱い
全角で2文字扱いだそうです
84デフォルトの名無しさん:2006/01/27(金) 20:00:32
アンカー間違えた…orz

>>82でした
85デフォルトの名無しさん:2006/01/27(金) 20:02:05
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク):x軸とy軸からなる平面状の座標(x,y)を表す構造体point()
を定義せよ。次に、xとyを引数にとり、座標を示す関数define_point()、および
座標を示す構造体を引数にとり、これを座標出力に"(x,y)"の形式で出力する関数put_point()を
定義せよ。また、これらの関数を用いて、座標p1=(1,2),p2=(5,4),p3=(-2,3)を定義し、標準出力に以下のように
出力するプログラムを作成せよ。
$./test01
p1=(1,2)
p2=(5,4)
p3=(-2,3)
[3] 環境
 [3.1] OS: (Windows/Linux/等々):Unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 1月28日PM5:00
[5] その他の制限: 特別なライブラリなどは使わず、#includeは<stdio.h>のみ
でプログラムしていただけると幸いです。よろしくお願いします。
86デフォルトの名無しさん:2006/01/27(金) 20:02:22
全角の半分が切れる場合は?
87デフォルトの名無しさん:2006/01/27(金) 20:04:05
>>81
char* fanc(char *str,int a,int b){
char *c;
int i;
c = malloc(b-a+2);
for(i=0;i<b-a+1;i++)
c[i] = str[i+a-1];
c[b-a+1] = '\0';
return c;
}
88デフォルトの名無しさん:2006/01/27(金) 20:04:12
>>81 全角とか半角とか全然気にしないで書いた
void f(int i, int j, char *s, char *t) {
  int k;
  for (k = 1; *t = *s; ++k, ++s) 
    if (i <= k && k <= j) ++t;
  *t = '\0';
}
void g(int i, int j, char *s, char *t) {
  int k;
  for (k = 1; *t = *s; ++k, ++s) 
    if (!(i <= k && k <= j)) ++t;
  *t = '\0';
}
main() {
  char s[] = "ooooxxxxoooo";
  char t[100], u[100];
  f(5,8,s,t);
  g(5,8,s,u);
  printf("%s %s %s\n", s, t, u);
}
89デフォルトの名無しさん:2006/01/27(金) 20:05:40
//>>81
>>81
マルチバイト文字シラネ。文字列の範囲外の数字を指定されたときもシラネ

#include<string.h>
char*slice_string(const char*string,int begin,int end,char*dst){
    memcpy(dst,string+begin,end-begin);
    dst[end-begin]='\0';
    return dst;
}
char*remove_string(const char*string,int begin,int end,char*dst){
    memcpy(dst,string,begin);
    strcpy(dst+begin,string+end);
    return dst;
}
int main(){
    char buf[80];/*加工した文字列を入れる*/
    puts(slice_string("Hello World",2,5,buf));/* 2 .. 5 を抜き出す*/
    puts(remove_string("Hello World",2,5,buf));/* 2 .. 5 を削除*/
}
90デフォルトの名無しさん:2006/01/27(金) 20:07:49
>>86
全角については、getchを用いて入力する時に判定しています。
全半角関係無しの文字数を持つ文字列を個人的に用意して、
○文字目が△であれば全角、□であれば半角といった具合です。
判定した時に全角であれば二文字分消すことになります。
91デフォルトの名無しさん:2006/01/27(金) 20:09:49
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
92デフォルトの名無しさん:2006/01/27(金) 20:10:11
>>90
じゃあ全角半角判定の関数頂戴
93デフォルトの名無しさん:2006/01/27(金) 20:17:13
>>85

/* 残念ながら構造体名の期待に添えなかった */
struct point { int x, y; };
struct point define_point(int x, int y) {
  struct point p; p.x = x; p.y = y; return p;
}
void put_point(struct point p) { 
  printf("(%d,%d)", p.x, p.y); 
}
main() {
  struct point p1, p2, p3;
  p1 = define_point(1,2);
  p2 = define_point(5,4);
  p3 = define_point(-2,3);
  put_point(p1); printf("\n");
  put_point(p2); printf("\n");
  put_point(p3); printf("\n");
}
94デフォルトの名無しさん:2006/01/27(金) 20:21:12
>>92
default://通常の文字の扱い
if (i > 128){
vx[b] = 'f';//全角一文字追加
b++;//全角区別無しに1文字加えた扱い
s[z] = putch(i);
z++;
}else {
vx[b] = 'h';
b++;

s[z] = putch(i);
z++;//一文字分打ち込んだことにする
}

iはgetchを入れている整数型で
zは全角を二文字扱いした時の文字数を数える整数型
bは全角を一文字扱いした時の文字数を数える整数型
sが一番基本となる文字列で、vxが前半角判定用の文字列

if (strcmp("vx[b]", "f") == 0) {
putch(i);
}
putch(i);
b--;
z--;
95デフォルトの名無しさん:2006/01/27(金) 20:24:42
なんか説明する気が感じられないので俺パスな
9681 ◆s6s7GdUxgI :2006/01/27(金) 20:34:32
>>91
申し訳ありません。ご迷惑おかけしました
>>89様の関数で問題は解決しました
ちなみに>>90>>94は自分ではありません
getchは動作に難があるので使用しておりません(鳥つけておくべきでした)

>>87様、>>88様、>>89様をはじめとしたスレ住人の皆様方のご尽力、本当に感謝いたします
有難う御座いました
9785:2006/01/27(金) 21:28:20
>>93
ありがとうございました。
自分なりに少し改良などしてみたいと思います。
98デフォルトの名無しさん:2006/01/27(金) 22:40:57
三河やさんひどいです><;
99デフォルトの名無しさん:2006/01/27(金) 22:41:51
誤爆・・・
100デフォルトの名無しさん:2006/01/27(金) 23:51:55
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1561.txt

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1562.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 1/30
お願いします!
101デフォルトの名無しさん:2006/01/27(金) 23:55:11
眠いめんどくさい
きっと他の人がやってくれる
102デフォルトの名無しさん:2006/01/28(土) 00:03:13
しゃぁない、ワシが一肌ぬぐか
風呂はいってきま
103デフォルトの名無しさん:2006/01/28(土) 00:07:13
>>100
#include <stdio.h>
#include <string.h>

int center_char_of_string(const char * str, int length)
{
  return str[(length - 1) / 2];
}

int main(void)
{
  char buf[256], dest[256] = {'\0'};
  int  i;
  for (i = 0; i < sizeof(dest) - 1 && scanf("%255s", buf) == 1; i++) {
    dest[i] = center_char_of_string(buf, strlen(buf));
  }

  puts(dest);

  return 0;
}
104デフォルトの名無しさん:2006/01/28(土) 00:35:51
>>103
お早い回答ありがとうございます!助かりました!
105デフォルトの名無しさん:2006/01/28(土) 01:37:41
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): n人の学生の名前を行単位で読み込み、
関数void sort(struct student *p[],int n)でソートした後出力せよ。
struct student = {char name[40]};
struct student *a[N];
[3] 環境
 [3.1] OS: (Windows XP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
[4] 期限: 2月1日
[5] その他の制限: stdlibはダメ

        よろしくお願いします
106前スレ881:2006/01/28(土) 01:41:24
[1] プログラミング演習
[2]ダイクストラ法により隣接行列で表されるグラフの最短経路を求めるプログラムを書きかけた。
このプログラムを完成させ、下の例のグラフで0番の節点から,4番の節点に至る最短経路を求めよ、
プログラム中には、動きがわかるように詳しいコメントを記すこと。
特に、shortestpath関数の詳しい説明を求める。
未完成プログラム⇒http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1550.txt
[3.1]Linux[3.2]gcc[3.3]c言語 
[4] 1/31まで
[5] (↓グラフ例)
0 1 2 3 4 ⇒最初の行は節点番号
0 2 0 2 0
2 0 2 1 3
0 2 0 5 4
2 1 5 0 2
0 3 4 2 0
因みにこれを画像で表すとこうなります。↓
http://ccfa.info/cgi-bin/up/src/up23553.bmp
念のため、ダイクストラ法の分かり易い説明が書いてあるサイトを貼っておきます。
http://karel.tsuda.ac.jp/class2005/algo/c24.html

よろしくお願いしますm(__)m
107デフォルトの名無しさん:2006/01/28(土) 10:48:21
>>105
stdlib.h使用不可ってことはnの値が決まって無いのに
mallocやcallocを使わずに領域確保しろって言うのか?
それとも勝手にnの値を決めろってこと?
あと学生の名前は半角英数のみで、ファイルから読み込むのか?
108デフォルトの名無しさん:2006/01/28(土) 11:04:39
>>105
stdlib.hは使ってないw

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<memory>
struct student {char name[40];};
void sort(struct student*p[],int n){
    struct inner{
    static bool less_student(struct student*a,struct student*b){
    return std::strcmp(a->name,b->name)<0;
    }};
    std::sort(p,p+n,inner::less_student);
}
int main(){
    const int N = 100;
    struct student *a[N];
    int i;
    for(i=0;i<N;++i){
        std::auto_ptr<student>p(new student);
        if(!std::cin.getline(p->name,sizeof(p->name)))break;
        a[i] = p.release();
    }
    sort(a,i);
    for(int j=0;j<i;++j)std::cout << a[j]->name << std::endl;
}
109デフォルトの名無しさん:2006/01/28(土) 11:08:07
[1] プログラム開発
[2] テキストファイルを読み込み単語数をカウントせよ。
ただし、単語と単語の間はスペースで区切られているものとし、
アルファベットしか用いられてない文章とする。
例:テキストファイルの内容がThis is an apple Apple is red だとすると
This : 1
is :2
an :1
Apple:2
red:1

[3]環境
[3-1]OS:Linux
[3-2] gcc
[3-3]C言語
[4] 1/31まで

よろしくお願いします。
110デフォルトの名無しさん:2006/01/28(土) 11:08:52
うむ。そういう解釈なら、
#include <cstdlib>
なんてのでどうだろう?
てか、CかC++かも書いてないんだよね。
111デフォルトの名無しさん:2006/01/28(土) 11:10:12
>109 二分探索木って習った?構造体って習った?mallocって習った?ハッシュって習った?リストって習った?
112108:2006/01/28(土) 11:14:38
>>110
しまった、その手があったか。
そっちで書いたほうが皮肉が利いてて嫌味っぽいなw
113デフォルトの名無しさん:2006/01/28(土) 11:14:58
>>111
名前を聞いた程度です。
114デフォルトの名無しさん:2006/01/28(土) 11:18:21
んー・・・講義で説明を受けてるとか、提示されてるなら、それを使うべきなんで・・・
5つのうち、どれを習っているか書いてくださいな。
115デフォルトの名無しさん:2006/01/28(土) 11:19:02
>>112
素直にC99で可変要素数配列にすればいいじゃないの。
116デフォルトの名無しさん:2006/01/28(土) 11:19:28
コンパイラがC99に対応してるかどうかだな
117デフォルトの名無しさん:2006/01/28(土) 11:20:13
>>109
ファイルの読み込み方法は?
いや俺はやらなけど
118デフォルトの名無しさん:2006/01/28(土) 11:21:43
構造体を用いたプログラムは書いたことがあります。
二分探索木、malloc、ハッシュは別の授業で習ったので
プログラムに実装したことはないですけど、どのようなことをしているかは
大体分かります。
119109:2006/01/28(土) 11:25:26
>>117
ファイルの入力はリダイレクションかfopenです。
この2つしか入力方法は分かりません。
120デフォルトの名無しさん:2006/01/28(土) 11:28:01
>>109
trie 使え。以上。
121デフォルトの名無しさん:2006/01/28(土) 11:33:36
ああ。トライは組んだことないな。挑戦してみっか。
122デフォルトの名無しさん:2006/01/28(土) 11:33:48
面倒くさいだけで難しい課題ではないと思うんだけどな
トライでやれとかいう指定があれば別だが
123デフォルトの名無しさん:2006/01/28(土) 11:39:47
いや、ちとメンドウだぞ。appleとAppleを同一視し、出力に出てきてるのは後に出現したAppleだ。
出力ルールの推測がむずい。
124デフォルトの名無しさん:2006/01/28(土) 11:45:54
出力ルールは「最後に現れた単語に従う」でいいんじゃねーの?
125デフォルトの名無しさん:2006/01/28(土) 11:46:29
ウダウダ言ってる暇があればさっさと書けよグズども
126デフォルトの名無しさん:2006/01/28(土) 11:47:22
英数字は全て小文字か大文字に変換ってルールを作れば比較は簡単だと思うが
127108:2006/01/28(土) 11:47:27
>>105
まぁ次からは言語をちゃんと指定してくださいねっと。
とりあえずstdlib.hは使わずに普通に書いてみた。

sortは一番頭の悪いソートなんで授業で,もっと賢いソートを習ってたら書き換えるのを薦める。

#include<stdio.h>
#include<string.h>
struct student {char name[40];};
void sort(struct student*p[],int n){
    int i,j;
    for(i=0;i<n;++i)
    for(j=i;j<n;++j){
        if(strcmp(i[p]->name,j[p]->name)>0){
            struct student*c=i[p];i[p]=j[p];j[p]=c;
        }
    }
}
enum{N = 100};
int main(void){ 
    struct student *a[N];
    struct student b[N];
    int i,j;
    for(i=0;i<N;++i){
        if(!fgets(i[b].name,sizeof(i[b].name),stdin))break;
        i[a] = &i[b];
    }
    sort(a,i);
    for(j=0;j<i;++j)fputs(j[a]->name,stdout);
    return 0;
}
128デフォルトの名無しさん:2006/01/28(土) 12:17:59
>>127
i[1] = &i[b];
のあとに
fflush(stdin);
を追加したほうがいいかと思われ
129デフォルトの名無しさん:2006/01/28(土) 12:19:11
>>128
いやいや、fflush(stdin)は処理系依存。
それを分かっててソースをさらにカオスにさせたいのなら問題なしだけどw
130105:2006/01/28(土) 12:54:36
>>127
次回が来ないようにがんばります。
本当にありがとうございました。
131デフォルトの名無しさん:2006/01/28(土) 13:39:22
132>>57:2006/01/28(土) 13:56:31
>>58,59様ありがとうございます、おそくなってすいません
133デフォルトの名無しさん:2006/01/28(土) 13:58:35
>>109 向け。ネタ考えてるうちに、マットウなのが来てしまって残念。
#include <stdio.h>
#include <string.h>
char memory[10000] = {0}; int count[10000] = {0}; void inc(char *s) {
char buf[100]; char *p; strcpy(buf, " "); strcat(buf, s); strcat(buf,
" "); p = strstr(memory, buf); if (p == NULL) { strcat(memory, buf); p
= strstr(memory, buf); } count[p - memory + 1]++; } void print(void) {
char *p; int i; for (p = memory; *p; *p++) if (*p == ' ') *p = '\0';
for (i = 0; i < 10000; i++) if (count[i]) printf("%s : %d\n", memory +
i, count[i]); } int main(void) { char buf[100]; while (scanf("%s",
buf) == 1) inc(buf); print(); return 0; }
134デフォルトの名無しさん:2006/01/28(土) 13:59:59
1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク):3つの座標p1,p2,p3を引数にとり、その3つの座標を頂点とする
三角形の面積を求める関数triangle()を定義せよ。なおこの関数には
x,y軸からなる平面上の座標を表す構造体を定義し、利用すること。
また、座標はp1(1,1) p2(2.2) p3(3,3)を頂点とする三角形の面積を求める
プログラムを作成し、各関数での仮引数の変数名はp1,p2,p3として区別がつくように
すること。

[3] 環境
 [3.1] OS: (Windows/Linux/等々):Win
 [3.2] コンパイラ名とバージョン: ボーランド
 [3.3] 言語: C
[4] 期限: 1月29日
[5] その他の制限: #includは<stdio.h>のみでお願いします
135デフォルトの名無しさん:2006/01/28(土) 14:12:25
>>134
(1,1)(2,2)(3,3)だと、どう見ても直線です
本当に(r
#include<math.h>
#include<stdio.h>
typedef struct Point Point;
struct Point{
    double x;
    double y;
};
double distance(const Point*p1,const Point*p2){
    double x = p2->x - p1->x;
    double y = p2->y - p1->y;
    return sqrt(x*x+y*y);
}
double triangle(const Point*p1,const Point*p2,const Point*p3){
    double a = distance(p1,p2),b=distance(p2,p3),c=distance(p3,p1);
    double r = (a+b+c)/2;
    return sqrt(r*(r-a)*(r-b)*(r-c));
}
int main(void){
    const Point p1={1,1},p2={2,2},p3={3,3};
    printf("%f\n",triangle(&p1,&p2,&p3));
    return 0;
}
136135:2006/01/28(土) 14:13:53
あ、math.hなしなのか。
じゃあ適当にニュートン法でも使ってsqrtは求めてくれ
137134:2006/01/28(土) 14:18:59
すいません、座標は(1,1)(2,-1)(-1,3)で宜しくお願いします……orz
138デフォルトの名無しさん:2006/01/28(土) 14:21:01
ヘロンは sqrt で誤差が出るのでできれば避けるべき.三点から面積を出すのは外積が常套手段:

double triangle(const Point*p1,const Point*p2,const Point*p3){
  double x1 = p2->x - p1->x, x2 = p3->x - p1->x;
  double y1 = p2->y - p1->y, y2 = p3->y - p1->y;
  double S = (x1 * y2 - x2 * y1) / 2.0;
  return S >= 0 ? S : -S;
}
139135:2006/01/28(土) 14:27:53
お、そういう計算の仕方があるのか。
勉強になった。ありがと

やっぱ、数学の知識が少ないと、
こういうときにスマートな解を出せないから情けないなぁorz
140デフォルトの名無しさん:2006/01/28(土) 14:34:42
すいません、結局どういうプログラムになったのでしょうか…orz
141デフォルトの名無しさん:2006/01/28(土) 14:47:08
>>140
最初にdistanceを削除する
次にtriangleを>>138のtriangleに置き換える。

その後main関数のp1,p2,p3の代入している数字を好きなものに変える。

この先は本題とそれるけど、もし、動的に決めたいのなら
constを外して、scanfなり、fgets+(strtof or atof)なりで代入しても良い。

......というか、あそこまでプログラム書かれてて、どう変更するかが分からないようだと正直どうかと思う。
一応読みやすく書いたつもりなんだけどなぁorz
142デフォルトの名無しさん:2006/01/28(土) 14:54:25
センセ、センセ。ここは宿題全部やってって人が多いですぜ。
そもそも、自分でやろうとしない人たちだから、そんなに期待しちゃだめ。
いや、綺麗なプログラムだし、見易いよ。>>135

外積の絶対値はベクトルの作る平行四辺形の面積になるのですな…>>138
符号はよくわからんけど。

俺はネタプログラムしか書けないんで、尊敬する。
143デフォルトの名無しさん:2006/01/28(土) 15:07:11
携帯からのアクセスでしたので、どうしても頭の中でごちゃまぜになってしまったもので…orz。
今からしっかり内容を解読したいと思います。本当にありがとうございました。…もし上記のプログラムに質問があったら、このスレに書き込んでいいのでしょうか?
144デフォルトの名無しさん:2006/01/28(土) 15:17:24
>>143
別に構わないと思うよ。
疑問に思った点を、どんなに考えても自分では答えが出せないのなら、
聞いたほうが良いからね。
145デフォルトの名無しさん:2006/01/28(土) 15:25:06
添削。

(1,1), (2,2), (3,3) →もうちょっと考えましょう。
プログラムを作る前に、入力と出力(結果)を人の手で考えたほうがよいです。

すいません、結局 →もうちょっと考えましょう。
あやまってはいますが、相手の話をぜんぜん理解しようとしてません。

…内容を解読…ありがとうございました。→たいへん謙虚でよろしいです。

…もし上記のプログラムに質問があったら、…→謙虚さをだいなしにしてしまいます。
まず、やってみて、それでもわからないときに言えばいいのです。

総評:
質問のしかたで相手がどう受け止めるか考えましょう。
宿題を完成させるのに、ちょっとだけでもいいので手間をかけましょう。
146143:2006/01/28(土) 15:55:41
みなさんありがとうございます。


上記のプログラムで解読中にわからなかった事を質問させていただきます。
・ typedef struct Point Point; という記述をまだ習っていないため、
どういった事が可能になるのかわかりません。これを使用せずにプログラムを
組む為にはどう改変していけば良いのですか?

147デフォルトの名無しさん:2006/01/28(土) 16:03:35
typedefはただの別名。
typedef int moe;
とやると、moeはint型として扱うことができる。

typedef Debu PIZA;
typedef Chinsou DQN;
148デフォルトの名無しさん:2006/01/28(土) 16:04:17
typedef struct Point Point;
ってのはstruct Pointと書く代わりにPointと書いてもOKという宣言。
なので、
これを使わないのなら関数の引数や変数の定義で、
Pointと書いているところをstruct Pointに書き換える。
149143:2006/01/28(土) 16:35:44
つまりはこういう事ですか?
#include<stdio.h>
struct point{
double x;
double y;
};
double triangle(const struct point*p1,const struct point*p2,const struct point*p3){
double x1 = p3->x - p1->x;
double y1 = p2->y - p1->y;
double x2 = p2->x - p1->x;
double y2 = p3->y - p1->y;
double s = (x1 * y1 - x2 * y2) / 2.0;
if (s < 0 )
s *= -1;
return s;
}

int main(void){
const struct point p1={1,2},p2={5,4},p3={-2,3};
printf("%f\n",triangle(&p1,&p2,&p3));
return 0;
}

試しに数字を入れてみたのですが、答えが3にならなければならいのに5に
なってしまいました・・orz
150デフォルトの名無しさん:2006/01/28(土) 16:47:10
>>149
5であってるだろ
151デフォルトの名無しさん:2006/01/28(土) 16:50:34
どういう計算したら3になるのかを逆に聞きたい?
152143:2006/01/28(土) 17:03:15
すいませんでした...orz

最後に1つだけ質問させてください。
const struct point p1={1,2},p2={5,3},p3={-2,3};
という表記でなければ、初期値はあたえられないのでしょうか?
p1.x=...のような形で与えようとしたのですが、そうすると
triangleの方をどう書き換えればよいかわからくなってしまいまして..
153デフォルトの名無しさん:2006/01/28(土) 17:07:23
聞く前に入門書でも読めや
154デフォルトの名無しさん:2006/01/28(土) 17:09:00
>>152
そんなことすら分からないなら単位諦めろよ
155デフォルトの名無しさん:2006/01/28(土) 17:23:24
作ってもらったものを提出でいいと思うぞ。
理解しようとするなら、本を読んだり、講義のメモを見返したりするべし。
だれか書いてたが、「やってみる」ことが大切。
156デフォルトの名無しさん:2006/01/28(土) 17:27:06
ここの人間は、仏の顔が何度もあるんですね。
157デフォルトの名無しさん:2006/01/28(土) 17:29:16
仏の顔も128度まで
158デフォルトの名無しさん:2006/01/28(土) 17:31:35
いじってあそんでるだけだってば。
159デフォルトの名無しさん:2006/01/28(土) 17:36:41
あたしのマンコを弄ばないで><!!
160デフォルトの名無しさん:2006/01/28(土) 17:38:49
>>152
変数名で初期化をしたいのならmain関数の変数宣言のconstを外して
Point p1,p2,p3;
p1.x = 2; p1.y = 3;
...
みたいに書けば良い。(まぁ正確には代入だから初期化ではないが)
triangleを弄る必要はない。

あと、どんなに考えても自分で答えが出なかったら質問したほうが良いとは言ったが、
何も考えずに人に聞くのは勘弁してくれ

>>157
7bitに抑えるために127回にするのはどうだろう?
161デフォルトの名無しさん:2006/01/28(土) 17:53:38
>>131
>>133
ありがとうございます。
次はここで答えられるような立場になれるようがんばります。
162デフォルトの名無しさん:2006/01/28(土) 17:56:57
131はC99。133はネタ(一応動くみたいだが)なので注意。
163デフォルトの名無しさん:2006/01/28(土) 18:02:18
>>160
OK
164デフォルトの名無しさん:2006/01/28(土) 18:23:51
以下のC++プログラムは複素数を計算するものです。
「double型の引数rをひとつだけとって実部にrの値を設定し、虚部には0を
設定するようなコンストラクタComplex(double)を作成し、main()にそれを
使うコードを追加しなさい」という課題です。お手数ですが、よろしくお願いいたします。
#include<iostream>

class Complex{
private:
double real;
double imag;
public:
Complex(){ real = 0.0; imag = 0.0; }
Complex(double r,double i){ real = r; imag = i; }
~Complex() {};
double re() const {return real;}
double im() const {return imag;}
void set_re(double r){ real = r; }
void set_im(double i){ imag = i; }
void print(std::ostream& os) const
{
os << real << "+" << imag << "i";
}
};
165デフォルトの名無しさん:2006/01/28(土) 18:24:30
>>164の追加です。main()はこちらです。
int main(){
Complex a;
a.set_re(1.11);
a.set_im(2.22);
Complex b(3.33,4.44);
Complex c;
c = Complex(9.99,88.88);
a.print(std::cout); std::cout << std::endl;
b.print(std::cout); std::cout << std::endl;
c.print(std::cout); std::cout << std::endl;
c = a;
c.print(std::cout); std::cout << std::endl;

return 0;

}
166デフォルトの名無しさん:2006/01/28(土) 18:25:04
この流れでテンプレ無視できるのはすごいと思う。
でもC++の人にはいい燃料だろう。
167デフォルトの名無しさん:2006/01/28(土) 18:37:49
Complex(double r,double i=0)

こんな燃料で牛脂も溶かせん
168デフォルトの名無しさん:2006/01/28(土) 18:38:31
Complex(double r){ real = r; imag = 0; }

でいいんじゃない。
169デフォルトの名無しさん:2006/01/28(土) 18:45:18
>>166
「宿題片付けます」しか目に入らないんだよ、きっと。
>>167, 168
このスレはさすが仏の顔が7bitだけありますね。
170デフォルトの名無しさん:2006/01/28(土) 18:46:51
仏の顔もlong long int
171デフォルトの名無しさん:2006/01/28(土) 18:47:19
>>168
ありがとうございました。
172デフォルトの名無しさん:2006/01/28(土) 19:10:09
print(std::ostream& os) const
なんか気持ち悪いな。
operator使えばいいのに。
173デフォルトの名無しさん:2006/01/28(土) 20:11:09
>>166
あんなのじゃ食指が動かん
174デフォルトの名無しさん:2006/01/28(土) 20:12:21
>>172
print(std::ostream& os) const は特に間違ってない。
それ呼び出すoperatorを定義していないだけde。
175デフォルトの名無しさん:2006/01/28(土) 20:24:46
「なんか気持ち悪い」ってのは大事だと思う。
原因不明のバグはたいていそういうところに…
176デフォルトの名無しさん:2006/01/28(土) 20:25:28
>>174
operatorから呼び出すようにするなら
stringに格納して返すなり、ostream返すようにするなりして
cout << a.print() << "\n";
↑こういう感じで使えるようにした方がスマートだろ
177デフォルトの名無しさん:2006/01/28(土) 20:31:00
>>176
たぶんスマートだけを言うならこのほうがスマート

std::ostream&operator<<(std::ostream&o,const Complex&c){
    c.print(o);
    return o;
}
cout << a << "\n";
で済むからな。
178デフォルトの名無しさん:2006/01/28(土) 20:31:47
>>176
ネタ?
179デフォルトの名無しさん:2006/01/28(土) 20:33:50
>>164で質問させていただいた者です。
今度はoperator関数を用いて複素数の乗算を行いたいのですが、
>>164のクラス部分のComplex(double r,double i){ real = r; imag = i; }の次の行に
Complex operator*(Complex a,Complex b)
{
double r = a.re()*b.re()-a.im()*b.im();
double i = a.im()*b.re()+a.re()*b.im();
return Complex(r,i);
}
を付け加えたのですが、下記のようなエラーが出てしまいます。
`Complex Complex::operator*(Complex, Complex)' must take either zero or one argument
たびたび済みませんが、どうすればよいかお教えいただけるでしょうか。
180デフォルトの名無しさん:2006/01/28(土) 20:38:39
>>179
お前が一回死ねばみんな教えてくれると思うよ^^
181デフォルトの名無しさん:2006/01/28(土) 20:43:34
>>179
引数を一つにする。
フレンドにする。
外部関数としてオーバーロード。
別のスレで聞く。
テンプレを守る。

の内のどれか。
182デフォルトの名無しさん:2006/01/28(土) 20:44:31
テンプレ(>>1)読め。
教科書にoperator *の書き方載ってるはずだから、それ読め。
183デフォルトの名無しさん:2006/01/28(土) 20:57:11
>>179
それをクラス定義の外で書けば良い。

細かいアドバイスも入れるなら
先にoperator*=を実装してそれを利用したほうが好ましい。
返り値はconst Complexにしたほうが事故を防げる
引数はconst Complex&にしたほうが効率的。

こんなところ、あと最後に教科書ちゃんと読んでから質問しろ。
184デフォルトの名無しさん:2006/01/28(土) 20:59:47
やさしいなぁ・・・ほんと。

やさしさに便乗させてもらおう。
C++の解答者さんに質問。使用コンパイラを教えてください。
185デフォルトの名無しさん:2006/01/28(土) 21:00:25
operatorはわかりにくいからな。
まず、operatorは前置記法ということを知らないとダメ。
a == bは、
== (a, b)となる。

で、operator==の実装例
「外部で」定義するとこうなる。
bool operator == (const T& lhs, const T& rhs)
(lhsはleft hand side、rhsはright hand side)

ただし、メンバとして定義すると、lhsはそのメンバ自身になる。
なので、
bool operator == (const T& rhs)

operatorは戻り値や引数、一時変数などをちゃんと考えてあげなければならないので、
結構奥が深い。
186デフォルトの名無しさん:2006/01/28(土) 21:09:39
>>184
VS6のVC6。時どきBCC。
VS6は学生時代に7万で安〜とか言って買ったんだけどなぁ。
今のアカデミックパックの安さはなに?って感じ。
187デフォルトの名無しさん:2006/01/28(土) 21:12:48
とゆうかoperatorのオーバーロードが分からんって奴は
ろくな入門書読んでないか、もしくはろくに読んでないだけだろ

そんな奴は勝手に単位落として留年でもしてりゃいい
188デフォルトの名無しさん:2006/01/28(土) 21:13:46
>>184
基本的にはg++
たまにVC++.NET2003やVC++2005
189デフォルトの名無しさん:2006/01/28(土) 21:15:38
今更の感もあるかもしれんが、C++やるならEffective C++とMoreの内容くらいは把握しとくのが筋。
190デフォルトの名無しさん:2006/01/28(土) 21:16:12
>>181さん、ありがとうございました。
フレンドにする事で解決しました。
なお、テンプレについては読んではいたのですが、
あくまで「推奨」という事だったので、あまり重要視していませんでした。
不快に思われた方にはお詫び申し上げます。
次回からはテンプレをしっかり書かせて頂きます。
191デフォルトの名無しさん:2006/01/28(土) 21:17:06
アカデミックって商用利用ダメだっけ?
192デフォルトの名無しさん:2006/01/28(土) 21:19:14
>>183さんと>>185さんもご丁寧な回答ありがとうございます。
193デフォルトの名無しさん:2006/01/28(土) 21:23:44
>>184
VisualC++ toolkit 2003 + platformSDK
VS2005.NETもあるけど、重いからなんとなくこっち使っている。
(最近VS2005.NETもコマンドラインから使えるようにしたけど、
昔の習慣でつい・・・)
windowsでC/C++やるなら結構お勧め。比較的速いコード吐く。
194デフォルトの名無しさん:2006/01/28(土) 21:26:12

[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):順列 (0, 1, 2) に対して (1, 2, 0) や (2, 0, 1) の様に,もとの順列と数字がすべて異なる位置にある
順列を撹乱順列(derangement)と呼ぶ.順列 (0, 1, 2, 3, 4) に対するすべての撹乱順列を求め表示し,その個数を表示するプログラムを作りなさい.

ヒント
順列を全て列挙し、列挙した要素が撹乱順列の条件を満たすかをチェックするとよい。 実現の方法は2通りある。

1. 要素の重複を許して順列を列挙する。(5*5*5*5*5 = 3125通りのチェック)
この場合、撹乱順列のチェックと、要素のダブりがないかのチェックを両方行う必要がある。
2. 要素の重複を許さずに順列を列挙する。(5*4*3*2*1 = 120通りのチェック)
この場合、撹乱順列のチェックだけでよい。

注意
実行例では結果を省略しているが、レポートには実行結果を省略せず載せること。
実行結果
(1, 0, 3, 4, 2)
(1, 0, 4, 2, 3)
(1, 2, 0, 4, 3)
 (略)
(4, 3, 0, 2, 1)
(4, 3, 1, 0, 2)
(4, 3, 1, 2, 0)
number of derangement for 5 = 44
$
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: [2006年1月31日]
[5] その他の制限: include<stdio.h>のみで。
時間がないため助けてください。
195デフォルトの名無しさん:2006/01/28(土) 21:28:45
>>193
確か2005からは.NETが名称から外されたはず
196デフォルトの名無しさん:2006/01/28(土) 21:31:46
[1] 授業単元: c言語演習
[2] 問題文(含コード&リンク): n次元正方行列A,Bの要素を読み込みその和Cを求める。
その後、同じくn次元正方行列X,Yの要素を読み込みその積を求める。そして最後に、和Cと
積Zを出力するプログラムを作成せよ。ただし、行列BとYは共用体op_2として宣言することで、
同じ記憶領域を使用すること。また、nは最大100まで対応でいればよく、要素はfloatとしてよい。

[3] 環境
 [3.1] OS:unix
 [3.2] gcc
 [3.3] 言語: c
[4] 期限: 1月30日
[5] その他の制限: #includは<stdio.h>のみ。
よろしくお願いします。

197デフォルトの名無しさん:2006/01/28(土) 21:35:52
>>195
本当だ。指摘サンクス
198デフォルトの名無しさん:2006/01/28(土) 21:39:11
>>184
ここに出すときは
digital mars C++
動作確認用にgcc g++ VC express(のclだけ) 辺りも併用
本当はbcc32でも試したいんだけど環境構築してないから試していない。
199デフォルトの名無しさん:2006/01/28(土) 21:42:15
>>198
Digital Marsのコンパイラってよく名前を聞くがいいの?
200デフォルトの名無しさん:2006/01/28(土) 22:02:07
>>194
素敵なアルゴリズムが思いつかないw
良い週末を。
#include <stdio.h>
int main(){
int i,j,k,l,m,count=0;

for(i=0;i<5;i++){
for(j=0;j<5;j++){
if(j!=i){
for(k=0;k<5;k++){
if((k!=i)&&(k!=j)){
for(l=0;l<5;l++){
if((l!=i)&&(l!=j)&&(l!=k)){
for(m=0;m<5;m++){
if((m!=i)&&(m!=j)&&(m!=k)&&(m!=l)){
if((i!=0)&&(j!=1)&&(k!=2)&&(l!=3)&&(m!=4)){
count++;
printf("(%d,%d,%d,%d,%d)\n",i,j,k,l,m);
}
}
}
}
}
}
}
}
}
}
printf("number of derangement for 5 = %d",count);
return 0;
}
201198:2006/01/28(土) 22:11:46
>>199
吐き出すコードは自分が適当に使う限り結構優秀(VCにはさすがに負ける)。
ただ、自分はD言語を主流にしてるから、D言語で面倒な処理(listとかalgorithm)をC++で実装するために、
同じ開発元のコンパイラを使ってるのが大きな理由なのであんまり品質は見ていない。
>>196
雑談ばかりだとあれなのでw
1レスに抑えるために改行圧縮してるから適当に展開して
#include<stdio.h>
union op_2{float B[100][100];float Y[100][100];}o;
float A[100][100],C[100][100],X[100][100],Z[100][100];
void input(float p[100][100],int n){int i,j;for(i=0;i<n;++i)for(j=0;j<n;++j)scanf("%f",&p[i][j]);}
void output(float p[100][100],int n){int i,j;for(i=0;i<n;puts(""),++i)for(j=0;j<n;++j)printf("%f ",p[i][j]);}
int main(void){
    int n,i,j,k;
    printf("次元数->");scanf("%d",&n);
    printf("A=\n");input(A,n);printf("B=\n");input(o.B,n);
    for(i=0;i<n;++i)for(j=0;j<n;++j)C[i][j]=A[i][j]+o.B[i][j];
    printf("X=\n");input(X,n);printf("Y=\n");input(o.Y,n);
    for(i=0;i<n;++i)for(j=0;j<n;++j)for(k=0;k<n;++k)Z[i][j]+=X[i][k]*o.Y[k][j];
    printf("C=\n");output(C,n);printf("Z=\n");output(Z,n);
    return 0;
}
202デフォルトの名無しさん:2006/01/28(土) 22:12:51
>>194
#include <stdio.h>
typedef struct Cell{ int val;struct Cell*prev; }Cell;static void
internal_each_perm(int*data,int length, Cell*cell,void proc(Cell
*max)){if(length==0){proc(cell);}else{Cell c;int i; c.prev=cell;
for(i=0;i<length;i++){c.val=data[i];data[i]=data[0];internal_each_perm(data+1
,length-1,&c,proc);data[0]=data[i];data[i]=c.val;}}} void each_perm(int*data,
int length,void proc(Cell*max)){internal_each_perm(data,length, NULL, proc);}
int data[]={0,1,2,3,4};int internal_print_derangement(Cell*max,int is_derangement,
int idx){if(max!=NULL){is_derangement=internal_print_derangement(max->prev,is_derangement
||max->val!=data[idx],idx-1);if(is_derangement){printf(" %d",max->val);}}return is_derangement
;}int count;void print_derangement(Cell*max){if(internal_print_derangement(max,0,sizeof(data)/
sizeof(data[0])-1)){++count;puts("");}}int main(void){each_perm(data,sizeof(data)/sizeof(data[
0]),print_derangement);printf("%d\n",count);return 0;}
203デフォルトの名無しさん:2006/01/28(土) 22:19:24
>>200
救われました!
204デフォルトの名無しさん:2006/01/28(土) 22:21:13
>>202
結果間違ってる
205デフォルトの名無しさん:2006/01/28(土) 22:21:23
>>201
D言語って趣味で?会社で?
使えるのあれ?
206デフォルトの名無しさん:2006/01/28(土) 22:23:17
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):下の文を参照して下さい
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc 2.95
 [3.3] 言語:C++
[4] 期限:1月30日(月曜日)
[5] その他の制限:特にありません

A〜Iとa〜iを使用した文字列を入力し、下のように変換した文字列を出力する
A→0が1個 B→0が2個 C→0が3個 ・・・ I→0が9個
a→1が1個 b→1が2個 c→1が3個 ・・・ i→1が9個

(例)
ICeF
00000000000011111000000

よろしくお願いします。
207デフォルトの名無しさん:2006/01/28(土) 22:24:46
>>194
遅くなっちゃったなあ.解析解がありそうな気がするけど,まあバックトラック.

#include <stdio.h>
#define N 5
int count;
void solve(int work[], int used[], int size, int pos) {
  int i;
  if (pos >= size) {
    for (i = 0; i < size; ++i) 
      printf("%c%d", (i == 0 ? '(' : ','), work[i]);
    printf(")\n");
    ++count;
  }
  for (i = 0; i < size; ++i)
    if (!used[i] && pos != i) 
      work[pos] = i, used[i] = 1, solve(work, used, size, pos+1), used[i] = 0;
}
main() {
  int work[N], used[N], i;
  for (i = 0; i < N; ++i) used[i] = 0;
  solve(work, used, N, 0);
  printf("number of dearangement for %d = %d\n", N, count);
}
208デフォルトの名無しさん:2006/01/28(土) 22:25:32
>>201
即レス感謝です。
unionでは無く、structを使ったプログラムもご教授願えませんか・・・?
209デフォルトの名無しさん:2006/01/28(土) 22:28:53
>>208
自分で共用体って書いてるじゃん
210デフォルトの名無しさん:2006/01/28(土) 22:30:21
#include <iostream>
#include <string>
#include <utility>
using namespace std;
int main() {
  for (string s; cin >> s; ) 
    for (int i = 0; i < s.size(); ++i) 
      if (islower(s[i])) cout << string(s[i]-'a'+1, '1');
      else cout << string(s[i]-'A'+1, '0');
}
211210:2006/01/28(土) 22:31:31
>>210>>206.プログラムの終了は EOF.
212194:2006/01/28(土) 22:32:08
>>202>>207さん
ありがとうございました!
213208:2006/01/28(土) 22:35:55
意味不明な質問をして申し訳なかったです・・・orz
214デフォルトの名無しさん:2006/01/28(土) 22:46:54
>>205
暇人大学生ですから趣味です。
D言語は適当にちょちょいと書くスクリプト言語と同じ程度には使えます。
と言っても一番大きいソースでも4~5000行しか書いてないから正確に評価はできませんけど。

たぶん、C++で蓄積されたライブラリ群を使うほうが最終的には実用的かなぁ。
215デフォルトの名無しさん:2006/01/28(土) 22:49:13
>>194
順列の列挙アルゴリズムがこんなんしか思いつかなんだ。

int* next(int* p, int size){ int flag=0, i, j, k;
for(i=0;i<size;++i){flag|=(1<<p[i]);if(p[i]) for(j=1<<(p[i]-1);j!=0;j>>=1) if(flag&j) --p[i];}
for(i=size-2;i>=0;--i){++p[i];if(p[i]<size-i) break;p[i]=0;}
if(i<0) return 0;
for(i=0,flag=0;i<size;++i){for(j=0,k=0;j<size;++j){if(!(flag&(1<<j))) ++k;else if(p[i]<k) break;}p[i]+=(j-k);flag|=(1<<p[i]);}
return p;}
int derangement(int* p, int size){ while(p[size-1]!=size-1&&size--); return size==-1;}
main(){ int a[5]={0,1,2,3,4}, c=0; while(next(a, 5)) if(derangement(a, 5)){printf("(%d,%d,%d,%d,%d)\n", a[0],a[1],a[2],a[3],a[4]); ++c;} printf("number of derangement for 5 = %d", c);}
216デフォルトの名無しさん:2006/01/28(土) 22:50:40
>>194
なんとか解析解出せた.……けど,問題は途中経過も全部出さないと駄目なんか…….

#include <stdio.h>
int fac(int n) { return n > 0 ? n * fac(n-1) : 1; }
int bin(int n, int r) { return fac(n)/fac(r)/fac(n-r); }
int f(int n, int r) {
  int a, k;
  if (r != 0) return bin(n,r) * f(n-r, 0);
  else {
    for (a = fac(n), k = 1; k <= n; ++k) a -= f(n,k);
    return a;
  }
}
int main() {
  int n;
  scanf("%d", &n);
  printf("number of dearrangement for %d = %d\n", n, f(n,0));
}
217デフォルトの名無しさん:2006/01/28(土) 22:53:03
>>214
大学で5000行スゴスwww
俺も大学生ですがMAXでせいぜい2000行程度
218デフォルトの名無しさん:2006/01/28(土) 22:55:01
漏れもDやってたがDじゃメシ食えんことに気づいてやめた
219デフォルトの名無しさん:2006/01/28(土) 22:56:18
>>194
誰だよ俺と同じ大学のヤツw
220デフォルトの名無しさん:2006/01/28(土) 22:57:25
てかD使ってる企業あるの?
221デフォルトの名無しさん:2006/01/28(土) 22:59:09
>>216
なんでそうなるのか分からんが、すげー
そういうのってやっぱアルゴリズム論とかでやるの?
222デフォルトの名無しさん:2006/01/28(土) 23:01:51
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):"+", "*", "(", ")" を用いた式を読み込み、その計算値を出力するプログラムを作りなさい。
簡単のために、数値は1桁の整数に限り、式の途中に空白文字などの他の文字は入力されないものとする。
ヒント
"+"と"*"は優先順位が異なることを考慮すると、以下の条件が成り立つ。
   1. 式(expression)はいくつかの項が"+"で結ばれている
2. 項(term)はいくつかの因子が"*"で結ばれている
3. 因子(factor)は1つの数値か、"(", ")"で囲まれた式である
この、式、項、因子をそれぞれ一つの関数で表現するとよい。

実行結果
$ ./ex9
expression? 2*(3+(4+5)*6)
value = 114
$
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限:2006年2月2日
[5] その他の制限: include<stdio.h>でお願いします。


223デフォルトの名無しさん:2006/01/28(土) 23:03:55
>>222のつづき
関数プロトタイプとmain関数
int expression(char**);
int term(char**);
int factor(char**);

int main(void)
{
char buf[1024];
char *ptr;

printf("expression? ");
scanf("%s", buf);

ptr = buf;
printf("value = %d\n", expression(&ptr));

return 0;
}
224デフォルトの名無しさん:2006/01/28(土) 23:09:21
>>220
ちょっと前にDで記述したアプリかなんかがあって、
impressかなんかに載ってたよ
かなりうろ覚えで悪いけどw
225216:2006/01/28(土) 23:11:26
>>221
組合せ論の問題かな.言われると,なるほど,と思うはず:

n 個の数からなる列でちょうど r 個の要素が元と同じ場所にあるものの数を f(n,r) とする.
このとき 全順列の数 n! = f(n,0) + ... + f(n,n).求めたいのは f(n,0) なので,残りを計算してこれを求める.

f(n,r) は n-r 個の要素が撹乱され,残りの r 個の要素が固定される場合の数に等しいから,
固定される要素の種類が nCr 個あることを考慮して f(n,r) = nCr×f(n-r,0),これを代入して >>216
226デフォルトの名無しさん:2006/01/28(土) 23:12:16
106はなんで、手をつけるひとがいないのかな・・・?
漏れはElementSeparateを理解するのに1時間かかったorz
・・・いやぁ・・・読みづらい・・・
227デフォルトの名無しさん:2006/01/28(土) 23:14:04
>>224
あんのかw

>>226
なんでって一番したのHPまともに読む気ないから
228デフォルトの名無しさん:2006/01/28(土) 23:14:53
うーむ。一通り読んだだけでは、理解できん>組み合わせ論
コンビニでビール買った後にでも、紙と鉛筆を用意してトライしよう。
229デフォルトの名無しさん:2006/01/28(土) 23:19:23
>>225
把握した。確かにそれで数は出せるのか
わざわざ説明サンクス

ってか題意満たして無くね?w


>>226
Dijkstra法だっけか?
あれがどんなのかは理解してるが、他人の虫食いソースなんて
読む気がしないからパス
230デフォルトの名無しさん:2006/01/28(土) 23:19:43
>>225
こういうのを思いつくのを数学的センスっていうんだろうなぁ。
私には力技しか無理です(ちなみに私は215です)。
231デフォルトの名無しさん:2006/01/28(土) 23:23:30
>>223 プロトタイプと main は省略.不正な式にも対応しない.
int expression(char **p) {
  int x = term(p);
  if (**p == '+') ++(*p), x += expression(p);
  return x;
}
int term(char **p) {
  int x = factor(p);
  if (**p == '*') ++(*p), x *= term(p);
  return x;
}
int factor(char **p) {
  int x;
  if (**p == '(') ++(*p), x = expression(p), ++(*p);
  else for (x = 0; isdigit(**p); ) x *= 10, x += **p - '0', ++(*p);
  return x;
}
232デフォルトの名無しさん:2006/01/28(土) 23:30:10
>>211
EOFって何ですか?
233デフォルトの名無しさん:2006/01/28(土) 23:31:55
>>232
End Of File
234デフォルトの名無しさん:2006/01/28(土) 23:32:04
>>232
ファイルの終端。コンソールから入力するときは CTRL+Z や CTRL+D など。つーかググれ。
235デフォルトの名無しさん:2006/01/28(土) 23:32:06
>>232
あなたはまずgoogleの使い方を知るべきです。
236デフォルトの名無しさん:2006/01/28(土) 23:34:37
>>226
読もうと努力したけど、アルゴリズムのところ、値を負にしてマークしたりしてて、理解が追いつかなかった。
237デフォルトの名無しさん:2006/01/28(土) 23:36:02
>>233-235
すみません。ありがとうございます!
>>210をコンパイルしてもエラーが出るんですがどうしてでしょうか?
238デフォルトの名無しさん:2006/01/28(土) 23:38:03
>>237 エラーメッセージは?
239デフォルトの名無しさん:2006/01/28(土) 23:40:45
cl /GX だっけ。
240デフォルトの名無しさん:2006/01/28(土) 23:45:36
#include<iostream>
#include<assert.h> // assert を使うためのヘッダ

class stack
{
private:
static const int max = 100; int data[max]; int sp;
public:
void push(int); void pop(); bool empty() const;
int top() const; int size() const;
friend bool equal(const stack&,const stack&);
stack(); ~stack();
};
void stack::push(int d){ assert(sp<max); data[sp++] = d; }
void stack::pop(){ assert(0<sp); --sp; }
bool stack::empty() const{ return sp==0; }
int stack::top() const{return data[sp-1]; }
int stack::size() const{ return sp; }
bool equal(const stack& s1,const stack& s2){
bool eq = true;
if(s1.sp!=s2.sp) eq = false;
else{
for(int j=0; j<s1.sp && eq; j++)if(s1.data[j]!=s2.data[j]) eq = false;
return eq;
}
}
stack::stack(){sp = 0;}
stack::~stack(){}
このクラスを実行すると、スタックが同じ場合には1,スタックが異なる場合には56と表示されました。これで合っているのでしょうか?
241デフォルトの名無しさん:2006/01/28(土) 23:46:11
>>238
エラーメッセージが長くて貼れませんでした。なので一応途中まで。
C:\MyC>gcc x.cpp -o x
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text+0x62):x.cpp: undefined reference
to `cin'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text+0x14f):x.cpp: undefined referenc
e to `cout'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text+0x1f0):x.cpp: undefined referenc
e to `cout'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$_S_oom_malloc__t23__malloc_alloc
_template1i0Ui+0x1a):x.cpp: undefined reference to `endl(ostream &)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$_S_oom_malloc__t23__malloc_alloc
_template1i0Ui+0x27):x.cpp: undefined reference to `cerr'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$_S_oom_malloc__t23__malloc_alloc
_template1i0Ui+0x2c):x.cpp: undefined reference to `ostream::operator<<(char con
st *)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$replace__t12basic_string3ZcZt18s
tring_char_traits1ZcZt24__default_alloc_template2b0i0UiUiUic+0x34):x.cpp: undefi
ned reference to `__out_of_range(char const *)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$replace__t12basic_string3ZcZt18s
tring_char_traits1ZcZt24__default_alloc_template2b0i0UiUiUic+0x8e):x.cpp: undefi
ned reference to `__length_error(char const *)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$resize__t12basic_string3ZcZt18st
ring_char_traits1ZcZt24__default_alloc_template2b0i0Uic+0x2c):x.cpp: undefined r
eference to `__length_error(char const *)'
C:\DOCUME~1\USER\LOCALS~1\Temp\ccqQcaaa.o(.text$__rs__H3ZcZt18string_char_traits
1ZcZt24__default_alloc_template2b0i0_R7istreamRt12basic_string3ZX01ZX11ZX21_R7is
tream+0xad):x.cpp: undefined reference to `streambuf::sungetc(void)'
242240 ◆OtZ3csKgUQ :2006/01/28(土) 23:46:17
>>240
[1] 授業単元:C++によるプログラミング
[2] 問題文(含コード&リンク):
stackにequal(const&,const&)(下のプログラム参照)を追加したプログラムを実行し、スタックを比較した結果を確認せよ。
[3] 環境
 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 2.90 [3.3] 言語:C++
[4] 期限:1月29日12:00 [5] その他の制限:特にありません
#include<iostream>
#include<assert.h> // assert を使うためのヘッダ
243デフォルトの名無しさん:2006/01/28(土) 23:48:14
>>241
gcc は C のコンパイラ。 C++ をコンパイルするときは g++ を使う。
244デフォルトの名無しさん:2006/01/28(土) 23:48:46
>>226
自分で実装したけど、コードの穴埋めをする気にはなれない。
たぶん途中の値を負にしたりするのは、そのノードが確定かどうかの
フラグに使っていると思うんだが、読むのはストレスが溜まる。
穴埋め以外不許可なら、変数表つけるとか出題者はもっと考えるべきだな。
245240 ◆OtZ3csKgUQ :2006/01/28(土) 23:50:10
>>242のテンプレは>>240のプログラムについてです。
246デフォルトの名無しさん:2006/01/28(土) 23:52:21
>>243
わかりました。やってみます。
247デフォルトの名無しさん:2006/01/28(土) 23:53:01
>>240
どうを実行して56を表示させたんだ?↓のテストは 1 0 ときちんと表示されるが?

int main() {
stack s1, s2, s3;
s1.push(10); s2.push(10); s3.push(11);
std::cout << (equal(s1,s2)) << std::endl << (equal(s1,s3)) << std::endl;
}
248デフォルトの名無しさん:2006/01/29(日) 00:05:09
>>194
遅レスだけど。内容はヒントの2番目の通り。ソースが汚いのは行数規制のせいなので許して。
#include <stdio.h>
void swap(int *x, int *y) {int temp = *x; *x = *y; *y = temp;}
void reverse(int *first, int *last) {for(; ; ) if (first == last || first == --last) return; else swap(first++, last);}
int next_permutation(int *first, int *last) {
    int *i = last - 1, *j, *k;
    if (first == last || first + 1 == last) return 0;
    for(; ; ) {
        j = i--;
        if (*i < *j) {k = last; while (!(*i < *--k)){} swap(i, k); reverse(j, last); return 1;}
        if (i == first) {reverse(first, last); return 0;}
    }
}
int is_derangement(int *a, int *p, unsigned int n) {
    while (n--) if (a[n] == p[n]) return 0;
    return 1;
}
int main() {
    int i, a[] = {0, 1, 2, 3, 4}, p[sizeof(a) / sizeof(a[0])], count = 0;
    for (i = 0; i < sizeof(a) / sizeof(a[0]); i++) p[i] = a[i];
    do {
        if (is_derangement(a, p, sizeof(a) / sizeof(a[0]))) {
            printf("(");
            for (i = 0; i < sizeof(a) / sizeof(a[0]) - 1; i++) printf("%d,", a[i]);
            printf("%d)\n", a[i]);
            count++;
        }
    } while (next_permutation(a, a + sizeof(a) / sizeof(a[0])));
    printf("number of derangement for %d = %d\n", sizeof(a) / sizeof(a[0]), count);
    return 0;
}
249240 ◆OtZ3csKgUQ :2006/01/29(日) 00:09:06
>>247さん。ありがとうございます。
すみません。main()を書き忘れておりました。
int main()
{
stack s1,s2;
s1.push(5);s1.push(8);s1.push(9);
s2.push(5);s2.push(8);s2.push(9);s2.push(10);
std::cout << equal(s1,s2) << std::endl;
s2.pop();
std::cout << equal(s1,s2) << std::endl;
return 0;
}
>>247さんが書かれたmain()では確かに 1 0 と表示されました。
250デフォルトの名無しさん:2006/01/29(日) 00:13:14
>>243
できました!ありがとうございます!
>>210の方もありがとうございました!
251デフォルトの名無しさん:2006/01/29(日) 00:14:14
前スレの767ですがスルーされてるのでよろしくお願いします。

[1] 授業単元: プログラミング基礎演習
[2] 問題文(含コード&リンク):
1.整数 P, X (1 < X < P で, P, X は互いに素) を与えて, X × Y を P で割った余りが 1 になるもっとも小さな正整数 Y を求めるプログラムを書いてください。
2.ユークリッドの互除法(正整数 X, Y (X > Y) の最大公約数は X を Y で割った余りと Y の最大公約数に等しい)の手順を使って最大公約数を見つけるプログラムを作れ
3.2を利用して1のプログラムを作り直せ。(P と X は「互いに素」なので,両者の最大公約数は必ず 1 というのを使う)
[3] 環境
 [3.1] unix
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] C
[4] 期限:2006年1月末
252デフォルトの名無しさん:2006/01/29(日) 00:14:16
>>249
equal関数でs1.sp!=s2.spの時に関数の最後でreturnしていないから。
253デフォルトの名無しさん:2006/01/29(日) 00:14:37
[1] 授業単元: 二次元配列
[2] 問題文(含コード&リンク):
ライツアウト(ttp://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%84%E3%82%A2%E3%82%A6%E3%83%88)を作成せよ。
どの場所のライトを点灯/消灯させるかをキー入力させて盤面を更新し、終了条件(すべて消灯)を満たすまでループするようにする。最初にどこが点灯しているかという「問題」は各自で適当に作成してよい。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 1月30日まで
[5] その他の制限:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1564.txt
↑のように表示させる部分まではできたのですが点灯/消灯がどうしてもできません。
254デフォルトの名無しさん:2006/01/29(日) 00:15:16
[1] 授業単元: プログラミング基礎演習
[2] 問題文(含コード&リンク):
1.getchar, putchar を用いて標準入力(stdin) からテキストデータを読み込みそのまま 標準出力(stdout) に書くプログラムを作成せよ。
ファイル末尾に達すると getchar の値が EOF になるのを利用するとよいだろう。
2.1のプログラムを改良して,アルファベット文字に関して大文字は小文字に変換,小文字は大文字に変換して表示するプログラムを作成しなさい。
3.1のプログラムを改良してそのままじゃなくて「行番号」を付けて表示させよ。
4.英文テキストファイルを読込んで,文字数,単語数,行数をカウントして表示するプログラム mywc を作成しなさい。
[3] 環境
 [3.1] unix
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] C
[4] 期限:2006年1月末
255デフォルトの名無しさん:2006/01/29(日) 00:15:47
[1] 授業単元: プログラミング基礎演習
[2] 問題文(含コード&リンク):
1.2つの分数(fraction)を入力し,その四則演算(+,-,*,/)を計算するプログラムを作成してください.
ただし,次の構造体を利用すること.ここでは,四則演算を関数化しないこと.また,既約分数にしなくとも良いです.
/*fraction_t型の定義*/
typedef struct {
int numerator; /*分子*/
int denominator; /*分母*/
} fraction_t;

/*fraction_t型の変数の宣言*/
fraction_t frt;

2.和(add),差(subtract),積(multi),商(quotient)を計算する4つの関数を作成せよ.
その関数を利用し,1のプログラムと同じ構造体を利用し,同じ動作をするプログラムを作成せよ.
3.2のプログラムで,計算が正しく行われない場合を列挙して,その対応策を考えよ.
(例 1/-2 のような計算結果は,美しい表示方法とはいえません)
4.3で列挙した対応策を,2で作成したプログラム上で実現せよ.
[3] 環境
 [3.1] unix
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] C
[4] 期限:2006年1月末
256240 ◆OtZ3csKgUQ :2006/01/29(日) 00:21:57
>>252さん、ありがとうございました!解決しました。
257デフォルトの名無しさん:2006/01/29(日) 00:25:44
>>255
2.の時点では適切に表示されないようにせよということかな?
そういう美しくない問題はいただけないなぁ。
258デフォルトの名無しさん:2006/01/29(日) 00:27:04
>>254
「単語」の定義は?「空白」で囲まれたもの?だとしたら「空白」の定義は?
isspace()が真を返すものでいいの?
259デフォルトの名無しさん:2006/01/29(日) 00:27:51
>>254
1,2,3のみ
行数制限のために改行をけしているから適当に改行するように
(1)
#include<stdio.h>
int main(void){int ch;while((ch=getchar())!=EOF)putchar(ch);return 0;}
(2)
#include<stdio.h>
#include<ctype.h>
int main(void){int ch;while((ch=getchar())!=EOF)putchar(islower(ch)?toupper(ch):tolower(ch));return 0;}
(3)
#include<stdio.h>
int main(void){int ch,l=1,w=0;for(;(ch=getchar())!=EOF;l+=(w=ch=='\n'?0:w+1)==0)w||printf("%3d: ",l),putchar(ch);return 0;}
260デフォルトの名無しさん:2006/01/29(日) 00:33:46
>>251
3 に 2をどう使ったらいいかわからんかったので,拡張GCDを新たに書いて使った.
わざわざプログラム三つ書くの面倒だったから適当に直してください.

void f(int P, int X) { /* 問1 */
  int Y;
  for (Y = 1; (X * Y) % P != 1; ++Y);
  printf("Y = %d\n", Y);
}
int gcd(int X, int Y) { /* 問2 */
  return Y > 0 ? gcd(Y, X % Y) : X;
}
/* 問3 で使う拡張GCD:
 * aX + bY = gcd(X,Y) なる gcd(X,Y), a, b を求める */
int extgcd(int X, int Y, int *a, int *b) {
  int g = X; *a = 1, *b = 0;
  if (Y > 0) g = extgcd(Y, X % Y, b, a), *b -= (X / Y) * (*a);
  return g;
}
void g(int P, int X) { /* 問3 */
  int Y, dummy;
  extgcd(X, P, &Y, &dummy);
  while (Y < 0) Y += P;
  printf("Y = %d\n", Y % P);
}
261デフォルトの名無しさん:2006/01/29(日) 00:41:42
>>231のプログラムをgccでコンパイルしたんですけど、
>>222にあるような実行例の場合、式を正しく読み込めず
value = 0となってしまいます。

原因分かる方いらっしゃいますか?
262デフォルトの名無しさん:2006/01/29(日) 00:47:05
>>257
そうみたいですね。2では動作すればいいだけで4で改良。

>>258
たぶんisspaceというのは聞いたことないです。

>>259
ありがとうございます。でもよく分かりません。

>>260
ありがとうございます。
263231:2006/01/29(日) 00:47:07
>>261
こちらではきちんと value = 114 が表示されました.
・割り算でゼロになってないか
・不正な入力をしなかったか(入力にスペースが含まれてはいけない)
などを確認してみてください.
264231:2006/01/29(日) 00:49:09
>>263 割り算なんか実装してないよね orz なんかボケてきたので後誰か頼
265デフォルトの名無しさん:2006/01/29(日) 00:56:38
[1] 授業単元:C++によるプログラミング
[2] 問題文(含コード&リンク):長いので後で書きます。
[3] 環境
 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 2.90 [3.3] 言語:C++
[4] 期限:1月29日12:00 [5] その他の制限:特にありません

main()で上手くいくようにComplexのデータを<<を用いて出力できるような関数
std::ostream& operator<<(std::ostream& os,Complex& c){
c.print(os);
return os;
} を以下のプログラムに追加・必要であれば修正するようなのですが、どうすればよいのか分かりません。
#include<iostream>

class Complex
{
private: double real; double imag;
public:Complex(){ real = 0.0; imag = 0.0; }Complex(double r,double i){ real = r; imag = i; } ~Complex() {};
double re() const {return real;} double im() const {return imag;}
void set_re(double r){ real = r; } void set_im(double i){ imag = i; }
void print(std::ostream& os) const{
os << real << "+" << imag << "i";
}
};
int main(){
Complex a[3];
a[0] = Complex(1.00,2.00); a[1] = a[0] + Complex(0.00,1.00);
Complex *c = &(a[2]); *c = a[0];
for(int i=0; i<3; i++) std::cout << a[i] << std::endl;
Complex *b = new Complex[3]; for(int i=0; i<3; i++)b[i]=a[i]+Complex(1.00,1.00);
for(int i=0; i<3; i++)std::cout<<b[i]<<std::endl; delete [] b; return 0;
}
266259:2006/01/29(日) 01:00:11
>>262
具体的にソースのどの部分が分からないのか該当箇所を列挙してくれ。
それによって書き換える場所と書き方を変えないといけないから。
まぁ多分(3)は全書き直ししないといけないだろうなぁとは推測してるけどw
267デフォルトの名無しさん:2006/01/29(日) 01:06:24
>>231のソースを拝借中

9*9*9
value = 729 (これは正しい)

(2*3)+5
value = 0

3*(2+2)
value = 1

3+2
value = 5 (これも正しい)


おかしいのはfactorなのかな…
ちょっと弄ってみるか
268デフォルトの名無しさん:2006/01/29(日) 01:18:02
>>261
「入力される式の中の数が1桁の正整数」という与えられた前提では、
これでうまく計算されるはず。
int factor(char **p) {
    int x;
    if (**p == '(') ++(*p), x = expression(p), ++(*p);
    else x = **p - '0', ++(*p);
    return x;
}
269231:2006/01/29(日) 01:19:53
>>267
うーん,手元では,真ん中の二つも正しい結果が出てるんですけどねえ…….むーう.
とりあえずソース全文置いときますね http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1565.c
270デフォルトの名無しさん:2006/01/29(日) 02:10:14
>>164にずいぶん似ているけど、本人?>>265
271デフォルトの名無しさん:2006/01/29(日) 02:19:35
日曜の昼が締め切りってどーよ?
272デフォルトの名無しさん:2006/01/29(日) 02:28:48
C++の使用コンパイラのこと教えてくれてありがとです。
・・・VC++が予想以上に多かったかなぁ・・・漏れも導入を検討します。
使おうかと思ってたのがg++(gcc 3.3.2)だったんで、ちと調べてみます。
273デフォルトの名無しさん:2006/01/29(日) 02:52:07
>>266
islower(ch)?toupper(ch):tolower(ch)

(3)は全然分からないorz
274デフォルトの名無しさん:2006/01/29(日) 03:04:36
>>273
OKOK。
三項演算子が分からんのかな? もしかするとislower()とかの関数の方かも知れんけど、
まーとりあえず三項演算子を排除して書く。
(3)は20秒位で書いたカオスなソースなんで全部書き直しっと。

//(2)
#include<stdio.h>
#include<ctype.h>
int main(void){
    int ch;
    while((ch=getchar())!=EOF){
        if(islower(ch))
            ch = toupper(ch);
        else
            ch = tolower(ch);
        putchar(ch);
    }
    return 0;
}
//(3)
#include<stdio.h>
int main(void){
    int ch,old='\n',line=0;
    while((ch=getchar())!=EOF){
        if(old == '\n')printf("%3d: ",++line);
        old = ch;
        putchar(ch);
    }
    return 0;
}
275デフォルトの名無しさん:2006/01/29(日) 03:35:03
>>274
すみません。islower、toupper、tolowerも分からないですorz
たぶん'a'=97,'A'=65を利用するのかと思います。
276デフォルトの名無しさん:2006/01/29(日) 03:40:38
>>275
ってことはASCIIコード前提でOKなんだね
(2)
#include<stdio.h> 
#include<ctype.h> 
int main(void){ 
    int ch;
    while((ch=getchar())!=EOF){
        if('a' <= ch && ch <='z')
            ch = ch + 'A' -'a';
        else if('A' <=ch && ch <='Z')
            ch = ch + 'a' -'A'; 
        putchar(ch); 
    } 
    return 0; 
}
277276:2006/01/29(日) 03:42:52
あ、#include<ctype.h>は要らんから消しといて
278デフォルトの名無しさん:2006/01/29(日) 03:52:15
>>276
神様ありがとうございます。
こうやって見ると自分でもできそうなのに全然できないorz感謝です。
もし暇があれば明日でもいいので>>254の4も教えていただけると最高です。
279焼豚:2006/01/29(日) 03:55:42
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク):「グラフ作成プログラム」
               プログラムを実行したら、まずグラフ名と数値の入力を求められ、 
               数値データを入力したら、自動でXwindow上に二次元座標でグラフをプロットするプログラム。数値に対して座標軸などがオートで決定される。
[3] 環境
  OS:TurboLinux
  言語:C++
[4] 期限: 2/1
  どうかお願いします
280デフォルトの名無しさん:2006/01/29(日) 04:00:27
>>279
どこまで使っていいの?gnuplotとか、pgplotとか使っていいの?
281デフォルトの名無しさん:2006/01/29(日) 04:23:14
>279
なんだか出題内容をきちんと理解していないような気がするな。
こういうことか?

1.起動したら標準入力から二次元座標の列を手作業で入力する。
2.入力が終了したらEOFでも入れる。
3.x軸とy軸の最大値最小値を元に描画範囲を決定する。
4.gnuplotにデータを渡す。
282デフォルトの名無しさん:2006/01/29(日) 04:25:46
>>278
isspaceは確か授業で習ってないと言ってた気がするので(真面目に読んでないんで自信なし)
適当に空白は指定しておいた。

#include<stdio.h> 
int main(void){ 
    int ch;
    int in_word = 0;
    int line = 0,word = 0,bytes= 0;
    while((ch=getchar())!=EOF){
        ++bytes;
        if(ch=='\n' || ch==' ' || ch=='\t'){
            if(ch=='\n')++line;
            in_word=0;
        }else{
            if(in_word == 0){
                ++word;
                in_word = 1;
            }
        }
    }
    printf(" %d  %d %d",line,word,bytes);
    return 0; 
}
283デフォルトの名無しさん:2006/01/29(日) 04:31:05
>279
あと、オレの知り合いの大学の先生でここチェックしている人がいるから気をつけろよ
284デフォルトの名無しさん:2006/01/29(日) 08:43:34
isspaceとかtoupperとかググれば先頭に出てくるんだがなぁ
丸投げするような奴はその程度のことすらしないのかと改めて悲しくなった
285焼豚:2006/01/29(日) 10:54:52
>281
遅れて申し訳ありません。そんな感じです。おねがいします
286デフォルトの名無しさん:2006/01/29(日) 11:14:23
データを配列に記憶するのと構造体に記憶することの長所と短所を教えてください。
前スレでも聞いたのですがよくわかりませんでした。
プログラミングが全然わかってないので少しやさしめに答えてもらえるとうれしいです。
287デフォルトの名無しさん:2006/01/29(日) 11:24:46
よくわからんが配列は単純に連続した数字等を入れるときはいいんでない
数列とか
構造体はたくさんのパターンが同じ物入れたいときとか
100人分の身長体重視力・・・とか
参照する時もname.weightとかで出せて便利でしょて思う
288デフォルトの名無しさん:2006/01/29(日) 11:32:27
>>286
構造体というか線形リスト(連結リスト)のことだな。
287に付け加えると配列は必要な分だけあらかじめ領域を確保するから
格納するデータ数が決まって(又は予想出来る)いる場合じゃないと駄目(後から配列を大きくする事は出来ない)だけど
線形リストはデータ数が決まってなくても使える。
追加はノードを新しく作成してポインタでつなげればいいし、削除もポインタを繋ぎかえてノードを解放すればいい。
ソートなんかもポインタのつなぎかえだけでOK。
ただしプログラムが面倒になる。
289デフォルトの名無しさん:2006/01/29(日) 11:42:30
[1] 授業単元: プログラム基礎演習
[2] 問題文(含コード&リンク):
以下のプロトタイプ宣言で示すインターフェイスを持つ関数を、各問の指示に従って作りなさい。
ただし与えられたデータ構造、インターフェイスを変更しないこと。

(問)
配列内のデータを昇順に並び替える関数、及び降順に並び替える関数をそれぞれ作成せよ。
void sort(int[], int n);
/* d[] : データが格納されている関数, n : 配列内のデータの個数 */

  OS:vineLinux
  言語:C
 コンパイラ : gcc
[4] 期限: 06/1/31まで
[5]
・#include<stdio.h>のみでお願いします。
・アルゴリズム (探索、整列)に絡む範囲は未習です。


神様お助けください。
290デフォルトの名無しさん:2006/01/29(日) 11:43:52
俺も構造体の役割がよくわからんかった。
STUDENT:氏名、学生番号、性別・・・
とかやらずにそれぞれのグローバル配列持っておいて、
IDで管理すればいいじゃないか、と思ってた。

それでもできる、それがCクォリティ。
>>288のような連結リストのとき以外で使う意味がたいしてない。

と思っていたのはオブジェクト指向を勉強する前までだな。
291デフォルトの名無しさん:2006/01/29(日) 11:44:45
神じゃないから助けない><
292デフォルトの名無しさん:2006/01/29(日) 11:46:08
>>290
いやそうでもなくても構造体使うと
例えば多数の座標を持ちたい時とか
プログラム組む時にわかりやすいんだよ
293デフォルトの名無しさん:2006/01/29(日) 11:55:17
>>292
今では構造体なしの生活は考えられないです。
彼女と知り合えて幸せです。
294デフォルトの名無しさん:2006/01/29(日) 11:55:21
>>289

#define swap(type, x, y) do { type t = x; x = y; y = t; } while(0)

void sort(int d[], int n)
{
int i,j;

for(i = 0; i < n; i++) {
for(j = 1; j < n -1; j++)
if(d[j-1] > d[j])
swap(int d[j - 1], a[j]);
}
}

これは昇順だから降順はif(d[j-1] > d[j])をif(d[j-1] < d[j])とすればいい。
これは前後を比較して交換するバブルソートというソーティングアルゴリズム。
295294:2006/01/29(日) 11:57:25
ミスった。
正しくはswap(int, d[j - 1] , d[j]);
296286:2006/01/29(日) 11:58:12
>>287>>288
どうもありがとうございます。やっと意味がわかりました!
297265 ◆H4LNFsCSUE :2006/01/29(日) 13:05:39
すいません。>>265に書き込んだ者ですがどなたかお答えいただけませんか?
期限は明日でも構いませんので。
298デフォルトの名無しさん:2006/01/29(日) 13:13:30
C++シラネ
299デフォルトの名無しさん:2006/01/29(日) 13:46:39
>>297
1)オペレーターの記述は教科書に書いてあるはず
2)教科書無いなら、書店や図書館に置いてあるC++の本でオペレーターの定義が書いてある本を読む
3)ぐぐる
だいたい、そんな回答だった気がする。
300デフォルトの名無しさん:2006/01/29(日) 14:39:18
どなたか>>253もお願いします。
301デフォルトの名無しさん:2006/01/29(日) 14:42:36
突然期限が明日に延びるってどういうことだろう。
しかも前の締め切りは日曜の12時だし。
簡単な問題だが、答える気なくすな。
302265 ◆H4LNFsCSUE :2006/01/29(日) 14:53:40
>>265です。
>>301申し訳ないです。できるだけ早めにご回答を頂きたかったので、
   早めに設定してしまいました。
303デフォルトの名無しさん:2006/01/29(日) 15:00:56
>>302
そういう時は嘘でも「教授に頼んで延ばしてもらった」と言うもんだ。
以下を追加。これで動く。
Complex operator+(const Complex& x, const Complex& y) {
    return Complex(x.re() + y.re(), x.im() + y.im());
}
304265 ◆H4LNFsCSUE :2006/01/29(日) 15:17:26
>>303ご回答ありがとうございます。それはどこに書けばいいですか?また、
std::ostream& operator<<(std::ostream& os,Complex& c){
c.print(os);
return os;
}
はどこに書けばいいでしょうか?
305デフォルトの名無しさん:2006/01/29(日) 15:22:20
>>304
#include<iostream>
class Complex
{
    // 略
};
Complex operator+(const Complex& x, const Complex& y) {
    // 略
}
std::ostream& operator<<(std::ostream& os, Complex& c){
    // 略
}
int main(){
    // 略
}
306デフォルトの名無しさん:2006/01/29(日) 15:28:22
>>300
ほい。かなりいい加減だから、適当に直してね。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1569.txt
#操作間違って、スレたてちゃった。削除しなきゃ。orz
307デフォルトの名無しさん:2006/01/29(日) 15:34:34
>>300
#include<stdio.h>
#include<stdlib.h>
#define ON 1
#define OFF 0
int main(void)
{
int i,j,x,y, LIGHT[5][5]={{ON,ON,OFF,OFF,OFF},
{ON,OFF,OFF,OFF,OFF},
{OFF,OFF,OFF,ON,OFF},
{OFF,OFF,ON,ON,ON},
{OFF,OFF,OFF,ON,OFF}};
int flag;
while(1){
printf(" 01234\n");
for(i=0; i<5; i++){ printf("%d", i); for(j=0; j<5; j++){ printf("%d", LIGHT[i][j]); } printf("\n"); }
printf("x:"); scanf("%d", &y);
printf("y:"); scanf("%d", &x);
if( (x < 0) || (4 < x) || (y < 0) || (4 < y)) {printf("wrong number!!\nreinput.\n\n");continue;}
if( (x - 1) >= 0) LIGHT[x-1][y] = LIGHT[x-1][y]?OFF:ON;
if( (x + 1) <= 4) LIGHT[x+1][y] = LIGHT[x+1][y]?OFF:ON;
if( (y - 1) >= 0) LIGHT[x][y-1] = LIGHT[x][y-1]?OFF:ON;
if( (y + 1) <= 4) LIGHT[x][y+1] = LIGHT[x][y+1]?OFF:ON;
LIGHT[x][y] = LIGHT[x][y]?OFF:ON;
flag = 0; for(i=0; i<5; i++) { for(j=0; j<5; j++) { if(LIGHT[i][j] == ON) { flag=1; break; } } } if (flag == 0) break; }
printf("complete!\n");
return 0;
}

多分動くと思う。線引き色付けは自分でやってね。
308デフォルトの名無しさん:2006/01/29(日) 15:34:46
設問のほーが間違ってるんだとおもうが、oparator <<の第2引数はconstをつけるもんじゃなかろーか?
309265 ◆H4LNFsCSUE :2006/01/29(日) 15:44:17
>>305ありがとうございました。
>>308ありがとうございました。>>305で解決しました。
310106:2006/01/29(日) 16:13:40
>>106をお願いしますm(__;)m
ってかどうやら問題がだいぶ不親切で分かりにくいみたいですね・・・
ここの住人にも理解できないのに俺にできるワケねぇorz
311デフォルトの名無しさん:2006/01/29(日) 16:21:47
[1] 授業単元: プログラミングC++
[2] 問題文(含コード&リンク):
次のプログラムは学生の成績データを管理するものである。クラスRecordは1人の学生の[番号(id),名前(name),点数(score)]
を記録するもので、出力用の関数(operator<<)が定義される。成績データはクラスSeisekiのdataにRecordのリストとして記録されている。
Seisekiはoperator<<と3つのメンバ関数insert,lookup,erase_worstを持つ。その働きは
@insert(int id,const std::string& nm, int s):[番号(id),名前(name),点数(score)]というデータを追加
Alookup(int id):番号がidのデータを検索し、std::coutに出力する。(なければnot foundと出力)。
Berase_worst():点数の最も悪い学生のRecordを削除
というものである。空白を埋め、プログラムを完成させよ。
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26928
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: C++
[4] 期限: 1月31日ですが、早めにしていただければありがたいです
よろしくお願いします。
312デフォルトの名無しさん:2006/01/29(日) 16:57:09
>>311
条件が不足している。insert()はどういう順番に追加するの?
313デフォルトの名無しさん:2006/01/29(日) 17:01:03
>>312「できれば番号順にソートしろ」とのことですが、
insert()を呼び出すごとに末尾に追加するようにしていただければ充分です。
314デフォルトの名無しさん:2006/01/29(日) 17:05:16
>>310
問題は自明なんだけど、書きかけ方が酷いんだよなあ。
もし書きかけた部分も訂正していいなら、もうちょいやってみるけど。
315デフォルトの名無しさん:2006/01/29(日) 17:16:12
>>310
ちょっと追ってみたが、、、
・Main部
char *FileName = "graph";
GetMatrix(FileName);
shortestpath();
とすると、、、
最初のElementSeparate( MatFile, NodeLabel)の中で
List[LabelNum] = atoi( IntString );
の部分でList[LabelNum]がList[2]=(*NodeLabel+2)をオーバーするんだけどw

それとノードが5個で3x3の行列容易されてもパス重み格納できなくない?
316デフォルトの名無しさん:2006/01/29(日) 17:23:43
>>311
idの番号順(昇順、小さい順)。挿入する場所を探してinsertする。
> // 点数が最も悪い学生を消去
しっかしこの辺り、背筋が寒くなる先生だなw

void Seiseki::insert(int id, const std::string& nm, int s)
{
    std::list<Record>::iterator first = data.begin(), last = data.end();
    while (first != last && first->id < id) ++first;
    data.insert(first, Record(id, nm, s));
}
void Seiseki::lookup(int id) const
{
    std::list<Record>::const_iterator first = data.begin(), last = data.end();
    while (first != last && first->id != id) ++first;
    if (first != last) std::cout << *first << std::endl;
}
void Seiseki::erase_worst()
{
    std::list<Record>::iterator first = data.begin(), last = data.end(), i = first;
    if (first != last)
        for (++first; first != last; ++first)
            if (first->score < i->score)
                i = first;
    if (i != last) data.erase(i);
}
317310(106):2006/01/29(日) 17:24:22
>もし書きかけた部分も訂正していいなら

もうそれでお願いしますorz
とりあえずちゃんと動作してくれればなんとかなるので。
318デフォルトの名無しさん:2006/01/29(日) 17:28:54
>>317
んじゃ、入力ファイルの形式ちょうだい。

なんかファイル読み込みのあたりから狂ってる気がする。
319311:2006/01/29(日) 17:46:36
>>316さん、ありがとうございました!
320317:2006/01/29(日) 18:01:26
>ファイル読み込みのあたりから狂ってる気がする
え゛え゛え゛・・・先生しっかりしろよorz

入力ファイルの形式って・・・
0 1 2 3 4
0 2 0 2 0
2 0 2 1 3
0 2 0 5 4
2 1 5 0 2
0 3 4 2 0
コレだと思うですが。違うんですか(・ω・)?
321デフォルトの名無しさん:2006/01/29(日) 18:03:23
>>317(310)(106)
一応、shortsteppathの中は読み終わったよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1571.txt
動作確認していなので、間違っている可能性もあるけど。
たぶん、このスレでこれぐらいの課題は、できる人は多いけど、
やりたくない人も多いだけだと思うよ。
322デフォルトの名無しさん:2006/01/29(日) 18:11:02
>>320
1行目が何なのか、二行目は何なのか、とかそういうのを聞いてる。

106 では1行目は接点番号って書いてあるけど、たとえば

8 7 6 5
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0

みたいな入力も許されるの?
323321:2006/01/29(日) 18:14:00
>>322
いや、たぶん0スタートだと思うよ。あの関数、
0スタートで書いてあったから。
324デフォルトの名無しさん:2006/01/29(日) 18:18:49
GetMatrix()の不足分。
if ( Store ) {
  Store = OFF ;
  IntString[j] = '\0' ;
  List[LabelNum] = atoi( IntString ) ;
  if(DEB) printf(" List[%d] %d", LabelNum, List[LabelNum] ) ;
  LabelNum++ ;
}

俺の力量不足なんだろうが、読むのに時間のかかるプログラムだな・・・。
325デフォルトの名無しさん:2006/01/29(日) 18:21:28
>>323
配列の添え字と、接点番号が一致している必要は無いでしょ。
326デフォルトの名無しさん:2006/01/29(日) 18:24:29
あー 読んでてイライラしてきた.

とりあえず息抜きに全部書き直してみたプログラムおいときますね
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1572.c
327320:2006/01/29(日) 18:25:35
0 1 2 3 4
0 2 0 2 0
2 0 2 1 3
0 2 0 5 4
2 1 5 0 2
0 3 4 2 0
これを分かりやすく書くとこうなります
http://ccfa.info/cgi-bin/up/src/up23700.jpg
x接点とy接点との距離が数値なわけです

そして画像で表すとこうなります
http://ccfa.info/cgi-bin/up/src/up23699.jpg
328デフォルトの名無しさん:2006/01/29(日) 18:27:22
まあ・・・入力末尾に改行がないと無限ループしそーだしな・・・>モトの
おう。それくらい、キレイキレイに書いてくださると明快だなぁ>326
329デフォルトの名無しさん:2006/01/29(日) 18:29:40
>>327
それは分かるんだけど、一例でしかないでしょ。

最初の行は必ず 0 から始まる連番なの?違う場合はありうるの?それ以外の入力は考えなくていいの?
330デフォルトの名無しさん:2006/01/29(日) 18:32:36
>>325
そうだね。読み込みの関数を見てなかったから気が付かなかったけど、
グローバルでノードの名前を格納する変数を作っているみたいだね。
だから、最初のノードの名前はとりあえず0の必要はなさそう。
早とちりスマソ
331デフォルトの名無しさん:2006/01/29(日) 18:37:00
>>330
でも最終結果を表示するところではその番号を参照してないんだよな。
332320:2006/01/29(日) 18:37:46
最初の行は必ず0から始まる連番です
入力形式はそれ以外考えなくていいようです
333デフォルトの名無しさん:2006/01/29(日) 19:33:37
>>320(332)
ほい。自分(321)と324氏のコードを補って、gccで動作確認したものを
上げておくよ。これでばっちりだろう。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1573.txt
でも、326氏のコードで提出して、文句を言ってもいいかもねw
334332:2006/01/29(日) 19:39:17
>>333
凄ぇ・・・流石ですね。
皆様どうもありがとうございましたm(__)m
335デフォルトの名無しさん:2006/01/29(日) 20:09:46
>>333
超お疲れ
336デフォルトの名無しさん:2006/01/29(日) 21:53:25
明日締め切りのの駆け込みがあるかなーと覗いてみたが、なさそーね。
337デフォルトの名無しさん:2006/01/29(日) 22:33:58
息抜きのつもりがしっかり遊んじゃって、眠気&レポートと格闘している俺がいる。
338デフォルトの名無しさん:2006/01/29(日) 22:38:57
がんがれ、俺は明日のメシの仕込みでもするわ・・・。
339デフォルトの名無しさん:2006/01/29(日) 22:51:36
[1] 授業単元:C++によるプログラミング
[2] 問題文(含コード&リンク):以下のプログラムは地域名を入力するとその地域番号を出力するもの。
地域名と番号はEntryというクラスの配列で記憶し、string nameで地域名、string phoneで番号を
格納している。@地域番号が0995-…のときは099-5…へ変換し、
A入力した文字列が地域名に含まれる場合、その地域名と番号を表示する
プログラムである。このプログラムをmapを用いて書き換えよ。map<std::string,std::string>
を用い、地域名をキーとして番号を求められるようにせよ。
元のプログラムです―>http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26935
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 1月31日
よろしくお願いします
340デフォルトの名無しさん:2006/01/29(日) 23:05:28
>>339
#include <iostream>
#include <string>
#include <map>
int main(void)
{
  std::map<std::string,std::string>e;
  e["Hokkaido"] = "099-30-000";
  e["Tohoku"] = "0995-1-111";
  e["Kanto"] = "099-32-222";
  e["Chubu"] = "099-33-333";
  e["Kinki"] = "0995-4-444";
  std::map<std::string,std::string>::iterator itr = e.begin(),end = e.end();
  for(;itr != end;++itr)
    if(itr->second.find("0995")==0)itr->second.replace(3,2,"-5");// 地域番号 "0995-x-xxx" を "099-5x-xxx"

  std::cout << std::endl;
  std::cout << "検索用文字列を入力して下さい: ";
  std::string s;
  std::cin >> s;
  int k = 0;
  for(itr = e.begin();itr != end;++itr)
    if(itr->first.find(s)!=itr->first.npos){
      std::cout<< itr->first << ": " << itr->second << std::endl;
      k++;// k の初期値は0
    }
  if(k==0)  std::cout << "入力された文字列に一致するものは見つかりませんでした " << std::endl;
  return 0;
}
341339:2006/01/29(日) 23:24:05
>>340ありがとうございます。
342デフォルトの名無しさん:2006/01/30(月) 00:07:18
>>340
ずいぶん早い仕事だなw
後でのんびりやろうかと思ったら、もう終わっているとは。
343デフォルトの名無しさん:2006/01/30(月) 03:40:19
眠れねぇ・・・Cの燃料くれ。
ただし、今手元にK&Rもなんもないんで、そこんとこよろしく。
344デフォルトの名無しさん:2006/01/30(月) 04:20:24
[1] 授業単元:C++によるプログラミング
[2] 問題文(含コード&リンク):
コンストラクタ、デストラクタが起動されるごとにその旨を表示させる
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26938
を実行すると、(行数制限のため、改行はほとんど入れてません。また、//は
実行結果で出力されたものではなく質問の便宜上付け加えたものです)
aaa()bbb()bbb()bbb()aaa()aaa(3,4)~aaa()aaa(7,4)~aaa()aaa(7,4)~aaa()
aaa(7,4)~aaa()~aaa()
//aaa()bbb()ccc()~ccc()~bbb()~aaa()~bbb()~bbb()~bbb()~aaa()//
という結果になるのですが、//…//で囲んだところが何故こうなるかわかりません。
恐らくはmain()のccc c;でこのような表示がされているのだと思います。
詳しく説明していただける方、よろしくお願いいたします。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 1月31日

345デフォルトの名無しさん:2006/01/30(月) 05:19:41
>>344
スラッシュの内側のみ

メインのccc c; に対応するのが aaa()bbb()ccc() コンストラクタ

プログラム終了時に入るデストラクタが
c部分 ~bbb()^aaa()^ccc()
b[3]部分 ~bbb()~bbb()~bbb()
a部分 ~aaa()

pで宣言してる部分はdelete明示してるのでc宣言前にデストラクタ走ってる。と思
346デフォルトの名無しさん:2006/01/30(月) 05:22:40
配列はb[]じゃなくx[]だったし

「^」記号まぎれこんでるし・・・
347デフォルトの名無しさん:2006/01/30(月) 10:02:58
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
書ききれないので次の場所に書きます。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual Studio
 [3.3] 言語: C++
[4] 期限: 今日の午後五時まで
[5] その他の制限: できれば全文書いてくれると助かります。
348デフォルトの名無しさん:2006/01/30(月) 10:04:59
>>347の問題
sumlist を拡張し, 二項演算子 + の使える全ての型 T に対して使える
template 関数 template <class T> T sumlist(list<T>&) に拡張して下さい.
#include <iostream>
#include <list>
using namespace std;
int sumlist(list<int>& l);
int main() {
list<int> lst;
for (int i = 0; i < 10; i++)
lst.push_back(i);
cout << "size =" << lst.size() << endl;
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl;
cout << "sum of lst = " << sumlist(lst) << endl;
for (list<int>::iterator it = lst.begin(); it != lst.end(); )
if ((*it) % 3 == 0)
it = lst.erase(it);
else
++it;
for (list<int>::iterator it = lst.begin(); it != lst.end(); ++it)
cout << *it << ' ';
cout << endl;
cout << "sum of lst = " << sumlist(lst) << endl;
return 0; }
int sumlist(list<int>& l) {
int i = 0;
for (list<int>::iterator it = l.begin(); it != l.end(); ++it)
i += *it;
return i; }
349デフォルトの名無しさん:2006/01/30(月) 10:13:13
>>348
-=・=- -=・=-

前見たなこれ
350デフォルトの名無しさん:2006/01/30(月) 10:34:29
プログラム初心者です。
Big5→UTF-8→UTF-16に変換するプログラムを作っているのですが
iconv_open()を使用している箇所があり何を行っているのか不明です・・・
色々調べては見たのですが
ディスクリプタ(descriptor)とはなんなのでしょうか?
351デフォルトの名無しさん:2006/01/30(月) 11:19:57
突然失礼します。

#include <stdio.h>
#include <string.h>
#define MaxLine 8
main(){
FILE *fp;
int k;
char name[MaxLine], number[MaxLine], prefix[MaxLine];
if((fp = fopen("telbook","r")) == NULL){
printf("Cant open the telbook\n");
exit(1);
}
for(k = 0; k < MaxLine; k++){
fscanf(fp, "%s %s", &name[k], &number[k]);
}
fclose(fp);
for(k = 0; k < MaxLine; k = k + 1){
printf("%s %s\n", name[k], number[k]);
}
}
をコンパイルして出力すると、
%;%0%a%s%H%(%i!<
と表示されてしまいます。
どうかお助けくだしあ(TT
352デフォルトの名無しさん:2006/01/30(月) 11:40:07
>>350
ファイルディスクリプタのこと?
ファイルディスクリプタならカーネルの中のストリーム(ファイル、open file。 バイト列の流れ)
をプロセスに直接見せられないからカーネルの持っているストリームに番号を対応付けて
プロセスにその番号を指定させる。
その番号のこと。 俺もあんまり詳しくないから微妙に間違ってるかも。
もしUNIX系ならUNIXプログラミング質問すれで聞いた方がいいと思う。
353デフォルトの名無しさん:2006/01/30(月) 12:34:09
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
リストの n 番目のセル(ただし、先頭を0番目とする)を削除する関数 delete() は以下のように定義される。関数 insert(), delete() を使用して実行結果と同じリスト操作を実現するプログラムの main()関数を作成しなさい。
実行例中のdelete[4]、insert[3,58]などはprintf()で表示すること。
・関数定義
void delete( struct cell **plist, int n )
/*
plist : リストの先頭を示すポインタのアドレスを示すポインタ
n : リストの先頭から数えた削除するセルの番号
*/
{
int i;
struct cell *p;
if( n<0 ) {
printf("Error: cell(%d) doesn't exist.\n", n);
exit(1);
}
for(i=0; i<n; i++) {
if ( *plist == NULL ) {
printf("Error: cell(%d) doesn't exist.\n", i);
exit(1);
}
plist = &((*plist)->link);
}
if ( *plist == NULL ) {
printf("Error: cell(%d) doesn't exist.\n", i);
exit(1);
}
p = *plist;
*plist = p->link;
free( p );
}
354デフォルトの名無しさん:2006/01/30(月) 12:35:12
>>353のつづきです。
実行例
$ ./ex2
print_list: 23 34 45 56 67 78 length = 6 insert[1,58]
print_list: 23 58 34 45 56 67 78 insert[2, 6]
print_list: 23 58 6 34 45 56 67 78 insert[3, 2]
print_list: 23 58 6 2 34 45 56 67 78 length = 9delete[4]
print_list: 23 58 6 2 45 56 67 78 delete[6]
print_list: 23 58 6 2 45 56 78 delete[2]
print_list: 23 58 2 45 56 78 length = 6 delete[4]
print_list: 23 58 2 45 78 delete[1]print_list: 23 2 45 78 delete[2]
print_list: 23 2 78 delete[0]
print_list: 2 78 length = 2
$
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C言語
[4] 期限: 1月31日
よろしくお願いします。
355デフォルトの名無しさん:2006/01/30(月) 12:49:07
>>353
まぁdeleteの中身がゴミなのはまぁ良いとして、struct cellの定義はなに?
こっちが適当に書いても良いんだけど、後で文句言われるとスゲー嫌だから。
356デフォルトの名無しさん:2006/01/30(月) 13:09:20
>>348
前スレに書いた
357デフォルトの名無しさん:2006/01/30(月) 13:12:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):以下のグラフにおいて、V0からV6への最大流を求めるグラフを作成しなさい。
(グラフは、このようになっています。)
http://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi23177.jpg.html
最大流と最大流を実現したときの各辺に流れる量を出力すること。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C
 [3.3] 言語:C
[4] 期限: 2006年1月31日13:00まで
[5] その他の制限:特になし

申し訳ありませんが、よろしくお願いします。
358デフォルトの名無しさん:2006/01/30(月) 13:23:12
>>357
赤子に逆ギレされた(´・ω・`)
359デフォルトの名無しさん:2006/01/30(月) 15:05:10
>>355
すいません遅れました。
struct cell {
int data;
struct cell *link;
};
360デフォルトの名無しさん:2006/01/30(月) 15:05:38
[1]授業単元: プログラミング演習
[2] 問題文:
5本の直線を引き、平行な直線があればその直線をわかりやすく表示するプログラムを作成せよ。
直線を引く方法は座標入力でもマウス入力どちらでも構わない。
但し、平行な直線同士であっても以下の場合は平行線とはしない
・直線同士が重なって1本になっている場合
・直線同士が離れすぎている場合(垂線が引けない場合)
・別の直線と交わっている場合

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VC.net
 [3.3] 言語:C++
[4] 期限:2006年01月31日9:00まで
[5] その他の制限:ファイル名は「heikou」

申し訳ありませんがよろしくお願いします。
361デフォルトの名無しさん:2006/01/30(月) 15:12:51
362デフォルトの名無しさん:2006/01/30(月) 15:19:07
>>350
正確な表現ではないけども、
Win32 でいうハンドルと同じようなものだと考えても実用上問題ない。
それとスレ違い。
363デフォルトの名無しさん:2006/01/30(月) 15:34:57
>>360
>・別の直線と交わっている場合

5本とも平行じゃないと平行線としないということか?
364デフォルトの名無しさん:2006/01/30(月) 15:43:12
[1] 授業単元:プログラミング C++
[2] 問題文(含コード&リンク):
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26953
を stack に対する代入関数を定義し、正常に動くようにせよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 1月31日
よろしくお願いします
365デフォルトの名無しさん:2006/01/30(月) 15:49:45
>>364
メンバ関数に以下を追加でOK
tack(const stack&s){sp=s.sp;max=s.max;data=new int[max];for(int i=0;i<max;++i)data[i]=s.data[i];}
stack&operator=(stack s){swap(s);return *this;}
void swap(stack&s){
    int t=sp;sp=s.sp;s.sp=t;
    t=max;max=s.max;s.max=t;
    int*p=data;data=s.data;s.data=p;
}
366365:2006/01/30(月) 15:50:42
やべ切れた
×tack
○stack
367360:2006/01/30(月) 15:52:53
>>363
説明足らずですみません。
5本のうち平行である直線は何本でも何組でも構いません

 / /  \ | _
↑この場合は左2本が平行である

 × / 
↑他の直線が交わっていたら平行ではない

 \/ /
↑他の直線の始点または終点が乗っていると平行ではない

 / | /
↑間に別の直線があると平行ではない
368365:2006/01/30(月) 15:52:59
あ、忘れてた。
stack(int)のsp==0;はsp=0;の間違いと思うからそこも修正ね
369364:2006/01/30(月) 16:07:00
>>365>>366>>368ありがとうございました!
370デフォルトの名無しさん:2006/01/30(月) 16:24:45
>>367
それは直線じゃなくて、線分だ。


>間に別の直線があると平行ではない
はどの条件に該当するんだ?
371デフォルトの名無しさん:2006/01/30(月) 16:26:06
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
ジャンケンプログラムの作成
最初に回数を指定する。
プログラム側は同じ確率でG,C,Pを出すこと。
勝敗を表示する。
終了したあとに勝率を表示。
[3] 環境
 [3.1] OS:Windows
 [3.2] VC 6.0
 [3.3] C++
[4] 期限: 2月2日

何卒よろしくおねがいします、、
372デフォルトの名無しさん:2006/01/30(月) 16:29:25
>>360
まだ条件が足りない。VC.netでC++なら、managedなのかそうでないか。
MFC使っていいのか、WTL使っていいのか、APIだけなのかなどが
書いてないと、折角作っても無駄になる。
373デフォルトの名無しさん:2006/01/30(月) 16:34:04
>>360
あとファイル名の指定があるけど、これはファイルは一つにしないと
いけないということ?そうなるとリソースファイルが作れないけど。
374デフォルトの名無しさん:2006/01/30(月) 16:35:18
[1] 授業単元:プログラミング C++
[2] 問題文(含コード&リンク):
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26954
を引数をもつコンストラクタを用いた構文に書き換えよ。
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 1月31日
すみませんが、よろしくお願いします
375デフォルトの名無しさん:2006/01/30(月) 17:12:12
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
三角関数表 sin(x), cos(x), tan(x) 0 <= x < 90度 を
ファイル trig.tab に書き込むプログラムを書きなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年2月3日12:00まで
よろしくお願いします。
376360:2006/01/30(月) 17:17:34
環境はVC++.NETです。タイプミスでした申し訳ありません。
ファイルは1つではありません。heikouというのはプロジェクト名のことです。
プロジェクトの種類:Visual C++ プロジェクト
テンプレート:MFCアプリケーション
プロジェクト名:heikou
アプリケーションの種類はシングルドキュメントです。

ご迷惑おかけしました。
377:2006/01/30(月) 17:31:00
すいません質問です。。
C言語のBtreeソースから、C++言語に書き換えたいのですが、
わかりません、すいませんがどなたか、教えて頂けませんでしょうか?
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): C言語のBtreeソースから、C++言語に書き換えよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1576.txt
[3] 環境
[3.1] OS:windows XP
[3.2] コンパイラ名とバージョン: (VC 6.0
[3.3] 言語: C/C++
[4] 期限: 2月8日
378デフォルトの名無しさん:2006/01/30(月) 17:52:00
コメントをC++形式に。
defineをconst intに。
boolenをboolに。
malloc()/free()をnew,deleteに。
typedef keytype をtemplateに。
グローバル変数をクラスのメンバ変数に
pageptr関係をクラスのメンバ関数に。
379デフォルトの名無しさん:2006/01/30(月) 18:13:46
>>378
そしてこんな糞コードが量産される
int* a = new int;
if (!a) {
// エラー処理
}
380デフォルトの名無しさん:2006/01/30(月) 18:16:11
VC6って標準ではそんなことせんといかんかった気がする。
381デフォルトの名無しさん:2006/01/30(月) 18:20:06
まあVC6はC++ではないからね
382デフォルトの名無しさん:2006/01/30(月) 20:50:21
>>374
「引数を持つコンストラクタ」って何?今でもコンストラクタは
>Complex();
>Complex(double r, double i);
>Complex(const Complex& c);
と引数を持ってる奴が定義されてるが.
383デフォルトの名無しさん:2006/01/30(月) 21:07:07
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
#include <stdio.h>
#include <string.h>

struct list_elm1 {
int id;
char name[21];
struct list_elm1 *next;
};

int add_last
(struct list_elm1 *lst,
int id,
char *strng,
struct list_elm1 *cell )
{
if (lst->next != NULL)
return
add_last
(lst->next, id, strng,
cell);
lst->next = cell;
cell->id = id;
strcpy(cell->name, strng);
cell->next = NULL;
return 0;
}
384デフォルトの名無しさん:2006/01/30(月) 21:08:17
>>371
#include <iostream>
#include <string>
#include <cstdlib>
const std::string hands = "GCP";
const int result[3][3] = {{0,1,2},{2,0,1},{1,2,0}};
const char *result_msg[] = {"draw","win","lose"};
int main() {
  srand(time(NULL));
  int total, wins = 0; std::cin >> total;
  for (int k = 0; k < total; ++k) {
    std::cout << "G or C or P: ";
    char c; std::cin >> c;
    int player = hands.find(c), computer = (int)(rand() * 3.0 / RAND_MAX);
    std::cout << "computer: " << hands[computer] << std::endl;
    std::cout << result_msg[result[player][computer]] << std::endl;
    wins += (result[player][computer] == 1);
  }
  std::cout << "ratio: " << (double)wins / total << std::endl;
}
385383:2006/01/30(月) 21:08:27
<続き>

int main(void)
{
struct list_elm1
lst,a,b,c,d,x;
lst.next = NULL;
add_last(&lst,46, "Beth", &a);
add_last(&lst,23, "John", &b);
add_last(&lst,04, "Mick", &c);
add_last(&lst,32, "Kate", &d);

x = lst;
while (1) {
if (x.next == NULL)
break;
x= *x.next;
printf("%d %s \n", x.id , x.name);
}
}

これをもとにしてn番目の要素を削除するプログラムをつくれ。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語:C
[4] 期限:2/1
[5] その他の制限: なし

よろしくお願いします
386デフォルトの名無しさん:2006/01/30(月) 21:14:48
[1] 授業単元:アルゴリズム演習
[2] 問題文(含コード&リンク): http://www.teu.ac.jp/icpc/jp/domestic/ICPC2005_Problems_Domestic/F/F_ja.html


[4] 期限: 2006/1/31
[5] その他の制限:
この問題を解くアルゴリズムをお願いします。
387377:2006/01/30(月) 21:16:58
涼です。
返事が遅くなって申し訳ありません。

理解できない自分がいました、
これすら理解できないのに聞いたのが本当すいません。

まだ少し時間があるので、精一杯勉強したいと思います。
388デフォルトの名無しさん:2006/01/30(月) 21:17:40
>>357
最大流を求めるアルゴリズムに指定ある?特に無ければ Edmond-Karp で書くけど.
389デフォルトの名無しさん:2006/01/30(月) 21:21:15
>>386
C++ でいい?

#一応手元に Accept されたコードがあるけど,思いっきり個人特定されちゃうので書き直す;
390デフォルトの名無しさん:2006/01/30(月) 21:53:56
ネットワークフローってこんな感じ?
http://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi23212.jpg.html

入力も出力も定義されてないんで、どーしたもんか…。
391デフォルトの名無しさん:2006/01/30(月) 22:47:06
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
大きさ10のint型の配列aを用意し、10000以下の素数を大きい順に
10個、配列aに入れて、その後に配列aの要素の和を求めよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C
 [3.3] 言語:C
[4] 期限: 2005年1月30日

まだCを始めてから2週間ほどなんですが、よろしくお願いします。
392デフォルトの名無しさん:2006/01/30(月) 22:53:57
期限切れの宿題持って来られても困る
393デフォルトの名無しさん:2006/01/30(月) 22:54:01
締切り丁度1年前だな。
394デフォルトの名無しさん:2006/01/30(月) 23:01:37
>>388 スマン。>>390は間違い。v9->v12をv12->v9として計算している。
アルゴリズムとか俺わかんないから、期待している。
395デフォルトの名無しさん:2006/01/30(月) 23:02:02
>>391
#include <stdio.h>
#define N 10

int main(void)
{
    int a[N] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
    int sum = 0;
    int i;
    for (i = 0; i < N; i++)
        sum += a[i];
    printf("%d\n", sum);
    return 0;
}
396デフォルトの名無しさん:2006/01/30(月) 23:03:24
大きいのから順にな...>395
397デフォルトの名無しさん:2006/01/30(月) 23:03:47
>>395
( ´_ゝ`)

>>391
#include<stdio.h>
int prime(int n,int i){
    if(i>=n)return 1;
    else if(n%i==0)return 0;
    else return prime(n,i+1);
}
int main(){
    int a[10];
    int i,j=10000+1,sum=0;
    for(i=0;i<10;a[i++]=j)while(!prime(--j,2)){}
    for(i=0;i<10;++i)sum+=a[i];
    printf("%d\n",sum);

}
398宿題ではないですあ:2006/01/30(月) 23:13:10
strtok()の使い方で
#include <stdio.h>
#include <string.h>

void StrDump(const char *str,int len);
int main(void)
{
char str[] = "012abc34DE5678fgHI90";
char charset[] = "0123456789";
int len;
char *token;

len =sizeof(str);
       printf("[%s]\n",str);
StrDump(str,len);
token = strtok(str,charset);
while( token != NULL )
{
printf("[%s]\n",token);
StrDump(str,len);
token = strtok(NULL,charset);
}

return 0;
}

399宿題ではないですあ:2006/01/30(月) 23:13:52
398続き

void StrDump(const char *str,int len)
{
int i;
for(i = 0; i < len; i++)
printf(" %c ",str[i]);
printf("\n");
for(i=0;i<len;i++)
printf("%02X ",str[i]);
printf("\n----------------------------------------\n");
}
400デフォルトの名無しさん:2006/01/30(月) 23:15:31
>>389
特に指定が無いみたいなので C++.実際の予選の出力と diff 取って結果を確認した.

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1577.cpp
401宿題ではないですあ:2006/01/30(月) 23:18:48
で、3.9.8いかのぷろぐらむで
strtokで切り出した部分が'\0になってるのがわかるのですが
それまでのstrtok()事態の動きがいまいちわからなんですl
どなたかご教授していただきたく、書き込みしました
お願いします
402デフォルトの名無しさん:2006/01/30(月) 23:26:42
>>401 言語スレへ
403デフォルトの名無しさん:2006/01/30(月) 23:26:51
素数という話が出てきたのでエラトステネってみたけど、
bitset使えば意外とあっさりできたりするのねコレ。
404デフォルトの名無しさん:2006/01/30(月) 23:40:26
[1] 授業単元:プログラミング C++
[2] 問題文(含コード&リンク):
次のコンストラクタを指示通りに埋め、
stack::stack(const stack& s)
{
//maxにs.maxをコピー;
//dataに動的割り当てを行う;
//spにs.spをコピー;
//dataの指す動的配列にs.dataの指す動的配列をコピー;
}
このコンストラクタを
プログラム:http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26955
に適当な場所へ挿入し、実行できるようにせよ。
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 1月31日
すみませんが、よろしくお願いします
405365:2006/01/30(月) 23:42:29
>>404
>>365で実装済み
406404:2006/01/30(月) 23:48:21
>>405すみません。似てるかもしれませんが、別の課題で、
>>404の指示通りに作れという問題です。
407365:2006/01/30(月) 23:55:26
stack::の7文字を足すのと代入する順序変えるだけやん
プログラムの再利用とか考えたこと無いのか

......まぁ良いや。これをクラス定義の下に埋めろ。

stack::stack(const stack&s){max=s.max;data=new int[max];sp=s.sp;for(int i=0;i<max;++i)data[i]=s.data[i];}
408デフォルトの名無しさん:2006/01/31(火) 00:03:23
ここの質問者に自分で考えるということを求めてたら疲れるぞ。
409デフォルトの名無しさん:2006/01/31(火) 00:06:09
もしかしたらスレ違いかもしれませんが…
こんな課題に関するアドバイスをお願いします。大雑把な方針でいいので。
ちなみに課題を出した先生はムチャクチャ厳しくて結構人気のある先生です。

・現在のスキル(C言語)で書ける最も実用的なプログラムを書いて提出せよ。
 詳細なドキュメント必須。ソースコードはコメントを除いて20Kbyte以内とする。
・少々のバグがあっても提出者が問題点を的確に把握していれば減点しない。
・gcc3.3で-pedantic-errorsオプションつきでコンパイルできること。
・非標準のライブラリの使用は禁止。
・提出後に口頭試問を行う。提出内容を理解していない場合には単位を与えない。
410デフォルトの名無しさん:2006/01/31(火) 00:11:25
>>409
まずはお前の現在のスキルとやらを語ってもらおうではないか。
411デフォルトの名無しさん:2006/01/31(火) 00:12:07
>>409
すれ違いです。
誰か答えるかも知れないけど。
412デフォルトの名無しさん:2006/01/31(火) 00:18:13
>>388
遅レスでごめんなさい
別に指定がないので、お任せします。
大変だとは思いますが、よろしくお願いします。
413404:2006/01/31(火) 00:21:14
>>407無知でごめんなさい。クラス定義というのは
class XXX{…};
のことですよね?
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26955
のプログラムにクラス定義が見つからないのですが・・・
私の勘違いでしたらすみません。
414デフォルトの名無しさん:2006/01/31(火) 00:22:24
>>409
期間はどれくらい?
余裕があったらニューラルネットワークとか面白いけど…実用的じゃねぇかw
415デフォルトの名無しさん:2006/01/31(火) 00:23:28
>>386
面白そうなのでやってみた。C。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1579.txt
幅優先。既知の状態を捨てる。状態が増えなくなったら解けない。
状態変数は、下10bitがロボットの位置。下11〜20bitが残っている汚れ。

ちょっと遅い。既知の状態の持ち方を変えるべきだな。
416365:2006/01/31(火) 00:32:16
>>413
謝らなくて結構。
自分で考えもしない人達をこのスレ(過去スレ含む)で幾度と無く見たから慣れたw

もしそれが簡略したソースで無くて、さらに先生がそのファイルを出したのなら

『先生。クラスの宣言がありません。
これで、どないせいちゅうねんボケがぁぁ!!!』

と、課題を出した人に文句を言うのが適切かと。
417デフォルトの名無しさん:2006/01/31(火) 00:32:20
[1] 授業単元:プログラミング1
[2] 問題文:数値列が並んでいるテキストファイルがあって

12 34 68 1 4
2 89 24 58 7 46
…   こんな感じのが10行あります

これを行ごとに足し算するプログラミングをつくりなさいというのです
ファイルは、行ごとに数字の個数は、例のように5つだったり、6つだったりバラバラです
[3] 環境
 [3.1] OS:winXP
 [3.2] コンパイラ名とバージョン:VC++6.0
 [3.3] 言語:C言語
[4] 期限:2月1日
[5] その他の制限:特にないです、そんなに難しいのはやってないと思います

よろしくおながいします
418デフォルトの名無しさん:2006/01/31(火) 00:35:22
出来れば、入力形式と出力形式を提示して欲しいんだが。
‥課題のグラフもデータ化してupしてもらいたいんだが。
419デフォルトの名無しさん:2006/01/31(火) 00:36:34
>>415
http://www.teu.ac.jp/icpc/jp/domestic/ICPC2005_Problems_Domestic/F/F2
も実際の入力なんだけど,これに対して >>415 はこっちの環境で 218.6 秒.
3分以上結果が返ってこないのは,さすがにマズイ気がする.

#参考までに,>>400 では 3 秒弱で終わる.
420デフォルトの名無しさん:2006/01/31(火) 00:45:10
コンテストじゃないんだし、一問あたり一分くらいかかってもいいんじゃね?
421デフォルトの名無しさん:2006/01/31(火) 00:46:47
422デフォルトの名無しさん:2006/01/31(火) 00:53:30
>>420
なんかすごくそんな気もしてきた.出てくる結果はパーフェクトに正しいし.

でも,三分待っても結果が返ってこないと、現実的な時間で結果が出るか不安にならね?
きちんとオーダー算定すりゃあそんなこともないのかなあ……?
423357 ◆JhTAziD.X. :2006/01/31(火) 01:00:34
>>421
ありがとうございます。でも、実行するとなぜか
エラー E2140 39:ここでは宣言はできない(関数 maximum_frow)と出るのですが
これはなぜでしょうか?
424デフォルトの名無しさん:2006/01/31(火) 01:08:05
>>415
ありがとーm(_ _)m
遅くても全然オーケーです
参考にしますね
425デフォルトの名無しさん:2006/01/31(火) 01:08:41
>>423
すんません,一部 C++ になってました.

39行目 int increase... の int を外し, 26行目くらいで int increase; と定義してやってください.
426357 ◆JhTAziD.X. :2006/01/31(火) 01:17:20
>>425
ありがとうございます!できました。
本当にありがとうございました。
427デフォルトの名無しさん:2006/01/31(火) 01:17:29
>>419
どーもです。415です。
改良してみました(っつーか、作業領域に明かせた力技ですが)。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1582.txt
428デフォルトの名無しさん:2006/01/31(火) 01:21:00
>>427
考え方とか、かるーく説明してもらって(・∀・)イイ!!ですか?
今回「アルゴリズムとその妥当性を示せ」みたいに言われてるんで
429419:2006/01/31(火) 01:22:11
>>427
参りました.6 秒くらいで F2 通りますね.

実装面の高速化でこんな早くなるとは.勉強させてもらいます.
430デフォルトの名無しさん:2006/01/31(火) 01:27:58
>>421 乙。データを視覚化した。
http://kasamatusan.sakura.ne.jp/cgi-bin2/src/ichi23231.png.html
しかし、すごいね。データ構造上手に使ってて参考になる。
431421:2006/01/31(火) 01:33:39
>>430
出た最大流が直感より少なくて不安だったけど,なんとなく正しそうですね.サンクス.
432404:2006/01/31(火) 01:39:39
>>404ですが、出題ミスのようなので、
↓のプログラムが動くように修正できる方、よろしくお願いいたします。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=26956
433デフォルトの名無しさん:2006/01/31(火) 01:47:09
>>428
基本は>>415で述べたとおりです。

基本設計:
最短歩数を求めるということなので幅優先探索。
n歩目の盤面に対して上下左右にロボットが移動した盤面をそれぞれn+1歩目の盤面として確保。
ただし循環を避けるために既知の盤面は捨てる。
ゴミが全部なくなった盤面に達したら、その歩数を返す。
ゴミが全部なくなる前に新しい盤面ができなくなったら解なし。

詳細設計:
盤面の状態はロボットの位置とゴミの状態で表す。
盤面は最大20x20なので、横と縦の位置はそれぞれ5bitで表せる。ゴミは最大10個で有/無なので10bit。
すなわち全ての状態は20bitで表すことができる。
bit0-4をy位置、5-9をx位置、10-19をゴミの有無とした32bit変数で状態を表すことにする(盤面の比較をしやすくするため)。
可動範囲の判定を簡便化するためpassableをマス配列とし、可動マス1をたてておく。
ゴミの除去の判定を簡便化するためdirtyをマス配列とし、ゴミのあるマスにゴミ番号のbitを立てた値を入れておく。
あとは初期位置から順次検索。
>>427の改良では、状態は20bit=1Mで表せるので、要素数1Mの配列に状態を添え字として確保した(要はハッシュテーブル)。

といったところです。

>>429
はう〜、どうなんでしょう。勉強になるかどうかは、分かんないです。
私も勉強させていただきます。
434デフォルトの名無しさん:2006/01/31(火) 01:47:23
なんか、いー具合にプログラムの競争とか、協力とかしてるなぁと。
今晩は楽しませてもらいました。おやすみなさい。
435デフォルトの名無しさん:2006/01/31(火) 01:51:49
427ですが、1個ループを消し忘れていました。アホです。
↓が最終版です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1583.txt
436365:2006/01/31(火) 02:04:08
>>432
stack::stack(const stack& s)
のreturn s;を
stack plus(stack s1,stack s2)
のケツに移す以上。

#以下独り言

......代入演算子の実装が酷いなぁ。
delete[]したあとのnew[]が失敗したら最悪の事態になるじゃんw
これ書いたのが先生なら頭があんま良くないなぁ。
この師にして弟子ありって感じだ。
437デフォルトの名無しさん:2006/01/31(火) 02:04:23
c言語です。
問1
非負整数mと0以上60未満の整数sを仮引数として受け取ると
m分s秒が何秒であるかを返す関数m_to_sを記述せよ。

問2
正整数を1つint型の引数nに受け取ると、2^nを返す関数pow_2を記述せよ。

問3
正整数を1つint型の仮引数yearに受け取ると、西暦year年が閏年ならば1を、そうでないならば
0を返す関数check_leapを記述せよ。(閏年とは、4で割り切れる年のうち、100で割り切れないか
400で割り切れる年のこととして考えよ。)

問4
void space_star(int space, int stars)は、int型の引数spacesとstarsを受け取ると、
(1)space個の空白を表示し、
(2)stars個の*を表示し、
(3)改行コード\nを表示
する関数である。space_starを利用して、int型の引数nを受け取ると、次のような表示
をn段行い何も返さない関数m_downを記述せよ。

*
***
*****
*******
438デフォルトの名無しさん:2006/01/31(火) 02:10:48
>>436
学校の講義程度で例外中立・安全とかやってたら逆に怖いだろ
439404:2006/01/31(火) 02:17:00
>>436何度もありがとうございます。まだこんなエラーが出てしまいます。
3_8.cpp:36: error: definition of implicitly-declared `stack::stack(const
stack&)'
3_8.cpp:36: error: declaration of `stack::stack(const stack&)' throws different

exceptions
3_8.cpp:5: error: than previous declaration `stack::stack(const stack&) throw
()'
PS:先生をかばっても仕方が無いのですが、「前の課題で作ったプログラムを書き換える」
という課題がほとんどのため、私の力不足が主な原因と思います。
440デフォルトの名無しさん:2006/01/31(火) 02:17:06
>>438
んー、そう言われるとそうかも。
自分の場合独学だから大学でどの程度のレベルを要求されるからわからんのだよなぁ。
まだ大学1年だからC++の講義もベターCレベルだし。
441365:2006/01/31(火) 02:20:17
>>439
悪りぃ。stack(int sz)の真上にでも
stack(const stack&);を追加しといて
442デフォルトの名無しさん:2006/01/31(火) 02:27:23
>>409
・読んで理解できそうで、実用的なプログラムを探す。
・メモを取りながら読む。たぶん読んでるうちに、プログラムの変なとこをみつける。
・文法エラーならgccでエラーが出ないように、プログラムを書き直す。
・ロジックのバグなら、報告するか直すかはあなたしだい。
・メモを利用して自分でドキュメントを書く。
・ここまでやれば口頭試問は通るはず。

実用的なプログラムだけど…
式の評価(関数電卓みたいなの)とか、
ああ…画像の分類ソフトでもいいかもしんない。画像サイズが指定のファイルを探すとか。
音声ファイルの変換ていうのも手かなぁ…

20Kって、2万文字か。1行20文字換算で1000行か。うーむ。

>>438
大学でC++習ったよ。std::stringは使わない。structは習ったけど、classは習わんかった。
443404:2006/01/31(火) 02:32:03
>>441お世話になりました(またお世話になるかもしれませんが)。ありがとうございました!
444デフォルトの名無しさん:2006/01/31(火) 02:43:09
>>437
#include<stdio.h>
int m_to_s(int m,int s){return m*60+s;};
int pow_2(int n){return 1<<n;}
int check_leap(int year){return year%4==0 && (year%100!=0 || year%400==0);}
void space_star(int space, int stars){printf("%*s",space,"");while(stars--)putchar('*');putchar('\n');}
void m_down(int n){int i;for(i=0;i<n;++i)space_star(n-i-1,i*2+1);}
445デフォルトの名無しさん:2006/01/31(火) 02:59:14
>>444
サンクス
続きお願いしていい?
問5
3次元ベクトルを2つ入力すると、その2つのベクトルの内積を計算して
表示するプログラムをつくりたい。次を完成せよ。

#include<stdio.h>
int main(void)
{
int i;
double cp, A[3],b[3];
for(i=0; i<3; i++)
{
printf("A[%d]=",i);scanf("%lf",&A[i]);
printf("B[%d]=",i);scanf("%lf",&B[i]);
}
/*解答欄開始*/







/*解答欄終了*/
return(0);
}
446デフォルトの名無しさん:2006/01/31(火) 03:00:12
問6
正整数(10進数表現)を入力すると、その2進数表現を表示するプログラムをつくりたい。
例えば、与えられた数から始めて、2で割った商を次々と2で割り、その剰余を逆から表示
すれば良い。11に対しては、以下のようになる。
11/2=5…1
5/2=2…1
2/2=1…0
1/2=0…1

よって、剰余を配列に記憶しておき、求めた順とは逆に表示していけば良い。
次は、正整数(10進数表現)を入力すると、その2進数表現を表示するプログラムを
この方針に基づき作成した例である。完成せよ。
#include<stdio.h>
int main(void)
{
int n,i,int B[20];
printf("正整数:");scanf("%d",&n);
/*解答欄開始*/





/*解答欄終了*/
return(0);
}

あと問4 ピラミッド型でした。
447デフォルトの名無しさん:2006/01/31(火) 03:09:32
・・・プログラミングとか数学ってつまらないかなぁ・・・?>>446
448444:2006/01/31(火) 03:14:38
>>445
それぞれ解答欄の部分だけ。
解答欄の外に2,3間違いがあったがたぶん映し間違いと思うので割愛

(5)
for(cp=i=0;i<3;++i)
    cp += A[i]*B[i];
printf("%f\n",cp);
(6)
for(i=0;n;n/=2,++i)B[i]=n%2;
while(i--)printf("%d",B[i]);>>445
449デフォルトの名無しさん:2006/01/31(火) 03:57:45
[1] 授業単元:C++によるプログラミング
[2] 問題文(含コード&リンク):
定数 7,'x'に対する抽象構文木を構築し、表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: なるべく1月31日中でお願いいたします
450デフォルトの名無しさん:2006/01/31(火) 06:50:13
>>449
構文木というからには何か構文ルールがあるわけでしょう?どんなルール?四則演算?
451デフォルトの名無しさん:2006/01/31(火) 08:20:28
いきなりつまづいてしまいました。
XPでボーランドのコンパイラ使ってます。Cです。
下のプログラムをメイク、コンパイルしようとすると次のエラーがでて実行できませんorz

エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 11: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 16: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 19: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 24: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 D:\C++\テストファイル\printfkansuu.c\printfkansuu.c 27: ステートメントにセミコロン(;)がない(関数 main )

452451:2006/01/31(火) 08:20:43
#include <stdio.h>

void main()
{
int val;
int val2;

val = 0;
(1)

printf("valは%dです。val2は%dです。\n", val, val2 );

val += 100;
(2)

val2 = val * 5;
(3)

printf("val = [%d] val2 ={%d}\n",val,val2 );

val --;
(4)

val2 = 10 / 3;
(5)

printf("val = [%d] val2 = [%d]\n",val,val2);
}
453デフォルトの名無しさん:2006/01/31(火) 08:49:42
>>451>>452
void main()をint main()に変えたらいけると思うよ
454デフォルトの名無しさん:2006/01/31(火) 08:56:29
>>450すみません。ちゃんと勉強してからまた質問しなおします。
455451:2006/01/31(火) 09:04:52
>>453
ご指摘ありがとうございます。
intにかえてみましたが、同じエラーが出てしまいましたorz
始めたばかりで何にもわからないのですが、改行の仕方や、スペースの幅はコンパイルするときに関係あるのでしょうか?
つまり、上ではダブルスペースになっている箇所がありますが全てシングルにしたり、スペースの幅を小さくしたり広くしたりするとエラーはでますか?
そういったルールを教わらなかったもので、そういうルールがあるのかどうかすらわかりません・・・
456デフォルトの名無しさん:2006/01/31(火) 09:40:39
>>455
基本的にスペースや改行はある程度自由がきく。

まさかとは思うが
(1)〜(5)の行を、/*(1)*/のように/*〜*/と書き換える。
457宿題ではないですあ:2006/01/31(火) 09:41:49
>>437

問2

int pow_2(int n)
{
   int i,sum=1;
   for(i=0;i++;i<=n){
   sum *= 2;
   }
return sum;
}
問3

int check_leap(int year)
{
  if((!year%4)&&(year/100)&&(year/400))
    return 1;
  else
    return 0;
}
458デフォルトの名無しさん:2006/01/31(火) 09:42:04
>>455
全角スペースはprintfの中身など以外は許されないと思います。
(半角スペースはOK)全角スペースがないか調べて、あったら
なくしてまたコンパイルしてみて下さい。
459196:2006/01/31(火) 09:49:32
遅れてカキコ申し訳ないですが、>>196の問題で「行列AとXを共用体op_1として宣言する」
とした場合、>>201さんのプログラムをどう改変すればよいでしょうか・・・。
どなたかよろしくお願いします。
460デフォルトの名無しさん:2006/01/31(火) 10:00:02
[1] 授業単元: 宿題

[2] 問題文(含コード&リンク):

一年三組の11人目があなただったとします。
一郎君から順に点数を入力、最後にあなたの点数を入力し、すべて入力し終わったあと、
一番成績の良い人の順から、点数を出力するプログラムを作成しなさい。
※ 入力を求める関数、並べ替える関数、出力する関数を作成すること。
  また、処理順序として、すべて入力→並び替え処理→出力 とするようにしてください。

一年三組成績
一郎君 50点陽菜さん 90点
次郎君 75点美咲さん 67点
三郎君 36点さくらさん 82点
史郎君 88点葵さん45点
五郎君 68点凛さん77点

[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: 初心者なので分かりません
 [3.3] 言語: C言語
[4] 期限: できるだけはやくお願いします
[5] その他の制限
  できれば一番簡単な、初心者でも分かるやり方でお願いします。
461デフォルトの名無しさん:2006/01/31(火) 10:02:37
[2]
その1
 nCr において,n=0〜6の全ての組み合わせについて求めるプログラムを作成しなさい.
表示例
0C0 = 1
1C0 = 1 1C1= 1
2C0 = 1 2C1 = 2 2C2 = 1
3C0 = 1 3C1 = 3 3C2 = 3 3C3 = 1
4C0 = 1 4C1 = 4 4C2 = 6 4C3 = 4 ・・・

その2
                0C0 
 1C0  1C1 
 2C0    2C1   2C2 
 3C0   3C1   3C2   3C3 
を計算して並べた結果は

  1
1 1
1  2 1
1 3   3 1
と表される.
N=10までについて,上記のような三角形表示をするプログラムを作成しなさい.
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] C
[4] 期限:2月1日

よろしければお願いします・・・
462デフォルトの名無しさん:2006/01/31(火) 10:03:39
>>460
前スレのあれ、結局あのままスルーされてたのか。カワイソス
463196:2006/01/31(火) 10:05:38
すいません、解決しますた..orz
464310:2006/01/31(火) 10:33:37
>>460
はぁ…自分が前スレで書いたやつじゃダメなのか…まぁ、いいや

すみません、昨日はありがとうございました。
きょう提出したところ、追加の課題として計算量を求める機能を追加せよというものが出ました。
自分なりにclockを組み込んで、かかった処理時間で計算量を求めようとしたのですが
処理が早すぎて意味がありませんでした…
計算量を求める方法は自由らしいので、もうひとつ自分が考えた方法は
比較回数をカウントして出力するというものなのですが、どこに組み込んでよいか迷っています。
昨日も助けていただいたのに厚かましいとは思いますが、ぜひお力をお貸しくださいm(_ _)m
465デフォルトの名無しさん:2006/01/31(火) 10:45:43
>>460
ギャルゲのキャラみたいな名前だな
466デフォルトの名無しさん:2006/01/31(火) 11:31:46
>>437, >>457
問2だけ。
底が2なんだからシフト使えば?
int pow_2(int n)
{
return 1<<n;
}

但し 0<=n<sizeof(int)*8。
467デフォルトの名無しさん:2006/01/31(火) 11:32:27
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
三角関数表 sin(x), cos(x), tan(x) 0 <= x < 90度 を
ファイル trig.tab に書き込むプログラムを書きなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年2月3日12:00まで
よろしくお願いします。
468451:2006/01/31(火) 11:46:57
>>456,458
レスありがとうございます。さっそく試してみます
469デフォルトの名無しさん:2006/01/31(火) 11:54:21
>>467
あのな出力の例も書かないでやるやついない
470451:2006/01/31(火) 11:58:33
>>456
メイクとコンパイルできました!
ただ、実行すると
valは0です。val2は256です
val = [100] val2 = {500}
val = [99] val2 = [3]
とわけのわからない表示がされましたがこれで正しく実行されているのでしょうか?
コマンドプロンプトからのコピペがわからなかったので手動で書いてみました・・・

>>458
456さんの方法を先に試したところコンパイルできちゃったので試してないのですが、
全角スペースか半角スペースか見分ける方法ってあるのでしょうか?
今回の場合なら上から一つずつ探していくこともできると思うのですが、大量の構文をかくプログラムの場合
どうやって全角か、半角か判断すればいいかわからないのですが。。

何度もすみません・・・
471デフォルトの名無しさん:2006/01/31(火) 12:05:59
>>470
プログラムは正しく動いている。
ただ、最初にval2を決めてないから、val2には何が入っているかわからない。
472デフォルトの名無しさん:2006/01/31(火) 12:10:12
>>470
テキストエディタの機能で検索か置換。
始めから入力しないのが一番だけど。
473デフォルトの名無しさん:2006/01/31(火) 12:14:04
>>470
おまえワロスww
474デフォルトの名無しさん:2006/01/31(火) 12:56:19
>>461
/*(1)*/
#include<stdio.h>
int main(void){
    int n,c,t;
    for(c=0;c<=6;++c,printf("\n"))
    for(n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%dC%d = %d ",n,c,t);
    return 0;
}
/*(2)*/
#include<stdio.h>
int main(void){
    int n,c,t;
    for(c=0;c<11;++c,printf("\n"))
    for(printf("%*s",(11-c)*2,""),n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%3d ",t);
    return 0;
}
475デフォルトの名無しさん:2006/01/31(火) 14:47:50
>469 すいませんでした。勉強してきます。
476デフォルトの名無しさん:2006/01/31(火) 16:51:48
プログラミングT
問題@文字列strの中に、文字cが含まれている個数(踏まれていなければ0とする)を返す関数
int ste_chnum(const char str[],int c) {/*・・・*/}
を作成せよ

問題A西暦y年m月d日の《前の日》あるいは《次の日》の日付を求めてセットする関数
void yesterday(int *y, int *m, int *d){/*・・・*/}
void tomorrow(int *y, int *m, int *d){/*・・・*/}
を作成せよ(閏年などもきちんと判別すること)。

OSはwindowsです。
コンパイラはVC6.0
言語は 「c」です。
期限は2006年2月2日の12時です。
まったく分からないんです・・・誰か助けてください。。。
477デフォルトの名無しさん:2006/01/31(火) 16:53:53
>>476
文字cって小文字のみ?
478デフォルトの名無しさん:2006/01/31(火) 17:01:11
>>476
(1)
int ste_chnum(const char str[],int c)
{
int i;
for (i=0;str[i] != '\0';i++){
if (str[i]=='c'){
c++;
}
}
return c;
}
とりあえず動いた
479デフォルトの名無しさん:2006/01/31(火) 17:04:15
あほか
480デフォルトの名無しさん:2006/01/31(火) 17:07:43
どうせアホですよ(つД`)
481デフォルトの名無しさん:2006/01/31(火) 17:16:32
>>478
文字c ってことは変数 c の意味じゃないのかな…
int str_chnum( const char str[], int c )
{
 int count = 0;
 for(; *str != '\0'; str++) {
  if( *str == c ) count++;
 }
 return count;
}
未確認だがこんなんでどだろ…
482デフォルトの名無しさん:2006/01/31(火) 17:22:32
>>476
変数なのか変数じゃないのかはっきりしてくれ
483デフォルトの名無しさん:2006/01/31(火) 17:40:19
>>474
ありがとう
484デフォルトの名無しさん:2006/01/31(火) 18:04:56
>>360の課題、ようやく形になってきたけど、期限切れだね。
もうちょっと余裕を持って出してくれればなぁ。
MFC指定でなければ間に合ったかもしれないな。残念。
485デフォルトの名無しさん:2006/01/31(火) 18:36:42
VC++.net依存の問題はもうC言語じゃないよなぁ・・・
486デフォルトの名無しさん:2006/01/31(火) 18:51:02
1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
@x^2-5=0を解くことにより小数点以下8桁まで正確な√5を求めなさい。またその時の反復回数を答えなさい
Ax^2-3x+2=0の解を7桁まで正確に求めなさい
Bπsin x-2x=0(-π<x<π) の解を7桁まで正確に求めなさい
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (不明)
 [3.3] 言語: (C)
[4] 期限: ([2006年2月3日09:00まで] )
[5] その他の制限: (なし)

487デフォルトの名無しさん:2006/01/31(火) 18:53:45
>>486
「反復」ってことは計算法が指定されてるんだよね.Newton法?
488デフォルトの名無しさん:2006/01/31(火) 19:30:21
>486
C言語によるアルゴリズム辞典丸写し

double mysqrt(double x)
{
   double s,last;

   if(x>0){
      if(x>1) s=x;
      else  s=1;
    do{
       last = s;  s=(x/s+s)/2;
     }while(s<last);
     return last;
   }
   if(x!=0) fprintf(stderr,"error");
   return 0;
}
489デフォルトの名無しさん:2006/01/31(火) 19:41:05
>>486 返事が無いのでNewton法.

#include <stdio.h>
#include <math.h>
#define PI 4.0*atan(1.0)
typedef double function(double);
double f(double x) { return x*x - 5; }
double df(double x) { return 2*x; }
double g(double x) { return x*x - 3*x + 2; }
double dg(double x) { return 2*x - 3; }
double h(double x) { return PI*sin(x)-2*x; }
double dh(double x) { return PI*cos(x)-2; }
double newton(function f, function df, double x, double eps) {
  double y;
  int count = 0;
  do {
    y = x, x -= f(x)/df(x);
    ++count;
  } while (fabs(x-y) > eps);
  printf("%d iterations\n", count);
  return x;
}
main() {
  printf("(1) "); printf("%12.11lf\n", newton(f,df,1,1e-8));
  printf("(2) "); printf("%12.11lf\n", newton(g,dg,0,1e-7));
  printf("(3) "); printf("%12.11lf\n", newton(h,dh,2,1e-7));
}
490デフォルトの名無しさん:2006/01/31(火) 20:05:25
>>464
310ってことは、たぶん担当は自分だなw
ちょっと見てくるから待っててくれ。
491デフォルトの名無しさん:2006/01/31(火) 20:10:01
プロファイラとかカバレッジとか・・・(うそ?)
最も内側のループにカウンタつけるのも手法。
・・・こういうグラフのベンチ集ってどっかにないのかね?
492デフォルトの名無しさん:2006/01/31(火) 20:18:42
>>491
前スレ該当レスうぷキボン
493デフォルトの名無しさん:2006/01/31(火) 20:21:26
>>464
時間計算量って、単純にNで実行行数がどれだけ変わるかでいいんじゃね?
494デフォルトの名無しさん:2006/01/31(火) 20:22:07
>>464
計算量をなにで判断するかによるけど、未確定のノードを確定に
するために、最小値とその(確定にしようとしている)未確定の
ノードまでの距離を比較するたびに、カウンターが上がるように
してみた。これで何回比較しているかわかるから、ひとつの
目安になるかも。修正箇所は、

26行目くらいにint counter;とグローバルでカウンターを宣言して、
147行目のforの上あたりにcounter = 0;と初期化して、
157行目のif(DEB)の下に、counter++;でカウンターを上げる。
最後は、mainでcounterの値をprintfとかで表示させればOK.
495デフォルトの名無しさん:2006/01/31(火) 20:36:27
>>491
課題の提出に、プロファイラとか実装したら凄いな。
きっと文句なしにA++だろうw
496デフォルトの名無しさん:2006/01/31(火) 21:21:13
[1] 授業単元: 宿題
[2] 問題文(含コード&リンク):

ある2つの整数を入力して、四則演算をして結果を出力するプログラムを作成しなさい。
※ 四則演算をそれぞれ関数にすること

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: 初心者ですので分かりません
 [3.3] 言語: C言語
[4] 期限: 2/1
[5] その他の制限:初心者なので簡単にお願いします。
497デフォルトの名無しさん:2006/01/31(火) 21:28:40
>>496=460
初心者でもコンパイラ名ぐらいはわかるだろ。
498デフォルトの名無しさん:2006/01/31(火) 21:29:44
どうしてコンパイラ名がわからないのか。
ちょっと調べればわかると思う
499デフォルトの名無しさん:2006/01/31(火) 21:31:05
初心者初心者書くのは、学ぶ意思が無いに等しい
500デフォルトの名無しさん:2006/01/31(火) 21:36:03
関数化求められてる時点でどうも初心者とは思えないな
501デフォルトの名無しさん:2006/01/31(火) 21:36:26
初心者認識してるなら、少しは勉強しやがれ。
と、ここの質問者にいっても無意味だよな。
502デフォルトの名無しさん:2006/01/31(火) 21:47:51
>>496
#include<stdio.h>
int たし算の答え, たす数1=0, たす数2=0;
int ひき算の答え, ひかれる数1=0, ひく数2=0;
int かけ算の答え, かける数1=0,かける数2=0;
int わり算の答え, わられる数1=0, わる数2=0;
int たし算の計算(){ たし算の答え = たす数1 + たす数2;}
int ひき算の計算(){ 引き算の答え = ひかれる数1 - ひく数2;}
int かけ算の計算(){ 掛け算の答え = かける数1 * かける数2;}
int わり算の計算(){ 割り算の答え = わられる数1 / わる数2;}
int main(){たし算の計算();ひき算の計算();かけ算の計算();わり算の計算();}

初心者に向けて、わかりやすく書いてみた。「せいすうの入力」は、上の
ぷろぐらむに直接入力してね。日本語使えるコンパイラなら動くはず。
あとテンプレにあるとおり、じょうけんあとだしはだめだから。
503デフォルトの名無しさん:2006/01/31(火) 21:48:45
初心者初心者とかいちいち自己申告するのもいい加減スルー
出来ない位イライラする要素になってきた。
504デフォルトの名無しさん:2006/01/31(火) 21:50:23
きちんとテンプレ守ってるあたり、初心者じゃないな。
505デフォルトの名無しさん:2006/01/31(火) 21:54:17
>>503
禿同。まあ、これは釣りくさいがな。
506デフォルトの名無しさん:2006/01/31(火) 22:09:57
>>496
#include <stdio.h>
int add(int a, int b){return a + b;}
int sub(int a, int b){return a - b;}
int mul(int a, int b){return a * b;}
int div(int a, int b){return a / b;}
int main(void) {
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d+%d=%d\n", a, b, add(a,b));
    printf("%d-%d=%d\n", a, b, sub(a,b));
    printf("%d*%d=%d\n", a, b, mul(a,b));
    printf("%d/%d=%d\n", a, b, div(a,b));
    return 0;
}
507デフォルトの名無しさん:2006/01/31(火) 22:11:13
                  ハ_ハ
          ハ_ハ    (^( ゚∀゚)^)  初心者〜初心者〜
  アソレソレ  ('(゚∀゚∩    )  /   
         ヽ  〈   (_ノ_ノ    
          ヽヽ_)
508デフォルトの名無しさん:2006/01/31(火) 22:11:40
初心者かどうかなんてどうでもいい
問題がつまらん
509デフォルトの名無しさん:2006/01/31(火) 22:11:51
よくこの流れで解くね
510デフォルトの名無しさん:2006/01/31(火) 22:12:25
>>503
スルーできないなら迷惑だ。
消えてくれ。
511506:2006/01/31(火) 22:14:20
>>509
反省はしてない。
512デフォルトの名無しさん:2006/01/31(火) 22:20:54
つか「ある整数(∃x(x∈int))」なんだからその答えはおかしいだろ。
それだと「すべての整数(∀x(x∈int))」になってしまう。
ちゃんと曲解しろ
513デフォルトの名無しさん:2006/01/31(火) 22:21:42
         _____
        /        \
        /   ./⌒  ⌒ヽ ヽ
       /,  __| / | | ヽ |_  |  
       | /    ○   \|   未来に逝かないか?初心者君
       | / 三   |  三. |  
       | |  丶___|__) |
       ヽ\______/
        ヽ        ノ
    ,.、-  ̄/  | l   ̄ / | |` ┬-、
    /  ヽ. /    ト-` 、ノ- |  l  l  ヽ.
  /    ∨     l   |!  |   `> |  i
  /     |`二^>  l.  |  | <__,|  |
_|      |.|-<    \ i / ,イ____!/ \
  .|     {.|  ` - 、 ,.---ァ^! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
__{   ___|└―ー/  ̄´ |ヽ |___ノ____________|
  }/ -= ヽ__ - 'ヽ   -‐ ,r'゙   l                  |
__f゙// ̄ ̄     _ -'     |_____ ,. -  ̄ \____|
  | |  -  ̄   /   |     _ | ̄ ̄ ̄ ̄ /       \  ̄|
___`\ __ /    _l - ̄  l___ /   , /     ヽi___.|
 ̄ ̄ ̄    |    _ 二 =〒  ̄  } ̄ /     l |      ! ̄ ̄|
_______l       -ヾ ̄  l/         l|       |___|
514デフォルトの名無しさん:2006/01/31(火) 22:22:45
それをいうなら「整数を入力」するコーディングが必要なわけだが。
515デフォルトの名無しさん:2006/01/31(火) 22:27:41
1] 授業単元:C言語宿題
[2] 問題文(含コード&リンク):
  
  文字列iの位置nに文字列eを入れる関数Ins(i,n,e)を作りなさい。
  nは正の整数です。

  例 :i[]→C-language
     n →4
     e[]→TEST

  結果:i[]→C-language
        ↓
     i[]→C-laTESTnguage
  
  ヒント:最初に後ろへ「nguage」をずらしてから「TEST」を入れます。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:すいません、分からないです・・・
 [3.3] 言語:C言語です。
[4] 期限:2月1日まで
[5] その他の制限:
  つい最近StringCopy( )関数を習いました。
  たぶんコレを使いながら解いていけ・・という事だと思うのですが..
  できれば初心者向けに解いてもらえると有難いです。
  よろしくお願いします。
516デフォルトの名無しさん:2006/01/31(火) 22:29:08
>>515
StringCopy()なんてものは標準に存在しないから、誰もその中身が
分からない。参考にして作って欲しければ、その中身も公開すること。
517デフォルトの名無しさん:2006/01/31(火) 22:33:04
>>512
ある整数でいいんでね?
100桁の整数とかの計算できないから全ての整数じゃないし
518デフォルトの名無しさん:2006/01/31(火) 22:33:38
もう最初に中身書かない時点でやる気失せた
519デフォルトの名無しさん:2006/01/31(火) 22:39:15
>>496
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char buf[1000];
int myadd(){
 printf("足し算の答えを入力してください:"); return atoi(gets(buf));
}
int mysub(){
 printf("引き算の答えを入力してください:"); return atoi(gets(buf));
}
int mymul(){
 printf("掛け算の答えを入力してください:"); return atoi(gets(buf));
}
int mydiv(){
 printf("割り算の答えを入力してください:"); return atoi(gets(buf));
}

main(){
 int a, b=0;
 srand(time(0));
 a =(rand()*rand()*rand())&0x0000FFFF;
 while(b==0||b==1||a%b) b=(rand()*rand()*rand())&0x0000FFFF;
 printf("整数1は%d 整数2は%dです\n", a, b);
 if((a+b)==myadd()) printf("正解です\n"); else printf("間違っています\n");
 if((a-b)==mysub()) printf("正解です\n"); else printf("間違っています\n");
 if((a*b)==mymul()) printf("正解です\n"); else printf("間違っています\n");
 if((a/b)==mydiv()) printf("正解です\n"); else printf("間違っています\n");
}
520デフォルトの名無しさん:2006/01/31(火) 22:39:20
次スレから、コンパイラの名前の見分け方をテンプレに入れた方がいいかもね。
521デフォルトの名無しさん:2006/01/31(火) 22:42:52
[1] 授業単元:?
[2] 問題文
初心者すぎる質問ですみません。
[質問1]
・このプログラムはCですか?このプログラムを書くのはSDKのエディタですか?
・RADIOBUTTONとか書いてあるけど”ALL”というラジオボタンが画面に現れるのですか?
・また下の方に
STRINGTABLE DISCARDABLE
BEGIN
ID_COMBO_STYLE "Select Style for selected text region or equation\nStyle"
というメッセージがありますが、これはエラーメッセージか何かですか?(実際に画面に表示されるのですか?それともプログラムとしての命令文で別に表示されるものではないでしょうか?)

PRINT DIALOG DISCARDABLE 15, 15, 181, 181
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Print"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Printer:",1093,6,4,25,8
GROUPBOX "Range",1072,5,27,106,75,WS_GROUP
RADIOBUTTON "&All",1056,11,40,98,10,WS_GROUP | WS_TABSTOP
RADIOBUTTON "S&election",IDC_PRNTSTUP_SELECTION,11,51,98,10
RADIOBUTTON "C&urrent Page",1057,11,62,98,10
RADIOBUTTON "&Pages",1058,11,73,98,10
1136,50,118,62,41,CBS_DROPDOWNLIST | WS_BORDER |
END

STRINGTABLE DISCARDABLE
BEGIN
ID_COMBO_STYLE "Select Style for selected text region or equation\nStyle"
ID_COMBO_FACE "Select Font for the current selection\nFont"
END
522デフォルトの名無しさん:2006/01/31(火) 22:44:48
あともう一つ、htmlスレに人がいないのでここで質問します。
[質問2] これはhtmlですか?<GX>っていうタグは見たことが無いのですが。
このプログラムを書くのはテキストエディタで良いですか?
</GX>
<GX ID=Beetle>
<GX TYPE=tile ID=buyer>
Billing Address<BR>
Buyer: <GX TYPE=cell ID=buyer.name></GX><BR>
<GX TYPE=cell ID=buyer.isResPhone> Residence Phone: <GX TYPE=cell ID=buyer.rPhone></GX><BR></GX>
<GX TYPE=cell ID=buyer.isBizPhone> Business Phone: <GX TYPE=cell ID=buyer.bPhone></GX><BR></GX>
<GX TYPE=cell ID=buyer.isFaxPhone> Fax Phone: <GX TYPE=cell ID=buyer.fPhone></GX><BR></GX>
Address: <GX TYPE=cell ID=buyer.addrOne></GX><BR>
<!-- end of buyer tile --> </GX>

これら2つとも
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (不明)
 [3.3] 言語: (C?)
[4] 期限: ([2006年2月1中] )
[5] その他の制限: (なし)
523デフォルトの名無しさん:2006/01/31(火) 22:48:31
>>521
スレ違いなので、手短に答えるとそれはリソーススクリプト。
Cではない。MS独自の形式でGUIを表したもの。書くのは
リソースエディタというツール。VC++などに付属している。
使うにはスクリプトをコンパイルしないといけない。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcresed/html/vcconWorkingWithResources.asp
524デフォルトの名無しさん:2006/01/31(火) 22:51:47
>>522
人がいないからといって、別のスレに質問するのは間違い。くだスレなどで
聞いた方がいい。たぶんxmlとかじゃないの?
525デフォルトの名無しさん:2006/01/31(火) 23:14:19
>>521
Win32API質問箱 Build39
http://pc8.2ch.net/test/read.cgi/tech/1136673250/

>>522
板違い
web制作管理@2ch掲示板
http://pc8.2ch.net/hp/
526デフォルトの名無しさん:2006/02/01(水) 00:07:13
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
身の回りで構造体で表せるものを探して構造体として定義。
構造体の各メンバの値を表示する関数を作成し、使用せよ。
構造体の各メンバに値を代入する関数を作成し、使用せよ。
上記全てのプログラムを1つにまとめ、mainから呼べるようにせよ。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語:C
[4] 期限:2006年02月01日09:30まで]
[5] その他の制限:
リンクトリストを使うんだと思います。
mallocで1つのセルのメモリを獲得することで動的にメモリを確保してください。
構造体は
struct family{
char name[100];
int age;
struct family *next;
};
という感じになるのでしょうか。。。
それぞれmainでmenuから選択できるようにしてください。
ライブラリはstdio.h、string.h、stdlib.hのみ使用可です。

別質問なんですが下記の*newListってなんでしょうか。また**の意味もわかりません。
struct LIST * newList( struct LIST ** pstart){
  ・・・
}

どなたか、夜分遅くに申し訳ありませんが、よろしくお願いします。
527デフォルトの名無しさん:2006/02/01(水) 00:11:05
>>526
"newList"は関数名。struct LIST **はstruct LISTへのポインタへの
ポインタの宣言。

ところで、その問題からなぜリンクリストの話になるんだ?
528デフォルトの名無しさん:2006/02/01(水) 00:11:50
[1] 授業単元:プログラム概論
[2] 問題文(含コード&リンク):
2次元平面上の3つの座標p1,p2,p3を頂点とする。
三角形を考え、構造体triangleを以下のように定義する。

 struct triangle{
  double p1[2]; double p2[2]; double p3[2];
 };

構造体triangleに対して、以下の関数を作成せよ。簡単な解説も書くこと。

int congruence(structure triangle *a, structure triangle *b)
三角形aと三角形bが合同かどうかを判定する、
合同なら1を、合同でないなら0を返す

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Borland C 5.5.1
 [3.3] 言語:C
[4] 期限: 2006年2月2日まで

申し訳ありませんが、よろしくお願いいたします。
529デフォルトの名無しさん:2006/02/01(水) 00:12:01
>>526
普通に問題文を読めば線形リストなんぞ必要ないと思うが

**はポインタへのポインタ
530デフォルトの名無しさん:2006/02/01(水) 00:14:30
数学的に合同の説明ないとわからなくね?
531デフォルトの名無しさん:2006/02/01(水) 00:17:13
3辺の長さがそれぞれ一緒ならおkじゃね?合ってるか知らんが
532デフォルトの名無しさん:2006/02/01(水) 00:21:48
精度を考えると難しそうだな
533デフォルトの名無しさん:2006/02/01(水) 00:23:31
floatでやろうもんなら
同じはずなのに合同じゃねぇm9(^Д^)プギャーッみたいな
534デフォルトの名無しさん:2006/02/01(水) 00:26:28
精度はどうしようもないだろ
つーか、精度要るなら手計算しろよって話になるし
535デフォルトの名無しさん:2006/02/01(水) 00:28:23
>>528
int congruence(struct triangle *a, struct triangle *b) {
    /* それぞれの辺の長さの2乗を求める(ルートは必要無い) */
    double al[] = {(a->p1[0] - a->p2[0]) * (a->p1[0] - a->p2[0]) + (a->p1[1] - a->p2[1]) * (a->p1[1] - a->p2[1]),
    (a->p1[1] - a->p2[1]) * (a->p1[1] - a->p2[1]) + (a->p1[2] - a->p2[2]) * (a->p1[2] - a->p2[2]),
    (a->p1[2] - a->p2[2]) * (a->p1[2] - a->p2[2]) + (a->p1[0] - a->p2[0]) * (a->p1[0] - a->p2[0])};
    double bl[] = {(b->p1[0] - b->p2[0]) * (b->p1[0] - b->p2[0]) + (b->p1[1] - b->p2[1]) * (b->p1[1] - b->p2[1]),
    (b->p1[1] - b->p2[1]) * (b->p1[1] - b->p2[1]) + (b->p1[2] - b->p2[2]) * (b->p1[2] - b->p2[2]),
    (b->p1[2] - b->p2[2]) * (b->p1[2] - b->p2[2]) + (b->p1[0] - b->p2[0]) * (b->p1[0] - b->p2[0])};
    /* 3辺が等しければ合同 */
    if (al[0] == bl[0] && al[1] == bl[1] && al[2] == bl[2] || al[0] == bl[1] && al[1] == bl[2] && al[2] == bl[0] || al[0] == bl[2] && al[1] == bl[0] && al[2] == bl[1]
    || al[0] == bl[2] && al[1] == bl[1] && al[2] == bl[0] || al[0] == bl[1] && al[1] == bl[0] && al[2] == bl[2] || al[0] == bl[0] && al[1] == bl[2] && al[2] == bl[1]) return 1;
    else return 0;
}
536デフォルトの名無しさん:2006/02/01(水) 00:28:32
>>531
合同の条件の一つだからOK.精度は、ベクトルで考えればいいんじゃない?
3点の座標の差を取って、3つのベクトルを作って、その3つの
ベクトルが全て等しくなる組み合わせがあれば合同ってのは?
537535:2006/02/01(水) 00:30:53
あ、チェックはしてない。
538526:2006/02/01(水) 00:31:13
>>527さん
>>529さん
レスありがとうございます(>_<)
リンクトリストじゃなくても作れるんですか?
なんかこないだやったばかりだったので、
これはきっと使わないとできないに違いない!!とかおもってしまいました。
ろだに今書きかけをあげました。
挙げ方まちがえちゃったみたいで、すみません!
今こんな感じで書いてるんですが、

dainyu関数を呼び出したときに
マロックで1つめのセルを獲得してそこに1つめのデータを入れよう。。。
とかおもったのですが、関数から構造体へのポインタがよくわかりません。
hyoji関数はまだ手を出していません。。。
539デフォルトの名無しさん:2006/02/01(水) 00:31:35
>>536 なにぼけてんだろ・・・orz
540デフォルトの名無しさん:2006/02/01(水) 00:32:52
>>538
一回頭冷やして出直してこい
541526:2006/02/01(水) 00:34:00
>>540さん
新スレ立てちゃってごめんなさい。
542デフォルトの名無しさん:2006/02/01(水) 00:38:13
543デフォルトの名無しさん:2006/02/01(水) 00:41:22
[1] 授業単元: プロラミング1
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1589.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2月2日
よろしくお願いします
544デフォルトの名無しさん:2006/02/01(水) 00:49:53
>>543
chkprimeの存在意義が分からん
まさか[min,max]のを1つずつその関数に掛けて判定しろってのか?
545デフォルトの名無しさん:2006/02/01(水) 00:52:31
>>535動くか?これ
546デフォルトの名無しさん:2006/02/01(水) 00:56:13
>>544
min, max は十分大きいけど |max-min| がそれほど大きくない場合は
エラトステネスよりも効率がよいことがあるので、存在意義が無いわけではない。
547デフォルトの名無しさん:2006/02/01(水) 01:02:55
>>545
動かないね。具体的には以下のテストでNG。
struct triangle t1 = { {0,0},{0,2},{1,1} }, t2 = { {1,1},{0,2},{0,0} };
if (!congruence(&t1, &t2)) printf("NG\n");
548デフォルトの名無しさん:2006/02/01(水) 01:10:45
>>535はなんか勘違いしてるね。
距離でやるならこんなとこか。
double distance2(double p1[], double p2[]){return (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]);}
int congruence(struct triangle *a, struct triangle *b){
 double da[3] = { distance2(a->p1,a->p2),distance2(a->p2,a->p3),distance2(a->p3,a->p1)};
 double db[3] = { distance2(b->p1,b->p2),distance2(b->p2,b->p3),distance2(b->p3,b->p1)};
 int i;
 for(i=0;i<3;++i) if(da[0]==db[i%3]&&da[1]==db[(i+1)%3]&&da[2]==db[(i+2)%3]) return 1;
 return 0;
}
549デフォルトの名無しさん:2006/02/01(水) 01:10:46
>>543
適当に行詰めたから展開してなー

#include<stdio.h>
#include<math.h>
int chkprime(int n){
    int x;
    if(n < 2)return 0;
    for(x = (int)sqrt((double)n);x!=1 && n%x;)--x;
    return x==1;
}
int main(void){
    int low,high,count;FILE*fp;
    puts("上限と下限を入力してください");scanf("%d%d",&low,&high);
    if(low > high){int c = low ; low = high; high = c;}
    if(low  < 0){fputs("警告: 範囲に負が含まれてる\n",    stderr);return 8;}
    if(high < 2){fputs("警告: 範囲内に素数が存在しない\n",stderr);return 8;}
    if((fp=fopen("result.txt","w"))==NULL){fputs("エラー: ファイルの作成に失敗\n",stderr);return 8;}
    for(count=0;low <= high;++low)if(chkprime(low))fprintf(fp,"%12d%c",low,++count % 5 ? ' ':'\n');
    if(count % 5)fprintf(fp,"\n");
    return 0;
}
550デフォルトの名無しさん:2006/02/01(水) 01:17:43
>>549
強引な圧縮に萌えた。

しかもループでsqrtの計算を頻発しないための匠の心遣いにも萌えた。
551デフォルトの名無しさん:2006/02/01(水) 01:20:18
>>548
まだ駄目。以下のテストではじかれる。
struct triangle t1 = { {0,0},{0,3},{1,1} }, t2 = { {1,1},{0,3},{0,0} };
if (!congruence(&t1, &t2)) printf("NG\n");
552デフォルトの名無しさん:2006/02/01(水) 01:23:00
>>548
鏡面は?
553535:2006/02/01(水) 01:28:17
だが後悔はしてない。
554デフォルトの名無しさん:2006/02/01(水) 01:35:02
忘れはせぬ。
貴様の魂我が心と共に。
悲しき男よ。
誰よりも愛深く、拳でしか愛を語れぬゆえに。
555549:2006/02/01(水) 01:50:35
よく考えたらx==1のときはn%x==0だから余計な比較だったな。
これで十分。
int chkprime(int n){
    int x;
    if(n < 2)return 0;
    for(x = (int)sqrt((double)n);n%x;)--x;
    return x==1;
}
556デフォルトの名無しさん:2006/02/01(水) 01:50:37
一般に長さ n の二つのリストが含む要素がすべて等しいかどうかは
O(n) じゃ判定できない。というわけで遠慮なくソートしていい。

double d2(double p[2], double q[2]) { return (p[0]-q[0])*(p[0]-q[0])+(p[1]-q[1])*(p[1]-q[1]); }
void order(double *a, double *b) { int tmp; if (*a > *b) tmp = *a, *a = *b, *b = tmp; }
void sort3(double l[3]) { order(&l[0], &l[1]); order(&l[1], &l[2]); order(&l[0], &l[2]); }
int congruence(struct triangle *a, struct triangle *b) { 
  double la[3] = { d2(a->p1,a->p2), d2(a->p2,a->p3), d2(a->p3,a->p1) };
  double lb[3] = { d2(b->p1,b->p2), d2(b->p2,b->p3), d2(b->p3,b->p1) };
  sort3(la); sort3(lb);
  return la[0] == lb[0] && la[1] == lb[1] && la[2] == lb[2];
}
557デフォルトの名無しさん:2006/02/01(水) 02:08:29
リストから頻度表を作成。表の登録/削除がデータ容量によらず、O(1)なら、可能だろうよ・・・。
制限すれば可能だし、ハッシュって手もある
558デフォルトの名無しさん:2006/02/01(水) 02:08:32
>>526
考えていることを読み取って書くと、こんな感じ?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1590.txt
559デフォルトの名無しさん:2006/02/01(水) 02:09:25
って、三要素かよ・・・。
560526:2006/02/01(水) 02:15:25
すみません!
おさわがせしました。
なんとか自力でできました〜。
新スレたてちゃって本当に申し訳ありませんでした。
失礼します!
561558:2006/02/01(水) 02:24:30
>>560
自力でなんとかなりそうになったら、そう書いてくれると
ありがたいんだが・・・
562デフォルトの名無しさん:2006/02/01(水) 02:35:07
>>557
実数からのハッシュなんてどうやって構成するつもり?
というか、ハッシュは普通加算集合上の関数として定義するはずだけど。

頻度表も自明なハッシュだから、状況はおんなじね。
563デフォルトの名無しさん:2006/02/01(水) 02:40:08
スマン。寝ぼけてるので明日、chkprime()を書く。
564デフォルトの名無しさん:2006/02/01(水) 02:47:36
3変数では無理意味が無い。だから、もっと数が多いばあいとして、俺の話はヨタ話として聞いてくれ。
実数のハッシュの件なんだがだが、ビットパターンなんだから、どーとでも成るでしょ。
固定長の文字列って考えてもいいんだから。
565デフォルトの名無しさん:2006/02/01(水) 03:12:18
>>564
こっちもヨタで。実際3要素ならアルゴリズムなんて言うまでもないしね。

で。実数を有限ビットで表現することにすれば確かに加算集合になるけど、
普通、計算量というときは考慮しないと思う(計算モデルへの依存が強すぎるから)。

もっと実用的な意味では、有限ビットの表現は計算モデルによって
どこでどんな誤差が乗るのか怪しいので、 == に基づくハッシュは
有効じゃない。たとえば assert(0.3 == 1.0-0.7); が通るかどうかは環境依存。
566デフォルトの名無しさん:2006/02/01(水) 03:17:12
>>543
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int *sieve;
int chkprime(int n) {return sieve[n];}
int main(void) {
    int lower_num, upper_num, notprime, sqrtn, digits, i, j = 0;
    FILE* fp;
    scanf("%d%d", &lower_num, &upper_num);
    if (lower_num < 0 || upper_num < 0 || lower_num > upper_num) {
        fprintf(stderr, "illegal range!\n");
        return 0;
    }
    sieve = (int*)malloc(sizeof(int) * (upper_num + 1));
    for (i = 2; i <= upper_num; i++) sieve[i] = 1;
    sieve[0] = sieve[1] = 0;
    sqrtn = (int)sqrt(upper_num) + 1;
    for (i = 2; i <= sqrtn; i++) {
        notprime = i;
        while ((notprime += i) <= upper_num) sieve[notprime] = 0;
    }
    fp = fopen("result.txt", "w");
    digits = (int)log10(upper_num) + 2;
    for (i = lower_num; i <= upper_num; i++)
        if (chkprime(i)) {
            fprintf(fp, "%*d", digits, i);
            if (j++ % 5 == 4) fprintf(fp, "\n");
        }
    if (j == 0) fprintf(stderr, "there's no prime!\n");
    fclose(fp); free(sieve);
}
567デフォルトの名無しさん:2006/02/01(水) 03:25:04
マズ、私の非を認める。
1)3つの値に対してソートは正しい選択だ。
2)実数という書き方もマズかった。キーを「不動小数点数」を対象にしたといえばいいのだろうか。

ところで、加算集合(=濃度が整数と等しい・・・?)がイマイチわからんのだ。
不勉強な俺に加算集合とかハッシュの関連がかかれているページを教えてくれ。

568デフォルトの名無しさん:2006/02/01(水) 07:53:37
/*(1)*/
すいません、>>461です。
下記プログラム(>>474さんにやってもらったやつ)の横に
その行の仕事を書いていただけないでしょうか・・・

#include<stdio.h>
int main(void){
int n,c,t;
for(c=0;c<=6;++c,printf("\n"))
for(n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%dC%d = %d ",n,c,t);
return 0;
}
/*(2)*/
#include<stdio.h>
int main(void){
int n,c,t;
for(c=0;c<11;++c,printf("\n"))
for(printf("%*s",(11-c)*2,""),n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%3d ",t);
return 0;
}

569デフォルトの名無しさん:2006/02/01(水) 11:41:16
ちょwww同じ課題がすでに書いてあるwww
570デフォルトの名無しさん:2006/02/01(水) 12:48:53
>>474の鬼っぷりに惚れた
571デフォルトの名無しさん:2006/02/01(水) 14:31:55
実行ファイルにドラッグ&ドロップされたファイルを出力ファイル(out.txt)に
すべてコピーするプログラムを作りたいのですが、下記のプログラムでは、
out.txtが作成されません...
どなたかよろしくお願いいたします。

#include <stdio.h>
#include <stdlib.h>

int main(int argc , char *argv[]) {
    int count = 1;
    char str[256];
    FILE *fp_in,*fp_out;

    fp_out=fopen("out.txt","w");
    while (count < argc) {
        printf("FILE %d : %s\n" , count , argv[count]);
        if((fp_in=fopen(argv[count],"r"))==NULL){
            getchar();
            exit (1);
        }
        while ((fgets(str,256,fp_in))!=NULL)
            fputs(str,fp_out);
        count++;
        fclose(fp_in);
    }
    fclose(fp_out);
    printf("\n");
    printf("Press \"Enter\" to exit.");
    getchar();
    return 0;
}
572デフォルトの名無しさん:2006/02/01(水) 14:36:55
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc (Cygwin)
 [3.3] 言語: C

書き忘れてました。。。
573474:2006/02/01(水) 14:52:45
>>568
嫌です。コメント書くのってコードを書くのの約20倍ぐらい疲れるから
とりあえず意味単位にコードを分離まではするからそこから先は自分で考えてくれ
#include<stdio.h>/*(1)*/
int main(void){
    int n,c,t;
    for(c=0;c<=6;++c){
        t = 1;
        for(n=0;n<=c;++n){
            printf("%dC%d = %d ",n,c,t);
            t = t * (c - n) / (n+1);
        }
        printf("\n");
    }
    return 0; 
}
#include<stdio.h>/*(2)*/
int main(void){
    int n,c,t;
    for(c=0;c<=10;++c){
        printf("%*s",(10-c)*2,"");
        t = 1;
        for(n=0;n<=c;++n){
            printf("%3d ",t);
            t = t * (c - n) / (n+1);
        }
        printf("\n");
    }
    return 0;
}
574デフォルトの名無しさん:2006/02/01(水) 15:01:21
>568
#include<stdio.h> こう書かないとコンパイラが文句をいうので仕方なく書いています。
int main(void){ C言語です。と宣言しています。
int n,c,t; この行は仕事をしていません。
for(c=0;c<=6;++c,printf("\n")) ループしています。
for(n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%dC%d = %d ",n,c,t); ループしてプリントしています。
return 0; プログラムを終わらせます。
} これはよくわかりません。たぶん意味はないです。
/*(2)*/
#include<stdio.h> 上とほとんど同じなので、うまく文章を真似てください。
int main(void){
int n,c,t;
for(c=0;c<11;++c,printf("\n"))
for(printf("%*s",(11-c)*2,""),n=0,t=1;n<=c;t*=c-++n+1,t/=n)printf("%3d ",t);
return 0;
}
575デフォルトの名無しさん:2006/02/01(水) 15:52:38
[1] 授業単元:計算機システム
[2] 問題文(含コード&リンク):符号付固定小数点加算(2進数)について以下の3つの場合のプログラムを書きなさい。
              1)符号−絶対値表現による加算
              2)1の補数表現による加算
              3)2の補数表現による加算
[3] 環境
 [3.1] OS:Windows
 [3.2] わかりません。すみません。
 [3.3] C、C++どちらでも可です。
[4] 期限:2月4日まで
[5] その他の制限:特にありません。
開放科目受講生なのでプログラムについてベイシックしか習ったことがありません。
ですから調べて書いてくるようにとの指示でした。どうかお願いします。
576デフォルトの名無しさん:2006/02/01(水) 16:18:22
>>571
それは、実はちゃんと動作しているんだよ。
ただ、出力先のファイルが変なところにできているだけ。
"out.txt"をフルパスで、"c:\\out.txt"とかすればいいよ。
577デフォルトの名無しさん:2006/02/01(水) 17:17:05
[1]授業単元:プログラミング実習
[2]問題文:ヒープを構築し、データの挿入、最大値の取り出しのシュミレーションを実施せよ
      コメントつきのプログラムを添付せよ
[3]環境
  [3.1]OS:windows
[3.2]コンパイラ名:gcc バージョン:わからないです
  [3.3]C言語
[4]期限:2月2日まで
[5]その他の制限:たぶん初心者ばっかなんでIf文を使いまくって2文探索木でどうのこうのだと思うのですが
よくわかりません。
知識はゼロに近いです・・。お願いします。
578デフォルトの名無しさん:2006/02/01(水) 17:28:18
C言語なら俺に聞け でも聞いたのですがどちらかというと宿題スレのような感じですので
お願いします

[1] 授業単元: 個人的趣味
[2] 問題文(含コード&リンク):
二つのパラメータが同時に以下のように溜まるようにしたい(20個くらいで)
味方:■■■■■・・・・■
敵 :■■■■■・・・・■
先にパラメータが終了したら攻撃が行えるようにしたいので
どちらが先にパラメータが溜まるかわからない仕様
味方のパラメータが仮に先に終了したら味方が攻撃を行い
攻撃後はパラメータは初期化されまた最初からはじまる
攻撃の部分はどうでもいいのでパラメータをどのように溜めるかだけお願いします
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: BCC32
 [3.3] 言語: C
[4] 期限: 特になし、早ければ早い方が…
[5] その他の制限: 無し
579デフォルトの名無しさん:2006/02/01(水) 17:41:03
FFのアクティブタイムバトルみたいな感じか
580571:2006/02/01(水) 17:43:40
>>576
できましたー!
実は本当はもう少し複雑なプログラムを作ろうと思っていたのですが、
これでうまく作れそうです。
本当にありがとうございました。
581578:2006/02/01(水) 18:07:54
>>579
そうです!!
582デフォルトの名無しさん:2006/02/01(水) 18:12:25
マルチスレッド使うかむりやりそれっぽく作るかだな
583デフォルトの名無しさん:2006/02/01(水) 18:17:51
>>578
毎フレームごとに全員のゲージを溜めていって満タンになったら行動
下はコンソールでの例(Win限定)
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#include<windows.h>
#include<conio.h>
int main(){
    int a=0,b=0;
    for(;;){
        printf("A %0*d\nB %0*d\n",a,0,b,0);
        a += rand()%3;//適当にゲージを溜める
        b += rand()%3;//適当にゲージを溜める
        if(a > 20){
            printf("Aの攻撃\n");
            getch();
            a = 0;
        }
        if(b > 20){
            printf("Bの攻撃\n");
            getch();
            b = 0;
        }
        Sleep(100);
        system("cls");
    }
}
584デフォルトの名無しさん:2006/02/01(水) 18:21:13
おお、なんかおもれ〜
ところでなんか無駄にincludeされてない?
585デフォルトの名無しさん:2006/02/01(水) 18:24:08
>>583
絶対にAの攻撃になるんだが・・。
586デフォルトの名無しさん:2006/02/01(水) 18:26:07
それは種変えればいいだけじゃね?
確かにこのままだと毎回同じだけどさ
587デフォルトの名無しさん:2006/02/01(水) 18:26:48
>>571
自分でわかって使うならそれでいいけど、宿題ならそれだと減点されるぞ。
ヒント:
(1): ファイルのある行が 256byte以上ある時
(2): ファイルの中身に '\0' が含まれていたらどうする?
(3): エラー処理
答えは後程。
588デフォルトの名無しさん:2006/02/01(水) 18:29:44
>>587
(1)は問題無いな。読みきれなければ次のfgetsで読み込めるから
589デフォルトの名無しさん:2006/02/01(水) 18:31:20
じゃあこれやっとこうよ。無駄にincludeが多い気がするけどまあいいか
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#include<windows.h>
#include<conio.h>
int main(){
int a=0,b=0;
for(;;){
printf("A %0*d\nB %0*d\n",a,0,b,0);
    srand((unsigned) time(NULL));
a += rand()%3;//適当にゲージを溜める
b += rand()%3;//適当にゲージを溜める
if(a > 20){
printf("Aの攻撃\n");
getch();
a = 0;
}
if(b > 20){
printf("Bの攻撃\n");
getch();
b = 0;
}
Sleep(100);
system("cls");
}
}
590デフォルトの名無しさん:2006/02/01(水) 18:31:36
学校の宿題程度ならそんなんで減点ないと思う
591583:2006/02/01(水) 18:33:32
>>589
せめてforの外でsrandしてくれw
というか自分のコードは、
あくまで概念的な説明でいい加減に出したから真面目に弄られると困るw
592デフォルトの名無しさん:2006/02/01(水) 18:38:07
>>583
0じゃなくて■だとどうなんの?
593583:2006/02/01(水) 18:41:41
>>592
単に
printf("A %0*d\nB %0*d\n",a,0,b,0);

printf("A ");for(i=0;i<a;++i)printf("■");puts("");
printf("B ");for(i=0;i<b;++i)printf("■");puts("");
に変わるだけ(int iの宣言はどこかでしてなー)     
594デフォルトの名無しさん:2006/02/01(水) 18:43:13
>>587
2はfeof()使えばいいんじゃね?
595デフォルトの名無しさん:2006/02/01(水) 18:55:55
>>583
かっけえー Cでかっこいいとおもたのはじめてあるよwww
596デフォルトの名無しさん:2006/02/01(水) 19:25:35
>>106
>>333
106のダイクストラ法のプログラムってさ
グローバルで定義した配列p[]をshortestpathの中で一回使ってんじゃん
あれって何の意味があんの?
実はこの問題、本当は最短経路求めるはずなのに333のプログラムだと最短経路のコストしか分かんないんだよね
それを求めるときに使うのかなって思ったんだけど
ちなみに課題の提出は終わったから興味本位な
597587:2006/02/01(水) 19:35:14
>>588
(1) はこちらのミス。fgets(buf,n,fp) は n-1 byte だったな。
吊ってくる
(2) は使うファイルがテキストと仮定すれば問題ないか
そんな訳でほぼ意味はないが、自分なりに作った答はこちら。
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>

int main(int argc, char *argv[]) {
int count=1;
char str[256];
FILE *fp_in,*fp_out;
fp_out=fopen("out.txt","wb");
if(!fp_out){
perror("out.txt");
return 1;
}
for(;count<argc;count++){/* */
int size;
printf("FILE %d : %s\n",count,argv[count]);
if((fp_in=fopen(argv[count],"rb"))==NULL){
getchar();
exit(1);
}
598587=597 続き:2006/02/01(水) 19:37:49
while(1){
char *cur_w;
size=fread(str,1,sizeof(str),fp_in);
if(!size){
if(feof(fp_in))break;
if(errno!=EINTR){perror(argv[count]);break;}
clearerr(fp_in);
}
cur_w=str;
while(size>0){
int wrsize;
wrsize=fwrite(cur_w,1,size,fp_out);
if(ferror(fp_out)){
if(errno!=EINTR){perror("out.txt");exit(1);}
clearerr(fp_out);
}
cur_w+=wrsize;size-=wrsize;
}
}
fclose(fp_in);
}
fclose(fp_out);fputs("\nPress \"Enter\" to exit.",stdout);getchar();
return 0;
}
599デフォルトの名無しさん:2006/02/01(水) 19:38:21
>>571
>>576
横からなんだけどDDした場合って、explorer.exeかなんかがそのDDしたバイナリファイルをプロセス作成してて
カレントディレクトリの位置が親プロセスを受け継いでるから、バイナリの同ディレクトリにout.txtが出力されないって事なの?
32APIでスマソ
600デフォルトの名無しさん:2006/02/01(水) 20:35:37
>>599
そういうことだろうね。
601デフォルトの名無しさん:2006/02/01(水) 20:45:16
>>596
p[]を使うかどうかはわからんが、全てのノードへの最短の長さが
わかったら、逆に辿れば目的地までの最短経路は簡単に出るだろ。
602デフォルトの名無しさん:2006/02/01(水) 20:58:16
>>596
それで認める?
簡単に分かるといっても目的地から一個前の節点を探し出すのは手計算じゃないか

まあ そういう使い方しないとしてもp[]の使い道の意見求む
603sage:2006/02/01(水) 20:58:56
[1] 授業単元:プログラミング演習
[2] 問題文:gnuplotのようにファイルの数値データを読み込んで自動的にグラフを生成するプログラム
      データの値(X座標とY座標)が書き込まれたファイルをまず用意し(?.dat)、プログラムを
      実行すると、 データのファイル名、グラフの種類(点、折れ線、など)を尋ねる。
      入力したデータを読み込んで、グラフをグラフィック表示する。作図の範囲(X座標とY座標の範囲)は、
      データから自動的に計算し、データ点が全て描かれるようにする。その際に、X軸とY軸も入れること。
[3.1] OS:Linux
[3.3] 言語: C++
[4] 期限: 2月2日まで
どうかお願いします。。
604602:2006/02/01(水) 20:59:42
ゴメン間違えた

>>596 -> >>601

596って俺じゃないかorz
605デフォルトの名無しさん:2006/02/01(水) 21:05:13
> それで認める?
?なにを?
>簡単に分かるといっても目的地から一個前の節点を探し出すのは手計算じゃないか
?なぜ手計算?
まあ、いいわ。スレ違いだ。やめておくわ。
606デフォルトの名無しさん:2006/02/01(水) 21:11:32
だったら最初から書くなよ・・・
607デフォルトの名無しさん:2006/02/01(水) 21:12:24
608602:2006/02/01(水) 21:14:27
>>605
違ってたら悪いけど
目的地から最短経路の一つ前の節点は
((目的地への最短経路) - (目的地に接続されている点への最短経路) ) == (目的地と接続されている点との距離)
である点を探してスタート地点まで戻るんだろ?
それを手計算って呼び方にしたのが悪かったのかも知れないけど

>認める
っていうのは最短経路を求めるプログラムとして認めるかってこと

ゴメン色々と言葉足らずでした
609デフォルトの名無しさん:2006/02/01(水) 21:37:44
[1] プログラミング入門
[2] 問題文(含コード&リンク):
char str[][51];
のような二次元配列に日本語の文字列が入っています。
その文字列を1文字づつに区切りって取り出しor出力したいのですが
どうもうまくできません・・・
strcpy(a, str[0]);
で一度aの配列に入れ、取り出そうと思いましたが
2バイト文字なのでダメでした。
なにか良い方法はないでしょうか?
[3] 環境
 [3.1] OS:Linux
 [3.2] バージョン不明。ccコマンドでコンパイルしています。
 [3.3] 言語:C
[4] 期限:2006年02月02日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタの使い方など理解できていないので出来れば無しで。
よろしくお願い致します。
610デフォルトの名無しさん:2006/02/01(水) 21:45:31
2次元配列にどうやって入ってるんだ?
2バイト文字出力したかったら
printf("%c%c",str[i],str[i+1]);
ってやるんだよ
611デフォルトの名無しさん:2006/02/01(水) 21:46:17
>>609
入ってる文字は日本語(2バイト文字)だけ?
それとも半角英数字と日本語ごっちゃになってるのも含めるの?
612デフォルトの名無しさん:2006/02/01(水) 21:48:18
前々から思ってたけど仮に2バイト文字と1バイト文字入り乱れてたらどうやって見分けるんだ?
613デフォルトの名無しさん:2006/02/01(水) 21:50:17
英数字がASCIIな場合文字コードの違いで分解すればおk
614デフォルトの名無しさん:2006/02/01(水) 21:51:26
setlocale, mbstowcs, 添字アクセス
615デフォルトの名無しさん:2006/02/01(水) 21:54:30
方法あるのかコード表みないとわからんな
616デフォルトの名無しさん:2006/02/01(水) 21:57:57
添え字アクセスって何のことかと調べたら
添え字アクセスの事ね('∀`;)
617デフォルトの名無しさん:2006/02/01(水) 21:59:19
コード依存だからなぁ・・・
JIS,SJIS,EUC,utf-8,utf-16とかいろいろ。
618デフォルトの名無しさん:2006/02/01(水) 22:01:05
>>610-611
char str[][51];
には外部のPGより出力されたのを受け取り入れてあります。
今度は、その受け取った文字(主に漢字で2バイト文字のみ)を
1文字づつに分解して、外部のPGに出力し使用する予定です。
VBAなどでは、文字の取り出し関数があったので困らなかったのですが
Cではそのような関数が見つからなくて・・・_| ̄|○
一度、printf("%c%c",str[i],str[i+1]); で試してみようと思います。
619デフォルトの名無しさん:2006/02/01(水) 22:02:29
宿題スレなんで、そこんとこよろしくな・・・・。
620デフォルトの名無しさん:2006/02/01(水) 22:03:46

つstrstr
621デフォルトの名無しさん:2006/02/01(水) 22:19:00
>>603
「gnuplotのように」ってあるけど、gnuplotを使っていいのか、
描画も実装しないといけないのかわからん。
622603:2006/02/01(水) 22:22:26
>>621 gnuは使わずにお願いします
すいません描画を実装とはどういう意味ですか?
623デフォルトの名無しさん:2006/02/01(水) 22:24:40
コンソールに*をかけばいーんでね?
624デフォルトの名無しさん:2006/02/01(水) 22:26:44
Linuxで〜GUI書けというのか
625603:2006/02/01(水) 22:27:32
>>623 すいませんそういうのではなくグラフィック関数をもちいたものでお願いします
626デフォルトの名無しさん:2006/02/01(水) 22:28:47
グラフィックを扱うプログラム(例題とかサンプルとか)を渡されているはずなので、それをUP。
627デフォルトの名無しさん:2006/02/01(水) 22:29:39
>>618
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
#include <stdlib.h>

int main(void)
{
  wchar_t wcs[300];
  char    str[] = "618 :デフォルトの名無しさん :2006/02/01(水) 22:01:05";
  int     len, i;

  setlocale(LC_ALL, "");

  len = mbstowcs(wcs, str, sizeof(wcs)/sizeof(wcs[0]));

  for (i = 0; i < len; i++) {
    printf(" [%d]..%lc\n", i, (wint_t)wcs[i]);
  }

  return 0;
}
628603:2006/02/01(水) 22:33:51
#include <iostream.h>
// 関数のプロトタイプ宣言
void initWindow(int w, int h) ;
void setColor(float r, float g, float b) ;
void fillRect(int x0, int y0, int w, int h) ;
void display(void) ;

int main(void)
{
initWindow(400, 400) ; // グラフィック表示のためのウィンドウを準備

setColor(1.0, 0.0, 0.0) ; // 描画色を赤に設定
fillRect(0,0,200,200) ; // 矩形を描画

display() ; // 描画し、ウィンドウ内をマウスでクリックするまで待つ
}

629デフォルトの名無しさん:2006/02/01(水) 22:41:44
独自ライブラリか・・・オラ知らね。
630デフォルトの名無しさん:2006/02/01(水) 22:57:29
さすがにこれは無理だろw
631デフォルトの名無しさん:2006/02/01(水) 23:00:22
俺は>>603のレスの時点であきらめてたぜ
632デフォルトの名無しさん:2006/02/01(水) 23:05:02
軸の値(文字列)の表示に調整が要りそうだが、
描画領域の幅と高さとデータの最小最大をあわせて・・・ってやりゃぁできるだろ・・・
633デフォルトの名無しさん:2006/02/01(水) 23:49:19

[1]授業単元:プログラム基礎
[2]問題文:
int a[]={65,82,47,98,100,83,71,39,54,26};
という表現を用いて、あらかじめ配列に初期値を与えておくことができる。
この配列aの要素の最大値と最小値を求め、表示するプログラムをつくりなさい。

[3]
[3.3]言語:C++
[4]期限:2006年2月2日午後4時まで

よろしくお願いします。
634デフォルトの名無しさん:2006/02/01(水) 23:56:56
>>607
ありがとうございます!助かりました!
635デフォルトの名無しさん:2006/02/01(水) 23:57:58
>>633
#include<stdio.h>

int main(void)
{
int a[]={65,82,47,98,100,83,71,39,54,26};
int minimum;
int maximum;
int i;
minimum = a[0];maximum = a[1];
for(i=0; i<(sizeof(a)/sizeof(a[0])) ;i++){
if( a[i] < minimum ) minimum = a[i];
if( maximum < a[i] ) maximum = a[i];
}
printf("max = %d : min = %d\n",maximum, minimum);
return 0;

}
636デフォルトの名無しさん:2006/02/01(水) 23:58:19
>>633
真面目に答える気0

#include<iostream>
#include<algorithm>
int main(){
    int a[]={65,82,47,98,100,83,71,39,54,26}; 
    const int size = sizeof(a) / sizeof(a[0]);
    std::cout << "min = " << *std::min_element(a,a+size) << std::endl;
    std::cout << "max = " << *std::max_element(a,a+size) << std::endl;
}
637635:2006/02/02(木) 00:01:32
あ、C++だったのか。勘違いした。
638デフォルトの名無しさん:2006/02/02(木) 00:03:20
>>633

#include <stdio.h>
int main(){
  int a[]={65,82,47,98,100,83,71,39,54,26};
  int i,min=a[0],max=a[0];
  for(i=0;i<10;i++){
    if(a[i]<min)min=a[i];
    if(a[i]>max)max=a[i];
  }
  printf("min=%d, max=%d\n",min,max);
  return 0;
}

配列の要素数求めるのって、どうやるんだっけ?
639デフォルトの名無しさん:2006/02/02(木) 00:04:06
>>638
sizeof(a) / sizeof(a[0]); 
640デフォルトの名無しさん:2006/02/02(木) 00:07:34
一行にしてみるw
for(i=1,min=max=0;i<sizeof(a)/sizeof(int);min=(a[min]>a[i])?i:min,max=(a[max]<a[i])?i:max,i++);
641638:2006/02/02(木) 00:09:48
>>639
どうもです。

どうもそのようですね。>>635見て、勉強になりました。
そこがどうにかならないか考えてたら
皆ハイエナのように飢えてるんだから…_| ̄|○

C++の問題は、知らないこと力技でやったら恥ずかしい目にあうから苦手。
642デフォルトの名無しさん:2006/02/02(木) 00:18:27
真面目に答える気0 第二弾
#include<boost/algorithm/minmax_element.hpp>
#include<iostream>
int main(){ 
    int a[]={65,82,47,98,100,83,71,39,54,26};
    std::pair<int*,int*>p=boost::minmax_element(a+0,a+sizeof a/sizeof a[0]);
    std::cout << "min = " << *p.first << "\nmax = " << *p.second << std::endl;
}
643デフォルトの名無しさん:2006/02/02(木) 00:35:27
こんなんいかがでしょう、ししょー
#include <set>
#include <iostream>
main(){
 int a[]={65,82,47,98,100,83,71,39,54,26};
 std::set<int> s(a,a+sizeof(a)/sizeof(a[0]));
 std::cout <<"min:" <<*s.begin() <<" max:" <<*(--s.end()) <<std::endl;
}
644575:2006/02/02(木) 00:38:04
575番です。
お願いできないでしょうか。
645デフォルトの名無しさん:2006/02/02(木) 00:43:12
646635:2006/02/02(木) 00:43:40
>>642,643
そういう遊び方もあるって勉強になったよw
>>644
具体的にどんなコードが必要なのかよくわからないから、そこを
詳しく書けばいいんじゃない?
647デフォルトの名無しさん:2006/02/02(木) 00:46:21
>>643
なるほろー、探す値が一個だからmultisetじゃなくてsetで十分なのか。
648255:2006/02/02(木) 00:47:33
諦めかけてたんですが、期限が延びたのでまたお願いします。

[1] 授業単元: プログラミング基礎演習
[2] 問題文(含コード&リンク):
1.2つの分数(fraction)を入力し,その四則演算(+,-,*,/)を計算するプログラムを作成してください.
ただし,次の構造体を利用すること.ここでは,四則演算を関数化しないこと.また,既約分数にしなくとも良いです.
/*fraction_t型の定義*/
typedef struct {
int numerator; /*分子*/
int denominator; /*分母*/
} fraction_t;

/*fraction_t型の変数の宣言*/
fraction_t frt;

2.和(add),差(subtract),積(multi),商(quotient)を計算する4つの関数を作成せよ.
その関数を利用し,1のプログラムと同じ構造体を利用し,同じ動作をするプログラムを作成せよ.
3.2のプログラムで,計算が正しく行われない場合を列挙して,その対応策を考えよ.
(例 1/-2 のような計算結果は,美しい表示方法とはいえません)
4.3で列挙した対応策を,2で作成したプログラム上で実現せよ.
[3] 環境
 [3.1] unix
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] C
[4] 期限:2006.2/6
649デフォルトの名無しさん:2006/02/02(木) 01:06:47
なんてこった!
真面目に答える気ゼロで書いてても誰か別の人が書いてくれると思ったのに
>>633(の教師)が求めていそうなコードはC言語版しか出ていない。
というわけで理解しやすいコードを求めて変数名を異常に饒舌に書いてみた

>>633
#include<algorithm>
#include<iostream>
int main(){
    int a[]={65,82,47,98,100,83,71,39,54,26};
    int maximum_value = a[0];
    int minimum_value = a[0];
    int a_array_length= sizeof(a) / sizeof(a[0]);
    for(int a_array_loop_index = 0;a_array_loop_index < a_array_length ; ++a_array_loop_index){
        int temporarily_variable_for_comparison = a[a_array_loop_index];
        if(temporarily_variable_for_comparison > maximum_value){
            maximum_value = temporarily_variable_for_comparison;
        }else if(temporarily_variable_for_comparison < minimum_value){
            minimum_value = temporarily_variable_for_comparison;
        }
    }
    std::cout << "min = " << minimum_value << " : max = " << maximum_value << std::endl;
}
650デフォルトの名無しさん:2006/02/02(木) 01:08:19
配列ソートして頭と穴を返すようにしてみると、ちょっとだけバカになった気がします。
651デフォルトの名無しさん:2006/02/02(木) 01:08:41
俺はstd::set<>を使ったのが一番綺麗だと思う
652デフォルトの名無しさん:2006/02/02(木) 01:17:56
>>651
一番綺麗だが一番効率悪いという罠
653デフォルトの名無しさん:2006/02/02(木) 01:39:36
これでどうだ。
#include <stdio.h>
#include <limits.h>
int min(int *p, int *end){ if(p==end) return INT_MAX; return *p<min(p+1,end)?*p:min(p+1,end);}
int max(int *p, int *end){ if(p==end) return INT_MIN; return *p>max(p+1,end)?*p:max(p+1,end);}
main(){
  int a[]={65,82,47,98,100,83,71,39,54,26};
  printf("min=%d\n", min(a,a+sizeof(a)/sizeof(a[0])));
  printf("max=%d\n", max(a,a+sizeof(a)/sizeof(a[0])));
}
654デフォルトの名無しさん:2006/02/02(木) 01:51:40
>>653
C++のイテレータ的な感覚で使ってるなw

無茶苦茶いいじゃねーか(*´д`)
655デフォルトの名無しさん:2006/02/02(木) 02:08:11
>>653
O(N^2)かよw
656デフォルトの名無しさん:2006/02/02(木) 02:12:56
ネタ回答が多いのぉ。心に残るネタ回答を教えてくれ。

俺はどのスレか忘れたけど、「適宜,対応」のセンセ降臨が好きだった。
657655:2006/02/02(木) 02:32:51
あ、ミスった、O(2^N)だw
しかしネタ回答は書くのも見るのも本当に楽しいなぁ
658デフォルトの名無しさん:2006/02/02(木) 02:44:49
短くするのにチャレンジ
int main(){int a[]={65,82,47,98,100,83,71,39,54,26};int i,*b,*c,*d;for(b=a+1,c=d=b;b<a+sizeof(a)/sizeof(int);c=*b>*c?b:c,d=*b<*d?b:d,b++);printf("min=%d,max=%d\n",*c,*d);return 0;}
659デフォルトの名無しさん:2006/02/02(木) 02:59:24
よっしゃ、対抗する。
多少の警告は無視してgcc,dmc,clで通した
a[]={65,82,47,98,100,83,71,39,54,26},*b=a,d;main(c){for(c=d=*a;b-a-sizeof a/sizeof*a;b++)c>*b?c=*b:d<*b?d=*b:0;printf("min=%d,max=%d\n",c,d);}
660デフォルトの名無しさん:2006/02/02(木) 03:12:53
もはや宿題ではなくなっている。ワロス
661デフォルトの名無しさん:2006/02/02(木) 03:52:41
>>648
後期の講義も昨日で終わり、とてもいい気分なので調子に乗って書いてみた。
ほれ、汚い&条件満たしてないプログラムだが、一応見てみてくれ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1592.txt
662661:2006/02/02(木) 03:54:44
ってよく考えたら、条件満たしてないプログラムかよく分からんしなぁ…
条件を満たしていない「かも」ということにしておこう。

引き続き2以降の課題にも取り組んで見ます!
663デフォルトの名無しさん:2006/02/02(木) 04:31:49
>661
( ゚д゚)
664661:2006/02/02(木) 04:35:49
よし!2番もそれっぽいのができたぞ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1593.txt

で、このプログラムが正しく計算できない場合を考えると…

・分子に負の数を入れたとき、四則演算の解で分母に-がくっついて出力されてしまう場合がある
→出力する前に分母の方に-をくっつける
・数値を読み込むときに分母に負の数を入れた場合計算結果がおかしくなる。
→分母に負数が入力されたときに警告文を出すか、計算前に分子の方に-をくっつける処理を行う

(・分母に0を入れたときっていうのも、一応計算が正しく行われていないことになるのかなぁ…)
→分母に0を入力したときは警告文を出す

もしかしたら他にも不都合な点があるかも知れんが、とりあえず上の3つに対してのプログラムを書いてみます。
665デフォルトの名無しさん:2006/02/02(木) 04:47:15
通分間違えてないか?>>664
666デフォルトの名無しさん:2006/02/02(木) 04:55:09
いま自分も気づいて、そのことを書き込もうとしたら>>665氏に指摘されてました…
ちょっとプログラム書き換えてみます
667664:2006/02/02(木) 05:08:55
通分の部分はこうなるんですかね?
if(frt[0].denominator != frt[1].denominator){ /*ここで通分を行う*/
frt[0].numerator *= frt[1].denominator;
frt[1].numerator *= frt[0].denominator;
frt[0].denominator = frt[1].denominator = frt[0].denominator * frt[1].denominator;
}

ちょうど4のプログラムもできたので、全部のプログラムの改訂版をまとめてうpしておきます。
問題1改訂版
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1594.txt
問題2改訂版
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1595.txt
問題4
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1596.txt
668デフォルトの名無しさん:2006/02/02(木) 07:24:37
>>644
2進数の保持の仕方は? 文字列? int?
サイズは?(=最上位ビットは何ビット目?
小数点の位置指定は?
値の指定方法は?

intに格納した値を8bitの2進数と解釈するものはできたけど、回答になるのかどうか分からん。
669デフォルトの名無しさん:2006/02/02(木) 08:44:16
>>602
あのプログラムは読むのが面倒すぎてやる気がおきなかったけど……,

ダイクストラ法の p[] って言うと,一応「p[i] は i の一歩前の頂点」
ってのが,多くのアルゴリズムの本では書かれてるはず.
具体的には 326 のコード使って↓みたいに使う.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1597.c
670デフォルトの名無しさん:2006/02/02(木) 08:55:06
>>657 これは O(N) だよ.というか関数型プログラミング言語では普通にされる書き方.
#include <stdio.h> 
#include <limits.h> 
typedef int func(int, int);
int foldl(func f, int z, int *first, int *last) {
  return first == last ? z : foldl(f, f(z, *first), first+1, last);
}
int min2(int a, int b) { return a < b ? a : b; }
int max2(int a, int b) { return a < b ? b : a; }
int min(int *first, int *last) { return foldl(min2, INT_MAX, first, last); }
int max(int *first, int *last) { return foldl(max2, INT_MIN, first, last); }

int main() {
  int a[]={65,82,47,98,100,83,71,39,54,26}; 
  printf("min=%d\n", min(a,a+sizeof(a)/sizeof(a[0]))); 
  printf("max=%d\n", max(a,a+sizeof(a)/sizeof(a[0]))); 
}
671デフォルトの名無しさん:2006/02/02(木) 09:11:27
>>667
ありがとうございます!
672デフォルトの名無しさん:2006/02/02(木) 09:46:44
>>669
なるほど
それだったら納得
勉強になったよ
ありがと
673644:2006/02/02(木) 11:54:05
>>668
質問に行きましたところ、固定小数点の整数でいいようです。
格納についてはintで、サイズも8bitで良いとのことでした。
情報不足で申し訳ありません。お願いします。
674657:2006/02/02(木) 12:06:46
>>670
C++で言うところのstd::accumulate相当の処理ですなぁ
オーダーも下がるし、コードは明示的ループより読みやすいし、
末尾再帰は偉大なりって感じですねー。
675デフォルトの名無しさん:2006/02/02(木) 13:07:17
ボーランドのコンパイル使ってます。お願いします
下のプログラムを動かしたんですが、a=1,b=256とデフォルトで出てきてしまいます。
数字を入力したら計算はきちんとできるんですが、1と256を出ないようにして
デフォルトでa= ,b= とだけ表示するにはどうしたらいいですか?
つまりa= が出てきて例えば10という数値を入れてa=10という表示がされるようにしたいのですが。。。
後、BCCDeveloperというエディタを使っていますがリリース版の実行ファイルの作成の仕方がわかりません・・・
デバッグかリリース選ぶ箇所でリリースしてコンパイルしようとするとエラーが出てしまいます。
どなたかリリース版の実行ファイルの作り方が分かる方がいれば教えていただけませんか?


#include<stdio.h>
void main()
{
int a,b,total,average;
printf("a=%d\n",a);
scanf("%d",&a);
printf("b=%d\n",b);
scanf("%d",&b);

total = a+b,average = a+b/2;

printf("total=%d\n",a+b);
printf("average=%d\n",(a+b)/2);
}
676デフォルトの名無しさん:2006/02/02(木) 13:21:00
printf("a=");
scanf("%d",&a);
printf("%d\n",a);
printf("b=");
scanf("%d",&b);
printf("%d\n",b);
こんなんじゃだめか。だめだろうな
二つ目はスレ違いだから該当スレを探して聞いてくれ
677デフォルトの名無しさん:2006/02/02(木) 13:22:27
#include<stdio.h>
void main()
{
int a=0;
int b=0;
int total=0;
int average=0;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);

total = a+b,average = a+b/2;

printf("total=%d\n",a+b);
printf("average=%d\n",(a+b)/2);
}

変数の初期化はしといたほうがいいと思うよ。
678えび:2006/02/02(木) 13:26:37
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows
 [3.2] Visual Studio.net 2002
 [3.3] C++ で
[4] 期限: ([2006年2月7日
[5] その他の制限: 基本的にC++の知識が全く無い状態での課題なのですが…
 まず、縦1000文字 横19列の数字列の入ったファイルEEG.txtを読み込み、
波形を表示するというものなのですがまったくもって分かりません><
ファイルの中の数字は-999〜999の間となっており数字と数字の間はスペースが入っています…(例:-154 254 567 2 6 )
これを配列に読み込んで表示を行うというプログラムを考えてもらえないでしょうか。
よろしくお願いします。
679デフォルトの名無しさん:2006/02/02(木) 13:54:25
>>677
無駄すぎる初期化はいらねえよ
680デフォルトの名無しさん:2006/02/02(木) 14:06:48
>>679
エラーの元
681675:2006/02/02(木) 14:09:22
>>676-677
ありがとうございます。初期化したので妙な数値は出てこなくなってデフォルトでa=0 b=0と出てくるようになりました。
けど僕がしたいのはa= b=のみをまず初めに表示させて、その後に数値を入力するようにしたいんです。
例えば
a=10
b=20
合計30
平均15
というようにしたいのです。
初期化して実行してみると
a=0
10
b=0
20
合計30
平均15
となってしまいます・・・

後、totalとaverageの記述が無意味になってたので少し書き換えてみました

682デフォルトの名無しさん:2006/02/02(木) 14:09:23
確かに初期化はしたほうがいいな、うん
683675:2006/02/02(木) 14:09:41
#include<stdio.h>
void main()
{
int a=0,b=0,total,average;
printf("aの数値を指定してください%d\n",a);
scanf("%d",&a);
printf("bの数値を指定してください%d\n",b);
scanf("%d",&b);

total = a+b,average = (a+b)/2;

printf("合計=%d\n",total);
printf("平均=%d\n",average);
}
684デフォルトの名無しさん:2006/02/02(木) 14:22:15
[1] 授業単元:プログラミング
[2] 問題文:
 30人の生徒の身長データを読み込み, 5cm刻みの頻度数と,
 それを棒グラフ(横向き)に表したものを表示するプログラムを作りなさい。
 ( 例 )
150..155 6 :******
155..160 13 :*************
160..165 11 :***********

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2006年2月8日まで

 どうぞお手柔らかにお願いします
685Kenji ◆3yMYCQiOMU :2006/02/02(木) 14:24:30
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://www.tatunet.ddo.jp/koneko70/uponesan/img/683.pdf
[3] 環境
 [3.1] OS: FreeBSD
 [3.2] コンパイラ名とバージョン: gcc-2.95.3
 [3.3] 言語: C
[4] 期限: [2006年02月10日00:00まで]
[5] その他の制限: ほぼ習っているので特にありません。
686デフォルトの名無しさん:2006/02/02(木) 14:39:39
論理的に意味のある値で初期化するのは大切だが、
根拠の無い適当な値で初期化するのは強く反対だなぁ

とりあえず0で初期化とかその値に根拠があるのか? ふざけてるのか? と思ってしまう。
687デフォルトの名無しさん:2006/02/02(木) 14:43:15
>>684
データはどうやって読み込み方は?
プログラム中で身長が書かれたファイルを読み込むの?それともリダイレクションでいいの?
688687:2006/02/02(木) 14:44:07
日本語がおかしかった…スマソ
689684:2006/02/02(木) 14:46:27
fgets(), sscanf();
で、データを自分で入力して読み込むと思います。
690デフォルトの名無しさん:2006/02/02(木) 14:55:27
>>686
禿同 とりあえず 0 とかやってると、いつか 1 で初期化しないといけないところで間違えるよ
691Kenji ◆3yMYCQiOMU :2006/02/02(木) 15:03:01
【質問テンプレ】
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): この中にPDFが二つあります。http://www.ebiman.com/cgi-bin/cboard/filexs/Machi.lzh
[3] 環境
 [3.1] OS: FreeBSD
 [3.2] コンパイラ名とバージョン: gcc-2.95.3
 [3.3] 言語: C
[4] 期限: [2006年02月10日00:00まで]
[5] その他の制限: ほぼ習っているので特にありません。
692デフォルトの名無しさん:2006/02/02(木) 15:14:44
>>691
自分でやれよ、カス!
693デフォルトの名無しさん:2006/02/02(木) 15:18:04
>>691
岡山大学 工学部通信ネットワーク工学科2年 乙
694デフォルトの名無しさん:2006/02/02(木) 15:22:36
>ほぼ習っているので特にありません
だったら自分でやれと言いたい
あと不正コピーは削除しとけよ
695デフォルトの名無しさん:2006/02/02(木) 15:27:59
こんな反応冷たいってことは難しいのか面倒なのかのどっちかか
見るのやめようっと
696デフォルトの名無しさん:2006/02/02(木) 15:29:19
>>685 AMとかFMでサンプルが出されているはずなので、それをup
>>619 待ち行列はググればソース付きのレポートがある。ハフマン法はソースがある。
697デフォルトの名無しさん:2006/02/02(木) 15:30:45
またまたお願いします。
色んな数値を入れてみたのですが、elseの場合の文章が表示されません・・・
何故でしょうか?

#include<stdio.h>
void main()
{
int ten;
printf("テストは何点でしたか?(0から100まで)\n");
scanf("%d",ten);
if("ten >=99 && ten <= 100")
{
printf("よく頑張った!感動した!\n");
}
else
{
printf("もっと勉強して下さい!\n");
}
}
698デフォルトの名無しさん:2006/02/02(木) 15:33:39
void main()
 工エエェェ(´д`)ェェエエ工工
scanf("%d",ten); 
( ゚Д゚)......
if("ten >=99 && ten <= 100") 
......(゚Д゚)!!
699デフォルトの名無しさん:2006/02/02(木) 15:33:45
>>697
ifの中身が常に真だから
つか何で""で囲んでるんだお前
700697:2006/02/02(木) 15:35:27
自分で気づいたとこだけ修正しました。
scanfのとこで&追加。そして99のとこでスペース追加
けどまだ無理ですorz
701デフォルトの名無しさん:2006/02/02(木) 15:35:44
>>697
てかscanfの使い方もおかしいなw
702デフォルトの名無しさん:2006/02/02(木) 15:36:32
>>700
だからなんでifの中身文字列にしてんだっつーの
703デフォルトの名無しさん:2006/02/02(木) 15:36:49
宿題じゃないなら入門書かサイト読み直せ
704デフォルトの名無しさん:2006/02/02(木) 15:37:46
てかこのレベルはこのスレで聞くことじゃないだろwww
705697:2006/02/02(木) 15:38:21
>>699
ありがとうございます!
""つけてしまいました。これはずしたらいけました。
>>698
void main()って何か変ですか?
706デフォルトの名無しさん:2006/02/02(木) 15:39:19
>>705
別に構わないけど一応mainの戻り値はintと決められてる
707697:2006/02/02(木) 15:41:48
>>706
参考になります。ありがとうございます。
宿題というか、学校の授業乗り遅れたので今ひっしこいて遅れとりもどしてます・・・
708デフォルトの名無しさん:2006/02/02(木) 15:44:00
ANSI規格に書いてあるのは
int main(void) {/*...*/}
int main(int argc, char *argv[]) {/* .... */}
の2つだけなんで、他の書き方してたら、「やばいかなぁ?」という印象をもつ。
main() {/* ... */}
void main() {/* ... */}
int main() {/* ... */}
int main(int ac, char **av) {/* ... */}
最後のは規格と同じ意味だけど、わざわざ表現変えてるから我の強いプログラムだろうなって。
709デフォルトの名無しさん:2006/02/02(木) 15:45:30
         「このスレは楽しいな」
  ヽ/⌒ヘ~
  ., 't,_,ノ丶   ,  - ─-  △  、
 /  !   '` 巛(リノ))ヽ\ヽ▽ ヽ    えへへへへ
        ,/ ● L_/    'i, i     えへ
       / ″  l ,/  ●   i川       えへへへへ
      ノ从     し ii  ″ 丿从   〜 △v
      |`:、\      ii  __,/__ノi       厦
      'i、 ̄~))    ij((____,ノ
        ^- i' '      ヽ| `i      ∧∧∧
         i_____ 'l_|、    (    )
        ノ          ,ゝ       ~ T ~
       ~^''!, ̄ T T ̄ ,!_       <ヽ | //
          \ l, ~''‐--::,,⊃ ) )   \| ノ
710デフォルトの名無しさん:2006/02/02(木) 15:45:48
なんでmainて0個OR2個の引数なんだろう
1個の引数あってもいいじゃない
711デフォルトの名無しさん:2006/02/02(木) 15:46:48
3個ってOSもあるぞ。いちおう。
712デフォルトの名無しさん:2006/02/02(木) 15:47:01
0〜100までって文字を出力して入力を促しているから
ifの条件は99点以上ってだけでもいいような希ガス
713デフォルトの名無しさん:2006/02/02(木) 15:48:13
3個〜〜〜いくらでもOKとかないかな
いくらでもあったところで使い道思いつかないんだけど
つかargcの方って何が入るの?
使った記憶がないんだけど
714デフォルトの名無しさん:2006/02/02(木) 15:51:11
>>691
岡山大学って難しいことやってるんだな…
同じ2年&&同じ旧国立大学なのに、やってることがこんなに違うとは
なんか自分は将来社会の役に立つことができるのかどうか不安になってきてしまった…
715デフォルトの名無しさん:2006/02/02(木) 15:52:55
連投スマソ
>>713
argc には引数の数+1の数か代入されてますYO!
716デフォルトの名無しさん:2006/02/02(木) 15:55:52
>>715
使い道わからんYO
使わないと警告でるけど別に問題ないよNE?
717デフォルトの名無しさん:2006/02/02(木) 15:56:40
CUI環境を考えろ
718デフォルトの名無しさん:2006/02/02(木) 15:57:44
>>716
別にargvを解析しないプログラム(またはargv[argc]==NULLを利用する)なら
使わなくても良いよ。
719デフォルトの名無しさん:2006/02/02(木) 15:58:03
有名どこのサンプル
#include <stdio.h>
int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("argv[%d] '%s'\n", i, argv[i]); return 0;}
720デフォルトの名無しさん:2006/02/02(木) 16:01:13
argcを使わない版
#include <stdio.h> 
int main(int argc, char *argv[]) { int i; for (i = 0;argv[i]; i++) printf("argv[%d] '%s'\n", i, argv[i]); return 0;} 
721デフォルトの名無しさん:2006/02/02(木) 16:08:09
argcが無いとかなり面倒な例
#include<iostream>
#include<numeric>
int main(int argc, char *argv[]) { std::cout << accumulate(argv,argv+argc,std::string());}
722デフォルトの名無しさん:2006/02/02(木) 16:38:08
Thanks ☆☆** v( ̄ー ̄)v**☆☆ Thanks
723デフォルトの名無しさん:2006/02/02(木) 17:15:43
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):次のJava文をC言語(#include<stdio.h>から始まるプログラムに)書き直してください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1598.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2月3日8時まででお願いします。
[5] その他の制限: なし
724デフォルトの名無しさん:2006/02/02(木) 17:18:29
50%スレ違い
725デフォルトの名無しさん:2006/02/02(木) 17:46:16
>>724
ワラタ
726デフォルトの名無しさん:2006/02/02(木) 18:37:14
727デフォルトの名無しさん:2006/02/02(木) 19:01:52
[1] 授業単元:プログラミング演習3
[2] 問題文(含コード&リンク):ナップサック問題
荷物の個数がn=5、それぞれの荷物の重さがw1=10、w2=5、w3=15、w4=7、w5=3、
ナップサックの限界容量がW=22である場合、ちょうど荷物の合計がW=22と
等しくなる荷物の組合せは何通りあるかを出力するプログラムをかけ。
このとき、枝がりを必ず行う事。更に、W=22となる荷物の組合せの
内訳も表示するようにせよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語:C
[4] 期限: 明日までです。(3日)
[5] その他の制限: とくにありませんが、再帰関数をつかってもらいたいです。
挑戦していたのですが、関数内でどこにreturnするのか
混乱してしまいました。どうぞよろしくお願いします。
728デフォルトの名無しさん:2006/02/02(木) 19:11:00
/* 枝狩り済み再帰関数使用 */
#include <stdio.h>
int f(int n) {if (n) return f(n-1); return 0;}
int main(void) {f(10);printf("2通り。(w1, w2, w4)\n(w3, w4)\n");retrun 0;}
729デフォルトの名無しさん:2006/02/02(木) 19:15:46
>>727
#include<stdio.h>
void search(const int w[],int i,int length,int use,int W){
    if(W == 0){
        for(i=0;i<length;++i)
            if(use>>i&1)printf("%d ",w[i]);
        printf("\n");
        return;
    }else if(W  < 0 || i==length)return;
    search(w,i+1,length,use,W);
    search(w,i+1,length,use|1<<i,W-w[i]);
}
int main(){
    const int w[]={10,5,15,7,3};
    search(w,0,5,0,22);
}
730729:2006/02/02(木) 19:23:34
ミスった。組み合わせの数も表示するのね。

#include<stdio.h>
int search(const int w[],int i,int length,int use[],int W,int c){
    if(W == 0){
        for(i=0;i<length;++i)
            if(use[i])printf("%d ",w[i]);
        printf("\n");
        return c+1;
    }else if(W  < 0 || i==length)return c;
    use[i]=1;
    c = search(w,i+1,length,use,W-w[i],c);
    use[i]=0;
    return search(w,i+1,length,use,W,c);
}
int main(){
    const int w[]={10,5,15,7,3};
    int use[sizeof(w)/sizeof(w[0])]={0};
    printf("組み合わせは%d通り\n",search(w,0,5,use,22,0));
}
731デフォルトの名無しさん:2006/02/02(木) 19:50:47
[1] 授業単元:プログラミングB
[2] 問題文:
 30人の生徒の身長データを読み込み, 5cm刻みの頻度数と,
 それを棒グラフ(横向き)に表したものを表示するプログラムを作りなさい。
 ( 実行例 )
150..155 6 :******
155..160 13 :*************
160..165 11 :***********

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2006年2月8日まで

 どうぞお手柔らかにお願いします
732デフォルトの名無しさん:2006/02/02(木) 19:56:01
>>731=>>684
まだ六時間も経ってないだろ。期限まで時間はあるんだからのんびり待て。
733デフォルトの名無しさん:2006/02/02(木) 19:57:27
アンカーすら出来ずに同じことを二度も書く低脳などスルー
734デフォルトの名無しさん:2006/02/02(木) 20:06:10
簡単な課題なのに答えてもらえないのには、何か理由があるではないかと考えてみたらどうかね
735デフォルトの名無しさん:2006/02/02(木) 20:10:29
>>730 参考になりました!!ありがとうございますm(__)m
736デフォルトの名無しさん:2006/02/02(木) 20:13:39
>>732-734
クズの鏡だなwww
737デフォルトの名無しさん:2006/02/02(木) 20:16:40
>>731 コードの再利用っと
#include<stdio.h>
#define a_array_length 30
int main(){ 
int temporarily_variable_for_comparison,a[a_array_length],maximum_value,minimum_value,a_array_loop_index,score_loop_index,score;
scanf("%d",&temporarily_variable_for_comparison);
maximum_value = minimum_value = a[0] = temporarily_variable_for_comparison / 5;
for(a_array_loop_index = 1;a_array_loop_index < a_array_length ; ++a_array_loop_index){ 
scanf("%d",&temporarily_variable_for_comparison);
temporarily_variable_for_comparison /= 5;
if(temporarily_variable_for_comparison > maximum_value)
maximum_value = temporarily_variable_for_comparison; 
else if(temporarily_variable_for_comparison < minimum_value) 
minimum_value = temporarily_variable_for_comparison;
a[a_array_loop_index] = temporarily_variable_for_comparison;
}
for(score_loop_index = minimum_value;score_loop_index <= maximum_value;++score_loop_index){
for(score = a_array_loop_index = 0;a_array_loop_index < a_array_length ; ++a_array_loop_index)
if(a[a_array_loop_index]==score_loop_index) ++ score;
if(score == 0)continue;
printf("%d..%d %d :",score_loop_index*5,score_loop_index*5+5,score);
for(;score != 0;--score)
printf("*");
printf("\n");
}
}
738デフォルトの名無しさん:2006/02/02(木) 20:24:24
>>737
何?そのうざいコードw
739デフォルトの名無しさん:2006/02/02(木) 20:25:38
てかお前らカスなんて相手にしてないからスルーしてくれないか?www
740デフォルトの名無しさん:2006/02/02(木) 20:48:53
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
ライフゲームのプログラムをつくりなさい
ライフゲームは、菌などの増殖のシュミレーションに用いられるもので、縦横にしきられた空間(セル)
に生命が発生するか、消滅するかを一定のルールに従い判定し、変化させていくものである。
ルールは、ある時刻において空いている場所に隣接する3つのセルに生物が存在したら、そのセルにも
生物を発生させる。逆に生物が存在したセルでは生物は、生物が存在するセルと1以下および4以上隣接する場合、そのセルでは生物は消滅させる。
これを時間の経過と共に次々と繰り返す。
生物が存在するセルの初期位置をいろいろ工夫して、できるだけ変化が長く続くものにしなさい。
[3] 環境
 [3.1] OS Windows
 [3.2] lcc win
 [3.3] 言語: C
[4] 期限: 今週中


よろしくおねがいします。
741デフォルトの名無しさん:2006/02/02(木) 20:49:06
>>737
ちょwwwwwおまwwwwwwww
742デフォルトの名無しさん:2006/02/02(木) 20:57:50
>>740

初期配置はこれがお勧め。

■■
□■■
□■
743デフォルトの名無しさん:2006/02/02(木) 20:58:08
>>741
むしゃくしゃして書いた。
今は満足している。
744Kenji ◆3yMYCQiOMU :2006/02/02(木) 21:02:04
>>685ですが、ちょっと調べたらできました。気にならないかもしれないけど、一応UPだけしときます。
http://www.cypress.ne.jp/yasuke/OFDM.txt
できれば>>691やってくれないっすかね。難しくて・・・orz
745デフォルトの名無しさん:2006/02/02(木) 21:04:24
彼女やバイクで舞い上がってるのも分かるが、自力でやることも必要だと思うぞ。
746デフォルトの名無しさん:2006/02/02(木) 21:10:11
>>744
面倒なだけで、自分でできると思うぞ。要求されているのは
静的ハフマンらしいが、出てくる回数数えて、木を繋ぎかえるだけだし。
待ち行列は手順が書いてあるから、それをモンテカルロみたいに
やれってことなんじゃ?
ついでに書くと、単純なフーリエ変換はFT。FFTは高速だから
ちょっとアルゴリズムに工夫がある。
747デフォルトの名無しさん:2006/02/02(木) 21:18:27
アルゴリズム辞典にハフマンはあった気がする。
748デフォルトの名無しさん:2006/02/02(木) 21:24:20
749デフォルトの名無しさん:2006/02/02(木) 21:41:31
>>740
やってみたんだが何か変だ
もしかして隣接ってななめ含む?
750デフォルトの名無しさん:2006/02/02(木) 21:42:40
>>749
普通のライフゲームでは含む。
751デフォルトの名無しさん:2006/02/02(木) 21:47:07
>>750
マジか
752デフォルトの名無しさん:2006/02/02(木) 22:01:19
>>740
初期配置適当
もしかしてコンソールまずかった?
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#define MAX 10
void show(int ban[MAX][MAX]){
int i,k;
char str[2][3]={"□","■"};
for(i=0;i<MAX;i++){
for(k=0;k<MAX;k++)
printf("%s",str[ban[i][k]]);
puts("");
}
}
753デフォルトの名無しさん:2006/02/02(木) 22:01:50
void live(int ban[MAX][MAX]){
int mona[MAX+2][MAX+2],i,k,a,b,cnt;
for(i=0;i<MAX+2;i++)
for(k=0;k<MAX+2;k++)
mona[i][k] = -1;
for(i=1;i<MAX+1;i++)
for(k=1;k<MAX+1;k++)
mona[i][k] = ban[i-1][k-1];
for(i=1;i<MAX+1;i++)
for(k=1;k<MAX+1;k++){
cnt = 0;
for(a=-1;a<2;a++)
for(b=-1;b<2;b++)
if(mona[i+a][k+b]==1&&(a!=0||b!=0))++cnt;
if(mona[i][k]==0&&cnt>=3)
ban[i-1][k-1] = 1;
else if(mona[i][k]==1&&(cnt<=1||cnt>=4))
ban[i-1][k-1] = 0;
}
}
int main(void){
int ban[MAX][MAX]={{0}};
ban[3][3] = 1;ban[4][3] = 1;
ban[4][4] = 1;ban[4][5] = 1;ban[3][2] = 1;
while(kbhit()==0){
show(ban);
live(ban);
Sleep(200);
system("CLS");
}
return 0;
}
754デフォルトの名無しさん:2006/02/02(木) 22:29:11
>>753
誕生の条件はcnt >= 3じゃなくてcnt == 3

void live(int ban[MAX][MAX]){
    int mona[MAX+2][MAX+2]={{0}},i,k,a,b,cnt;
    for(i=0;i<MAX;i++)
    for(k=0;k<MAX;k++)
        mona[i+1][k+1] = ban[i][k];
    for(i=1;i<MAX+1;i++)
        for(k=1;k<MAX+1;k++){
            cnt = 0;
            for(a=-1;a<2;a++)
            for(b=-1;b<2;b++)
                cnt += mona[i+a][k+b];
            ban[i-1][k-1] = cnt==3 || mona[i][k] && cnt==4;
        }
}
755デフォルトの名無しさん:2006/02/02(木) 22:41:48
>>754
あらま間違えた

ban[i-1][k-1] = cnt==3 || mona[i][k] && cnt==4;
こうゆう文初めて見たんですけどこれってどんな意味ですか?
756デフォルトの名無しさん:2006/02/02(木) 22:46:51
>>755
単純に書くとこんな感じ。
条件式は真なら1、偽なら0なのを利用。

誕生とか死亡とかは無視して、次にそこにセルが存在するかしないかだけを考えて書いた。

if(cnt==3 || (mona[i][k] && cnt==4 ))
    ban[i-1][k-1] = 1;
else
    ban[i-1][k-1] = 0;
757デフォルトの名無しさん:2006/02/02(木) 22:50:25
>>755
「cntが3に等しい或いは『mona[i][k]が0でなくcntが4に等しい』」ならば1、そうでなければ0をban[i-1][k-1]に代入。
758756:2006/02/02(木) 22:54:20
本当はもっと分かりやすい、こういう式だったんだけど、
適当に式を展開して単純な形に変形してたりする
(mona[i][k]==0 && cnt==3) || (mona[i][k]==1 && (cnt==3||cnt==4) );
759デフォルトの名無しさん:2006/02/02(木) 22:56:22
>>756
式の意味がわかったけど何でそれでうまく行くのか理解するのに時間かかったw
なるほど偽は0だと知ってたけど真も決まった値なんですね
760デフォルトの名無しさん:2006/02/02(木) 23:02:11
[1] 授業単元:プログラミング演習
[2] 問題文:
 正の整数 1〜3999 のいずれかを入力して、ローマ数字による表記で出力するプログラムを作成せよ。
ただし、 I(1) V(5) X(10) L(50) C (100) D(500) M(1000) を使って表すものとする。
( 例 )
45...XLV
3999...MMMCMXCIX

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2006年2月6日まで

 何とぞおてやわからにお願いします(3999まで表示できなくてもよいので・・・)
761デフォルトの名無しさん:2006/02/02(木) 23:05:12
>>759
A>B 、A==B、 !A、  A&&B 、A||B
などの論理式では真が1で偽が0,
他の演算の場合は違うからその点だけ注意な
762デフォルトの名無しさん:2006/02/02(木) 23:09:11
>>761
了解です
763デフォルトの名無しさん:2006/02/02(木) 23:16:46
>>760 IV(4)やIX(9)とかはいらないんだよね?
#include <stdio.h>
void roman_number(int *dec_n, int n, char c) {
while(*dec_n >= n) {
*dec_n -= n;
printf("%c", c);
}
}
int main(int argc, char *argv[])
{
int num;
printf("Input Number(1-3999)?");
scanf("%d", &num);
if(num < 1 || num > 3999) {
printf("Error!\n");
exit(1);
}
roman_number(&num, 1000, 'M');
roman_number(&num, 500, 'D');
roman_number(&num, 100, 'C');
roman_number(&num, 50, 'L');
roman_number(&num, 10, 'X');
roman_number(&num, 5, 'V');
roman_number(&num, 1, 'I');
printf("\n");
return 0;
}

764デフォルトの名無しさん:2006/02/02(木) 23:20:48
>>763
例の45が正しく動いてないが
ついでにそのmainの引数は何者だ
765デフォルトの名無しさん:2006/02/02(木) 23:22:16
763です
しまった、よく見たらやっぱりIVやIX表現がいるんじゃないか。
やり直しだ。
766760:2006/02/02(木) 23:23:04
>>763
え!
2...II
4...IV
みたいにはしてほしいんですが・・・

あと、実行するとエラーが出ちゃうんですけど・・・
767デフォルトの名無しさん:2006/02/02(木) 23:23:17
>>760
良い子も悪い子も真似しちゃ駄目w
#include<stdio.h>
void printR_(int n,char*a,char*b){
    if(!n)return;
    printR_(n/10,a+1,b+1);
    switch(n%10){
        case 0:break;
        case 3:putchar(*a);
        case 2:putchar(*a);
        case 1:putchar(*a);break;
        case 4:putchar(*a);
        case 5:putchar(*b);break;
        case 6:putchar(*b);putchar(*a);break;
        case 7:putchar(*b);putchar(*a);putchar(*a);break;
        case 8:putchar(*b);putchar(*a);putchar(*a);putchar(*a);break;
        case 9:putchar(*a);putchar(a[1]);break;
    }
}
void printR(int n){printR_(n,"IXCM","VLD");}
int main(void){
    int i;
    for(i=1;i<4000;++i){
        printf("%4d: ",i);
        printR(i);
        printf("\n");
    }
    return 0;
}
768760:2006/02/02(木) 23:25:28
>>767
いや、あの〜 人が入力した数字をローマ数字に変えて出力するんで、
勝手に全部出力されても困りますです・・・
769767:2006/02/02(木) 23:29:01
>>768
( ´゚д゚`)えーーー
main関数をこれに置き換えてちょ。

int main(void){
    int n;
    printf("Input number: ");scanf("%d",&n);
    printR(n);printf("\n");
}
770デフォルトの名無しさん:2006/02/02(木) 23:30:19
>>767
え?なんでまねしちゃダメなん?
771デフォルトの名無しさん:2006/02/02(木) 23:31:46
>>767
ってwwwちょwwwwおまwwwwどんなswichの使い方やねんwwwwww
772760:2006/02/02(木) 23:33:12
>>767
でも、すごいですね・・・ちょうどswitch文習ったとこですw
私出てないので分からないんですが
773デフォルトの名無しさん:2006/02/02(木) 23:33:25
半分ネタ解答だなww
774デフォルトの名無しさん:2006/02/02(木) 23:34:16
>>772
待て待てwwwそれ出したら教授にぶっ飛ばされるぞwwwwww
775デフォルトの名無しさん:2006/02/02(木) 23:34:51
簡単で馬鹿らしい問題はgoto文使いまくりで回答しようと思っても
お前らがswitchやらforやらwhileなぞ使う所為で先に答え書かれてしまうわ
776デフォルトの名無しさん:2006/02/02(木) 23:36:22
>>775
お前マジ頭いいな
俺もこれから見習うわ
777760:2006/02/02(木) 23:36:23
>>774
うはwwwww

switch(){
case
}

を使ってるんで、完璧じゃん と思ったのに・・・
778デフォルトの名無しさん:2006/02/02(木) 23:38:49
6日まででしょ?
まだまだ余裕だ〜ね
779760:2006/02/02(木) 23:39:31
あの〜、>>774をスマートにできるのであればお願いします!
十分短くていいと思ってしまう私・・・
780デフォルトの名無しさん:2006/02/02(木) 23:40:47
>>767 と >>769 ですね・・・
781767:2006/02/02(木) 23:41:25
仕方が無い。
上のswitch版をこれに置き換えればたぶん大丈夫。

void printR_(int n,char*a,char*b){
    if(n == 0)return;
    printR_(n/10,a+1,b+1);
    n %= 10;
    if(n > 4){
        if(n==9)b = a + 1;
        else putchar(*b);
        n -= 5;
    }
    if(n==4){
        putchar(*a);
        putchar(*b);
    }else{
        while(n-- != 0)putchar(*a);
    }
}
782デフォルトの名無しさん:2006/02/02(木) 23:42:23
てかこうゆうswitch文の使い方ってアリ?
783デフォルトの名無しさん:2006/02/02(木) 23:42:49
久しぶりでWindowsのプログラム組んだ。
ライフゲーム組むのに2時間半かかったorz バグありっぽいし。
784デフォルトの名無しさん:2006/02/02(木) 23:43:50
760の問題がわからんのだけど

45の場合 X(10)L(50)V(5) ???
まぁローマ英数字さえも良くワカランのだけど
785デフォルトの名無しさん:2006/02/02(木) 23:45:14
>>783
786デフォルトの名無しさん:2006/02/02(木) 23:45:28
>>783
GUI?うp汁
787デフォルトの名無しさん:2006/02/02(木) 23:46:14
>>781
ホントすごいですね!!
すぐに違った感じの答えも分かるなんて・・・本当にありがとうございます!

>>784
X(10) XX(20) XXX(30) XL(40) って感じに考えていただければいいと思います。
788デフォルトの名無しさん:2006/02/02(木) 23:46:18
Iは1、IIは2、IIIは3ということを考えると、Iをその数、出力すりゃいいんだろう。
789デフォルトの名無しさん:2006/02/02(木) 23:47:49
>>787
今wiki見てきたけどXLってL-Xって意味なのね
790デフォルトの名無しさん:2006/02/02(木) 23:48:37
>>788
お前、それだと2なら1を横に2個並べればいいんだろって考え方だぞwww
791デフォルトの名無しさん:2006/02/02(木) 23:53:24
>>782
普通そんなことやったら殴られる。
792デフォルトの名無しさん:2006/02/02(木) 23:57:03
どうして?
793デフォルトの名無しさん:2006/02/02(木) 23:57:06
その桁の1を表す文字をa,5を表す文字をb,一桁上の数を表すものをcとすると、
0.表示なし
1.a
2.aa
3.aaa
4.ab
5.b
6.ba
7.baa
8.baaa
9.ac
ってことだろ。
794デフォルトの名無しさん:2006/02/02(木) 23:57:34
>>791
お前はプロシージャを否定した
795デフォルトの名無しさん:2006/02/02(木) 23:58:21
>>760
#include <stdio.h>
#define RO(i,v,x) "",#i,#i#i,#i#i#i,#i#v,#v,#v#i,#v#i#i,#v#i#i#i,#i#x
const char * conv[][10] = {{RO(I,V,X)},{RO(X,L,C)},{RO(C,D,M)},{RO(M,M,M)}};
void internal_print(int val, int dim)
{ if (val > 0) internal_print(val / 10, dim + 1),printf(conv[dim][val % 10]); }
void print(int val) { internal_print(val, 0), puts(""); }
int main(void) { int i; while (scanf("%d", &i) == 1) print(i); return 0; }

>>776の方がうまいな
796デフォルトの名無しさん:2006/02/03(金) 00:00:44
ライフゲーム。
ダウンロードしてがっかりしてください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1599.zip
797デフォルトの名無しさん:2006/02/03(金) 00:02:01
MFCアプリかお
しかし見てて楽しい
798デフォルトの名無しさん:2006/02/03(金) 00:03:40
>>795
どうもありです。
すんごいスマートなできあがりですねぇ!
799デフォルトの名無しさん:2006/02/03(金) 00:05:06
[1] 授業単元:基礎プログラミング
[2] 問題文:
 30人の生徒の身長データを読み込み, 5cm刻みの頻度数と,
 それを棒グラフ(横向き)に表したものを表示するプログラムを作りなさい。
 ( 例 )
150..155  6 :******
155..160 13 :*************
160..165 11 :***********

[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2006年2月4日まで

 ヒントだけでもいいのでお願いしますです
800デフォルトの名無しさん:2006/02/03(金) 00:06:20
>>796
(,,゚Д゚)∩先生くそ重いです
801デフォルトの名無しさん:2006/02/03(金) 00:06:36
まずその生徒の身長データが格納されているファイル乃至バッファを提供しなさい
802デフォルトの名無しさん:2006/02/03(金) 00:08:14
>>801
別に3人や5人でもいいのでお願いします・・・
803デフォルトの名無しさん:2006/02/03(金) 00:09:05
おまえ、これで何度目だ
804デフォルトの名無しさん:2006/02/03(金) 00:10:18
だからー
身長のデータはどうやったら得るのよ
プログラムの最初に30人分乃至適当な人数の身長データを入力させるのか
それとも特定ファイルから身長の値を読み込むのか。
もし後者ならそのファイルをうpするか、どの様に値がファイルに記録されてるのか教えろって
805デフォルトの名無しさん:2006/02/03(金) 00:10:59
>>799
それって0センチ〜3メートルとかまで対応しなきゃダメ〜?
806デフォルトの名無しさん:2006/02/03(金) 00:11:52
>>804
適当に自分で入力します
807デフォルトの名無しさん:2006/02/03(金) 00:12:54
>>805
いや〜、そこまではしなくてもいいと思います
808デフォルトの名無しさん:2006/02/03(金) 00:13:18
#include <stdio.h>
int main(void) {
printf("150..155  6 :****** \n");
printf("155..160 13 :************* \n");
printf("160..165 11 :*********** \n");
return 0;
}
実行は./a.out <datafile
データファイルには30人分のデータを入れておくこと。

>800 うん。重い。正直、イカンと思う。気が向いたら、高速化してみる。
(メモリコピーじゃなくて、描画がネックっぽい)
809デフォルトの名無しさん:2006/02/03(金) 00:13:31
適当だと?ふざけるな
810デフォルトの名無しさん:2006/02/03(金) 00:15:08
>>806
>>737じゃ駄目なん?
811デフォルトの名無しさん:2006/02/03(金) 00:16:25
>>809
何が聞きたいのか分からないんですが・・・
身長を入力するのは、 fgets(), sscanf(); などを使って
自分で適当に入力できるようにすればいいだけなんですけど・・・
812デフォルトの名無しさん:2006/02/03(金) 00:19:49
#include <stdio.h>
int main(void)
{
int number[60] = {0}, i;
while(!eof(stdin)){int height; scanf("%d", &height); number[(height-1)/5]++; }
for(i=0;i<60;i++){if(number){printf("%d...%d%3d",i*5,i*5+5,number[i]);
for(;number[i];number[i]--)putchar('*');puts("");}}
return 0;
}
813デフォルトの名無しさん:2006/02/03(金) 00:20:28
>>811
「適当」の意味がわからん。たとえば

160cm
1.8m
150inch
7744寸


みたいな入力されたら困る。
814デフォルトの名無しさん:2006/02/03(金) 00:22:16
>>808
はいww
#include<stdio.h>
int main(void){
double a[30];
int i,k,flag[256]={0};
for(i=0;i<5;i++){
scanf("%lf",&a[i]);
++flag[(int)a[i]/5];
}
for(i=0;i<256;i++){
printf("%d..%d ",i*5,i*5+5);
for(k=0;k<flag[i];k++)
putchar('*');
puts("");
}
return 0;
}
815814:2006/02/03(金) 00:23:04
forの中身i<30にしといて
816812:2006/02/03(金) 00:24:03
うは、人数30人を無視した上に身長全員整数値にしちまった。
817デフォルトの名無しさん:2006/02/03(金) 00:26:35
>>812
身長は整数値でもいいと思いますが、while()内の eof って何ですか?・・
818デフォルトの名無しさん:2006/02/03(金) 00:27:49
>>812>>814の脳内が似てるwwwww
どっちもネタっぽいけどwww
819デフォルトの名無しさん:2006/02/03(金) 00:29:34
なんか久々に楽しいなこのスレ
820デフォルトの名無しさん:2006/02/03(金) 00:33:26
出力間違ってた
#include<stdio.h>
int main(void){
double a[30];
int i,k,flag[256]={0};
for(i=0;i<30;i++){
scanf("%lf",&a[i]);
++flag[(int)a[i]/5];
}
for(i=0;i<256;i++){
printf("%d..%d %d ",i*5,i*5+5,flag[i]);
for(k=0;k<flag[i];k++)
putchar('*');
puts("");
}
return 0;
}
821デフォルトの名無しさん:2006/02/03(金) 00:33:32
End Of Lifeだった気がする。
822デフォルトの名無しさん:2006/02/03(金) 00:35:26
END OF FINALFANTASY
823デフォルトの名無しさん:2006/02/03(金) 00:35:47
Each Of File
824デフォルトの名無しさん:2006/02/03(金) 00:36:13
>>813
バカはさっさと消えろ!
825デフォルトの名無しさん:2006/02/03(金) 00:38:26
>>813
うむそこは重要なところだな
826812:2006/02/03(金) 00:46:00
>>817
失礼、失礼。while(!feof(stdin))の間違いだった。
827デフォルトの名無しさん:2006/02/03(金) 00:50:00
>>826
う〜ん、そこを変えても無理みたいです・・・
828デフォルトの名無しさん:2006/02/03(金) 00:51:05
>>827
>>820使えばいいじゃん
やってることはほとんど同じだぞ
829デフォルトの名無しさん:2006/02/03(金) 00:55:25
>>820
すみません、アンカーが違う人だったので別のプログラムだと思ってました・・・
どうもありです。でも、出力は全部じゃなくて入力した値付近のだけをしてほしいんですが・・・
(0のところは出力しない感じで・・・)
830デフォルトの名無しさん:2006/02/03(金) 00:56:58
>>673
とりあえず
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1600.txt
もしビット各桁ごとに順番に加算しろという課題だとこれだとダメ。
あと1の補数の桁あふれの処理の仕方にちょっと自信ないです。
831デフォルトの名無しさん:2006/02/03(金) 00:57:58
>>829
ちぇ・・・それじゃ面白くないのにw
#include<stdio.h>
int main(void){
double a[30];
int i,k,flag[256]={0};
for(i=0;i<30;i++){
scanf("%lf",&a[i]);
++flag[(int)a[i]/5];
}
for(i=0;i<256;i++){
if(flag[i]!=0){
printf("%d..%d %d ",i*5,i*5+5,flag[i]);
for(k=0;k<flag[i];k++)
putchar('*');
puts("");
}
}
return 0;
}
832673:2006/02/03(金) 01:04:04
>>830
本当にどうも有難うございます。
説明不足などすみませんでした。
833デフォルトの名無しさん:2006/02/03(金) 01:04:58
反応はや!Σ(゚Д゚;
834デフォルトの名無しさん:2006/02/03(金) 01:22:00
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク):

半径1の球を中心座標(x,y,z)=(0,0,5)半径2の球を中心座標(x,y,z)=(2,0,8)、
大きさ2*2のスクリーンを(0,0,0)、視点を(0,0,-1)に配置し、光源ベクトル(0,-1,0)としたとき、スクリーンに投影される球の輝度地分布図を求めよ。
ただし、表面反射特性はランバートモデルを用いること。

ランバートモデル(完全拡散反射)とは、以下。
c=αn(x)・l

c:輝度値
n:物体の表面法線ベクトル
x:スクリーン上に投影される点に対応する物体の表面座標
l:光源ベクトル
α:物体の表面特性による係数

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: なんでも
 [3.3] 言語: C
[4] 期限: 明日です!!!
[5] その他の制限: 特になし

全然わかりません!明日までで途中でもいいので、皆様の能力をおかりしたいです。
よろしくお願いします。
835デフォルトの名無しさん:2006/02/03(金) 01:24:32
それなんかもうC言語の宿題じゃない・・・(゚Д゚;)
どうゆう出力をしたいのか
それを計算するにはどのような計算手順を踏めばいいのか教えれ
836デフォルトの名無しさん:2006/02/03(金) 01:27:06
輝度地分布図ってなによ。要するにレイトレじゃなくて?
837デフォルトの名無しさん:2006/02/03(金) 01:29:29
それがちょっとわからなくて、今日も色々文献調べたんですがムリだったんですよ。
一応参考になるかなっていうサイトは見つけました。

ttp://nis-lab.is.s.u-tokyo.ac.jp/~nis/junk/lecture/Enshu302_1.html
838デフォルトの名無しさん:2006/02/03(金) 01:31:49
>>796
gccでapiだけでつくったっぽいね。
このサイズってことは、libc使っていないかな。なかなか技師と見たw
839デフォルトの名無しさん:2006/02/03(金) 01:38:09
>>837
>>1にも書いてあるけど数式書かないと俺らわからんよ?
840デフォルトの名無しさん:2006/02/03(金) 01:38:56
>>837
要するにレイトレだね。
ttp://www.not-enough.org/abe/manual/ray-project/c.html
とか参考になると思う。
Winならウィンドウ出してSetPixelでも使えばヨシ。
漏れは卒研でいそ(ry
841デフォルトの名無しさん:2006/02/03(金) 01:40:39
setPixelなんて聞いた瞬間やる気うせるわな
無料でやるのはコンソールが限度
842834:2006/02/03(金) 01:51:39
むずいっすね、頑張ってみます。
ほかにもやることがあって、もし暇な方がいたら少しだけでもやってみてくれないでしょうか?
ほんとすいません。
843デフォルトの名無しさん:2006/02/03(金) 01:53:34
というかスレ違い
APIスレ池
アルゴリズムほしければ数学板池
無理だったらお前の頭が悪い
844834:2006/02/03(金) 02:00:50
まじっすか、Cの宿題なんでここかと思ったんですが・・・
すいませんでした。
845デフォルトの名無しさん:2006/02/03(金) 02:02:25
ここの住人はAPIは相当気が向かないと叩かない
基本的にCで作れるのはコンソールだからコンソールだけ
846デフォルトの名無しさん:2006/02/03(金) 02:10:09
濃淡のみのrawファイル出力したりとかは禁止な
847デフォルトの名無しさん:2006/02/03(金) 02:31:07
>>831
どうもありです!
ソレを求めてました!w
848デフォルトの名無しさん:2006/02/03(金) 02:34:00
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1601.txt
FFTのプログラムなのですが誰か詳細なコメントを付けてくれる方いませんか。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等)
 [3.3] 言語: C
[4] 期限: 2006年2月3日23:59まで
[5] その他の制限: 特に無し。
849デフォルトの名無しさん:2006/02/03(金) 02:35:58
これはCスレじゃなくて数学とかの方面で聞いたほうがいいかと
こっちは数値計算はちょっと・・・
850デフォルトの名無しさん:2006/02/03(金) 02:52:05
プログラムの動きのコメントだけでも結構ですので分かる方いればお願いしますm(_ _)m
851デフォルトの名無しさん:2006/02/03(金) 02:52:52
>>848
確か"numerical recipe"とかに書いてあったんじゃないかな。
(英語でよければ、オンラインで読めたはず)
最終的な式だけ書いてあるから、本を読んだ方が早いよ。
2の倍数の時は、組み合わせで計算の数が減らせるって話だったと
思うけど、詳細は忘れてしまった。
852デフォルトの名無しさん:2006/02/03(金) 03:01:28
ちょっと調べてみたら、2の倍数ではなく、2^nの時だったか。
ttp://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap7/index.htm
簡単にいうと、FTでは複素で計算するときexp(iwt)みたいなのをかけるけど、
この関数には周期性があって、同じ値をかけるところが出てくる。
それをまとめてしまえば、計算の数が減るって話らしい。
853848:2006/02/03(金) 03:08:38
ありがとうございます。そのサイトを読んで考察を付けたいと思います。
854848:2006/02/03(金) 03:22:10
しかしプログラムのコメントの仕方がよく分かりませんので誰か分かる方いればよろしくお願いしますm(_ _)m
855834:2006/02/03(金) 03:27:55
>>840さん
おそらくできたっぽいです、かなり参考になるサイトですね。
助かりました、これでなんとか単位とれそうです。
ありがとうございましたー。
856デフォルトの名無しさん:2006/02/03(金) 03:47:16
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1602.zip
ライフゲーム・・・すまん、やっぱ重い。
857デフォルトの名無しさん:2006/02/03(金) 04:25:00
>>856
眠れん・・・
ライフゲーム、試してみたけど面白いね。前よりも数が増えてるw
タイム(?)もついたみたいだけど、平衡状況になったように見えても
終わらないね。これは、そういうものなのかな?
あと起動するとCPU駆動率100%になるので、どっかでsleep入れた方が
いいのかも。最後に・・・スレ違いスマソ
858デフォルトの名無しさん:2006/02/03(金) 05:21:58
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1603.txt
安定的結婚問題という奴なのですが、穴埋め部分が分かりません。
どなたか教えてください。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: (VC++ 6.0)
 [3.3] 言語: C
[4] 期限: 2006年2月3日23:59まで
[5] その他の制限: 特に無し。


859アゲハ:2006/02/03(金) 10:16:03
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):indata.datファイルを読み込んで得点順に並び替えよ。
<a href=""http://id18.fm-p.jp/gamen/s_scr.php?dir=26&uid=hanon0220&num=1>http://id18.fm-p.jp/gamen/s_scr.php?dir=26&uid=hanon0220&num=1</a>
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc 2.9 VC 6.0等)
 [3.3] 言語:C++
[4] 期限:2006年02月13日21:30まで
[5] その他の制限:基本的なことのみ
860デフォルトの名無しさん:2006/02/03(金) 12:54:52
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):@DNSサーバーの53番ポートにリクエストがあったら
               Aネットワーク内にあるサーバーのログ(負荷状況やCPU使用率など)を集めて
               B一番負荷の軽いサーバーを見つけ出し
               CそのサーバーのIPアドレスを返信する
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] gcc 2.9 VC 6.0など
 [3.3] 言語:C
[4] 期限:2006年2月3日22:00まで
[5] その他の制限:基本的なことのみ
861デフォルトの名無しさん:2006/02/03(金) 12:55:03
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):分数を分子、分母をメンバとする構造体で表現する。
標準入力から分母、分子のデータを受取り、分数を通分した結果を表示するプログラムを作成せよ。
通分するには分子と分母の最大公約数を求める必要がある。
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:2/4
[5] その他の制限: #include は <stdio.h>のみでお願いします。
862デフォルトの名無しさん:2006/02/03(金) 13:08:54
[1] 授業単元:計算機実習
[2] 問題文(含コード&リンク):
main関数でキーボードから入力された2つの整数を引数として
渡された時、最大公約数を返すプログラム
main()
{
   変数の定義とキーボードからの入力
c=gcm(a,b);
   結果の表示
}
int gcm(int x,int y)
{
変数の定義と最大公約数の計算
return z;
}
を完成させて、36,90をキーボードから入力した時に最大公約数18が表示されるかどうか
確認しなさい。
(最初はmain関数だけでプログラムを組み、後で最大公約数の計算部分を
関数かすると作りやすい)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: わからないです。
 [3.3] 言語: C++
[4] 期限: 2006年2月4日
 
よろしくお願いします。
863デフォルトの名無しさん:2006/02/03(金) 13:30:11
この前の分数の四則問題のやつを再利用した
#include<stdio.h>

struct fraction{
int numerator; /*分子*/
int denominator; /*分母*/
} fraction_t;
int Gcd(int, int);
main(){

struct fraction t;
int gcd;

printf("分数の分子を入力してください:");
scanf("%d",&t.numerator);
printf("分母を入力してください:");
scanf("%d",&t.denominator);

gcd = Gcd(t.numerator,t.denominator);

if(t.denominator/gcd == 1) printf("通分した結果は%dです\n",t.numerator/gcd);
else printf("通分した結果は%d/%dです\n",t.numerator/gcd,t.denominator/gcd);
}

int Gcd(int n1, int n2){ /*ユークリッドの互除法で最大公約数を求める*/
if (n2 == 0) return n1;
else return Gcd(n2, n1 % n2);
}
864デフォルトの名無しさん:2006/02/03(金) 13:32:26
あ、>>861宛ね
あと、構造体の後にくっついてるfraction_tは消しておいてください
865デフォルトの名無しさん:2006/02/03(金) 14:58:46
>>858
いや意味わからん日本語わかり辛い
866デフォルトの名無しさん:2006/02/03(金) 21:52:34
せんせー、ライフゲームに熱中しすぎて、時間が無駄に過ぎていきます!
867デフォルトの名無しさん:2006/02/03(金) 21:55:26
コンソールGAME作ってるから宿題にこたえる気なんて起きない
868デフォルトの名無しさん:2006/02/03(金) 22:08:18
>>858
今から2時間でできるかわからんけど、手をつけてみる。
できなかったらごめんね。
869デフォルトの名無しさん:2006/02/03(金) 22:09:01
今ぐぐって気が付いたんだが、シェアウェアのライフゲームって
結構あるんだな
870デフォルトの名無しさん:2006/02/03(金) 22:21:37
>>856
いつからだろう・・・・動きが止まってしまったのは・・・
ちょっと目を放した隙にゲーム終了orz
871デフォルトの名無しさん:2006/02/03(金) 22:56:16
>>868
http://oku.edu.mie-u.ac.jp/~okumura/algo/archive/algo.lzh

にある、marriage.cが参考にならない?
872デフォルトの名無しさん:2006/02/03(金) 23:27:19
スレ違いネタで申し訳ないが、需要があるようなら、初期配置指定可能なライフゲーム上げるけど・・・
873デフォルトの名無しさん:2006/02/03(金) 23:31:21
誰かint[]とその大きさint cntを突っ込んで、周波数成分でてくるよーなライブラリ知らないか?
というよりVBから使えるフリーのFFTライブラリを ('A`)ソースつきで
874デフォルトの名無しさん:2006/02/03(金) 23:31:56
面白そうだなァ俺もちょっとAPI叩いてライフゲーム作ってみよう
875208:2006/02/03(金) 23:34:53
[1] 授業単元: Cプログラム基礎
[2] 問題文(含コード&リンク):
アッカーマン関数A(m,n)
      {n + 1 (m = 0)
A(m,n) ={A(m - 1,1) (n = 0)
      {A(m-1,A(m,n-1)) (m ≠ 0, n ≠ 0)
は原始機能的関数ではない関数としてしられている。アッカーマン関数を定義し、
標準入力から入力された値に対する解を求めるプログラムを作成せよ。

[3] 環境
 [3.1] OS: win
 [3.2] コンパイラ名とバージョン: ボーランド
 [3.3] 言語: C
[4] 期限:2/5
[5] その他の制限: #include は <stdio.h>だけ。
よろしくお願いします。
876868:2006/02/03(金) 23:38:17
>>858
正直、スマンカッタ。間に合わなス
個人的には↓もあわせてもうちょい楽しみます。

>>871
d
大事なもの貰った気がする。
877デフォルトの名無しさん:2006/02/03(金) 23:39:03
>>872 >>874 お待ちしております。
878デフォルトの名無しさん:2006/02/03(金) 23:40:03
>>875

#include <stdio.h>

int A(int n,int m);

int main(){
int m,n;
scanf("m=:",&m);
scanf("n=:",&n);
printf("%d",A(n,m));
return 0;
}

int A(int n,int m){
if(m=0) return n+1;
if(n=0) return A(m-1,1);
return A(m-1,A(m,n-1));
}

きっとこんな感じ・・・ごめん俺VB厨で、コレ手書きだから動くかSH4 ('A`)
879デフォルトの名無しさん:2006/02/03(金) 23:41:16
SH4→SiH4 ('A`)
880デフォルトの名無しさん:2006/02/03(金) 23:50:55
>>858
へ(へ´∀`)へ 流石に残り10分じゃ無理な気がするがちょっと頑張ってみる
881デフォルトの名無しさん:2006/02/03(金) 23:52:27
>875 残念、C++版なら手元にあったんだが。
#include<cstdio>
using namespace std;

template<int M, int N> class A {
 public: static const int n = A<M-1,A<M,N-1>::n>::n;
};

template<int M> class A<M,0> {
 public: static const int n = A<M-1,1>::n;
};

template<int N> class A<0,N> {
 public: static const int n = N+1;
};

int main() {
 printf( "A(3,5)=%d", A<3,5>::n );
}
882sage:2006/02/03(金) 23:58:46
>>871
一番大事なアルゴリズムの部分が理解できました。
考えてくださった皆さん、ありがとうございました!!
883880:2006/02/04(土) 00:00:46
>>882
('A`) 俺、頑張ったけど無理だったよ…
884デフォルトの名無しさん:2006/02/04(土) 00:03:40
>>878
コンパイルが通ってしまうあたり罠だな。
一番の罠はnとmが入れ替わっていることだが。
なるべく気持ちを尊重して書くとこう:

#include <stdio.h>

int A(int m,int n);

int main(){
int m,n;
printf("m=:"); scanf("%d",&m);
printf("n=:"); scanf("%d",&n);
printf("%d",A(n,m));
return 0;
}

int A(int m,int n){
if(m==0) return n+1;
if(n==0) return A(m-1,1);
return A(m-1,A(m,n-1));
}
885デフォルトの名無しさん:2006/02/04(土) 00:04:51
('A`) しまった!!!!!


すまん・・・ちょっとしたミスだ(orz
886デフォルトの名無しさん:2006/02/04(土) 00:06:10
といいつつ、自分もミスった。
printf("%d",A(m,n));
887デフォルトの名無しさん:2006/02/04(土) 00:07:41
('A`) なんか "m"と"n" の順番よりも "n"と"m" の順番の方が正しく思えてくる罠ですた
888875:2006/02/04(土) 01:06:35
助かりました!皆さん有難うございます(-人-
889デフォルトの名無しさん:2006/02/04(土) 01:30:04
>888
明日までにA(4,2)を計算して提出するように。
890デフォルトの名無しさん:2006/02/04(土) 01:46:34
>>889
今まで計算した値をa[][]の配列に入れるようにし、0じゃなかったら
その値を返すようにすれば、A(4,2)程度ならぎりぎり計算できる。
まともに計算したら、多分一週間たっても終わらないのではないかと。

それか ghc でも使うか。
891889:2006/02/04(土) 01:53:27
>890 ま、試しにやってみそ。
892デフォルトの名無しさん:2006/02/04(土) 01:55:23
へ(へ´∀`)へ 頑張ってVB6で展開しようとしている俺への挑戦状と見た
893デフォルトの名無しさん:2006/02/04(土) 01:56:21
↑('A`)飽きた
894デフォルトの名無しさん:2006/02/04(土) 02:20:24
>>890 ackermann は遅延評価しても意味ないから haskell でも変わらんよ
895デフォルトの名無しさん:2006/02/04(土) 02:25:50
>>894
たぶんメモ化を期待してるんだと思われ。
896デフォルトの名無しさん:2006/02/04(土) 02:32:05
VBの案件がこの世から消え失せますように
そんで>>892のようなVB厨がこの世からいなくなりますように
897デフォルトの名無しさん:2006/02/04(土) 03:02:07
Ackermann関数はタワー表記をしないと簡単に表せないからなぁ。
http://www.geocities.co.jp/Technopolis/9946/function.html

A(4,2)って一体何桁になるのやら?
898sage:2006/02/04(土) 04:17:07
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
  1.三角形の三辺を読み込みヘロンの公式を用いて面積を求めよ。
  http://www.asahi-net.or.jp/~jb2y-bk/NaturalSci/math/heron.htm

  2.正六角形の一辺を読み込んで面積を求めよ。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限: 2006年2月4日18:00
899デフォルトの名無しさん:2006/02/04(土) 05:04:19
ttp://www.iba.k.u-tokyo.ac.jp/~iba/C/report3/report3.htm
Lv1とLv2を解いて欲しいです
お願いします
900デフォルトの名無しさん:2006/02/04(土) 06:36:36
幼稚な質問なんですけど、
a=91
s= "は、素数です。"
for i = 2 to (a-1)
if aMod i = 0 Then
s="は、素数ではありません。"
Exit For
End If
Next
MsgBox CStr(a) & s
というVBScriptの言語をC言語に置き換えるという問題を誰か、解いてください!
91の素数を求めるんですが。。
901デフォルトの名無しさん:2006/02/04(土) 06:54:40
#include <stdio.h>

int main(){
  int a=91;
  int i;
  char *s = "は、素数です。";
  
  for(i=2;i<=(a-1);i++){ 
    if(a%i==0){
      s = "は、素数ではありません。" ;
    }
  }

  printf("%d%s\n",a,s);
  return 0;
}
902デフォルトの名無しさん:2006/02/04(土) 08:24:41
903デフォルトの名無しさん:2006/02/04(土) 10:12:07
[1] 授業単元:情報処理基礎
[2] 問題文(含コード&リンク):番号と得点を読み込んで、得点が70点以上なら“合格”、70点未満なら
               “不合格”と、番号、得点と共に出力するプログラムを作れ。(if文を使用すること)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C
[4] 期限:05年2月5日19:00

どうか、よろしくお願いします。
904デフォルトの名無しさん:2006/02/04(土) 10:20:51
>>903
読み込みはキーボードからでいいのかい?
905デフォルトの名無しさん:2006/02/04(土) 10:23:24
>>904
はい
906デフォルトの名無しさん:2006/02/04(土) 10:30:37
>>901

#include <stdio.h>
int main(void)
{
int num,score;
printf("番号:"); scanf("%d",&num);
printf("得点:"); scanf("%d",&score);
printf("\n番号:%d 得点:%d - ",num,score);
if(score>=70)printf("合格\n");
else printf("不合格\n");
return 0;
}
907デフォルトの名無しさん:2006/02/04(土) 10:31:31
すまん>>901じゃなくて>>903だた
908903:2006/02/04(土) 10:42:08
>>906

ありがとうございました
909デフォルトの名無しさん:2006/02/04(土) 10:50:05
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク): 例を参考にして2文探索木を横型検索の順で表示せよ
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:BCC55
 [3.3] 言語:C
[4] 期限: 2月6日まで
[5] その他の制限: 特になし
例 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1605.txt
910デフォルトの名無しさん:2006/02/04(土) 10:51:53
>>898
しらんがな
#include <math.h>
#define NAS (-1)

double sp_Tri(double a,double b,double c){
double S;
if(a<0 || b<0 || c<0) return NAS;
S=(a+b+c)/2;
return sqrt(S*(S-a)*(S-b)*(S-c));
}

double sp_Hex(double h){
if(h<0) return NAS;
return 6*sp_Tri(h,h,h);
}
911デフォルトの名無しさん:2006/02/04(土) 11:12:22
>>909
横型検索ってなぬ?
親→子をFIFO順に入れたQueueを対象にして探索しろってこと?
912デフォルトの名無しさん:2006/02/04(土) 11:21:26
>>911
幅優先探索のことだろ
913デフォルトの名無しさん:2006/02/04(土) 11:32:59
[1] 授業単元: プログラミングT
[2] 問題文(含コード&リンク):

@ number.dat を入力ファイルとして、date.dat を引数として入力するようにする。
つまり、date02.dat 等の処理はプログラムの修正が不要なようにする。

A date.dat に入ってるファイルの上から順番に、最初に出てきた番号の人に100点、次に出てきた人には99点の評価を与え、その次の人は98点という具合に評価点が下がるようにする。番号が見出されない人には -1点を付ける。
 ※複数回同じ番号が出てくるときは、先に出てきたほうを優先する

B 出力ファイル名は date.out として、引数の dat を out に変更するものとする。
  date.out は 40行のファイルとして、1行目は A001 の評価点を2文字の整数 (例えば 35)で、10行目には A025 の評価点を2文字の整数で、40行目には A104の評価点を2文字の整数で出力する。

number.dat & date.dat ---> http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1606.zip

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:GCC
 [3.3] 言語:C
[4] 期限:2006年02月08日23:59 まで
[5] その他の制限:なるべく簡単なプログラムでお願いします。
914デフォルトの名無しさん:2006/02/04(土) 11:42:53
date
【1-名-1】 日付、年月日{ねんがっぴ}
【1-名-2】 期日{きじつ}、日取り{ひどり}
【1-名-3】 年代{ねんだい}、時代{じだい}
【1-名-4】 人の生没年{せいぼつねん}、物事{ものごと}の始まりと終わりの年
【1-名-5】 デート
【1-名-6】 〈米話〉デートの相手{あいて}、付き合っている異性{いせい}


いったいどーゆー意味で名づけたんでしょうか?
915909:2006/02/04(土) 11:45:57
>>911
幅優先探索です。
2文探索木で深さの浅いところから表示させたいのです。
916デフォルトの名無しさん:2006/02/04(土) 11:59:40
横型検索でググってみても出なかったんで(orz 普通に横型探索なのな
というわけでsearchnodeを改変しますた
紙面の関係上、下手な改行。
typedef _BinNodeQueue{ int cnt; int sz; BinNode* *lst; } BinNodeQueue;
BinNodeQueue* AllocQueue(){BinNodeQueue* r;r=(BinNodeQueue*)malloc(sizeof(BinNodeQueue)); r->cnt=0; r->sz=0; r->lst=NULL; return r;}
void FreeQueue(BinNodeQueue *bq){if(bq->lst!=NULL) free(bq->lst);free(bq);}
void EnQueue(BinNodeQueue *bq,BinNode* b){
bq->sz++;
if(bq->cnt < bq->sz){
int i; BinNode* *dlst;
bq->cnt+=1024;
dlst=(BinNode**)malloc(sizeof(BinNode) * bq->cnt);
for(i=0;bq->sz-1;i++) dlst[i]=bq->lst[i];
if(bq->lst!=NULL) free(bq->lst);
bq->lst=dlst;}
bq->lst[bq->sz-1]=b;
}
BinNode* DeQueue(BinNodeQueue *bq){if(bq->cnt==bq->cnt) return NULL; else return bq->lst[--bq->sz];}
/*--- 氏名による探索 ---*/
BinNode *SearchNode(BinNode *p, Data x){
BinNodeQueue* bq;
int i;
bq=AllocQueue();
//検索開始
EnQueue(bq,p); //便宜上、キューに突っ込んでおく
for(;;){
p=DeQueue(bq); //pを取り出す
if((p=DeQueue(bq))==NULL){ FreeQueue(bq); return NULL;} //キューに何も無い
if(NameCmp(x,p->Data)==0){ FreeQueue(bq); return p; } //p->Dataをチェック
AddQueue(bq,p->left); AddQueue(bq,p->right);} //pの子をキューに入れる
}
917916:2006/02/04(土) 12:01:58
>>915
俺VB厨だからCのmalloc&free苦手
それを克服するために今書いてみたから、そのへん注意してください
918909:2006/02/04(土) 12:25:54
>>917
ありがとうございます。参考にさせていただきます。
919909:2006/02/04(土) 12:27:24
>>917
ありがとうございます。参考にさせていただきます。
920デフォルトの名無しさん:2006/02/04(土) 13:15:26
1] 授業単元: オブジェクト指向言語
[2] 問題文(含コード&リンク):1行に「人口(千人)、製造品出荷額(億円)、県名」のデー タが記入され、
これを中国5県分(5行)提供しているファイル pref_output.txt がある。
このデータを読み込み、以下のように各県の「県名 人口(千人) 製造品出 荷額(億円) 県民一人当たりの製造品出荷額(億円/千人)」を表示した後、
中国地方の人口合計(千人)、総製造品出荷額(億円)、一人当たりの製造品出 荷額(億円/千人)を表示するプログラムを作成しなさい。また、出力結果は以下と同じになるようにすること。
pref_output.txtの中身はpop.out,県名というならびである。

Prefecture Pop. Out. Ave.
---------------------------------------
Tottori 613 10255 16.73
Shimane 762 10034 13.17
Yamaguchi 1528 49505 32.40
Okayama 1951 62860 32.22
Hiroshima 2879 65523 22.76
---------------------------------------
TOTAL 7733 198177 25.63
[3] 環境
 [3.1] OS : Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C言語
[4] 期限:2月4日16時まで
課題を出されたのですがこの一問だけできなくて、すいませんどうかよろしくおねがいします。
921デフォルトの名無しさん:2006/02/04(土) 13:26:59
ファイルの中身不明なのにどうせいと?
922920:2006/02/04(土) 13:29:22
すいません、ファイルの中身は
613 10255 Tottori
762 10034 Shimane
1528 49505 Yamaguchi
1951 62860 Okayama
2879 65523 Hiroshima

です。長くて一度にかきこめなくてすいません。
923デフォルトの名無しさん:2006/02/04(土) 13:46:55
>>922
#include<stdio.h>
int main(void){
FILE *fp;
int pop,out,i,pops=0,outs=0;
char str[256],kenmei[256];
fp = fopen("pref_output.txt","r");
while(fgets(str,256,fp)!=NULL){
sscanf(str,"%d%d%s",&pop,&out,kenmei);
pops += pop;
outs += out;
printf("%s %d %d %4.2f\n",kenmei,pop,out,(double)out/pop);
}
printf("%d %d %4.2f\n",pops,outs,(double)outs/pops);
return 0;
}
924デフォルトの名無しさん:2006/02/04(土) 13:50:10
出力間違えた
#include<stdio.h>
int main(void){
FILE *fp;
int pop,out,i,pops=0,outs=0;
char str[256],kenmei[256];
fp = fopen("pref_output.txt","r");
puts("Prefecture Pop. Out. Ave.");
for(i=0;i<40;i++)putchar('-');puts("");
while(fgets(str,256,fp)!=NULL){
sscanf(str,"%d%d%s",&pop,&out,kenmei);
pops += pop;
outs += out;
printf("%s %d %d %4.2f\n",kenmei,pop,out,(double)out/pop);
}
for(i=0;i<40;i++)putchar('-');puts("");
printf("TOTAL %d %d %4.2f\n",pops,outs,(double)outs/pops);
return 0;
}
925デフォルトの名無しさん:2006/02/04(土) 13:54:04
>>889
なんとかA(4,1)までは計算できるようになったが
A(4,2) = 2^65536 - 3 なんて数、そもそもどうやって格納しときゃいんだて
926デフォルトの名無しさん:2006/02/04(土) 13:55:14
リストw
927デフォルトの名無しさん:2006/02/04(土) 13:58:32
>>909 反復深化 つかその例おかしいぞ (__で始まる名前はどこで使っても未定義動作 & return文を忘れてる)
/*--- 全ノードのデータを表示 ---*/
static int PrintTreeSub(BinNode *p, int depth, int max_depth)
{
  int result = 0;

  if (p != NULL) {
    if (depth == max_depth) {
      PrintData(p->data);
      result = 1;
    } else {
      result = PrintTreeSub(p->left, depth + 1, max_depth);
      result += PrintTreeSub(p->right, depth + 1, max_depth);
    }
  }

  return result;
}

void PrintTree(BinNode *p)
{
  int   i;
  for (i = 0; PrintTreeSub(p, 0, i); i++)
    ;
}
928920:2006/02/04(土) 13:58:41
>>924
すごく助かりました!今から提出してきます。
929デフォルトの名無しさん:2006/02/04(土) 14:01:29
sscanfって授業で出てくるもんだろうか・・・・・
930デフォルトの名無しさん:2006/02/04(土) 14:05:11
わ・ざ・と♥
931デフォルトの名無しさん:2006/02/04(土) 14:44:56
授業単元にはだれも突っ込まないのか。
932デフォルトの名無しさん:2006/02/04(土) 14:45:36
>>931
バロスwwwwwwwwwwwwうぇっうぇwwwww
933デフォルトの名無しさん:2006/02/04(土) 14:48:44
C++を学ぶ前にCを学んでいるんじゃないのか? と思ったがもうそんな時期は終わっているはずだよな
まあ授業名と内容が異なるのは高校・大学ではよくあることだし
934デフォルトの名無しさん:2006/02/04(土) 15:05:58
しかしC言語はオブジェクト指向ではない
935デフォルトの名無しさん:2006/02/04(土) 15:10:06
できないことも無いがする意味がない
936デフォルトの名無しさん:2006/02/04(土) 15:11:03
なんだかCで関数ポインタをゴリゴリやって実装してるのを聞いたことがある乙
937913:2006/02/04(土) 15:53:32
>>914
特に意味は無いと思います。
自分でつけた訳ではないので・・・
938デフォルトの名無しさん:2006/02/04(土) 15:56:29
>>889
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1607.txt
多分ブラウザで直接は見れないから、ファイルに落としてから見てね。
939デフォルトの名無しさん:2006/02/04(土) 16:14:57
そんな長大な整数をどうやって計算したのかのほうが、興味がある。
940デフォルトの名無しさん:2006/02/04(土) 16:20:16
>>939
巨体整数演算
javaなりrubyなり、C++なりで実装されてるだろ?
941デフォルトの名無しさん:2006/02/04(土) 16:22:34
>巨体整数演算
イタタタ
942デフォルトの名無しさん:2006/02/04(土) 16:26:47
巨体ktkrwwwwwwww
943デフォルトの名無しさん:2006/02/04(土) 16:29:57
944デフォルトの名無しさん:2006/02/04(土) 19:43:52
[1] 授業単元: 物理シミュレーション
[2] 問題文(含コード&リンク): 銀河のシミュレーション

半径が0.5万光年で10個のリングを配置し、各リングには20個の構成を配置しシミュレーションを行う。
for() 全ての星が星 i に加える力を計算する。

for() 求めた力より、星 i の速度の変化を求め星 i の新しい位置を計算する。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0
 [3.3] 言語: C
[4] 期限: 2006/2/6
[5] その他の制限: gnuplotで表示したい。
945デフォルトの名無しさん:2006/02/04(土) 20:03:13
問題文の意味がさっぱり理解できない
946862:2006/02/04(土) 20:09:32
[1] 授業単元:計算機実習
[2] 問題文(含コード&リンク):
main関数でキーボードから入力された2つの整数を引数として
渡された時、最大公約数を返すプログラム
main()
{
   変数の定義とキーボードからの入力
c=gcm(a,b);
   結果の表示
}
int gcm(int x,int y)
{
変数の定義と最大公約数の計算
return z;
}
を完成させて、36,90をキーボードから入力した時に最大公約数18が表示されるかどうか
確認しなさい。
(最初はmain関数だけでプログラムを組み、後で最大公約数の計算部分を
関数かすると作りやすい)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: わからないです。
 [3.3] 言語: C++
[4] 期限: 2006年2月4日
 
よろしくお願いします。


947デフォルトの名無しさん:2006/02/04(土) 20:22:46
(リングは不明だが)10x20=200個の質点を半径0.5万光年以内に収まるよう、位置を与え、それぞれ、質量と初期移動量を与える。
万有引力の法則にのっとって、質点の移動をシミュレートせよ。
という意味だと思う。
948デフォルトの名無しさん:2006/02/04(土) 20:30:12
>>946
#include<iostream>
using namespace std;
int gcm(int,int);
int main(){
    int a,b;
    cin >> a >> b;
    int c = gcm(a,b); 
    cout << c << endl;
}
int gcm(int x,int y) 

    if(y==0)return x;
    while(x %= y)
        if((y %=x)==0)return x;
    return y;
}
949次スレテンプレ:2006/02/04(土) 20:32:52
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 2.9 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++の宿題を片付けます 59代目
http://pc8.2ch.net/test/read.cgi/tech/1138320520/
【過去スレ一覧】
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
次スレが立たない時の避難所
http://pc8.2ch.net/test/read.cgi/tech/1122705615/
950デフォルトの名無しさん:2006/02/04(土) 20:33:56
>948
いやいあマテ、それは標準入力から、であって出題に含まれる”キーボードから”は満たせんぞ。
951デフォルトの名無しさん:2006/02/04(土) 20:35:57
>>950
ジョン、それよりも「キーボードのみに限定されていないので、仕様を越えている」じゃないか?
952デフォルトの名無しさん:2006/02/04(土) 20:37:53
まあ・・・細かいツッコミだなぁ・・・
標準入力からっていうと、入力を促すメッセージを出さなくていい。
キーボードからっていうと、入力を促すメッセージを出す。

って意訳してるけど。まあ、あれだ。イチャモンに近い。>950 ついでに、次スレ頼むわ。
953948:2006/02/04(土) 20:39:55
>>952
いや、>>950はジョークだろw
ここは>>951の言うとおり、
仕様を発展、拡張した高度プログラムを書いた(ことにする)のですよ。
954デフォルトの名無しさん:2006/02/04(土) 20:41:03
int a,b,c;
puts("input a");
scanf("%d",&a);
puts("input b");
scanf("%d",&b);
c=gcm(a,b);
printf("gcm=%d\n",c);
return 0;}

int gcm(int x,int y) {
int z;
while(y!=0){
int temp;
temp=x%y;
x=y;
y=temp;}
z=x;
return z;}

脳内コンパイルだから動くかどうかしらね
ついでにユークリッド互助法もうろ覚えなんであってるかどうかしらね
955デフォルトの名無しさん:2006/02/04(土) 20:42:27
ってC++か
おまけに汚いし恥ずかしいのぉ
956デフォルトの名無しさん:2006/02/04(土) 20:42:39
誰もGCMに突っ込まない件について
957デフォルトの名無しさん:2006/02/04(土) 20:48:03
>>947
お前凄いな

>>944
現状ではほぼ間違いなく誰も答えてくれないと思われる
958デフォルトの名無しさん:2006/02/04(土) 20:49:01
たんに末尾再帰が書きたかっただけ

#include<iostream>
using namespace std;
int gcm(int,int);
int main(){
    cout<<"input a -> ";int a;cin >> a;
    cout<<"input b -> ";int b;cin >> b;
    int c = gcm(a,b);
    cout << c << endl;
}
int gcm(int x,int y){
    if(y==0)return x;
    else return gcm(y,x%y);
}
959デフォルトの名無しさん:2006/02/04(土) 20:49:08
>>947
合体して巨大な星が生まれるんだな!
960デフォルトの名無しさん:2006/02/04(土) 20:49:26
int gcm(int x, int y) {if (x == 36 && y == 90) return 18; printf("答えられません\n"); exit(1); return 0;}
961デフォルトの名無しさん:2006/02/04(土) 20:51:46
GCM=Greatest Common Multiple
962デフォルトの名無しさん:2006/02/04(土) 20:52:43
もっともでっかい、きょうつうの、かけざん?
963デフォルトの名無しさん:2006/02/04(土) 20:53:44
互助法って……
964950:2006/02/04(土) 20:54:35
次スレ立てたぞ。

C/C++の宿題を片付けます 60代目
ttp://pc8.2ch.net/test/read.cgi/tech/1139053955/
965デフォルトの名無しさん:2006/02/04(土) 21:07:02
966デフォルトの名無しさん:2006/02/04(土) 21:18:08
>>965
おもろい
967デフォルトの名無しさん:2006/02/04(土) 21:39:03
先走り依頼防止age
968デフォルトの名無しさん:2006/02/04(土) 21:46:45

すみません。リングとは軌道のことです。
プログラムは947さんの考えと合っています。ありがとうございます。
星の次の位置を与えそれをfor文でループさせgnuplotでアニメーション表示したいのです。
完成した動きは、中心点(ブラックホール)の周りを200個の星がぐるぐる回るというものです。
969デフォルトの名無しさん:2006/02/04(土) 21:51:01
>>965
やはり止まる
970デフォルトの名無しさん:2006/02/04(土) 22:00:03
すれ違いだが、ライフゲームは、止るという判断をするか、むずかしい・・・。
3 3 *
.*.
..*
***
はどう判定してよいのやら。
971デフォルトの名無しさん:2006/02/04(土) 22:20:20
カウンターが上がっていってる限り、安定状態であってフリーズではないだろうと。
972デフォルトの名無しさん:2006/02/04(土) 22:38:29
・・・カンストいくつだよ・・・
973デフォルトの名無しさん:2006/02/04(土) 22:40:57
バイナリ拾ってきて動かす勇気に感服
974デフォルトの名無しさん:2006/02/04(土) 22:48:28
で? 安全なの?
975デフォルトの名無しさん:2006/02/04(土) 23:17:30
>>973>>974
今のところ俺のメインマシンは生きている
詳細は>>965
976デフォルトの名無しさん:2006/02/04(土) 23:22:43
セキュ板かどこかで以前にある実行ファイルのリンクが貼られてからその
スレに書き込む人数がどんどん減っていったのを思い出した。
977デフォルトの名無しさん:2006/02/04(土) 23:33:02
もちろんデバッガ通して実行してるお
978デフォルトの名無しさん:2006/02/04(土) 23:46:41
>>977
私は生です
979デフォルトの名無しさん:2006/02/05(日) 00:37:36
生はキケンだぞ。うん。
980デフォルトの名無しさん:2006/02/05(日) 00:38:16
>>979
生気持ち良い!!!

・・・(((( ;゜Д゜)))ガクガクブルブル
981デフォルトの名無しさん:2006/02/05(日) 00:38:48
マシンが生きてても苺の類はどうしようもないなぁ
982デフォルトの名無しさん:2006/02/05(日) 00:42:31
まあ・・・ここに載ったソースをコンパイル→実行するとディレクトリがご臨終するプログラムもあったことだし。
危険ですな・・・。
983デフォルトの名無しさん:2006/02/05(日) 00:44:37
>>977
('A`) ってゆーかデバッグ実行しても手遅れだろ
984デフォルトの名無しさん:2006/02/05(日) 00:52:40
「センセー! ポインタを利用して整数を交換するプログラムを書けという課題がでました!」
「void swap(int *pa, int *pb) { int tmp = *pa; *pa = *pb; *pb = tmp; }」

「あのぅ・・・swapって習ってないんですけど?」
「自分で関数を作るって習った?」
「習っていません。」
「・・・int main(void) {int a = 1, b = 2, tmp; tmp = *&a; *&a = *&*&*&b; b = tmp; return 0; }」

「何も表示されないんですが・・・」
「題意は満たしてる」
985デフォルトの名無しさん:2006/02/05(日) 00:58:07
ttp://ほげほげ の課題を解説してください」
「xxxという講義の第x週で出した課題です.分からなかったら部屋まで来てください,適宜対応します」

ホンモノ?
あ、スゴイ、この先生、コピー&ペースト対策してる・・・。
986デフォルトの名無しさん:2006/02/05(日) 01:00:53
「ID foo, PASS barの某pdfを解いて欲しいんですが。」
→通報

先生、独学の人間にもエサ^H^H資料を見せてください。金払いますから・・・。
987デフォルトの名無しさん:2006/02/05(日) 01:27:29
swap()は最近だった気がするが見つけられなかった
pdfは最近だったから、覚えてる
で、適宜は17代目
ttp://makimo.to/2ch/pc2_tech/1070/1070469896.html#355
ttp://makimo.to/2ch/pc2_tech/1070/1070469896.html#365
ttp://makimo.to/2ch/pc2_tech/1070/1070469896.html#646

採点:もうちっとネタを料理しましょう
988デフォルトの名無しさん:2006/02/05(日) 01:37:05
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
2つの文字列A,B(最大文字数は255とする)を読み込み、
それぞれの文字列の先頭から順に一文字づつ抜き出し、
交互に出力するプログラムを作成しなさい。

例:
文字列Aにabcd
文字列Bに123456
と入力すると
出力結果 a1b2c3d456
が出力されるようにする。

文字列の入力は
char *string;
……
scanf("%s", string);
のように変換指定子に%sを使用する。

[3] 環境
 [3.1] OS: Windows
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2006年2月7日

ポインタとかさっぱりです、どうかよろしくお願いします。
989デフォルトの名無しさん:2006/02/05(日) 01:41:26
char*にscanfてまずくねぇ?
990デフォルトの名無しさん:2006/02/05(日) 01:42:14
>>989
一般の入門書にはsscanfとかは確実に載ってない
991デフォルトの名無しさん:2006/02/05(日) 01:43:38
>>989
……による
992デフォルトの名無しさん:2006/02/05(日) 01:44:31
mallocで256確保してからfgetsで読み込んで・・でいいでない
993デフォルトの名無しさん:2006/02/05(日) 01:48:12
入力バッファオーバーフローは外側に任すとして

void printAlter(char *a,char *b){
int flg=0;
while(flg!=3){
if(*a==0) flg|=1; else printf("%c",*a++);
if(*b==0) flg|=2; else printf("%c",*b++);
}
}

こんなの作ればいいんでね?
994デフォルトの名無しさん:2006/02/05(日) 01:49:48
・・・char *string;??
まあ、いいや。
void put(char *a, char *b) { if (a == NULL) {puts(b): } else { putchar(*a); put(b, a + 1); } }
int main(void) {char a[100], b[100]; scanf("%s%s", a, b); put(a, b); return 0;}
995デフォルトの名無しさん:2006/02/05(日) 01:50:26
すまん。994は間違い。
#include <stdio.h>

void put(char *a, char *b)
{
if (*a) {
putchar(*a);
put(b, a + 1);
} else {
puts(b);
}
}

int main(void)
{
char fmt[20], a[100], b[100];
sprintf(fmt, "%%%ds%%%ds", (int) (sizeof(a) - 1), (int) (sizeof(b) - 1));
if (scanf(fmt, a, b) == 2) {
put(a, b);
}
return 0;
}
996デフォルトの名無しさん:2006/02/05(日) 01:50:34
もうやる気あんまりないなぁw
俺もだけど
997デフォルトの名無しさん:2006/02/05(日) 01:53:16
997
998デフォルトの名無しさん:2006/02/05(日) 01:54:28
良い子は寝るべ。
999デフォルトの名無しさん:2006/02/05(日) 01:54:28
次スレいこーぜ
1000デフォルトの名無しさん:2006/02/05(日) 01:54:36
正直つまらんかったな、このスレは
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。