C/C++の宿題を必殺仕事人始末人 17代目

このエントリーをはてなブックマークに追加
新スレ(冬休みの宿題edition)を立ててくるか
953937:03/12/14 21:46
結局俺の質問に答えてくれないのでしょうか?
それなりに楽しませてもらってます>>953
>>952
大金先生はどうしました?
956937:03/12/14 21:56
>>954
ありがとうございます。
頑張ってください。お願いします。
957937:03/12/14 21:56
また間違えた。
>>955です。
958デフォルトの名無しさん:03/12/14 22:12
時刻のデータを扱うための Time クラスを作成せよ。次の関数を使ってプログラムを完成させよ。
 アクセス制御も行うこと。

// 時刻を表示する
void print( const Time &a )
{
cout << a.getHour() << ":" << a.getMinute() << ":" << a.getSecond() << "\n" ;
}

// 時刻 a から時刻 b までの経過時間を秒数で返す
int keikaByousuu( const Time& a , const Time& b )
{
return b.getTotalSeconds() - a.getTotalSeconds() ;
}

int main()
{
Time t1( 9 , 20 , 15 ) , t2 ; // 9時20分15秒
print( t1 ) ;

t2.setHour( 12 ) ;
t2.setMinute( 9 ) ;
t2.setSecond( 59 ) ;
print( t2 ) ;

cout << "経過秒数:" << keikaByousuu( t1 , t2 ) << "\n" ;
return 0 ;
}

まったく解りません・・・お願いします
>>958
んー、とりあえず、クラスに必要な要素を考えるわけだ。

class Time {
private:
int hour,minute,second; // 時刻を保持
public:
Time(int h,int m,int s); // コンストラクタ

// set
void setHour(int h);
void setMinute(int m);
void setSecound(int s);

// get
int getHour();
int getMinute();
int getSecound();

int getTotalSeconds(); //
}
961958:03/12/14 22:42
>>960
どうもすみません。ありがとうございます。

962わかめ:03/12/14 22:43
ギッブス現象について簡潔に説明せよとの宿題が出ました。
ググッっても出てこないし。先生よろしくです!
963デフォルトの名無しさん:03/12/14 22:46
964デフォルトの名無しさん:03/12/14 22:46
それはC/C++の宿題なのかと
966わかめ:03/12/14 23:00
サンクスです!
おかげで助かったよ。
967デフォルトの名無しさん:03/12/15 00:41
C++でテキストファイルから数字を1文字ずつ読み込みたいのですが、
どうしたらよいですか?
Cで書けばfscanf(infile, "%1d", i);と同じ事をしたいのですが。
968デフォルトの名無しさん:03/12/15 00:47
969デフォルトの名無しさん:03/12/15 00:49
>>968
私は京都大学の学生ではありません。
970デフォルトの名無しさん:03/12/15 00:56
>>968
ありがとうございます。
そのサイトによると、
>>整数に対して、抽出子は常に整数の全桁数を抽出
するらしいので、素直には出来ないみたいです。
もう少し色々探してみます。
fstream.get() で文字として読み込むというのは?
972デフォルトの名無しさん:03/12/15 01:14
俺は、こんなんかと思った。
inputstream >> setw(1) >> i;

>>971 なるほど。
973967:03/12/15 01:28
>>971
文字として読み込んで数字に直すしかありませんかねぇ。
ともあれありがとうございました。
>>972
setwは出力にしか作用しなかったと思うのですが。
間違ってたらすまそ。
その先どうあつかいたいのかにもよるから答えかねるなあ。
場合によっては一度 int で読み込んでから分割したっていいわけだし。
新しい多倍長桁整数の読み込みをやっているのなら

自分でデリミタ決めて単語単位でストリームからstringに読み込むのなら
getline関数が使える。

一度char配列にファイルの中身全部読み込んでから
生のchar扱ってアナライズする必要があるなら
vector<char> hoge(
istreambuf_iterator<char>( fin ),
istreambuf_iterator<char>( ),
);
とかね。
>>974
関数宣言でちゅか?
ちなみにな。
本当に1文字読み込んでやるだけでいいのなら
char型変数に読み込んでisdegit関数を呼んで判定すればいいだけだぞ。
scanf使わない場合のCと実質同じ低級な方法。
#もっとも整数以外についてどう処理するか。
 たとえばどれを入力エラーとしどれをデリミタとするかなどで細かく分かれてしまう。
 だからその先どうしたいかを聞いている。
 典型的な処理ならたいてい標準ライブラリの高級な機能が使えるからな。
>>975
最近その事実知って反応したくてしかたないのか?
不満なら適当に括弧で囲ってね。
使ってるコンパイラによって避け方の程度も違うんだから。
vector<char> hoge(
(istreambuf_iterator<char>( fin ),)
istreambuf_iterator<char>( ),
); //GCC3用
とかいくつも羅列してしょうがない。
わかる奴はわかるんだからそれはこの方法を
質問者が採用してからでいいだろう。
突っ込まれる前に自分で訂正しとくか。
・・・つーか970過ぎで無駄なレスを増やすのは好まないんだが
カンマが括弧内に入ってしまってる。
正しくは
vector<char> hoge(
(istreambuf_iterator<char>( fin )),
istreambuf_iterator<char>( ),
);
ね。

無駄レスにならんよう一番信頼性の高い方法でも挙げとくか。
istreambuf_iterator<char> begin( fin );
istreambuf_iterator<char> end( );
vector<char> hoge( begin, end);

これ以上は>>973がまた現れたらだな
istreambuf_iterator<char> end;
だな。もう駄目だ。俺が無駄レス付けまくり……逝ってくるっつーか寝るわ
980975:03/12/15 06:55
>>977-979
何をそんなに興奮してるの?
ポインタの意味が全体的に分かりません…
>>981
対処不能
>>982
勃起不全
もっと殺伐としないと,質問厨が付け上がるな。
985デフォルトの名無しさん:03/12/15 16:53
二次元行列out[][]をタブ区切りでファイルに出力したいのですが、うまくいきません。
基礎的な質問ですみませんがよろしくお願いします。

for (i = 0; i < n; i++) {
for (j = 0; j < m ; j++) {
out[i][j] = pit[i][j]/sum[i][j];
fprintf(fpo,"%d",out[i][j]);
fprintf(fpo,"%c",'\t');
}
}
どう、上手くいかないのですか?
・コンパイルが出来ない
→コンパイラが出すエラーを書く

・動作はするが、思い通りではない
→期待する出力と実際の出力を書く
for (i = 0; i < n; i++) {
for (j = 0; j < m ; j++) {
out[i][j] = pit[i][j]/sum[i][j];
fprintf(fpo,"%d",out[i][j]);
fprintf(fpo,"%c",'\t');
}
fprintf(fpo, "\n");
}
989デフォルトの名無しさん:03/12/15 17:44
ファイルに数字を書き込んで、その値をすべて画面に出力するプログラムをお願いします。
(例)
02 03 23 24 34
の値がすべてつながって出てくるようにしたいのです
今の状態だと、
printf("%d%d%d%d%d",02,03,23,24,34);
とすると出力されますが、
作成しなくては、いけないのは
printf("%d",a);
として一つのまとまりとして出力したいのです。
お願いします。
990デフォルトの名無しさん:03/12/15 17:52
ファイルを書き込んでその値を画面に出力するプログラムを教えてください。
処理の流れとしては、
aをファイルに繰り返し書き込みをして
4回繰り返したときaaaaを表示します
よろしくお願いします。

ある数字aとしてやるならば、

char buf[1024];
int a[5]={2,3,23,24,34};
int i;
sprintf(buf,"%02d",a[0]);
// %の後に数字を書くと桁数指定、更に0をつけると空いた桁を0で埋める。
for(i=1;i<5;i++){
sprintf(buf,"%s%02d",buf,a[i]);
}
printf("%010d\n",atoi(buf));
printf("%s\n",buf);

なお、0を先頭に書くと八進数なので、
・010=10(8)=8(10)
・011=11(8)=9(10) となってイクナイ。
>>989
>>990
意図がわからないので、宿題全文を書いてください。
>>990
#include <stdio.h>

int main(void)
{
FILE *fp;
int i;
fp = fopen("hoge.txt", "w");

for(i = 0; i < 4; i++)
{
fputc('a', fp);
}
freopen("hoge.txt", "r", fp);

while( (i = getc(fp)) != EOF )
{
putchar( i);
}
fclose(fp);
return 0;
}
よくわからないけどこんなかんじ?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=163
↑のソースに、
1) 引数で指定したk番目の後ろにノードnを追加する関数insertを追加。
void insert(struct node *p, struct node *n, int k)
(2) (1)で追加されたソースコードの構造体nodeの構成を以下のように改良し、
改良された構造体nodeにあわせて、ノード追加や表示などの各関数の処理の修正をする。

struct node{
char name[30];
int age;
struct node *next;

(3) (2)で修正されたプログラムを、以下のような、名前と年齢がスペースで区切られて記述された
データファイルを読み込んでリストを作成するように改良する。

Takeshi 40
Mansei 38
Gikomonar 30

(4) 指定された年齢と一致するデータを全て表示する関数findallを再帰的呼び出しを用いて作成して追加
void findall(struct node *p, int age)
(5) n番目とm番目のノードを交換する関数exchangeを追加。
void exchange(struct node *p, int n, int m)
(6) n番目の後ろにあるノードを削除する関数removenodeを追加。
void removenode(struct node *p,int n)
(4〜6は2や3で改良されたプログラムに追加していく。)
996桜舞:03/12/15 19:18
 
997桜舞:03/12/15 19:19
(´・ω・`) 1000
999桜舞:03/12/15 19:19
1000
(´-ω-`) 1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。