ようかんマンがC/C++の宿題を片付けて見せます 26棹

このエントリーをはてなブックマークに追加
1ようかんマン ◆nup627Y0Gs
    .__   実は集団行動が嫌いなようかんマンです
    |・∀・| <調子に乗ってC/C++の宿題片付けます
    ト旦ノ.|
 調子`ゝゝ´調子
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

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

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

・数学的な問題は名前だけではなく数式自体をあげ、どのような
 計算をするのかも説明してください。
------------------------------------------------------------

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

【歴代スレは>>2-10











           ぽるん








25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
宿題手伝いますYO!!: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
>>1 乙。

やっと「ぼるじょあ」が消えたか。

「ようかんマン」なら許す。
5デフォルトの名無しさん:04/07/03 22:32
前々から思ってたんだけど、ようかんマンって何?

さおって数えるのか・・・
6デフォルトの名無しさん:04/07/03 22:45
すいませんが、誰か教えてください。
100個の整数を小さいほうから並べる問題なんですけど、よくわかりません。
下のプログラムを参考にしたほうがいいらしいです。
#include <stdio.h>
#define N 10
void input();
void output();
int a[N];
/* メイン関数 */
main()
{
input();
output();
printf("終了\n");
return(0);
}
/* ファイルからの入力 */
void input()
{
FILE *fp;
int i;
fp=fopen("in.txt","r");
for(i=0; i<N; i++) {
fscanf(fp,"%d",&a[i]);
}
fclose(fp);
}

7デフォルトの名無しさん:04/07/03 22:46

/* ファイルへの出力 */
void output()
{
FILE *fp;
int i;
fp=fopen("out.txt","w");
for(i=0; i<N; i++) {
fprintf(fp, "%6d\n", a[i]);
}
fclose(fp);
}
a[10]しかない・・・難問だ
ようかんマンと言えば「やるまん」なんだが・・・
「やるまん」聴いてる奴なんているのか?
ニッポン放送しか聴かないので。
>>6
#include <stdio.h>
#include <stdlib.h>
#define N 100
void input();
void output();
int cmp(const void *a,const void *b){ return *(int*)a - *(int*)b; }
int a[N];
/* メイン関数 */
main()
{
input();
qsort(a,sizeof(a)/sizeof(*a),sizeof(*a),cmp);
output();
printf("終了\n");
return(0);
}
>>11
#include <stdlib.h> いらなくね?
>>1
幼姦マソ〜(゚∀゚)ノ
>>12
qsortを使うのに必要
1512:04/07/03 23:13
>>14
qsort()はstdio.hでいいんだと思ってた。
失敬。
>>15
I/O関係ないし。
17デフォルトの名無しさん:04/07/03 23:16
stdio.hにあって入出力と関係のないのはsprintfだけ。
18デフォルトの名無しさん:04/07/03 23:17
この次はぼるじょあだな。
>>17
NULL
ぼるじょあよりも流石兄弟キボン
俺たちだと、無駄に容量食ってしまうんだよな
            ∧_∧
     ∧_∧  (´<_`  )  自分の宿題も終わってないのに質問に答えるとは
     ( ´_ゝ`) /   ⌒i   流石だよな、兄者。
    /   \     | |
    /    / ̄ ̄ ̄ ̄/ |
  __(__ニつ/  FMV  / .| .|____
      \/____/ (u ⊃
どうせ 1 とスレタイだけだsうわなにするやめrfsdぽいfは
>>17
sscanf
>>1
調子に乗ったり
図に乗ったり
すんなゴルァーーーー
尺八を吹く娘がいるときいたのですが竿スレはここであってますか?
はい、そうです。
非常に問題文が長いですが、どうかよろしくお願いします。
宿題本体と、宿題を解くために必要となる例題との2部構成になっています。

●宿題
例題を基にして 次のプログラムを作成せよ

・元素記号をコマンドラインのオプションに与えて、その元素の名前、熱伝導率と電気伝導率の比(熱伝導率(κ)と電気伝導率(σ)の比とは,κ/σ の意味)を表示する。さらに、その元素のデータが格納されている構造体のメンバーのアドレスを表示する。
・実行結果は次のようになる。
---------------------------------
$ hwll Al < element.dat
Al(Alminium): 5.875e-06
p.number: 0xbfffe5a4
p.symbol: 0xbfffe5a8
p.name: 0xbfffe5ab
p.mt: 0xbfffe5c0
p.ec: 0xbfffe5c8
p.tc: 0xbfffe5d0
---------------------------------
2827:04/07/04 01:04
●宿題1行目に登場する「例題」
元素記号のデータelement.datを使う。
(こちらにうpしましたhttp://upld.komugi.net/src/up884.zip
まず適当な構造体を定義する。
次に、原子番号、元素記号、名前、融点を構造体に読み込む関数、構造体のメンバーを表示する関数を作成せよ。
また、それらをデモするプログラムを考えよ。

(例題の解答は次レスに書きます)
2927:04/07/04 01:04
・例題の回答
1 : #include <stdio.h>
2 : #include <stdlib.h>
3 : #include <math.h>
4 :
5 : struct iccd {
6 : int number;
7 : char symbol[3];
8 : char name[20];
9 : double mt;
10 : double ec;
11 : double tc;
12 : };
13 :
14 : void print(struct iccd p)
15 : {
16 : printf(
17 : "%2d %s\t%-8s\t%8.3f %8.2g %6.1f\n",
18 : p.number, p.symbol, p.name, p.mt, p.ec, p.tc
19 : );
20 : }
21 :
22 : struct iccd getdat(char buf[])
23 : {
24 : struct iccd p;
25 : sscanf(buf, "%d%s%s%lf%lf%lf", &p.number,
26 : p.symbol, p.name, &p.mt, &p.ec, &p.tc);
27 : return (p);
28 : }
3027:04/07/04 01:05
29 :
30 : int main(void)
31 : {
32 : int i = 0;
33 : char buf[80];
34 : struct iccd element[100];
35 :
36 : while (fgets(buf, 80, stdin) != NULL){
37 : element[i] = getdat(buf);
38 : print(element[i]);
39 : i++;
40 : }
41 : return (0);
42

非常に長くなり,また連続投稿となり申し訳ないです。
お願いします。
31デフォルトの名無しさん:04/07/04 01:30
すみませんが誰かよろしくお願いします。
問 次のような配列xの宣言がある。
int x[8]={10,2,-3,4,55,6,-71,8};
int型へのポインタpt1,pt2を用意し、
  pt1 = x; pt2 = x+7;
とおけば、*pt1はx[0]、*pt2はx[8]を参照する。配列xの要素を逆順に並び替える
処理をポインタpt1,pt2を使って書け。(配列記法x[i]は使ってはならない。処理
が完了していることをprintf()により配列をプリントし、確認せよ。)
x[7]じゃないのか
3331:04/07/04 01:34
いえ、問題はx[8]になっています。
>>31-32
どっかで見たな、そのつっこみ。
>31 少なくともint要素1つ分の領域がないと無理なんだが
*pt2はx[8]を参照する。
     ~~
ここだろ↑
3731:04/07/04 01:47
すいません。この分野があまり理解できてなくてなんとも言えないんですが、授業
でもいいかげんな教授なのでミスプリの可能性も考慮して下さい。
過去ログ25をx[8]でctrl+F
39ようかんマン:04/07/04 01:49
#include <stdio.h>

int main(void)
{
int x[8]={10,2,-3,4,55,6,-71,8};
int *pt1, *pt2;
int i, tmp;

pt1 = x;
pt2 = x + 7;

while(pt1 < pt2)
{
tmp = *pt1;
*pt1 = *pt2;
*pt2 = tmp;

pt1++;
pt2--;
}

for(i = 0; i < 8; i++)
{
printf("%d\t", x[i]);
}
}
int wk,*pt1,*pt2,x[8]={10,2,-3,4,55,6,-71,8};
pt1 = x; pt2 = x + 7;
while(pt1<pt2){
wk=*pt1; *pt1=*pt2; *pt2=wk;
++pt1;
--pt2;
}
4140:04/07/04 01:53
かぶってら
>>27
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

struct iccd {
int number;
char symbol[3];
char name[20];
double mt;
double ec;
double tc;
};

void print(struct iccd *p)
{
printf(
"p.number: 0x%p\n"
"p.symbol: 0x%p\n"
"p.name: 0x%p\n"
"p.mt: 0x%p\n"
"p.ec: 0x%p\n"
"p.tc: 0x%p\n",
&p->number, &p->symbol, &p->name, &p->mt, &p->ec, &p->tc
);
}
struct iccd getdat(char buf[])
{
struct iccd p;
sscanf(buf, "%d%s%s%lf%lf%lf", &p.number,
p.symbol, p.name, &p.mt, &p.ec, &p.tc);
return (p);
}
int main(int ac,char **av)
{
int i = 0;
int j;
char buf[80];
struct iccd element[100];

if(ac<2)
return 1;

while (fgets(buf, 80, stdin) != NULL){
element[i] = getdat(buf);
i++;
}

for(j=0; j<i; j++){
if(strcmp(av[1],element[j].symbol)==0)
break;
}

printf("%s(%s): %g\n",element[j].symbol,element[j].name,element[j].tc/element[j].ec);
print(&element[j]);

return (0);
}
4431:04/07/04 01:57
回答ありがとうございます。助かりました。
4542-43:04/07/04 02:01
お前ら難しそうな問題をスルーすな
4627:04/07/04 02:17
>>42-43

コンパイルして実行してみました。
完璧です。ホント助かります。回答ありがとございました。
>45 ha?
hi?
どうやら>>45はカキコしたかっただけのようです。
はい。
>>1よめ

なんだか50レス以内で>>27のように長文を分割して貼られると
レスするとき常に「>>1よめ」と付けたくなる。
殺伐としたスレに救世主が!!
 .__
ヽ|・∀・|ノ ようかんマン
 |__|
  | |
assert( *find( >>1, >>54, "アホ" ) == >>45 );
54デフォルトの名無しさん:04/07/04 07:54
大文字、小文字が乱雑に使用された英文を入力とし、正しい清書出力を得る
フィルタを作成せよ。条件は以下
1.基本的に英文の先頭は大文字、先頭以外は小文字とする
2.記号"." "!" "?" をもって文末とする
3.文中の単語Iは大文字とする

どなたかお力添えを、、、お願いします。
>>54
初回、または前回処理した文字が文末文字なら次の文字は大文字。
文末文字、またはスペースに挟まれたIは大文字。
それ以外は小文字。

上の条件で1文字づつ処理すればよい。
>>54
He said,'Sure.'みたいなケースはどうするんだ。
sureにしちゃっていいのか?
>>56
仕様嫁
"基本的に"が曲者だな。
>>57 ha?
ファイル"data.txt"を読み込み二次元配列(最大語長7,単語数50)に
単語を切り出す関数getwordを作成せよ。

単語:英数字で始まりホワイトスペースまで、ピリオド・コンマなどは除く。
単語の内と外という2状態の有限オートマトンを利用する。

仕様:fpで指定されたファイルから単語1つを切り出し、その切り出された単語を
参照渡しで渡されたwordの指す領域へ返す、ファイルの終端で0を返す。。
呼び出し例getword(fp, word)

こんな感じです、不明瞭な点があればご指摘ください。
それではよろしくお願いします。
ようかんマンに世代交代か
NHK教育のような感動を覚えるよ
>>60
こんなかんじかな(テストしてない)。

#include <ctype.h>
#define MAX_WORD_LEN 7
void getword(FILE *fp, char *word[MAX_WORD_LEN + 1])
{
char c;
int i = 0;
int j = 0;
int in_word = 0;
while (fread(&c, 1, 1, fp)) {
if (in_word) { /* 単語の内状態 */
if (isspace(c) || c == ',' || c == ',') { word[i][j] = '\0'; i++; j = 0; in_word = 0; /* 単語の外状態へ遷移 */ }
else { word[i][j] = c; j++; }
}
else { /* 単語の外状態 */
if (isspace(c) || c == ',' || c == ',') { /* 何もしない */ }
else { word[i][j] = c; j++; in_word = 1; /* 単語の内状態へ遷移 */ }
}
}
6362:04/07/04 12:23
>ファイルの終端で0を返す
を見てなかった。

void → int
最後の} → return 0; }

に訂正。
>>62
ありがとうございます。
int main(void)
{
FILE *fp;
int num=0,i;
char *word[MAX_WORD_LEN + 1];
char *file="data.txt";
if((fp=fopen(file, "r"))==NULL){
fprintf(stderr, "ファイルオープン失敗\n");
exit(1);
}
while((num=getword(fp, word))!=0){
printf("<%s> ",*word);
}
return 0;
}
これを付け加えて適当なdata.txtを作りwordの中身を表示させようとしたのですが
<(null)> <(null)> <(null)> <(null)> <(null)> <(null)> <(null)> <(null)> <(null)>
<(null)> <(null)> <(null)> <(null)> <(null)> <(null)> <(null)> <(null)> <(null)・・・
と表示されてしまいます。
main関数どこがおかしいんでしょう?
6562:04/07/04 13:41
>>64
>main関数どこがおかしいんでしょう?

>char *word[MAX_WORD_LEN + 1];
ここを↓にすればいい。
char word[50][MAX_WORD_LEN + 1];
50の部分は#defineで適当な名前つけた方がいいかもね。
6662:04/07/04 13:45
あげちゃった。

>>64
もひとつ見逃してた。
>while((num=getword(fp, word))!=0){
>printf("<%s> ",*word);
>}

こういうふうに使わないとダメなの?
オレは

getword(fp, word);
for (i = 0; i < 50; ++i) printf("<%s> ", word[i]);

って使うように書いたんだけど。
6762:04/07/04 14:04
たびたびごめん。>>62は結構間違ってた。
#include <stdio.h>
#include <stdlib.h> /* exit() */
#include <ctype.h> /* isspace() */
#define MAX_WORD_LEN 7
#define WORD_NUM 50
int getword(FILE *fp, char word[][MAX_WORD_LEN + 1]) {
char c;
int i = 0, j = 0;
int in_word = 0;
while (fread(&c, 1, 1, fp)) {
if (in_word) { /* 単語の内状態 */
if (isspace(c) || c == '.' || c == ',') { word[i][j] = '\0'; i++; j = 0; in_word = 0; /* 単語の外状態へ遷移 */ }
else { word[i][j] = c; j++; }
}
else { /* 単語の外状態 */
if (isspace(c) || c == '.' || c == ',') { /* 何もしない */ }
else { word[i][j] = c; j++; in_word = 1; /* 単語の内状態へ遷移 */ }
}
}
return 0;
}
int main(void) {
int i;
char word[WORD_NUM][MAX_WORD_LEN + 1];
FILE *fp = fopen("data.txt", "r");
if (fp == NULL) {fprintf(stderr, "ファイルオープン失敗\n"); exit(1); }
getword(fp, word); for (i = 0; i < WORD_NUM; ++i) printf("<%s> ",word[i]);
return 0;
}
>>66
> >while((num=getword(fp, word))!=0){
> >printf("<%s> ",*word);
> >}
> こういうふうに使わないとダメなの?
宿題教えてもらうレベルなのであんまり分かってなかったりします。

65,66の修正を施したらうまく行きました、ありがとうございました。
修正内容はコンマ・ピリオドと括弧の数ですよね
ありがとうございました
初めまして。色々と試しているのですが、プログラムが作れません。
よろしければ、教えてください。
「チーム研究発表会の評価を集計するプログラムを作る。3人以内の学生メンバーで構成される4
チームが発表会に参加する。評価は調査内容、提案内容、発表資料、発表方法の4つのポイントで
行われ、各々のチームに対して合計点数が付けられる。」
1.評価に必要なデータを全て含むようなチームを表す構造体を作成し、typedefで名前を付けよ。
  変数名はできる限り理解しやすいものを考え、各チームのメンバーのフルネームと学籍番号も
  分かるようにすること。また、各チームにはチーム番号をつけよ。

という物なのですが、ここまで指定されていたら作れるのが当たりまえなのかもしれませんが、初心者
なものでほぼ手につきません。よろしければ、ヒント的なものでもかまわないので教えてください。
>>70
もう7月です。今の時点でこんなことをしてたら2年後なり4年後なりに自分がどうなるか考えなさい。
>>71
スレ違い。帰れよ
まあ、>>71言うとおりなんだろうけどね
>>70
マルチ。帰れよ
>>70
ぼるじょあの方にも書いてますからっ

   ざ ん ね ん っ ! !

マルチ切りっ!!

>>71
別にどうもならないだろ。
このスレで一番かわいそうなのは>>76だと思った。

こんなの将来プログラミング職にするんじゃなければ関係ないしね
あそびだよ、 あ そ び
遊びでやってんじゃないんだよ!
宿題なんだよ!
古いなあ〜
>>79-80

じゃあ今すぐやめた方が良いぞ、そんな学校。人生は有限だ。
>>70

#include <string>

struct Human
{
 std::string name;
 int id;
};

struct Team
{
 int id;
 int cn, tn, hs, hh;
 Human hito[3]; 
};

typedef Team Uzee;
>>73-83
宿題切れ禁断症状?
ポインターの宿題なんですが教えて下さい。
「10個の小文字をメモリに格納し、その中に母音がいくつあるかを表示するプログラムを
ポインタを用いて作成せよ」
って言う問題です。
よろしくお願いします。。
>>86
お前はどこまで考えた?
>>86
ほれ

#include <stdio.h>
int main(void)
{
char komojitachi[11];
char *pointer;
int nankokana = 0;
printf("小文字10文字入力しろや: ");
fgets(komojitachi, sizeof(komojitachi), stdin);
for (pointer = komojitachi; *pointer != '\0'; ++pointer)
if (*pointer == 'a' || *pointer == 'i' || *pointer == 'u' || *pointer == 'e' || *pointer == 'o')
nankokana++;
printf("母音は %d個\n", nankokana);
return 0;
}

>>87
愚問ですな。
配列に入れて、最後にヌル文字入れて
int hoge(char *s) {
int r = 0;
for (; *s ; s++)
if (isVowel(*s)) r++;
return r;
}
にわたす。
>>88
ありがとうございます。
9170:04/07/04 21:37
>>84
ありがとうございます。参考にさせていただきます。
92maki:04/07/04 23:16

C 言語を使用して次のプログラムを作成しなさい。入力として、正の浮動小数点の値が次のように与えられているとします。
float a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1};
但し、この -1 はデータの終りを意味している特別な値です。この時、与えられた数の平均値を計算して出力するプログラムを作成しなさい。
また、プログラム中の配列変数 a の定義を次に取り替え(それ以外の部分は変更せずに)、同じく正しく計算できることを確かめなさい。
float a[]={3.3, 6.7, 0.2, 2.9, -1};
これ至急教えて〜ほんと簡単なんだろうけど書き方が分からないよ〜>w<
93WebProgのひと:04/07/04 23:21
>>92
わかるとこだけでも書いてごらん。
途中のわからんとこはすっ飛ばしていいから。
>>92
float a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1};
float* pa = a;
float sum = 0.0;
int count = 0;

while(*pa != -1){
   sum += *pa;
   pa++;
   count++;
}

printf("average:%f\n",sum/count);
95maki:04/07/04 23:26
分かるところ〜!?う〜ん本当に最初の方だけです><c言語始めたばっかで・・・授業についていけないの(涙)
>>94
イジワル
>>95
考えようともせんのは問題外ですな。
助けて
1maki[] 04/07/04 23:18 ID:
C 言語を使用して次のプログラムを作成しなさい。入力として、正の浮動小数点の値が次のように与えられているとします。
float a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1};
但し、この -1 はデータの終りを意味している特別な値です。この時、与えられた数の平均値を計算して出力するプログラムを作成しなさい。
また、プログラム中の配列変数 a の定義を次に取り替え(それ以外の部分は変更せずに)、同じく正しく計算できることを確かめなさい。
float a[]={3.3, 6.7, 0.2, 2.9, -1};
これ、至急教えて〜><簡単何だろうけど書き方が>w<
99maki:04/07/04 23:31
>>97
お前には聞いてねーよカス>w<
100maki:04/07/04 23:31
ほんと考えたんだよ〜><でも、書き方が勉強しなきゃな〜もっと!!
>>97
あのさあ、ここはそういうスレじゃないから。
逆におかしなプログラムを掲載されると
それにあわせなきゃいけなくてめんどくさいぐらいだから。
>>99
質問者がえらそうにするな。
>>101
お前がアホなのはよく分かったから黙ってろ。w
104ほらよっ:04/07/04 23:34
>>92
#include <stdio.h>
int main()
{
float a[] = {1.5, 3.3, 6.7, 0.2, 2.9, -1};
/* float a[]={3.3, 6.7, 0.2, 2.9, -1};*/
return printf( "%f",(a[0]+a[1]+a[2]+a[3]+((a[4]<0.0)?0.0:a[4]))/((a[4]<0.0)?4.0:5.0) );
}
#include <stdio.h>
main() {float a[]={1.5, 3.3, 6.7, 0.2, 2.9, -1};float heikin = 0;int i = 0;
while(a[i] > 0) { heikin += a[i];i++;}heikin /= i;printf("平均値:%f", heikin);}
106デフォルトの名無しさん:04/07/04 23:35
お前らマジ糞だな
>>103
荒らしは消えろよ。
108デフォルトの名無しさん:04/07/04 23:38
>>103
>>71
>>77
>>83
>>87

全部同じ人ですか?


















出題レベルから考えたら105ぐらいがいいのかも。
>>94は *pa が…。
111maki:04/07/04 23:40
94のってもしかして違うの〜??
(´-`)。oO(おまいらがここでじゃれあってるあいだにmitのれんちゅうはかくじつn
>>95
ダメもとで試してみたら案外出来ちゃったりもしますので、
ものは試しということで、とりあえずガンガッてみてください。
>>111
*pa != -1;
延々と終わらない可能性がある



















授業にすらついていけない人がプログラマになるのは大迷惑ですので
今のうちに悪い芽は摘んでおくというのもよい考えでしょう

プログラムに向いてない人はいるわさ
向いてない方が幸せという意見もあるけどな。
それならストレートに退学を進めた方がよい。
>114
別に問題に
>この -1 はデータの終りを意味している特別な値です。この時、与えられた数の平均値を計算して出力するプログラムを作成しなさい
ってあるんだから、-1がなけりゃ止まっちゃダメ(w
>114
でも-1がデータの終わりなので
最大繰り返し回数でも条件に入れたらいいんじゃない?
120maki:04/07/04 23:47
教えてくれてありがとね^^;もっと勉強しま〜す!!
とりあえづ、WebProg板のおっちゃん(=110)は落ちまつ。
(*pa != -1) の問題点は、質問者が
 *変数名
ってのを見たことがなさそう、というところ、でつ。
>>120
MCR
>>115
いやそれはないw
>>123
115にはなんらかのメッセージが?!
僕には読めない・・・
くっそー
へ!? Jane DOEでは読めるけど
OpneJane は読めんようだ。
OpenJane Doe α 0.1.11.1で改行のウズでつ。
128デフォルトの名無しさん:04/07/05 01:47
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=236
長いので置かせてもらいました。御願いします
129デフォルトの名無しさん:04/07/05 01:54
#include <stdio.h>

int main(void)
{
char array[4], *p;

printf("Input a string (3 characters): ");
fgets(array, 4, atdin);

p = array;

printf("%c\n", *p);
printf("%c\n", *(p+1));
printf("%c\n", *(p+2));

printf("%s\n", array);

printf("%s\n", *p);
printf("%s\n", *(p+1));
printf("%s\n", *(p+2));

return 0;
}

このプログラムを拡張し、文字配列array[11]の各要素の値とそのアドレスを以下のように順に表示するプログラムを作成せよ。
注1)ポインタを利用すること。
出力例
data: 2, address: -107344784
data: 4, address: -107344783
130129:訂正:04/07/05 01:55
#include <stdio.h>

int main(void)
{
char array[4], *p;

printf("Input a string (3 characters): ");
fgets(array, 4, atdin);

p = array;

printf("%c\n", *p);
printf("%c\n", *(p+1));
printf("%c\n", *(p+2));

printf("%s\n", array);

printf("%s\n", p);
printf("%s\n", p+1);
printf("%s\n", p+2);

return 0;
}

このプログラムを拡張し、文字配列array[11]の各要素の値とそのアドレスを以下のように順に表示するプログラムを作成せよ。
注1)ポインタを利用すること。
出力例
data: 2, address: -107344784
data: 4, address: -107344783
>>130
#include <stdio.h>
int main(void)
{
char array[12], *p;
int i;
printf("Input a string (11 characters): ");
fgets(array, 11, stdin);
p = array;
for (i=0; i<11; ++i, ++p) printf("data: %c, address: %d\n", *p, &*p);
return 0;
}
132デフォルトの名無しさん:04/07/05 02:12
#include <stdio.h>

int main(void)
{
int num = 2650040078;
int *np;

******; /*ポインタ変数npにnumのアドレスを代入*/

printf("The value %d is stored at address %d\n", ******);
/*ここでは変数numだけを使って書くこと*/
printf("The value %d is stored at address %d\n", ******);
/*ここではポインタ変数npだけを使って書くこと*/

  return 0;
}

これの******
のところを補って完成させよ。

出力例(決まった値にはならないが。)

The value %d is stored at address -1073745404
The value %d is stored at address -1073745404

以前、この宿題についてお聞きしたら、こんな表示は不可能と言われたのですが
どうやら可能らしいんです。
%d を見て修正したくてムラムラしてくるのは漏れがA型だから?
>>132
その可能と言った人に聞くべし。そんな表示は不可能だ。
#include <stdio.h>
int main(void)
{
int num = 2650040078;
int *np;
np = #/*ポインタ変数npにnumのアドレスを代入*/
printf("The value %%d is stored at address %d\n", &num);
/*ここでは変数numだけを使って書くこと*/
printf("The value %%d is stored at address %d\n", np);
/*ここではポインタ変数npだけを使って書くこと*/
return 0;
}
>>134
まちがった
printf("The value %s is stored at address %d\n", "num",&num);
printf("The value %s is stored at address %d\n", "np",np);
・・・英語読んでなかった。逝って来る_| ̄|○
全角s
>>134-136
        lヽ
        l 」
        ‖
    _, ,_  ∩
  ( ‘д‘)彡   スパーン
∠二i=⊂彡   .__
         ヽ|・∀・|ノ
          __
          |__|
           | |
アドレスを%dで表示させるの?
    _, ,_
  ( ‘Д‘)
∠二i=⊂ノ    ペチャ
            __
          ヽ|・∀・|ノ
          |__|
           | |
        lヽ
        l 」
        ‖
    _, ,_  ∩
  ( ‘д‘)彡   スパーン
∠二i=⊂彡   .__
         ヽ|・∀・|ノ
          __
          |__|
           | |
    _, ,_
  ( ‘Д‘)
∠二i=⊂ノ    ペチャ
            __
          ヽ|・∀・|ノ
          |__|
           | |
     ,へ、        /^i
     | \〉`ヽ-―ー--< 〈\ |
     7   , -- 、, --- 、  ヽ
    /  /  \、i, ,ノ    ヽ  ヽ
    |  (-=・=-  -=・=-  )  |
   /  <  / ▼ ヽ    >   、
  く彡彡 ( _/\__)  ミミミ ヽ
   `<   |__|   ミミ彳ヘ
      >   | |  ))  /   \
     /         7      \
     |        /
144デフォルトの名無しさん:04/07/05 05:17
>>129-135
ポインタの変換文字に%p使わないのは,
ようかんマン的仕様でつか?


 i〜'~~|
 |__|
  | |
         A
>>144
んなのすっかり忘れていましたが何か?
147デフォルトの名無しさん:04/07/05 09:26
2進数から10進数に変換するプログラムを教えて下さい。!!!
お願いします。メチャメチャあせってます
>147
windows付属の電卓
>>147
strtol()
150147:04/07/05 09:37
>>149,147
自分で関数を使ってつくるんですが分かりません。
お願いします!!
そんなの中学数学だろ

typedef unsigned int Pages; /* ページ数 */
typedef char *Title; /* 文献のタイトル */
typedef char *Nname; /* 作者の名前 */
typedef char *Description; /* 説明 */


これを使って定義したデータ型を使用して、標準入力から論文データを
読み込み、論文リストを保持し、標準出力への表示を行うプログラムを
malloc関数とsizeof演算子を用いて作成せよ。

という問題の解答を教えてください。
153デフォルトの名無しさん:04/07/05 10:39
>>1
Athlonコア欠けマン思い出したYO!!
>>150
/* 2進文字列の数値化 */
unsigned bin2u(const char *p)
{
unsigned rtn;
/* 先頭の空白ぐらいは取り除いてやろうじゃないか */
for (; *p == ' ' || *p == '\t'; ++p) {
}
/* '0', '1'以外が見つかったらそこで打ち止め */
for (; *p == '0' || *p == '1'; ++p) {
rtn = rtn * 2 + (*p != '0');
}
return rtn;
}

/* 2進文字列から10進文字列へ変換(destは充分確保すること) */
void bin2dec(char *dest, const char *src)
{
sprintf(dest, "%u", bin2u(src));
}
>>132
前スレの926に答えがあるだろうが
156デフォルトの名無しさん:04/07/05 16:00
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=237
問題は「2頂点の最短距離と経路を表示させるプログラムに修正せよ」
です。助けてくれ〜
ぼるじょあがC/C++の宿題を片づけますYO! 25代目 - http://pc5.2ch.net/test/read.cgi/tech/1087929711/983
983 名前:デフォルトの名無しさん[] 投稿日:04/07/05 16:02
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=237
問題は「2頂点の最短距離と経路を表示させるプログラムに修正せよ」
です。助けてくれ〜

C言語なら俺に聞け! Part 84 - http://pc5.2ch.net/test/read.cgi/tech/1088610149/788
788 名前:デフォルトの名無しさん[] 投稿日:04/07/05 16:06
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=237
問題は「2頂点の最短距離と経路を表示させるプログラムに修正せよ」
です。助けてくれ〜

C言語なら俺に聞け! Part 84 - http://pc5.2ch.net/test/read.cgi/tech/1088610149/799
799 名前:デフォルトの名無しさん[] 投稿日:04/07/05 16:32
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=237
問題は「2頂点の最短距離と経路を表示させるプログラムに修正せよ」
です。助けてくれ〜
マルチっぽい
〔っぽい〕じゃNEEEEYO !! まるちDAネ☆
幼姦マソのところにも…
>>156
急に難しくなってないか?
構造体とか使っちゃダメなん?
>>152
まるてぃ

ぼるじょあがC/C++の宿題を片づけますYO! 25代目
http://pc5.2ch.net/test/read.cgi/tech/1087929711/984

984 :デフォルトの名無しさん :04/07/05 17:21

typedef unsigned int Pages; /* ページ数 */
typedef char *Title; /* 文献のタイトル */
typedef char *Nname; /* 作者の名前 */
typedef char *Description; /* 説明 */


これを使って定義したデータ型を使用して、標準入力から論文データを
読み込み、論文リストを保持し、標準出力への表示を行うプログラムを
malloc関数とsizeof演算子を用いて作成せよ。

という問題です。教えてください。
>>156
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=142
グラフ理論のアルゴリズムなんて見たこともない厨房だが、何とかできたかな?
マルチは放置しろよ…
学生は書きたがりなんだよ
>>164
マルチを不快に思う奴がいるのは知っているが、俺はそう思わない。
そもそも、回答するのも放置するのもそれぞれの勝手だろ?
>>166
ここはマルチについて語るスレではありません。
要するに自己中と
東鳩?
>>http://pc5.2ch.net/test/read.cgi/tech/1087929711/984
>という問題です。教えてください。

なにを?
4.3.3節で定義したデータ型を使用して、標準入力から論文データを読み込み、論文リストを保持し、標準出力への表示を行なうプログラムを、 malloc関数とsizeof演算子を用いて作成せよ。
# [2004/7/2] 文字列を扱うためのライブラリ関数を利用すると便利です。


4.3.3節で定義したデータ型を使用して、標準入力から論文データを読み込み、論文リストを保持し、標準出力への表示を行なうプログラムを、 malloc関数とsizeof演算子を用いて作成せよ。
# [2004/7/2] 文字列を扱うためのライブラリ関数を利用すると便利です。
すいません。間違えました。
984の問題なのですが、文字列を扱うためのライブラリ関数を利用するらしいのです。
これを利用して、標準入力から論文データを読み込み、論文リストを保持し、標準出
力への表示を行なうプログラムの作成の仕方を教えてください。
173デフォルトの名無しさん:04/07/05 21:21
どなたかC言語でお願いします。

5個の荷物があります。大きさはそれぞれ以下の通りです。
荷物番号 大きさ
0      3111
1      121
2      1651
3      3748
4      1520
この荷物を容量が10000のナップザックに出来るだけ隙間なく詰めます。

よろしくお願いします。
定量的には、荷物の大きさの和が10000以下になる組み合わせのうち 最大になる荷物の組み合わせを求めます。
5個の荷物のうち、いくつかの番号を入力し、 入力された番号の荷物のそれぞれの大きさと合計を表示するプログラムを書け。
>>173
それは小学生の算数ですか?
175デフォルトの名無しさん:04/07/05 21:40
C言語なんですけど、

sankaku[3] = {1,2,3};

が構文エラーになってしまいます。
どうやたらいいでしょうか?
>>175
    sankaku[3] = {1,2,3};
 ↑
>>174
あなたはナップザック問題を知らないんですか?
178デフォルトの名無しさん:04/07/05 21:43
このソートのプログラムはどこがおかしいのでしょうか?
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=238

abcd
abcdefg
abc
abcd
abcdefghijk
abcdefghi
a
ab
abcdefghijkl
abcde
と順番に入力したら、結果が↓のようになって正しい結果が出てきません。
ab
abcde
abc
abcd
a
abcdefg
abcdefghijk
abcdefghi
abcd
abcdefghijkl
>>178
str[i]とstr[j]を入れ替える時に、
count[i]とcount[j]の情報も入れ替えてあげないとダメ
countの入れ替え
加えて交換操作範囲不足

文字列の位置を配列の要素番号で書くと、やってる操作は
0<->1 0<->2 0<->3 (ry) 0<->9
.     1<->2 1<->3 (ry) 1<->9
..          2<->3 (ry) 2<->9
         ・
         ・
         ・
だよな?

この場合、0 との交換対象になるのは "1 だけ" なんだけど、0 と 1 がもし文字数最小で
なかったら 0 の位置には文字数最小の文字列は絶対来ないよな?
じゃあどうしたら、文字数最小の文字列がどこにあろうと 0 まで移動できるか考えてみよう。
>>181
へ?
0と交換対象になるのは1〜9だが
183デフォルトの名無しさん:04/07/05 22:20
西暦y年m月d日の前の日、あるいは次の日の日付を求めてセットする関数
void yesterday(int *y,int *m,int *d)
void tomorrow(int *y,int *m,int *d)
を作成せよ。なお閏年などもきちんと判別すること。(ポインタの章)

という問題があり、とりあえずtomorrow関数を作ってみたのですが
ポインタを使う意味のないものができてしまいました(しかも、見た目がまぬけ・・・
どなたかCで模範解答をお願いします
>>183
つりあえず作った物貼れよ
>>182
  (・д・) …………………
      …………………
      …… ・ ・ ・
Σ(゚д゚lll)

そうか、あれでいいのか。間違えた(滝汗
void tomorrow(int *y,int *m,int *d)
{
switch(*m){
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10:if(*d == 31)
*m += 1,*d = 1;
else
*d += 1; break;
case 4 :
case 6 :
case 9 :
case 11:if(*d == 30)
*m += 1,*d = 1;
else
*d+1; break;
case 2 :if(*y/4 == 0 && 29)
*m += 1,*d = 1;
else if(*y/4 != 0 && 28)
*m += 1,*d = 1;
else
*d += 1; break;
case 12:if(*d == 31)
*y += 1,*m = *d = 1;
else
*d += 1;
}
printf("明日は%d年%d月%d日です。\n",*y,*m,*d);
}
187デフォルトの名無しさん:04/07/05 22:35
void yesterday(int *y,int *m,int *d){
if(!--*d){
if(!--*m){
*m = 12; *y--;
}
switch(*m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
*d = 31;
break;
case 4:
case 6:
case 9:
case 11:
*d = 30;
break;
case 2:
if (*y % 400 == 0) *d = 29;
else if (*y % 100 == 0) *d = 28;
else if (*y % 4 == 0) *d = 29;
else *d = 28;
break;
}
}
}
そもそもポインタを使わせるには無理がある問題だな・・。
>>186
const int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
void tomorrow(int *y, int *m, int *d)
{
if (*y / 4 == 0) days[1]++;
if (*d == days[*m - 1]) {
if (*m == 12) { *y = 1; *m = 1; } else { *m += 1; }
*d = 1;
}
else {
*d++;
}
printf("明日は%d年%d月%d日です。\n",*y,*m,*d);
}
190187:04/07/05 22:38
スマソ・・・・
yesterdayは別にいいのか・・・・

ちなみに
400で割り切れる年は閏年
100で割り切れる年は閏年じゃない(←ポイント)
4で割り切れる年は閏年
だから
グローバル変数を書き換えてそのまま放置じゃまずいだろ。
192189:04/07/05 22:41
constなのに++してる。ダメじゃんオレ orz
193189:04/07/05 22:43
>>191
そっすね。
>>186
*d+1; break;
なにこれ?
case 2 :if(*y/4 == 0 && 29)
else if(*y/4 != 0 && 28)
これもダメ
196186じゃないけど:04/07/05 22:44
>>194
どこかへん?
>>196
*d+=1;
C compilerはどこでダウンロードできるの?
手軽なのでいい。無料なら。
199196:04/07/05 22:47
>>197
理解しました
200183:04/07/05 22:47
>>187
if(!--*d)の書き方を初めて見るので
どういう意味かわかりません、すいません

yesterdayもやらなければいけないので助かりました
ありがとうございます

>>189
おお すっきりして見やすいです
ありがとうございました


もっと勉強がんばります

201デフォルトの名無しさん:04/07/05 22:47
ラウンジの宿題のソースを置くスレ235に例題プログラムを貼りました。
これを参考にして引数で指定された配列要素を常に、
     左の子のデータ値 <= 親のデータ値
       親のデータ値 < 右の子のデータ値
となるように二分木上に記録していき、出来た二分木を中間順に走査す
ることにより、昇順に並び替える関数を作るのですが、どうもプログラ
ムは苦手でよくわかりません。ご指南お願いします。 
初心者なので言語はCで・・・。
202187:04/07/05 22:49
>>200
!(--(*d))
*dから1引いといて、それが0だったら
という意味
>>202
理解しました!
わざわざありがとうございます
>>194-195
すいません、どう駄目なのかわかりません
*d++ってあり得ねーよ。
206189:04/07/05 22:56
>>205
ア゙ー (*d)++ね。
ヒィボナッチ数列を再帰呼び出しを用いて求める関数を作成する。
fibo関数
第1引数(int型) 求める項
戻り値(int型) ヒィボナッチ数
引数が1または2なら1を戻す
引数が1または2でないなら直前の2つの項をfiboで求めr、その和1を戻す。

main関数
fiboを用いて12項の値を求め表示する。
208187:04/07/05 22:58
>>204
*d+1;
何も起きません

×if(*y/4 == 0 && 29)
○if(*y/4 == 0 && *d == 29)

>>206
()をつければ使えるんですか?

>>208
全然気づかなかった ○| ̄|_
ありがとうございます
>>209
*d++って++の方が結合強いから
()付けないと *(d++) ポインタ進めてその値
って解釈されちゃうわけ
211210:04/07/05 23:05
その値ってのは語弊があった
スマソ
212209:04/07/05 23:10
>>210-211
なんとなくわかりました
ポインタもっと勉強が必要みたいです
ありがとうございました
213デフォルトの名無しさん:04/07/05 23:11
おい。ようかんマン。次のを解いてみろ

計算式を、逆ポーランド記法に変換するプログラム。

例1 5*(A+B)―((C+D)/E+(F−G))
   という式は
   AB+5*CD+E/FG−−
   になる
214デフォルトの名無しさん:04/07/05 23:13
訂正
誤   AB+5*CD+E/FG−−
正   AB+5*CD+E/FG−+−
>>207 負入力判定してません。
#include <iostream>

int fibo(int n){
if(n==1||n==2)return 1;
return fibo(n-1)+fibo(n-2);
}

int main(){
int n;
std::cout<<"n=";
std::cin>>n;
std::cout<<"fibo("<<n<<")="<<fibo(n)<<std::endl;
}
>>215
師匠、ありがとうございますであります!
>>193  何気にswitch使うのよさげ。俺は気に入った。
こんな風にしたらどうか?

int last_day(int *y, int *m){
  int day;
  switch(*m){
  case 4: case 6: case 9: case 11: day = 30; break;
  case 2:
    day = 28 + (*y % 400 == 0 || (*y % 4 == 0 && *y % 100 != 0))  ; break;
  default: day = 31;
  }
  return day;
}

void tomorrow(int *y,int *m, int *d){
  (*d)++;
  if(*d > last_day(y, m)){*d = 1; (*m)++;}
  if(*m > 12) {*m = 1; (*y)++;}
}

void yesterday(int *y,int *m,int *d){
  (*d)--;
  if(*d < 1){*d = last_day(y, m); (*m)--;}
  if(*m < 1) {*m = 12; (*y)--;}
}
218217:04/07/05 23:35
アンカーミスった。>>183 でした。
>>217
day使わないで値返しちゃえば?
>>213
演算子の種類は+−*/だけでいいの?
演算子の優先順位は?
A+B/C は AB+C/? それとも ABC/+?
221217:04/07/05 23:49
バグってた。
yeasterday は前の月で判定せんといかんかった。

void yesterday(int *y,int *m,int *d){
  (*d)--;
  if(*d < 1){
    (*m)--;
    if(*m < 1) {
      *m = 12; (*y)--;
    }
    *d = last_day(y, m);
  }
}
わ〜ん、おしえてくだされ〜〜
1.パラメータで2バイト(漢字を)の文字を画面に表示させる
2.2バイトの文字(漢字を)キーボードから入力し、その文字を画面に表示させる。

以上です、もし沸けありませんが尾根がします。
223222:04/07/05 23:51
パラメータに2バイトの文字を渡すに訂正です・。
もうしわけない
>220
もまえ、逆ポを理解汁!
225183:04/07/05 23:57
>>217,221
おお かなり参考になりました
ありがとうです

ところで
(*y % 400 == 0 || (*y % 4 == 0 && *y % 100 != 0))
の部分は
(*y % 4 == 0 && *y % 100 != 0)
だけだと駄目ですか?
ヌルポーランド記法のプログラムを教えてください。
227225:04/07/05 23:59
すいません、自己解決しました
>>225
それだと、4で割り切れるという判定の時点で、真が確定してしまうので、
例えば、西暦2100年も閏年になってしまう。
229225:04/07/06 00:05
>>228
ありがとです
わざわざすいませんでした(・ω・;)
230883 884:04/07/06 00:05
ファイル入出力とこの宿題が出たのでお願いします。
文字ファイルへの入力、出力 fgets,fputs
商品ファイル名をキーボードから受け取り、指定したファイル内容中
の大文字を小文字に変換し、商品コード、価格、商品名の順に並び替え、
指定したファイルに入出力するプログラムを作成せよ。

%cat gifts
JZK-30 Jizake_tsumeawase 4500
BSP-15 Body_soap_set 3000
Bt-200 Bath_towel_set 2500
TEA-20 Koutya_tsumeawase 5000
THY-55 Koutya_hachimitu_tsumeawase 3000
SPO-22 Tyoumiryo_variety_set 4000
%./kadai6-3
Input filename : gifts(これをキーボードから入力)
Output filename : gifts.upper(ここをキーボードから入力)
%cat gifts.upper
JZK-30 4500 JIZAKE_TSUMEAWASW
BSP-15 3000 BODY_SOAP_SET
Bt-200 2500 BATH_TOWEL_SET
TEA-20 5000 KOUTYA_TSUMEAWASE
THY-55 3000 KOUTYA_HACHIMITSU_TSUMEAWASE
SPO-22 4000 TYOMIRYO_VARIETY_SET
>./kadai6-3
>Input filename : gifts(これをキーボードから入力)
>Output filename : gifts.upper(ここをキーボードから入力)

ここが嫌(w

./kadai6-3 < gifts > gifts.upper

ってしたい
>>228
ちゃうよ
例えば、2100年は閏年にならないけど、2400年も閏年にならない(本来は閏年)
233デフォルトの名無しさん:04/07/06 00:13
簡易売上管理システムのプログラムです。仕様1〜3を満たさないといけないのですが
仕様3がどうしてもわかりません。どなたかご指導お願いします!
<仕様3>プログラムを起動すると次のようなメニューを表示し、機能するようにする。
1.ファイルから売上データを読み込む 2.新規にデータを作成(ファイルへの保存処理も含む)
3.全データの表示 4.終了
ポイント:メニュー1は仕様2で作成したファイルを読み込み、各フィールドのデータを仕様1で
用意した配列変数に読み込ませる。メニュー2はデータ入力終了文字列endが入力
された後、ファイル名の入力、保存するかの確認(y/n)の処理を行う。
fgetc関数を使用して、区切り文字まで1文字ずつ読み込みトークンの切り出しを行う。strtok関数を使う。
#include<stdio.h>

int main(void)
{
char date[50][10]={"10/10","1/1"};
char brandname[50][12]={"pen","eraser"};
int price[50]={100,200};
int number[50]={2,10,30};
int i,j;
FILE*fp;

for(i=0;i<50;i++){
printf("日付>"); scanf("%s",date[i]);
if(strcmp(date[i],"end")==0){ /* 仕様1:日付の入力でendと入力した場合、それまで
break;                    入力したデータを出力できること*/
}
printf("商品名>"); scanf("%s",brandname[i]);
printf("単価>"); scanf("%d",&price[i]);
printf("個数>"); scanf("%d",&number[i]);

つづきます…。
>>222-223
#include <stdio.h>
int main(){
char ch[2];
scanf("%c%c",&ch[0],&ch[1]);
printf("%c%c\n",ch[0],ch[1]);
}
とすることでch[0]とch[1]に2バイト文字が半分ずつ入る。
パラメータがよくわからんが、表示はできる。もうちょっと説明を詳しく汁!
ただ、想定外の入力などには対応してないのであしからず。
>>224
ABC/+ じゃなくて BC/A+ ということ?
236233続き:04/07/06 00:18
fp=fopen("uriage.txt","w"); /*仕様2:入力したデータをファイルに保存できるようにする。
for(j=0;j<i;j++){           データの書式は「,区切り」であること。*/
printf("%s %s %d %d\n",date[j],brandname[j],&price[j],&number[j]);
fprintf(fp,"%s,%s,%d,%d\n",date[j],brandname[j],&price[j],&number[j]);
}
fclose(fp);

return (0);
}
逆ポーランドも知らずによくコテハン名乗れるな〜
948 名前: ようかんマン ◆nup627Y0Gs 投稿日: 04/07/03 15:43

 .__
ヽ|・∀・|ノ ようかんマン#羊羹饅々で 誰でも 
 |__|  ようかんマン ◆nup627Y0Gs になれるよ
  | |

>>213
    .__   
    |・∀・| <    解きましたが、
    ト旦ノ.|      5*(A+B)-((C+D)/E+(F-G))
 調子`ゝゝ´調子   →5AB+*CD+E/FG-+-
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  になりませんか…? どっかミスしましたかね…?

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=143
>230 細かいところは自分で。
#include <stdio.h>
#include <stdlib.h>
char atoA(char ch){return ch+'A'-'a';}/*小文字大文字変換*/

int main(){
FILE *fp;
char code [100][30],name [100][30],price[100][30],buf[100];
int i,j,cnt,max;
char input[100]="gifts",output[100]="gifts.upper";/*この次にファイル名入力を書く*/
if((fp=fopen(input,"r"))==NULL){fprintf(stderr,"file open error\n");exit(1);}
for(cnt=0;fgets(buf,sizeof(buf),fp)!=NULL;cnt++){
for(i=0,j=0;buf[i]!=' ';i++,j++)code[cnt][j]=((buf[i]>='a'&&buf[i]<='z')?atoA(buf[i]):buf[i]);
for(;buf[i]==' ';i++);/*空白飛ばし*/
for(j=0;buf[i]!=' ';i++,j++)name[cnt][j]=((buf[i]>='a'&&buf[i]<='z')?atoA(buf[i]):buf[i]);
for(;buf[i]==' ';i++);/*空白飛ばし*/
for(j=0;buf[i]!=' '&&buf[i]!='\n';i++,j++)price[cnt][j]=((buf[i]>='a'&&buf[i]<='z')?atoA(buf[i]):buf[i]);
}
fclose(fp);
if((fp=fopen(output,"w"))==NULL){fprintf(stderr,"file open error\n");exit(1);}
max=cnt;
for(cnt=0;cnt<max;cnt++){
fputs(code[cnt],fp);
fputs(" ",fp);
fputs(price[cnt],fp);
fputs(" ",fp);
fputs(name[cnt],fp);
fputs("\n",fp);
}
fclose(fp);
}
241デフォルトの名無しさん:04/07/06 01:48
for文で求めた値全てに対応するnを配列で求めるにはどうすればよいのですか?

for()
{ここには入れ子のforで得たsの値を使ってnの値をまわしたい。
double n= s*p

for(int i = 0; i<nsteps; i++)
{
double dp = -a1*p*e1+d1*pe1+k2*pse2; // 式1
double dpe1 = -a1*p*e1-d1*pe1+k1*pe1; // 式2
p += p*dt;
t += dt;
}
}
242デフォルトの名無しさん:04/07/06 02:43
http://rivernet.cool.ne.jp/upmini/200407b/20040706024014_.jpg
という宿題を出されたのですが、どなたかこの宿題を片づけてやってください。
お願い致します…m(_ _)m
さいですか。
俺は数学ができんから、どうにもならんな。
245デフォルトの名無しさん:04/07/06 04:05
次のようなデータファイル(mark2.txt)を作成したとする。

1001 90 95 80 70 90
1002 60 45 55 100 30
1003 70 75 65 60 60
1004 75 80 90 75 90
1005 90 90 90 80 95
1008 80 70 70 90 70

各フィールドの意味は、それぞれ、学生番号(id)、科目A〜Eの素点である。
上のデータファイルから各個人の素点を読み込み、素点や平均点を整形して出力する
プログラムをC言語を用いて作成せよ。

初歩かも知れませんが、全然わかりません。どうかお願いします。
>>245
出力例書いてくれ
 |ようかん やう― 1 【羊▼羹】
 |〔「かん」は唐音〕餡(あん)を用いた、代表的な和菓子。
 |古くは蒸し羊羹であったが、
 |室町後期から寒天を用いる練り羊羹が作り出され、現在では後者が主。
 └―――y―――――――――――――――――――――――――――
   ___      ∧_∧
  l〜・Дl〜.   (´Д` )、
  |___|     /      ヽ
   ノ   >     ヽ_つ旦と_ノ
 l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
 |羊羹とは、本来「羊の羹 (あつもの)」、つまり羊肉入りのとろみのある汁物でした。
 |鎌倉〜室町時代、禅僧が点心 (食間に食べる小食) の一つとして中国から日本に伝えました。
 |しかし、禅僧は肉食を禁じられていたため、
 |日本では小豆や葛、小麦粉を用いた見立て料理に変化し、
 |そのうち現在でいう蒸羊羹に近いものになっていったと考えられています。
 |江戸時代になって寒天が発見されてから、現在一般的な煉羊羹が登場し、今に至っています。
 └v―――――――――――――――――――――――――――――
   ___      ∧_∧
  l〜・Дl〜    (´Д` )、
  |___|     /      ヽ
   ノ   >     ヽ_つ旦と_ノ
 l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
 . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>247-248
             |保管庫からコピペじゃん
             └―y――――――――――
   ___て      ∧_∧
  l〜・Дl〜    (´Д` )、
  |___|     /      ヽ
   ノ   >     ヽ_つ旦と_ノ
 l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
 . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
250245:04/07/06 04:31
>>246

1001 | 90 95 80 70 90 | 425 | 85.0 |
1002 | 60 45 55 100 30 | 290 | 58.0 |
1003 | 70 75 65 60 60 | 330 | 66.0 |
1004 | 75 80 90 75 90 | 410 | 82.0 |
1005 | 90 90 90 80 95 | 445 | 89.0 |
1008 | 80 70 70 90 70 | 380 | 76.0 |

AVRG | 77.5 75.8 75.0 79.2 72.5 | 380 |

このような感じの出力にしろとのことです。よろしくお願いします。
251245:04/07/06 04:33
ズレました。すみません。
#include <stdio.h>

int main()
{
 FILE *fp = fopen("mark2.txt", "r");
 if(!fp) return 0;
 int id, a,b,c,d,e;
 int suma = 0, sumb = 0, sumc = 0, sumd = 0, sume = 0;
 int count = 0;
 while(fscanf(fp, "%d %d %d %d %d %d", &id, &a, &b, &c, &d, &e) != EOF)
 {
  int sum = a + b + c + d + e;
  double avrg = (double)sum / 5.0f;
  printf("%5d|%3d %3d %3d %3d %3d|%3d %3.2f\n", id,a,b,c,d,e,sum,avrg);
  suma += a;
  sumb += b;
  sumc += c;
  sumd += d;
  sume += e;
  count++;
 }
 printf(" AVRG|%3.2f %3.2f %3.2f %3.2f %3.2f|%3.2f\n",
  (double)suma / count, (double)sumb / count, (double)sumc / count, (double)sumd / count, (double)sume / count,
  (double)(suma + sumb + sumc + sumd + sume) / count
  );
 fclose(fp);
 return 0;
}

こんなかんじかな?
インデントを全角スペースでやってるから、半角に置換しないとコンパイルはできない。
253245:04/07/06 05:33
ありがとうございます。全角のインデントを半角にしてコンパイルすればいいのですね。
まだ、プログラムのそれぞれの意味とかよくわかりませんがやってみます。
254222:04/07/06 05:53
ありがとうございました〜、パラメータについてはただパラメータで渡せとしかいわれなかったので説明がぜんぜん足りなかったですね・・・
orz
今日言って正解をたしかめてくるっす。
どもでした〜
おまいら答えるときくらいようかんマンのAA張れよ
256デフォルトの名無しさん:04/07/06 10:40
2個の整数を入力し、それらの公約数を表示させるプログラム。

c++でお願いします。
257256:04/07/06 10:49
入力したn個の実数の中から最大値と最小値を求め表示させるプログラム。
c++でお願いします。

入力したn個の実数の平均値と合計を求めるプログラム。
c++でお願いします。

どれも反復処理を使うみたいです

詳しい方お願いします。
char* ptr[] = {yamada yamazaki ,kokutou,koike,amano,kirisaki};
これを辞書順に並び替えたいんですがどうしたらいいでしょうか?
ヨウカンマンは死にました。
誰も答えてくれないので速やかにお帰りください
死んだのかよ(藁
ぼるじょあ!ぼるじょあはどこだ!
>>256
#include <iostream>
using namespace std;
//参照したページ http://www7.plala.or.jp/keny01/algorithm/algo02-04.html
int main()
{
 int m, n;
 cout << "数字ひとつめ> ";
 cin >> m;
 cout << "数字ふたつめ> ";
 cin >> n;

 while(n != m)
 {
  if(n > m) n -= m;
  else m -= n;
 }
 cout << "最大公約数は " << n << " だよ。";
 return 0;
}

インデントは全角スペースだから、半角に置換してコンパイル
262 ◆H6wikgcXIU :04/07/06 12:12
あれぅー
>>245
おーく!!

{
print $1, $2, $3, $4, $5, $6,
sum = $2 + $3 + $4 + $5 + $6, sum/5;
a = a + $2;
b = b + $3;
c = c + $4;
d = d + $5;
e = e + $6;
f = f + sum;
g = g + (sum/4);
} END {
print "AVR",
a/NR, b/NR, c/NR, d/NR, e/NR, f/NR, g/NR;
}
>>256
俺C++あまり知らないんだけどキリ番だからやってみたよ
#include <iostream>

class CGcd{
public:
CGcd(){m_=n_=1;}
CGcd(int m,int n){m_=m;n_=n;}
int getValue()const{return calc(m_,n_);}
int getValue(int m,int n)const{return calc(m,n);}
private:
int calc(int m,int n)const{return (n==0)?m:calc(n,m%n);}
int m_,n_;
};

int main()
{
int m,n;

std::cout << "2つの整数を入力 >";
std::cin >> m >> n;

std::cout << "最大公約数は" << CGcd().getValue(m,n) <<std::endl;

return 0;
}
>>256
「公約数」って事は最大だけじゃ駄目じゃないのか?
#include <iostream>
using namespace std;
int gcd(int a, int b)
{
if(b == 0) return a;
return gcd(b, a % b);
}
int main(void)
{
int n, m;
cout << "1つ目の数 >";
cin >> n;
cout << "2つ目の数 >";
cin >> m;

int g = gcd(n, m), i;
cout << "GCD(" << n << "," << m << ") = " << g << endl;
for(i = 1; i * i < g; i++) {
if(g % i == 0) cout << i << "," << (g / i) << ",";
}
if(i * i == g) cout << i;
cout << endl;
return 0;
}
266265:04/07/06 12:39
>>256-257
2問目。INT_MAXってどこで定義されてるんだっけ?
#include <iostream>
using namespace std;
int main(void)
{
int in, max, min;
max = -1;
min = INT_MAX;
while(cin >> in) {
if(in < -1) break; // 入力値が-1を下回ったら終了ということにした
if(max < in) max = in;
if(min > in) min = in;
}
cout << "Max = " << max << endl;
cout << "Min = " << min << endl;
return 0;
}
267266=265:04/07/06 12:42
実数だったので訂正版。
#include <iostream>
using namespace std;
int main(void)
{
double in, max, min;
max = -1.0;
min = 1.0e+8;
while(cin >> in) {
if(in < -1.0) break; // 入力値が-1を下回ったら終了ということにした
if(max < in) max = in;
if(min > in) min = in;
}
cout << "Max = " << max << endl;
cout << "Min = " << min << endl;
return 0;
}
268265:04/07/06 12:45
>>256
最後。
#include <iostream>
using namespace std;
int main(void)
{
double in, sum;
int count;
for(count = 0, sum = 0.0; cin >> in; count++) {
if(in < -1.0) break; // 2問目と同様。要らないなら消すだけ。
sum += in;
}
cout << "Sum = " << sum << endl;
cout << "Avg = " << (sum / count) << endl;
return 0;
}
>>257
1/2

#include <iostream>
#include <vector>

class CLolita{
public:
void add(double x){v.push_back(x);}
double min(){
double min=*v.begin();
for(std::vector<double>::iterator it=v.begin();it!=v.end();it++)if(min>*it)min=*it;
return min;
}
double max(){
double max=*v.begin();
for(std::vector<double>::iterator it=v.begin();it!=v.end();it++)if(max<*it)max=*it;
return max;
}
double sum(){
double sum=0.0;
for(std::vector<double>::iterator it=v.begin();it!=v.end();it++)sum+=*it;
return sum;
}
double average(){return sum()/v.size();}
private:
std::vector<double> v;
};
2/2

int main()
{
CLolita loli;
double d;

std::cout << "実数値を入力(終了はCtrl+D)" << std::endl;
while(std::cin >> d){
loli.add(d);
}

std::cout << "最小値" << loli.min() << std::endl;
std::cout << "最大値" << loli.max() << std::endl;
std::cout << "合計" << loli.sum() << std::endl;
std::cout << "平均" << loli.average() << std::endl;

return 0;
}
271デフォルトの名無しさん:04/07/06 12:57
>>258
#include "stdafx.h"
#include "string.h"

int main(void)
{
char* ptr[] = {"yamada","yamazaki","kokutou","koike","amano","kirisaki"};
int index[6];
int i, j, tmp;

for(i=0; i<6; i++) index[i] = i;

for(i=0; i<5; i++){
for(j=i+1; j<6; j++){
if (strcmp(ptr[index[i]], ptr[index[j]]) > 0)
index[i] ^= index[j] ^= index[i] ^= index[j];
;
}
}

for(i=0 ;i<6; i++)
printf("%s ",ptr[index[i]]);

return 0;
}
>>257
ヽ|・∀・|ノ <あまり解いていないようかんマンから一言。
 |__|    C++での最大値最小値なら↓のようなの知っていてもいいかも。
  | |

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
 vector<double> data;
 double r;
 cout<<"数値を入力してください。数値以外を一文字適当に入力すると終了"<<endl;
 while(cin>>r)data.push_back(r);
 cout<<"最大値:"<<*max_element(data.begin(),data.end())<<"\n";
 cout<<"最小値:"<<*min_element(data.begin(),data.end())<<"\n";
 return 0;
}
>>263
a・w・k
ようかんまんのアルゴリズム体操キター
>271
thx
277242:04/07/06 13:30
一応、二分法と、NR法の基本的なサンプルプログラムはあるのですが、これらの資料を用いても難しいでしょうか?
はさみうち法は二分法の応用です。こちらはサンプルプログラムはないです。
http://rivernet.cool.ne.jp/upmini/200407b/20040706132616_.jpg
http://rivernet.cool.ne.jp/upmini/200407b/20040706132641_.jpg
http://rivernet.cool.ne.jp/upmini/200407b/20040706132656_.jpg
http://rivernet.cool.ne.jp/upmini/200407b/20040706132711_.jpg
278デフォルトの名無しさん:04/07/06 13:32
このプログラムの間違いを直してください。お願いします。
# include <stdio.h>
# define N 10
void input();
void output();
int a[N];

/*メイン関数*/
main()
{
input();
output();
printf("終了\n");
return(0);
}

/*ファイルからの入力*/
void input()
{
FILE *fp;
int i;
fp=fopen("in.txt","r");
for(i=0;i<N;i++){
fscanf(fp,"%d",&a[i]);
}
fclose(fp);
}

279デフォルトの名無しさん:04/07/06 13:35
/*ファイルの出力*/
void output()
{
FILE *fp;
int i;
fp=fopen("out.txt","w");

for(i=0;i<N;i++){
#include <stdio.h>
int BubSort(int x[], int n);
void ShowData(int x[],int n);

#define NUM_DATA 100
int x[]={in.txt};
/*バブルソートを行う*/
int BubSort(int x[], int n);
{
int n,i,j,temp,x[],[];
for(i=0;i<n-1;i++){
for(j=n-1;j>i;j--){
if(x[j-1]>x[j]){/*前の要素の方が大きかったら*/
temp=x[j];
x[j]=x[j-1];
x[j-1]=temp;
}
}
{
280デフォルトの名無しさん:04/07/06 13:36
/*ソート前のデータを表示*/
printf("ソート前:\n");
ShowData(x,NUM_DATA);
printf("\n\n");

BubSort(x, NUM_DATA);

/*ソート後のデータを表示*/
printf("\n\nソート後:\n");
ShowData(x, NUM_DATA);
}
fprintf(fp,"%6d\n",a[i]);
}
fclose(fp);
}
なんか途中から別のプログラムコピペしてないか
282デフォルトの名無しさん:04/07/06 13:46
>>242
>これらの資料を用いても難しいでしょうか?
そこまで言うなら自分一人で書けよ・・・。
>>277 (=242)
自分で答えメモってるじゃないか…
fとfxっていう関数を問題の
f(x)=x*x-cos(x+1)-10
とそのxについての微分
df(x)/dx=2*x+sin(x+1)
に書き換えるだけだと思うけど
>>278
とりあえずバブルソートはお家に返してあげようね
285201:04/07/06 15:10
誰か! 誰か助けてください!
>>285
配列の型は?
287201:04/07/06 15:48
>>286
double[10]
289507:04/07/06 16:06
>522
ありがとうございます♪
下記ソースです。
本来はタイムアウト処理等はいっていますが
下記で現象が発生しています。
Sub deletefile()
With FrmWpmSignImage
'FTP設定
.Inet1.Protocol = icFTP
.Inet1.UserName = comm_item1.ftp_up_user
.Inet1.Password = comm_item1.ftp_up_password
.Inet1.RemoteHost = comm_item1.ftp_up_hostname
executeInet "DELETE " & comm_item1.ftp_up_img_backcntdir & _
comm_item1.ftp_up_img_backcntfile
.Inet1.Cancel
End With
End Sub
'******************************
Public Sub executeInet(strCommand As String)
Dim time2 As String
Dim lRetry
With FrmWpmSignImage
'コマンド実行
.Inet1.Execute , strCommand
Do While .Inet1.StillExecuting
DoEvents
Exit Do
Loop
End With
End Sub
ゴバーク?
291201:04/07/06 16:15
>288
ありがとうございます!
>>289
VBプログラマ質問スレ(6.0以前) Part35
http://pc5.2ch.net/test/read.cgi/tech/1087519251/
293271:04/07/06 16:51
そういえば、
char* ptr[] = {"yamada","yamazaki","kokutou","koike","amano","kirisaki"};
この時、ptrの要素数ってどうやって調べるの?
sizeof(ptr) / sizeof(char*)
ただの配列っしょ
sizeof( ptr ) / sizeof( ptr[ 0 ] )
296デフォルトの名無しさん:04/07/06 16:57
この空白のあけかたは・・・・奴を釣るつもりだな。
297271:04/07/06 16:57
なるほど〜
298デフォルトの名無しさん:04/07/06 17:43
1,2,3
4,56
7
8,9,10
テキストデータの上の様な数字をを配列
x[0][0] x[0][1] x[0][3]
x[1][0] x[1][1]
x[2][0]
x[2][0] x[2][1] x[2][2]
といった感じに保存していくにはどうしたら
いいんでしょうか・・・?
もしポインタを使ってデータを保存出来るようでしたらそちらも教えてください。
お願いします。
// (Ex.)
int x[][] = {
{1, 2, 3},
{4, 56},
{7},
{8, 9, 10}
};
>298
#include <stdio.h>
#include <string.h>

main(int argc,char **argv)
{
FILE *fp;
char buf[256],*result;
int x[10][10],row,element;
if(argc != 2 )
return;
fp = fopen(argv[1],"r");
row=0;
while(fgets(buf,sizeof(buf),fp) != NULL){
element=0;
result = strtok(buf,",");
while(result != NULL){
x[row][element++] = atoi(result);
result = strtok(NULL,",");
}
row++;
}
fclose(fp);
}

301問い:04/07/06 19:54
2つのファイルの内容を連結する
ファイル「a.dat」を読み取りモードで開く
ファイル「b.dat」を追加モードで開く
ファイル「a.dat」から1行入力(1行は最大60文字)
ファイル「b.dat」に出力
データがなくなるまで繰り返す
ファイル「a.dat」を閉じる
ファイル「b.dat」を閉じる
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 0
0 1 2 3 4 5 6 7 0 1
0 1 2 3 4 5 6 0 1 2
0 1 2 3 4 5 0 1 2 3
0 1 2 3 4 0 1 2 3 4
0 1 2 3 0 1 2 3 0 1
0 1 2 0 1 2 0 1 2 0
0 1 0 1 0 1 0 1 0 1

をprintf文による直書きなしに出力するプログラムを作るのですが、分かりません。
何方か教えてください。

303302:04/07/06 20:23
ある程度まで考えたのですが下記より進めません。

#include <stdio.h>

int main(void)
{
int a[10];
int i,j;

for(i=0; i<10; i++)
a[i] = i;

for(j=0; j<10; j++)
{
for(i=0; i<10; i++)
printf("%d ", a[i]);

printf("\n");
}

return 0;
}
>>301
cat a.dat >> b.dat
>>302
 .__
ヽ|・∀・|ノ
 |__|
  | |

#include <stdio.h>
int main(void)
{
int i, j;
int (i = 10; i > 0; --i) {
for (j = 0; j <10; ++j) printf("%d ", j % i);
}
return 0;
}
〜|・∀・|〜 訂正

>int (i = 10; i > 0; --i) {
じゃなくて
for (i = 10; i > 1; --i) {
〜|・∀・|〜 訂正ふたたび おちつけオレ

#include <stdio.h>
int main(void)
{
int i, j;
for (i = 10; i > 1; --i) {
for (j = 0; j <10; ++j) printf("%d ", j % i);
printf("\n");
}
return 0;
}
>>305
出力できました。有難う御座います。
ぜんぜん違うことをしていました。
すいません、もし時間がありましたら何故 j%i であのように出力されるのか教えてもらえますか。
>>309
%は余り演算子
何故っていっても見たまんまやんかw
mod の計算
>>309=>302-303 %を使わない場合
#include <stdio.h>
#include <stdlib.h>

int main(){
int i,j,k;
for(j=9;j>=1;j--){
for(k=0;k<=10;){
for(i=0;i<=j&&k<=10;i++,k++){
printf("%d ",i);
}
}
printf("\n");
}
}
313302:04/07/06 21:05
一行一列目はi=10,j=0で分かるのですが(0÷10=0)
一行二列目はi=10,j=1でなぜ1と出力されるのか(1÷10=0.1?)

もしかしたら勘違いしているのでしょうか?

>>312
ちょっとやってみます
>>301
int
main()
{
    string sLine;
    ifstream ifs( "a.dat", ios::in );
    ofstream ofs( "b.dat", ios::app );

    while( getline( ifs, sLine ) )
        ofs << sLine << endl;

    ifs.close();
    ofs.close();

    return 0;
}
>>313
剰余!
=あまり
10/1は0あまり1←これ
まちげーた
1/10 ...orz
>>315
馬鹿でした。310にも書いてましたね。

本当に有難う御座います。
アルェー314を実行するとエラーになる象
319デフォルトの名無しさん:04/07/06 22:44
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define size 30
int reverse(char*, char*);
void main(){
int length,mmm;
char c[size+1];
char rc[size+1];
printf("文字列を入力(%d以下):",size);
scanf("%s",c);
printf("\n\n元の文字列は:%s \n\n",c);
length = reverse(c,rc);
printf("入れ替えた文字列は:%s (長さ%d)\n",rc, length);
printf("何か入力すると終了します。\n");
scanf("%s",&mmm);}
int reverse(char* c, char* rc){
int i, len;
len = strlen(c);
if(len>size){
printf("%d以下で入力してください!\n\n",size);
exit(-1);}
for(i=0; i<len; i++){
*(rc+i) = *(c+len-i-1);
*(rc+len) ='\0';}
return(len);}
320319:04/07/06 22:44
データ入力とかの演習なんですけど・・・
1:文字列を入れ替えて、指定された配列に保存する関数プログラム
2:ファイルから文字列の読み込みを行う関数プログラム
3:反転した文字列をファイル出力するプログラム
4:データを読み込んで出力する基本プログラム

の4つで構成されるようにするらしいんですが・・・
もう、サッパリ分かりません。何も・・・
簡素なもので構わないので、お願いします。
ホントお願いします・・・(゚Д゚;)モウ・・・シニソウ
321デフォルトの名無しさん:04/07/06 22:59
>319
問題がよくわからないが、とりあえず4に該当する分だけをどうぞ
コンパイルはしてないですが

#include <stdio.h>
int main( int argc, const char* argv[] )
{
if( argc < 3 ){
printf("( ̄− ̄)\n");
return 8;
}

//終端はNULLでお願いします。
char** in_strings = load_str( argv[1] ) ;
char** replace_strings = replace_str( in_strings ) ;
save_reverse_str( argv[2], replace_strings ) ;

return 0 ;
}

あとは任せた
322デフォルトの名無しさん:04/07/06 23:05
ああ。分かりにくかったですね。
要は最初のプログラム=文字の並び替え関数
をもとにして、4つに分割するらしいです。
データの読み込みとかの演習の為に・・・。

お願いします。
323デフォルトの名無しさん:04/07/06 23:34
下記の実行結果になるプログラムを作成してください。
-9999を読み込むまで次々と整数値を読み込んでいき、合計値および
平均値を表示するプログラム。なお、最後に読み込んだ
-9999は合計には加えない。注)do while文を使用すること。
変数は下記を使用すること。
int i; int n; int sum;
<実行結果>
どんどん整数を入力してください。(ただし、-9999で終わります)
1個目:15
2個目:65
3個目:84
4個目:96
5個目:23
6個目:45
7個目:85
8個目:-9
9個目:57
10個目:-9999

合計:461
平均:51.22
int i; int n; int sum;
i=sum=n=0;
do{
++i;
sum+=n;
if(scanf("%d",&n)!=1) break;
}while(n!=-9999);
printf("合計:%d\n", sum);
if(i>1) printf("平均:%.2f\n",((double)sum)/(i-1));
>>323
int i;
int n = 0;
int sum = 0;

do{
scanf("%d",&i);
n++;
sum += i;
}while(i != -9999);
n--;
sum += 9999;

if(n) printf("合計=%d 平均値=%f",sum, (double)sum/n);
>>323
#include <stdio.h>
int main(void) {
int i = 0; int n; int sum = 0;
printf("どんどん整数を入力してください。(ただし、-9999で終わります)\n");
do {
i++;
printf("%d個目:", i);
if (scanf("%d", &n) != 1) { printf("( ̄ー ̄)ニヤリ\n"; return 1; }
if (n != -9999) sum += n;
} while (n != -9999);
printf("\n合計:%d\n平均:%f\n", sum, (double)sum / i);
return 0;
}
327デフォルトの名無しさん:04/07/07 00:08
大文字、小文字が乱雑に使用された英文を入力とし、正しい清書出力を得る
フィルタを作成せよ。条件は以下
1.基本的に英文の先頭は大文字、先頭以外は小文字とする
2.記号"." "!" "?" をもって文末とする
3.文中の単語Iは大文字とする

助けて下さい!
328257:04/07/07 00:09
みなさんありがとうございました!
明日、学校でコンパイルしてみます。
>>327
助けません。

ガイシュツですからっ
ざ ん ね ん っ ! !

二回目ぎりっ!
>>329
ああ、既出だったのか。
危うく解きそうになったよ…。
>>327
int main(void)
{
char ss[1000];
char a[1000];
int i, flag = 1, sp = 1;
gets(ss);
for(i=0; ss[i]!='\0'; i++){
if(ss[i]==' '){
a[i] = ss[i]; sp = 1;
}else if(ss[i]=='i' && ss[i+1]==' ' && sp){
a[i] = 'I'; flag = 0;
}else if(ss[i]=='.' || ss[i]=='!' || ss[i]=='?'){
a[i] = ss[i]; flag = 1; sp = 1;
}else if(flag){
a[i] = toupper(ss[i]); flag = 0; sp = 0;
}else{
a[i] = tolower(ss[i]); sp = 0;
}
}
a[i] = '\0';
printf("%s",a);
return 0;
}
〜|・∀・|〜  しゅうせー
int main(void)
{
char ss[1000];
char a[1000];
int i, flag = 1, sp = 1;
gets(ss);
for(i=0; ss[i]!='\0'; i++){
if(ss[i]==' '){
a[i] = ss[i]; sp = 1;
}else if((ss[i]=='I' || ss[i]=='i') && ss[i+1]==' ' && sp){
a[i] = 'I'; flag = 0;
}else if(ss[i]=='.' || ss[i]=='!' || ss[i]=='?'){
a[i] = ss[i]; flag = 1; sp = 1;
}else if(flag){
a[i] = toupper(ss[i]); flag = 0; sp = 0;
}else{
a[i] = tolower(ss[i]); sp = 0;
}
}
a[i] = '\0';
printf("%s",a);
return 0;
}
333デフォルトの名無しさん:04/07/07 01:13
Cには、ペアルなどにあるsplitコマンドのようなものは無いのでしょうか?

以下のことを実現させたいです。
カンマで区切られた文字列 "103,yamada taro,0901234567,[email protected]"
を、カンマで区切って構造体の各要素 int num, char name, int callnum, char mail
に振り分けたいのです。お長居します。

構造体 human なら。
human->num を参照すると 103 と出力されるようにしたいです。
334デフォルトの名無しさん:04/07/07 01:16
よ、ようかんまんあるがとう!
選挙はようかんまんにいれるからね
335デフォルトの名無しさん:04/07/07 01:21
この問題をお願いします。

分割数1、分点数3のガウスの積分公式で有効数字8桁までの定積分を
求めるプログラムをつくり、以下の定積分をそのプログラムを用いて求め、
真値と比較せよ。
(1) ∫[0,1] xdx = 0.5
(2) ∫[-1,1] x^2dx = 0.66666....
(3) ∫[0,1] x^3dx = 0.25
(4) ∫[0,1] { 1/(1+x) }dx = 0.693147...... = log2
(5) ∫[1,2] 1/x^2dx = 0.5
ようかんマンのトリップマダー
>>336
ようかんマン#羊羹饅々
誘導されたのでコッチに書き込み。
課題作成で作ってる自作プログラムで問題が起きたので質問です・・・。
拡張機能を入れたメモ帖を作成しているのですが、そこでかなーり困ってます。
具体的な処理として行いたいのが

スレッド特異的ホットキーを使いホットキー登録。
WM_HOTKEYが実行されたら以下の動作を実行

1.現在アクティブになっているウィンドウのハンドルを取得(これはGetActiveWindowを使う事で解決しています)
2.取られてきたハンドルを元に範囲指定してる文字列をクリップボードにコピー
3.クリップボードに保存されている文字列をメモ帖に張り付け(ここは自分のメモ帖のEDITコントロールにSendMessageでWM_PASTEを実行する事で出来ている)

2番目の処理がどうもうまく行きません・・と、言うよりもどの関数を利用するのか手持ちの資料じゃさっぱり・・・(TT
今の方式でもしハンドルを元に文字列を取ろうとすると、アプリケーションの種類で上手くいかない可能性もありますし。
例としてやってみたいアプリケーションでの処理を上げておきます

・IEで範囲指定した文字列を自作メモ帖で指定したホットキーを押した時にメモ帖に張り付け
・MSワードで範囲指定した文字列を自作メモ帖で(以下略

簡潔に言うと、外部アプリケーションで範囲指定した文字列をクリップボードに貼り付けて自分のメモ帖プログラムに貼り付けたいのです。
課題提出期限が明後日・・・誰か力貸して下さい_| ̄|○
作成環境はWinXP/2000、VC++6.0です
339デフォルトの名無しさん:04/07/07 01:38
これおねがいします

要素数が10個の配列を、任意のデータで初期化し、大きい順に
並び替えるプログラムをつくりなさい。
出力は、初期化したデータを出力した後、並び替えたデータを出力するようにしなさい。
340デフォルトの名無しさん:04/07/07 01:42
> 要素数が10個の配列を、任意のデータで初期化し、大きい順に並び替える
任意のデータの大小関係はどうするの?
>>333
strtok()
342デフォルトの名無しさん:04/07/07 01:46
あとすいませんがこれもおねがいします

成績表が設定されている以下のような2次元配列があります。各人の合
計と平均点、および各科目毎の合計と平均をもとめなさい。(平均は小数
点1桁まで出力しなさい、)
出力は設定されているデータと合計、平均点を表形式で出力しなさい。

生徒No 英語 数学 国語 理科 社会
1     25  50 73 80 52
2 42 62 95 70 43
3 52 39 42 52 65
4 77 58 73 82 80
343342:04/07/07 01:48
ごめんなさい表ズレまくってます
>>340
どうゆうことですか?
>>342
このスレを平均点で検索しろって
整数や小数の大小なら自明だけどって言いたいんじゃなかと?
347242:04/07/07 02:17
どなたかヘルプです。。数学さっぱりで…。
348242:04/07/07 02:47
特に(iv)です
>>242
まず(1) か (2) な。解を全て求めよとあるからコメントアウトも実行ね。
二分法とはさみうち法の違いがぐぐっても分からぬ。
そ も そ も ち が う の か ?
#include<stdio.h>
#include<math.h>
double f(double x){
return(x*x-cos(x+1.0)-10);
}
int main(void){
double a,b,ave,fval;
a=2;
b=4;
//a=-2;
//b=-4;
while(1){
ave=0.5*(a+b);
fval=f(ave);
printf("f( %15.12f ) = %15.12f a: %15.12f , b: %15.12f\n",ave,fval,a,b);
if(fabs(fval)<0.00000000001)break;
if(fval*f(a)>0.0){
a=ave;
}
else{
b=ave;
}
}
return(0);
}
350349:04/07/07 03:11
つぎ(3)
授業の NR 法がこのニュートンラプソン法であるという前提のもと、
ttp://optlab2.bk.tsukuba.ac.jp/jp/people/yatagai/Lectures/jouhou/Chap5.htm
これもコメントアウト両方実行な。

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

double f(double x){
return(x*x-cos(x+1.0)-10);
}

int main(void){
double a0,a1,a2,fval,fdash;

a0=0;
a1=2;
//a1=-2;
while(1){
fdash=( f(a1) - f(a0) ) / (a1 - a0);
a2=a1 - f(a1) / fdash;
fval=f(a2);
printf("f( %15.12f ) = %15.12f\n",a2,fval);
if(fabs(fval)<0.00000000001)break;
a0=a1;
a1=a2;
}
return(0);
}
351349:04/07/07 03:23
で、最後に(4)か、
すでにニュートンラプソン法を使っているのにニュートン法を使うのも
かなり微妙な感じがするが、(1),(2),(3) では使っていない方法だよな。
大体、関数 f が既知で導関数が計算できるんだから、
ニュートンラプソン法でなくニュートン法を使うに限るでしょと。

(1) と (2) の違いは分からなくて区別してないけど、
(1) と (3) と (4) の収束の早さについて論じればいいんじゃん。
実行してみれば分かるよ。

言いあきたけど解を全て求めよだからコメントアウト部も実行ね。
で入らなくなったからソースは次
352349:04/07/07 03:23
#include<stdio.h>
#include<math.h>

double f(double x){
return(x*x-cos(x+1.0)-10);
}

double fdash(double x){
return(2*x+sin(x+1.0));
}

int main(void){
double a0,a1,a2,fval;

a0=0;
//a1=2;
a1=-2;
while(1){
a2=a1 - f(a1) / fdash(a1);
fval=f(a2);
printf("f( %15.12f ) = %15.12f\n",a2,fval);
if(fabs(fval)<0.00000000001)break;
a0=a1;
a1=a2;
}
return(0);
}
353349:04/07/07 03:44
よく調べると区別してあった
はさみうち法
#include<stdio.h>
#include<math.h>

double f(double x){
return(x*x-cos(x+1.0)-10);
}

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

//a=4;
//b=2;
a=-4;
b=-2;
while(1){
c=(f(a)*b-f(b)*a) / (f(a)-f(b));
printf("f( %15.12f ) = %15.12f\n",c,f(c));
if(fabs(f(c))<0.00000000001)break;
if(f(c)*f(a)>0){
a=c;
}
else{
b=c;
}
}
return(0);
}
354242:04/07/07 05:01
ありがとうございます

2分法のa0, b0の中点であるc1の取り方が
c1=(a0+b0)/2
であるのに対し、
はさみうち法の中点の取り方が
c1={b0f(a0)-a0f(b0)}/{f(a0)-f(b0)}
になるんですね。
アルゴリズムは基本的に同じで、
中点の取り方がやや異なるだけで、これによりcnの収束がやや速くなるんですね。

NR法に関してエラーが出るのですが、なぜかわからないです
--
NR法-2 error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
NR法-2 fatal error LNK1120: 外部参照 1 が未解決です。
--

NR法、ニュートン法はどのような原理なのか、ちょっと難しいです。

おかげさまでとりあえず今、参考にしてはさみうち法に関しては自分でソースを書くことができましたm(_ _)m
期限までに間に合いそうです。
355349:04/07/07 06:10
sage はしたほうがいいよ。
二分法:中点をとる。
はさみうち法:二点間に直線を引き、y = 0 との交点をとる。
NR法:現在の X 座標から導関数を推定し、接線を引き、y = 0 との交点を取る。
ニュートン法:導関数既知の場合に、現在の X 座標から、接線を引き、y = 0 との交点を取る。
(´-`).。oO(ニュートン法、πの計算するときに大活躍したっけ……)
>>338
EM_GETSELをSendMessageしてできない?

SendMessage(hWndEdit,EM_GETSEL,(WPARAM)&dwStart,(LPARAM)&dwEnd);

↓詳細
http://yokohama.cool.ne.jp/chokuto/urawaza/message/EM_GETSEL.html
横レスになりますが・・・
>>358
Editコントロールではそれでいけそう。
それ以外でうまくいくかどうかが問題になりそうですね。

>>338
keybd_event()で[CTRL]+[C]をエミュレートするってのも思いつくが、
対象アプリが[CTRL]+[C]での「コピー」を受け付けることが前提となるなぁ。
(´-`).。oO(πの計算なんて二分法でいいよ……)
(´-`).。oO(およそ3)
たすけてようかんまん・・・

以下課題
1.漢字4文字をコマンドライン引数(mainの引数)を使い、画面に出力する
また、その処理を関数(自分で作成した)でおこなう。
2.漢字4文字を入力→出力した場合、その処理を各関数(自分で作成した)
で分けて行う。

2のソースは
#include <stdio.h>

int main()
{

char ch[8+1];

printf("名前を入れてください\n");
scanf("%s",&ch);
printf("私の名前は %s です。\n",ch);

return 0;

}
としたんですが、こいつを@文字入力、A文字出力と使用と思ったんですが、
うまくできません。
まじで、たすけて〜〜〜
>>362
たすけてください、何かいてあるのかわかりません
(´-`).。oO(漢字4文字……)
>>362
|・∀・|ノ はじめてのようかんまん

#include <stdio.h>
void input(char* buf)
{
printf("名前を入れてください\n");
scanf("%s",buf);
}
void output(char* buf)
{
printf("私の名前は %s です。\n",buf);
}
// 1のメイン関数
int main(int argc,char* argv[])
{
output(argv[1]);
return 0;
}
// 2のメイン関数
/*
int main()
{
char buf[8+1];

input(buf);
output(buf);
return 0;
}
*/
366365:04/07/07 11:14
|・∀・|ノ !
うお〜〜〜ありがとうございました。
さすがようかんまん!
367362:04/07/07 11:15
うお・・・・なまえが365としてしまった・・・orz
ごめん、ようかんまん。
(・∀・)ジサクジエーン!!
369362:04/07/07 11:25
ごめん、まちがえてようかんまんのいれてしまつた・・・・
反省です。_| ̄|○
ゆるしてくだされ・・・
誘導されたのでこちらに書き込み。
おわかりの方がおられましたらお答えください。

32ビットで表現可能な整数を集めた表を扱うC言語プログラムを考え、表に対しては、探索と挿入の二つの操作を行うものとする。
表を実現するために、配列を用いる方法と線形(一方向)リストを用いる方法を考える。

(1)表に含まれる整数の並べ方については特に制限をおかないものとし、挿入の操作を行う関数insert()の原型(プロトタイプ)宣言と仕様を下記のものとする。
関数insert()のプログラムを、配列と線形リストを用いる場合についてそれぞれC言語で作成しなさい。
その際、関数の外部で必要となる宣言や定義があればそれも記述しなさい。

int insert(long int NewDatum);
/* 入力:表に挿入する整数 */
/* 出力:挿入に成功したときは0、失敗したときは1 */

(2)表はすでに昇順でソートされているとする。配列を用いる方法について、効率よく探索を行うアルゴリズムを与えなさい。
またそのアルゴリズムの最大時間計算量について説明しなさい。

(3)表を実現するデータ構造として、上述の二つのもの以外にどのようなものがあるかひとつあげなさい。
また、それを用いて、上記のような整数の表に対する挿入のアルゴリズムを与えなさい(なお、表に含まれる整数の重複は許さないと仮定してもよい)。

ようかんマンさん方、どうかよろしくお願いします。
>>370

(1)の配列バージョン

#define TABLE_SIZE 1000
staitc long int table[TABLE_SIZE];
static int dataNum = 0;

int insert(long int data)
{
if(dataNum >= TABLE_SIZE) return 1;
table[dataNum++] = data;
return 0;
}
>>370
(2)のリストバージョン

#include <stdlib.h>

struct item {
struct item *next;
long int val;
};

static struct item* list = 0;

int insert(long int data)
{
struct item *i = (struct item *)malloc(sizeof struct item);
if(i == 0) return 1;
i->val = data;
i->next = list;
list = i;
return 0;
}

コンパイルも動作確認もやってないので、そのあたりは自分でやってください。
間違えた。>>372は(1)のリストバージョンだった。
(2)
「二分探索」でぐぐる
最大時間計算量は確かO(log2N)

(3)
ハッシュ法でぐぐる
http://tortoise1.math.ryukoku.ac.jp/~takataka/cpro/doc/hash.html
375370:04/07/07 13:35
>>371-374
どうもありがとうございます。これからコンパイルして動作確認してみます。
(2)(3)については見当もつかなかったので大分助かりました。
また質問する時があればよろしくお願いします。


376319:04/07/07 14:25
誰か・・319を・・・
面倒ですが319をお願いします。。。
>>376
"文字列を入れ替えて"とか不明瞭なことが多すぎて誰もできないんだよ


>>376
ファイルから文字列を入力って一個だけ?
379デフォルトの名無しさん:04/07/07 14:36
>>376
分割するってのは、関数に分けるの? プログラムに分けるの?
プログラムに分けるとしたら、データはファイルで受け渡せばいいの?
>>376
・仕様がわからんので適当。
・インデントは全角スペースになってる
・コンパイルしてない
#include <stdio.h>
#include <string.h>

// 1.引数の順序逆かな?
void reverse(char* dst,const char* src)
{
int l=strlen(src);
for(int i=0;i<l+1;i++)dst[i]=src[l-i];
}
// 2
char* get(char* buf,int maxlen,FILE* fp){return fgets(buf,maxlen,fp);}
// 3
char* put(const char* buf,FILE* fp){fputs(buf,fp);}
// 4
#define MAX_LEN 1024
int main()
{
 FILE* in=fopen("in.txt","r");
 FILE* out=fopen("out.txt","w");
 char c[MAX_LEN];
 char rc[MAX_LEN];

 while(NULL!=get(c,in)){
  reverse(rc,c);
  put(c,out);
 }
 return 0;
}
381デフォルトの名無しさん:04/07/07 14:45
クイックソートを作っています。順序の変更は上手くいっているのですが、
格納される場所が1つずれてしまいます。(a[0]~a[6]の数値のクイックソート
すると、a[1]~a[7]に結果が格納される状態です。)

ソースが長いのでうpしました。添削していただける方がいたら、よろしくお願いします。
実行結果もうpしました。

ソースのアドレス
ttp://www.geocities.jp/sisyou_talbo/quick.c
実行結果のアドレス
ttp://www.geocities.jp/sisyou_talbo/result.txt
よろしくお願いします。
382デフォルトの名無しさん:04/07/07 14:49
>>381
|・∀・|ノ ようかんまん
x qs(0,n);
o qs(0,n-1);

qsort(from,to)なんだからtoに要素数を渡しちゃダメ、ぜったい!
384319:04/07/07 15:06
あのプログラムを使って4つに分割するんです。
↓こういう感じ・・・らしいです。

1:元の文字列と反転結果の文字列を格納する配列( rc[size+1] )のポインタ” を引数にとり、
 文字列を入れ替えて、指定された配列に保存する関数を記述した reverse.cpp を作る。
2:ファイルから文字列の読み込みを行う関数を記述した input_file.cpp を作る。
3:反転結果の文字列をファイルへ出力を行う output_file.cpp を作る。
4:文字列はファイルから読み込み、結果はファイルに出力すること
>>384
疑問
・ほんとにC++なのか
・どうしてC++なのか
・その先生はC++が使えるのか
・ファイルには文字列がひとつだけなのか複数あるのか
・複数だった場合2次元配列を使うのかループするのか
プログラムを使って4つに分割ってのはどういうこと?
ソースファイルを4つに分けろってことでいいのか?
>>319
おまえの想像する”〜するらしい”とかいらない。
問題を全部のせろ。
判断はそれからする。
388319:04/07/07 15:48
C++の演習ですし・・・データ入出力の課題ですから・・・。
どうしてって言われても・・・
あのプログラムを4つに分割するんですが・・・。
完成例をうpしますので勘弁して下さい。
初心者のため詳しいことマッタク分かりません。
ttp://read.kir.jp/file/read0211.exe
新手のブラクラキタ━━━━━━(゜∀゜)━━━━━━ !!!!!
いやいやいやいや、、、exeって…
lzhかzipにできないか
よーしパパ実行しちゃうぞー
とか思ったのだが反転処理だけで161KBってなんでつか。
>>391
きっとテンプレート使いまくりなんだよ
大丈夫、パパ実行して!
393319:04/07/07 15:59
ええ・・・いやブラクラじゃないですけど・・・
プログラムexeです。exeでしかサンプルプログラム
配布されてないので・・・見て分かるならどなたかお願いします。。。
ヤラレタ!クソガーーーー
>>319
自分で実行して入力ファイルと出力ファイルをここに貼ればいいと思うのは俺だけか
396デフォルトの名無しさん:04/07/07 16:05
名前   頭文字   地域(大)   地域(中)   地域(小)
西村   に   九州
北村   き   北関東
鈴木   す   関東   東京   多摩地区
中西   な   関西
田中   た   北海道
北島   き   東北
永田   な   中国
板垣   い   四国
中田   な   関東
高遠   た   その他
(ここまでが第1グループ)
高木   た   関東   東京   23区
西村   に   関東   東京   23区
ワインバーグ   わ   外国
・・・   ・・・   ・・・
・・・   ・・・   ・・・
・・・   ・・・   ・・・

このようなファイルがあるとき、
「関東の西村性の人は何名いるか」
「複数の外国人が入っているグループはいくつあるか」
「同じグループ内で頭文字”あ”の人の直後に頭文字”い”の人が並んでいる頻度と
頭文字”あ”の人と頭文字”い”の人との間に頭文字”く”の人が1人だけ入っている
頻度とではどちらが多いか」
を測定するプログラムをC++で作成してください。
おながいします!
397381:04/07/07 16:12
>>383
あんなに見難いプログラムを…駄目もとで書き込んでみたんです。
まさか本当に添削していただけるとは…。
動作、完璧です。ありがとうございました。
上のデータファイルを全部くれないと検証できなひ。
399319:04/07/07 16:12
いやだからexeファイルしかないんですって・・・。
>398

>396
SQLならすぐなんだが。
>>319
先生にDebugビルドでプログラム配布するな、と言っとけ。
とりあえず実行結果晒せば誰かやってくれるよ。
403319:04/07/07 16:24
もう・・・誰かファイル見て下さいよ・・・。
見なくても出来たら良いんですけど・・・。
319のプログラムお願いします・・・。
ファイルはただのexeですから・・・そんなにビクつかないで下さい・・・。
みんな実行したから書けなくなったんだろ。ヤラれてな。
つか、素性もわからぬEXEなんて誰も実行しないよ。
だから>>319 が入力ファイルとそのexeを実行してできた出力ファイルを
ここに貼り付ければ済む話だと何度(ry

_| ̄|○ 俺の話を理解して…


>>403
linuxでexeファイルを実行する方法を教えて下さい
うわー。実行してみたいけど(本能)、実行できない(理性)よ。
>>406
Linuxでもwineを入れるとWindowsのEXEが実行できます
>>408
そのwineてのはタダですか?
当方 windowOS そのものがありませんが?
ぐぐれ話はそれからだ
411firefox:04/07/07 16:52
フツーのexeだったけど?プロンプトが開いて・・・
藻前らはアフォか、と。莫迦か、と。
ここから先、この板にはexeのひとつやふたつ開けない餓鬼は要らない。
付いてこれるヤツだけついてこい!プログラマーなんぞ名乗るんじゃねぇ!
開くことは開きましたよメモ帳で
         \   ∩─ー、    ====
           \/ ● 、_ `ヽ   ======
           / \( ●  ● |つ
           |   X_入__ノ   ミ   <そんなエサで俺様がクマー!!
            、 (_/   ノ /⌒l
            /\___ノ゛_/  /  =====
            〈         __ノ  ====
            \ \_    \
             \___)     \   ======   (´⌒
                \   ___ \__  (´⌒;;(´⌒;;
                  \___)___)(´;;⌒  (´⌒;;  ズザザザ
                               (´⌒; (´⌒;;;
プログラマなら逆アセするなりバイナリエディタで開くなりして
クラッシャー系プログラムか判断しろよ
>>403
これ作ればいいの?
>>414
そこまでして実行したいファイルじゃないからな。
クラッシュした・・・
exeの危険性とかそういう問題以前に、回答者に余計な手間をかけさせるなよ。
319は駄目な質問の典型例みたいなやつだな。
421319:04/07/07 17:39
>415
そうです。
もとのプログラムを4つに分割して
結果コレが出来れば良いんです。
ショボグラマーばっかだなw
416なんて笑えるもんなw
なんで>>388が見れないだろ。
NGワード含まれてナ下げなのに。おかしいな。
>>421
|・∀・|ノ もとのプログラムどうこうは知らんが
     とりあえず、そのexeと同じ挙動するぞ

int main(void)
{
char s[100];
int i=0, j, count;
printf("文字列を入力(30以下):"); gets(s);
printf("\n\n元の文字列は:%s",s);
while(s[i]!='\0') i++;
count=i; j=i-1;
for(i=0; i<count/2; i++, j--) s[i]^=s[j]^=s[i]^=s[j];
printf("\n入れ替えた文字列は:%s(長さ%d)",s,count);
printf("\n何か入力すると終了します。\n"); gets(s);
return 0;
}
425319:04/07/07 17:57
ええと。だいぶ前のレスなのでもう一度書くと・・・
元のプログラムを4つに分割してほしいのです・・・。

1:元の文字列と反転結果の文字列を格納する配列( rc[size+1] )のポインタ” を引数にとり、
 文字列を入れ替えて、指定された配列に保存する関数を記述した reverse.cpp を作る。
2:ファイルから文字列の読み込みを行う関数を記述した input_file.cpp を作る。
3:反転結果の文字列をファイルへ出力を行う output_file.cpp を作る。
4:文字列はファイルから読み込み、結果はファイルに出力すること
>>425
始めからちゃんと書いておけよバカ
>>425
その仕様通りにすると、サンプルプログラムにはならない罠。
サンプルプログラムは標準入力にしか対応してないように見えますよ?
きっと標準入出力がファイルに繋がってるんだよ
お前らイジワルだな
きっと分割コンパイルしたいんだよ
みんな んなこたぁわかってるよ
ほぼ答えが出てるから書かないだけだろ
もう帰れ>319
どーせVC++つかってんだろ?
VC++スレで
「このソース4つに分けて分割コンパイルしたいんですけどどうすればいんですか?」
って聞けば?

ここに誘導されそうだけど。
>>319
入力やら結果やらのファイル名はどうするん。リダイレクション?
434firefox:04/07/07 18:14
( ´,_ゝ`)
435firefox:04/07/07 18:15
( ´,_ゝ`)
436338:04/07/07 18:17
>>358-359
レスどうもです、確かに358さんの方法を使えば上手くいきそうなのですが
その場合って対象のウィンドウの子ウィンドウ取ってこないといけませんよね?
って事は・・・EnumChildWindows関数を利用してEditウィンドウのハンドル引っ掛けてこないと
いけないって事なのでしょうか?
このスレは
・プログラムなんて全く興味なし
・カリキュラムのせいで無理やりやってる
・単位取ったら完全に忘れる

と思ってる人のために答えてあげるスレです。
438firefox:04/07/07 18:23
( ´,_ゝ`) ザコドモ
環境依存の宿題もここなの?
>>439
内容によるだろ
441firefox:04/07/07 19:23
もっとマシなプログラマーいないのか?
中途半端にソフトウェア会社に就職して
仕事できないからここでプログラミングの相手して暇つぶしか?
319==firefox?
>>335まだ〜?
>>443
ムズかしくて誰もできない
今wineインスコ中
446firefox:04/07/07 19:58
> 319==firefox?
空白空けろ ぼけ!
>>446
ワラエヌ
透明
449firefox:04/07/07 21:59
( ´,_ゝ`) プログラムできないヤシは必要ない
( ´,_ゝ`) やはりここはぼるじょあが仕切る!
一次方程式ax+b=0の係数a,bの値(実数)として受け取り、方程式の解を返す
関数を作る。ただし係数a,bはポインタ渡しとし(引数にポインタを使う)
解は引数を用いて返すこと(ポインタの引数を使用し、返却値は0とする)
お願いします。
>>450
ガウスの消去法でググル。
>>450
ひとつ聞くが、どこの宿題だ?学校名まで出さなくていいから、言ってみ。
「ライツアウト」 というパズルゲームを解く
Cのプログラムを作ってください 
できるだけやさしくてわかりやすいやつを
おねがいしたい
>>453
ひとつ聞くが、どこの宿題だ?学校名まで出さなくていいから、言ってみ。
>>449
悪いが次は流石兄弟
456デフォルトの名無しさん:04/07/07 22:27
分かりませんでした・・。お願いしますm(_ _)m
課題;ファイル"infile"に次の形式データがあるとき、そのふたつの行列の積
をファイル"outfile"に書き出すプログラムを作れ。
データ
5 5
5.0 7.0 6.0 5.0 7.0 10.0 8.0 7.0 6.0 8.0 10.0 9.0 5.0 7.0 9.0 10.0
68.0 -41.0 -17.0 10.0 -41.0 25.0 10.0 -6.0 -17.0 10.0 5.0 -3.0 10.0 -6.0
-3.0 2.0

(コマンドプロンプトを授業でやってました)(>_<)
データのどこが何を表してるのかワカラン
458456:04/07/07 22:35
課題プリントをそのまま写したのですが・・。
ちなみにこんな行列データもありました
3 2
1.0 2.0
3.0 4.0
5.0 6.0
>455
いや、次は
 【殺人ウイルス】キバヤシがC/C++の宿題を片付けてみせる!27滅亡目【グランドクロス】
だ。
460456:04/07/07 22:37
形式でなくて行列でした!すみません!!
5行5列って意味なんだろうけど
5行もねーしな
462456:04/07/07 22:40
何度も訂正すみません。
×次の形式のデータが→○次の形式の行列データが
       ,.ィ , - 、._     、
.      ,イ/ l/       ̄ ̄`ヽ!__
     ト/ |' {              `ヽ.            ,ヘ
    N│ ヽ. `                 ヽ         /ヽ /  ∨
   N.ヽ.ヽ、            ,        }    l\/  `′
.  ヽヽ.\         ,.ィイハ       |   _|
   ヾニー __ _ -=_彡ソノ u_\ヽ、   |  \ 
.      ゙̄r=<‐モミ、ニr;==ェ;ュ<_ゞ-=7´ヽ   >   課題をはじめる前に
.       l    ̄リーh ` ー‐‐' l‐''´冫)'./ ∠_  
       ゙iー- イ'__ ヽ、..___ノ   トr‐'    /    
       l   `___,.、      ./│    /_  まず暗号を解かなければいけなかったんだよ!
.        ヽ.  }z‐r--|     /  ト,     /      
           >、`ー-- '  ./  / |ヽ  /_   
      _,./| ヽ`ー--‐ _´.. ‐''´   ./  \、  
-‐ '''"  ̄ /  :|   ,ゝ=<      /    | ` l/ ヽ   ,ヘ
     /   !./l   \    ./    │   _    \/ ヽ/
      _,> '´|l. ミ:ゝ、;';';_/,´\  ./|._ , --、 | i´!⌒!l  r:,=i       
.     |     | .l. /   |=  ヽ/ .| .|l⌒l lニ._ | ゙ー=':| |. L._」        
      l.    | .l./    !    /  | i´|.ー‐' | / |    |. !   l       
.     l.   |   !    |  /  |"'|.   l'  │-==:|. ! ==l   ,. -‐;       
     l   |  l     | /   | i=!ー=;: l   |    l. |   | /   //    
       l  |   l    |/    │  l    l、 :|    | } _|,.{::  7 
マジ馬鹿ばっかだなw
319の問題すら出来ないのにプログラミング?
( ´,_ゝ`) 笑えるよ。

正解:ttp://www.gem.hi-ho.ne.jp/cgi-bin/user/kazu0605/apeboard_plus.cgi
Ωな、なんだって〜
第一 >>458 とか行列一個しかないし
467デフォルトの名無しさん:04/07/07 22:45
>400 giko.txt
名前   頭文字   地域(大)   地域(中)   地域(小)
西村   に   九州
北村   き   北関東
鈴木   す   関東   東京   多摩地区
中西   な   関西
田中   た   北海道
北島   き   東北
永田   な   中国
板垣   い   四国
中田   な   関東
高遠   た   その他
(ここまでが第1グループ)
高木   た   関東   東京   23区
西村   に   関東   東京   23区
ワインバーグ   わ   外国
安藤   あ   その他
石田   い   関東
山本   や   中国
ファインマン   ふ   外国
(ここまでが第2グループ)
有坂   あ   関西   京都
車   く   関西
石井   い   関東
阿藤   あ   九州
伊藤   い   東北
安達   あ   関東   東京   23区
金本   か   関西   大阪
井上   い   東北
キム   き   外国
西村   に   関東   東京   多摩地区
(ここまでが第3グループ)
>>456
まずすべての数を足すと135
これに先頭の数字5をかけると675
それに福音数3をかけると、2025
ノイズである26を引くと。。。。。


   1 9 9 9


人類の滅亡を予言した数字だったんだよ!
>>468
2025から1999ひいたろ?なぁ?
470456:04/07/07 22:52
>>468
すみません、よく分からない問題で。。
でも課題プリントと改行も同じにしてますので・・・。
授業では、コマンドプロンプトを使ってメモ帳に行列データを保存して、C言語のプログラムで
書き出してました。
>468
         ナ ゝ   ナ ゝ /    十_"    ー;=‐         |! |!   
          cト    cト /^、_ノ  | 、.__ つ  (.__    ̄ ̄ ̄ ̄   ・ ・
蠣崎 か 蝦夷
津軽 つ 奥州
伊達 だ 奥州 仙台
上杉 う 越後 春日山
武田 た 甲斐 躑躅ヶ崎
佐竹 さ 関東 常陸
北条 ほ 関東 小田原

>>468
宿題を片付けているうちにまたしても、1999年にぶちあたったか。。
ノストラダムスよ、あなたは我々に何を伝えようとしているのだ!
問題自体に不備がある問題は解けません。あしからず
475456:04/07/07 22:59
>>474
申し訳ない。4行4列と考えれば出来ますでしょうか?
4行4列に直したものを貼れ
話はそれからだ
間違えて変なの貼ったりしたらもう知らないぞ
      li     li__|_||
          /|::::::::::::::::::::|
   ||     |/  |::::::::::::::::::::| li
      ll/  ●|::::::::::::::::::::|
  |l   /     |:::::::, '⌒ヽ| ||     まだ宿題スレの座は渡さない
     |    .|  |:::::::l  :::::`ヽ __ l|
     |●',./i  |:::::::ヽ    :::::::..⌒)  さあ、ご一緒に ようかんマン#羊羹饅々
li   |  .|  `、 |  |:::::::::::` ー- --- '
(⌒ヽ__ノ.|      |::::::::::::::::::::|  ll
 ヽ,   .|      |::::::::::::::::::::| |l
   ` -.|     / ̄ ̄ ̄/
     |   /:::::::l⌒l::/ ||
  li   |  /:::::::::::::| .|'
     |/:::::::l⌒l__.| .| li  ズズ‐ン
       ̄ ̄.|  | (⌒ ,'" `ヾ
   ||  (⌒ヽ |  |( `v  , '"`ヽ 
    , '"`v (⌒ ,'" `ヾ"    ',

>>475
そりゃできるだろうけど、その場合頭の 5 5 は読み捨てるの?
ほとんどの場合データには意味があるので、読み捨てると多分大幅減点されるよ?
>>475
ここはあれだ。問題の矛盾点を指摘して白紙解答だ。
そうすれば大幅に点数アップ間違い無し!
480456:04/07/07 23:11
>>476>>478
まことに申し訳ありません。
提出は月曜日なので、問題に不備が無いか調べてまいります。
481456:04/07/07 23:50
ちなみに4行4列ではどうやってやるのか書いてくれると幸いです(>_<)
>>481
ttp://next1.cc.it-hiroshima.ac.jp/C/chap6.html
説明まんどくさいのでリンクのみ。
>>481
人の話を聞け。>>476を読め。
484デフォルトの名無しさん:04/07/08 00:05
gdi+でjpg画像から、ビットマップのGetPixelのように
1ピクセルの画素値を抜き出すのってどのようにすれば可能でしょうか?
よろしくお願いいたします。
あと、jpgって各色8ビット(256段階)ですよね?
行列の積という意味すらわかってないのではなかろうか。
>>484
フリーのDLL使え
>>484
JPEGがRGBで保存されているとは限らないがな。CMYKとか。
>>484
似たような問題でGDI+を用いない方法なら24スレ目773への解答で書いた。
1)IPictureとIStreamを使ってJPGを読みこむ
2)ビットマップハンドルを取得
3)GetPixelで1ピクセルずつアクセス
の順番でいける。GDI+は知らんので答えられんがな…。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=119
(>_<)

↑の顔文字嫌いです。
主観+スレ違い すいません。

>>489
そんなぁ・・・(>_<)
(>_<) <ごめんなさい!
492456:04/07/08 00:18
>>483
5.0 7.0 6.0 5.0
7.0 10.0 8.0 7.0
6.0 8.0 10.0 9.0
5.0 7.0 9.0 10.0

68.0 -41.0 -17.0 10.0
-41.0 25.0 10.0 -6.0
-17.0 10.0 5.0 -3.0
10.0 -6.0 -3.0 2.0
の場合はどうでしょうか?ずれてたらすみません(T T)
>>492
いい加減にしろよ?ちゃんと答えまで出してるだろ
494456:04/07/08 00:26
>>493
ごめんなさい。今日は退散します。
データ読み込み(データがどのようなものか不明瞭)
    ↓
計算:c_ik = Σa_ij*b_jk
(コードは、行列の大きさが固定か可変かなどデータの条件に依存する)
    ↓
データ出力(出力フォーマットが不明)
496484:04/07/08 00:47
早速の回答ありがとうございます。

>>486
何かいいものがありましたらどうか教えてください。
探したんですが見つかりません

>>488
すみません、うまく動きません・…
>>496
あなたは「うまく動きません」って言われただけで原因わかると思う?
498484:04/07/08 00:51
>>497
そうですね。すみません。
test.jpgというファイルをプログラムと同じフォルダに置いても
それを読みに行かないようです。
>>496
俺が良く使わしてもらってるやつで良ければ
http://www.vector.co.jp/soft/win95/prog/se222453.html
>>498
だからさあ、人がわかるように書けないものか
読みに行かないと判断した根拠は?

まあふつう、libjpegだよな
ぼるじょあの再来はまだぁ?
502488:04/07/08 01:00
>>484
あれ、動かんか。
Microsoft Visual C++ Toolkit 2003でコンパイル確認し、
test.jpgも自分の環境では読めたんだが…。

というかtest.jpgってのは例としてかいただけで、
せめてフルパスで試して欲しかった…。
503488:04/07/08 01:18
>>484
気になったのでGDI+を使う方法を検索したよ。
Imageクラスから派生したBitmapクラスってのがあるじゃん…。
たぶんImageから派生しているので
Bitmapクラスのコンストラクタにファイル名を指定するだけで
jpgも読みこめるはず。ものすごく楽そう。
しかもGetPixelなんてまんまなメンバ関数が準備されてるし。

Color color;
Bitmap bmp(L"test.jpg");
bmp.GetPixel( x y, &color );//x,yは任意
ぼるじょあは永眠しました
つぎスレは、妹のまいちゃんがお兄ちゃんの宿題を手伝うスレにしてください。
>>396
何を根拠に外国人と判断すればいいの?
まさか、カタカナ姓を外国人と判断しろだなんて旧世紀的なことを言うわけじゃないよな。
つぎはダディクールにしようぜ。
次は侍がいいまじで
ちゃんと問題解いたときのセリフ考えてるんだからさぁ
たのむよー

509kanti:04/07/08 01:59
3×3の行列の演算を行いたいのですが
行列の定義の仕方からしてわかりません。
各成分をバラバラにしてみたんですが正解とは言いがたいです。
スマートな記述の仕方をご指導ください。
>506

外国、って書いてある人だろが(w
二次方程式の解を求める問題です。
間違ってないと思うのですが確認の仕方がわかりません。
↓のであっているでしょうか。


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

main()
{
/* 変数の定義と初期化 */
double a; /* x^2の係数 */
double b; /* xの係数 */
double c; /* 定数項 */
double D; /* 判別式 */
double real; /* 実部 */
double img; /* 虚部(虚数の場合) */
double x1; /* 解1 */
double x2; /* 解2 */
double x; /* 重解 */

/* a,b,c を入力 */
printf("2次方程式 ax^2 + bx + c = 0 の解を求めます。\n");
printf("変数 a に入れる値を入力してEnterキーを押して下さい\n");
scanf("%f",&a);
printf("変数 b に入れる値を入力してEnterキーを押して下さい\n");
scanf("%f",&b);
printf("変数 c に入れる値を入力してEnterキーを押して下さい\n");
scanf("%f",&c);
513512:04/07/08 02:37


/* 一次方程式の場合 */
if (a==0) { x=-c/b;
printf("x = %f\n",x); }

/* 二次方程式の場合 */
else { D=b*b-4*a*c;
real=-b/(2*a);

/* 判別式が正の場合 */
if (D>0) { img=sqrt(D)/(2*a);
x1=real+img;
x2=real-img;
printf("x = %f , %f\n",x1,x2); }

/* 判別式がゼロの場合 */
else { if (D==0) { x=real;
printf("x = %f (重解)\n",x); }

/* 判別式が負の場合 */
else { img=sqrt(-D)/(2*a);
printf("x = %f + %fi , %f - %fi\n",real,img,real,img); }

}
}
return 0;
}
>512
>確認の仕方

a,bに0を入れる!
>508

残念!
516512:04/07/08 02:47
>>514
レスありがとうございます!

確認の仕方がわからないとは、
普段は学校のパソコンでUNIX?にログイン?してmuleとかいうエディタを使って
プログラムを作成していて、UNIX上でコンパイル、実行しているのですが、
それが家でもしたいけどできない、ということです。
いつも思うんだが、なんでlinux入れないのさ
不便じゃん
学校でたまにやらされるだけだからリナックス入れることまでは考えたことありませんでした。

「メイン関数だけじゃなくて他の関数も使ってくださいね」と教官が言ってたんですが、
>>512-513 じゃ間違ってますよね?
>>515
ねたばらしてますからっ!
ざ ん ね ん っ !
>>516
Windowsでもフリーのコンパイラがあるんだから、入れてためせよな
//どこにあるんですか、なんで聞くなよ?
どこにあるんですか?
522デフォルトの名無しさん:04/07/08 03:10
ボーランド社のフリーのコンパイラというものをダウンロードしたものの、使い方がまったくわからず。
検索してきます
こんな時間なのにすごい伸びてるなw
5243:33:04/07/08 03:33
>523
睡眠障害ですからっ

生きてるの ぎり斬り
525ktj:04/07/08 03:48
クイックソートの、ソートの過程を分割ごとに表示する
プログラムはどうすればよろしいでしょうか?
526デフォルトの名無しさん:04/07/08 03:54
助けてようかんマン!

----
身の回りにある現象、若しくはシステムの離散事象モデルを作成し、
一様乱数若しくは指数乱数作成ソフトを用いてシミュレーションしなさい


・高速道路の料金所通過シミュレーション
・流れ作業効率化のためのシミュレーション
・演習課題の作業分担シミュレーション

注意事項:
本課題では、指数乱数発生用プログラムを作成する。このプログラムを作成し、
レポートとして提出するにあたり、作成したプログラムで使用した乱数発生の理論、
およびプログラムのフローチャートの説明を必ず含めること。
----
>>525
クイックソートのソースはあるの?

>>526
乱数のソースは、ぐぐれば出てくる。参考にするよろし。
残るはシミュレーションだが、どんなイメージかはわかる?
528ktj:04/07/08 04:04
>>527

あほなこと聞きますが、
プログラムソース載せようとしたら、
長過ぎて載せれませんでした。
どうすれば良いですか?
>>528
>>1くらい読めませんか?
今から寝るから後はよろしく>誰か
>>525
奥村先生のC言語による最新アルゴリズム事典
ttp://oku.edu.mie-u.ac.jp/~okumura/algo/
からソースダウンロードして
qsort1.cとかに適当にprintfうめこんでみるのはどうかしら?
531ktj:04/07/08 04:30
532ktj:04/07/08 04:33
>>530

それで、
今日1日に潰れました。
Σ(゚Д゚)!
そうか〜

ていうか、そのソースコンパイルしてみたけど、それではダメなわけなの?
どうなればよいの?
534ktj:04/07/08 04:59
>>533

ソートするだけじゃなくて、
ソートの過程を分割するごとに表示しないといけないんですよ。
535ktj:04/07/08 05:00
>>533

あのソースだと、
なんか全ての過程が表示されないんですよ。
86 31 54 37 97 (スタート)
******************************************
今回の対象:
□ 86 31 [54] 37 97□

今回の結果:
■ 37 31 [54] 86 97■

=================================================
今回の対象:
□ [37] 31□

今回の結果:
■ 31 [37]■

=================================================
今回の対象:
□ [86] 97□

今回の結果:
■ [86] 97■

=================================================
31 37 54 86 97 (ソート完了)
こんな感じでよければソースアップしるよ。
それともこんな感じでスワップまで表示しるか・・
ていうか俺が放置されてる・・?Σ(´Д`;
もう朝だしなぁ

43 28 34 79 73 64 28 75 12 35 (スタート)
=================================================
今回の対象: 43 28 34 79 [73] 64 28 75 12 35
      79 と 35 を交換
      73 と 12 を交換
今回の結果: 43 28 34 35 12 64 28 75 [73] 79
=================================================
今回の対象: 43 28 34 [35] 12 64 28
      43 と 28 を交換
      35 と 12 を交換
今回の結果: 28 28 34 12 [35] 64 43
=================================================

〜中略〜

=================================================
今回の対象: [75] 79
      75 と 75 を交換
今回の結果: [75] 79
=================================================
12 28 28 34 35 43 64 73 75 79 (ソート完了)
539ktj:04/07/08 10:27
>>536
>>537
>>538

色々な案を提供してもらってありがとうございます。
しかしながら、
過程の表示は、
分割が1つになるまで表示しなければならないので、
もう一歩といったところですね。
もう、時間なんであきらめます。
協力してくれた人、
とてもありがとうございました。。。
540デフォルトの名無しさん:04/07/08 11:32
C++にもJavaやC#のような「finally」をつけたくて
その為のマクロを作ったんですが、いちいち閉じタグが必要だったり
変数を使ったりといまいちスマートじゃない気がします。
「finally」で定石みたいなのってありますか?
あったらそっちにしようと思います。

#define _finally_beginbool _rethrow=true;try{ throw _rethrow=false;}catch(...){
#define _finally_endif(_rethrow)throw;}
>>539
間違えて送信押しちゃった
>>541
いまさらだけど…

>>540
それ宿題?
544デフォルトの名無しさん:04/07/08 13:50
すいません。
過去にお聞きしたんですが、問題間違ってて…
再度お願いします。

次のプログラムを拡張して、文字配列array[11]の各要素の値とそのアドレスを
以下のように順に表示するプログラムを作成せよ。

#include <stdio.h>

int main(void)
{
char array[6]="abcde"; /* abcdeという文字が入った配列を準*/
char *p;

for(p=array; *p; p++){
printf("%s\n", p);
}
return 0;
}

注意:ポインタを利用すること

出力例
入力する数字が2650040078のとき

data: 2, address: -107344784
data: 6, address: -107344783

data: 2, address: -107344775
>>544
> data: 2, address: -107344784

出題者はポインタを出力するのに%dを使っている予感。

>>544
「入力する数字」って何よ?
C++で
1からnまでの整数で、素数となる整数を求めよ。
まず、nをストリーム入力し、素数かどうかを判定し、もし素数ならばその素数をストリーム
へ出力する。なお、この素数の判定は別の関数とすること。
エラトステネスの篩い でググレ。話はそれからだ。
549デフォルトの名無しさん:04/07/08 14:01
>>544
#include <stdio.h>

int main(void)
{
char array[11]="0123456789A"; /* abcdeという文字が入った配列を準*/
char *p;
int n;
p=array;
for(n=0;n<11; n++){
printf("data:%c address:%d\n",*(p+n),(p+n));
}
return 0;
}
>>544
#include <stdio.h>

int main(void)
{
char array[11];
char *p;
printf("入力>");
scanf("%s",array);
for(p=array; *p; p++){
printf("data: %c, address: %p\n", *p,p);
}
return 0;
}

>>547
stream I/O のためだけにC++を使うのは正直嫌いだ
551デフォルトの名無しさん:04/07/08 14:06
>>549に補足
アドレスなら%dよりも%Xの方がいいかもね.
>>549
重複スマソ
>>551
ポインタの出力は%pだと思うが・・・
(問題の例のとおりにだすなら、%dとかだけど)
554デフォルトの名無しさん:04/07/08 15:11
質問:
コマンドライン引数を使って文字を出力する場合・・・
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("test",argv[1]);
return 0;
}
であってます??いまいちぴんとこなくて・・・
間違っていたら、やり方おすえてくだされ〜
おねがします。
あってる
c:\>a.exe p0 p1 p2
とした場合

argc == 4
argv[0] == "c:\\a.exe"
argv[1] == "p0"
argv[2] == "p1"
argv[3] == "p2"
argv[4] == NULL

となる
>>554
それだと、「コマンドライン引数を使って」ないけどいいのか…
>>554
printfの中に,%sかなんか抜けてないか
>>555
せめて
printf("%s\n",argv[1]);
だろ?
559554:04/07/08 15:36
>>555〜558
みなさんありがとう〜
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%s です。",argv[1]);
return 0;
}
で、c:\>a.exe a とした場合、
aです。
とでますね・・・・
さっきのは、単なる出力文ですた・・・申し訳ない
コマンドライン引数て、実行ファイルにAとかの文字を渡したときにそいつを
表示させるとか、処理させるつうことなんですね・・。
むず・・・・
>>547
 .__
ヽ|・∀・|ノ <エラトステネスのふるいで解いたよ。
 |__|   C++を使えと明記してあったのでSTL使用。
  | |    

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=145

あと誤植すまん
//1〜nまでの素数を表示
→//2〜nまでの素数を表示
でも宿題で STL 使うと、学ぶべきことが STL に吸収されちゃって意味無い気もするなぁ(たまに)
ようかんま〜ん。
俺はC++ってよく知らんのだが、
この場合使っているSTLてのは
イテレータのことかい?
>>562
コンテナとイテレータとアルゴリズムの3つをあわせてSTLなんだよ
listの事だろ
あ、というかリストのことか。すまんねついでに聞いちゃって。
<>の間にいろんなクラスやらを指定できるのがテンプレートで
その標準ライブラリ集がSTLと認識してよいか。よいか。よいのか。
よいよ
てうかSTLが何の略か知らないのかにゃ
おk。さんくす。
すたんだーどてんぷれーとらいぶらり
じゃなかったっけか。勉強になた。ありがとん。
568333:04/07/08 17:13
以下のように関数内でfloat型の1次元配列を宣言し、
それをメイン関数内でポインタpを使って各値を表示するプログラムを作りなさい

float *f(void){

static float x[5]={1.1 , 1.5 , 4.3 , 3.4 , 1.2};

/* 必要があれば付け足す*/

}


【出力結果】

$ prog02.exe
1.100000
1.500000
4.300000
3.400000
1.200000

おしえてください。
よろしくお願いします。
569リトライ:04/07/08 17:14
「ライツアウト」 というパズルゲームを解く
Cのプログラムを作ってください 
できるだけやさしくてわかりやすいやつを
おねがいしたい
>>568
マルチするな
571333:04/07/08 17:15
向こうでこっちのこと教えてもらったのできました。
すいませんでした。
>>569
どこの宿題だよ、それは
573333:04/07/08 17:16
学校のです。
574547:04/07/08 17:18
>>570
ありがとーですm(__)m
誰が誰に問いかけ、誰が誰に答えているかがわからぬ。
これもSTLなのか?そうなのか?そうなんだな?
576544:04/07/08 17:21
入力する数字は2650040078です。
>>568
#include <stdio.h>
float *f(void){
static float x[5]={1.1 , 1.5 , 4.3 , 3.4 , 1.2};
/* 必要があれば付け足す*/
return x;
}
int main(void)
{
int i;
float *p;
p=f();
for(i=0;i<=4;i++)
printf("%f\n",p[i]);
return 0;
}
578333:04/07/08 17:25
ほんとにありがとうございました。
>>575
サンクス!
>>548
グーグルで「エラトステネスの篩」を検索してみました。
そしたら色々なページが出てきたんですが、
なにかあるんですか?
>>548の言いたいことは、それ使って少しは考えろってことだろ
おまえに言うことは何も無いということが言いたい。
以下のようなプログラムをポインタを用いて作成しなさい。
・標準入力から整数(個数未定, 桁数最大10桁)を文字列として入力する
・入力された文字列中に0〜9の各数字がいくつあるかを数える
・入力された文字列中に q が現れるまで入力を繰り返す
・各数字の出現個数を標準出力する。
ただし、「文字列 data」と「出現個数記録用整数配列 num」を引数とする関数 count を作成し、用いること。

【出力結果例】
%prog03.exe
整数(個数未定, 桁数最大10桁)を文字列として入力して下さい。
0123456789
20040702
1620
1750
5236
q

0: 7個
1: 3個
2: 5個
3: 2個
4: 2個
5: 3個
6: 3個
7: 3個
8: 1個
9: 1個
おながいします
>>583
どこの宿題だよ、それは
学校です
>>583
# include <stdio.h>
# include <stdlib.h>
# include <ctype.h>

int char_to_int(char c)
{
    char str[2];
    str[0] = c;
    str[1] = '\0';
    return atoi(str);
}

void count(const char *data, int *num)
{
    int i;
    for(i = 0; data[i]; i++)
        if(isdigit(data[i]))
            num[char_to_int(data[i])] += 1;
}

int main(void)
{
    int num[10] = {0};
    char data[12];
    int i;
    while(fgets(data, 12, stdin) && data[0] != 'q')
        count(data, num);
    for(i = 0; i < 10; i++)
        printf("%d: %d個\n", i, num[i]);
    return 0;
}
>>583
C++ だったら
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int
main()
{
    int i;
    string sNum;
    istream_iterator< string > isi( cin );
    istream_iterator< string > eos;

    while( isi != eos )
    {
        if( *isi == "q" )
            break;

        sNum.insert( sNum.end(), isi->begin(), isi->end() );

        isi ++;
    }

    for( i = 0; i < 10; i ++ )
        cout << i << ": " << static_cast< int >( count( sNum.begin(), sNum.end(), i + '0' ) ) << "個" << endl;

    return 0;
}
でもいいかもね
ああ、関数あったんね。スマソ
589583:04/07/08 18:21
>>586
ありがとござますた。スゲー
# include <ctype.h>っつーのは習ってないんですが抜いても問題ないでつか?
590583:04/07/08 18:21
いえ、Cです。どうもです。
>>589
それなら、
#include <ctype.h>
を抜いて、
if(isdigit(data[i]))

if(data[i] != '\n')
に書き換えるべし。
592583:04/07/08 18:30
>>591
わかりました。マジありがとございます。
593デフォルトの名無しさん:04/07/08 20:32
再代入法 leave-one-out法なんかはここで聞いても
よろしいのでしょうか?
>>593
それが宿題なのかによる
595ふぉ:04/07/08 20:37
宿題ですけど・・ お願いして大丈夫でしょうか?
深さxの完全2分木ってどうやったら作れますか?
ヒントだけでもお願いします。
>>596
2^x のleaf を用意して、rootへ向かって組み立てていけば?
598どこがおかしいか教えてください:04/07/08 21:37
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define NUM 1000000

void main(void)
{
double x,y,z, sum=0.0;
int i, cnt=0;

srand(17);
for (i=0; i<NUM; i++) {
x = (double)rand()/(RAND_MAX + 1.0);
y = (double)rand()/(RAND_MAX + 1.0);
if (x*x+y*y < 1) cnt++;
z = (double)rand()/(RAND_MAX + 1.0);
sum+=1/sin(z);
}
pi = (double)4*cnt/NUM;
printf("計算結果=%f\n", sum*(pi/2-pi/3)/NUM);
}
599どこがおかしいか教えてください:04/07/08 21:38
∫(1/sinx)dx 積分区間がπ/2〜π/3
600どこがおかしいか教えてください:04/07/08 21:41
実行したら1.#INF00こうでてしまいました(##)

答えは0.5493061443くらいになると思います

どこがおかしいのか教えてください  
とりあえずそのソースだと
> z=(double)rand()/(RAND_MAX + 1.0);
z の変域が 0 <= z <= RAND_MAX / (RAND_MAX+1) (ほぼ1.0)なので、
(pi/2-pi/3)の積分にはならないよ

piの値の実験的な計算方法はそれでいいと思うけど。

モンテカルロ法で積分の計算がやりたいんだと判断したけどそれでいい?
602どこがおかしいか教えてください:04/07/08 21:57
>601
そうです。課題のテーマがモンテカルロ法

ソースを訂正して下さい
とりあえず、
積分がしたいのか、
PIを計算したいのかどっち?
604どこがおかしいか教えてください:04/07/08 22:02
積分がしたいんです

とりあえず問題文をそのまま張ってみ。
話はそれからだ。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define NUM 16777216
#define PI3.1415926535897932384626433

int main(void){
double z,w,sum=0.0;
int i, cnt=0;
double pi6 = PI/6.0;
double pi3 = PI/3.0;

srand((unsigned long)time(NULL));
for (i=0; i<NUM; i++) {
z = (double)rand()/RAND_MAX;
w = pi3 + z*pi6;
sum+=1/sin(w);
}
printf("計算結果=%.20f\n", pi6*sum/NUM);
}

とりあえず修正
PI は値を与えた、
w を pi/3 - pi/2 で変化させている
毎回同じ結果が出て改善かどうかが分からないので乱数の種も与えた
607どこがおかしいか教えてください:04/07/08 22:16
モンテカルロ法を用いてその積分を求めるプログラムを作成せよ.(ソースプログラムと机上で解析的に求
めた値を提出;

b) ∫(1/sinx)dx 積分区間が π3〜π/2
608デフォルトの名無しさん:04/07/08 22:32
1時間20分なら80分、また、90分なら1時間30分というように
時間と分の変換を行うプログラムがド初心者なものでわかりません。
どなたか簡単なプログラムを教えて下さい!言語はCです。お願いします!

609デフォルトの名無しさん:04/07/08 22:34
あのぉ・・・ライプニッツの公式より精度の良い公式を調べて、見つけ出し
Cプログラムを作成せよってどういうことですか?
がんばったんですけど解けなくて・・・・・・・・・。
解ける方いますか?
610デフォルトの名無しさん:04/07/08 22:40
やっぱり、無理ですかね?>>609は・・・・
>>608
#include<stdio.h>

int main(void){
int min;
int hour;

printf("please input hour\n");
scanf("%d",&hour);
printf("please input minutes\n");
scanf("%d",&min);
min+=60*hour;
printf("%d min.\n",min);
return(0);
}
>>609
605
612608:04/07/08 22:46
>>611
助かりました!本当にありがとうございます!
613デフォルトの名無しさん:04/07/08 22:47
クイックソートと2分探索の問題です。
手順
1.電話番号録ファイルからキー(氏名)とデータ(電話番号)を読み込み、表(配列)に格納する。
2.クイックソートによりソーティングを行ってキーが辞書順に並ぶようにする。
3.キーボードから探索するキーを入力させ、2分探索を用いてデータを探索する。

電話番号録ファイル(phone.txt)
tanaka 5801
iwasaki 5803
akiyama 5805



実行結果例
名前、または!を入力して下さい:wakaki
内線番号: 5158
名前、または!を入力して下さい: nagatomo
nagatomoの名前は登録されていません。
名前、または!を入力して下さい: !
プログラムを終了します。
というような問題なのですが、難しくてよくわかりません。教えていただけないでしょうか。お願いいたします。
>>613
クイックソートは実装するのが義務かどうかと
phone.txt に入っている人数は何人かあとと一定か可変かどうか。
名前の文字数は何文字制限か。
電話番号は何文字制限か。
制限をきつくしないと書きづらいから情報追記お願いします。
615デフォルトの名無しさん:04/07/08 23:04
千円札だけを使用でき、かつ、千円以下の切符を売る自動販売機がある。任意の料金
(10円単位)の切符を買った(切符の料金を入力データとして読み込む)とき、その
つり銭を出力するCプログラムを作成せよ。ただし、つり銭の総額だけでなく必要な硬貨
の枚数、例えば、500円硬貨1枚、100円硬貨2枚、50円硬貨1枚、10円硬貨3枚と
いう結果も出力すること。

本当にわかりません…。どなたかご教授お願いします。
#include<stdio.h>

int main()
{
char s[10] = "ABCDFEG";
char *sPtr;


sPtr = "ABCDEFG";


if(s == "ABCDEFG"){
printf("配列sに代入されている文字列は\"ABCDEFG\"と等しい\n");
}
if(sPtr == "ABCDEFG"){
printf("sPtrは\"ABCDEFG\"と等しい\n");
}
return 0;
}

これのprintf文を2つとも表示させたいのですがどう変えればいいでしょうか?
>>616
入門書か教科書よめ
s も sPtr もポインタを比較しているだけだよ。
あくまでもポインタ変数だからね(文字列のあるメモリの先頭アドレスを変数に記憶させているだけ)

だから

if( strcmp( s, "ABCDEFG" ) == 0 ){
printf(...
}
ってやるか、
if( string( s ) == "ABCDEFG" ){
printf(...
}
ってやれば桶
619613:04/07/08 23:18
>>614
クイックソートのプログラムも必要なようです。
人数は一定なんですが、何人なのかは今はわかりません。すみません。
名前の文字数は13以下です。
電話番号はすべて4文字のようです。
これでよろしいでしょうか?
情報が足りなければ、明日聞いてきてまた書き込みたいと思います。よろしくお願いします。
>>615
int main(void){
int n, i;
scanf("%d",&n);
if((n=1000-n)<0) printf("足りません");
else{
printf("お釣りは %d円\n\n",n);
i = 0;
while(n>=500){n-=500; i++;}
if(i) printf("500円 %d枚\n",i);
i = 0;
while(n>=100){n-=100; i++;}
if(i) printf("100円 %d枚\n",i);
i = 0;
while(n>=50){n-=50; i++;}
if(i) printf("50円 %d枚\n",i);
i = 0;
while(n>=10){n-=10; i++;}
if(i) printf("10円 %d枚\n",i);
}
return 0;
}
>>615
#include <stdio.h>

int main() {
int t,c,i = 0;
int coin[] = { 500,100,50,10,5,1};
int num[sizeof coin / sizeof coin[0]] = { 0 };
scanf("%d:",&t);
c = 1000 - t;
printf("釣り:%d円\n",c);
while(c > 0) {
if(c - coin[i] >= 0) {
c -= coin[i];
num[i]++;
} else {
i++;
}
}
for(i=0;i<6;i++) {
printf("%d円硬貨 %d 枚\n",coin[i],num[i]);
}
return 0;
}
>>620-621
GJ!
Cの課題です。
2次元文字配列を用意し、標準入力から5つの文字列を入力する。
入力された文字列を文字コード順に並び替え、順に出力するプログラムを作成。
[例] Clea,Erika,Bee,Amu,Dos→Amu,Bee,Clea,Dos,Erika

どなたかお力を…
>>613
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=244
とりあえず、
入力人数は固定でコンパイル時に指定されているものとする。
クイックソートは私は面倒なのでライブラリを使ってしまいました。
クイックソートはちょっと待ってね。
>>623
int main()
{
char s[5][100];
int index[6], i, j;
scanf("%s %s %s %s %s",s[0],s[1],s[2],s[3],s[4]);
for(i=0; i<5; i++) index[i] = i;
for(i=0; i<4; i++){
for(j=i+1; j<5; j++){
if (strcmp(s[index[i]], s[index[j]]) > 0)
index[i] ^= index[j] ^= index[i] ^= index[j];
}
}
for(i=0 ;i<5; i++) printf("%s ",s[index[i]]);
return 0;
}
>>618
ありがとう親切な方!
627613:04/07/09 00:04
>>624
わかりました。お願いいたします。
五目並べがわからん
>>628
どこの宿題だよ、それは
630デフォルトの名無しさん:04/07/09 00:27
行列x,yの積をもとめるプログラムを作成せよ。

x=
1 2 3
4 5 6

y=
1 5
5 3
8 1

どうやるんでしょうか。
おねがいあします
631デフォルトの名無しさん:04/07/09 00:32
int a, x, y, z;
x = y = z = -1;
a = ++x && ++y || ++z;
y += a;
printf("%d",y);

なんでyは0にならないですか?
おしえてエロい人
>>630
言語はC?C++?
行列の値は定数?
表示はどういう形式なの?

>>631
0 && x
左辺が既に 0 で右辺を考慮する必要がないのでスルーされるから
0 || x
のときは x が 1 かどうかを評価する必要が出てくる
微妙にトリッキーなコード
633623:04/07/09 00:34
ようかんマンありがとー
634631:04/07/09 00:36
>>632
スルーするとですか・・・
わかりました!
>>629
学校の宿題。
5個石が並んでいるのを確認するところなんだけれども…
横と右下がりは例題が与えられている。縦は自力でわかった。
だが、左下がり?がわからぬ
public void checkfinish() {
int i, j, k, count;
// horizontal direction
for ( i=0; i<bsize; i++ ) {
for ( j=0; j<bsize-4; j++ ) {
count = 0;
for ( k=0; k<5; k++ ) {
if ( board[i][j+k] == turn ) count++;
}
if ( count == 5 ) flag = 1;
}
}

// orthogonal direction ( upper-left to bottom-right )
for ( i=0; i<bsize-4; i++ ) {
for ( j=0; j<bsize-4; j++ ) {
count = 0;
for ( k=0; k<5; k++ ) {
if ( board[i+k][j+k] == turn ) count++;
}
if ( count == 5 ) flag = 1;
}
}
636630:04/07/09 00:40
>>632
Cです^^
>>631
 .__
ヽ|・∀・|ノ <ようかんマンから余分な一言。
 |__|   こういったように左辺だけで結果が確定した場合、
  | |    それより右辺はスルーする論理演算をショートサーキット評価っていいます。
       スクリプトやコンパイラを実装する時は考慮したりします。
638デフォルトの名無しさん:04/07/09 00:54
16進数で入力し、10進数と2進数で表示

たすけて
>>638
sscanfでも使ってろ。
10->2進数変換ができないならさっさとやめてしまえ。
2進数⇔10進数ってこのスレ内でも頻出過ぎだな
>>637
個人的にはor dieとか嫌いだけどね。
642638:04/07/09 01:03
たのみます・・・orz
明日までなんです・・・
一生のおながいです
>>640
ところでおまいは右シフト派?割り算派?
>>642
C言語の前に句読点。

向いてない勉学をして向いてない学校を出て向いてない仕事に就く。
人生それじゃダメだよ。
も前らたまにはぼるじょあも使ってやれよ
646630:04/07/09 01:12
630age
647638:04/07/09 01:13
sscanfって教科書にのってません・・・
うぐぅ
>>646
そのままの説明のURLがこのスレに貼られている。
>>646
age ちゃった時点でウンコ確定だが、とりあえず問題文を詳しく載せて、自分で考えた分だけでも書いてみろよ
650デフォルトの名無しさん:04/07/09 01:20
この↓javaプログラムをC++で書き換えてください!お願いいたします!
/* Sample8: Studentでprintメソッドをオーバーライドする */

class Person{
String name;
int age;

Person(String n,int a){
name=n;
age=a;
}

void print(){
System.out.print(name+" ");
System.out.println(age);
}
}

651デフォルトの名無しさん:04/07/09 01:21
続き
class Student extends Person{
Person teacher;

Student(String n,int a,Person t){
super(n,a); /* Person用のコンストラクタを呼び出すだけ */
teacher=t;
}

void print(){
System.out.print(name+" ");
System.out.println(age);
System.out.print("teacher: ");
teacher.print();
}
}

public class Sample8{
public static void main(String args[]){
Person fukuda=new Person("Fukuda",40);
Person judy=new Student("Judy",18,fukuda);
Person mary=new Student("Mary",20,fukuda);

fukuda.print();
judy.print();
mary.print();
}
}
キーボードから入力した整数を素因数分解せよ。
653デフォルトの名無しさん:04/07/09 01:22
これを使ってください!
#include <iostream>
#include <cstring>
using namespace std;
class person {
private:
char name[40];
int age;
public :
person(char *ss, int tosi);
void setname(char *ss);
void setage(int tosi);
void disp();
};
person::person(char *ss, int tosi)
{
strcpy(name, ss);
if(tosi<0) age=0;
else age=tosi;
}
void person::disp()
{
cout<<"名前:"<<name<<'\n';
cout<<"年齢:"<<age<<'\n';
}

654デフォルトの名無しさん:04/07/09 01:24
続き
void person::setname(char *ss)
{
strcpy(name,ss);
}
void person::setage(int tosi)
{
if(tosi<0) age=0;
else age=tosi;


int main()
{
person Judy("Judy",18),Mary("Mary",20);
Judy.disp();
cout <<'\n';
Mary.disp();

return 0;
}
長々とすみません!簡単な文なんですがjavaが全然わからないもので・・・
655638:04/07/09 01:28
やさしいお兄さん方・・・
ヘルプ!!
>>613
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=245&fi=no
なんで漏れ qsort と binarysearch を void* と関数ポインタで実装したかな・・・・・。
問題に特化して作ればいいものを・・・・・。
657635:04/07/09 01:30
おながいします、ペルプ
>>638
16進数は普通に10進数に直して表示。2進数はそれから直して表示。
じゃいかんの?
やさしいお兄さんは、就寝されました。
今後、やらしいお兄さんが引き継ぎます。
>>635
// orthogonal direction ( upper-left to bottom-right )
を参考にすればいいじゃん
具体的には
左上から右下が[i+k][j+k] k++
で実現されているから
[i+k][j-k] k++
とかやればいいよ
661638:04/07/09 01:38
>>658
char c;
int i;
scanf("%x",&c);
i=c;
printf("%d",c);

でやってみたのですが、123を入れると10進で35と表示されてしまいます・・・
>>638
#include <stdio.h>
#include<math.h>
int main(void)
{
int i;
unsigned int in;
scanf("%x",&in);
printf("%d",in);
for(i=31;i>=0;i--)
{
if((in & (unsigned int)pow(2,i)) == 0)
printf("%s","0");
else
printf("%s","1");
}
return 0;
}
663635:04/07/09 01:44
>>660
しかし、それで実行すると…

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)


こんなこと言われてだめぽになってしまいます。
664638:04/07/09 01:45
>>662
ありがとう!
このご恩はわすれません!
>>635
事前の for ループのインデックス調整した?
多分こう
for ( i=4; i<bsize; i++ ) {
for ( j=0; j<bsize-4; j++ ) {
count = 0;
for ( k=0; k<5; k++ ) {
if ( board[i-k][j+k] == turn ) count++;
}
if ( count == 5 ) flag = 1;
}
}
666635:04/07/09 01:55
>>665
ウホッ! いいお兄さん…
それで実行してみたところ解けました。
このご恩は十年以上忘れないと思います。ありがとうございました。
667665:04/07/09 01:59
>>666
頼むからすぐ忘れて

それはそうと
>>652

#include<stdio.h>

int main(void){
int input,i;
scanf("%d",&input);
for(i=2;input>1;i++){
while(input%i==0){
printf("%d\n",i);
input/=i;
}
}
return(0);
}
ファイルの行数をカウントするプログラムで
最終行に改行がなくても行数分カウントするにはどう改良すればよいのでしょうか

元のプログラム

#include <stdio.h>

#define IN 1/* 単語の中 */
#define OUT 0/* 単語の外 */

main()
{int c, nl, nw, nc, state;

state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n",nl,nw,nc);
}
>>668
#include <stdio.h>

int
main()
{
    int nLines = 0;
    char szDummy[ 128 ];
    FILE* pIn = fopen( "nullpo.txt", "r" );

    if( pIn == NULL )
        return 0;

    while( fgets( szDummy, sizeof( szDummy ), pIn ) )
        nLines ++;

    printf( "%d", nLines );

    fclose( pIn );

    return 0;
}

こんなんでどう?
670デフォルトの名無しさん:04/07/09 02:43
今度Cの課題でゲーム作りですが、iアプリにあるNS−TOWERみたいなやつを作ろうと思っています。C言語だとどんな感じのプログラムになるか教えていただきたいのですが。
>>670
#include "stdafx.h"
#include "nstower.h"

int WINAPI
WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, char* pszCmdLine, int nShowCmd )
{
    CNSTower theNSTower;

    if( FAILED( theNSTower.Create( hInst ) ) )
        return 0;

    return theNSTower.Run();
}
672デフォルトの名無しさん:04/07/09 02:47
これコンパイルしたらどうなりますか?
すればわかるんじゃねぇの?
674デフォルトの名無しさん:04/07/09 02:58
>>671
すいません、わかりました。どうもありがとうございました。
675デフォルトの名無しさん:04/07/09 02:59
動きとかどうすればいいですか?
同じエサで二度釣る
>>669
そんな変えなきゃムリだったのか・・・
ありがとうございます。
>>677
128バイトしかバッファが無いので、そこだけ自力でなんとかすれば?
679デフォルトの名無しさん:04/07/09 03:40
RLC回路(単純にRLCを直列に接続したもの)の4点間の電圧をそれぞれ求めるという事をC言語使ってあらわすとどういう風になるんですか?
C言語初心者なんでなにからやればいいかさぱーりわかりません。
>>679
計算式を書いてみなさい。
681デフォルトの名無しさん:04/07/09 04:22
配列に代入された数値を小さい順に並べかえるプログラムを作りなさい。
@数値は配列numbers[ ]に既に代入されているものとし、
  変数 n には代入された数値の個数が代入されているものする。

(例)
  int numbers[10] = {83,48,3,30,96,16,39,67,52,73};
int n = 10;

 上のようにするとその出力は 3,16,30,39,48,52,67,73,83,96 となる。

という問題なんですが、何度やってもうまくいきません。
どなたかご教授願えませんでしょうか。
682679:04/07/09 04:33
>>670
すいません風呂入ってました。
電圧Eの時 Q/C + L*dI/dt + R*I = E
でいいんですかね?
683679:04/07/09 04:34
>>680
の間違い
>>682
違います
なるべく簡単なやつにしてみたよ。
>>681

#include <stdio.h>
int main(){
int numbers[10] = {83,48,3,30,96,16,39,67,52,73};
int n = 10;
int i, j, t;

for(i=0; i<n; i++){
for(j=i+1; j<n; j++){
if(numbers[i]>numbers[j]){
/* より小さいものをみつけたら交換 */
t = numbers[i];
numbers[i] = numbers[j];
numbers[j] = t;
}
}
}

for(i=0; i<n; i++){
printf("%d", numbers[i]);
if(i==n-1){/*最後の要素だったら改行を追加*/
printf("\n");
}else{/*最後の要素でなければカンマを追加*/
printf(",");
}
}
return 0;
}
686679:04/07/09 07:35
>>684
回路全体の式はこれで駄目なんですか?

どこが違うのか教えてほしいです。
687681:04/07/09 08:58
>685
ありがとうございます!恩に着ます!(m_ _ m)
>679
C言語初心者以前に、電気回路初心者だろう。
RLC回路を話題にしてるのに
>Q/C + L*dI/dt + R*I = E
は酷いぞ。
I (R + jwL + 1/(jwC)) = V
程度も分からないのにC言語で表わすなんて無理。
ちゃんとωと表記しなさい>>688
690 c初心者:04/07/09 12:30
あるクラス全員の試験の点数を集計して,平均点,最高点,最低点、
各個人の偏差値を計算する
プログラムを作ってください。ただし,全員の試験の点数は、
配列に初期値を設定する方法に従って,
float data[10]={47,56,30,89,50,63,70,95,12,69};
とする。また、最高点,最低点はif文を使って求めなさい。
ただし,偏差値は
偏差値=10×(素点−平均点)/標準偏差+50
で計算する。
という問題です。平均点はfor文を使って全員の得点の和を求めた後、
人数分で割って求めることができたのですが、それ以外はさっぱりです。
最高、最低点はforとifでなんとかできないかとやっているんですが、、、
どなたかお助け下さい!
691690:04/07/09 12:37
1 N 1 N
S= { --- Σ (xi-xav)^2 }^1/2 , (ただし, xav= -- Σ xi )
N-1 i=1   N i=1
すみません。うっかりしてました。標準偏差Sは上のようにして求めます。
どなたか>>690をお願いします。
最高点はforとif使え
for(i=1,max=data[0],min=data[0];i<10;i++){
if(max<data[i])
max=data[i];
if(min>data[i])
min=data[i];

今コンパイルできる環境にないから合ってるかどうかはワカンネ
偏差値は余裕でねーの?
ってゆーか標準偏差の求め方がそれじゃ俺にはさっぱりぷー
694690:04/07/09 12:41

S= { 1/(N-1)Σ (xi-xav)^2 }^1/2 , (ただし, xav= 1/N*Σ xi )
ずれた、、、重ねてすみません>>691は上式です。
 
for (i=0, max=min=data[0]; i<10; i++) {
if (max < data[i]) max = data[i];
if (min > data[i]) min = data[i];
}
printf("最高点%3d\n最低点%3d", max, min);
俺はエスパーだから分かるぞ。こう書きたかったんだろ。
    1  N                       1 N
S= { --- Σ (xi-xav)^2 }^1/2 , (ただし, xav= -- Σ xi )
  . N-1 i=1                      N i=1
_| ̄|○かぶった
|・∀・|ノ コンパイルしてないよー。intにしちゃったよ
#include <stdio.h>
#include <math.h>
int main()
{
int data[10]={47,56,30,89,50,63,70,95,12,69};
int i,n=sizeof(data)/sizeof(data[0]);
int sum,sum2,min,max;
double s;
double ave;

sum=sum2=0;
min=max=data[0];
for(i=0;i<n;i++){
if(max<data[i])max=data[i];
if(min>data[i])min=data[i];
sum+=data[i];
sum2=data[i]*data[i];
}
s=sqrt((sum2-(double)sum*sum/n)/n);
ave=sum/n;

for(i=0;i<n;i++)printf("%d人目\n",10*(data[i]-ave)/s+50);

printf("平均点:%d\n",ave);
printf("最高点:%d\n",max);
printf("最低点:%d\n",min);
return 0;
}
標準偏差ってどうすんだべか・・
よ〜かんまん、sqrt: DOMAIN error こんなのがでる気がしる。
関係ないけど、ガウス記号ってどんなのだっけ?[]?
>>690
|・∀・|ノ あれ?こっちでした
#include <stdio.h>
#include <math.h>
int main()
{
int data[10]={47,56,30,89,50,63,70,95,12,69};
int i,n=sizeof(data)/sizeof(data[0]);
int sum,sum2,min,max;
double s;
double ave;

sum=sum2=0;
min=max=data[0];
for(i=0;i<n;i++){
if(max<data[i])max=data[i];
if(min>data[i])min=data[i];
sum+=data[i];
sum2+=data[i]*data[i];
}
s=sqrt((sum2-(double)sum*sum/n)/n);
ave=(double)sum/n;
printf("%f\n",s);
for(i=0;i<n;i++)printf("%d人目の偏差値:%f\n",i,10*(data[i]-ave)/s+50);

printf("平均点:%f\n",ave);
printf("最高点:%d\n",max);
printf("最低点:%d\n",min);
return 0;
}
>>701
その通りだ。良い子だから帰れ
ありがとう!良い子だから居着いちゃう!!!
>>702
なんか違うぞ。誤差でるし。
羊羹あげるー ( ・∀・)ノミ□
居着くなら行列の和差積行列式でも算出するファイル作れ
709613:04/07/09 13:00
>>656
ありがとうございます。無事コンパイルできました。
このご恩は忘れません。
>>708
宿題なの?
>>702
おまけ
printf("%f\n",s);
- for(i=0;i<n;i++)printf("%d人目の偏差値:%f\n",i,10*(data[i]-ave)/s+50);
+ for(i=0;i<n;i++)printf("%d人目の偏差値:%f\n",i+1,10*(data[i]-ave)/s+50);
誤差って?
偏差値の小数点以下を求めるという行為には意味が無いらしい。学力判定用の偏差値という基準を作った人曰く。
>>710
宿題の一部かな?もう作ったけどな
漏れも作ったよ
716デフォルトの名無しさん:04/07/09 13:20
簡単な2画像処理についての宿題。
ラベリング処理(連結している島にラベルをつけていく)を再帰を
つかって高速にやりたいのですが教えてちょ!|・∀・|ノ 
ちょっとやったけどバグちゃって
エスパー、出番だぞ。
エスパー魔美
前髪きりすぎた
>>716
島の定義は?
2画像処理って何?
>>721

int img[8][8]={
  0,0,0,1,0,0,0,0,
  0,0,0,0,1,0,0,0,
  0,0,0,0,0,0,0,0,
  0,1,1,1,1,1,0,0,
  0,0,0,0,1,0,0,0,
  0,0,0,1,1,0,0,0,
  0,0,1,0,0,1,0,0,
  0,1,0,0,0,1,1,0,
};
723716:04/07/09 13:40
島の定義:>>722のように1が連結している塊をひとつの島としています。
連結とは上下左右に4方向につながっている場合と、それに斜め方向をたした
8方向の場合がある。一応後者で考えてます。
724デフォルトの名無しさん:04/07/09 13:43
おねがします。たすけてちょ〜
課題1:簡単な電卓を作る(四則演算で)。
条件:if文を使い、分岐させる。
また、次の流れで入力をし結果を出力する。
1.数1を入力しなさい
2.数2を入力しなさい
3.演算子を入力しなさい
4.結果は・・・・
という感じです。

課題2:課題1のソースに対して機能を各関数にて(プロトタイプ宣言したもの)
作りなさい。
課題3:課題1のものにたいして以下の機能を追加しなさい。
1.While文等をいれて繰り返す
つまり、計算終了後、計算続ける? y/n
yを選択すると続行、nを選択すると終了

というかだいを出せれましたが・・・いまいちつかめません。
ようかんまん、おねがします。
725ようかんまん:04/07/09 13:48
>>690
なんどもごめん
s^2=1/(N-1)Σ(x-ave)^2
  =1/(N-1){Σx^2-ave^2}

s=sqrt((sum2-(double)sum*sum/(n*n))/(n-1));
726デフォルトの名無しさん:04/07/09 13:55
課題助けてーー
16進数を入力するプログラムを作れ。
(注意)16進数は、一桁で0〜15までの数を表し、16になると位(桁)
が上がる。そのため各桁を表示するのに0〜9までの数字に加えてアル
ファベットのA〜Fまでを使用する。
使ってるソフトはCYGWINB20です。
scanfは使わないらしいです、、、
>> 724

/* 課題@ */
#include<stdio.h>

int main()
{
  int x,y;
  char p;

  printf("数1を入力しなさい.");
  scanf("%d", &x);
  printf("数2を入力しなさい.");
  scanf("%d", &y);
  printf("演算子を入力しなさい.");
  scanf("%1s", &p);
  
  if (p == "+")
    printf("結果は %d\n", x+y);
  if (p == "-")
    printf("結果は %d\n", x-y);
  if (p == "*")
    printf("結果は %d\n", x*y);
  if (p == "/")
    printf("結果は %d\n", x/y);
  
  return 0;
}
>>726
sscanf()とかstrtol()とかなら使ってもいいの?
>>727
× p == "+"
○ p == '+'
730724:04/07/09 14:10
>>727さんありがとうございます。
でも・・・コンパイルがとおらないです・・・orz 
731727:04/07/09 14:14
/* 直してみたぞ */

/* 課題@ */
#include<stdio.h>

int main()
{
int x,y;
char p;

printf("数1を入力しなさい.");
scanf("%d", &x);
printf("数2を入力しなさい.");
scanf("%d", &y);
printf("演算子を入力しなさい.");
scanf("%1s", &p);

if (p == '+')
printf("結果は %d\n", x+y);
if (p == '-')
printf("結果は %d\n", x-y);
if (p == '*')
printf("結果は %d\n", x*y);
if (p == '/')
printf("結果は %d\n", x/y);

return 0;
}
>>727
char p;
scanf("%1s", &p);

↑こういう使い方って大丈夫なのかね?

>>732
'\0'は?
('-')
ようかんまんって、四六時中居るのな・・・
いつ寝てるんだ?
3交代制ですから
#define YOUSO 10

int a[YOUSO] = {2,4,6,8,10,12,14,16,18,20};
int b[YOUSO] = {3,6,9,12,15,18,21,24,27,30};


ポインタを使って、配列aの配列内順序を逆にして、配列bに転送してください。
int i;
for (i = 0; i < YOUSO; i++)
 b[i] = *(a + YOUSO - i);
- b[i] = *(a + YOUSO - i);
+ b[i] = *(a + YOUSO - i - i);
う、恥ずかしいミスしてた。スルーよろ
>>737

#define YOUSO 10

int a[YOUSO] = {2,4,6,8,10,12,14,16,18,20};
int b[YOUSO] = {3,6,9,12,15,18,21,24,27,30};

void rev()
{
int *ap = a;
int *bp = b + YOUSO - 1;
while(ap < a + YOUSO) *bp-- = *ap++;
}

正しいやつ:

#include <stdio.h>
//#define DEBUG
#define YOUSO 10

int main(void) {
    int i;
    int a[YOUSO] = {2,4,6,8,10,12,14,16,18,20};
    int b[YOUSO] = {3,6,9,12,15,18,21,24,27,30};

    for (i = 0; i < YOUSO; i++)
        b[i] = *(a + i);
#ifdef DEBUG
    for (i = 0; i < YOUSO; i++)
        printf("%d ", b[i]);
    printf("\n");
#endif

    return 0;
}
>>742
まだ間違ってるよ。

-         b[i] = *(a + i);
+   b[i] = *(a + YOUSO - i - 1);
なんでbに初期値が入ってるか解らん。
>>744
きちんと書き換わってる事を後で確認するためじゃないかとオモタ。
3 6 16 14 12 10 8 6 4 2 みたいな変な結果になったら分かるように。
>>726
#include <stdio.h>
#include <ctype.h>
#include <string.h>

// 不正な文字が使用されていたら、-1を返す。
// オーバーフローには対応しない。
unsigned int gethex()
{
 static const char table[] = "0123456789ABCDEF";
 char s[100];
 char *p;
 int i, pos;
 unsigned int val;
 
 fgets(s, sizeof s, stdin);
 val = 0;
 for(i = 0; s[i]; i++)
 {
  p = strchr(table, toupper(s[i]));
  if(p == 0) return -1;
  pos = p - table;
  val = val * 16 + pos;
 }
 return val;
}
全角スペースでインデントしてるから、半角に置換してつかってください。
動作確認してないから、バグがあるかも。
別に全角のままでも問題なくね?
大有りだ
>>741-743
ありがとうございます♪
コンパイラによっては駄目な悪寒。
>>748
>>750
まじで?
最近のコンパイラは全角スペースOKなの?
#include <stdio.h>

int main(void) {
 return 0;
}

ws.c: In function `main':
ws.c:4: error: stray '\129' in program
ws.c:4: error: stray '@' in program
おれ全角スペースOKなコンパイラ使ったことない
755ようかんまん ◆nup627Y0Gs :04/07/09 15:45
そこでひまわりですよ
>>755
トリップキー公開汁
ああ、自らあげてしまった…|・∀・;|
あー勝手にOKだと思ってただけかも。
そういやわざわざ全角スペースなんて使ったことないしなぁ。
スマソ
上のほうから見返してて思ったんだけど
>>17
> stdio.hにあって入出力と関係のないのはsprintfだけ。

>>23
> >>17
> sscanf

共に入出力関係してるような。
sprintfはsprintf->vsprintf->vfsprintfというようなラッパになってる(最終的に文字列は仮想的なファイルとして扱われる)し
sscanfも同様にsscanf->vsscanf->vfscanfとなってる。
761724:04/07/09 15:52
ごめ・・・・
みすてないで〜〜orz
おねがします。・・・
>>760
マリガトー
>>761
課題(1)

#include <stdio.h>

int main()
{
 int n1, n2, ans;
 char op[100];
 printf("数1を入力しなさい");
 scanf("%d", &n1);
 printf("数2を入力しなさい");
 scanf("%d", &n2);
 printf("演算子を入力しなさい");
 gets(op);
 
 
 switch(op[0])
 {
 case '+': ans = n1 + n2; break;
 case '-': ans = n1 - n2; break;
 case '*': ans = n1 * n2; break;
 case '/': ans = n1 / n2; break;
 default: ans = 0; break;
 }
 printf("結果は%dです。", ans);
 return 0;
}
>>761
課題(2)
#include <stdio.h>

int input_int(char*);
int input_char(char*);
int calc(int,int,char);
void print_ans(char *);

int main()
{
 int n1, n2, ans;
 char op;
 n1 = input_int("数1を入力しなさい");
 n2 = input_int("数2を入力しなさい");
 op = input_char("演算子を入力しなさい");
 ans = calc(n1, n2, op);
 print_ans(ans);
 return 0;
}

int input_int(char* str)
{
 int n;
 char buf[100];
 printf("%s", str);
 fgets(buf, sizeof buf, stdin);
 sscanf(buf,"%d", &n);
 return n;
}
>>761
課題(2)の続き
int input_char(char* str)
{
 char buf[100];
 printf("%s", str);
 fgets(buf, sizeof buf, stdin);
 return buf[0];
}

int calc(int n1, int n2, char op)
{
 int ans;
 switch(op[0])
 {
 case '+': ans = n1 + n2; break;
 case '-': ans = n1 - n2; break;
 case '*': ans = n1 * n2; break;
 case '/': ans = n1 / n2; break;
 default: ans = 0; break;
 }
 return ans;
}

void print_ans(int ans)
{
 printf("結果は%dです。\n", ans);
}
>>761
課題(3) 課題(2)のmainを置き換える。
int main()
{
 int n1, n2, ans;
 char op, yn;
 for(;;)
 {
  n1 = input_int("数1を入力しなさい");
  n2 = input_int("数2を入力しなさい");
  op = input_char("演算子を入力しなさい");
  ans = calc(n1, n2, op);
  print_ans(ans);

  yn = input_char("計算を続けますか(y/n)");
  if(yn == 'y' || yn == 'Y') break;
 }
 return 0;
}
>>761
インデントは全角スペースだから半角に置換すること。
コンパイルも動作確認もやってないから、デバッグは自分でやること。
>>767
× switch(op[0])
○ switch(op)

>>768
×  if(yn == 'y' || yn == 'Y') break;
○  if(yn == 'n' || yn == 'N') break;

文章的な質問なのですが、
循環リストの長所と短所および、どのようなアプリケーションに
循環リストは向いているかを教えてください。
>>716
|・∀・|ノ 1ピクセルだけの島が分けられてなかったよ

fill関数の
for(i=0;i<8;i++){
の前に
img_pset(img,x,y,id);
をいれてね
773デフォルトの名無しさん:04/07/09 17:31
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1089361761

↑この様な課題を出されたんですが、何をすればいいのか
全くわかりません。どなたか教えて下さい!!
「プログラムを作る」プログラムを作る
まで読んだ
775761:04/07/09 17:55
>>764さま
ソースありがとうございました。
申し訳ないです。
swich文でもできるのですね。
でも、課題がif 文を使ってかけていうことでしたので・・・
もうしわけないです。
もう一度、If 文をつかってのソースを書いていただけないでしょうか?
お手数をかけますが、よろしくおねがしますです。orz
ご迷惑をおかけします。
776669:04/07/09 17:56
(´・ω・`)
/* helloworld 作成プログラム */
#include <stdio.h>
#include <stdlib.h>
int main()
{
char filename[] = "hello.c";
char str[256];
FILE *fp;
puts("文字列を出力するソースファイルを作成します");
puts("文字列を入力してください");
gets(str);
if ((fp = fopen(filename, "w")) == NULL)
{
printf("「%s」のオープンに失敗。プログラムを終了します。\n", filename);
exit(1);
}
fputs("#include <stdio.h>\n\n", fp);
fputs("int main(void)\n", fp);
fputs("{\n", fp);
fputs(" puts(\"", fp);
fputs(str, fp);
fputs("\");\n", fp);
fputs(" return 0;\n", fp);
fputs("}\n", fp);
fclose(fp);
puts("hello.cを作成しました");
return 0;
}
>>775
if(op[0]=='+') ans=n1+n2;
else if(op[0]=='-') ans=n1-n2;
else if(op[0]=='*') ans=n1*n2;
else if(op[0]=='/') ans=n1/n2;
else ans=0;
>>777
fputs("str");
780690:04/07/09 18:13
亀レスですみません。皆さんどうも有難うございます。
ようかんまん、ありがと〜
781デフォルトの名無しさん:04/07/09 18:27
課題の考察を教えてください。
プログラムの内容は、3元1次連立方程式をガウスの消去法で解くものです。
それで、考察内容は『関数pivotは,3つの引数を利用しているが,これを2つに減らす方法はないか考察せよ。』です。
よろしくお願いします〜
数学はわからんよ。
(#゚Д゚)ハァ?
きっとpivotの引数のうちの1つを戻り値にすればいいんだよ。
>>781
100
0ab
0cd

=

ab
cd
学校の宿題で以下のような問題が出題されました・・・・
どなたかご教授をいただけたらお願いします
3つの1次元整数配列a,b,cのアドレスと配列の大きさを受け取り、
配列aのデータを、配列bには順方向、配列cには逆方向に代入して返す関数を作成
せよ。ただしmain関数では最初に配列aに適当なデータを初期値代入し関数を呼び出した後は配列a,b,cの要素を出力せよ。
順方向とはa[0]をb[0]、a[1]をb[1] a[9]をb[9]に代入することです
逆方向とはa[0]をc[9]、a[1]をc[8] a[9]をc[0]に代入することです
間をはしょるときは3点リーダなりなんなり入れて欲しいもんだ
#include<stdio.h>

void func(const int* a, int* b, int* c, unsigned int size)
{
int i;

for (i=0; i<size; i++) {
*(b+i) = *(a+i);
*(c+size-i-1) = *(a+i);
}
}



int main()
{
int a[] = { 3, 1, 4, 1, 5, 9 }
int b[6],c[6];
int i;

func(a, b, c, 6);

/* 結果表示 */
for (i=0; i<6; i++);
printf("[%d] a=%d, b=%d, c=%d \n", i, a[i], b[i], c[i]);

return 0;
}
ようかんまんてあわてんぼうだな
790デフォルトの名無しさん:04/07/09 20:22
>>784
それは本当ですか?!
レポートに『引数の代りに戻り値を利用すればよいと思われる』って書いて
なんだこいつわ!?ってことにはならないでしょうか??
>>790
きっと>>781を読んで「なんだこいつわ!?」ってことになってる人は多い
>>790
レポートに「...と思われる」なんて書くなよ。
普通に「思われる」って書いてるけどな〜ヤバいのか?
「る」を書かなかったらヤバいとは思うけど
794792:04/07/09 20:53
「思われる」っていう空想じゃなくて
「...である。」って言い切れる事実を書けってこと。
思った理由もちゃんと書いてあればとりあえずは大丈夫だと思われる。
796792:04/07/09 21:03
>>795
そっすね。
つい論文をチェックする感覚でレスしてしまった。
797デフォルトの名無しさん:04/07/09 21:38
問)99!と100!を求め、表示するプログラムを作成しろ。
なお、配列を200個用意し、それぞれの桁に割り振って計算せよ。


この問題がわからないんです。
どうやって用意した配列をそれぞれの桁に割り振るのとか・・・。

まだソースは白いままで・・つД`)・゚・。・゚゚・*:.。..。.:*・゚

お願いします。。
798797:04/07/09 21:39
797(ナクナ)なのに泣いてますね(苦笑

かきわすれましたが、C言語です。
おねがいします
>>797-798できたよー

char fact_100[] = {
9,3,3,2,6,2,1,5,4,4,3,9,4,4,1,5,2,6,8,1,6,9,9,2,3,8,8,5,6,2,6,6,7,0,0,4,9,0,7,1,
5,9,6,8,2,6,4,3,8,1,6,2,1,4,6,8,5,9,2,9,6,3,8,9,5,2,1,7,5,9,9,9,9,3,2,2,9,9,1,5,
6,0,8,9,4,1,4,6,3,9,7,6,1,5,6,5,1,8,2,8,6,2,5,3,6,9,7,9,2,0,8,2,7,2,2,3,7,5,8,2,
5,1,1,8,5,2,1,0,9,1,6,8,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

char fact_99[] = {
9,3,3,2,6,2,1,5,4,4,3,9,4,4,1,5,2,6,8,1,6,9,9,2,3,8,8,5,6,2,6,6,7,0,0,4,9,0,7,1,
5,9,6,8,2,6,4,3,8,1,6,2,1,4,6,8,5,9,2,9,6,3,8,9,5,2,1,7,5,9,9,9,9,3,2,2,9,9,1,5,
6,0,8,9,4,1,4,6,3,9,7,6,1,5,6,5,1,8,2,8,6,2,5,3,6,9,7,9,2,0,8,2,7,2,2,3,7,5,8,2,
5,1,1,8,5,2,1,0,9,1,6,8,6,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

printf(" 99! = %s\n", fact_99);
printf("100! = %s\n", fact_100);
あ、間違った。
配列初期化は
'9','3','3','2','6','2','1','5','4','4','3','9','4','4','1','5','2','6','8','1',
'6','9','9','2','3','8','8','5','6','2','6','6','7','0','0','4','9','0','7','1',
以下略で。
>>797

#include<stdio.h>

typedef struct bint{
int value[200];
int max;
}BINT;

void mul(BINT *a,int b){
int i,carry;

carry=0;
for(i=0;i<a->max;i++){
a->value[i]*=b;
a->value[i]+=carry;
carry=a->value[i]/10000;
a->value[i]%=10000;
}
if(carry){
a->value[a->max]=carry;
a->max++;
}
}
void print(BINT *a){
int i;

printf("%d",a->value[a->max-1]);
for(i=a->max-2;i>=0;i--){
printf("%04d",a->value[i]);
}
printf("\n");
}

int main(void){
BINT a;
int i;

a.max=1;
a.value[0]=1;
for(i=1;i<=100;i++){
printf("%d,",i);
mul(&a,i);
print(&a);
}
return(0);
}

803797:04/07/09 22:18
おお
みなさんありがとうございますー
って>>799さんのある意味すごいですねw
全部かくなんてーw

>>801
すごいですね。1から100まで全部表示させるなんて。
でもなんかすごい複雑ですねー。
まず
typedef struct bint{
int value[200];
int max;
}BINT;
ってのからわかりません(´Д⊂

他わからないこともいっぱいありそうです(;´Д`)
今から出かけるのでまた明日ゆっくり解読します(;´Д`)

また出没するかもしれませんので、よろしくお願いします。
804786:04/07/09 22:21
>>788
ようかんまん回答ありがとうございますOTL
ですがこのプログムを実行させてみるとaの値(a=)が1245120と出力されるのですが・・・・(´・ω・`)
>>804
intを全部charに置換
806805:04/07/09 22:25
嘘ついてしまった。ひとまずforの行の;を削ったとして、あとは何だろう
#include <stdio.h>
int keta[200];
void multiply(int f);
void display(void);

int main(){
int n,f;
keta[0]=1;
for(n=1; n<200; n++) keta[n]=0;
for(f=2; f<=99; f++) multiply(f);
display();
keta[0]=1;
for(n=1; n<200; n++) keta[n]=0;
for(f=2; f<=100; f++) multiply(f);
display();
return 0; }

void multiply(int f){
int n,overflow;
for(n=0; n<200; n++) keta[n]=keta[n]*f;
for(n=0; n<200; n++) {
if (keta[n]>10){
overflow=keta[n]/10;
keta[n]=keta[n] % 10;
keta[n+1]=keta[n+1]+overflow;
}}}

void display(void){
int n=199;
while (keta[n]==0){ n--;}
while (n>=0) {printf("%d",keta[n]);n--;}
printf("\n"); }
808805:04/07/09 22:29
あ、やっぱそれだけでよかった
for (i=0; i<6; i++);を
for (i=0; i<6; i++)に。
809786:04/07/09 22:50
>>808
あ、できました^▽^助かりました
ようかんまん?ほんとにありがとうございました。
810807:04/07/09 23:11
>>807はバグがあります。正しい答えがでません。
811デフォルトの名無しさん:04/07/09 23:26
銀行のATMシステムの簡単なモデル

#include <stdio.h>

main()
{
int x, y, z;
x = 10000;
scanf("%d", &y);
z = x + y:
printf("balance = %d yen \n, z)
}

問題
(1)入金する金額を入力する前に、「How much?」というメッセージを表示するように変更せよ。
(2)2回連続して入金できるように、プログラムを修正せよ。

(1)は多分x = 10000;のあとに
printf("How much? \n");
って入れればいいんだろうけど(2)が全く分かりません。オマイラタスケテorz
812デフォルトの名無しさん:04/07/09 23:27
Cの宿題が出たんだけど初心者のおりにはさっぱり
だれか、つくってくりくり。


10行×3列の配列の1列目に1〜10の数を入れ、2列目にその数の2乗した値を入れ
3列目に3乗した値を入れる。次に、標準入力から3乗値を入力させ、その値を
探して
3乗根と2乗値を表示するプログラムを作りなさい。テーブルサイズを容易に変
更できる
よう、サイズ指定のない配列を使え。


3つの文字ポインタを作成し、最初のポインタが「one」を、2番目のポインタ
が「two」を、
3番目のポインタが「three」を指すように初期化する。そして、この3つの文
字列の順序
を「one two three」、「two one three」など6通りすべての並びを表示するプ
ログラムを
つくれ。
>>811-812
人に頼む態度か?それが。
#include <stdio.h>

int main(void)
{
int x, y, z;
int i;
x = 10000;
for(i=0;i<=1;i++){
scanf("%d", &y);
z = x + y:
printf("balance = %d yen \n, z)
}
return 0;
}
815デフォルトの名無しさん:04/07/09 23:34
>>813
申し訳ございません
どなたか作ってください
重ね重ねお願いいたします
>>812
サイズ指定のない配列って、mallocを使えってことかな?
817811:04/07/09 23:37
>>813
スマソ単位かかってて切羽詰ってた(;´Д`)

>>814
回答ありがとうございます!
おかげで夏休み、不安を残さず迎えられそうです(゚∀゚)
>>816
いいえ
mallocは使わなくてもいいです。
819814:04/07/09 23:40
そういうことなら嘘プログラム書けばよかったな
>>812
ヽ|・∀・|ノあいよ〜 (1問目は誰かやってると思うから2問目)

#include <stdio.h>

int main(void){
char *mojip[3];
int i, j, k;
mojip[0] = "one"; mojip[1] = "two"; mojip[2] = "three";
for(i=0; i<3; i++){
for(j=0; j<3; j++){
for(k=0; k<3; k++){
if(i!=j && i!=k && j!=k) printf("%s %s %s\n",mojip[i],mojip[j],mojip[k]);
}}}
return 0;
}
「サイズ指定の無い配列」というのがわからん。
>>819
大丈夫、このままだと動かないから
823812:04/07/09 23:54
>>820
ようかんマン様
ありがとうございます
>>821
こいういことでは?
int hairetsu[3][] = { { 1, 2, 3, 4 }, { 1, 4, 9, 16 }, { 1, 8, 27, 64 } };
         ↑これが「サイズ指定の無い」ってこと
825824:04/07/09 23:56
これじゃ無理か。
>>824
なるほど。
>>824
俺もそう思った
テーブルサイズを容易に変更できるよう・・・
#define使っとけって意味かな・・・?
int[][] = { {1, 1, 1},
{2, 4, 8},
{3, 9, 27},
{4, 16, 64},
{5, 25, 125},
{6, 36, 216},
{7, 49, 343},
{8, 64, 512},
{9, 81, 729},
{10, 100, 1000} };

こういう風にするのかな?
エラー
/* 812 (1) 前半 */

#include<stdio.h>
#define TABLE_SIZE 10

int table[TABLE_SIZE][3];

void table_init()
{
int i;

for (i=1; i<=TABLE_SIZE; i++) {
table[i-1][0] = i;
table[i-1][1] = i*i;
table[i-1][2] = i*i*i;
}
}
/* 812 (1) 後半 */

void func(int x)
{
int i;

for (i=0; i<TABLE_SIZE; i++) {
if (table[i][2] == x) {
printf("3乗根 %d\n", i+1);
break;
}
}

if ((1 <= x) && (x <= TABLE_SIZE))
printf("2乗 %d\n", table[x-1][1]);
}


int main()
{
int x;

table_init();

printf("数値を入力してください.");
scanf ("%d", &x);
func(x);

return 0;
}
>>831
それって、サイズ指定ありでは?
834デフォルトの名無しさん:04/07/10 00:20
ライブニッツの公式よりせいどの良い公式を調べて見つけ、Cプログラムを
作成せよ。またその公式とライブニッツの公式との比較も行え
と言う宿題が出たのですが、がんばっても解けなかったので
よろしくお願い済ます!!
2次元配列だと、両方サイズ指定無しにする訳にはいかないぞ?
>>835
int mat[][3] = {{1,0,0}, {2,0,0}, {3,0,0}, ・・・};

こういうことかと思ったけど。
>>812
一番の問題ちょっと説明いいかげんですね
誰か自分の宿題お願いします。(・_・)/

入力された3値を辺にもつ三角形の種類およびその面積を表示する
プログラムを作成せよ。
ただし「ポインタ変数を引数にもつ関数を作成、使用する」

面積=√s(s-a)(s-b)(s-c)
s=(a+b+c)/2
三辺はそれぞれa,b,cとする。


です。お願いします
int pointer_dunc(int *a){
return *a;
}


int main(){
int a;

pointer_dunc(&a);

}


後は自分で考えろ。
>>838
ポインタが引数の関数を使えないことはないけど、
ポインタの引数の練習にふさわしい問題かなぁ?
出題者の意図がわからん。
#include <stdio.h>
#include <math.h>

int menseki(double a, double b, double c, int *result);

int main(int argc, char *argv[])
{
double result;

if (argv != 4 || !menseki(atof(argv[1], argv[2], argv[3]), &result)) {
printf("なんかヘンよ\n");
} else {
printf("面積 = %f", result);
}
return 0;
}

int menseki(double a, double b, double c, int *result)
{
double s;
/* エラーチェックはもっとあるんで、自力で考えてくれ */
if (a <= 0 || b <= 0 || c <= 0) {
return 0;
}
s = (a + b + c) / 2;
*result = sqrt(s(s-a) * (s-b) * (s-c));
return 1;
}
842838:04/07/10 01:04
>>839,840
教官によると、できるだけ凝ったプログラムにして欲しいと言っていましたが、
問題の意図も解き方も僕にはわかりません。
ポインタの意味すらわからないんで、どうかお願いします。
>>842
意味も意図も考えず紙を埋めるだけ。
それになんの意味があるのか。
さっさとやめてしまえ。路はいくらでもある。
844812:04/07/10 01:06
>>831ー832
ありがとうございます
凝りようもないんだがなあ。。。
>>841
リターン値でエラーを返して、引数で結果を返すってことなら、
ポインタの引数を使う必然性があるな。
気づかなかった。

> if (argv != 4 || !menseki(atof(argv[1], argv[2], argv[3]), &result)) {
これは
if (argv != 4 || !menseki(atof(argv[1]), atof(argv[2]), atof(argv[3]), &result)) {
こうだと思うが。
三角形の種類も表示させるらしいぞ
848838:04/07/10 01:19
>>843
ごもっともです。これが専門ではありませんが
>>846
846さんの言うように修正した、841のプログラムでも、エラーが出ます。
「エラー E2314 26: 関数でないものを呼び出している(関数 menseki )」
どうすればいいんでしょうか??

>>841
ありがとうございまふ
>>848
反省の色無し。と。
三角形のいろんな公式をひっぱってきて判定をガーッとかけまくれば性質抽出は出来るね
>>848
動作確認はしないけど、コンパイルは通るようにしてみた。

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

int menseki(double a, double b, double c, double *result);

int main(int argc, char *argv[])
{
double result;

if (argc != 4 || !menseki(atof(argv[1]), atof(argv[2]), atof(argv[3]), &result)) {
printf("なんかヘンよ\n");
} else {
printf("面積 = %f", result);
}
return 0;
}

int menseki(double a, double b, double c, double *result)
{
double s;
/* エラーチェックはもっとあるんで、自力で考えてくれ */
if (a <= 0 || b <= 0 || c <= 0) {
return 0;
}
s = (a + b + c) / 2;
*result = sqrt(s * (s-a) * (s-b) * (s-c));
return 1;
}





















>>838
ヽ|・∀・|ノ 三角形種類表示

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

double Triangular(int a,int b,int c,char *kind){
double s = (a+b+c)/2;
s = sqrt(s*(s-a)*(s-b)*(s-c));
if(a == b && b == c ) strcpy(kind,"正三角形");
else if(a == b || b == c || a == c) strcpy(kind,"二等辺三角形");
else if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) strcpy(kind,"直角三角形");
else strcpy(kind,"三角形");
return s;
}

int main(){
int a, b, c;
double s;
char kind[100], gc[100];
printf("A="); a=atoi(gets(gc));
printf("B="); b=atoi(gets(gc));
printf("C="); c=atoi(gets(gc));
s = Triangular(a, b, c, kind);
printf("%s 面積=%f",kind,s);
return 0;
}
854838:04/07/10 01:34
>>851
なんかへんよと表示されるだけです・・・。

どなたか、三角形の種類の判別もできるプログラムお願いします。
2等辺とか、正三角とかの判別です。

お忙しいと思いますがどうかお願いします。
>>854
コマンドラインで数字を渡してる?
856838:04/07/10 01:38
おお!ようかんまんさんありがとうございます!感謝です('-'*)
直角二等辺三角形とかは?
#include <stdio.h>
#include <string.h>
#include <math.h>

double Triangular(int a,int b,int c,char *kind){
double s = (a+b+c)/2;
s = sqrt(s*(s-a)*(s-b)*(s-c));
if(a == b && b == c ) strcpy(kind,"正三角形");
else if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a){
if(a == b || b == c || a == c) strcpy(kind,"直角二等辺三角形");
else strcpy(kind,"直角三角形");
}else if(a == b || b == c || a == c) strcpy(kind,"二等辺三角形");
else strcpy(kind,"不等辺三角形");
return s;
}

int main(){
int a, b, c;
double s;
char kind[100], gc[100];
printf("A="); a=atoi(gets(gc));
printf("B="); b=atoi(gets(gc));
printf("C="); c=atoi(gets(gc));
s = Triangular(a, b, c, kind);
printf("%s 面積=%f",kind,s);
return 0;
}
以下の(1)〜(3)の全処理をこの順に行うプログラムを作成してください。
(1) ファイルから以下のフォーマット書籍データを読み込み、構造体に格納する。
   ファイルは /lesson/cs.endo/04Prog1/biblio.txtからコピーして使用する。
 
   書籍データのファイルの抜粋(「著者名」,「書名」,「出版社」,「発行年」の4つの属性がそれぞれカンマで区切られ、1行に1書籍のデータが格納されている)
 (例)B.W.Kernighan & D.M.Ritchie,The C Programming Language,Practice Hall,1988
H.M.Deitel & P.J.Deitei,C How to Program,Prentice Hall,2001

(2) (1)で読み込んだ書籍データすべてを、発行年の昇順に並べ替えて次の形式でファイル(ファイル名 formatted.txt)に出力する。
   ただし並べ替えのアルゴリズムは何を使ってもよいです。まだ、各書籍データの区切りには空白一行を1つ入れてください。
 (例)Author: Brian W. Kernighan & Dennis M. Ritchie
    Title: The C Programming Language
    Publisher: Prentice Hall
    Year: 1988

(3) 書籍データの書名に現れるすべての相異なる単語の出現頻度を求め、標準出力に書き出してください。
   ここで、単語は出現した順に並べるものとします。また、大文字は小文字に読み替え、両者を区別しないでください。
   また、単語のうち次の冠詞と前置詞 a, the, by, in, on, of, to, with は除外し、カウントしないでください。

という課題があるのですが、助けてください。誰かお願いします。
どこまで分かった?
a・w・k
(1)だけ出来た。
(2)まで出来た。
864デフォルトの名無しさん
>>859
(3)がマンドクセ('A`)