1read 100read
2011年11月2期プログラム2: C/C++の宿題片付けます 153代目 (638) TOP カテ一覧 スレ一覧 2ch元 削除依頼

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


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

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

3 :
>>999
前スレのレスがあまりになのでどうしようか悩んだけど、書くわ。
名前空間って知ってるか?

4 :
ひとまず「C++ std」とかでググればよかろうに
そうすればつまらない質問してとか言われないでいられたものを

5 :
前スレ >>994
ベタな方法で。
http://ideone.com/75gvT

6 :
[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 :
[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 :
>>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 :
おや、>>6>>7は一緒だったのか
気付かず作っちゃったのでやり方少し違うしせっかくなのでうp
http://codepad.org/6UL5hxyw

10 :
[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 :
連投ごめんなさい
例がずれました

12 :
>>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 :
>>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 :
>>5
プログラムへのツッコミじゃないけど40はfortyな。
あとハイフンを使ったりとか...

15 :
>forty
知らなかった
こんなところで英語の無駄知識が増えるとは

16 :
3項演算子で割り算連続とか、なんの冗談なんだろうw

17 :
>>15
「無駄」って、日本語でいったら漢数字の表記を間違えているようなもんだぞw

18 :
>>17
何で英語はfourtyとしなかったんだ?というボヤキでしょ。

19 :
>>18
え?

20 :
外国人が多少日本語を間違えていても
意味を取り違えない程度なら正直どっちでもいい
日本人が多少英語を間違えていても(以下同

21 :
お、おう

22 :
実際英語圏にいくと人種が混じってるので、間違えたら可哀想な目で見られるだけ。

23 :
"forty"の5文字はアルファベット順になっている
とかが英語の無駄知識だろう

24 :
>>18
そんなとこでぼやくんなら、
何で50はfivetyじゃなくてfiftyなんだ、とかもぼやいてるのか?
「いやいや14がfourteenだし4の部分は発音が同じだし」、とかいうなら
英語は綴りと発音が対応してない単語が山ほどあるがその度にぼやいているのか?
こんなもん自然言語の歴史的な経緯なんだからどうしようもないんだよ。
ちなみに昔はfourとfortyのforは発音が違ったらしいぞ。
あと言語のForth、あれはFourthとするつもりが文字数の都合でForthになった、
これぐらいが無駄知識w

25 :
フォースを信じるのじゃ

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

27 :
>>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 :
>>27
add_user()は
成功:0
エラー:-1
を返すんですけど・・・

29 :
[1] 授業単元:プログラミング入門
[2] 問題文:0以上20以下の整数を入力として受け付けて,
その数から20までの整数を順に出力せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: ありません
[5] その他の制限: ありません
うまくカウントできなくて困っています
宜しければお願いします

30 :
/*>>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 :
void main(){
int in;
scanf("%d",&in);
for(;in<=20;in++)printf("%d\n",in);
}

32 :
>>31
横やりだけど、負数をはじかないと

33 :
[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 :
>>33に追加条件です。
多倍長整数を使ってください。

35 :
>>30-31
ありがとうございました
助かりました

36 :
[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 :
>>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 :
>>33
大してテストしてないので、十分検証してから提出してくださいな
http://ideone.com/VjhNB

39 :
/*>>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 :
>>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 :
/*>>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 :
ちょっと縮んだ
/*>>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 :
>>40
ちょw
絶対先生に合格もらえないだろwww

44 :
さらに縮んだ
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 :
と思ったら切れた
/*>>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 :
>>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 :
>>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 :
>>44
i,a[20];main(){for(;i<20;i++)printf(i==9?"%d\n":"%d ",a[i]=i/10+2);}

49 :
>>33
http://hibari.2ch.net/test/read.cgi/tech/1313183984/22
さすがに、10万ビットにもなると遅くて遅くて‥‥‥。
乗算ルーチンにて、乗数を上位ビットから調べているのですが、これを下位ビットから調べるようにすれば小さい数字の場合はかなりましになるかもしれません。

50 :
>>48
素晴らしい

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

52 :
>>27
作成ありがとうございます
非常に助かります
宜しければもう1点お付き合いください
>>29で指摘して頂いている点なのです
今出ている処理で0を返せばいいのは分かるのですが
エラー時に-1を返す時にはどのようになるのでしょうか
お願いします

53 :
>>49
こんなのろいコードを提出したらさすがに怒られるだろ。
Nの値に応じてどれだけの値を計算できるか、どのぐらいの計算量が発生するか
考えた方がいい。

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

55 :
>>54
なるほど、素晴らしいですね。今後もそちらのスレだけで頑張ってください。こちらには来ないでください。迷惑です。

56 :
>43の言ってる事が判らん
誰か解説よろ

57 :
>>56
> 先頭から10個分には2を,
> 後半の10個分には3を格納せよ。正しく格納されたことを出力する必要が

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

59 :
[1] 授業単元:計算機アルゴリズムT
[2] 問題文(含コード&リンク):
設問1-1
プログラム例7.3.1をswitch文を使わずにif文、else if文を使うプログラムに変更しなさい。
変数xの値をキーボードから入力するように機能変更しなさい。
プログラム例7.3.1
ttp://www.dotup.org/uploda/www.dotup.org2233167.txt.html
[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 :
[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の[1]ですが、2行2列の行列でx11=1, x12=2, x21=4, x22=5で、
y11=1, y12=5, y21=5, y22=3です。
ややこしくなってしまいすみません。よろしくお願いします。

62 :
>>60
>>1

63 :
>>61
すみません。不注意でした。

64 :
>>60,61
[1] http://ideone.com/52RZc
[2] http://ideone.com/voYBg

65 :
>>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 :
>>64
ありがとうございました。

67 :
>>33
10000^10000 一秒以内ででるのがでけた
http://codepad.org/kWVLtEjL

68 :
[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 :
>>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 :
>>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 :
>>67
>>46の方が速くないか?

72 :
>>71
確かに >>46 の方が早い

73 :
>>57-58
初期化したらあかんのかw
まあ…ありがとう。

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

75 :
>>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 :
× >>64 : 5856 ms
>>46 : 5856 ms

77 :
>>75
コンパイラとコンパイルオプションはどんなん?

78 :
>>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 :
>>78

gmp はえー

80 :
>>69-70
作成ありがとうございました
助かりました

81 :
>>68
i,a[10];main(){for(;i<10;printf("%d ",a[i++]=2|1&i));}

82 :
>>79
そりゃー10000乗を素直に10000回のかけ算でやるコードとでは差はでかいかと。
とりあえずバイナリー法というやつを使えばいいんじゃないでしょうか。

83 :
10000=(((((((((((2*2)*2+1)*2+1)*2+1)*2)*2)*2)*2+1)*2)*2)*2)*2 だね

84 :
[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 :
>>84
ttp://ideone.com/QUVfg

86 :
>>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 :
>>81
iの初期化忘れとる。

88 :
>>87
iはグローバル変数だから0で初期化されてる

89 :
>88
そりゃコンパイラ依存だな

90 :
>>89
いつの時代の人間だよw

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

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

93 :
>>92
http://ideone.com/UbwDh

94 :
>>93
ありがとうございます、助かりました

95 :
[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 :
全角と半角が混じると難しいな

97 :
>>95
MinGW 4.5.2で確認した
ttp://ideone.com/2rukX
けど課題的にcharでいい気がする・・・

98 :
>>95
全角、半角混じり対応
http://ideone.com/iB837

99 :
>>85-86
84です、助かりました。ありがとうございました!

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼