C/C++の宿題を片づけます 49代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/08/10(水) 17:10:47あなたが解けないC/C++の宿題を片づけます
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows/Linux/等々
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
[3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【前スレ】
48代目: http://pc8.2ch.net/test/read.cgi/tech/1121471445/
【歴代スレは>>2-13】
0655デフォルトの名無しさん
2005/09/04(日) 13:43:15つーか添削しないとまずいの?
1からのほうが楽。
0656627
2005/09/04(日) 14:00:02>>638
そのまま提出すると先生がモニョルかもね
ttp://oku.edu.mie-u.ac.jp/~okumura/pukiwiki/?cmd=read&page=2005-04-29&word=%B4%D8%BF%F4
ネストした関数を外に出すのは簡単だ。引数が増えるけど
バグがあるのは知らんかった
0657デフォルトの名無しさん
2005/09/04(日) 14:02:10たぶんこんな感じ?
#include<stdio.h>
int main()
{
int value,n=0,sum=0,min=9999,max=0;
for( ; scanf("%d", &value ) == 1 && value > 0 ; ++n , sum+=value){
if(max < value) max = value;
if(min > value) min = value;
}
if(n)printf("min=%d\nmax=%d\nave=%g\n" , min , max , sum*1.00/n );
return 0;
}
0659デフォルトの名無しさん
2005/09/04(日) 14:13:38#include<stdio.h>
main(){
int i,min,max,sum,v;
scanf( "%d", &v );
min=max=sum=v;
for( i=1; ; i++ ){
scanf( "%d", &v );
if( v ) break;
if( min > v ) min=v;
if( max < v ) max=v;
sum+=v;
}
printf(“max=%d\nmin=%d\nave=%lf\n". max,min,(double)sum/i);
}
0660デフォルトの名無しさん
2005/09/04(日) 14:14:10#include <stdio.h>
int main(void) {
unsigned int min=UINT_MAX, max=0, sum=0, num=0, input=0;
for(; scanf("%ud", &input); num++) {
if(input==0)
break;
min = min>input ? input : min;
max = max<input ? input : max;
sum += input;
}
if(num) {
printf("max = %ud\nmin = %ud\nave = %f\n", max, min, (double)sum/n);
} else {
puts("No data");
}
return 0;
}
0661デフォルトの名無しさん
2005/09/04(日) 14:15:48#include <stdio.h>
#include <limits.h>
int main(void)
{
int input_value;
int max = 0, min = INT_MAX;
int sum = 0, count = 0;
int status;
while (status = scanf("%d", &input_value), input_value != 0) {
if (status != 1 || input_value < 0) {
fprintf(stderr, "入力エラー\n");
return -1;
}
count++;
sum += input_value;
if (max < input_value) {
max = input_value;
}
if (min > input_value) {
min = input_value;
}
}
if (max) {
printf("最大値:%d\n最小値:%d\n平均値:%f\n", max, min, (double)sum / count);
}
return 0;
}
0662デフォルトの名無しさん
2005/09/04(日) 14:56:40文字列として表示。
・・お願いします。
0663デフォルトの名無しさん
2005/09/04(日) 15:07:38文字配列3つ用意
添え字も i, j, k で用意する
scanf で入力受付
i, j, k を初期化
入力文字列を'\0'まで1文字ずつチェック
添え字を2でMODをとると0か1になるんで条件分岐
if で奇数
else で偶数
それぞれ1文字ずつ配列に入れていく
ループを抜けたら j, k の位置に'\0' を入れる。
printf でそれぞれを表示
0664デフォルトの名無しさん
2005/09/04(日) 15:15:28#include<stdio.h>
int main()
{
int i;
char a[256],b[2][256];
fgets(a,256,stdin);
for(i=0;a[i] && a[i]!='\n';++i)b[i%2][i/2] = a[i];
b[i%2][i/2] = '\0';++i;
b[i%2][i/2] = '\0';++i;
printf("%s\n%s\n",b[0],b[1]);
}
0665デフォルトの名無しさん
2005/09/04(日) 15:15:29main(){
char in[1024],odd[1024],even[1024];
int i,ec,oc;
fgets( in, 1024, stdin );
for( i=ec=oc=0; in[i]; i++ ) if( i%2 ) { even[ec]=in[i]; ec++; }else{ odd[ec]=in[i]; oc++; }
even[ec]=odd[oc]=0;
printf( "%s %s\n" even, odd );
}
0667662
2005/09/04(日) 15:36:030668デフォルトの名無しさん
2005/09/04(日) 15:49:370669デフォルトの名無しさん
2005/09/04(日) 17:10:06みんなゼロ番目から数えているから気をつけてね
0670デフォルトの名無しさん
2005/09/04(日) 22:40:41失礼しました…あまりにもめちゃくちゃすぎましたね。
for(i=1,a[0]=-1;a[i-1]!=0;i++){
と
for(j=o;j<=i-1;j++){
の部分を授業でやったので、それを使いたかったんです。
>657,658,659,660,661
ありがとうございました!とても助かりました。
0671デフォルトの名無しさん
2005/09/04(日) 23:03:08個人の好みによるけど、a[0]=-1みたいなループ制御以外のを
ループの初期化式に入れるとわかりにくくなるから
面倒でも分けた方がいいんじゃまいかと思う
0672デフォルトの名無しさん
2005/09/05(月) 03:32:47[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/903.txt
[3] 環境
[3.1] OS: Linux/
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:9月3日十三時まで
[5] その他の制限:
どうしてもコンパイルが通りません
お願いいたします。
0673デフォルトの名無しさん
2005/09/05(月) 03:38:14いきなりfprintf?
0674673
2005/09/05(月) 03:41:22こういう使い方知らんかった。
0675デフォルトの名無しさん
2005/09/05(月) 03:58:53#include <stdint.h>
#include <stdlib.h>
0676デフォルトの名無しさん
2005/09/05(月) 04:09:29最後の行のケツ。全角スペース入っとる。
0677デフォルトの名無しさん
2005/09/05(月) 04:14:01>>676
ありがとうございます。
0678デフォルトの名無しさん
2005/09/05(月) 04:19:47[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/904.txt
[3] 環境
[3.1] OS: Linux/
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:9月3日十三時まで
[5] その他の制限:
コンパイルは通りました。ありがとうございます。
RGBAをYUVAに変換したあと
YUVAをRGBAに変換しているコードのつもりなのですが
実際の値を見てみるとそうなっていないようです
なぜかどうしてもわかりません。よろしくお願いします
0679デフォルトの名無しさん
2005/09/05(月) 04:37:42uint32_t
yuva2rgba(uint32_t n)
{
int r,g,b,a,y,u,v;
y = ((n & 0x000000ff) >> 0) - 0;
u = ((n & 0x0000ff00) >> 8) -128;
v = ((n & 0x00ff0000) >> 16) -128;
a = ((n & 0xff000000) >> 24) - 0;
r = y + 1.40200 * v;
g = y - 0.34414 * u - 0.71414 * v;
b = y + 1.77200 * u;
r = (uint8_t)r << 0;
g = (uint8_t)g << 8;
b = (uint8_t)b << 16;
a = (uint8_t)a << 24;
return r + g + b +a;
}
0680デフォルトの名無しさん
2005/09/05(月) 05:14:290681デフォルトの名無しさん
2005/09/05(月) 15:30:570682デフォルトの名無しさん
2005/09/05(月) 15:51:25ごめんなさい
0683デフォルトの名無しさん
2005/09/05(月) 15:52:58もし595さんがよければフリーメールでいいので連絡先を教えていただけませんか?
0684デフォルトの名無しさん
2005/09/05(月) 17:16:23そちらのメールアドレスに送りますので、
学校のメールアドレスかプロバイダのメールアドレスを書いてください。
0685595 ◆AOMdbQiVo.
2005/09/05(月) 17:20:28すまんが、さすがに2chでそれはできない。
たまーにここや他のスレに見てるから、わからんことがあったら聞いておくれ。
名無しの回答者の中に俺が混ざってるかもしれん。
あと、>>683がこれから先、もっと難しいことをやるなら
画像処理スレの方で聞いた方が、ここよりも良い回答が得られるかもしれない。
(俺は画像処理は専門外なので、これ以上のことは答えられん)
そうはいっても、もうちょっと質問の仕方とC言語の勉強が必要だけどな。
ま、とにかく、がんばってくれ
あとは名無しに戻るよノシ
0686デフォルトの名無しさん
2005/09/05(月) 17:21:29こらこらw本当に書きそうだからやめれw
0687デフォルトの名無しさん
2005/09/05(月) 17:27:37char usage[] = {数値列};
system(usage);
の人とはえらい違いだ。
0688デフォルトの名無しさん
2005/09/05(月) 18:54:53それから浮動小数点演算してるんだから、誤差は出るつもりでいないとな。
上限や下限に収まらないときもあるだろう。
とヒントをくらいは出しておこう。
0689デフォルトの名無しさん
2005/09/05(月) 21:05:25大学って10月からでしたっけか?
0690デフォルトの名無しさん
2005/09/05(月) 21:22:340691デフォルトの名無しさん
2005/09/05(月) 21:59:530692デフォルトの名無しさん
2005/09/05(月) 22:10:31冬休みもあったような気がするけど学期は変わらないかな
0693デフォルトの名無しさん
2005/09/05(月) 22:22:16それは知ってるけど後期課程とは言わないんじゃないのか?
ドクターじゃあるまいし。
0694デフォルトの名無しさん
2005/09/05(月) 23:10:21俺が行ってた大学はSpring SemesterとFall Semesterって言ってた。
他は知らない。
0695デフォルトの名無しさん
2005/09/06(火) 10:27:11そうですか・・・残念です。画像処理のアイデアも求められているのは授業の課題内容から
わかりますね。
この授業の課題は大変難しくて有名で、私にも色々事情があって本当に死のうかと考えた時期も
ありました。課題でないくらいで大げさなとおもわれるかもしれませんが、理由は省きますが
本当に欝になって死ぬことばっかり考えてた3週間でした。
ここのみなさんには課題をやっていただいたりして大変助かりました。
私が死ななかったのはみなさんのおかげであるという部分がかなりあります。
ありがとうございました。
0696デフォルトの名無しさん
2005/09/06(火) 10:36:580697デフォルトの名無しさん
2005/09/06(火) 10:42:21不快な事を書くな
0698デフォルトの名無しさん
2005/09/06(火) 10:53:51プログラミング言語C(通称K&R)の問題とかそれらしく書こうか。
0699デフォルトの名無しさん
2005/09/06(火) 11:02:110700デフォルトの名無しさん
2005/09/06(火) 11:02:11返事が送れてすみません。ありがとうございました
0701デフォルトの名無しさん
2005/09/06(火) 11:26:04以後スルーで。
0702デフォルトの名無しさん
2005/09/06(火) 11:36:54CSV形式のファイルの読み込みをしたいんですけど、ちょっとわからず、
知恵を貸していただけたら幸いかと思います。
#include<vector>
bool Load Maintenance File(LPCTSTR lpsaName,std||vectar<MAINTEREC>&vecRec))
↑ ↑
/*ファイル名*/ /*ファイル内容*/
===MAINTERECファイル内容===
=================================
MAINTEREC Rec;
整数(int)なら→Rec.nWave 浮動小数点(double)なら→Rec.dValve
vecRec.push_back(Rec);
=================================
※数字以外はエラー 必ず1つ目は整数値、二つ目は浮動小数点じゃない場合もある
格納配列 obj
0703702
2005/09/06(火) 11:38:58lpsaName→/*ファイル名*/
MAINTEREC→/*ファイル内容*/
0704702
2005/09/06(火) 11:45:36==ファイル中身== っていう感じでファイルがあります。
123,0.123(一行)
・ , ・
・ , ・
・ , ・
・ , ・
==========
整数 | 少数
↓ ↓
整数 実数
↓ ↓
Rec.nWave Rec.dValve
0705デフォルトの名無しさん
2005/09/06(火) 11:52:370706デフォルトの名無しさん
2005/09/06(火) 11:54:010707702
2005/09/06(火) 11:56:03>>705
0708デフォルトの名無しさん
2005/09/06(火) 12:04:00ファイルの中身として全角数字出したわけだから全角解析しろってことだろ?
0709702
2005/09/06(火) 12:17:17ごめんなさい・・・
>>708
0710デフォルトの名無しさん
2005/09/06(火) 12:25:32むかつく
0711702
2005/09/06(火) 12:30:51>>710
0712702
2005/09/06(火) 12:59:510713702
2005/09/06(火) 13:22:06作ったところまで教えていただけませんか?
0714デフォルトの名無しさん
2005/09/06(火) 13:33:250715デフォルトの名無しさん
2005/09/06(火) 14:03:071) ファイルを開く
2) while(ファイルから1行取得→string、EOFまで)
{
3) ・stringからカンマの前後で部分文字列切り出し
4) ・前後のスペース除去
5) ・文字列→数値変換
6) ・それぞれの値を構造体?のメンバに保存
7) ・構造体?をvectorにpush_back
}
8) ファイルを閉じる
あと、質問するときは>>1をちゃんと読んで、テンプレをちゃんと埋めること。
0716デフォルトの名無しさん
2005/09/06(火) 14:09:19多分>>1を読んでも意味がよくわからなかったんだよ
0717702
2005/09/06(火) 14:10:15すみません、焦っていて周りが見えなくなっていました。。。ごめんなさい!
0718702
2005/09/06(火) 14:14:38[2] 問題文(含コード&リンク): >>702
[3] 環境
[3.1] OS: win2000
[3.2] コンパイラ名とバージョン: VC++6.0
[3.3] 言語: C
[4] 期限:9月6日16時30分ぐらいまで
[5] その他の制限: 半角でお願いします
0719デフォルトの名無しさん
2005/09/06(火) 14:16:55>>702の一番下の格納配列 objって何を格納したいの?
0720702
2005/09/06(火) 14:28:16vecRec.push_back(Rec);→追加
0721702
2005/09/06(火) 14:30:01stringってC言語なんですか?
0722デフォルトの名無しさん
2005/09/06(火) 14:37:32最近多くて困る。@JaneStyle
0723デフォルトの名無しさん
2005/09/06(火) 14:38:15> MAINTEREC Rec;
> 整数(int)なら→Rec.nWave 浮動小数点(double)なら→Rec.dValve
これが意味分からない。MAINTERECの定義と、CSVの内容の書式を教えてくれ。
こういうことでいいのか?しかもstd::vectorってCじゃないし。
CSV = LINEが1つ以上
LINE = DATA ' ' DATA '\n'
DATA = INT | DOUBLE
0724デフォルトの名無しさん
2005/09/06(火) 14:40:37格納先変数でそ
0725デフォルトの名無しさん
2005/09/06(火) 14:41:28Ctrl+Zで案でゅ
0726デフォルトの名無しさん
2005/09/06(火) 14:51:15色々今試してみたらSHIFT+BackSpaceで再現出来た
0727702
2005/09/06(火) 15:09:24とりあえずもらった資料にはこれぐらいしか書いてないっす。。。
もう一度書きます。
bool LoadMaintenanceFile(LPCTSTR lpsaName/*ファイル名*/,std||vectar<MAINTEREC>/*ファイル内容*/&vecRec)
MAINTEREC Rec; ※数字以外はエラー
---------------- 一つ目は必ず整数
整数→Rec.nWave 2つ目は浮動小数点(ではない場合もある)
実数→Rec.dValve 格納配列ojb
vecRec.push_back(Rec);→追加
0728デフォルトの名無しさん
2005/09/06(火) 15:12:19これだけの量で間違いすぎ
0729702
2005/09/06(火) 15:14:52何を間違ってるの?
0730デフォルトの名無しさん
2005/09/06(火) 15:21:02std||vectar
間違い探し
0732702
2005/09/06(火) 15:26:230733702
2005/09/06(火) 15:58:43[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク): >>702
[3] 環境
[3.1] OS: win2000
[3.2] コンパイラ名とバージョン: VC++6.0
[3.3] 言語: C++
[4] 期限:9月6日18時00分ぐらいまで
[5] その他の制限: 半角でお願いします
0734デフォルトの名無しさん
2005/09/06(火) 16:01:000735デフォルトの名無しさん
2005/09/06(火) 16:05:180736デフォルトの名無しさん
2005/09/06(火) 16:06:280737デフォルトの名無しさん
2005/09/06(火) 16:08:290738デフォルトの名無しさん
2005/09/06(火) 16:09:46だとしたら、その仕様を書いた人間の頭が悪い。書き直させろ。
0739702
2005/09/06(火) 16:22:161) ファイルを開く
2) ファイルから1行取得し、EOFまで
{
3) ・数字なら処理を!数字でなかったらエラー
4) ・文字列を数値に変換
5) ・整数と実数にわける
6) ・整数ならRec.nWaveに保存してリストの末尾に追加するpush_back(Rec.nWave)
7) ・実数ならRec.dValveに保存してリストの末尾に追加するpush_back(Rec.dValve)
}
8) ファイルを閉じる
0740デフォルトの名無しさん
2005/09/06(火) 16:26:280741デフォルトの名無しさん
2005/09/06(火) 16:47:27だから、問題の仕様自体が曖昧に過ぎるから、皆書くにかけないんだよ。
聞く限りでは内容はかなり簡単そうなんだから。もしそれだけしか仕様が
与えられないのであれば、誰も書けない。
0742702
2005/09/06(火) 16:55:590743デフォルトの名無しさん
2005/09/06(火) 16:58:19fgetcsv
http://php.s3.to/man/function.fgetcsv.html
0744デフォルトの名無しさん
2005/09/06(火) 17:01:29カンマ区切りの場合、文字をダブルコーテーションで区切ると、中のカンマは文字扱い。
まずは扱えるCSVファイルの仕様を確定すること。
漢字が有る場合、漢字の一部をカンマと判断する場合があるので、
1バイト文字と2バイト文字は、それぞれ適切に扱う必要がある。
0745715
2005/09/06(火) 17:04:24期待した通りの物かどうか知らんが、とりあえず上げとく
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/905.txt
それなりに動くとこまでは確認した (↑のままじゃ動かないけど
0746デフォルトの名無しさん
2005/09/06(火) 17:05:030747デフォルトの名無しさん
2005/09/06(火) 17:08:32ふつう、タブでも固定でも無い
0748744
2005/09/06(火) 17:13:090749デフォルトの名無しさん
2005/09/06(火) 17:21:430750デフォルトの名無しさん
2005/09/06(火) 17:25:01サンクスです!
0751デフォルトの名無しさん
2005/09/06(火) 17:38:13文字の中にカンマが入ってる場合(ダブルクォートで囲む)とか、
さらにその中にダブルクォートが入ってる場合(エスケープするんだっけ?)とか、
ちゃんとしたものを実装しようとすると頭が痛くなる罠
0752デフォルトの名無しさん
2005/09/06(火) 17:51:09マルチポストしてないで早く仕様出せ。
0753デフォルトの名無しさん
2005/09/06(火) 19:34:34literalなダブルクォートは二つ重ねて""で書く
イヤらしいのは改行含むカラムがある場合(エクセルはそーゆーのも出力するはず。
CRだかLFだか忘れたが)
0754デフォルトの名無しさん
2005/09/06(火) 19:40:13■ このスレッドは過去ログ倉庫に格納されています