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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けない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++の宿題片付けます 125代目
http://pc12.2ch.net/test/read.cgi/tech/1240226599/
2デフォルトの名無しさん:2009/05/18(月) 23:19:03
>>1
(・・)乙
3デフォルトの名無しさん:2009/05/18(月) 23:37:58
                          刀、           , ヘ
                  /´ ̄`ヽ /: : : \_____/: : : : ヽ、
              ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
               /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
     ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
    /: :.,.-ァ: : : |: : : : : : : : :    :\: : : : :: : : :ヽ  \   /: : : :/
    ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i  / /: : : : :/
     /: :     ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/  /: : : : :/         、
.    /: : /  . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : |  /: : : : :/            |\
   /: : ィ: : : : :.i: : |   \!___/ ヽ:: : : : : : :\|:.:.:.:/:!  ,': : : : /              |: : \
   / / !: : : : :.ト‐|-    ヽ    \: : : : : l::::__:' :/  i: : : : :{              |: : : :.ヽ
   l/   |: : :!: : .l: :|            \: : : l´r. Y   {: : : : :丶_______.ノ: : : : : :}
      l: : :l: : :ト、|         、___,ィ ヽ: :| ゝ ノ    '.: : : : : : : : : : : : : : : : : : : : : : /
      |: : :ト、: |: :ヽ ___,彡     ´ ̄´   ヽl-‐'     \: : : : : : : : : : : : : : : : : : イ
        !: :从ヽ!ヽ.ハ=≠' , ///// ///u /           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      V  ヽ|    }///  r‐'⌒ヽ  イ〉、
              ヽ、______ー‐‐' ィ´ /:/:7rt‐---、       こ、これは>>1乙じゃなくて
                  ィ幵ノ ./:/:./:.! !: : : : :!`ヽ     ポニーテールなんだから
              r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\   変な勘違いしないでよね!
               /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
4デフォルトの名無しさん:2009/05/20(水) 12:45:44
[1] 授業単元: 中級C++
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9209.zip
[3] 環境
 [3.1] OS: ウィンドウズ
 [3.2] コンパイラ名とバージョン: ビジュアルC++
 [3.3] 言語: C++
[4] 期限: 2009年5月21日朝まで
[5] その他の制限:
「もともと」ディレクトリは提供されたオリジナルのファイルです。
(1)は自力で出来ましたので一応添付しています。わからないのは(2)以降です。
具体的にどのようなアウトプットを求めているのか、問題の意味もあまりよくわかりません。
(3)、(4)になるとますます何を求めているのかわからないのですが、とりあえずいつも
問題が曖昧な先生なのでそれっぽいことをコードで示せば許してもらえます。
という訳で適当な感じでも構わないので(2だけでも結構ですので)よろしくおねがいします
5デフォルトの名無しさん:2009/05/20(水) 16:00:30
[1] 授業単元: 上級者ためのC++(アルゴリズムとデータ構造)
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9211.zip
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VisualC++2008 Express Edition
 [3.3] 言語: C++
[4] 期限: 2009年5月21日朝8:00まで
[5] その他の制限: 難易度高いと思いますがどなたかお願いします
66 ◆tr.t4dJfuU :2009/05/20(水) 18:06:23
【質問テンプレ】
[1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): http://d.pic.to/vrk8t
・2つの数xとyはint型で定義し、キーボードから入力すること。
・掛けられる数(*の左側)はx,…,x+3まで変化させること。
・掛ける数(*の右側)はy,…,y+14まで変化させること。
・出力形式は写真実行例をそっくり真似ること。
・xとyの値の範囲は−9以上9以下とする。
・どんな値を入力しても桁がそろうようにすること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC++2008
 [3.3] 言語: C++
[4] 期限: ([2009年5月20日23:59まで]
[5] その他の制限: scanf,printf,forを使ってやるようにとのことです

お願いします

7デフォルトの名無しさん:2009/05/20(水) 18:14:48
>>5
行頭の判定のやり方が微妙だが他に思いつかなかったので
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9213.txt
8デフォルトの名無しさん:2009/05/20(水) 18:25:07
問題がzipだと見る気がしないでござる
9デフォルトの名無しさん:2009/05/20(水) 18:31:48
>>6
#include <stdio.h>
int main(){
int x, y;
printf("x="); scanf("%d", &x);
printf("y="); scanf("%d", &y);
for(int i = y; i <= y+14; ++i){
for(int j = x; j <= x+3; ++j)
printf("[%2d]*[%2d]=[%4d],", j, i, i*j);
printf("\n");
} return 0;
}
10デフォルトの名無しさん:2009/05/20(水) 19:44:36
よろしくお願いします。
授業単元ソフトウェア製作実習
osソラリス
コンパイラgcc
言語c
高さhが2で上底aと下底bが次のような値の台形4つの面積の合計を求めるプログラムをfor文を使って作成せよ。
表示形式
台形(1)a=0、b=4、h=2 面積=
台形(2)a=4,b=16h=2面積=
台形(3)a=16、b=36、h=2面積=
台形(4)a=36、b=64 h=2 面積=
4つの台形の面積の合計=
11デフォルトの名無しさん:2009/05/20(水) 20:27:22
>>994
課題1
#include <stdio.h>
#include <unistd.h>

int rm(char *file)
{
int ret;
ret = unlink(file);
if (ret < 0){
perror(file);
}
return ret;
}

int main(int argc, char *argv[])
{
while (--argc > 0)
rm(*++argv);
return 0;
}
12デフォルトの名無しさん:2009/05/20(水) 20:27:45
#include <stdio.h>

int main(void)
{
int a, b, i, area, total_area = 0;

for(i=1; i<=4; i++) {
a = (i-1) * (i-1) * 4;
b = i * i * 4;
area = a + b;
printf("台形(%d)a=%2d、b=%2d、h=2 面積=%d\n", i, a, b, area);
total_area += area;
}

printf("4つの台形の面積の合計=%d\n", total_area);

return 0;
}
13デフォルトの名無しさん:2009/05/20(水) 20:43:48
>>010 0/4=0, 4/4=1, 16/4=4, 36/4=9, 64/4=16, .... なるほど感心するわ。
// gcc --input-charset=cp932 --exec-charset=cp932
#include <stdio.h>
int main() {
  int i;
  float daikei[][3] = {
    0,4,2,
    4,16,2,
    16,36,2,
    36,64,2,
    }, menseki, goukei = 0.0;

  for(i=0; i<sizeof(daikei)/sizeof(daikei[0]); i++) {
    menseki = (daikei[i][0] + daikei[i][1]) * daikei[i][2] / 2.0f;
    goukei += menseki;
    printf("a=%.0f b=%.0f h=%.0f 面積=%.0f\n",
      daikei[i][0], daikei[i][1], daikei[i][2], menseki);
  }
  printf("合計面積=%.0f", goukei);
  return 0;
}
145:2009/05/21(木) 01:56:09
>>7
すごいっす。有り難うございました。
15デフォルトの名無しさん:2009/05/21(木) 01:59:13
>>12>>13
ありがとうございます。
16デフォルトの名無しさん:2009/05/21(木) 08:31:11
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):CRUD操作及びファイル入出力の出来るデータベースを作成せよ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年05月23日12:00まで

ソートする直前までは作ったのですが、正しく動きませんでした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9214.c
17デフォルトの名無しさん:2009/05/21(木) 08:55:16
そのソース、どこかのコピペやなw
184:2009/05/21(木) 09:56:52
期限過ぎてしまいましたが、どなたかお願いできないでしょうか?(o*。_。)oペコッ
19デフォルトの名無しさん:2009/05/21(木) 10:53:31
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
整数を入力していき、「0」が入力されたらその1 つ前までに入力された数値の
平均値を求めるプログラムを、while 文を用いて作成せよ。
ここでは最低1 つの0 以外の数値が入力されるとしてよい。
平均値は小数点以下2 桁まで表示すること。

 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2005
 [3.3] 言語: C++
[4] 期限:2009/5/21
[5] その他の制限:
20デフォルトの名無しさん:2009/05/21(木) 11:10:10
1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
  正の整数nを入力し、1 から100 までの間にあるnの倍数をすべて表示す
 ると共に、それらnの倍数の和を表示するプログラムを作成せよ。

  例えば25を入力したら,その倍数である25, 50, 75, 100とそれらの和で
 ある250が表示されることになる。

  
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン gcc
 [3.3] 言語:C
[4] 期限: 2009年5月22日0:00まで
[5] その他の制限:以前にも書き込んだのですが、私の書き込みにミスがありましたのでもう一度書きます。よろしくお願いします。
21デフォルトの名無しさん:2009/05/21(木) 11:23:13
>>19
#include <iostream>
#include <iomanip>
int main(void)
{
int i, n, sum;
n = sum = 0;
while(1)
{
std::cin >> i;
if (i == 0)
break;
sum += i;
n++;
}
std::cout << std::fixed << std::setprecision(2) <<
(double)sum / n << std::endl;
return 0;
}
22デフォルトの名無しさん:2009/05/21(木) 11:26:13
>>20
#include <stdio.h>
int main(void)
{
int n, i, sum;
printf("正の整数nを入力せよ: ");
scanf("%d", &n);
sum = 0;
for(i = 1; i <= 100; i++)
{
if (i % n == 0)
{
printf("%d\n", i);
sum += i;
}
}
printf("%d\n", sum);
return 0;
}
23デフォルトの名無しさん:2009/05/21(木) 12:02:10
[1] 授業単元: 社会情報入門
[2] 問題文(含コード&リンク):
次の無限等比級数の和を、各項を順に加算していくことにより求めるプログラムを書け。
1+(1/3)+(1/9)+(1/27)+.....
ただし、0.00001以下となる項を加えた時点で加算を終了することとする。 
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 2009年5月22日12:50まで
[5] その他の制限:なし
 
よろしくお願いします。
24デフォルトの名無しさん:2009/05/21(木) 12:06:59
>>16
相当直さないと動かないぞ。
createData()見ただけでも、メモリ確保とかポインタの使い方が変。
2519:2009/05/21(木) 12:08:08
>>21
#include <iostream>
#include <iomanip>

std::cout << std::fixed << std::setprecision(2) <<
など習ってないことが多いのでもう少し簡単にできないでしょうか?

#include <stdio.h>で書いてもらえるとありがたいです


追記で
実行例

整数を入力: 9
整数を入力: 3
整数を入力: 8
整数を入力: 10
整数を入力: 7
整数を入力: 3
整数を入力: 0
平均値は 6.67
26デフォルトの名無しさん:2009/05/21(木) 12:34:54
>>25
後出し氏ね
27デフォルトの名無しさん:2009/05/21(木) 12:54:48
>>25
それはC言語というものなのだよ
28デフォルトの名無しさん:2009/05/21(木) 13:06:59
>>25
#include <stdio.h>
int main()
{
int d, count = 0, sum = 0;
while (1) {
printf("整数を入力:"); scanf("%d",&d);
if (d == 0) break;
sum += d; count++;
}
printf("平均値は%.2lf\n",(double)sum/count);
return 0;
}

>[3.3] 言語: C++
って書いたら、当然C++で回答が書かれます
回答者に無駄な作業をさせないように依頼して下さい。

29デフォルトの名無しさん:2009/05/21(木) 13:08:35
>>24
メモリ確保の仕方だけで構いませんので、教えていただけないでしょうか?
30デフォルトの名無しさん:2009/05/21(木) 13:12:50
[1]C++言語初心者コース
[2]問題文:
C++コードではiostream、iomanipを必ず使わなければならないことを
示す例を作れ。無い場合はその旨50字以内に日本語仮名交じり文で
記述せよ
[3]OS:Windows/コンパイラ:GCC on CygWin/言語C++
[4]本日中

困ってます。よろしくです。
31デフォルトの名無しさん:2009/05/21(木) 13:25:23
>>29
確保の仕方だけ教えたところで
ポインタ理解してなきゃ結局全部聞く羽目になるぞ
つか今ソース見たが、確保というより格納の仕方と言ったほうが正しいのかもしれん

>>30
アバウトすぎ
前後に問題あればそれも出した方が
問題の意図がわかるかもしれんが
32デフォルトの名無しさん:2009/05/21(木) 13:58:20
>>29
 Create *Data;
 Data = (Create *)malloc(sizeof(Create));
 for(i=0;;i++){
  Data[i].id = ID;
  ID++;
  glob_DB[i] = Data[i];
  free(Data);
 }

これが変だという事が理解できないと、どこから説明したらいいのかなと思う。
動的に確保するのではなく、固定で大きな配列を用意し、
動くプログラムを書く位の力はあるかい?
33デフォルトの名無しさん:2009/05/21(木) 14:12:36
>>32
mallocをループの中に入れた後、stdlib.hをインクルードしたところ警告は消えたのですが、
やはりそんなレベルの問題ではないのでしょうか?
34デフォルトの名無しさん:2009/05/21(木) 14:19:31
>>28
ありがとうございます。
以後気をつけます
35デフォルトの名無しさん:2009/05/21(木) 14:29:48
>>33
実行してみ?
PCが壊れる、ってことはないとは思うが自己責任でw
36デフォルトの名無しさん:2009/05/21(木) 15:38:36
押し売りせずに信頼を得て、油外収益は地域トップクラスです。
油外おいしいです^^
37デフォルトの名無しさん:2009/05/21(木) 16:08:41
>>33
>mallocをループの中に入れた後、stdlib.hをインクルードしたところ警告は消えたのですが、
警告が出ているうちは、間違いを指摘してくれているので良いが、
警告が消えたからって、正しく動く訳じゃない。正しいロジックで書いてないと動きません。
createData()を例にとれば、
Data[i].id = ID;←これはまずい。確保した領域は一つしかない。ワープします。
glob_DB[i] = Data[i];←これもまずい(左右とも)
free(Data); ←せっかく格納したデータは何処へ行くだろうか?

「添え字を使ってアクセス」が何を意味し、何処を指すのかを理解する必要があるよ。

入力したデータは何処に格納するのか。関数内の一時的格納か、それとも処理終了まで保持するのか。
格納領域はどのタイミングで確保するのか。確保した格納データはどうやって管理するのか。
確保した領域は、どのタイミングで解放するのか。この辺をちゃんと考えてみる必要がある。

動的に領域確保するのが難しいなら、glob_DBで1000件程度配列で確保し、
正常に動くプログラムをまず作ってみると良い。
38デフォルトの名無しさん:2009/05/21(木) 16:13:07
CRUD操作の意味がわからん^^
39デフォルトの名無しさん:2009/05/21(木) 16:18:31
【質問テンプレ】
[1] 授業単元:Cの基礎
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9215.txt
[3] 環境
 [3.1] OS:XP 
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 一週間
[5] その他の制限: while文かdo-while文を使い、なるべく簡単にお願いします。
40デフォルトの名無しさん:2009/05/21(木) 16:35:59
>>39
#include<stdio.h>
#include<math.h>

int main(void)
{
double si_1, si, x;

printf("実数 x : ");
scanf("%lf", &x);

si_1=1;
do
{
si=si_1;
si_1=(si+x/si)/2;
}
while(fabs(si_1-si)>=0.00001);
printf("sqrt(%f)=%f\n", x, si);

return 0;
}
41デフォルトの名無しさん:2009/05/21(木) 16:38:20
>23
#include <stdio.h>
int main()
{
double sum = 0.0;
double e = 0.00001;
int x = 1;
double a;
while (1) {
a = 1.0 / x; sum += a;
if (a < e) break;
x *= 3;
}
printf("%.15lf\n", sum);
return 0;
}
42デフォルトの名無しさん:2009/05/21(木) 17:35:01
>>38
Create Read Update Delete
43デフォルトの名無しさん:2009/05/21(木) 19:41:13
よろしくお願いします。
授業単元アルゴリズム実習
osソラリス
言語 c
コンパイラ gcc
高さhが2で上底aと下底bが次のような値の台形4つの合計を求めるプログラムをfor文を使って作成せよ。
表示形式
台形(1)a=0、b=2^2、h=2、面積=
台形(2)a=2^2、b=4^2、h=2 面積=
台形(3)a=4^2、b=6^2、h=2 ,面積=
台形(4)a=6^2、b=8^2 h=2 面積=
4つの台形の面積の合計=
44デフォルトの名無しさん:2009/05/21(木) 19:47:27
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9217.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:cc
 [3.3] 言語:C
[4] 期限:[2009年5月22日19:00まで]
[5] その他の制限:問題文と共に記述してあります.
45デフォルトの名無しさん:2009/05/21(木) 19:53:23
46デフォルトの名無しさん:2009/05/21(木) 20:06:44
>>43
#include <stdio.h>

int main(void)
{
int i, temp, s = 0;

for(i=0; i<4; i++) {
temp = 4 * i * i + 4 * (i+1) * (i+1);
printf("台形(%d)a=%d%s,b=%d^2,h=2,面積=%d\n", i+1, i*2, i?"^2":"", 2*(i+1), temp);
s += temp;
}

printf("4つの台形の面積の合計=%d", s);

return 0;
}
47デフォルトの名無しさん:2009/05/21(木) 20:29:37
>>45
わかってます。今度のは二乗の計算をしなくてはいけないので。。。
48デフォルトの名無しさん:2009/05/21(木) 20:44:01
表示が違うだけで計算内容は同じだけどな。
49デフォルトの名無しさん:2009/05/21(木) 20:49:13
マルチになってしまいますが、後になってこちらのスレの存在に気付いたので
再び質問させていただきます。

以下のコードの流れについて知りたのですがよく分かりません。
行ごとに簡単に解説してくれると助かります。よろしくお願いします。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
Animations:nil context:nil];
[UIView setAnimationDuration:0.7];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:selfcache:YES];
if ( enabled )
[[UIApplication sharedApplication] sendAction:@selector(buttonPushed:)
to:target from:self forEvent:event];
[UIView commitAnimations];
50デフォルトの名無しさん:2009/05/21(木) 20:53:59
>>46さんありがとうございます。
51デフォルトの名無しさん:2009/05/21(木) 20:58:39
>>49
Objective-Cはスレ違い
52デフォルトの名無しさん:2009/05/21(木) 21:09:19
>>51
確かにそうなのですが、マイナーなので他に聞く場所がありません。
ここなら分かる方もいるのではないかと思い質問させていただきました。
53デフォルトの名無しさん:2009/05/21(木) 21:17:21
>>52
お引き取り下さい
54デフォルトの名無しさん:2009/05/21(木) 21:24:27
>>52
Objective-C [ObjC part:4];
http://pc12.2ch.net/test/read.cgi/tech/1239721860/l50

スレ立てるまでもない質問はここで 97刷
http://pc12.2ch.net/test/read.cgi/tech/1240877154/l50
55デフォルトの名無しさん:2009/05/21(木) 21:27:07
せめて適当なうpローダーにきちんとインデントを付けたコードをうp
してくれればObjective-C/C++でもある程度は答えてくれる奴が
居そうな感じだが読みにくいコードベタ張りは論外。基本的には
専用スレがありそこが過疎ってなければそちらのほうで聞くのが無難
56デフォルトの名無しさん:2009/05/21(木) 21:58:11
>>23をお願いします。
57デフォルトの名無しさん:2009/05/21(木) 21:59:17
BCDライブラリ書かないと誤差がすごくて・・・
58デフォルトの名無しさん:2009/05/21(木) 22:04:49
59デフォルトの名無しさん:2009/05/21(木) 22:13:31
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
(1)キーボードから2整数を読み込んで読み込んだ順に標準出力にそれらの
値の10進数表現をスペース文字で区切って、1行に書き出し改行する。
読み込んだ1番目の整数の値が1000でなければ、次の2整数を読み込み
同様に書き出す。1番目の値が1000のときプログラムの実行を終了する。
このような仕様を満たすプログラムを作成せよ。(do-whileループで作成)

(2)キーボードから3整数を読み込み、小さい順に出力するようなプログラム
を作成せよ。(目的が達成されればどのようなプログラムでも構わない。)
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5月22日 13:00まで
[5] (2)はなるべく簡単なものでお願いいたします。できたら数パターン
教えてくだされば幸いです。
60デフォルトの名無しさん:2009/05/21(木) 22:23:49
>>22 (・∀・)ニヤァ〜
61デフォルトの名無しさん:2009/05/21(木) 22:39:40
>>59
(2)
#include <stdio.h>

int main(void)
{
int a, b, c;

scanf("%d%d%d", &a, &b, &c);

if(a < b) {
if(c < a) printf("%d %d %d", c, a, b);
else {
if(b < c) printf("%d %d %d", a, b, c);
else printf("%d %d %d", a, c, b);
}}
else {
if(c < b) printf("%d %d %d", c, b, a);
else {
if(c < a) printf("%d %d %d", b, c, a);
else printf("%d %d %d", b, a, c);
}}

return 0;
}
62この板でいいの?:2009/05/21(木) 22:39:58
プログラミングは全くの初心者(CもJavaもなにも分からない)です。
質問があります。

ある資格試験の自動学習ソフト(将来的には自動学習ホームページ)を
作りたいと思っています。
そのための資料は既にあります。
A4で300頁程度で表、図もあります。
これを、
(1)順々に質問文をユーザに見せてから、回答ボタンをクリックすると答画面を示すモード
(2)樹系図的に内容を表示するモード
(3)画面の印刷を行うモード
を有して学習するソフトを作りたいのですが、どうしたらよいでしょうか?
とりあえず、試行的にテキストを貼り付けるだけで、質問画面と回答画面を表示できるソフトを
簡単に作れるようなものはないでしょうか?
ソフトを作れる人に作成を依頼するとどのくらい費用はかかるでしょうか?
よろしくお願いします。
63 ◆1xScF1fQr2 :2009/05/21(木) 22:51:13
[1] 授業単元:C言語応用
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9218.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:2009年05月25日まで。
[5] その他の制限:階乗(n!)の計算とべき乗(xn)の計算には、再帰処理を使用する。

よろしくお願いします。
64デフォルトの名無しさん:2009/05/21(木) 23:08:33
>>62
HTML+JavaScriptが一番簡単そう。
そしてもしそうするならスレ違い。
65123to:2009/05/21(木) 23:10:53
はじめたばかりです
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
課題
 0〜100の範囲で画面から入力された複数の数値の中で、最大値と最小値を
 表示するプログラムを作成する。
○ソフトウェア構成要求
 最大値と最小値はmain関数以外の一つの関数の中で求める(サブルーチン化する)。
○動作要求仕様
 -1が入力された場合は入力の終わりとする。
 入力された数値を記憶する配列の要素数は10とし、
 10個まで入力された場合は-1を入力されなくても最大値と最小値を出力する。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5
 [3.3] 言語: C
[4] 期限: 2009年5月25日12:00まで
[5] その他の制限:できるだけ簡単なもの
66デフォルトの名無しさん:2009/05/21(木) 23:12:35
>>63
もしかして、その課題の後に自由課題ある?
67デフォルトの名無しさん:2009/05/21(木) 23:17:52
>>62
有料なら考えてもいいが?
問題はどうやって連絡を取るかなんだが。
68デフォルトの名無しさん:2009/05/21(木) 23:20:25
>>63
>>63
#include <stdio.h>
#include <math.h>
#define PI 3.14159

double power(double x, long int n);
double sine(double x);
long int kaijou(long int n);

int main(void){
double sinx,sinf,x=0.0,dif;
printf("+-------------------------------------+\n");
printf("| x | sine(x) | sin(x) | dif |\n");
printf("+-------------------------------------+\n");
do{
sinx=sine(x);
sinf=sin(x);
dif=sinx-sinf;
printf("| %.4lf | % .4lf | % .4lf | %.4lf |\n",x,sinx,sin(x),dif);
x+=PI/8;
}while(x<2*PI);
printf("+-------------------------------------+\n");
}
69デフォルトの名無しさん:2009/05/21(木) 23:21:12

long int kaijyou(long int n){ //再帰処理
if(n==0){
return 1.0;
}
else{
return n*kaijyou(n-1); //再帰処理実行
}
}

double sine(double x){
long int i, n=5;
double ans=0.0;
for(i=0;i<n;++i){
ans+=power(-1,i)*power(x,2*i+1)/kaijyou(2*i+1);
}
return ans;
}
70デフォルトの名無しさん:2009/05/21(木) 23:22:15

dif=sinx-sinf;
printf("| %.4lf | % .4lf | % .4lf | %.4lf |\n",x,sinx,sin(x),dif);
x+=PI/8;
}while(x<2*PI);
printf("+-------------------------------------+\n");
}

long int kaijyou(long int n){ //再帰処理
if(n==0){
return 1.0;
}
else{
return n*kaijyou(n-1); //再帰処理実行
}
}
71デフォルトの名無しさん:2009/05/21(木) 23:23:11

double sine(double x){
long int i, n=5;
double ans=0.0;
for(i=0;i<n;++i){
ans+=power(-1,i)*power(x,2*i+1)/kaijyou(2*i+1);
}
return ans;
}

double power(double x, long int n){ //再帰処理
if(n==0){
return 1.0;
}
else{
return power(x,n-1)*x; //再帰処理実行
}
}
72デフォルトの名無しさん:2009/05/21(木) 23:24:20
度数表示がないからやり直し
73デフォルトの名無しさん:2009/05/21(木) 23:27:13
ごめん、微妙に作ったのと違った。
74デフォルトの名無しさん:2009/05/21(木) 23:28:59
>>63
#include <stdio.h>
#include <math.h>

int fac(int i) { return i == 1 ? 1 : i * fac(i-1); }
double mypow(double x, int n) { return n == 0 ? 1 : x * mypow(x, n-1); }
double sine(double x)
{
int i, flg = 1;
double ret = 0;
for(i=0; i<5; i++, flg *= -1) ret += mypow(x, i*2+1) / fac(i*2+1) * flg;
return ret;
}

int main(void)
{
int i;

puts("+----------+----------+----------+----------+----------+");
puts("|x(degree) |x(radian) | sine(x) | sin(x) | dif |");
puts("+----------+----------+----------+----------+----------+");
for(i=0; i<=360; i+=15) {
double r = i * M_PI / 180;
double s1 = sine(r), s2 = sin(r);
printf("|%-10d|%8.4f |%8.4f |%8.4f |%8.4f |\n", i, r, s1, s2, fabs(s1-s2));
}
puts("+----------+----------+----------+----------+----------+");
return 0;
}
75デフォルトの名無しさん:2009/05/21(木) 23:31:41
>>43
// gcc --input-charset=cp932 --exec-charset=cp932
#include <stdio.h>
int main() {
  int i;
  float daikei[][3] = {
    0,2,2,
    2,4,2,
    4,6,2,
    6,8,2,
    }, menseki, goukei = 0.0;

  for(i=0; i<sizeof(daikei)/sizeof(daikei[0]); i++) {
    menseki = (daikei[i][0]*daikei[i][0] + daikei[i][1]*daikei[i][1]) * daikei[i][2] / 2.0f;
    goukei += menseki;
    printf("(%d)a=%.0f^2 b=%.0f^2 h=%.0f 面積=%.0f\n",
      i, daikei[i][0], daikei[i][1], daikei[i][2], menseki);
  }
  printf("合計面積=%.0f", goukei);
  return 0;
}
76デフォルトの名無しさん:2009/05/21(木) 23:40:32
>>59です。
>>61さん、ありがとうございます。
77デフォルトの名無しさん:2009/05/21(木) 23:41:30
>>63
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9219.c

ついでに自由課題も。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9220.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9221.c

中部大学工学部情報工学科の岡崎明彦教授の講義ね。ぐぐったらすぐ出てきた。
78デフォルトの名無しさん:2009/05/21(木) 23:46:59
>>63
>>68->>71は19年度の同じような課題で教授が殆ど作ったやつ。
79デフォルトの名無しさん:2009/05/21(木) 23:50:24
>>77
ほんとだC言語応用 マクローリン展開でみつかった。
意外と簡単に見付かるんだね。
8079:2009/05/21(木) 23:58:13
でも年代が違う問題が出てくるんやね。
81デフォルトの名無しさん:2009/05/22(金) 00:00:12
スレチだが
マクローリン展開って2radぐらいまでならそんなに誤差無いんだな
意外だった
82デフォルトの名無しさん:2009/05/22(金) 00:09:13
膜ろりン展開
83デフォルトの名無しさん:2009/05/22(金) 00:10:09
>>79
「sinxの近似値を5項程度によるマクローリン展開で求める関数」でぐぐったら
2つめに今年のが出てきた
84デフォルトの名無しさん:2009/05/22(金) 00:13:21
>>81
浮動小数点は積み残し誤差があるから計算して出たそれぞれの
項をソートして小さい方から順に足した方が誤差が少ないぞ

やってみ
85デフォルトの名無しさん:2009/05/22(金) 00:16:01
そんな手間かけるならsin(x)使うわ
欲しいのは高速動作だ
86デフォルトの名無しさん:2009/05/22(金) 00:19:28
いやそりゃそうだが
x86FPUにもFSINあるしな

ここは宿題スレだからマクローリン展開をコンピューターに
やらせてみましょうって事なんじゃない?
87デフォルトの名無しさん:2009/05/22(金) 00:26:38
>>63>>74>>77どっちを使うんだろうね。
自分としては>>77の方が分かりやすいけど。
88デフォルトの名無しさん:2009/05/22(金) 02:37:41
>>62
お手軽にするならゲームツクール系でいいと思う
89デフォルトの名無しさん:2009/05/22(金) 02:53:17
>>87
メイン関数のループが迂遠な感じだな、77のは。
90デフォルトの名無しさん:2009/05/22(金) 03:02:10
>>65 >できるだけ簡単なもの <それなりに>
#include <stdio.h>
void max_min(int *data, int num, int *max, int *min){
  int lmax = 0, lmin = 100;
  for(num--; num >= 0; num--) {
    if(data[num] > lmax) lmax = data[num];
    if(data[num] < lmin) lmin = data[num];
  }
  *max = lmax;
  *min = lmin;
}
int main() {
  int i, max, min, data[10];
  for(i=0; i<10; i++) {
    printf("%d:",i+1);
    if(scanf("%d", &data[i]) != 1) {
      scanf("%*s"); i--; continue;
    }
    if(data[i] == -1) break;
    if(data[i] < 0 || data[i] > 100) i--;
  }
  max_min(data, i, &max, &min);
  printf("max=%d min=%d\n", max, min);
  return 0;
}
91kenco:2009/05/22(金) 03:06:33
[1] 授業単元:数値計算法
[2] 問題文(含コード&リンク):非線型方程式 f(x)=x^n-a=0 を考える。nは学生番号の下一桁の数字に2を加えたもの。aは誕生日の西暦の下2桁とする。
              f(x)=0の実数解の近似値xを以下の条件を満足させる精度でニュートン法を用いて求めよ。
              |f(x)-0|<1.0*10^(-8)     

[3] 環境
 [3.1] OS: Windows vista
 [3.2] コンパイラ名とバージョン: C-Compiler
 [3.3] 言語: どちらでも可
[4] 期限: 23日まで
[5] その他の制限: なるべく簡単なもので作ってください。
92デフォルトの名無しさん:2009/05/22(金) 03:30:54
93デフォルトの名無しさん:2009/05/22(金) 04:21:56
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
 行列A={{0,1,2},{3,4,5},{6,7,8}}
 行列B={{100,200,300},{400,500,600},{700,800,900}}
  のとき、A+Bを表示するプログラムを作れ
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio
 [3.3] 言語:C++
[4] 期限: 5月25日
[5] その他の制限: 初心者に分かりやすいようにお願いします
94デフォルトの名無しさん:2009/05/22(金) 04:59:18
>>91
#define N (8.0 + 2.0)
#define A 82.0
#define EPS 1e-08
#define LIMIT 50 /* 計算打ち切り回数 */
#include <stdio.h>
#include <math.h>
double f(double x)
{
return pow(x, N) - A;
}
double g(double x)
{
return N * pow(x, N - 1.0);
}
int main(void)
{
double x = 1.0, dx;
int i;
for (i = 0; i < LIMIT; i++) {
dx = x;
x -= f(x) / g(x);
if (fabs(x - dx) < fabs(dx) * EPS) {
printf("解 = %.8f\n", x);
break;
}
}
if (i == LIMIT)
printf("収束しませんでした\n");
return 0;
}
95デフォルトの名無しさん:2009/05/22(金) 05:22:17
9644:2009/05/22(金) 10:16:33
>>92
ありがとうございます。
97デフォルトの名無しさん:2009/05/22(金) 14:46:03
[1] 授業単元:C言語プログラミング
[2] 問題文:10以上の種類の品物(果物など)を、その数が多い順にソートするプログラムを
      「バブルソート」を用いて作成せよ。
      ソート結果の表示にはどの品物が何個かも表示させること。
      品物の種類・個数は任意とするが、なるべくばらけさせること。
      品物が同じ個数だった場合の順番は特に指定しない。
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] 言語:C
[4] 期限:2009/5/25まで
[5] その他の制限:特に無し
98デフォルトの名無しさん:2009/05/22(金) 16:04:42
>>97
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define numberof(s) (sizeof(s) / sizeof(s[0]))
typedef struct { char *name; int number;} ITEM;
ITEM item[] = {
{"めんたい味", 0},{"コーンポタージュ味", 0},{"なっとう味", 0},{"チーズ味", 0},{"テリヤキバーガー味", 0},
{"サラミ味", 0},{"やさいサラダ味", 0},{"チキンカレー味", 0},{"とんかつソース味", 0},{"エビマヨネーズ味", 0},
{"たこ焼味", 0},{"チョコレート味", 0},{"キャラメル味", 0},{"ココア味", 0},{"ぶたキムチ味", 0},{"牛タン塩味", 0}
};
int main()
{
int i, j;
srand(time(NULL));
for (i = 0; i < numberof(item); i++) {
item[i].number = (int)((rand() / ((double)RAND_MAX+1.0f)) * 99) + 1; printf("%s, %d\n",item[i].name,item[i].number);}
printf("---------------------------------------------------\n");
for (i = 0; i < numberof(item) - 1; i++) {
for (j = numberof(item) - 1; j > i; j--) {
if (item[j].number > item[j - 1].number) {ITEM tmp = item[j]; item[j] = item[j - 1]; item[j - 1] = tmp;}
}
}
for (i = 0; i < numberof(item); i++) printf("%s, %d\n",item[i].name,item[i].number);
return 0;
}
99デフォルトの名無しさん:2009/05/22(金) 17:57:00
>>98
うまい棒?
100デフォルトの名無しさん:2009/05/22(金) 19:30:11
10種類以上の果物名、思い付かん
101デフォルトの名無しさん:2009/05/22(金) 19:35:54
>>100
リンゴの品種名だけでおk
102デフォルトの名無しさん:2009/05/22(金) 20:12:26
アルプス乙女,ぐんま名月,ゴールデンデリシャス,シナノスイート,ジョナゴールド,
ジョナゴールド,つがる,デリシャス,ふじ,旭,王林,紅玉,国光,秋映,祝,
世界一,千秋,北斗,陽光,陸奥
20種類、ごく一部を除いて、どんなリンゴかはわからないw
103デフォルトの名無しさん:2009/05/22(金) 20:32:15
ジョナゴールドが2個あるんすけど。
104デフォルトの名無しさん:2009/05/22(金) 21:00:02
>ジョナゴールドが2個あるんすけど。

見逃した。済まない。
ー1 +7
さんさ,高嶺,スターキングデリシャス,ハックナイン,新世界,藤牧,シナノレッド
105デフォルトの名無しさん:2009/05/22(金) 21:27:11
クイックソートなんですが
106デフォルトの名無しさん:2009/05/22(金) 21:30:45
>>105
は?
107デフォルトの名無しさん:2009/05/22(金) 21:36:31
>>105
依頼はバブルソートとあるが、
>>98はクイックソートなのか?
108デフォルトの名無しさん:2009/05/22(金) 21:37:18
109デフォルトの名無しさん:2009/05/22(金) 22:25:48
>>98はバブルソートじゃないか
何を寝ぼけた事を言ってんの?
110デフォルトの名無しさん:2009/05/22(金) 23:06:33
[1] 授業単元:
ヒューマンインターフェースとプログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9224.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
Visual C++ 2008 Express Edition
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C++
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5/25
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
なし

よろしくおねがいします。具体的にあげられてる修正ポイントだけでもかまいません。
111デフォルトの名無しさん:2009/05/22(金) 23:15:47
猫でもわかるキー入力www
112デフォルトの名無しさん:2009/05/22(金) 23:20:32
>>110
気づいた一点だけ。
そこまでコンソールのgetsにこだわる必要は無いと思う。
たとえばトリガーキーを押すとモードメニューに入って、モードを選んで、開始。
そんな感じにならないかねぇ。
MYGETSがちょっと不細工に感じるのはまちがってるかなぁ。。。
あとプロポーショナルフォントを使うのは筋違いだと思う。

こんなとこかな。
113デフォルトの名無しさん:2009/05/23(土) 00:03:44
MyGetsに入る前にその前の入力メッセージは棄てなあかんね。
WM_DESTROYでfpのnullチェックしてないので、モードに入る前に終了すると例外。
WM_QUITを受け取ったGetMessageは0を返すので、MyGetsはTRUEを返し、再びメッセージ待機(Windowがないので終われない)。

基本的に待機するような処理は別スレッドに作るべき。
また待機スレッドのSleepは本物のSleepではなくEventをWaitし、終了要求などではそのEventをシグナル状態にする。
じゃないとSleepが完了するまで終われなくなる。
114113:2009/05/23(土) 00:08:34
>MyGetsに入る前にその前の入力メッセージは棄てなあかんね。
ちょっと書き方おかしかったかも。要は反応待ちに入る以前のキー押下は棄てないかんってこと。
115デフォルトの名無しさん:2009/05/23(土) 00:24:38
[1] 授業単元:
[2] 問題文
今テキストファイルAが1つとBが10個あるとする。
Aには
haru
natsu
aki
fuyu
とかかれ
Bにはそれぞれのテキストに以下のような文字列がかかれている
wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo
iouaiojoiajwioejio121j3oi1j2iojlajia
これらをまとめ
テキストCに
aki[tab]wheiowfjhoiejwio2121oij3io12ji2oj3io2j3oijo[改行]
natsu[tab]iouaiojoiajwioejio121j3oi1j2iojlajia[改行]
になるようなプログラムをかけ
ただし。Bのそれぞれのテキストは非常に長くても大丈夫にせよ。
[3] 環境 [3.1] OS:linux
 [3.2] gcc
 [3.3 C
[4] 期限: 5/23
116デフォルトの名無しさん:2009/05/23(土) 00:27:50
>>115
問題文が意味不明
まとめ方のルールを明確にしないと誰も解けないよ
117デフォルトの名無しさん:2009/05/23(土) 00:46:41
テキストCに

haru\tBのテキスト1つ目の中身\n
natsu\tBのテキスト2つ目の中身\n
aki\tBのテキスト3つ目の中身\n

のように書き込んでほしいのですが。
Bのテキストが非常に長いんです。1テキストファイル20kバイトくらいでして
118デフォルトの名無しさん:2009/05/23(土) 00:55:31
>>117
Bのテキストファイルが10個ある、と言うことなら、B01〜B10ってしていいかい?
Aのテキスト1行目と、B01の全体をタブで繋いで1行にし、Cに出力。
Aのテキスト2行目と、B02の全体をタブで繋いで1行にし、Cに追記。
これをB10まで繰り返す。これであってる?
119デフォルトの名無しさん:2009/05/23(土) 00:59:32
要はBの1行がバッファサイズをオーバーするくらい長いってことじゃん?
120デフォルトの名無しさん:2009/05/23(土) 01:02:08
テキストのサイズはそれほど重要ではないよ。
要は、何をして欲しいかを明確にする事。
121デフォルトの名無しさん:2009/05/23(土) 01:05:28
>>115
後、期限が今日なら、締切時間も書いておいた方が良いかな。
122デフォルトの名無しさん:2009/05/23(土) 01:12:37
>>117
だ〜か〜ら〜、〜のようにっていう表現は問題文にならないって。
テキストAとやらには4行しかないのにテキストBとやらは延べ10行あるんだろ?
5行目以降はどう纏めるんだい?
123デフォルトの名無しさん:2009/05/23(土) 01:16:31
>>110
精度を上げるには「timeBeginPeriod〜timeEndPeriod」や「QueryPerformanceCounter」を使う手がある。
ビジーループにしてGetAsyncKeyStateでキー状態を検知すればメッセージ処理のオーバーヘッドは避けられると思う。
スレッドの優先度を上げるという方法もあるといえばある。
124デフォルトの名無しさん:2009/05/23(土) 01:18:33
>>118
そうです。
Bのテキストは長いんですけど1行です。
一番最後に改行がはいるだけです。
125デフォルトの名無しさん:2009/05/23(土) 01:25:41
>>124
ファイル名は適当に決めておいていいかい?
>>122の指摘する危惧だけど、Aには10行データがある前提でいいかい?
126デフォルトの名無しさん:2009/05/23(土) 01:45:56
Aには4行としまして
Bは1行に10行分くらい文字列がならんでるとおもってください。
で、Bは4ファイルあるとすればちょうどいいかと。
127デフォルトの名無しさん:2009/05/23(土) 01:53:11
>>126
なんというか、まあ、久しぶりに絶句させてもらったよ。
課題が出されたんだよな?
それを一字一句変えずに、「全部」書けよ。

お前の頭の中ではちょうどいいかも知れんが、
お前が今までのやり取りではっきりさせたのは
ファイルAとやらが4行あるってことだけだぞ?
128デフォルトの名無しさん:2009/05/23(土) 01:55:02
なんか杜撰な課題だな。ちゃんと投げられないだけか?
129デフォルトの名無しさん:2009/05/23(土) 01:56:48
Bのテキストファイルが普通にコピーできないほどの長さだから
説明しにくい。
130デフォルトの名無しさん:2009/05/23(土) 01:58:53
Bの長さはどうとにでもなってさっきから言ってるんだからから、
そこを無視して説明しろよ氏ね。
131デフォルトの名無しさん:2009/05/23(土) 01:59:10
20KBで?
132デフォルトの名無しさん:2009/05/23(土) 02:03:59
>>129
は?お前の説明は要らない。
課題をそのまま書き出せよ。

あとな、1行の長さなんてどうだって良いんだよ。
「一行の長さは不定です」
「あ、っそ」
で済むことなんだよ。

重要なのは、
「プログラムの実行前にどんなデータがあって」
「プログラムの実行後にどんなデータがあるか」
ってことなんだよ。

ファイルAには>>115にあるように4行分のデータがある。
これは分かった。
んでファイルBってのはなんだよ?
133デフォルトの名無しさん:2009/05/23(土) 02:12:12
1行にコピーできないくらいの長さの文字列がある
134デフォルトの名無しさん:2009/05/23(土) 02:12:46
ダメだこりゃ
135デフォルトの名無しさん:2009/05/23(土) 02:17:53
何だ、Bは4つになったのかw
>>126
1行に10行分文字列があるって意味がわからんが。
2000文字位あると勝手に理解するけどいいね。
ソースをコンパイルして実行する環境はあるのか?
136132:2009/05/23(土) 02:19:24
>>134
俺は>>133>>115でないって信じたいw
>>133
とりあえず、問題を明らかにしようか。

ファイルBは何個か存在する。
だからここでは後ろに番号をつけるとする。
例えば、ファイルBが3つある場合、
ファイルBのそれぞれをB1,B2,B3としよう。
そして、ファイルBの行番号をアンダースコアの後に数字をつけることで表そう。
例えばB1の1行目はB1_1、2行目はB1_2となる。
ついでにファイルAの一行目はA_1と表すようにしよう。

んで、ここからが本題。
ファイルCを作るにあたって、
A_1と同じ行になるファイルBの行は何か?選択肢から選べ

選択肢1:
A_1 B1_1 
A_1 B2_1
A_1 B3_1
・・・
A_1 Bi_1

選択肢2:
A_1 B1_1 
A_1 B1_2
A_1 B1_3
・・・
A_1 B1_j

選択肢3:上二つは違います。
137デフォルトの名無しさん:2009/05/23(土) 02:20:33
ツンデレだねぇ。なんか後出しがあると思うけど
138デフォルトの名無しさん:2009/05/23(土) 02:26:57
>>115
今の内に課題の条件をキチンと説明しておかないと
誰かが早とちりしてプログラムを書いてしまって後出しで
条件を付けても誰も相手にしてくれないかもしれんぞ

今までそういう事が何回もあった

後出し条件というのは相当嫌われる
139デフォルトの名無しさん:2009/05/23(土) 02:28:31
140デフォルトの名無しさん:2009/05/23(土) 02:30:44
短いファイルでこれくらいです
これが60kバイトくらいです
最大で778kバイトくらいまで
141デフォルトの名無しさん:2009/05/23(土) 02:34:18
>>140
だ〜か〜ら、長さはどうだっていい。
ファイルBは全部でいくつある?
ファイルB全ては1行しかないんだな?
142デフォルトの名無しさん:2009/05/23(土) 02:34:52
そうです。
143デフォルトの名無しさん:2009/05/23(土) 02:36:16
2行目にも答えろよwwwwwwww
144デフォルトの名無しさん:2009/05/23(土) 02:37:17
っていうか、正確に言うとAの行数とBのファイル数は一致してるのか?
一致してるなら可変か固定か?
固定なら何個だ?
145デフォルトの名無しさん:2009/05/23(土) 02:38:15
すいませんけど
>>124 >>126
146デフォルトの名無しさん:2009/05/23(土) 02:40:17
これって釣りだよね?
と、思いたい。割と本気で。
147デフォルトの名無しさん:2009/05/23(土) 02:40:56
もういいわ
148デフォルトの名無しさん:2009/05/23(土) 02:43:13
>>139
Bが10個あると書いてあるのになんで一つだけなんだ?
10個ともまとめて貼れよ

Aはわかったらか
149デフォルトの名無しさん:2009/05/23(土) 02:49:14
エスパーするとAの行数4つでBのファイル数が4つ。
Bは全て1行(改行一つ)だが、>>115主観で言うと通常の1行の10倍あるよ。

まぁ、エスパーするだけして違ってたらイヤだから手はつけんが。
150デフォルトの名無しさん:2009/05/23(土) 02:52:37
>>145
これを試してみてくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9226.txt

ファイル名は"A","B01"〜"B04","C"としているが、適切な名前にするか、
実行時に対象ファイルをその名前にしてくれ。

で、要求とどう違うか書いてくれ。
151デフォルトの名無しさん:2009/05/23(土) 02:57:17
すいません。Bを最後読み込み表示してAの単語をいれてを4回まわしたらいいだけでしたね
152デフォルトの名無しさん:2009/05/23(土) 02:59:48
>>151
落ち着いて、相手に分かる言葉で頼む。
153デフォルトの名無しさん:2009/05/23(土) 03:04:06
>>115
1つだけ聞かせてくれ。
これは、学校の講義で宿題として出されたものなのか?
自分がこういうことをやりたいだけなのか?
154デフォルトの名無しさん:2009/05/23(土) 03:04:28
Aの単語表示\tBのファイルの全ての文字を読み込んで表示
を4回繰り返してテキストにとる
155デフォルトの名無しさん:2009/05/23(土) 03:07:07
つまりBは10個あると書いてあるけど一個しかないんだね
156デフォルトの名無しさん:2009/05/23(土) 03:14:53
>>145
もうあれだ、system関数でシェルスクリプト呼んじゃえ。
cat B0[1-4] | paste A - > C
でお望みのものができるから。
157デフォルトの名無しさん:2009/05/23(土) 04:03:23
>>75さんありがとうございます。
158デフォルトの名無しさん:2009/05/23(土) 04:06:05
>>95 ありがとうございました

この問題もわからないので教えてください
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
 (1)[0,1]の一様乱数x,yを発生させるプログラムを作れ
 (2)[0,1]の一様乱数x,yを発生させ、x^2+y^2<1となる確立を求めろ
(一様乱数を発生させる試行を繰り返し、(上式を満たす回数)/(試行回数)から確立を求める)
またπの数値を求めろ
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio
 [3.3] 言語:C++
[4] 期限: 5月25日
宜しくお願いします
159デフォルトの名無しさん:2009/05/23(土) 08:37:50
>>158
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9227.txt

標準関数std::rand()はやや性能が悪いため
コンピュータ・アルゴリズム事典(奥村晴彦著)より乱数の改良を
行うようにした
160デフォルトの名無しさん:2009/05/23(土) 12:02:48
>>059 (1) 提出期限過ぎてるけど、2整数か?の突っ込みは無しで。
#include <stdio.h>
int main() {
  int n, c;

  printf("2進数を1つ以上入力してください:最後は1000\n");
  do {
    for(n = 0; ;) {
      c = getchar();
      if (c == '0' || c == '1') {
        n <<= 1;
        n |= (c == '1') ? 1 : 0; /* 1/0 を入力 */
      } else if (c == EOF)
        return 1;
      else
        break;
    }
    printf("%d ", n);
    if(c == '\n') puts("");
  } while(n != 0x8); /* 1000 (binary) */
  return 0;
}
161デフォルトの名無しさん:2009/05/23(土) 12:13:32
問題を誤読してる気がする。
162デフォルトの名無しさん:2009/05/23(土) 12:19:46
[1] 授業単元: 情報リテラシー
[2] 問題文: 10から110までの乱数を100個作り、
同時ににアスキーコードで文字に変換して小文字だけを大文字にせよ
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: 富士通
 [3.3] 言語:C言語
[4] 期限:[2009年05月26日h:16:30まで]
[5] その他の制限: アスキーコードやら何やら今一良く分かりません。
よろしくお願いします。
163デフォルトの名無しさん:2009/05/23(土) 12:44:55
>>162 珍しいコンパイラwww
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int main(void)
{
int i, x;
int max=110, min=10;

for(i=0;i<100;i++)
{
x=rand()%(max-min+1)+min;
if(islower(x)) x=toupper(x);
printf("%c", x);
}

return 0;
}
164デフォルトの名無しさん:2009/05/23(土) 12:53:40
京大?
165デフォルトの名無しさん:2009/05/23(土) 13:00:49
Faithless C compiler とか
>>163
種蒔かんで良いのか?
166110:2009/05/23(土) 13:05:38
>>112
>>113
>>123
アドバイスありがとうございます。
課題中で具体的に示されてある修正点だけでいいので、どなたかプログラムを修正してもらえないでしょうか?
提出期限は明後日なのですが、実際にプログラムを動かして色々と考察を書かないといけないので・・
よろしくお願いしますm( _ _)m
167デフォルトの名無しさん:2009/05/23(土) 13:20:58
後だしでなく必ず勝つ。
x=rand()/(RAND_MAX+1.0)*(max-min+1)+min;
168デフォルトの名無しさん:2009/05/23(土) 17:07:20
>>151
// Usage: my_paste a1 b1 b2 b3 b4 ... > c1
// a: 行数はb(max)行 bの数と一致しない場合は途中まで処理する。
// b: 行数は1行のみ。改行で終わる。サイズは大きくても良い。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
  FILE *inA, *inB, *outC = stdout;
  char bufA[80]; // ファイルA読込用(1行を読込めるサイズが必要)
  char bufB[256]; // ファイルB読込用(複数回に分けて読み込むので適当で良い)
  int i, readsize;

  if(argc < 3) return -1;
  inA = fopen(argv[1], "r");
  if (inA == NULL) { fprintf(stderr, "Can't open %s\n", argv[1]); exit(1); }
  for (i = 0; i < argc-2; i++) {
    inB = fopen(argv[i+2], "r");
    if (inB == NULL) { fprintf(stderr, "Can't open %s\n", argv[i+2]); break; }
    // Aを1行読込み、改行を取り除き、末尾にTabをつけてCに出力
    if(fgets(bufA, sizeof(bufA), inA) == NULL) { fclose(inB); break; }
    bufA[strlen(bufA) - 1] = 0;
    fprintf(outC, "%s\t", bufA);
    // Bをバッファサイズ単位で読込み、Cに追記する(必要な回数繰返す)
    while ((readsize = fread(bufB, 1, sizeof(bufB), inB)) > 0) {
      fwrite(bufB, 1, readsize, outC);
    }
    fclose(inB);
  }
  fclose(inA);
  return 0;
}
169デフォルトの名無しさん:2009/05/23(土) 17:18:34
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9228.c
[3] 環境
 [3.1] OS: (Windows/Linux/等々) linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[5] その他の制限
問題文のプログラムはls -aslを実行するプログラムである。これを参考にオプション -a -F -l -dを引数とした場合に
lsコマンドと同じ動作をするようなプログラムmylsを作れ。

・statシステムコールではなくlstatシステムコールを用いる
・オプションは-aといった引数に続けて指定、-aFl、-laといった複数オプションにも順不同に対応
・myls - aといった場合にはUsageを表示する
・UID、GIDは数字のままでいい

オプション指定にgetopt関数を使って
while((option = getopt(argc, argv, "aFld")) != -1){
switch (option){
case...
って書こうとしてるんだけど、case 'a':を書こうとした時に下にあるvoid関数のどの部分で
ls -aと同じ動作をしているのかが分からない。どなたかお願いします。
170デフォルトの名無しさん:2009/05/23(土) 17:40:37
171162:2009/05/23(土) 17:48:45
>>163
ありがとうございます。
172デフォルトの名無しさん:2009/05/23(土) 18:58:19
1] 授業単元: プログラミング言語
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9229.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:visual studio
 [3.3] 言語:C++
[4] 期限: 5月25日
[5] その他の制限:条件の判定にif(1.0!=(1.0+e))のようなif文を用いる
eはεのこと

よろしくお願いします。
173デフォルトの名無しさん:2009/05/23(土) 19:13:25
[1]授業単元:アルゴリズム
[2]問題文(含コード&リンク)

問7-6
12x12のセルを持つ迷路がある。
スタートからゴールまでの最短経路を探したい。

(1)フローチャートを書け。
(2)実際に最短経路を調べ、表示するプログラムを書け。

ヒント
迷路は二次元配列で出来ている。
スタートやゴールのセル、壁のセルは最初は分からないようになっている。
手順としてはスタート地点の探索→経路の探索→バックトレースによる最短経路の探索、と行えばいい。

[3]:環境
[3.1]OS:XPsp2
[3.2]コンパイラ名とバージョン:gcc
[3.3]言語:C
[4]期限:5月26日8:00
[5]その他の制限:ソースコードにはしっかりコメントを記述すること、と言われました。
また迷路を生成するプログラムは無くても良いそうです。
C言語に関しては配列を学んだ所までです。(構造体やポインタはまだやってません。)


最悪フローチャートだけでも構いません。よろしくお願いします。
174デフォルトの名無しさん:2009/05/23(土) 19:19:43
迷路探査は、ネット調べればソースごとあるぞ。
175デフォルトの名無しさん:2009/05/23(土) 19:20:11
>>172 Part125_146
#include <stdio.h>
#include <float.h>
#include <math.h>
int main() {
double e1, e2;
unsigned int n;

e1 = 1.0;
printf("%.15e %.15e\n", DBL_MIN, DBL_EPSILON);
for(n=1; n<4294967295u; n++) {
e2 = e1 / 10.0;
if(1.0 == (1.0 + e2)) break;
e1 = e2;
}
printf("%.15e %d\n", e1, n-1);
}
176173:2009/05/23(土) 19:35:12
>>174
言葉足らずで申し訳ありません……
迷路探索のソースはいくつか探すことが出来たのですが、
更に最短経路を探すものが見つからなくて今回お願いしました……
177デフォルトの名無しさん:2009/05/23(土) 19:45:01
>>176
普通の迷路なら経路はただ一つなんじゃない?
経路が複数あるって、巡回路の最適解を求めるような問題?
178173:2009/05/23(土) 19:57:20
>>177
上手く言えませんが壁の配置によっては経路が複数あります
袋小路とかも含めて総当たりで経路を調べる、のだとしたら巡回路の問題なのかもしれません
すみません、あまりよくわかってません……
179デフォルトの名無しさん:2009/05/23(土) 20:01:59
>>173
再起関数で、深さをカウントしていって、144段(縦*横)以上になったら打ち切れば良いよ。
で手数をへらして検索。
180デフォルトの名無しさん:2009/05/23(土) 20:48:53
>>173
最短経路が必要な場合は、2DRPGの最短移動アルゴリズムを使えばいいよ。

12x12の配列Aをワークとして用意する。型はintでいいや。
Aはすべて-1で初期化しておく。
まずスタート地点の決定。これは総当たりだから省略。
現在の探索深度を示すワーク int depth を用意して0に初期化する。
さて探索だけど、

1.スタート地点を現在値nowPositionに設定して、それに対応するAに0を代入する。
2.Aを全探索して、値がdepthになっているものがあれば、
 その上下左右(斜めも移動できるなら斜めも)に移動可能かどうかを
 調べる。移動可能で、かつその位置に対応するAが-1なら、その位置に
 depth+1を書き込む。
 移動可能な位置がゴールなら終了。4へ。
3.A全体を操作し終わるまで調べて、ひとつもdepthがなければ終了。ゴールには到達できない。
 1つでもdepthがあれば、++depthして、2を繰り返す。

4.ここからが最短経路探索。
 まずゴールには到達しているから、ゴールのdepthは分かってる。
 そこから 上下左右のAの値が depth-1 になっている位置が最短経路。
 複数ある場合の処理は好きなようにすればいいが、今回は単純に最初に
 みつかった場所へ移動すればいいだろう。
5.これを繰り返してスタートに到達するまで続ける。なおスタートには必ず到達できる。
181デフォルトの名無しさん:2009/05/23(土) 20:51:41
>>180
すまん

×1.スタート地点を現在値nowPositionに設定して、それに対応するAに0を代入する。
○1.スタート地点に対応するAに0を代入する。
182デフォルトの名無しさん:2009/05/23(土) 20:55:26
ちなみに医学部の卒業研究見学したけど、怖かった。

犬を生きたまま仰向けで四肢を固定し、毛を剃って電気メスで腹を切る。

肋骨をノコギリで切って、心臓にいろいろな電気信号を与えて生体の反応を調べる。

もちろん全身麻酔はしてるけど、生体の反応を損ねないようにギリギリの量にしてるから、ピクピク動いてた。
183デフォルトの名無しさん:2009/05/23(土) 21:12:16
>>179
>>173
>手順としてはスタート地点の探索→経路の探索→バックトレースによる最短経路の探索、と行えばいい。
を満たせなくね?
184デフォルトの名無しさん:2009/05/23(土) 21:21:39
スタート地点も探索で見つけないといけない?
予め指定がないと、何処から始めたら良いものやら。
185デフォルトの名無しさん:2009/05/23(土) 21:34:53
多分出題者が間違ってるんだろうが、バックトレースじゃなくてバックトラックだろうな。
186デフォルトの名無しさん:2009/05/23(土) 21:35:20
流石にスタート地点は総当たりじゃないかなあ
そうでなかったらうーん
187デフォルトの名無しさん:2009/05/23(土) 21:53:30
188デフォルトの名無しさん:2009/05/23(土) 22:19:36
>>187
「構造体やポインタはやってない」の制限にひっかかってるよw
189185:2009/05/23(土) 22:22:45
ごめん。オレが勘違いしてたようだ。
バックトレースって、ゴールから逆にたどるって意味だなきっと。
>>180のやり方で良さそうだね。
190187:2009/05/23(土) 22:24:36
191172:2009/05/24(日) 00:24:38
>>175
ありがとうございました
192175:2009/05/24(日) 01:02:49
>>172 間違い。1.0!=1.0+εとなる最小のεではなかった。
#include <stdio.h>
#include <float.h>
#include <math.h>
int main() {
  double e1, e2;
  unsigned int n;

  e1 = DBL_MIN;
  printf("%.15e %.15e\n", DBL_MIN, DBL_EPSILON);
  for(n=1; n<4294967295u; n++) {
    e2 = e1 * 10;
    if(1.0 != (1.0 + e2)) break;
    e1 = e2;
  }
  printf("%.15e %d\n", e1, n-1);
}
193172:2009/05/24(日) 11:56:33
>>175
>>192
訂正ありがとうございます
194デフォルトの名無しさん:2009/05/24(日) 13:51:50
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9232.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:visual studio
 [3.3] 言語:C++
[4] 期限: 5月26日朝
[5] その他の制限:よろしくおねがいします
195デフォルトの名無しさん:2009/05/24(日) 15:46:05
>>170
ありがとうございます。
196デフォルトの名無しさん:2009/05/24(日) 16:44:53
>>194
なんでうpろだ使ったんだwwwww
197デフォルトの名無しさん:2009/05/24(日) 16:57:13
wwwwwww
うけたwwwww
198デフォルトの名無しさん:2009/05/24(日) 17:51:42
一行伝えるのに資源使いすぎw
199デフォルトの名無しさん:2009/05/24(日) 18:47:24
宿題スレで分岐限定法の課題はあったでしょうか?
あったのであれば、教えてもらいたいです。
200194 の心の声:2009/05/24(日) 19:38:49
>>196
ろだにあげておくとweb検索で引っかかりにくいし、
どういう問題を依頼したかスレのログに残らないから。
そんな事も分からないのに問題解けるのかよw
201デフォルトの名無しさん:2009/05/24(日) 19:41:44
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9233.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5/26日午前9時
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタ配列まで習ってます

PCで規制が掛かっていたので携帯からの書き込みで申し訳ありません
202デフォルトの名無しさん:2009/05/24(日) 19:57:33
>>201
課題1
my_sort_strings()は、どうやって並べ替える文字列を取得すれば良いですか?
203デフォルトの名無しさん:2009/05/24(日) 20:08:03
引数を何にするのかも問題のうちだろ、jk
204デフォルトの名無しさん:2009/05/24(日) 20:16:14
>>203
並べ替えの対象となるポインタ配列はmainのローカル変数
my_sort_strings()は引数なし
205デフォルトの名無しさん:2009/05/24(日) 20:19:37
>>204
なんでそうなるんだ?

> 課題1
> 文字配列のソートを行って出力する以下のプログラムを完成させよ
> ただし、my_sort_stringsはポインタ配列とそのよう素数を因数として、
> 登録されている文字配列を昇順に並べ替える関数である。

因数は引数の間違いで
関数プロトタイプはこうなるだろ
void my_sort_strings(char **p,int n);
206デフォルトの名無しさん:2009/05/24(日) 20:20:25
アホか、問題文では省略されてる引数を補って書くんだよw
207デフォルトの名無しさん:2009/05/24(日) 20:21:23
わかるとは思うが206は204あてな
208デフォルトの名無しさん:2009/05/24(日) 20:28:14
プロトタイプまで書かれていても、それを書き換えても良いのかね?
私なら、まず確認のためにどうするか聞くが。
209デフォルトの名無しさん:2009/05/24(日) 20:38:21
そんなことより課題2を読む限り
課題1は先頭の一文字だけでソートするべきなのか?
210デフォルトの名無しさん:2009/05/24(日) 20:39:24
みたいだね。
2見る前に書いたらmin_index()がまんま2の仕様になってたw
211デフォルトの名無しさん:2009/05/24(日) 21:36:02
C++始めたばかりのド素人なんですが質問させてください。
「数直線上で4つの整数を入力して二種類の区画を指定し、その区画が重なるか否かを
 判定するプログラム」
【出力結果例

区画A:2 5
区画B:1 3
重なる    】

となるプログラムを作成してみたんですが、↓のでいいでしょうか?
正確な問題文や細かい所は都合により今は見れないので、不明瞭な点もあるかと思いますが、
よければ添削お願いします。あと、使うのはIf文のみでお願いします。
212デフォルトの名無しさん:2009/05/24(日) 21:36:47
#include <iostream>
using namespace std;
int main()
{
int x1,x2,x3,x4;
cout << "区画A:”;
cin >> x1 >> x2;
cout <<"区画B:”;
cin >> x3 >> x4;

If(x4<x1 && x3<x1 && x4<x2 && x3<x2){
cout<<"重ならない”<<endl;
If(x2<x3 && x1<x3 && x2<x4 && x1<x4){
cout<<"重ならない”<<endl;
}
else{
cout<<"重なる”<<endl;
}
return 0;
}
213デフォルトの名無しさん:2009/05/24(日) 21:40:57
テンプレに沿っていないので正規の質問とはみなされていない故
オブジェクション。
これは断じてC言語やC++言語の問題ぢゃなく、論理(ロジック)
の問題。
214デフォルトの名無しさん:2009/05/24(日) 21:51:31
If文は使えないな
215デフォルトの名無しさん:2009/05/24(日) 21:53:12
失礼しました。
授業単元:基本プログラミング
問題文:>>211
OS:Windows
コンパイラ名:g++
言語:C++
期限:明日の午後6時まで
その他の制限:If文のみ使用

です!
ロジックも含めて、文法が合ってるかや無駄な部分がないかなどの意見も頂けたらと思い
質問させて頂きました、スレ違いでしたら申し訳ないありませんでしたorz
216デフォルトの名無しさん:2009/05/24(日) 21:57:58
1の右端が2の左端より大きくて1の左端が2の右端より小さいとき重なる
217デフォルトの名無しさん:2009/05/24(日) 22:13:18
>>216の言うとおり、重なるときを考えた方がわかりやすい
あと、本当にx1<x2,x3<x4になってるか入力値のチェックも欲しい
218211:2009/05/24(日) 22:30:14
>>216>>217
なるほど…
そっちのやり方も今試してみたんですが、x1x2x3x4の値はそれぞれ自由なので、
例えば出力結果

区画A:15 6
区画B:7 −8
重なる

にもなるようにしないといけないので、整数の入力値の場合分けがかなり面倒になって
プログラムが>>211より長くなってしまうかなと思ってるんんですがどうでしょう…
といっても、>>211のプログラムとロジックで矛盾や穴などが無いかも自分では自信が無いのですが…
なにぶん今はプログラムを実行できる環境にいないので机上の空論状態なんですorz
219デフォルトの名無しさん:2009/05/24(日) 22:36:28
>>211
区間の両端の数値は区間の中なのか外なのかが決まってないと
区間A:1 4
区間B:4 6
のとき重なっていると見なすかどうかが決められない。
区間A:1 1
区間B:1 6
も同様。両端の値は区間の中なの?外なの?
220デフォルトの名無しさん:2009/05/24(日) 22:38:07
>>219
>>212だとどちらも重なるだろ
221デフォルトの名無しさん:2009/05/24(日) 22:41:38
>>218
x1,x2とx3,x4をそれぞれ小さい順に並べ替える
if ((x3 < x1 && x1 < x4 || x3 < x2 && x2 < x4) ||
(x1 < x3 && x3 < x2 || x1 < x4 && x4 < x2)) {
重なっている
}
222デフォルトの名無しさん:2009/05/24(日) 22:46:00
>>218
先に大小みて入れ替えるほうが簡潔でわかりやすいと思うが
if(x1 > x2) { int temp = x1; x1 = x2; x2 = temp;}
if(x3 > x4) { int temp = x3; x3 = x4; x4 = temp;}
if(x1 < x4 && x2 > x3) cout << "重なる";
else cout << "重ならない";
223デフォルトの名無しさん:2009/05/24(日) 22:51:40
>>219
あ、言葉足らずでごめんなさい、端が点と点で重なってる場合も重なってるとみなされます

>>221
おお、なるほど
それだとif文も一つで済んでいいですね!
参考になりました、ありがとうございます!
224デフォルトの名無しさん:2009/05/24(日) 22:56:53
>>222
ごめんなさい、まだ授業でtempを習ってないもので…
でも後学のためになりました、ありがとうございます
225デフォルトの名無しさん:2009/05/24(日) 22:56:56
すべての数が不一致であることを前提とする。4つの数で
最大の元が属する区画名をA,最小の元が属する区画名をBとする。
A=Bの時は重なる
A<>Bの場合、区画Aで4数最大のものでないものをy
区画Bの元で4数最小でないものをzとする。
重なるのはy<zの場合のみ

上のことをコーディングすれば良いんぢゃ?
(変数は常に値渡しされるとは限らないから関数内で
勝手に変更することはC++では許されない。念の為)
226デフォルトの名無しさん:2009/05/24(日) 23:01:01
>>220 >>211 数値の型がわかんなかったのでテンプレで。数値の入力部分は好きにどうぞ。
#include <iostream>
template <class T> class Range {
public:
Range() {}
Range(const T& v0, const T& v1) { create(v0, v1); }
Range(const Range<T>& s) { *this = s; }
virtual ~Range() {}
const Range<T>& operator=(const Range<T>& s) { min_ = s.min_; max_ = s.max_; return *this; }
void create(const T& v0, const T& v1) { if(v0 < v1) { min_ = v0; max_ = v1; } else { min_ = v1; max_ = v0; } }
bool isIntersect(const Range<T>& s) const {
if(min_ <= s.min_) {
return max_ >= s.min_; // 接するのも交わりと見なす
//return max_ > s.min_; // 接するものは交わりとは見なさない
} else {
return s.isIntersect(*this);
}
}
private:
T min_;
T max_;
};
int main()
{
Range<int> r0(2,5);
Range<int> r1(1,3);
if(r0.isIntersect(r1)) {
cout << "重なる" << endl;
} else {
cout << "重ならない" << endl;
}
}
227デフォルトの名無しさん:2009/05/24(日) 23:04:34
沢山のアドバイスありがとうございました!
色々と参考になりました
お陰様でいっぱしの形になって提出できそうです
これからも精進します(`・ω・´)
228デフォルトの名無しさん:2009/05/24(日) 23:07:15
>>221
>>222
うっ、if文のみ使用って、判定にswitchとかを使うなという意味じゃないのか・・・
ごめん。
229デフォルトの名無しさん:2009/05/24(日) 23:09:15
>>212 == >>216 で合ってる。医女
230デフォルトの名無しさん:2009/05/25(月) 00:18:47
>>201 min_index() を使ってない my_strcmp() の使い方が分からなかったので strcmp() と同じだと仮定
課題1
void my_sort_strings(char **p,int n)
{
int i, j;

for(i=0;i<n;i++)
{
for(j=0;j+1<n-i;j++)
{
if(*p[j]>*p[j+1]) swap_strings(p, j, j+1);
}
}
}

課題2
void lexicograhic_sort(char **p,int n)
{
int i, j;

for(i=0;i<n;i++)
{
for(j=0;j+1<n-i;j++)
{
if(my_strcmp(p[j], p[j+1])>0) swap_strings(p, j, j+1);
}
}
}
231デフォルトの名無しさん:2009/05/25(月) 01:09:02
自由課題:可憐な カレン ダーを作ってくれ
232デフォルトの名無しさん:2009/05/25(月) 01:12:14
【質問テンプレ】
[1] テキストファイル
[2]Write a program to parse words onto separate lines; that is, locate
and write each word to its own line.(課題文は英文で与えられている)
[3] 環境
 
[3.1] OSWindows
 [3.2]VisualC++
 [3.3] 言語:C
[4] 期限: (2009年5月26日9:30)
[5] 制限はなし
233デフォルトの名無しさん:2009/05/25(月) 01:26:18
>>232 合ってるかどうか分からんけど
#include<stdio.h>

int main(void){
char buf[100+1];

while(scanf("%100s", buf)==1){
puts(buf);
}
return 0;
}
234デフォルトの名無しさん:2009/05/25(月) 01:42:40
>>232に追加 テキストファイルを作成する必要がある。
235デフォルトの名無しさん:2009/05/25(月) 02:56:36
1111 aaaa ddd dddd-dfgg ddddd 9999. 2222 dddd ggg, gggg 444-
444 sss ddddd ccc -
ddd rrrr345 333 444. >>232
#include <stdio.h>
int main(){
  int c, cr = 1, minus = 0;

  while( (c = getchar()) != EOF ){
    if(c == ' ' || c == '\t') {
      if(minus == 1) ; /* minus_space_return */
      else if(cr != 0) putchar('\n'); /* space_minus_return */
      cr = 0;
    } else if(c == '\n') {
      if(minus == 1) ; /* minus_return */
      else if(cr != 0) putchar('\n');
      cr = 0;
      minus = 0;
    } else if(c == ',' || c == '.') {
      if(minus == 1) putchar('-');
      if(cr != 0) putchar('\n');
      cr = 0;
      minus = 0;
    } else if(c == '-') {
      minus = 1;
    } else {
      if(minus == 1) putchar('-'); /* minus_not return */
      putchar(c);
      cr = 1;
      minus = 0;
    }
  }
}
236デフォルトの名無しさん:2009/05/25(月) 13:12:58
[1]数理物理
[2]問題文:
ルジャンドル多項式のゼロ点(Pn(x)=0を満たすx)を求めたい。

@ n=4 の時 (解析解あり。)
A n=10の時 (解析解なし。)

の2つの場合についてニュートン法または2分法を用いて求めよ。

ttp://www.mns.kyutech.ac.jp/~kamada/suuributuri/sub2.html
[3]OS:Linux/コンパイラ:わかんね/言語C
[4]5/26まで

お願いします。
237194:2009/05/25(月) 17:15:46
資源を使いすぎた者ですが、num_putファセットどなたか分かる方いませんか?
ぐぐっても日本語の文献がほとんどヒットしません。英語のは見つかりますがどれも例がめちゃ難しいのしかないです
問題の意味は、このファセットを使って230764530を出力すると1000単位でコンマをつけて出力するようにしろとのことです
なので「230,764,530」になるといいです よろしこおねがいします
238デフォルトの名無しさん:2009/05/25(月) 17:53:00
std::locale locale_;
OutIt outit;
std::ios_base& format = ;

std::num_put<charT, OutIt>& hoge = std::use_faset<std::num_put<charT, OutIt>(locale_);
hoge.put(outit, format, char, value);

こんな感じで後は自分で設定すればいいよ
239デフォルトの名無しさん:2009/05/25(月) 18:23:52
>>237
MSDNに載ってるじゃないか。英語だけど、丸写しでもうごいたぞ??

#include <iostream>
//ttp://msdn.microsoft.com/ja-jp/library/31fhezza.aspx
//230764530

int main(){
    long Val = 230764530;
    std::locale Loc("japanese");

    std::cout.imbue(Loc);
    std::use_facet<std::num_put<char>>(Loc).put(std::basic_ostream<char>::_Iter(std::cout.rdbuf()),std::cout,' ',Val); 
    return 0;
}
240194:2009/05/25(月) 18:33:33
>>239
すみません
エラー: ‘_Iter’は‘std::basic_ostream<char, std::char_traits<char> >’のメンバではありませんという
コンパイルエラーになるのですが何かわかりますでしょうか
241デフォルトの名無しさん:2009/05/25(月) 18:53:40
>>240
_Iterはイテレータをtypedefしたものだと思うのだが、最初にアンダースコアが入ってるからベンダ定数かもしれん。
俺の使ってるコンパイラはVC9EE(VC2008)なんだが、おまいさんはなにをつかってるんだい?

うちではちゃんと通るし230,764,530とでる。

で、ちょっと改変してみた。これで動かなかったら俺の範疇外だ。
#include <iostream>
//ttp://msdn.microsoft.com/ja-jp/library/31fhezza.aspx
//230764530

int main(){
    long Val = 230764530;
    std::locale Loc("japanese");
    //std::locale::global(std::locale("japanese"));
    

    std::cout.imbue(Loc);
    //std::use_facet<std::num_put<char>>(Loc).put(std::basic_ostream<char>::_Iter(std::cout.rdbuf()),std::cout,' ',Val); 
    std::use_facet<std::num_put<char>>(Loc).put(std::ostreambuf_iterator<char>(std::cout.rdbuf()),std::cout,' ',Val); 
    return 0;
}
242194:2009/05/25(月) 19:13:16
>>241
大変失礼しました。
最初にVisualStudioを使っていますと書いておきながらg++でコンパイルしていました。
上記のコードも試したのですが
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Abort trap
というエラーになりました。しかし、VC++2008で試したところ問題なく動いたので、これで十分です。
ありがとうございました。
243デフォルトの名無しさん:2009/05/25(月) 19:27:47
[1] 授業単元: 上級者のためのC++
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9234.txt
[3] 環境
 [3.1] OS: ウィンドウズXP
 [3.2] コンパイラ名とバージョン: VisualC++2008
 [3.3] 言語: C++
[4] 期限: 2009年5月28日朝まで
[5] その他の制限: 難しいですが何卒よろしくおねがいします
244デフォルトの名無しさん:2009/05/25(月) 20:05:55
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9235.txt
[3] 環境
 [3.1] OS: windows XP
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 5月27日12:00
[5] その他の制限: 是非、よろしくお願いします
245デフォルトの名無しさん:2009/05/25(月) 20:22:06
246デフォルトの名無しさん:2009/05/25(月) 20:32:18
247デフォルトの名無しさん:2009/05/25(月) 21:21:23
248デフォルトの名無しさん:2009/05/25(月) 21:21:24
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9238.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++
[4] 期限: 明日5月26日 23:30まで
[5] その他の制限: 特にありません。

問題数が多いです。
お手数ですがどうかよろしくお願いいたします。
249デフォルトの名無しさん:2009/05/25(月) 21:36:12
またフィボナッチ…
250デフォルトの名無しさん:2009/05/25(月) 22:21:20
>>247さん、ありがとうございます。
ただ、(2)のプログラムの
#include <iterator>
#include <algorithm>
という2つのインクルードを初めてみました。これはどういう場合に使うのでしょうか?
やはりこれを使わないとプログラムは難しくなってしまうんですか?
251デフォルトの名無しさん:2009/05/25(月) 22:23:31
ぐぐれ
252デフォルトの名無しさん:2009/05/25(月) 22:26:41
>>250
ソート処理をstd::sort、出力をstd::ostream_iteratorに丸投げしているため。
これらを見たことないとなるとソートは自分で書きなさいってことなのかね
253デフォルトの名無しさん:2009/05/25(月) 22:57:48
254デフォルトの名無しさん:2009/05/25(月) 23:16:31
1] 授業単元:C++演習
[2] 問題文
以下のプログラムをもとに、入力された文字列に!があったら!?に置き換えよ
(ヒント s.insert(i,t)を用いよ)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9244.txt

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC
 [3.3] 言語:C++
[4] 期限:明日まで

プログラムを習い始めたばかりで、
よくわかってないのですがよろしくお願いします。
255デフォルトの名無しさん:2009/05/25(月) 23:24:45
[1] 授業単元:ソフトウェア
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9245.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VisualC++
 [3.3] 言語:C
[4] 期限:明後日までにおねがいします。
256243:2009/05/26(火) 00:12:33
>>245
>>246
助かりました!有難うございました。
257デフォルトの名無しさん:2009/05/26(火) 00:15:55
>>252 >>253
ありがとうございます。調べてみたんですが、便利ですね・・・
今までこんな話は聞いたことなかったし、ソートの問題は自分で書いてました。
今回の問題でもソート・出力は自分でやったほうがいいかと思ってます。
でも、ひとつ勉強になりました。ありがとうございました。
258デフォルトの名無しさん:2009/05/26(火) 00:20:19
259デフォルトの名無しさん:2009/05/26(火) 00:36:48
>>230
ありがとうございます
もしまた頼る時があったらよろしくお願いします
260デフォルトの名無しさん:2009/05/26(火) 01:03:31
>>259
姑息な最適化なら任せてくれ
261デフォルトの名無しさん:2009/05/26(火) 01:17:02
おっと誤爆だったみたいだ
262デフォルトの名無しさん:2009/05/26(火) 02:14:14
263248:2009/05/26(火) 09:30:23
>>248です。

フィボナッチは解決いたしました。
(5_1)も出来そうなので、(5_3)以降をお願いいたします。

問題文(含コードンク)http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9238.txt
264デフォルトの名無しさん:2009/05/26(火) 09:56:01
(5_3)
void binary(int n)
{
if(n>1) binary(n>>1);
printf("%d", n & 1);
}
265デフォルトの名無しさん:2009/05/26(火) 10:13:22
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):ゼロで初期化したint型変数,float型変数,double型変数をそれぞれ3個ずつ用意し,それぞれに1,0.1,0.01を1000回加えてそれぞれの結果を画面に出力するアルゴリズムを考え,それにしたがってプログラムを作成せよ.
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:秀丸
 [3.3] 言語:C言語
[4] 期限:5月28日
[5] その他の制限: 関数はまだ習っていません。本当に基礎をやっています。
266デフォルトの名無しさん:2009/05/26(火) 10:46:06
#include <stdio.h>

int main(void)
{
int i, a = 0, b = 0, c = 0;
float fa = 0, fb = 0, fc = 0;
double da = 0, db = 0, dc = 0;

for(i=0; i<1000; i++) {
a += 1;
b += 0.1;
c += 0.01;
fa += 1;
fb += 0.1;
fc += 0.01;
da += 1;
db += 0.1;
dc += 0.01;
}

printf("%d %d %d\n", a, b, c);
printf("%f %f %f\n", fa, fb, fc);
printf("%f %f %f\n", da, db, dc);

return 0;
}
267デフォルトの名無しさん:2009/05/26(火) 11:47:50
>>262
ありがとうございます。
非常に助かりました。
268デフォルトの名無しさん:2009/05/26(火) 15:20:55
269デフォルトの名無しさん:2009/05/26(火) 15:35:04
[1] プログラム演習
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9254.txt
文字列を入力し空行が入力されたら、今まで入力されたものを表示する。
[3] 環境
[3.1] OSWindows
 [3.2]VisualC++
 [3.3] 言語:C++
[4] 期限: 今日中
[5] 制限はなし

途中までやっていたんですが、空行の時の条件がうまくできません。
よろしくお願いします。

270デフォルトの名無しさん:2009/05/26(火) 16:09:24
>>269
getline(cin,s)使ってみたら?
271デフォルトの名無しさん:2009/05/26(火) 16:46:56
>>270
ありがとうございました
できました
簡単なトコでのミスだったんですね
272デフォルトの名無しさん:2009/05/26(火) 16:49:57
>>268 お疲れ様です。本当にありがとうございました!
273daigaku1nen:2009/05/26(火) 18:26:48
プログラミングの授業で
a,b,c,d,eを cin でキーボードから読み取り
{a÷(b×c)+d×(b+3)}÷(e×2) の計算の答えを出力するプログラミングをつくる課題が出たのですが、

演算子の優先順を考慮すると、どう変換して書けばいいのか全く分かりません。
助けてください。
提出期限は今日の0時までです。。。
274デフォルトの名無しさん:2009/05/26(火) 18:50:32
>>273
#include <iostream>
int main()
{
double a,b,c,d,e;
std::cout << "a:"; std::cin >> a;
std::cout << "b:"; std::cin >> b;
std::cout << "c:"; std::cin >> c;
std::cout << "d:"; std::cin >> d;
std::cout << "e:"; std::cin >> e;
std::cout << (a/(b*c)+d*(b+3))/(e*2) << std::endl;
return 0;
}
275棚大生:2009/05/26(火) 18:51:13
C++の課題なのですが、教えてください。
提出期限は 5/28午前0時 です。

昨日、一昨日と2日間粘りましたがチンプンカンプンです。
問題は下記の通りです。
@
int i=99;と設定されていたら、
i/3 と i/3. では結果が異なる。
プログラミングを作成することによって、i/3 と i/3.を評価せよ。
(a,bを実数としてi/3 と i/3.をa,bに代入することとする。)
A
a=10, b=3, c=2 として
!aかつb>cの戻り値、!aまたはb>cの戻り値を求めるプログラムを作成せよ。
B
a=1,b=10,c=100のとき
c<b && b<a と c<b<a は同じものではない。
上記のことをプログラム化して確かめよ。
C
i=100で a=i++, a=++iの値を確かめるプログラムを作成せよ。
D
1から10までの和を計算するプログラムをインクリメント演算子を用いて、作成せよ。
デクリメント演算子を用いて、nCmを計算するプログラムを作成せよ。但し、n,mは cin を使って
キーボードから読み取ること。

お願いします!!!
276daigaku1nen:2009/05/26(火) 18:59:50
>>274
本っっっっ当にありがとうございます。

また分からない課題が来たらここで質問しにきていいですか??
277デフォルトの名無しさん:2009/05/26(火) 19:07:16
>>276
次からは質問テンプレ使ったほうがいいよ
cinというキーワードがあったからC++とわかったけど
ぜんぜん違う回答になってた可能性があるからね
278デフォルトの名無しさん:2009/05/26(火) 19:09:12
>>276
丁寧に質問すれば、誰かが答えてくれる。
279デフォルトの名無しさん:2009/05/26(火) 19:30:18
>>275
@の99って、問題文あってる?
280棚大生:2009/05/26(火) 19:37:04
すいません!!!

101でした。
281デフォルトの名無しさん:2009/05/26(火) 19:55:52
>>258
ありがとうございました。
282デフォルトの名無しさん:2009/05/26(火) 20:46:43
>>275 @
#include <iostream>

int main()
{
int i = 101;
double a = i / 3;
double b = i / 3.;
std::cout << "101 / 3 = " << a << std::endl;
std::cout << "101 / 3. = " << b << std::endl;
return 0;
}
283デフォルトの名無しさん:2009/05/26(火) 20:47:43
>>275 @〜C
#include <iostream>
int main()
{
// A
int a=10,b=3,c=2;
std::cout << "\"!a && b > c\"=" << (!a && b > c) << std::endl;
std::cout << "\"!a || b > c\"=" << (!a || b > c) << std::endl;
// B
a=1;b=10;c=100;
std::cout << "\"c<b && b<a\"=" << (c<b && b<a) << std::endl;
std::cout << "\"c<b<a\"=" << (c<b<a) << std::endl;
// C
int i=100; a=i++;
std::cout << "a=i++:" << a << std::endl;
i=100; a=++i;
std::cout << "a=++i:" << a << std::endl;
return 0;
}
284デフォルトの名無しさん:2009/05/26(火) 20:48:51
>>275 D-1
#include <iostream>
int main()
{
int i =1, sum = 0;
for (i = 1; i <= 10; i++) // インクリメント演算子
sum += i;
std::cout << "sum:" << sum << std::endl;
return 0;
}
285デフォルトの名無しさん:2009/05/26(火) 20:49:50
>>275 D-2
#include <iostream>
int comb(int n, int r)
{
if (r == 0 || r == n) return 1;
n--; // デクリメント演算子
return comb(n, r - 1) + comb(n, r);
}
int main()
{
int i, n, r;
long x;
std::cout << "n:"; std::cin >> n;
std::cout << "r:"; std::cin >> r;
std::cout << "nCr=" << comb(n, r) << std::endl;
return 0;
}
こんなんで良いのかな。違うような気もするが。
286棚大生:2009/05/26(火) 20:55:34
>>282
ありがとうございます!!!

面倒だと思いますが、A〜Dもお願いします。
287棚大生:2009/05/26(火) 21:04:38
>>286 はすいません書き込むのが遅れました
>>283
ABに関してなんですが、coutでなぜ"\"というのが出てくるのですか?
288棚大生:2009/05/26(火) 21:10:12
>>285
重ね重ねすいません。
D-2で、できれば combを使わない方法でお願いしたいのですが。。。
289デフォルトの名無しさん:2009/05/26(火) 21:15:45
注文の多い料理店
290デフォルトの名無しさん:2009/05/26(火) 21:56:26
>>275 D-2 (combを使わない)
#include <iostream>
int main()
{
int i, n, r;
int x = 1;
std::cout << "n:"; std::cin >> n;
std::cout << "r:"; std::cin >> r;
for (i = n; i >= n - r + 1; i--) //デクリメント演算子
x *= i;
for (i = r; i >= 1; i--) //デクリメント演算子
x /= i;
std::cout << "nCr=" << x << std::endl;
return 0;
}
オーバーフローは全く考慮してないので注意。
291デフォルトの名無しさん:2009/05/26(火) 22:01:42
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):

1!〜53!を計算して、それらの計算結果の一の位、十の位、…をそろえて(つまり右揃えで)
出力するプログラムを作成せよ。但し、その際
・適切にモジュール化、機能分割する
・53!≒4.27*10^69であることを考慮して階上値を入れる配列の大きさを決める

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: あさって
[5] その他の制限:
・配列の添え字がメモリ確保した配列要素の範囲を超えてはならない
・乗算を上の桁から行ってはいけない。
・53!の計算、出力の際に最初から1*2*3*...*53という風に、極端に
 処理効率を悪くしてはいけない。
292デフォルトの名無しさん:2009/05/26(火) 22:10:34
>>291
むずいな
293デフォルトの名無しさん:2009/05/26(火) 22:14:50
はぁ?
294デフォルトの名無しさん:2009/05/26(火) 22:39:56
>>291
多倍長整数の乗算の実装をしろってことでおk?
制限の2つ目からもそんなニオイが感じられるし
3つ目の制限は 53!=52!(直前に計算済み)x53をしろってことかな
295真面目に質問!:2009/05/26(火) 22:41:55
【授業】:C++

【問題文】:

@以下のプログラムを実行した際,戻り値として何が表示されるか。

#include <iostream>
int main()
{
int a,d,e;
a = 10;
d = a ==10;
e = a < 10;
cout << e <<"\t"<< d <<endl;
}

Aa=10,b=3,c=4とすると、c>aかつc>bの戻り値、c>aまたはc>bの戻り値を出力するプログラムを作成せよ。

BAのプログラムを実行した際,戻り値として何が表示されるか。

【期限】:09.05.27 12:00


何の事を言っているのかサッパリです。。。
よろしくお願いします。
296棚大生:2009/05/26(火) 22:45:00
>>290
どうもありがとうございました。
なんとかなりそうです。
297デフォルトの名無しさん:2009/05/26(火) 22:56:50
>>291 なんとか1レスに納めた。修正ヨロ
#include<stdio.h>
#define MB_UNIT 10000
#define MB_SIZE 18
typedef struct tag_mb_t{ long data[MB_SIZE]; }mb_t;
mb_t mb_mul(mb_t a, int n){
long i, tmp, carry=0;
for(i=0;i<MB_SIZE;i++){
tmp=a.data[i]*n+carry;
a.data[i]=tmp%MB_UNIT;
carry=tmp/MB_UNIT;
}
return a;
}
int mb_sprint(char buf[MB_SIZE*4+1], mb_t a){
char i, *p=buf;
for(i=MB_SIZE-1;i>0 && a.data[i]==0;i--);
p+=sprintf(p, "%ld", a.data[i]);
for(i--;i>=0;i--) p+=sprintf(p, "%04ld", a.data[i]);
return p-buf;
}
int main(void){
char buf[MB_SIZE*4+1], i, len53;
mb_t x[54]={{{1}}};
for(i=1;i<=53;i++) x[i]=mb_mul(x[i-1], i);
len53=mb_sprint(buf, x[53]);
for(i=1;i<=53;i++){
mb_sprint(buf, x[i]);
printf("%*s\n", len53, buf);
}
return 0;
}
298 ◆XjTlXLIlH2 :2009/05/26(火) 23:10:11
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):
めもりのついていない4リットルの容器と、3リットルの容器があり、これらを使って4リットルの容器に2リットルをはかるプログラムをC言語で書く。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:
forやwhileなどを主に使ったプログラムにしたいのですがよくわからなかったのでよろしくお願いします。
299デフォルトの名無しさん:2009/05/26(火) 23:14:51
>>298
4 0
1 3
1 0
0 1
4 1
2 3
300デフォルトの名無しさん:2009/05/26(火) 23:21:16
>>299
0 3
3 0
3 3
4 2
0 2
2 0
301デフォルトの名無しさん:2009/05/26(火) 23:35:34
>>295
(1) 0 1
(2)
#include <iostream>
int main()
{
int a,b,c,d,e;
a = 10; b = 3; c = 4;
d = c>a && c>b;
e = c>a || c>b;
cout << e <<"\t"<< d <<endl;
}
(3) 1 0
よほどおかしな環境でない限りはこうなるとは思うが、
コンパイラ/OSが書いてない以上実行結果は妄想。
302デフォルトの名無しさん:2009/05/26(火) 23:42:15
>>291
#include <stdio.h>
#include <stdlib.h>
typedef struct tag_LINT{
  int sz_array;
  int* value;
} LINT;
LINT* create_lint(int keta){ // size:桁
  LINT* lint = (LINT*)malloc(sizeof(LINT));
  lint->sz_array = keta / 4 + 1;
  lint->value = (int*)calloc( sizeof(int), lint->sz_array);
  return lint;
}
LINT* copy_lint(LINT* lint){
  LINT* copy = (LINT*)malloc(sizeof(LINT));
  copy->sz_array = lint->sz_array;
  copy->value = (int*)calloc( sizeof(int), lint->sz_array);
  return copy;
}
LINT* mul_lint_int(LINT* l_num, int r_num){
  int carry = 0;
  //for (int i=l_num->sz_array-1; i>=0; i--){
  for (int i=0; i < l_num->sz_array; i++){
        int tmp = l_num->value[i] * r_num + carry;
    l_num->value[i] = tmp % 10000;
    carry = tmp / 10000;
  }
  return l_num;
}
>>303に続く
303デフォルトの名無しさん:2009/05/26(火) 23:44:20
>>302の続き

void print_lint(LINT* l_num){
  for (int i=l_num->sz_array-1; i>=0; i--){
    printf("%04d", l_num->value[i]);
  }
  printf("\n");
}
int main(void){
  LINT* n = create_lint(70); // 53!≒4.27*10^69
  n->value[0] = 1;
  for (int i=1; i<=53; i++){
        mul_lint_int(n, i);
    printf("%2d!= ", i);
    print_lint(n);
  }
  return 0;
}

リロード忘れてて>>297で答えてたなorz
でもとりあえずw
304デフォルトの名無しさん:2009/05/26(火) 23:50:43
+ ;
* ☆_+
: , xヾ:、__,..-‐‐:、、,へ.........._
         く '´::::::::::::::::ヽ
          /0:::::::::::::::::::::::', free議論が始まる前にf逃げて〜!!!
       =  {o:::::::::(;´Д`):::}
         ':,:::::::::::つ:::::::つ
      =   ヽ、__;;;;::/
           し"~(__)
305294=302=303:2009/05/27(水) 00:09:48
>>304 スマソw
>>302-303の修正
1. // size:桁 -> 消し忘れ
2. copy_lint関数 -> 使ってないから消して
3. 追加
LINT* delete_lint(LINT* lint){
  free(lint->value);
  free(lint);
}
4. 変更
main関数のreturn前に
  delete_lint(n);
を追加
5. 出力部分で先頭部分を空白にするならfor文を
bool f=true;
for (int i=l_num->sz_array-1; i>=0; i--){
  if (f && (0!=l_num->value[i]))  f=false;
  printf( (f? "    ": "%04d"), l_num->value[i]);
}
に変更
306デフォルトの名無しさん:2009/05/27(水) 00:13:43
【質問テンプレ】
[1] 授業単元:C言語
[2]問題1 テキストファイルにある文字列を空白で区切って一行ごとに表示する
例 I have a pen とテキストファイルにかかれていたらほかのファイルに
I
have
a
pen
と表示する
問題2 問題1で1行ごとに表示した文字列の4行目の文字列をほかのファイルにコピーする
例の場合はpenをコピーし、また別のファイルにpenと出力させる。
問題3 問題1で作った文字列で区切る物を利用してアルファベット、スペース、数字の数を数えるプログラム
例 as 123 rtd xxとファイルに入力されていたらアルファベットは3こ、数字は2こ、スペースは3個と表示
1,2,3はそれぞれ別のプログラムですが2,3では1のものを利用します。
[3] 環境
 [3.1] OS: Windows
 [3.2] VisualC++
 [3.3] 言語: C
[4] 期限:5月29日まで

307デフォルトの名無しさん:2009/05/27(水) 01:23:07
[1] 授業単元: C++演習
[2] 問題文(含コード&リンク):
  http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9234.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C++
[4] 期限: 27日まで
[5] その他の制限:vectorを習ったばかりです

308デフォルトの名無しさん:2009/05/27(水) 01:53:29
>>306

問題1--------------------
#include <stdio.h>
int main(void)
{
int c, last;
for (; (c = getchar()) != EOF; ) {
if (c == ' ')
if (last == ' ') ;
else putchar('\n');
else
putchar(c);
last = c;
}
return 0;
}
309デフォルトの名無しさん:2009/05/27(水) 01:54:38
>>306

問題2--------------------
#include <stdio.h>
#include <string.h>
#define MAXBUF 1000
int main(void)
{
unsigned char buf[MAXBUF];
int count = 0, continued = 0;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
if (!continued) count++;
if (count == 4)
fputs(buf, stdout);
if (strlen(buf) == MAXBUF - 1 && buf[MAXBUF - 2] != '\n')
continued = 1;
else
continued = 0;
}
return 0;
}
310デフォルトの名無しさん:2009/05/27(水) 01:55:22
>>306

問題3--------------------
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c;
int found_digit = 0, found_alpha = 0;
int numeric_count = 0, alpha_count = 0, line_count = 0;
while((c = getchar()) != EOF) {
if (c == '\n') {
line_count++;
if (found_digit) numeric_count++;
if (found_alpha) alpha_count++;
found_digit = 0;
found_alpha = 0;
}
if (isdigit(c)) found_digit = 1;
if (isalpha(c)) found_alpha = 1;
}
printf("アルファベットは%d個、数字は%d個、空白は%d個です\n",
alpha_count, numeric_count, line_count - 1);
return 0;
}
311307の間違い:2009/05/27(水) 01:56:20
312デフォルトの名無しさん:2009/05/27(水) 02:00:58
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9259.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月初旬
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9260.c
現在できているプログラムですが、ツーペアの判定が上手くいきません。どなたか改善をお願いします。
313デフォルトの名無しさん:2009/05/27(水) 02:07:23
314 ◆Xf1zvf6ius :2009/05/27(水) 02:51:52
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9262.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9263.txt

[3] 環境
 [3.1] OS:XP
 [3.2] textpad
 [3.3] 言語: C++
[4] 期限: 5月末
よろしくお願いします。
315馬路:2009/05/27(水) 03:30:09
お願いします。

【授業】:プログラミング(C++)

【問題文】:

@以下のプログラムを実行した際,戻り値として何が表示されるか。

#include <iostream>
int main()
{
int a,d,e;
a = 10;
d = a ==10;
e = a < 10;
cout << e <<"\t"<< d <<endl;
}

Aa=10,b=3,c=4とすると、c>aかつc>bの戻り値、c>aまたはc>bの戻り値を出力するプログラムを作成せよ。

BAのプログラムを実行した際,戻り値として何が表示されるか。

【期限】:09.05.27 12:00
316デフォルトの名無しさん:2009/05/27(水) 04:11:24
317デフォルトの名無しさん:2009/05/27(水) 04:23:45
>>314
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9265.cpp

問題文以上に余計な関数とか書いたから邪魔なら省いてくれ
318307の間違い:2009/05/27(水) 04:36:18
>>298 再帰とか2分木とか考えてる暇がないのには理由がある、役不足。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9266.txt
319デフォルトの名無しさん:2009/05/27(水) 05:32:23
[1] 授業単元:プログラミング入門C++
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9267.txt

[3] 環境
 [3.1] OS:XP
 [3.2] Turbo C++
 [3.3] 言語: C++
[4] 期限: 今日18時まで
かなり初歩だと思いますがよろしくお願いいたします。

320デフォルトの名無しさん:2009/05/27(水) 07:17:32
>>319
#include <iostream>
using namespace std;
int passMinutes(const int start, const int end) { return end - start; }
int main()
{
const int MIN_INADAY = 24*60;
int h1, m1, h2, m2;
cout << "開始時間(0-23):"; cin >> h1;
cout << "開始分(0-59):"; cin >> m1;
cout << "終了時間(0-23):"; cin >> h2;
cout << "終了時間(0-59):"; cin >> m2;
// 入力は省略。h1:m2 > h2:m2 の場合、h2:m2は翌日の時間だと判断する
// endは27:00等の入力も受け付けるが、startは、00:00〜23:59の範囲に丸められる
int start = h1*60+m1;
int end = h2*60+m2;
if(start < 0) {
start = 0;
h1 = 0;
m1 = 0;
} else if(start >= MIN_INADAY) {
start = MIN_INADAY - 1;
h1 = 23;
m1 = 59;
}
int tm = (start <= end) ? passMinutes(start, end) : passMinutes(start, MIN_INADAY) + passMinutes(0, end);
cout << h1 << "時" << m1 << "分から" << h2 << "時" << m2 << "分までの時間" << endl;
cout << (tm / 60) << "時間" << (tm % 60) << "分です" << endl;
return 0;
}
321デフォルトの名無しさん:2009/05/27(水) 07:24:17
>>319 ごめ。endが負の数になる場合のチェックを入れ忘れてた。
#include <iostream>
using namespace std;
int passMinutes(const int start, const int end) { return end - start; }
int main()
{
const int MIN_INADAY = 24*60;
int h1, m1, h2, m2;
cout << "開始時間(0-23):"; cin >> h1;
cout << "開始分(0-59):"; cin >> m1;
cout << "終了時間(0-23):"; cin >> h2;
cout << "終了時間(0-59):"; cin >> m2;
// 入力は省略。h1:m2 > h2:m2 の場合、h2:m2は翌日の時間だと判断する
// startは、00:00〜23:59の範囲に丸められるがendは最小値だけが00:00に丸められる。
int start = h1*60+m1;
int end = h2*60+m2;
if(start < 0) {
start = h1 = m1 = 0;
} else if(start >= MIN_INADAY) {
start = MIN_INADAY - 1;
h1 = 23;
m1 = 59;
}
if(end < 0) { end = h2 = m2 = 0; }
int tm = (start <= end) ? passMinutes(start, end) : passMinutes(start, MIN_INADAY) + passMinutes(0, end);
cout << h1 << "時" << m1 << "分から" << h2 << "時" << m2 << "分までの時間" << endl;
cout << (tm / 60) << "時間" << (tm % 60) << "分です" << endl;
return 0;
}
322デフォルトの名無しさん:2009/05/27(水) 07:51:14
323デフォルトの名無しさん:2009/05/27(水) 09:18:12
>>312
ワンペアの判定結果を使う。
ツーペア判定関数の引数に、最初に見つけたワンペアカードを追加する。
ツーペア判定関数は、ワンペア以降から二組目のセットを見つけ、あればそのカード番号を返す。
ワンペアがなければ、そもそも呼ぶ必要もなさそう。
324 ◆UlBEcxSSxE :2009/05/27(水) 09:58:29
[1] 授業単元:プログラミング入門A
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9269.txt
[3] 環境
 [3.1] OS:Ubuntu Linux 8.
 [3.2] コンパイラ名とバージョン: gcc 4.2
 [3.3] 言語: C
[4] 期限: 5月29日17:00
[5] その他の制限: アップしたファイルに詳しく書いてあります。

いろいろやってみたのですが難しいです。再帰版はいろいろ調べてみて
何とかなるような気もするのですが、非再帰版はどうやったらいいのか
見当がつかず、あと2日で両方は無理そうです。よろしくお願いします。
325デフォルトの名無しさん:2009/05/27(水) 10:04:19
すみません。 急ぎで知りたいことがあります。
unsigned int 型の数字が、ランダムで生成されて
すでに生成済みか、未生成かを知りたいです。
高速で省メモリにするにはどうしたらいいですか?
326デフォルトの名無しさん:2009/05/27(水) 10:14:29
r(0), r(1), r(2), ... みたいに自然数からの関数rを使って「乱数列」を与える
ことができて、さらにrの逆関数が作れれば簡単。でもそんな乱数列は
あるのかなあ。

そうでなければ、生成した乱数を適当な集合を表すデータ構造(ハッシュか
何か)に突っ込んでおくという愚直な方法しか思いつかないや。でもこれだと
省メモリにはならないかも。


327325:2009/05/27(水) 10:15:59
数字はたくさんあり、メモリに保存するとしたら数ギガになる場合がしりたいです。
メモリはたかだか30Mの使用で処理したいです。
328デフォルトの名無しさん:2009/05/27(水) 10:16:03
>>325
スレ違い

ダブらない乱数を発生させたい(それはもう乱数じゃない)なら
 つttp://pc12.2ch.net/test/read.cgi/tech/1192628099/l50
そうでないなら
【初心者歓迎】C/C++室 Ver.65【環境依存OK】
 つttp://pc12.2ch.net/test/read.cgi/tech/1239326399/l50
329デフォルトの名無しさん:2009/05/27(水) 10:35:10
>>325
30M*8bit=240M=240,000,000 MAX
330デフォルトの名無しさん:2009/05/27(水) 10:37:29
>>326
ランダムの数字って言うのは、すでにハッシュ値(CRC,SHA)のことなんです。
質問のため言い換えました。
重複ファイルや重複URLを検出したいのですがいい方法ないかなとおもいました。
ググたところ、パトリシア トライ、ダブル配列あたりが使えそうなのでこのあたりでいってみます。
331デフォルトの名無しさん:2009/05/27(水) 11:41:58
bitデータの2分木で、子がある1、子がない0として記録しておけばかなり縮む。探索は木の左からと決める。
一次元の配列に格納したらデータの更新が難しいが。 追加する部分以降を移動しなければいけない。
332デフォルトの名無しさん:2009/05/27(水) 14:07:44
お願いします。
授業単元ソフトウェア製作実習
osソラリス
コンパイラ gcc
言語 c
制限 台形の面積を求めるのに(上底+下底)*高さ/2を使ってください
。できればいかにも初心者が書いたようなプログラムにしてくれる
と助かります。
高さhが2で上底aと下底bが次のような4つの合計を求めるプログラムをfor文をつかって作成せよ。
台形(1)a=0b=2^2h=2面積=
台形(2)a=2^2b=4^2h=2面積=
台形(3)a=4^2b=6^2h=2面積=
台形(4)a=6^2b=8^2h=2面積=
四つの台形の面積の合計=
以上でお願いします。
333デフォルトの名無しさん:2009/05/27(水) 15:01:30
334デフォルトの名無しさん:2009/05/27(水) 15:22:54
>>332

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9270.txt

こんなんで良い? ちなみに解の妥当性までは確認してない
335デフォルトの名無しさん:2009/05/27(水) 15:46:51
>>320>>321
ありがとうございました!
336初心者:2009/05/27(水) 15:48:34
C++で
#include <iostream.h>
main()
{

int a=10,b=3,c=2,d=0,e=0;
d = !a && b>c;
e = !a || b>c;
cout << d <<"\t"<< e <<endl;
}
を実行した結果はどうなりますか?
337デフォルトの名無しさん:2009/05/27(水) 15:53:05
実行してみりゃいいだろw
338デフォルトの名無しさん:2009/05/27(水) 15:58:59
>>336
どっちも結果はbool型だと思うぞ。
339初心者:2009/05/27(水) 16:00:09
>>337
いま環境が悪くて実行できないので、すいません。
お願いします。
340デフォルトの名無しさん:2009/05/27(水) 16:02:10
あと1時間後に答えるからそれまで待ってろ
341デフォルトの名無しさん:2009/05/27(水) 16:04:43
>>336
iostream.hとか存在しないからコンパイルエラー
342デフォルトの名無しさん:2009/05/27(水) 16:07:41
>>341
いたた
343デフォルトの名無しさん:2009/05/27(水) 16:09:36
>>341
それはない
環境依存ではあるが古い記述方法であることであるのは事実
intに対して論理否定やboolをintに入れているのはいががなモノかと
main()のintは省略してはならない、ゆえにnon-void関数である
cout, endlは、このスコープで定義されていない
344初心者:2009/05/27(水) 16:19:06
#include <iostream>
int main()
{

int a=10,b=3,c=2,d=0,e=0;
d = !a && b>c;
e = !a || b>c;
cout << d <<"\t"<< e <<endl;
}

となればいいんですか?

結果はどうなるんですか??
345デフォルトの名無しさん:2009/05/27(水) 16:22:45
>>344
ネームスペースがおかしいから、コンパイルエラー。
346初心者:2009/05/27(水) 16:26:15
#include <iostream>
int main()
{

int a=10,b=3,c=2,d=0,e=0;
d = !a && b>c;
e = !a || b>c;
cout << d << e <<endl;
}
ですか?

締切が18:00までなので結果だけでも教えてください。
347デフォルトの名無しさん:2009/05/27(水) 16:26:40
336のままならコンパイルできる環境もあるが、344だとコンパイルできない。
348デフォルトの名無しさん:2009/05/27(水) 16:38:01
>>334
レスありがとうございます。申し訳ありませんが
台形(1)a=0,b=2^2,h=2面積=
台形(2)a=2^2,b=4^2,h=2面積=
台形(3)a=4^2,b=6^2h=2面積=
台形(4)a=6^2,b=8^2h=2面積=
四つの台形の面積の合計=
という表示形式でお願いできないでしょうか?
349デフォルトの名無しさん:2009/05/27(水) 16:45:41
350 ◆XjTlXLIlH2 :2009/05/27(水) 16:46:03
>>318
すごく助かりました、ありがとうございました!!
351334:2009/05/27(水) 16:54:43
352デフォルトの名無しさん:2009/05/27(水) 17:26:58
>>322
ありがとうございます。
353デフォルトの名無しさん:2009/05/27(水) 18:04:25
>>351たすかりました。ありがとうございます。
354デフォルトの名無しさん:2009/05/27(水) 18:27:30
[1] C言語
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] Windows
 [3.2] すみません、わかりません
 [3.3] C
[4] 明日まで

入力された文字列をリストに格納し、
そのリスト自体を入れ替えて辞書順に並べる関数を作っています。
その際先頭・最後尾・次のリストのアドレスを変えなくては
ならないのですが、その処理をどうやったらいいか悩んでいます。
(strcmpの下の行からがよくわかりません)

void jisyo(struct B *fp, struct B *ep, int list_sum){
//前からリストの先頭アドレス、リストの最後尾アドレス、リストの数
  です。main関数でjisyo(a.front_p, a.back_p, a.list_sum)と
  呼び出しています。

int n, i, m;
struct B *p;
355デフォルトの名無しさん:2009/05/27(水) 18:28:50
>>354の続きです

for(n = 1; n < list_sum; n++){
pb = fp;
pb_b = ep;

for(i = 0; i < list_sum-1; i++){
if(strcmp(pb->str_p, pb->next_p->str_p) >= 1){
p = pb;
pb = pb->next-_p;
pb->next_p = p;
356デフォルトの名無しさん:2009/05/27(水) 18:29:31
>>355の続きです

if(fp != pb){
fp = fp->next_p->next_p;
fp->next_p->next_p = fp->next_p;
fp->next_p = fp->next_p->next_p->next_p;

}else if(ep != pb_b){
ep = ep->next_p;
ep->next_p = ep->next_p->next_p->next_p;
ep->next_p->next_p->next_p = ep->next_p;

}else{
pb = pb->next_p->next_p;
pb->next_p = pb;
pb->next_p->next_p = pb->next_p;
}
}
pb = pb->next_p;
}
}
for(m = 0; m < list_sum; m++){
printf("%s\n", pb->str_p);
pb = pb->next_p;
}
}
357307の間違い:2009/05/27(水) 19:14:21
>>307(9255) Vector勉強になった。 それとついでに>>324(9269) >>(9271) N-Queenを解くプログラム
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <time.h>
using namespace std;
struct student {
  string name;
  int score;
};
bool operator<(const student& x, const student& y) {
  return x.score < y.score;
}
int main(void) {
  int i;
  char buf[50];
  student s, t;
  vector<student> vecStudent;
vector<student>::iterator theIterator;
  srand((unsigned)time(0));
  for(i=0; i<20; i++) {
    sprintf(buf, "名前.%02d.名前", i+1); s.name = buf; s.score = rand() % 101;
    vecStudent.push_back(s);
  }
for (theIterator = vecStudent.begin(); theIterator != vecStudent.end(); theIterator++)
    cout << theIterator->name << ":" << theIterator->score << endl;
  cout<<endl; sort(vecStudent.begin(), vecStudent.end());
  for(i=0; i<20; i++)
    t = vecStudent[i], cout<<t.name<<":"<<t.score<<endl;
  return 0;
}
358デフォルトの名無しさん:2009/05/27(水) 20:04:04
>>354-356
どのような構造体かわからなかったので妄想してコーディングした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9273.c
兄ぃそこはらめぇー、とか。あぁ、酔ってるわ。
359デフォルトの名無しさん:2009/05/27(水) 20:32:00
>>358
ありがとうございます。
でもコメントが文字化けしていて
どんな処理をしているのかわかりませんでしたorz

構造体は
struct A a{
struct B *front_p;
struct B *back_p;
int list_sum;
}

struct B b{
char *str_p;
struct B *next_p
}
です。
書き忘れすみません。
よろしくお願いします。
360デフォルトの名無しさん:2009/05/27(水) 20:43:14
>>358
構造体は予想どおりだったか。

コメントの文字化けは知らんがな。
UTF-8だから、nkfかiconvでSJISにでもしてみてね。
それか、サクラエディタかnotepad++で読み込むとか。

私の考えでは、別にリストのポインタを入れ替えていく必要はないと。
つまり、文字列(char *)だけ入れ替えてやるだけで済むと。
ソートしたい対象が文字列(char *)なのにリストのポインタを替えていくなんて無駄な処理でしょ。
だから、文字列(char *)だけソートしたものが>>358なのよ。
361307の間違い:2009/05/27(水) 20:44:16
>でもコメントが文字化けしていて
>どんな処理をしているのかわかりませんでしたorz
(9273)右クリックでファイルをダウンロードすれば読めるはず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
362デフォルトの名無しさん:2009/05/27(水) 21:11:55
>>360
文字列のみの入れ替えは完成していたのですが、
講師からリスト自体を入れ替えろと言われました…。

あとコメント見れました。
363デフォルトの名無しさん:2009/05/27(水) 22:35:50
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9274.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2009年06月03日24:00まで]
[5] その他の制限: 特になし。
よろしくお願いします
364デフォルトの名無しさん:2009/05/28(木) 00:25:36
[1] 授業単元:
[2] 問題文(含コード&リンク):1!〜53!を計算して、それらを右揃えで出力するプログラムを
                  作成せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C言語
[4] 期限: [2009年6月2日17:00まで]
[5] その他の制限:・プログラムを幾つかの関数に分割する
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9275.txt
↑途中まで作ったのですが空白にしたいところが0で埋まってしまって困っています。
よろしくお願いします
365デフォルトの名無しさん:2009/05/28(木) 00:25:55
>>363
具体的にどこがわからんの?
366デフォルトの名無しさん:2009/05/28(木) 00:39:17
>>364

print関数だけ。


void print(int a[],int N,int n)
{
    int i;
    int head;
        
    printf("%2d! = ",n);

    head = 0;
    for(i=N-1; i>=0; i--) {
        if (head)
            printf("%07d",a[i]);
        else if (a[i]) {
            printf("%7d",a[i]);
            head = 1;
        }
        else
            printf("       ");
    }
    printf("\n");
}
367デフォルトの名無しさん:2009/05/28(木) 00:45:29
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9276.txt
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: visual c++
 [3.3] 言語: C++
[4] 期限: 朝までに。すごく困っています
[5] その他の制限: 特になし
よろしくお願いします
368デフォルトの名無しさん:2009/05/28(木) 00:52:30
>>366
ありがとうございます。
0は消えたんですが右揃えになりません。
369デフォルトの名無しさん:2009/05/28(木) 00:56:08
>>366
すいません。なりました。本当にありがとうございました
370デフォルトの名無しさん:2009/05/28(木) 01:01:49
>>367
greater()をstructの後に移動
if(a.point>b.point)
371デフォルトの名無しさん:2009/05/28(木) 01:05:09
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):線形検索を使用して配列内の最大の要素を検索せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:来週火曜日
[5] その他の制限:制限はありません
まずアルゴリズムが全く思いつきません。
よろしくお願いします。
372デフォルトの名無しさん:2009/05/28(木) 01:06:17
>>370

ありがとうございました。
昨日から悩んでいたのがやっと解決しました
373デフォルトの名無しさん:2009/05/28(木) 01:19:43
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9277.txt
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C++
[4] 期限:できるだけ早く

お願いします
374デフォルトの名無しさん:2009/05/28(木) 01:39:22
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
(1)1からn番目までの奇数2n-1までの和をn=1からn=50まで求め、n,和(sum),
n~2の値を出力せよ。また、プログラムの中でsum=0;およびn--;が
 必要な理由を答えよ。
(2)原点を中心とした半径2の円を描くプログラムを作成せよ。
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:今週金曜日
[5] (2)についての条件
  @半径2の値はconst型で初期化しておき、実数型とする。
  A円の方程式は平面極座標(r,φ)を用いてforループでφを0から
  2πまで変化させてガウス座標(x,y)を出力する。
  Bforループの制御変数はint型とする。
長くなってしまいすいません。よろしくお願いいたします。
375デフォルトの名無しさん:2009/05/28(木) 01:46:08
[1] 授業単元: 最適化
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9278.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C++
[4] 期限: 5月30日
ランダム関数を使うらしいのですが全く分かりません。
よろしくお願いします。
376デフォルトの名無しさん:2009/05/28(木) 02:10:13
377デフォルトの名無しさん:2009/05/28(木) 02:36:04
378デフォルトの名無しさん:2009/05/28(木) 02:37:09
[1] 授業単元: 情報処理入門
[2] 問題文(含コード&リンク):
   キーボードから実数 x を入力し、ニュートン法と呼ばれる次のような反
復の式を用いて、近似的に x の平方根を求めるプログラムを作成せよ。
--
 xの平方根は、次の計算を| s(i+1)-s(i) | < ε, i=1,2,...となるまで繰
り返すことによって求めることができる。εは収束判定数である。

  s(i+1) = ( s(i) + x / s(i)) / 2
ただし、s(1) = 1 とする。
 なお、ε=0.00001として計算すること。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年5月29日00:00まで
[5] その他の制限: なし

よろしくお願いします。
379デフォルトの名無しさん:2009/05/28(木) 02:50:29
380デフォルトの名無しさん:2009/05/28(木) 06:16:47
>>364
void print(int a[],int N,int n) {
int i;
printf("%2d! = ",n);
for(i=N-1; i>=0&&a[i]==0; i--) printf("%7c",' ');
printf("%7d",a[i]);
for(i--; i>=0; i--) printf("%07d",a[i]);
printf("\n");
}
381243:2009/05/28(木) 06:36:52
>>245 246
先週は助けていただき有難うございました。
関連する問題になるのですが、以前複素数のクラスを作成しました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9282.zip

このクラスもPass_Betterを使って値渡しにするよう言われたのですが、
どなたか分かる方いたらお願いします。
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C++
[4] 期限: 5月30日
382デフォルトの名無しさん:2009/05/28(木) 09:26:42
>>374
問題文(1)の中の「n~2の値」、何を出力すればいい?
383sage:2009/05/28(木) 10:11:18
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):番兵を利用して配列内の最大の要素を検索するプログラムを作りなさい
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:6月2日
[5] その他の制限:制限はありません
お願いします
384デフォルトの名無しさん:2009/05/28(木) 10:34:58
指数関数e^xの近似値を返す関数expon(x, n)をつくります。第1引数は浮動小数点数xで,第2引数はexをTaylor展開で展開する際の最大次数nになります。n次項までのTaylor展開の式は下に示す通りです。
さらに,浮動小数点数yと正の整数mを引数とし,yの小数点m桁より下を切り捨てて出力する関数trunc(y, m)をつくりなさい。
次に,これらの2つの関数を用いて,e^xの近似値を小数点以下の桁数を指定して出力するプログラムをつくりなさい。
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
指数関数e^xの近似値を返す関数expon(x, n)をつくります。第1引数は浮動小数点数xで,第2引数はexをTaylor展開で展開する際の最大次数nになります。n次項までのTaylor展開の式は下に示す通りです。
さらに,浮動小数点数yと正の整数mを引数とし,yの小数点m桁より下を切り捨てて出力する関数trunc(y, m)をつくりなさい。
次に,これらの2つの関数を用いて,e^xの近似値を小数点以下の桁数を指定して出力するプログラムをつくりなさい
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5月30日
[5] その他の制限:なし
385デフォルトの名無しさん:2009/05/28(木) 10:39:59
すいません>>384はミスです。

[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
指数関数e^xの近似値を返す関数expon(x, n)をつくります。第1引数は浮動小数点数xで,第2引数はexをTaylor展開で展開する際の最大次数nになります。n次項までのTaylor展開の式は下に示す通りです。
さらに,浮動小数点数yと正の整数mを引数とし,yの小数点m桁より下を切り捨てて出力する関数trunc(y, m)をつくりなさい。
次に,これらの2つの関数を用いて,e^xの近似値を小数点以下の桁数を指定して出力するプログラムをつくりなさい
関数truncは,trunc(-3.141593, 3) と呼び出すと,-3.141のように画面に出力する。但し,printf("%.*f", m, y); は用いないで定義すること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:5月30日
[5] その他の制限:なし
386デフォルトの名無しさん:2009/05/28(木) 10:55:54
[1] 授業単元: ソフトウエア科学
[2] 問題文(含コード&リンク):

 4桁の10進数の各桁を千の位からd3,d2,d1,d0で表すと、
((d3*10+d2)*10+d1)*10+d0という計算をすることにより、元の10進数を得ることができる。
4桁の10進数の各桁を、まず、大きさ4のint型配列に1桁ずつに入力し、
その後、上記の計算法により、元の10進数にして表示するプログラムを書け。
ただし、上記の計算部分はfor文による繰り返しにより記述すること。

例;入力が4536ならば、((4*10+5)*10+3)*10+6=4536の計算をして表示する。

  
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年5月29日12:50まで
[5] その他の制限:特になし

お願いします。
387デフォルトの名無しさん:2009/05/28(木) 11:17:17
388デフォルトの名無しさん:2009/05/28(木) 11:27:02
>>387
ありがとうございました。
389デフォルトの名無しさん:2009/05/28(木) 11:47:24
もうちょっと面白い問題プリーズ
390デフォルトの名無しさん:2009/05/28(木) 12:09:18
>>380
ありがとうございます
391デフォルトの名無しさん:2009/05/28(木) 12:10:02
>>389
オナニーは楽しいかい?
392デフォルトの名無しさん:2009/05/28(木) 14:13:57
>>389
Windowsのフリーセルの最小手順検索はいかが?
ここで最小手順とは人間が操作を行う回数のこと
列移動も一回として数える
393デフォルトの名無しさん:2009/05/28(木) 14:40:16
>>365さん
入力した内容を暗号化(置き換え)してファイルに保存する方法が分からないです
よろしくお願いします
394joyful_age:2009/05/28(木) 14:44:16
395joyful_age:2009/05/28(木) 15:04:34
>>363 修正。ID、名前の数字は置換しない。
void angouka(char *s) {
   for(; *s != '\0'; s++)
     if(*s < '0' || *s > '9') (*s)++;
}
396デフォルトの名無しさん:2009/05/28(木) 15:14:18
>>389
難易度が高くて未回答の問題が幾つもあるだろ。解いてみろ。
397デフォルトの名無しさん:2009/05/28(木) 17:40:06
>>394-395
迅速な回答ありがとうございます!
398デフォルトの名無しさん:2009/05/28(木) 18:26:11
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9287.txt
[3] 環境
 [3.1] OS: Windows XP

 [3.3] 言語: C言語
[4] 期限:
5/29日午前10時まで
[5] 一応c言語は習ってます。簡単かもしれませんがよろしくお願いします。
399デフォルトの名無しさん:2009/05/28(木) 19:23:16
>>398
スタック
#include <stdio.h>
#include <stdlib.h>
#define n 100 /* nは外部変数でなく定義とした */

/* スタック処理の関数,外部変数の定義*/
char stack[n];
int size;
void push(char c){
  stack[size++] = c;
}
char pop(){
  return stack[--size];
}

/*main*/
main(){
  char buf[n+1], *pbuf;
  /* scanfで文字列取得(略)*/
  scanf("%s", buf);
  /*スタック初期化(略)*/
  size = 0;
  for(pbuf=buf; *pbuf !='\0'; pbuf++){
    /*1文字ごとの処理(略)*/
    if(*pbuf == '/') printf("%c", pop());
    else push(*pbuf);
  }
  printf("\n");
}
400デフォルトの名無しさん:2009/05/28(木) 19:24:23
>>398
キュー。実行結果は自分で出してくれ。
#include <stdio.h>
#include <stdlib.h>
#define n 100 /* nは外部変数でなく定義とした */

/* キュー処理の関数,外部変数の定義*/
char queue[n];
int size;
int head;
void push(char c){
  queue[size++] = c;
}
char pop(){
  return queue[head++];
}

/*main*/
main(){
  char buf[n+1], *pbuf;
  /* scanfで文字列取得(略)*/
  scanf("%s", buf);
  /*キュー初期化(略)*/
  size = 0;
  head = 0;
  for(pbuf=buf; *pbuf !='\0'; pbuf++){
    /*1文字ごとの処理(略)*/
    if(*pbuf == '/') printf("%c", pop());
    else push(*pbuf);
  }
  printf("\n");
}
401デフォルトの名無しさん:2009/05/28(木) 19:54:12
>>398
> U,キューによる処理順序を確認する
>
> @入力はn文字以下の長さの文字列とする
> A文字列の先頭から1字すつ処理を行う
>   文字が'/'なら取り出し
>   その他の文字はその文字を追加
> B入出力例 こうならなければ修正する
> EX/AMP//LE////
> EXAMP
これって入出力例がおかしくない?
EXAMPLEって出力されるのが正しいんじゃ

課題1
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9288.c
課題2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9289.c
402デフォルトの名無しさん:2009/05/28(木) 20:08:19
>>401
9287.txtの10行目のが正しいようだね
403 ◆gYINaOL2aE :2009/05/28(木) 20:59:48
【質問テンプレ】
[1] 授業単元:Cプログラムの基礎
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9290.txt
[3] 環境
 [3.1] OS: (WindowsXP
 [3.2] コンパイラ名とバージョン:borland C++
 [3.3] 言語: (C言語】
[4] 期限: ([2009年05月29日00:00:00まで]
[5] その他の制限: 一通り習っていますが、リンク先にある書きかけのソースを
 補完して、完成したいです。

今は解らなくても、理解できるようになりたいです。
その為にも、一度正常に動くソースを見てみたいです。
みなさんの力を貸してください、お願いします!
404デフォルトの名無しさん:2009/05/28(木) 21:13:43
>>382
>>374です。n~2ではなく、n^2(nの2乗)の間違いでした。
すみません;
405デフォルトの名無しさん:2009/05/28(木) 21:45:42
>>378をお願いします。
406デフォルトの名無しさん:2009/05/28(木) 22:12:49
>>374
(1)sum=0 は初期化する必要があるが、n-- は必要な理由が見あたらない
#include <stdio.h>
int main()
{
int n, sum;
sum = 0; // 集計のため0に初期化する
for (n = 1; n <= 50; n++) {
sum += (2 * n - 1);
printf("n = %3d sum = %4d n^2 = %5d\n", n, sum, n*n);
}
return 0;
}

(2)
#include <stdio.h>
#include <math.h>
const double r = 2.0;
const double PI = 3.14159;
int main()
{
int i; double rad;
for (i = 0; i <= 100; i++) {
rad = PI * 2 / 100 * i;
printf("φ=%.6f x=%.6f y=%.6f\n", rad, r * cos(rad), r * sin(rad));
}
return 0;
}
407デフォルトの名無しさん:2009/05/28(木) 22:18:59
>>378
#include <stdio.h>
#include <math.h>
int main(void) {
  double x, s, t;
  double eps = 0.00001;
  scanf("%lf", &x);
  s = 1.0; /* 初期値 */
  do {
    t = s; /* 前回の値 */
    s = (s + x / s) / 2; /* 反復式 */
  } while (fabs(s - t) >= eps);
  printf("%f\n", s);
  return 0;
}
408デフォルトの名無しさん:2009/05/28(木) 22:47:50
[1] C
[2]
1.英数字からなる文字列内の全ての数字文字を削除する。
2.文字列Aの中に文字列Bがいくつ含まれているかカウントする。
3.配列中の10個のデータを降順に並べ替える。
[3] 環境
 [3.1] Windows
 [3.2] わかりません
 [3.3] C
[4] 明日
[5] 3問あります。よろしくお願いします。
409デフォルトの名無しさん:2009/05/28(木) 22:59:48
>>408
3の問題、もう少し詳しく書いて。
配列は文字列?それとも数字?例題があればそれを。
410 ◆gYINaOL2aE :2009/05/28(木) 23:13:44
>403をお願いします!
411デフォルトの名無しさん:2009/05/28(木) 23:15:27
>>409
特に指定はないのでとりあえず文字列にしようかなと思っています。
412デフォルトの名無しさん:2009/05/29(金) 00:03:40
内容:
[1] 授業単元: 制御工学
[2] 問題文: ルンゲクッタ法を用いて
      微分方程式 dy/sx=(1-y)/15を初期条件x0=0,y0=0でxmax=100まで解く

[3] 環境
 [3.1] OS: OS: WindowsXP
 [3.2] コンパイラ名とバージョン: 解かりません
 [3.3] 言語: C++
[4] 期限: 2009年05月29日午前09:00まで
[5] その他の制限:
プログラミングと言う物を今まで使った事が無かったので正直お手上げです
どうかご助力お願いします
413デフォルトの名無しさん:2009/05/29(金) 00:09:31
>>412
ルンゲクッタ法に限らず刻み値も条件として与えられているはずだが。
h=0.01ほど?
414デフォルトの名無しさん:2009/05/29(金) 00:16:14
>>413
h=5、h=1とh=0.5です
415398:2009/05/29(金) 00:17:42
わざわざお答えくださってありがとうございます。
>>401すみません,Eを書くのを忘れてしまいました。ご指摘ありがとうございます
またお聞きするかもしれませんが,よろしくお願いします。」
416デフォルトの名無しさん:2009/05/29(金) 01:35:50
417デフォルトの名無しさん:2009/05/29(金) 01:39:28
[1] 授業単元: C言語 応用演習
[2] 問題文(含コード&リンク):
仕様書
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9292.txt
ソースコード(.txtですみません)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9293.txt
[3] 環境
 [3.1] OS: Windows2000 SP4
 [3.2] コンパイラ名とバージョン: ビジュアルC++6.0
 [3.3] 言語: C言語
[4] 期限: 2009年6月一週目ぐらいまで
[5] その他の制限: File構造体を使用

制限が非常に多いです。

上記の仕様書にあるように、作成してみたのですが、
エラー等は特にないのですが、自信がないです。

おそらくいらない記述や、変えた方が良いコード
または、違う表現が出来る処理などございましたら、
ご指摘を頂きたいと思います。

どうぞ、宜しくお願いします。
 
418デフォルトの名無しさん:2009/05/29(金) 01:40:14
419デフォルトの名無しさん:2009/05/29(金) 01:59:35
>>416
厳密解 1.0-exp(-x/15.0)と較べた結果ほぼあってるね
信じておk
420デフォルトの名無しさん:2009/05/29(金) 02:08:01
>>416
>>419
有難うございます

ちなみに刻み値が1つでh=0.01だった場合
double h[3]を1に、{5.0,1.0,0.5}を0.01にすればいいんですか?
差し出がましくてすいません
421デフォルトの名無しさん:2009/05/29(金) 02:34:41
422デフォルトの名無しさん:2009/05/29(金) 02:35:12
>>420
いくつか修正しなければならないが
h[3]をh=0.01に、h[i]をhに、それからfor文でiを0から2まで
回す必要なし

このプログラムがややこしい配列を使っているのは汎用の
ルンゲ=クッタ法のプログラムを流用したためで、n階微分
方程式も解けるようになっているため

1階専用ならもっと単純に書ける
423デフォルトの名無しさん:2009/05/29(金) 02:52:04
お前ら、そろそろ気づこうや。Cなんて、Cまでやっちゃうなんて
エッチなのは(ry
424デフォルトの名無しさん:2009/05/29(金) 03:05:59
>>417
Input_Data関数が糞すぎる。。変更不可なのか。。
だいたい
void Input_Data(char *InputKey){
 int Cnt = 0;
 while( InputKey[ Cnt - 1] != '\n'){
引数の配列のインデックス値が負数になるなんて(ry
425デフォルトの名無しさん:2009/05/29(金) 03:22:10
>>422
なるほど凡庸をを流用してn階微
分も解ける用にしてるんですか凄いですね。
お手数で無ければ、今後の為に一階専用
も見てみたいですが駄目でしょうか?
426デフォルトの名無しさん:2009/05/29(金) 03:49:39
>>417
途中までだけど一応
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9296.txt
追記したとこや修正したとこ、その他気になったところは「////」でコメントアウトしておいたから
エディタで「////」を検索するといいよ
配列とポインタの関係がまだあやうい感じだったね

疲れた・・・もう寝る
427デフォルトの名無しさん:2009/05/29(金) 04:03:59
>>425
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9297.txt

汎用のプログラムは科学技術計算の本のプログラムを若干改良しただけだよ
1階専用だとこのように配列が大幅に減る

しかしこれでは単振動の問題(2階)も解けない
428デフォルトの名無しさん:2009/05/29(金) 04:16:16
>>427
なるほど重ね重ね有難う御座いましす
429 ◆gYINaOL2aE :2009/05/29(金) 06:34:17
>>418
ありがとうございます!
430デフォルトの名無しさん:2009/05/29(金) 07:24:08
>>417
麻呂のクソースが発動しかけたでおじゃるが、却下でおじゃる
431デフォルトの名無しさん:2009/05/29(金) 09:55:16
>>408
間違いがあったので、訂正して上げ直した。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9298.txt
432デフォルトの名無しさん:2009/05/29(金) 11:29:48
>>424
そうなんです、仕様の制限が厳しくて
>>426
お疲れ様です。
ありがとうございます、参考にさせて頂きます。
433joyful_age:2009/05/29(金) 15:04:28
>>375 最小カット問題。できました、表示の意味はソース読んでくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9299.txt
434デフォルトの名無しさん:2009/05/29(金) 15:49:19
>>383をお願いします。
435デフォルトの名無しさん:2009/05/29(金) 15:53:26
>>434
どのような配列か(何を最大とするか)、また、番兵は何かがわからないから無理だよもん。
436デフォルトの名無しさん:2009/05/29(金) 15:59:33
>>435
説明不足ですいません。int型の配列で単純に数値比較をして最大のものということです。
申し訳ありませんが「番兵は何かがわからない」という意味が私にはわからないのですが。
437デフォルトの名無しさん:2009/05/29(金) 16:07:25
>436
番兵って要するに余分な配列って事でしょ
何に使うの?
438デフォルトの名無しさん:2009/05/29(金) 16:20:22
データ軒数が予め判らない時に、「ここまでだ」と教える様な約束をした値。
データが正数なら、マイナス1とかね。
特に指示がなければ、そういう配列を用意しておいて、最大数を表示するプログラムを書けばいいのではないかな。
439436:2009/05/29(金) 16:45:38
ここでいう番兵は配列の末尾に自分で設定した値を入れて
そこでループを終了させる、といった類で使うものです

この番兵を利用しての最大数を検索するうまい書き方がわからなかったので書き込みをしました

色々説明不足ですみません。
440デフォルトの名無しさん:2009/05/29(金) 16:50:54
int getmax(int *m){
/*
ここを埋めて引数配列mの要素の最大値(複数の場合は一番若いもの)
を求めるコードを書けm[0]は自由に番兵として使用して良い
*/
}

ってことだね。優秀なここの回答者なら必ず回答してくれる筈
441デフォルトの名無しさん:2009/05/29(金) 16:56:20
>>440
m[0]じゃまずいだろ

要するに配列の大きさを渡さずに最大の要素を探せというわけだから
配列の最後が番兵の方が良い

ところで型はint?double?それとも他の型?問題に何も書いて
ないから答えようがないんだけど

それから配列の中身は乱数で初期化するの?どっかから読み込むの?
442デフォルトの名無しさん:2009/05/29(金) 17:00:45
>>441
m[0] にかかれている値が番兵であり
m[1] 〜 m[i] までアクセス可能で m[i] == m[0] で終端 という意ではなかろうかと
443デフォルトの名無しさん:2009/05/29(金) 17:03:00
>>442
>ここでいう番兵は配列の末尾に自分で設定した値を入れて
>そこでループを終了させる、といった類で使うものです

とあるから配列の末尾が番兵だろ
444デフォルトの名無しさん:2009/05/29(金) 17:06:53
>>439
それで配列の大きさはどうやって与えるのですか?
配列の大きさがわからなければ番兵もまた配列の終端に
置く事が不可能なんですけど
445デフォルトの名無しさん:2009/05/29(金) 17:06:58
>>443
そうなると、「何の値をもって番兵とするか?」 はコード上で知っていないといけない形なわけだね
>>440 出題では無理な話になっちゃう
446436:2009/05/29(金) 17:08:11
m[n]とあったときにm[n+1]を設定するということです

>>441
intです。
配列の中身はどこからか読み込んでもいいし乱数で初期化してくださっても結構です。
447デフォルトの名無しさん:2009/05/29(金) 17:10:48
>>446
配列の取りえる値の範囲が int の取りえる値の範囲 と同じ場合 には番兵使えないよ?
配列終端を意味する値 なのか 正規の値 なのか 区別つかないもの…
448デフォルトの名無しさん:2009/05/29(金) 17:12:26
空気読まず投下。

#include <stdio.h>

#define Banpei -1
#define Max(A,B) (((A)>(B))? A:B)
int GetMax(int* Array){
    int max= *Array;
    while(1){
        if(*Array == Banpei) return max;
        max=Max(max,*Array);
        Array++;
    }
}

int main(){
    int Ary[]={8,3,8,8,6,1,Banpei};
    int result=0;

    result = GetMax(Ary);

    printf("Max = %d\n", result);
    return 0;
}
449デフォルトの名無しさん:2009/05/29(金) 17:20:57
>>446
配列の中身に拘らないのであれば、
「0から100までの乱数を生成する。0が生成されたら、生成を打ちきる。」
というのでどうかね。
番兵は0となる。
450デフォルトの名無しさん:2009/05/29(金) 18:48:38
>435だが、
番兵は何かがわからないとは、番兵をどのように定義していくかってことね。
番兵自体知ってるよん。
intなら、INT_MAXとかINT_MINにでもしておけばいいかしら。
正数しか扱わないのなら、負数(-1)にでもするとかとか。
非ゼロの整数しか扱わないのなら、ゼロ(0)にするとかとか。
使われない値にしないといけないけどよん、
大抵番兵を使うときは、ポインタの配列で最後をNULLとかとか。
envpは、これだよもん。exec*()でも使われてるよん。
文字列終端のNUL('\0')くらいのモノだよもん。
451残問題:2009/05/29(金) 19:08:14
>>385>>384 テイラー展開 5月30日
>>381(9282) 複素数のクラス(>>243) 5月30日
期限が過ぎてるもの
>>254(9244) String.insert(i,t) 5月26日
>>016(9214)>>029>>033 CRUD操作のデータベース 5月23日
>>110(9224)>>166 (WinMain)キー入力 5月25日
>>004(9209) ArithmeticPromotionクラス 5月21日
452デフォルトの名無しさん:2009/05/29(金) 19:11:20
>>450
珍しいところで 文字列ペアを指し示す都合 \0\0 で終端 ってのが WinAPI にはあるな
"hoge\0pair\0" って渡す変則番兵
453デフォルトの名無しさん:2009/05/29(金) 19:39:39
[1] 授業単元:情報処理T
[2] 問題文(含コード&リンク):@for文を用いてある元金を預けた時の元利合計を算出するプログラムを作成し、
プログラムを作成しなさい。入力するデータは、元金、金利、年数である。(結果に「元金は〜」というように表示させること。)
A9個ずつ改行する以下のような九九の表のプログラムを作成しなさい。
1*1=1 1*2=2・・・・・1*9=9
2*1=2 ・・・・
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語:C++
[4] 期限:2009年05月31日まで
[5] その他の制限:特になし
よろしくお願いします。
454デフォルトの名無しさん:2009/05/29(金) 19:52:10
>>451
>>254には類似が>>373
回答が>>376
455デフォルトの名無しさん:2009/05/29(金) 19:54:12
授業単元:C言語演習
問題文:プログラムを実行すると「何人ぶんのデータですか?」と表示されるので人数を入力、すると「一人目の国語の点数は?」
と表示されるので一人目の国語の点数を入力
次に「一人目の英語の点数は?」と表示されるので一人目の英語の点数を入力、算数も同様に入力
この手順が人数分繰り返され、全員の国語、英語、算数
の得点を入力し終えると各科目の最高得点とその得点をとった学生が何人目だったか、また合格者の人数と各科目合格者平均点を表示する
ただし三科目の内二科目以上で80点以上のときに合格とする
また人数が0のときは「ただしい人数を入力してください」と表示する
456デフォルトの名無しさん:2009/05/29(金) 19:59:40
続き
環境
OS:windowsvista
コンパイラ名 VisualC++2008
言語 C++
期限:2009 6月 6日
その他の制限
プログラムの流れの繰り返しまで習いました
配列はならっていません
よろしくお願いします
457デフォルトの名無しさん:2009/05/29(金) 23:13:15
1] 授業単元:C言語
[2](1) 学生の体重データweight(小数第1位)を一件ずつ入力し、人数n
と体重の合計kei,heikin,max,minを求め。空欄をうめよ、ただし人数は不明としデータが
なくなった場合0を入力し終了する。また1件目のデータをmax,minの初期値とする

int main(void)
{
float weight, kei=(@), n=0, heikin, max, min;
while(A){
printf("体重データを入力して下さい:");
scanf("%f",&weight);
if(B)break;
 (C);
n++;
if(n==1){
D;
E;
}
if(F)
max=weight;
if(min>weight)
G;
}
H;
printf("合計:%6.1f\n人数:%6.0f\n平均:%6.1f\n最大:%6.1f\n最小:%6.1f\n",
kei,n,heikin,max,min);
return 0;
}
458デフォルトの名無しさん:2009/05/29(金) 23:15:50
続き
(2)正の整数nを入力し1〜nの階乗kaijo表示するプログラムを空欄をうめて完成させよ。
int main(void)
{
int kaijo=@, i=1, n;
printf("n!を求めます.nを入力して下さい:");
scanf("%d", &n);
while(A)
B;
printf("%d! = %d\n" ,i, kaijo);
C;
 }
return 0;
}
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: turbo c 5.01
 [3.3] 言語: c++
[4] 期限:今週の日曜日まで
[5] その他の制
459デフォルトの名無しさん:2009/05/29(金) 23:33:02
460デフォルトの名無しさん:2009/05/30(土) 00:01:10
>>495
ありがとうございます!
461デフォルトの名無しさん:2009/05/30(土) 00:05:26
[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク)

木の幅優先探索について考える。
以下の?に何かをいれればプログラムは完成する。
なお、以下のコードはあくまでも参考として使用してよい
(?以外の場所を書き換えて動作させてもよい)

ただし、キューはリングバッファにしなければならない。

#include <stdio.h>
#include <stdlib.h>
#define QUEUE ?

typedef struct{
int child_left;
int child_right;
} NODE;

int left = ? /* RING */
int right = ? /* RING */

void enqueue (int queue[], int d){
queue[right] = d;
right++;

if(?){
printf("Over flow: Queue is full\n");
exit(1);
}
?
}
462デフォルトの名無しさん:2009/05/30(土) 00:06:39
続き
int dequeue(int queue[]){
int x;
if(?){
printf("Underflow: Queue is empty\n");
exit(1);
}
else ?
}
int main(){
int queue[QUEUE]; /*キュー*/
int visit; /* 探索対象ノードnumber */
NODE node[] = { {1,3}, {2,4}, {-1,-1}, {7,5}, {8,10}, {6,9},
{-1,-1}, {-1,-1}, {-1,-1}, {-1,-1}, {-1,-1} };
visit = 0;
enqueue(queue, visit);
while(?){
visit = dequeue(queue);
printf("%d -> ", visit);
if( ? ) /*右の子をキューへ */
if( ? ) /* 左の子をキューへ */
}
printf ("END\n");
return 0;
}
[3] 環境
Linux、gcc、言語はC
[4] 期限: 2009/06/01(月)
おねがいします
463デフォルトの名無しさん:2009/05/30(土) 00:12:12
すいません>>459でした!
464デフォルトの名無しさん:2009/05/30(土) 02:51:37
465デフォルトの名無しさん:2009/05/30(土) 09:21:21
>>453
(1) http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9302.txt
(2)
#include <iostream>
#include <iomanip>

int main(){
  using namespace std;

  for(int i = 1; i <= 9; ++i){
    for(int j = 1; j <= 9; ++j){
      if( j != 1){
        cout <<" ";
      }
      cout <<i <<"*" <<j <<"=" <<setw(2) <<i*j;
    }
    cout <<endl;
  }
  return 0;
}
466デフォルトの名無しさん:2009/05/30(土) 11:25:11
>>433
ありがとうございます!
467デフォルトの名無しさん:2009/05/30(土) 12:24:47
>>457, >>458
(1)
@0
A1
Bweight==0
Ckei+=weight
Dmax=weight
Emin=weight
Fmax<weight
Gmin=weight
Hheikin=kei/n
(2)
@1
Ai<=n
Bkaijo*=i
Ci++
(2)while(A)の行末に、"{"がもれてない?
468#:2009/05/30(土) 13:01:22
>>464
ありがとうございました。
469デフォルトの名無しさん:2009/05/30(土) 13:40:05
>>465
ありがとうございます。
470デフォルトの名無しさん:2009/05/30(土) 15:41:31
[1] アルゴリズムとデータ構造
[2] 以下の雛型、資料を参考にマージソートを行う関数テンプレートを作り、適当な main 関数でテストせよ。
template < typename Itr >
void merge_sort( Itr begin, Itr end )
{
typedef typename iterator_traits<Itr>::value_type VT;
int const cutoff = 1; // データ数が cutoff 以下の時は再帰呼出をやめる。
int n = end - begin; // これでデータ数がわかる。
if ( n <= cutoff ) {
...
}
else {
// 入力データ列を適当に2つに区切って、それぞれをソート
...
merge_sort( .... );
merge_sort( .... );
// 作業用にベクターを用意し、そこに2つのソートされた列をマージする。
vector<VT> x(n);
...
// 最後に x から入力データ領域にコピーする。
...
// vector x は「局所変数」なので、自動的に破棄される。
}
}
[3] Linux  gcc  C++
[4] 2009年6月1日
[5] insartion_sortを途中で呼び出す
よろしくおねがいします
471デフォルトの名無しさん:2009/05/30(土) 16:50:22
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
char x1,x2;としてこれをwhileで繰り返し、if文でx1==x2 or x1!=x2の判定を
しながら、文字列のランレングス符号化をせよ。出力はaaaであれば、a3とせよ。
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン: g++でバージョンはわかりません。
 [3.3] 言語: C++
[4] 期限:2009年6月1日
[5] その他の制限: 繰り返し文(for,while)、if文、変数、インクリメント、デクリメント
で書くよう制限されました。

お手数おかけしますが、よろしくお願いします。
472デフォルトの名無しさん:2009/05/30(土) 17:43:42
473デフォルトの名無しさん:2009/05/30(土) 18:06:26
474デフォルトの名無しさん:2009/05/30(土) 18:51:55
>>471 復号できない場合があるぞ
#include<stdio.h>

int main(void){
char x1=0, x2=0;
int x, count=0;

while((x=getchar())!=EOF){
x2=x1;
x1=x;
if(x1==x2){
count++;
}else{
if(count>1) printf("%d", count);
printf("%c", x1);
count=1;
}
}

return 0;
}
475474:2009/05/30(土) 18:53:49
>>471 >>474の修正
#include<stdio.h>

int main(void){
char x1=0, x2=0;
int x, count=0;

while((x=getchar())!=EOF){
x2=x1;
x1=x;
if(x1==x2){
count++;
}else{
if(count>1) printf("%d", count);
printf("%c", x1);
count=1;
}
}
if(count>1) printf("%d", count); // >>474 にこの行を追加した

return 0;
}
476デフォルトの名無しさん:2009/05/30(土) 19:02:15
>>474
ありがとございます。
複合の件は
一応、問題文にあったんで出題者の間違いだと思います。
すいません。
477デフォルトの名無しさん:2009/05/31(日) 00:06:07
[1] 授業単元:画像情報処理
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9306.txt
      http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9307.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:?
 [3.3] 言語:C++
[4] 期限:6月3日まで

ほぼプログラム初心者です…
画像処理に詳しい方、おねがい致します。
478デフォルトの名無しさん:2009/05/31(日) 00:10:57
[1] 授業単元 アルゴリズムとデータ構造:
[2] 問題文(含コード&リンク)
ノードの中身を表示しながらトラバースする関数
void preorder(NodePointer node);
void inorder(NodePointer node);
void postorder(NodePointer node);
を再帰を使って書きなさい 。以下のプログラムの関数部分を作れ。
実行例:
% ./a.out
preorder: + 1 * 2 3
inorder: 1 + 2 * 3
postorder: 1 2 3 * +

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

struct node {
struct node *right;
char key;
struct node *left;
};
typedef struct node * NodePointer;

void treeinitialize(void);
NodePointer makenode(char c);
void preorder(NodePointer node);
void inorder(NodePointer node);
void postorder(NodePointer node);

NodePointer head, tail;
479デフォルトの名無しさん:2009/05/31(日) 00:13:18
つづき
int main(){
treeinitialize();

/* テスト用の木を作成 */
head->right=makenode('+');
head->right->left=makenode('1');
head->right->right=makenode('*');
head->right->right->left=makenode('2');
head->right->right->right=makenode('3');


/* トラバース */
printf("preorder: ");
preorder(head->right);
printf("\n");

printf("inorder: ");
inorder(head->right);
printf("\n");

printf("postorder: ");
postorder(head->right);
printf("\n");

return 0;
}
480デフォルトの名無しさん:2009/05/31(日) 00:14:55
つづき
void treeinitialize(void){
head=makenode(-1);
tail=makenode(-1);
head->right=tail;
head->left=tail;
}
/*
* ノードを作成し、そのノードへのポインタを返す。
*/
NodePointer makenode(char c){
NodePointer x;

x=malloc(sizeof(struct node));
x->key=c;
x->right=tail;
x->left=tail;

return x;
}
481デフォルトの名無しさん:2009/05/31(日) 00:15:51
void preorder(NodePointer node){
}

void inorder(NodePointer node){
}

void postorder(NodePointer node){
}

[3] 環境
 [3.1] Solaris:
 [3.2] gcc バージョンはわかりません
 [3.3] C
[4] 期限:2009年6月3日9:00まで

おねがいします
482デフォルトの名無しさん:2009/05/31(日) 00:54:55
>>477
ソースでCommonImageIO.hていうのをインクルードしてるけど、
提供されているなら、よろしく
483デフォルトの名無しさん:2009/05/31(日) 07:02:10
>>465
全くの初心者で申し訳ないのですが、回答いただいたものをビルドしてもエラーとなってしまいます。
何が問題なのかご教授願えないでしょうか?
484デフォルトの名無しさん:2009/05/31(日) 09:22:18
>>483
拡張子を".cpp"にしる
485デフォルトの名無しさん:2009/05/31(日) 09:37:58
>>484
"cpp"や"c"にしてみましたがやはりエラーが出ます。
scanfの宣言を確認してください、構文エラーとでているのですがどうすればいいのでしょうか?
よろしければご教授お願いいたします。
コンパイラはvisual C++ 2008 Express Editionというものを使用しました。
486デフォルトの名無しさん:2009/05/31(日) 09:44:46
>>485

本当に>>465か?
(1)も(2)もscanf()なんて使ってないわけだが
487デフォルトの名無しさん:2009/05/31(日) 09:51:39
>>485
(2)の所でエラーになるならば、全角スペースでエラー出してると思われ
全角スペースを全部半角スペースに置き換えてビルドしてみてください
488デフォルトの名無しさん:2009/05/31(日) 10:02:10
>>487
1も2も置換してみましたが、今度は全て
構文エラー : '{' が ':' の前にありません
といった内容になってしまいます。
今回はscanfとは出ませんでした。
489デフォルトの名無しさん:2009/05/31(日) 10:05:58
>>488
つ 修正したヤツ 
拡張子cpp にしてコンパイルしれ

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
for(int i = 1; i <= 9; ++i){
for(int j = 1; j <= 9; ++j){
if( j != 1){
cout <<" ";
}
cout <<i <<"*" <<j <<"=" <<setw(2) <<i*j;
}
cout <<endl;
}
return 0;
}
490デフォルトの名無しさん:2009/05/31(日) 10:36:06
>>489
何とか無事にできました。(1)の方はもうよくわからないのでこのまま提出しようと思います。
お手間を取らせてしまい申し訳ありませんでした。ありがとうございました。
491デフォルトの名無しさん:2009/05/31(日) 15:02:51
[1] 授業単元:情報システム
[2] 問題文:
以下の実行結果を元に、float型変数 f に与えた実数の、
実際に格納されているビット列を表示するプログラムを作成してください。
実行結果:
Size of Float : 4 byte
Size of Int : 4 byte
f=0.500000000000000
00111111000000000000000000000000
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C/C++
[4] 期限: 2009年06月01日まで
お願いします。
492465:2009/05/31(日) 15:30:28
>>489 フォローさんくー。

(1)はWin2000のVC6のソースをそのまま上げたんだけどなんだろ?
489で直ったってことは、「using namespace std;」をmainの外に出したらいいのかな?
試そうと思ったら、VC2008は2000じゃ無理と言われてインストールできなかったw
493デフォルトの名無しさん:2009/05/31(日) 15:35:02
>>491
#include <stdio.h>

int main()
{
float a = 0;
int i, *b = (int*)&a;

scanf("%f", &a);
for (i = sizeof(a) * 8 - 1; i >= 0; --i) {
printf("%d", *b & (1 << i) ? 1 : 0);
}
printf("\n");

return 0;
}

aに何かを入れとかんと浮動小数点を扱うライブラリがリンクされないらしい。
494デフォルトの名無しさん:2009/05/31(日) 17:18:00
>>493
早い対応ありがとうございます
495デフォルトの名無しさん:2009/05/31(日) 17:45:56
[1] 授業単元:C++演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9308.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: visual C++
 [3.3] 言語: C++
[4] 期限: 火曜日まで

よろしくお願いします
496デフォルトの名無しさん:2009/05/31(日) 17:57:02
>495
ファイル名とキーワードはコマンドライン引数にしたほうがいいの?
497デフォルトの名無しさん:2009/05/31(日) 19:19:13
入力し、〜出力せよ
だから、cinで良いんじゃないの?
498デフォルトの名無しさん:2009/05/31(日) 19:24:41
>>495
>>496-497 以前にこれ、行番号っていうからにはテキストファイルなのか?
もしそうなら文字コードは?
499デフォルトの名無しさん:2009/05/31(日) 19:40:27
行番号が表示可能なファイルだと、テキストファイルなんだろうな。
Windows標準入力で入力可能な文字コードを想定すれば、足りるんじゃ。
500デフォルトの名無しさん:2009/05/31(日) 19:56:38
[1] 授業単元:計算機システム
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9305.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio
 [3.3] 言語:C
[4] 期限: 5月31日
501デフォルトの名無しさん:2009/05/31(日) 20:01:35
502デフォルトの名無しさん:2009/05/31(日) 20:17:09
>>498
文字コードはUnicodeでお願いします
503162:2009/05/31(日) 20:20:32
[1] 授業単元:情報の基礎
[2] 問題文(含コード&リンク): 林檎が10個以下だと100円。
11個〜100個まで90円。100個以上だと70円。で、買いたい個数を入力して計算せよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) XP
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C言語
[4] 期限: 6月2日まで
[5] その他:ここまで出来ました。
#include <stdio.h>
int main()
{
int nedan;

printf("林檎を何個買いますか?\n");
scanf("%d", &nedan);
if(nedan<10)nedan=100*nedan;
{
printf("林檎の値段は%d円です。\n");
} if (11<nedan<100)nedan=1000+90*(nedan-10);{
printf("林檎の値段は%d円です。\n");
} if(101<nedan)nedan=9100+70*(nedan-100); {
printf("林檎の値段は%d円です。\n");
}
}

条件の変え方が今一分かりませんでした。
よろしくお願いします。
504デフォルトの名無しさん:2009/05/31(日) 20:26:58
>>503
10個で100円=1000円
11個で90円=990円
こうなって良いかい?
505504:2009/05/31(日) 20:28:25
あ、違うようだな。すまん。
506504:2009/05/31(日) 20:48:22
>>503
#include <stdio.h>
int main()
{
int kosuu,nedan;
printf("林檎を何個買いますか?\n"); scanf("%d", &kosuu);
if(kosuu<=10) {
nedan=100*kosuu; printf("林檎の値段は%d円です。\n",nedan);
} else if (10<kosuu && kosuu<=100) {
nedan=1000+90*(kosuu-10); printf("林檎の値段は%d円です。\n",nedan);
} else if(100<kosuu) {
nedan=9100+70*(kosuu-100); printf("林檎の値段は%d円です。\n",nedan);
}
return 0;
}

何個買うかの個数と、値段は別の変数にした方が良い。
「11個〜100個まで」の様に範囲を指定する時の比較式に注意
セミコロン";"が変なところにあった。
507503:2009/05/31(日) 20:54:49
>>506
ありがとうございました。
変数は2つでも大丈夫なんですね。勉強になります。
508デフォルトの名無しさん:2009/05/31(日) 23:05:40
509デフォルトの名無しさん:2009/05/31(日) 23:29:04
510489:2009/05/31(日) 23:33:33
>>492
VC2008だと「using 〜」をmainの外に置かないとエラー出るみたいだな
511デフォルトの名無しさん:2009/05/31(日) 23:36:04
1000Mバイト、一行1000バイト以下のテキストファイルをソートするプログラム。
メモリ使用量は30Mバイトまで。 高速な方がよい。
512デフォルトの名無しさん:2009/05/31(日) 23:37:11
すみません、こんな問題でレスするのも気が引けたんですが、最近始めたばかりでわからないんです・・・誰か教えて下さい

以下のプログラムの◆の部分を埋めて完成させてください
掛け算の九九の偶数の段を表示するプログラム
#include<stdio.h>
int main(void)
{
int i, j;
for(i = 2; ◆; i ◆ 2)
{
for(j = 1; j <= 9; ◆)
printf("%d*%d=%2d ", ◆, ◆, i * j);
putchar('\n');
}
return 0;
}


足し算、引き算、掛け算、割り算、余りの計算、表示するプログラム
#include<stdio.h>

int main(void)
{
printf("100 + 200 = %3d\n", ◆);
printf(" 35 - 24 = %3d\n", ◆);
printf(" 10 * 7 = %3d\n", ◆);
printf(" 72 / 8 = %3d\n", ◆);
printf("127 %% 17 = %3d\n", ◆);

return 0;
}
513デフォルトの名無しさん:2009/05/31(日) 23:47:51
掛け算の九九の偶数の段を表示するプログラム
#include<stdio.h>
int main(void)
{
int i, j;
for(i = 2; i<=9; i += 2)
{
for(j = 1; j <= 9; j++)
printf("%d*%d=%2d ", i, j, i * j);
putchar('\n');
}
return 0;
}

足し算、引き算、掛け算、割り算、余りの計算、表示するプログラム
#include<stdio.h>

int main(void)
{
printf("100 + 200 = %3d\n", 100+200);
printf(" 35 - 24 = %3d\n", 35-24);
printf(" 10 * 7 = %3d\n", 10*7);
printf(" 72 / 8 = %3d\n", 72/8);
printf("127 %% 17 = %3d\n", 127%17);

return 0;
}
514デフォルトの名無しさん:2009/05/31(日) 23:49:12
>>513 → >>512
515デフォルトの名無しさん:2009/06/01(月) 00:11:07
>>514
ありがとうございます!本当に助かりました:;
あとすみません、2つ目の問題間違いました・・・
確認せずに書き込んじゃってすみません


変数に代入したデータを計算、表示するプログラム
#include<stdio.h>

int main(void)
{
int a = 10, b = 20, ◆;

kotae = ◆ + ◆;

printf("%d + ◆ = %d\n", ◆, b, kotae);

return 0;
}

ちゃんと勉強しないと・・・
516デフォルトの名無しさん:2009/06/01(月) 00:17:46
>>511
面白そうだね。ああっ、興奮しちゃうね、これは。

もう少し詳しく聞かせてもらえないだろうか。
そのテキストファイルが、どのようなモノなのか。ファイルをheadした結果を貼ってもらってもいい。
比較関数は用意されているのか。それともこちらが用意するのか。
用意する場合は、どのような条件で大小あるいは等しいを決めるのか。
サンプルとして、1000MBのテキストファイルを提供していただけるのか。
言語は、C言語(ANSI X3.159 1989, ISO/IEC 9899 : 1999 (E)のいずれか準拠)が良いのか。C++が良いのか。
私は、C言語でないとやる気はしないけどね。
517デフォルトの名無しさん:2009/06/01(月) 00:42:26
たとえば X・・・・、Y・・・・ (X,、Yは1バイト)ならば、(unsigned char)X < (unsigned char)Y のときX・・・の方が先になります。
途中まで一致する場合。 たとえば XとXYZならば、X00とXYZの比較をします。足らない桁は数字の0で埋めます。
言語はCでもC++でも可です。
テキストはうpは無理なので改行(\n)区切りのどんなテキストでも読み込め速いほど良いです。
518デフォルトの名無しさん:2009/06/01(月) 01:05:53
>>517
X一文字の行とX000の行は区別が必要ですよね。
この辺はどうしますか?
strcmpに準じた比較にしますか?
519デフォルトの名無しさん:2009/06/01(月) 01:17:57
>>518
つ「足らない桁は数字の0で埋めます。 」
520デフォルトの名無しさん:2009/06/01(月) 01:38:33
やるなら再帰版のクイックソートで作りたい気がするが
スタックがあふれそうだ。
521デフォルトの名無しさん:2009/06/01(月) 01:39:07
0はバイナリの0です。最も小さい値です。テキストファイル中には出現しない物とします。
522デフォルトの名無しさん:2009/06/01(月) 05:19:46
【質問テンプレ】
[1] 授業単元:C演習
[2] 問題文(含コード&リンク):
(1) 適当な初期値を代入した整数型の5行5列の行列 A に対して、その転置行列
(行と列を入れ替えたもの)を B とする時,AB を求めよ。
但し、A の初期値を変えた場合も利用できる汎用的なプログラムであること。
(転置行列の各要素・ABの結果の値を直接代入するのはダメという意味)

(2) 大きさ 5 の文字列配列を定義して、適当な文字列5つを代入し、代入した全ての
文字を1文字ずつ表示せよ。全ての文字とは、例えば、"Sunday" と "Monday" を代入した時は、
'S', 'u', 'n', 'd', 'a', 'y', 'M', 'o', 'n', 'd', 'a', 'y' をさす。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 6/1 17:00
[5] その他の制限: 配列、ポインタのところでのレポートでした。多分配列とかポインタを使うんだと思います。
基本的な事は一通り習いました、特に制限は無いです。よろしくお願いします
523デフォルトの名無しさん:2009/06/01(月) 06:29:25
>>515
変数に代入したデータを計算、表示するプログラム
#include<stdio.h>

int main(void)
{
int a = 10, b = 20, kotae;

kotae = a + b;

printf("%d + %d = %d\n", a, b, kotae);

return 0;
}
524デフォルトの名無しさん:2009/06/01(月) 07:44:11
麻呂の校門、封鎖できません!クソースが漏れそうです!
525デフォルトの名無しさん:2009/06/01(月) 09:35:28
526デフォルトの名無しさん:2009/06/01(月) 09:45:21
>>522
(2)
#include <stdio.h>
#include <string.h>

#define N 5
#define MAXLEN 128

int main(void)
{
char str[N][MAXLEN];
int i, j;

puts("文字列を5つ入力して下さい");
for (i = 0; i < N; i++) {
fgets(str[i], MAXLEN, stdin);
str[i][strlen(str[i]) - 1] = '\0'; /* 改行文字を取る */
}

for (i = 0; i < N; i++) {
for (j = 0; j < strlen(str[i]) - 1; j++)
printf("'%c', ", str[i][j]);
printf("'%c'\n", str[i][j]);
}

return 0;
}
527デフォルトの名無しさん:2009/06/01(月) 12:56:42
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):正の整数を入力させその整数以下の偶数を昇順で表示するプログラム
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C言語
[4] 期限: 6月1日24時まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
#include <stdio.h>

int main(void)
{
int i,no;
printf("正の整数を入力してください:");
scanf("%d",&no);
i=0;
while(i<=no);
printf("%d",i++);
putchar('\n');
return 0;
}
偶数ではなくすべての正の整数のところまではやったのですが
偶数限定にする方法がわかりません。
528デフォルトの名無しさん:2009/06/01(月) 13:02:51
>>527
奇数だったら printf しない
 もしくは
偶数だったら printf する
をループの中に埋め込むだけだが…

>>527 while 直後にセミコロンいて 正常に動作しないコードだぞw

極力元コードを保存した書き方だと
while (i<=no) {
 if ((i%2) == 0) printf("%d", i);
 i++;
}
こんなもん

# なお 0は偶数に含まれる としている
529デフォルトの名無しさん:2009/06/01(月) 13:18:54
>>528さんありがとうございます!
なぜかwhile文から書き込みがあったように変えたのですが
i++の列で不正な文字’ ’と表示されてしまいます;;
530デフォルトの名無しさん:2009/06/01(月) 13:23:00
そのまんまコピペした?
全角スペース使ってるから 半角スペースとかTABとかにおきかえれ
531デフォルトの名無しさん:2009/06/01(月) 13:32:08
置換ね^^
532デフォルトの名無しさん :2009/06/01(月) 13:36:03
>>527
#include <stdio.h>
int main(void)
{
int i,no;
printf("正の整数を入力してください:");
scanf("%d",&no);
for(i=1;i<=no;i++){
if(!(i%2))
printf("%d \n",i);
}
return 0;
}
533デフォルトの名無しさん:2009/06/01(月) 13:38:54
10 'main
20 dim i,no
30 input "正の整数を入力して下さい",no
40 for i=1 to no
50 if( i mod 2<>0)then print i
60 next i
534デフォルトの名無しさん:2009/06/01(月) 13:40:34
>>528
すごく単純なことでした
それなのに丁寧なレスありがとうございした!
>>532さんもありがとうございました!
このスレは連続で他の課題も聞いていいんですかね?
535デフォルトの名無しさん :2009/06/01(月) 13:46:46
良いんじゃね
536デフォルトの名無しさん:2009/06/01(月) 13:57:54
[1] 授業単元:C言語入門
[2] 問題文(含コード&リンク):整数値を入力して,その整数回「私の名前は○○です(1 回目) として,改行するプログラム.1回
目の1 は,2回目,3 回目と増やし,名前の部分は自分の名前にすること
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語: C言語
[4] 期限: 6月1日24時まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
#include <stdio.h>

int main(void)
{
int no;
printf("正の整数を入力してください:");
scanf("%d",&no);
while(no-->0)
putchar('*');
putchar('\n');
return (0);
}
※印を整数文表示させるプログラムまではできましたが
文字列をいれると「文字列定数は 1 文字か 2 文字でなければならない」とでてしまうことと
改行ができません;;
537デフォルトの名無しさん:2009/06/01(月) 14:29:42
[1] 授業単元:数理物理
[2] 問題文(含コード&リンク):http://www.mns.kyutech.ac.jp/~kamada/suuributuri/sub6.html
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:やっぱりよく分からん
 [3.3] 言語:どちらでも可
[4] 期限:6/5
[5] その他の制限:特になし

オイラー法と台形法のプログラムの違いも教えてもらうと助かります。
538デフォルトの名無しさん:2009/06/01(月) 14:31:21
>>536
#include <stdio.h>

int main(void)
{
int no,count=0;
printf("正の整数を入力してください:");
scanf("%d",&no);
while(count++<no)
printf("私の名前は○○です(%d回目)\n",count);
return (0);
}
539デフォルトの名無しさん:2009/06/01(月) 14:47:17
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク): 一人のデータが
学番 名前 国語 数学 英語
であるとき、不特定多数のデータを入力して、
各教科ごとの平均値、各人の成績計、その平均値を表示する。
入力データもまとめて後で表示する。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:TurboC++
 [3.3] 言語: C++
[4] 期限: 2009年6月3日
[5] その他の制限:カウンターなるもの
540デフォルトの名無しさん:2009/06/01(月) 14:48:35
>>539の続きです。
#include<stdio.h>
#include<conio.h>

void main(void)
{ float x, s=0.0, aver;
int i, z, c=0;

for(i=0;i<100;i++)
{ z=scanf("%f",&x);
if(z==EOF)goto flag1;
s=s+x;
c=c+1;
}

flag1:

printf("データの個数は%d個",c);
printf("\nデータの合計は%f",s);
aver=s/(float)c; // この方法は一時的に型を変更する手法でキャストという
printf("\nデータの平均値は%f",aver);

getchar();
getchar();
}
このような形にして提出させるのが教授の意図のようです。
よろしくお願いします。
541デフォルトの名無しさん:2009/06/01(月) 17:00:54
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
課題は2問になります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9312.zip
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:6/3
[5] その他の制限:
お手数かけますが、宜しくお願いします。
542 ◆p3KE2pR6J6 :2009/06/01(月) 17:32:37
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):http://www.dotup.org/uploda/www.dotup.org85093.zip.html
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C
[4] 期限:2009/06/12
[5] その他の制限:ポインタ・構造体まで使用可
パスワードは「c」です,お手数をおかけしてすみません.
課題内容についてはダウンロードしたファイルを見てください.
課題は全3題で,自分なりに考えてはみたのですが(やったところまでのファイルも入ってます),結局何をすればいいのか分からずに全くダメでした.
かなり面倒な課題だと思うのですが,よろしければお願いします.
543デフォルトの名無しさん:2009/06/01(月) 18:20:21
>>541 no.1
#include <iostream>
using namespace std;
#define N_INPUT 5
int main()
{
int id;
int height;
int maxHeight = 0;
int maxHeightId = 0;
for(int i=0; i<N_INPUT; i++) {
cout << i+1 << "人目の学籍番号を入力:"; cin >> id;
cout << "身長を入力(cm):"; cin >> height;
if(maxHeight < height) {
maxHeight = height;
maxHeightId = id;
}
}
cout << endl;
cout << "一番背が高いのは" << maxHeightId << endl;
return 0;
}
544デフォルトの名無しさん:2009/06/01(月) 18:25:57
>>541 no.1 >>543 は問題をちゃんと読んでなかった。OTZ
でもこれじゃ配列意味ないね。
#include <iostream>
using namespace std;
#define N_INPUT 5
int main()
{
int data[N_INPUT][2];
int maxHeight = 0;
int maxHeightId = 0;
for(int i=0; i<N_INPUT; i++) {
cout << i+1 << "人目の学籍番号を入力:"; cin >> data[i][0];
cout << "身長を入力(cm):"; cin >> data[i][1];
if(maxHeight < data[i][1]) {
maxHeight = data[i][1];
maxHeightId = data[i][0];
}
}
cout << endl;
cout << "一番背が高いのは" << maxHeightId << endl;
return 0;
}
545デフォルトの名無しさん:2009/06/01(月) 19:00:44
>>541 no.2
#include <iostream>
#include <iomanip>
using namespace std;
#define N_INPUT 3
int main()
{
int data[N_INPUT][2];
float BMI[N_INPUT];
int i=0;
for(i=0; i<N_INPUT; i++) {
cout << i+1 << "人目の身長を入力(cm):"; cin >> data[i][0];
cout << "体重を入力(kg):"; cin >> data[i][1];
BMI[i] = ((float)data[i][1] * 10000) / (data[i][0] * data[i][0]);
}
cout << endl;
cout.width(6); cout << "番号";
cout.width(6); cout << "身長";
cout.width(6); cout << "体重";
cout.width(8); cout << "BMI" << endl;
cout.setf(ios::right, ios::adjustfield);
cout.setf(ios::showpoint);
for(i=0; i<N_INPUT; i++) {
cout.width(6); cout << i;
cout.width(6); cout << data[i][0];
cout.width(6); cout << data[i][1];
cout.width(8); cout << setprecision(4) << BMI[i] << endl;
}
return 0;
}
546541:2009/06/01(月) 20:21:56
>>544->>545
すみません。
どちらもなんですが、
2行目のusing namespaceという関数は習ってないのでもう少しシンプルになりませんでしょうか。
また、最初は#include<stdio.h>で始めていただけますでしょうか。
547デフォルトの名無しさん:2009/06/01(月) 20:30:18
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9314.txt
[3] 環境
 [3.1] OS: Windows XP

 [3.3] 言語: C言語
[4] 期限:6月2日午前10時まで
[5] for文、while文、do-while文まで習いました
C言語初心者で申し訳ないのですがよろしくお願いします
548デフォルトの名無しさん:2009/06/01(月) 20:47:11
[1] 授業単元:画像情報処理
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9306.txt
      http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9307.txt
      http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9315.txt
  ヘッダー:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9316.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:?
 [3.3] 言語:C++
[4] 期限:6月3日まで

>>477です。
ヘッダーがあったので追加でアップしました。
画像処理に詳しい方、どうかよろしくお願いしますm(_ _)m
549初者:2009/06/01(月) 20:49:20
よろしくお願いします。

[1]C++
[2]締切:6/3 13:30
[3]問題文
@2つの4行4列の行列が与えられたとき、
 その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。
 (※ヒント whileループは行列をキーボードから入力するためにも用いる)
A3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。
 (1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム
 (2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム
Bwhileループと複合代入演算子を用いて、等差数列 1+3+5+7+・・・・・・+9999を計算するプログラムを作成しなさい。
CBのプログラムを実行した結果はいくらになるか?
D型変換として、算術演算子のオペランドの一つがdoubleで、片方がintであれば、
 int型のオペランドはdouble型に変換されて、計算される。 下記は例である。
  int a;
float b;

a=(int)b
また、下記のようにすると、
int a=5,b=3;
float c,d;

c=a/b;
d=a/(float)b
 で値が異なる。 この値が異なることをプログラムを組むことによって確かめなさい。

Dに関して言うと問題文の意味すら理解不能なので、解説も頂けると幸いです。
550デフォルトの名無しさん:2009/06/01(月) 20:50:23
>>546
ありえないとは言わないが、本当にC++なのか?
551デフォルトの名無しさん:2009/06/01(月) 20:58:58
>>550
講義名をC++と銘打って入出力にstdio.hなんてよくあることだろ
駄目な理由があるのか?
>>541 no.1
#include <stdio.h>
#define N_INPUT 5
int main()
{
int data[N_INPUT][2];
int maxHeight = 0;
int maxHeightId = 0;
int i;
for(i=0; i<N_INPUT; i++) {
printf("%d人目の学籍番号を入力:", i+1);
scanf("%d", &data[i][0]);
printf("身長を入力(cm):");
scanf("%d", &data[i][1]);
if(maxHeight < data[i][1]) {
maxHeight = data[i][1];
maxHeightId = data[i][0];
}
}
printf("\n");
printf("一番背が高いのは%d\n", maxHeightId);
return 0;
}
552鳥取の砂人:2009/06/01(月) 21:03:58
【1】C++
【2】締切:6/10
【3】問題文↓

T:2つの4行4列の行列が与えられたとき、その積を計算するプログラムをforループを用いて作成せよ。
  (行列の成分はキーボードから入力するものとする)
U:n!とnCmを計算するプログラムをdo while文とデクリメント演算子を用いて作成せよ。
  (n!の変数n、nCmの変数n,mはキーボードから入力するものとする)

よろしくです。
553デフォルトの名無しさん:2009/06/01(月) 21:12:52
>>541 no.2
#include <stdio.h>
#define N_INPUT 3
int main()
{
int data[N_INPUT][2];
float BMI[N_INPUT];
int i=0;
for(i=0; i<N_INPUT; i++) {
printf("%d人目の身長を入力(cm):", i+1);
scanf("%d", &data[i][0]);
printf("体重を入力(kg):");
scanf("%d", &data[i][1]);
BMI[i] = ((float)data[i][1] * 10000) / (data[i][0] * data[i][0]);
}
printf("\n");
printf("番号");
printf(" 身長");
printf(" 体重");
printf(" BMI ");
printf("\n");
for(i=0; i<N_INPUT; i++) {
printf("%4d", i+1);
printf("%6d", data[i][0]);
printf("%6d", data[i][1]);
printf(" ");
printf("%.2f", BMI[i]);
printf("\n");
}
return 0;
}
554デフォルトの名無しさん:2009/06/01(月) 21:20:11
10 option base 0:N_INPUT=3
20 dim Data(N_INPUT,2),BMI(N_INPUT)
30 for i=0 to N_INPUT-1
40 print i+1;"人目の身長を入力(cm):";:input "";data(i,0)
50 print "体重を入力(kg):";:input "";data(i,1)
60 BMI(i)=(data(i,1)*10000)/(data(i,0)*data(i,0))
70 next
80 print
90 print "番号";:print "体重";:print("BMI")
100 for i=0 to N_INPUT-1
110 print using "#### ###### ######";i+1,data(i,0),data(i,1),BMI(i)
120 next
555デフォルトの名無しさん:2009/06/01(月) 21:48:57
>>552 改行変だけど
#include <stdio.h>
#define LENGTH 4
void GetMatrix(int matrix[LENGTH][LENGTH]){ int x, y;
for (y=0; y<LENGTH; y++){
for (x=0; x<LENGTH; x++){
printf("x = %d, y = %d: ", x, y);
scanf("%d", &matrix[x][y]);
}
}
}
void PrintMatrix(int matrix[LENGTH][LENGTH]){ int x, y;
for (y=0; y<LENGTH; y++){
for (x=0; x<LENGTH; x++) printf("%d\t", matrix[x][y]);
printf("\n");
}
}
void MultiplyMatrix(int a[LENGTH][LENGTH], int b[LENGTH][LENGTH], int out[LENGTH][LENGTH]){ int x, y, z;
for (y=0; y<LENGTH; y++)
for (x=0; x<LENGTH; x++){
out[x][y] = 0;
for (z=0; z<LENGTH; z++) out[x][y] += a[z][y] * b[x][z];
}
}
void main(){ int matrixA[LENGTH][LENGTH] = {0};int matrixB[LENGTH][LENGTH] = {0};int matrixOut[LENGTH][LENGTH] = {0};
printf("行列Aを入力: \n"); GetMatrix(matrixA);
printf("\n行列Bを入力: \n"); GetMatrix(matrixB); printf("\n\n");
MultiplyMatrix(matrixA, matrixB, matrixOut);
PrintMatrix(matrixA); printf("*\n");
PrintMatrix(matrixB); printf("=\n");
PrintMatrix(matrixOut);
}
556デフォルトの名無しさん:2009/06/01(月) 21:55:32
>>552 階乗
#include <stdio.h>
void main()
{
int n, i, v;
printf("階乗: ");
scanf("%d", &n);
i=1;v=1;
while (i<=n){
v*=i;
i++;
}
printf("%d! = %d", n, v);
}
557デフォルトの名無しさん:2009/06/01(月) 22:02:38
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
無限ループを用い、1〜50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は10等分(例;1〜10に4個, 11〜20に3個, 21〜30・・・41〜50に0個)して表示せよ。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語:C
[4] 期限:6/4
[5] その他の制限:1〜50以外の数字が入力されたときの処理は考えなくていいそうです
558鳥取の砂人:2009/06/01(月) 22:13:02
>>555,556
printf,scanfを使わない方法でお願いしします。
cout,cinでお願いします。
559デフォルトの名無しさん:2009/06/01(月) 22:13:42
>>552 組み合わせ
#include <stdio.h>

int CalcPermutation(int n, int m)
{
int i, v;
v = 1;
i = n;
while (i>m) {
v *= i;
i--;
}
return v;
}

void main()
{
int n, m, c;
printf( "n: " );
scanf( "%d", &n );
printf( "m: " );
scanf( "%d", &m );

c = CalcPermutation(n, m) / CalcPermutation(n - m, 1);
printf("%dC%d = %d", n, m, c);


rewind(stdin);
getchar();
}
560デフォルトの名無しさん:2009/06/01(月) 22:15:51
>>558
記述方法に指定があるんなら始めから書いとけよ
561545:2009/06/01(月) 22:16:51
>>551
だめな理由はないが、先に書いておいてくれないと、
とても思いつかないな。
562デフォルトの名無しさん:2009/06/01(月) 22:24:51
情報の後だし禁止って大分前に周知したつもりだったが、人が変わって忘れられたのかなぁ。
と、思ったら>>1に書いてあるじゃない。

>>・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。

気をつけようね♪
563デフォルトの名無しさん:2009/06/01(月) 22:25:20
>>549
D
int同士の計算は整数なので小数点以下は切り捨てられる
5/3=1
10/3=3
計算のどちらか片一方がdoubleだと、doubleとしての計算になるから
5/3.0=1.6666666666666....
10/3.0=3.333333333333.....
上と比べて端数の分だけ値が違う
564デフォルトの名無しさん:2009/06/01(月) 22:42:51
565デフォルトの名無しさん:2009/06/01(月) 22:47:45
>>547 1
#include <stdio.h>
int main()
{
int i, n, max, sum;
printf("n: "); scanf("%d", &n);
printf("max: "); scanf("%d", &max);
sum = 0;
for(i=n;i<=max&&sum<=100;i+=n){
sum += i;
}
if(sum<=100) printf("sum=%d, less than 100\n", sum);
else printf("from %d to %d, sum=%d\n", n, i-n, sum);
return 0;
}
566デフォルトの名無しさん:2009/06/01(月) 22:55:10
>>547 2
#include <stdio.h>
int main()
{
int i, j, n;
printf("n: "); scanf("%d", &n);
for(i=1;i<=n;i++){ for(j=0;j<i;j++) putchar('*'); putchar('\n');}
return 0;
}
/* putchar('*');がだめならprintf("*")に替えても可 */
567デフォルトの名無しさん:2009/06/01(月) 23:18:30
[1] 授業単元:ソフトウェア
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9318.txt
[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C
[4] 期限: 6月3日まで

568567:2009/06/01(月) 23:19:34
よろしくお願いします。
569デフォルトの名無しさん:2009/06/02(火) 00:03:09
[1] 授業単元:ソフトウェア
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9319.txt
を用いて50コの数値を取り、30以上40未満または70以上80未満の数値の個数を求めるプログラムを作れ
[3] 環境
 [3.1] OS: Windows Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月4日まで
[5] その他の制限:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9319.txt
のファイル名はseiseki.txtでお願いします
570デフォルトの名無しさん:2009/06/02(火) 00:13:45
[1] 授業単元: C言語 応用演習
[2] 問題文(含コード&リンク):
仕様書
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9292.txt
ソースコード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9322.txt
[3] 環境
 [3.1] OS: Windows2000 SP4
 [3.2] コンパイラ名とバージョン: ビジュアルC++6.0
 [3.3] 言語: C言語
[4] 期限: 2009年6月一週目ぐらいまで
[5] その他の制限: File構造体を使用

どうも、
>>417において、質問させて頂いたものですが、
ご指摘をお受けした部位などを自分で修正したのですが、
わからなくなってしまいまして、
出来れば修正箇所のご指摘をして頂きたいと思います。
宜しくお願いします。
571デフォルトの名無しさん:2009/06/02(火) 00:17:25
>>567-568
久しぶりに作ったから間違ってるか検算してくれ。あと動作の保障はしない。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9323.zip
572デフォルトの名無しさん:2009/06/02(火) 00:23:27
>>571
ただ単位量を足したり引いたりするだけの時は、前置演算子を使う癖を付けた方がいいよ。
573デフォルトの名無しさん:2009/06/02(火) 00:30:18
最近入出力がprintfやscanfなのかcout、cinなのかを後出しするのが目立つ気がする
C++だと両方とも使えるから質問テンプレにどっちなのかを書かせたほうがよくないか?
574デフォルトの名無しさん:2009/06/02(火) 00:39:00
>>551,>>553
有難うございます!
この前習った形に限りなく近いです。助かりましたm(_ _)m
575123to:2009/06/02(火) 00:43:45
>>90
ありがとうございました
576デフォルトの名無しさん:2009/06/02(火) 00:47:22
>>573
いいと思う。cout、cinってなに?な人向けになるだろうから
習ったのは#include <stdio.h>か#include <iostream>か書かせるほうがいいかも
さすがに#include <iostream.h>を教えてるところはもうないよな?
577デフォルトの名無しさん:2009/06/02(火) 00:50:19
>>572
後置演算子になれてしまって修正が大変ですなぁ。
578デフォルトの名無しさん:2009/06/02(火) 00:56:28
>>569
こんな感じで。動作は保障しない。
#include <stdio.h>
#include <string.h>
int main(){
    char buf[1024];
    char *p=NULL;
    int Val[1024]={0,};
    int V=0;
    FILE *fp = fopen("seiseki.txt","rt");
    if(fp ==NULL){
        puts("can't open file");
        return -1;
    }
    while(fgets(buf,1024,fp) != NULL){
        p=strtok(buf," \n");
        while(p!= NULL){
            sscanf(p,"%d",&V);
            //printf("%d ",V);
            Val[V/10]++;
            p=strtok(NULL," \n");
        }
    }
    fclose(fp);
    printf("30以上40未満 => %d個\n",Val[3]);
    printf("70以上80未満 => %d個\n",Val[7]);

    return 0;
}
579デフォルトの名無しさん:2009/06/02(火) 00:59:40
>>564
#include<stdio.h>で始めてprintfやscanfを使用した形にしてはいただけないでしょうか?
後から制限を付け加える形になってしまい申し訳ありません。
よろしくお願いします。
580547:2009/06/02(火) 01:24:57
>>565
>>566
ありがとうございました!
とても助かります(-人-)
581デフォルトの名無しさん:2009/06/02(火) 01:28:45
>>579
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9324.txt

氏名のサイズ、10バイトでは小さすぎるようなら
8行目の name[MAX_DATA][10] の10を増やし、
18行目の、「名前 国語」の間を広げ、
21行目の%-10sを適時増やしてくださいね。
582デフォルトの名無しさん:2009/06/02(火) 01:33:05
[1] 授業単元: C++演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9325.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++6.0
 [3.3] 言語: C++言語
[4] 期限: できるだけはやく
[5] その他の制限:

よろしくお願いします。
583渋谷:2009/06/02(火) 01:54:56
[1]C++
[2]締切:6/3 13:30
[3]問題文
以下の問題はprintf scanfを用いらず、cin coutを使用しなさい
@2つの4行4列の行列が与えられたとき、
 その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。
 (※ヒント whileループは行列をキーボードから入力するためにも用いる)
A3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。
 (1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム
 (2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム
Bwhileループと複合代入演算子を用いて、等差数列 1+3+5+7+・・・・・・+9999を計算するプログラムを作成しなさい。
CBのプログラムを実行した結果はいくらになるか?
D型変換として、算術演算子のオペランドの一つがdoubleで、片方がintであれば、
 int型のオペランドはdouble型に変換されて、計算される。 下記は例である。
  int a;
float b;

a=(int)b
また、下記のようにすると、
int a=5,b=3;
float c,d;

c=a/b;
d=a/(float)b
 で値が異なる。 この値が異なることをプログラムを組むことによって確かめなさい。

よろしくお願いします。
584デフォルトの名無しさん:2009/06/02(火) 02:25:16
>>581
丁寧な説明までつけて下さって助かります。ありがとうございました。
585デフォルトの名無しさん:2009/06/02(火) 02:29:19
[1] 応用クラス
[3] 環境
 [3.1] OS: Windows XP
 [3.2] Borland C++ Compiler 5.5
 [3.3] Cのみ
[4] 2009年06月04日16:00まで
[5] 特になし

-----
[2] アルファベットの置換
char x[2][26] = {
"ETAOINSRHLDUCFMWYGPBVKXJQZ", // x
"LCQEBFVXGAMHSPUJWYORTDZINK" // f(x)
};

char a[] = { "(英文)"};

ランダムなアルファベットのデータ2つを使い、
全単射の変換をするのがプログラムの目的です。
(xの関係を用いてaを置換する。)

1対1の置換はうまくいくのですが、
うまく表全体を対応関係にすることが出来ません。
どうしたらうまく対応させて変換が出来ますか?

よろしくお願いします。
586デフォルトの名無しさん:2009/06/02(火) 02:32:10
ええ〜い、カレンダーの課題はまだでおじゃるか?
587デフォルトの名無しさん:2009/06/02(火) 02:40:14
>>582
メモリ負荷がすごいので用途に応じてカスタマイズしてください。あと動作の保障はしない。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9326.zip
588デフォルトの名無しさん:2009/06/02(火) 06:30:50
C++指定でstd::cin, std::coutを使わないという入出力制限は分かるが、
C++指定で #include <stdio.h> は普通に考えておかしくないか?
せめて #include <cstdio> だろ?
589デフォルトの名無しさん:2009/06/02(火) 07:25:45
>>585
#include <stdio.h>
#include <ctype.h>

void translate(unsigned char a[], const unsigned char from[26], const unsigned char to[26])
{
unsigned char map[256];
int i;

for(i=0;i<256;i++) map[i]=i;
for(i=0;i<26;i++) map[toupper(from[i])]=toupper(to[i]);
for(i=0;i<26;i++) map[tolower(from[i])]=tolower(to[i]);
for(i=0;a[i];i++) a[i]=map[a[i]];
}

int main(void)
{
char x[2][26] = {
"ETAOINSRHLDUCFMWYGPBVKXJQZ", // x
"LCQEBFVXGAMHSPUJWYORTDZINK" // f(x)
};
char a[]="This is a pen.";

puts(a);
translate(a, x[0], x[1]);
puts(a);
translate(a, x[1], x[0]);
puts(a);

return 0;
}
590デフォルトの名無しさん:2009/06/02(火) 08:04:06
>>588
普通に考えてそのように勝手に標準化することがオカシイ
591デフォルトの名無しさん:2009/06/02(火) 08:40:34
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9327.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++
[4] 期限: 本日23:30まで
[5] その他の制限: 特にありません。

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


592デフォルトの名無しさん:2009/06/02(火) 09:43:19
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):本学の成績のつけ方は60点未満が「F」,70点未満が「C」,80点未満が「B」,90点未満が「A」,100点以下が「S」となる.キーボードから入力した点数に応じて画面に成績を出力するプログラムを作成せよ.
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2009年6月5日9時まで
[5] その他の制限: if else文とelse if文の2パターンをお願いします。

よろしくお願いします。
593デフォルトの名無しさん:2009/06/02(火) 09:57:41
>>592 チェックしてないクソース
#include <stdio.h>
#include <stdio.h>
char seiseki( char *tokuten){
int n;
if(tokuten==NULL) exit(0);
n=atoi(tokuten);
if(n<60) return 'F';
if(n<70) return 'C';
if(n<80) return 'B';
if(n<90) return 'A';
return 'S';
}
int main(void){
char s[256];
for(;;) printf("%c",seiseki(fgets(s,256,stdin)));
return 0;
}
594デフォルトの名無しさん:2009/06/02(火) 10:01:47
10 goto 90
20 if len(s)=0 then end
30 n=val(tokuten)
40 if n<60 c='F' :return
50 if n<70 c='C' :return
60 if n<80 c='B' :return
70 if n<90 c='A':return
80 c='S':return
90 input "";s:gosub 20:print c;:goto 90
595デフォルトの名無しさん:2009/06/02(火) 10:04:07
if(n<60) return 'F';
else if(n<70) return 'C';
else if(n<80) return 'B';
else if(n<90) return 'A';
else
return 'S';
でも動くよ
596デフォルトの名無しさん:2009/06/02(火) 10:16:41
[1] 授業単元 C言語
[2]  テキストファイルの4行目の文字を別のファイルに表示
例 テキストファイルに
asdfg
werty
zxcvb
ertyu
ojh
とあったら別のファイルに
ertyuと表示
[3] 環境
 [3.1] Window 
 [3.2] VisualC++
 [3.3]C
[4] 期限: 6月3日
597デフォルトの名無しさん:2009/06/02(火) 10:30:38
>>596
ファイルに表示ってどう言う意味だ
598デフォルトの名無しさん:2009/06/02(火) 11:52:25
>>596
#include <stdio.h>
int main(void)
{
char buf[1024];
FILE *inf, *outf;
inf = fopen("file1.txt", "r");
fgets(buf, 1024, inf);
fgets(buf, 1024, inf);
fgets(buf, 1024, inf);
fgets(buf, 1024, inf);
outf = fopen("file2.txt", "w");
fprintf(outf, "%s", buf);
fclose(outf);
fclose(inf);
return 0;
}
599デフォルトの名無しさん:2009/06/02(火) 11:54:56
[1] 授業単元: c言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9328.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC
 [3.3] 言語: C++
[4] 期限: 6月2日19時まで
[5] その他の制限: ポインタの習いはじめです。

2問ありますがよろしくお願いします。
600デフォルトの名無しさん:2009/06/02(火) 12:24:10
>>599
課題1
void sort(int *a, int *b)
{
int tmp;
if(*a<*b){
tmp=*a;
*a=*b;
*b=tmp;
}
}
601デフォルトの名無しさん:2009/06/02(火) 12:25:52
>>599
課題2で mult と mlut ってあるけど打ち間違いかな
602デフォルトの名無しさん:2009/06/02(火) 12:57:56
>>601
すいません
打ち間違えましたmlutでお願いします。
>>600
どうもありがとうございます。
助かりました。
603デフォルトの名無しさん:2009/06/02(火) 13:01:16
>>599
課題2
#include <stdio.h>

int mult(int *,int *);
int main(void)
{
int a[4]={1,2,3,4}, b[4]={4,3,2,1};
int i,sum=0;
for(i=0; i<4; i++)
{
sum+=mult(&a[i],&b[i]);
}

printf("答え:%d",sum);

return 0;
}
int mult(int *x,int *y)
{
return *x * *y;
}
604デフォルトの名無しさん:2009/06/02(火) 13:32:35
[1] 授業単元: 数値解析プログラミング
[2] 問題文: 以下の時に最小2乗法によりm次の多項式近似を行うプログラムを作成せよ
      プログラムにより得られた近似式についてはデータと合わせてプロットした
      グラフも作成する
x=−2のときy=3.02
x=−1のときy=0.98
x=0のときy=1.22
x=1のときy=2.16
x=2のときy=2.61

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] よく分かりません
 [3.3] 言語: C
[4] 期限: 6月5日まで
[5] その他の制限: 特にありません

よろしくお願いします
605デフォルトの名無し:2009/06/02(火) 14:15:29
[1] 授業:C++ プログラミング
[2]問題文:
T.2つの4行4列の行列が与えられたとき、
 その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。
 (※ヒント whileループは行列をキーボードから入力するためにも用いる)
U.3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。
 (1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム
 (2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム
[3]環境
 OS:WindowsXP 言語:C++
[4]期限:6/4 01:00
[5]その他の制限:printf scanfではなくcout cinでお願いします。
606デフォルトのnanasisan:2009/06/02(火) 14:25:11

[1]授業:プログラミング
[2]問題文:

  T.whileループと複合代入演算子を用いて、
  等差数列 1+3+5+7+・・・・・・+9999を計算するプログラムを作成しなさい。
  
  U.Tのプログラムを実行した結果はいくらになるか?
[3]環境
  1.OS:WindowsXP
  2.
3.言語:C++
[4]期限:6/3 16:00
[5]その他の制限:printf scanfではなくcout cin

607糞ーすにつき注意:2009/06/02(火) 14:45:56
>>606
#include <iostream>
#include <iomanip>
int main(void){
int sum=0,i=0,n=0;
while( (n=2*(i++)+1)<=9999 ) sum+=n;
cout << sum <<endl;
return 0;
}
こんなの動かすまでもなく
1+3+5+7+...+9999
=
9999+9997+....+1

和の2倍=(1+9999)+(3+9997)+(5+9995)+...(9999+1)
=10000*5000/2=25000000
608糞ーすにつき注意:2009/06/02(火) 14:48:04
int sum=0,n=1;
while( (n=n+2)<=9999 ) sum+=n;
としなかったのは趣味の問題
609デフォルトの名無しさん:2009/06/02(火) 15:27:53
おまっ、糞って書いちゃ駄目だろ・・・あくまでもソースにクを付けて
そことなく言い回すから良いんじゃねーかYO!
610デフォルトのnanasisan:2009/06/02(火) 16:10:10
>>606
ありがとうございます。
もう一つお願いします。
[1]授業:プログラミング
[2]問題文:
型変換として、算術演算子のオペランドの一つがdoubleで、片方がintであれば、
 int型のオペランドはdouble型に変換されて、計算される。 下記は例である。
  int a;
float b;

a=(int)b
また、下記のようにすると、
int a=5,b=3;
float c,d;

c=a/b;
d=a/(float)b
 で値が異なる。 この値が異なることをプログラムを組むことによって確かめなさい。

[3]環境
  1.OS:WindowsXP
  2.
3.言語:C++
[4]期限:6/3 16:00
[5]その他の制限:printf scanfではなくcout cinで
611591:2009/06/02(火) 16:15:23
>>591です。 1は解決いたしました。
2〜4お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9327.txt
612デフォルトの名無しさん:2009/06/02(火) 16:33:40
>>610
こういうこと?
#include <iostream>
using namespace std;
int main()
{
int a = 5;
int b = 3;
float c, d;

c = a/b;
d = a/(float)b;

cout << "c is " << c << endl;
cout << "d is " << d << endl;
return 0;
}
613デフォルトの名無しさん:2009/06/02(火) 16:48:36
>>605
II-(1)
#include <iostream>
using namespace std;
int main()
{
int a,b;
cout << "input a=";
cin >> a;
cout << "input b=";
cin >> b;
cout << "小さいのは" << ((a < b) ? "a=" : "b=") << ((a < b) ? a : b) << "です" << endl;
return 0;
}

II-(2)
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cout << "input a=";
cin >> a;
cout << "input b=";
cin >> b;
int minValue = (a < b) ? a : b;
cout << "input c=";
cin >> c;
minValue = (c < minValue) ? c : minValue;
cout << "最小値は" << minValue << "です" << endl;
return 0;
}
614デフォルトのnanasisan:2009/06/02(火) 16:55:29
>>612
ありがとうございます。
もう一つだけお願いします。605に全く同じ問題がありますが。。。

[1]授業:プログラミング
[2]問題文:

  T.2つの4行4列の行列が与えられたとき、
    その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。
    (※ヒント whileループは行列をキーボードから入力するためにも用いる)  
  U.3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。
    (1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム
    (2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム
[3]環境
  1.OS:WindowsXP
  2.
3.言語:C++
[4]期限:6/3 16:00
[5]その他の制限:printf scanfではなくcout cinで
615デフォルトの名無しさん:2009/06/02(火) 17:00:54
>>614
行列の値の型は?
616デフォルトのnanasisan:2009/06/02(火) 17:17:58
>>615
型??分かりません。
課題のプリントには『配列と呼ばれる箱を用いると便利である。』と書いてありますが。。。
617デフォルトの名無しさん:2009/06/02(火) 17:35:31
>>614 I
#include <iostream>
using namespace std;
#define N 4
typedef int ELEMENT;
void matXmat(ELEMENT result[N][N], ELEMENT a[N][N],ELEMENT b[N][N]) {
int i = 0;
while(i<N) {
int j = 0;
while(j<N) {
int k = 0;
while(k<N) {
result[i][j] += a[i][k] * b[k][j];
++k;
}
++j;
}
++i;
}
}
void initMatrix(ELEMENT target[N][N]) {
int j = 0;
while(j<N) {
int i = 0;
while(i<N) {
target[i][j] = 0;
++i;
}
++j;
}
}
618デフォルトの名無しさん:2009/06/02(火) 17:36:40
>>614 I 続き
void createMatrix(ELEMENT target[N][N]) {
int j = 0;
while(j<N) {
int i = 0;
while(i<N) {
cout << "element(" << i << ", " << j << "):"; cin >> target[i][j];
++i;
}
++j;
}
}
void printMatrix(ELEMENT target[N][N]) {
int j = 0;
while(j<N) {
int i = 0;
while(i<N) {
cout.width(6);
cout << target[i][j];
++i;
}
cout << endl;
++j;
}
}
619デフォルトの名無しさん:2009/06/02(火) 17:38:09
>>614 I これで終わり。全部で3つ。
int main() {
ELEMENT result[N][N], matrixA[N][N], matrixB[N][N];
initMatrix(result);

cout << "行列Aの入力" << endl; createMatrix(matrixA);
cout << "行列Bの入力" << endl; createMatrix(matrixB);
matXmat(result, matrixA, matrixB);
printMatrix(result);
return 0;
}

計算結果については確認してないのでちゃんと確認して下さい。
型が分からないと言うことでしたので、typedefで書いておきました。
intじゃなくてdoubleなら、typedef のint をdoubleにすればOKです。
620デフォルトの名無しさん:2009/06/02(火) 18:34:25
621デフォルトのnanasisan:2009/06/02(火) 19:17:19
614です。
Uをお願いします。。。。。
622デフォルトの名無しさん:2009/06/02(火) 19:21:36
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9330.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: g++
 [3.3] 言語: C++
[4] 期限: 6月3日12:00
[5] その他の制限: 習ってるのは#include<iostream>
          入出力はcin cout です。
         よろしくおねがいします。
623デフォルトの名無しさん:2009/06/02(火) 19:34:42
>>614>>621
U(1)
#include <iostream>
using namespace std;
void main() {
int a, b, min;
cout << "a: ";
cin >> a;
cout << "b: ";
cin >> b;
min = a < b ? a : b;
cout << min;
}
U(2)
void main() {
int a, b, c, min;
cout << "a: ";
cin >> a;
cout << "b: ";
cin >> b;
cout << "c: ";
cin >> c;
min = a < b ? a : b;
min = min < c ? min : c;
cout << min;
}
624デフォルトの名無しさん:2009/06/02(火) 19:37:33
>>604を誰かお願いします
625デフォルトのnanasisan:2009/06/02(火) 20:44:33
>>623
ありがとうございました。
失礼します。
626デフォルトの名無しさん:2009/06/02(火) 20:52:01
>>621
605に同じ問題があるといいながら、その解答は見ないのか・・・
627585:2009/06/02(火) 22:42:22
>>589
回答ありがとうございます。

1回ずつ置換するのではなく、
対応mapを作った後に一気に置換するとは…。
非常に参考になりました。
628デフォルトの名無しさん:2009/06/02(火) 23:09:17
待っとれ〜麻呂が>>585に別解のクソースをしんぜよう
629デフォルトの名無しさん:2009/06/02(火) 23:13:34
ていうか、問題文のコレ
char x[2][26] = {
"ETAOINSRHLDUCFMWYGPBVKXJQZ", // x
"LCQEBFVXGAMHSPUJWYORTDZINK" // f(x)
};
 
終端の\0が溢れてないか?
630デフォルトの名無しさん:2009/06/02(火) 23:33:04
>>629
\0は入らないし、この使い方なら要らない。
631デフォルトの名無しさん:2009/06/02(火) 23:39:11
というのは嘘っぽくて、処理系依存だと思う
文字列リテラルを文字配列初期化に使えるというのは便法というかシンタックスシュガー。
調子に乗って使い回してると落とし穴がありそうなんで、
char x[]={'a','b','c,','d','¥0'};
とか一文字一文字丁寧に初期化したいもの。
(漢字仮名まじりの場合は苦労するが)
632デフォルトの名無しさん:2009/06/02(火) 23:46:27
>>631
この記述が文法上許されなくなると、
困るところが大量に出てくるな。
633デフォルトの名無しさん:2009/06/02(火) 23:53:36
>>632
JavaとかC#とか新し系の言語では使えると明記されており
心配は無さそうだし、Cでもこれが使えないコンパイラは先ず
普通は使われないだろなw(使えるとしても>>629のような
場合で終端の¥0を巧く解釈してくれるのかどうかは確証でき
ないが)
組み込み系とかのマイナーでConservativeなC処理系では
ひねくれた(が、本当はこっちがまともなのかも知れない)
解釈に固執してて困惑するかも知れないと思ってついつい
説教地味ちまったが気にしないでくれ
634デフォルトの名無しさん:2009/06/03(水) 00:07:54
どなたか>>548をお願いします・・・
635デフォルトの名無しさん:2009/06/03(水) 00:09:53
宿題がむずかしくて、、、

[1] 授業単元: プログラミング

[2] 問題文(含コード&リンク):コマンドライン上の括弧文字列を読み込んで、左括弧と右括弧が釣り合ってるか(整合しているか)どうかを判定し、釣り合っている場合には
対応する括弧対に番号付けして出力するようなプログラムを作成せよ。
例: 入力 [ [ ] [ [ ] ] ] [ ] 出力 [ 1[2 ]2 [3 [4 ]4 ]3 ]2 [5 ]5
ヒント:右括弧、左括弧それぞれに対して各スタック操作(プッシュ、ポップ)を対応させる。
文字入力にはgetchar()もしくはそれと同様な関数を呼び出す。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C
[4] 期限: 2009年6月3日AM6:00まで
[5] その他の制限:特になし

今スタックやリストを習っているので、それらを使うのかなと思います、、、
自分がそれらをよく理解できてないのもあるのですが、、、
お願いします!!!!
636デフォルトの名無しさん:2009/06/03(水) 00:10:16
char x[26]
memcpy(x, "ETAOINSRHLDUCFMWYGPBVKXJQZ", 26);

文法上正しいのはこうか?
637デフォルトの名無しさん:2009/06/03(水) 00:15:45
色々と実験して試してみるのが一番かと...
パイオニアな言語はいい意味でも悪い意味でも
後付けで色々と規則が修正されることが多く、規則と現実が合わない
ことのほうが多いだろうから...
638デフォルトの名無しさん:2009/06/03(水) 00:38:17
>>629 の指摘のとおり、これはアウトでは?
639デフォルトの名無しさん:2009/06/03(水) 00:45:27
>>635
stackて書いてあるからC++でやってみたけど
Cで自分でstack作れって課題なのかな
#include <iostream>
#include <stack>
#include <sstream>
using namespace std;
int main(int argc, char* argv[])
{
if (argc!=2) return 1;
ostringstream buf;
char* src = argv[1];
int count = 1;
stack<int> countStack;
while (*src!='\0') {
buf << *src;
if (*src=='[') {
buf << count;
countStack.push(count);
count++;
}
else if (countStack.size() > 0 && *src==']') {
buf << countStack.top();
countStack.pop();
}
src++;
}
cout << buf.str();
return 0;
}
640デフォルトの名無しさん:2009/06/03(水) 01:06:59
>>639
つ [3.3] 言語:C
641デフォルトの名無しさん:2009/06/03(水) 01:21:40
>>639
すいません、、、Cなんです、、、、
642デフォルトの名無しさん:2009/06/03(水) 01:52:52
>>628
麻呂の校門、封鎖されてクソースが漏れません!
643デフォルトの名無しさん:2009/06/03(水) 01:54:43
ということで麻呂の奇麗なソースを期待
644585:2009/06/03(水) 02:01:47
>>628-633 >>636-638 >>642-643
なんかいろいろと波紋をよんでおりますねw
あまりNULL文字まで深く考えていませんでしたが、
一応当環境では正常に動作しているようです。

mapを要素数26個まで小さく出来ましたが、
プログラムが小汚くなりました(´・ω・`)
スマートなプログラムを書くのは難しいなぁ。
645635:2009/06/03(水) 02:13:53
これもわからないのですが、、、

[1] 授業単元: プログラミング

[2] 問題文(含コード&リンク):1方向線上リストを使って、スタックを実現せよ。ただし、各記憶要素xは整数値をとるもの
とする。 要素xをプッシュするpush(int x)、ポップしてその値を返すpop()、スタックが
空かどうかを判断し真偽値を返すempty()、ならびに現在のスタック内容全体を表示するshow()を用意する。


[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語:C
[4] 期限: 2009年6月3日AM3:00まで
[5] その他の制限:特になし

646デフォルトの名無しさん:2009/06/03(水) 03:02:34
>>645
#include <stdio.h>

#define STACK_SIZE 100
int Stack[STACK_SIZE], StackDepth;

int push(int x){
if(StackDepth>=STACK_SIZE) return 0;
return (Stack[StackDepth++]=x,1);
}
int pop(void){
return (StackDepth<=0)?-1:Stack[--StackDepth];
}
void show(void){
int i;
for(i=StackDepth-1;i>=0;i--) printf(" %d", Stack[i]);
printf("\n");
}
int empty(void){
return (StackDepth<=0);
}
int main(void){
int i;
for(i=0;i<10 && push(i);i++);
show();
for(i=0;i<5 && !empty();i++) printf("pop()=%d\n", pop());
show();
while(!empty()) printf("pop()=%d\n", pop());
show();
return 0;
}
647635:2009/06/03(水) 03:09:47
>>646
ありがとうございます(T_T)
さっそくコンパイルしてみます!!
648デフォルトの名無しさん:2009/06/03(水) 03:39:41
>>643
体力の限界を感じて、麻呂は引退するでおじゃっ
649639:2009/06/03(水) 07:06:41
へいよ
#include "stdio.h"
#define STACK_SIZE 100
int posStack = 0;
int stack[STACK_SIZE];
void push(int val)
{
stack[posStack++] = val;
}
int pop()
{
return stack[--posStack];
}
int main()
{
char c; int count;
count = 1;
while (true) {
c = getchar();
if (c == '\0' || c == '\n') break;
printf( "%c", c );
if (c=='[') {
if (posStack >= STACK_SIZE) return 1;
printf( "%d", count );
push(count); count++;
}
else if (posStack > 0 && c==']') {
printf( "%d", pop() );
}
}
return 0;
}
650デフォルトの名無しさん:2009/06/03(水) 09:41:27
>>644
ヒント:
int f[];
for(i=0;x[0][i];i++)f[x[0][i]-'A']=i;
for(i=0;a[i];i++) a[i]=x[1][ f[a[i]] ];
がコアな処理
651デフォルトの名無しさん:2009/06/03(水) 11:03:32
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):キーボードより文字列aと文字列bを入力し、
比較する(どちらが辞書並びで先かを表示する)プログラムを作れ。ただし、strcmp関数を用いてはならない
上記の出力結果及び検討も書け。
[3] 環境
 [3.1] OS:WindowsVistaSP2
 [3.2] Visual stdio2008
 [3.3] 言語: C
[4] 期限:2009年6月3日17時まで
[5] その他の制限: できるだけ基本で
652デフォルトの名無しさん:2009/06/03(水) 11:25:15
>>651
#include <stdio.h>
int main(void) {
char a[1024], b[1024];
char *p, *q;
int f;
printf("a: "); scanf("%s", a);
printf("b: "); scanf("%s", b);
p = a; q = b; f = 0;
while(*p && *q) {
if (*p < *q) { f = -1; break; }
if (*p > *q) { f = 1; break; }
p++; q++;
}
if (!f) {
if (!*p && *q) f = -1;
else if (*p && !*q) f = 1;
}
if (f < 0) printf("aが先\n");
else if (f > 0) printf("bが先\n");
else printf("aとbは同じ文字列\n");
return 0;
}
653デフォルトの名無しさん:2009/06/03(水) 11:38:49
>>644 >>650 エコヒント
#include <stdio.h>
int main(void)
{
  char x[2][27] = {
    "ETAOINSRHLDUCFMWYGPBVKXJQZ", // x
    "LCQEBFVXGAMHSPUJWYORTDZINK" // f(x)
  };
  char a[]="This is a pen.";
  int i, f[27];

  puts(a);
  for(i=0; x[0][i]; i++) // 2 19 12 10 0 13 17 8 4 23 21 9 14 5 3 18 24 7 6 1 11 20 15 22 16 25
    f[x[0][i]-'A'] = i;
  for(i=0; a[i]; i++) {
    if(a[i]>='A' && a[i]<='Z')
      a[i] = x[1][ f[a[i]-'A'] ];
    else if(a[i]>='a' && a[i]<='z')
      a[i] = x[1][ f[a[i]-'a'] ]-'A'+'a';
  }
  puts(a);
  return 0;
}
654デフォルトの名無しさん:2009/06/03(水) 11:53:10
if (条件)
.....;
if( 条件 )
.....;

はなるべく

if (条件)
....;
else if(条件)
.....;
.....
と加工
前者のほうがスマートでカッコイイかも知れないが、共有コードでは
不用意に(順序を変えられたりして)弄られるとトラブルを起こしやすい
655デフォルトの名無しさん:2009/06/03(水) 12:01:12
>>652 ブレークするからOK。括弧Eとか関係ない。
656デフォルトの名無しさん:2009/06/03(水) 12:01:36
if (条件A)
....
if (条件B)
....

条件A、条件Bが両方とも同時成立する可能性がある場合
単純に else if に置き換えれば良い ってものでもないから注意
657デフォルトの名無しさん:2009/06/03(水) 12:05:04
if(条件A && 条件B)
....
else if(条件A && !条件B)
...
else if(条件B && !条件A)
....
としたいものだが
さすがにプライベートなプログラミングメモ
レベルでする奴は居ないだろw
658デフォルトの名無しさん:2009/06/03(水) 12:27:08
>>657
if(条件A){
  if(条件B) ...
  else ...
}
else if(条件B)...
って書けよw
659デフォルトの名無しさん:2009/06/03(水) 12:37:30
>>570
Del_Dataはまだ実装されてないですよね。それと、Add_Data、Change_Dataは、このままだと動かないと思います。
例えば、メニュー表示から「電話帳追記」を選んでも、既存のデータを読み込んでいない(あるいはデータが無い)。
だから、このままだとAdd_Dataは失敗しますね。

それで、基本的なロジックの組立て方について提案します。頻繁に行うファイルの入出力は一カ所にまとめた方が良いです。
例えば、このような関数を作り、ファイル操作はここで集中して処理する。
int ReadDataFile(TPbook teldata[10]);(戻り値は読込レコード数が都合が良い)
int WriteDataFile(TPbook teldata[10], int kensu);

Disp_Dataなどファイルから読込んでいる部分は、この関数呼出に変える。

Add_Dataでは、配列ではなく入力用のTPbook構造体を追加し、Input_Dataをその構造体に対して行う。
'Y'を選択したとき、全レコード読込をReadDataFileを介して実行する。
読み込んだTPbook構造体配列の有効レコードの次に、入力した構造体をコピーする。
登録レコード数+1を新たなレコード数とする。
有効なTPbook構造体配列をWriteDataFileによりファイル出力する。

Change_Dataでは、Add_Data同様に入力用構造体を用意する。Input_Dataをその構造体に対して行う。
'Y'を選択したとき、全レコード読込をReadDataFileを介して実行する。
読み込んだTPbook構造体配列の更新対象のレコードに対して、入力したTPbook構造体を上書きする(構造体同士の代入で可能)。
登録レコード数は変わらないので、そのまま。有効なTPbook構造体配列をWriteDataFileによりファイル出力する。。

Del_Dataでは、選択したレコード詳細を表示する。'Y'を選択したとき、全レコード読込をReadDataFileを介して実行する。
読み込んだTPbook構造体配列の更新対象のレコードに対して、削除指定したレコード以降に対して、次レコードを上書きしていく。
登録レコード数を−1する。有効なTPbook構造体配列をWriteDataFileによりファイル出力する。

660デフォルトの名無しさん:2009/06/03(水) 12:39:48
>>570
続き
Change_DataやDel_Dataを実行した場合は、レコードを再度読み直すようにしないと
データの表示内容が不正になるかもしれません。

その他気になること。処理自体には関係ないかもしれませんが、綴り誤りは直しておいたほうがいいですね。
adless[MAX_ADDLESS]とか、 namber

入力値チェック、任意ファイル名で出力は、改めて質問してください。

661デフォルトの名無しさん:2009/06/03(水) 12:52:14
>>657が一番正規性が高い。コードの共有度が高い(=不特定多数に晒す)
場合の書き方はこれが基本
次いで>>658の書き方。
if単文の連接で書く(再利用性の高い)コードは、本来は(相手の
レベルを見ずに)晒すべきコードじゃない
662デフォルトの名無しさん:2009/06/03(水) 12:55:53
>>511は、一番時間かかりそうなのは、ソートよりもディスクアクセスだな。
シーケンシャルリードで、情報収集してそのデータを使い大まかなソートして
そのあと、ランダムアクセスして並び替えを完了したいところだが
ランダムアクセス(とデータの書き込み)の部分が相当かかる。
663デフォルトの名無しさん:2009/06/03(水) 12:59:04
n行目は、どこに配置するか調べておき、シーケンシャルリード、ランダムライトする方が早そう。
ライトの方はキャッシュに蓄えられるだろうという考え。 
ランダムリードだと実際にデータが入ってこなければ進めない。
664デフォルトの名無しさん:2009/06/03(水) 13:04:44
>>552 (C++) n!とnCmを計算する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9320.txt

>>557
#include <stdio.h>
//#include <stdlib.h>
#define N 10 /* 入力するデータの個数 */
int main() {
  int i, r;
  int dosuu[10];
// srand((unsigned int)time(0));

  for(i=0; i<10; i++) dosuu[i] = 0;
  for(i=0; i<N; i++) {
    scanf("%d", &r);
// r = rand()%50 + 1; /* 1 〜 50 */
    dosuu[(r-1)/10]++;
  }
  puts(" 度数分布");
  for(i=0; i<10; i++) printf("%2d〜%2d:%2d 個\n", i*10+1, (i+1)*10, dosuu[i]);
  return 0;
}
665デフォルトの名無しさん:2009/06/03(水) 13:23:29
>>511 をやる人がいるならオレも参加する
とりあえずデータ生成はこれでいってみる

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

#define FILESIZE_MAX (1<<30)

int main(void){
long filesize;
char buf[1000+1];
int i, len;
char *filename="1000MB.txt";
FILE *fp;

fp=fopen(filename, "w");
if(fp==NULL) return 1;

for(filesize=0;filesize<FILESIZE_MAX;filesize+=len+2){
len=rand()%1000+1;
for(i=0;i<len;i++) buf[i]=rand()%(0x7d-0x21+1)+0x21;
buf[i]='\0';
fprintf(fp, "%s\n", buf);
}

fclose(fp);

return 0;
}
666デフォルトの名無しさん:2009/06/03(水) 16:58:56
>>477 とりあえず、9306.txtだけだ
9306.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9332.txt
main()
red1, green1, blue1のメモリー確保を追加した
makeGLHist()
isglの型をunsigned int に変更した

CommonImageIO.hの変更
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9333.txt
GlobalLock (unsigned char *)castを追加

>>548で問題が増えたんだな。
667567:2009/06/03(水) 17:23:58
>>571ありがとうございました。
668デフォルトの名無しさん:2009/06/03(水) 17:54:51
>>622 サービス問題 問3
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
  int l1, l2;
  if(argc != 3) {
    cout <<"Argument Error: Usage: prog1 string1 string2\n";
    return 1;
  }
  l1 = strlen(argv[1]);
  l2 = strlen(argv[2]);
  if(l1 > l2)
    cout <<argv[1] <<endl;
  else if(l1 < l2)
    cout <<argv[2] <<endl;
  else
    cout <<"There are same length:" <<l1 <<endl;
  return 0;
}
6/2 19:21 => 6/3 12:00 (あと2問もあるのに半日も時間がない)
669デフォルトの名無しさん:2009/06/03(水) 18:16:09
>>657ってAとBがともに真なとき以外は>>658の書き方より真偽の判定回数多くなると思うんだけど、
そういうのが正規的な表現なの?
670665:2009/06/03(水) 18:34:34
>>511 できた
1073742119 bytes のファイル

CPU CoreDuo T2400 1.83GHz
HDD 2.5" 60GB SATA HDD
OS WindowsXP SP3 32bit
コンパイラ gcc3.4.5 (mingw special)

にて 807秒 かかった
CPU使用率はさほど高くなくIO律速だと思われる
671デフォルトの名無しさん:2009/06/03(水) 18:43:43
どう考えても
判定回数が最小になるように、同じ判定が複数個所に散らばらないように書くよな

if(条件A && 条件B)
....
else if(条件A && !条件B)
...
else if(条件B && !条件A)

これとか完全に無駄な判定あるし
if(条件A && 条件B)
....
else if(条件A)
...
else if(条件B)
せめてこうだろ
672デフォルトの名無しさん:2009/06/03(水) 18:50:20
>>669
そもそも正規性ってのが意味不明。
673デフォルトの名無しさん:2009/06/03(水) 18:51:12
>>670
コード貼り付けないとわからん。 適当な事書いてるのと変わらない
674デフォルトの名無しさん:2009/06/03(水) 18:53:26
>>477 9307.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9334.txt

Headerは9333.txt使って
もう一つあるが、課題は座標変換らしい。あまり期待しないでな。
675665:2009/06/03(水) 18:56:28
>>673
他の人がやってくれたらソースも貼るよ
ヒープ使用は 30MB 未満
中間ファイルのサイズは元ファイルの二倍
676デフォルトの名無しさん:2009/06/03(水) 18:57:46
>>666
ありがとうございます。


けっこう大量に問題があるのでピンチなんです・・・
677デフォルトの名無しさん:2009/06/03(水) 19:02:06
>>675
OSはwindowsでいいのか?
678デフォルトの名無しさん:2009/06/03(水) 19:47:45
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):キーボードから英数字、記号の系列を入力し、
文字とその文字が連続する回数(文字−連続する回数)の系列に変換するプログラム。

[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:g++
 [3.3] 言語:C++
[4] 期限: 6月5日まで
[5] その他の制限:
入出力はcout、cinを用いる。
入力の終了は、改行してEOF。
スペースは無視されるものとする。
使える型はint、char。使えるincludeはiostreamのみ。
使える文は、for、while、ifのみ。


自分で書いたところまでは載せますので追記、改変してくださっても結構です。
宜しくお願いします。
679デフォルトの名無しさん:2009/06/03(水) 19:55:22
>>678

#include <iostream>
using namespace std;
int main()
{
char a,b=EOF;
int i=1,j=0;

while(1){
if(j != 0){
cout << b << '-' << i << ' ';}

while(1){
cin >> a;
if(a = b)i++;
if((a != b) && (j!=0)){
b=a; i=1; break;}
if(j==0){
j==1; b==a; }}}

cout << "Completed" << endl;

return 0;
}

こんな感じに考えたのですが、EOFしても何もおきませんし、多分スペースまでカウントされてしまう・・・。
どなたかお願いします。
680デフォルトの名無しさん:2009/06/03(水) 19:56:28
宣言文使っちゃいけないんですか!
681デフォルトの名無しさん:2009/06/03(水) 20:06:32
#include <iostream>
using namespace std;

int main() {
int set[256];
for ( int i = 0; i != 256; ++i ) {
set[i] = 0;
}

char in;
while( cin >> in ) {
++set[in];
}

for ( int i = 0; i != 256; ++i ) {
if ( set[i] != 0 ) {
cout << "'" << static_cast< char >( i ) << "'*" << set[i] << "\t";
}
}

return 0;
}

// cin はもともとスペースやタブなんかの区切り文字を無視するから特別な処理はいらないよ★
// っていうか、もともとスペースは英数字や記号に入ってないからカウントしないしー
682デフォルトの名無しさん:2009/06/03(水) 20:08:19
ところで、マジックナンバーつかっちゃった★
先頭で
const int maxheart = 256;
とでも書いて、
256 のところは全部 maxheart に置き換えてね♥
683デフォルトの名無しさん:2009/06/03(水) 20:24:13
>>678
なんか問題文がイマイチわかりにくいんだけど
RunLengthみたいな読み方すれば良いって事?

aaaabbccccc

a-4 b-2 c-5
みたいに
684デフォルトの名無しさん:2009/06/03(水) 20:28:16
678あたりだともうそろそろコードが上がってきても良い頃なのだが...
685デフォルトの名無しさん:2009/06/03(水) 20:37:47
>>683
はい、ランレングスです。
表記もまさにその通りです。
686デフォルトの名無しさん:2009/06/03(水) 20:43:57
#include <iostream>

int main()
{
int i, j;
char str[256];

std::cin >> str;

for(i=0; str[i];) {
char temp = str[i];
for(j=1; str[i+j]==temp; j++);
std::cout << temp << '-' << j << std::endl;
i += j;
}
}
687デフォルトの名無しさん:2009/06/03(水) 20:45:32
[1] C初心者コース
[2]
コマンドラインからN(1~99)の数値文字列を与える。(指定ない場合
異常な場合は5と解釈)下のような数のトグロを表示するプログラム
を作れ。右回り、左回りの両方とも出るようにする。
L=1 R=1(N=1)

12 21N=2)
43 34

123 321(N=3)
894 498
765 567

01020304 04030201(N=4)
12131405 05141312
11161506 06151611
10090807 07080910
[3]Windows XP/Visual C++6.0/C
制限:再帰呼び出し(間接を含む)は使用禁止だそうです。
[4]明日中

難しくて手が出ません。Help!!です
688デフォルトの名無しさん:2009/06/03(水) 20:53:50
>>664
ありがとうござます
689687:2009/06/03(水) 20:56:03
まだあった制限を書き忘れました。
制限:出力する文字をメモリに記憶しておいてから出力する方式は禁止
だそうです。
690デフォルトの名無しさん:2009/06/03(水) 21:14:16
記憶できないと一気に難易度あがるな
691687:2009/06/03(水) 21:55:00
自己解決しました。
皆で手分けしてN=99までファイルにテキストエディターで回答テキストファイル
(solution_xx.txt xxはNを2桁で表したもの)
を作り、単にそれをコンソール出力するだけでOKだと、先輩の情報筋から
情報を得ました。(要するにトンチだそうです。)
お騒がせしました。
692デフォルトの名無しさん:2009/06/03(水) 21:57:13
なんだよ、せっかく記憶なしで書けそうだったのにw
693デフォルトの名無しさん:2009/06/03(水) 22:01:20
>>678
#include <iostream>
using namespace std;
#define BUF_SIZE 8192
void main()
{
int count = 1;
char line[BUF_SIZE];
while(true){
if (!cin.getline(line, BUF_SIZE)) break;

char* cur = line;
while (*cur) {
char* next = cur + 1;
if (*cur != ' ' && *cur != '\t') {
if (*next == '\0' || *cur!=*next) {
cout << *cur << '-' << count << ' ';
count = 1;
}
else {
count++;
}
}
cur++;
}
cout << endl;
}
cout << endl << "Completed" << endl;
}
694デフォルトの名無しさん:2009/06/03(水) 22:05:13
うーん。>>686のやり方の方がスマート。
Accelerated C++にも同じ手法が出てきたけど
内部の for 文で外の for 文のインデックス値を動かすという定石パターンですな。
695デフォルトの名無しさん:2009/06/03(水) 22:13:22
表記のスマートさと価値観がマッチするのはCPU周辺部分だけ。
大抵の場合スマートに表記されているコードはコンピュータの場
合有害無益な処理であることが多い。
696デフォルトの名無しさん:2009/06/03(水) 22:19:14
>>692 非常に興味深いです。
697デフォルトの名無しさん:2009/06/03(水) 22:20:37
一般的にはごもっともない件だけど
>>693は一時変数が多い分、>>686よりもイマイチなのは確か。条件分岐も多い。
なにより、C++で何ゆえdefine…。サッター先生が全力でしごけって怒ってるw
698デフォルトの名無しさん:2009/06/03(水) 22:38:15
>>687 頑張ってみた
#include<stdio.h>
#include<stdlib.h>
int get_num(int n, int x, int y){
int dx, dy, d, i, offset=1, ret=-1;
dx=(x>n-1-x)?n-1-x:x;
dy=(y>n-1-y)?n-1-y:y;
d=(dx>dy)?dy:dx; // (x,y) は d 周目上にある
for(i=0;i<d;i++){
offset+=(n-1)*4; // offset は d 周目渦巻きの左上の数値
n-=2;
}
x-=d; y-=d; // (x,y) を d 周目左上 (d,d) からの相対座標に変換
if(y==0) ret=offset+x; // 上辺
else if(x==n-1) ret=offset+(n-1)+y; // 右辺
else if(y==n-1) ret=offset+(n-1)*3-x; // 底辺
else if(x==0) ret=offset+(n-1)*4-y; // 左辺
return ret;
}
int main(int argc, char *argv[]){
int n=5, fmt_width, x, y;
char tmp[20];
if(argc==2) n=atoi(argv[1]);
fmt_width=sprintf(tmp, "%d", n*n);
for(y=0;y<n;y++){
for(x=0;x<n;x++) printf("%0*d", fmt_width, get_num(n, x, y));
printf(" ");
for(x=n-1;x>=0;x--) printf("%0*d", fmt_width, get_num(n, x, y));
printf("\n");
}
return 0;
}
699デフォルトの名無しさん:2009/06/03(水) 22:40:43
つーか>>686細かい要件満たして無いじゃん
EOF判定して無いじゃん
スペース無視がスペースまでの処理になってんじゃん
256とかマジックナンバー使ってんじゃん
700デフォルトの名無しさん:2009/06/03(水) 22:43:12
各(x, y)はO(1)で求められないとなぁ
701デフォルトの名無しさん:2009/06/03(水) 22:44:50
してないね。
読み出し部分は>>693で、集計部分は>>686だろな。
あと、#defineはconstで置き換える。

結論としては、こまけーことは…
702デフォルトの名無しさん:2009/06/03(水) 22:46:41
>>700
どれに対するレス?
703デフォルトの名無しさん:2009/06/03(水) 22:48:43
>>698じゃねーの?
704デフォルトの名無しさん:2009/06/03(水) 22:49:34
>>698だよ
705デフォルトの名無しさん:2009/06/03(水) 22:50:40
>>700
じゃあ、お前が書けよw
706デフォルトの名無しさん:2009/06/03(水) 22:51:49
前にここで投稿したやつでもいいなら

for(i=0;i<d;i++){
offset+=(n-1)*4; // offset は d 周目渦巻きの左上の数値
n-=2;
}
でも、ここ等差数列の和の式に直せばO(1)になるね
707デフォルトの名無しさん:2009/06/03(水) 22:52:21
>>659
>>660
感謝です!
なるほど、理解出来ました。
ありがとうございます。
708デフォルトの名無しさん:2009/06/03(水) 22:52:39
>>700
>>698 の計算オーダはどのくらいになってるの?
709デフォルトの名無しさん:2009/06/03(水) 22:54:20
>>706
なるほどその部分か!
710デフォルトの名無しさん:2009/06/03(水) 23:24:25
今日のスレは熱いですねw
711デフォルトの名無しさん:2009/06/04(木) 00:48:27
>>622 問1 期限過ぎたようだ。
#include<iostream>
#include<string>
using namespace std;
class Student {
  string name;
  int math;
  int sci;
  int eng;
public:
  Student(string n, int m, int s, int e);
  string getname();
  double calAverage(int s);
  friend double calMathAverage(int s, Student sta[]);
};
Student::Student(string n, int m, int s, int e){
  name=n; math=m; sci=s; eng=e;
}
string Student::getname(){
  return name;
}
double Student::calAverage(int s){
  return (math+sci+eng)/(float)s;
}
double calMathAverage(int s, Student sta[]){
  int i, t=0;
  for(i=0; i<s; i++)
    t += sta[i].math;
  return t/(float)s;
}
//(3)ここを埋めて、Studentクラスの配列starray[]に3人の学生データを格納せよ。
  Student starray[size] = {a, b, c};
712デフォルトの名無しさん:2009/06/04(木) 01:03:32
>>668 >>711
ありがとうございます!!
今日、自分で考えても結局わからなくて、何気なく来てみたら・・・感謝です。
期限過ぎましたが、まだ提出はできるので、あと1問力を貸していただけるとありがたいです。
713デフォルトの名無しさん:2009/06/04(木) 01:09:24
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9335.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月16日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・線形リストを用いてデータを並び替える

Idがうまく表示できなくて困ってます。あと合計とかもうまくいきません。
よろしくお願いします
714デフォルトの名無しさん:2009/06/04(木) 01:18:55
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
以下のような九九表を出力するプログラムを作成せよ。
1 2 3 4 5 6 7 8 9
2 4 ...
...
9 18 27 ... 81

[3] 環境
 [3.1] XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限:明日
715デフォルトの名無しさん:2009/06/04(木) 01:22:17
>>714です。
すいません、表なのに書き方がまずかったです;
81が上の9のちょうど下になるようにするべきでした;
716デフォルトの名無しさん:2009/06/04(木) 01:24:06
>>714
#include <stdio.h>
int main(int argc, char* argv[])
{
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
printf("%3d ", i*j);
}
printf("\n");
}
return 0;
}
717デフォルトの名無しさん:2009/06/04(木) 01:32:52
>>548
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9336.txt
残りの9315.txtだが、間に合ったかな?
718デフォルトの名無しさん:2009/06/04(木) 02:41:03
719デフォルトの名無しさん:2009/06/04(木) 03:34:52
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9338.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:日本語のキーワードは探しません

よろしくお願いします。
720デフォルトの名無しさん:2009/06/04(木) 03:44:38


[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
  
2次元配列に格納されている4次正方行列A=[aij](i,j=0,1,2,3;要素は実数)において、

a00+a11+a22+a33 及び、a03+a12+a21+a30 を求めて表示せよ。
ただし、上記の和はfor文による繰り返しにより記述すること。

計算に先立ち、行列の各要素の値はキーボードより、以下のように入力すること。

a00・・・a03=1.02.03.04.0
a10・・・a13=5.06.03.12.0
a20・・・a23=1.32.59.04.3
a30・・・a33=1.32.59.04.3

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C
[4] 期限: 2009年6月5日12:30まで
[5] その他の制限: なし。

お願いします。
721デフォルトの名無しさん:2009/06/04(木) 04:02:06
>>720
#include <stdio.h>

int main()
{
int i, j;
double a[4][4];
double sum;

for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
scanf("%lf", &a[i][j]);
}
}

sum = 0.0;
for (i = 0; i < 4; i++) {
sum += a[i][i];
}
printf("a00+a11+a22+a33 = %f\n", sum);

sum = 0.0;
for (i = 0; i < 4; i++) {
sum += a[i][3-i];
}
printf("a03+a12+a21+a30 = %f\n", sum);

return 0;
}
722デフォルトの名無しさん:2009/06/04(木) 04:48:20
723デフォルトの名無しさん:2009/06/04(木) 07:42:50
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9342.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:
よろしるお願いします
724デフォルトの名無しさん:2009/06/04(木) 08:09:30
[1] 授業単元:中級C++
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9343.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Visual C++
 [3.3] 言語: C++
[4] 期限: 6/5朝まで
[5] その他の制限:
boostを使った問題です。宜しくお願いします
725デフォルトの名無しさん:2009/06/04(木) 09:58:44
[1] 授業単元:C言語T基礎・応用
[2] 問題文(含コード&リンク):
これ(実行ファイル)と全く同じようになるように書く
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9344.zip
苗字・名前・年齢・身長・体重を入力し、
その個人データを氏名・年齢・身長・体重・BMIの値として出力する。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005 Professional Edition
 [3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限:配列・構造体・引数・返り値を使う。ではヨロシクお願いしますm(__)m
726 :sage >>725:2009/06/04(木) 10:36:52
+--------------------------------------+
| 今から個人データを入力してもらいます |
+--------------------------------------+
入力する人数を設定してください(1〜10)> 1

*** 1人目のデータを入力してください ***
・苗字を入力してください(半角ローマ字)> asdsd_sad
・名前を入力してください(半角ローマ字)> dds_dsd

・年齢を入力してください(整数)> 24

・身長を入力してください(小数第1位まで[160.5など])> 123.4

・体重を入力してください(小数第1位まで[52.3など])> 67.4


+++ 個人データを確認します +++
[1人目]
氏名:asdsd_sad dds_dsd
年齢:24歳
身長:123.4cm
体重: 67.4kg
BMI :44.3 [ レッツエクササイズ! ]


*** 何かキーを押してください ***
727>>725:2009/06/04(木) 11:12:50
BMI=18.5 以下、やせてます
BMI=18.5 超え 25.0 未満、普通です
BMI=25.0 以上、レッツエクササイズ!
式:BMI=体重(kg)/身長(cm)/身長(cm)*10000
>ではヨロシクお願いしますwww.
728デフォルトの名無しさん:2009/06/04(木) 12:56:52
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9345.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 2005
 [3.3] 言語:C++
[4] 期限:6月5日2:00まで
[5] その他の制限:特にないです

それではよろしくお願いします
729デフォルトの名無しさん:2009/06/04(木) 14:47:32
>>718
遅くなりましたが、どうもありがとうございます。とても助かりました。
730デフォルトの名無しさん:2009/06/04(木) 15:08:48
[1] 授業単元:コマンドライン
[2] 問題文:コマンドライン引数からアルファベットだけからなる文字列(空文字列を含む)のみを選び、 すべての文字を対応する大文字に変換した上で、 一行に一つずつ標準出力に出力するプログラムを書け。
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC 2005
 [3.3] 言語:C
[4] 期限:6月10日12:00まで
[5] その他の制限:特になし

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9346.c
大文字になりません
お願いします
731デフォルトの名無しさん:2009/06/04(木) 15:18:43
>>730
コンパイルは通るの?
732デフォルトの名無しさん:2009/06/04(木) 15:20:10
>>731
コンパイルは出来ます

733デフォルトの名無しさん:2009/06/04(木) 15:21:50
>>730-732
replace呼ぶだけ

if(forallchar(str, isalpha)){
replace(str, str);
printf("%s\n", str);
...
734デフォルトの名無しさん:2009/06/04(木) 15:28:15
>>733
できました!
有難うございました


735723:2009/06/04(木) 16:28:35
どなたかよろしくおねがいします
736デフォルトの名無しさん:2009/06/04(木) 16:43:28
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=9205
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限: #include <stdio.h> のみ使用
         初心者なので、なるべく簡単にお願いします。
737736:2009/06/04(木) 16:45:26
リンク間違えました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9348.txt
こちらでお願いします
738デフォルトの名無しさん:2009/06/04(木) 16:55:54
[1] 授業単元:情報理論
[2] 問題文:
半角英数字及び半角の記号からなるテキストデータalice.txtがある。
このデータについて以下の計算をせよ。

アルファベット(半角英字で大文字(A-Z)と小文字(a-z)の区別なしで、a-zの26文字)の生起確率P(X)を計算しなさい。ただし、アルファベット以外の数字やその他の記号・空白は無視して詰めること。これを情報源Sとする。
更に情報源SのエントロピーH(S)を計算しなさい。また、26文字の生起確率が等確率である場合のエントロピーと値を比較しなさい。
 [3.1] OS:Windows/Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6/8 12:00
[5] その他の制限:特になし

宜しくお願いします。
739デフォルトの名無しさん:2009/06/04(木) 17:29:06
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): 1〜256文字の文字列を引数とし、最初の単語の文字数を返す関数wordを作成する(スペースはカウントしない)。
  main関数においてターミナルから1〜256文字の文字列を読み込み、word関数を使って文字列Sの最初の単語を出力するプログラムを作成しなさい。
  但し、スペースで区切れている箇所を単語の区切りとする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限: 関数wordのプロトタイプは、int word(char *)とすること。
         入力する文字列に2つ以上の連続したスペースはないとする。
         入力する文字列の最初と最後はスペースでないとする。
740デフォルトの名無しさん:2009/06/04(木) 17:31:38
>>723
(1)
double const pai = 3.141592653;
enum {
R_PERMISSION = 1,
W_PERMISSION = 2,
E_PERMISSION = 4,
S_PERMISSION = 8
};
inline int dbl(int x) // doubleは予約語なのでdblとしてあります
{
return x * 2;
}


(2)
double(3+4)は、2*3+4と展開され、10という誤った結果を得る。
正しくは
#define dbl(x) 2*(x)
741デフォルトの名無しさん:2009/06/04(木) 17:43:42
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):1〜256文字の文字列Sと単語Wを入力し、文字列Sの最初の単語がWであるときは文字列Sの先頭に*を付けたものを出力し、そうでないときはSをそのまま出力するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限:2つの単語が等しいときは1を、等しくないときは0を返す関数int compare(char *, char *)を作成して用いること。
         入力する文字列に2つ以上の連続したスペースはないとする。
         入力する文字列の最初と最後はスペースでないとする。
742デフォルトの名無しさん:2009/06/04(木) 17:43:56
[1] 授業単元:C言語
[2] 問題文
このプログラムを実行しても結果がおかしくなります。修正をお願いします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9349.txt
[3] 環境
 [3.1] OS: Windons
 [3.2] コンパイラ名とバージョン:VisualC++
 [3.3] 言語:C
[4] 期限:6月5日
[5] その他の制限:1次元配列を2次元配列にするものです。
たとえば 配列の要素数 4
配列の要素 1,2,3,4 
行数 2
と入力したら
2次元配列{{1,2、}、{3,4}}となるようにするものです。
また 配列の要素数 6
配列の要素 {1,2,3,4,5,6、}
行数 2と入力したら
{{1,2,3、}、{4,5,6}}の2次元配列を作ります。
743デフォルトの名無しさん:2009/06/04(木) 17:58:17
>>742 未確認だけど、ループへの再突入で初期化してないUFO.
  for(i=0;i<gyou;i++){
/**/ tempretu=0;
    for(j=0;j<retu;j++){
      tempA++;
      b[i][j]=a[tempA];
      tempretu++;
    }
    tempgyou++;
  }
744つづき:2009/06/04(木) 18:10:38
  for(i=0;i<gyou;i++){
    for(j=0;j<retu;j++){
// tempA++;
// b[i][j]=a[tempA];
      b[i][j]=a[tempA++];
// tempretu++;
    }
// tempgyou++;
  }

  for(i=0;i<gyou;i++){
// for(j=0;j=retu;j++){
    for(j=0;j<retu;j++){
// printf("i行j列=%d\n",b[i][j]);
      printf("%d行%d列=%d\n",i+1,j+1,b[i][j]);
    }
  }
745デフォルトの名無しさん:2009/06/04(木) 18:26:03
>>736-737
#include <stdio.h>
int main(void)
{
int i;
int a[10];
for (i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < 10; i += 2) {
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
for (i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
return 0;
}
746デフォルトの名無しさん:2009/06/04(木) 18:37:44
>>687>>689>>691>>700
やったよO(1)かつバッファ無し
#include <stdio.h>
#include <math.h>
int Project(int x, int y, int N) {
int dx, dy, ax, ay, length, level, side, phase, value;
dx = x * 2 - (N - 1); // 偶数奇数の差を吸収するために2倍の座標系
dy = y * 2 - (N - 1); // かつ対象領域の真ん中に原点
ax = abs(dx); ay = abs(dy);
length = ax > ay ? ax : ay; // 現階層の一辺の半分
level = (N + 1) / 2 - length / 2 - 1; // 何階層目か
if ( dy == -length ) { // 上
side = 0; // 何番目の辺か
phase = dx + length; // 辺の中の位置
}
else if ( dx == length ) { // 右
side = 1;
phase = dy + length;
}
else if ( dy == length ) { // 下
side = 2;
phase = length - dx;
}
else { // 左
side = 3;
phase = length - dy;
}
value = (N * N - (N-2*level) * (N-2*level)) * 2; // 現階層の初期値
value += side * length * 2 + phase + 2; // 階層内の移動
return value / 2; //1倍の系に戻す
}
747デフォルトの名無しさん:2009/06/04(木) 18:37:51
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):1〜256文字の文字列Sを入力し、それから単語Wを1つ入力する。
               文字列Sが単語Wを含むとき、その単語の前にあるスペースに*を挿入するプログラムを作成しなさい。
               但し、検索する単語Wが文字列Sの先頭にあるときは、S全体を1文字ずつずらし先頭に*を付ける。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限: 入力する文字列に2つ以上の連続したスペースはないとする。
          入力する文字列の最初と最後はスペースでないとする。
748746:2009/06/04(木) 18:39:29
続き
void main() {
int x, y, N, digit;
char format[] = "%_d";

scanf( "%d", &N );
if ( N<=0 || N>99 ) N = 5;
digit = (int)log10((double)(N * N)) + 1;
format[1] = '0' + digit + 1; // 表示桁数の指定

for (x=0; x<N; x++) {
for (y=0; y<N; y++) {
// x, y入れ替えると逆回り
printf( format, Project(y, x, N) );
//printf( "%3d", Project(x, y, N) );
}
printf("\n");
}
}
749デフォルトの名無しさん:2009/06/04(木) 18:47:09
>>741#include <stdio.h>

int compare(char *s1, char *s2){
for(;*s1 && *s2 && *s1==*s2; ++s1, ++s2) ;
return !*s1 && !*s2 ? 1 : 0;
}

int main(){
char s[256+1] = {0}, w[256+1] = {0};
char *p, *pp = 0;

printf("文字列:");
scanf("%[^\n]", s);
printf("単語:");
scanf("%s", w);

for(p = s; *p; ++p){
if(*p == ' '){
*p = '\0';
pp = p;
break;
}
}

if(compare(s, w)) printf("*");
if(pp) *pp = ' ';
printf("%s", s);

return 0;
}
750743:2009/06/04(木) 19:02:23
>>725 C++/CLI 受け取ってください〜教授
Visual Studio 2005 Professional Edition:今日中
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9347.txt
751デフォルトの名無しさん:2009/06/04(木) 19:13:37
[1] 授業単元: C言語
[2] 問題文:C言語で入力した年月日からその日の曜日を求めよ。
1980年以降から9999年まで 判定を行えるようにコーディングすること
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VB6
 [3.3] C言語
[4] 期限: 2009/06/07まで
[5] その他の制限:
Zellerの定理は使わないこと。
stdio.h以外はinclude禁止
機能は細分化を行い関数化すること
752743:2009/06/04(木) 19:24:40
>>713 関係ない人は見なくてよろしい。差分のソース。
// char Id[5];
char Id[5+1];
//void add_student(List *ptr_ptr, char Id, int Eng, int Math, int Jap,int Total);
void add_student(List *ptr_ptr, char *Id, int Eng, int Math, int Jap,int Total);
// char identifier[5];
char identifier[5+1];
// add_student(&head, identifier[5], numE, numM, numJ, numT);
add_student(&head, identifier, numE, numM, numJ, numT);
//void add_student(List *ptr_ptr, char Id, int Eng, int Math, int Jap, int Total)
void add_student(List *ptr_ptr, char *Id, int Eng, int Math, int Jap, int Total)
// new_student->Id[5] = Id;
new_student->Id[0] = Id[0];
new_student->Id[1] = Id[1];
new_student->Id[2] = Id[2];
new_student->Id[3] = Id[3];
new_student->Id[4] = Id[4];
new_student->Id[5] = Id[5];
// int sumE,sumM,sumJ,sumT;
int sumE=0,sumM=0,sumJ=0,sumT=0;
753デフォルトの名無しさん:2009/06/04(木) 19:24:51
>>749
ありがとうございます!
754デフォルトの名無しさん:2009/06/04(木) 19:26:35
>>746
755デフォルトの名無しさん:2009/06/04(木) 19:35:46
>>751
> [3.2] VB6
> [3.3] C言語

・・・VB?
756デフォルトの名無しさん:2009/06/04(木) 19:42:55
>>738
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int main(void) {
 FILE *fp = fopen("alice.txt","r");
 int c , s = 0 , str[26];
 double e = 0;
 memset(str,0,sizeof(str));
 while(EOF != (c = fgetc(fp))) {
  if(isalpha(c)) {
   str[tolower(c) - 'a'] += 1;
   s += 1;
  }
 }
 fclose(fp);
 for(c = 0; c < 26; ++c) {
  printf("%c:%f\n",'a'+c,(double)str[c]/s);
  if(str[c]) e += log2((double)s/str[c]);
 }
 printf("%f\n",e/s);
 return 0;
}
757デフォルトの名無しさん:2009/06/04(木) 20:10:50
>>751
VB6では動かんだろうけどw
#include <stdio.h>

int getDayOfYear(int m, int d){
int i, sum = 0, M[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
for(i = 1; i < m; ++i ) sum += M[i];
return sum+d;
}

int getLeapYearCount(y1, y2){
int y, sum = 0;
for(y = y1; y <= y2; ++y) if(!(y%4) && (y%100 || !(y%400))) ++sum;
return sum;
}

int getDayOfWeek(int y, int m, int d){
int dy = getDayOfYear(m,d);
int ly = getLeapYearCount(1980, m <= 2 ? y-1 : y);
return ((y-1980)*365 + ly + dy-1 + 2) % 7 ; // 1980/01/01は火曜日
}

int main(){
int y, m, d;
char* w = "日\0月\0火\0水\0木\0金\0土";

printf("日付(yyyy/mm/dd): ");
scanf("%d/%d/%d", &y, &m, &d);
printf("%d/%02d/%02dは%s曜日です\n", y, m, d, &w[getDayOfWeek(y, m, d)*3]);

return 0;
}
758デフォルトの名無しさん:2009/06/04(木) 20:31:27
>>743 >>744
ありがとうございます
759デフォルトの名無しさん:2009/06/04(木) 20:44:31
>>752
ありがとうございます
760743:2009/06/04(木) 20:48:33
>>739 最初の単語の文字数を返す関数wordを作成する
#include <stdio.h>
int word(char *);
int main() {
  int size;
  char buf[256+1];

  fgets(buf, 256+1, stdin);
  size = word(buf);
  printf("word length=%d\n", size);
  buf[size] = '\0';
  printf("word string=<%s>", buf);
}
int word(char *s) {
  int size = 0;
  while(*s && *s != '\n') {
    if(*s++ == ' ') break;
    size++;
  }
  return size;
}
761デフォルトの名無しさん:2009/06/04(木) 20:55:04
>>752
ありがとうございます
762デフォルトの名無しさん:2009/06/04(木) 20:55:16
>>511 はどうなったの? ソートより
その後のランダムアクセス(並び変えたデータを書き込む)で時間くいますか?
763デフォルトの名無しさん:2009/06/04(木) 21:21:59
【質問テンプレ】
[1] 授業単元:C
[2] 問題文(含コード&リンク):
ファイル(TEST.TXT)を読み込み、句読点が現れた時点で改行し表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C

[5] その他の制限: 無し

よろしくお願い致します。
764デフォルトの名無しさん:2009/06/04(木) 21:22:24
>>760
ありがとうございます!
765デフォルトの名無しさん:2009/06/04(木) 21:31:11
>>717
ありがとうございます!助かりました!
766デフォルトの名無しさん:2009/06/04(木) 21:47:07
[1] 授業単元:オペレーティングシステムT
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9350.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 6月6日午前中
[5] その他の制限: 問題文レベルで書いてください。
上記URLサンプルコードをCDから起動させたUbuntuで実行させました。問題文に
>コマンドに引数があると、exec() でエラーになっていた。
とあるのですが、引数をつけてもエラーが出ず、混乱しています。

よろしくお願いします。
767743:2009/06/04(木) 23:06:14
>>728 関数sort(int,int)を用いて,これらの変数の値を並び替えてx≧y とする。
#include <stdio.h> // 問1.
void sort(int *,int *);
int main() {
  int x, y;
  printf("x,y を入力しなさい\n"); scanf("%d %d", &x, &y); printf("(x,y)=(%d,%d)\n", x, y);
  sort(&x, &y);
  printf("(x,y)=(%d,%d)\n", x, y); return 0; }
void sort(int *a, int *b) {
  int tmp;
  if(*a < *b) tmp = *a, *a = *b, *b = tmp; }
#include <stdio.h> // 問2.
void sort(int *, int *, int *);
int main() {
  int x, y, z;
  printf("x,y,z を入力しなさい\n"); scanf("%d %d %d", &x, &y, &z); printf("(x,y,z)=(%d,%d,%d)\n", x, y, z);
  sort(&x, &y, &z);
  printf("(x,y,z)=(%d,%d,%d)\n", x, y, z); return 0; }
void sort(int *a, int *b, int *c) {
  int tmp;
  if(*a < *b) tmp = *a, *a = *b, *b = tmp;
  if(*b < *c) tmp = *b, *b = *c, *c = tmp;
  if(*a < *b) tmp = *a, *a = *b, *b = tmp; }
#include <stdio.h> // 問題:問3.
int mult(int *, int *);
int main() {
  int i, sum; int a[4] = {1,2,3,4}, b[4] = {4,3,2,1};
  sum = 0;
  for(i=0; i<4; i++) { sum += mult(&a[i], &b[i]); }
  printf("sum=%d\n", sum); return 0; }
int mult(int *a, int *b) {
  return *a * *b; }
768デフォルトの名無しさん:2009/06/04(木) 23:26:30
[1] 授業単元:計算機システム
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9351.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:visual studio
 [3.3] 言語:C
[4] 期限: 6月8日
769725 ◆ZnBI2EKkq. :2009/06/04(木) 23:36:31
>>750
遅れましたがありがとうございました
770デフォルトの名無しさん:2009/06/04(木) 23:38:26
>>768
問題が意味不明
何の「文字コード」なのか詳しく

入力データがあるなら入力形式と、それに対応する出力形式が分からないとどうしようもない
771デフォルトの名無しさん:2009/06/04(木) 23:40:45
>>756
ありがとうございます
772デフォルトの名無しさん:2009/06/04(木) 23:42:31
>>768
#include <stdio.h>
int main()
{
int ch, i;
while ((ch=fgetc(stdin)) != EOF) {
i++;
printf("%02x%c", ch, ((i % 16) == 0)? '\n': ' ');
}
printf("\n");
return 0;
}
妄想で補完
773デフォルトの名無しさん:2009/06/04(木) 23:44:46
おぉう、iが初期化されてないよ。
774772:2009/06/04(木) 23:57:51
イカーンm(__)m
i=0;に直してね
775デフォルトの名無しさん:2009/06/04(木) 23:59:36
>>770
適当なテキストファイルをバイナリダンプみたいに
16進数表示しろって話じゃないのかな
違うかな
776デフォルトの名無しさん:2009/06/05(金) 00:01:46
>>767
ありがとうございます!
777585:2009/06/05(金) 00:11:16
>>650>>653
亀レスですが、ありがとうございました。
今後の参考にさせていただきます。
778デフォルトの名無しさん:2009/06/05(金) 00:15:05
2008年5月27日

2008年5月27日

計算機システム1(eof)

sample-utf8.txtの中身はこうかな
779デフォルトの名無しさん:2009/06/05(金) 00:25:35
>>772
それはテキストモードでNGだわ。バイナリモードにするC標準の方法ってなんだっけ?
_setmodeは"_"がMS独自っぽい気がするなぁ。ただいまぐぐり中。
780デフォルトの名無しさん:2009/06/05(金) 00:28:30
fread
781724:2009/06/05(金) 00:28:53
すみませんboostの型特性とか難しくて全くわからないです
どなたかお願い出来ないでしょうか?
782デフォルトの名無しさん:2009/06/05(金) 00:36:37
>>780
それは試した上で言ってる? オレもそう思って試したらだめだったから言ってんだけど。

"_"なしバージョンはVS2005では呼ぶなって書いてあるドキュメントは見つけた。
とりあえずVSなら>>772に以下を付加すればOK。C標準かどうかはしらん。

#include <io.h> /* #include<stdio.h>の下 */
#include <fcntl.h>
  :
_setmode( _fileno( stdin ), _O_BINARY ); /* whileの前 */
783デフォルトの名無しさん:2009/06/05(金) 00:50:41
Windows以外にはそもそもテキストモードとかバイナリモードとか無いわけだが
784デフォルトの名無しさん:2009/06/05(金) 01:00:22
ホントかて。UNIX系にないのは知ってるが「Windows以外(のあらゆる環境)にはない」とは知らんかったわ。

ま、質問者はXPのVSなんで、>782を付けんとまずい可能性は高いだろうね。
785デフォルトの名無しさん:2009/06/05(金) 01:04:27
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
int i=0;
unsigned char ch[1];
if (argc !=2) {
fprintf(stderr, "引数にファイルを指定\n"); return 1;
}
fp = fopen(argv[1], "rb");
if (fp == NULL) {
fprintf(stderr, "ファイルを開けなかった\n"); return 1;
}
while (fread(ch, 1, 1, fp) > 0) {
i++; printf("%02x%c", ch[0], ((i % 16) == 0)? '\n': ' ');
}
printf("\n"); fclose(fp);
return 0;
}
Windows以外だと"b"は無視だったかな
786デフォルトの名無しさん:2009/06/05(金) 01:06:58
課題をエスパると標準入力っぽい。
787デフォルトの名無しさん:2009/06/05(金) 01:17:01
標準入力だと、VCは0x1aが現れるとファイルの終わりにしてしまうよね。
他のソフトでは、終わりにしないのもあるんだけど。
788デフォルトの名無しさん:2009/06/05(金) 01:41:57
>>787
ファイルでも標準入力でもバイナリモードにしておけば0x1aで終了しないと思う
789デフォルトの名無しさん:2009/06/05(金) 01:50:30
>>724

#include <boost/type_traits.hpp>
template<class T>
int f(T t)
{
return boost::is_signed<T>::value ? 0 : -1;
}
790デフォルトの名無しさん:2009/06/05(金) 01:58:33
1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):サブルーチンを使用した簡単なプログラムの作成。(例は成績処理のプログラムだそうです。)
ですがサブルーチンを使用していればどんなプログラムでも良いそうです。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:TurboC++
 [3.3] 言語: C
[4] 期限: 2009年6月6日
[5] その他の制限:#include <stdio.h>で始めてprintfやscanfを使用した形でお願いします。

サブルーチンというものがどんなものかわかりませんがそれを使用したプログラム(成績処理など)
を作っていただきたいです。どうかお願いいたします。
791デフォルトの名無しさん:2009/06/05(金) 02:12:57
792デフォルトの名無しさん:2009/06/05(金) 02:17:14
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 1~100の任意のN個の整数値を一次元配列に読み込み、その合計値と平均値を求め、
               80~100,70~79,60~69,59以下の個数をそれぞれ出力するプログラムを作りなさい。
               (1)入力データ数(Nは10以上とする)
               (2)入力データ値(配列より読み出し、同じ値は使わない)
               (3)入力データの合計値、平均値
               (4)入力データについて各ランクの個数

               (1)~(3)まではできたのですが、(4)がわかりません。。
               http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9352.txt
               ↑これの続きにお願いします!
[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: VS 2008
 [3.3] 言語: C
[4] 期限: 2009年6月8日(月)14:00
[5] その他の制限: if,do,while,for,配列などです。
(例)各ランクでの個数の結果
 80-100:5
 70-79:3
 60-69:1
 59以下:3
 このような感じでお願いします。
793724:2009/06/05(金) 02:24:10
>>789
すみません、僕のアップした問題と例文が矛盾していました
(signed型なら-1、Tがunsigned型なら0の誤りでした)
とりあえず教えてもらったのは正しく動作しました。有り難うございました
(こんなに短い宿題だったんだ。。)
794723:2009/06/05(金) 02:34:11
>>740
ありがとうございました!
795デフォルトの名無しさん:2009/06/05(金) 03:24:07
>>792
コンパイラにも通してないんで、考え方だけ。

int rank[4] ={0,0,0,0};

//sum+=seisu[i];の直下に
rank[ (seisu[i] >= 60) + (seisu[i]>=70) + (seisu[i]>=80) ]++;

//最後に
printf("80-100:%d\n", rank[3]);
printf("70-79:%d\n", rank[2]);
printf("60-69:%d\n", rank[1]);
printf("59以下:%d\n", rank[0]);
796デフォルトの名無しさん:2009/06/05(金) 04:18:08
>>795
コンパイルし実行した結果、うまくいきました!

ありがとうございました!
797デフォルトの名無しさん:2009/06/05(金) 05:36:07
素直に
if(seisu[i] < 60) rank[0]++;
else if(seisu[i] < 70) rank[1]++;
else if(seisu[i] < 80) rank[2]++;
else rank[3]++;
にしとけよw
798デフォルトの名無しさん:2009/06/05(金) 07:07:32
>>784
質問者がsample-utf8.txtを読むって課題出してんのに
標準入力から読もうとしてるのが間違いの発端だろ
Windowsの標準入力でバイナリモードって何がやりたいのよ
Windowsにはパイプなんか無いんだぞ
>>785でいいでしょ
799デフォルトの名無しさん:2009/06/05(金) 07:39:00
>>787
入力が一旦フラッシュされるだけ
改行とファイルの終わりは別だよ
WidnowsではCtrl+zでファイルの終わりを入力できる
800デフォルトの名無しさん:2009/06/05(金) 10:01:28
>Windowsにはパイプなんか無い
http://msdn.microsoft.com/ja-jp/library/cc429801.aspx
余計な茶々入れスマソ
801デフォルトの名無しさん:2009/06/05(金) 10:43:18
>>798 標準入力で fread() 使いたいバージョン
802デフォルトの名無しさん:2009/06/05(金) 11:32:51
>>657
条件式が副作用を持つ関数の場合はその方法は使えない。
(概してそういうコードは多い)
副作用を持たない関数あるいは関数呼び出しを伴わない条件式の場合は
その方法は使える。速度が必要ならコメントアウトすればいいのだから.
そのコードを他人に使わせるのならロジック部分は冗長に書いても損す
ることは少ないと思う。ただしよほど奇麗に書かないと「読みづらい」
と文句言われるだろうが

A,B,Cは副作用を持つ関数呼び出しを含まない条件式
if(条件A)
else if(条件B)
else if(条件C)

==>

if (条件A)
else if( 条件B /*&& 条件A*/)
else if(条件C /*&& 条件A && 条件B*/)
....
てな感じ
803802:2009/06/05(金) 11:35:55
ahoなミスに気づいた

if (条件A)
else if( 条件B /*&& !条件A*/)
else if(条件C /*&& !条件A && !条件B*/)
に置き換えてね
804デフォルトの名無しさん:2009/06/05(金) 11:44:32
ABCじゃなくて、>>657の条件を書き直せよw
805デフォルトの名無しさん:2009/06/05(金) 11:46:55
>>802

だからといって
char *string:
if( strcmp(string,"文字列1") ==0)
....
else if ( (strcmp(string,"文字列2")==0) /*&& (strcmp(string,"文字列1") !=0) */)
....

なんてやるとコメントが付けてても怒られるぞw
806デフォルトの名無しさん:2009/06/05(金) 13:04:20
コメントの事言うなら。
(銅)
if(条件A && 条件B)  ...
else if(条件A && !条件B)  ...
else if(条件B && !条件A)  ...

(銀)
if(条件A && 条件B)  ...
else if(条件A)  ...
else if(条件B)  ...

(金)
if(条件A){
 if(条件B)   ...
 else   ...
}else if(条件B)  ...

(特別賞)
if(条件A) {
 if(条件B) {  ...
 } else {  ...
}} else if(条件B) { ...
}
807デフォルトの名無しさん:2009/06/05(金) 13:39:32
>>763(期限は無いのですか。)
ファイルの文字コードは何ですか。
例えば句読点は半角のピリオドとカンマとか、また漢字ならUnicodeかShift-JISなど。
808デフォルトの名無しさん:2009/06/05(金) 15:18:53
>>687 BASIC言語だけど麻呂のクソースくらえ
10' C言語の宿題片付けます 126 Res:687
20 input "N=";N: if(N<0)or(N>99)then N=5
30 for y=1 to N
40 for x=1 to N:gosub 110:next
60 print " ";
70 for x=N to 1 step -1:gosub 110:next
80 print
90 next y
100 end
110 ' draw
120 dx=1:dy=1:m=0:ori=0:right=N:left=1:top=2:bottom=N
130 while(m<=N*N)
140 m=m+1:if(dx=x)and(dy=y)then gosub 200:return
150 if(ori=0)then dx=dx+1:if(dx=right)then ori=1:right=right-1:goto 190
160 if(ori=1)then dy=dy+1:if(dy=bottom)then ori=2:bottom=bottom-1:goto 190
170 if(ori=2)then dx=dx-1:if(dx=left)then ori=3:left=left+1:goto 190
180 if(ori=3)then dy=dy-1:if(dy=top)then ori=0:top=top+1:goto 190
190 wend
200 ' print
210 keta=1:while(10^keta<N*N):keta=keta+1:wend
220 mm$=str$(m):while(len(mm$)<keta):mm$="0"+mm$:wend
230 print mm$;:return
809デフォルトの名無しさん:2009/06/05(金) 15:51:47
【質問】
[1]授業単元:データ構造2
[2]問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9353.txt
[3]環境
[3.1]OS:XP VISTA
[3.2]コンパイラ名:gcc VC
[3.3]言語:C
[4]期限:6月6日午後5まで
[5]その他の制限:とくになしです。習っていますが、理解がまだ追いついてないです;;
810 ◆sUfWYz9MSA :2009/06/05(金) 16:03:01
[1]授業:データ構造
[2]問題文:
(1)再帰を使用して完全2分岐の「深さ」優先探索を行う。
 行きがけ順、帰りがけ順、なぞりがけ順、それぞれの関数を作成し結果を出力させること。
 各ノードに整数データを入れて、次の出力結果が得られる事を確認せよ。
 
 行きがけ:5,3,1,4,7,6,9
なぞりがけ:1,3,4,5,6,7,9
帰りがけ:1,4,3,6,9,7,5

(2)次に再帰を使用せずにスタックを用いて同様の結果が得られる事を確認せよ。
[3]環境:C、Linux
[4]期限:(1)2009/6/8 (2)無期限
[5]その他の制限:問題文はテンプレートであり各自参考として使用してよい

<以下問題文テンプレート>
/* ?に何か入るかもしれない */
#include <stdlib.h>
#include <stdio.h>
#define NUM_NODE 7;

void ikigake (int t[], int i)
{
if( i==? )
return;
???
printf("3d ->", t[i]);
???
}
811 ◆sUfWYz9MSA :2009/06/05(金) 16:04:38
続き
void nazorigake(int t[], int i)
{
if(i==?)
return;
???
printf("%3d ->", t[i]);
???
}

void kaerigake(int t[], int i)
{
if(i==?)
return;
???
printf("%3d ->", t[i]);
???

main()
{
int tree[???] = {???};
printf("\nIKIGAKE\n");
ikigake();
??
printf(" END\nNAZORIGAKE\n");
nazorigake();
??
printf(" END\nKAERIGAKE\n");
kaerigake();
??
812デフォルトの名無しさん:2009/06/05(金) 16:09:57
>>809
通った場所と、現在位置を記録し、すでに探索済みのところはのぞいたらいいと思うよ。
反転と回転の同一視で1/8に探索が減る。 
813デフォルトの名無しさん:2009/06/05(金) 17:20:53
10 '>>808 >>687 トグロ
#include <stdio.h>
#include <math.h>
int n, keta, x, y;
void draw();
int main() {
  printf("N="); scanf("%d",&n); if(n<0 || n>99) n=5;
  keta = log10((double)n*n);
  for(y=1; y<=n; y++) {
    for(x=1; x<=n; x++) draw();
    printf(" ");
    for(x=n; x>=1; x--) draw();
    puts("");
  }
  return 0;
}
void draw() {
  int dx=1,dy=1,m=0,ori=0,right=n,left=1,top=2,bottom=n;
  while(m <= n*n) {
    m++; if(dx==x && dy==y) { break; /* return; */}
    if(ori==0) { dx++; if(dx==right)  { ori=1; right--;  continue; } }
    if(ori==1) { dy++; if(dy==bottom) { ori=2; bottom--; continue; } }
    if(ori==2) { dx--; if(dx==left)   { ori=3; left++;   continue; } }
    if(ori==3) { dy--; if(dy==top)    { ori=0; top++;    continue; } }
  }
  switch(keta){
    case 0: printf("%01d", m); break; // 3*3 = 9
    case 1: printf("%02d", m); break; // 9*9 = <99
    case 2: printf("%03d", m); break; // 31*31 = <999
    case 3: printf("%04d", m); break; // 99*99 = <9999
  }
}
814デフォルトの名無しさん:2009/06/05(金) 17:34:17
>>809
1*1
3*3
5*5
7*7
には解があるが、8*8はないだろ
8*8が簡単
815デフォルトの名無しさん:2009/06/05(金) 17:37:34
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 数字の列を入力すると、値が
重複するものを削除するプログラムを作成せよ。
ただし数列の長さは最大でも100とする。プログラムの実行の流れは
以下のようになる。
はじめに「数列のサイズは?(最大100)」と表示されるので、入力する数字の個数を入力する。次に「?番目の正の数を入力してください:」と表示されるので、整数を入力する。
?に何番目か表す数字が入る。この入力処理をはじめに入力したサイズ分繰り返す。
入力し終えると、入力された数字のうち重複するものが削除されたデータが表示される。
たとえば、1,2,3,4,5,5という数字を入力されると表示される数列は1,2,3,4,5と表示される。
[3] 環境
 [3.1] OS: (Windows/vista
 [3.2] コンパイラ名とバージョン: VisualC++2008 Express Edition
 [3.3] 言語:C++
[4] 期限: (今日から〜2009年6月11日まで]
[5] その他の制限: 配列は習いました。
・サイズは0個でも‐5でも101個でもおかしなことが起こらず適切な処理がされている。たとえば「サイズがおかしいです」と表示して終了する。
・正しく重複をなくすことができている
プログラム中に何個目か、しっかり表示されている。
・プログラム実行中に表示される文字のうち意味不明なものが存在しない。

お願いします〜
816デフォルトの名無しさん:2009/06/05(金) 18:43:22
トグロ大人気だな
817デフォルトの名無しさん:2009/06/05(金) 19:32:49
>>798
課題のリンク先を見てないだろ?
> ファイル名<sample-utf8.txt
これをどう解釈するかだが、ファイル名はEXEのファイル名で標準入力のリダイレクトと解釈するのが不自然だとは思わん。
818デフォルトの名無しさん:2009/06/05(金) 20:30:24
>>817
拡張子を見て、テキストファイルだと判断し、
制御コードがないと想定するのも、
不自然ではないよね。
問題文に無いことについてはどうするのかだな。
819デフォルトの名無しさん:2009/06/05(金) 20:40:49
改行コードを0d 0aと出すことも読み取れる。
(1) _setmodeを授業でやった直後 or 教える目的
(2) リダイレクトでない(出題者のミス or 質問者のミス)
(3) 0d 0aでない(出題者のミス or 質問者のミス)
上の順でいずれかかなぁ?
820デフォルトの名無しさん:2009/06/05(金) 20:47:27
>>815
#include <stdio.h>
int main(void)
{
int i, j, k, n, a[100];

printf("数列のサイズは?(最大100)");
scanf("%d", &n);

if(n<1 || 100 < n) {
printf("サイズがおかしいです\n");
return 0;
}
for(i=0; i<n; i++) {
printf("%d番目の正の数を入力してください:", i + 1);
scanf("%d", a + i);
}
for(i=0; i<n; i++) {
int temp = a[i];
for(j=i+1; j<n; ) {
if(a[j] == temp) {
for(k=j; k<n-1; k++) a[k] = a[k+1];
n--;
}
else j++;
}
}
for(i=0; i<n; i++) printf("%d ", a[i]);

return 0;
}
821デフォルトの名無しさん:2009/06/05(金) 20:53:57
>>814
>8*8はないだろ
+−+−+−+−+−+−+−+−+
|01|38|55|34|03|36|19|22|
+−+−+−+−+−+−+−+−+
|54|47|02|37|20|23|04|17|
+−+−+−+−+−+−+−+−+
|39|56|33|46|35|18|21|10|
+−+−+−+−+−+−+−+−+
|48|53|40|57|24|11|16|05|
+−+−+−+−+−+−+−+−+
|59|32|45|52|41|26|09|12|
+−+−+−+−+−+−+−+−+
|44|49|58|25|62|15|06|27|
+−+−+−+−+−+−+−+−+
|31|60|51|42|29|08|13|64|
+−+−+−+−+−+−+−+−+
|50|43|30|61|14|63|28|07|
+−+−+−+−+−+−+−+−+

???
822デフォルトの名無しさん:2009/06/05(金) 21:02:17
>>820
tempで保存する方法と○--の表現を使わないで表すことはできるでしょうか?
823デフォルトの名無しさん:2009/06/05(金) 21:15:11
3*3は?
824デフォルトの名無しさん:2009/06/05(金) 21:22:38
すまん
3つずつ移動するから、1ます余って無理かと思った。
825デフォルトの名無しさん:2009/06/05(金) 21:28:31
ある程度の大きさ以上ならいつでも解はあるの?
826デフォルトの名無しさん:2009/06/05(金) 21:38:28
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9354.txt
[3] 環境
 [3.1] OS: Unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年6月7日19:30まで
[5] その他の制限:なし
827デフォルトの名無しさん:2009/06/05(金) 22:04:22
>>809
スタック
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9355.txt
再帰
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9356.txt

スタックが遅いのはすまん。
構造体にするより、ビット演算でx,y,dをintに詰め込んだ方が早かったが、質問がきそうでやめた。
ちなみにこんな感じ:

#define N (5)
#define B (3)

#define PACK(x,y,m) (((((x)<<B)|(y))<<3)|(m))
#define X(n) (((n)>>(3+B)))
#define Y(n) ((((n)>>3))&~(0xFFFFFFFF<<B))
#define D(n) ((n)&7)

x*5+yにすると、取り出すときに剰余を使うので遅くなる。
828デフォルトの名無しさん:2009/06/05(金) 22:07:50
>>813
何も表示されないw
829813:2009/06/05(金) 22:37:25
コンパイルのエラーメッセージが、何か出てます?
830デフォルトの名無しさん:2009/06/05(金) 22:39:43
>>826
通信プロトコルは何を使えとか指定ある?
831デフォルトの名無しさん:2009/06/05(金) 23:04:44
つーか>>813 よ。どしてこんなクソプログラムにいちいちループ内不変定数計算
外出しみたいな姑息な最適化をするんだw
(多分反射的生理的な操作とみた)
832デフォルトの名無しさん:2009/06/05(金) 23:06:39
>>830
SSHです。
あと忘れていたのですが、select(),system(),fork()の使用がこの課題では認められていません。
後付で申し訳ありません。
833デフォルトの名無しさん:2009/06/05(金) 23:40:27
>>832
sshのポートを使ってサバクラ作れって事?
それともssh使ってサーバーにログインし、動かすプログラム?
834デフォルトの名無しさん:2009/06/05(金) 23:51:51
>>833
sshのポートを使ってという意味です。
835デフォルトの名無しさん:2009/06/06(土) 00:02:26
>>812
>反転と回転の同一視で1/8に探索が減る。

プログラムの出力結果とにらめっこして
ようやく意味がわかった・・・ ^^;
836デフォルトの名無しさん:2009/06/06(土) 00:10:35
>>834
若いボート番号を横取りするのは不味いんじゃないかな
意図が良く分からない
837デフォルトの名無しさん:2009/06/06(土) 03:04:24
>>827
質問者です>>809です。
先ほどから確認をとろうと立ち上げているのですが、肝心なvistaが動かず。。xpを立ち上げるもコンパイラするソフト??が入っておらず、フリーで配布してあるところを探しているのですが、
3時間ばかしダウンロードがいっこうに進まず何も出来ない状態です;;
このままだと出力結果を知らぬまま提出することになりそうです。
本当に申し訳ないのですが
出力結果をお教え頂けないでしょうか??
プログラムも組んでもらってこんなこと聞くのはおかしな話ですが
本当に本当によろしくお願いします><
838デフォルトの名無しさん:2009/06/06(土) 03:13:40
別のコンパイラ入れれば?
小さいやつ
839デフォルトの名無しさん:2009/06/06(土) 03:44:02
>>837
もしどうしてもダメなら、codepadを使ってみたら?
codepad  http://codepad.org/
真ん中のテキストボックスにコードを入れて、
Language => C, Run codeにチェックを入れてSubmitを
押すと、コードをコンパイルして実行してくれる
840デフォルトの名無しさん:2009/06/06(土) 05:50:02
>>808
210 行目を、20 行目の後ろに持っていくことに問題ある?
20 input "N=";N: if(N<0)or(N>99)then N=5
25 keta=1:while(10^keta<N*N):keta=keta+1:wend
 :
200 ' print
220 mm$=str$(m):while(len(mm$)<keta):mm$="0"+mm$:wend
841デフォルトの名無しさん:2009/06/06(土) 08:37:53
今日のGoogleはテトリスの画像だなwww
842デフォルトの名無しさん:2009/06/06(土) 09:45:48
>>840
BASICはスレ違いだし、もう処理系が存在しないに等しい言語。しっしっ
843デフォルトの名無しさん:2009/06/06(土) 09:59:11
UB32、結構便利
844デフォルトの名無しさん:2009/06/06(土) 10:11:14
Windows 7以降はDOS互換モード廃止の為ネィティブでは非動作につき
845デフォルトの名無しさん:2009/06/06(土) 10:18:12
>>842
それはもったいないな。どこかにないかな。
846デフォルトの名無しさん:2009/06/06(土) 10:36:54
>>839そんなサイトがあったんですか
ありがとうございます。そこから結果を観ることができました。
レポートも間に合いそうです。
みなさんありがとうございます!!><
847デフォルトの名無しさん:2009/06/06(土) 10:40:27
ただBASIC処理系の場合(VB系は度外視)、ライブラリに相当する組み込み関数や機能が豊富でも無い限り
ていの良い超高級アセンブラシミュレータである件については
よーく理解してから信仰しても良いと思います。
見た目のコードの美しさも今後は非常に重要な時代でC系の記号美溢れるコードが主流である状況は続くでしょう。
848デフォルトの名無しさん:2009/06/06(土) 10:49:36
list
10 X=1
20 for I=1 to 50
30 X=X*I
40 next
50 print X
run
30414093201713378043612608166064768844377641568960512000000000000
OK
to 1000 でも桁溢れしない。こういう所、捨てがたい魅力があるんだな。
動作するなら別にwindowsでなくてもいいから、誰かやってくれないか。
849デフォルトの名無しさん:2009/06/06(土) 11:25:43
>>848
それはベーシックにかぎったはなしではなく、
C系列でも実現可能で多倍長整数とか言われてるやつです。
桁が多くなると計算にものすごい時間がかかるようになるから、
高速な多倍長演算は重宝されますです。
850デフォルトの名無しさん:2009/06/06(土) 11:35:22
C言語で関数のオーバーロードは出来ないんですか?
851デフォルトの名無しさん:2009/06/06(土) 11:51:33
>>850
できない。
852デフォルトの名無しさん:2009/06/06(土) 11:54:52
できるんだったらabs, fabsとかもうちょっとマシになってるよな・・・
853デフォルトの名無しさん:2009/06/06(土) 12:16:08
無理やり総称をやるなら、引数を「データへのポインタ」と「データのサイズ」にして、
関数内で適切にデータアクセスを行うようなプログラムかな。
ポインタとサイズをまとめた構造体を使うという手もある。
いずれにしても、コンパイラは何も面倒は見てくれない。
854デフォルトの名無しさん:2009/06/06(土) 12:36:29
ポインタとサイズの組み合わせより、ポインタと列挙型の方がマシじゃね?
855デフォルトの名無しさん:2009/06/06(土) 13:32:52
XEventみたいにするのか?適切な処理にまわすためには、そのための約束事が必要だね。
856デフォルトの名無しさん:2009/06/06(土) 14:09:45
C言語のprintf(const char*,. .....);ってやつオーバーロードしてんじゃないの?

いくつ引数として読み込むか設定してないし
857デフォルトの名無しさん:2009/06/06(土) 14:13:53
可変長引数でggr
858デフォルトの名無しさん:2009/06/06(土) 14:16:37
>>856
最後の ... はスタックがある限り(かな??)引数を食わせれる宣言。可変長引数。
取得も普通の引数より手数を食う。
859856:2009/06/06(土) 14:24:41
>>857,858
ありがとう。勉強してみる
860デフォルトの名無しさん:2009/06/06(土) 14:59:43
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):要素数3のint型配列2つを引数とし、要素ごとの足し算、引き算、掛け算の結果を出力するvoid型のope3関数を作成する。
              main関数においてターミナルから3つの整数a[0], a[1], a[2]を読み込み、更に 3つの整数b[0], b[1], b[2]を読み込み、 ope3関数によって、a[i]+b[i], a[i]-b[i], a[i]*b[i]を出力するプログラムを作成しなさい。
              但しope3では配列を用いない。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月11日 8:00
[5] その他の制限:関数ope3のプロトタイプはvoid ope3(int *, int *)とすること。
861デフォルトの名無しさん:2009/06/06(土) 15:06:55
[1]C言語上級
[2] C言語(C89を基準)の長所と短所を分析し箇条書きに纏めよ。(100個以上挙げること)
例:
項番 長所/短所区分 内容
1 長所      大文字と小文字が区別されるので識別子衝突のリスクが小さい
2 短所      大文字と小文字が区別されるので識別子のミスタイプや取り違えが起こりやすい。
※他のプログラミング言語群よりも抜きん出て高い性質を挙げること
※特定のプログラミング言語を名指ししないこと

[3]Windows/Linux他 /C89処理系
[4]無期限
862デフォルトの名無しさん:2009/06/06(土) 15:20:29
>>861
・すでに枯れていて使える人間自体が多いこと。
・ライブラリが貧弱なこと。逆に個人でも実装できるレベルの標準ライブラリ。
などなど。
863デフォルトの名無しさん:2009/06/06(土) 15:27:38
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):1〜256文字の文字列を入力し、その単語数を出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限:>>739で作成したword関数を用いること。
入力する文字列に2つ以上の連続したスペースはないとする。
入力する文字列の最初と最後はスペースでないとする。
864デフォルトの名無しさん:2009/06/06(土) 15:28:12
[1] 授業単元:3Dプログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9358.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9359.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:visual studio 2008
 [3.3] 言語:C,C++
[4] 期限:2009/06/12 (金曜日)
[5] その他の制限:特にありません

表示せよと書かれてありますがデータを保存するまででOKです
よろしくお願いします
865デフォルトの名無しさん:2009/06/06(土) 17:07:31
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
テストの点数を入力し、90 以上なら‘S’、90 未満80 以上なら‘A’、80 未満70 以上なら‘B’、70
未満60 以上なら‘C’、60 未満なら‘D’、この範囲以外の数値が入力されたらエラーを表示する関
数judge を作成せよ。
ただし、関数原型宣言を用いて、この関数をmain 関数より後に記述すること。
さらに実際にその関数を用いて、実行例のように表示するプログラムを作成すること。


実行例

テストの点を入力: 75

成績: B


[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語: C
[4] 期限: 6/12
[5] その他の制限:
866デフォルトの名無しさん:2009/06/06(土) 17:17:11
>>863
お前が作成したword関数とやらはどこにあるんだよ
867デフォルトの名無しさん:2009/06/06(土) 17:33:09
>>865
これでいいのかな?
#include<stdio.h>
int tensuu;
void judge(void);
int main(void){
printf("テストの点を入力\n");
scanf("%d",&tensuu);
judge();
return 0;
}
void judge(void){
if(tensuu>100||tensuu<0){
printf("エラー");
}
else if(tensuu>=90){
printf("成績:S");
}
else if(tensuu>=80){
printf("成績:A");
}
else if(tensuu>=70){
printf("成績:B");
}
else if(tensuu>=60){
printf("成績:C");
}
else if(tensuu<60){
printf("成績:D");
}
return;
}
868デフォルトの名無しさん:2009/06/06(土) 17:41:59
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):A http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9360.txt
               B http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9362.txt
[3] 環境
 [3.1] OS:Windows Xp
 [3.2] Visual Studio
 [3.3] 言語:C++
[4] 期限: 6/8
[5] その他の制限 A@〜E B@〜Gの付いた行だけを書き換えてできるようにお願いします
869デフォルトの名無しさん:2009/06/06(土) 17:48:44
>>861
文法において、長所は同時に短所でもあり、逆も成り立つ
870デフォルトの名無しさん:2009/06/06(土) 18:02:12
C89の欠点

1.古い
2.古すぎ
3.もうC99だっつーの。
4.なめんな
871デフォルトの名無しさん:2009/06/06(土) 18:03:13
「調べたけど見つかりませんでした」
じゃだめなのかな?w
872デフォルトの名無しさん:2009/06/06(土) 18:09:45
C(C89を基準)の欠点

1.もう20年以上も前からまったく進化していない
2.せっかく10年前にC99が出たのにいまだに乗換えが進まない
3.っていうか学校教育でくらいC99教えろよ
4.おまえだよおまえ
5.何をいまさらC89とか学生に教えてんだよ
6.やめちまえよ
873デフォルトの名無しさん:2009/06/06(土) 18:14:01
とりあえず気になるのは
//が使えないこと
874デフォルトの名無しさん:2009/06/06(土) 18:15:20
C99なら // 使えるよ
875デフォルトの名無しさん:2009/06/06(土) 18:22:21
知ってるよ
876デフォルトの名無しさん:2009/06/06(土) 18:45:52
やたら古いと言われてるが、実際C99使われてる(使える)ケースってあんまりなさそうだが

//コメントやbool、ブロックの先頭以外で変数宣言可あたりは実用的だけど
877デフォルトの名無しさん:2009/06/06(土) 18:47:59
配列周りは今まで出来なかったことが「微妙に」出来るようになってて、
下手に新機能を使うとバグが分かりにくくなりそう。
困憊らが対応しているのかどうかもあわせて検討しなきゃならんし。
878デフォルトの名無しさん:2009/06/06(土) 18:52:09
C99(ISO/IEC 9899 : 1999 (E))に準拠したコードを書くのは素人。
玄人は移植性を考慮してC89(ANSI X3.159-1989)またはC90(ISO/IEC 9899:1990)に準拠したコードを書く。
が、実際は、完全には準拠できなかったりする。
C99C99と言っている人がいるが本当に規格書を読んでいるのか。

私はC++コンパイラでコンパイルする気は無いが、
誰かがソースをC++コンパイラでコンパイルするかもしれないから、
C89準拠にこだわっている。
ただの古い知識をもっているC言語ハッカーのぼやきと思ってくれ。
制限があるから進化する。
879デフォルトの名無しさん:2009/06/06(土) 18:54:58
というか、C++はCと互換性を持たせた言語として作ったのに、
その直後にそれに反する文法作ったC99は、存在そのものが不思議
880デフォルトの名無しさん:2009/06/06(土) 19:02:17
もう10年も前にC99が発表されてるのに
いまだにC89にこだわったり、K&Rにこだわったり…

未来のない言語ですね
881デフォルトの名無しさん:2009/06/06(土) 19:05:09
未来がないのはどの言語も一緒
むしろCほど長生きする言語はもう今後でないだろ
882デフォルトの名無しさん:2009/06/06(土) 19:08:35
K&R、なにそれ、おいしいの。

さすがにK&Rはもう駆逐されていい、危険過ぎる。

ああそうか、>>880は、C++マンセーの人か。
C言語マンセーな私とは道理で意見が合わないわけだ。
これ以上は、スレ違いなので止める。リーナスがなんかいていたスレを思い出したよ。
883デフォルトの名無しさん:2009/06/06(土) 19:09:00
でも、完全互換なんて幻だって、みんな知ってるんだよね。
884デフォルトの名無しさん:2009/06/06(土) 19:09:20
未来の無い言語=共通認識が得られる言語 ではないだろうか?
変化しすぎで それどの仕様での話? なんて確認が不要だもの
885デフォルトの名無しさん:2009/06/06(土) 19:12:28
>>884
結局のところ、C言語だってC89なのかC99なのか確認する必要があるんじゃない?
gccのように一部取り入れている環境の場合は特に厄介なことに。
いっそ最初からまったくC99に準拠しないVCの方が話はシンプル。
886デフォルトの名無しさん:2009/06/06(土) 19:17:47
>>882
>>880じゃないが、早くリタイアしておくれ^^

>>884
今のところその仕様はC99?とか聞かれたことはなく、
C言語といえば暗黙の了解でC89だな

>>885
VC6はひどかったがw
というか、今のVCは明示的にC99と指定しないと厳密に判定してくれるのか?
887デフォルトの名無しさん:2009/06/06(土) 19:24:17
>>866

すいません。
>>760さんが作ってくださったword関数でお願いします。
888デフォルトの名無しさん:2009/06/06(土) 19:24:56
アジャイル・プラクティス p.37、「新しきを学び、古きを捨てましょう」
889デフォルトの名無しさん:2009/06/06(土) 20:15:21
>>867
ありがとうございます
890デフォルトの名無しさん:2009/06/06(土) 20:20:25
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
2問あります。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9363.zip
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C
[4] 期限:6/11
[5] その他の制限:お手数かけますが宜しくお願いします



891デフォルトの名無しさん:2009/06/06(土) 20:30:55
>>890
ふたつめの問題はこれでいいのかな、ひとつめの問題よりかなり難易度が低いから、何か見落としてる気がするが・・・

#include<stdio.h>

int main(void)
{
int a[1];
int b;
printf("整数1を入力\n");
scanf("%d",&a[0]);
printf("整数2を入力\n");
scanf("%d",&a[1]);

if(a[0]<a[1]){
b=a[0];
a[0]=a[1];
a[1]=b;
}
printf("%d,%d",a[0],a[1]);
return 0;
}
892デフォルトの名無しさん:2009/06/06(土) 21:42:25
>>868

@ {{50,85,70,65},{90,80,85,65},{70,75,65,80},{60,95,80,75}};
A for (i = 0; i < PERSON_NUM; i++) {
B for (i = 0; i < PERSON_NUM; i++) {
C personalAverage[i] += record[i][j];
D for (j = 0; j < SUBJECT_NUM; j++) {
E subjectAverage[j] += record[i][j];


@ for( i = 0; i < stn; i++) {
A st[i].student_id,st[i].name,st[i].m_english,st[i].m_math,st[i].m_chemistry,st[i].m_physics);
B st[i].student_id,st[i].name,st[i].m_english,st[i].m_math,st[i].m_chemistry,st[i].m_physics);
C personalAverage[i] = (double)(st[i].m_english+st[i].m_math+st[i].m_chemistry+st[i].m_physics)/SUBJECT_NUM;
D subjectAverage[0] += st[i].m_english;
E subjectAverage[1] += st[i].m_math;
F subjectAverage[2] += st[i].m_chemistry;
G subjectAverage[3] += st[i].m_physics;
893デフォルトの名無しさん:2009/06/07(日) 02:52:13
>>110 (WinMain)キー入力 5月25日
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9364.txt

レシートの裏紙
>>863(9358,9359) 文字列を入力し、その単語数を出力する 6月10日 8:00
>>860 要素ごとの足し算、引き算、掛け算の結果を出力する 6月11日 8:00
>>810-811 再帰を使用して完全2分岐の「深さ」優先探索を行う。 6月8日
>>747 文字列Sが単語Wを含むとき、その単語の前にあるスペースに*を挿入する 6月10日 8:00
>>763 句読点が現れた時点で改行し表示する なし
>>511 一行1000バイト以下のテキストファイルをソートするプログラム。 なし
>>826(9354) マルバツゲームをプレイする為のマルチスレッドネットワークサーバーを作る。 6月7日19:30まで

>>542 3次元三角形一つの透視投影と画像出力.簡易CSGモデルの三角形ポリゴン化. 6月12日
>>766 fork() やexecl() 6月6日午前中
>>604 最小2乗法によりm次の多項式近似を行う 6月5日
>>537 ガウス・ルジャンドル積分のプログラム 6月5日
>>478 ノードの中身を表示しながらトラバースする関数 6月3日9:00
>>381(9282) 複素数のクラス(>>243) 5月30日
>>016(9214) CRUD操作のデータベース 5月23日
>>004(9209) ArithmeticPromotionクラス 5月21日
894デフォルトの名無しさん:2009/06/07(日) 04:57:14
>>891
確かに少し簡単すぎるので何か欠けてる気がします。
テーマには「配列変数の要素を操作する関数」とあるのですが、何とかなりませんでしょうか。
895デフォルトの名無しさん:2009/06/07(日) 07:03:52
C99、C99とわめいている奴は素人かただの趣味グラマ

実際C99の案件なんか一つもねーっつーの

コンパイラもIntel C++ぐらいでしょ100%対応してるのは
896デフォルトの名無しさん:2009/06/07(日) 09:05:55
>>894 何回答者につられてるんだ。
関数にしろって書いてあるのに、少しは自分の頭を考えろ。
897つづき:2009/06/07(日) 10:13:54
>>890 問2の答
#include <stdio.h>
int b[2];
int min_max(int **a);

int main(void) {
  int *data;

  min_max(&data);
  printf("%d,%d", data[0], data[1]);
  return 0;
}
int min_max(int **a) {
  int temp;

  *a = b; // Rent from global area not malloc().
  if(*a == NULL) return 1;
  printf("整数1を入力:");
  scanf("%d", &(*a)[0]);
  printf("整数2を入力:");
  scanf("%d", &(*a)[1]);
  if((*a)[0]<(*a)[1]){
    temp=(*a)[0];
    (*a)[0]=(*a)[1];
    (*a)[1]=temp;
  }
  return 0;
}
898デフォルトの名無しさん:2009/06/07(日) 10:29:12
>>897

申し訳ありません。

Rent from global area not malloc().
↑この関数はまだ習っていないのでもう少し簡単にしていただけ無いでしょうか?
899デフォルトの名無しさん:2009/06/07(日) 11:01:39
>>897
どう見ても朝釣りです。ありがとうございました。
// *a = bって*a = &b[0]じゃないとエラー出ると思うんだが
900デフォルトの名無しさん:2009/06/07(日) 11:08:07
>>899
897じゃないけど、でないよ
むしろ何でエラーだと思うか疑問だ
ポインタ記号とか&, []とか意味ちゃんとわかってるか?
901デフォルトの名無しさん:2009/06/07(日) 11:12:23
カオスw
902デフォルトの名無しさん:2009/06/07(日) 11:29:19
//もっと簡単に書いてやりなよ
#include <stdio.h>
int min_max(int a[2]);

int main(void) {
int b[2];

printf("整数1を入力:");
scanf("%d", &b[0]);
printf("整数2を入力:");
scanf("%d", &b[1]);
min_max(b);
printf("%d,%d", b[0], b[1]);
return 0;
}
int min_max(int a[2]) {
int temp;

if(a[0]<a[1]){
temp=a[0]; a[0]=a[1]; a[1]=temp;
}
return 0;
}
903デフォルトの名無しさん:2009/06/07(日) 11:31:11
ごもっとも
904デフォルトの名無しさん:2009/06/07(日) 12:00:43
>>902
有難うございます。
これなら問題ありません。

課題1はできますでしょうか?
905デフォルトの名無しさん:2009/06/07(日) 12:10:30
>>902じゃないけどやってみた
#include <stdio.h>
#define MAX 5
int main(void)
{
int a[5],sum=0,i;
for(i=0; i<MAX; i++){
printf("整数%dを入力:",i+1);
scanf("%d",&a[i]);
}
for(i=0; i<MAX; i++)
sum+=a[i];
printf("平均値は %f",(double)(sum/MAX));
return 0;
}
906デフォルトの名無しさん:2009/06/07(日) 12:20:22
>>905
・配列変数内の数値の平均値を実数型で返す関数aveを作成せよ。
・constを用いて、関数内で配列変数の中身が書き換えられないようにすること。

この2つの条件が満たされていないみたいです。
申し訳ありませんが、修正を加えていただけませんでしょうかorz
907デフォルトの名無しさん:2009/06/07(日) 12:29:25
十数行程度のプログラム読んで、
数行追記するぐらいやろうとは思わんの?

int ave(int array[]){
 int i;
 for(i = 0; i < MAX; ++i){
}
908デフォルトの名無しさん:2009/06/07(日) 12:35:42
909デフォルトの名無しさん:2009/06/07(日) 12:39:17
>>908
有難うございます。
助かりました。
復習して自分で書けるように頑張ります。
910デフォルトの名無しさん:2009/06/07(日) 12:41:01
Shit+Enterで書き込みになるのか(´・ω・`)
そして遅れをとる(゚д゚)
911908:2009/06/07(日) 12:41:14
>>909
mainのしょっぱなの宣言の int a[5],i; → int a[MAX],i; に変更しておいてくれ
912デフォルトの名無しさん:2009/06/07(日) 12:54:13
>>893が列挙してくれた宿題、
依頼人は回答を待っている?
913デフォルトの名無しさん:2009/06/07(日) 14:14:16
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):整数を読み込んでその約数を表示しろ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:do-whileまで(while文for文は使用不可)
よろしくお願いします
914デフォルトの名無しさん:2009/06/07(日) 14:24:27
>>913
#include<stdio.h>

int main(void){
int a,b=1;
printf("数値を入力してください\n");
scanf("%d",&a);
do{
if(a%b==0){
printf("%d\n",b);
}
b++;
}while(b<=a);
return 0;
}
915デフォルトの名無しさん:2009/06/07(日) 14:27:40
>>914
ありがとうございます
そこにb++を置かなきゃいけなかったのか
916デフォルトの名無しさん:2009/06/07(日) 15:12:45
>>892
ありがとうございます
家の環境がVisual C++なのですがBのほうで
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9366.txt
といれるとエラーがでてしまいます
なにか加え間違いがあるか見てもらえないでしょうか?
917デフォルトの名無しさん:2009/06/07(日) 15:20:29
>>916
どういうエラー?
そのままコピペで通ったけど。(end_mainはコメントアウトした)
918デフォルトの名無しさん:2009/06/07(日) 15:22:22
[1] 授業単元:情報リテラシ
[2] 問題文(含コード&リンク)
1〜100の擬似乱数を発生させ、
自分で入力した任意の数字が何回目で同じになったのかと、
それまでの乱数の合計を求め画面に
表示させ終わらすプログラムを作りなさい。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語: C
[4] 期限:6月9日13時まで
[5] その他の制限: 特になし

よろしくお願いします。
919デフォルトの名無しさん:2009/06/07(日) 15:37:22
920デフォルトの名無しさん:2009/06/07(日) 15:46:16
C言語翻訳乙といいたいところだが、得体の知れない応用分野をコーディングするのには
それなりに注意が必要だからな。
921デフォルトの名無しさん:2009/06/07(日) 15:52:29
>>918
> それまでの乱数の合計を求め画面に
ここがよく分からない。乱数の合計とは、具体的に
どのように合計されたもの?
922デフォルトの名無しさん:2009/06/07(日) 16:06:14
>>917
end_mainをはずしていなかったため、予期せぬEOFが検出ということでした。
ありがとうございます
923デフォルトの名無しさん:2009/06/07(日) 16:07:01
>>921
合計と言うからには通常、足されたものだろう。
数値入力 n
乱数合計 ar
乱数発生 r
rとnが同じなら終了。違うなら ar += r;
ってことだろ。
924918:2009/06/07(日) 16:11:19
>>921

こんな感じです

入力した数が5だったとしたら

3 1 2 10 4 2 5 

合計27って感じです。
925デフォルトの名無しさん:2009/06/07(日) 16:12:18
乱数は入力毎に違うものにするのかな?
926デフォルトの名無しさん:2009/06/07(日) 16:20:51
>>918
こういうことかな?

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

int GetRandom(int min,int max);

int main(void)
{
int a,b,c=0,d=0;
srand((unsigned int)time(NULL));
printf("数値を入力してください\n");
scanf("%d",&a);

while(a!=b){
b=GetRandom(1,100);
c=c+b;
d++;
}
printf("%d回目で一致しました。乱数の合計値は%dです。",d,c);

return 0;
}

int GetRandom(int min,int max)
{
return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX));
}
927デフォルトの名無しさん:2009/06/07(日) 16:35:39
>>918 乱数は重複しない?
928 ◆p3KE2pR6J6 :2009/06/07(日) 16:36:25
>>912
>>542についてですが、待っています。
ファイルがなくなってしまったみたいですが……
929デフォルトの名無しさん:2009/06/07(日) 16:41:26
[1] 授業単元:グラフアルゴリズム
[2] 問題文(含コード&リンク):
  トポロジカルソートの正当性を述べよ。つまり、アルゴリズムによって
  正しくソートできていることを示せ。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月8日17:00まで
[5] その他の制限:
  アルゴリズム
  グラフGに対して深さ優先探索を行い、各頂点uの終了時間f[u]を計算し、
  頂点uのすべての隣接頂点に対する操作の終了直後にuをソート用の線形リストの先頭に挿入する。

  グラフは有効アサイクリックグラフです。
930デフォルトの名無しさん:2009/06/07(日) 17:25:55
>>860 要素ごとの足し算、引き算、掛け算の結果を出力する
#include <stdio.h>
#define N 3 /* 要素数 */
void ope3(int *, int *);
int main() {
  int i, a[N], b[N];
  for(i=0;i<N;i++) {
    printf("a[%d]: ", i);
    scanf("%d", &a[i]);
  }
  for(i=0;i<N;i++) {
    printf("b[%d]: ", i);
    scanf("%d", &b[i]);
  }
  ope3(a, b);
}
void ope3(int *data1, int *data2) {
  int i;
  printf("\n足し算=");
  for(i=0; i<N; i++)
    printf("%d ", *(data1+i) + *(data2+i));
  printf("\n引き算=");
  for(i=0; i<N; i++)
    printf("%d ", *(data1+i) - *(data2+i));
  printf("\n掛け算=");
  for(i=0; i<N; i++)
    printf("%d ", *(data1+i) * *(data2+i));
}
931918:2009/06/07(日) 17:42:33
>>926
作っていただき有難うございます。
家だとコンパイラソフトが無いので、明日学校で試してみます。
本当にありがとうございました。
932918:2009/06/07(日) 17:43:28
>>927
乱数は毎回ランダムで変わり、重複の可能性もありです。
933デフォルトの名無しさん:2009/06/07(日) 17:47:04
>>931
ごめんなさいdの初期値は0じゃなくて1のほうが正しいかも
934デフォルトの名無しさん:2009/06/07(日) 18:04:48
>>930
ありがとうございます!
935デフォルトの名無しさん:2009/06/07(日) 18:09:03
>>931
int a,b,c=0,d=0;

do {
b=GetRandom(1,100);
c=c+b;
d++;
} while(a!=b);
printf("%d回目で一致しました。乱数の合計値は%dです。",d,c);
936デフォルトの名無しさん:2009/06/07(日) 19:43:47
C++で半角文字列の構文解析をしたいのですが
何か参考になるサイトなどは知らないでしょうか?
[0-9]
[a-Z]
[{()}.,]
{改行\n空白スペース\t]
最低限この文字は認識させたく思っています.
937デフォルトの名無しさん:2009/06/07(日) 19:56:31
>>936
boost::spiritとか?
使ったことないから詳しくは知らないけど
938デフォルトの名無しさん:2009/06/07(日) 20:55:37
>>928
>>542
あー、それやろうと思ったけど確かにファイル削除されてるんだよね…


って、ボケ〜
ファイル無いの確認しておいて、待ってます、だぁ〜?
939デフォルトの名無しさん:2009/06/07(日) 21:02:26
淡い思い出に期待して待ってるのさ
940デフォルトの名無しさん:2009/06/07(日) 21:49:49
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク): 高速化(以下ソースと詳しい問題文)
http://www1.axfc.net/uploader/He/so/229449.zip
[3] 環境
 [3.1] OS: Linux, Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 6月10日
[5] その他の制限: 特になし

よろしくお願いします。
941 ◆p3KE2pR6J6 :2009/06/07(日) 22:06:21
>>938
本当そうでした、すみません!また上げたのでよろしくお願いします!

http://u1.getuploader.com/MTG/download/2/kadai.zip
942デフォルトの名無しさん:2009/06/07(日) 22:08:09
>>940
void color_to_gray(UCHAR gray[][DIM2], UCHAR data[][DIM2][DIM3], int n_gyou, int n_retu)
の高速化

gray[g][r]=(UCHAR)(tmp/3.0+0.5); /* 平均値を四捨五入 */

gray[g][r]=(UCHAR)((tmp*2+1)/6); /* 平均値を四捨五入 */
943デフォルトの名無しさん:2009/06/07(日) 22:09:13
このスレ的には以下にアップしてもらったほうが都合がいい。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
944 ◆p3KE2pR6J6 :2009/06/07(日) 22:15:55
>>943
すみません、もちろん最初はそちらにアップロードしようと思ったのですが、容量が100KBまでなのでアップロードできなかったんです。
945デフォルトの名無しさん:2009/06/07(日) 22:18:09
あー。それはすまんかった。
946デフォルトの名無しさん:2009/06/07(日) 23:23:52
>>940
>>942で多少は高速化できている。

プロファイル取ったら、70%はedge_to_colorに費されているので、
こちらを高速化した方が効果があると思う。
具体的には、違和感のあるインデントの部分とかのループを展開したり、
ジャンプ(switchやif-else)を無くせるとことは無くしたり、
変数をレジスタに割り当てたり(使い過ぎ注意な)、配列の次元を下げたり、
何度も参照されている配列の要素をレジスタの一時変数にに変えたりすれば、
若干速くなると思う。-O2は、ループの展開はしないらしい。
947942:2009/06/07(日) 23:48:43
>>942 は間違ってたので訂正

void color_to_gray(UCHAR gray[][DIM2], UCHAR data[][DIM2][DIM3], int n_gyou, int n_retu)
{
int i, size;
UCHAR *s, *d;

size=n_gyou*n_retu;
s=(UCHAR*)data;
d=(UCHAR*)gray;
for(i=0;i<size;i++){
d[i]=(((int)s[0]+s[1]+s[2])*2+3)/6; // この部分は +3 が正解
s+=3;
}
}
948864:2009/06/07(日) 23:51:15
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9370.zip
途中までやってみたのですがつまりましたorz
宜しくお願いします。
949942:2009/06/07(日) 23:52:17
>>940
>>947 とこれの併用で所要時間は 1/5 弱になった
void edge_to_color(UCHAR ans[][DIM2][DIM3], UCHAR gray[][DIM2], int keisuu, int n_gyou, int n_retu)
{
int g,r,m;
int edge[2]; /* edge[0]:横方向勾配値,edge[1]:縦方向勾配値 */
int val[3]; /* 出力画像の画素値算出に利用する配列 */
for(g=1;g<n_gyou-1;g++) /* 1画素ずつ処理する */
for(r=1;r<n_retu-1;r++) /* ただし,画像の最外周部は算出しない(画素値は0となる) */
{
edge[0]=-gray[g-1][r-1]+gray[g-1][r+1]-gray[g+1][r-1]+gray[g+1][r+1]+(-gray[g][r-1]+gray[g][r+1])*2;
edge[1]=gray[g-1][r-1]+gray[g-1][r+1]-gray[g+1][r-1]-gray[g+1][r+1]+(gray[g-1][r]-gray[g+1][r])*2;

val[0]=val[1]=val[2]=0;
if(edge[0] > 0) /* 勾配値の符合に応じて画素値に勾配値を加減算 */
val[RED] += edge[0];
else
{
val[BLUE] -= edge[0];
val[GREEN] -= edge[0];
}
if(edge[1] > 0)
val[GREEN] += edge[1];
else
{
val[RED] -= edge[1];
val[BLUE] -= edge[1];
}
#define CLIP(x) ((x)<256?(x):255)
for(m=0;m<3;m++) ans[g][r][m]=CLIP(val[m]*keisuu);
}
}
950デフォルトの名無しさん:2009/06/07(日) 23:56:45
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):ポインタ配列
char *month[ ] = { "None", "January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December" };
を用いて1〜12の数値を入力してJanuary〜Decemberを返す関数GetMonthを作成せよ.
[3] 環境
 [3.1] OS:WindowsVistaSP2
 [3.2] Visual stdio2008
 [3.3] 言語: C
[4] 期限:2009年6月8日13時まで
[5] その他の制限: できるだけ基本で
951デフォルトの名無しさん:2009/06/08(月) 00:10:41
>>950
こんな感じで。動作は保障しない。

#include <stdio.h>

char* GetMonth(int M){
    static char* month[] = { "None", "January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December" }; 
    if(M<1) return month[0];
    if(M>=13) return month[0];
    return month[M];
}

int main(){
    int i=0;
    for(i=0;i<14;i++){
        printf("%s\n",GetMonth(i));
    }

    return 0;
}
952デフォルトの名無しさん:2009/06/08(月) 00:35:54
>>542
>>941
え〜と、俺パワポ持ってないからワードの内容でやっつけて良いのか?

と言うか、俺は会社のライブラリやら3Dソフトのプラグイン扱ってるから
レンダラー作る感覚で面白いから手間かけてやっても良いが…
この内容で人のパクリだと、キミの立場がやばいんじゃねw
953デフォルトの名無しさん:2009/06/08(月) 00:37:52
そんなの気にする奴はここには来ない
954デフォルトの名無しさん:2009/06/08(月) 00:43:09
>>542
それなりに大きなプログラムになるので、俺はCでは書けないなぁ。
C++使えばがんばればできるかも試練が。
Cの設計は苦手だ。

これだけではちょっとなので、以下のぺーじを見つけた。ぐぐったんですよ。
ttp://homepage2.nifty.com/skimp-studio/htm/crawl_top.htm
透視変換とか書いてあるから、俺は参考になったよ。
955950:2009/06/08(月) 00:54:33
>>951
実行すると数字打つまでもなく全部表示されちゃいます・・・
956デフォルトの名無しさん:2009/06/08(月) 01:00:53
>>951
>動作は保障しない。
ワロタw

とはいえ、修正するのは2行程度だろ
957 ◆p3KE2pR6J6 :2009/06/08(月) 01:34:56
>>952
そのまま出すことはないと思うので、大丈夫です(参考にさせて欲しいので)。あと、もし可能ならで構わないのですが、可能な限り簡単なプログラムにして欲しいです。よろしくお願いします!
>>954
はい、かなり面倒なプログラムになります。サイトを探して頂きありがとうございました、後で見させてもらいます。
958デフォルトの名無しさん:2009/06/08(月) 01:39:25
>>951
横から質問だけど
文字列を static にしてるのは何か理由があるの?
どっちかというと const な気がするけど(速度面を見ても)
959デフォルトの名無しさん:2009/06/08(月) 01:51:02
Cにはconstないんじゃね?
960デフォルトの名無しさん:2009/06/08(月) 02:03:24
>>747 文字列Sが単語Wを含むとき、その単語の前にあるスペースに*を挿入する
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9371.txt

>>951
int main() {
int i=0;
scanf("%d",&i);
printf("%s\n",GetMonth(i));
}
961952:2009/06/08(月) 02:16:58
>>957
すまんが、俺も夜な夜なの暇つぶしでやるんで本格的にやるつもりは無いw
課題の条件を満たせば、面倒な3Dの処理は固定値や固定処理ではしょるかも知れん
えーと、週末までだったね、多分、次スレになるな

あとCSGモデルってWEBで探して勝手に解釈するけど定義ってあるの?
俺のイメージだと、drawSphere(引数は球の各指定値...)見たいにすると
ポリゴンで出来た球がレンダリングされるって感じだけど…合ってる?
962デフォルトの名無しさん:2009/06/08(月) 07:10:03
>>961
すみません、寝てしまいました。はい、とりあえず課題の条件を満たしていれば大丈夫だと思います。

CSGモデルの定義ですか……資料をPDFに変換したので、良ければそちらを見て貰えればありがたいです(おそらくはその考え方で合ってると思います)。

ttp://u1.getuploader.com/MTG/download/5/shiryo.pdf

(100KBを越えてしまったのでまた別のアップローダーを使いました、すみません)
963 ◆p3KE2pR6J6 :2009/06/08(月) 07:11:59
トリップ忘れましたが、>>962は私です。
964デフォルトの名無しさん:2009/06/08(月) 08:09:17
>>951じゃないけど

>>958
その関数が何回か呼ばれることを想定してるんじゃないの?
同じ値を何度もセットするのは無意味だからね。
ただ、問題(>>950)の制約上、monthがポインタ(リテラル文字列のアドレス)の配列として宣言されてるからconstは付けるべきだと思う。
ところでconstだと速度面にどう関係するの?

>>959
いつの仕様だ?
965デフォルトの名無しさん:2009/06/08(月) 11:39:31
>>958は関数内のstatic知らなくて質問してるんじゃないかな。
これは>>950と速度変わらないと思うけど。
#include <stdio.h>
const char* month[] = { "None", "January", "February", "March", "April", "May",
  "June", "July", "August", "September", "October", "November", "December", "None" };
const char* GetMonthName(int M) {
  return month[M<=0?0:(M>=13?13:M)];
}
int main(){
  int i;
  scanf("%d",&i);
  printf("%s\n", GetMonthName(i));
  return 0;
}
966デフォルトの名無しさん:2009/06/08(月) 13:00:00
>>919
ありがとうございました。
967デフォルトの名無しさん:2009/06/08(月) 13:42:42
>>958, 965
この程度の処理で速度云々なんて語れない気がするが、
とりあえず "%s\n" なんて形でprintf使うならputsにしろといっておく。
-O4 つけてコンパイルすれば puts に変えてくれると思うが。

>>950 の [5] に反する気がする気がするけど scanf も消してみた。

#include <stdio.h>

inline const char* GetMonth(int n){
static const char *month[] = {"None", "January", "February", "March", "April", "May",
"June", "July", "August", "September", "October", "November", "December"};
// if(n < 1 || 12 < n) return month[0];
return month[n];
}
int main(){
int n = 0;
gets((char*)&n);
n = (n%85-2)%46;
puts(GetMonth(n));
return 0;
}
968951:2009/06/08(月) 13:51:41
>>955
あー、文章読み違えた見たいだ。すまんね。不安なら>>965の人のやつ使ってくれ。

>>static云々。
なんとなくテンポラリアドレスを返さないように気分でつけただけです。
文字列リテラルは大丈夫だった気がしたんですけど、まぁ、気分ですねぇ。
いろんな憶測が飛んで面白いです。
969デフォルトの名無しさん:2009/06/08(月) 15:20:57
[1] c++
[2](1)一次元配列 a[1]〜a[50]に、0〜100点までの点数を入力した後、60点
以上点数のみをa[35]=65,a[45]=67のように表示しなさい。
(2)また前問で今度は60点以上の点数をb[1]〜b[50]に格納してからb[35]=65,a=[45]=47
と表示しなさい。
[3.1] OS:XP
 [3.2] コンパイラ名とバージョン: turbo c 5.01
 [3.3] 言語: c++
[4] 期限:今週の日曜日まで
[5] 配列まで習った。
970デフォルトの名無しさん:2009/06/08(月) 15:35:25
>>969
ひとつめ
#include<stdio.h>

int main(void){
int a[50];
int i,j;
for(i=1;i<=50;i++){
printf("点数を入力してください\n");
scanf("%d",&a[i]);
}
for(j=1;j<=50;j++){
if(a[j]>=60){
printf("a[%d]=%d,",j,a[j]);
}
}
return 0;
}
971デフォルトの名無しさん:2009/06/08(月) 15:45:07
おいw
972デフォルトの名無しさん:2009/06/08(月) 15:45:41
ふたつめ
#include<stdio.h>

int main(void){
int a[50];
int b[50];
int i,j,k;
for(i=1;i<=50;i++){
printf("点数を入力してください\n");
scanf("%d",&a[i]);
}
for(j=1;j<=50;j++){
if(a[j]>=60){
b[j]=a[j];
}
}
for(k=1;k<=50;k++){
if(a[k]>=60){
printf("b[%d]=%d,",k,b[k]);
}
else{
printf("a[%d]=%d,",k,a[k]);
}
}
return 0;
}
973デフォルトの名無しさん:2009/06/08(月) 15:48:31
これはひどい
974デフォルトの名無しさん:2009/06/08(月) 15:54:48
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9372.txt
[3] 環境
 [3.1] OS: Windows XP

 [3.3] 言語: C言語
[4] 期限:6月9日午前10時まで
[5] printf、scanf、for文、while文、関数などは習いました
  明日までと急で申し訳ないのですがよろしくお願いします
975デフォルトの名無しさん:2009/06/08(月) 16:03:37
>>974 問題@

#include <stdio.h>
int compare(int x,int y);
int main(void)
{
int x,y;
printf("x:");
scanf("%d",&x);
printf("y:");
scanf("%d",&y);
switch(compare(x,y)){
case 1:
printf("x > y");
break;
case 0:
printf("x = y");
break;
case -1:
printf("x < y");
break;
}
return 0;
}
int compare(int x,int y){
if(x>y) return 1;
else if(x==y) return 0;
else if(x<y) return -1;
}
976デフォルトの名無しさん:2009/06/08(月) 16:18:29
977デフォルトの名無しさん:2009/06/08(月) 16:24:16
divがintのわけねーだろw
978デフォルトの名無しさん:2009/06/08(月) 16:26:55
[1] 授業単元:プログラムの基礎
[2] 問題文(含コード&リンク):scanf)関数により数字を文字列として受け取り、それを小さい桁から表示するプログラムを書け.([例]12345と入力すると54321と表示する)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C言語
[4] 期限: ([6月8日17:00まで]
979デフォルトの名無しさん:2009/06/08(月) 16:35:39
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):ターミナルから英字だけからなる1つの文字列Sと2つの文字c0,c1を読み込む。
               文字列Sがc0を含むときc0をc1に入れ替えるプログラムを作成しなさい。
               なお、文字列の長さは256文字までとする
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月10日 0:00
[5] その他の制限:ポインタを使うこと。

aaabbbccc /*文字列*/
a A /*文字2つ*/
AAAbbbccc /*実行結果*/
980デフォルトの名無しさん:2009/06/08(月) 16:38:43
>>974の問題3を作ってみたんだけど、nの値がちょっと大きいとオーバーフローしちゃって正しい結果にならない(13くらいからアウト)
なんとかならないのかなあ

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9374.txt
981デフォルトの名無しさん:2009/06/08(月) 16:42:15
>>974
>>976

double div(int x,int y){
return (double)x/y;
}



double div(int x,int y){
return (double)x/y;
}

に変更それにあわせて6行目、22行目も変更してくれorz
982デフォルトの名無しさん:2009/06/08(月) 16:48:21
13!>2^32>12!だから32ビットOSでは13以上の階乗を直接扱えない
983デフォルトの名無しさん:2009/06/08(月) 16:50:44
>>980
階乗使わないで加算の再帰にすれば大きな数字でもいけるが、
計算時間が半端じゃなくかかるようになる。
984デフォルトの名無しさん:2009/06/08(月) 16:51:53
>>980
factorial 作れ、という時点で整数では溢れるからしょうがないのでは。
factorial 経由しなければもうちょっとは行けるだろうけど。
long int 使っても状況は変わらんだろうし。
985デフォルトの名無しさん:2009/06/08(月) 16:52:19
>>983
しかしこれでは実用性が低いから完全とは言えなさそうだと思う
20個の中から15個とか、そういう計算もできないとダメって言われそう

まあ問題文の要件は満たしてるからOKなんかな
あなたが解けない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++の宿題片付けます 126代目
http://pc12.2ch.net/test/read.cgi/tech/1242655611/
987デフォルトの名無しさん:2009/06/08(月) 17:05:07
BCDを使えば10万桁とかでも計算できるぞ^^
めんどいからやらんが。
988デフォルトの名無しさん:2009/06/08(月) 17:08:07
[1] c++
[2]a[1]〜a[50]順次数字1〜50までを格納したあとa[1]=1・・・a[50]=50と表示しなさい。
ただし横に10列に表示しなさい。
[3.1] OS:XP
 [3.2] コンパイラ名とバージョン: turbo c 5.01
 [3.3] 言語: c++
[4] 期限:今週末まで
989デフォルトの名無しさん:2009/06/08(月) 17:10:51
>>978
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[256],tmp;
int i,j,len;

printf("数字入力:");
scanf("%256[^\n]%*c",str);

len=strlen(str);

for(i=0; i<len-1; i++)
for(j=i+1; j<len; j++)
if(str[i]<str[j]){
tmp=str[i];
str[i]=str[j];
str[j]=tmp;
}

printf(str);

return 0;
}
990デフォルトの名無しさん:2009/06/08(月) 17:20:30
>>988
#include<stdio.h>
int main(void){
int a[50];
int i,j;
for(i=1;i<=50;i++){
a[i]=i;
}
for(j=1;j<=50;j++){
printf("a[%d]=%d,",j,a[j]);
if(j%10==0){
printf("\n");
}
}
return 0;
}
991デフォルトの名無しさん:2009/06/08(月) 17:29:29
>>990
それだめでしょ。a[51]にしとかないと index が overrun してる。
この問題自体 index 1〜50 ってところがかなりセンス悪いとは思うが。
あと、 c++ っぽくした方が良いのかな。整形してない(列そろうように)

#include <iostream>
using namespace std;
int main(){
const int N(50);
int* a = new int [N+1]; // ← index が気分悪い
for(int j=1; j<=N ; ++j)
a[j] = j;
for(int j=1; j<=N ; ++j){
cout<<"a["<<j<<"]="<<a[j]<<" ";
if( j%10==0 )
cout<<endl;
}
}
992デフォルトの名無しさん:2009/06/08(月) 17:32:29
993デフォルトの名無しさん:2009/06/08(月) 17:38:15
>>991
メモリの開放忘れてますよ。
最後に delete [] a;
994デフォルトの名無しさん:2009/06/08(月) 17:40:27
>>993
サンクス。忘れてた。普通 vector 使ってるからなぁ。
ただ、この場合は STL 使わん方が良いかと思って配列使ってしもうた。
995デフォルトの名無しさん:2009/06/08(月) 18:17:41
vector を使うなら、ぜひ生成は generate で、表示は copy で(重いだけ)
996デフォルトの名無しさん:2009/06/08(月) 18:32:45
>>985
こういう風にすればオーバーフローが起こりにくいけど、factorialを使ってないからダメか。
int combination (int n, int r) {
int a = 1, k = 1;
r = min(r, n - r);
while (k <= r) {
a *= n--;
a /= k++;
}
return a;
}

32ビットintの場合、30C14はいけるけど、30C15は途中でオーバーフローして駄目。
結果はオーバーフローしないんだけどね。
997デフォルトの名無しさん:2009/06/08(月) 18:46:24
ksk
998デフォルトの名無しさん:2009/06/08(月) 18:47:54
ksk
999デフォルトの名無しさん:2009/06/08(月) 18:54:15
ksk
1000デフォルトの名無しさん:2009/06/08(月) 18:54:41
1000なら皆平和
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。