C/C++の宿題片付けます 153代目at TECH
C/C++の宿題片付けます 153代目 - 暇つぶし2ch1:デフォルトの名無しさん
11/11/04 09:08:00.06
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他の発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。 >>2以降にあります。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

2:デフォルトの名無しさん
11/11/04 09:08:32.11
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(s2.etowns.slyip.net)
URLリンク(codepad.org) ←遅い時間は重い事があります
URLリンク(ideone.com)
URLリンク(pastebin.com) ←たまにテンポるので上の2つが混んでいる時以外はなるべく使わないで下さい
【C 関数検索 man on WWW】 URLリンク(www.linux.or.jp)
【過去ログ検索】        URLリンク(chomework.sakura.ne.jp)
【wiki】               URLリンク(www23.atwiki.jp)
前スレ
C/C++の宿題片付けます 152代目
スレリンク(tech板)

3:デフォルトの名無しさん
11/11/04 13:39:54.52
>>999
前スレのレスがあまりにウンコなのでどうしようか悩んだけど、書くわ。
名前空間って知ってるか?

4:デフォルトの名無しさん
11/11/04 13:55:39.54
ひとまず「C++ std」とかでググればよかろうに
そうすればつまらない質問してウンコとか言われないでいられたものを

5:デフォルトの名無しさん
11/11/04 13:59:15.40
前スレ >>994
ベタな方法で。
URLリンク(ideone.com)

6:デフォルトの名無しさん
11/11/04 14:49:40.13
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):文字列st が回文(前から読んでも後ろから読んでも
同じ)であれば1 を,そうでなければ0 を返す関数
int isPalindrome(const char st[])
を作成せよ.以下の実行例のように,関数の動作を確認
例.文字列を入力してください:AKASAKA
その文字列は回文です。




できるmain 関数も作成する.

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C
[4] 期限:11/6
[5] その他の制限:

7:デフォルトの名無しさん
11/11/04 14:54:30.56
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):文字列st が回文(前から読んでも後ろから読んでも
同じ)であれば1 を,そうでなければ0 を返す関数
int isPalindrome(const char st[])
を作成せよ.以下の実行例のように,関数の動作を確認
できるmain 関数も作成せよ.
例.文字列を入力してください:AKASAKA
その文字列は回文です.



[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C
[4] 期限:11/6
[5] その他の制限:


8:デフォルトの名無しさん
11/11/04 15:13:10.58
>>7
int isPalindrome(const char st[])
{
char* f;
char* b;

f = b = st;
while( *b ) b++;
b--;
while( b > f ) {
if( *f != *b ) return 0;
f++;
b--;
}
return 1;
}

9:デフォルトの名無しさん
11/11/04 18:00:02.02
おや、>>6>>7は一緒だったのか
気付かず作っちゃったのでやり方少し違うしせっかくなのでうp
URLリンク(codepad.org)

10:デフォルトの名無しさん
11/11/05 01:33:40.13
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):例に示すように、二つの整数値を読み込んで、
              小さい方の数以上で大きいほうの数以下の整数
              を全て加えた値を表示するプログラムを作成せよ。
              (例)
                 二つの整数を入力してください。
                 整数1: 37
整数2: 28
28以上37以下の全整数の和は325です。
              
[3] 環境
 [3.1] OS:windows7
 [3.2] コンパイラ名とバージョン:Visual C++ 2010 Express
 [3.3] 言語:どちらでも可
[4] 期限:11月9日
[5] その他の制限:if文とdo文を必ず使うこと。
         4月から授業ではじめたばかりですので、複雑な文は分かりません。
         よろしくお願いします。

11:デフォルトの名無しさん
11/11/05 01:34:35.55
連投ごめんなさい
例がずれました

12:デフォルトの名無しさん
11/11/05 01:54:00.69
>>10
#include<iostream>
using namespace std;
int main(void) {
int a,b;
cout << "二つの整数を入力してください。" << endl;
cout << "整数1:";
cin >> a;
cout << "整数2:";
cin >> b;

int sum=0;
for (int i=min(a,b) ; i<=max(a,b) ; i++) sum += i;
cout << min(a,b) << "以上" << max(a,b) << "以下の全整数の和は" << sum << "です。" << endl;

return 0;
}


13:デフォルトの名無しさん
11/11/05 02:00:27.20
>>10
if と do だったな。忘れてたわ。
#include<iostream>
using namespace std;
int main(void) {
int a,b;
cout << "二つの整数を入力してください。" << endl;
cout << "整数1:";
cin >> a;
cout << "整数2:";
cin >> b;

int max,min;
if (a<b) {
min = a;
max = b;
} else {
min = b;
max = a;
}
int sum=0;
int i=min;
do {
sum += i;
i++;
} while (i<=max);
cout << min << "以上" << max << "以下の全整数の和は" << sum << "です。" << endl;

return 0;
}


14:デフォルトの名無しさん
11/11/05 04:35:44.32
>>5
プログラムへのツッコミじゃないけど40はfortyな。
あとハイフンを使ったりとか...

15:デフォルトの名無しさん
11/11/05 08:01:30.87
>forty
知らなかった
こんなところで英語の無駄知識が増えるとは

16:デフォルトの名無しさん
11/11/05 08:07:26.53
3項演算子で割り算連続とか、なんの冗談なんだろうw

17:デフォルトの名無しさん
11/11/05 08:57:25.99
>>15
「無駄」って、日本語でいったら漢数字の表記を間違えているようなもんだぞw

18:デフォルトの名無しさん
11/11/05 09:17:13.69
>>17
何で英語はfourtyとしなかったんだ?というボヤキでしょ。

19:デフォルトの名無しさん
11/11/05 12:01:32.49
>>18
え?

20:デフォルトの名無しさん
11/11/05 12:11:17.56
外国人が多少日本語を間違えていても
意味を取り違えない程度なら正直どっちでもいい
日本人が多少英語を間違えていても(以下同

21:デフォルトの名無しさん
11/11/05 12:12:39.24
お、おう

22:デフォルトの名無しさん
11/11/05 12:15:34.87
実際英語圏にいくと人種が混じってるので、間違えたら可哀想な目で見られるだけ。

23:デフォルトの名無しさん
11/11/05 20:53:42.06
"forty"の5文字はアルファベット順になっている
とかが英語の無駄知識だろう

24:デフォルトの名無しさん
11/11/05 22:19:17.11
>>18
そんなとこでぼやくんなら、
何で50はfivetyじゃなくてfiftyなんだ、とかもぼやいてるのか?
「いやいや14がfourteenだし4の部分は発音が同じだし」、とかいうなら
英語は綴りと発音が対応してない単語が山ほどあるがその度にぼやいているのか?

こんなもん自然言語の歴史的な経緯なんだからどうしようもないんだよ。
ちなみに昔はfourとfortyのforは発音が違ったらしいぞ。
あと言語のForth、あれはFourthとするつもりが文字数の都合でForthになった、
これぐらいが無駄知識w

25:デフォルトの名無しさん
11/11/05 22:41:52.51
フォースを信じるのじゃ

26:デフォルトの名無しさん
11/11/06 00:04:03.33
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):3つのデータを管理するプログラム
               PDFにした問題を貼っておきます
               URLリンク(www.07ch.net)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:特に指定はなかったです
 [3.3] 言語:C言語
[4] 期限: 11/8
[5] その他の制限: 特に無いです
よろしくお願いします



27:デフォルトの名無しさん
11/11/06 07:23:07.35
>>26
#include <string.h>
#include <stdlib.h>
typedef struct AAA {
char usr_name[32];
char password[32];
int age
}AAA;
char* strlcpy( char* pDestination, const char* pSource, size_t Size )
{
char* pStart = pDestination;
while( --Size && ( *pDestination++ = *pSource++ ) );
*pDestination = '\0';
return pStart;
}
AAA usr; /*グローバル変数*/
void init(){

/*作成*/
memset(&usr,0,sizeof(AAA));
}
int add_user(char *usr_name,char *password,int age){
/*作成*/
strlcpy(usr.usr_name,usr_name,32);
strlcpy(usr.password,password,32);
usr.age = age;
}

28:デフォルトの名無しさん
11/11/06 07:46:54.20
>>27
add_user()は

成功:0
エラー:-1
を返すんですけど・・・

29:デフォルトの名無しさん
11/11/06 18:17:42.87
[1] 授業単元:プログラミング入門
[2] 問題文:0以上20以下の整数を入力として受け付けて,
その数から20までの整数を順に出力せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ありません
[5] その他の制限: ありません

うまくカウントできなくて困っています
宜しければお願いします

30:デフォルトの名無しさん
11/11/06 18:50:28.03
/*>>29*/
#include <stdio.h>

int main(void)
{
  int n, i;

  printf("整数(0-20): ");
  scanf("%d", &n);

  if (n < 0 || n > 20) {
    fprintf(stderr, "範囲外です");
    return 0;
  }

  for (i = n; i <= 20; i++)
    printf("%d ", i);

  printf("\n");

  return 0;
}


31:デフォルトの名無しさん
11/11/06 18:52:23.92
void main(){
int in;
scanf("%d",&in);
for(;in<=20;in++)printf("%d\n",in);
}

32:デフォルトの名無しさん
11/11/06 19:32:22.25
>>31
横やりだけど、負数をはじかないと

33:デフォルトの名無しさん
11/11/06 22:55:45.94
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):mのn乗 を一の位まで正確に計算するプログラムを書け。ただし、mは2以上10000未満の整数、nは0以上10000未満の整数とする。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: わかりません
 [3.3] 言語: C
[4] 期限: 2011年11月7日12時
[5] その他の制限: ありません

よろしくおねがいします


34:デフォルトの名無しさん
11/11/06 23:04:55.18
>>33に追加条件です。
多倍長整数を使ってください。

35:デフォルトの名無しさん
11/11/06 23:18:07.59
>>30-31
ありがとうございました
助かりました

36:デフォルトの名無しさん
11/11/06 23:20:21.13
[1] 授業単元:C言語
[2] 問題文:整数型の要素を最大20個格納できる配列を宣言し,先頭から10個分には2を,
後半の10個分には3を格納せよ。正しく格納されたことを出力する必要があるが,
出力する際には2を10個分空白区切りで出力し,改行した後に3を10個分空白区切りで出力すること。
[3] 環境
 [3.1] OS: Win
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限: 11月7日

よろしくお願いします

37:デフォルトの名無しさん
11/11/06 23:56:59.99
>>36
#include <stdio.h>
int main()
{
int a[20];
int i;
for (i = 0; i < 10; i++) {
a[i] = 2;
}
for (; i < 20; i++) {
a[i] = 3;
}
for (i = 0; i < 20; i++) {
printf("%d%c", a[i], ((i % 10) == 9)? '\n': ' ');
}
return 0;
}

38:デフォルトの名無しさん
11/11/06 23:59:08.37
>>33
大してテストしてないので、十分検証してから提出してくださいな
URLリンク(ideone.com)

39:デフォルトの名無しさん
11/11/07 00:03:17.05
/*>>36*/
#include <stdio.h>

int main(void)
{
  int a[20];
  int i;

  for (i = 0; i < 20; i++)
    a[i] = i / 10 + 2;

  for (i = 0; i < 20; i++)
    printf("%d%c", a[i], ((i + 1) % 10) ? ' ' : '\n');

  return 0;
}


40:デフォルトの名無しさん
11/11/07 00:06:25.03
>>36

#include <stdio.h>

void disp(int *a,int l)
{
 while(l--) printf("%d ",*a++);
 printf("\n");
}

int main(void)
{
 int array[20]={2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3};
 disp(array ,10);
 disp(array+10,10);

 return(1);
}


41:デフォルトの名無しさん
11/11/07 00:14:19.39
/*>>36*/
#include <stdio.h>
main(i){int a[20];for(--i;i<20;a[i]=i/10+2,printf("%d%c",a[i],((i+1)%10)?' ':'\n'),i++);}

42:デフォルトの名無しさん
11/11/07 00:23:22.99
ちょっと縮んだ
/*>>36*/
#include <stdio.h>
main(i){int a[20];for(i=0;i<20;a[i]=i/10+2,printf("%d%c",a[i],' '-(i==9)*22),i++);}

43:デフォルトの名無しさん
11/11/07 00:28:04.80
>>40
ちょw
絶対先生に合格もらえないだろwww


44:デフォルトの名無しさん
11/11/07 00:33:44.22
さらに縮んだ
100byte切れない
/*>>36*/
#include <stdio.h>
main(i){int a[20];for(i=0;i<20;a[i]=i/10+2,printf("%d \0%d\n"+(i++==9)*4,a[i]));}

45:デフォルトの名無しさん
11/11/07 00:37:32.98
と思ったら切れた
/*>>36*/
#include <stdio.h>
main(i){int a[20];for(i=0;i<20;printf("%d \0%d\n"+(i++==9)*4,a[i]=i/10+2));}

46:デフォルトの名無しさん
11/11/07 00:38:19.55
>>33
#include <stdio.h>

int main(void)
{
int i, j, m, n, d, c, a[10000] = {1};

scanf("%d", &m);
scanf("%d", &n);

for(i = d = 0; i < n; i++) {
for(j = c = 0; j <= d; j++) {
a[j] = a[j] * m + c;
if(a[j] >= 10000) {
c = a[j] / 10000;
a[j] %= 10000;
}
else c = 0;
}
if(c) a[++d] = c;
}

printf("%d", a[d]);
while(--d >= 0) printf("%04d", a[d]);

return 0;
}

47:デフォルトの名無しさん
11/11/07 00:46:54.54
>>36
#include<stdio.h>

int main(void)
{
  int a[20];
  int i;

  for(i = 0; i < 20; i++)
  {
    if(i<10)
    {
      a[i] = 2;
      printf("%d ",a[i]);

      if(i == 9)
      {
        printf("\n");
      }
    }
    else
    {
      a[i] = 3;
      printf("%d ",a[i]);
    }//3を出力した後に改行しろとは書いてないと言い訳してみる
  }

  return 0;
}


48:デフォルトの名無しさん
11/11/07 00:49:04.53
>>44
i,a[20];main(){for(;i<20;i++)printf(i==9?"%d\n":"%d ",a[i]=i/10+2);}

49: ◆QZaw55cn4c
11/11/07 00:51:17.27
>>33
スレリンク(tech板:22番)
さすがに、10万ビットにもなると遅くて遅くて‥‥‥。
乗算ルーチンにて、乗数を上位ビットから調べているのですが、これを下位ビットから調べるようにすれば小さい数字の場合はかなりましになるかもしれません。

50:44
11/11/07 01:09:25.87
>>48
素晴らしい

51:デフォルトの名無しさん
11/11/07 01:15:25.79
>>48
for文の中に入れたら少し縮んだ、連騰ゴメン、これで最後です
#include <stdio.h>
i,a[20];main(){for(;i<20;printf(i++==9?"%d\n":"%d ",a[i]=i/10+2));}

52:26
11/11/07 01:34:53.61
>>27
作成ありがとうございます
非常に助かります

宜しければもう1点お付き合いください
>>29で指摘して頂いている点なのです
今出ている処理で0を返せばいいのは分かるのですが
エラー時に-1を返す時にはどのようになるのでしょうか
お願いします


53:デフォルトの名無しさん
11/11/07 02:08:39.97
>>49
こんなのろいコードを提出したらさすがに怒られるだろ。
Nの値に応じてどれだけの値を計算できるか、どのぐらいの計算量が発生するか
考えた方がいい。

54: ◆QZaw55cn4c
11/11/07 02:33:54.72
>>53
確かに >>49 は失敗作。
題意を満たすためには、15万ビット×32ビット:Ο(N)の演算でよかったところを、あらかじめ作成していた 15万 x 15万ビット:Ο(N^2) の演算器をひっつけただけの構造ですから‥‥‥。


55:デフォルトの名無しさん
11/11/07 03:19:13.43
>>54
なるほど、素晴らしいですね。今後もそちらのスレだけで頑張ってください。こちらには来ないでください。迷惑です。


56:デフォルトの名無しさん
11/11/07 03:31:21.55
>43の言ってる事が判らん
誰か解説よろ

57:デフォルトの名無しさん
11/11/07 03:40:28.06
>>56
> 先頭から10個分には2を,
> 後半の10個分には3を格納せよ。正しく格納されたことを出力する必要が

58:デフォルトの名無しさん
11/11/07 07:00:47.55
>>56
20個の配列を宣言してから値を入れないとダメだと思うんだが・・・
宣言と同時に初期化してたら、先生から一本取ることは出来るかもだが、まず怒られる罠w
まあ、問題文も悪いんだが


59:デフォルトの名無しさん
11/11/07 15:05:22.39
[1] 授業単元:計算機アルゴリズムⅠ
[2] 問題文(含コード&リンク):
設問1-1
プログラム例7.3.1をswitch文を使わずにif文、else if文を使うプログラムに変更しなさい。
変数xの値をキーボードから入力するように機能変更しなさい。
プログラム例7.3.1
URLリンク(www.dotup.org)
[3] 環境
 [3.1] OS:Windows vista
 [3.2] コンパイラ名とバージョン:visual studio 2008
 [3.3] 言語:C
[4] 期限:[2011年11月11日8:00まで]
[5] その他の制限:変数、算術演算、printf、scanf、繰り返し処理while文、do-while文
            繰り返し処理for文、繰り返し処理for文による総和の計算、配列変数
            条件分岐if文、要素番号idx使用の書換、データの入れ替え
            条件分岐・論理演算子を用いたif文の条件、if文、else if文
            switch文は習いました。
宜しくお願いします。

60:デフォルトの名無しさん
11/11/07 16:21:50.02
[1]
以下の2*2行列x, yの積 x*yを計算し、その結果を表示するプログラムを作成せよ。


x= ( 1 2 )
4 5

y= ( 1 5 )
5 3



[2]
2つの3成分ベクトル a=(3.0, 2.0, 1.0) , b=(-2.0, 1.0, 1.0)を double型配列に格納し、aとbの内積を計算するプログラムを作成せよ。


すみませんが、わからなかったのでお願いします。

61:60
11/11/07 16:28:25.00
すみません。
>>60の[1]ですが、2行2列の行列でx11=1, x12=2, x21=4, x22=5で、
y11=1, y12=5, y21=5, y22=3です。
ややこしくなってしまいすみません。よろしくお願いします。

62:デフォルトの名無しさん
11/11/07 16:42:37.24
>>60
>>1

63:デフォルトの名無しさん
11/11/07 16:51:41.30
>>61

すみません。不注意でした。

64:デフォルトの名無しさん
11/11/07 17:32:34.19
>>60,61
[1] URLリンク(ideone.com)
[2] URLリンク(ideone.com)

65:デフォルトの名無しさん
11/11/07 17:58:48.63
>>59
#include <stdio.h>

int main(void)
{
int x, z;
scanf("%d",&x);
z= x % 2;
if(z == 0)
printf("x= %d は偶数です.\n",x);
else if(z == 1)
printf("x= %dは奇数です.\n",x);
else
printf("xは負の数である可能性があります.\n");

return 0;
}



66:デフォルトの名無しさん
11/11/07 18:25:59.24
>>64
ありがとうございました。

67:デフォルトの名無しさん
11/11/07 18:49:56.20
>>33
10000^10000 一秒以内ででるのがでけた
URLリンク(codepad.org)

68:デフォルトの名無しさん
11/11/07 19:12:47.49
[1] 授業単元:プログラミング入門
[2] 問題文:整数型の要素を最大10個格納できる配列を宣言する。
添え字が偶数の要素として2、添え字が奇数の要素として3を格納し、
2 3 2 3 2 3 2 3 2 3の形式で出力せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 11月8日

添え字の判定がよくわかりません。
どなたかよろしくお願いします。


69:デフォルトの名無しさん
11/11/07 19:27:06.60
>>68
#include <stdio.h>

int main()
{
int ary[10]={0};
int i,temp=0;
for(i = 0; i<(sizeof(ary)/sizeof(int));i++){
temp = i%2;
if(temp == 0)
ary[i] = 2;
else if(temp == 1)
ary[i] = 3;
}
for(i = 0; i<(sizeof(ary)/sizeof(int));i++){
printf("%d ",ary[i]);
}
putchar('\n');
return 0;
}

70:デフォルトの名無しさん
11/11/07 19:30:49.53
>>68
#include <stdio.h>

int main(void)
{
int i, j, a[10];

for(i = 0, j = 2; i < 10; i++, j ^= 1) a[i] = j;

for(i = 0; i < 10; i++) printf("%d ", a[i]);

return 0;
}

71:デフォルトの名無しさん
11/11/07 19:36:41.07
>>67
>>46の方が速くないか?

72:デフォルトの名無しさん
11/11/07 19:51:44.14
>>71
確かに >>46 の方が早い

73:デフォルトの名無しさん
11/11/07 20:20:09.42
>>57-58
初期化したらあかんのかw
まあ…ありがとう。


74:デフォルトの名無しさん
11/11/07 20:32:58.24
>>73
問題文をよく読めばわかるが、この問題で生徒に学ばせたいことは、ループによる配列の初期化と配列の内容を表示する際、簡単な制御をさせるのが目的。
問題文の要素数が少なすぎるんだよ。
せめて100個とかにすればループで初期化せざるを得ないのに、中途半端な数だから。


75:デフォルトの名無しさん
11/11/07 20:55:38.59
>>71
実測してみた
出力先をすべてファイルに変更しループの回数は
void sub1() {
mpz_t a;
mpz_init_set_ui(a, 10000);
mpz_pow_ui(a, a, 10000);
mpz_out_str(fp1, 10, a);
}
が100ms前後になるぐらいの回数に調整

gmp : 103 ms
>>64 : 5856 ms
>>67 : 19211 ms

76:デフォルトの名無しさん
11/11/07 20:57:13.03
× >>64 : 5856 ms
>>46 : 5856 ms

77:デフォルトの名無しさん
11/11/07 21:09:40.53
>>75
コンパイラとコンパイルオプションはどんなん?

78:デフォルトの名無しさん
11/11/07 21:13:53.41
>>77
-O2付け忘れてた
cygwin gcc-4.5.3
gcc -O2 main.c -lgmp -lwinmm
gmp 101 ms
>>46 1976 ms
>>67 7105 ms

vc9 オプションはデフォ
mpir 189 ms
>>46 1978 ms
>>67 7432 ms

79:デフォルトの名無しさん
11/11/07 21:19:23.78
>>78

gmp はえー

80:デフォルトの名無しさん
11/11/07 21:42:51.08
>>69-70
作成ありがとうございました
助かりました

81:デフォルトの名無しさん
11/11/07 22:57:00.18
>>68
i,a[10];main(){for(;i<10;printf("%d ",a[i++]=2|1&i));}

82:デフォルトの名無しさん
11/11/07 23:02:02.44
>>79
そりゃー10000乗を素直に10000回のかけ算でやるコードとでは差はでかいかと。
とりあえずバイナリー法というやつを使えばいいんじゃないでしょうか。

83:デフォルトの名無しさん
11/11/07 23:18:06.06
10000=(((((((((((2*2)*2+1)*2+1)*2+1)*2)*2)*2)*2+1)*2)*2)*2)*2 だね

84:デフォルトの名無しさん
11/11/07 23:30:14.75
[1] 授業単元:C言語
[2] 問題文:10個の要素が格納できる配列を2つ宣言し、それぞれ任意の整数で初期化せよ。
その後、この2つの配列の中身を入れ替えよ。
[3] 環境
 [3.1] OS: Win
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限: 11月8日12時

代入、参照、if(else)、for、配列は習いました。
x[10] = {1, 2, (ry};で初期化した後どうやって入れ替えたらいいか分かりません。
よろしくお願いします。

85:デフォルトの名無しさん
11/11/07 23:37:06.05
>>84
URLリンク(ideone.com)

86:デフォルトの名無しさん
11/11/07 23:41:50.83
>>84
#include <string.h>
void SwapAry10(int *Sorc1,int *Sorc2)
{
int temp[10]={0};
memcpy(&temp,Sorc1,sizeof(int)*10);
memcpy(Sorc1,Sorc2,sizeof(int)*10);
memcpy(Sorc2,&temp,sizeof(int)*10);
}

87:デフォルトの名無しさん
11/11/07 23:56:00.76
>>81
iの初期化忘れとる。

88:デフォルトの名無しさん
11/11/08 00:21:01.16
>>87
iはグローバル変数だから0で初期化されてる

89:デフォルトの名無しさん
11/11/08 02:42:42.31
>88
そりゃコンパイラ依存だな

90:デフォルトの名無しさん
11/11/08 02:44:51.27
>>89
いつの時代の人間だよw

91: ◆QZaw55cn4c
11/11/08 02:49:40.18
>>89
K&R1の昔からstatic/extern な変数は 0 で初期化と決まっています。

92:デフォルトの名無しさん
11/11/08 05:04:44.32
[1] 授業単元:C言語
[2] 問題文:URLリンク(www1.axfc.net)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2011年11月08日18:00まで
[5] その他の制限:あまり高度な記述をしないでいただけると有難いです
         その他の制限は問題文中にあるものだけです
         よろしくお願いします

93:デフォルトの名無しさん
11/11/08 07:45:55.98
>>92
URLリンク(ideone.com)

94:デフォルトの名無しさん
11/11/08 08:36:55.80
>>93
ありがとうございます、助かりました

95:デフォルトの名無しさん
11/11/08 11:50:56.32
[1] 授業単元:C言語
[2] 問題文:入力した文字列aから交互に一文字ずつ抜き出し、二つの文字列b,cとして出力するプログラムを書け

文字列a:あいうえおかきくけこ
文字列b:あうおきけ
文字列c:いえかくこ
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2011年11月9日9:00まで
[5] その他の制限:特になし

96:デフォルトの名無しさん
11/11/08 12:04:49.28
全角と半角が混じると難しいな

97:デフォルトの名無しさん
11/11/08 12:34:16.08
>>95
MinGW 4.5.2で確認した
URLリンク(ideone.com)
けど課題的にcharでいい気がする・・・

98:デフォルトの名無しさん
11/11/08 13:19:12.92
>>95
全角、半角混じり対応
URLリンク(ideone.com)

99:デフォルトの名無しさん
11/11/08 14:40:20.06
>>85-86
84です、助かりました。ありがとうございました!

100:デフォルトの名無しさん
11/11/08 15:21:19.44
[1] 授業単元:C言語
[2] 問題文
整数n(>=1)を入力し,nの約数の個数を返す関数int divisor(int)を用いてnが素数かどう
かを判定し,その結果を画面表示するプログラムを作成せよ.
[3] 環境
[3.1] OS:Linux 5.2
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2011年11月14日13:00まで
[5] その他の制限:特にありません。宜しくお願いします。
 

101:デフォルトの名無しさん
11/11/08 15:34:16.19
#include <stdio.h>

int divisor(int n)
{
int i, c;

for(i = 1, c = 0; i <= n; i++) if(n % i == 0) c++;

return c;
}

int main(void)
{
int n;

scanf("%d", &n);

if(divisor(n) == 2) printf("素数です\n");
else printf("素数ではありません\n");

return 0;
}

102:デフォルトの名無しさん
11/11/08 15:58:53.12
[1] プログラミング実習応用
[2] √a(ただしaは正の実数)の近似値を求めて表示するプログラムを作成せよ。
  X(n)=1/2{X(n-1)+a/X(n-1)},X(0)=1.0 ()の文字は右下の文字。
  ・nは整数型、X(n)は実数型(float or double) ・aの値はキーボードから入力
  ・再起呼び出しによる方法、逐次的に計算する方法のいずれでもよい
[3] 環境
 [3.1] W7
 [3.2] Visual C++ 2010 Express
 [3.3] どちらでも可
[4] 2011年11月8日22:00
[5] 1.main() 以外の関数を少なくとも一つ作成して使用する
2.#include <math.h> を入れない
3.sqrt(), pow() 関数を使用しない
4.繰り返し回数 n の値は、次のいずれかの方法で決定する
A. n=20
B. xnは十分真の値に近く、かつなるべく小さいnの値
Bの場合はその根拠(実験結果や考察内容など)も示すこと。内容によってはボーナス加点する。例えば下記のような方法があるが、これに限定されることなく、他の方法でもよい
例: いくつかのaの値に対して、nを増加させながらxnの値を表示する実験を行う

よろしくお願いします。


103:デフォルトの名無しさん
11/11/08 16:18:09.76
>>102
#include <stdio.h>

double mysqrt(double a, int n)
{
double xn, xn_1;
int i;

xn=1.0;
for(i=0;i<n;i++)
{
xn_1=xn;
xn=1.0/2.0*(xn_1+a/xn_1);
}
return xn;
}

int main(void)
{
double a;

printf("Input a : ");
scanf("%lf", &a);
printf("%f\n", mysqrt(a, 20));
return 0;
}

104:デフォルトの名無しさん
11/11/08 17:03:20.99
>>102 再帰判
#include <stdio.h>

double X(double a, int n)
{
if (n < 1)
return 1.0;
return 0.5 * (X(a, n - 1) + a / X(a, n - 1));
}

int main(void)
{
int i;
double a;
printf("input a: ");
scanf("%lf", &a);
for (i = 1; i <= 20; i++) {
printf("X(%d):%f\n", i, X(a, i));
}
return 0;

105:デフォルトの名無しさん
11/11/08 17:06:32.94
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
問題1 プリントの線形合同法により乱数を作って,200 個の値を出力しなさい。
問題2 プリントのラグ付きフィボナッチ法により乱数を作って,200 個の値を出力しなさ
い。ただし、x[0]~x[31] は、線形合同法により初期化する
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11/9 6:00
よろしくお願いします

106:デフォルトの名無しさん
11/11/08 17:09:27.36
>>105
プリントってなんぞ?

107:デフォルトの名無しさん
11/11/08 17:24:55.84
>>102
URLリンク(ideone.com)

108:デフォルトの名無しさん
11/11/08 17:42:51.30
>>103-104>>107
ありがとうございます

109:デフォルトの名無しさん
11/11/08 18:25:28.37
>>105
プリントの内容か、画像プリーズ。

110:デフォルトの名無しさん
11/11/08 19:16:05.41
「プリントの」という言葉がないと見なしてみるとかw

111:デフォルトの名無しさん
11/11/08 20:13:28.98
X[]の位置づけが判らん。

112:デフォルトの名無しさん
11/11/08 20:19:13.11
>>105
こんなんでいい?
URLリンク(codepad.org)

113:デフォルトの名無しさん
11/11/08 20:21:29.84
x[]はフィボナッチ法のパラメータと関係しているんだろうな

114:デフォルトの名無しさん
11/11/08 21:06:23.44
[1] 授業単元: c言語
[2] 問題文
main関数の中で char cs[] [6] = {"Turbo","NA","DOHC"};
と配列cs が設定されている 文字列を逆順にし大文字の英字を小文字に変換させ表示させるプログラム
例st[0] ==>" obrut のような感じで
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11:9 19時まで
[5] その他の制限: ポインタは無しで
よろしくおねがいします

115:デフォルトの名無しさん
11/11/08 21:21:37.29
>>114
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
char cs[][6] = {"Turbo", "NA", "DOHC"};
const int N = sizeof cs / sizeof cs[0];
int i, j;
for (i = 0; i < N; ++i) {
printf("cs[%d] ==> \"", i);
for (j = strlen(cs[i]) - 1; 0 <= j; --j) {
putchar(tolower(cs[i][j]));
}
printf("\"\n");
}
return 0;
}


116:114
11/11/08 21:29:16.95
書き忘れがありました すみません
関数 void put reverse void put_toupper put_strary を使ったのをお願いします

117:デフォルトの名無しさん
11/11/08 21:41:51.93
小文字に変換させるのに、toupperなの?

118:デフォルトの名無しさん
11/11/08 22:04:01.95
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
配列の中の文字列にいくつ単語が出てきたかをカウントする
例 a[]="バナナ リンゴ スイカ バナナ"
バナナ 2回
リンゴ 1回
スイカ 1回
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:指定なし
 [3.3] 言語:C言語
[4] 期限: 11/9
[5] その他の制限: 特に無いです
よろしくお願いします

119:デフォルトの名無しさん
11/11/08 22:20:04.78
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
奇数で初期化した配列を動的に確保する関数
書式
int *oddalloc(size_t n);
動作
長さnのintの配列をmalloc()で確保し、最初のn個の正の奇数で初期化する。
返り値
確保した配列の先頭を指すポインタを返す。 確保できなかった場合はNULLを返す。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:無期限
[5] その他の制限: 関数を使ってください
できれば、詳しい解説もほしいです(><)

120:デフォルトの名無しさん
11/11/08 22:39:19.50
>>119
int *oddalloc(size_t n)
{
int *p;
size_t i;
p = (int *) malloc(sizeof(int) * n);
if (p)
for (i = 0; i < n; i++)
p[i] = 2 * i + 1;
return p;
}

121:デフォルトの名無しさん
11/11/08 22:49:00.35
>>118
URLリンク(ideone.com)

122:デフォルトの名無しさん
11/11/08 23:05:06.04
>>118
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tag_wordlist_t{
char *word;
int count;
struct tag_wordlist_t *next;
}wordlist_t;
int main(void){
char a[]="バナナ リンゴ スイカ バナナ", *p, buf[100+1];
int n;
wordlist_t *first=NULL, *last=NULL, *list_new, *it;
for(p=a;sscanf(p, "%100s%n", buf, &n)>=1;p+=n){
for(it=first;it;it=it->next){
if(strcmp(it->word, buf)==0){
it->count++;
break;
}
}
if(it==NULL){
list_new=malloc(sizeof(wordlist_t));
list_new->word=strdup(buf);
list_new->count=1;
list_new->next=NULL;
if(last) last=last->next=list_new;
else first=last=list_new;
}
}
for(it=first;it;it=it->next) printf("%s %d\n", it->word, it->count);
return 0;
}

123:デフォルトの名無しさん
11/11/08 23:09:44.76
>>120じゃないけど詳しい解説を追加

/* size_tは符号無しの整数型、Cなら元を辿るとただのunsigned intだけど
長ったらしいし符号無しの標準として使えるように定義されてる、
正の整数を使うのが分かってる場合はsize_tを使う場合が多い、
また、コードへの意味合いとしても役立つ、
個数という意味で名前に n を使ってるからintでいいじゃん、最大値超えるデータも扱わないし、
なんて声もたまにあるが、型に意味を持たせるのも非常に大事 */
int *oddalloc(size_t n)
{
  int *p;
  size_t i;
  p = (int *) malloc(sizeof(int) * n);
  if (p)
    for (i = 0; i < n; i++)
      p[i] = 2 * i + 1;
  /* malloc()関数は成功すると確保した配列の先頭アドレスを返すが、失敗するとNULLを返す、
    配列への代入は失敗時は通らないので問題ない、
    またコードの美しさの点でも分岐が少ない方が良い事からこのような書き方になってる、と思う。 */
  return p;
}

124:デフォルトの名無しさん
11/11/08 23:11:57.79
>>123
もっとよく調べるんだ

125:デフォルトの名無しさん
11/11/08 23:54:51.28
>>65
有難う御座います

126:デフォルトの名無しさん
11/11/09 07:36:40.36
どなたかお願いします。

[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): 与えられた任意の長さのアルファベットの文字列(ただし
重複する文字は含まないとする)に対して、文字を任意の順番に入れ替えてできる
文字列のパターンをすべて出力する関数permute()を作成せよ。

例:
permute("ABC");
ABC ACB BAC BCA CAB CBA

[3] 環境
 [3.1] OS:Mac OS X
 [3.2] コンパイラ名とバージョン:gcc 4.2.1
 [3.3] 言語:C
[4] 期限:不明
[5] その他の制限:

127:デフォルトの名無しさん
11/11/09 10:18:43.25
>>126
URLリンク(codepad.org)
もう少しなんとかなりそうな気はするんだが....

128:デフォルトの名無しさん
11/11/09 15:38:27.96
>>126
力技
URLリンク(ideone.com)

129:114
11/11/09 17:27:47.66
>>117 指摘ありがとうございます 
tolowerでしたのでこちらでおねがいします 
期限は今日中までにしますのでよろしくです

130:デフォルトの名無しさん
11/11/09 18:00:00.64
>>114 >>116 >>129
URLリンク(ideone.com)


131:114
11/11/09 18:30:24.45
>>130
ありがとうございます

132:デフォルトの名無しさん
11/11/09 18:50:26.83
[1] 授業単元:プログラミング演習 2
[2] 問題文(含コード&リンク)
main関数の中で
char cs[] [6] = {"Turbo", "NA", "DOHC"};
と配列csが初期設定されています。このとき
$ gcc -o report3 report3.c
$ ./report3
st[0] ==> "obrut"
st[1] ==>"an"
st[2] ==>"chod"
と画面に表示するCプログラムreport3.cを書いてください。
[3.1] OS: unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:11月9日(出来れば早めにお願いします)
よろしくお願いします。

133:デフォルトの名無しさん
11/11/09 19:02:37.00
>>132
>>114,130

134:デフォルトの名無しさん
11/11/10 00:20:48.60
[2] 問題文(含コード&リンク):
1:キーボードから自然数 m と n を読み込む. 2:0 以上 1 未満の一様乱数 n 個の平均値を計算して、実行例ように表示. 3:この 2:の操作を m 回繰り返す.
実行例
> ./ex06-3
繰り返し回数を入力: 10
乱数の個数を入力: 100
回 平均
1 0.509034
2 0.488603
3 0.485044
4 0.473806
5 0.503660
6 0.519470
7 0.477955
8 0.536236
9 0.516652
10 0.467380
>
この動作をするプログラムを作成せよ。乱数は疑似乱数発生関数 drand48 を用いる.この関数は呼び出すたびにdrand48() を 3 回呼び出すと,drand48() の生成した三つの乱数がそれぞれ変数 x, y, z に格納される.
double x, y, z; x = drand48(); y = drand48(); z = drand48();
この関数を用いるプログラムは,冒頭に #include <stdlib.h> と記述
[3] 環境
 [3.1] OS: Mac
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2011年11月14日
[5] その他の制限:for文while文の範囲です。

135:デフォルトの名無しさん
11/11/10 00:26:24.28
[2] 問題文(含コード&リンク):
漸化式を考える.x_n+1 = (x_n + a / x_n) / 2
初項 x_0 = a
double 型変数 xn と xn1 を用意する.キーボードから正の実数 a と e を読み込む.初項 a の値を変数 xn に代入し,実行例のように 0 回目の繰り返しの途中経過を指数形式で小数点以下 16 桁まで表示する.漸化式に従って xn の次項を求め,
その値を変数 xn1 に代入する.x_n1 と x_n の差を調べ,漸化式が収束したかどうかを判定する.x_n1 と x_n の差の絶対値が e 以上であれば,漸化式はまだ収束していないと考える.
この場合には,x_n1 の値を x_n に代入してから以下の実行例のように繰り返しの途中経過を表示する.漸化式に従って x_n の次項を求め,その値を変数 x_n1 に代入し,5. を繰り返す.
x_n1 と x_n の差の絶対値が e よりも小さければ,漸化式は収束したものとみなす.この場合には xn1 と sqrt(a) を表示する.
実行例
> gcc -o ex06-4 ex06-4.c -lm
> ./ex06-4
正の実数を入力: 1.234567890
解の精度を入力: 1.0e-15
回 近似値
0 1.2345678899999999e+00
1 1.1172839450000001e+00
2 1.1111281580953725e+00
3 1.1111111061864010e+00
4 1.1111111060555556e+00
5 1.1111111060555556e+00
sqrt 1.1111111060555554e+00
>
この動作をするプログラムを作成せよ
[3] 環境
 [3.1] OS: Mac
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2011年11月14日
[5] その他の制限:for文while文の範囲です。

136:デフォルトの名無しさん
11/11/10 00:29:12.30
[1] 授業単元:基礎プロ
[2] 問題文(含コード&リンク):
整数型の変数 i の値を 1 から k まで順に変化させ,以下を繰り返す.
n に i の値を代入する.
n が偶数のときは n を 2 で割った値を n に代入する.
n が奇数のときは n を 3 倍して 1 を加えた値を n に代入する.
n の値が 1 になるまで b. の操作を繰り返す.
i ごとに繰り返した回数を以下の実行例のように出力する.
実行例
>./extra06-2
自然数を入力: 4
1: 0
2: 1
3: 7
4: 2
>
この動作をするプログラムを作成せよ
[3] 環境
 [3.1] OS:Mac
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2011年11月14日
[5] その他の制限:for文while文の範囲です。


137:デフォルトの名無しさん
11/11/10 00:30:18.39
[1] 授業単元:基礎プロ
[2] 問題文(含コード&リンク):
キーボードから自然数 n を読み込む.
読み込んだ自然数 n の階乗を計算する.
計算結果を以下の実行例のように出力する.

実行例
>./extra06-1
自然数を入力: 5
5! = 1 x 2 x 3 x 4 x 5 = 120
>./extra06-1
自然数を入力: 6
6! = 1 x 2 x 3 x 4 x 5 x 6 = 720
>

この動作をするプログラムを作成せよ
[3] 環境
 [3.1] OS:Mac
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2011年11月14日
[5] その他の制限:for文while文の範囲です。




138:デフォルトの名無しさん
11/11/10 00:52:43.14
>>136
#include <stdio.h>

int main(void)
{
int i, j, k, n;

printf("自然数を入力:");
scanf("%d", &k);

for(i = 1; i <= k; i++) {
for(j = 0, n = i; n != 1; j++) n = n & 1 ? n * 3 + 1 : n >> 1;
printf("%d: %d\n", i, j);
}

return 0;
}

139:デフォルトの名無しさん
11/11/10 01:29:20.31
【質問テンプレ】
[1] 授業単元: 授業ではないのですが学校で使用するための勉強中
[2] 問題文(含コード&リンク):
////A.h////
class A{
private: int a;
public:void set();}

void A::set(){
A A1;
a = 1; }

////B.h//////
#include "A.h"
class B{
public:void get();}

void::get(){
ここで以前宣言したクラスAのA1のa=1を呼び出したいです。}

[3] 環境
 [3.1] OS: windows7
 [3.2] コンパイラ名とバージョン: visual c++ 2010?(無料のです)
 [3.3] 言語: c++
[4] 期限: 本日中
[5] その他の制限: 特になし(なるべく簡単でお願いします)

140:デフォルトの名無しさん
11/11/10 01:33:55.33
[1] 授業単元: Cプロ
[2] 問題文(含コード&リンク):
3行3列の行列aを入力後、余因子行列で行列値|a|を求める
[3] 環境
 [3.1] OS: (WindowsXP)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:AM6時までに。
[5] 余因子行列でお願いします


141:デフォルトの名無しさん
11/11/10 01:44:13.72
>>139
早乙女博士にゲッターを開発してもらう

142:デフォルトの名無しさん
11/11/10 02:12:44.48
>>141
class B内で
A A1;
A1.get();
ですか?

143:デフォルトの名無しさん
11/11/10 02:28:31.10
>>140
#include <stdio.h>
int main(void){
int m[3][3], i, det;
for (i = 0; i < 3; i++) {
printf("a%d1 a%d2 a%d3 = ", i + 1, i + 1, i + 1);
scanf("%d %d %d", &m[i][0], &m[i][1], &m[i][2]);

det = m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
- m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])
+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
printf("%d", det);
}
return 0;
}

144:140
11/11/10 03:27:30.01
>>143
ありがとうございます

145:デフォルトの名無しさん
11/11/10 03:56:29.23
>>137
#include<stdio.h>
int main(void)
{
int n,i;
double ret=1;
printf("自然数を入力: ");
scanf("%i",&n);
printf("%d! = 1",n);
for (i=2 ; i<=n ; i++) {
ret *= i;
printf(" x %d",i);
}
printf(" = %-14.0lf¥n",ret);
return 0;
}


146:デフォルトの名無しさん
11/11/10 09:58:01.38
>>139
どういう誤解をしているのか理解できない
A1.a に値はセットされていないし、A1 自体 A.set() のスコープ内にしか存在しない
何を目指しているのか判らないのでどうすれば良いかも判らない

147:デフォルトの名無しさん
11/11/10 14:19:07.55
1] 授業単元: Cプロ
[2] 問題文(含コード&リンク):文字列st の中に含まれる文字ch の個数(含まれて
いなければ0 とする)を返す関数
int str_chnum(const char st[], int ch)
を作成せよ.
以下の実行例のように,関数の動作を確認
できるmain 関数も作成して完成させよ
【実行例】文字列を入力してください:Koukka
検索する文字を入力してください:k
その文字は2 個含まれています。
(注意)】scanf で文字列を入力させた後にgetchar 関
数で文字を入力させたい場合,getchar で文字を入力
させる前に
scanf("%*c");
などとして,バッファに残った改行コードを読み捨て
ておく必要がある.

[3] 環境
 [3.1] OS: (WindowsXP)
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:AM7時までに。
[5] ポインタはなしでお願いします

148:デフォルトの名無しさん
11/11/10 14:42:59.75
>>147
URLリンク(ideone.com)

149:デフォルトの名無しさん
11/11/10 14:44:24.11
>>147
前スレくらいにやったな

#include <stdio.h>
#include <string.h>
int str_chnum(const char *st,int ch){
int index=0, count=0;char *p = 0;
do{p = strchr(&st[index],ch);}while
(p&&(count++,index=p-st+1));return count;}
int main(void){char buf1[100];int buf2;
printf("文字列を入力してください:");fgets(buf1,100,stdin);putchar('\n');
printf("検索する文字を入力してください");buf2 = getc(stdin);putchar('\n');
printf("その文字は%d個含まれています。\n",str_chnum(buf1,buf2));
}


150:140
11/11/10 15:05:06.74
>>140の余因子行列の計算部分を、for文で可能でしょうか?

151:デフォルトの名無しさん
11/11/10 15:20:09.53
>>150

det = m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
- m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])
+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);



for(det = m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])
- m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])
+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);0;);

152:デフォルトの名無しさん
11/11/10 15:31:36.45
>>140,150
#include <stdio.h>
int
main(void)
{
int m[3][3] = {}, i, det = 0;
for (i = 0; i < 3; i++) {
printf("a%d1 a%d2 a%d3 = ", i + 1, i + 1, i + 1);
scanf("%d %d %d", &m[i][0], &m[i][1], &m[i][2]);
}

for (i = 0; i < 3; i++)
det += m[0][i] * (m[1][(i + 1) % 3] * m[2][(i + 2) % 3] - m[1][(i + 2) % 3] * m[2][(i + 1) % 3]);
printf("%d¥n", det);

return 0;
}

153:デフォルトの名無しさん
11/11/10 15:38:47.45
>>140,150
こっちのほうが見やすいか。
#include <stdio.h>
int main(void){
int m[3][3] = {}, i, det = 0;
for (i = 0; i < 3; i++) {
printf("a%d1 a%d2 a%d3 = ", i + 1, i + 1, i + 1);
scanf("%d %d %d", &m[i][0], &m[i][1], &m[i][2]);
}
for (i = 0; i < 3; i++) {
det += m[0][i] * (m[1][(i + 1) % 3] * m[2][(i + 2) % 3]);
det -= m[0][i] * (m[1][(i + 2) % 3] * m[2][(i + 1) % 3]);
}
printf("%d¥n", det);
return 0;
}

154:デフォルトの名無しさん
11/11/10 15:51:44.21
[1]
int型整数 x に対して、その3乗の値 x3 を返す関数 int cube(int x) を作成せよ。
そしてcubeを用いて、1から10までの整数の3乗値を出力するプログラムを作成せよ。


[2]
一つの行に、n個の “ “(空白)に続いてm個の “*”を順番に出力する関数 void putzs(int n, int m)を作成せよ。
更にこれを用いて no段のピラミッドを描くプログラムを作成せよ。


no=3の場合

*
***
*****




よろしくお願いします。


155:デフォルトの名無しさん
11/11/10 16:18:09.06
>>154
URLリンク(ideone.com)

156:デフォルトの名無しさん
11/11/10 16:26:10.39
>>154
[1]
#include <iostream>
int cube(int x){return x*x*x;}
main(){for(int x=1;x<=10;x++){std::cout << cube(x) <<std::endl;}}

[2]
#include <string>
#include <iostream>
void putzs(int n,int m){n&&std::string s;s.append(n,' ');m&&s.append(m,'*');
std::cout << s << endl;}
main(){int no=3;for(int m=1;m<=no*2-1;m+=2){putzs(0,m);}}

157: ◆SCJwtK.IhE
11/11/10 19:31:50.61
[1] 授業単元: 文字列
[2] 問題文(含コード&リンク):
char str[] = "Hello!\n";
と宣言している状態で、
printf(&str[i]);
(iは0~8)のようにprintf関数を使用した際の&strは何を意味しているか
[3] 環境
 [3.1] OS:unix
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:c
[4] 期限:11/10 22:00までに
[5] その他の制限:出来るだけ具体的に

158: ◆SCJwtK.IhE
11/11/10 19:34:41.53
[1] 授業単元:文字列
[2] 問題文(含コード&リンク):C言語プログラムにおける「文字列」の
実態は何か答えよ。

[4] 期限: 11/10 22:00
[5] その他の制限:具体的に

159:デフォルトの名無しさん
11/11/10 19:40:33.13
>>158
文字列

160:デフォルトの名無しさん
11/11/10 19:47:36.20
>>157
&str[8]は悪魔を召喚するコード

161:デフォルトの名無しさん
11/11/10 19:48:24.88
>>158
文字の配列
ってか、入門書に載ってるだろ


162: ◆SCJwtK.IhE
11/11/10 19:48:30.77
[1] 授業単元:文字列
[2] 問題文(含コード&リンク):
char str[] = "Hello!\n";
と宣言している状態で、
printf("Hello!\n");
printf("%s",str);
printf(str);
とprintf関数を使用した際の結果を、類推されるprintf関数の処理の流れに基づいて説明せよ。
(全て Hello! と出力された)

[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: c
[4] 期限: 今日中
[5] その他の制限:具体的に

163:デフォルトの名無しさん
11/11/10 19:51:40.13
>>162
マルチすると嫌われるぞ

164:デフォルトの名無しさん
11/11/10 20:55:05.20
>>151-153
ありがとうございました。助かりました。

165:デフォルトの名無しさん
11/11/10 21:58:57.86
>>161
別に配列である必要もないだろ

166:デフォルトの名無しさん
11/11/10 22:10:13.85
>>165
教師の求めてる答えとしては、これが妥当だと思うが…
代わりに答えてくれろ


167:デフォルトの名無しさん
11/11/10 22:29:04.37
>>166
文字が連続したメモリ領域

168:デフォルトの名無しさん
11/11/10 22:39:09.86
1文字でも文字列だし、null 終端のことも。

169:126
11/11/10 22:50:15.11
>>127 >>128 さん、ありがとうございます。しかしこんなのすぐに思いつけるなんて
すごいです。過去の経験からコードのパターンのいろんな引き出しをお持ちなのか、
あるいはいきなりできてしまうものなのか...

で、一応自分に出された課題なのでw アルゴリズムを理解する努力をしてみましたw

>>127さんのは、順列組み合わせの列挙を再帰で実現する感じですかね? 既に選択した
文字を記録する配列を保持しておくと... なるほど。

>>128さんのは、進数と桁数がある値(この場合はどちらも入力した文字列の長さ)の
数字を網羅するループで、全ての桁の数が異なる場合出力する、みたいな感じですかね?
ただ、各桁の3乗の和? みたいのを比較してなぜうまくいくのかよくわからないのですが...
もしかしてこれって数学的な定理かですか? 例えば
x, y, zはそれぞれ 0,1,2のどれかで互いに異なる <=> x^3+y^3+z^3 = 0^3+1^3+2^3
みたいな?

170:デフォルトの名無しさん
11/11/10 22:55:06.72
>>162
「K&R第二版p.189可変引数リスト」の内容そのまんま答えればOK。
第二引数移行は可変引数として一括したバイト列として取得され、
第一引数の文字列内に現れる変換仕様に従って
1変数とみなされるバイトサイズとその型ごとに切り刻まれる。
取り出された値は文字に変換され、変換仕様と置換された後、
標準ストリームに出力される。

printf("Hello!\n");は第一引数のみなので
文字列がそのまま標準ストリームに出力される。

printf("%s",str);は第一引数の変換仕様%sにより
第二引数(以降)の最初のデータは終端文字を持つ文字の配列とみなされ、
文字列に変換され%sと置換された後、標準ストリームとやらないか。

printf(str);は str が第一引数であり、変換使用をふくまないため、
そのまま文字列として標準ストリームに出力されまみた。

171:デフォルトの名無しさん
11/11/10 23:04:43.34
そんな中途半端なことせずにJISなりISOなりの規格を参照しろ

172:デフォルトの名無しさん
11/11/10 23:09:42.17
>>169
2乗和だと、例えば05と34とが互いに区別不可。
3乗和なら、少なくとも9桁内で目的の数値間で区別出来る。

173:デフォルトの名無しさん
11/11/10 23:13:52.22
>>171
JISのサイト、最新のAdobe Readerだと見られないんだもん。
あとは英語で書くしかない。俺は英語ぺらぺーラだけど三流大学の教授なんて
日本語もあやしかろ? つかどうせ教授じゃなくて臨時講師とか。ワロス

174:デフォルトの名無しさん
11/11/11 00:09:48.65
[1] 授業単元:文字列
[2] 問題文(含コード&リンク):
入力した時間と分を長針と短針で示す
アナログ時計を作れ。
[3] 環境
 [3.1] OS: windows7
 [3.2] コンパイラ名とバージョン: bcc5.11
 [3.3] 言語: c
[4] 期限: 11月14日
[5] その他の制限:windouwsAPIなどは使わずに、
普通のC言語でお願いします。

175:デフォルトの名無しさん
11/11/11 01:24:42.17
>>174
URLリンク(ideone.com)

176:デフォルトの名無しさん
11/11/11 01:33:44.98
>174

まともにやったら、すげー手間かかると思うのだが、なんか間違ってないか?

177:デフォルトの名無しさん
11/11/11 01:39:18.62
>>174
丸時計を50×50位のAAで出力?

178:デフォルトの名無しさん
11/11/11 03:30:35.12
>>172
そうですかー。興味深いですね。
もしかして楕円曲線上の整数解がどうたらとかと関係あるのかなあ。

179:デフォルトの名無しさん
11/11/11 11:15:00.50
>>168
電文なんかの固定長データに含まれる文字列は NULL 終端である必要も無い
NullTerminated strings は文字列の一種に過ぎない

180:デフォルトの名無しさん
11/11/11 11:21:41.78
>>179
設問は、
>C言語プログラムにおける「文字列」の実態は何か答えよ。

181:デフォルトの名無しさん
11/11/11 11:33:28.68
[1] 授業単元:
[2] 問題文(含コード&リンク):
ファジィ推論のプログラム
[3] 環境
 [3.1] OS: (Windows7 32bit)
 [3.2] コンパイラ名とバージョン: Ms Visual Web Developer 2010)
 [3.3] 言語: (C++)
[4] 期限: 無期限)
[5] その他の制限:

URLリンク(www.sist.ac.jp)
こちらのプログラムをビルドしたら以下のエラーが出ました。

1>fz.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall Fuzzy::~Fuzzy(void)" (??1Fuzzy@@QAE@XZ) が関数 _main で参照されました。
1>fz.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall Fuzzy::Fuzzy(char *)" (??0Fuzzy@@QAE@PAD@Z) が関数 _main で参照されました。
1>C:\Users\2ch\Documents\Visual Studio 2010\Projects\fuzzy\Debug\fuzzy.exe : fatal error LNK1120: 外部参照 2 が未解決です。

main関数でエラーが出たのは分かるんですが・・・ソースは次レスにて
宜しくお願いします

182:デフォルトの名無しさん
11/11/11 11:37:19.47
#include <stdio.h>
#include <stdlib.h>
#include "fuzzy.h"

int main(int argc, char *argv[])
{
double *x, **xx, y; int i1, i2, n_d, n_val;
FILE *in, *out;
if (argc == 4) {Fuzzy fz(argv[1]);
in = fopen(argv[2], "r");
fscanf(in, "%*s %d %*s %d", &n_val, &n_d);
x = new double [n_val]; xx = new double * [n_val];
for (i1 = 0; i1 < n_val; i1++) {fscanf(in, "%*s");
xx[i1] = new double [n_d];
for (i2 = 0; i2 < n_d; i2++)
fscanf(in, "%lf", &xx[i1][i2]);}
fclose(in);
out = fopen(argv[3], "w");
for (i1 = 0; i1 < n_d; i1++) {for (i2 = 0; i2 < n_val; i2++) {
x[i2] = xx[i2][i1]; fprintf(out, "%f ", x[i2]);}
y = fz.Inf(x); // 推論
fprintf(out, "%f\n", y);}
fclose(out);}

else {printf("***error 入力データファイル名を指定して下さい\n");
exit(1);}
return 0;}

183:デフォルトの名無しさん
11/11/11 11:49:52.36
すみません、それとヘッダーファイルです。

class Fuzzy {
double ***left; // [i][j][0] : 中心
// [1] : 幅
double **right; // [i][0] : 中心
// [1] : 幅
double *omega; // ωの値
int bun; // 積分の分割数
int method; // 推論方法
// =0 : and,or
// =1 : *,or
// =2 : *,+
int n_rule; // 規則の数
int n_val; // 変数の数
int **rule; // [i][j] =0 : i番目の規則はj番目の変数を使用しない
// =1 : i番目の規則はj番目の変数を使用する
public:
Fuzzy(char *); // コンストラクタ
~Fuzzy(); // デストラクタ
double Cross(double, double, double, double);
double Height(double, double *);
double Inf(double *); // 推論の実行
double Result(double *);
};

184:デフォルトの名無しさん
11/11/11 11:58:24.84
>>180
電文を扱うプログラム等では NULL 止めではない文字領域も文字列として扱ってるって話なんだけど?

185:デフォルトの名無しさん
11/11/11 12:03:54.18
>>184
標準関数が、電文の事を考慮して作ってあるなら、それでいいよ

186:デフォルトの名無しさん
11/11/11 12:05:35.47
これを訳せばいいのでは?

7.1.1 Definitions of terms
1 A string is a contiguous sequence of characters terminated by and including the first null
character. The term multibyte string is sometimes used instead to emphasize special
processing given to multibyte characters contained in the string or to avoid confusion
with a wide string. A pointer to a string is a pointer to its initial (lowest addressed)
character. The length of a string is the number of bytes preceding the null character and
the value of a string is the sequence of the values of the contained characters, in order.

187:デフォルトの名無しさん
11/11/11 12:06:41.67
>>180
Str255だってC言語プログラムにおける「文字列」だな
Null終端だけがCの文字列ってのは思い違いじゃね?

188:デフォルトの名無しさん
11/11/11 12:08:03.88
事故解決しました。
ソースファイルをプロジェクトフォルダ内に移動したところ
無事にビルド出来ました。
スレ汚しみません。


189:デフォルトの名無しさん
11/11/11 12:08:43.38
>>185
やっぱり思い違いだな

190:デフォルトの名無しさん
11/11/11 12:09:11.88
>>187

約束事を決めれば、どう言う形式でも文字列としては処理できるけど、

文字列を処理する標準関数で、そういうフォーマットを扱っているかどうかでしょ

191:デフォルトの名無しさん
11/11/11 12:12:39.97
>>181
コンストラクタとデストラクタをリンクしてないんだろ

192:デフォルトの名無しさん
11/11/11 12:14:12.73
>>190
面倒だからcharの配列でいんじゃね?

193:デフォルトの名無しさん
11/11/11 12:21:28.44
>>181
VSにソースファイルをD&Dしてビルドしようとしていたのが原因だったみたいです。
ファイルをプロジェクトフォルダに移動したらエラーは解消しました。
レス有難う御座います。


194:181
11/11/11 12:24:39.86
申し訳ない・・・>>191さんでした。有難う御座います

195:デフォルトの名無しさん
11/11/11 12:24:52.22
>>193
どうでもいいけど、ここで聞く前に隣の人に聞くとかできなかったん?

196:181
11/11/11 12:34:51.56
>>195
質問できるような友人がいないんですよ・・・
察して下さい

197:デフォルトの名無しさん
11/11/11 12:46:35.54
>>196
C言語なら俺に聞け(入門編)Part 92
スレリンク(tech板)

198:デフォルトの名無しさん
11/11/11 12:57:37.51
>>190
標準関数になんて束縛されないだろ

199:デフォルトの名無しさん
11/11/11 13:00:08.37
>>198
ここは宿題スレ

200:デフォルトの名無しさん
11/11/11 13:11:28.27
>>199
そんなこと関係ないぞ

201:デフォルトの名無しさん
11/11/11 13:13:31.92
>>199
てか、自分の思い違いを「世間ではそう教えてる」みたいな言い訳でごまかそうという方がおかしいだろ。
ちょっと齧ればNull終端じゃない文字列なんてあちこちのライブラリで使われてるぞ。
Null終端だけがCの文字列なんて教える講師はいないだろ。

202:デフォルトの名無しさん
11/11/11 13:15:16.59
スレ違い。他所でやれ。

203:デフォルトの名無しさん
11/11/11 13:18:35.09
>>202
>>158
ずっと宿題の話ですよ

204:デフォルトの名無しさん
11/11/11 13:23:38.56
「思い」だけぶちまけられても質問者には迷惑。
結論と根拠を明示すればいいだけの事。

205:デフォルトの名無しさん
11/11/11 13:25:38.75
設問が大雑把過ぎるんだな。
「実態」という言葉の解釈で答えに幅が出る。

206:デフォルトの名無しさん
11/11/11 13:26:08.38
>>204
>>180に言えよ。事の発端だろ。

207:デフォルトの名無しさん
11/11/11 13:33:16.96
>>205
>>157>>162もセットで考えたら
NULL終端文字列についてで正解だろうな

208:デフォルトの名無しさん
11/11/11 14:03:18.24
strncpy() は NULL 終端を前提としてないよ

問題が大雑把だし、講師がちゃんと理解してるんだろうかって思う
ちゃんと『実態』を理解してたらこんな設問しないだろ

209:デフォルトの名無しさん
11/11/11 14:11:44.99
試験問題というのは設問者が求めている答えは何かを探るものであって
気の利いた解答を考えるものではないって、ワンバーグちゃんがいってただろ^^

ここはナル文字終端を持つchar配列って答えとけばいいんだよ
そして心のなかで「設問がクソだなぁ、ああこの人に学んでも何もエルモのないんだろうなぁ。セントエルモ」
って思っときゃいーんだよ。

210:デフォルトの名無しさん
11/11/11 14:13:19.30
宿題スレは、出題者のレベルに合わせて解答すれば、100点。

211:デフォルトの名無しさん
11/11/11 14:16:13.58
[1] 授業単元:プログラミング入門
[2] 問題文:秒数を与えると,それが何日何時間何分何秒にあた
るかを計算する関数
calctime(long sec, int *dp, int *hp, int *mp,
int *sp);
を作成せよ.例えば
calctime(100000, &d, &h, &m, &s);
として呼び出すとd=1, h=3,m=46,s=40 となる
(100,000 秒=1 日3 時間46 分40 秒).以下の実行例の
ように,関数の動作を確認できるmain 関数も作成しろ
実行例.秒数を入力してください:100000
100000 秒= 1 日3 時間46 分40 秒
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 11月14日 18:00
[5] その他の制限:



212:デフォルトの名無しさん
11/11/11 14:37:17.47
void calctime(long sec, int *dp, int *hp, int *mp, int *sp)
{
*sp = sec % 60; sec /= 60;
*mp = sec % 60; sec /= 60:
*hp = sec % 24; *dp = sec / 24;
}


213:デフォルトの名無しさん
11/11/12 00:01:18.29
>>177
30×30くらいでお願いします><

>>176
間違ってませんよ

214:デフォルトの名無しさん
11/11/12 00:15:58.15
>>174
URLリンク(codepad.org)

215:デフォルトの名無しさん
11/11/12 00:36:41.54
>>214
ありがとうございます><
ところでどうして長針を@、短針を*にされたのですか?

216:デフォルトの名無しさん
11/11/12 00:39:19.40
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):sinカーブを縦に描画するプログラムを作れ。0度から360度までの範囲を描画し、
縦軸と横軸も描画すること。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gccなのは確かなのですが、具体的には分かりません
 [3.3] 言語: C
[4] 期限:2011年11月16日まで
[5]その他の制限:ポインタ使用不可
よろしくお願いします

217:デフォルトの名無しさん
11/11/12 00:41:38.89
>>215
その話を聞きたくば1000万円用意しろ
用意が出来たら写真うp!

218:デフォルトの名無しさん
11/11/12 00:44:00.91
>>217
嫌です(^q^)

219:デフォルトの名無しさん
11/11/12 01:13:37.71
>>216
main(){
puts("--*--");
puts(" | *");
puts("--*--");
puts("* | ");
puts("--*--");
}


220:デフォルトの名無しさん
11/11/12 04:47:04.02
1-3+5-7•••っていうのを20回繰り返すというプログラムを教えて下さい。
あれを20回繰り返すと答えは-20になります。それで式もちゃんと表示させなくては
いけないんです・・・つまり1-3+5-7•••=-20ってかんじです。出来れば<stdio.h>でfor
とifで組んでください。

221:デフォルトの名無しさん
11/11/12 05:10:38.29
>>220
URLリンク(codepad.org)
こんな時間だから答えちゃうけど
次からは>>1-2読んでテンプレ使おうな

222:デフォルトの名無しさん
11/11/12 13:06:03.64
>>216
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
#define DEG_RAD(x) (((x)*PI)/(180))
int main()
{
double d;
const int p = 30;
double s;
puts(" --------------------------------------------");
for(d = 0; d<370;d+=10){
s = sin(DEG_RAD(d));
s *=10;
if(d<=180){
if(d == 0 || d == 180)
printf("%*c%*c%c\n",p,' ',(int)s,' ','*');
else
printf("%*c%c%*c%c\n",p,' ','|',(int)s,' ','*');
}else if(180 < d ){

s = fabs(s);
if(d == 360)
printf("%*c%*c%c\n",p-(int)s,' ',(int)s,' ','*');
else
printf("%*c%c%*c\n",p-(int)s,' ','*',(int)s,'|');
}

}
return 0;
}

223:デフォルトの名無しさん
11/11/12 13:49:23.38
>>222
ありがとうございます!

224:デフォルトの名無しさん
11/11/12 13:55:24.64
>>219
出題の条件は満たしてる
出題の不備を問う意味で提出するのは面白いかもしれない

225:デフォルトの名無しさん
11/11/12 16:30:41.41
依頼者が問題の条件を見落としているか、書き忘れていそうな気がする。

226:デフォルトの名無しさん
11/11/12 22:48:21.79
[1] 授業単元:アルゴリズム
[2] 問題文:
重複順列についてです。
A~Gなどの7つ以上の要素から、6つ取り出して並べるときの、全ての組み合わせを出す。
例)AAAAAA,
AAAAAB,
AAAAAC,...
AAAABA,...
(実際に全て出さなくても、出すことができるコードが出来ていれば可)
              
[3] 環境
 [3.1] OS:windows7
 [3.2] コンパイラ名とバージョン:Visual C++ 2010 Express
 [3.3] 言語:どちらでも可
[4] 期限:11月16日
[5] その他の制限:特にありません。

問題文として文章があったわけではないので、説明が分かりにくい部分がありましたら申し訳ありません。
よろしくお願いします。

227:デフォルトの名無しさん
11/11/12 23:10:26.88
>>226
#include <iostream>
#include <string>

using namespace std;

const string X("ABCDEFG");
const size_t L = 6;

void rep_perm(string &s)
{
if (s.length() == L) {
cout << s << endl;
} else {
for (size_t i = 0; i < X.length(); ++i) {
s += X[i];
rep_perm(s);
s.erase(s.end() - 1);
}
}
}

int main()
{
string s;
rep_perm(s);
return 0;
}

228:デフォルトの名無しさん
11/11/12 23:27:00.58
>>226
#define PATT 7
#define KETA 6
int main()
{
int n = 0;
int a[KETA+1] ={0};
while (1) {
int i;
int x;
n++; x = n;
for (i=0;i<KETA+1;i++){
a[i] = x % PATT;
x -= a[i]; x /= PATT;
}
if (a[KETA] == 1) break;
for (i=KETA-1;i>=0;i--) printf("%c",'A' + a[i]);
printf("\n");
}
return 0;
}

229:デフォルトの名無しさん
11/11/12 23:53:04.81
>>226
#include <stdio.h>

int main(void)
{
int i;
char str[] = "AAAAAAA";

for( ; ; ) {
printf("%s\n", str);
for(i = sizeof str - 2; ; i--) {
if(++str[i] <= 'F') break;
str[i] = 'A';
if(i == 0) return 0;
}
}
}

230:デフォルトの名無しさん
11/11/13 00:21:48.57
Boostのnext_combinationみたいに、
関数を呼び出す度に組み合わせを順に作り出す関数を設計して欲しい^o^
この関数、予めソートされた集合に対して適用すると、
ぐるっと一周した時点で戻り値が false となる。すごい^^

231:デフォルトの名無しさん
11/11/13 00:36:40.57
>>230
あるなら使えば?

232:デフォルトの名無しさん
11/11/13 01:34:13.19
Boost使ってるなら自分で実装しろよ

233:デフォルトの名無しさん
11/11/13 01:41:45.83
このスレの住人程度には実装は無理。
っていうか、Boostライブラリの中身を見てさえ理解出来ない。

234:デフォルトの名無しさん
11/11/13 01:43:38.89
>>233
中身を見て絶望しろ

235:デフォルトの名無しさん
11/11/13 01:46:07.59
それが宿題で出るといいね

236:デフォルトの名無しさん
11/11/13 05:27:45.69
>>226
#include <stdio.h>

int main(void)
{
int i, j, k, l, m, n;
char str[7] = {0};

for(i = 'A'; i <= 'G'; i++) {
str[0] = i;
for(j = 'A'; j <= 'G'; j++) {
str[1] = j;
for(k = 'A'; k <= 'G'; k++) {
str[2] = k;
for(l = 'A'; l <= 'G'; l++) {
str[3] = l;
for(m = 'A'; m <= 'G'; m++) {
str[4] = m;
for(n = 'A'; n <= 'G'; n++) {
str[5] = n;
printf("%s\n", str);
} } } } } }

return 0;
}

237:デフォルトの名無しさん
11/11/13 06:51:45.30
>>229
要素数と並べる数逆になってた

#include <stdio.h>

int main(void)
{
int i;
char str[] = "AAAAAA";

for( ; ; ) {
printf("%s\n", str);
for(i = sizeof str - 2; ; i--) {
if(++str[i] <= 'G') break;
str[i] = 'A';
if(i == 0) return 0;
}
}
}

238:デフォルトの名無しさん
11/11/13 07:00:14.93
>>226,236
どうせなら、
#include <stdio.h>

int main(void)
{
char str[7] = {0};

for(str[0] = 'A'; str[0] <= 'G'; str[0]++) {
for(str[1] = 'A'; str[1] <= 'G'; str[1]++) {
for(str[2] = 'A'; str[2] <= 'G'; str[2]++) {
for(str[3] = 'A'; str[3] <= 'G'; str[3]++) {
for(str[4] = 'A'; str[4] <= 'G'; str[4]++) {
for(str[5] = 'A'; str[5] <= 'G'; str[5]++) {
printf("%s¥n", str);
}}}}}}

return 0;
}

239:デフォルトの名無しさん
11/11/13 07:13:50.52
直接やると添え字の関係で誤差レベルだけどほんのちょっとだけ遅くなるかも

240:デフォルトの名無しさん
11/11/13 07:17:10.56
>>226
再帰で。
#include <stdio.h>

void func(char*s)
{
if(!*s) {
printf("%s¥n",s-6);
return;
}
for(*s='A'; *s<='G'; (*s)++)
func(s+1);
}

int main(void)
{
char s[]="AAAAAA";
func(s);
return 0;
}

241:デフォルトの名無しさん
11/11/13 07:29:14.09
>A~Gなどの7つ以上の要素から
などの
とある以上要素をどう入力するかの問題を含むのではないか。

242:デフォルトの名無しさん
11/11/13 07:55:47.24
>>241
どんな要素をだね。


243:デフォルトの名無しさん
11/11/13 08:03:51.59
>>226,241
これならOKか?
#include <stdio.h>

void func(char *s, int i)
{
static char x[20] = {};
char *p;

if (i < 6)
for (p = s; *p; p++) {
x[i] = *p;
func(s, i + 1);
}
else
printf("%s¥n", x);
}

int main(void){
char s[20];

printf("input = ");
scanf("%s", s);
func(s, 0);

return 0;
}

244:226
11/11/13 12:47:17.09
>>227,>>228,>>229,>>236,>>237,>>238,>>240,>>243
みなさんありがとうございます。

ちなみに、後付になってしまい申し訳ないのですが、
更にこれの結果をテキストファイルなどで、1パターン1行として
出力するにはどういったコードを追加すれば良いか、教えていたいてもよろしいでしょうか。
よろしくお願い致します。

245:デフォルトの名無しさん
11/11/13 12:49:14.33
>>244
このまま、出力をファイルにリダイレクト

246:デフォルトの名無しさん
11/11/13 14:09:41.63
[1] 授業単元:プログラミングと実習2
[2] 五目並べの石を並べる関数を作りる
条件
1.読み込み部分を関数化する。場所の指定は、行(row,大文字)、
列(column,小文字)の順として連続した半角アルファベットとする。
例:Aa↓,Gg↓(↓はEnter)とする。
読み込んだ結果はA~Zが0~25,a~zが0~25とする
 出力例Bg
row=1
columnp=6
3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン: Visual C++ 2008 Express
 [3.3] 言語:C言語
[4] 期限:11月15日
[5]その他の制限:アルファベットを整数値に変換して*rowp,*columnpに
        格納し*rowo,*columnpの値を評価するプルグラムを作る

どうかよろしくお願いします 

247:デフォルトの名無しさん
11/11/13 19:19:06.60
>246
rowp, columnpってポインタにする必要ある?

248:226
11/11/13 19:51:56.70
>>245
出来ました。
ありがとうございました。


249:デフォルトの名無しさん
11/11/13 20:18:11.15
>>247
そういう課題なんだろ
得てして、そういう制限された課題は急に難易度が上がりがち



250:デフォルトの名無しさん
11/11/13 20:47:14.17
文字列を2つの整数にする関数を作れって話だろ

251:デフォルトの名無しさん
11/11/14 00:29:42.21
>>246
おまっとさんでした
URLリンク(codepad.org)

252:デフォルトの名無しさん
11/11/14 00:32:39.29
>>251
[2]

253:デフォルトの名無しさん
11/11/14 01:45:16.38
[1] 授業単元:計算機アルゴリズムⅠ
[2] 問題文(含コード&リンク):
設問1-1
変数iとポインタ変数p(「int i=8;int *p;p=&i;」のように宣言と代入する)に対し「printf("変数iの?は%X\n",p);printf("変数?の値は%d\n",*p);」を実行して値を表示するプログラムを作成しなさい。
但し「?」を適切な文字(列)に置換すること。ただし、%Xは16進数で表示を、%uは符号なし整数で表示を意味する。

設問1-2
2つの変数n1,n2(「int n1=24, n2=45;」と宣言する)の値を、それぞれを指すポインタnp1,np2(「int *np1=&n1, *np2=&n2;」と宣言する)を用いて交換した後、「printf("n1=%d,n2=%d\n",n1,n2);」で交換後のn1とn2の値を表示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Windows vista
 [3.2] コンパイラ名とバージョン:visual studio 2008
 [3.3] 言語:C
[4] 期限:[2011年11月18日8:00まで]
[5] その他の制限:変数、算術演算、printf、scanf、繰り返し処理while文、do-while文
            繰り返し処理for文、繰り返し処理for文による総和の計算、配列変数
            条件分岐if文、要素番号idx使用の書換、データの入れ替え
            条件分岐・論理演算子を用いたif文の条件、if文、else if文
            switch文、ポインタ変数・演算子*と&は習いました。
宜しくお願いします。

254:デフォルトの名無しさん
11/11/14 02:15:28.47
>> 2つの変数n1,n2の値を、それぞれを指すポインタnp1,np2を用いて交換

謎の仕様だ

255:デフォルトの名無しさん
11/11/14 02:22:31.80
>>254
変数n1はポインタnp1を使って交換する
変数n2はポインタnp2を使って交換するって事だと思います。

256:デフォルトの名無しさん
11/11/14 02:41:30.94
>>253
設問1-2

URLリンク(codepad.org)

257:デフォルトの名無しさん
11/11/14 02:48:32.86
>>256
設問1-1もお願いします。

258:246
11/11/14 05:02:04.57
>>251
大変参考になりました
ありがとうございます

259:デフォルトの名無しさん
11/11/14 05:06:07.27
>>253
設問1-1
URLリンク(ideone.com)

260:デフォルトの名無しさん
11/11/14 11:59:23.36
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク):
sinのグラフを次のように描くプログラムを作成せよ
ただしsin90°とsin270°に対するアスタリスクの数は20個とする。
URLリンク(beebee2see.appspot.com)
[3] 環境
 [3.1] OS: Windows7
 [3.2] コンパイラ名とバージョン: visual studio 2010
 [3.3] 言語: C
[4] 期限: [2011.11.3]
[5] その他の制限:

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

261:デフォルトの名無しさん
11/11/14 12:26:14.30
>>260
#include <stdio.h>
#include <math.h>

int main(void)
{
int i, j;
int x, zero=20;

for(i=0;i<=360;i+=15)
{
x=20.001*sin(i*M_PI/180);
x+=zero;
for(j=0;j<zero && j<x;j++) printf(" ");
for(;j<zero || j<x;j++) printf("*");
printf("\n");
}

return 0;
}

262:片山博文MZ
11/11/14 16:30:05.35
ふふふ、諸君はわたくしに勝てるかな。。。

263:デフォルトの名無しさん
11/11/14 19:13:54.88
>>256
>>259
有難う御座います

264:デフォルトの名無しさん
11/11/15 12:59:42.31
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):斜め上方に初速度v0(=50),入射角theta(=60)で小球を投射した。
小球の軌道(x,y)を計算してください。ただし、y<0になったとき計算を停止してください。
なお、軌道(x,y)の計算部分を一つの関数(ユーザ定義関数)で計算し、
計算結果二つをmain関数に返すようにしてください。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:11月19日まで
[5] その他の制限:x,yにはアドレスを用いるそうです。

問題文がわかりにくいかもしれませんがよろしくお願いします。

265:デフォルトの名無しさん
11/11/15 13:23:24.38
>>264
明日でいいならやってみようと思います。

266:デフォルトの名無しさん
11/11/15 13:23:58.75
>>264
問題文を端折ってねぇか?
重力加速度gはどうすんの?
軌道を計算しろっていうのはグラフとして軌道を表示しろってことか?
与えられた時刻tにおける小球の位置(x、y)を計算して表示しろってことだと思うけど、
計算結果二つってどういう意味?
計算結果はx座標、y座標の組(x、y)一つしかないように思うけど。

267:デフォルトの名無しさん
11/11/15 13:35:40.59
19日まで時間があります。

1、回答者が試作を公開する。
2、質問者が悪い部分を指摘する。
3、完全な製品が完成する。

1と2を繰り返すことで3に到達できるのではないでしょうか?

268:デフォルトの名無しさん
11/11/15 13:39:17.47
>>264
できたよ
URLリンク(codepad.org)

269:デフォルトの名無しさん
11/11/15 13:39:35.46
じゃあ関数プロトタイプ
int hoge(double *x, double *y, double t);

270:デフォルトの名無しさん
11/11/15 13:53:26.58
>>268
仕事早いな。
というか、それでいいのか?

Message = ((>>264 == >>267 || >>264 == >>269 ) ? ("情報は小出しにしない方が・・・") : ("(#^ω^)"));

271:デフォルトの名無しさん
11/11/15 14:16:26.03
vxとvyはcosとsin使って分けんじゃねーの?

272:デフォルトの名無しさん
11/11/15 14:27:51.49
初速v0をx方向の成分とy方向の成分に分けるのは確かにそうだけど。
問題文にない重力加速度Gを勝手に定義して使っちゃってるし。
問題文がアレな>>264の質問にも問題あるけど。

273:デフォルトの名無しさん
11/11/15 14:41:22.94
>>264
修正しました
URLリンク(codepad.org)

274:デフォルトの名無しさん
11/11/15 14:54:59.40
>>264
URLリンク(ideone.com)
適当に作ったやつ。
というか、これで合っているのか不安になってきた。
物理なんて高校卒業して以来ほとんど勉強してない(;´Д`)
問題文に重力加速度gについて書かれていないのがおかしい。
どこかに「重力加速度gはXXXXとする」等の文があるはず。

275:デフォルトの名無しさん
11/11/15 15:08:43.93
g=9.80665m/s^2じゃだめなん

書いてない場合は勝手に常識から外れない範囲内で決めていいって事だろ

276:デフォルトの名無しさん
11/11/15 15:14:42.57
y = v0t + 1/2gt^2 であることを忘れていた。
>>273は double vy = vy0 - 1 / 2 * G * t; のように修正で。


277:デフォルトの名無しさん
11/11/15 15:15:15.82
まあ、勝手に決めていいと思うけど。
というか、この場合勝手に決めないと問題解けないけど。
いやらしい講師なら「おいお前、勝手に決めるんじゃねぇ!」というのもありえる。


278:デフォルトの名無しさん
11/11/15 15:40:47.14
ふと疑問に思ったんだけど、math.h の cos/sin って単位はラジアンですよね?

double vx0 = v0 * cos( θ * 2 / π ); は double vx0 = v0 * cos( θ * π / 180);

の誤りでは? ・・・あれ????俺の方が間違ってる?うーん????

279:デフォルトの名無しさん
11/11/15 15:40:49.18
>>276
横槍すまんけど -1 / 2 ってゼロになってしまわね?

-1.0 / 2.0ならわかるけど
確か乗算演算子と除算演算子の評価順は左から右だよね?
もちろん - は優先度が低いので後回しにされる

280:デフォルトの名無しさん
11/11/15 15:43:06.73
なっちゃうね。まぁ、そこはほら、いろいろ^^

281:デフォルトの名無しさん
11/11/15 15:45:58.63
いろいろ間違ってるねぇw


282:デフォルトの名無しさん
11/11/15 16:08:59.53
プログラムも物理も駄目とは... これ本気で駄目出ししたら何か所ぐらいあるかなw

283:デフォルトの名無しさん
11/11/15 16:29:31.05
こういう簡単な問題ならプログラムの実行結果の一部と
自分で手計算した結果を比較してみてからうpするのが筋だな
間違った答えを出すプログラムをうpする位なら何もしない方がいい
迷惑を掛けるだけだ

284:デフォルトの名無しさん
11/11/15 16:38:12.61
どもども、ダメだし勉強になります^^

>迷惑を掛けるだけだ

迷惑かかるのは質問者だけだからいいでしょw

285:デフォルトの名無しさん
11/11/15 16:42:29.99
>>283
ごめんなさい。

>>274は無かった事にして下さい。


286:デフォルトの名無しさん
11/11/15 16:42:30.15
>>284
良くねーよ
他のスレならまだしも、このスレの存在意義を考えてみろ

287:デフォルトの名無しさん
11/11/15 16:44:21.31
>>286
しらねw

他の人がどんなつもりでこのスレにいるのかは知らないけど
自分は自分の勉強のために回答しているわけだし^^
いやならスルーすればぁ?

288:デフォルトの名無しさん
11/11/15 16:45:37.08
このスレに投稿する連中は宿題めんどうだから丸投げしてきてるだけだしな。

289:デフォルトの名無しさん
11/11/15 17:08:53.82
講師がわからない場合掲示板で聞くことって言うからここで聞いただけだよ。

290:デフォルトの名無しさん
11/11/15 17:34:44.51
>>287
お前みたいな奴はこのスレに来るなカス

291:デフォルトの名無しさん
11/11/15 17:57:17.65
>>285
合ってると思うが?

292:デフォルトの名無しさん
11/11/15 17:59:28.48
>>291
合ってますか。どうもありがとう!

人の答えと違っていると自分が間違っているんじゃないかと思う今日この頃。

293:デフォルトの名無しさん
11/11/15 18:11:37.68
>>292
初速50m/secとすると、(問題には単位がないので勝手に想定)
概算で初速の垂直方向は、50*sin60°≒43.3m/sec
G=9.8として滞空時間は、2*43.3/9.8≒8.84sec
水平方向には、8.84*50*cos60°≒221m
垂直方向には最高、G*(8.84/2)*(8.84/2)/2≒95m

294:デフォルトの名無しさん
11/11/15 18:15:24.99
>>293
大体は合ってるっぽいですね。
わざわざ計算してくれてどうもありがとうございます。

295:デフォルトの名無しさん
11/11/15 18:41:23.23
>>290
はいはい、カスカス^^
じゃあお前が答えてやればぁ?w

平日の昼間から勉強にもならない問題を解いて何が楽しいのだw

296:デフォルトの名無しさん
11/11/15 18:43:45.17
ここはニートと仕事のない派遣が
上から目線で問題を解いて自己満足に浸るスレですよ?


297:デフォルトの名無しさん
11/11/15 18:58:01.01
ここで誰も解かなくても問題丸投げにしたやつの単位が落ちる程度で誰も困らないんだから
つまらないことで喧嘩するなよ

298:デフォルトの名無しさん
11/11/15 19:09:01.54
>>294
数値積分ではないのでその手の誤差はないけど、時間刻みが0.01だから、
水平到達距離とかはおおざっぱに初速度×時間刻み = 50 *.0.01 = 0.5(m)
程度は値がずれる可能性があるよね。

しかし初速度50m/sって、例えばテニスのサーブとかそんな感じ?
空気抵抗がない状態で割と上向きに打ったら200mぐらいは飛ぶとw

299:デフォルトの名無しさん
11/11/15 19:29:45.22
[1] 授業単元:newとdeleteの確認
[2] 問題文(含コード&リンク):仕様:newとdeleteの確認 下記の基底クラスから、3パターンの別クラスを派生させ、Action関数などをオーバーライドし、各クラス独自の振る舞いができるようにする。
・CBaseMonsterクラス
プロパティprotected 整数型 m_atk
メソッド コンストラクタ  //m_atkを適宣初期化void Action(void) //行動制御関数
・void CBaseMonster::Action(void)のアルゴリズム50%の確率で「攻撃した!ダメージは99」と表示。99にはm_atkを表示。50%の確率で「防御した!」と表示。
アクション関数をオーバーライドなお、プログラム起動後、どのクラスのモンスターを生成するのかをメニューから選択できるようにし、生成したモンスターのAction()を20~30回程度繰り返し呼び出しし、想定した行動をしているか確認する。
派生したクラスについては、Action()のアルゴリズムを含めて、全て自由に追加修正して構わない。プログラムを終了する前に、newで生成したインスタンスを吐きすることを忘れないように。
動作イメージ
------------------------------------------------------------
|プログラムスタート
|1:基本モンスター
|2:ゴブリン
|3;スライム
|4:ドラゴン
|>>どのモンスターを生成しますか?
|>>4 ←選択されたインスタンスをnewで生成し、Actionを繰り返し呼び出す。
|ドラゴンは炎を吐いた!ダメージ540
|ドラゴンはじっと身構えている
|ドラゴンは炎を吐いた!ダメージ540
|ドラゴンは攻撃した!ダメージ540       
|       :
|       :
|プログラム終了。
[3.1] OS:Windows7
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2008
[3.3] 言語: C++
[4] 期限: 2011年11月19日13:00まで
[5] その他の制限:お手数ですが、コメントのほうお願いします。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch