C/C++の宿題を片付けます 87代目at TECH
C/C++の宿題を片付けます 87代目 - 暇つぶし2ch175:デフォルトの名無しさん
07/05/16 15:43:15 BE:139752498-2BP(222)
>>173
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=atof(tmp);}
qsort(data,sizeof(data)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}

176:デフォルトの名無しさん
07/05/16 15:44:04
C言語ではないんですがアルゴリズムのフローチャートを書ける方居ますか?
問題1:平均点計算
点数を入力して、平均点を出力するフローを答えなさい[入力した点数が0より小さい時終了する]
問題2:合計
1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい
の2問のフローチャートがどうしてもわからないので何方か解る方がいましたら教えてください
いくら考えても解らないので何方かお願いします

177:デフォルトの名無しさん
07/05/16 15:44:40
>>171 こういう事か?

今、××を見ながらCの勉強をしています。
そこに「ある配列を反転した内容を別の配列にコピーする」というプログラムあり、
それを改造して、「あるひとつの配列の内容を反転する」プログラムを自力で作ってみました。
しかしコンパイルは通るのですが、実行してみると思ったとおりの結果にならなくて困っています。
元のプログラムでは表示用の関数printが2つに分かれており、
それをひとつにまとめてしまったのが原因なのでしょうか?
配列がひとつしか無いので表示用の関数は1つだけにしたいのですが、
上手いやり方はありませんか?

178:デフォルトの名無しさん
07/05/16 16:08:13 BE:67935757-2BP(222)
>>175訂正
#include<stdio.h>
#include<stdlib.h>
int cmpdbl(const double* a,const double* b){return (int)(*a-*b);}
int main(void){double data[10],rank[10];int i;char tmp[256];
for(i=0;i<10;i++){printf("実数%i:",i);fgets(tmp,255,stdin);data[i]=rank[i]=atof(tmp);}
qsort(rank,sizeof(rank)/sizeof(double),sizeof(double),cmpdbl);
printf("data:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,data[i]);}
printf("rank:\n");for(i=0;i<10;i++){printf("[%i]%f\n,i,rank[i]);}return 0;}

179:デフォルトの名無しさん
07/05/16 16:13:28
CUIばっかじゃねーか

180:デフォルトの名無しさん
07/05/16 16:37:06
10個の整数データを木構造に保存し、
順に木をなぞる再起プログラミングを作成せよ.

C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。

181:デフォルトの名無しさん
07/05/16 16:39:22
マルチ
スレリンク(tech板:851番)

182:デフォルトの名無しさん
07/05/16 16:39:26 BE:34937892-2BP(222)
>>180
>順に木をなぞる再起プログラミングを作成せよ.

何の順だ。

183:デフォルトの名無しさん
07/05/16 16:46:38
他人に質問できるレベルにさえ達してないのか

184:デフォルトの名無しさん
07/05/16 17:01:22
>>183
課題をそのままコピーしただけなのですが・・・すいません。

>>182
「順」っていう言葉がなければ大丈夫ですかね?
分かる範囲でいいので、ぜひご指導お願いします。

10個の整数データを木構造に保存し、
木をなぞる再起プログラミングを作成せよ.

C言語。
アルゴリズムとデータ構造。
21日までです。
よろしくお願いします。


185:デフォルトの名無しさん
07/05/16 17:04:21
>>173
#include <stdio.h>
int main(void){
int i,j,rank[10]={0};double data[10];char buf[256];
for(i=0;i<10;){
printf("%d番目の実数を入力して下さい:",i+1);
fgets(buf,255,stdin);
if(!sscanf(buf,"%lf",data+i)) continue;
++i;
}
for(i=0;i<10;++i){
for(j=0;j<10;++j){
if(data[i]<=data[j]) ++rank[j];
}
}
for(i=0;i<10;++i) printf("data[%d]=%f\n",i,data[i]);
for(i=0;i<10;++i) printf("rank[%d]=%d\n",i,rank[i]);
return 0;
}

186:デフォルトの名無しさん
07/05/16 17:18:00 BE:69876094-2BP(222)
>>184
情報が足りねえって言ってるのにさらに減らすのはどういう嫌がらせですか。
「どんな木をどうやってなぞるのか」と聞いてるのに。

187:デフォルトの名無しさん
07/05/16 17:30:17
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
      ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
  課題2:1で作成したプログラムを以下のように修正せよ。
      ・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
      ・計算結果は画面でなくファイルに出力すること。
[3] 環境
 [3.1] Windows
 [3.2] cygwin
 [3.3] C
[4] 期限:5月18日
[5] 特になし

よろしくお願いします。


188:デフォルトの名無しさん
07/05/16 17:47:49
高校1年です

[1] プログラミング
[2] キーボードから固定費・変動費・単価・商品の売れた数を受け取り、収益と収益における固定費・変動費それぞれの割合、純利益を表示するプログラムをC言語で記述せよ
[3] 環境
 [3.1] 窓達XP
 [3.2] Borland C++ Compiler 5.5
 [3.3] C
[4]明日の情基の時間までに提出
[5] 専用のプリントに記述し提出、プログラムの動作を確認できる環境があれば確認して提出。その際、失敗したプログラムは消さないようにすること

動作確認は出来る環境です

一応書いたのですが、固定費割合と変動費割合が算出されません


189:デフォルトの名無しさん
07/05/16 17:49:33
>>188の課題で私が書いたプログラムを晒しときますね
固定費・変動費の割合が0.000000000になる以外は正常に算出されます

{
int tanka,kote,hen,rie,ure_kazu,ure_kane;
float kote_wari,hen_wari;

printf("単価はいくら?\n");
scanf("%d",&tanka);

printf("いくつ売れた?\n");
scanf("%d",&ure_kazu);

printf("固定費用は?\n");
scanf("%d",&kote);

printf("変動費用を算出して入力してください\n");
scanf("%d",&hen);

ure_kane = ure_kazu * tanka;
       rie = ure_kane - (kote + hen);

kote_wari = (kote / ure_kane) * 100;
hen_wari = (hen / ure_kane) * 100;

printf("収益は%d、収益における固定費と変動費の割合はそれぞれ%f%、%f%です。よって貴社の利益は%dです。",ure_kane,kote_wari,hen_wari,rie);

return 0;
}

190:デフォルトの名無しさん
07/05/16 17:55:23
>>189
スレ違い。

整数割る整数は整数になる。実数にしたいなら、キャストしとけ。
ついでに言えば、特にケチる理由がないならdoubleにしとけ。
floatでは、10進換算で7桁程度しか精度がないぞ。
Ex.
double kote_wari = (double) kote / ure_kane * 100.;

191:デフォルトの名無しさん
07/05/16 17:56:03 BE:104814296-2BP(222)
>固定費・変動費の割合が0.000000000になる

理由をまず考えろ。

192:デフォルトの名無しさん
07/05/16 17:56:54
小手割りって何かの技みたいだな。

193:デフォルトの名無しさん
07/05/16 17:58:48
>>190
わかりました
100.0000を超えることはないのでfloatで十分だと思ったのですが…
doubleでやってみますね
キャストはまだ習ってませんがjavaで学んだのでやってみます
ありがとうございました

194:デフォルトの名無しさん
07/05/16 17:59:59
>>191
分かりませんでしたのでここで質問させていただきました
あれ?もともとの公式が間違ってるのかな…?

195:デフォルトの名無しさん
07/05/16 18:04:55
>>194
>190

196:デフォルトの名無しさん
07/05/16 18:05:37
>>190
キャストがよく分からなかったので変数を全てfloatで宣言したら正常に動作しました
本当にありがとうございました

197:デフォルトの名無しさん
07/05/16 18:06:33
hen_wari = (hen / ure_kane) * 100;
hen=200,ure_kane=400の場合、200÷400=0余り200
hen_wari = (200 / 400) * 100;
hen_wari = 0 * 100;
hen_wari = 0;

198:デフォルトの名無しさん
07/05/16 18:10:42
>>196
その大雑把な応用性は現場にはとても必要なものだ
しかし大雑把過ぎると精密さが要求されるプログラムでしくじるかもな

199:デフォルトの名無しさん
07/05/16 18:44:55 BE:104814296-2BP(222)
最低限、作用機序を理解していることが前提だがな。
「理由は分からないけどこうしたら直った」という対処は迷惑でしかない。

200:デフォルトの名無しさん
07/05/16 20:05:27
>>188
この前入学したばかりなんだろ?
なんかレベル高い授業やってんな

201:デフォルトの名無しさん
07/05/16 20:11:29
>>188は高学歴

202:デフォルトの名無しさん
07/05/16 20:14:51
>200
用語が難しそうに見えるだけで、やってることは数字入力に四則演算程度の入門レベルだろ。

203:デフォルトの名無しさん
07/05/16 20:17:02
>>202
高校一年でだぞ?

204:デフォルトの名無しさん
07/05/16 20:45:25
私が高校一年の時はCじゃなくてアセンブリだったな orz どう考えても低(ry

205:デフォルトの名無しさん
07/05/16 20:47:36
高1でアセンブラか。
そりゃずいぶんと低レベルだな。

206:デフォルトの名無しさん
07/05/16 20:52:58
>>205
俺なんか中学のときにトランジスタを・・・


207:デフォルトの名無しさん
07/05/16 20:56:22
それは趣味だろ
義務教育でトランジスタとか触るの?

208:デフォルトの名無しさん
07/05/16 20:58:39
もしかして、ゆとり世代には
「技術」という科目は無いのか?


209:デフォルトの名無しさん
07/05/16 20:58:46
もう20年以上まえになるが...
高校の頃, 必死こいてセグメントレジスタ気にしながら 8086 アセンブラで
lisp 処理系を作ろうとしていた当時の俺って低レベルですか?


210:デフォルトの名無しさん
07/05/16 21:08:09
>>207-208
10年前中学生だった俺は授業の中でトランジスタを触ることがあった。
>>209
低レベルだね


211:デフォルトの名無しさん
07/05/16 21:14:28
>>208
ゆとり直前世代ですがありました

皆さんが低レベルと言ってるのは、低級と言い換えても構いませんね!
大学入って初めてCに触れてるくらいだから俺はかなり高レベル

212:デフォルトの名無しさん
07/05/16 21:15:50
俺なんか小学校のときにそろばんを・・・

213:デフォルトの名無しさん
07/05/16 21:17:28
低水準のことじゃないのか。

214:デフォルトの名無しさん
07/05/16 21:17:32
>>211
俺にとっては C はアセンブラの延長
っか, マシンに依存しないアセンブラ
十分, 低レベル言語


215:デフォルトの名無しさん
07/05/16 21:46:05
ゆとりだけど技術あったよ
中学1年と2年で木工、3年でPC
選択ではタイニーベーシックもやる

ちなみに>>188の高校は大体予想が付く
普通の工業では固定費割合とかの経営側のことはやらない
たぶん初級シスアド狙ってる学校
だから初級シスアド試験一部免除校リストのどれかだろ

216:デフォルトの名無しさん
07/05/16 22:07:39
int flag = 0;

while(1){
if(flag == 100)
Test *t2 = new Test(0,0);
if(flag > 300)
t2->do(); }

C++でAPIを利用したゲームを作成しています。
ここで、Testというクラスがあらかじめ定義されているとしてください。
flagが100になった(つまりループが100回回ったとき)に敵を発生させたく、このようなプログラムを書きました。
しかし、コンパイル時に、t2が定義されていない識別子となり、はじかれてしまいます。(最終行)
どのように対処すればよろしいのでしょうか?
whileループ前にt2を確保しておけば動作するのですが、それでは今後困ることがでるので・・・。
宜しくお願いします。

環境:VC++6.0

217:デフォルトの名無しさん
07/05/16 22:11:55
ループ内で変数確保とはびっくりした。これっていいの?

218:デフォルトの名無しさん
07/05/16 22:12:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  与えられたnに対し、分母がn以下で値が0以上1以下の既約分数をすべて求めよ。(再帰を使うこと。)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C言語
[4] 期限: 5/18
[5] その他の制限: 特にないです。

219:216
07/05/16 22:16:54
ループ内でflag++;という分を書き忘れてしまいました。
int flag = 0;

while(1){
if(flag == 100)
Test *t2 = new Test(0,0);
if(flag > 300)
t2->do();
flag++;}
です。

>>217
やっぱりまずいんでしょうかねぇ。
でもあるタイミングで敵を発生させるときとかどうしたらいいのかわかりません・・・。

220:デフォルトの名無しさん
07/05/16 22:26:09
>>216 >>219
スレ違い
スコープについて勉強してこい

221:デフォルトの名無しさん
07/05/16 22:40:00
>>186
根付き木で、深さ優先探索です。

222:216
07/05/16 22:40:15
やはりあらかじめ作成しておいて、後に削除するしかないのでしょうか・・・。
それだと、敵をある時間に生成する上手い方法ありませんか?

223:デフォルトの名無しさん
07/05/16 23:04:59
質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文字列①と文字列②を比較し、正しければ○、正しくなければ×を出力せよ。
文字列は半角英数、全角、空白、記号も含める。
(文字列①、②ともに空白の場合はエラーを出力する。)

<実行結果>
文字列①を入力してください。---> (入力後、実行で下段を表示)
文字列②を入力してください。---> (入力後、実行で結果を表示)
結果:○

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名:Visual Studio
 [3.3] 言語:C
[4] 期限:5/17
[5] その他の制限: 無し

224:デフォルトの名無しさん
07/05/16 23:10:12
>>223
#include<stdio.h>
#include<string.h>
int main(){
char str1[1000],str2[1000];
printf("文字列①を入力してください。--->");
scanf("%s",str1);
printf("文字列②を入力してください。--->");
scanf("%s",str2);
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
return 0;
}

225:デフォルトの名無しさん
07/05/16 23:14:13
>>224
ありがとうです。
でも、1000文字を超えたらアウトですよね?
その場合、どうしたらいいですか?
それと、両方とも空白時のエラーメッセージはどうしましょう・・・

226:デフォルトの名無しさん
07/05/16 23:18:16
>>225
ごめん、普通にエラーとか忘れてた orz
#include<stdio.h>
#include<string.h>
#define N 1000
int main(){
char str1[N],str2[N];
printf("文字列①を入力してください。--->");
fgets(str1,N,stdin);
printf("文字列②を入力してください。--->");
fgets(str2,N,stdin);
if(strlen(str1)>1||strlen(str2)>1)
printf("結果:%s\n",strcmp(str1,str2)?"×":"○");
else
printf("エラー\n");
return 0;
}
さっきよりほんの少しだけまともに書いてみた。
メモリの許す限り文字列を比較したいなら、勉強して自分でがんがれ

227:>222
07/05/16 23:50:06
宣言をループの外で
確保はループの中で

228:デフォルトの名無しさん
07/05/17 01:43:48
>問題2:合計
>1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい

[開始]
 |
[計算結果s=0]
 |
[カウンタn=1]
  |
 [カウンタi=1]
   |
  [s=s+i]
   |
  [i=i+1]
   |
 [カウンタi<=nの間繰り返し]
  |
 [n=n+1]
  |
[カウンタn<=10の間繰り返し]
 |
[計算結果s表示]
 |
[終了]

229:デフォルトの名無しさん
07/05/17 01:45:33
>>225
応用でstring.hを使わずに考えられると力が付くぞ

230:デフォルトの名無しさん
07/05/17 01:51:50
>>225
1000文字超えたときのこと考えるとCじゃ無理

231:デフォルトの名無しさん
07/05/17 03:07:06
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
      ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
  課題2:1で作成したプログラムを以下のように修正せよ。
      ・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
      ・計算結果は画面でなくファイルに出力すること。
[3] 環境
 [3.1] Windows
 [3.2] cygwin
 [3.3] C
[4] 期限:5月18日
[5] 特になし

前に書いたのですが、スルーされてしまったのでもう一度書かさせてもらいます。
非常に困ってます。どうかよろしくお願いします。

232:デフォルトの名無しさん
07/05/17 03:08:46
>書かさせてもらいます
さ入れ言葉

233:デフォルトの名無しさん
07/05/17 05:26:00
>>231
/*

正方行列の和・差・積を表示するプログラム

*/

#include <stdio.h>

/* ユーザ定義型宣言 */
#define DIM 4
typedef struct
{
int element[DIM][DIM];
}matrixSquare;

/* 関数宣言部 */
matrixSquare AddSqu(matrixSquare* m1, matrixSquare* m2);
matrixSquare SubSqu(matrixSquare* m1, matrixSquare* m2);
matrixSquare MulSqu(matrixSquare* m1, matrixSquare* m2);
void inputMatrixSquare(matrixSquare* ms);
void putMatrixSquare(matrixSquare ms);



234:デフォルトの名無しさん
07/05/17 05:26:21
/* メイン関数 */
int main(void)
{
matrixSquare ma, mb;

/* 正方行列に数値を入力する */
{
printf("4x4の正方行列aを空白で区切って1行ずつ入力.\n"); inputMatrixSquare(&ma);
printf("4x4の正方行列bを空白で区切って1行ずつ入力.\n"); inputMatrixSquare(&mb);
/* 入力バッファに溜まるので、一気に全ての要素を入力しても良い */
}

/* 和・差・積を表示する */
{
printf("aとbの和\n"); putMatrixSquare(AddSqu(&ma, &mb));
printf("aとbの差\n"); putMatrixSquare(SubSqu(&ma, &mb));
printf("aとbの積\n"); putMatrixSquare(MulSqu(&ma, &mb));
}
return 0;
}



235:デフォルトの名無しさん
07/05/17 05:27:06
/* */
/* 関数の実装 */
/* */
matrixSquare AddSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の和を返す */
{
matrixSquare mRes;
int y, x;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
mRes.element[y][x] = m1->element[y][x] + m2->element[y][x];
}
}
return mRes;
}


236:デフォルトの名無しさん
07/05/17 05:27:37
matrixSquare SubSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の差を返す */
{
matrixSquare mRes;
int y, x;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
mRes.element[y][x] = m1->element[y][x] - m2->element[y][x];
}
}
return mRes;
}


237:デフォルトの名無しさん
07/05/17 05:27:54
matrixSquare MulSqu(matrixSquare* m1, matrixSquare* m2)
/* 正方行列同士の積を返す */
{
matrixSquare mRes;
int x, y, k;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
int tmp;
for(k=0, tmp=0; k!=DIM; k++)
{
tmp += m1->element[k][x] * m2->element[y][k];
}
mRes.element[y][x] = tmp;
}
}
return mRes;
}


238:デフォルトの名無しさん
07/05/17 05:29:31
void inputMatrixSquare(matrixSquare* ms)
/* 正方行列を一行単位で入力する */
{
int i;

for(i=0; i!=DIM; i++)
{
printf("%d行目>", i+1);
scanf("%d %d %d %d", &(ms->element[i][0]), &(ms->element[i][1]), &(ms->element[i][2]), &(ms->element[i][3]));
}
printf("\n");
}


239:デフォルトの名無しさん
07/05/17 05:30:12
void putMatrixSquare(matrixSquare ms)
/* 正方行列を標準出力へ書き出す */
{
int x, y;

for(y=0; y!=DIM; y++)
{
for(x=0; x!=DIM; x++)
{
printf("%10d ", ms.element[y][x]);
}
printf("\n");
}
}

[EOF]

240:デフォルトの名無しさん
07/05/17 05:55:40
>238訂正

void inputMatrixSquare(matrixSquare* ms)
/* 正方行列を一行単位で入力する */
{
int i, j;

for(i=0; i!=DIM; i++)
{
printf("%d行目>", i+1);
for(j=0; j!=DIM; j++)
{
scanf("%d", &(ms->element[i][j]));
}
}
printf("\n");
}


241:デフォルトの名無しさん
07/05/17 05:56:55
うpロダ使えYO!

242:216
07/05/17 06:06:30
>>227 ありがとうございます無事できました。

クラスをnewで作成したとします。(仮に*test)とします。
これをクラス内のメソッドで消す方法はありませんか?
つまり、自クラスで自分をdeleteするということです。
自分は自信の名前を知らないので、
delete test ; と記述することが出来ません。
あらかじめprivate変数として自信の名前を記録しておく他ないのでしょうか?

243:デフォルトの名無しさん
07/05/17 06:50:35
delete This;

244:デフォルトの名無しさん
07/05/17 06:51:24
↑間違い
delete this;
です。

245:デフォルトの名無しさん
07/05/17 06:54:03
てかこれは基本中の基本であってもう一度C++勉強し直せ

246:デフォルトの名無しさん
07/05/17 08:01:23
>>231
問2。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

247:デフォルトの名無しさん
07/05/17 09:10:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
  【処理方式】
① int型変数に値を入力する。(0~9)
② chg関数に、入力した値を渡す。(ポインタ)
③ その値が2で割って余りが0なら10倍し、余りが1なら5倍する。
④ Main関数にてchgにて計算された値を表示する。
【処理結果】
 Cnt =>XXXX
 cnt(chg後)  :XXXX
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5
 [3.3] 言語: C言語
[4] 期限: 5/18
[5] その他の制限: 特にないです

248:デフォルトの名無しさん
07/05/17 09:41:50
>>247
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
int main(){
int cnt;
printf("Cnt =>");
scanf("%d",&cnt);
if(cnt<0 && 9<cnt) return 1;
chg(&cnt);
printf("cnt(chg後)  :%d\n",cnt);
return 0;
}

249:デフォルトの名無しさん
07/05/17 09:46:33
>>247
>① int型変数に値を入力する。(0~9)
ってあるけど、
>Cnt =>XXXX
これと矛盾しない?

250:デフォルトの名無しさん
07/05/17 11:08:22 BE:31055982-2BP(222)
>>221
漠然としすぎててわからんと何度も言ってるわけだが。

>根付き木で、

そういうことじゃなくて、子は何人までとか、親子関係、兄弟関係の決め方とかが
わからんとやりようがねえって言ってんだよ。
その意味すら分からないなら単位落として退学しろクズ。

251:デフォルトの名無しさん
07/05/17 11:09:22
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
正負それぞれ、万、億の位まで対応できる読み上げ文字列生成プログラムを作成せよ。
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)明日の昼
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
・「数値読み上げ」とは、数値を入力したときにその数字の読み方を表す文字列を生成して出力するプログラムで、
たとえば、「1」と入力したら「ICHI」、「1024」と入力したら「SEN NIJYU YON」と出力するプログラムです。
・拡張性やライブラリ化の容易さを考えて、生成した文字列を一旦文字配列変数に格納し、
読み上げ文字列が完成したあとでまとめて出力する形式でお願いしますorz
(引数として数値を与えて呼び出すと、return値として読み上げ文字列へのポインタを返すような関数を作成し、main関数からこれを呼び出す)
・各桁ごとの数字の文字列生成や4桁ごとに現れる千百十の単位の文字列生成のように、
繰り返し出現すつ処理は出来る限り1箇所にまとめてモジュール化する

制限多いですがよろしくおねがいしますm(__)m

252:デフォルトの名無しさん
07/05/17 11:18:50
>>250
もちつけw

>>221
>10個の整数データを木構造に保存し、
>順に木をなぞる再起プログラミングを作成せよ.

10個の整数データがあるのは解った。
深さ優先探索ってのも解った。

で、この10個の整数とやらをどうやって木にするんだ?
rootから順に、何らかの基準によって、
ある要素の子になったり、ある要素と同レベルの要素になったりするわけだろ?
それがわからなきゃコードなんか書きようがないだろ。
そもそも探索対象の木が作れないんだから。

で、これでもまだ理解できないなら、単位は諦めな。
もう一回受けるのが君のためだ。

253:デフォルトの名無しさん
07/05/17 12:00:30
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
次の無限等比級数の和を求めなさい。
  ∞   1
  Σ  ━
  n=1  n^4 
 
[3] 環境 
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: unix 
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) 
[4] 期限: (5/18) 
[5] その他の制限: あまり詳しくありませんが、FILE *to; を使って記述するみたいです。



254:デフォルトの名無しさん
07/05/17 12:20:57
>>253 あまり賢くない方法で
#include <stdio.h>
#include <math.h>

int main()
{
    FILE *to = fopen("output.txt", "wt");
    double sum = 0, min = pow(10, -8);
    long int n;
   
    for(n = 1; 1/pow(n, 4) > min; n++)
        sum += 1/pow(n, 4);
   
    fprintf(to, "%.20f\n", sum);
   
    return 0;
}

255:sage
07/05/17 13:06:29
>>254
すばやい対応ありがとうございました。

すいませんよろしければ教えてほしいのですが、
このときn^4のところが(n^4+2)となったらどのように記述したらよろしいでしょうか?


256:それくらいできないなら技術系の職には向いてないと言うことだ
07/05/17 13:37:48
>>255
n^4のときにpow(n, 4)と書いたのだから、(n^4+2)ならおなじようにすればいいんでない?

257:247
07/05/17 13:39:51
>>247
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
この意味を教えてもらっていいですか?

258:デフォルトの名無しさん
07/05/17 13:42:28
>③ その値が2で割って余りが0なら10倍し、余りが1なら5倍する。

259:デフォルトの名無しさん
07/05/17 13:55:01
*cnt *= *cnt%2 ? 5 : 10;
この表記だと
参照はずしの* と *= との順位とか 参照はずしの* と % との順位で不安を感じるな

260:デフォルトの名無しさん
07/05/17 14:02:59
>>218お願いします><

261:247
07/05/17 14:13:47
>>259
参照はずしとはなんですか?

262:デフォルトの名無しさん
07/05/17 14:14:37
>>261
>参照はずしとはなんですか?
*

263:デフォルトの名無しさん
07/05/17 14:48:06 BE:29115735-2BP(222)
ここは宿題解説スレじゃないので答えもらったらさっさと持って帰れ。

264:デフォルトの名無しさん
07/05/17 15:33:04
>>218 >>260
#include <stdio.h>
typedef enum {false, true} bool;
bool isLowestTerm(int n, int d){
int i;
if(n == d && d != 1) return false;
for(i=n; i!=1; i--)
if(n%i == 0 && d%i == 0) return false;
return true;}
void PLT2(int num, int denomi){
if(num!=1) PLT2(num-1, denomi);
if(isLowestTerm(num, denomi))
printf("%d/%d\n", num, denomi);}
void PutLowestTerm(int n){
if(n != 1) PutLowestTerm(n-1);
PLT2(n, n);}
int main(void){
int n;
printf("n := "); scanf("%d", &n);
PutLowestTerm(n);
return 0;}


265:デフォルトの名無しさん
07/05/17 15:44:16
うぅむ、0が正しく処理されてないので訂正。
#include <stdio.h>
typedef enum {false, true} bool;
bool isLowestTerm(int n, int d){
int i;
if(n == 0) return (d == 1) ? true : false;
if(n == d && d != 1) return false;
for(i=n; i!=1; i--)
if(n%i == 0 && d%i == 0) return false;
return true;}
void PLT2(int num, int denomi){
if(num!=0) PLT2(num-1, denomi);
if(isLowestTerm(num, denomi))
printf("%d/%d\n", num, denomi);}
void PutLowestTerm(int n){
if(n != 1) PutLowestTerm(n-1);
PLT2(n, n);}
int main(void){
int n;
printf("n := "); scanf("%d", &n);
PutLowestTerm(n);
return 0;}


266:デフォルトの名無しさん
07/05/17 16:56:56
>>259
不安なら括弧つければいいじゃん
制限無しだったしそこまで丁寧にはやってないぞ

267:デフォルトの名無しさん
07/05/17 17:23:31
初めまして。大学1年生です。
プログラミングの授業で課題が出されました。

【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
キーボードから文字列を入力し、それを逆順に表示するプログラムを作成せよ。
表示には必ずポインタを用いること。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003を使っております。
 [3.3] 言語:C言語
[4] 期限:[2006年05月23日17時まで]
[5] その他の制限:なし


よろしくお願いします。

268:デフォルトの名無しさん
07/05/17 17:31:54
#include <stdio.h>
int main()
{
char buf[100], *p;
fgets(buf, sizeof(buf), stdin);
for (p = buf; *p != '\n'; p++);
for (;p >= buf; p--)
putchar(*p);
return 0;
}
こうですか?

269:デフォルトの名無しさん
07/05/17 17:34:57
>>267
#include <stdio.h>
#include <string.h>
int main()
{
char buf[100];
if (fgets(buf, sizeof(buf), stdin) == NULL) return 1;
int ic = strlen(buf) - 1;
if (buf[ic] == '\n') --ic;
for (; ic >= 0; --ic) {
putchar(buf[ic]);
}
return 0;
}

270:デフォルトの名無しさん
07/05/17 17:42:46 BE:23292162-2BP(222)
>>267
URLリンク(c-kadai.sakura.ne.jp)

271:デフォルトの名無しさん
07/05/17 17:45:50
>267
#include <stdio.h>
int main(void)
{
char str[1024];
char *p;
scanf("%s", str);
p = str;
while(*p) p++;
while(p!=str) putchar(*--p);
return 0;
}


272:デフォルトの名無しさん
07/05/17 18:00:26
#include <stdio.h>
#define MAX_INPUT 1024
void
reverse(char *buf)
{
if (*(buf) == '\n')
return;
reverse(buf + 1);
putchar(*buf);
}
int
main()
{
char buf[MAX_INPUT];
if (fgets(buf, MAX_INPUT, stdin) == NULL)
return 1;
reverse(buf);
putchar('\n');
return 0;
}



273:デフォルトの名無しさん
07/05/17 18:15:20
>>267
void rp(char *s){
if(*++s)rp(s);
putchar(*--s);
}
int main(){
char s[256];
fgets(s,256,stdin);
rp(s);
return 0;
}
携帯だから遅い上に未確認 orz

274:デフォルトの名無しさん
07/05/17 18:50:27
プログラミングの授業で課題が出されたのですが、
コンパイルできても自分の思ってるとおりに動いてくれません。
何処が違うのか、また、どのように直せばいいのか指摘をお願いいたします。

【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
連結リストの挿入・削除・表示を行う。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] Borland C++ と BCC Developer
 [3.3] 言語:C言語
[4] 期限:[2006年05月25日17時まで]
[5] その他の制限:なし


よろしくお願いします。

275:デフォルトの名無しさん
07/05/17 18:53:27
ソースうぷすれ

276:デフォルトの名無しさん
07/05/17 18:53:47
>>274
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct CELL{
struct CELL *next;
int value;
}

main(void){
int or,banti,mval,y,z;
struct CELL *header,*p,*q,*new,b,c,d;

header->next = &b;
header->value = 130;
b.next = &c;
b.value = 90;
c.next = &d;
c.value = 55;
d.next = NULL;
d.value = 160;

for(;;){

/*qを現在、pを次のポインタに設定*/
p = header->next;
q = header;

277:デフォルトの名無しさん
07/05/17 18:55:04
printf("[0]=挿入、[0以外]=削除\n");
scanf("%d",&or);
printf("何番目の要素[0~]?\n");
scanf("%d",&banti);


if(or == 0){
printf("値を入力してください\n");
scanf("%d",&mval);
if(banti == 0){
/*リストの先頭に新しいセルを挿入する場合*/
if((q = malloc(sizeof(struct CELL))) == NULL){
printf("メモリーが足りない\n");
exit(0);
}
new->value = mval;
new->next = header;
header = new;
}else{
/*ポインタqで記されたセルの直後に新しいセルを挿入する*/
for(y = 1;y <= banti;y++){
q = p;
p = p->next;
}
if((p = malloc(sizeof(struct CELL))) == NULL){
printf("メモリーが足りない\n");
exit(0);
}
new->value = mval;
new->next = p;
q->next = new;
}

278:デフォルトの名無しさん
07/05/17 18:55:12
>276
headerは何を指してるの?

279:デフォルトの名無しさん
07/05/17 18:56:03
}else{
/*連結リストからの削除*/
if(banti == 0){
/*リストの先頭の削除*/
if(header == NULL){
printf("リストが空なので削除できない\n");
exit(0);
}
q = header;
header = q->next;
free(q);
}else{
/*ポインタqで記されたセルの直後のセルを削除する*/
z=1;
while(z < banti){
q = p;
p = p->next;
z++;
}
if(q->next == NULL){
printf("セルが無いから削除できない\n");
exit(0);
}
q->next=p->next;
free(p);
}
}
printf("表示\n");
for(p=header;p!=NULL;p=p->next){
printf("%3d\n",p->value);}}}

280:デフォルトの名無しさん
07/05/17 18:59:05
>>278
14行目のことなら、仮の連結リストをつくって、そこから挿入や削除をしていこうかと。
普通に変数とか構造体のポインタの使い方を間違えてるかもしれないので…

281:デフォルトの名無しさん
07/05/17 19:04:51
>header->next = &b;
>header->value = 130;
このときのheaderは何を指してるの?

282:デフォルトの名無しさん
07/05/17 19:06:32 BE:52408139-2BP(222)
>>280
>仮の連結リストをつくって

つくってないじゃん。

283:デフォルトの名無しさん
07/05/17 19:07:35
>>281
何かを指しているわけではなく単独でヘッダーという変数を作っただけです。

header > b > c > d という感じの連結リストになっているのですが…

あ、確かにこれは変な挙動起こしそう…直してきます。

284:デフォルトの名無しさん
07/05/17 19:09:16
>>283
>何かを指しているわけではなく単独でヘッダーという変数を作っただけです。
初期化してないポインタに代入しちゃ鼻から悪魔だお

285:デフォルトの名無しさん
07/05/17 19:09:49
どなたかおしえてください。
typedef double fp(double)
これどういうこと?

286:デフォルトの名無しさん
07/05/17 19:13:25
>>284
headerがポインタであることを忘れてました。
何でこれでコンパイルできたんだろうなぁ…

main(void){
int or,banti,mval,y,z;
struct CELL *header,*p,*q,*new,a,b,c,d;

header = &a;

a.next = &b;
a.value = 130;
b.next = &c;
b.value = 90;
c.next = &d;
c.value = 55;
d.next = NULL;
d.value = 160;

これでここのところは大丈夫でしょうか?

287:デフォルトの名無しさん
07/05/17 19:19:56
>>251
お願いしますm(_ _)m

288:デフォルトの名無しさん
07/05/17 19:26:19
>277
for(y = 1;y <= banti;y++){ → for(y = 1;y < banti;y++){
if((p = malloc(sizeof(struct CELL))) == NULL){
→ if((new = malloc(sizeof(struct CELL))) == NULL){
>279
free(p) → free(q)
これで多分大丈夫

289:デフォルトの名無しさん
07/05/17 19:33:06
>>285
識別子 fp を、double を引数とし double を返す関数の型として宣言

290:デフォルトの名無しさん
07/05/17 19:53:29 BE:54348847-2BP(222)
>>283
>何かを指しているわけではなく

何かを指さないと連結できないだろが。

291:デフォルトの名無しさん
07/05/17 19:54:06 BE:38820454-2BP(222)
>>287
今やってる。思いの外大変だ。

292:267
07/05/17 19:56:19
>>268
>>269
>>270
>>271
>>272
>>273

ご回答ありがとうございました。

いろんな答えは、今後の勉強になります!!
ありがとうございました。

293:デフォルトの名無しさん
07/05/17 20:17:11
>>291
ありがとうございます!!
待ってますm(_ _)m

294:デフォルトの名無しさん
07/05/17 20:25:33
入力した文章中の単語を1行に一つずつ印字するプログラムを書け。
(ここでの単語とは、ブランク,タブ,改行文字で区切られた文字)
例えば、
This is a book.
と入力すると、
This
is
a
book.
と表示される。

while((c=getchar()) != EOF)
という文を使って文章を入力し、while文終了後に一気に表示させたいのですが、どうやって表示させればいいのかわかりません。
教えてください。

295:274
07/05/17 20:32:55
>>281
>>283
>>288

etc…様


ご回答ありがとうございます!

でも、まだ実際に動かしてみると
部分部分で可笑しな挙動をしてたりしてますが、
初期の状態よりは随分とマシになったような気がいたします。

しばし、自分の力で頑張ってみようと思いますが、
しばらくこのスレを見ながらプログラムをうってますので
どこか変な場所が見つかればご指摘お願いいたします。

またわからなくなった時は聞きにきますので
その時は宜しくお願いします。ありがとうございました。

296:デフォルトの名無しさん
07/05/17 20:34:40
>>294
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c;
printf("Input strings > ");
while((c=getchar()) != EOF) {
if( isspace(c) ) putchar('\n');
else putchar(c);
}
return 0;
}

297:デフォルトの名無しさん
07/05/17 20:43:25
>>296でwhileを抜けるには最後に Ctrl+Z とかでEOFを入力しておいてね

298:デフォルトの名無しさん
07/05/17 20:46:45 BE:46584364-2BP(222)
>>251>>287 できた。
#include<stdio.h>
#include<stdlib.h>
char* reading4(int d, char* add){
char* result = NULL;char* restmp;
char* places[]={"SEN","HYAKU","JU",""};
char* digits[]={NULL,"","NI","SAN","YON","GO","ROKU","NANA","HACHI","KYU",};
char* reed[4]={NULL,NULL,NULL,NULL};char tmp[256];int i,len;size_t total=0;
sprintf(tmp,"%i",d);len=(int)strlen(tmp);for(i=0;i<len&&i<4;i++){
if(tmp[len-i-1]-'0'){reed[3-i]=digits[tmp[len-i-1]-'0'];
total+=strlen(reed[3-i])+strlen(places[3-i])+1;}}
if(len>3&&tmp[len-4]=='1'){reed[0]="IS";total+=2;}if(len&&tmp[len-1]=='1'){
if(add&&add[0]){char ls[1024];sprintf(ls,"I%c%s",add[0],add);reed[3]=ls;
total+=strlen(ls);}else{reed[3]="ICHI";total+=4;}}
result=(char*)malloc(total+1);restmp=result;for(i=0;i<4;i++){if(reed[i]){
restmp+=sprintf(restmp,"%s%s ",reed[i],(tmp[i]-'0')?places[i]:"");}}
return result;}
int main(void){char tmp[256];char* places[]={"CHO ","OKU ","MAN ",""};
char* reed[4]={NULL,NULL,NULL,NULL};int data,i;fgets(tmp,256,stdin);
data=atoi(tmp);if(data){for(i=0; data>0 && i<4; i++){if(data%10000){
reed[3-i]=reading4(data%10000,(i==0)?places[3-i]:"");data/=10000;}}
for(i=0;i<4;i++){if(reed[i]){fputs(reed[i],stdout);fputs(places[i],stdout);
free(reed[i]);}}}else{fputs("ZERO",stdout);}putchar('\n');return 0;}

299:294
07/05/17 20:47:38
>>296
これだと、Enterを押したときにひょうじされませんか

300:デフォルトの名無しさん
07/05/17 20:56:00
>>299
標準入力にて EOF を検出したら while ループ終了でしょ?
ちゃんと最後のEOFを入力してちょうだいな。

301:294
07/05/17 20:58:42
>>300
できれば、whileループ終了後にまとめて表示したいのですが

302:デフォルトの名無しさん
07/05/17 21:00:06
>>301
だからその終了の条件が EOF が入力されたという条件でしょ?
EOFを入力してくれよ

303:デフォルトの名無しさん
07/05/17 21:01:24
>>301
入力された文字を格納する文字配列でも必要ってこと?

304:294
07/05/17 21:02:48
>>302
EOFを入力したらプログラムが終わってしまいます。
Enterを押したときに表示するのでなく、EOFを入力したときに表示したいのです

305:デフォルトの名無しさん
07/05/17 21:03:08
>>298
ありがとうございます!!
でも100とか1000とか表示されません…
あと、1300とかはISSEN SANHYAKUではなくてISSEN SANBYAKUのように表示しないと
いけないんですorz

306:デフォルトの名無しさん
07/05/17 21:10:06
>>304 んなこたぁ~ねぇべ、ちゃんと入力した文字は空白ごとに改行されて表示すっぺ。
まぁ、こんな漢字で文字配列に格納してやってみるがや
#include <stdio.h>
#include <ctype.h>
int main(void) {
char c,buf[1024],i;
printf("Input strings > ");
while((c=getchar()) != EOF) {
if( isspace(c) ) buf[i++]='\n';
else buf[i++]=c;
}
buf[i]='\0';
puts(buf);
return 0;
}

307:デフォルトの名無しさん
07/05/17 21:13:08
>>306の最初の i=0; を忘れてたがや。まぁ、while以外の条件もちゃんと書いてやぁ。
あと>>1のフォームさ忘れるでねぇ

308:294
07/05/17 21:19:10
>>307
ありがとうございます。
質問用のテンプレ忘れてすみません

309:デフォルトの名無しさん
07/05/17 21:24:39
>>306
ちょっとダサイけど、こんな風にしたら改行が続かずに済むよ。

int flag = 0;
while ((c=getchar()) != EOF) {
    if (isspace(c))
        flag = 1;
    else {
        if (flag == 1) {
            buf[i] = '\n';
            ++i;
        }
        flag = 0;
        buf[i] = c;
        ++i;
    }
}

310:デフォルトの名無しさん
07/05/17 21:24:46
>>251
#include "stdio.h"
#include "stdlib.h"
char *num[] = {
0, "", "ni", "san", "yon", "go", "roku", "nana", "hachi", "kyuu"
};
char *po10[] = {"", "juu", "hyaku", "sen"};
char *po10_4[] = {"", "man", "oku", "chou"};
char *get_kurai(int n)
{
if (n % 4) return po10[n % 4];
else return po10_4[n / 4];
}
続く


311:310
07/05/17 21:26:05
char *do_yome(int x, int n)
{
char *yomi, *tmp, *xnum, *kurai;
int l;
if (x < 10) {
kurai = get_kurai(n); xnum = num[x];
if (!*xnum && n >= 4) xnum = "ichi";
yomi = malloc(strlen(xnum) + strlen(kurai) + 1);
strcat(strcpy(yomi, xnum), kurai);
return yomi;
}
yomi = do_yome(x / 10, n + 1); xnum = num[x % 10];
if (xnum) {
if (n == 0 && !*xnum) xnum = "ichi";
kurai = get_kurai(n);
tmp = malloc(strlen(xnum) + strlen(kurai) + strlen(yomi) + 2);
strcat(strcat(strcat(strcpy(tmp, yomi), " "), xnum), kurai); free(yomi);
yomi = tmp;
}
return yomi;
}

312:311
07/05/17 21:27:14
char *yome(x)
{
char *yomi, *minus;
if (x == 0) return strdup("zero");
if (x < 0) yomi = do_yome(-x, 0);
else yomi = do_yome(x, 0);
if (x < 0) {
minus = malloc(strlen("mainasu ") + strlen(yomi) + 1);
strcat(strcpy(minus, "mainasu "), yomi); free(yomi);
yomi = minus;
}
return yomi;
}
int main(int ac, char **av)
{
int x;
char *yomi;
x = atoi(av[1]);
yomi = yome(x);
printf("%s\n", yomi);
free(yomi);
}


313:デフォルトの名無しさん
07/05/17 22:12:29
何遍も言うとろうが!
読みの例外処理せんといかんて!
お前らアホか!

314:デフォルトの名無しさん
07/05/17 22:13:45
宿題で例外処理とか・・・

315:デフォルトの名無しさん
07/05/17 22:15:28
こんなところで宿題を○投げすることそのものが例外であります!

316:デフォルトの名無しさん
07/05/17 22:24:46
じゃあ、例外処理をしないとな

317:デフォルトの名無しさん
07/05/17 22:25:32
>>294
#include <stdio.h>
#include <ctype.h>

int main()
{
    int c;
    FILE *fp = tmpfile();
    while ((c = getchar()) != EOF) {
        if (isspace(c)) {
            while (isspace(c = getchar()))
                ;
            ungetc(c, stdin);
            putc('\n', fp);
        } else
            putc(c, fp);
    }
    rewind(fp);
    while ((c = getc(fp)) != EOF)
        putchar(c);
    fclose(fp);
    return 0;
}

318:デフォルトの名無しさん
07/05/17 22:27:51
>>317
さぁ、ティムポ、もとい、テムポファイルの詳細を書いて頂こうではないか
> tmpfile();

319:デフォルトの名無しさん
07/05/17 22:28:48
>>318
処理系依存です。

320:デフォルトの名無しさん
07/05/17 22:30:58
そぉ~かそうかぁ、大きさや形は人それぞれ、個人依存ってやつか。ほぉ~れ、俺のは○×いぞぉ~
はっはっは(ダイバスターの博士風に

321:デフォルトの名無しさん
07/05/17 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな

322:デフォルトの名無しさん
07/05/17 22:32:38
>>321
URLリンク(www.bohyoh.com)
知っとるぞ。さぁ、次のお題だが・・・

323:デフォルトの名無しさん
07/05/17 22:34:33
>>317
> int main()
括弧の中がANSI、ISO準拠でない点について。

324:デフォルトの名無しさん
07/05/17 22:38:28
>>264-265
㌧クスです!><

325:デフォルトの名無しさん
07/05/17 22:38:31
>>323
C89はK&Rスタイルを許してるんでなかったっけか?

326:デフォルトの名無しさん
07/05/17 22:44:13
gcc -Wallで-ansiとか-std=c99とかつけても何も言われないみたいだな
>>317のソース

327:デフォルトの名無しさん
07/05/17 22:47:20
>>321
> tmpfile()がANSI/ISO C標準関数
っとANSI / ISOの話を持ち出すならなおさらパラメーターがなければ
int main(void) 、あれば int main(int argc, char * argv[])というのは過去スレで既出が
もう議論はせんぞぉ~。では、次の問題だが・・・ANSI、ISO準拠を無視したら動かないコンパイラは何か?
ダイバスター出動!

328:デフォルトの名無しさん
07/05/17 22:48:35
>>327
いやだから、K&Rスタイルは別に規格無視ではないのでは?
C++なら明白に違法だけど。

329:デフォルトの名無しさん
07/05/17 22:49:26
ていうか>>318は結局何が聞きたかったのやら。
意図が分からない。

330:デフォルトの名無しさん
07/05/17 22:56:01
>>328
C++でプロトタイプ無しは違法だが、
int main()に関しては、Cのint main(void)と同じだから、
C++でも違法ではないわな。

331:デフォルトの名無しさん
07/05/17 22:58:12
ただの宿題で泥沼になったわな

332:デフォルトの名無しさん
07/05/17 23:01:00
またmainの規格議論か!

333:デフォルトの名無しさん
07/05/17 23:01:38
ANSI Cでプロタイプを必須にしていれば、
voidなどという引数宣言を作らずに、C++同様にする
こともできたはず。
Denis Ritchieもそれを醜いと認めていたようだしね。

334:デフォルトの名無しさん
07/05/17 23:05:02
>>328
ANSI、ISO標準の話を持ち出す場合はint mainについてもそれ準拠が望ましいという話だが?
これ以上は議論せんぞ。自分で言っていて墓穴を掘るくらいならしゃべらない方が良いぞ。
では次の問題だが・・・ANSI、ISO準拠で書かれていないソースをウェブサイトや書物で公開しちゃっている
のは、いったい何者か?ダイバスター出動!

335:デフォルトの名無しさん
07/05/17 23:06:54
>>332
残念、mainの規格ではなくANSI、ISO準拠(それに応じて従って)で記述するソースなら
なおさらという話だ。tmpfile()がANSI/ISO C標準関数といっておきながら、プログラムの主体となる
main関数がANSI、ISO準拠でないのはこれいかに?

336:デフォルトの名無しさん
07/05/17 23:07:02
>>334
> ANSI、ISO標準の話を持ち出す場合はint mainについても
> それ準拠が望ましいという話だが?

んな脳内ルールを押し付けられてもな。
そんな話にこだわってんの、あんた一人みたいだし。
で、あんたは>>318で結局何を言いたかったの?

337:デフォルトの名無しさん
07/05/17 23:08:05
>>334
カーニハンとリッチー。
知ってる?とっても有名な人ですが。

ANSI C準拠のK&R第二版の先頭のサンプルは
main()
ではじまります。

338:デフォルトの名無しさん
07/05/17 23:08:16
もはや、ここは宿題を片付けてくれるようなスレではない

339:デフォルトの名無しさん
07/05/17 23:09:40
そう、詰まる話が、自分でANSI、ISO C標準関数の話を持ち出したのに
mainがANSI、ISO C標準関数の形式で書かれていないのが引っかかったわけだ。
だがこれ以上それについては議論せんぞ。ANSI、ISO準拠のmain関数の記述は
ISOのページにもしっかりと引数があるかないかで
int main(void) または int main(int argc, char * argv[]) と記されておったからな。
では次の問題だ。このスレはいったい何のスレか?ダイバスター出動!

340:デフォルトの名無しさん
07/05/17 23:10:10
まぁ明日の昼頃には収まってるだろうから、
丸投げしたい人はそれまで自分で努力してみるんだ

無駄だと思うけど。

341:デフォルトの名無しさん
07/05/17 23:11:10
>>339
で、>>318は何だったわけ?
なんか君、自分がものすごーく的外れなこと言ったからって
誤魔化しに走ってるだけじゃないの?
いつもの下らないmain()議論でお茶濁そうとして。

342:デフォルトの名無しさん
07/05/17 23:13:39
ANSI、ISO標準の話を持ち出したのにint main()必死だなw

343:デフォルトの名無しさん
07/05/17 23:16:40
>>342
> ANSI、ISO標準の話を持ち出したのにint main()必死だな
tmpfile()の説明をするんなら、標準関数だと説明するのが手っ取り早いでしょ。

で、K&Rスタイルでmain()を記述することは違法ではないし、
そんなのはかのカーニハンとリッチーが、ANSI C対応版と謳ってる
K&R第二版でやっとるわけです。
こんなところで下らない議論を続けるのなら、彼らに文句を言ったらどうかな?

344:デフォルトの名無しさん
07/05/17 23:18:30
JIS X3010:2003では、関数定義で括弧の中が空なら、
引数がないものとして扱うというような規定があり、
このことから俺は、関数定義時なら()と(void)は同じでは、と思うのだがどうだろう?

345:デフォルトの名無しさん
07/05/17 23:20:39
>>344
つまり
C89ではK&Rスタイルが許されているので合法である。
C99ならvoidと解釈されるのでC++と同じ意味で合法になる、ということですか?

さっきから暴れているいつもの人は、なんなんでしょう。

346:デフォルトの名無しさん
07/05/17 23:21:10
321 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな

ANSI、ISO標準関数を持ち出すならなおさらプログラムの開始のmain関数が
int main(必要に応じた引数)というのを知らないではあるまいな

347:デフォルトの名無しさん
07/05/17 23:22:23
>>339
宿題スレだ
だから帰れ

348:デフォルトの名無しさん
07/05/17 23:25:05
ANSI、ISO準拠の話にC89ではK&Rスタイルの話を持ち込んでくる奴わろすwwwwwwww
お前のスタイルをはっきりしろよw

349:デフォルトの名無しさん
07/05/17 23:25:43
こりゃ明日の朝まで放置、だな……

350:デフォルトの名無しさん
07/05/17 23:26:36
328 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:48:35
>>327
いやだから、K&Rスタイルは別に規格無視ではないのでは?
C++なら明白に違法だけど。

C++なら明白に int main()の過去の中がなくてもOKなんすけど?
こいつわかってねーわ、話にならねーから仕様書に目を通してないなら黙ってろ。

351:デフォルトの名無しさん
07/05/17 23:26:45
>>348
規格/言語仕様とスタイルの区別がついてない厨房って以前もいたなぁ
確かボコボコに突っ込まれてたけど

352:デフォルトの名無しさん
07/05/17 23:27:40
>>350
その
> C++なら明白に違法だけど
は、
> K&Rスタイル
にかかっているのです。

353:デフォルトの名無しさん
07/05/17 23:40:27
この流れ秋田

354:デフォルトの名無しさん
07/05/17 23:51:21
いまだ!ANSI、ISO標準とか言っておきながら肝心のmain関数がANSI、ISO準拠になっていない奴
ぬるぽ!

355:デフォルトの名無しさん
07/05/17 23:51:46
こまち

356:デフォルトの名無しさん
07/05/17 23:56:43
職場でいじめられたストレスを解消しにきたんだろ。
きっとまた同じハゲの犯行。

357:デフォルトの名無しさん
07/05/18 00:38:08
[1] 授業単元:構文解析
[2] 問題文(含コード&リンク):
次のプログラムを書き換えて、自然数の足し算を行うプログラムを作成せよ。
また、自然数の足し算、引き算そして掛け算を行えるよう拡張せよ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007/05/18
[5] その他の制限: スタックやキューまで

358:デフォルトの名無しさん
07/05/18 00:45:32
【質問テンプレ】
[1] 情報基礎論演習
[2] 課題1:2つの正方行列の和・差・積を求め、計算結果を見やすく画面に表示するプログラムを作成せよ。
      ただし、両行列の要素はプログラム実行時にキー入力するものとする。(scanf)また、行列のサイズは4×4とする。
  課題2:1で作成したプログラムを以下のように修正せよ。
      ・行列の要素はキー入力ではなくファイルから読み込む。(入力ファイルは自分で作成)
      ・計算結果は画面でなくファイルに出力すること。
[3] 環境
 [3.1] Windows
 [3.2] cygwin
 [3.3] C
[4] 期限:5月18日
[5] 特になし

231で書いたのですが、課題2を1つのmain関数内に入れてできないでしょうか?できるだけわかりやすくポインタを使わずに作って欲しいです。どうかよろしくお願いします。

359:デフォルトの名無しさん
07/05/18 00:49:06
わかりやすくして欲しいのにmain関数だけで書けとは・・・

360:358
07/05/18 01:03:32
すいません。
課題1をmain関数だけで書いてしまったもので・・・
矛盾してるかもしれないけどよろしくお願いします。


361:>358
07/05/18 01:15:12
コマンドラインで
 も前の作ったプログラム.exe < 入力ファイル > 出力ファイル

ではいかんのか?

362:デフォルトの名無しさん
07/05/18 01:23:29
プログラムを修正しろという制限があるから厳しいのでは?

363:デフォルトの名無しさん
07/05/18 01:25:33
>>358
main()の先頭をこんな感じに汁。
その後は、課題1と全く同じでOKのはずだ。

int main(int argc, char **argv)
{
    if (argc < 3 || !freopen(argv[1], "r", stdin)
                 || !freopen(argv[2], "w", stdout))
        return 1;

364:358
07/05/18 01:30:03
まず、入力ファイルの作り方がわかりません。
後、ファイルを読み込む時のプログラムと書き込む時のプログラムがどのように書けばいいのか分かりません。

C言語初心者なんですみません。
なにかわかりやすい例やサイトなどでもあったら紹介してください。よろしくお願いします。


365:357
07/05/18 01:30:14
>>357
よろしくお願いします。

366:>364
07/05/18 01:34:16
>363 試したか?

367:デフォルトの名無しさん
07/05/18 01:43:58
>>364
cygwinということだが
cygwinのbash(シェル)だとかgcc(コンパイラ)だとかの使い方は分かるのか?

> まず、入力ファイルの作り方がわかりません
ということは、それ以前の問題のようだが

368:デフォルトの名無しさん
07/05/18 01:51:07
>>360
> 課題1をmain関数だけで書いてしまったもので・・・
えーと、つまり、漏れがやった課題1はガン無視っつう事でゴザルですか?

369:デフォルトの名無しさん
07/05/18 01:58:45
無視とは最低な奴だな
スルーでいこ

370:364
07/05/18 02:07:46
すみません学校から帰ってたもので書き込み遅くなってしまいました

371:364
07/05/18 02:09:49
368さん
void関数やforループを参考にさせていただきました。ありがとうございます。
ただ自分には高度なやり方だったのですべてを理解することができませんでした。すみません。

今から363さんのをやってみたいと思います。

372:364
07/05/18 02:14:01
367さん
コンパイルなどの仕方は分かります。

ただ要素の入ったファイルはどのように書けばいいのか分からないのです。

373:デフォルトの名無しさん
07/05/18 02:17:26
>>251
やっとできた。これだけ共通化すれば文句ないだろう・・・

int ct[] = {
    6166,1803,30,32,37,34,39,36,43,35,25,1155,1157,1162,1159,1164,
    1161,1168,1160,27,1245,49307,1252,1249,2008,1251,2009,1250,1848,
    1200,43322,1207,1204,1209,1206,1874,1205,1008,910,29901303,
};
int pt[][2] = {
    {0,0},{0,82},{0,69},{0,73},{0,67},{0,72},{0,78},{0,83},{0,65},
    {0,89},{0,79},{0,71},{0,75},{0,85},{0,74},{0,66},{0,80},
    {0,90},{0,77},{9,13},{12,13},{2,6},{8,6},{8,20},{9,23},
    {14,19},{7,21},{5,24},{1,10},{5,8},{6,3},{6,22},{7,22},
    {9,10},{11,10},{12,19},{31,8},{33,6},{4,5},{28,20},{38,3},
    {7,26},{16,16},{29,40},{42,24},
};

void Print(int n, unsigned char **b)
{
    int *p;

    for (  ; n; n /= 45)
        if (*(p = pt[n % 45])) Print(p[0], b), Print(p[1], b);
        else *(*b)++ = p[1];
}

void PrintTok(int n, unsigned char **b)
{
    Print(n, b); *(*b)++ = ' ';
}


374:デフォルトの名無しさん
07/05/18 02:18:40
>>372
っつーか、要素の入ったファイルの形式は?どのようにファイルに書き出せば良いのか
こっちがわからん。4行4列って指定があるから、単純に上から4行4列ずつ
8行4列に空白なりで区切られた値のファイルを読み込めば良いノカー

375:373
07/05/18 02:20:13
void Yomiage1000(int num, unsigned char **buf)
{
    int i, n, d;

    for (i = 27, n = 1000; n; i -= 9, num %= n, n /= 10)
        if((d = num / n) != 0) PrintTok(ct[i + d], buf);
}


unsigned char *Yomiage(int num, unsigned char *buf)
{
    int i, n, d;
    unsigned char *b = buf;

    if (num == 0) Print(ct[0], &b);
    else {
        if(num < 0) PrintTok(ct[39], &b), num = -num;
        for (i = 38, n = 100000000; n; i --, num %= n, n /= 10000)
            if ((d = num / n) != 0) {
                Yomiage1000(d, &b);
                if (1 < n) PrintTok(ct[i], &b);
            }
    }
    *b = '\0';
    return buf;
}


376:373
07/05/18 02:20:59
int main(void)
{
    unsigned char buf[1000];

    printf("%s\n", Yomiage(123456789, buf));
    return 0;
}


377:デフォルトの名無しさん
07/05/18 02:23:00
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
  課題1:4行4列の行列Aの各要素を入力して、その転置行列A’を計算して出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:わかりません
 [3.3] 言語: C++
[4] 期限: 2007年5月18日10:00まで

課題あること忘れててヤバイです。お願いします。m(__)m


378:372
07/05/18 02:26:18
ファイルの中身は自分でテキトーに決めていいらしいので上から4行4列ずつ
8行4列に空白などで区切られた値のファイルを読み込めるようにしていただければ大丈夫だと思います。

363を試したのですがエラーがたくさん出てしまいよくわからない状態になってしましました。

379:デフォルトの名無しさん
07/05/18 02:26:54
書き込みエラー。なぜ。。。

380:デフォルトの名無しさん
07/05/18 02:27:59
行多すぎか。めんどい。
>> 357

最初の?

        {
            char hoge[]={
                '+',
                '-',
                '*'
            };

            char IsOperation=0;
            while(i < sizeof(hoge)/sizeof(hoge[0])) {
                if(hoge[i] == c) {
                    IsOperation=1;
                    break;
                }
                ++i;
            }
            if(!IsOperation) {
                continue;
            }
        }

381:372
07/05/18 02:28:43
学校のはCなんですが家ではC++なんですが影響ありますかね?

382:デフォルトの名無しさん
07/05/18 03:14:06
>>358
っつーか5月18日までって、今日までやん。。。きんもぉ~★な俺のソースでも提出するか?
今やってるけどw

383:372
07/05/18 03:16:19
とりあえず助けて欲しいです!よろしくおねがいします。

384:デフォルトの名無しさん
07/05/18 04:02:33
>>358
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
こっ、こぉ~~れでええんか?課題1のプログラムを実行して入力した行列を
save1.txtに書き出して、課題2で使うプログラムを実行するとsave1.txtに書かれた
2つの4x4の行列の結果をsave2.txtに出力。読込んだ行列を表示するようにしてあるんで
不要なら消しておくべし。にしても、自分でもきんもぉ~~★なソースになっちまったぜい!w

385:デフォルトの名無しさん
07/05/18 04:14:22
あっ、入力の際に 1: ってゴミが残っているから消しておいて orz

386:デフォルトの名無しさん
07/05/18 04:31:19
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: (Windows/Linux/等々)Windows
 [3.2] コンパイラ名とバージョン: VC++6.0
 [3.3] 言語: C
[4] 期限: 5/23
[5] その他の制限: 配列までです、初心者ですどうかよろしくおねがいします。

387:デフォルトの名無しさん
07/05/18 05:33:12
>>344 >>345なやつっていつもの屁理屈反論厨だよね?w
いっていることを見ると、やっぱこいつらANSI、ISO準拠すら理解してなさそうだし
話の論点がまったく理解できていないみたいだし。誰かさんがANSI、ISOの
標準の話を持ち出したにもかかわらず、そういう関数があるよと言っているのは分かるが
標準的なmain関数の記述がされていないのが ぶふふふぅ~~(吹いてまうぅ~って)
って話なのよw

388:デフォルトの名無しさん
07/05/18 05:39:50
321 名前:デフォルトの名無しさん 投稿日:2007/05/17(木) 22:31:02
>>318
tmpfile()がANSI/ISO C標準関数であることを知らないのではあるまいな
>>317
> int main()

(ダイバスターの隊員が驚く時の音を4回鳴らしながら)
ANSI/ISO C標準関数 int main() ANSI/ISO C標準関数 int main()
ANSI/ISO C標準関数 int main() ANSI/ISO C標準関数 int main()
mainも当然関数ですから~~!残念(ジャカジャンッ!
これだとANSI、ISOの標準スタイルではない 斬り!

拙者、こんなことを言っても、稼業でプログラマーなんてやっていない
趣味でやっているだけのただの一般人ですから、切腹!

389:デフォルトの名無しさん
07/05/18 05:42:36
ぶふふふぅ~~(吹いてまうぅ~)

390:デフォルトの名無しさん
07/05/18 05:53:12
自分が理解していなかったことを指摘されると、無関係なことを持ち出して
お前これ分かってねーみたいな揺さぶりは通用しない。第一、まず先に
標準関数って言っておきながら、mainそのものの記述が標準スタイルではないという
なんとも頭かくして尻隠さずな発言がワロスなのさ

391:デフォルトの名無しさん
07/05/18 05:59:21
どう見てもtmpfile()が標準なことを知らなかったのをごまかすために、
int main()に話をすり替えてるだけにしか見えん。

392:デフォルトの名無しさん
07/05/18 06:11:18
>>386
URLリンク(kansai2channeler.hp.infoseek.co.jp)
fも0又は1で表現される画像なら、問題自体(というか式(1))がおかしい。

393:デフォルトの名無しさん
07/05/18 06:37:43
>>377
ごめん。4行4列の行列の転置行列を表示するのに計算要るのか?
どういう計算するん?

394:デフォルトの名無しさん
07/05/18 06:47:51
添字の付け替えじゃないの?

395:デフォルトの名無しさん
07/05/18 06:51:17
それ計算言うて良いのか?>添え字の付け替え

396:デフォルトの名無しさん
07/05/18 06:56:53
tmpfile()って便利だな

397:デフォルトの名無しさん
07/05/18 07:25:11
>>391
どうみても標準って言葉と実装を理解しておらず、墓穴を掘ったことを
int mainの指摘をした相手がtmpfileを知らなかったことにしたいらしいw
っつーか、知っている知っていないはともかく、int mainの括弧の中は
敢えてANSI、ISOを持ち出した標準を謳うんであれば、なおさら準拠した
記述をすべきであって、していないからといって別に悔やむことはないぞw

398:デフォルトの名無しさん
07/05/18 09:42:32
>>392
fはこんな感じだったと思います。原因が入力画像の端も対象にしてました。
迅速に答えていただきありがとうございました。

399:デフォルトの名無しさん
07/05/18 10:18:05
まだやってるのか。

400:357
07/05/18 11:34:36
>>357
よろしくお願いします。

401:247
07/05/18 11:41:38
#include<stdio.h>
void chg(int *cnt){
*cnt *= *cnt%2 ? 5 : 10;
}
int main(){
int cnt;
printf("Cnt =>");
scanf("%d",&cnt);
if(cnt<0 && 9<cnt) return 1;
chg(&cnt);
printf("cnt(chg後)  :%d\n",cnt);
return 0;
}
mainでscanfを使わずにgetcharでかく方法を教えてください。

402:デフォルトの名無しさん
07/05/18 11:47:43
>>401
- scanf("%d",&cnt);
+ cnt = getchar() - '0';
とでも汁

403:デフォルトの名無しさん
07/05/18 11:48:46
>>400
>>380でレスがついてないか

404:デフォルトの名無しさん
07/05/18 11:49:45 BE:34938836-2BP(222)
>>400
入力が定義されてないのでこれで。
URLリンク(c-kadai.sakura.ne.jp)

405:357
07/05/18 13:30:51
>>380
ありがとうございます。
でも何か上手く動かないです…。
二つ目の???に何か入れないとダメなんですかね?

>>403
ありがとうございました。

>>404
どういうことでしょうか?

406:デフォルトの名無しさん
07/05/18 15:59:48
【質問テンプレ】
[1] 前進オイラー法
[2] 熱伝導方程式の初期値協会値問題を陽的差分法で解くためのプログラムを作成せよ。
  初期値(δu/δt)=(δ^2 u/δx^2)
u(0,t)=u(1,t)=0 (t>0)
u(x,0)=f(x) (0≦x≦1)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名 cc
 [3.3] 言語: C++
[4] 期限: 2007年5月18日17時

お願いします。


407:デフォルトの名無しさん
07/05/18 16:08:10
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] 不明
 [3.3] 言語: C言語
[4] 期限: ([2007年05月18日18:00
[5] プログラム全く分かりません。

以下になります。

(1)配列を使ってキューを実装したい。キューの先頭を管理する変数を
head、末尾を管理する変数をtail、データを格納すr配列をentry[]と
して、データ構造を考えなさい。ただし、格納するデータは文字(char)
のみとし、格納する最大個数はMAXSIZEとしてとしてdefineされているも
のとする。

(2)上記のデータ構造を用いてキューを実現しなさい。

(3)連結リストを使ってキューを実現しなさい。(教科書無いんで無視)

(4)(2)の配列による実装と(3)の連結リストによる実装を比較的考察し、
各々の特徴を整理しなさい。

以上です。よろしくお願いいたします。

408:デフォルトの名無しさん
07/05/18 16:22:57
3はやるのか

409:デフォルトの名無しさん
07/05/18 16:43:03 BE:48525555-2BP(222)
ていうか3をやらないと課題の意味が無い気が。

410:デフォルトの名無しさん
07/05/18 17:11:49
[1] 授業単元:
[2] 問題文(含コード&リンク):
以下のように10個のますに3つの白いコインと3つの黒いコインが配置されている。
・・□・
・・●・
・・●・
□○●□
・○・・
・○・・
・□・・
※「□」は空白を表す。「・」は完全に無視して下さい。
各コインは隣のますが空白であれば一度に一つずつ動かすことができる。
例えば、一番下の●は、右のますが空白であるので、
・・□・
・・●・
・・●・
□○□●
・○・・
・○・・
・□・・
のように動かすことができる。この手順を繰返し、
以下の最終状態の配置にする最短の手順を求めよ。

・・○・
・・○・
□●○□
・●・・
・●・・
・□・・



411:デフォルトの名無しさん
07/05/18 17:12:35
また、ますは
・・F・
・・G・
・・H・
ABIJ
・C・・
・D・・
・E・・
のようなラベルを用い、例の移動であったら、
「IJ」と表示すること。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ:gcc
 [3.3] 言語:C
[4] 期限: 5月20日まで
[5] 制限はとくにありません。
幅優先探索が適していると思うのですが、コードを書くとなると混乱
してしまいます。自分なりに頑張ったつもりですがお手上げです↓
どうかよろしくお願いします。


412: ◆kqWkheFZ3g
07/05/18 17:22:57
1授業単元:プログラミング実習
2問題文:配列を用いてn個までの値を入力し、その最大値、最小値、及び
全体の平均点を出すプログラムを作成せよ。
3環境:Linux3.2
gcc
C
4 2007年5月22日17時
5 ifやwhile、そして今日配列まで習いました。

よろしくお願いします!!


413:デフォルトの名無しさん
07/05/18 17:52:16
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
こうですか?>>407


414:デフォルトの名無しさん
07/05/18 18:09:49
C言語の入門らしいですがさっぱりです…
何らかの10進数を入力するとそれに1を加えた数を表示するプログラムをお願いします

Cygwin?を使ってます

415:デフォルトの名無しさん
07/05/18 19:07:55
めちゃくちゃ入門じゃん
とりあえずテンプレで書け

416:デフォルトの名無しさん
07/05/18 19:26:12 BE:54348847-2BP(222)
>>414
#include<stdio.h>
#include<stdlib.h>
int main(void){char tmp[256];fgets(tmp,256,stdin);printf("%d\n",atoi(tmp)+1);return 0;}

417:デフォルトの名無しさん
07/05/18 20:21:19
>>410
それ、取りうる状態の数が結構限られているだろ?
全ての状態をメモリ上に書き出せるんじゃないの?


418:デフォルトの名無しさん
07/05/18 21:40:35
>>417
最短の手順を求めるのが目的だから、
状態全部書き出せるかどうかはあんま関係ない気もするけど

ループ検出のハッシュでコリジョンを防ぎ易い、とかその辺の話?

419:デフォルトの名無しさん
07/05/18 21:42:40
最終状態からの距離を求めるのが
簡単ということでしょ

420:デフォルトの名無しさん
07/05/18 21:56:41
>>410
URLリンク(kansai2channeler.hp.infoseek.co.jp)
パフォーマンスのことは全然考えてないけど、一応答えは出る。

421:デフォルトの名無しさん
07/05/18 22:37:16
いきなりなんですけど

 if(0 < x > 60)

ってありですか?

422:デフォルトの名無しさん
07/05/18 22:38:59
>>421
ありだが、つねに偽になる

423:デフォルトの名無しさん
07/05/18 22:42:07
>>422
ありがとうございます!

424:デフォルトの名無しさん
07/05/18 22:46:58
>>423
if(0 < x < 60)
なら常に真になる

理由
【1】.まず 0 < x が評価されて 0 または 1 になる
【2】.次に (【1】の評価結果) < 60 が評価されいずれの場合でも真になる

誤解の無いように!

425:デフォルトの名無しさん
07/05/18 22:50:35
>>424
ありがとうございますッ><
これでこの部分は完璧!!!!!!!!!!!!!!!!1111

426:デフォルトの名無しさん
07/05/18 23:18:20
>>424
スゲー
なんかCの罠って感じだな

427:デフォルトの名無しさん
07/05/18 23:20:37
Cに限ったことじゃないんだけどね

428:デフォルトの名無しさん
07/05/18 23:27:23
それをどの部分で使うのか?>>425

429:デフォルトの名無しさん
07/05/19 00:14:34
バグを仕込む時

430:デフォルトの名無しさん
07/05/19 00:20:05
>>429
納得

431:デフォルトの名無しさん
07/05/19 01:34:54
URLリンク(www.youtube.com)
C言語怖いんか~

432:デフォルトの名無しさん
07/05/19 02:26:06
>>431
大きくスレ違い!

433:デフォルトの名無しさん
07/05/19 08:21:08
[1] 授業単元:入力2
[2] 問題文(含コード&リンク):文字列を10回入力して、最も大きな文字列を表示する。
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ名とバージョン: LSI C-86
 [3.3] 言語:C言語
[4] 期限: (2007年5月20日まで)
[5] その他の制限:入力はscanf関数ではなく、getchar関数を使用する。
文字列の比較はstrcmp関数を使用する。


434:デフォルトの名無しさん
07/05/19 08:35:27
> 最も大きな文字列
何のこっちゃ?文字の大きさの基準は?

435:デフォルトの名無しさん
07/05/19 08:39:21
>>433
VC++6でしか確認してねーけど。こういうこと?

#include <stdio.h>
#include <string.h>
void main(void) {
int i=0, c=0;
char max;
while ( i<10 ) {
c = getchar();
if ( (c>='a' && c<='z') || (c>='A' && c<='Z') ) {
if ( strcmp( &max, &((char)c) )>0 ) max=c;
++i;
}
}
printf( "MAX: %c\n", max );
}


436:デフォルトの名無しさん
07/05/19 09:08:10
>>434
文字の大きさの基準は、課題にそれ以上のことが書かれていなかったので
正直なところよくわかりません。
想像だとstrcmp関数の戻り値で判断、文字コード順で比較して
最も大きな文字列を表示ではないかと……。

>>435
ありがとうございます。
1度LSI C-86で動かしてみます。

437:デフォルトの名無しさん
07/05/19 09:12:10
>>433 strcmpつかったけど、文字列の長さで大小関係が決められるのではなく、
一致しなかった場合は一致しなかった場所の文字同士の文字コードの比較で、
コードの値の大小関係で正か負が決定されてしまい、文字列の長さは考慮せず。
例えば、aBcdef と abcd を比較した場合、Bとbが不一致でbの方がコードの値が
大きいんで、文字列は短いけどabcDの方が大きいという結果に。

URLリンク(www.psl.ne.jp)

#include <stdio.h>
#include <string.h>
int main(void) {
char ch,strmax[256]={"\0"},buf[256];
size_t i,j;

for(i=0; i<3; i++) {
j=0;
do{
ch=getchar();
if(ch=='\n') break;
else buf[j++]=ch;
}while(1);
buf[j]='\0';
if( strcmp(strmax,buf) < 0 ) {
strcpy(strmax,buf);
}
}
puts(strmax);
return 0;
}

438:デフォルトの名無しさん
07/05/19 09:18:21
>>437の訂正
for(i=0; i<3; i++) {  は i<10に。

439:デフォルトの名無しさん
07/05/19 10:48:26
>>437
ありがとうございます。
助かりました。
文字列の長さについてはふれられてなかったので、大丈夫だと思います。


440:デフォルトの名無しさん
07/05/19 11:58:31
[1] 授業単元:
[2] 問題文(含コード&リンク):
  URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC++2005
 [3.3] 言語: C++
[4] 期限: 2007/ 5/ 19/ 23:59 まで
[5] その他の制限: map と list を用いる

問題文が少々長いですが、どうかよろしくお願いします

441:デフォルトの名無しさん
07/05/19 11:58:44
>>436
>435は文字の大きさを比較しているので要注意。
しかし、ほんとにLSI-C86使っているのか?
とんでもないな。

442:デフォルトの名無しさん
07/05/19 12:06:13
>>440
くそぅAccess使っていいならすぐなんだがな

443:デフォルトの名無しさん
07/05/19 12:56:40
>>440
リレーションPを構造体で作れ、と言ってるのにサンプルはクラスなんだが、
クラスで良いんだよな?

444:デフォルトの名無しさん
07/05/19 13:12:36
>>440
はいクラス使ってです

445:デフォルトの名無しさん
07/05/19 14:23:31
>>420
パフォーマンス云々以前に
malloc(0) を呼ぶと NULL が返ってくる可能性があることを
全く考慮していないだろ?


446:デフォルトの名無しさん
07/05/19 15:06:30
>>440
URLリンク(kansai2channeler.hp.infoseek.co.jp)

lzhの中身はソース1つとP.txt、SPJ.txt

クオリティ低い・・・。
仕事でこんなコード書いてたら殴られそうだ。

447:デフォルトの名無しさん
07/05/19 15:15:04
>>445
mallocがNULLを返した時点で即座に終了するようになっていることを失念していたw
指摘ありがとう。

URLリンク(kansai2channeler.hp.infoseek.co.jp)
ついでに、キューが空のときpushが誤動作するのを修正。この問題では顕在化しないけど。

448:デフォルトの名無しさん
07/05/19 15:32:37
>>446
ありがとうございました ホントに助かります
殴られたら耐えます

449:#
07/05/19 17:42:46
[1] 授業単元:アルゴリズム
[2] 問題文:
レポート課題内容: 実行時引数として算術式を前置記法で与える。演算子は + と *,演算数は英字1字とする。
その算術式を表す二分木を作り,その先行順,中央順,後行順,レベル順での走査して,つぎのように出力するプログラムを作れ。
 例: ./a.out "*+a**bc+def"
    * + a * * b c + d e f
    a + b * c * d + e * f


[3] 環境
 [3.1] OS:Windows/XP
 [3.2] コンパイラ名とバージョン:cygwin
 [3.3] 言語:C
[4] 期限: 5月21日
[5] その他の制限: リンクによるリスト処理の形
どなたかお願いします

450:デフォルトの名無しさん
07/05/19 21:15:34
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):20元ほどの連立方程式を部分ピボット選択法をとりいれて解けるプログラムをつくりなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: Visual Studio.net 2003
 [3.3] 言語: C
[4] 期限: 5月21日22時まで
[5] その他の制限:特に無し。

お願いします。


451:デフォルトの名無しさん
07/05/19 21:52:33
>>449
URLリンク(kansai2channeler.hp.infoseek.co.jp)

リンクによるリスト処理の形というのが何のことかイマイチ分からない・・・

>>450
プログラム云々というより数学がorz

452:デフォルトの名無しさん
07/05/19 22:44:45
>>450
部分ピボット選択法って何だ?ガウスの消去法の事か?

453:デフォルトの名無しさん
07/05/20 00:47:44
>>452
そうです。説明不足すみません。

454:デフォルトの名無しさん
07/05/20 01:03:19
>>450
URLリンク(kansai2channeler.hp.infoseek.co.jp)

455:デフォルトの名無しさん
07/05/20 01:41:37
>>454
本当にありがとうございます!

456:デフォルトの名無しさん
07/05/20 08:56:46
【質問テンプレ】
[1] Basic プログラミング
[2] 次の4つの関数を作りなさい:
  
1.Integerのみで構成されたArrayの中から、ユーザー任意のIntegerのみを
  消去する(複数個ある場合も考えること)
2.ArrayAとArrayBがあるとして、Aの中のIntegerが全てBの中に含まれているかを
  調べ、含まれていたらメッセージをOutputする。
3.Arrayを小さいIntegerから大きいIntegerの順に並び変える。
4.Arrayを大きいIntegerから小さいIntegerの順に並び変える。
  
[3] 環境
 [3.1] OS: Windows 
 [3.2] 不明です
 [3.3] 言語: C++
[4] 期限: 5/29/07までお願いします
[5] その他の制限:まだ初めて2ヶ月目なのであまり進んだことは使えません。
  Forループ、if、Switchを習い終えたレベルです。
  どうかよろしくお願いします。

457:デフォルトの名無しさん
07/05/20 08:59:36
BasicプログラミングでC++とはこれ如何に?

458:456
07/05/20 09:00:56
期限: 5/19/07まででした、訂正します。

459:456
07/05/20 09:02:17
あーーまた間違えてしまった 期限: 5/23/07までです。何回も申し訳ありません。

460:456
07/05/20 09:04:25
>>457

紛らわしくてすみません、アメリカの大学に在学してまして
クラスの名前がBasic Programingなのです。プログラミングの最初に取る基本のクラスです。

461:デフォルトの名無しさん
07/05/20 09:14:15
まあ、宿題には変わりないからそこらへんは気にしない。

462:デフォルトの名無しさん
07/05/20 09:14:38
っつーか、大学の名前出せ。こんなところを頼っているようじゃ
そんな生徒はとっとと日本に帰国させた方が良いと通報しとくからw

463:デフォルトの名無しさん
07/05/20 09:43:06
>>456
ホームシックだからって、宿題を装ってまでして気を紛らわそうとするなよw
もっと構ってくれる板たくさんあるぞ!

464:デフォルトの名無しさん
07/05/20 09:52:06
御託はいいからさっさと宿題処理しろよハゲ。

465:デフォルトの名無しさん
07/05/20 10:52:52
>456
消去するって具体的にはどうすんの?
値を0にするだけ?それともそこに後ろの値を詰めるの?

466:456
07/05/20 11:20:02
>>465
ただ消去しろ、とのことなので
0でも詰めるのでもないと思います。
空きのArrayにしろと言う事だと思いますが、そのようなことは可能なのでしょうか?

467:デフォルトの名無しさん
07/05/20 11:21:31
該当するデータがあったら抹消、空いたところに数値を先頭に向かって詰めろと?
不要になった部分のメモリも開放しろと?

468:デフォルトの名無しさん
07/05/20 11:22:07
空きのArrayなんか存在しません。

469:デフォルトの名無しさん
07/05/20 11:25:29
>>467
不要になった部分のメモリも開放しろということだと思います

>>468
無知なもので、すみません。
たとえばサイズ5のArrayに4つまでしかDataをインプットしなかったら
最後の一個は空きにはならないのでしょうか?

470:デフォルトの名無しさん
07/05/20 11:35:58
っつーか、最初に格納するデータの要素の個数は決まってない?
データを入力しながら動的にメモリを確保していくやり方で良いんかい?

471:デフォルトの名無しさん
07/05/20 11:38:49
URLリンク(www.geocities.jp)
こういった内容も授業でやったん?

472:デフォルトの名無しさん
07/05/20 11:40:09
最初にユーザー任意でサイズは決めるものと思ってもらって大丈夫です。

473:デフォルトの名無しさん
07/05/20 11:42:02
>>471
いえ、Delete Operatorは、まだ習っていません。


474:デフォルトの名無しさん
07/05/20 11:43:52
もしDeleteやその他を使わなければいけない、もしくは使ったほうが遥かに楽
などでしたら、使っても差し支えないと思います。

475:デフォルトの名無しさん
07/05/20 11:49:31
とりあえず、配列の取り扱いが分かれば
あとは並び替えなんてのはありきたりなソートのライブラリを使ってしまえば良いし。
C++はさっぱりだから俺はパス、すまそ orz

476:デフォルトの名無しさん
07/05/20 11:57:11
ライブラリを使うのは多分ダメなので
ループを使ってチェックをするやり方だと思います。
皆さんにとっては簡単な問題なのに、尋ね方が悪く手間取らせてすいませんでした。

477:デフォルトの名無しさん
07/05/20 12:06:13
いーやいやいやいやいや、自分で定義したライブラリを。
っつーか、使えるものを使うってのは当たり前じゃね?
変に条件を絞るってなら、その条件を言ってもらわんと。
ソートのアルゴリズムの指定もありか?

478:デフォルトの名無しさん
07/05/20 12:12:52
迷惑かけて申し訳ありません。
今、調べたらソートのアルゴリズムの指定がありました。

大きい順に並べる時、
A B C D E F
まずAと(BCDEF)を比べて、Aより大きいものがあれば交換。
つぎにBと残りを比べて大きいものがあれば交換、CでDで
という感じです。

479:デフォルトの名無しさん
07/05/20 12:20:21
要するに基本選択法ね。
URLリンク(www.miyagi-ct.ac.jp)



480:デフォルトの名無しさん
07/05/20 12:35:58
アドレスが切れてるみたいですが、基本選択法で間違いありません。
それと何回も申し訳ないのですが、Pointerはまだ習っていないので使えません。
よろしくお願いします。

481:デフォルトの名無しさん
07/05/20 12:42:02
切れてるって、冒頭のh抜きってだけやん・・・あんたやばいよ。
情報処理の取り扱いに慣れてないな。今すぐ専攻している学問をやめて
ほかの路線を考えた方が良いぜ?こんな俺でも3流以下の大学中退だからw

482:デフォルトの名無しさん
07/05/20 13:02:54
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
if文、 if~else~文、 if~else if~else文、 switch文、 三項演算子、をすべて用いてクイズを作成しなさい
反復文は使えないものとし、同じ問題はでないものとする
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/25まで
[5] その他の制限: 特になし

よろしくお願いします。

483:デフォルトの名無しさん
07/05/20 13:13:02
>>481
すみません言葉が足りませんでした
教えていただいたページが存在しなかったので
アドレスのリンクが切れていると言ったつもりでしたが・・・


484:デフォルトの名無しさん
07/05/20 14:05:53
期限: 5/23/07
とりあえず現地時刻のってことだろうから、ワシントンD.Cの時刻を参考にした場合
URLリンク(www.worldtimeserver.com)
日本時間から13時間差し引いた時刻となるから、まぁ、日本時間でその期日で間に合っていりゃ良いか。
誰か頼む。俺はちと寝る。時差ぼけじゃ~~なくてただの徹夜明け orz

485:デフォルトの名無しさん
07/05/20 14:09:18
バブルソート

486:デフォルトの名無しさん
07/05/20 14:11:00
>>485
違うって、そりゃ各々の隣接する要素同士の比較、交換やろ?w

487:デフォルトの名無しさん
07/05/20 14:15:34
>>456>>466
deleteは習ってない、ソートする課題がある、ということは、
Arrayは固定長で、要素を消す時は前詰めして
要素数を別変数で管理する方法だと思うがどうか?

488:デフォルトの名無しさん
07/05/20 14:32:06
>Forループ、if、Switchを習い終えたレベルです
なんかVBくさい

489:デフォルトの名無しさん
07/05/20 14:44:33
>>484
日本時間で23日の午後4時までです。
お疲れのところすみませんでした。


490:デフォルトの名無しさん
07/05/20 14:52:09
>>487

>Arrayは固定長で、要素を消す時は前詰
はい長さは固定で、消した後については特に指定がないので
前詰めで大丈夫だと思います。

>要素数を別変数で管理
理解が足りなくてすみません
array[i]のようにした後、iと固定サイズでループを作ったりすることでしょうか?

491:デフォルトの名無しさん
07/05/20 15:02:10
>要素数を別変数で管理
num = 有効な要素の数
ってことじゃないの?
a[0] = 100
a[1] = 200
a[2] = 300
a[3] = 400
num = 4
↓a[1]を消して詰める
a[0] = 100
a[1] = 300
a[2] = 400
a[3] = 400
num = 3

492:デフォルトの名無しさん
07/05/20 15:15:43
面倒なので全部algorithmでやってしまえ~

493:デフォルトの名無しさん
07/05/20 15:22:41
小生の環境では>>479はきちんと表示される

494:デフォルトの名無しさん
07/05/20 15:46:15
国外からのアクセスを拒否ってるんじゃない?

495:デフォルトの名無しさん
07/05/20 15:52:57
[1] 授業単元: C++実習
[2] 問題文(含コード&リンク):
下記①②の銀行に「一億円」を預けた場合、何年と何ヵ月後に②の銀行の預金額を①の銀行の預金額が超えるか
①利率0.08% (複利)の銀行
②利率0.09% (単利)の銀行
反復文を用いて①②双方の毎月の預金額を表示し、②の銀行の預金
額を①の銀行の預金額を超えた時点で反復文を終了後、「①の銀行は
●年●ヵ月後に②の銀行の預金額を超える」と表示しなさい。

また、上記①の銀行に「1億円」、②の銀行に「9999万円」を預けた場合、
どちらが先に「1億200万円」になるか、前問と同じ処理を行い、最後に
「●の銀行が●年●ヵ月後に先に1億200万円貯まる」と表示しなさい。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] visual studio2005
 [3.3] 言語: C++
[4] 期限: 5/26まで
[5] その他の制限: 特になし

よろしくお願いします。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch