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

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2005/07/05(火) 19:46:41
三流大学なら仕方ないな。
953デフォルトの名無しさん:2005/07/05(火) 19:51:07
名門でも三流でも同じだって。
名門大学では、大抵の場合、学生の大半がちゃんと理解しているから、講義の程度が変わらないというだけであって。
どんな大学の講義でも、大半の学生が理解してなさそうなことは、ちゃんと解説しているだろう?
954デフォルトの名無しさん:2005/07/05(火) 19:51:39
>>948
日本の大学の程度が低くなったのは戦後だよ。
955デフォルトの名無しさん:2005/07/05(火) 19:56:32
= = = = = = = 終 了 = = = = = = = =

続ける場合は学歴板
956デフォルトの名無しさん:2005/07/05(火) 20:07:22
>>943

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

int gdc(int m, int n) {
  if ((m % n) == 0) {
    return n;
  } else {
    return gdc(n, (m % n));
  }
}

    
int main(int argc, char **argv) {
  int num1 = 12;
  int num2 = 8;

  printf("gdc(%d,%d) = %d\n", num1, num2, gdc(num1, num2));

  return 0;
}
957891:2005/07/05(火) 20:17:29
>>894さん、ありがとうございましたm(_ _)m
958デフォルトの名無しさん:2005/07/05(火) 20:25:41
どなたか>>926をお願いできませんか・・・。
959デフォルトの名無しさん:2005/07/05(火) 20:47:27
<<926
#include<iostream>
int main(void){
std::cout << -1.543689013 <<std::endl;
return 0;
}
960デフォルトの名無しさん:2005/07/05(火) 21:01:19
>>926
#include <stdio.h>
int main()
{
  double x1, x0 = -1.0;
  double limit = 1.0e-20;
  double diff = 1.0;
  while(diff > limit)
  {
    x1 = x0 - ( x0 * (x0 + 2) + 2 + (2 / x0)) / (3 * x0 + 4 + (2/x0) );
    diff = x1 > x0 ? x1 - x0 : x0 - x1;
    x0 = x1;
  }
  printf("ans : x = %g\n", x1);
  return 0;
}
961960:2005/07/05(火) 21:04:08
10桁未満じゃ詰まらんな。

> printf("ans : x = %g\n", x1);



> printf("ans : x = %.20f\n", x1);

とでもして、表示桁数増やしてくれ。
962デフォルトの名無しさん:2005/07/05(火) 21:13:49
>>926
#include <iostream>
double f(double x) { return ((x+2)*x+2)*x+2; }
double s(double x, double gp)
{ return gp*gp > 1e-20 ? s(x + gp, f(x) * f(x+gp) < 0 ? -gp/2 : gp) : x; }
int main(void) { std::cout << s(0, -2) << endl; }
963デフォルトの名無しさん:2005/07/05(火) 21:15:12
×endl
○std::endl
964960:2005/07/05(火) 21:17:27
あ、C++だったか。
965926:2005/07/05(火) 22:20:35
>>959さん
>>960-961,964さん
>>962-963さん

ありがとうございます。お手数かけましたm(_ _)m
966デフォルトの名無しさん:2005/07/05(火) 22:59:06
[1] 授業単元: C/C++
[2] 問題文(含コード&リンク):
引数として2進数を文字列で渡すと、
16進数に変換し、文字列として返す関数を作る。
同様に引数を16進数、戻値を2進数で返す関数も作る。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): VC++6.0
 [3.3] 言語:C/C++/
[4] 期限:7月9日
[5] その他の制限:

文字列の扱いがどうにもわかりません・・・。
どうかよろしくお願いします。
967デフォルトの名無しさん:2005/07/05(火) 23:09:05
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
任意の整数nまでの和S(n)を求めるプログラムを再起的に関数を呼び出す形で書け
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7月7日まで
[5] その他の制限:
おねがいします
968デフォルトの名無しさん:2005/07/05(火) 23:21:25
>>967
整数じゃなくて自然数だが

#include <stdio.h>

int sum(int n)
{
    if (n == 0) return 0;
    else if (n == 1) return 1;
    return sum(n-1) + n;
}

main() { printf("%d\n", sum(10)); }
969デフォルトの名無しさん:2005/07/05(火) 23:25:31
復活の埋蔵金!!
でもあと30個はきついよ。
970デフォルトの名無しさん:2005/07/05(火) 23:39:33
>   else if (n == 1) return 1;
不要
971デフォルトの名無しさん:2005/07/06(水) 00:25:19
>>968
ありがとうございます
9722/1:2005/07/06(水) 01:20:40
>>966
#include <string>
#include <sstream>
using namespace std;
bool in_range(char x, char a, char b){ return x >= a && x <= b;}
// 2進→16進
string bin2hex(const string &src)
{
  stringstream ss;
  int tmp = 0;
  int limit2 = src.size() % 4;
  int limit1 = src.size() / 4 + (limit2 ? 1 : 0);
  if( limit2 == 0 ) limit2 = 4;
  for(int i = 0; i < limit1; ++i, limit2 = 4)
  {
    for(int j = 0; j < limit2; ++j)
    {
      if( ! in_range(src[j], '0', '1') ) throw string("bin2hex format error");
      tmp = ( tmp << 1 ) | (src[j] - '0');
      if( j % limit2 == (limit2-1) )
      {
        ss << hex << tmp;
        tmp = 0;
      }
    }
  }
  return ss.str();
}
9732/2:2005/07/06(水) 01:20:51
// 16進→2進
string hex2bin(const string &src)
{
  stringstream ss;
  for(int i = 0; i < src.size(); ++i)
  {
    char ch = -1;
    if( in_range(src[i], '0', '9') ) ch = src[i] - '0';
    else if( in_range(tolower(src[i]), 'a', 'f') ) ch = tolower(src[i]) - 'a' + 0xa;
    else throw string("hex2bin format error");
    for(unsigned char mask = 1 << 3; mask != 0; mask >>= 1) ss << !!(ch & mask);
  }
  return ss.str();
}
974デフォルトの名無しさん:2005/07/06(水) 01:32:53
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
2人が互いに座標を指定していくような○×クイズのプログラムをつくれ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7月7日
[5] その他の制限:

1年生なんですが、全くわかりません・・・orz
よろしくお願いします!
975デフォルトの名無しさん:2005/07/06(水) 01:43:06
あ、ちなみに3×3の○×クイズです!
座標というのは 1、3と入力したら左下、
2、2と入力したら真ん中にマークがつくということらしいです。
976デフォルトの名無しさん:2005/07/06(水) 01:55:58
>>441
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/670.zip
やっと終わった…
調子に乗って機能を詰め込んでたら3000行超えたw
多少メモリリークがあるけど勘弁してくれ。
質問があれば出来る限り答えようww
977デフォルトの名無しさん:2005/07/06(水) 01:59:48
>>974=975
貴様はまず○×クイズというものを知れ。プログラムより前に。
978デフォルトの名無しさん:2005/07/06(水) 02:07:59
[1] 授業単元:プログラミング(C言語)
[2] 問題文(含コード&リンク):
下記のような整数型配列において、以下の処理を行うプログラムの作成。
処理を行った後、配列の内容を出力する
#define YOUSO 10
int a[YOUSO] = {2,4,6,8,10,12,14,16,18,20} ;
int b[YOUSO] = {3,6,9,12,15,18,21,24,27,30} ;

(1)配列aの要素をすべて配列bに転送する
(2)b=a+bを配列内の要素毎に行う
(3)配列aの配列内順序を逆にして、配列bに転送する
(4)配列aと配列bの各要素を交換する

以上の処理を1つのプログラムで行うものを作れ、とのことです

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/
[4] 期限:7月8日まで
[5] その他の制限:どこまで習っているか、等々
配列処理までです
もうなにがなんだかわけわからなくなってだめぽ、状態です
ほとんど丸投げで申し訳ないですがどうぞ力を貸してください
979デフォルトの名無しさん:2005/07/06(水) 02:08:59
これはクイズじゃないからな、念のため
○│×│○
─┼─┼─
×│○│○
─┼─┼─
×│○│×
980デフォルトの名無しさん:2005/07/06(水) 07:09:21
981デフォルトの名無しさん:2005/07/06(水) 07:55:47
>>980
素早いレスdクスです!
でも、明らかにまだ習ってない関数が使われてるようです・・
関数、ポインタはまだ習ってませんorz
こちらの情報が少なすぎたみたいですいません!
982デフォルトの名無しさん:2005/07/06(水) 08:06:00
>>972

うわー、なるほど。
ありがとうございました
983デフォルトの名無しさん:2005/07/06(水) 10:08:39
[1] 授業単元:プログラミングC言語
[2] 問題文(含コード&リンク): int型整数の三乗値を返す関数はint cube(int x) {/*・・・*/}
を作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:今日午後一時まで

984デフォルトの名無しさん:2005/07/06(水) 10:28:17
マルチUzeeeeeeeeeeeeeeee
985デフォルトの名無しさん:2005/07/06(水) 10:30:25
(ノ・ェ・ヽ) キューン
 U  U
986デフォルトの名無しさん:2005/07/06(水) 10:37:43
>>983
http://pc8.2ch.net/test/read.cgi/tech/1119435171/974,979
これか!

int cube(int x) { return x * x * x(ry

といいつつ簡単すぎるので書いてしまった
987デフォルトの名無しさん:2005/07/06(水) 10:40:55
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
>>968のS(n)は
S(1) S(2) S(3) S(4)
。 。 。 。
。。 。。 。。
。。。 。。。
。。。。
と並べることでわかるように三角関数と呼ばれる。
このようなひと目でわかる出力する関数を付け加えよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7月7日
[5] その他の制限:
宜しくおねがいします
988デフォルトの名無しさん:2005/07/06(水) 11:00:17
[1] 授業単元:プログラミング演習I
[2] 問題文:
65 91 39 31 55 76 55 52 63 71
39 38 60 59 65 70 45 51 61 44
-1

上のデータ(一番最後の -1 はデータの終りを表すものとする。)を

main() 関数などで適当な実数配列 a に読み込んだとしよう。このとき配列 a[] とその要素数 n を関数の引数として渡すことによって平均、標準偏差、最高点、最低点が計算できる。
そこで、

a の平均点を求める関数: double mean( double a[], int n )
a の標準偏差を求める関数: double stddev( double a[], int n )
a の最高点を求める関数: double max_array( double a[], int n )
a の最低点を求める関数: double min_array( double a[], int n );
を作成し、これらの関数の返してきた値を表示しなさい。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:7/12まで
[5] その他の制限:「関数と配列について」まで習いました。構造体などはまだ習っていません。

データを読み込む前のプログラムだけでいいので、どなたかご教授お願いします。
989デフォルトの名無しさん:2005/07/06(水) 11:09:05
>>987
なにがなんだかさっぱりわからん
その図からひと目ではなにもわからん
三角関数ってsinとかcosだろ?
もしかして、こうか?

S(1)  S(2)  S(3)  S(4)
。   。   。   。
    。。  。。  。。
        。。。 。。。
            。。。。
990デフォルトの名無しさん:2005/07/06(水) 11:15:13
[1] C言語
[2] 100桁同士の正整数の積を 「筆算をまねる方法(1桁ずつ乗算)」
  を用いて計算するプログラムを作成せよ.
  プログラムは以下の仕様に従うこと:

  プログラムは,標準入力から 100 桁以下の正整数を2つ受け取り,
  その積を標準出力に出力する.

   例:
     % ./bignum1
      123456
      123
      15185088
[3] OS:Linux
[4] 期限:7/8(金)午後一時まで
[5]雛形はあるので、雛形の「// ここを頑張ってつくる」
  のところをお願いします
991デフォルトの名無しさん:2005/07/06(水) 11:17:32
#include <stdio.h>
#include <string.h>
#define MAX_FIGS 200 // 最大桁数 (100桁*100桁の計算は200桁まで)

// 長大数を表す構造体
typedef struct {
char fig[MAX_FIGS]; // 長大数を各桁ごとに格納
int numFigs; // 最大桁数
} BIGNUM;

void readBigNum(BIGNUM *n);
void printBigNum(BIGNUM *n);

int main(int argc, char *argv[])
{
BIGNUM x, y;
readBigNum(&x);
readBigNum(&y);

// ここを頑張ってつくる

return 0;
}
992デフォルトの名無しさん:2005/07/06(水) 11:18:45
/* 標準入力から長大数を1つ読み込む
* 引数: n - 長大数へのポインタ(格納先)*/
void readBigNum(BIGNUM *n)
{
int i, j;
char str[MAX_FIGS];

// 読み込み
scanf("%s\n", str);

// 長大数に変換する
 // 長大数 n の初期化
bzero(n, sizeof(BIGNUM));

// 下位の桁から順次取り出す
for (i=strlen(str)-1, j=0; i >= 0; i--, j++)
n->fig[j] = str[i] - '0';

// 最大桁数
n->numFigs = j;
}
993デフォルトの名無しさん:2005/07/06(水) 11:19:16
/*
* 長大数を標準出力へ書き出す
* 引数: n - 長大数へのポインタ
*/
void printBigNum(BIGNUM *n)
{
int i;

// 先頭の0は無視する
for (i=n->numFigs - 1; i >= 1; i--)
if (n->fig[i] != 0)
break;

// 長大数の表示
for ( ; i >= 0; i--)
printf("%c", n->fig[i] + '0');
printf("\n");
}
994デフォルトの名無しさん:2005/07/06(水) 11:35:34
>>988
ふー、危うく埋まるとこだった。
とりあえずやっといた。
ほい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/675.txt
995ななすぃ:2005/07/06(水) 11:39:02
[1] 授業単元:プログラミングC言語
[2] 問題文(含コード&リンク):配列のデータ構造を実現するプログラムを
  数パターン作成する
・データの挿入、削除、表示が可能であること。
・配列に代入するデータは整数型とする。
・プログラムの仕様(関数への入出力、表示方法など)は自由とする
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Borland C++ Compiler5.5
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:7月9日昼まで
[5] その他: できるだけ早くお願いします。それとよろしければ簡単な注釈
も書いていただければうれしいです。
996デフォルトの名無しさん:2005/07/06(水) 11:54:47
>>989
それです。
図が変になってしまってすいません。
997デフォルトの名無しさん:2005/07/06(水) 12:24:42
>>990

BIGNUM * multiplyBigNums( const BIGNUM * x, const BIGNUM * y, BIGNUM * z );

int main()
{
  :
  // ここを頑張ってつくる
  multiplyBigNums( &x, &y, &z );
  printBigNum( &z );
  return 0;
}

BIGNUM * multiplyBigNums( const BIGNUM * x, const BIGNUM * y, BIGNUM * z )
{
  int i, j, k;
  memset( z, 0, sizeof( BIGNUM ) );
  z->numFigs = x->numFigs + y->numFigs;
  
  for ( i = 0; i < x->numFigs; i ++ )
    for ( j = 0; j < y->numFigs; j ++ )
    {
      k = i + j;
      z->fig[ k ] += x->fig[ i ] * y->fig[ j ];
      z->fig[ k + 1 ] += z->fig[ k ] / 10;
      z->fig[ k ] %= 10;
    }
  
  return z;
}
998デフォルトの名無しさん:2005/07/06(水) 12:33:41
>>987
for (i = 1; i <= n; i ++)
{
  for (j = i; j > 0; j --)
    printf( "。" );
  
  printf( "\n" );
}

あれ、もしかしてこれも再帰使うとか?
っていうか、もういいかげん次スレでやろう。
注文あったら次スレで。
http://pc8.2ch.net/test/read.cgi/tech/1120522752/
999デフォルトの名無しさん:2005/07/06(水) 12:44:44
999
1000デフォルトの名無しさん:2005/07/06(水) 12:44:59
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。