ぼるじょあがC/C++の宿題を片づけますYO! 20代目

このエントリーをはてなブックマークに追加
1ぼるじょあ ◆yBEncckFOU
(・3・)エェー このスレに居座ることにしたC++房のぼるじょあですYO!
わからない宿題を片づけますYO!

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、エラーなどは適切に書きましょう
 全文を書いてしまうか、分かりやすくまとめましょう。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10
2デフォルトの名無しさん:04/01/28 00:36
(・Σ・)エェー ぼるじょあですかYO!
4答えてた人:04/01/28 00:39
ぼるじょあはやめろというたろ?
もうこねぇよ。
RL直列回路に直流電圧Eを接続したときの電流iの過渡現象は次の微分方程式の解と
して与えられる。
di/dt=1/L(E-Ri) , i|0|=0・・・(1)
また(1)の解析解は i(t)=E/R(1-e^-Rt/L)・・・(2)
となることが知られている。E=1(v) R=1(Ω) L=2(H) h=0.01として次の問題に答え
なさい。
問題1 式(2)においてtを与えるとiが計算される。tk=k*hとしてk=0から1000
まで(tk,i(tk))を出力するプログラ     ムを作れ
問題2 式(1)をオイラー法まで数値解析し、tk=k*hとして(tk,i(tk))をk=0から
1000まで出力するプログラムを作     れ

step1:t=0,i=0とおく
step2:tとiを印刷する
step3:i`←i+f(t,i)*h(iの更新)
step4:t`←t+h(tの更新)
step5:i←i`,t←t`(変数の置き換え

おながいします C言語で関数と繰り返し習った程度なのですが解けとのことなので
65:04/01/28 01:05
前スレでお願いします_| ̄|○
前スレでお願いします|_
          _|
          ○
Visual C++ 6.0JでCLAPACKの使い方が分からずお手上げ状態です。
ttp://www.alab.t.u-tokyo.ac.jp/~bond/clapack.html
上記のHPの通りにインストールして
ttp://www.a.mei.titech.ac.jp/~yonishi/Program/CLapack/Example/match_pump/match_pump.c
のプログラム例をコンパイル、ビルドしたところ
「error LNK2001: unresolved external symbol "int __cdecl dgesv_〜」
のエラーが出てしまいます。どなたか分かる方が居たらよろしくお願いします。
9デフォルトの名無しさん:04/01/28 06:33
前のスレでパスされたので、こちらでお願いします。

1.丸、正方形、長方形 を選択
2.大きさを入力

http://up.isp.2ch.net/up/2e6bb62a6ceb.exe
C++ の初級授業で出された宿題なのですが、
これと同じ機能を持つプログラムを組まなければ成りません。

>>9
文章で問題を書けないですか?
exe見たけど英語が分からないですし、どう入力すれば動作するのかも分からん。
>>10 すいません、ほんと初心者なので文章での説明もあやふやですが。

------------------------------------------------------------
このプログラムは三種類の形を * によって描きます。

S[num]      インプットされた数値[num]の大きさの正方形を描きます。
R[num1][num2] 幅[num1]奥[num2]の長方形を描きます。
C[num]      半径[num]の円を描きます。

-----------------------------------------
こういったメニューが現れて、
1.S,R,Cを選び、
2.数値を入力すると、 * で図形を描くのです。

ご理解いただけましたか?
12崖っぷち:04/01/28 13:30
誰か助けてください!
大学でレポートが出されまして、これが明日までに出来ないと留年してしまいます!
どなたか宜しくお願いします・・・・(T_T)

配列Aのデータをソートせよ。ただしAの入力は Void getdata(int *n,double *a)
を呼び出せば入力できるものとする。

っていうものです。このままでは本当に留年が確定してしまうのでどなたか助けてください・・・・・


>>11
理解しました。今から作ります。
14デフォルトの名無しさん:04/01/28 13:52
ttp://www.vector.co.jp/soft/win95/game/se289095.html
↑のソフトを他のゲームでも使えるように出来ませんか?
コードも自分で登録できるようなソフト作ってください。
15デフォルトの名無しさん:04/01/28 13:52
あの・・・、他の方の質問とは次元が違うかもしれませんが
教えていただけないでしょうか?


問題1
「sum=1+2+3+・・・・+n」をfor文を用いて計算し、
 和sumをメッセージボックスに表示する。

問題2
Nを入力して、数列の和Sを計算するプログラムを作成しなさい。
S=1+(1+2)+(1+2+3)+・・・+(1+2+・・・+N)

どちらもC++6,0です。
>>11
たとえば

R R

と入力された時は、
どういう動作を取ればよいの?
>>12
それだけの説明では、
せいぜい「qsort を使え」というぐらいしか
教えようが無い・・・
>>16
*******************
*******************
これがいっぱい出てきますね。
エラーメッセは無くても良いと思います。
よろしくお願いします。
>>15

int sum = 0;
for (int i = 1; i <= n; i++)
{
 sum += i;
}
MessageBox(NULL, "答え", sprintf("%d", sum), MB_OK);


とかでいいんじゃないかな

2もfor文でやるの?

int s = 0;
for (int i = 0; i < n; i++)
{
 for (int j = 1; j <= i; j++)
 {
  s += j;
 }
}

かな、、(1+2+・・・)を表現するならわけたほうがいいのか?
2019:04/01/28 14:27
あ、、、2のi のfor文も、(int i = 1; i <= n; i++) にしといて、、、
2119:04/01/28 14:28
あとsprintfの戻り値は文字数で、最初にバッファいるか・
スクリプトのクセが抜けんな〜・・・
銀行の窓口で,US $ から日本円へ両替するとき
(キーボードからは,ドルの金額を入力する)に,
銀行員が支払うのに適当な紙幣,硬貨の
組み合わせを表示するプログラムを作成せよ.
なお,最初に為替レート(例: 1 $ =120 *現在118〜122)を入力し
その値を使って繰り返し窓口で計算できるものとする.

っていう宿題が出たんですが。
お願いします。
2310&&13:04/01/28 14:48
ギブアップ!入力のチェックがマンドクサイ。
S 4
R 5 8
V
C 8 B
Q R 4 7
S4
R58
等OKな訳のパターンが多すぎ。
面倒なものを頼んでしまったようですね、すみません。
しかし、これ第2回目の宿題です。一応ここまで出来ましたが、
正方形ではなく、直線になってしまいます。算数の問題でしょうか?

#include<iostream>

using namespace std;

int main()
{
char choice;
int num1,num2;

cout<<"this program prints out various geometric shapes"<<endl;

cout<<"S [num1] --prints a square with side[num1]"<<endl;
cout<<"R [num1][num2] --prints a rectangle with lenght[num1] and width[num2]"<<endl;
cout<<"C [num1] --prints a circle with radius[num]"<<endl;

cin>>choice;
if(choice>='s')
cout<<"side?"<<endl;
cin>>num1;
for (int j=1; j<=40-4/2;j++)
cout<<' ';
for (int k=41-4/2;k<=41-4/2+4;k++)
cout<<'*';
cout<<endl;
期限切ったり、単位が…留年が…って言ってると回答がないねw
2610&&13:04/01/28 16:35
>>24
Cだけど、表示する部分のみは作ってあったから参考にどうぞ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=130
>>25
もちろんそれもあるけど、単に答える人間が減ってるだけではないかと。
週末が人多いからね。
>>22
void bunkai(long kingaku, int num_kenshu, int kenshu[], int maisu[])
{
  int i;

  for (i=0; i<num_kenshu; i++) {
    maisu[i] = kingaku / kenshu[i];
    kingaku %= kenshu[i];
  }
}
続き

#define NUM_KINSHU 9

main()
{
  int kenshu[NUM_KINSHU] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1};
  int maisu[NUM_KINSHU];
  int i;
  long yen, doller;
  int rate;

  printf("レート: ");
  scanf("%d", &rate);
  for (;;) {
    printf("\n\nなんぼ?: ");
    scanf("%ld", &doller);
    yen = doller * rate;
    bunkai(yen, NUM_KINSHU, kenshu, maisu);
    printf("受領: $%d (=\\%d)\n", doller, yen);
    for (i=0; i<numberof(kenshu); i++) {
      if (maisu[i] != 0)
        printf("\\%-5d × %d 枚\n", kenshu[i], maisu[i]);
    }
  }
}
30デフォルトの名無しさん:04/01/28 18:35
1から8までの数字が書いてある8つの正方形のこまが3×3の空間に下図左の
ように置いてあります。0の所に駒を滑らせて入れる操作を繰り返して下図
右の終了状態を作りたい。これを解くプログラムをC言語で作成してください。
内容説明していただけるとありがたいです。
  初期状態      終了状態
  
  283       123        
  164       804
  705       765

これが、できなくて困ってます。
助けてください。お願いします。
オレニマカセロ!
32デフォルトの名無しさん:04/01/28 18:45
>>31
お願いします。
33デフォルトの名無しさん:04/01/28 19:21
2進数から10進数へ変換するプログラムがわかりません。
桁をわけるには剰余、除算とヒントがありました。
34デフォルトの名無しさん:04/01/28 19:23
どうゆうことですか??
  ****重要****

 □■バレンタインデー中止のおしらせ■□

拝啓
時下ますますご清栄のことと、お喜び申しあげます。

さて、例年催しておりますバレンタインデーでございますが
今般の輸入牛肉のBSE問題や折からの天候不順、
またテロ対策の観点から、この際中止させて頂くこととなりました。

これを機に、従業員一同初心にもどり、
一層の発展を期し努力する所存でございます。
何とぞ、ご高承のうえ、今後とも倍旧の
お引立てを賜わりますよう、お願い申しあげます。

****重要****
>>34 多分 10進数で 10101010 とか受け付けといてこれを変換しろ、って事だ
37デフォルトの名無しさん:04/01/28 19:37
ういわかりました。残念です
38デフォルトの名無しさん:04/01/28 19:41
誰か>>30の問題を解ける人。
助けてください!!!!
39デフォルトの名無しさん:04/01/28 19:55
>>25
それプラス
しつこい
短気
C言語まったくわかりません
解説つけろ
みたいなこと言う奴にも
41助けて!!:04/01/28 20:02
>>39
このプログラムリストの、最初の部分、”keiro3.pl : 幅優先探索”
とかは、無視して書いていけばいいんですか??
>>30
今日の昼まで出なかったっけ?まーそれは置いといて
あの数字のパターンのみ解ければ良いの?
それとも、どの配置のパターンにも対応?
スライドパズルには絶対解けないパターンがあるみたいだけどその場合はどうするの?
43助けて!!:04/01/28 20:11
>>42
はい、今日のお昼までが期限でした。でも、
とりあえず出したら救済の余地ありと言われまして。
また、ここに助けを求めにきました。
 あの数字パターンのみで大丈夫です。
お願いできますか?
4442:04/01/28 20:39
45助けて!!:04/01/28 20:48
>>44
どうもありがとうございます。
ほんとに助かりました。ありがとうございました。
46助けて!!:04/01/28 20:54
>>44
 あの、これを説明するときはなんて
言えばよいですかね?
簡単に説明おねがいできますか?
>>46
> >>44
>  あの、これを説明するときはなんて
> 言えばよいですかね?

「ぼるじょあにやってもらいますた」と言えば満点もらえます。
48助けて!!:04/01/28 20:58
>>47
 いや、きゃなり面白いですけど、
ちょっと、きびしいっすよねー。
>>47はそこまで面倒見切れるかボケ!という意味だろ
5044:04/01/28 21:06
感謝されても困る・・・。少しふざけて書いたのだけど・・・。
コンピュータが考えているのではなくて、自分が実際に解いた順番を
元に動かすだけ。文字通り問題と回答があのパターンの時のみにしか
通用しない。正規のやり方はあると思うけど分からなかったので。
ばらすなよ
52デフォルトの名無しさん:04/01/28 21:20
2〜1000までの素数を表示するプログラムをお願いします。
>>50
力任せでいいんじゃない?全手検索っぽく
>>50
前スレにヒントというか方法は出まくってる。
55言語学板住人:04/01/28 21:24
>>52
漏れはVBで無理やり(全手検索っぽく)作った
5644:04/01/28 22:00
>>51
助けて!!氏はソース見たり、実際に動かしたりしたのかな?

>>54
製作おながいします。
57デフォルトの名無しさん:04/01/28 22:24
>>30 が宿題Javaスレに来たから、Java で組んでみた。
しかし所詮 Java だから(特に Collection 多用してるから) まるきり役には立たないだろうな。
というわけでゴミ箱に捨てた。
5844:04/01/28 23:07
>>57
いや・・わざわざ捨てんでも・・。せっかく作ったのに・・。
ゴミ箱って事はまだ修復可能?
自分はJavaは分からんけど、せっかくだからうpしてくださいな。
59デフォルトの名無しさん:04/01/28 23:13
http://up.isp.2ch.net/up/0c7655b7f3f9.java

優しい人は移植してあげて
俺は優しくないし C も C++ もしばらく触ってないので
malloc だの * だの見たくも無いからだめ
6044:04/01/28 23:41
>>59
見れない・・。

製作再開。範囲を小さく区切ってそれを繰り返してやるとか
考えていたけどそれは断念。9*8*7*...*1は9!だっけ?
の362880分マロックって全部調べる方法で挑戦。
61デフォルトの名無しさん:04/01/29 00:35
import java.util.*;

public class Q30 {
private static final int[] START = {
2, 8, 3, 1, 6, 4, 7, 0, 5
};

private static final int[] GOAL = {
1, 2, 3, 8, 0, 4, 7, 6, 5
};

public static void main(String[] args) {
new Q30();
}

public Q30() {
Collection nodes = new ArrayList();
nodes.add(new Node(null, START));
Collection patterns = new ArrayList();

Node target = null;
int level = 0;
while (true) {
System.out.println(level);
Collection nexts = new ArrayList();
62デフォルトの名無しさん:04/01/29 00:35
boolean found = false;
for (Iterator it=nodes.iterator(); it.hasNext(); ) {
Node node = (Node)it.next();
if (equals(node.array, GOAL)) {
target = node;
found = true;
break;
} else {
Collection n = getNexts(node, patterns);
nexts.addAll(n);
}
}
if (found) break;
nodes = nexts;
level++;
}

System.out.println("found!");
List lifo = new ArrayList();
while (target != null) {
lifo.add(0, target);
target = target.parent;
}
63デフォルトの名無しさん:04/01/29 00:36
for (Iterator it=lifo.iterator(); it.hasNext(); ) {
Node node = (Node)it.next();
for (int i=0; i<9; i++) {
System.out.print(node.array[i]);
if (i%3 == 2) {
System.out.println();
}
}
System.out.println();
}
}

private Collection getNexts(Node parent, Collection patterns) {
Collection nexts = new ArrayList();
for (int i=0; i<9; i++) {
int[] moves = { -3, -1, 1, 3 };
for (int j=0; j<moves.length; j++) {
if ((i%3 == 0) && (moves[j] == -1)) continue;
if ((i%3 == 2) && (moves[j] == 1)) continue;

int newindex = i + moves[j];
if ((0 <= newindex) && (newindex < 9) && (parent.array[newindex] == 0)) {
int[] news = (int[])parent.array.clone();
news[i] = 0;
news[newindex] = parent.array[i];
Node n = new Node(parent, news);
64デフォルトの名無しさん:04/01/29 00:37
if (! patterns.contains(n)) {
nexts.add(n);
patterns.add(n);
}
}
}
}
return nexts;
}

private class Node {
private Collection nexts;
private int[] array;
private Node parent;

public Node(Node parent, int[] array) {
this.parent = parent;
this.array = array;
nexts = new ArrayList();
}

public boolean equals(Object obj) {
return Q30.this.equals(((Node)obj).array, array);
}
}
6552:04/01/29 00:37
誰かお願いします・・。
66デフォルトの名無しさん:04/01/29 00:38

private boolean equals(int[] a, int[] b) {
for (int i=0; i<9; i++) {
if (a[i] != b[i]) {
return false;
}
}
return true;
}
}
こんなにべたべたこのスレに Java のソース貼ってよかったのかな
というわけでとりあえず逃げるんで
>>65
100 INPUT "調べたい数";A
110 N=2
120 R=A-N*INT(A/N)
130 IF R=0 THEN PRINT "素数ではない":GOTO 100
140 N=N+1
150 IF N<A THEN GOTO 120
160 PRINT "素数である":GOTO 100
68デフォルトの名無しさん:04/01/29 00:56
>52
ほれ。動作確認も何もしてないが後は自分でやれ。
#include <stdio.h>
#define N 1000

int main()
{
int i,j,flag;
for(i=N;i>1;i--){
for(j=i-1,flag=0;j>1 &&flag==0;j--){
if(i%j==0){ flag=1;}
}
if(flag==0){
printf("%d\n",i);
}
}
return 0;
}
6944:04/01/29 01:11
>>66
いえいえ、お疲れ様でした。
言語が違っても文法が全く違うわけで無いから、参考にさせてもらいます。
両方に詳しい人がいればやってくれると思うし。
7070:04/01/29 01:22
↑ヤラシイ
71デフォルトの名無しさん:04/01/29 05:52
どなたか下の計算式をとくプログラムを作っていただけないでしょうか。
H-5〜H5は値を入力するもので、G-5〜G5を求めるプログラムです。
(注:アルファベットの後の数字は添字です)
┌ ┐┌ ┐ ┌ ┐
│H-5 0 0 0 0 …, , , 0 0 ││G-5│ │ 0 │
│H-4 H-5 0 0 0 , , , 0 0 ││G-4│ │ 0 │
│H-3 H-4 H-5 0 0 , , , 0 0 ││G-3│ │ : │
│ : : : : : : , : , , : : ││ : │ │ : │
│ H4 H3 H2 H1 H0 H-1, H-2, …, H-5 0 ││G-1│ │ 0 │
│ H5 H4 H3 H2 H1 H0, H-1, …, H-4 H-5││ G0│=│ 1 │
│ 0 H5 H4 H3 H2 H1, H0, , H-3 H-4││ G1│ │ 0 │
│ 0 0 H5 H4 H3 H2, H1, , H-2 H-3││ G2│ │ : │
│ : : : : : , , , : : ││ : │ │ 0 │
│ 0 0 0 0 0 , , , 0 H5││ G5│ │ 0 │
└ ┘└ ┘ └ ┘
7271:04/01/29 05:55
ありゃ、ごちゃごちゃになってもうた。
削除できるのであればお願いします。
失礼しました。
7371:04/01/29 06:14
問題をヤフーのブリーフケースに入れたので
作っちゃるよとゆう人は見てください。
お願いします。
http://briefcase.yahoo.co.jp/onegaisimasu13579
74デフォルトの名無しさん:04/01/29 12:06
>>73
このブリーフケースやフォトアルバムへのアクセスはご利用できなくなっております。
75デフォルトの名無しさん:04/01/29 12:26
ワシは見れたぞ>74
76デフォルトの名無しさん:04/01/29 12:28
わたすも
でもMS Wordがない人は読めないね。
77デフォルトの名無しさん:04/01/29 14:12
簡単な電気回路での電流の変化のようすを微分方程式を解くことによって調べろ。

電気容量Cのコンデンサー、自己インダクタンスLのコイル、
抵抗値Rの抵抗が直列に交流起電力Eの交流電池と接続されているものとする。
電流をI、コンデンサーに蓄えられている電荷量をQとすると、
電流Iの満たすべき方程式は以下のような微分方程式になる。

LdI/dt + RI + Q/C = E

ここで、dQ/dt = I なので、上の式は

Ld2Q/dt2 + RdQ/dt + Q/C = E

となる。
交流起電力Eは E = E0cos (omega t) で与えられるものとせよ。

この微分方程式を解くためのプログラムを以下の手順で作っていこう。
1変数の常微分方程式をルンゲ・クッタ法を用いて解くためのプログ ラムを作る。
1のプログラムを変更して、2元の連立微分方程式を解くためのプログ ラムを作る。 このプログラムを利用して、
2階の微分方程式を解くことができる。 (講義の内容参照。)
電気回路を記述する微分方程式を解く。 様々なパラメータについて解いて、
計算結果を図示してみよう。 特に omegaを連続的に変化させ、
振動の振幅がどのように変化するか 調べてみよう。

電気回路を記述する微分方程式のプログラムが分かりません。助けてください。

78989:04/01/29 18:31
前スレの続きですが
10を余剰するところまで分かるんですが、その先が・・・
x=123の時
xの10の剰余(x%10) 3を出力
その商(x/=10) 12の10の剰余(x%10) 2を出力
その商(x/=10) 1の10の剰余(x%10) 1を出力
xが0なら改行を出力して終了
出力は321
>>79
> xが0なら改行を出力して終了
その商(x/=10)が0なら改行を出力して終了
81989:04/01/29 18:41
>>79
ありがとうございます!
馬鹿な文系頭なのでなかなかその商を利用するという発想が出てきませんでした。
本当にありがとうございます。
私もココにいる人達みたいにすぐに答えが書き出せるようになれるように頑張りたいと思います。
他に答えを書いて下さった方もありがとうございました。
82デフォルトの名無しさん:04/01/29 18:43
>馬鹿な文系頭
言い訳すんなってぶん殴られることもあるから
理系文系なんてやたらと言わない方がいいよ
83989:04/01/29 18:44
>>82
あぁ・・そうでしたね^^;
文系だから〜という意味で言ったワケではないので紛らわしい表現ですみません。
84989:04/01/29 19:35
またしつこいんですが、上記の方法だと3桁以外の数字だと表現できませんよね?
>>84
前スレのコード見て少しは考えろ
86デフォルトの名無しさん:04/01/29 19:52
mod(a, n)を求めるプログラムを書く
それを応用してpowermod(2, 2^(2^15), 2^(2^15)+1 )を計算できるようにプログラムを書く

(mod(a,n)はa/nの余りを表す。powermod(a, b, n)はa^b/nの余りを表す)


お願いします。
多倍長?
>>84
チェックルーチンなしなのでそのつもりで
#include <stdlib.h>
void PutTest( int x )
{
for(;x;x/=10){
printf("%d", x%10);
}
puts("");
}

int main(int argc, char* argv[])
{
while(1){
char str[256];
printf(">>");
gets(str);
if(*str=='q'||*str=='Q')
break;
PutTest(atoi(str));
}
return 0 ;
}
ほんと桁違いに扱う数が多いんで多倍長演算を用いると思います。
でも肝心のプログラムがわかりません...
>>86
powermod(a, b, n)なら高速べき乗計算法というのがある。
ただし、3倍長以上位の整数型がほしいな。
ここで多倍長整数(符号なし)をulongとすると、
unsigned int powermod(unsigned int a, unsigned int b, unsigned int n)
{
    ulong la = a;
    unsigned int msb = 0x1 << (8 * sizeof(unsigned int) - 1);//0b10...0
    for(i = 0; i < 8 * sizeof(unsigned int); ++i)
    {
        if (b & msb) la = mod(la * la * lb, n);
        else la = mod(la * la, n);
        b << 1;
    }
    return static_cast<unsigned int>(la);
}
てな感じになる。つまり、一度bを2進数にして考えてみること。
あ、訂正。b << 1のとこ、b <<= 1ね。

つまり、こういうこと。
b -> e1,e2,e3,...,enと2進展開できたとする。
この時i=1からi=nまで次のことを繰り返す。
ei=1ならばa=mod(a*a*b,n);
ei=0ならばa=mod(a*a,n);
すると最終的にaに求めたいものが得られる。
なるほど。2^(2^15)がいくつになるかは気にしなくてよいんですね
必死に計算していました....

ありがとうございました。
93デフォルトの名無しさん:04/01/29 23:15
外部ファイルから読み取りをおこないたいのですが、
このファイルには文字が百万文字以上あり、
このファイルから64文字ずつ読み込む方法を教えてください。
よろしくお願いします。
>>93
文面どおりに解釈すると
fread(buffer, 64, 1, fp);

実際に使うと思われるもの
fread(buffer, 1, 64, fp);
>>94 ありがとうございます
bufferと1は何をあらわしているのですか?
96デフォルトの名無しさん:04/01/29 23:40
char buffer[64];
1はsizeof(char)
97デフォルトの名無しさん:04/01/29 23:49
>95さん参考までに
#include <stdio.h>
#include <stdlib.h>
#define SIZE 64
int main (int argv,char **argc)
{
FILE *fp;
char str[SIZE];
int i;
if(argv!=2){
fprintf(stderr,"command line error\n");
fprintf(stderr,"%s readfile\n",argc[0]);
exit(1);
}
if( (fp=fopen(argc[1],"rb")) == NULL){
fprintf(stderr,"file open errorB%n");
exit(1);
}
while(i=fread(str,sizeof(char),SIZE,fp)){
if(i==SIZE){
  //ここに処理を書きます。下の文は参考までに
fprintf(stdout,"%s",str);
}
else{
//最後の読み込みが64文字に満たなかった場合ゴミを消す作業です。
str[i]='\0';
fprintf(stdout,"%s",str);
break;
}
}
return 0;
}
>>96,97
ありがとうございます
99989:04/01/30 09:59
nはユーザーが読み込みます。
2からnまでの全ての素数とその数を出力するプログラムを書かないといけないんですが
途中まで書けたのですが、先がどうしても分からないので間違いや訂正箇所があったら教えて下さい。
#include<iostream>
using namespace std;
int main()
{
int m, n, i;
cin >> n;

for( i = 2 ; i < n ; i++){

for ( m = 2; m < i; m++ )
{
if ( m % i == 0 )
{
break;
}
cout << i << "\n";
}


}
前スレに2,3個素数絡みのプログラムがあった。
101ぼるじょあ ◆yBEncckFOU :04/01/30 13:39
(・3・)エェー
名前欄にぼるじょあ#ぶるじょあって入れれば
君も今日からぼるじょあですYO!
102デフォルトの名無しさん:04/01/30 14:13
おねがいします・・・


ポインタを使った関数を利用し,分数の足し算プログラムを作成しよう

以下の関数を作成すること

分数入力関数
入力チェック関数 分子,分母に0が入力された場合に再入力させる。
分数足し算関数
通分関数
約分関数
最大公約数関数
最小公倍数関数
103102:04/01/30 14:14
(関数の仕様)
関数名 = 分数入力関数〔 bun_input 〕
引数  =  分子のポインタ,分母のポインタ
戻り値 =なし
概要  =引数のポインタ先に対して数値を入力する。入力後に入力チェック関数を呼び出す。

関数名 =入力チェック関数〔 error_chk 〕
引数  =ポインタ
戻り値 =なし
概要  =ポインタ先のデータが0であれば,ポインタ先に再入力させる。

関数名 =分数足し算関数〔 bun_add 〕
引数  =分子a,分母b,分子d,分母e,結果分子のポインタ,結果分母のポインタ
戻り値 =なし
概要  =引数の分子,分母で足し算を行い,引数のポインタ先へ結果を格納する。
     足し算を行うにあたり,通分関数と約分関数を呼び出す。

関数名 =通分関数〔 tsuubun 〕
引数  =分子aのポインタ,分母b,分子dのポインタ,分母e
戻り値 =通分後の分母
概要  =通分を行い,引数のポインタ先へそれぞれ格納する
      その再に,最小公倍数関数を呼び出す。

関数名 =約分関数〔 yakubun 〕
引数  =分子のポインタ,分母のポイン
104102:04/01/30 14:15
切れました、すいません

関数名 =約分関数〔 yakubun 〕
引数  =分子のポインタ,分母のポインタ
戻り値 =なし
概要  =約分を行い,引数のポインタ先へそれぞれ格納する
      その再に,最大公約数関数を呼び出す。
105デフォルトの名無しさん:04/01/30 15:40
>>99
#include<iostream>
using namespace std;
int main()
{
int m, n, i,count=0;
cin >> n;

for( i = 2 ; i <= n ; i++){ //nまでの素数ならi<=n
for ( m = 2; m < i; m++ ) {
if ( i % m == 0 ) { //iとmが逆
break;
}
}// } が足りない
if(m==i){// i%m==0でfor文抜けたときは素数じゃないんだから表示しない。
count++;//個数を数える。
cout << i << "\n";
}
}
cout << "count:" << count ;

}
106デフォルトの名無しさん:04/01/30 15:42
文字列の中で全角文字(「あ」とか「者」とか)と半角文字(「a」「4」)を
区別させる方法というのはありますか?
107デフォルトの名無しさん:04/01/30 16:28
#include<stdio.h>

void inputdata();
void displaydata();
int goukei;
int main(int argc,char*argv[])
{
goukei=0;
inputdata();
displaydata();
return0;
}
void inputdata()
{
int a,b;
scanf("%d",&a);
scanf("%d",&b);
goukei=a+b;
return;
}
void displaydata()
{
int i;
for(i=0;1<goukei;i++)
{
printf("*");
}
return;
}

間違え教えてくれ(・3・)
for(i=0;1<goukei;i++)
この行
>>108タソ
ありがd
>106 確実なのは先頭から1バイトづつチェックしていくしか
>>106
shift-jisなら先頭まで遡らなくてもすむが
アイスって木のヘラで食べるとなんかうまいよね。
>>110
eucなら全く遡る必要ないんだけどね。
>>112

アウト、その発言で電車のダイヤが4分程度乱れた
M$のコムパイラだとこんなのがあるらしい
ttp://www.microsoft.com/JAPAN/developer/library/vccore/_crt__ismbc_routines.htm
{} を [] に置換したいんですけど
'{' こういう風に書くとコンパイル通りません。
文字コードで指定しないとだめですか?
'\{'としる。
120118:04/01/31 18:59
できました
どうも
12142:04/02/01 00:33
バグが多くてコンピュータの思考はひとまず断念。
作るのを目指す時、数学板で質問していろいろ勉強になった。
>>44と殆ど変わらないけどプレイヤーが遊ぶ物。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=134
手書き文字を計算機に認識させるプログラムを作っているのですが
読み込んだ手書き文字(2値画像)を、64×64の大きさに変換する(正規化っていうんですかね?)
プログラムを作っていただきたいのです。

取り込んだ2値画像をあらかじめ辞書として用意してある64×64の大きさの文字と
64×64の大きさに変換した手書き文字を16マスに分けて各マスのの黒(2値画像の1の部分)
の数を比較し、各増マスの黒の数が最も近いものをその文字であると認識するプログラムを
作っているのですがどうにもこうにもならず限界がきてしまったので助けてください。

何分素人なもので、上記の文で何を言いたいのかわかりにくいとは思いますがお願いします。
卒論の補助ソフトか?w
画像の拡縮くらいちょっとした画像編集ソフトなら
付いてないはずはないから探せ。
階調から補完方法まで好きに設定できるし
>>123
画像編集ソフト等の機能のプログラムソースを見ることって可能ですか?
>>124
……本気か?
そんなのはソフトのライセンスによるが。

そもそも外部ソフトで変換してから画像を読めばいいわけで
自分のプログラムに無理してその機能を組み込む理由はないだろう
>>125
一応自分でやったという足跡としてプログラムを残しておきたいのです・・・・
GIMPならソース公開されてるんじゃないかな。・・・スレ違いだなぁ・・・。
C言語の宿題です。
問題の意味自体よくわからないので全文をのせます。

時系列データがディスク上にファイルとして保存されているとする。
このデータファイルを読み込み、移動平均をとることによってスムージングをか
け、
結果をディスクにファイルとして保存するプログラムを作成せよ。
平均をとるデータ点数はキーボードから入力して指定するものとする。

わかる方おられましたらどうかよろしくお願いします。
そもそもその「時系列データ」が何のデータで、どんな形式かわからん。
130教えてください:04/02/01 12:28
お願いします。

Func_read関数のstrcmp をmemcmpを利用して書き換える
という問題なのですが、よくわかりません2つのレコードを
置き換えとかなんとか初心者ですみません

int Func_read(void)
{
char *prtn1;
char *prtn2;
char szdat1[81];
char szdat2[81];
int nrtn;

prtn1 = fgets(szdat1,81,Fp1);
prtn2 = fgets(szdat2,81,Fp2);
if(prtn1==NULL||prtn2==NULL)
return(9);

nrtn=strcmp(szdat1,szdat2);
if(nrtn!=0)
return(-1);
return(0);
}
>>130
今のFunc_read関数と同じ機能を
strcmpでは無くてmemcmpを使って書け、という問題?
それならstrcmpをmemcmpに変えればいいだけでは?
132デフォルトの名無しさん:04/02/01 14:39
>>129
>>128のもらった宿題の全文が>>128に書いてあるとおりなら
>>128が問題の意味自体よくわからないのも無理ないよなw
memcmpは長さの指定がいるでしょ
両者の長さが違うとき、strcmpはどういう動作をするか
>>134
>>130のコードでは、そのstrcmpの戻値を一致/不一致でしか使ってないんだが。
つまり、ゴミを考えなければ単純に比較するだけでいいんだ。
137デフォルトの名無しさん:04/02/01 22:45
次のような BNFで表された文法(idは終端記号とする。):

E -> id
| E "[" E "]"
| E "." id
| E "(" X ")"
X -> E X'
X' -> "," E X'
| ε

に対して、

1. E の生成規則から左再帰を除去せよ。 (左再帰を除去するために、新しい非終端記号を導入する場合、 E'という名前をつけると良い。)
2. 左再帰を除去した文法に対して、構文解析表を作成せよ。
C/C++の宿題なわけ?
(・3・) エェー たまのぼるじょあだYO
140デフォルトの名無しさん:04/02/02 06:55
大量のデータを入力してファイルに出力したいんだけど
データ順をミスした時に困るのでそれ用途のプログラムを
組みたいのですがファイル操作した事ないのでやり方が分からず。

やり方を教えていただけないでしょうか?
もしくはそれに代わるソフトでも良いです。

データの書式

A[0]_B[0]_C[0]_D[0]_X[0]_Y[0]_Z[0]改行
A[1]_B[1]_C[1]_D[1]_X[0]_Y[1]_Z[0]改行
(以下略)
_部分はスペースです

A,B,C,Dは入力、X,Y,Z部分はfor文に相当し、値を代入するだけです。
141140:04/02/02 07:33
自己解決しました。
142137:04/02/02 07:57
>>138
そうなんですよ。おながいしますm(_ _)m
143デフォルトの名無しさん:04/02/02 19:04
上記にある質問によく似ているのですが、アドバイス頂けたら幸いです。

入力する数値の要素数を知りたいのです。
つまり、6を入力すると、1,2,3,6が出力される様なプログラムです。
20だと1,2,4,5,10,20です。
割り算をした際にきちんと割り切れる数値を求めるのですが、
この説明でお分かりになりますか?

事情の分かる方よろしくお願い致します。

{
int s=0;
for (int i=1;i<=n;i++)
if(n%i==0)
s+=i;
return s;
}
こんな感じでしか組み立てれませんでした。
約数
>>143
入力は整数だけなのか?
値の範囲は?
引数の整数を評価する関数で良いのか?
出力はとりあえずstdoutでよいのか?
これでいいの?
#include<stdio.h>
int main(void){
int i,x,count=0;
scanf("%d",&x);
for(i=1;i<=x;i++){
if(x%i==0){
printf("%d, ",i);
count++;
}
}
printf("count:%d",count);
return 0;
}
147デフォルトの名無しさん:04/02/02 19:39
f(x)=1/(1+x*x) と g(x)=x*x (0≦x≦1) について、この2つのグラフと
x軸の間にある部分の面積を考える。手順としては、

0〜1の値をとる乱数を2つ発生させ、(x0、y0)とする。
f(x0)<=g(x0)のとき、g(x0)>=y0 が成り立つ場合は1。成り立たない場合は0。
f(x0)>=g(x0)のとき、f(x0)>=y0 が成り立つ場合は1。成り立たない場合は0。
(※f(x)とg(x)の交点を求めるのはNG)

10000個の点(x0、y0)を発生させて、例えばそのうち3000個が条件を満たすとしたら
面積は3000/10000=0.3 となる。
どこを直せば、思い通りの結果が出るのでしょうか?_| ̄|○

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define L 214783647
#define SIZE 10000

double f(double x)
{
return 1.0/(1.0+x*x);
}
double g(double x)
{
return x*x;
}
148デフォルトの名無しさん:04/02/02 19:40
続き

main()
{
int i,kosuu[SIZE],goukei[SIZE];
double x,y,s;


srandom(55);
for(i=0;i<SIZE;++i){
x=(double)random()/L;
y=(double)random()/L;
if(f(x)>=g(x)){
if(g(x)>=y)kosuu[i]=1;
else kosuu[i]=0;
}
if(f(x)<g(x)){
if(f(x)>=y)kosuu[i]=1;
else kosuu[i]=0;
}
}
for(i=0;i<SIZE;++i){
goukei[i]=goukei[i]+kosuu[i];
s=goukei[i]/SIZE;
printf("%.4lf %.4lf\n",i,s);
}
}

よろしくお願いします
>>143
慣れたら1とその数は計算し無くても答えだからそのまま出力
その数の1/2以上は計算しなくても省けるからループは1/2まで
とか、宿題ならそこらあたりまでやるんじゃないかなあ・・・
149考慮版
#include<stdio.h>
int main(void){
int i,x,count=0;
scanf("%d",&x);
printf("1, ");
for(i=2;i<=x/2;i++){
if(x%i==0){
printf("%d, ",i);
count++;
}
}
printf("%d",x);
puts("");
printf("count:%d",count);
return 0;
}
>>149
> その数の1/2以上は計算しなくても省けるからループは1/2まで
平方根
>>150
バグあった。
それじゃ1のとき2回1が表示されるのと
countを足し忘れ。
1はfor文に含めたほうがいいかも。
>>151
16の平方根は4
だけど8で割り切れる。
154デフォルトの名無しさん:04/02/02 20:39
>>147
こんな感じか?

void main(){
int i,goukei;
double x,y,s;

srandom(55);
goukei = 0;
for(i=0;i<SIZE;++i){
x=(double)random()/L;
y=(double)random()/L;
if(f(x)>=g(x)){
if(g(x)>=y)goukei += 1;
}
if(f(x)<g(x)){
if(f(x)>=y)goukei += 1;
}
}

s = (double)goukei/(double)SIZE;
printf("%d %.4f\n",i,s);
}
155147:04/02/02 20:48
>>154
ありがとうございます!(ノД`)
>>153
割り切れる値を見つけた時に、割った値を覚えておくようにすれば √n まででいいぞ。
>>153 の例だと、2 を見つけた時に、8 を覚えておけば大丈夫。
割った値は逆順で出力しないといけないから、再帰を使うのが簡単そう。

#include <stdio.h>
static int foo(int n, int i){
 int s;
 for(; n % i != 0; i++){ if(n < i * i) return 0; }
 s = i;
 printf(", %d", i);
 if(i * i < n){
  s += foo(n, i + 1);
  printf(", %d", n / i);
  s += n / i;
 }
 return s;
}

int main(){
 int n, s;
 scanf("%d", &n);
 printf("1");
 s = 1;
 if(1 < n){
  s += foo(n, 2) + n;
  printf(", %d", n);
 }
 printf("\ns = %d\n", s);
 return 0;
}
157デフォルトの名無しさん:04/02/02 22:04
演習中に失礼
今、業務でCとC++の別々で仕事があるんですが。
自分はCは少々出来るのですがC++は今勉強中って感じなんですが、
どうやったらCとC++の混乱無く理解できるのでしょうか?
ポインタは大体解ってると思うのですがC++独自の機能でゴチャゴチャ
になり掛けてます、どなたかいい方法があれば教えて下さい。
>>157
学問に王道なし。
C を忘れろ
C++ として学べ
160デフォルトの名無しさん:04/02/02 22:34
>>157
Cで,ポインタと構造体を完全に理解していれば
C++は単に構造体にメンバ関数が付加されただけだと考えればよい.

C++の機能はclassだけじゃねーよ!
162デフォルトの名無しさん:04/02/02 22:35
C言語の静的変数について質問です。
静的変数っていうのはコンパイル時に初期化されるんですか?
それともプログラムを実行に移す瞬間(main関数のまえ)に初期化されるんですか?
どっちか悩んでおります。。
163デフォルトの名無しさん:04/02/02 22:36
>>162
後者
164デフォルトの名無しさん:04/02/02 22:36
俺は
C→Java→C++
の順番に勉強するのが一番だと思うけどな.

C++でアプリ作るの難しすぎ.
165デフォルトの名無しさん:04/02/02 22:52
>>163
ありがとうございます。
166165:04/02/02 22:57
俺はどっちなのか知らんが、>>162がなぜ悩んでいるのかが興味深い。
よければ理由を教えてくれないか?
スコープと記憶クラスをごちゃまぜに考えると混乱するので、別々に考えた方がよい。
>>166
まちがい。
メモリのアドレスはコンパイル時には確定していないので、
割り当てられていない。
170165:04/02/02 23:35
いや、元の元はかなりしょうもないことです。
簡単に話すと・・・よく分からかも
まずデバッグで変数の中身を見るとき、プログラム動作前にその変数の中にゴミがあるんですよ、(watchウインドウ(変数の値が表示される場所)の中身を見た)
それでたまに「1」と入ってる・・・、それで変数が1個しか指定してないとプログラムを実行したら、「1」が「543532」に変わります・・
しかし、変数を2個以上宣言してたら、両方プログラムの初期値(プログラムを実行する前のwatchウインドウの中に書かれてあった数字)は変わりません。
なぜかな・・と思って、「なんでプログラムが実行される前から値がわかるんだろ、、デバッグの仕様かな、見た人が分かりやすいようにあらかじめプログラムの中をみて変数の値を表示させてるのかな、、いやちょっとまてよ、なんで変数一個
の時は初期値のままじゃないんだ・・、いやそれよりこれはデバッグの仕様なのか、
機械語コードを作る時に(あんま知らないが)あらかじめその辺を考慮に入れながらコードを生成してるから、それでデバッガはわかったんじゃないか・・、いやでも・・・、そういや静的変数の場合どうなるんだろ・・ついでだから調べよう」
とまあ意味不明なことから調べ始めました。。。
自分でなに言ってるか分かりません・・(時間掛かった割りに・・・
171165:04/02/02 23:39
>>169
ありがとうございます。

(アセンブラ勉強しよ・・・・、ちょっとは分かるようになるだろ・・・)
>>170
リンカが先ですね。
173デフォルトの名無しさん:04/02/02 23:54
前スレにて、ソート方法等、いろいろと教えを乞うた者です。
現在↓のようなソースになったのですが、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=57

この状態ではマズいことに気がつきました。
前スレでは、
result[i] = refsize[i] / filesize[i]
をした結果のresult[i]配列を大きい順にソートし、
そのソート結果にしたがって、filesize[i]とrefsize[i]配列も
同じようにソートしていただきました。

これを逆に、小さい順から大きい順にソートし直すことは可能でしょうか?
申し訳ありませんが、お教え願えれば幸いです。
よろしくお願いいたします。ここだけが頼りです・・・。

リンク先も見てないし経緯も知らないが
ソートを逆順にするのは通常、比較結果を反対にすればよい
175173:04/02/03 00:03
ちょっと関係のありそうな部分だけ抜き出してみます。
---------------------------------------------
void swap(int i, int x[],int y[],int z[]){
int tempx,tempy,tempz;
tempx=x[i]; x[i]=x[i-1];x[i-1]=tempx;
tempy=y[i]; y[i]=y[i-1];y[i-1]=tempy;
tempz=z[i]; z[i]=z[i-1];z[i-1]=tempz;
}

void BubSort(int x[ ],int y[],int z[] , int n)
{
int i, j, temp;

for (i = 0; i < n - 1; i++) {
for (j = n - 1; j > i; j--) {
if (x[j - 1] < x[j]) {
swap(j,x,y,z);
}
}
}
}

---------------------------------------------
なんですが、どこで比較しているんだろう・・・(汗)
if
1. structとclassの違いを述べよ。

structは変数が自動的にパブリックで、
classはプライベートでいいですか?
他には何かある?
] < x
C++にはあってCにはない
180173:04/02/03 00:18
できましたー。
ありがとうございますー。
# 渋川さんはこんな違い(structにできること)を挙げてくれました:

構造体はCとの互換性のために以下の機能を備える

1)同じ名前の非構造体と同じスコープ内に同居できる
2)クラスではデフォルトがprivateだが、構造体はpublicである。
3)配列ど同様な初期化が可能

例:

struct stat {
int i, j;
};

int stat(struct stat* buf);

stat a = { 3 , 4 };

...なるほど。+3点。
>>177 継承とか?

便乗質問させてもらうけど、
classとstructの使い分けが正直わからん。
トランプのカードみたいに数が決まっていたり初期化に法則性があるなら struct
社員データみたいに数が決まっていなかったりするのはclass?
183デフォルトの名無しさん:04/02/03 00:21
データ(メンバ変数)のみならstruct
ただの好み
みのこのだた
ただのみこ
ただのなーす
ただのただたか
189デフォルトの名無しさん:04/02/03 01:03
(0 1  行列のn乗を求めるプログラム教えてください。
 1 1) nはキーボードから入力でn=0、1、2・・・
ただのこのみのこのだた
>>182
データ構造ならstruct、オブジェクトならclass。
#って使い分けしている積もりなんだが若干混乱している罠。
>>189
n乗の公式も書けば
誰かコーディングしてくれるかも
>>147 ありがとうございます!
本当に助かりました!
個人的に再帰テンプレートの場合はstruct
またstructとclassか……
形式上の違いは(残念ながら)ほとんどないからスタイルの話になるんだよな。
ちなみに初期化子はフィールドがすべてpublicならどっちでもできる。
>>189
行列って2*2だけでいいの?

それなら行列を表す構造体を作って
後は普通に累乗の計算の関数みたいに再帰関数にすればできるんじゃない?
197196:04/02/03 02:50
あ、ごめん。
行列って掛ける順番が重要だったよね
それなら、196のは駄目かも
198デフォルトの名無しさん:04/02/03 03:13
行列のn乗を求めるプログラムなんですけど・・
(nはキーボードから入力でn=0,1,2・・・)
void print_C(int d); void multi_AB(int d);
int matA[2][2]={1,0,0,1}; int matB[2][2]={0,1,1,1}; int matC[2][2];
void main(void){multi_AB(3); print_C(3);}
void multi_AB(int d){int i,j,k;
for(i=0;i<d;i++){
for(j=0;j<d;j++){
matC[i][j]=0; for(k=0;k<d;k++)
{matC[i][j] += matA[i][k] * matB[k][j];
matA[i][k]=matC[i][j];}}}}
これのどこに、scanfとn乗の式をいれたらいいか教えてください。。
199デフォルトの名無しさん:04/02/03 03:58
mainのなかのmulti_ABが行列の乗算をおこなっているので
この計算の直前にscanfを入れて
このmulti_ABの計算をn回ループで回したら?
n=0の場合は…
うーん、行列の0乗の定義が分からないなぁ^^;
E={1,0,0,1}でいいのかな?
なら問題ないけど…
200デフォルトの名無しさん:04/02/03 04:31
for文の中とnの定義は
どこに(どのように)すればいいのでしょうか。。
0乗の定義はE={1,0,0,1}で大丈夫です。
201デフォルトの名無しさん:04/02/03 04:51
for文の中とnの定義は
どこに(どのように)すればいいのでしょうか。。
0乗の定義はE={1,0,0,1}で大丈夫です。
202デフォルトの名無しさん:04/02/03 05:44
皆様、またしても助言頂きたく参上いたしました。

入力する数値(整数)の素因数を出力するプログラミングです。
例えば、10を入力すると 2 x 5 といった感じです。
50であれば、 2 x 5 x 5 です。

よろしくお願い致します。
203200:04/02/03 06:51
後、どこでmatCの値をmatAに入れればいいのか教えてください。
よろしくお願いします。。。
(同じ文の投稿すいませんでした。。)
204デフォルトの名無しさん:04/02/03 08:25
ダイクストラ法で最短路を決定していく上で、
目的地まで決定した最短路を記憶させて、それを
表示させるプログラムってどうやって作るんですか?
205デフォルトの名無しさん:04/02/03 08:53
>200,203
int n;scanf("%d",&n);while(n-->0){
mult_AB(3);}
....で
>後、どこでmatCの値をmatAに入れればいいのか教えてください。
multi_AB()関数の定義の中の全てのループから抜けたあとに
もう一度, i,j でループを回してmatCの結果をmatAに入れてあげて!!
206デフォルトの名無しさん:04/02/03 08:57
207デフォルトの名無しさん:04/02/03 12:43
>>206
ありがとうございます。
これってJavaって奴みたいなんですけど、
C言語でも動くんでしょうか?
プログラムはど素人なんですいません。
アルゴリズムは同じ
>>202

int sosu(int num)
{
//numより大きな次の素数を返す
}
void soinsu(int num)
{
int s;
while(num!=1){
s=sosu(1);
if(num%s==0){
putchar(s+'0');
putchar('\n');
num/=s;
}
else s=sosu(s);
}
}

こんな感じか。
>>202
#include <stdio.h>
int aho(int);
main()
{
  int a;
  printf("数値をどぞ>>");
  scanf("%d",&a);
  aho(a);
}
int aho(int a)
{
  int i=0;
  for(i=2;;i++){
    if(a%i==0){
    printf("%d ",i);

    break;
    }
    if(a==1) return;
  }
  aho(a/i);
}
こんな感じ?
211デフォルトの名無しさん:04/02/03 18:16
f(x) = sin(x) -(1/9)sin(3x) + (1/25)sin85x) - (1/49)sin(7x) + ・・・・
↑を求めるプログラムをお願いします。
212221:04/02/03 18:18
これに穴埋め+αしていけば解けると思うんですが、なかなかできません。

for(; x<_; x+=_){

for(int n=1; n<_; n+= ){
if((n/2) % 2 == 0)

else
;
}
cout << x << " " << fx << endl;
}
213デフォルトの名無しさん:04/02/03 18:40
すいません>>212は間違いです
勘違いしてました、すいません
#include <stdio.h>
#define LIMIT 1000000

int main(){
double x = 0.7;
double n=1;
double j=+1;
double d=0.0;
double old_d;


do{
old_d = d;
d+=j * sin(n * x) / n / n;
//printf(" %lf sin(%lf * x) / %lf / %lf\n",j,n,n,n);
n+=2.0;j=-j;
if(n>LIMIT) break;
}while(d!=old_d);

printf("%lf",d);
return 0;
}

こんな感じかなぁ?jのところはもっと改良できるけど、
まあ宿題ならこれくらいで...
215200:04/02/03 19:14
>205
for(i=0;i<d;i++){
for(j=0;j<d;j++){matA[i][k] = matC[i][j];}}}
こんな感じでいれたのはいいのですけど、途中から同じ結果に
なってしまうし、計算も合わなくてできないです。。
216デフォルトの名無しさん:04/02/03 21:06
>>205>>215
無理ですね。ご愁傷様。
(^Д^)ギャハ!↑みなさん、この人のレスどう思いますか♪なんてありきたりなんでしょうね♪
誰もが皆、一瞬つけてみたくなる発想のレスです♪
しかし、賢明な人はその自らの短絡的思考を野放しにする事を嫌がり、
こういうレスは控えます♪しかし、この人はしてしまったのです(^^;
「誰もが思い付くような事」を堂々と♪
この人にとってこのレスは何なのでしょうか♪
このレスをしている間にも時間は刻々と 過ぎ去っているのです♪
正にこの人のした事は「無意味」「無駄」でしかありません♪ああ・・・何ていう事でしょう(^^;ワラ
図星で泣いちゃうかも(^^;ワラ
>>217>>217に対するレスかな?
219デフォルトの名無しさん:04/02/03 21:29
fopenでファイルを開くときWindowsの場合、テキスト形式で開いてたら
0x1AをEOFと判断して、バイナリだと0x1AをEOFと判断しないと聞きました。
それでUnixの場合はバイナリでもテキストでも一緒とも聞いたんですが、それではUnix系はどうやってファイルの終端を確認しているんですか?
Unixのファイル終端の識別子はなんなんですか?
>>219
ファイルの最後まで行ったら終端。
221>>189:04/02/03 22:15
やっぱりできません。130行になってしまうし、プログラム自体も
見当違いらしい。どなたか救いの手を。
来週までなのでなんとかなりませんか。
222デフォルトの名無しさん:04/02/03 22:56
ニュートン法を使い
f(x)=sqrt(1-x^2)-2(x-1)^2=0をとくプログラムを精度は0.01でどなたかお願いできないでしょうか。
どうかよろしくお願いします。
223デフォルトの名無しさん:04/02/03 23:06
プログラム(ソース)の内容を行番号をつけて表示し、
指定した行数ごとに表示を止め、改行キーを入力すると次の表示を行う
フィルタプログラムを作成せよという問題なんですが、
#include <stdio.h>
main(int argc,char *argv[],int a){
char c,st[256];
int l=1,i=0,j,k,m;
FILE *sf;
while((c=fgetc(sf))!=EOF){
if(l%a==0){scanf("%d",&m);
i++;st[i]=c;
if(c==0x0a){
k=i;i=0;printf("%4d: ",l);
for(j=1;j<=k;j++){
putchar(st[i]);
}l++;
}
}fclose(sf);
}
これじゃ駄目みたいです。
どうかこの阿呆めにヒントを授けてください。
224デフォルトの名無しさん:04/02/03 23:10
阿呆めへ
C言語でプログラムを書く前に、日本語でやりたいことを順序付けて書き出してみなさい。

 ファイルを開く
  ↓
 成功したら読みこんで次へ ※失敗したら終了
  ↓

とか。それから組んで見てください。
226デフォルトの名無しさん:04/02/03 23:42
>189さんへ
当たってるかどうか分かりませんが。。。
#include <stdio.h>
#define N 2
typedef struct{
int m[N][N];
}Matrix;

void compute(Matrix *a,Matrix *b,Matrix *c)
{
int i,j,k;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
for(k=0;k<N;k++){
c->m[i][j]+=a->m[i][k]*b->m[k][j];
}
}
}
}
void copy(Matrix *a,Matrix *b)
{
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
b->m[i][j]=a->m[i][j];
}
}
}
227デフォルトの名無しさん:04/02/03 23:43
void init(Matrix *a)
{
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
a->m[i][j]=0;
}
}
}
228デフォルトの名無しさん:04/02/03 23:44
int main ()
{
Matrix *a,*b,*c,*swap;
int i,j,k;
a=(Matrix*)malloc(sizeof(Matrix));
b=(Matrix*)malloc(sizeof(Matrix));
c=(Matrix*)malloc(sizeof(Matrix));
printf("kaijo :");
scanf("%d",&k);
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("Matrix[%d][%d] : ",i,j);
scanf("%d",&(a->m[i][j]));
}
}
copy(a,b);
init(c);
for(i=1;i<k;i++){
compute(a,b,c);
swap=a;
a=c;
c=swap;
init(c);
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%5d ",a->m[i][j]);
}
printf("\n");
}
}
229デフォルトの名無しさん:04/02/04 00:07
>>189>>198さん同じ?
void print_C(int d); void multi_AB(int d);
int matA[2][2]={1,0,0,1}; int matB[2][2]={0,1,1,1}; int matC[2][2];
void main(void){multi_AB(3); print_C(3);}
void multi_AB(int d){int i,j,k;
for(i=0;i<d;i++){
for(j=0;j<d;j++){
matC[i][j]=0; for(k=0;k<d;k++)
{matC[i][j] += matA[i][k] * matB[k][j];
matA[i][k]=matC[i][j];}}}}
を元にした方がいいのかなぁ。
230198:04/02/04 01:26
189さんとは違う人です。
すいません、まぎらわしくて。。。
231デフォルトの名無しさん:04/02/04 01:57
次のデータをファイルdataに出力するプログラム
1.2
3.1
3.3
5.6
2.2

ファイルdataを読みだし、その和を求めるプログラム

この2つのプログラムがかけないのですが、どうかお願いします・・・
232デフォルトの名無しさん:04/02/04 02:10
C++でMIDIを再生したんですけど、ボリュームを小さくしたいんです。
ボリュームの変更方法を詳しく教えてください。
お願いします。
>>232
MIDIには音量という概念はない。
つーか、それのどこが宿題だ?

>>231
{
FILE * fp = fopen("data", "w");
fputs("1.2\n3.1\n3.3\n5.6\n2.2\n", fp);
fclose(fp);
}
{
FILE * fp = fopen("data", "r");
int sum = 0;
char buf[200];
while (fgets(buf, sizeof(buf), fp) != NULL) {
sum += atoi(buf);
}
fclose(fp);
}
234デフォルトの名無しさん:04/02/04 02:39
>>233
ありがとうございます!!
本当に助かりました。
235232:04/02/04 04:12
>>233
それって変更できないってことですか・・・
(´・ω・`)
板違いだが
・マスターボリュームのエクスクルーシブメッセージを送信する。
・各トラックのボリュームを記憶しておいてそれよりも下げる。
・ノートメッセージに付随するベロシティ値を下げる。
・「MIDIの音量を下げてください」と書かれたダイアログをポップアップする。
・普段から大きな音を聞いて耳を遠くする。
環境も再生方法も分からないのでこれくらいしか書いてやれんな。
>>232
機器固有のもあるが、ユニバーサルだと
{0xf0,0x7f,0x7f,0x04,0x01,LL,MM,0xf7} (LL,MMはボリューム)
を送ればよいかと。(非同期の場合混ざらないように)
ただ、機器にこれを実装する義務はない。
LLを無視(通常0x00を入れる)して、MMのみの実装がほとんどと思う。
238デフォルトの名無しさん:04/02/04 08:22
お願いします。
学校の課題(C言語)なんです。

<問題>
1〜1000までの擬似乱数を100個出力し、
その時点までの乱数の平均を出力するプログラムを作りましょう。

よろしくお願いいたします。
239デフォルトの名無しさん:04/02/04 08:44
>>189
ほい!

void main(void){
int n,i,j;
scanf("n乗:%d", &n);
while(n-->0){
multi_AB(2);
}
print_C(2);
}
/* A=C=AxB */
void multi_AB(int d){
int i,j,k;
for(i=0;i<d;i++){
for(j=0;j<d;j++){
matC[i][j] = 0;
for(k=0;k<d;k++){
matC[i][j] += matA[i][k] * matB[k][j];
}}}
for (i=0; i<d; i++) {
for(j=0;j<d;j++){
matA[i][j] = matC[i][j];
}}
}
>・普段から大きな音を聞いて耳を遠くする。
ワラタ。何てこと書くねん・・・。
241デフォルトの名無しさん:04/02/04 08:53
>238
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100

int main ()
{
int i,j,sum=0;

srand((unsigned)time(NULL));

for(i=0;i<N;i++){
j=rand()%1000+1;
sum+=j;
printf("%d\n",j);
}
printf("average : %lf\n",(float)sum/N);
return 0;
}
242デフォルトの名無しさん:04/02/04 09:03
質問です
3つの要素を関連付けしたくて
ArrayListを3つ使ったクラスを作ってみたのですが
このクラスからArrayList1つを持って来たいと思ったらどうしたら良いのでしょう?

作ってみたのはこちら
class ABC
{
List a = new ArrayList();
List b = new ArrayList();
List c = new ArrayList();
public void seta(Object x)
{
a.add(x);
}

省略同様のsetb,setc

public Object geta()
{
return a;
}

省略同様のgetb,getc

}
これだとjava.lang.IndexOutOfBoundsExceptionがでてしまうので
return文の書き方、このコーディングのまずいところを教えてください
おねがいしますm(_ _)m
243デフォルトの名無しさん:04/02/04 09:04
>>238

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

int main(void)
{
int i;
double ransu, total=0;
srand(233);
for (i=0; i<1000; i++) {
ransu = rand();
ransu = ransu*1000/RAND_MAX;
printf("%f\n", ransu);
total += ransu;
}
printf("average=%6.2f\n", total/(double)i);
return 0;
}
244242:04/02/04 09:06
すみません書き込むスレ間違えましたm(_ _)m
JAVAスレいって来ます
245238:04/02/04 09:18
>241
>243

ありがとうございました。
246デフォルトの名無しさん:04/02/04 09:51
全然わかりません
困ってます

キーボードから入力したファイルを読み込み、
そのファイルの文字数、単語数、行数をカウントし、
その結果を「count」というファイルに出力するプログラムを作成してください。
ただし空白文字で区切られた一連の文字列を単語とします。

読み込むファイルは手元にあるのを使います。
当方、初歩的なC言語しか勉強していません。
よろしくお願いします。
247デフォルトの名無しさん:04/02/04 11:10
>>246
>ただし空白文字で区切られた一連の文字列を単語とします。
って、le raisin みたいなのは1つの単語とみなすということ?
248デフォルトの名無しさん:04/02/04 11:44
お願いします。学校の課題なんですがさっぱり分からなくて解
けないと単位がもらえず・・・

年月日を画面から入力して、その年の1月1日からの通年を出力
するプログラム(c言語)を作成せよ。通年とは、例えば1月1日
は1日、2月10日なら41日となる。うるう年などは考慮しなくて
もよい。

というものです。よろしくお願いします
>>246
一行で行う方法がある。
  system("wc > count");

上記で提出して怒られた場合は
  ttp://kaiunix.cs.shinshu-u.ac.jp/Lesson/ProgLang2/2003/Resource/wc.c
の wc_file() 関数をパチる。
250デフォルトの名無しさん:04/02/04 12:06
>>236
効果音に対して音楽が大きいんです
効果音はDirectSoundで
lpSecond[バックバッファの番号]->SetVolume(ボリューム);
関数で変更できたんだけど。
音楽はMCIを使ってMIDIを再生してます。
変更できないが正解ですか?
(´・ω・`)
>>248
年を入力する意味がないような…

1. strftime() を使う。

  struct tm tms;
  char buf[256];
  tms.tm_year = 0;
  tms.tm_mon = 月 - 1;
  tms.tm_mday = 日;
  strftime(buf, sizeof(buf), "%m月%d日まで: %j日", &tms);
  printf("%s\n", buf);

2. 自分で計算する。

  /*     1月    <===============>   11月 */
  int md[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
  int i, days = 0;
  for (i=1; i<月; i++)
    days += md[i];  /* 前の月までの経過日数 */
  days += 日;
  printf("%d月%d日まで: %d日\n", 月, 日, days);
252デフォルトの名無しさん:04/02/04 12:24
>>248
#include <stdio.h>
int days_in_month[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main(void)
{
int mm,dd,day,i;
printf("何月?>");
scanf("%d", &mm);
printf("何日?>");
scanf("%d", &dd);

if (mm<1 || 12<mm) {
fprintf(stderr,"月が正しくありません\n");
return -1;
}
if (dd<1 || days_in_month[mm]<dd) {
fprintf(stderr,"日が正しくありません\n");
return -1;
}
day = 0;
for (i=1; i<mm; i++) {
day += days_in_month[i];
}
printf("通年日は %d です", day+dd);
return 0;
}
253デフォルトの名無しさん:04/02/04 12:56
>247
たぶんそう言うことだと思います。

やっぱ難しいのかなぁ???
>>253
というかそれだと単語と単語の境界がわからない。
ふつうの基準だと
(空白文字で区切られた)一連の文字列
(空白文字で区切られた一連の文字)列
の後者が正解なんじゃないかと思うんだけどな
255デフォルトの名無しさん:04/02/04 13:45
>253
あ、そうですね(汗

よく考えるとどんな文でも1単語ってことになってしまうから・・・
256232:04/02/04 14:00
237で説明してくれてたね。見逃してた。
どうもです。
でも難しくて意味がよくわからないです
(´・ω・`)
257255:04/02/04 14:41
>254でした

レス間違えてました・・・
259深層水:04/02/04 17:18
ボルジョアさん。
pascalでハノイの塔を解くプログラムを教えてください。
期限が明後日にせまってしまいました。
泣きそうです。
260ぼるじょあ ◆yBEncckFOU :04/02/04 18:59
>>259
(・3・)エェー このスレのタイトルを読めYO!
262198:04/02/04 19:42
>>199さん、>>205さん、>>239さん
どうもありがとうございました。おかげでやっとこさ解けました。。
263デフォルトの名無しさん:04/02/04 19:49
この先ずっとぼるじょあスレで行くのか?
スレ立て人次第
265デフォルトの名無しさん:04/02/04 20:57
cの2次元配列をフラグとして使うのですが、
この2次元配列をチェックするにはどうすればよろしいでしょうか?
>>256
もっと明確に。
267デフォルトの名無しさん:04/02/04 20:58
268265:04/02/04 21:09
sorry簡単すぎました。
Cで、簡単な神経衰弱みたいな物を作ることになって、
あたったらc[4][4]という2次元配列にフラグを立てていくことになっているんです。
それで、永久ループの終了条件としてc[4][4]内がすべて1[フラグが立っている状態]
ということをチェックしたいんですが、思いつかないので…お願いします。
>>268
配列の内容を加算していって合計で判断するとか。
2重ループで1個1個調べるしかない。
て、1じゃないのがあればgotoで抜けるとか、
全部足して16かどうか調べるか、
全部 && か & か * で掛けて、1かどうか調べるか。
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(c[i][j]==0)break;
}
}
if(i==4&&j==4) printf("全部フラグはたってる(0でない)");

こんなのはどうかな。
>>268
チェックする関数を作るのが簡単なのでは?

<例>
BOOL c[4][4];

//返り値が1ならcの中はすべて1返り値が,0ならcの中に1ではないものがある
BOOL check()
{
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
if(c[i][j]==0)return 0;
}
}
return 1;
}
>>268
bool check(bool c[4][4]) {
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
if (!c[i][j])return false;
}
}
return true;
}
>>268
斜め上の見方でふたつほど気が付いたこと

単なるフラグならビットで間に合うわけで
4*4なら、俺なら1つの整数で保存するけど
配列じゃないとだめなのかな?
整数なら、チェックが楽

あるいは終了判定用にカウンタを1つもっとくのも
楽だと思うが
275265:04/02/04 21:35
>>269さん
早いレスありがとうございました!

>>270さん
ごめんなさいgoto文は習っていないのでわからないんです…

>>271さん
良い意見をありがとうございます。

>>272さん
別関数をつくる…これは(・∀・)ィィ!!です。ありがとうございます。

>>273さん
falseやtrueって返せたんですね…知りませんでした。ありがとうございます。
276265:04/02/04 21:36
>>274さん
2次元配列を使えという命令だったので仕方なく…
277255:04/02/04 22:12
やっぱりわかりません・・・

>249意味がわからないんです。すみません。

引き続き誰かお願いします。
else文を使うとか聞いたんですが・・・
もうこの問題飽きた。
見にくいからインデントぐらいちゃんとしる
>>277
255 て書いてるけど
>>246 が問題だよね
281デフォルトの名無しさん:04/02/04 23:01
先生方!お願いします!
5^2=25, 6^2=36, 25^2=625, 76^2=5776, 376^2=141376のように
2乗すると下の桁が元の数と同じになる数を求めるプログラムを考えてくださいませ!
>>281
#include <stdio.h>

int main(){
 int i;
 int n;
 for(n = 10, i = 1; ; i++){
  if(n <= i) n *= 10;
  if((i * i) % n == i) printf("%d\n", i);
 }
 return 0;
}

ちなみに実行結果は...
1
5
6
25
76
376
625
9376
283デフォルトの名無しさん:04/02/04 23:22
>>先生方
#include <stdio.h>

int filter(int n);

main()
{
long long int a,b,c;
for(a=1; a<3000000; a++){
b=a;
if((a*a)%filter(a)==a) printf("%d^2=%d\n",a,a*a);
}
}

int filter(int a)
{
int j=1;
while(j<a) j*=10;
return j;
}

こういった感じで作りたいのですが。300万までで求めたいんです。
それで一の位が5と6でしかありえないのでそれを利用してスピードアップを
図るらしいのです。いろいろ条件をつけてしまってすみません!
このプログラムを改正してみてください!お願いします!
284デフォルトの名無しさん:04/02/04 23:38
main()
{
long long int a,b,c;

a = 1;

printf("%d^2=%d\n",a,a*a);

for(a=5; a<3000000; ){
b=a;
if((a*a)%filter(a)==a) printf("%d^2=%d\n",a,a*a);
a += 1;
if((a*a)%filter(a)==a) printf("%d^2=%d\n",a,a*a);
a += 9;
}
}

int filter(int a)
{
int j=1;
while(j<a) j*=10;
return j;
}
ありがとうございます。後は自分でやってみます!
>>265

sum=0;
for(i=0; i<4; ++i)
for(j=0; j<4; ++j)
sum+=c[i][j];

sumが16かどうか
すいません。最後に一つ。
long long int を使う場合、printf("%",x) の%のあとは何を入れればいいですか?
%dではだめですよね?
ll
Ω
290デフォルトの名無しさん:04/02/05 00:09
>>287
%lld
%lld ですか・・・?
疑うなら自分で調べろ。
%lldでやったらおかしな数字が・・・
#include <stdio.h>
int filter(int n);
main()
{
int a;
a = 1;
printf("%lld^2=%lld\n",a,a*a);
for(a=5; a<3000000; ){
if((a*a)%filter(a)==a) printf("%lld^2=%lld\n",a,a*a);
a += 1;
if((a*a)%filter(a)==a) printf("%lld^2=%lld\n",a,a*a);
a += 9;
}
}
int filter(int a)
{
int j=1;
while(j<a) j*=10;
return j;

実行結果
4294967297^2=281973192916994
21474836505^2=-1152924356465131520
25769803812^2=-1152924356465131520
107374183025^2=-1152924356465131520
326417520272^2=-1152924356465131520
1614907844672^2=-1152924356465131520
2684354950625^2=-1152924356465131520
40269701276672^2=-1152924356465131520
>>292
いや!すいません!リロードせずに>>288だけをみてレスをしてしまったので!
こんな私を許してください!
>>287
> long long int を使う場合、
>>293
> int a;

マジなのかネタなのか荒らしなのかはっきりしてくれ。
キャスト汁
    1        2             3           4           5
        →        ○ →         )) → ○        →((
○○○○○   ○○○○ ))     ○○○○○    (( ○○○○    ○○○○○

1から5を繰り返す玉の運動のプログラムを作りたいのですが、
私にはこれ以上進められません。
私の手に負えませんので先生方のお力をお借りできれば幸いです。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1027870433_199/DirectX.zip
>>1に書いてありましたアップローダーにUPさせていただきました。
どなたかお力添え宜しくお願いいたします。
298295:04/02/05 00:20
あと%自体を出力するなら%%
299デフォルトの名無しさん:04/02/05 00:22
>280

ごめんなさい
そうです、246の問題です
DirectXのアイコンが椎茸に見えて困る
>>295
解決いたしました。
荒しではありません、気分を悪くされた方がいたらすいませんでした。
逝ってまいります。
302297:04/02/05 00:26
書き忘れていました。
開発環境 VC++6.0
言語    DirectX9.0
でした。
スレ汚し申し訳ありません。
>299 入力ファイルの改行文字を1文字とカウントするなら
-----
char fname[1024];
FILE *fp;
int ch, stat;
unsigned long charCnt, wordCnt, lineCnt;

printf("in file?>> ");
fscanf(stdin, "%s", fname);
fp=fopen(fname,"r");
charCnt=wordCnt=lineCnt=0;
stat=0;
while((ch=fgetc(fp))!=EOF){
++charCnt;
if(ch=='\n'){ ++lineCnt; if(stat){ ++wordCnt; stat=0; } }
else if(ch==' ' && stat){ ++wordCnt; stat=0; }
else if(ch!=' ') stat=1;
}
if(stat){ ++lineCnt; ++wordCnt; }
fclose(fp);

fp=fopen("count","w");
fprintf(fp,"%lu %lu %lu\n", charCnt, wordCnt, lineCnt);
fclose(fp);
-----

stat=0;
while((ch=fgetc(fp))!=EOF){
++charCnt;
if(ch=='\n'){ ++lineCnt; ch=' '; }
if(ch==' ' && stat!=' ') ++wordCnt;
stat=ch;
}
if(stat!=' ') ++wordCnt;
305299:04/02/05 08:18
>303

ありがとうございます!
306デフォルトの名無しさん:04/02/05 14:25
任意の二整数 J,K を入力し,J から K まで
の総和(SUM)・奇数和(ODD)・偶数和(EVEN)を求めよ。
J > K のとき終了。それ以外は,繰り返しとする。
実行結果ファイルも作成する。

こんな感じなんですが、初心者で全く分かりません。
先生方よろしくお願いします。
>>306 こんなのか?
#include <stdio.h>

int main() {
int i,j,k,sum,odd,even,count=1;
char *filename = "result";
FILE *fp;

if((fp = fopen(filename,"w")) == NULL) { printf("cannot open file %s.\n"); return 1; }
while(1) {
sum = odd = even = 0;
printf("Input J :"); scanf("%d",&j);
printf("Input K :"); scanf("%d",&k);
if(j > k) break;
for(i=j;i<=k;i++) {
sum += i;
if( i % 2 == 0) even += i; else odd += i;
}
printf("SUM = %d , ODD = %d , EVEN = %d\n",sum,odd,even);
fprintf(fp,"#%d : J = %d , K = %d , SUM = %d , ODD = %d , EVEN = %d\n",count,j,k,sum,odd,even);
count++;
}
fclose(fp);
return 0;
}
308デフォルトの名無しさん:04/02/05 15:08
>>306
#include <stdio.h>

#define OUTPUTFILENAME "OUTPUT.TXT"
int main(void){
int i, j, k, sum, odd_sum, even_sum;
FILE* fp;
fp = fopen(OUTPUTFILENAME, "w");
if (!fp){
perror("open error");
return -1;
}
for(;;){
printf("j="); scanf("%d",&j);
printf("k="); scanf("%d",&k);
if (j>k) break;
sum = odd_sum= even_sum=0;
for (i=j; i<=k; i++) {
sum +=i;
if (i%2) odd_sum += i;
else even_sum+=i;
}
fprintf(fp, "j=%d .. k=%d :\n sum=%d\nsum of odd=%d\nsum of even\n", j, k, sum, odd_sum, even_sum);
}
fclose(fp);
return 0;
}
309306:04/02/05 15:20
>>307さん>>308さんありがとうございます。
>>308さん
#define OUTPUTFILENAME "OUTPUT.TXT"
#define OUTPUTFILENAME "OUTPUT.DAT"
でもいいのですか?
310デフォルトの名無しさん:04/02/05 15:26
>>309
どうぞ、ご自由に
311デフォルトの名無しさん:04/02/05 15:30
大勢の学生について
ID-NO、英語、数学、国語の得点(各100点満点)を次々に読み込んで、各人の総得点を計算の上
@読み込んだ順に各人のデータを、さらに
A各々の平均と標準偏差を、次の形に出力するCプログラムを作成せよ

ID-NO  Eng  Math  Jap  Total

00001 44 65 51 160
00002 83 100 84 267
00003 58 30 57 145
         ・ 
         ・
         ・
         ・
Ave 72.5 75.8 68.1 216.4
Dev 15.3 19.6 12.4 33.3

ただし、プログラム作成においては、
・学生の人数は100人以下でみ未定とする
・学生1人のデータは構造体としてまとめて、それに Student というデータ型名を付けよ
・Student 型を要素とする配列を用意してプログラムを組んでください


この課題、誰かやってくださいな。出来れば考察も書いてくださいませ
   _, ,_   パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>311
313デフォルトの名無しさん:04/02/05 16:02
>>313
1.int main(void) の後にセミコロンがない。
2.numberofが未定義。恐らく、配列のよう素数を取り出すマクロと思うけど、NUM_KINSHUを使えば?
3.関数bunkaiはint型の値を返すと見なされるが、値を返していない。
315デフォルトの名無しさん:04/02/05 16:52
>311
Uploaderにあるので適当に
316デフォルトの名無しさん:04/02/05 17:51
takeshi 090-1234-5678 takeshi@...
masashi 090-9876-5432 uirir@...
のように,名前,番号,アドレスが書かれたファイルがあるとします.
そして,名前の一部を入力し,(例えばtakeなど)そのファイルから検索して,
そのひとの名前,番号,アドレスを表示したいんです.
誰かお願いします!
>>316
それ宿題?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void){
FILE *f;
char buf[1024],name[30],tel[30],male[50],pat[30];
if((f=fopen("test.txt","r"))==NULL){
printf("file open error\n");
exit(1);
}
printf("名前を入力"); scanf("%s",pat);
while(fgets(buf,1024,f)!=NULL){
sscanf(buf,"%s %s %s",name,tel,male);
if(strstr(name,pat)!=NULL){
printf("%s %s %s\n",name,tel,male);
}
}
return 0;
}
クローズするの忘れた。
>>316
(・3・)アルェー 仕事な予感がするYO!


とか言われるぞ
321デフォルトの名無しさん:04/02/05 19:25
問1
char型一次元配列aに空白を含む文字列を1行分入力する(最大100文字分)
aを文字列出力する /* printf("%s\n",a); かな?*/
ヌル文字までのaの各要素を3桁で16進出力する(小文字)

問2
int型変数aにデータを10進入力する。/* scanf("%d",&a); かな?*/
aを16桁で2進出力する。

の2つです。宜しくお願いします。
>>321 
まずは問1
char str[100+1];//+1は終端文字用
int i,c=0;
gets(str);
for(i=0;i<100;i++){
if(str[i]=='\0')break;
printf("%3d",str[i]);
c++;
if(c==3){
c=0;
putchar('\n');
}
}
putchar('\n');

課題の提出は来週の金曜の5限目だね。がんばって
>>322 間違ってないか?
3桁で16進出力、と言う部分を考えると、>>321の問題が間違ってる気がする。
>>318
ほんとにありがとうございます!このスレは優しい方がいますねw
>>320
宿題ですよ〜w
int main(void){
  int i;
  char a[128];
  gets(a);
  puts(a);
  for(i=0;a[i];i++){
    printf("%03x ",a[i]);
  }
  return 0;
}

100文字チェック無し版
gets(a) は、fgets(a, 100, stdin) でどうか?
>>328
改行文字が入ってしまう。それでもいいといえばいいんだが。
改行文字を"\0"でおきかえるときに
よくstrlen使うけど、strlenって'\0'
までの長さを測るんじゃないの?
'\n'なのになぜstrlenがつかえるんだ?
普通は使いません。
改行が必ず\0の前に入ってる保証があるなら使うけど、そんなもんないから。
while(p=buf;*p!='\n';p++){}
*p ='\0';

これでいいのかしらん。
改行がなかったら?
char a[100 + 1];
char *p;
fgets(a,100,stdin);
if(strlen(a) > 0) {
p = a + strlen(a) - 1;
if(*p == '\n') *p = '\0';
}

とか?
'\n' 探すならstrchrでいいと思うが。
それよりも、100文字超えて入力した時のために
バッファのフラッシュがいるかな

int main(void){
  int a,i;
  char s[32];
  
  scanf("%d",&a);
  for(i=0;i<16;i++){
    s[16-i-1] = '0'+((a&(1<<i))>>i);
  }
  s[16]=0;
  printf("%s", s);
  return 0;
}

流れを無視して問2
>>334
> char a[100 + 1];
+ 1 要らんよ
>>337
>>334では、どっちかというと、fgetsの方をsizeof a(つまり、101)にした方がいいだろうね。
339337:04/02/05 21:26
>>338
どうでも良いじゃんと思ってたら>>321の答だったんだ。
>>330の単発質問に答えてるだけかと思ってた。スマソ。
int main(void){
  int i;
  char a[100+1];
  char* p;

  fgets(a,sizeof(a),stdin);
  if(p = strrchr(a,'\n')){
    *p = '\0';
  }

  puts(a);
  for(i=0;a[i];i++){
    printf("%03x ",a[i]);
  }
  return 0;
}

100文字チェック有り版
まじで殴るぞお前ら。
   _, ,_   パーン
 ( ‘д‘)
  ⊂彡☆))Д´) >>341
343デフォルトの名無しさん:04/02/05 22:07
先生!プログラミングをお願いするわけではないんですが
次のソース(?)のどの部分がどのようなことをあらわしているか適当でいいので
おしえていただけないでしょうか?お願いします。
import java.io.*;
public class Image{
public static void main(String[]args){
int i,j;   
int org[]=new int[65536];  
System.out.println("Start Program.");  
try{//画像の入力 
DataInputStream fi = new DataInputStream(new FileInputStream("lenna.pnm"));//P55
fi.readLine();
fi.readLine();
fi.readLine();
fi.readLine();
for(i=0;i<65536;i++)org[i] = Integer.valueOf(fi.readLine()).intValue();
fi.close();。
}catch(IOException e){
System.out.println("Cant not access file");
return;
}
344デフォルトの名無しさん:04/02/05 22:08
//情報の埋め込み 
org[0]=org[0]/2;//第0番目に0を埋め込み
org[0]=org[0]*2;
org[1]=org[1]/2;//第1番目に1を埋め込み
org[1]=org[1]*2+1;
org[2]=org[1]/2;//第2番目に1を埋め込み
org[2]=org[1]*2+1;
org[3]=org[3]/2;//第3番目に1を埋め込み
org[3]=org[3]*2+1;

try{//画像の出力
DataOutputStream fo = new DataOutputStream(new FileOutputStream("out.pum"));//P55
String s="P2\n3CREATOR:The GIMP's PNM Filter Version1.0\n256 256\n255\n";
for(i=0;i<s.length();i++)fo.writeByte(s.charAt(i));
for(i=0;i<65536;i++){
s=String.valueOf(org[i])+"\n";
for(j=0;j<s.length();j++)fo.writeByte(s.charAt(j));
System.out.println(i+"*/65536");
}
fo.close();
}catch(IOException e){
System.out.println("Can not access file.");
return;
}
}
}
スレ違い
しかたないな、オレが教えてやろう。

これはCやC++ではなくJavaのプログラムだ。
347321:04/02/05 23:45
>>322-340
ありがとうございました。
>>322 同じ学校!?期限が違うから違うのかも。
>>324 問は間違えなく書いています。問題が変なのかな。

お世話になりましたm(_ _)m
次スレ案
ヽ|・∀・|ノ ようかんマンがC/C++の宿題を片付ける!21代目
http://that.2ch.net/test/read.cgi/gline/1075981320/l50

ついでに、ぼるじょあをいただきまつ
        lヽ
        l 」
        ‖
    _, ,_  ∩
  ( ‘д‘)彡 スパーン
∠二i=⊂彡 (・/
          /3・)
349デフォルトの名無しさん:04/02/06 10:59
>>343
画像の入力、情報の埋め込み、画像の出力。
350デフォルトの名無しさん:04/02/06 14:52
1変数の常微分方程式をルンゲ・クッタ法を用いて解くためのプログラムを出来たらお願いします。
351デフォルトの名無しさん:04/02/06 15:57
ルンゲ・クッタ人気あるな
マターリしようよ。
C++って、論理ビット移動の演算子ってあったっけ
>>
純粋な疑問なんだが、
「論理」ビット移動ってなに?
最上位も一緒にシフトするってこと?
普通に考えればそうだな。
Logical Shift と Arithmetic Shift

unsigned int とか unsigned char にすればよろし → >>353
357デフォルトの名無しさん:04/02/07 14:35
ポインタが難しい上に問題の意味がわからなくてお手上げです

二つの整数のn1とn2の和と差をsum、difが
示す変数に格納する
関数void sum_dif(int n1,int n2,int *sum,int *dif)を作成しなさい

こんな感じで表示される

二つの整数を入力
整数A:69
整数B:98

二つの整数の和は167です。
二つの整数の差は29です。

C言語です。変数の意味がわかりません。
神様見本をみせてください。
*sum = n1 + n2;
*dif = abs(n1 - n2);
void sum_dif(int n1,int n2,int *sum,int *dif)
{
*sum = n1 + n2;
*dif = n2 - n1;
}
360デフォルトの名無しさん:04/02/07 14:59
void sum_dif(int n1,int n2,int *sum,int *dif)
{
*sum = n1 + n2;
*dif = n2 - n1;
}

void main(void){

int n1,n2
printf("整数A:");
scanf(%d,&n1);
printf("整数B:");
scanf(%d,&n2);
sum_dif()
すんまそん、自分なりに研究してみまつ。。。
ファイルを読み込んで、ソートして二分探索をする問題です
ファイルの中身は名前と誕生日が5人分あり、名前で検索します

実行結果が
名前を入力してください⇒山田
山田 20040207
このようになるようにしてください
決まりとして構造体を使わなければならないようです
お願いします
すいません。

typedef void (cdecl * funcaddr) (void);

この文はどう解釈したらいいんでしょうか・・・
誰か助けてください・・・
364362:04/02/07 19:43
名前はローマ字でお願いします
>>363
typedef の対象になってるのは funcaddr。
引数無し、戻り値無しの関数へのポインタ。

cdecl はC言語の呼び出し規約。
http://www.softclub.co.jp/~zoro/ds110/api.html
>>365
ありがとうございます。
やっと意味がわかりました。(TT)
367363:04/02/07 21:36
>>363訂正・・・

typedef void (__cdecl * funcaddr) (void);
368デフォルトの名無しさん:04/02/07 23:31
二分探索木を昇順連結リストに変換する方法を教えてください
探索木各ノードのリンク先を変えるだけで実現できるらしいんですが
その方法で悩んでます。
>>368 とりあえず、ノードを渡り歩こう。

{
 hoge *parent;
 hoge *left;
 hoge *right;

 hoge *less;
 hoge *more;
}
struct node{struct node*left,*right; /* 後はキーとか色々 */ };
void tree2list(struct node*np,struct node**lp,struct node**rp){
*lp=*rp=np;
if(np->left){
tree2list(np->left,lp,&np->left);
np->left->right=np;
}
if(np->right){
tree2list(np->right,&np->right,rp);
np->right->left=np;
}
}
main(){
struct node*root,*left,*right;
/* 二分木構築 */
tree2list(root,&left,&right);
}
372デフォルトの名無しさん:04/02/08 19:13
助けてください!!
宿題…年月日を入力して、その年の1月1日からの通日を出力する。
通日とは1月1日なら1日目、2月6日なら37日目みたいな感じです。
3月以降はうるう年の結果も考慮したもの。
days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
input 年,月,日;
d = 日;
for(m = 0; m + 1 < 月; m++){
 d += days[m];
}
if(うるう年(年) && 2 < 月) d++;
>>372
mktime() あたりかなぁ。
>>374
それだね。
いったん経過秒数にしてしまえば差をとるのが楽になる。
>>372
何かこのスレ、ループしてないか?
>>376
なんだ、そういうことか。
確かにネタっぽいですね。
378デフォルトの名無しさん:04/02/08 20:12
>>377
すんません。ネタとかじゃないんです(TT)
初心者なんで分かりやすいやつお願いします。
>>378
いや、だからさ、たのむから >>248-
>>372
>>248につけたしただけのもの。

#include <stdio.h>
int days_in_month[2][13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int isleap(int year)
{
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
int main(void) {
int yy,mm,dd,day,i;
printf("何年?>"); scanf("%d", &yy);
printf("何月?>"); scanf("%d", &mm);
printf("何日?>"); scanf("%d", &dd);
if (mm<1 || 12<mm) {
fprintf(stderr,"月が正しくありません\n");
return -1;
}
if (dd<1 || days_in_month[isleap(yy)][mm]<dd) {
fprintf(stderr,"日が正しくありません\n");
return -1;
}
day = 0;
for (i=1; i<mm; i++) {
day += days_in_month[isleap(yy)][i];
}
printf("通年日は %d です", day+dd);
return 0;
}
>>248っていうか>>252な。
うるう年関係ないバージョンの次が関係あるバージョンか
次はなんだろね
383デフォルトの名無しさん:04/02/08 21:37
>>380
ありがとうございます。助かりました。
384デフォルトの名無しさん:04/02/08 22:26
#include <stdio.h>
int reheight();
int main(){
int i,g,h;
float height[2];
for(i=0;i<2;i++){
scanf("%f",&height[i]);
height=reheight(height);
for(i=0;i<3;i++)
printf("%f",height[i]);
}
int reheight(float height){
inti,j;
for(j=1;j<3;j++){
for(i=0;i<3;i++){
if(height[i]=height[j]){
height[j-1]=height[j];
}else{
height[j-1]=height[i];
}
}
}
return height;
}

できません
385368:04/02/08 22:29
>>370
ありがとうございました、無事実装できました。
ポインタのポインタを使って更新していく、というところまでは
予想できたのですが、再帰呼び出しが絡んできて悩んでました。
再帰をもう少しちゃんとやり直してきます。
>>384
そうですか。さようなら。
>>384
マルチ
それもレスをもらいながらそっちを無視して。
388デフォルトの名無しさん:04/02/09 01:15
>384
int main(){
int i,g,h;
float height[2];
for(i=0;i<2;i++){
scanf("%f",&height[i]);
reheight(height);
for(i=0;i<3;i++)
printf("%f",height[i]);
}

void reheight(float *height){
inti,j;
for(j=1;j<3;j++){
for(i=0;i<3;i++){
if(*(height+i)==*(height+j)){
*(height+j-1)=*(height+j);
}else{
*(height+j-1)=*(height+i);
}
}
}
}
389デフォルトの名無しさん:04/02/09 01:29
C初心者です。
どこがおかしいのか指摘してくださいませ。
#include <stdio.h>
int sub1(int a,int *b,int *c);
int main(void)
{
int i,cnt=0,data[100],inpdata;
printf ("enter?"); scanf ("%d",&inpdata);
for(i=2;i<=inpdata;i++) {
if( (sub1(i,data,&cnt)) == 0)
printf("%d\n",i);
}
}
int sub1(int a,int *b,int *c)
{
int j;
for(j=0;j<c;j++) {
if(a%data[j]==0)
return 1;
}
data[c]=a;
c++;
return 0;
}
>>389

#include <stdio.h>

int sub1(int a,int *b,int *c);

int main(void)
{
 int i,cnt=0,data[100],inpdata;

 printf ("enter?");
 scanf ("%d",&inpdata);
  for(i=2;i<=inpdata;i++) {
   if( (sub1(i,data,&cnt)) == 0)
    printf("%d\n",i);
  }
}

int sub1(int a,int *b,int *c)
{
 int j;
 for(j=0;j<*c;j++) {
  if(a%b[j]==0)
   return 1;
 }
 b[*c]=a;
 (*c)++;
 return 0;
}
391デフォルトの名無しさん:04/02/09 01:52
>>388
こんなマルチごときにありがとうございます。
でもうごきませんw
392デフォルトの名無しさん:04/02/09 03:37
>>390
ありがとうございました!
ポインタの使い方がよく分かりました。
ワカサギ釣りの季節ですね。
>>394
ですね
>>395
だね
>>396
だな
>>394
>>395
>>396
>>398
うるさいバカ!
>>398
んだ
399デフォルトの名無しさん:04/02/09 10:51
sqrt(1-x^2)と(x-1)^2で囲まれた領域の面積のプログラムを求めるプログラム
積分のために区間[x0,1]を5分割する
分割して求めた各面積をファイルdataに記憶させる

すみません、このプログラムが全く書けないんですが、
どなたかご教授お願いします。
>>399
おもしろそうですね。

#include <stdio.h>
#include <math.h>

double f(double x){
return sqrt(1-x*x);
}
double g(double x){
return (x-1)*(x-1);
}
double abs_double(double x){
return x>0?x:-x;
}
int main(void){
int i;
double S1=0,S2=0,n=5;
for(i=1;i<=n;++i)
S1 += f(i*(1/n))*(1/n);
for(i=1;i<=n;++i)
S2 += g(i*(1/n))*(1/n);
printf("Ans=%f\n",abs_double(S1-S2));
return (0);
}
2000 以下の素数をすべて求めて、出力するプログラムを作成しなさい。

エラトステネスのふるいを使うらしいのですが、
全然分かりません。分かる方教えてください。
>>401
恐ろしく既出
過去すれ、列挙スレ、Googleいくらでも見つかる
ttp://www.hokuriku.ne.jp/fukiyo/math-obe/eratosu.htm
このくらいの説明からコーディングするのが身になるかなぁ
404デフォルトの名無しさん:04/02/09 14:25
>>402
すんません。いってきます。
>>403
ものスゴク分かりやすい説明…
やっと理解できた……。
405デフォルトの名無しさん:04/02/09 16:09
100点満点のテストの得点を仮引数
として受け取って、以下に示す5段階の
評価値に変換して S A B C D の
一文字を返す関数hyoukaを書きなさい。

100〜95 S
94〜80 A
79〜70 B
69〜60 C
59〜0 D


最速で作れる御方、教えて下さい。
地に頭をこすりつけてお願いします。


char hyouka(int score) {
if(score <= 59) return 'D';
else if(score <= 69) return 'C';
else if(score <= 79) return 'B';
else if(score <= 94) return 'A';
return 'S';
}
char hyoka(int score)
{
return "DCBAS"[(score>94)+(score>79)+(score>69)+(score>59)];
}
408デフォルトの名無しさん:04/02/09 16:32
main()
{
char city ={゙tokyo゙,゙oosaka゙,゙yokohama゙,゙hukuoka゙,゙hiroshima゙,゙nagoya゙,゙sapporo゙,゙seodai゙} ;
char p;
int i;
for(i=0;<=6;i++)
{
if(strcmp(city[i],city[i+1])<0)
{ p=city[i];
city[i]=city[i+1];
city[i+1]= p;
}
}
for(i=0;i<=7;++i)
printf(゙%10s゙,city[i]);
}


これの実行結果ってどんなんですか?

あとこのプログラムのヘッダーファイルも教えて下さい

>>408
コンパイルエラー?
>>408
やりたいことは見当がつくけど、かなりおかしい。
411デフォルトの名無しさん:04/02/09 16:45
見当でいいので教えて欲しいです。
ヘッダはわざと抜いてあります。
そういう問題なので
ソートのなりそこないだな
ヘッダは、strcmp()とprintf() で、、stdio.h と string.hか。処理系によるが
まず
char *city[];
char *p;
バブルソートのなり損ないか。
415デフォルトの名無しさん:04/02/09 18:33
>>407
ちょっと感動した
が、クビになりかねん
>>405
関数ならコレが最速だが、マクロにすれば(自分で考えてね)もう少し早くなる

char hyouka (int score)
{
static char buf[]="DD…(略)…SS";
return buf[score];
}
が、クビになりかねん
宿題だから、だいたい宿題の解答として想定されているようなコードを書いた方がいいような気もする。
>>419
質問者が"最速の関数"を求めてるのだから良いんでない?
まぁ>>405の最速の意味が"早く答えをプリーズ"ってな意味の可能性もあるけど
オレは早く答えを、、だと思ってたよ・・・
>>421
質問者が曖昧な(どうとでも取れる)問題を提示した場合は
ヒネた答えが返ってくる(答えを返す)場合が多いので要注意
423デフォルトの名無しさん:04/02/09 19:30
>>417
uにも感動した
424デフォルトの名無しさん:04/02/09 20:21
u==youか。どこのuに感動しているのかと思った。
>>424
hyouka の u だと思う。
ぼるじょあ ◆yBEncckFOU のuかもしれない。
>>424
それを書くにはこの余白ではせますぎる。
428デフォルトの名無しさん:04/02/10 00:28
すいませんすごい簡単な質問なんですが、
static char a[] = {'A', 'B', 'C', 'D'};

という定義をした後で、
A-D のうちどれかを入力させて、 a[i]のiを返させるのはどうしたらいいんでしょうか?
文章つたなくてすいません でも、なぜかできないんです。
何故かできない、というのはどこか間違ってるからでしょ。
恥ずかしがらずに、ソースをおじさんに見せてくれないかなデエヘヘヘヘヘ
>>429
・・・頭大丈夫か?
>429
キモいからイヤです。
432デフォルトの名無しさん:04/02/10 00:38
いやー、ほんとはもっと別のプログラムやってて、その一部で使おうと思ってるんですけど、
全部のせてばれるとやばいんで、その部分だけ

string temp;
cout<<"どれについてですか?AからCを選んでください。"<<endl;

cin >> temp;

int h;
for(int j = 0;;j++){

if(member[j].name==temp){

h==j;
break;
}
}

book aaa(member[h].name);
cout<<member[h].name<<"について考えるよ"<<endl;

cout << endl;
>428のソースはBSDライセンス
>>432
悪いことはいわんから、文法や演算子について勉強し直せ。

h==j;
・・・・

あと、入力と一致する項目がなかった場合、とんでもないことになるぞ。
>>432
なぜかコンパイルできない
436デフォルトの名無しさん:04/02/10 00:48
432ですけど、こんなまわりくどくしなくても簡単にできると思うんですけど、なんかないですか?
まわりくどいって・・・(なぜか絶句)
438デフォルトの名無しさん:04/02/10 00:58
すいません、できました
演算子勉強しなおします  
最近、トリックっぽいコードがあちこちでてたからな
とりあえず順次拾って突き合わせるしか手は無いだろ
ハッシュでも使うなら簡単にできんこともないが・・・
すいません いきなりですが超初心質問です

VisualC++6.0で
ファイル→新規作成
プロジェクト→Win32Application
でワークスペースを作り
main.cというファイルを追加
実行すると以下のようなエラーが出ます

コンパイル中...
main.c
リンク中...
LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/aa.exe : fatal error LNK1120: 外部参照 1 が未解決です。

ちなみにMain.cの中身は
void main(void)
{
}
と、何もおこらないはずのソースです。
このエラーはどうやったら解決できますでしょうか
初心過ぎて答えるのもアホらしいかもしれませんが全然解決策がわかりません
どなたか教えてやってください:x;
WinXPです
動作速度が求められてるわけではないだろうし、項目が3,4くらいなら、別に工夫することもないような。
>>440
まあスレ違いだが、、、
Win32 Applicationの場合、プログラムはWinMainから始まる。
mainから始める場合は、Win32 Console Applicationを選択する。
443440:04/02/10 01:10
>>442
早速やってみました

できました。どうもありがとうございました

スレ違いで大変ご迷惑をおかけしているのですが
もう一つだけ。。
Win32 Applicationの場合プログラムはWinMainから始まるとありますが
となると
WinMainのソースはどこに追加もしくは書き込めばいいのですか・・?
追加するファイル名をWinMainにするとか、そういうことじゃないっすよね・・?;x;
445440:04/02/10 01:21
すいませんでした(´・ω・`)
>>440

漏れはあなたよりもVC++のこと知らないと思いますが、何を言いたいのかよく
わかります。
C/C++の解説本で勉強してると、main関数を意識するようになりますよね。
で、いざVC++はじめると、アレ?mainがねえ〜〜と漏れも思いました。
で、>>443の方のいうように、mainはVC++ではWinMainがmain関数と同じようです。

ちなみにマイクロソフトのソフトはプログラミングに限らず、ゼロから作るより
ウィザードで雛形を作って、そっから装飾していく、という形をとることが多い
ようですね。HTTPでいえば、<html>から書き始めるのではなく、<html>とか<head>とか
はすでに用意されている状態から作るようなもの。
>>400
遅くなってすみません。本当にありがとうございました!
数学が苦手なもので、プログラムの前に自分でも解けなくて苦労していたところでした。
448デフォルトの名無しさん:04/02/10 11:41
問題:標準入力から読み込んだ文章の文字の頻度を
   調べるプログラムを作ってみましょう。
   ただし、日本語の文字は考えないこととします。

文字の頻度とはa〜zのことですよね?
それが全体の何%か?ってことになるのでしょうか?
でも、そのプログラムが組めません。
よろしくお願いします。
449デフォルトの名無しさん:04/02/10 12:10
>>448
#include<stdio.h>
#include<ctype.h>
int main(void){
int low[30]={0,},up[30]={0,},etc=0;
int ch,count=0,i;
while((ch = getchar())!=EOF){
if(isspace(ch)) continue;
else if('a' <= ch && ch <= 'z') low[ch - 'a']++;
else if('A' <= ch && 'A' <= ch) up[ch - 'A']++;
else etc++;
count++;
}
printf("総文字数:%d\n",count);
for(i=0;i<='z'-'a';i++){
printf("%c:%d個:%.2f%% ",'a'+i,low[i],(double)low[i]/count*100);
if((i+1)%5==0) puts("");
}
puts("");
for(i=0;i<='Z'-'A';i++){
printf("%c:%d個:%.2f%% ",'A'+i,up[i],(double)up[i]/count*100);
if((i+1)%5==0) puts("");
}
puts("");
printf("etc:%d個:%.2f%%\n",etc,(double)etc/count*100);
return 0;
}
450デフォルトの名無しさん:04/02/10 12:19
書き方一貫してなかった。こっちのほうがいいか。
else if(islower(ch)) low[ch - 'a']++;
else if(isupper(ch)) up[ch - 'A']++;
ctype.h使いたくなかったら
isspaceの方を を ch != ' ' || ch != '\n' に返るとか。
#include <stdio.h>

int main(void) {
  int cmap[0x80]={0};
  char s[1024];
  int i=0;
  int total=0;

  gets(s);
  while( s[i] ){
    if( s[i]>0 && s[i]<0x80 ){
      cmap[s[i]]++;
      i++;
      total++;
    }else{
      i+=2;
    }
  }

  printf("\n有効文字数 %d文字\n\n",total);
  for(i=0;i<0x80;i++){
    if( cmap[i]>0 ){
      printf("%c : %3d回 (%7.2f%%)\n",i,cmap[i],(float)(cmap[i]*100)/total);
    }
  }

  return 0;
}
452451:04/02/10 12:47
文字数制限しちゃった・・・
453451:04/02/10 13:06
( Д)  ゚ ゚

Alphabetだけでよかったのね・・・
勘違いしてたっぽ
constructor で初期化するときに配列ってどうやって初期化するのでしょうか?

Hogehoge::Hogehoge(void)
455454:04/02/10 14:12
普通の変数は以下のようにできますが、配列は{}の中じゃないとできないでしょうか?

Hogehoge::Hogehoge(void)
: m_a(0),m_b(0)
{}

それくらいは、聞く前に自分でやってみなさい。
そのほうが早いですよ。
>>454-455にはレスの必要はありません。
458デフォルトの名無しさん:04/02/10 16:41
アルゴリズムで曜日の算出法おしえてください!
>>458
Zellerの公式?
A太郎はあるバイトをしておりそのバイト先は
フレックスタイム制を導入しておりいつ出社しても帰宅してもかまわない事になっている
ただし午後11時から午前7時までは出社できない
このとき彼の一日の出社時間をそれぞれ24時間制の4桁の数字(午後3時32分は1532)
として入力しその日のアルバイト代を計算するプログラムを書け。いや書いてください;;
賃金は時給1000円で1時間未満は払われないとする

出来ますか?よろしくおながいします
461デフォルトの名無しさん:04/02/10 17:01
アルゴリズムで曜日の算出法おしえてください!
Y.M.D
△Y=2000−Y
△X=△Y/4
△Z=△Y−△X
1990/1/1をこれに当てはめると75がでてそのあとどうするばよいかわかりません


太郎君は、台所にあるリンゴを5個持っていきました。
その後、次郎君は、台所にあるリンゴを3個持っていきました。
その後、三郎君が、台所を覗くとリンゴが4個ありました。
太郎君がリンゴを持っていく前には、台所にリンゴはいくつあったでしょうか?

お願いします
>>460
出社時間だけでは計算できない。
>>460
#include <stdio.h>
int main() {
int from,to,fromhour,fromminute,tohour,tominute,workminute;

while(1) {
printf("出社時間:");
scanf("%d",&from);
if(from < 700 || from > 2259) continue;
fromhour = from / 100;
fromminute = from - fromhour * 100;
if(fromminute > 59) continue;
break;
}
while(1) {
printf("退社時間:");
scanf("%d",&to);
if((to < 700 || to > 2259) || from > to) continue;
tohour = to / 100;
tominute = to - tohour * 100;
if(tominute > 59) continue;
break;
}
workminute = (tohour - fromhour) * 60 + (tominute - fromminute);
printf("給与:%d円\n",workminute / 60 * 1000);
return 0;
}
>>461
>>459を検索。

>>462
ネタ?何が問題なのやら。
466デフォルトの名無しさん:04/02/10 17:50
一応ツェラーの法則っぽいです。わかりやすく曜日出す方法教えてください。
>>466
だから検索しろって。
調べてわからんかった聞きなさい。
その際、何で調べたかを書きなさい。

でないと、自分のためにならんぞ。
469デフォルトの名無しさん:04/02/10 18:20
調べてもわかりませんでした。公式に入れても0〜6の値がでないです。
ちゃんと検索すれば、ソースコードがそのまま出てるサイトも見つかるんだがな。
調べる力が欠落しとるな。
本当にプログラマとしてやっていく気があるのか?
> ツェラーの公式が調べられない人
月が1,2月の時は前年の13,14月として計算している?
474デフォルトの名無しさん:04/02/10 18:38
最後に7で割るには少数の部分はどうすれば?
475デフォルトの名無しさん:04/02/10 19:03
C言語についての質問ですが
ファイルから二次元配列を取得したい場合
どうすればいいんですか?
例えば

ファイルから1文字取得したい場合はfgetc(fp);
ファイルから1行取得したい場合はfgets(buf,sizeof(buf),fp);
ファイルから1データ取得したい場合はfscanf(fp,"%s",buf);

じゃないですか。

ファイルから二次元配列を取得したい場合は
何を使えばいいんですか?
>>475
ファイルから読み込むのはデータであって、変数を読み込むわけじゃない。
ファイルにどうデータが入っているかによるが、
基本的には、1個ずつ取り出して、1個ずつ配列に入れる。
478デフォルトの名無しさん:04/02/10 19:49
A 守備:54321 攻撃:13425
B 守備:13425 攻撃:12345
Aの得点:0
Bの得点:(4回目の)4-2+(5回目の)5-1=6
でBの勝ち

A 守備:54321 攻撃:13425
B 守備:12345 攻撃:54321
Aの得点:(2回目の)4-3+(3回目の)4-3=2
Bの得点:0
でAの勝ち

っていう同じ回の攻撃-守備の値が+の場合その値が得点になるゲームがあるんです。
二人分の(20個の)数字を打ち込めば勝敗が出るプログラムって簡単に作れますか?
できれば相手の10個の数字を数十人分入力してから、自分の10個の数字をイロイロ変えられるものがいいです

もし数分で作れるならば作っていただけないでしょうか?
もし手間がかかるような場合は、諦めます。その時は先に謝っておきます。スレ汚しすいませんです。
数分では無理。
480478:04/02/10 20:10
すいませんでした
そういうのはexcel使うのがいいかも
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_DATA (256)

struct DAT{
  char atk[6];
  char def[6];
};

void intput( char* msg, char* ele )
{
  while(1){
    char s[256];
    printf(msg); scanf("%s", s);
    if( strlen(s) != 5 ){
      printf("5桁つったろうが!\n");
      continue;
    }
    strcpy(ele,s);
    break;
  }
}

int main(void)
{
  DAT dat[MAX_DATA]={0};
  DAT self={0};

  int i,j;
  int total=0;
以下のようなデータがあります。
(記号で表されている部分は実際には数値です)
このとき、同じ記号が上下左右に4個以上
結びついているのを見つけるプログラムと
そのときに結びついている最大個数を見つけるプログラムを
教えてください。
再帰を使うらしいのですが、さっぱりなんです

□★●▲◆
□□□●●
★__★◆
▲▲□◆◆
★▲▲▲▲
●●_▲◆
  for(i=0; i<MAX_DATA; i++){
    intput("Aの攻撃! (5桁) : ", dat[i].atk);
    intput("Aの防御! (5桁) : ", dat[i].def);
    total++;
    printf("Aの入力を続ける? (y/n) : "); getchar();
    if( getchar()=='n' ) break;
  }
  puts("--------------------------------------------------------");
  for(i=0; i<total; i++){
    printf("A%d 攻撃:%s 守備:%s\n", i, dat[i].atk, dat[i].def );
  }
  puts("--------------------------------------------------------");
  while(1){
    intput("Bの攻撃! (5桁) : ", self.atk);
    intput("Bの防御! (5桁) : ", self.def);

    // 結果表示
    puts("--------------------------------------------------------");
    for(i=0; i<total; i++){
      int point_a = 0;
      int point_b = 0;
      for(j=0; j<5; j++){
        if( dat[i].atk[j] > self.def[j] ) point_a += dat[i].atk[j] - self.def[j];
        if( self.atk[j] > dat[i].def[j] ) point_b += self.atk[j] - dat[i].def[j];
      }
    printf("A%dの得点:%2d Bの得点:%2d ", i, point_a, point_b);
    if( point_a > point_b ){
      printf("でAの勝ち\n");
    }else if( point_b > point_a ){
      printf("でBの勝ち\n");
    }else{
      printf("で引き分け\n");
    }
  }
  printf("\nBの入力を続ける? (y/n) : "); getchar();
  if( getchar()=='n' )break;
    puts("--------------------------------------------------------");
  }
  return 0;
}


割り込まれちゃった (´▽`)
>>483
それ宿題?
>>486
ぷよぷよでも自作したいんじゃない?
488478:04/02/10 21:19
>>482-485
どうもありがとうございます
どうやったらアプリケーションにできるんですかね
>>488
コ ン パ イ ル す る
素敵な質問にワラタ
リンクも必要だYO!
492478:04/02/10 21:36
なんか専用のソフトがいると信じ込んでいたんですけど・・・
違うんですか?
もともとネタだったのか、それとも騙りなのか
問題はそこだな
この板の存在を全否定するような質問だな
もともとCの宿題でもなんでもなくて、
>>478みたいソフトをこの板の住人に作って欲しかっただけ。
496デフォルトの名無しさん:04/02/10 21:47
>>464
神!!ありがとうございます!
なんでこんなすらっと出てくるんだろうか
不思議でなりません
ホントありがとうございやした!
497478:04/02/10 21:50
>>495
まったくもってその通りです
やっぱりスレ違いでしたか・・・ごめんなさい
「すれ立てるまでもない質問はここで」スレから誘導されてるのね。
ま、いいや。 暇つぶしにはなったから
>>464のwhile(1)が無性に気になるお年頃です。
妙な書き方するなあ・・・
Cでthrowを実現したかったんでしょうな
501500:04/02/10 22:07
というわけではないか・・・
>>11は人生の初心者
>>502は人生の落第者

いや嘘でつ、漏れでつよ落第者は。
新年度が始まる前に自殺しまつ。
その頃、恐らく漏れはもうこの世に
存在しないと思いまつ。そのときになったら
漏れのことを少しでいいから思いだして下さい。
>>503
はい、さようなら。
はい消えたー (キンキン風)
>>486-487
宿題ですー。さめがめに繋げるのかなーって思ったけど、
ぷよぷよという方向もありますね。

とりあえず、ソース検索してみるが、この後どう発展させるかわからないから
拡張性を残すのが難しいんですが
>>506
ある一点を基準に、接しているすべての方向に検索する、というのがいいかな。
課題出されました。

以下課題全文
type方の二つの値を交換する関数形式マクロ
  swap(type,a,b)
を定義せよ。例えばint型の変数x,yの値が5,10であるとき、swap(int,x,y)
呼出し後は,x,yには10,5が格納されていなければならない。

以上です。誰かお願いします。
509448:04/02/10 23:58
ありがとうございました。
これを見てもう一度勉強します。
#define swap(t,a,b) { t c; c=a; a=b; b=c; }
>>510
 ありがとうございます!できました!
512デフォルトの名無しさん:04/02/11 00:27
void func( char item[]) {
strcat (item, "Abc");
strcat (item, "Def");
}

int main(){
char *string[1] = {NULL};
func(string[0]);
}

main()で宣言した文字列配列の中に、別関数funcで複数の文字列を結合したものを
代入したいのですが、いい方法はないでしょうか?
>>506
#include <stdio.h>
#define CAPX (5)
#define CAPY (6)

int find[CAPY][CAPX] = {0};
int map[CAPY][CAPX] = {
  { '□','★','●','▲','◆' },
  { '□','□','□','●','●' },
  { '★','_','_','★','◆' },
  { '▲','▲','□','◆','◆' },
  { '★','▲','▲','▲','▲' },
  { '●','●','_','▲','◆' },
};

void search( int x, int y, int tgt )
{
  if(find[y][x] == 0 && map[y][x] == tgt){
    find[y][x]++;
    if(x<CAPX-1)search(x+1,y,tgt);  // 右
    if(y<CAPY-1)search(x,y+1,tgt);  // 下
    if(x>1)search(x-1,y,tgt);      // 左
    if(y>1)search(x,y+1,tgt);      // 上
    }
}
一部間違えてた
#include <stdio.h>
#define CAPX (5)
#define CAPY (6)

int find[CAPY][CAPX] = {0};
int map[CAPY][CAPX] = {
  { '□','★','●','▲','◆' },
  { '□','□','□','●','●' },
  { '★','_','_','★','◆' },
  { '▲','▲','□','◆','◆' },
  { '★','▲','▲','▲','▲' },
  { '●','●','_','▲','◆' },
};

void search( int x, int y, int tgt )
{
  if(find[y][x] == 0 && map[y][x] == tgt){
    find[y][x]++;
    if(x<CAPX-1)search(x+1,y,tgt);  // 右
    if(y<CAPY-1)search(x,y+1,tgt);  // 下
    if(x>0)search(x-1,y,tgt);       // 左
    if(y>0)search(x,y-1,tgt);       // 上
  }
}
>>0x200
ガッ
>514の続き

int main(void)
{
  int i,j,x,y,cnt;
  printf("座標を入力しる (x,y) : ");
  scanf("%d,%d",&x,&y);
  if(x<0 || x>CAPX-1 || y<0 || y>CAPY-1){
    printf("範囲超えてるYO!\n");
    return 0;
  }
  // 再帰
  search(x,y,map[y][x]);
  
  // 表示
  cnt = 0;
  for(i=0; i<CAPY; i++){
    for(j=0; j<CAPX; j++){
      printf("%2d ", find[i][j]);
      if(find[i][j]!=0)cnt++;
    }
    puts("");
  }
  printf("\ncnt = %d\n", cnt);
  return 0;
}
517デフォルトの名無しさん:04/02/11 00:50
#include<stdio.h>
#include<string.h>
void func( char item[]) {
char *s1 = "Abc",*s2 = "Def";
sprintf(item,"%s%s",s1,s2);
}

int main(){
char string[10][100];
func(string[0]);
printf("string:%s\n",string[0]);
return 0;
}
#include<stdio.h>
main(){
int s,i;
for(i=1;i<=50;i++)
s=s+i;
printf("sum=%d\n");
}
質問です。これ↑でも動くんですが、
↓これが本当の回答なんですが、↑じゃダメなんでしょうか?
#include<stdio.h>
main(){
int s,i;s=0;
for(i=1;i<=50;i++)
s=s+i;
printf("sum=%d\n",s);
}
>>518
int s;
と宣言した場合、sの値は不定。0かもしれないし、2847かもしれない。
>>518
たまたま動いてるだけだ
>>519,520
ありがとうございました
もっとがんばります
>>518
このプログラムはsを表示しないと意味がないんじゃないのか?
ん??
printfは異常探知能力弱いからなあ
gccに-Wall付けて使う事をお勧めする
525デフォルトの名無しさん:04/02/11 06:57
main () {
  while(1)
   switch (1)
   break;
  printf("end\n");
}

これが止まらないってことは、
switch内にあるbreakはcaseやdefault:を書かなくても
switch側のbreakとして認識させられるということでしょうか。
vc6とgccでは止まりませんでした。
普通は止まるの?
>>525
> switch内にあるbreakはcaseやdefault:を書かなくても
その場合、何も実行されない。

> switch側のbreakとして認識させられるということでしょうか。
そう。
#include <stdio.h>
main()
{
int wa,seki;

wa = 0;
seki = 1;
for(i=0 ; i<=10 ; i++){
wa += i;
seki *= i;
}

printf("wa=%d\n", wa);
printf("seki=%d\n", seki);
}

間違いを探してくださいおながいします
>>528
ここで質問すること。
seki = 1
1 *= 0 = 0
0 *= 1 = 0
0 *= 2 = 0




0 *= 10 = 0
>>528
期待通りに動いたけど、こういう事?
< for(i=0 ; i<=10 ; i++){
> for(i=1 ; i<=10 ; i++){
そもそもコンパイルできたか?
533528:04/02/11 12:52
コンパイルが出来ないのですよ
8行目になにやらエラーがでてる模様で・・・
int i;
535528:04/02/11 13:15
>>534
ぎゃー
iが抜けてたとは・・・だから8行目でエラーでてたのか…
ホントもうすみませぬ・・・
ありがとうございました!
エラーにiが宣言されてないとか出ないのかね?
エラーメッセージに意味のあることが書いてあると
知っているやつは、こんなとこで質問しない
まだ作りかけなんですけどどうか見てください

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

int main(void)
{
int medal = 10;
int bet;
int me,opo;

srand(time(NULL));

opo = rand() % 3 + 1;

printf("☆じゃんけんゲーム!☆\n");
printf("現在 %d 枚メダルを持っています。\n",medal);
printf("何枚賭けますか?(枚数を入力してください): ");
scanf("%d", &bet);
while((bet > medal) || (bet < 1)){
printf("賭けることのできるメダルの枚数は1枚以上、また自分が持っている範囲です。: ");
scanf("%d", &bet);
}

medal = medal - bet;

539続き:04/02/11 15:09
printf("「じゃーん、けーん…」\n");
printf("(出す手を決めてください。(グー:1,チョキ:2,パー:3)) : ");
scanf("%d", &me);
while((me < 1) || (3 < me)){
printf("1から3までの値を入力してください。 : ");
scanf("%d", &me);
}
printf("「ポン!」\n\n");
printf("あなた: ,コンピュータ: \n\n");

if(((me = 1)&&(opo = 2)) || ((me = 2)&&(opo = 3)) || ((me = 3)&&(opo = 1))){
printf("あなたの勝ちです!\n");
}
if(((me = 1)&&(opo = 3)) || ((me = 2)&&(opo = 1)) || ((me = 3)&&(opo = 2))){
printf("あなたの負けです…。\n");
}
if(me = opo){
printf("引き分けです。\n");
}
printf("%d",opo);

return 0;
}
540:04/02/11 15:10
乱数を使って相手の手をランダムに出すというプログラムを作りたいのですが
毎回相手の手が同じ値を出してしまいます。これはどうしてでしょうか?
また、じゃんけんの結果にかかわらず「あなたの勝ちです」「あなたの負けです」「引き分けです」のメッセージが3つ同時に出てしまいます。
たぶんif文の書き方が間違っていると思うんですけど、どう直したらよいのでしょうか…。どうか教えてください。
>>540
=は代入演算子だから==を使うべし。
542538:04/02/11 15:24
>>541
ありがとうございます。
↓のように直してみました。

if(((me == 1)&&(opo == 2)) || ((me == 2)&&(opo == 3)) || ((me == 3)&&(opo == 1))){
printf("あなたの勝ちです!\n");
}
else if(((me == 1)&&(opo = 3)) || ((me == 2)&&(opo == 1)) || ((me == 3)&&(opo == 2))){
printf("あなたの負けです…。\n");
}
else{
printf("引き分けです。\n");

できれば、自分の手の値を入力した後にmeとopoの値に応じて
「あなた: グー、相手:チョキ
あなたの勝ちです!」
というように表示させたいのですが、これはどうしたらよいでしょうか。
if文は↓のようにすると多少短くなる。
if((opo-me==1)||(opo-me==-2)){
printf("あなたの勝ちです!\n");
}
const char *hands[] = {"グー", "チョキ", "パー"};
とmainの先頭で定義して、
printf("あなた: %s,コンピュータ: %s\n\n", hands[me], hands[opo]);
この場合。
printf("あなた: %s,コンピュータ: %s\n\n", hands[me-1], hands[opo-1]);
>>545
確かにそうだ。
指摘サンクス。
>>543
それなら、(opo-me+3)%3 を0,1,2の場合で分類した方がもっと短い。
548538:04/02/11 16:08
ありがとうございます。if文のところも簡略化しました。
また問題が発生してしまったんですが、グーチョキパーの配列の宣言ところで
char hands[3] = {"グー", "チョキ", "パー"};
とするとエラーが出てしまいます。

$ gcc janken.c
janken.c: In function `main':
janken.c:7: excess elements in char array initializer
janken.c:7: (near initialization for `hands')
janken.c:7: excess elements in char array initializer
janken.c:7: (near initialization for `hands')
janken.c:7: warning: initializer-string for array of chars is too long

↑こんなエラー文です。
const char *hands[] = {"グー", "チョキ", "パー"}; という書き方は習ってないので使ってはいけないので自分で
一番上のように直したのですが…どう直すべきでしょうか。
> どう直すべきでしょうか。

まずは「習ってないので使ってはいけない」を直すべきだな。
>>548
> const char *hands[] = {"グー", "チョキ", "パー"}; という書き方は習ってないので使ってはいけないので自分で
> 一番上のように直したのですが…どう直すべきでしょうか。
ワロタ
>>548
それでは素直に、
void print_hand(int h)
{
if(h == 1) printf("グー");
else if(h == 2) printf("チョキ");
else if(h == 3) printf("パー");
}
として、
printf("あなた: ");
print_hand(me);
printf("コンピュータ: ");
print_hand(opo);
printf("\n\n");
とすればよかろう。
関数は習ってないので…

とか言われそうだなw
その場合は、
#define print_hand(a) { .. }
554538:04/02/11 16:27
どうやら厨房丸出しの発言してしまったようですが
わからないので必死です 関数は習いました。使わせてもらいます。
555ぼるじょあ ◆yBEncckFOU :04/02/11 17:24
(・3・) アルェー 僕一人かYO
>>548
char hands[][7] = {"グー", "チョキ", "パー"};

(二次元配列もダメか ?)
557538:04/02/11 18:03
>>556
すいません。もう関数でやってしまいました。
けど配列もプログラム中に入れたいと思います。というか入れなきゃだめなんです。
頼りっぱなしで申し訳ないですが、何かいい案ないでしょうか…おそらくこれが最後の質問です
558538:04/02/11 18:04
ちなみにこんな感じになりました。内容のへボさは見逃してください…

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

void print_hand(int);

int main(void)
{
int a,b,i;
int medal = 10;
int bet,times;
int me,opo;

srand(time(NULL));

printf("☆じゃんけんゲーム!☆\n\n");

for(i = 1; i < 100; i++){

opo = rand() % 3 + 1;
times = rand() % 3 + 1;

printf("現在 %d 枚メダルを持っています。\n",medal);
printf("何枚賭けますか?(枚数を入力してください): ");
scanf("%d", &bet);
while((bet > medal) || (bet < 1)){
printf("賭けることのできるメダルの枚数は1枚以上、また自分が持っている範囲です。: ");
scanf("%d", &bet);
}
559538:04/02/11 18:05
medal = medal - bet;

printf("「じゃーん、けーん…」\n");
printf("(出す手を決めてください。(グー:1,チョキ:2,パー:3)) : ");
scanf("%d", &me);
while((me < 1) || (3 < me)){
printf("1から3までの値を入力してください。 : ");
scanf("%d", &me);
}
printf("「ポン!」\n\n");
printf("あなた: ");
print_hand(me);
printf("、コンピュータ: ");
print_hand(opo);
printf("\n\n");

if((opo - me == 1) || (opo - me == -2)){
printf("あなたの勝ちです!\n");
printf("メダル %d 枚GET!",bet*times);

medal = medal + bet + (bet*times);

}
else if((opo - me == 2) || (opo - me == -1)) {
printf("あなたの負けです…。\n");
}
else if(me == opo){
printf("引き分けです。\n");
medal = medal + bet;
}

560538:04/02/11 18:06
if(medal < 1){
printf("メダルがなくなったのでゲーム終了です。さようなら〜。\n");
break;
}

printf("\n\n");

printf("ゲームを続けますか?\n");
printf("はい→1,いいえ→0 : ");
scanf("%d",&a);

while((a < 0) || (a > 1)){
printf("0 か 1 を入力してください : ");
scanf("%d", &a);
}

if(a == 0){
printf("ゲームを終了します\n");
printf("残ったメダルは %d 枚です。 \n", medal);
break;
}


}


return 0;
}
561538:04/02/11 18:06

void print_hand(int h)
{
if(h == 1){
printf("グー");
}else if(h == 2){
printf("チョキ");
}else if(h == 3){
printf("パー");
}
return;
}

以上です。
const がだめなら外せばいい。
ポインタの配列がだめなのか?
563デフォルトの名無しさん:04/02/11 20:18
よろしくお願いします

 1次元配列a[]に入力されたデータを
 配列とポインタの2つの方法で表示しなさい。
>>563
それだけではどうしようもありません。
565デフォルトの名無しさん:04/02/11 21:26
/*
>>563
問題の意味をかんちがいしてるかもしれませんが・・・・。
-1を番兵とした場合の例です
*/

#include<stdio.h>

int main()
{
int a[] = {1,2,3,4,5,-1}; /* 配列 */
int* p = a; /* ポインタ */
int i; /* ループカウンタ */
/* 配列で表示 */
for(i=0;a[i]>0;i++)
{
printf("a[%d] = %d \n",i,a[i]);
}
/* ポインタで表示 */
while(*p>0)
{
printf("(int*)%p = %d \n",p,*p);
p++;
}

return 0;
}
566563:04/02/12 00:30
>564
すみません。
問題がこれだけしか書いていないんです。

>565
ありがとうございました。
>566
1次元配列a[]に入力された、でしたね・・・・。
ごめんなさい。 ~~~~~
568デフォルトの名無しさん:04/02/12 19:32
お願いします。

ttp://www.geocities.co.jp/AnimeComic-Pen/9052/kadai.jpg

前のシグマは後ろの方にもかかってます。
助けてください。m(__)m
>>568
さっぱりわかんね
double p_out = 0;

for(int k=0; k<L; ++k)
{
double tmp = 0;
for(int n=0; n<L-k; ++n)
{
tmp += Combination(L+M-1, M+k+n) * pow(M * K * gamma_th / (gamma_th + beta), n);
}
tmp *= pow(gamma_th/beta, M+k) / pow(1 + gamma_th/beta, L+M-1);
p_out += tmp;
}
p_out *= exp(-M * K * beta / (gamma_th + beta));


Combination は自分で実装しる。
571568:04/02/12 22:51
ありがとうございます!

がんばります。つД`)・゚・。・゚゚・*:.。..。.:*・゚
572デフォルトの名無しさん:04/02/12 23:05
C言語の問題です。

2人の生徒の氏名(英字20文字以内)、身長、体重、成績(a or b or c)
を入力し構造体型配列に格納してから、表示する。

実行結果例
入力
name : izumi kengo
height : 170
weight : 60.5
result : b
name : miyamoto kazuya
height : 180
weight : 63.2
result : a
表示
name height weight result
izumi kengo 170 60.5 b
miyamoto kazuya 180 63.2 a

よろしくお願いします。
>>572
struct Student
{
char name[21];
int height;
double weight;
int result;
};

構造体はこれにして入出力は自分で書いてみよーw練習って事で
>>1
>わからない宿題を片づけますYO!
って言ってるのに
>>573
>構造体はこれにして入出力は自分で書いてみよーw練習って事で
って全然片付いてないじゃん
宿題といてください。

文字列 s 内のすべての数字文字を削除する関数
  void del(char s[])
を作成せよ。(例えば"a1s2d3"を受け取ったら"asd"とする)
引数はmain()で入力した任意の文字列です。
上の関数のところをお願いします!
>>575
void del(char s[])
{
char *p,*q;
for(p=q=s;*p;p++)if(*p<'0'||*p>'9')*q++=*p;
*q='\0';
return;
}
宿題的にはisnum(*p)とか
#include<stdlib.h>
#include<string.h>
void del(char s[])
{
int i,n,size;
char *buff;

size = strlen(s);
buff = (char*)malloc( sizeof(char) * size );
for( i=0,n=0;i<size;i++ )
{
if( s[i] < '0' || s[i] > '9' )
buff[n++] = s[i];
}
buff[n]='\0';
strcpy( s,buff );
free(buff);
}
579575:04/02/13 01:31
>>576,578
どちらともできました!ありがとうございました!
580575:04/02/13 02:03
三つのint型整数を昇順に並び替える関数作ってください
引数はint *n1,int *n2,int *n3で、それぞれ別の関数で入力した任意の整数
581575:04/02/13 02:07
↑事故解決しました。
スレ汚しスマソ
示談?
>>572
中途半端だけど、これ以上は面倒なので…

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

#define NAMESIZE 21
#define INPUTSIZE 100
#define MARGINSIZE 2
#define DEFSIZE ( ( INPUTSIZE > NAMESIZE ? INPUTSIZE : NAMESIZE ) + MARGINSIZE )

struct Student {
  char *name ;
  int height ;
  double weight ;
  char result ; } ;

char *Input ( char *s ) {
  char *p, *r = calloc ( 1, DEFSIZE ) ;
  printf ( "%s", s ) ;
  fgets ( r, DEFSIZE, stdin ) ;
  if ( ( p = strrchr ( r, '\n' ) ) != NULL ) *p = '\0' ;
  return r ; }

char *InputName ( void ) {
  char *p, *r = malloc ( NAMESIZE ) ;
  p = Input ( "name :" ) ;
  *( p + NAMESIZE - 1 ) = '\0' ;
  memcpy ( r, p, NAMESIZE ) ;
  free ( p ) ;
  return r ; }
int InputHeight ( void ) {
  int r ;
  char *p ;
  p = Input ( "height :" ) ;
  r = atoi ( p ) ;
  free ( p ) ;
  return r ; }

double InputWeight ( void ) {
  double r ;
  char *p ;
  p = Input ( "weight :" ) ;
  r = atof ( p ) ;
  free ( p ) ;
  return r ; }

char InputResult ( void ) {
  char r, *p ;
  p = Input ( "result :" ) ;
  r = *p ;
  free ( p ) ;
  return r ; }
struct Student *MakeStudents ( size_t n ) {
  size_t m ;
  struct Student *sp ;
  sp = calloc ( n, sizeof ( *sp ) ) ;
  for ( m = 0 ; m < n ; m++ ) {
    ( sp + m )->name = InputName () ;
    ( sp + m )->height = InputHeight () ;
    ( sp + m )->weight = InputWeight () ;
    ( sp + m )->result = InputResult () ; }
  return sp ; }

void PrintStudents ( struct Student *sp, size_t n ) {
  size_t m ;
  printf ( "name height weight result\n" ) ;
  for ( m = 0 ; m < n ; m++ )
    printf ( "%s %d %.1f %c\n", sp->name, sp->height, sp->weight, sp->result ) ,sp++ ; }

void FreeStudents ( struct Student *sp, size_t n ) {
  size_t m ;
  for ( m = 0 ; m < n ; m++ ) free ( ( sp + m )->name ) ;
  free ( sp ) ; }
int main() {
  struct Student *students ;
  students = MakeStudents ( 2 ) ;
  PrintStudents ( students, 2 ) ;
  FreeStudents ( students, 2 ) ;
  return 0 ; }
587583-586:04/02/13 03:02
まぁ、かなり無駄に作ってるから
必要ない所は、適当に自分で削って下さい
588572:04/02/13 09:04
>>583-586
ありがとうございました。助かりました。
589デフォルトの名無しさん:04/02/13 10:41
C言語です。
名前を尋ねて挨拶するプログラムを作成せよ。
実行例
お名前は : Shibata Akira (入力)
こんにちは、Shibata Akiraさん!(出力)

自分が作成したプログラム

#include <stdio.h>
int main (void){
char name[40];
printf("お名前は : ");
scanf("%s",name);
printf("こんにちは、%sさん!\n",name);
return 0;
}

このプログラムだと
お名前は : Shibata Akira
こんにちは、Shibataさん!
となってしまいスペースをいれると駄目になってしまうんですが、
どうすればいいんでしょうか。どなたかお願いします。
scanf("%s %s",name, name2);

つか、スペース込みで取るのはscanf では無理、仕様だ。
gets 等を使う
ありがとうございます。
scanfやめてgets等を調べて使ってみます。
ちょっといいこと聞いちゃった☆
593デフォルトの名無しさん:04/02/13 11:18
おらも!
藻前ら、そんなことも知らんのか・・・・
なにこのスレ・・・ AA(ry
C++でお願いしたいんですが・・・

Aというテキストファイルがあります。Aのテキストファイルの中身↓
 point[1,2,3,4,5,6,7,8,9,10・・・・・]
coord[-1,-2,-3,-4,-5,-6,-7・・・・・]
 index[12,13,14,15,16,17,18・・・・・] (数字列の個数はそれぞれ不明)

Aというテキストファイルを読み込んだ際に、pointの数字列だけを持ってきて、別の
Bというテキストファイルに出力(書き込む)プログラムを作りたいのですが、

openでAテキストを開いて、getsでpoint列を読み出すことは出来ても、Bテキストに
書き込むことが出来ません。どうか教えていただけませんか?
藻前らこれで勉強してください。
http://kuds.at.infoseek.co.jp/Other/erotrivia.html
598デフォルトの名無しさん:04/02/13 12:53
いきなりソース丸写しで申し訳ないんですが
解説お願いします私としては二つの整数の差を比較する
際どうゆう書き方をしたらいいのか分かりません。
/* 二つの整数の差を比較して10以下か10以上か出力せよ
*/
#include <stdio.h>
int main(void)
{
int n1,n2,sa1,sa2;
puts("二つの整数を入力して下さい。");
printf("整数A>");scanf("%d",&n1);
printf("整数B>");scanf("%d",&n2);
n1-n2=sa1;
n2-n1=sa2;
if(n1-n2<=10 || n2-n1<=10)/*条件判断 10以下*/
{if(sa1<0 || sa2<0) /*二つの差が負の時*/
printf("それらの差は10以下です。\n");
else /*二つの差が正の時*/
printf("それらの差は10以下です\n");
}
if(n1-n2>=0 || n2-n1>=0)/*条件判断 10以上*/
{if(sa1<0 ||sa2<0)
printf("それらの差は10以上です。\n");
else
printf("それらの差は10以上です。\n");
}
return (0);
}
if (abs(n1-n2) >= 10) {
 printf("それらの差は10以上です。\n");
}else{
 printf("それらの差は10以下です\n");}
>>596 は、書き出すデータが作れないのか、
そのデータをファイルに書き出せないのか
どっちよ。できなかったソースも書いてくれ
#include <stdio.h>
int main(void)
{
int n1,n2,sa1,sa2;
puts("二つの整数を入力して下さい。");
printf("整数A>");scanf("%d",&n1);
printf("整数B>");scanf("%d",&n2);
sa1 = n1 - n2; //書き方が逆。n2-n1は符号が違うだけだから必要ない。
if(sa1 < 10 && sa1 > -10){
printf("それらの差は10未満です。\n"); //以下ってのは10を含める。
}
else{
printf("それらの差は10以上です。\n");
}

return (0);
}
"nullpo"と入力されるまで標準入力から入力を受け付け
もし"nullpoと入力されたなら、入力を中断し
今までに入力された文字を出力し終了する
その際、入力できる限界数を設けてはならない
(つまり、char s[100][100];の様にしてはならない)


$./a.out
終了するには"nullpo"と入力してください
1> 123
2> ABCDE
3> nullpo
入力された文字を再表示します
1> 123
2> ABCDE
3> nullpo

/*
言語はCで。
他に制限はとくにありません。
*/
>>602
限界無しと言うが、入力行数は int の限界までじゃだめ?
>>602
無限というのは無理だ。
アドレッシングにも限界がある。
記憶領域は有限だから妥協しろ。
605602:04/02/13 16:07
>603-604
それは出題者も分かっていると思います
限界を設けないというのは
「プログラムの実行時に変数を入力させ、
その数の分だけメモリを動的に確保する・・・・」
というのではなく
「"nullpo"が入力されるまで文字をメモリにためていく」
と、いう事だと思います
もちろん、メモリの限界はあります
607606:04/02/13 16:21
ごめんなさいなんかおかしかったので修正したけど
これもバグが混じってるかも。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1074774948&res=6
609608:04/02/13 16:38
単方向でよかった・・・ (´・ω・`)ショボーン
入力にgets()を使うのはまずくないか?
1MB以上入力されたら終わる・・・
fgetsのがまだ安全かも
>>610
言われてみればそうだ。

#define MAX_BUFFER_SIZE (1024 * 1024 * 1)
fgets( buf, MAX_BUFFER_SIZE, stdin );
612デフォルトの名無しさん:04/02/13 16:50
えとー、このスレでいいんかいな?一応宿題です。
というか、宿題中で書いてるプログラムの質問なんですが、
hogeの値が0なら1に、1なら2に、・・・・9なら10に、10なら0に。
という風に、0から10を、リング型っぽく繋ぐ、のが出てきて、
これはhoge = (hoge + 1) % 11;で出来るんですが、
これのマイナスバージョンはどういう計算をすればいいでしょうか。
つまりhogeが10なら9に、9なら8に・・・・1なら0に、0なら10に。と言う感じです。
今は0の場合だけif文で分けて10にしてまつ・・・。なんか効率悪い気がして。
hoge = (hoge + 10) % 11;
614612:04/02/13 16:56
>>613
あ!なるほど!頭が回らんかった・・・馬鹿かも自分・・・
ありがとうございます!チュッチュッ!
615608:04/02/13 16:59
漏れのは問題の条件を満たしていないから、
>>607が正解かな


>>614
昔、同じように悩んだけど、
今はすぐ出てくるようになったんだYO!
616602:04/02/13 17:51
>>606さん>>608さんありがとうございます
617589:04/02/13 21:13
>>599
>>601
の名無しさん
解決しました。
有難うございます。
618デフォルトの名無しさん:04/02/13 21:28
こういうのはここでいいんでしょうか?
コンパイルすると宣言の構文エラーというのが出ます。これはどういうときでるんでしょうか?
ソースはばれるとやばいのでのせられませんすいません。
619デフォルトの名無しさん:04/02/13 21:51
>>618
解析しようがない時や式が成り立たないとき。
構文がおかしいとき
せめてエラーメッセージくらい正確に書け
    /\___/ヽ   ( こ
   /    ::::::::::::::::\ 
  . |  ,,-‐‐   ‐‐-、 .:::|  ┼'っ 
  |  '"⌒` ,: '"⌒` :::|   l
.   |  , 、_:< __,、  .::|  
   \ /\i_i_i_/ヽ ::/  l | 
   /`ー‐--‐‐―´\    ノ
中カッコが抜けてるとかセミコロンが抜けてるとかそもそもincludeがいっぱい並んでる辺りがおかしいとか。
とりあえず、カッコの対応関係とセミコロンの確認から始めよう。
623デフォルトの名無しさん:04/02/13 22:48
このプログラムのおかしいところを直していただきたいんですが。

#include <iostream.h>
#include <string.h>
using namespace std;
class aaa
{
struct name_list {
char name[10];
int kazu;
};

public:
aaa();
void list();
};

624デフォルトの名無しさん:04/02/13 22:48
623続き

aaa::aaa(void){

static struct name_list qq[] = {
{"A", 0},
{"B", 0},
{"C", 0},
};
}

void aaa::list(){
int j;
for(int j= 0;j<=2 ; j++){
cout <<qq[j].name<<"が"<<qq[j],kazu<<"コ"<<endl;
}

int main()
{
aaa bbb();
bbb.list();

}
ここはリア厨の漏れにとってはありがたい無料問題集です
>>625
明日休みだからって遅くまで起きてちゃだめだぞ
627デフォルトの名無しさん:04/02/13 23:46
>>626
nice advice
>>623
#include <iostream>
#include <string.h>
using namespace std;
class aaa
{
struct name_list {
char name[10];
int kazu;
};
static const name_list qq[];
public:
aaa(){}
void list();
};
const aaa::name_list aaa::qq[] = {
{"A", 0},
{"B", 0},
{"C", 0},
};
void aaa::list(){
for(int j=0;j<=2; j++)
cout<<qq[j].name<<"が"<<qq[j].kazu<<"コ"<<endl;
}
int main(void)
{
aaa bbb;
bbb.list();
return 0;
}
629デフォルトの名無しさん:04/02/13 23:51
>>628
警告もない見事なプログラムありがとうございました
Win32Consoleプログラムの出力をクリップボードにしたいのですが、
どうすればよいのでしょうか?
教えてください。
そのプログラムは既存のもの?
それとも自分で書いてるやつ?

どちらにしても、コンソールプログラムでクリップボードの読み書きは
普通にできるので調べてみて
>>630
consoleprogram > output.txt
notepad output.txt
Ctrl+A Ctrl+C
>>630
cygwin入れる
consoleprogram >/dev/clipboard
自分で書いてる奴です。
VisualC++使ってるんで、そっちのスレで聞いたほうがよかったですね。
どうもありがとござますた
596です。
知り合いに途中まで作ってもらったのがこのプログラムです。
#include "vrml.h"

void main(void){

     ktk_vrml a;
a.open("A.txt");
a.print();
a.get("point");
実行すると、実行画面にpointは出力されるんですが、B.txtを作成し、そのtxtへの
書き込み方がわかりません。
予想では、outfileを使うと思うんですが・・。おねがいしまつ。


>>590
嘘を書くな嘘を。gets()使うなんて馬鹿も然ることながら、
scanf()で空白を取り込めないなんて勝手に思い込むな。
ktk_vrmlって…
>>636
物の本質がわかってない馬鹿・・・
>>638
構って君だからスルーしとけYO!
>>636
scanf("%[^\n]", name);ってことかな?
636じゃないが、無理だというのは嘘だろ。
scanfよりgetsやfgetsを使うべきだというなら分かるけど。
gets だけは死んでも使うな。
scanf("%s", name) も同じぐらいに使っちゃいけない。
宿題には使っていいぽ。
どうせここで丸投げするような香具師が
将来職業とかで使うようになるとは思えん。
>>643
>どうせここで丸投げするような香具師が
>将来職業とかで使うようになるとは思えん。

いや、俺には「ここで丸投げするような香具師」こそ
将来職業とかで使いまくりするような気がして
ならないのだが・・・
getsとかで悩んでいる人らに漏れの使ってる関数を紹介しますw
参考までに、掲載して置きますw
#include<stdio.h>
#include<stdlib.h>
#define EOP 0;
void print(char *s,int kaigyou_flag)
{
  char *p=s;

  if(kaigyou_flag < 0)while(*p++)if(*p=='\n')*p=0;//改行打消し
  printf("%s",s);
  if(kaigyou_flag > 0) puts("");//改行を付加。
}
void gets2(char *s,int n)
{
   fgets(s,n,stdin);//stdinと書く手間を省ける。
}

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

  print("あなたの名前はどこですか?",1);
  gets2(str,sizeof(str));
  print("あなたの名前は",0); print(str,-1); print("ですねw",1);

  return print("end of progran",1),EOP;
}
いっそのこと可変長にしてしまえ。

char *getline()
{
  char *buf, *p;
  int c, used = 0, lim = 2;

  if ( (buf = malloc(lim)) == NULL)
    return NULL;

  while ( (c = getchar()) != EOF && c != '\n') {
    if (used >= lim-1) {
      lim *= 2;
      if ( (p = realloc(buf, lim)) == NULL) {
        free(buf);
        return NULL;
      }
      buf = p;
    }
    buf[used++] = c;
  }
  buf[used] = '\0';

  return buf;
}
せめて、fgetsをくりかえすようにしてくれよ
648デフォルトの名無しさん:04/02/14 15:36
>>647
>print("あなたの名前はどこですか?",1);

ここにわらた。

>>647
>>646をfgetsを使う事でよりよくなった物が知りたいです。
>>645
>return print("end of progran",1),EOP;

笑った。つーか、きもい。
・何故return文でprintする?
・EOPなんて意味不明なマクロを導入する理由は?
・progranってなんだ?
>>648
getchar()の内部動作を知れば使いたくなくなると思う。
#define getc(_stream)     (--(_stream)->_cnt >= 0 \
                ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))
#define getchar()         getc(stdin)

VCのstdio.hから引用。特に悪いようには見えないが…
>>645
#define EOP 0;
こんなことをして
    return print("end of progran",1),EOP;
の意味を初見でわからなくさせるかわりに
// enum would be bettter
#define KAIGYO_TSUIKA 1
#define KAIGYO_UCHIKESHI -1
#define KAIGYO_SONOMAMA 0
    print("あなたの名前はどこですか?",KAIGYO_TSUIKA);
にしてくれ。
>>645はネタだと思うが
return 文で printfをするのは
たまに見るが。
654デフォルトの名無しさん:04/02/14 18:37
>>650
>  getchar()の内部動作を知れば使いたくなくなると思う。

だれかこの意味を説明してくれませんか?
655デフォルトの名無しさん:04/02/14 18:40
>>654
バッファオーバーフローの危険があるということじゃないのかな?
656デフォルトの名無しさん:04/02/14 18:42
つーかみんな宿題ぐらい自分でやれよなぁ
657デフォルトの名無しさん:04/02/14 18:46
>>655
getchar()が内部でバッファオーバーフローするんですか?
658デフォルトの名無しさん:04/02/14 19:21
>>657
ユーザーが無茶な入力をして、それに対してプログラマーが、回避するようn
してなかったら起こるのでは?
>>658
起こるわけないだろ。
大体どうやってint getchar()内部のバッファオーバーフローを
プログラマが回避するんだ。
>>653
どういう状況なんだ ?
printf() の戻り値を返したい時と、if() なんかで {} をサボりたい時以外に思いつかないんだけど。

>>655, >>657-658
>>651 にソースがあるんだから、自分で判断しろ。
661657:04/02/14 19:45
>>660
>>651では_filbufの定義が分からないし、
比較対象のfgetsがどう違うのかもわからないので、判断できません。
>>661
だったら、適当なオプソのライブラリでも探してみりゃいいじゃん。
663デフォルトの名無しさん:04/02/14 20:13
for(int i=0;i<10;i++)
  if(...)
  {
  }
  if(...)
  {
  }
は二度目のifもforの中に入ってるのですか?
forのあとに{ }をつければ入ったことになるのはわかるのですが
664657:04/02/14 20:14
>>662
実はFreeBSDのソースはみてみました。
なにも悪い所はないようにみえたので、なにを見逃しているのだろうかと思って、
詳しい人が教えてくれないかと思って聞いています。
# マルチスレッドの場合は1文字ごとにLOCK/UNLOCKが
# おこりそうなのが良くないかもしれない。
>>663
入ってません。
>>664
FreeBSD のソース + 自分の解析力 < 2ch の情報

なのかあんたは ?

速攻で、2ch 見るのをやめることを推奨するよ。

> # マルチスレッドの場合は1文字ごとにLOCK/UNLOCKが
> # おこりそうなのが良くないかもしれない。

意味わからん。

マルチスレッドなら普通ロックしないとダメだろう。
667657:04/02/14 20:27
>>666
>  FreeBSD のソース + 自分の解析力 < 2ch の情報
>  なのかあんたは ?

2chには知識のある人もたくさんいらっしゃると思っています。
私のOSとCに関する知識はとぼしいので、独力で結論を得るには
何日も、あるいはさらに時間がかかります。

>  ...
>  意味わからん。
>  マルチスレッドなら普通ロックしないとダメだろう。
fgetsとの違いをのべているのですが。
668デフォルトの名無しさん:04/02/14 21:08
>>660
{}を書くのが面倒な時はするなw

if(func(...))
return fprintf(stderr,"しっぱーい\n");
>>667
> 2chには知識のある人もたくさんいらっしゃると思っています。

そういう奴も要るけど、嘘を平気で書き散らかす奴もいる。
それが区別できないうちは 2ch を過度に信用するのは止めたほうがいいよ。

> 私のOSとCに関する知識はとぼしいので、独力で結論を得るには
> 何日も、あるいはさらに時間がかかります。

使い方なら man fgets でいいと思うけど。

> fgetsとの違いをのべているのですが。

余計意味わからん。
getchar() は1文字ずつ呼ばれるから、1文字毎にロックするしかないし、fgets() でも呼ばれた単位でロックするだろ。
バッファオーバーフローと何が関係するんだろ ?
670654==657:04/02/14 23:03
Fromがよくなかったですね。
もとはこの質問です。
>>654
>  >>650
>  >  getchar()の内部動作を知れば使いたくなくなると思う。
>  
>  だれかこの意味を説明してくれませんか?

getchar()のどのような内部動作が問題なのかをしりたいのです。


> バッファオーバーフローと何が関係するんだろ ?
関係しません。バッファオーバーフローが起こるとも考えていません。
マルチスレッドの場合、getchar()は1文字づつロックするので、
1バッファ毎にロックするfgets()のほうがよい。という意味です。
#include <stdio.h>


void a(int b)
{
printf("%d\n",b);
a(b+1);
}

void main()
{
a(0);
}

なんで11755でとまるんでしょう?
再帰しまくってスタックを食い潰したから
673デフォルトの名無しさん:04/02/15 11:44
>>671
俺は126546
でとまった
えーふつー末尾再帰って展開しないのー?
>>674
GCC-3.3だと(最適化しなくても)展開される。
271230までいったのは3.3だから?
677675:04/02/15 17:10
>>676
そこでとまった?
# うちのは正確にはgcc 3.3.3
gcc version 3.3.2 i386-pc-solaris2.9 ですた
679675:04/02/15 17:37
>>676
ごめん、変だとおもってasmみたら、
最適化されてないのにメモリを食べまくって(500M!)
走りつづけてるだけだった…

-O2でされます。
>>650の見解が聞きたいところだ。
681デフォルトの名無しさん:04/02/16 14:52
>676
コンパイラーのバージョンは関係ないよ。
OSによってスタック領域が設定されていてその限界に達すると終了するようになっている。
limitってコマンドうつことによって自分のスタック領域どれくらいもうけているかみることができる。
コンパイラのバージョンによっては最適化オプションを掛けなくても
末尾再帰を最適化するからスタック領域に関係なく無限ループになる。
/* 二つの整数値を入力し、入力した2値の総和を表示
*/
#include <stdio.h>
int main (void)
{
int A,B,sum;
int no=1;
printf("整数A>");scanf("%d",&A);
printf("整数B>");scanf("%d",&B);
if(A>B)
do{ sum=B+no;
no=no+1;}whlie(sum<=A);
printf("%d以上%d以下の総数の和は、%dです\n"A,B,sum);
else
do{ sum=A+no;
no=no+1;}while(sum<=B);
printf("%d以上%d以下の総数の和は、%dです\n"A,B,sum);
return(0);
}
↑この問題文ですが
任意の二つの整数を入力し
その整数の総和を求めよです
この総和を求めよの所のコーディングの仕方
が分かりません。
>>684
>任意の二つの整数を入力し
>その整数の総和を求めよです
は?2つの整数の総和って何?
A+Bじゃないの?

それともこういうこと?
int sum = 0;
for (int i = A; i <= B; ++i) sum += i;
2つの整数a,b(a<b)を入力し、a以上b以下の整数の総和を求めよ、かな。

#include <stdio.h>
int main (void)
{
int a,b,i,sum=0;
printf("整数A>");scanf("%d",&a);
printf("整数B>");scanf("%d",&b);
if(a>b) { i=a; a=b; b=i; }
for(i=a;i<=b;i++) sum+= i;
printf("%d以上%d以下の総数の和は、%dです\n"a,b,sum);
return 0;
}
なぜループで整数の総和を求めているのかも謎ですな
688686:04/02/16 19:39
>>687
そういう宿題だから、に思えたから。
1からnまでの総和 = n*(n+1)/2
>>685
>>686
>>687
>>689
問題文がはっきりしなくてスマソ
ええと例えば
A=5,B=9
を入力した場合
sum=5+6+7+8+9
です。ついでに
解答で使用していいのはdo{}while
です。

>>688
たしかにこの宿題はループ( do while )を使わせる問題みたいだね。
do while()文の例としては不適切な問題のような気もするが。

do while( (sum += a++) <= b)
今宿題で構造体をやってるんですが
一度文字列で入力させ、数字なら数値に変換しint型変数に入れ
構造体に入れるというのをやりたいんですが

Person *work; //構造体へのポインタ。Personはint noとchar name[256]です。
char buf[256]; //数字入力用配列
int num; //変換後数値入力用
〜〜入力及び変換処理〜〜

の後、work->no = num;としたいのですが
&workにすると警告が出て、つけないとその代入の部分で処理が止まります…
名前の方はstrcpyが使えるので問題ないんですが、
work->noにnumを代入する方法が分かりません
どなたかご教授して頂けないでしょうか。。。おながいします
>>693
まず、お前の糞コードを晒せ
#include <stdio.h>
#include <math.h> /* fabs()を使うため */ /* gcc file -lm */

int main(void)
{
double a,b,c,x,oldx,d,e,f;

printf("x*x*x+a*x*x+b*x+c=0の解を求める。\n");
printf("a,b,c,xに適当な値を入力してください。\n");
scanf("%lf%lf%lf", &a, &b, &c);
scanf("%lf",&x);

while(1){
oldx=x;
x=x-(x*x*x+a*x*x+b*x+c)/(3*x*x+2*a*x+b);
if(fabs(x-oldx)<1e-15) break;
}
printf("x=%lfである。\n" ,x); /* Newton法で解が1つ出る */

d=x; /* x*x*x+a*x*x+b*x+c=(x-d)(x*x+e*x+f)と因数分解する */




696695:04/02/16 21:46
割り入って、すいません。

3次方程式 x3+ax2+bx+c=0 を解くプログラムを作成せよ. 解法の手順は次の通りである.
1. Newton法で解を1つ求める.
2. その1つの解をαとする. 元の3次方程式を x3+ax2+bx+c=(x-α)(x2+βx+γ)と因数分解する.
3. 因数分解して得られた2次方程式を公式で解く.
こうして3次方程式を解くことができる.

という問題で、途中まで一応やったのですが、
それから因数分解のやり方が分からないです。どなたか、できたら教えてください。
697643:04/02/16 22:05
>>644
int input(Person **in_per)
{
〜〜変数宣言、引数チェック、メモリの動的確保 略〜〜
while(1){ ///番号入力ループ
fprintf(stdout,"\nInput Number : ");
fgets(&buf[0],sizeof(buf),stdin); //入力
for(cnt =0;buf[cnt] != '\0' ;cnt++){ //改行を捨てる処理
     略
}
ret = Check_Num(&buf[0]); //文字列をチェック
if(ret == NOT_NUMEBER){ //数字じゃない場合
fprintf(stderr,"\nSorry.Sorry. Input number .");
}
else //数字なら
{num = atoi(buf);
if(MIN_NO <= num <= MAX_NO){ //変換後数値が範囲内なら
work->i_No = num; //ここが上手く行かない部分です。
break;
}
fprintf(stderr,"\nSorry. Input number 0 - 9999.");
}
}
〜〜後半 略〜〜
Chekc_Num関数は入力文字が数字かどうかを調べる奴です
渡されてくる引数は入力データの先頭を示すポインタです(リスト構造)
かなりクソコードだと思いますが、、、おながいします(´・ω・`)
>>697
なにをおながいしてるの?
>>697
いや643は俺であってお前ではないはずだが?
>>693,697
>>1をよく読むべき。
>>693
>&workにすると警告が出て、つけないとその代入の部分で処理が止まります…
もう一回ポインタ周りを勉強しなおせ。
workポインタが指している先に真っ当なものはあるの?

>〜〜変数宣言、引数チェック、メモリの動的確保 略〜〜
ここでworkに対して何かやってる?
>>693
構造体の実体を用意してないに5000点
>>697
>num = atoi(buf);
>if(MIN_NO <= num <= MAX_NO){ //変換後数値が範囲内なら
まぁ、何と言うか…つーか>>643>>644って、絶対ネタだろ
>>703
どういうこと?
>>704
>if(MIN_NO <= num <= MAX_NO){ //変換後数値が範囲内なら
先にatoi()で正常に変換出来たかを調べようね(←突っ込み所が違うだろ)

>>643>>644
>>699参照
…理解するのに10秒かかったぜ
>>699は単に>>693>>643を間違えたんだと思うが。
まちがえ
>>699>>697
>>696
x^3+ax^2+bx+c を x-α で割って x^2+βx+γ を出すだけだろ?
CもしくはC++にスレッド関係の処理を行う機能は用意されてますか?
>>710
言語仕様外のライブラリにより利用することができます。
仕様にはないってことですか
レスありがとうございますm(_ _)m
すみません。宿題なんですがわかりません。解答をお願いします。
ソース丸写しで申し訳ないです。

次のプログラムを改造せよ.少なくとも200人分のデータを扱えるようにせよ.
そして,まず実行開始時に,データ人数の入力をうながし,人数を得よ.
その上で,全員のデータについて順次氏名,年齢,通学時間データを入力するようにせよ(これでstudentデータベースができる).
その後for文のループで全員分のデータ表を表示するようにせよ.
氏名は半角20字以内と仮定して良い. データ入力時は、通学時間は、分ではなく(小数つき)何.何時間で入力するとする。
#include <stdio.h>

typedef struct individual_data {
char name[30];
int age;
double commute_time;
} Individual;

int main(void) {
Individual student[3] = { {“Taro”, 20, 1.5},
{“Hanako”, 20, 0.9},
{“Koji”, 21, 0.5} };
Individual *ps;
int i;
ps = student;
printf(“Members List\n”);
printf(“Name Age Time \n”);
for(i = 0; i<3; i++,ps++) {
printf(“%-10s %3d %7.2f\n”,
ps->name, ps->age, ps->commute_time);
}
return(0);
}
ほれ。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAMELEN 21
#define BUFFSIZE NAMELEN
typedef struct student {
char name[NAMELEN];
int age;
double time;
} Student;
int main(void)
{
Student *student;
char buff[BUFFSIZE];
int num;
int i;
printf("# students >> "); fgets(buff, BUFFSIZE, stdin); num = atoi(buff);
student = malloc(num * sizeof(Student));
for (i = 0; i < num; ++i) {
printf("\n\tname >> "); fgets(buff, BUFFSIZE, stdin); strcpy(student[i].name, buff);
printf("\tage >> "); fgets(buff, BUFFSIZE, stdin); student[i].age = atoi(buff);
printf("\ttime >> "); fgets(buff, BUFFSIZE, stdin); student[i].time = atof(buff);
}
for (i = 0; i < num; ++i)
printf("name: %s age: %d\ntime: %f\n\n", student[i].name, student[i].age, student[i].time);
free(student);
return 0;
}
715デフォルトの名無しさん:04/02/20 13:42
宿題なんですが全然分かりません。
どなたかよろしくお願いします・・・。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=200
716デフォルトの名無しさん:04/02/20 13:48
>>715
strtokっていう関数があるから、それを使って
単語単位にばらばらにして、それをリストにしてガンバレ
>>715
その問題はここの香具師が最も答えたくない問題だからな。
>>715
strtokって関数まだ習ってないんですよ・・・。
何か先生からは2分木のソートを使えって言われたんですけど・・・。
719デフォルトの名無しさん:04/02/20 14:05
>>718
strtokの使い方ぐらい自分で調べればいいだろ。
ソートはstrtok使った後の話しだし
720デフォルトの名無しさん:04/02/20 14:45
空白と改行で区切るだけなんだし、strtokなんか持ち出さなくても、
strchrとか、単純にforで回すとか、何でもできるでしょ。
たぶん、問題の本質は2分木が理解できてて使えるかということだと思うけど。
>>720-721
ありがとうございます。
じゃちょっと勉強してきます ノシ
strtok は状態を保持されるからあまり使う気になれん
まあ時間関係にもあるけどな
文字列を書き換えられちゃうところが嫌い
でも強力だから好き
素直にsscanf()使えばいいんでないの?
strtok()を持ち出すまでもないような。
scanfって名前がついてるから嫌
>>726
ならもう使わなくていいよ。
>>715
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <utility>
#include <lambda/lambda.hpp>
#include <lambda/bind.hpp>
int main()
{
 using namespace std;
 using namespace boost::lambda;
 
 vector<string> vec;
 string str;
 {
  ifstream fin("test.txt");
  while (fin >> str) vec.push_back(str);
 }
 sort(vec.begin(), vec.end());
 vector<pair<string, int> > result;
 for (vector<string>::iterator l = vec.begin(),
                               u = upper_bound(l, vec.end(), *l);
      l != vec.end();
      l = u, u = upper_bound(l, vec.end(), *l)
      )
  result.push_back(make_pair(*l, static_cast<int>(u - l)));
 sort(result.begin(), result.end(),
      bind(&pair<string, int>::second, _1) > bind(&pair<string, int>::second, _2)
     );
 
 ofstream fout("result.txt", ios::out | ios::trunc);
 for_each(result.begin(), result.end(),
          fout << bind(&pair<string, int>::first, _1) << ' ' <<
          bind(&pair<string, int>::second, _1) << '\n');
 return 0;
}
宿題にboost使うのか…
あ、フォーマットとファイル名は脳内置換ってことで。
各々1/6の確立で1〜6を返す関数diceを作りたいのですが、分かりません。
どなたか教えていただけませんでしょうか?
733デフォルトの名無しさん:04/02/20 18:28
なぜ2分木を使うんだ?
単語(重複を許したとして)を鍵としてヒープソートした時に単語の使用頻度順に並ぶとは必ずし
も言えないし、仮に単語の使用頻度を基準にヒープを作ったとしてもデータを挿入した時に重複し
ている単語を探すのには木の中の要素を全部見なければいけないような気がするのですが私がバカ
なんでしょうか?それともこの問題はただたんにヒープソートがしたいだけなのでしょうか?
>>732
完全な乱数をコンピュータで発生させることは不可能です。
といってみるテスト。
>>733
>>728最初のソートを入力と同時にやるんだとおもうが。
>>735
そんなもんださんでも最近のインテルのCPUは熱雑音による
乱数生成ができるんではなかったか?
>>732
ほらよ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1067496760&res=3

精度がやや落ちるがわかりやすさ重視なら
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int dice(){
return rand() % 6 + 1;
}
int main(){
int 1;
srand((unsigned)time(NULL));
for(i=0;i<10;i++){
printf("%d\n",dice());
return 0;
}

739738:04/02/20 19:00
訂正(リンク先のも表示がおかしくなっちまってる)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int dice(void){
return rand() % 6 + 1;
}
int main(){
int i;
srand((unsigned)time(NULL));
for(i=0;i<10;i++)
printf("%d\n",dice());
return 0;
}
画面に表示(>>715)&入力時ソート(>>736)&boost削除(>>730)
#include <iostream>
#include <iomanip>
#include <fstream>
#include <map>
#include <string>
#include <algorithm>
#include <utility>

int main()
{
    using namespace std;
    vector<pair<string, int> > vec;
    {
        map<string, int> m;
        string str;
        ifstream fin("data.txt");
        while (fin >> str) ++m[str];
        for (map<string, int>::iterator i = m.begin(); i != m.end(); ++i)
            vec.push_back(make_pair(i -> first, i -> second));
    }
    struct pred
    {
        bool operator()(const pair<string, int>& x, const pair<string, int>& y)
        {return x.second > y.second;}
    };
    stable_sort(vec.begin(), vec.end(), pred());
    
    struct print
    {
        void operator()(const pair<string, int>& x)
        {cout << setw(3) << x.second << ' ' << x.first << '\n';}
    };
    for_each(vec.begin(), vec.end(), print());
    cout << flush;
    return 0;
}
742723:04/02/20 19:44
>>734-735
>>737-739

ありがとうございました!
スレ汚しスマソ。やり直し。
#include <iostream>
#include <iomanip>
#include <fstream>
#include <map>
#include <string>
#include <algorithm>
#include <utility>

int main()
{
  using namespace std;
  map<string, int> m;
  string str;
  ifstream fin("data.txt");
  while (fin >> str) ++m[str];
  vector<pair<string, int> > vec(m.begin(), m.end());
  struct pred
  {
    bool operator()(const pair<string, int>& x, const pair<string, int>& y)
    {return x.second > y.second;}
  };
  stable_sort(vec.begin(), vec.end(), pred());
  struct print
  {
    void operator()(const pair<string, int>& x)
    {cout << setw(3) << x.second << ' ' << x.first << '\n';}
  };
  for_each(vec.begin(), vec.end(), print());
  cout << flush;
  return 0;
}
>>743
兄弟よ、ローカルクラスでテンプレートを実体化するのは規格違反なのだ。
ついでに<vector>もincludeするべきだぜ。
>>744
#include <vecter>スマソ
むぅ…どこか教えてもらえないか、規格書を探してもうまく見つからない。
746デフォルトの名無しさん:04/02/21 00:46
<iostream>を使って、ファイル読み込みをやってます。
↓こんな感じ

std::ifstream f("test.cc");
const int SIZE = 128;
char buf[SIZE];

while (f.getline(buf, SIZE)) {
 ・・・
}

↑のコードで、const int SIZEとかやって一行の最大文字数を指定しています。
これがなんか気持ちわるいので、

std::string buf;
while (f.getline(buf)) {
 ・・・
}

みたいな感じで「一行の文字数なんてどうでもいい」みたいな
読み込みってできないもんなのでしょうか。
std::getline(f, str);
最大文字数を指定しないほうが気持ち悪い気がする。
バッファオーバーフロー起こしたくなりそう。
>>748
そういうことが起きないようにするための標準ライブラリだと思うのだが。
750746:04/02/21 03:22
>>747
ありがとうございます。
C++標準ライブラリ チュートリアル&リファレンスとかいうごっつい本を
読みながらやってます。とくに、13章 ストリームクラスによる入出力 
あたりを読んでました。getlineで索引見たら、11章 文字列に載ってました・・・。

istream& getline(istream& strm, string& str);
istream& getline(istream& strm, string& str, char delim);

これで解決しました。

>>748
激しく同意。

>>749
激しく同意。
751デフォルトの名無しさん:04/02/21 03:36
Cのコンパイラを無料でダウンロードできるサイトがあると聞いたんですが
誰か知りませんか・
752デフォルトの名無しさん:04/02/21 03:41
二本のラインの角度をー180〜180で表記したいのですが。。。
atan2(x,y)だと一本のラインですよね。
単純に引き算したら-180〜180になってくれないんですよね。
>>752
日本語はもっと分かりやすく書いてくれ、意味が分からん。
>>751
vector
>>751
タダで最強!フリーC/C++コンパイラ
http://pc2.2ch.net/test/read.cgi/tech/1035882599/
>>752
ぼるじょあがC/C++の宿題を片づけますYO! 20代目
http://pc2.2ch.net/test/read.cgi/tech/1075217631/75

おいおい、ageでマルチかよ
【初心者歓迎】C/C++室 Ver.5【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1077102238/75

だった
758デフォルトの名無しさん:04/02/21 04:01
二本のラインがあります。
それぞれ
(X1,Y1)-(X2,Y2)
(X3,Y3)-(X4,Y4)

その二本のラインの角度を測りたいのです。
atan2(X1-X2/Y1-Y2);
で一本の角度はー180〜180の範囲ででますよね。
atan2(X1-X2/Y1-Y2);
atan2(X3-X4/Y3-Y4);
を引き算してもー180〜180の範囲に収まってくれない場合があるので
困ってます。

759715:04/02/21 04:05
一応自分で調べたり、いろんな所を参考にして
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=45
までできたんですけど、これに2分木ソートを加えて頻度順に表示するには
どうやればイインデスカ?・・・_| ̄|○
>>758
1.fmod と言ってみるテスト
2.つーか、ラインなんだな? ベクトルじゃないんだな?
3.どっちの線が基準になるんだ?
4.atan2ってそんな使い方だっけ?
5.マルチすんなヴォケ
>>758
失せろ、マルチ野郎
762デフォルトの名無しさん:04/02/21 12:29
>759
ヒープソートを使うと思うんだけど、733でも述べたようにヒープにデーターを挿入して行く時に
どうしてもヒープの良さが見えてこないんだよね、この問題。
763715:04/02/21 13:16
>>762
調べてる過程で2分木を実際に使ってる
ttp://www1.cts.ne.jp/~clab/hsample/File/File10/File10.html
こんなのも見つけたんですけどこういうのも効率はやっぱ悪いんですかね?
764715:04/02/21 13:19
あ、>>743さんありがとうございます
でも自分には難しすぎて全然理解できない・・・。
>>743 の規格違反の内容をC++相談室で聞いてきます。
結局分からなかった…
766デフォルトの名無しさん:04/02/21 18:07
>715さん
あなたの書いたプログラムの何処で2分木を使ってるのですか?
一致する単語を調べる際に全ての配列を調べてたのでは2分木を使ってる意味ないでしょ。
単語を調べる時に2分木ならば木の高さの回数だけ調べればいいのが2分木のよさでしょ。
全部の配列みてるんじゃ意味ないじゃん
767715:04/02/21 18:19
>>766
すいません、もうそこまで頭がついていかず限界なんで逝ってきます・・・。

相手して下さった方ありがとうございました。
ニューラルネットのホップフィールドについてお詳しい方いませんでしょうか…
記憶させるデータに偏りがある(1に対して-1が多いとか)場合
何を入力してもその多い方のデータばかり出力されてきます…orz
これがバグなのかホップフィールドの仕様なのか知っている方いませんでしょうか
769デフォルトの名無しさん:04/02/21 19:44
こんにちわ。
学校の宿題でVC7を使ってADOで接続する処理を作るのですが、
どこかにいいサンプルソフトありませんか?
VC6はググればあるのですが、VC7で使おうとするとエラーがでます。
変な質問でごめんなさい。
770デフォルトの名無しさん:04/02/21 19:54
文字列中の空白(連続する半角スペース)を一気に消したいんですけど・・。

std::string str(" abc xyz "); //HTMLの都合で全角スペースを入れてます。

std::string new_str = str.delete(" "); //これが欲しい

// 結果、
// new_str == "abcxyz"

こういったのってstd::にありました?
ない。
プロセス考えればわかると思うけど
バッファ用意したり(しないですますこともできるけど))
いろんな処理組み合わせる必要があるからね。
>>770
一応出来るぞ。

STLのAlgorithm使って

string str="abc de f";
str.erase(remove(str.begin(), str.end(), ' '), str.end());

ただあまり良い方法ではない
>str.erase(remove(str.begin(), str.end(), ' '), str.end());
関数の引数は演算順序不定。念のためツッコミ
>>773

removeは実際に削除しないで必要要素を先頭に集めるだけだからendは変化しないよ。
>>772で大丈夫
775773:04/02/21 20:27
おおそうだな、いや別のと勘違いした。
ん?
連続する半角スペースって2個以上のもののみじゃないのかな?
単に半角スペースを除くだけならすでに挙がってる
removeとeraseを組み合わせる慣用的な方法で構わないわけだけど
>>770 を見るとどっちでもない気が・・
778770:04/02/21 21:10
>>771
Σ(゚д゚lll)

>>772
STLのアルゴリズムのremoveと、stringのeraseの合わせ技なんですね。
アルゴリズムの不勉強さを痛感しました。

>>773-775
    ミ   ∧_∧
  ミ ⊂ ヽ(・∀・ ) へぇー
    ∩⊂~~  ⊂~)       
   ━━━━━━┓

>>776-777
あいまいですみません・・・。
連続とかそういったことよりも、
結局「文字列中の半角スペースを消したい」が要求でした。


つうわけで、みなさまありがとうございました。
>>770見ると元の文字列は変更せずに
別の文字列に出力したいみたいだから remove_copy_if の出番かな
……でも string なんだよな
>>744
指摘thx
C++相談室で教えてもらいますた
Win32APIアプリケーションもここで質問してもよろしいですか?
>781
宿題ならね。
783781:04/02/22 21:30
まず市松模様を作ります。
int n=8,x=100,y=100,a=40; // nは8マス,xとyは座標,aは中に置くコマの大きさ
int xx=140;       // xxは座標
int m=1;            // mは1マスと言う意味

 // 四角形1マスの色(白)
 Hdr = CreateSolidBrush(RGB (255,255,225));
 HdrOld = SelectObject(hdc,Hdr );
 // 四角形1マスを描く1
Rectangle(hdc,x,y,x+a*m,y+a*m);
SelectObject(hdc,HdrOld);
DeleteObject(Hdr);

 //四角形1マスの色(緑)
 Hdr = CreateSolidBrush(RGB (0,155,0));
 HdrOld = SelectObject(hdc,Hdr );
 //四角形1ますを描く2
 Rectangle(hdc,xx,y,xx+a*m,y+a*m);
 SelectObject(hdc,HdrOld);
 DeleteObject(Hdr);
784781:04/02/22 21:32
これに繰り返しを付け加えたものが

int n = 8, x = 50, y = 50, a = 40;
  int xx = 10;

  int nLeft = 0, nTop = 0;
  HBRUSH brOld, brNega, brPosi;
  brNega = CreateSolidBrush(RGB(255,255,225));
  brPosi = CreateSolidBrush(RGB(0,155,0));

  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      nLeft = (i * x) + xx;
      nTop = (j * y) + xx;

      brOld = (HBRUSH)SelectObject(hdc,
                (((i % 2) == (j % 2)) ? brNega : brPosi));

      Rectangle(hdc, nLeft, nTop, nLeft + x + 1, nTop + y + 1);
      SelectObject(hdc, brOld);
    }
  }
  DeleteObject(brNega);
  DeleteObject(brPosi);

(これは教わったものなので、少しソースが変わってます。)
785781:04/02/22 21:33
で、↑のは他のスレッドで教わったものですが、
黒色の所に初期配置のコマを置いて、そのコマを黒色のマスにだけ1マスずつ
動かせるように設定したいのですが、どのようにしたらいいでしょうか。(チェッカー
というゲーム)動かせるコマを初期のコマに設定ようにするには、WM_PAINTの中に
描いたらいいですか?コマの配置は次の通りです。(●の所も盤の色は■です)

 □●□●□●□●
 ●□●□●□●□
 □●□●□●□●
 ■□■□■□■□
 □■□■□■□■
 ●□●□●□●□
 □●□●□●□●
 ●□●□●□●□


とりあえず、実行した時に初期のコマを設定する(オセロだったら真ん中に4つ
のコマを描く)にはどうしたらいいか、お分かりになる方はよろしかったら教え
て下さい。(ソースを書いていただければ幸いです。)
786781:04/02/22 21:35
意味が分からない所がありましたら、お申し付けください。
>>781
>>1読めよ
>>781
あっちこっちマルチすなヴォケ
氏ね

ゲームソフトが必要なら金払って作ってもらえ
プログラミングの勉強が目的なら入門書読め
まあ構わんぜ。
>>781よ。重要なのは骨格だ。
そんな細かい部分はどうでもいいんだ。
まずはその処理をどこでするのかを考えな。
通常WM_PAINTのイベント処理は既に決まっている
パターン(これは別のデータに保持する)に従って描画するだけにする。
(コールバックの最中はウィンドーズの種類によるかも知れないが
あまり協調的には動かない。重い処理をコールバック中に
行うと全体あるいは一部のGUIやその他のタスクが固まる。かも)
そしてデータの変更などの処理はその必要が生じた段階
(この場合はWM_LBUTTONDOWNとかだろう)で、
基本的には別のスレッドを呼び出して処理する。簡単な処理ならば
その必要が生じたそのイベント処理と同時に行ってしまってもよい。
そのデータ変更中はセマフォとかミューテクスとかも
必要になるかも知れん。
まあ俺はいつもこんな感じで適当にWin32プログラムは
組んでいるのだが、俺もド素人だから
真に受けなくていい。とにかく処理の流れを考えるんだ。
ええっと、それのどこが宿題なんだい?
791デフォルトの名無しさん:04/02/23 02:54
char X[4][3];
↑と宣言してあって
freadで読み込むには
fread(X, sizeof(char), 12,FIPTR);
   ↑この部分はどうしたらいいんですか?
    配列にできるんでしょうか?
最大データ数も12でいいのかわかりません
for文で1つずつ格納するんですか?
ちなみにこの後は下のようにして表示したのですが・・・
for(CNT1=0;CNT1<4;CNT1++){
  for(CNT2=0;CNT2<3;CNT2++){
    printf("%s",X[CNT1][CNT2]);
}
}

教えてください。
>    配列にできるんでしょうか?
>最大データ数も12でいいのかわかりません
試してみろよ、ってゆーか

>ちなみにこの後は下のようにして表示したのですが・・・
なら分かるだろが
>>791
>ちなみにこの後は下のようにして表示したのですが・・・

いや、それは有り得ないだろう。
>>791
>char X[4][3];
>printf("%s",X[CNT1][CNT2]);
これで何を表示したいんだ?
795デフォルトの名無しさん:04/02/24 10:49
>>791
fread((void*)X, sizeof(char),12,FIPTR);
C/C++ではあるデータ型を強引に違うデータ型にするキャストがあります。
これはXを強制的に(void*)に変更しています.
>>printf("%s",X[CNT1[CNT2]);
printf("%c",X[CNT1][CNT2]);
"文字列"表示のための書式文字列は%s
"文字"表示のための書式文字列は%c
796デフォルトの名無しさん:04/02/24 13:35
初めて作った格闘ゲーム丸々UPするから誰かAI作ってください
>>796
それ宿題ですか?
798デフォルトの名無しさん:04/02/24 14:39
そうです、今週中に作らないとダメらしいです

去年進級制作で作ったのですが下級生にやらせるとかで作り直せと、、、

だれかお願いします
左右をつないで無限スクロールにして
相手との距離を常に一定に保つ。
>>796
うpしろ。まずはそれからだ。
801デフォルトの名無しさん:04/02/24 15:13
うぷしたこと無いのでよく分からないんですが

http://v.isp.2ch.net/up/a5e8385177c9.cpp

これでいいんですかね?
802デフォルトの名無しさん:04/02/24 15:23
ヘッダが無いー
実行するとHDDアボーンウィルス
804デフォルトの名無しさん:04/02/24 15:25
う、うpの仕方教えてください、、、、

それかメールで送るのでうpしてください、、、すいません厨で、、
>HDDアボーン!?

(((((;゚Д゚)))))ガクガクブルブル
圧縮してアップせよ。
807デフォルトの名無しさん:04/02/24 15:35
http://up.isp.2ch.net/up/ca0c99dbdc5a.zip

こ、これでいいんですかね。一応ソースっぽいのは全部入れました

なにせ去年のことなのでほとんど覚えてません
とりあえず、
FightScene::Inputがパッドからの入力と
入力に対するキャラの応答への変換を同時にやっているが、
入力と応答の対応はAIからも利用できるようにして、
インタフェースに一貫性を持たせたらどうだろう。
809デフォルトの名無しさん:04/02/24 16:00
やっぱダメですかね、、、、
810 ◆bpDp1HT.MU :04/02/24 16:08
このトリップでしばらく書きます

一応AIにはパラメータのみを渡してAIサイドからの干渉はしないように、、なんて思ってます
811808:04/02/24 16:11
コンピュータの入力も、パッドと同じにするという事。
812 ◆bpDp1HT.MU :04/02/24 16:15
あぁ、パンチとか、キックとかじゃなくてAボタンBボタンで処理をするって事ですね。

後者の方が処理が簡潔にかけるとかでしょうか?
813age ◆WBRXcNtpf. :04/02/24 16:17
何となくage
プレーヤーキャラとコンピューターキャラで違う挙動をしたらおかしいし
操作履歴の記録にも有利だろう。その方が簡潔かかは
分からないが、細かい数値は面倒。
815デフォルトの名無しさん:04/02/24 16:40
教えてください!
まったくの素人です,
ステップカウンターのプログラムを作れ!との上司の命令です。

ファイルを読みこみ,そのファイルが何行あるか?
ただし、スペース、改行など、文字を含まない場合は,数えないものとする・・・

ファイルを読み込んで、何行あるかまでは間単に作れるのですが、そのあとが
どうすれば良いか判りません。
助けてください
改めて文字を含まない行を数えて引くか、
初めから文字を含まない行を数えない。
817815です:04/02/24 16:55
初めから、文字を含まない方法で以降と思うのですが、
その場合 どんな方法を使うのが適切ですか?


ホワイトスペースのみならばカウントしなければいい。
819デフォルトの名無しさん:04/02/24 16:59
>>817
たとえばCならstrspn関数を使ってスペースや改行だけしかない行かどうか判断する。
>>815
非空白文字->改行の順ででてきた回数を調べれば良い。Cで書くとこんな感じ。
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    FILE *in = fopen("main.c", "r");
    int n = 0;
    while(1)
    {
        while(isspace(getc(in))) if(feof(in)) goto end;
        while(getc(in) != '\n') if(feof(in)) goto end;
        n++;
    }
end:
    printf("%d\n", n);
    return 0;
}
821815です:04/02/24 17:31
>>816、818、819、820さん

出来ました!!
ありがとうございます
822 ◆bpDp1HT.MU :04/02/24 18:08
で、AIは自分で作れってことですね
>>822
簡単なもので良ければ、各種行動を頻度とともにあらかじめ作っておき、乱数で選択するとか。
これは、発展系として対戦相手の行動(とか体力その他のパラメータ)によって頻度を変えることで、
とりあえず遊べるものにはなったりする。
824デフォルトの名無しさん:04/02/24 19:25
/* コメント */ をファイルから読み込むことって可能なんでしょうか?
読み込んだ /*〜*/ コメント部を別のファイルに書き込むって内容の問題なんですが?

 
>>824
可能です。読み込んで連続した二文字が'/','*'であれば
コメントの開始。その後'*','/'がみつかればコメントの終了です。 
826デフォルトの名無しさん:04/02/24 19:37
出来ればサンプルコードいただけると有難いのですが??
面倒でしょうがお願いいたします。
不適切な部分にクエスチョンマークをつけるな
828826:04/02/24 20:02
すいません、初心者名もので
>>828
初心者向けの手順

1.Google で検索
ttp://www.google.co.jp/search?q=C%E8%A8%80%E8%AA%9E%E3%80%80%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%80%80%E5%89%8A%E9%99%A4%E3%80%80%E3%82%BD%E3%83%BC%E3%82%B9&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja

2.一番上のサイトを見る。
ttp://f1.aaacafe.ne.jp/~pointc/log336.html
(日によって変わると思うが・・・)

3.コメントを削除しているソースを探す。

4.削除の所を、別ファイルに出力にすれば完成。
830デフォルトの名無しさん:04/02/24 21:12
>>829
長すぎるURLを貼り付けるなよ。
831781:04/02/24 21:15
チェッカーのソースが載っているサイトがあれば教えて下さい。
(APIで御願いします。)
結局、>>781氏は何がしたいのだろうか?

プログラミングの勉強?
それなら、いきなりゲームなんか作らないでC/C++の初歩を一から学ぶべきだ。
彼の知識では仮にソースコードを見たとしても理解できるとは思えない。

チェッカーゲームがしたい?
それならフリーウエアを探した方が手っ取り早い。

以上はネタでも煽りでもない。真面目な話だ。
>>831 >>781
藻前さんの言う API って何だ? という突っ込みもしておきたいところだが、
マルチしたスレで答えてもらってるだろうが。

【初心者歓迎】C/C++室 Ver.5【環境依存OK】
ttp://pc2.2ch.net/test/read.cgi/tech/1077102238/160

>>832に禿堂。>>781よ、今の藻舞さんでは何を
与えられても 教えて君 になるのがオチだ。
834お願いします:04/02/25 13:33
問)
ファイルからデータを読み込み、一番最初に出てくる、ある文字列を指定し
その文字列以降の一行の各レコードの上位2桁と下位2桁を入れ替え別のフ
ァイルに書き込むプログラムを作成せよ
仮に指定する文字列をDATAとする。
  こんな感じの問題です
ちなみにファイルのデータは
2000/01/10 19:58:39,DATA=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
2000/01/10 19:58:40,DATA=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
2000/01/10 19:58:41,DATA=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
2004/01/10 19:58:39,DATA=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
>>834
なんか言ってることがいまいち。
どんな感じの出力を望んでるの?
836デフォルトの名無しさん:04/02/25 13:42
>>835
それは理解力が乏しいからでは?
ちなみに俺もよくわからん。
837834です:04/02/25 13:59
2000/01/10 19:58:39,DATA=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
↑これを最初に出てくる仮の文字列"DATA"の行とした時に =の後の
051A,C002,0105,・・・・の一行を 1A05,02C0,0501・・・のように上位2桁と下位2桁を反転して
別のファイルに書き込むという意味なのですが・・・
838834です:04/02/25 14:12
2000/01/10 19:57:39,=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
・・・・・・・・・・・・・・・・・・・・・・・省略・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
2000/01/10 19:58:40,DATA=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
2000/01/10 19:58:41,DATA=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
2004/01/10 19:58:39,DATA=,051A,C002,0105,FF00,000B,7F00,・・・省略・・・C002,0105,FF00,000B,7F00
何行もあるデータの中からDATAと言う文字列を探してその後の一行を別のファイルに入れなさいナ・・・と言う
ことだと思うのですが

839デフォルトの名無しさん:04/02/25 14:15
C言語です。
fprintf()を使ってコマンドラインで指定されたファイルに文字列を書き込む。
文字列を書き込まれたファイルの中身
abcde
fghij
klmno
自分が作ったプログラム
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
if(argc!=2){
printf("ファイル名を指定してください\n");
exit(1);
}
if((fp = fopen(argv[1],"w"))==NULL){
printf("ファイルを開くことができません\n");
exit(1);
}
fprintf(fp,"%s\n%s\n%s","abcde","fghij","klmno");
fclose(fp);
return (0);
}
このプログラムだと文字列の改行が認識されずにファイルの中身が
abcde
fghij
klmnoとなってしまうんですがどうすればいいんでしょうか。
どなたかお願いします。

840839:04/02/25 14:18
間違えました。
>>このプログラムだと文字列の改行が認識されずにファイルの中身が
abcde
fghij
klmnoとなってしまうんですがどうすればいいんでしょうか。
どなたかお願いします。

このプログラムだと文字列の改行が認識されずにファイルの中身が
abcde fghij klmnoとなってしまうんですがどうすればいいんでしょうか。
どなたかお願いします。
別にまちがっているようには見えんが・・・
コンパイルし忘れってことはないよな。
842839:04/02/25 14:32
コンパイルはしてるんですが、
ファイルの中身が改行の所で■みたいなのが出て
改行されずに、abcde■fghijみたいになってるんです。
843834です:04/02/25 14:39
お願いしますどなたか教えてください!
>>834
最初に出てくる行だけを書き換えて別ファイルに保存すればいいんか?
後にDATAがあっても無視?
845834です:04/02/25 14:55
そうです、課題では一番最初のDATAの行だけです
で 
>>834
の意味が理解できた人はおらんのかい?
おいらは、さっぱり駄目だけど
行を読み込んでいって。
もしDATAが見つかれば
それ以降の , で区切られたデータを例えばa0b1ならb1a0と入れ替えて
その行全体だけ他のファイルに書き込んでそれ以降の行にDATAがあっても
何もしない。

ということではないだろうか。
>>839
もしかしてcygwin上で実行して結果をメモ帳とかで見てる?
メモ帳なんて使わないでgvimを使いましょう。
>>839
\n→\r\nでどうよ
850839:04/02/25 18:32
>>849
それでできました。ありがとうございまいた。
>>848
メモ帳で見てました。プログラムもメモ帳で書いているので。
gvimというのを調べて使ってみます。ありがとうございました。
851デフォルトの名無しさん:04/02/25 18:57
誕生日を入力すると現在の年齢を求めるプログラムを作りたいので、
C++で現在の年月日を取得する方法を教えてください。
できれば機種依存でない方法でお願いします。
環境 VisualStudio.NET 2002 Academic
    WindowsXP HomeEdition
time(), localtime()
853デフォルトの名無しさん:04/02/25 19:07
もちっと具体的にお願いします…
time localtime time.hでぐぐれ。あるいは首を釣って師ね。
#include <ctime>

std::time_t systime = std::time(0);
std::tm cur = std::localtime(&systime);
856855:04/02/25 19:16
cur*だった
857855:04/02/25 19:17
また間違った
*cur
858デフォルトの名無しさん:04/02/25 19:20
>>855
こう書くとおなじみのコードも新鮮に感じる。
859デフォルトの名無しさん:04/02/25 19:20
何はともあれ、ありがとうございます。
860エロイ人〜:04/02/25 21:16
void swap(int a,int b)
{
 int w;

 w=a;
 a=b;
 b=w;
}

スワップ関数間違ってますか?間違ってたら修正してちょ
>>860
void swap(int *a, int *b)
{
*b ^= *a;
*a ^= *b;
*b ^= *a;
}
862エロイ人〜サンクス:04/02/25 21:20
>>861
即答嬉しいっす。サンクス
>>861の方法はお勧めしません。
素直に、
void swap(int *a,int *b)
{
 int temp;

 temp = *a;
 *a = *b;
 *b = temp;
}
としておきましょう。
>>863
なんか不具合が起こることがあるんだっけ?
むしろ素直に
#include <algorithm>して
std::swap()を使う。
#define swap(type,x,y) do{ type temp;temp = x; x = y; y = temp;}while(1)

と望洋氏はしておられた。
>>866
while(1)だと永久ループだもんよ?
>>864
int a = 10; swap(&a, &a);
で a == 0 になる。
>>866
ワラタ
870エロイ人〜:04/02/25 23:40
void swap(int *a,int *b)
{
 int w;

 w = *a;
 *a = *b;
 *b = w;
}
>>863
すいません、tempってのがよく分からないのですが、wじゃ駄目なんですかぁ?
変数ってわかるか?
void swap(int *a,int *b)
{
 int shikibestumei_dakara_nandemo_iindayo_conchikisho;

 shikibestumei_dakara_doudemo_iindayo_conchikisho = *a;
 *a = *b;
 *b = shikibestumei_dakara_nandemo_iindayo_conchikisho;
}
>>872
そんな長い変数名使ったら殴るぞ?
>>872
当方MSX-Cを使用していますので、K&R仕様かつ変数名は6文字まででおねがいします。
またカニチャーハン仕様か!
蟹飯&立地
蟹チャーハンうまうま
蟹工船
879hj:04/02/26 01:52
氏名を5人分をキーボードから入力して、昇順にソートする。
そして、データマッチング機能を使用して、キーボードから
検索したい氏名を入力してあれば表示する。

分かる方、いました教えてもらえないでしょうか?
お願いします。
>>879
>データマッチング機能
正規表現の事か?
単なる文字列比較でいいんじゃないの?
「使用して」って言うと大層に聞こえるけど。
コード関係の質問てここでしてもいいんでしょうか(´・ω・`)
レベルはかなり低いと思うのですが、教科書買ってないため全然手がつけられません
例をあげると

次の各意味を表すコードを記述しなさい
1.テキストボックス1を空欄にする 
といった感じです

ちなみに変数型の名称調べるのに1時間かかったへたれです_| ̄|○
>>882
教科書は買わずとも、何とかして手に入れるべき。勉強にならんだろ。
で、授業に出てない奴とかの宿題は、全文が書いてなかったり前提条件が不明だったりするので、
解答が得られることはまれ。

この場合のテキストボックスとはなんぞや?というところから入らないといけないのでね。
884882:04/02/26 13:13
>>883
課題の内容からいくと、ただのコードの記述だけでいいと思うのですが
それすらわからないという感じです(´ω`;)

次の各意味を表すコードを記述しなさい
1.テキストボックス1を空欄にする 

TextBox1.Caption = ""          (あってるのかな_| ̄|○

という感じの問題が大多数を占めています
>>884
VBのくだスレ行った方がいいんじゃないかな・・・
ありがとうございます
レス検索してまいります
887デフォルトの名無しさん:04/02/26 22:59
C言語の問題です。

キーボードから入力された数値の範囲をチェックします。
範囲は0〜100として、入力の際に文字(a〜z,A〜Z,特殊文字)、
空白を含む入力、リターンのみの入力はエラーと表示します。
そしてもう一度入力を要求し、正常データが入力された時点で入力数値を表示して終了する。

実行結果例
INPUT:aaa
エラー
INPUT:A1a
エラー
INPUT:?1?
エラー
INPUT:(Enterキーのみ)
エラー
INPUT:101
エラー
INPUT:55
55

数字と文字をどうやって区別するのかがさっぱりわかりません。
どなたかお願いします。
#include <stdio.h>
#include <string.h>

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

       while(1) {
              printf("INPUT : ");
              gets(str);
              for(i=0;i<strlen(str);i++) {
                     if(str[i] < 0x30 || str[i] > 0x39) {
                            printf("エラー\n");
                            break;
                     }
              }

              if(i == strlen(str)) {
                     printf("%s\n",str);
                     break;
              }
       }
       return 0;
}

かなりテキトゥー
というかgetsでEnterのみを判別することは出来るんだろうか_| ̄|○
>>887
短いやつ。でも荒がありそう。
#include <stdio.h>
int main(void)
{
char str[BUFSIZ],str2[BUFSIZ];
int num;
while(1)
{
if(fgets(str,sizeof(str),stdin)==NULL)continue;
if(sscanf(str,"%d%s",&num,str2)!=1)continue;
if(num<0||num>100)continue;
break;
}
return 0;
}
スマン整数の範囲チェック入れ忘れた
getcharを3回やっちゃだめ?
892887:04/02/26 23:25
>>888〜891
ありがとうございました。
数字と文字の判別法とかわかりました。すごく助かりました。
#include <stdio.h>
void main(void)
{
int a;
printf("Input ; ");
gets('a');

if(a<1 || 100<a)
printf("\nError\n");

printf("%d",a);
}
fgets()で入力し、sscanf()かstrtol()で解析。
ここはこんな簡単なものも書けない香具師ばっかりか?
>891
入力データのサイズは決まっていない。
>>895
>範囲は0〜100として
>>896
ユーザが3桁しか入力しないという保証はない。
898891:04/02/27 16:02
>>897
だから、getcharを使ってプログラム側で3桁で
入力を打ち切るんだってば。できない?
char data[3];
int x;
data[0] = getchar();
data[1] = getchar();
data[2] = getchar();
if ('0' <= data[0] && data[0] <= '9'
&& '0' <= data[1] && data[1] <= '9'
&& '0' <= data[2] && data[2] <= '9')
&& 0 <= (x = (data[0] - '0') * 100 + (data[1] - '0') * 10 + (data[2] - '0'))
&& x <= 100)
//hogehoge
else
//hogehoge
みたいに。
>>898
打ってる途中での修正がきかないだろ。
900891:04/02/27 16:53
>>899
はい、その通り。
逝ってくる。
修正できるかどうかはコンソール次第だろ。
つーか一回作れよ。
100以外は全部エラーかよ
for(;;){
int i,data;
char buf[3+1]={0};;
for(i=0; i<sizeof(buf); ++i){
if((data=getchar())==EOF) break;
if(data=='\n') break;
if(i==sizeof(buf)-1){ ungetc(data, stdin); break; }
buf[i]=data;
}
if(data==EOF || feof(stdin)) break;

if(sscanf(buf,"%d",&i)<=0) x=-1;
if(i<0 || 100<i) i=-1;

printf(" -- %s", (i>=0)?"OK":"NG");
if(i>=0) printf(" (%d)", i);
putchar('\n');
}
あ、 x って間違ってるよ
906デフォルトの名無しさん:04/02/27 22:28
別に宿題じゃないんですが、無限ループの中で交互にある処理を実行した
い場合次の方法以外に何かありますか?

int a=0;
for(;;){
if(a == 0)
a=1;
else
a = 0;
}
>>906
一体何の処理をしているのかよく分からんが・・・

int a=0;
for(;;) a = !a;
>>906
分岐しなくとも2個が交互に実行されるだけなら、
1回のループで2個処理を一気に実行すればいいんじゃないのか?
909デフォルトの名無しさん:04/02/28 10:57
ttp://www.42ch.net/UploaderSmall/source/1077933333.txt
このような問題を出されたのですが良ければ
この中のレポート問題1~4のやり方できたら教えてください
910デフォルトの名無しさん:04/02/28 10:58
>>909
問題はどれですか?
911909:04/02/28 11:26
すいません問題間違えてました。
ttp://www5f.biglobe.ne.jp/~freeuploader/yui/source3/No_0474.txt
WM_TIMER
WM_LBUTTONDOWN
WM_RBUTTONDOWN
WM_PAINT
913ぼるじょあ ◆yBEncckFOU :04/02/28 12:15
(・3・)エェー 質問受付中ですYO!
ぼるじょあさんはいつもスレ見てるんではないのですか?
915モナーぼるじょあ ◆yBEncckFOU :04/02/28 13:38
>>914
ぼるじょあは全知全能の神だからだYO(・3・)
漸痴蝉嚢
sage
918デフォルトの名無しさん:04/02/28 17:51
問題の条件として、「各関数の引数と戻り値は定義せず外部変数を使うこと」
とあるんですが、どういうことかわかりません。
void 関数名(void)
みたいな関数のみを使って書け、ということでしょうか?
919デフォルトの名無しさん:04/02/28 17:56
>>918
だろうな。
staticをつけないグローバル変数だけでどうにかしろということだと思う。
920918:04/02/28 18:08
>>919
ありがとうございました。迷いがなくなりました。
>>899
うちではコンソールで修正できた。
Metrowerks CodeWarrior 8.2 Pro for Win

やっぱり処理系依存みたい。
922デフォルトの名無しさん:04/02/29 22:54
成績が正規分布に従うとして、偏差値60、70、80以上の人数を求めよ

…数学板行きかな?
キーワードはZ
>>922
ざっとn{1-P(X<(d-50)/10)}人。
(nは人数、dは偏差値、P(X<x)は標準正規分布に従う変数Xがxより小さくなる確率)
P(X<x)は
(1 + erf(x / sqrt(2))) / 2
で行けるはず。標準通りdouble erf(double)が実装されていればの話だが。
ちなみに家では#if !__INTEL__とかされて実装されてされてない(w
926デフォルトの名無しさん
0〜999までの整数X,Yをそれぞれ入力し、
その入力された整数を一つの文字列に結合・変換し出力したいです。
また入力された整数が1桁や2桁の場合は3桁に変換し、
必ず6文字の文字列なるように変換しなければなりません。
例)入力・・・X=9、Y=30
  出力・・・009030(文字列)
というような感じです。よろしくお願いします。