トップページtech
1001コメント376KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/03/02(月) 02:13:06
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

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

【質問テンプレ】
[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://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【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++の宿題片付けます 122代目(実質123代目)
http://pc11.2ch.net/test/read.cgi/tech/1232029287/
0766デフォルトの名無しさん2009/04/14(火) 01:09:38
>>765
  |  |  |  |
--+--+--+--+--
  |  |  |  |
--+--+--+--+--
  |  |  |  |
--+--+--+--+--
  |  |  |  |
--+--+--+--+--
  |  |  |  |
0767デフォルトの名無しさん2009/04/14(火) 01:30:30
>>763
#include<stdio.h>
#include<string.h>

#define HEIGHT 32
#define WIDTH 79

void triangle(char screen[HEIGHT][WIDTH], int center, int top, int size)
{
int i;

if(size<3) return;
for(i=0;i<size-1;i++) screen[top+i][center-i]=screen[top+i][center+i]='*';
for(i=0;i<size;i++) screen[top+size-1][center-i]=screen[top+size-1][center+i]='*';
triangle(screen, center, top, size/2);
triangle(screen, center-size/2, top+size/2, size/2);
triangle(screen, center+size/2, top+size/2, size/2);
}

int main(void)
{
char screen[HEIGHT][WIDTH];
int i;

memset(screen, ' ', sizeof(screen));
triangle(screen, WIDTH/2, 0, HEIGHT);
for(i=0;i<HEIGHT;i++)
{
printf("%.*s\n", WIDTH, screen[i]);
}
return 0;
}
0768デフォルトの名無しさん2009/04/14(火) 01:57:36
>>767
                *
               * *
              *   *
             *******
            *       *
           * *     * *
          *   *   *   *
         ***************
        *               *
       * *             * *
      *   *           *   *
     *******         *******
    *       *       *       *
   * *     * *     * *     * *
  *   *   *   *   *   *   *   *
 *******************************
0769デフォルトの名無しさん2009/04/14(火) 06:46:01
>>768 (・∀・)
0770デフォルトの名無しさん2009/04/14(火) 10:50:22
mCnの答えが戻るプログラム
0771デフォルトの名無しさん2009/04/14(火) 11:06:57
考えた方法。
mCn=(m/n)*・・*((m-n+1)/1)
a=m-nとおき、f(x)=log(1+c/x)とおくと
log(mCn)=f(1) + ・・・ + f(n)となる。
log(mCn)の値は、∫[1,n]f(x)dxから∫[2,n+1]f(x)dxの範囲。
0772デフォルトの名無しさん2009/04/14(火) 11:22:40
F(x)=a*log(a + x) + x*log(1 + a/x)]とおけば
F(n)-F(1)からF(n+1)-F(2)までの間の値。
0773デフォルトの名無しさん2009/04/14(火) 11:54:59
値の範囲を積分で評価するときに、f(1)のときの値は除いたほうが都合が良いな。
0774taguti2009/04/14(火) 14:39:53
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点
(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。
・公式:底辺x高さ÷2を使って計算してください。
お願いします!!

0775デフォルトの名無しさん2009/04/14(火) 14:55:11
テーブルがNEN(年、4桁数値型)とTUKI4〜TUKI3(4月〜次年3月、1桁数値型(フラグ用))という項目をもっていて
そのテーブルを1件1件READしながら、
@YMD_S(開始年月)という変数に、
NEN + TUKI4〜TUKI3でフラグ1が設定されている最初の月をセット(例:「200805」)
AYMD_E(終了年月)という変数に、
NEN + TUKI4〜TUKI3でフラグ1が設定されている最後の月をセット(例:「200809」)

としたい場合に、どういったロジックで考えたら
実現可能でしょうか?

処理効率とか以前に、どういう方針で考えたらいいかがわかりません。
どうか教えてください。
0776デフォルトの名無しさん2009/04/14(火) 15:14:50
>>774 の問題は
A(x1, y1), B(x2, y2), C(x3, y3) → A'(0, 0), B'(x2 - x1, y2 - y1), C'(x3 - x1, y3 - y1) として
△ABC = △A'B'C' = |(x2 - x1)(y3 - y1) - (y2 - y1)(x3 - x1)|/2
の方が楽じゃないかなぁ…。
0777デフォルトの名無しさん2009/04/14(火) 15:23:46
>>774
(x1, y1),(x2, y2)の間の距離は
sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))

(x1, y1),(x2, y2) を通る直線の方程式は、
(y2 - y1) * x / (x2 - x1) - y + (x2 * y1 - x1 * y2) / (x2 - x1) = 0。

点(x3, y3)からこの直線へ下ろした垂線の長さは
abs((y2 - y1) * x3 / (x2 - x1) - y3 + (x2 * y1 - x1 * y2) / (x2 - x1))
/ sqrt((y2 - y1) * (y2 - y1) / (x2 - x1) / (x2 - x1) + 1)。
0778デフォルトの名無しさん2009/04/14(火) 15:39:05
>>775 C言語指定でないのでC++。
#include <iostream>
using namespace std;
int main() {
  int i, nen, tuki[12], ymd_s, ymd_e;

  for(int c=0; c<20 ; c++) {
    cin >> nen; cout << nen << ")";
    for(i=1; i<=12; i++) {
      cin >> tuki[i-1]; cout << tuki[i-1] << ")"; }
    ymd_s = ymd_e = 0;
    for(i=1; i<=12; i++)
      if(tuki[i-1] == 1) {
        if(i>9)
          ymd_s = nen*100 + 100 + i-9;
        else
          ymd_s = nen*100 + i+3;
        break;
      }
    for(i=12; i>=1; i--)
      if(tuki[i-1] == 1) {
        if(i>=9)
          ymd_e = nen*100 + 100 + i-9;
        else
          ymd_e = nen*100 + i+3;
        break;
      }
    cout << ymd_s << "," << ymd_e << endl;
  }
}
0779デフォルトの名無しさん2009/04/14(火) 15:50:57
>>774
マルチ乙
http://pc12.2ch.net/test/read.cgi/tech/1237091698/493
http://pc12.2ch.net/test/read.cgi/tech/1232055225/770
http://pc12.2ch.net/test/read.cgi/tech/1217575832/499
http://pc12.2ch.net/test/read.cgi/tech/1235927586/774
http://pc12.2ch.net/test/read.cgi/tech/1212498448/876
http://pc12.2ch.net/test/read.cgi/tech/1212409946/66
http://pc12.2ch.net/test/read.cgi/tech/1217575832/499
http://pc12.2ch.net/test/read.cgi/tech/1192201659/808
http://pc12.2ch.net/test/read.cgi/tech/1205156417/821
http://pc12.2ch.net/test/read.cgi/tech/1238032584/16
http://pc12.2ch.net/test/read.cgi/tech/1224719784/934
0780デフォルトの名無しさん2009/04/14(火) 15:56:55
>774
ほんと乙だわ。
そしてそれを全部見つけてきた779も乙
0781taguti2009/04/14(火) 16:23:54
自己解決しました。
0782デフォルトの名無しさん2009/04/14(火) 20:24:43
778さん、ありがとうございます。
C言語ですがC++もあまり変わらない解読でいいんですよね?

もしよろしければ一行一行に説明文(コメント)を
追加していただけないでしょうか?

解読を試みているのですがさっぱりです。。
0783デフォルトの名無しさん2009/04/14(火) 20:26:28
>>775
質問の意味が分からないや

テーブルの項目
NEN(4桁の数値文字列) | TUKI4〜TUKI3(2桁の数値文字列) | FLAG(1桁の数値文字列) | ...
2008 05 1 ...
2008 09 1 ...
2008 10 0 ...
2008 07 1 ...

のときに
YMD_S=200805
YMD_E=200809
としたいということ?

YMDなのにYMしか使ってないとか気持ち悪いけどw
0784デフォルトの名無しさん2009/04/14(火) 20:35:45
NEN 04 05 06 07 08 09 10 11 12 01 02 03
2008 00 00 01 00 00 00 00 00 01 00 00 00

start 200806
end 200812
にしたいんじゃ
>>783
0785デフォルトの名無しさん2009/04/14(火) 20:38:32
>>784
なるほど!そういうことか!
0786デフォルトの名無しさん2009/04/14(火) 20:41:56
>>785 ついでに、>>778 のコメントを頼む。
07877852009/04/14(火) 20:52:59
C言語でやってみたぜ
2008年度の1月の表現は 200801 なのか 200901 なのか分からなかったので両方書いてみた
#include<stdio.h>

int main(void)
{
int year, month, flag, YMD_S, YMD_E;
FILE *fp=stdin;

while(fscanf(fp, "%d", &year)==1)
{
YMD_S=YMD_E=0;
for(month=4;month<=12+3;month++)
{
if(fscanf(fp, "%d", &flag)!=1) break;
if(flag) YMD_E=year*100+(month-1)%12+1;
// if(flag) YMD_E=(year+(month-1)/12)*100+(month-1)%12+1;
if(YMD_S==0) YMD_S=YMD_E;
}
printf("year=%d YMD_S=%d YMD_E=%d\n", year, YMD_S, YMD_E);
}
return 0;
}
0788デフォルトの名無しさん2009/04/14(火) 22:49:36
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):

ニュートン法でf(x)=x-cos(x)=0の近似値を求める。

f'(x)=1+sin(x)であるから、
a[k+1] = a[k]-(a[k]-cos(a[k])/(1+sin(a[k]))
によって近似解の改良を繰り返すことになる。

初期近似解をa1=1.0,終了条件を|a[k+1]-a[k]|≦10^(-15)とし、
少数点以下15桁まで求めるプログラムを作成せよ。

※a[k]などの"[k]"は、添え字です。

[3] 環境
 [3.1] OS:Linux
 [3.2] cc
 [3.3] C言語
[4] 期限:明日
0789デフォルトの名無しさん2009/04/14(火) 22:57:57
>>781
嘘つけボケが。
そのレベルを一人で解けないなんておわってんな。
0790デフォルトの名無しさん2009/04/15(水) 03:07:40
>>788
#include <stdio.h>
#include <math.h>

int main()
{
    double x, y;

    x = 1.0;

    do{
        y = x;
        x = y - (y - cos(y))/(1 + sin(y));
    } while(fabs(x - y) > pow(10, -15));
    printf("x = %.15lf", x);
    return 0;
}
0791デフォルトの名無しさん2009/04/15(水) 07:51:26
>pow(10, -15)
毎回計算させんのかよw
0792デフォルトの名無しさん2009/04/15(水) 08:29:02
これたのむ

【プログラムコンテスト】
・思考ルーチンのプログラムに自信のある方は是非ご参加ください
・賞金は最大10万円です。

http://irensei.com/html/game.html
0793デフォルトの名無しさん2009/04/15(水) 13:23:38
775です。
御解答ありがとうございます。
質問の仕方が悪くて申し訳ないです。

NEN 04 05 06 07 08 09 10 11 12 01 02 03
2008 00 00 01 01 01 01 01 01 01 00 00 00

start 200806
end 200812

といった感じです。


787さん
if(YMD_S==0) YMD_S=YMD_E; 以前で
YMD_Sに年月がセットされるところがないように
思えますが、どういうロジックなのかご教示いただけませんか?

やはりコメントがないと、見てもわかりません。
申し訳ありませんがお願いします。
0794デフォルトの名無しさん2009/04/15(水) 14:47:47
[1] C++
[2] 問題文(含コード&リンク):
ttp://www.dotup.org/uploda/www.dotup.org8740.zip.html
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 2009年4月16日14:30まで
[5] その他の制限:
課題のファイルの末尾に3点制限事項がありますのでご覧ください
0795デフォルトの名無しさん2009/04/15(水) 16:16:55
>>794
どこまでこだわればいいのかねぇ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9031.txt
0796デフォルトの名無しさん2009/04/15(水) 16:39:48
>>794
find_last_ofの使い道が分からん
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9032.txt
07977942009/04/15(水) 16:40:21
>>795
出力は問題ないのですが制限事項(1)でクラスを使うように指定されていますので
クラスでやってもらえるとたすかります
07987942009/04/15(水) 16:59:58
>>796
ありがとうございます クラスなのとfind_first_of/find_last_ofでかいてもらってるので完璧です
出力も全く問題ないです find_last_ofの使い方がわからんとゆうのは使い方があまりよくないということでしょうか
外出しますが帰ったらもっかい見てみますがこれで問題ないです ありがとうございました
0799デフォルトの名無しさん2009/04/15(水) 18:53:25
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):5つの数字の中から3つを選び全て出す
[3] 環境
[3.1] OS:Win
[3.2] コンパイラ名とバージョン:わかりません
[3.3] 言語:C
[4] 期限:今週いっぱい
お願いします
0800デフォルトの名無しさん2009/04/15(水) 19:30:11
あまりにもESP訓練が酷すぎる
マインドシーカーかよ
0801デフォルトの名無しさん2009/04/15(水) 19:35:22
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
int a[5] = {1, 2, 3, 4, 5}, i;

srand(time(NULL));

for(i=0; i<3; i++) {
int j = rand() / (RAND_MAX + 1.0) * (5 - i);
printf("%d ", a[j]);
a[j] = a[4-i];
}

return 0;
}
0802デフォルトの名無しさん2009/04/15(水) 21:05:20
組み合わせを列挙しろってこととじゃない?
0803デフォルトの名無しさん2009/04/15(水) 21:36:57
#include <stdio.h>

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

for(i=1; i<=5; i++) {
fof(j=1; j<=5; j++) {
if(j==i) continue;
for(k=1; k<=5; k++) {
if(k==i||k==j)continue;
printf("%d %d %d\n", i, j, k);
}}}

return 0;
}
0804デフォルトの名無しさん2009/04/15(水) 22:32:17
>>799
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9033.txt
0805デフォルトの名無しさん2009/04/15(水) 22:39:57
#include <stdio.h>

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

for(i=0; i<5; i++) for(j=i+1; j<5; j++) for(k=j+1; k<5; k++) printf("%d %d %d\n", i, j, k);

return 0;
}
0806sage2009/04/15(水) 23:17:56
#include<stdio.h>

int main(void)
{
int i,j,n;
i=2;
printf("Input Num=?");
scanf("%d,&n");
printf("Dec=%d\n",n);
printf("heX=%x\n\n",n);
j=(n>>2)&1;
printf("bit[%d]=%d\n",i,j);
return(0);
}

↑これに適当な数を入れると決まって-4195116になってしまいます
どうすればいいでしょうか
0807デフォルトの名無しさん2009/04/15(水) 23:30:44
スレ違いだ
0808デフォルトの名無しさん2009/04/15(水) 23:31:27
scanf("%d,&n");
0809デフォルトの名無しさん2009/04/15(水) 23:46:27
>>805 さんの流用
#include <stdio.h>
int main(void)
{
  int i, j, k;
  int data[5]={0,0,0,0,0};

  printf("好きな数字を5個入力してください:");
  if(scanf("%d%d%d%d%d", &data[0], &data[1], &data[2], &data[3], &data[4]) != 5) return 1;
  for(i=0; i<5; i++)
  for(j=i+1; j<5; j++)
  for(k=j+1; k<5; k++) {
    printf("%d %d %d\n", data[i], data[j], data[k]);
  }
  return 0;
}
08107992009/04/16(木) 00:09:01
ID代わりましたが、799です
>>802さんの言うとおり全ての組み合わせを表示せよというものです

>>801>>803-805>>809さんありがとうございます

後から問いが少し代わったので、参考に頑張りたいと思います
0811デフォルトの名無しさん2009/04/16(木) 15:39:51
[1] 授業単元:C++基礎
[2] 問題文(含コード&リンク):
ttp://www.dotup.org/uploda/www.dotup.org11261.zip.html
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 4/17 17:00まで
[5] その他の制限:問題文内にメモを書きました それでわよろしくおねがいします
0812デフォルトの名無しさん2009/04/16(木) 18:03:52
[1] 授業単元:画像処理プログラミング
[2] 問題文(含コード&リンク):
JPEG-LSでは予測誤差を量子化することでNEAR-LOSSLESSを実現している。
予測誤差を量子化せずにNEAR-LOSSLESSを実現しなさい。
なお採点は
(1)JPEG-LSのソースコードを見つける[10点]
(2)プログラムを書き、NEAR-LOSSNESSを実現する[20点]
(3)出来た画像を見て考察をする[20点]
(4)他の符号化方式で(1)〜(3)を行う.
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C言語
[4] 期限: 4/18 22:00まで
[5] その他の制限:ソースコードは見つけたので
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
の:C/C++の宿題を片付けます 124代目の9035.zipにアップしておきました。
各画素の輝度値に所望誤差を加え,それを量子化ステップで割って,
可逆符号化をして,復号し,その後各画素の輝度値に量子化ステップを
かけてあげれば出来るのでないかと思い、先生に確認したところ
それでできるとのことだったのですが、書き方がよくわかりませんでした。
どなたかお願いいたします。
0813デフォルトの名無しさん2009/04/17(金) 00:33:18
[1] 授業単元:応用プログラミング実習

[2] 問題文(含コード&リンク)
演習1:任意の長さのint型の配列を用意し,昇順にソートせよ.また,最小値,最大値,平均値を出力せよ.

演習2:文字列とある文字を入力し,文字列中にその文字が現れた位置を表示するプログラムを作成せよ.但し,含まれなければ“なし”と表示する.
  (例: ABCDとB を入力 結果 2番目 )

演習3:任意の大きさの2つの正方行列を標準入力から入力し,2次元配列に保存し,これら2つの行列の差を求め,表示するプログラムを作成せよ

[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語: C言語
[4] 期限: 4/20 8:00まで
[5] その他の制限:まだfor、while、多次元配列などの基礎のみしか学習していません。
08148112009/04/17(金) 00:33:56
すみません 問題4だけでもお願い出来ないでしょうか
既存のソースをテンプレート化する問題です
よろしくおねがいします
0815デフォルトの名無しさん2009/04/17(金) 01:10:44
Nの階乗を再帰を用いた方法で計算してその計算過程も表示するプログラムを教えてください

参考書とにらめっこしたけどさっぱりわかりません
0816デフォルトの名無しさん2009/04/17(金) 01:23:26
>>814
問題4、別にあまり変えるとこないけど
template<class T>
typename T::value_type median(const T &ary) {
typename T::size_type num = ary.size();
if(num%2 != 0) {
std::partial_sort(ary.begin(), ary.begin() + (num/2)+1, ary.end());
return ary[((num+1)/2)-1];
} else {
partial_sort(ary.begin(), ary.begin() + (num+1/2), ary.end());
return (ary[(num/2)-1]+ary[num/2])/2;
}
}
0817デフォルトの名無しさん2009/04/17(金) 01:41:49
>>815
#include <stdio.h>

int fact(int n)
{
    if(n <= 1) return n;

    int m = fact(n - 1);
    printf("%d! = %d * %d! = %d * %d = %d\n", n, n, n - 1, n, m, n * m);
    return n * m;
}

int main()
{
    int n;

    printf("n!を計算します。\nn = ");
    scanf("%d", &n);
    printf("%d! = %d\n", n, fact(n));
    return 0;
}
08188112009/04/17(金) 01:56:32
>>816
テンプレートが全くわかっていないのですが単純にpart3.cppのコードのmedian関数を上記に
変更してpart4.cppにしたのですがそれだとコンパイルエラーになりました。
ヘッダファイルは変更しなくていいですよね。read、prompt、mainはどこか変える必要ありますか?
0819デフォルトの名無しさん2009/04/17(金) 02:07:17
>>815をテンプレートメタプログラミングでやろうとしてみたがエラーでまくりんぐw
0820デフォルトの名無しさん2009/04/17(金) 02:27:42
>>818
入れ替えるんじゃない、追加。
その構造体で動かしたいなら丸投げしとけば
double Abstract_student_info::median()
{
return ::median(homework);
}
08218112009/04/17(金) 03:10:46
>>820
あほですみません。追加というとmedian関数を二回定義汁ということでしょうか?
申し訳ないのですが混乱していますのでヘッダとpart4.cppをうpして頂けると大変たすかります
0822デフォルトの名無しさん2009/04/17(金) 03:27:41
>>821
別に名前を変えたかったら変えてもかまわない。
こんな感じか
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9036.cpp
partial_sortは破壊操作なことを忘れてたから修正もしといた
08238112009/04/17(金) 03:34:30
>>822
ありがとうございます!!コンパイル/実行できました。
まだコードの意味が全くわかっていませんがこれから理解につとめます
テンプレートむずかしい。。。
おやすみなさい(●'w'●)ノ
0824デフォルトの名無しさん2009/04/17(金) 04:34:08
■せっかく>>774を行列式で書くなら
3D空間で同様に書いてみたら?
つまり宇宙的規模と言う事です。

(x1,y1,z1) (x2,y2,z2) (x3,y3,z3)

0825デフォルトの名無しさん2009/04/17(金) 06:45:44
ID違うけど>>815です
>>817さん
ありがとうございます
でも実際にコンパイル/実行してみると
7行目:サーバーエラー、intは間違ってます
と出てしまうんですけどどうすればいいんでしょうか?
ちなみに使っているソフトはCmachineです
勝手ですいませんが回答お願いします
0826デフォルトの名無しさん2009/04/17(金) 07:47:22
int fact(int n)
{
int m;
if(n <= 1) return n;

m = fact(n - 1);
printf("%d! = %d * %d! = %d * %d = %d\n", n, n, n - 1, n, m, n * m);
return n * m;
}

これで多分おk
0827デフォルトの名無しさん2009/04/17(金) 11:19:20
こまけーことはいいんだよ!(例のAA)
と、言われそうだけど

× if(n <= 1) return n;
○ if(n <= 1) return 1;

なぜなら、0! = 1 だから。
0828デフォルトの名無しさん2009/04/17(金) 15:00:21
>>827
そうするつもりで間違えた。指摘ありがとう。
0829デフォルトの名無しさん2009/04/17(金) 16:32:36
>>826-828さん
本当にありがとうございました

何度も質問して申し訳ないんですが
#include<stdio.h>
void main(void)
{
int k,n,sum;
printf("kの値は?");scanf("%d",&n);
sum=1;
for (k=1;k<=n;k++)
sum=sum*k;
printf("合計=%d\n",sum);
}
をさっきのみたいに
途中の計算結果も表示するにはどうすればいいんでしょうか?
0830デフォルトの名無しさん2009/04/17(金) 17:27:57
for (k=1;k<=n;k++) {
printf("%d*%d=%d\n", k, sum, sum*k);
sum=sum*k;
}
0831デフォルトの名無しさん2009/04/17(金) 17:45:03
>>815
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9038.c
0832デフォルトの名無しさん2009/04/17(金) 19:01:22
派生クラスのサイズが、基本クラスのサイズより小さくなる事はありますか?
例えば
class A
{
private: int a
}
class B:: private A
{
}
このように書いた時でも、classBのインスタンスは
Aで定義したaが初期化されてしまうというか
メモリを割り当てられてしまうんですか?
0833デフォルトの名無しさん2009/04/17(金) 20:58:45
>>830-831さん
ありがとうございます
>>830さん
でもそれを入れなおしてコンパイルすると10行目:予期せぬEOFってでます
for (k=1;k<=n;k++) { の{をとってコンパイルするとエラーは出ないんですが
N!の答えで出てきません
申し訳ないですが回答お願いします
0834デフォルトの名無しさん2009/04/17(金) 21:03:40
>>832
試してみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9039.txt
0835デフォルトの名無しさん2009/04/17(金) 21:06:33
for (k=1;k<=n;k++) {
  printf("%d*%d=%d\n", k, sum, sum*k);
  sum=sum*k;
}
0836デフォルトの名無しさん2009/04/17(金) 21:07:34
>>833
だから単文でも中括弧を省略するなとあれほど口を酸っぱk
0837デフォルトの名無しさん2009/04/17(金) 21:15:35
とりあえず
#include<stdio.h>
void main(void)
{
int k,n,sum;
printf("kの値は?");scanf("%d",&n);
sum=1;
for (k=1;k<=n;k++) {
printf("%d*%d=%d\n", k, sum, sum*k);
sum=sum*k;
}
でコンパイルしたんですが10行目:予期せぬEOFです。
ってでました
どうすればいいんでしょうか?
08388352009/04/17(金) 21:22:48
for (k=1;k<=n;k++) {
  sum=sum*k;
}
printf("合計=%d\n",sum);
  △
  ▼
for (k=1;k<=n;k++) {
  printf("%d*%d=%d\n", k, sum, sum*k);
  sum=sum*k;
}
printf("合計=%d\n",sum);
0839デフォルトの名無しさん2009/04/17(金) 21:28:01
>>838さん
ようやくできました・・・。
ありがとうございました
お騒がせしてもしわけなかったです
0840デフォルトの名無しさん2009/04/17(金) 21:29:56
>>834
ありがとうございます。
コピペして走らせて見ました。
どうやっても増えちゃいますね。
0841デフォルトの名無しさん2009/04/17(金) 22:21:28
[1] 授業単元:プログラミング演習

[2] 問題文:複数個あるのでzipにまとめました。
課題1〜3 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9040.zip
課題4 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9041.zip

[3] 環境
 [3.1]OS:Windows
 [3.2]VC++ 2005
 [3.3]C

[4] 期限:4月24日

[5] その他の制限:各課題に指定あり
0842デフォルトの名無しさん2009/04/17(金) 22:57:16
>>841
どうでも良いけど課題3簡単過ぎじゃない?
#include <stdio.h>
main()
{
puts("名前:山田 太郎");
puts("学籍番号:00A000");
puts("好きな科目:プログラミング演習");
}
0843デフォルトの名無しさん2009/04/17(金) 23:05:05
>>841
課題1
#include <stdio.h>

int main()
{
    int a = 5, b = 8;
    printf("a=%d\nb=%d\na*3=%d\nb*2=%d\na*3-b*2=%d",a,b,a*3,b*2,a*3-b*2);
    return 0;
}

課題2
#include <stdio.h>

int main()
{
    int a, b, c;
    printf("a="), scanf("%d", &a);
    printf("b="), scanf("%d", &b);
    c=a*3-b*2;
    printf("\na*3=%d\nb*2=%d\na*3-b*2=%d",a*3,b*2,c);
    return 0;
}
0844デフォルトの名無しさん2009/04/17(金) 23:06:19
課題4
#include <stdio.h>

int main(void)
{
int a;
printf("入学年度(2桁)?");
scanf("%2d",&a);
printf("学籍番号:%02dH777\n",a);
printf("山田 太郎\n");
}

どうでもいいけど
typoをわざとやらせるとか
"が全角だとかはこういうレベルの人たちに気づかせようってのは
間違ってる気がする。
自分で間違うヤツはいっぱいいるけど
0845デフォルトの名無しさん2009/04/17(金) 23:10:05
>>843
課題4
#include <stdio.h>

int main(void)
{
    int a;
    printf("入学年度(2桁)?");
    scanf("%2d", &a);
    printf("学籍番号:%02dH777\n", a);
    printf("山田 太郎\n");
    return 0;
}
0846デフォルトの名無しさん2009/04/17(金) 23:12:10
しまった
mainがintだからreturnは必要か
0847デフォルトの名無しさん2009/04/17(金) 23:13:06
課題が酷すぎてそんな事どーでもよくなる
0848デフォルトの名無しさん2009/04/17(金) 23:13:59
教えてる側からしたらtypoで動かないんですけどって呼ばれるのはめんどくさいから
早めに体験させとくのは悪くないと思うけど。大学の講義としてはすごくベタな問題だよそれ
08498412009/04/17(金) 23:18:20
早速解いていただき有難うございます!
まだ習いたてで何度試しても上手くいきませんでしたorz
これから授業について行けるように頭に叩き込もうと思います。
0850デフォルトの名無しさん2009/04/18(土) 00:01:48
>>849
こんな問題出すような先生の言うことは聞いちゃダメだぞ
自分で勉強するんだ
0851デフォルトの名無しさん2009/04/18(土) 00:05:53
>>850
それじゃあ単位取れないだろw
無難にこなしつつも軽蔑しろ
といわなきゃ
0852デフォルトの名無しさん2009/04/18(土) 00:57:50
課題4を除けば4月の課題としては普通だが

そういえば大学でTAやってたころ、全角半角分からないヤツに
教科書を丸写ししたのにコンパイルできないんです〜〜とか
そういう質問をいっぱい受けたなぁ

ぐちゃぐちゃなコード見せられて
これが動かない、何とかしろという馬鹿に
インデントしろとかコメントかけ、何がしたいかも分からん
とか言うとそんなことどうでも良いだろとか逆ギレされたなぁ

期末に全く授業出てないけどこのレポート出したら単位もらえるから
答えを教えろといってきたヤツまでいたっけ

このスレとあんま変わらんか
0853デフォルトの名無しさん2009/04/18(土) 01:01:27
>>813
やってくれる方どなたかいませんか?><
0854デフォルトの名無しさん2009/04/18(土) 01:10:38
いるよなあ
バグ持ちでなかなか動かない汚いプログラムをいつまでも
いじくり回してる奴

こちらは一から綺麗に書き直してやってるのにそれに目もくれずに
「これを直してください」の一点張り

知るかよそんなの
0855デフォルトの名無しさん2009/04/18(土) 01:36:06
>>813 演習3
#include <stdio.h>
int main(void) {
  int i, j, n, *dataA, *dataB, *wa, *wb;

  printf("Input N:"); scanf("%d", &n);
  if((dataA = malloc(n*n*sizeof(int))) == 0) return 1;
  if((dataB = malloc(n*n*sizeof(int))) == 0) return 1;

  printf("Input Matrix A %d X %d\n", n, n);
  for(i=0; i<n; i++) {
    wa = &dataA[i*n];
    printf("A %d : ", i+1);
    for(j=0; j<n; j++) scanf("%d", &wa[j]);
  }
  printf("Input Matrix B %d X %d\n", n, n);
  for(i=0; i<n; i++) {
    wb = &dataB[i*n];
    printf("B %d : ", i+1);
    for(j=0; j<n; j++) scanf("%d", &wb[j]);
  }

  puts("Print out A-B=C");
  for(i=0; i<n; i++) {
    wa = &dataA[i*n];
    wb = &dataB[i*n];
    printf("C %d : ", i+1);
    for(j=0; j<n; j++) printf("%d ", wa[j] - wb[j]);
    puts("");
  }
  return 0;
}
0856デフォルトの名無しさん2009/04/18(土) 03:05:28
>> 813

#include <stdio.h>
enum { ARRAY_NUM = 10 };
void disp_array(int *array, int num) {
 int i;
 printf("Array:");
 for (i = 0; i < num; i++) printf(" %d", array[i]);
 printf("\n");
}
int main(void) {
 int array[ARRAY_NUM];
 int min, max, sum;
 int i, j; int temp;
 
 for (i = 0; i < ARRAY_NUM; i++) scanf("%d", &array[i]);
 disp_array(array, ARRAY_NUM);
 
 min = max = array[0]; sum = 0;
 for (i = 0; i < ARRAY_NUM; i++) {
  for (j = i + 1; j < ARRAY_NUM; j++) {
   if (array[j] < array[i]) { temp = array[i]; array[i] = array[j]; array[j] = temp; }
  }
  if (array[i] < min) min = array[i];
  if (array[i] > max) max = array[i];
  sum += array[i];
 } 
 disp_array(array, ARRAY_NUM);
 printf("min: %d, max: %d, average: %d\n", min, max, sum / ARRAY_NUM);
 return 0;
}
0857デフォルトの名無しさん2009/04/18(土) 03:10:31
>> 813

演習2

#include <stdio.h>
enum { STRING_LENGTH = 100 };
int find_char(char *str, char ch) {
 int i;
 if (str == NULL) return -1;
 i = 0;
 while (str[i]) {
  if (str[i] == ch) return i + 1;
  i++;
 }
 return -1;
}

int main(void) {
 char str[STRING_LENGTH];
 char ch;
 int num;
 printf("str >> ");
 scanf("%s", str);
 fflush(stdin); /* fflush()を使うのは本当は正しくない */
 printf("char >> ");
 scanf("%c", &ch);
 
 num = find_char(str, ch);
 if (num < 0) printf("なし\n");
 else printf("%d番目\n", num);
 return 0;
}
0858デフォルトの名無しさん2009/04/18(土) 03:12:11
>>856,857

安価の付け方ミスったぜ……。
>>856が演習1。全角空白を適当に変換してくれ。
0859デフォルトの名無しさん2009/04/18(土) 03:42:18
>>858
夜遅くにありがとうございました><
0860デフォルトの名無しさん2009/04/18(土) 06:08:54
演習2はstrcspnかstrchr使えばええんちゃうの?
0861デフォルトの名無しさん2009/04/18(土) 07:46:22
>>813 1、2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9042.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9043.c
08628552009/04/18(土) 08:14:29
>>813 演習3
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9044.txt
0863デフォルトの名無しさん2009/04/18(土) 12:20:32
すみません>>842がビルドエラーになるのですがとこが間違ってるのでしょうか?
0864デフォルトの名無しさん2009/04/18(土) 12:21:46
少なくとも出力されているエラーを貼りましょう
0865デフォルトの名無しさん2009/04/18(土) 12:23:37
mainの戻り値とかが怪しいな
それ以上はエスパーじゃないから分かんない
08668632009/04/18(土) 12:30:56
説明不足ですみません。
以下がエラーメッセージになります。

errorC4430:型指定子がありません - intと仮定しました。
メモ:C++はintを既定値としてサポートしていません。

あと、3行目に問題があるようです。
■ このスレッドは過去ログ倉庫に格納されています