C/C++の宿題を片付け ..
[2ch|▼Menu]
166:デフォルトの名無しさん
07/05/16 13:02:59
>>162
#include <stdio.h>
#include <string.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
char buf[4];
sprintf(buf, "%03o", num);
printf("binary number:");
for (int ic = 0; ic < 3; ++ic) {
static char const * const binaries[] = {
"000", "001", "010", "011", "100", "101", "110", "111"
};
printf("%s", binaries[buf[ic] - '0'] + (ic == 0 ? 1 : 0));
}
printf("\n");
return 0;
}


167:デフォルトの名無しさん
07/05/16 13:10:56
>>162
// 前半は>166を流用
#include <stdio.h>
int main()
{
printf("Input decimal number.:");
int num = 0;
scanf("%d", & num);
if (num > 255 || num < 0) {
fprintf(stderr, "Illegal number.\n");
return 1;
}
static char const * const binaries[] = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
};
printf("binary number:%s%s\n", binaries[num >> 4], binaries[num & 0xf]);
return 0;
}


168:デフォルトの名無しさん
07/05/16 13:55:23
>>161
これ一ヶ月ほど前に見たような

169:デフォルトの名無しさん
07/05/16 13:59:46
スレリンク(tech板:473番)
だったわ、宿題じゃなかったか


170:デフォルトの名無しさん
07/05/16 14:07:31
俺も見たような気がしたけどこれだった
スレリンク(tech板:417番)

171:デフォルトの名無しさん
07/05/16 14:12:41
これってprint増やす以外に作る方法ってありますか?

// 配列を反転するプログラム(の予定)
#include <stdio.h>
int tables[10];
void print(void)
{
for (int i = 0; i < 10; i++) {
printf("%d:", i);
printf("%d\n", tables[i]);
}
printf("\n");
}
void reverse(void)
{
for (int i = 0; i < 10/2; i++) {
tables[i] = tables[9-i];
tables[9-i] = tables[i];
}
}

int main(void)
{
for (int i = 0; i < 10; i++) {
tables[i] = i + 100;
}

172:デフォルトの名無しさん
07/05/16 14:27:26
>print増やす
意味が分からん。
それよりもmain内で関数が呼ばれてない。
あと、配列をグローバルにする必要性は無い。

173:デフォルトの名無しさん
07/05/16 14:59:42
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
10個の実数データをキーボードから入力し,配列data[10]に格納しなさい。そして,各要素の小さい方からの順位を決定して,別の配列rank[10]に格納しなさい。最後に,入力データdata[10]と順位rank[10]をともに出力しなさい。

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:borland
 [3.3] 言語:C
[4] 期限:日曜日
[5] その他の制限:

よろしくお願いします。

174:デフォルトの名無しさん
07/05/16 15:23:15
>>133
助かりました!ありがとうございます!

175:デフォルトの名無しさん
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] 問題文(含コード&リンク):
文字列@と文字列Aを比較し、正しければ○、正しくなければ×を出力せよ。
文字列は半角英数、全角、空白、記号も含める。
(文字列@、Aともに空白の場合はエラーを出力する。)

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

[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("文字列Aを入力してください。--->");
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("文字列Aを入力してください。--->");
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)
A chg関数に、入力した値を渡す。(ポインタ)
B その値が2で割って余りが0なら10倍し、余りが1なら5倍する。
C 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
>B その値が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を入力したときに表示したいのです


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

4171日前に更新/299 KB
担当:undef