C/C++の宿題を片づけます 49代目
レス数が1000を超えています。これ以上書き込みはできません。
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】
0002デフォルトの名無しさん
2005/08/10(水) 17:12:0546代目: http://pc8.2ch.net/test/read.cgi/tech/1119514274/
45代目: http://pc8.2ch.net/test/read.cgi/tech/1118165596/
0003デフォルトの名無しさん
2005/08/10(水) 17:12:5643代目: http://pc8.2ch.net/test/read.cgi/tech/1115794784/
42代目: http://pc8.2ch.net/test/read.cgi/tech/1113811213/
41代目: http://pc8.2ch.net/test/read.cgi/tech/1109542053/
40代目: http://pc5.2ch.net/test/read.cgi/tech/1107625122/
39代目: http://pc5.2ch.net/test/read.cgi/tech/1106650397/
38代目: http://pc5.2ch.net/test/read.cgi/tech/1105541524/
37代目: http://pc5.2ch.net/test/read.cgi/tech/1103913840/
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
0004デフォルトの名無しさん
2005/08/10(水) 17:13:4028代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
0005デフォルトの名無しさん
2005/08/10(水) 17:14:2113代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
09代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
08代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
07代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
06代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
05代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
04代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
03代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
02代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
01代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
0006デフォルトの名無しさん
2005/08/10(水) 17:31:220007デフォルトの名無しさん
2005/08/10(水) 17:32:53http://pc8.2ch.net/test/read.cgi/tech/1122705615/
じゃねの?
0008デフォルトの名無しさん
2005/08/10(水) 17:37:000009デフォルトの名無しさん
2005/08/11(木) 11:07:53[2] 問題文(含コード&リンク): x1,y1,x2,y2に外接する楕円があり
点x,yがその円の内側か外側かの判定をする関数を作れ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: ANSI C
[3.3] 言語: C
[4] 期限: 9月1日まで
[5] その他の制限: なし
0010デフォルトの名無しさん
2005/08/11(木) 12:02:310011デフォルトの名無しさん
2005/08/11(木) 12:05:05箱の中に入ってる楕円の中か外かというイメージです
0012デフォルトの名無しさん
2005/08/11(木) 12:06:23つーか、(x1, y1) - (x2, y2)の線分も楕円がつぶれた形と言えるし。
そうか、全ての点は内側に成らない可能性があるから判定の必要ないじゃん(ぉぃ
0013デフォルトの名無しさん
2005/08/11(木) 12:09:11(x1, y2)
(x2, y2)
(x2, y1)
の4点に外接する楕円ってこと?
0014デフォルトの名無しさん
2005/08/11(木) 12:14:12あーは子の中に入ってる楕円ってそういう意味かなるほど。
>>9
問題文をもっとわかりやすくかけよ
0015デフォルトの名無しさん
2005/08/11(木) 12:16:460016デフォルトの名無しさん
2005/08/11(木) 12:34:06なんかうまい方法あるのかな??期待してます。
0017デフォルトの名無しさん
2005/08/11(木) 12:37:54>>9
ま、斜めを考慮しないなら
/* 外側なら正、楕円上ならゼロ、内側なら負を返す */
int wrt_ellipse(double x1, double y1, double x2, double y2, double x, double y)
{
double x0, y0, a, b, d;
x0 = (x1 + x2) / 2.0; y0 = (y1 + y2) / 2.0; a = (x2 - x1) / 2; b = (y2 - y1) / 2;
d = (x - x0) * (x - x0) / (a * a) + (y - y0) * (y - y0) / (b * b);
return d == 1.0 ? 0 : (d > 1.0 ? 1 : -1);
}
0018デフォルトの名無しさん
2005/08/11(木) 12:38:370019デフォルトの名無しさん
2005/08/11(木) 12:39:45おお!ありがとうございます!!!
0020デフォルトの名無しさん
2005/08/11(木) 12:40:53箱の中なら内接じゃないのか?
0021デフォルトの名無しさん
2005/08/11(木) 15:19:570022お願いします。
2005/08/11(木) 15:23:12[2] 問題文:後で。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:NET2003
[3.3] 言語: C++
[4] 期限:5時間くらい
[5] その他の制限:Array,Struct,Class,Function,Strings(Pointer無し)
0023デフォルトの名無しさん
2005/08/11(木) 15:27:000024デフォルトの名無しさん
2005/08/11(木) 15:28:080025デフォルトの名無しさん
2005/08/11(木) 15:34:195時間くらいっていつまでだwwww
0026お願いします。
2005/08/11(木) 15:36:46PhrasesとそのResponsesとが上から交互にリストしてある。
このDataFile名をchatbot.txtとする。
hello
hello to you too
my name is
thank you for telling me your name
your name
my name is Mr. Computer
my mother
tell me more about your family
I like to
why do you like this
I like
I like that too
my
this sounds important to you
I go to
Tell me more about where you go
I must
what will happen if you don't do this
bye
goodbye
0027お願いします。
2005/08/11(木) 15:37:49例えば、ユーザーがhelloと入れたらコンピューターはhello to you tooと応える
ファイルのデータをプログラム内のArrayにロードして、ユーザーのInputにパターンがあるか
探す。(find関数を使って)もしあれば、応える。Structとかも使ってよい。
==は使ってはいけない。
もし”my name is mud" や"do you know my name is" のInputなら
"thank you for telling me your name." と返す。
プログラムはランダムに選ばれる3つのDefaultResponsesも含んでなければいけない。
もし、適切なResponseがChatbotにないときにこの内の一つを返す。
ユーザーがbyeと入れたら、プログラム終了。
ユーザーInputを"I"以外全てLowercaseに変える。
0028デフォルトの名無しさん
2005/08/11(木) 15:44:290029お願いします。
2005/08/11(木) 15:47:260030デフォルトの名無しさん
2005/08/11(木) 15:49:240031デフォルトの名無しさん
2005/08/11(木) 15:57:36つか酷い英語だと思ったら全部目的語を抜いてるのかよ。
"do you know my name is"ってなにかと思った。
私の名前が存在していることを知っていますかってなんじゃw
で、制限についてもうちょっとまともな説明は無いのか?
0032デフォルトの名無しさん
2005/08/11(木) 16:13:540033お願いします。
2005/08/11(木) 16:22:120034デフォルトの名無しさん
2005/08/11(木) 17:27:170035デフォルトの名無しさん
2005/08/11(木) 18:24:07int a=1; int b=2; int c=3;
void f(int x, int y, int z){
int b=0;
a=a+x; b=b+y; c=c+z;
printf("%d,%d,%d,",a,b,c);
}
main(){
int a;
a=10; b=20; c=30;
f(100,200,300);
printf("%d,%d,%d\n",a,b,c);
}
の出力結果が 101,200,330,10,20,330になるのですが
理解できません。解説おながいします。
[3.3] 言語: C
[4] 期限: [無期限]
0036デフォルトの名無しさん
2005/08/11(木) 18:28:50グローバルスコープとmain()関数内スコープを持つ二つのaがあることは判るかな?
同様にグローバル変数とf()関数内ローカル変数の二つのbがあるわけだ。
cは唯一グローバルにしかないからこれが一番判りやすかろう。
cの出力の結果を踏まえて、aとbについても考えてみれば判るんでないかな?
0038お願いします。
2005/08/11(木) 23:28:580039お願いします。
2005/08/11(木) 23:30:530040デフォルトの名無しさん
2005/08/11(木) 23:57:35== つかうなってなんだよ。
std::map つかわせろよ。
0041お願いします。
2005/08/12(金) 00:27:29#include <iostream>
#include <string>
#include <fstream>
using namespace std;
string reply(string input)
int main()
{
string chat[100000];
ifstream file;
file.open("chatbot.txt");
for(int i=0; ; i++)file>>chat[i];
string input=" ", output=" ";
cout<<"Hello! Talk to me"<<endl;
do{
getline(cin, input);
output=reply(input);
}while(input!="bye");
0042デフォルトの名無しさん
2005/08/12(金) 00:30:18}
string reply(string input)
{
int p1, p2
p1=input.find("hello")
ここまでやってつまってます。。。
0043デフォルトの名無しさん
2005/08/12(金) 00:45:43マジセンスねぇ
0044デフォルトの名無しさん
2005/08/12(金) 00:50:11std::vector<std::pair<std::vector<std::string>, std::string> >になりそうだけど、いい?
0045デフォルトの名無しさん
2005/08/12(金) 00:58:38一応動作するはず。
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <fstream>
#include <iostream>
#include <string>
#include <utility>
#include <vector>
typedef std::vector<std::pair<std::string, std::string> > array;
array read_data_file(std::ifstream& data_file) {
std::string input, output;
array res;
while (std::getline(data_file, input) && std::getline(data_file, output))
res.push_back(std::make_pair(input, output));
return res;
}
void convert(std::string& str) {
const char delimiters[] = " \t,.;:\"?!";
std::string::size_type start_index = str.find_first_not_of(delimiters);
while (start_index != std::string::npos) {
std::string::size_type end_index = str.find_first_of(delimiters, start_index);
if (end_index == std::string::npos) end_index = str.length();
if (!(end_index - start_index == 1 && str[start_index] == 'I'))
for (std::string::size_type i = start_index; i < end_index; ++i)
str[i] = std::tolower(str[i]);
start_index = str.find_first_not_of(delimiters, end_index);
}
}
0046>>45 の続き
2005/08/12(金) 00:59:19int r = rand() % 3;
return r == 0 ? "yeah" : r == 1 ? "huh" : "hmm";
}
int main() {
std::srand(unsigned int(std::time(0)));
std::ifstream data_file("chatbot.txt");
array res = read_data_file(data_file);
std::string input;
while (std::getline(std::cin, input)) {
convert(input);
array::iterator begin = res.begin(), end = res.end();
while (begin != end && input.find(begin->first) == std::string::npos) ++begin;
if (begin == end)
std::cout << random_response() << std::endl;
else
std::cout << begin->second << std::endl;
if (input.find("bye") != std::string::npos) break;
}
}
004845
2005/08/12(金) 01:00:350049デフォルトの名無しさん
2005/08/12(金) 02:10:100050デフォルトの名無しさん
2005/08/12(金) 02:40:43[3] 環境
[3.1] OS: RedHat Linux
[3.2] コンパイラ名とバージョン: gcc 2.9
[3.3] 言語: Cのみ
[4] [2005年08月15日07:30まで]
[5] その他の制限: 標準でインストールされないライブラリは使用不可
005141
2005/08/12(金) 04:55:13#include <string>
#include <fstream>
#include <ctime>
#include <cctype>
using namespace std;
int main()
{
srand(time(0));
string chat[100];
string input, output, sentense;
int p1, x, res;
ifstream file1;
file1.open("chatbot.txt");
if(file1.fail()) exit(1);
for(int i=0; i<100; i++)
{
getline(file1, sentense);
chat[i]=sentense;
}
cout<<"Hello! Talk to me."<<endl;
0052デフォルトの名無しさん
2005/08/12(金) 04:57:08getline(cin, input);
for(int c=0; ; c++)
{input=tolower(input[c]);}
x=input.find(" i ");
if(x>=0)input.insert(x+2, " I ");
for(int i=0; i<100; i+=2)
{
p1=input.find(chat[i]);
0053デフォルトの名無しさん
2005/08/12(金) 04:57:43{
cout<<chat[i+1]<<endl;
break;
}
}
else //Default
{
res=rand()%3;
if(res==0) {output="I have no response.";}
else if(res==1) {output="Talk to me again.";}
else {output="Try again.";}
cout<<output<<endl;
break;
}
}while(input!="bye");
return 0;
}
005441
2005/08/12(金) 04:58:150055デフォルトの名無しさん
2005/08/12(金) 07:36:03あと>>52の7〜9行目みたいなのは、とりあえず大枠が完成するまで
コメントアウトしといてもいいと思う。。’I’を使わなくていいデータもあるから。。
以上C++は触ったこともない俺より。。データ型とか関数とかよくわかってないから
そのへんは他の方にtouch!!
んで>>45-46さんが書いてくれてるから見ときな。。
0056前スレの606、875です
2005/08/13(土) 23:06:08前スレの>>985のコードを組み込んだのですが、強制終了してしまいます。
私の組み込み方が悪いのかも知れませんので、前スレ985のコードを取り込んだ
すべてのコードをロダにUPしていただけませんでしょうか。お力添えよろしくお願いいたします。
0057デフォルトの名無しさん
2005/08/13(土) 23:27:36・自分で手を入れたソース
・出てくるエラー
・強制終了の手順
をアップしてみたら?
0058前スレの606、875です
2005/08/14(日) 00:01:15はい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/821.c
これが元のコードです。
このコードに前スレ985の関数を追加し、mainのwhileの前で呼んでも、
登録の時、ファイルを開く時にほとんどの場合、強制終了してしまいます。
0059デフォルトの名無しさん
2005/08/14(日) 00:30:30・問題文(条件やら前提やら全部)
・あなたが修正を加えたソース
・操作手順(データファイル作って、次に読み込ませるところまで)
・データファイルの内容
・もしコンパイル時にエラーが出るならそのエラー
をUP。
答えられる人でも情報が小出しだと、面倒で答えたくなくなるから。
聴く人も丁寧にやらなくちゃ・・・ね?
0060デフォルトの名無しさん
2005/08/14(日) 00:33:37ちゃんと動いたぞ。Linuxだけど。細かくは見てない。
0061前スレの606、875です
2005/08/14(日) 02:05:07すみません。何度も同じ問題を貼るのはよくないのかな。。と思いましたので・・・。
では、機能追加の分も付け加えてもう一度貼らせていただきます。
問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/857.txt
元コード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/821.c
修正したコード
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/858.txt
>>60
実行されたコードをロダにUPしていただけるとありがたいのですが・・・。
よろしくお願いいたします。
0062デフォルトの名無しさん
2005/08/14(日) 02:39:05で、前スレ985(987)が来たわけだが。こっちに差し替えって読まなかった?
/* ファイルを読む */
void ReadFromFile() {
Person* person = (Person*)malloc(sizeof(Person));
FILE* stream = fopen(OUTPUT_PATH,"r");
if (stream) {
while (fscanf(stream,"%d%s%s",&person->number,&person->name,&person->position) == 3) {
person->next = NULL;
SetMember(person);
person = (Person*)malloc(sizeof(Person));
}
fclose(stream);
free(person);
}
}
0063デフォルトの名無しさん
2005/08/14(日) 12:18:11[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc 2.9
[3.3] 言語: C
[4] 期限: 2005年08月15日まで
[5] その他の制限: %xは使用してはいけない
0064デフォルトの名無しさん
2005/08/14(日) 13:25:28#include <stdio.h>
#include <stdlib.h>
static const char* hexDigits = "0123456789abcdef";
static const char hexMask = (1 << 4) - 1;
static const int width = 10;
int main(int argc, char* argv[]) {
FILE* fp;
int len, bytes = 0;
unsigned char buf[256];
if(argc <= 1) {
fprintf(stderr, "こう使う。hexdump FILE\n");
exit(1);
}
if((fp = fopen(argv[1], "rb")) == NULL) {
fprintf(stderr ,"ひらけね\n");
exit(1);
}
while(0 < (len = fread(buf, sizeof(char), sizeof(buf), fp))) {
int i;
for(i=0; i < len; i++) {
putchar( hexDigits[(buf[i] >> 4) & hexMask] );
putchar( hexDigits[ buf[i] & hexMask] );
printf("%s", ((++bytes % width) == 0)? "\n": " ");
}
}
fclose(fp);
return 0;
}
0065デフォルトの名無しさん
2005/08/14(日) 13:44:29ありがとうございます!
0066デフォルトの名無しさん
2005/08/14(日) 16:39:480067デフォルトの名無しさん
2005/08/14(日) 16:41:410068デフォルトの名無しさん
2005/08/14(日) 16:49:530069デフォルトの名無しさん
2005/08/14(日) 16:59:26定義され、空はマクロNULLで表す。
struct TreeNode{
int value;
struct TreeNode* left;
struct TreeNode* right;
};
二分木と正の整数nを受け取り、nよりも大きな値を持つ要素の位置と
値を出力する、次のような名前と型を持つC言語の関数を定義せよ。
void printLargerForTree(struct TreeNode* data,int n);
ただし二分木中のノードの位置は次のような数で表現することにする。
・ルートノードの位置は0で表現される。
・あるノードの位置がxで表されるとき、そのleft側の子ノードの位置は2x+1
そのright側の子ノードの位置は2x+2で表される。
この関数を定義するにあたって、printLargerForTreeの引数を一つ増やした
補助的な関数
void printLargerForTreeAux(struct TreeNode* data,int n,int pos);
を再帰的に定義し、この関数を利用してvoid printLargerForTreeを定義せよ。
お願いします。
0070デフォルトの名無しさん
2005/08/14(日) 17:06:59>>1のテンプレ読もうか
0071デフォルトの名無しさん
2005/08/14(日) 18:12:38[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 2.9
[3.3] 言語: C
[4] 期限: 2005年08月16日まで
[5] その他の制限:問題文に記載
0072デフォルトの名無しさん
2005/08/14(日) 21:04:51char *str_insert(char *s1,char *s2,int pos)
{
char temp[255];
int i, j = 0, len;
for (i = 0; s1[i] != '\0'; i++); len = i;
if (len < pos) return NULL;
for (i = pos - 1; s1[i] != '\0'; i++, j++) temp[j] = s1[i];
temp[j] = '\0';
for (i = 0; s2[i] != '\0'; i++); len = i;
for (i = 0; i < len; i++){
s1[pos - 1] = s2[i];
pos++;
}
for (i = 0; temp[i] != '\0'; i++){
s1[pos - 1] = temp[i];
pos++;
}
s1[pos - 1] = '\0';
return s1;
}
0073デフォルトの名無しさん
2005/08/14(日) 21:13:37#include <string.h>
char *str_insert(char *s1,char *s2,int pos)
{
size_t len1, len2;
len1 = strlen(s1);
len2 = strlen(s2);
if (pos > len1)
return NULL;
memmove(s1 + pos + len2, s1 + pos, len1 - pos);
memmove(s1 + pos, s2, len2);
s1[len1 + len2] = '\0';
return s1;
}
0074デフォルトの名無しさん
2005/08/14(日) 21:20:31大きいノードすべてを表示するのか、それとも1つだけでよいのか
0075デフォルトの名無しさん
2005/08/14(日) 21:37:17すいません。
大きいノード全てを表示します。
0076デフォルトの名無しさん
2005/08/14(日) 21:48:19{
printLargerForTreeAux(data, n, 0);
}
void printLargerForTreeAux(struct TreeNode* data,int n,int pos)
{
if (data == NULL)
return;
if (data->value > n)
printf("% 3d %d\n", pos, data->value);
printLargerForTreeAux(data->left, n, 2 * pos + 1);
printLargerForTreeAux(data->right, n, 2 * pos + 2);
}
0077デフォルトの名無しさん
2005/08/15(月) 00:35:52元の文字列が250文字あって、たとえば50文字を挿入するとかってヤヴァくね?
0078デフォルトの名無しさん
2005/08/15(月) 00:40:18宿題だし。それに、それを呼び出し元が管理するか呼び出し先が
管理するかはポリシーの問題。
007977
2005/08/15(月) 00:46:05でも挿入位置のチェックだけは呼ばれた側でやるの?おかしくね?
0080デフォルトの名無しさん
2005/08/15(月) 00:50:010081デフォルトの名無しさん
2005/08/15(月) 00:56:50でも与えられたポインタがNULLかどうかはチェックしない、と
0082デフォルトの名無しさん
2005/08/15(月) 00:59:410083デフォルトの名無しさん
2005/08/15(月) 01:07:550084デフォルトの名無しさん
2005/08/15(月) 01:08:140085デフォルトの名無しさん
2005/08/15(月) 01:15:02strcpy()の受け側の文字列が十分に大きくない場合 (つまり、プログラマが間抜けか不精で、
コピーする前にサイズをチェックすることを怠った場合)、何が起こるかわからない。
固定長文字列を溢れさせるのはクラッカーが好むテクニックである。
0086デフォルトの名無しさん
2005/08/15(月) 10:12:490087デフォルトの名無しさん
2005/08/15(月) 10:27:53ただの宿題なんだろうし。
0088デフォルトの名無しさん
2005/08/15(月) 14:24:17[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: gcc 2.9
[3.3] 言語: C言語
[4] 期限: 2005年8月19日 07:30まで
[5] その他の制限:特になし
おながいします
0089デフォルトの名無しさん
2005/08/15(月) 15:35:58すまん、簡単すぎて食指が動かん。
んー・・?
たぶん>>71と同一人物だろうが、前の奴らに礼くらいしたらどうだ?
0090デフォルトの名無しさん
2005/08/15(月) 16:19:50こんな簡単なものも自分で解けなくて、本当に卒業出来るのだろうか。
0091デフォルトの名無しさん
2005/08/15(月) 16:56:490092デフォルトの名無しさん
2005/08/15(月) 17:02:03初心者なんで間違っていたらごめんなさい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/862.txt
0093デフォルトの名無しさん
2005/08/15(月) 17:05:44君は?
009492!=88
2005/08/15(月) 17:13:010095デフォルトの名無しさん
2005/08/15(月) 17:19:11ワロス
問題文よく嫁w
0096デフォルトの名無しさん
2005/08/15(月) 17:45:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/863.txt
0097デフォルトの名無しさん
2005/08/15(月) 18:02:11>(男:'M' 女:'F')
とあるが'M','F'以外の入力もおけ
かつ'M'以外なら女にしてもおけ?
0098デフォルトの名無しさん
2005/08/15(月) 18:04:35#include <stdio.h>
#include <string.h>
struct data {
char name[100];
char sex;
double sintyo;
double taiju;
};
int main(void) {
double d;
char buf[2];
struct data person;
for (; ; ) {
printf("名前入力:"); scanf("%s", person.name);
if (!strcmp(person.name, "end")) break;
printf("性別入力:"); scanf("%1s", buf);
person.sex = buf[0];
printf("身長入力:"); scanf("%lf", &person.sintyo);
printf("体重入力:"); scanf("%lf", &person.taiju);
d = person.taiju - (person.sintyo - 100) * 0.9;
printf("\n%s%sは、平均体重より%fkg%sです。\n\n", person.name, person.sex == 'M' ? "君" : "さん", d > 0 ? d : -d, d > 0 ? "多い" : "少ない");
}
return 0;
}
0099デフォルトの名無しさん
2005/08/15(月) 18:07:11>97
0100デフォルトの名無しさん
2005/08/15(月) 18:25:04%c
0101デフォルトの名無しさん
2005/08/15(月) 18:28:46改行が残ってバッファをクリアしたりするのメンドイ。
0102デフォルトの名無しさん
2005/08/15(月) 18:34:35なるへそ
(もれだったらgetchar()かな)
0103デフォルトの名無しさん
2005/08/15(月) 18:34:360104デフォルトの名無しさん
2005/08/15(月) 18:36:38#include <stdio.h>
#include <string.h>
struct data{
char name[100];
char sex;
double sintyo;
double taiju;};
int main(void) {
struct data unko;
while(1) {
int namelen = 0;
double heykin;
const char* govi;
printf("名前入力:");
fseek(stdin, SEEK_END, 0);
while(namelen < sizeof(unko.name)) {
int c = getchar();
if(NULL != strchr("\n\r", c)) { fseek(stdin, SEEK_END, 0); break; }
unko.name[namelen++] = c; }
if(namelen == sizeof(unko.name)) { printf("名前長っ!\n"); break; }
unko.name[namelen] = '\0'; if(strcmp(unko.name, "end") == 0) break;
printf("性別入力:"); scanf("%c", &unko.sex);
if(unko.sex == 'M') govi = "君";
else if(unko.sex == 'F') govi = "さん";
else { printf("ホモお断り。\n"); break; }
printf("慎重入力:"); scanf("%lf", &unko.sintyo);
heykin = (unko.sintyo < 100.)? 0.9 / ((101-unko.sintyo) * 2.): (unko.sintyo - 100.) * 0.9;
printf("体重入力:"); scanf("%lf", &unko.taiju);
if(unko.taiju < heykin) printf("%s%sは、平均体重より%.1f少ないです。\n", unko.name, govi, heykin - unko.taiju);
else printf("%s%sは、平均体重より%.1f重いです。\n", unko.name, govi, unko.taiju - heykin);}
return 0;}
0105デフォルトの名無しさん
2005/08/15(月) 18:44:37end入力以外でかってに終了するのはいくない
0106デフォルトの名無しさん
2005/08/15(月) 19:01:390107デフォルトの名無しさん
2005/08/15(月) 19:05:25例え format c: とか rm /* とか動いてもw
0108デフォルトの名無しさん
2005/08/15(月) 19:06:490109デフォルトの名無しさん
2005/08/15(月) 19:22:24011096
2005/08/15(月) 20:20:25性別として男と女しか認めないのはあまりに保守的で時代遅れだと思った。
それから、「さん」は性別にかかわりなく使える一般的な敬称だと思ってそうした。
反省はしていない。
0111デフォルトの名無しさん
2005/08/15(月) 22:48:34実用的には、「男」「女」以外に「不明」が必要だな。
0112デフォルトの名無しさん
2005/08/15(月) 22:55:11未回答とかはありかも(webのアンケートとか)
0113デフォルトの名無しさん
2005/08/15(月) 23:16:51未回答、男、女、男女の4通りの答えがあった。
てか、燃料くれよ。
0114デフォルトの名無しさん
2005/08/15(月) 23:23:32理にかなってるだろそれは。
まあ欲を言えば、チェックボタンを押す順番も取得したいところだが。
0115デフォルトの名無しさん
2005/08/16(火) 00:44:41構造体の再利用は考えないでいいのか?
一人目以降のデータを上書きだと実用的じゃないよな?
0116デフォルトの名無しさん
2005/08/16(火) 00:57:56宿題ごときに実用もクソもないと思われ。
このレベルの問題で再利用もクソもないと思われ。
こんなデータを上書きされても別に誰も困らないと思われ。
0117デフォルトの名無しさん
2005/08/16(火) 01:03:240118デフォルトの名無しさん
2005/08/16(火) 01:04:240119デフォルトの名無しさん
2005/08/16(火) 01:34:01http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/864.txt
012088
2005/08/16(火) 01:35:240121デフォルトの名無しさん
2005/08/16(火) 01:37:11012288
2005/08/16(火) 01:41:03012388
2005/08/16(火) 01:46:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/865.txt
0124デフォルトの名無しさん
2005/08/16(火) 01:52:58char NAMAE[100];
char SEX;
double SHINTYOU;
double TAIJYUU;
012588
2005/08/16(火) 01:54:38それさっき気付いたんですけど、また更新前のを送ってしまいました。orz
0126デフォルトの名無しさん
2005/08/16(火) 02:05:28おまえ今日から2軍な。
0127デフォルトの名無しさん
2005/08/16(火) 02:39:510128デフォルトの名無しさん
2005/08/16(火) 02:51:500129デフォルトの名無しさん
2005/08/16(火) 05:22:27http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/866.c
汎用の動的配列構造体はいろんな場面で使えると思います
あと、大きな改良ポイントはユーザー(もしくはテストベクタ)からの入力データを
どのように正規化するかかな
0130デフォルトの名無しさん
2005/08/16(火) 07:15:420132129
2005/08/16(火) 09:50:13866.cの修正点として2点
1)PERSON_INIT_NUMを0に設定するとセグフォがでるのを修正
2)引数なしで起動なら標準入力からで、コマンドラインからファイル名を入力したら
それを読み込むように変更しました.要望があればうpします
あとは、気が向いたら読み込んだデータをsqliteを使って保存するように変更してみますか
0133デフォルトの名無しさん
2005/08/16(火) 22:40:34kumikoさんがあり得ないほど太っている件
0134デフォルトの名無しさん
2005/08/16(火) 22:50:03体重と平均体重が一緒の場合はどうすればいい?
0135デフォルトの名無しさん
2005/08/17(水) 01:34:12double menseki(double,double);
int main()
{
double a,b,c;
c=menseki(a,b);
printf("底辺--");
scanf("%lf",&a);
printf("高さ--");
scanf("%lf",&b);
printf("面積は%.2fです\n",c);
return 0;
}
double menseki(double a,double b)
{
double c;
c=a*b/2;
return c;
}
面積が0.00になるんですが、どうしてでしょうか?
0136デフォルトの名無しさん
2005/08/17(水) 01:36:260.00になるだけまし
a, bが不定なのに参照している
未定義動作。ハードディスクをフォーマットされてな
0137デフォルトの名無しさん
2005/08/17(水) 01:39:180138デフォルトの名無しさん
2005/08/17(水) 01:41:520139デフォルトの名無しさん
2005/08/17(水) 01:42:45自分でa,bを自分で入力して面積をだしたいと思ったのです
0140デフォルトの名無しさん
2005/08/17(水) 01:43:530141デフォルトの名無しさん
2005/08/17(水) 01:46:021. 自分でa,bを自分で入力して
2. 面積をだしたい
その順序で組めよ
なぜa, bが不定なのか考えたのか?
0142デフォルトの名無しさん
2005/08/17(水) 01:58:41お、できた 順序か
サンクスです
0143デフォルトの名無しさん
2005/08/17(水) 02:01:53cは関数mensekiで定義される・・・とかかんがえてるんじゃなかろーか。
この手の説明をキチンとするには、プログラミングの代入ってどんなんとか、
関数は定義と呼び出しがあるんだとか、順番だとか、副作用だとか。のーみそがおかしくなる。
0144デフォルトの名無しさん
2005/08/17(水) 02:07:11>cは関数mensekiで定義される
なんかそんな感じです。
本見ながらやってるんだけど
面積を求める関数を作れみたいな問題でした
0145デフォルトの名無しさん
2005/08/17(水) 02:17:36プログラムでは数学で混用されている(という認識はないかもしれないが)
3種類のイコールが区別される。3種類のイコールとは、恒等(==)、代入(=)、
定義(関数の定義によって行う)。
0146デフォルトの名無しさん
2005/08/17(水) 02:39:07→ソースファイルが出来る
ソースファイルをコンパイルする
→実行ファイルが出来る
実行ファイルを実行する
→メモリにプログラムが読み込まれ、下準備した後main()から実行される。
メモリにはコード領域、スタック、ヒープがある。
ソースコードにはコード領域とヒープ領域の一部を書く。
実行時にはコード領域の内容を順次実行する。
なんか、上手な説明がないかなぁ。
0147デフォルトの名無しさん
2005/08/17(水) 11:53:46仕組みとか解説する勢いだな。
0148デフォルトの名無しさん
2005/08/17(水) 15:39:49・自動変数は最初はゴミが入っているので代入して綺麗にしないといけない
・変数は演算、代入で値が変わる
で、最後に
これらを踏まえた上でアルゴリズムを組みましょう
最初のうちはこんなもんでいいんじゃない?
0149デフォルトの名無しさん
2005/08/18(木) 19:09:390150デフォルトの名無しさん
2005/08/18(木) 19:23:050151デフォルトの名無しさん
2005/08/18(木) 19:39:20頭悪いな。
0152デフォルトの名無しさん
2005/08/18(木) 22:18:48他のスレでは別の意味で使うが(^^;;
0153デフォルトの名無しさん
2005/08/19(金) 23:28:15簡易シェルを作れと言われているんですが、
こんな感じですか? 問題点があったら教えてください。
int main()
{
char buffer[0x100];
for(;;)
{
printf(">");
if( gets(buf)==NULL)
{
break;
}
printf("入力されたコマンドは%sです\n",buffer);
}
return 0;
}
0154デフォルトの名無しさん
2005/08/19(金) 23:31:45gets 関数は境界チェックが無くて危険なので fgets 推奨。
あとは特に問題はないと思う。
0155129
2005/08/20(土) 00:33:51まだ他人に評価してもらうほどのものじゃないぞ・・・
printf(">");のあとにfflush(stdout);するのがいいんじゃないか
気をつけるべき点は>>154が言ってるようにユーザからの入力部分だな
バッファオーバーフローの話はいつまでたってもなくならんね
readline()使うとか。。プラットフォームに依存しちゃうか
0156デフォルトの名無しさん
2005/08/20(土) 00:35:260157デフォルトの名無しさん
2005/08/20(土) 09:57:50[2] 問題文(含コード&リンク):
縦64bit×横64bit、0と1の二値画像データを縦64bit×横64bitのまま細線化し、出力する。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC++
[3.3] 言語: C
[4] 期限: 2005年9月1日8:50まで]
[5] その他の制限:読み込むデータは「01.txt」とする。出力するデータの名前は任意とする。
いつもお世話になっております。
文字認識のプログラムをCで制作するにあたり、データの拡大&細線化する作業をしています。
しかし、肝心の細線化がうまくいかず、つまっております。
こんな、クソミソなへたれですがお力添えいただければうれしいです。
プログラム↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/868.txt
読み込むデータ↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/869.txt
0158デフォルトの名無しさん
2005/08/20(土) 10:18:42どういう細線化のアルゴリズムを採用したか。
どういう結果になるつもりか。
実際にはどういう結果になったか。
これらの情報があるとヒントが出せると思う。
0159デフォルトの名無しさん
2005/08/20(土) 11:41:19fflushは必要ない
getsの段階でflushされる
0160デフォルトの名無しさん
2005/08/20(土) 13:36:53あ〜おはアルファベットに直し、それ以外は 'N' を表示するプログラムを作れ、という問題で
とりあえず 'あ' だけ処理してみようと以下のルーチンを作成してみたのですが 'N' しか表示されません。
どうすれば正しく表示されるのでしょうかorz
#include <windows.h>
#include <stdio.h>
void main() {
WCHAR* temp = L"あいうえおかきくけこ";
for(int i = 0; i < wcslen(temp); i++) {
switch (temp[i]) {
case 'あ':
printf("%c", 'A');
break;
default:
printf("N");
}
}
}
0161デフォルトの名無しさん
2005/08/20(土) 13:44:08case L'あ':
0162デフォルトの名無しさん
2005/08/20(土) 14:57:51ああああ!Lが抜けてたのか!
申し訳ない。orz
無事解決しました。ありがとうございました。
0163デフォルトの名無しさん
2005/08/20(土) 16:11:26ひらがな全てをアルファベットに直す場合はどうするのでしょう?
地道に全てのひらがなに対応したswitchを用意するものなんですか?
0164デフォルトの名無しさん
2005/08/20(土) 17:34:340165デフォルトの名無しさん
2005/08/20(土) 17:49:160166デフォルトの名無しさん
2005/08/22(月) 00:09:47がむばってlisp組みます。はい。
0167デフォルトの名無しさん
2005/08/22(月) 00:19:070168デフォルトの名無しさん
2005/08/22(月) 00:38:020169デフォルトの名無しさん
2005/08/22(月) 00:40:46とりあえず、アトムとconsセルをどーやって表現するか決めるであります。
0170デフォルトの名無しさん
2005/08/22(月) 00:46:49どうでしょうか?
するとそれをコンパイルするコンパイラは次のような仕様になるはずです。
1. 入力が空ならなにも出力せずに正常終了。
2. 入力になにかあったら"Syntax Error" を出力して終了。
これなら Hello World に毛の生えたようなプログラムでコンパイラが作れるはずです。
0171デフォルトの名無しさん
2005/08/22(月) 00:53:26最低限、何らかの制御構造があるべきだと思う。
0172デフォルトの名無しさん
2005/08/22(月) 00:58:00[1] 授業単元: 夏休みの宿題
[2] 問題文(含コード&リンク):
コンパイラまたはインタプリタを設計/実装せよ。以下の機能をつけること。
変数、式、配列、関数定義/呼び出し、組み込み関数、制御構造
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): MinGW
[3.3] 言語:C
[4] 期限:9月1日まで
[5] その他の制限:文法はひととおり
0173デフォルトの名無しさん
2005/08/22(月) 00:59:580174デフォルトの名無しさん
2005/08/22(月) 01:08:50Smalltalk なんか制御構造無いっていえばないのに。
まあ式は代入だけで演算子なしでおっけーだろうけど。
組み込み関数は +1 と =0? と出力命令位でいいのかな?
マシン語みたいに配列は一個固定、1 byte だけ入れられるにして、
変数も一個だけ
制御構造は変数が0の時だけ次の命令を実行しないと、goto文でも付けておけば
いいかな?
関数定義はめんどくさいね。スタック作らないとだめなのかな?
0175デフォルトの名無しさん
2005/08/22(月) 02:03:59p-code吐くソースならどこにでも転がってる希ガス。
0176デフォルトの名無しさん
2005/08/22(月) 02:17:350177デフォルトの名無しさん
2005/08/22(月) 13:48:34元のデータ
30
9
88
78
89
13
90
54
10
整理されたもの
0〜9 1個
10〜19 2個
20〜29 0個
:
:
お願いします
0178デフォルトの名無しさん
2005/08/22(月) 14:08:28エクスプローラーでファイル名順に並べ替えてやれば、
0、100、一ケタ台を除けば全部固まってるだろ。
それを矩形でまとめて選択してフォルダに放り込む。
もしかしてプログラムで整理?
0179デフォルトの名無しさん
2005/08/22(月) 14:10:190180デフォルトの名無しさん
2005/08/22(月) 14:11:31とりあえず書いた
テンプレに従ってないので勝手にGCC(ANSI C)だってことにした
ファイルにそういうデータが書いてあるのを読み込んで処理すりゃいいんだよな?
#include <stdio.h>
int main(void)
{
FILE *fp;
unsigned int count[10] = {0};/*個数*/
int temp;
if ((fp = fopen("infile", "r")) == NULL) exit(1);
while (fscanf(fp, "%d", &temp) == 1) {
count[(int)temp/10]++;
}
for (temp = 0; temp < 10; temp++)
printf("%d~%d\t%2d個\n", temp * 10, temp * 10 + 9, count[temp]);
return 0;
}
0181デフォルトの名無しさん
2005/08/22(月) 14:18:34#define FILENAME "file.txt"
#include <stdio.h>
int main()
{
int ans[10]={0};
char buf[3];
FILE *fp=fopen( FILENAME ,"r");
if(!fp) {return -1;}
while(fgets(buf,sizeof(buf),fp))
{ans[atoi(buf)/10]++;}
for(i=0;i<10;i++)
{printf("%d〜%d \t%d個\n",i,i+9,ans[i]);}
fclose(fp);
}
0182181
2005/08/22(月) 14:19:440183デフォルトの名無しさん
2005/08/22(月) 14:30:430184デフォルトの名無しさん
2005/08/22(月) 14:32:090から100だから、101通りあるよ。
>count[(int)temp/10]++;
0〜9の配列で10にアクセスしてしまう。
>unsigned int count[10] = {0};/*個数*/
これだと配列の最初だけしか初期化されないでしょ。
配列11個とって
{0,0,0,0,0,0,0,0,0,0,0};
またはSIZEOF(count)領域を初期化
>>181
> char buf[3];
これも2桁前提か。
データファイルが壊れてたらバグるな。
出力時ならいいけど、入力時はfgetsの最大値までちゃんととらんと。
> if(!fp) {return -1;}
> {printf("%d〜%d \t%d個\n",i,i+9,ans[i]);}
中括弧は外したほうがまし
または
if(!fp) {
return -1;
}
と表記して行の追加、削除をしやすくしたほうがいい。
行丸ごとコメントアウトしたり追加、削除したときに中括弧の対応が変わる。
0185デフォルトの名無しさん
2005/08/22(月) 14:33:00意味ないよ
0187デフォルトの名無しさん
2005/08/22(月) 14:46:11>これだと配列の最初だけしか初期化されないでしょ。
が意味わかんないし、
>>181は1行目に0〜99って書いてんだろ。。
しかもここは中括弧とかのお話するところじゃないのよボーヤ
0188デフォルトの名無しさん
2005/08/22(月) 14:53:06sizeofで配列のサイズなんか取れたっけ?
0189180
2005/08/22(月) 14:57:05sizeof(配列名)の場合は配列全体のサイズじゃなかったっけ?
sizeof(配列名)/sizeof(配列名[0])で個数求めるとか、何処かで見た希ガス
0190デフォルトの名無しさん
2005/08/22(月) 15:05:42>初期化子が少ない場合には0で埋められる
知らなかったけど、これは目的の0とデフォルトの0が一致してるから省略可能
になってるっていうことを誤解しやすいよ。
配列がたくさんあると全部書くのは大変だけど。
static とかグローバル変数の宣言によっては初期化されないとかなかった?
全然覚えてないけど、コンパイラのバグとかもあったと思うし。
ヘッダで複数のファイルにインクルードするときに条件があったような。
サイズの違うバッファのコピーとか移動とかでゴミが残ったりとかもあるし
>>187
バグはオマエの脳内だけにしてくれよ。
出題で0〜100って書いてあるだろ。
それを勝手に〜99に変更してるだろ。
「やっぱり〜100だよ」と言われたら3箇所の修正が必要になる。
>unsigned int count[10] = {0};/*個数*/
> char buf[3];
> for(i=0;i<10;i++)
> char buf[3];
の修正を忘れたら壊れるだろ?
fgetsはバッファのサイズなんかチェックしてくれないぞ。
>>188
マクロのSIZEOFなんだけど、配列だろうとアロケートメモリだろうと
適切なサイズを取ってくれる。
初期化やコピー、サイズ比較するとき便利だし、サイズ変更時の修正もいらない。
sizeof(int)では、変数の型が変更されたら食い違うので使わない。
せいぜいsizeofの動作やintのサイズを確認するときくらい
0191188
2005/08/22(月) 15:06:480192デフォルトの名無しさん
2005/08/22(月) 15:10:11>fgetsはバッファのサイズなんかチェックしてくれないぞ。
>fgetsはバッファのサイズなんかチェックしてくれないぞ。
>fgetsはバッファのサイズなんかチェックしてくれないぞ。
>fgetsはバッファのサイズなんかチェックしてくれないぞ。
0193デフォルトの名無しさん
2005/08/22(月) 15:10:59バグはオマエの脳内だけにしてくれよ。
0194デフォルトの名無しさん
2005/08/22(月) 15:12:03あんびりばぼーなスレになってるw
0195181
2005/08/22(月) 15:17:48なんかスレが汚れてきててすごくいやなんだが、
とりあえず自分の見解を(多分また荒れるから今日はもう来ないぞw)
もし0〜100なんだったら
>0〜9 1個
>10〜19 2個
>20〜29 0個
> :
> :
という仕様の設定があいまいになるよな。100はドコに入るんだって。
あなた様は100は特別だ、ということでans[11]にしたいようだが、
そんなことは喪前の脳内で決まったことであってそれこそ書いてないぞ。
あと知ったかブリはやめとけyo
0196デフォルトの名無しさん
2005/08/22(月) 15:18:080197デフォルトの名無しさん
2005/08/22(月) 15:19:12sizeof(buf) でサイズ指定してあったな。
確か割り当ては3バイトだな。
1、0、0、・・・NULLは入らないから、ま、いっか。
>関数は、入力文字列の読み込み時に、数値の一部として認識できない文字が現れた時点で停止します。
>この文字は、文字列の終わりを示す NULL ('\0' または L'\0') の場合もあります。
ふんふん。100として認識だな。どこを終端と認識してるんだろ。
bufの外には文字入れてないから問題ないだろうな。
さて次の文字だ。
¥r¥n
ん?改行コードを読み込めなかったか。
これは、0だな。
0〜9としてカウントすれば問題なし。
てことですか?
0198デフォルトの名無しさん
2005/08/22(月) 15:19:46テンプレ書いてないんで勝手にC++ってことにした。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::ifstream ifs("data.txt");
std::vector<int> v;
std::copy(std::istream_iterator<int>(ifs), std::istream_iterator<int>(), std::back_inserter(v));
std::sort(v.begin(), v.end());
for (int i = 0; i < 100; i += 10) std::cout << i << "〜" << i + 9 << '\t' << (std::upper_bound(v.begin(), v.end(), i + 9) - std::lower_bound(v.begin(), v.end(), i)) << "個" << std::endl;
std::cout << 100 << '\t' << (std::upper_bound(v.begin(), v.end(), 100) - std::lower_bound(v.begin(), v.end(), 100)) << "個" << std::endl;
}
0199デフォルトの名無しさん
2005/08/22(月) 15:24:59下のほうに書いてあることはよくわからんが・・・
上のほうに書いてあるのはおかしいぞ?
参考:http://www.bohyoh.com/CandCPP/C/Library/fgets.html
0200デフォルトの名無しさん
2005/08/22(月) 15:30:04>そんなことは喪前の脳内で決まったことであってそれこそ書いてないぞ。
書いてないことを都合のいいように定義するのは問題ない。
>>198 も
>テンプレ書いてないんで勝手にC++ってことにした。
って書いてる。
でも、はっきり書いてあることを勝手に変えた場合、
それが及ぼす影響はすべて変えたやつにある。
責任とれよってことだ。
>>199
文字列はNULLで終わる。
だから文字を読み取った後にNULLを追加してくれる。
しかし、バッファの最大値まで文字で埋まった場合はNULLを入れる場所がない。
だからMSのIEもアドレスが長すぎるとバグってた。
0201デフォルトの名無しさん
2005/08/22(月) 15:31:12それが及ぼす影響はすべて変えたやつに 責任が ある。
0202デフォルトの名無しさん
2005/08/22(月) 15:34:490203デフォルトの名無しさん
2005/08/22(月) 15:35:09rとnを聞いて
と求めるプログラム
を頼みます
0204デフォルトの名無しさん
2005/08/22(月) 15:37:44はいはい。
ごめんなさいね。
バッファの最後までって書けばよかったね。
>>203
計算誤差はどう計算しますか?
ちなみに漏れは作れません。
0205デフォルトの名無しさん
2005/08/22(月) 15:38:58・・・orz
0206デフォルトの名無しさん
2005/08/22(月) 15:39:38>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
0207デフォルトの名無しさん
2005/08/22(月) 15:42:271 + 1/r + 1/r^2 + … 1/r^n じゃないの?
0208デフォルトの名無しさん
2005/08/22(月) 15:42:31ってかマルチじゃねぇ?
0209デフォルトの名無しさん
2005/08/22(月) 15:42:35nが大きいとあふれるし、少数以下の桁数が少ないと誤差が大きくなるから
そこを考えて計算しないといけないでしょ?
0210デフォルトの名無しさん
2005/08/22(月) 15:43:23計算誤差を計算してもその計算において計算誤差が出ます
0211209
2005/08/22(月) 15:46:57>>210
だから、誤差を小さくするよう努力するとか、
プログラムがどこまで正常動作するかを計算してそれを仕様とするとか、
そういうことなんじゃないかと思ったんですが。
カレンダーにしたって何年から何年まで正しく動作するとかあるでしょ。
0212デフォルトの名無しさん
2005/08/22(月) 15:49:02数字あふれてもかまいません
0213デフォルトの名無しさん
2005/08/22(月) 15:50:13とりあえず3項目はtypoということで。ついでにCで。俺(==>>198)節操ないなぁw
#include <stdio.h>
int main(void) {
int n, r;
double t = 1, a = 1;
printf("n?:"); scanf("%d", &n);
printf("r?:"); scanf("%d", &r);
while (n--) a += t /= r;
printf("%f", a);
return 0;
}
0214デフォルトの名無しさん
2005/08/22(月) 15:52:44ベストです(・ω・)
0215デフォルトの名無しさん
2005/08/22(月) 15:58:57だからCで書いてんじゃん
0216デフォルトの名無しさん
2005/08/22(月) 16:02:33日本語がおかしいな。大丈夫か?
#include<stdio.h>
#include<math.h>
int main(void)
{
int n;
int r;
double result = 0;
printf("input n?:"); scanf("%d", &n);
printf("input r?:"); scanf("%d", &r);
int e;
for(e=0; e<n; e++)
{
result += 1 / pow(r, e);
}
printf("n=%d, r=%d, result=%lf\n", n, r, result);
return 0;
}
0217デフォルトの名無しさん
2005/08/22(月) 16:06:52>>203は1/r^nまで足してるからfor(e=0; e<=n; e++)じゃないかな
0218216
2005/08/22(月) 16:16:17そうだった・・・指摘ありがトン
あと、>>203へ
>>216の結果は 1/r も含まれてるので、
入れたくなかったら自分で考えてループ調整してくれ。
0219デフォルトの名無しさん
2005/08/22(月) 16:20:181 + x/1! + x^2/2! + x^3/3! +・・・・+x^r/r!
をとくプログラム
xとrをきくかたち
教えてください(>Д<)
0220デフォルトの名無しさん
2005/08/22(月) 16:34:26printf( "? x = " );
scanf( "%d", &x );
// r をきくかたち
printf( "? r = " );
scanf( "%d", &r );
0221177
2005/08/22(月) 16:36:58書いていただいたことを参考にしてやってみます。
0222216
2005/08/22(月) 16:47:23計算結果が合ってるかどうかは自分で確かめて。
#include<stdio.h>
#include<math.h>
static long factorial(int n)
{
long result = 1;
while(n > 0){ result *= n--; }
return result;
}
int main(void)
{
int x = 2;
int r = 2;
double result = 0;
printf("input x?:"); scanf("%d", &x);
printf("input r?:"); scanf("%d", &r);
int n;
for(n=0; n<=r; n++)
{
result += pow(x, n) / factorial(n);
}
printf("x=%d, r=%d, result=%lf\n", x, r, result);
return 0;
}
0223213
2005/08/22(月) 16:50:56#include <stdio.h>
int main(void) {
int r, n = 0;
double x, t = 1, a = 1;
printf("x?:"); scanf("%lf", &x);
printf("r?:"); scanf("%d", &r);
while (n++ < r) a += t *= x / n;
printf("%f", a);
return 0;
}
0226219
2005/08/22(月) 17:17:240227216
2005/08/22(月) 17:48:43質問する香具師はちゃんとテンプレ書けよな。
0228ぼるじょあ ◆yBEncckFOU
2005/08/22(月) 20:23:140230デフォルトの名無しさん
2005/08/23(火) 22:18:51・・・とりあえず、空白とコメントを読み飛ばす処理を書きました。
次はトークン一つ取ってくるところです。
でも課題は山済み。
・データ型の内部表現
・式の構造解析
・プリミティブな関数
・値の放棄のタイミング決定
あう゛。終わんない。
0231デフォルトの名無しさん
2005/08/23(火) 22:23:090232デフォルトの名無しさん
2005/08/23(火) 22:32:35豪華すぎ。
yaccで充分というか、あんなの自前でやるべき。
それこそlispの醍醐味というもんだろ。
0233デフォルトの名無しさん
2005/08/23(火) 23:56:52最初はどーしよーもないんで、数、シンボル、リスト、関数型のみ扱うことにします。
#define TYPE_INT 0x00000000UL
#define TYPE_SYM 0x10000000UL
#define TYPE_LST 0x20000000UL
#define TYPE_FNC 0x30000000UL
typedef unsigned long Value;
struct Symbol { char *name; Value value; }; /* てかこれだけじゃletが扱えん・・・ */
struct Symbol symbol[1000];
struct Cell { Value car, cdr; }; /* たぶん、これだけじゃゴミ集めできん */
struct Cell list[1000];
悩む。
0234デフォルトの名無しさん
2005/08/24(水) 17:50:13[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/872.txt
[3] 環境
[3.1] OS:windows2k
[3.2] コンパイラ名とバージョン:VC++6.0
[3.3] 言語: C or C++
[4] 期限: [2005年9月01日まで]
[5] その他の制限: 特に無し
よろしくおねがいします。
0235デフォルトの名無しさん
2005/08/24(水) 18:10:11実行例見ると12と33が出現回数同じだけど、
そういうときってどうするの?
テキトーでいいの?
0236234
2005/08/24(水) 18:30:5033が出るようにお願いします。わかりにくくて申し訳ないです。
0237デフォルトの名無しさん
2005/08/24(水) 18:40:56>>235ではないが。
#include <stdio.h>
int main(void) {
int dat, dosuu[101] = {0}, num, i, max;
printf("入力データ件数?"); scanf("%d", &num);
num = num > 0 ? num < 20 ? num : 20 : 1;
for (i = 0; i < num; i++) {
printf("%2d番目の数:", i + 1); scanf("%d", &dat);
if (0 <= dat && dat <= 100) ++dosuu[dat];
}
for (max = 0, i = 0; i < 101; i++) if (dosuu[max] <= dosuu[i]) max = i;
printf("\n 最頻値:%d\n 度数:%d\n", max, dosuu[max]);
return 0;
}
0238234
2005/08/24(水) 19:17:52ありがとうございました。
num = num > 0 ? num < 20 ? num : 20 : 1;
の部分は学校では習っていなかったので、ここだけ
if(num > 0 && num <= 20){〜条件に合致すれば入力処理へ進む〜
}else{合致しなければおしまい
といった形にいじらせてもらいました。では失礼します。
0240デフォルトの名無しさん
2005/08/25(木) 00:14:28もぉあきらめました。ご意見をくださったかた、心があたたかくなりました。
ご好意に添えないことが残念です。
友人にみせてもらって共同で作ったことにさせてもらいます・・・。
友人も出来てないみたいですが。なんとかやってくれるでしょう。
0241デフォルトの名無しさん
2005/08/25(木) 02:56:28高校生とは言え宿題でコンパイラは辛いだろ。
俺だって一月でCコンパイラ作ってこい言われたらキツいぞ。
0242デフォルトの名無しさん
2005/08/25(木) 03:01:36ネットに転がってるのが前提なんじゃない?
専門学校でCASLアセンブラ作れって課題は出てたが、漏れはさっぱり分からなかった。
0243デフォルトの名無しさん
2005/08/25(木) 10:36:140244デフォルトの名無しさん
2005/08/25(木) 22:01:23激しく無駄だな。ワロス。
0245デフォルトの名無しさん
2005/08/26(金) 00:38:480246デフォルトの名無しさん
2005/08/26(金) 03:29:030247デフォルトの名無しさん
2005/08/26(金) 14:16:05[1] 授業単元:C言語�T
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/874.txt
[3] 環境
[3.1] OS: Windows
[3.2] BCC
[3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年09月3日まで]
[5] その他の制限:特になし
どうかお願いします。
0248デフォルトの名無しさん
2005/08/26(金) 14:49:08int Max(int *d);
int Min(int *d);
void main()
{
int d[3],c,i;
printf("*** MAXとMIN ***\n処理件数は?: ");
scanf("%d",&c);
for(i=0;i<c;i++){
putchar('\n');
printf("調べる数値 a,b,c:");
scanf("%d,%d,%d",&d[0],&d[1],&d[2]);
printf("最大値: %d ",Max(d));
printf("最小値: %d\n",Min(d));
}
}
int Max(int *d)
{
return (d[0]<d[1])?(d[2]<d[1])?d[1]:d[2]:(d[2]>d[0])?d[2]:d[0];
}
int Min(int *d)
{
return (d[0]>d[1])?(d[2]>d[1])?d[1]:d[2]:(d[2]<d[0])?d[2]:d[0];
}
0249デフォルトの名無しさん
2005/08/26(金) 16:48:050250≠248
2005/08/26(金) 17:03:55んじゃ、判りやすいように簡易版をw
int max2(int a, int b) {return a > b ? a : b;}
int Max(int * d)
{
return max2(max2(d[0], d[1]), d[2]);
}
int min2(int a, int b) {return a < b ? a : b;}
int Min(int * d)
{
return min2(min2(d[0], d[1]), d[2]);
}
0251デフォルトの名無しさん
2005/08/26(金) 17:10:290252デフォルトの名無しさん
2005/08/26(金) 17:16:25これならどう?w
int Max(int * d)
{
int rtn = d[0];
if (d[1] > rtn) {
rtn = d[1];
}
if (d[2] > rtn) {
rtn = d[2];
}
return rtn;
}
それともこうするかw
int Max(int * d)
{
unsigned idx = 0;
if (d[1] > d[idx]) {
idx = 1;
}
if (d[2] > d[idx]) {
idx = 2;
}
return d[idx];
}
0253デフォルトの名無しさん
2005/08/26(金) 17:29:29Max(int*),Min(int*)に仕上げようと思って
渡された配列の要素数を計算しようとしたのですが
sizeof(src)/sizeof(src[0])でうまく出なかったので
何でなのかと弄ってたら、srcは関数内ではあくまで配列の
先頭へのポインタでしかないからsizeof(src)してもダメなのは
当然だという所までは気づいたんですが、こういう場合
要素数はどうやって求めればいいんでしょう?
やっぱり配列を扱える方で計算した上で引数として渡すしかないんでしょうか?
srcはmain()のローカル変数として宣言してます
0254デフォルトの名無しさん
2005/08/26(金) 17:39:05return valarray.max();
};
int Min(valarray<int> &src) {
return valarray.min();
};
0255デフォルトの名無しさん
2005/08/26(金) 17:44:05引数で渡すしかない。
C++だといろいろと回避法はあるけど。
0256デフォルトの名無しさん
2005/08/26(金) 17:45:20やっぱりそうですか・・・どうもです
0257253ではない
2005/08/26(金) 18:16:24int Max(int * d, int n)
{
int max = d[0];
int i = 1;
while(i < n){
if (d[i] > max) {
max = d[i];
}
i++;
}
return max;
}
0258デフォルトの名無しさん
2005/08/26(金) 22:14:18[2] 問題文:128桁までの2進数を10進数に変換する。
各Bitごとに1であれば答えとなる変数に重みを加算する、という仕様。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語:どちらでも可
[4] 期限: [2005年08月27日09:00まで]
[5] その他の制限: 特になし
上位Bitの数値を扱う再にオーバーフローが起きてしまいます。
その部分の解決方法についておねがいします。
0259デフォルトの名無しさん
2005/08/26(金) 22:26:49自分が作ったソースを晒しなぁ。
0260デフォルトの名無しさん
2005/08/26(金) 22:29:12俺も汎用的にしてみた。
void *max_in_array(void *a, int n, int elemsize, int(*cmp)(const void *,const void *))
{
int i;
char *max = a;
char *p = ((char*)a) + elemsize;
char *end = ((char*)a) + elemsize * n;
for(; p < end; p += elemsize)
if( (*cmp)(max, p) < 0 ) max = p;
return max;
}
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(*(a)))
#define MAX_IN_ARRAY(a, cmp, type) \
((type*)max_in_array(a, ARRAY_SIZE(a), sizeof(*(a)), cmp))
int int_cmp(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
int main()
{
int x[] = {3,1,4,1,5,9,2};
int max = *MAX_IN_ARRAY(x, int_cmp, int);
printf("max = %d\n", max);
return 0;
}
0261デフォルトの名無しさん
2005/08/26(金) 22:34:25無駄にそこまでこるならC++でテンプレート使えばいいじゃない。
0262258
2005/08/26(金) 22:39:42もともと32桁16進→10進という課題だったため、前半部分で16→2にしています。
作りかけでいろいろ無駄がありますが目をつぶってください。
0263デフォルトの名無しさん
2005/08/26(金) 23:00:28403 forbidden
0264デフォルトの名無しさん
2005/08/26(金) 23:15:34要は途中でunsined longなりの最大値超えるからでしょ?
適当な要素数のint型配列つかって10進数を表して
そいつを表示する部分と、乗算する部分作った方がいい希ガス
とりあえず自分で作ろうと思ってた奴の表示と乗算の部分だけ完成させたから
参考にでもしてくれ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/876.txt
0265デフォルトの名無しさん
2005/08/27(土) 00:33:47いろいろ目をつぶったら何も見えなくなった。
って後半(2->10)も何もないじゃないかあ〜!
(後、結果の保持or出力の形式の条件(有無さえ)が不明だなあ。
128桁の2進数値の保持に 128bit以上の整数型が必要になるのは理解済み?)
0266デフォルトの名無しさん
2005/08/27(土) 01:55:38数値ではなく、文字として処理して計算?という案はあるのですが
加算処理をどう表現していいのかがわからず、です。
計算結果はそのまま 123456798456132・・・というふうに表示し、プログラム終了です。
0267デフォルトの名無しさん
2005/08/27(土) 02:17:58文字として処理っていうのは筆算での掛け算をするってことか?
0268258
2005/08/27(土) 02:37:59数字の足し算を文字と文字の組み合わせで表現すればいいのでは?と考えてました。
1と1が組み合わさるときは2、1と2が組み合わさるときは3・・・とパターンを決めて計算を表現するということです。
うまく説明できない・・・
とりあえず、普通の足し算を行うのはあきらめる気でいました。
0269デフォルトの名無しさん
2005/08/27(土) 02:40:10> 数値ではなく、文字として処理して計算?という案
10進数の数値に対して 1桁に1バイト割り当て&その値空間が '0' 〜 '9' ってことか?
0270258
2005/08/27(土) 02:48:51まさにそのとおりです。
と、ここまで書いておいて別の方法に気がつきました。
大きな数を4桁ずつとかに区切り、配列に格納したモノ同士を足していくほうが
繰り上がりの問題も含めて単純に解決できそうです。
今まで考えでは1桁ずつ計算していましたが、こちらのほうが楽かつ簡単な気がします。
考えがまとまらずにフラフラしてしまって申し訳ありません。
なかなかうまく進まず焦ってしまっています。
一旦自分で考え直してもう一度質問すべきことを練り直します。
0271デフォルトの名無しさん
2005/08/27(土) 03:13:40[2] 問題文(含コード&リンク): バイナリのファイルを4byeづつ読み込んでヒストグラムを求める。
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2005年8月28日12:00まで]
[5] その他の制限:
問題文ではなく口頭で言われたので、言葉足らずのところがあると思いますが、
よろしくお願いいたします。
口頭では、「例えば、12バイトのバイナリファイルがあったとする。
そのファイルを4バイトずつ読み込み、それらを十進法であらわすと100、200、100だったとする
するとヒストグラムは(もちろん2の128乗の場合があるわけで出現してないものも表記すること)
0 |
1 |
・ |
・ |
100|**
200|*
(あとは省略)となる。 2の128乗の場合があるわけでターミナルに上のように表すのはどうかと思うので
エクセルなどでヒストグラムを作れるようにすること。といわれました。どうかよろしくお願いいたします。
0272デフォルトの名無しさん
2005/08/27(土) 04:00:59習ったデータ構造は?(2分探索木、ハッシュ、mallocする形の二次元配列)
習ったバイナリファイルを読み込む方法は?
出力はアスタリスクの横棒とエクセルファイル、どちらを作ればいいの?
0273デフォルトの名無しさん
2005/08/27(土) 04:28:11普通にバイナリモードで開いて、freadでunsigned longの変数に
放り込めばよくないか?
0274デフォルトの名無しさん
2005/08/27(土) 04:41:58unsigned long x;
x = (getchar() & 0xff) << 24;
x |= (getchar() & 0xff) << 16;
x |= (getchar() & 0xff) << 8;
x |= (getchar() & 0xff);
ってなっとる(爆) これもなんだかな・・・だが。
unsigned longが64ビットじゃない処理系って、俺は知らんけど、
fread(&x, 4, fp)とかだと、処理系依存じゃねぇか?
0275デフォルトの名無しさん
2005/08/27(土) 04:44:47習ったデータ構造についてですが、正直授業についていけなくてわかりません。
出力についてですが、0〜2の32乗の値のそれぞれの出現頻度をグラフ化したいわけで、
アスタリスクの横棒ですとターミナルに表示するのは非常に困難だと思いますし、
もし可能であれば、出力されるファイルをエクセル形式のファイルにして、それを
エクセルで開いて、縦軸に0〜2の32乗それぞれの出現頻度が、
開いたエクセルファイルに10進法で書かれていれば、それらから
グラフを作りたいなと考えております。
他の方法としても、ターミナルに一度に0〜2の32乗の出現頻度を表示することはできないので
100づつくらい、出現頻度を表示させておいて、それをエクセルに少しずつこぴぺしていこうと
考えております。私の発想ではこのくらいのことしかおもいつかないのですが
もっといい方法があったらそちらでプログラムを組んでいただけると助かります。
私の説明不足なために理解に苦しまれるところがたくさんあるとは思います。すみません。
0276デフォルトの名無しさん
2005/08/27(土) 04:50:070277デフォルトの名無しさん
2005/08/27(土) 04:51:57私がやってみた方法は、
#define BIG 2の32乗
hisutoguramu[BIG]という配列を用意いたしました。配列を初期化して
そして
hisutoguramu[in_data[i]]=hisutoguramu[in_data] + 1 ;
in_data[i]というのは元ファイルを4バイトずつ読み込んでいるものでiは
元ファイルのサイズ/4までしかループさせない
というふうにしてプリントfで表示させる方法をしてみようとしたのですが
できませんでした。セグメンテーション違反もでまして、無理でした。
0278デフォルトの名無しさん
2005/08/27(土) 04:53:11それは知りませんでした。
何かいい方法で、0〜2の32乗を横軸とし、縦軸を出現頻度としたグラフは作成できないのでしょうか?
0279デフォルトの名無しさん
2005/08/27(土) 04:57:08試しに、2の32乗がどんな値か計算して味噌。
できれば、それを表示するためにどれだけのメモリが必要になるかも。
#こいつの頭は大丈夫なんだろうかと不安になる恭子の頃。
0280デフォルトの名無しさん
2005/08/27(土) 04:58:09そもそも2^32もの行(列)数をグラフ化できるソフトなんてあるのか?
0281デフォルトの名無しさん
2005/08/27(土) 05:06:064、294、967、296ですね・・・。
四十億ですね・・・。
無知ですみませんでした。
あとエクセルで確認したところ65536までしか縦軸がありませんでした
口頭で聞いた問題でしたので、271ような課題を出す先生はいらっしゃらないと思ったほうが
いいのでしょうか?
テンプレに書かれているように、問題文を途中で帰るのは失礼だとは思いますが、
少し変えさせてもらってもよろしいでしょうか?
0282デフォルトの名無しさん
2005/08/27(土) 05:07:450283デフォルトの名無しさん
2005/08/27(土) 05:26:22変えるのならどうぞ。
>271ような課題を出す先生はいらっしゃらないと思ったほうが いいのでしょうか?
宿題としては、難儀です。32ビットだとデータ構造とかファイルサイズとか気にするんで。
限界に近いところでプログラムを組むことを経験させる・・・という意図ならありです。
なにか別の作業の一環でやってるなら、全データを扱うっていうのはヘンかな・・
出現数が上位のものをリストアップする・・・とか。ある範囲で区切るとかするんじゃないかな。
モトのデータが何で、どういう目的で使いたいのかが分かると、やりやすいな。
0284デフォルトの名無しさん
2005/08/27(土) 06:11:08お言葉に甘えて問題を変えさせていただきます。
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): バイナリであらわされているファイルを1byeづつ4バイト区切りで読み込んでヒストグラムを求める。
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2005年8月28日12:00まで]
[5] その他の制限:
例えば、A,B,C,Dそれぞれ1バイトで表現されていて、
ファイルとしては A1,B1,C1,D1、A2,B2,C2、D2、・・・An、Bn,Cn,Dnとなっていて
Aだけのヒストグラム Bだけのヒストグラム Cだけのヒストグラム Dだけのヒストグラムを求めたいです。
例えば縦軸は 0〜(読み込むデータサイズ/4) 横軸は0〜255であらわされることとなります。
問題文を変え、言葉が足りないところも多数ありますがどうぞよろしくお願いいたします。
0285デフォルトの名無しさん
2005/08/27(土) 06:16:31>モトのデータが何で、どういう目的で使いたいのかが分かると、やりやすいな。
画像のRGBのようなヒストグラムだと思っていただければいいと思います。
RGBにもう一つの要素が増えたと思っていただければなと思います。
0286デフォルトの名無しさん
2005/08/27(土) 06:20:500287デフォルトの名無しさん
2005/08/27(土) 06:44:11#include <stdio.h>
#include <stdlib.h>
#define NPLANE 4
int main(int argc, char *argv[])
{
static unsigned long count[NPLANE][256] = {0};
int c, plane, i;
FILE *fp = fopen(argv[1], "rb"); /* エラーチェックしてない */
for (plane = 0; (c = fgetc(fp)) != EOF; plane = (plane + 1) % NPLANE)
count[plane][c]++;
for (i = 0; i < 256; i++) {
printf("%d,%lu", i, count[0][i]);
for (plane = 1; plane < NPLANE; plane++)
printf(",%lu", count[plane][i]);
printf("\n");
}
return 0;
}
0288デフォルトの名無しさん
2005/08/27(土) 06:49:420289デフォルトの名無しさん
2005/08/27(土) 08:28:28それぞれの要素ごとに作るべきでしたか。
>>287
レス遅れて申し訳ありません。
さっそくためにしてみます。
ありがとうございます。
0290デフォルトの名無しさん
2005/08/27(土) 08:51:07ありがとうございます。
適当なバイナリを作って確認したところそのとおりになりました。
直接会ってお礼をいいたいところですが、本当にありがとうございます。
本当に助かりました。ありがとうございます。
0291デフォルトの名無しさん
2005/08/27(土) 23:14:58ちょっと引いたぞ
0292デフォルトの名無しさん
2005/08/28(日) 02:31:36[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): バイナリのファイルを読み込み、ヒストグラムを求める。
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2005年8月28日12:00まで] 過ぎても提出できます。
[5] その他の制限:
問題文ではなく口頭で言われたので、言葉足らずのところがあると思いますが、
よろしくお願いいたします。
例えば、R,G,B,αがそれぞれ1バイトで表現されていて、
ファイルとしては R1,G1,B1,α1、R2,G2,B2、α2、・・・Rn、Gn,Bn,αnとなっていて
そこでαは無視して、R,G,Bをワンセットとして考え、284でいったようなR,G,Bそれぞれではなく
R,G,Bをワンセットとしてヒストグラムを求めたいです。
287のように出力させていただければ自分でエクセルを使ってヒストグラムを求めたいと考えております。
どうぞよろしくお願いいたします。
0293デフォルトの名無しさん
2005/08/28(日) 02:56:37例)
R1,G1,B1,
R2,G2,B2,
.......
0294デフォルトの名無しさん
2005/08/28(日) 03:12:241)出力形式プリーズ
>287の例だと
・1行1レコードのテキストファイル。
・1レコードに含まれるフィールドはコンマで区切られる。
・フィールドは順に、値,Rの頻度,Gの頻度,Bの頻度,αの頻度。
例
0,1,0,100
1,2,1,40
...
255,100,0,0
というふうに書く。
2)メンドイからバイナリをどっかにおくと、いいかも。
0295デフォルトの名無しさん
2005/08/28(日) 03:12:51はい。
RGB値 出現頻度
0 9
1 25
2 0
3 109
・ ・
・ ・
・
2の24乗 13
出現頻度が0の場合は表示しないようにすればなんとか収まると思うのでよろしくお願いします。
表示しないでおくと下のようになります
RGB値 出現頻度
0 9
1 25
3 109
・ ・
・
2の24乗 13
0296デフォルトの名無しさん
2005/08/28(日) 03:14:080297デフォルトの名無しさん
2005/08/28(日) 03:16:38>>293
RGB値 出現頻度
0 9
1 25
2 0
3 109
・ ・
・ ・
・
2の24乗 13
出現頻度が0の場合は表示しないようにすればなんとか収まると思うのでよろしくお願いします。
上のようにしてもプログラムできるというなら上のようなバージョン(出現頻度が0でも表示する)と
下のバージョン(出現頻度が0の場合は表示させない)二つしてもらえると助かります。
表示しないでおくと下のようになります。
RGB値 出現頻度
0 9
1 25
3 109
・ ・
・
2の24乗 13
0298デフォルトの名無しさん
2005/08/28(日) 03:20:03287のような出力形式でいいですがもっといい方法があるならそちらを使ってもらって
下さると助かります。グラフにするときに便利な出力にしたいと考えております。
287の場合は最大Xが255だったのであの出力形式をエクセルにこぴぺして作れましたが
今回の場合は2の24乗になるのでなにか上手な方法があったらとおもっております。
>2)メンドイからバイナリをどっかにおくと、いいかも。
どういう意味でしょうか?無知ですみません。
みなさん深夜にありがとうございます。
0299デフォルトの名無しさん
2005/08/28(日) 03:20:370300デフォルトの名無しさん
2005/08/28(日) 03:22:42そんなに....
0301デフォルトの名無しさん
2005/08/28(日) 03:23:39無知ですみません。それはどのような意味でしょうか?
0302デフォルトの名無しさん
2005/08/28(日) 03:28:08あ・・・確かにそのとおりです。正直驚きました。なぜかというとTAではないドクターに知り合いがいて
少し相談したんですが彼もそういってました。このあとなにかしらの符号化?につなげていくのではと
>>300
やはり多くてグラフ化できないですかね?
それなら出現頻度が0の場合は消していけばなんとかならないですかね・・・
0303デフォルトの名無しさん
2005/08/28(日) 03:30:35絶対にそれぞれの値の棒グラフを作らねばならないのか?
度数分布表とかではなく?
0304デフォルトの名無しさん
2005/08/28(日) 03:33:19ヒストグラムを作ってということだったので特に指定はありませんでした。
私が勝手に判断して値の棒グラフと考えました。
度数分布表というのはよくわからないのでぐぐってきますがそれでいけそうでしたら
それでやってもらえると助かります
みなさんありがとうございます。
0305デフォルトの名無しさん
2005/08/28(日) 03:36:302の16乗で区分すると2の8乗の階級ができます。RGBで考えたときにRGが同じで
Bが違っても同じになるというのはこの課題ではだめだと思います。
0306デフォルトの名無しさん
2005/08/28(日) 03:37:41R成分,G成分,B成分をまとめて表すとき、
R * 256^2 + G * 256 + B
B * 256^2 + G * 256 + R
G * 256^2 + R * 256 + B
B * 256^2 + R * 256 + G
という組み合わせは見たことがあるので、そのうちのどれか知りたかった。
(ここではべき乗を^で表した)
0307デフォルトの名無しさん
2005/08/28(日) 03:46:35無知ですみません。
RGBαRGBα・・・・で構成されているファイルをαを無視して、
RGBをワンセット(1ピクセル?)で考えて
どのようなRGBが出現頻度が高いのかを知りたいと考えております。
回答になってたでしょうか?本当にすいません。
0308デフォルトの名無しさん
2005/08/28(日) 03:51:18long getval(FILE *fp)
{
int r, g, b, dummy;
if ((r = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
return (long) r << 16 | (long) g << 8 | b;
}
int main(int argc, char *argv[])
{
static unsigned long count[256L*256*256] = {0};
long i;
FILE *fp = fopen(argv[1], "rb"); /* エラーチェックしてない */
while ((i = getval(fp)) != EOF)
count[i]++;
for (i = 0; i < 256L*256*256; i++)
if (count[i]) /* 全要素を出力するにはこの行を削除 */
printf("%ld\t%lu\n", i, count[i]);
return 0;
}
0309デフォルトの名無しさん
2005/08/28(日) 04:02:19ありがとうございます
動作実験をしてみたいと思います
0310デフォルトの名無しさん
2005/08/28(日) 04:13:51#include <stdlib.h>
#define DATA_SIZE 16777216
#define RGB_MAX 255
long data[RGB_MAX][RGB_MAX][RGB_MAX];
struct RGB {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char alpha;
} rgb;
int main(void)
{
FILE *fp;
int i, r, g, b;
if((fp=fopen("ファイル名", "rb")) == NULL) exit(1); /* ファイルが開けなかった */
/* RGBのそれぞれの組み合わせをインクリメントしていく */
for(n=0; n<DATA_SIZE; n++) {
fread(&rgb, sizeof rgb, 1, fp);
data[rgb.r-1][rgb.b-1][rgb.b-1]++;
}
fclose(fp); /* ここで一旦ファイルを閉じる */
if((fp=fopen("textdata", "w")) == NULL) exit(1); /* ファイルが開けなかった */
fprintf(fp, "r,g,b,頻度");
for(r=0; r<RGB_MAX; r++)
for(g=0; r<RGB_MAX; g++)
for(b=0; r<RGB_MAX; b++)
fprintf(fp, "%.3d,%.3d,%.3d,%d,\n", r, g, b, i[r][g][b];
fclose(fp);
return 0;
}
0311310
2005/08/28(日) 04:20:19r+1, g+1, b+1, data[r][g][b]と読み替えてください。できたらこれも実験してもらえたら嬉しいです。
0312デフォルトの名無しさん
2005/08/28(日) 04:22:550313310
2005/08/28(日) 04:25:010314310
2005/08/28(日) 04:27:120315デフォルトの名無しさん
2005/08/28(日) 04:44:17#include <stdlib.h>
#define DATA_SIZE 16974593
#define RGB_MAX 256
long data[RGB_MAX][RGB_MAX][RGB_MAX];
struct rgb_data {
<TAB>unsigned char r;
<TAB>unsigned char g;
<TAB>unsigned char b;
<TAB>unsigned char alpha;
} rgb;
int main(void)
{
<TAB>FILE *fp;
<TAB>int i, r, g, b;
<TAB>if((fp=fopen("ファイル名", "rb")) == NULL) exit(1); /* ファイルが開けなかった */
<TAB>/* RGBのそれぞれの組み合わせをインクリメントしていく */
<TAB>for(i=0; i<DATA_SIZE; i++) {
<TAB><TAB>fread(&rgb, sizeof rgb, 1, fp);
<TAB><TAB>data[rgb.r][rgb.g][rgb.b]++;
<TAB>}
<TAB>fclose(fp); /* ここで一旦ファイルを閉じる */
<TAB>if((fp=fopen("textdata", "w")) == NULL) exit(1); /* ファイルが開けなかった */
<TAB>fprintf(fp, "r,g,b,頻度");
<TAB>for(r=0; r<RGB_MAX; r++)
<TAB><TAB>for(g=0; g<RGB_MAX; g++)
<TAB><TAB><TAB>for(b=0; b<RGB_MAX; b++)
<TAB><TAB><TAB><TAB>fprintf(fp, "%.3d,%.3d,%.3d,%d,\n", r, g, b, data[r][g][b]);
<TAB>fclose(fp);
<TAB>return 0;
} /* <TAB>はタブ文字に置換してください、何度も荒らしみたいにごめんなさい。コンパイル通ったのが大変嬉しくて... */
0316デフォルトの名無しさん
2005/08/28(日) 04:50:16RGBαのαは無視してと今までいっていたのですができればRGBαをまとまりと
考えて出現頻度を求めていただけないでしょうか?わがままいってもうしわけありません
0317デフォルトの名無しさん
2005/08/28(日) 04:56:340318デフォルトの名無しさん
2005/08/28(日) 05:01:530319デフォルトの名無しさん
2005/08/28(日) 05:02:14ありがとうございます。
動作を確認いたしました。
>return (long) r << 16 | (long) g << 8 | b;
この動作でαを除外したのですか?
無知ですみません
0320デフォルトの名無しさん
2005/08/28(日) 05:03:44>>318
すいません・・・。
上の方で4バイトずつのヒストグラムは難しいといわれたので自分で勝手に3バイトとしました。
それならなんとかなるのかなとおもったためです
すいませんでした。
0321デフォルトの名無しさん
2005/08/28(日) 05:10:18ありがとうございました。
0322デフォルトの名無しさん
2005/08/28(日) 05:35:57頻度のペアを作っていけば数えられるよ。
ただ、ヒストグラムの横軸をどうするのか?
出題ミスのような気がするから、まずやるべきは先生に問題を確認することなんだけど
なぁ……
0323デフォルトの名無しさん
2005/08/28(日) 06:00:57char、short、longと、配列サイズを変更して集計するとか。
0324デフォルトの名無しさん
2005/08/28(日) 06:03:04ありがとうございます。
308の if (count[i]) /* 全要素を出力するにはこの行を削除 */
で 削除して全要素を出力したのですが出力できなかったところを考えると
2の24畳でさえだめだったのですから2の32乗は無理そうですね。
ですので出現したものだけのヒストグラムを作ろうかなと考えております(出題ミスでないと考えた場合)
0325デフォルトの名無しさん
2005/08/28(日) 06:09:160326デフォルトの名無しさん
2005/08/28(日) 06:17:09どーいうデータが想定されてんのか知らんけどさ
どーせ頻度0の要素がほとんどだろ?
0327デフォルトの名無しさん
2005/08/28(日) 06:22:580328デフォルトの名無しさん
2005/08/28(日) 06:28:03すいません・・・
>>326
TAが配布したデータでは
(要素数は2の24乗がある中使われていた要素は10000ちょっとでした)でした。
>>327
わかりません・・・。
0329デフォルトの名無しさん
2005/08/28(日) 06:32:13>>318
いいわけさせていただくと αの要素を調べていたら0か255でしたので
(RGBすべてが0だった場合αも0、RGBが何かしらの値を盛っていたらαは常に255だった)
のでαを省いたものといいました。
しかし、これでは他のデータですと汎用性がないというっことが考えられます
ですので後でRGBαをワンセットと考えて〜といってしまいました
みなさんにはいろいろしてもらっていたのに大変失礼なことをしてしまいました
本当にごめんなさい
0330デフォルトの名無しさん
2005/08/28(日) 06:35:450331デフォルトの名無しさん
2005/08/28(日) 06:40:23>>329
TAが配布したデータをupせよ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0332デフォルトの名無しさん
2005/08/28(日) 06:50:18データ圧縮は上でも推測されてたようにあるかもしれませんが、
ヒストグラムをつくってから考えたいと思います。
ためしにZIPで圧縮したら1.2Mが60kになったので関係ありそうな気がしますね・・・
>>331
TAから公開してはいけないとは言われいないデータなのですが、あまりにちゃんに慣れてない
ので怖いのでアップするのは勘弁してもらえないでしょうか?
0333デフォルトの名無しさん
2005/08/28(日) 06:52:16TAからはRGBαという構成といわれたんですが
どうも調べるうちにαBGRになっているような気がします。
一般論として環境によってはデータが逆さまになることがあるとか
きいたことがあるようなないような・・・
0334デフォルトの名無しさん
2005/08/28(日) 06:55:50x86系はリトルエンディアン
0335デフォルトの名無しさん
2005/08/28(日) 06:58:20ありがとうございます
確かそのような名前でなにかあったことを記憶しております
0336デフォルトの名無しさん
2005/08/28(日) 06:59:27そういうチェックもしたいからupしろというてる。
・・・てか、人を信用しようよ・・・。
0337デフォルトの名無しさん
2005/08/28(日) 07:02:350338デフォルトの名無しさん
2005/08/28(日) 07:06:210339デフォルトの名無しさん
2005/08/28(日) 07:13:15すいません。TAが所属している研究室は画像研究をしてる研究室で
受講しているだけの一学生に大切なデータを渡すとは思えないのですが、
なにか問題になるといやですのでアップは勘弁してください。
いろいろしていただいているのに沢山しつれないことをして申し訳ありません・・・。
0340デフォルトの名無しさん
2005/08/28(日) 07:15:36ハッシュはよくわからないけど、データが少ないんなら2分木とかで存在する値だけ読んでいくとか。
デフォルメしてかまわないんなら・・・普通に配列でいいか。
テキストファイルなら圧縮率高いですよ。
特に0が多い場合。
0341デフォルトの名無しさん
2005/08/28(日) 07:22:54だらだら配列を線形探索。
0342デフォルトの名無しさん
2005/08/28(日) 08:02:51したの308さんのプログラムですとαBGをワンセットと考えて出現頻度がでるようになっていると
思います。BGRをワンセットと考えて出現頻度を出すにはどうしたらいいのでしょうか?
何度もすみません。
#include <stdio.h>
long getval(FILE *fp)
{
int r, g, b, dummy;
if ((r = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
return (long) r << 16 | (long) g << 8 | b;
}
int main(int argc, char *argv[])
{
static unsigned long count[256L*256*256] = {0};
long i;
FILE *fp = fopen(argv[1], "rb"); /* エラーチェックしてない */
while ((i = getval(fp)) != EOF)
count[i]++;
for (i = 0; i < 256L*256*256; i++)
if (count[i]) /* 全要素を出力するにはこの行を削除 */
printf("%ld\t%lu\n", i, count[i]);
return 0;
}
0343デフォルトの名無しさん
2005/08/28(日) 08:05:22>BGRをワンセットと考えて出現頻度を出すにはどうしたらいいのでしょうか?
をBGRαをワンセットとして出現頻度を出すにはどうしたらいのでしょううか?
に訂正させてください。BGRでも出現頻度がでるのならお願いします
0344デフォルトの名無しさん
2005/08/28(日) 08:08:130345デフォルトの名無しさん
2005/08/28(日) 08:35:000346デフォルトの名無しさん
2005/08/28(日) 08:40:52long getval(FILE *fp)
{
int r, g, b, dummy;
if ((r = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
return (long) r << 24 | (long) g << 16 | (long) g << 8 | b;
}
int main(int argc, char *argv[])
{
static unsigned long count[256L*256*256] = {0};
long i;
FILE *fp = fopen(argv[1], "rb"); /* エラーチェックしてない */
while ((i = getval(fp)) != EOF)
count[i]++;
for (i = 0; i < 256L*256*256; i++)
if (count[i]) /* 全要素を出力するにはこの行を削除 */
printf("%ld\t%lu\n", i, count[i]);
return 0;
}
ほらよ
0347デフォルトの名無しさん
2005/08/28(日) 08:45:300348デフォルトの名無しさん
2005/08/28(日) 08:58:590350デフォルトの名無しさん
2005/08/28(日) 09:03:49これをいじればαBGからRGBになりそうなのですが、バスエラーが出たりと
よくわからなかったです。どうか教えていただけないでしょうか?
リトルエディアンのことを言い忘れていてすみません
0351315
2005/08/28(日) 09:05:58とにかくデータがalpha,R,G,Bの並びなのかどっちなのかはっきりさせる必要がありそうです。
0352デフォルトの名無しさん
2005/08/28(日) 09:08:33逆になってるっぽいって言ってるからRGBAlphaの1B*4で1セットじゃねーの
肝心のデータうpしてくれりゃそれで解決するんだがな
0353デフォルトの名無しさん
2005/08/28(日) 09:18:13データ自身はRGBαなのですがαBGRというふうに出て来るそうです
0354デフォルトの名無しさん
2005/08/28(日) 09:28:270355315
2005/08/28(日) 09:32:4117179869184Byte つまり、16777216MB、16384GBもメモリをとられることになるんですけど.....。
頻度はそれぞれunsigned char型に収まりきらないものでしょうか。
0356デフォルトの名無しさん
2005/08/28(日) 09:33:110357デフォルトの名無しさん
2005/08/28(日) 09:35:320358デフォルトの名無しさん
2005/08/28(日) 09:36:280359デフォルトの名無しさん
2005/08/28(日) 09:39:16long getval(FILE *fp)
{
int r, g, b, dummy;
if ((r = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
return (long) dummy = 0 | (long) b << 16 | (long) g << 8 | r;
}
int main(int argc, char *argv[])
{
static unsigned long count[256L*256*256] = {0};
long i;
FILE *fp = fopen(argv[1], "rb"); /* エラーチェックしてない */
while ((i = getval(fp)) != EOF)
count[i]++;
for (i = 0; i < 256L*256*256; i++)
if (count[i]) /* 全要素を出力するにはこの行を削除 */
printf("%ld\t%lu\n", i, count[i]);
return 0;
}
これでおk?
0360デフォルトの名無しさん
2005/08/28(日) 09:44:43とりあえず値の範囲でも調べたら?
何通りあるかとか。
0361デフォルトの名無しさん
2005/08/28(日) 09:46:08>頻度はそれぞれunsigned char型に収まりきらないものでしょうか。
データのサイズによるのですが 2の24乗必要と考えもらえると助かります
0362デフォルトの名無しさん
2005/08/28(日) 09:52:35αBGのワンセットでの出現頻度になっているので
BGR(RGB)のワンセットでの出現頻度が出るようになればなと考えております
0363デフォルトの名無しさん
2005/08/28(日) 09:55:010364デフォルトの名無しさん
2005/08/28(日) 09:57:55三次元画像らしいので
0365デフォルトの名無しさん
2005/08/28(日) 10:05:18出現頻度をということです。
最初はRGBαというふうに説明していたために混乱させて申し訳ありません。
308さんのプログラムだとαBGとなってしまうのは私が最初にRGBαとなっているといったためです。
実際はαBGRです。リトルエディアンだからだそうです
0366デフォルトの名無しさん
2005/08/28(日) 10:05:490367デフォルトの名無しさん
2005/08/28(日) 10:08:23・入力データのフォーマット
・出力データのフォーマット
を書いてね。
0368デフォルトの名無しさん
2005/08/28(日) 10:19:18リナックスです
>>367
入力データのフォーマットはバイナリでRGBαそれぞれ1バイトで計4バイトが何度も記述されている
構成になっています。ただ、私の環境だとこのRGBαバイナリでーたを見てみると
αBGRという風に見えます。(ターミナルでコマンドで中身を見た場合)
出力データのフォーマットは下のような感じにしていただきたいです、
タブでもいいですし、、であけてもいいです。
ただし、出現回数が0の場合は記述しなくてもいいです。できればソースのある箇所をいじれば出現回数
が0でも記述するようにしてもらえると助かります。
RGB値 出現回数
1 4
2 5
・ ・
・ ・
0369デフォルトの名無しさん
2005/08/28(日) 10:25:51αをあとから付け足すとかしない?
0370デフォルトの名無しさん
2005/08/28(日) 10:37:09arufaの値は調べていくとわかったのですが0か255でした。
本来ならばαを含めてRGBαをワンセットとした出現頻度をもとめたいのですが
0か255なら別にいらないのではと思い、RGBと書きました。
αをいれることでプログラムが動かなくなるようでしたらαなんていらないですが
もしもRGBαでワンセットの出現頻度がわかるのでしたらそうしていただきたいです。
αが0のときはRGBもそれぞれ0でした。なのであるRGB値が出現していたらアルファは255っとなります
少しわかりづらいかもしれません。すいません
0371デフォルトの名無しさん
2005/08/28(日) 10:54:221)
>>308
getval()のなかのif (..) return EOF;が4つあるけれど、それの順番を変更すればよろしい。
2)
αがRGBの値から求められるのなら、αは無視してよろしい。
以上。
0372デフォルトの名無しさん
2005/08/28(日) 10:59:10ありがとうございます
やってみます
0373デフォルトの名無しさん
2005/08/28(日) 12:28:23#include <stdio.h>
long getval(FILE *fp)
{
int r, g, b, dummy;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((a = fgetc(fp)) == EOF)
return EOF;
return (long) r << 16 | (long) g << 8 | b;
}
このようにr、g、b、dummyを単純に逆転させるだけでいのでしょうか?
0374デフォルトの名無しさん
2005/08/28(日) 12:52:240375デフォルトの名無しさん
2005/08/28(日) 12:56:21出力だけ有っても無意味
入力とそれに対応する出力のセットか、片方だけなら入力
0376デフォルトの名無しさん
2005/08/28(日) 13:02:46入力ファイルをテキストに十進法で出力しました。
そして RGBαそれぞれが0の場合がほとんどでしたのでプログラムを組んでこれを消しました。
その結果を出力したテキストが下のようなものになります
(αBGRの順)
255 212 71 102 255 212 81 121 255 191 82 115 255 198 106 132 ・・・・・・・・
自分なりにずっといろいろやったり考えたりしてたのですが、
このテキストで、(α)BGRをワンセットと考えたR出現頻度を求めることもできるかなとおもって
アップしたほうがいいかをお聞きしました。
0377デフォルトの名無しさん
2005/08/28(日) 13:09:52データを処理した後のものを出されても仕方ない。
0378デフォルトの名無しさん
2005/08/28(日) 13:21:42それぞれ0ってなんだ? 全部0じゃないのか?
へんてこな日本語を文脈で判断して、わけの分からない
加工データでよく分からない出力を出せといわれても無理だ。
0379デフォルトの名無しさん
2005/08/28(日) 13:24:490380デフォルトの名無しさん
2005/08/28(日) 13:26:59>>378
すみません・・・。できるところは自分でやろうと思って変な方向になりました・・・。
877にアップしました。TAの方のメールを待っていましてが配布してもかまわんよとのことだったので
アップしました。
どうかお願いいたします。
0381デフォルトの名無しさん
2005/08/28(日) 13:28:03全部0ですといいたかったです
0382デフォルトの名無しさん
2005/08/28(日) 13:29:100383デフォルトの名無しさん
2005/08/28(日) 13:32:12出力形式というのは?
0384デフォルトの名無しさん
2005/08/28(日) 13:34:150385デフォルトの名無しさん
2005/08/28(日) 13:37:22無知ですみません
添付可能ファイル : TEXT, LHA, ZIP
なのにlzhであげるなということでしょうか?
0386デフォルトの名無しさん
2005/08/28(日) 13:39:41やっとわかりました
出力形式というよりも最終的な目的がヒストグラムを作ることですので
エクセルに簡単にこぴぺできる形がいいかと思います
他にいい方法があったら教えてくださると助かります
0387デフォルトの名無しさん
2005/08/28(日) 13:42:440388デフォルトの名無しさん
2005/08/28(日) 13:45:01はい、というのもヒスグラムをつくってこいとのことでどういう風に作るかも課題の一つだと
私は考えておりました。
エクセルでは65k程度しか軸がないのでそれ以上のヒストグラムはつくれません
ですが出現しないRGBαを除けば10k程度に収まります
こういうのを試してるのではないかと思っております
0389デフォルトの名無しさん
2005/08/28(日) 13:54:170390デフォルトの名無しさん
2005/08/28(日) 13:54:58普通に考えてバイナリモードでの読み込み処理ができるかどうかをみる課題だろ
それに出現しないのを除外してもいいのなら、そんなヒストグラムに何の意味があるよ?
PhotoshopとかにあるRGBそれぞれを別々にグラフ化して重ね合わせるんじゃないのか?
0391デフォルトの名無しさん
2005/08/28(日) 13:55:490392デフォルトの名無しさん
2005/08/28(日) 14:01:270393デフォルトの名無しさん
2005/08/28(日) 14:03:46返事がすぐには来ないと思いますが聞いてみます。
>>390
上のほうにでているようにRGBα別々のヒストグラムを作りましたが
確認したところ 別々ではなく RGBαをワンセットとしてヒストグラムを とのことでした
0394デフォルトの名無しさん
2005/08/28(日) 14:28:250395デフォルトの名無しさん
2005/08/28(日) 14:33:28> なんかファイルの先頭にテキストがいくつか混ざってるのは俺だけ?
すいません。消すのを忘れていました
消したものをあげたほうがいいでしょうか?
96*96*96*4バイトが正確なデータです
0396デフォルトの名無しさん
2005/08/28(日) 14:45:490397デフォルトの名無しさん
2005/08/28(日) 14:47:06消すのを忘れたってことは、喪前が勝手に入れたのか?
0398デフォルトの名無しさん
2005/08/28(日) 14:52:54Cで組むんじゃなくて、このツールの使い方を学習させたいんじゃなかろーか。
0399デフォルトの名無しさん
2005/08/28(日) 14:57:380400デフォルトの名無しさん
2005/08/28(日) 14:58:32いえ
ですがRGBαそれぞれのヒストグラムを作っていたとき
αの値がおかしかったのでヘッダを消したら0か255になったので消すのはむしろいいことのようです
(メールで確認済み)
0401デフォルトの名無しさん
2005/08/28(日) 15:00:39私のヘッダを見てツールがあるのを発見したのでメールでTAにたずねたところ
別にAVSじゃなくってもいいんだけどたまたまそのファイルで演習してるだけ
とのことでした
0402デフォルトの名無しさん
2005/08/28(日) 15:02:06ttp://www.nagano.fujitsu.com/services/avs/Announce/express51.html
わらた。
0403デフォルトの名無しさん
2005/08/28(日) 15:03:21BMPとかならまだしも、わざわざAVSとやらのデータをCで扱わせる意味が分からん
それに3バイトを1セットと見てのヒストグラムを作るなんて
必要となるメモリを考えても何させたいのか分からないし
0404デフォルトの名無しさん
2005/08/28(日) 15:06:000405デフォルトの名無しさん
2005/08/28(日) 15:06:234バイトを1セットとみてヒストグラムを作らせ、ベクトル量子化させるとかだめかな?
0406デフォルトの名無しさん
2005/08/28(日) 15:07:03また、バイナリエディタで開いたんだけど、ヘッダ部分は最後の 0C 0Cまで削除してしまっていいんですよね。
0407デフォルトの名無しさん
2005/08/28(日) 15:08:18あの上の方にも書きましたが308のどこを変えればαBGをワンセットとからBGRにできるのでしょうか?
0408デフォルトの名無しさん
2005/08/28(日) 15:09:59私はイーマックスで開いて96*96*96*4バイトになるまで削除しました
プログラムはほとんど使えません すいませn
0409デフォルトの名無しさん
2005/08/28(日) 15:10:26freadで4バイトまとめて読み込みゃ、RGBAlphaの並びになるから
0xFF辺りでマスクしろ
0410デフォルトの名無しさん
2005/08/28(日) 15:10:440411デフォルトの名無しさん
2005/08/28(日) 15:12:430412デフォルトの名無しさん
2005/08/28(日) 15:13:16私の環境ですと、リトルエディアンが原因でαBGRとなっているので308さんのだとαBGになります
409さんのおっしゃることはボクでもできるかもしれませんが、
そのあとの出現頻度のカウントが全然わかりません。ごめんなさい
0413デフォルトの名無しさん
2005/08/28(日) 15:13:300414デフォルトの名無しさん
2005/08/28(日) 15:14:05#include <stdio.h>
long getval(FILE *fp)
{
int r, g, b, dummy;
if ((dummy = fgetc(fp)) == EOF)
return EOF;
if ((b = fgetc(fp)) == EOF)
return EOF;
if ((g = fgetc(fp)) == EOF)
return EOF;
if ((a = fgetc(fp)) == EOF)
return EOF;
return (long) r << 16 | (long) g << 8 | b;
}
このようにr、g、b、dummyを単純に逆転させるだけでいのでしょうか?
>return (long) r << 16 | (long) g << 8 | b;
ここは変更させなくてもよろしいのでしょうか?
何度もすいません
0415デフォルトの名無しさん
2005/08/28(日) 15:23:50long getval(FILE *fp)
{
unsigned long temp;
if (fread(&temp, 4, 1, fp) != 1)
return EOF;
return (long)temp >> 8;
}
こうでいいんじゃねーのか?脳内コンパイラだからエラー出たら適当に修正してくれ
0416デフォルトの名無しさん
2005/08/28(日) 15:30:56htonl つかったらいいんジャマイカ。
0417デフォルトの名無しさん
2005/08/28(日) 15:34:26ありがとうございます。これを308と合体させてみてコンパイルは通ったのですが
セグメンテーションエラーがでました。
414はどこが違うんでしょうか?読み込む順番をおっしゃられるようにかえて
r g b というならびになっていると素人目には見えるのですがだめなんでしょうか・・・
確認したいのですが出現頻度をどうやって確認したらいいのかもわかりません。
0の出現頻度はあからさまなのでわかるのですが。
0418デフォルトの名無しさん
2005/08/28(日) 15:39:25それについて調べてみます
ありがとうございます
0419デフォルトの名無しさん
2005/08/28(日) 15:43:32net/if.h な
0420デフォルトの名無しさん
2005/08/28(日) 15:44:24同じ値があり、おそらく正しいと思われます
みなさんありがとうございます。
0421デフォルトの名無しさん
2005/08/28(日) 15:46:47すいません、わかりませんでした
0422デフォルトの名無しさん
2005/08/28(日) 16:38:19指定したカラム数の文字列を取り出す関数を作れ
ex) str[] = "abc,def,ghi"
sep = ',' → defがとれる
column_num = 2
という問題があり
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/880.txt
のように作ってみたのですが、コンパイルの際に
cc -o token_cut token_cut.c
token_cut.c: In function `main':
token_cut.c:28: warning: passing arg 2 of `token_cut' makes pointer from integer without a cast
というエラーが出ます
解決方法をどうかご教授ください。。。
0423デフォルトの名無しさん
2005/08/28(日) 16:42:20char sep[] = ","
0424デフォルトの名無しさん
2005/08/28(日) 16:44:04main内でchar sepとして定義されてるが、肝心の関数の方は
char*を引数として取るから、呼び出しの時にsepじゃなくて
&sepにすりゃいいんじゃまいか?
0425デフォルトの名無しさん
2005/08/28(日) 16:46:17こんなんいらん。
if(r_string == NULL)
でいい、ってか、意味わかってかいてるか?
0426デフォルトの名無しさん
2005/08/28(日) 16:49:04ありがとうございます。無事コンパイルできました。
が、セグメンーション違反になってしまいうまくいきません。
どこが悪いかご指摘いただけないでしょうか。
0427デフォルトの名無しさん
2005/08/28(日) 16:49:13strcmp(r_string,NULL)
が間違っています。str(cmp)に渡すのは有効なポインタでなければならず、
NULLを渡せばアドレスはゼロを指しているためコンパイルを通ったとしてもクラッシュします、ヌル文字列でなければなりません。
したがってstrcmp(r_string, "")としなければなりません。ただ、>>425さんの言うようにこの文は
if(!r_string)で片付けたほうがいいと思います。
0428デフォルトの名無しさん
2005/08/28(日) 16:50:57はい、意味は分かっています。
教授がこうしたほうがよいと言っていまして
このようにしたんです。
0429デフォルトの名無しさん
2005/08/28(日) 16:53:50>str(cmp)に渡すのは有効なポインタでなければならず、
>NULLを渡せばアドレスはゼロを指しているためコンパイルを通ったとしてもクラッシュします、ヌル文字列でなければなりません。
ありがとうございます、自分の勉強不足でした。
無事、プログラムを動かすことができました
答えてくださった皆様ありがとうございました。
0430デフォルトの名無しさん
2005/08/28(日) 16:54:46なんでこうした方がいいの?
0431デフォルトの名無しさん
2005/08/28(日) 16:56:15#include <string.h>
char *token_cut(char *str, char *sepa, int column_num)
{
if( column_num < 1 || str == NULL || sepa == NULL)
{
str = NULL;
}
else
{
int i;
for(str = strtok(str, sepa), i = 1;
str != NULL && i < column_num;
str = strtok(NULL, sepa), ++i) ;
}
return str;
}
0432デフォルトの名無しさん
2005/08/28(日) 16:57:35「見た目が分かりやすいから
慣れないうちはこう書いたほうがいい」とのことです。
0433デフォルトの名無しさん
2005/08/28(日) 17:00:240434デフォルトの名無しさん
2005/08/28(日) 17:19:11まだ動いてるヨ。あと数時間かかるのかな.....。俺のルーチン遅。
0435デフォルトの名無しさん
2005/08/28(日) 20:58:370436デフォルトの名無しさん
2005/08/28(日) 21:00:330437デフォルトの名無しさん
2005/08/28(日) 22:06:18なお、こんなことすると(longが32ビットの環境では)ループが終わらんので注意
unsigned long i;
for (i = 0; i < 0xffffffffUL; i++) {
/* 処理 */
}
0438デフォルトの名無しさん
2005/08/28(日) 22:34:46終わらないって言うのは、2^32回ループするのが現実的な時間じゃ無理ってこと?
それともほんとに無限ループになる?
ちょっと気になったんで・・・
0439デフォルトの名無しさん
2005/08/28(日) 22:44:35for (i = 0; i < 0xfffffffUL - 1; i++) {
/* 処理 */
}
と比較してみたら? >438
0440デフォルトの名無しさん
2005/08/28(日) 22:44:54for(i=0;i<=0xff;i++){
func();
}
とかだと、
i=0からはじまって、
i=0xfeのときi<=0xffは真か偽か?
i=0xffのときi<=0xffは真か偽か?
unsigned char な値が0xffのとき0x01を足すと次の値は何か?
0441デフォルトの名無しさん
2005/08/28(日) 22:45:340442デフォルトの名無しさん
2005/08/28(日) 22:46:37unsigned char i;
for(i=0xff;i>=0;i--){
}
もバグの原因となるので要注意
0443デフォルトの名無しさん
2005/08/28(日) 22:47:05なんで終了条件が <= になってんの?
そんなこと誰も言ってないよ?
0444デフォルトの名無しさん
2005/08/28(日) 22:53:11終了
0445ぼるじょあ ◆yBEncckFOU
2005/08/28(日) 23:49:470446デフォルトの名無しさん
2005/08/29(月) 01:50:450447デフォルトの名無しさん
2005/08/29(月) 03:06:30どこが悪いのでしょうか?
int price[7][7]={{600,800,1000,1200,1400,1600,1700}, /* 県内 */
{700,900,1100,1300,1500,1700,1800}, /* 第1地帯 */
{800,1000,1200,1400,1600,1800,2000}, /* 第2地帯 */
{900,1100,1300,1500,1700,1900,2100}, /* 第3地帯 */
{1000,1200,1400,1600,1800,2000,2200}, /* 第4地帯 */
{1100,1300,1500,1700,1900,2100,2300}, /* 第5地帯 */
{1200,1400,1600,1800,2000,2200,2400}}; /* 第6地帯 *//
よろしくお願いいたします。
0448デフォルトの名無しさん
2005/08/29(月) 03:10:510449デフォルトの名無しさん
2005/08/29(月) 03:11:07つか、テンプレ読もうな。
0450デフォルトの名無しさん
2005/08/29(月) 03:12:39つーかテンプレ使えよ
0451デフォルトの名無しさん
2005/08/29(月) 03:15:37てゆーか、テンプレにしたがえよ。
0452デフォルトの名無しさん
2005/08/29(月) 03:15:571レスに収まらないなら、>>1のアップローダ。
0453デフォルトの名無しさん
2005/08/29(月) 16:29:39[1] 授業単元: 人工知能
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/883.txt
このプログラム(↑)を変更し、12×12の世界で、
開始地点(左上)と目的地点(右下)と障害物を設計して、
各セルにランダムに点数を配置し、移動の度に点数を獲得し、
目的地点に達した時に獲得点数の合計を出力するSマリオのプログラムを作成せよ。
(プログラムは8×8の世界で壁にそって右にぐるぐる回るか、障害物をぐるぐるまわる
Sマリオのプログラムです。実行可能です。)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語: C
[4] 期限: [2005年8月31日まで]
[5] その他の制限: なし
0454デフォルトの名無しさん
2005/08/29(月) 17:49:59MAPを上書きするのか・・・マンドクサ
関係ないが、make_world()という名前にちょっと反応した俺ガイル
0456デフォルトの名無しさん
2005/08/29(月) 18:24:08ちょっと書き換えればいい話だったりするときとか。考えもしていないんじゃないかって思う。
0457デフォルトの名無しさん
2005/08/29(月) 18:26:420458デフォルトの名無しさん
2005/08/29(月) 19:34:120459デフォルトの名無しさん
2005/08/29(月) 19:40:33その通りだろ。違うのか?
0460デフォルトの名無しさん
2005/08/29(月) 20:31:21構造体まで教えているであろうコードなのにswitch使えるところで使ってないでif-else使ってるし。
何なの?
0461デフォルトの名無しさん
2005/08/29(月) 20:35:32あまりCに慣れてないのでわなかろおか
0462デフォルトの名無しさん
2005/08/29(月) 22:42:47一向に前に進む気配がありません。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/884.txt
一応、うpしておきます。マリオの動きや判断する関数はいじってないからこれで動くはずだと思ったんですが。
はあ.....。質問者の人はいったいいずこへ。
0463デフォルトの名無しさん
2005/08/29(月) 22:59:58とりあえずやってみた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/886.txt
・・・けど、元のソースを思いっきり改造してしまったw
というわけで、動くには動くけど、参考にはならんと思う。
あと、元のプログラム、探索処理にバグあるような気がする。
行き止まりにぶつかった時の挙動がものすごく怪しい。
面倒なので見てないが、decide_action()あたりを見直す必要があるかと。
0464462
2005/08/29(月) 23:12:06これで一応動きます。
なんだか (i, j) ではなく (j, i) のような感じになっているようですね。転置行列みたいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/887.txt
0465447
2005/08/30(火) 00:51:16お騒がせいたしました。
0466デフォルトの名無しさん
2005/08/30(火) 02:35:51自己解決野郎は後を立たないな。テンプレを使わずにあほな質問して「お騒がせ」することより、
どう解決したかも書かないで勝手に自己解決することが一番失礼だぞ。
0467デフォルトの名無しさん
2005/08/30(火) 03:47:29自己解決というと、ちょうどオナニーしてスッキリしたようなものか。
本人は気持ちいいかもしれんが、他の人がイライラする。
0468デフォルトの名無しさん
2005/08/30(火) 14:18:14質問者がおにゃのこならそれでもOK
0469デフォルトの名無しさん
2005/08/30(火) 16:35:31[2] 問題文(含コード&リンク):http://sylphys.ddo.jp/upld2nd/train/img-box/img20050830163046.gif
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC++6.0
[3.3] 言語: C
[4] 期限: [2005年09月01日まで]
[5] その他の制限:
さっぱりわかりません orz
お願いします。
0470デフォルトの名無しさん
2005/08/30(火) 16:36:400471デフォルトの名無しさん
2005/08/30(火) 17:47:18ほんとに何もわからないの?
今の時期にコレやってるという事は
4月からCを勉強してるんだろうけど
それで全然わからない、ってのはマズイよ?
宿題丸投げするのもいいけど、
最低限、作ってもらったプログラムを
自分で理解するくらいのことはしような。
わからない部分は質問してくれれば答えるからさ。
というわけで、
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/888.txt
0472デフォルトの名無しさん
2005/08/30(火) 18:10:37確認を取ったときに応答がヘンだったときに使うとよろしい>471
0473デフォルトの名無しさん
2005/08/30(火) 18:11:100474デフォルトの名無しさん
2005/08/30(火) 18:21:16というより、大学の授業にはきちんと出たほうがいいです。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/889.txt
0475デフォルトの名無しさん
2005/08/30(火) 18:55:350476デフォルトの名無しさん
2005/08/30(火) 19:02:30てか、uploader使うのがイヤンなんで、プログラム圧縮装置を作成中。
いや、単に改行減らすだけなんだがね。
動くけど、「なんじゃこりゃー」なソースになるだろうと。
(どうせ、indentで綺麗にできるし)
0477デフォルトの名無しさん
2005/08/30(火) 19:04:55逆に無駄なコードをたくさん入れるのもいいかもね。
それか、思いっきりトリッキーなコーディングをするとか。
アセンブラで組むのもアリかも。
0478デフォルトの名無しさん
2005/08/30(火) 19:27:40識別子にID振って、lをイチ、1をゼロとする2進法で命名するとか。
0479デフォルトの名無しさん
2005/08/30(火) 19:31:20さらにソースを画像でうpすれば完璧だね
0480デフォルトの名無しさん
2005/08/30(火) 19:49:00だから、一箇所だけ一目でわかる罠を仕掛けるのさ
0481デフォルトの名無しさん
2005/08/30(火) 19:55:04いや、授業出ていればわかるだろみたいな子にはそれくらい必要かも。
0482デフォルトの名無しさん
2005/08/30(火) 19:55:560483デフォルトの名無しさん
2005/08/30(火) 19:58:14ってかあれが出来ないって、授業全く出てないorどうしようもないほど
プログラミングに向いてないかのどっちかだろ
0484デフォルトの名無しさん
2005/08/30(火) 20:05:10[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/891.txt
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2005年8月31日17:00まで] 過ぎても提出できます。
[5] その他の制限:
問題文ではなく口頭で言われたので、言葉足らずのところがあると思いますが、
よろしくお願いいたします。
0485デフォルトの名無しさん
2005/08/30(火) 20:12:070486デフォルトの名無しさん
2005/08/30(火) 20:14:57[1] C言語学習
[2] 指定した行に書き込みを出来る関数を作れ
[3] 環境
[3.1] OS: Windows
[3.2] VC++6.0 Pro
[3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 無期限
[5] 標準ライブラリ可
関数名 filesave(書き込む行「int型か数値」,書き込む文字列);
にて製作する事です。
FILEやfprintfなどは習いましたが行単位の書き込みはまだです。
0487デフォルトの名無しさん
2005/08/30(火) 20:28:16ソース書いてる暇無いのでヒントだけ
FILEについて習ったなら知ってるとは思うが
・行単位の読み込み: fgets
・行単位の書き込み: fputs
・EOFの判定: feof
これらを使っちゃいけないというなら
fgetcで改行コード(\n)を調べないといけないな。
0488デフォルトの名無しさん
2005/08/30(火) 21:11:32fgetsでファイルを一行ずつ読みながらtempファイルに全部書いていって、
そのtempファイルから一行ずつ読んで書き込んでいって、
指定した行になったら指定した文字列を書き込んで、またtempファイル
から続きを読んで書けばいい。
0489デフォルトの名無しさん
2005/08/30(火) 21:46:39一行のデータを保持する線形リスト作るという手間の掛かる方法が思いついた
0490デフォルトの名無しさん
2005/08/30(火) 22:00:49>>488
出来ました。ヒント有難う御座いました。
tempファイルを削除するとか処理が大変なのでtempの変数を作ってやりました。
ファイルが重いほど保存が遅くなりそうです。
0491デフォルトの名無しさん
2005/08/31(水) 00:49:45データの入力と処理に関する質問です。
2 3 4 5
1 5 2 7
3 9 4 6
・
・
・
の様な各列がスペースで区切られた約40000行のデータファイルがあります。
(*ファイルの1列、2列目はスペースがある)
このデータファイルを読み込んで、各列ごとのヒストグラムを出力(printfで)したいのです。
どのようなCプログラムを作ればいいのでしょうか?
初心者なので具体例を提示していただければありがたいのですがm(__)m
0492デフォルトの名無しさん
2005/08/31(水) 00:51:09先頭4バイトが1レコードのデータ長。5バイト目からはデータがデータ長分データが存在する。
さらにレコードを識別するためにデータの後に2バイトのPAD(00 00)が付与される。以下にサンプル
データを示す。
00 0A 01 02 03 04 05 06 07 08 09 10 00 00
00 0B ....
特定のバイト列 0xFABACDEEFAがレコードに存在するか調べるにはどのようにすればいいのか
実際にプログラムを作成し考えてみよ。
これってどうすれば高速に実現できますか?
0493デフォルトの名無しさん
2005/08/31(水) 00:51:460494デフォルトの名無しさん
2005/08/31(水) 00:53:31先ずは動くものを作り、その振る舞いを見ながらリファクタリングを行なう。
0495デフォルトの名無しさん
2005/08/31(水) 00:56:02ヒストグラムをグラフィックでということなら、グラフィックはCには標準で
用意されていないので、答えようがない。もっと具体的に、このような環境で
動けばよい、と指定すればレスが付くだろうけど。
0496491
2005/08/31(水) 01:03:33レスありがとうございます。
ヒストグラムはGNUPLOTで描写します。
目標としてはデータを入力させヒストグラムにするデータファイルを
1 34
2 45
3 67
4 100
5 45
6 22
・ ・
・ ・
・ ・
の様な形で出力したいのです。
環境は
[3] 環境
[3.1] OS: Linux
[3.2] gcc(Verは不明)
[3.3] 言語: C
0497デフォルトの名無しさん
2005/08/31(水) 01:06:14向こうにも質問が出てるから、こっちでいいから纏めて回答してくれ。
データは4列固定か?
ヒストグラムは4本作るって事でいいのか?
「実際のグラフはGnuPlotに描かせるからそのためのデータを出力する」ということでいいのか?
0498デフォルトの名無しさん
2005/08/31(水) 01:10:0834
45
67
100って各列の数字を足した数?
0499491
2005/08/31(水) 01:13:5534.17847854の小数点8桁の値です。
データは4列固定です。
ヒストグラムも4本でオッケーです。
>「実際のグラフはGnuPlotに描かせるからそのためのデータを出力する」ということでいいのか?
はい、この通りです!
拙い説明なのに、ここまで理解して頂いてありがたいです。。。
0501デフォルトの名無しさん
2005/08/31(水) 01:25:38こんな感じ?
#include<stdio.h>
main(){
int i,temp[4],num[100];char str[64];
FILE *fp;
for(i=0;i<100;i++)num[i]=0;
if((fp=fopen("ファイル名","r"))==NULL){return 0;}
while(fgets(str,64,fp)!=NULL){
sscanf(str,"%d %d %d %d",&temp[0],&temp[1],&temp[2],&temp[3]);
num[temp[0]-1]++;num[temp[1]-1]++;num[temp[2]-1]++;num[temp[3]-1]++;
}
fclose(fp);
for(i=0;i<100;i++){
printf("%d %d\n",i+1,num[i]);
}
return 0;
}
0502デフォルトの名無しさん
2005/08/31(水) 01:32:280503491
2005/08/31(水) 01:33:29大変ありがとうございますm(_ _)m
大学でしかデータ処理が出来ないので、結果がすぐに出せないのが残念ですが
明日中に必ず報告します。
0504デフォルトの名無しさん
2005/08/31(水) 01:33:37どっか変?
0505491
2005/08/31(水) 01:35:03何書いてあるかサッパリですね(^^;)
0506デフォルトの名無しさん
2005/08/31(水) 01:36:200507デフォルトの名無しさん
2005/08/31(水) 01:37:050508デフォルトの名無しさん
2005/08/31(水) 02:51:56使用の遣り取りしてたの読んでないの?
#いや、読んでいてその程度しか理解できてないなら私の言うべきことは何もないから。
0509デフォルトの名無しさん
2005/08/31(水) 02:56:150510デフォルトの名無しさん
2005/08/31(水) 03:00:250511デフォルトの名無しさん
2005/08/31(水) 04:03:29力任せの方法とかKMP法とかBM法とか
文字列のサーチあたりでぐぐれ。
俺ならソース持ってきて、整形しなおして提出する。
0512デフォルトの名無しさん
2005/08/31(水) 20:23:37回答が出てもレスしないってのは失礼だよな。
近いところだと>>453とか>>469とか。
まあ、こっちも適当にやってるわけだが。
やっぱり次からは回答に何かしら小細工しておいた方がいいかな?
0513デフォルトの名無しさん
2005/08/31(水) 20:26:200514デフォルトの名無しさん
2005/08/31(水) 20:35:410515デフォルトの名無しさん
2005/08/31(水) 20:42:240516デフォルトの名無しさん
2005/08/31(水) 20:49:170517453
2005/08/31(水) 22:48:13ありがとうございました。
なお、決して投げっぱなしにしているわけではないので、悪しからず。
0518デフォルトの名無しさん
2005/08/31(水) 22:58:16前にRGBαのヒストグラムを取るプログラムを作ったよな?
まずはアレを修正して、自分なりに作ったものを上げてくれ。
まともに動かなくてもいいから。
そしたら、そのソースを元にこっちで修正するなり、
ヒントを出したりするからさ。
0519デフォルトの名無しさん
2005/08/31(水) 23:07:150520デフォルトの名無しさん
2005/09/01(木) 00:58:03・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
0521デフォルトの名無しさん
2005/09/01(木) 08:54:46自分でやってみたうえでそのソースをアップしようと思います
すいませんでした
0522デフォルトの名無しさん
2005/09/01(木) 09:01:380523デフォルトの名無しさん
2005/09/01(木) 09:04:030524デフォルトの名無しさん
2005/09/01(木) 10:25:550525デフォルトの名無しさん
2005/09/01(木) 10:28:09毎日自分の書いたプログラム見て吐いてるのが
大変だな
0526デフォルトの名無しさん
2005/09/01(木) 10:39:03寝ぼけてデバッグしたのなんか、そうだ。
0527デフォルトの名無しさん
2005/09/01(木) 10:51:240528デフォルトの名無しさん
2005/09/01(木) 22:04:57ノードの削除がよくわからず死んでます。
・・・ノードに削除フラグつけるだけじゃダメでしょーか。
0529デフォルトの名無しさん
2005/09/01(木) 22:21:30>>1
0530デフォルトの名無しさん
2005/09/01(木) 22:34:16[2] 問題文(含コード&リンク):
赤黒木を実装せよ
[3] 環境
[3.1] OS: SunOS
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2005年09月08日08:00
[5] その他の制限:
0531デフォルトの名無しさん
2005/09/01(木) 22:37:24せめて自分がどこまでやって、どこのコーディングで詰まってるのかぐらい
ソースだしたらどうよ?
0532デフォルトの名無しさん
2005/09/01(木) 22:42:32ソース出したほうがいいのしょうか?
0533デフォルトの名無しさん
2005/09/02(金) 00:15:47[問題]
木星の衛星
Io 5 1.1763 //衛星名、光度、周期
Europe 6 3.5512 //衛星名、光度、周期
Ganymede 5 7.1454 //衛星名、光度、周期
Callisto 6 16.6890 //衛星名、光度、周期
を構造体にいれ、周期をキーにソートして下さい。
また、データのスワップに別のインデックスを使用して
ソートはインデックスを使って行います。
0534デフォルトの名無しさん
2005/09/02(金) 00:24:23char *name ;
int luminosity;
double cycle;
} jupiter ;
int main (void)
{
static jupiter[] = {
{"Io", 5, 1.1763},
{"Europe", 6 ,3.5512},
{"Ganymede", 5 ,7.1454},
{"Callisto", 6 ,16.890}
} ;
jupiter dumy ;
int i , j ;
i = j = 0 ;
for(i = 0; i < 4 ; ++i){
double max = jupiter[i].cycle;
for(j = i + 1 ; j < 4 ; ++j){
if(max < jupiter[j]){
max = jupiter[j] ;
}
}
dumy = jupiter[i];
jupiter[i] = jupiter[j];
jupiter[j] = dumy ;
}
0535デフォルトの名無しさん
2005/09/02(金) 00:26:58別に構造体の配列作って、周期を基準にして大小返す関数作って
qsort()使えば済む話の気がしないでもないが
0536534
2005/09/02(金) 00:29:08return 0;
}
void display(sturct jupiter)
{
int i;
for(i = 0; i < 4; ++i){
printf("%10s %3d %8.4f\n" );
}
}
0537デフォルトの名無しさん
2005/09/02(金) 00:34:16534は普通に周期をキーにバブルソートをしたものです。
これに構造体indexを使い、index内の添え字をソートして
その指す値がsatelliteになるようです。
index[1] の指す値がsatellite[0]であるといった内容です。
0538デフォルトの名無しさん
2005/09/02(金) 00:40:450539デフォルトの名無しさん
2005/09/02(金) 00:43:34ごっちゃになってるような印象を受ける
0540デフォルトの名無しさん
2005/09/02(金) 00:47:45>>539
確かにごっちゃになっているかもしれません。
良かったらご教授ください。
0541デフォルトの名無しさん
2005/09/02(金) 00:49:34satellite が型名で jupiter が変数名だと思って書いています。
main関数内でjupiterを宣言した時にメモリに領域が確保されていると
思っているのですが、間違っていますか?
0542デフォルトの名無しさん
2005/09/02(金) 00:58:32foo.c: 関数 `main' 内:
foo.c:11: error: 文法エラー before '[' token
foo.c: トップレベル:
foo.c:19: 警告: type defaults to `int' in declaration of `i'
foo.c:19: error: 初期化子の要素が定数ではありません
foo.c:19: 警告: data definition has no type or storage class
foo.c:21: error: 文法エラー before "for"
foo.c:28: 警告: type defaults to `int' in declaration of `dumy'
foo.c:28: error: conflicting types for `dumy'
foo.c:17: error: previous declaration of `dumy'
foo.c:28: error: 文法エラー before "jupiter"
foo.c:34: 警告: type defaults to `int' in declaration of `display'
foo.c:34: 警告: data definition has no type or storage class
foo.c:36: error: 文法エラー before "return"
foo.c:39: error: 文法エラー before "jupiter"
foo.c:40: error: conflicting types for `display'
foo.c:34: error: previous declaration of `display'
foo.c: 関数 `display' 内:
foo.c:43: 警告: フォーマットへの引数が少なすぎます
0543デフォルトの名無しさん
2005/09/02(金) 01:02:15まだ始めたばかりで悩んでいます。
VC++でビルドしたら実行出来たので、実行できると思っていました。
0544デフォルトの名無しさん
2005/09/02(金) 01:02:560545デフォルトの名無しさん
2005/09/02(金) 01:05:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/894.c
0546デフォルトの名無しさん
2005/09/02(金) 01:07:14じゃあその実行できたコードをそのまま晒せ
0547デフォルトの名無しさん
2005/09/02(金) 01:22:32gcc -ansiで確認済み
#include <stdio.h>
#define MAXNAME 40
struct satellite {
char name[MAXNAME];
int brightness;
double cycle;
};
int main(void)
{
struct satellite satellite[] = {
{"Europe", 6, 3.5512},
{"Callisto", 6, 16.6890},
{"Ganymede", 5, 7.1454},
{"Io", 5, 1.1763},
}, *index[4], *temp;
int i, j;
/* Initialize */
for (i=0;i<4;i++) {
index[i] = &satellite[i];
}
0548547(続き)
2005/09/02(金) 01:23:23for (i=3;i>0;i--) {
for (j=0;j<i;j++) {
if (index[j]->cycle > index[j+1]->cycle) {
temp = index[j];
index[j] = index[j+1];
index[j+1] = temp;
}
}
}
/* print */
printf("%10s%5s%10s\n", "名前", "光度", "周期");
for (i=0;i<4;i++) {
printf("%10s%5d%10.4f\n", index[i]->name, index[i]->brightness, index[i]->cycle);
}
return 0;
}
書いててなんでこんな無駄なことしてるんだろうと思った
0549デフォルトの名無しさん
2005/09/02(金) 01:26:07つか、データがこんなに少なくて固定なら
あらかじめソートしとけばいいじゃん
0550デフォルトの名無しさん
2005/09/02(金) 01:30:53まぁそう怒らず、元のデータみてみれ
綺麗にソートされてるから('A`)
ってか本当に何がしたいんだ?
0551デフォルトの名無しさん
2005/09/02(金) 01:43:34ですが、結果がどうもおかしくなります。(0で構成されるボクセルがが多すぎる)
添削お願いいたします。
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/895.txt
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2005年8月31日17:00まで] 過ぎても提出できます。
[5] その他の制限:
0552デフォルトの名無しさん
2005/09/02(金) 01:49:550553デフォルトの名無しさん
2005/09/02(金) 02:03:09添削好きな>531の出番ですよ。
0554デフォルトの名無しさん
2005/09/02(金) 03:36:15→http://www9.plala.or.jp/sgwr-t/c/sec16.html
static jupiter[] = {
→typedefで作った型名を配列定義?
typedef struct {
} SATELITE;
としたら?
i = j = 0 ;
→邪魔。削除。
for(i = 0; i < 4 ; ++i){
→i++ で覚えとけ
double max = jupiter[i].cycle;
→どこで変数定義してんの?そもそもバブルソートにMAXなんて関係ないし。
0555デフォルトの名無しさん
2005/09/02(金) 03:44:26俺は理解できんかった。
0556デフォルトの名無しさん
2005/09/02(金) 03:55:30C++行ったら++iって書かんといかんようになるんだから別にいいじゃん。
0557デフォルトの名無しさん
2005/09/02(金) 04:07:574 C++ でのプログラム
http://jun.artcompsci.org/~makino/kougi/keisan_tenmongakuII/note3/node4.html
14−5.演算子の優先順位と結合規則
http://www9.plala.or.jp/sgwr-t/c/sec14.html#s14-5
0558デフォルトの名無しさん
2005/09/02(金) 04:13:29素朴な疑問なんだが、>556に対して>557でなにを指摘したいんだ?
C++では何故前置にしなくてはいけないか理解できないなら黙ってた方が可愛げがあるってもんだよ。
0559デフォルトの名無しさん
2005/09/02(金) 04:19:04前置でも後置でも良い場合は前置にする習慣があります。
という答えなら何点もらえますか?
0560デフォルトの名無しさん
2005/09/02(金) 04:37:24不定と未定義
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
C言語の自習・学習
http://www.brs.kyushu-u.ac.jp/~hamada/CLang/CLangtitle.htm
0561554
2005/09/02(金) 05:29:40カウンタがいっぱいでよく分かりませんでした。
ところどころにコメント入れてもらえれば読みやすいと思います。
自作関数呼び出し、ループとコメントを抽出してフローチャートになるくらいに。
>>558
C++で後置きのサンプルです。
なぜとか愚問です。シビアな判断が必要なものは避ければいいんです。
0562デフォルトの名無しさん
2005/09/02(金) 05:52:430563デフォルトの名無しさん
2005/09/02(金) 05:55:10どちらでもいい場合には前置を使う癖をつけておいてもいいと思うけどね。
0564デフォルトの名無しさん
2005/09/02(金) 06:34:240565デフォルトの名無しさん
2005/09/02(金) 11:39:150566デフォルトの名無しさん
2005/09/02(金) 13:26:56私はどこを直せばいいのでしょうか?
よろしくお願いいたします
0567デフォルトの名無しさん
2005/09/02(金) 16:35:29顔
0568デフォルトの名無しさん
2005/09/02(金) 16:53:020569デフォルトの名無しさん
2005/09/02(金) 17:01:19ベクトル量子化なんてやったことないけど、
とりあえずソース眺めてる。
以下、コーディング上修正すべき点
・ファイル開いたらちゃんと閉じろ
・メモリ確保したらちゃんと解放しろ
・使わない変数や処理を入れるな。
・main関数長すぎ。もうちょっと機能別に分割しろ。
・ちゃんとコメントつけろ。何やってるのかわからん
暇があったら添削したソース上げるわ。
0570デフォルトの名無しさん
2005/09/02(金) 17:14:40機能ごとの関数分けはまぁいいとして(できればしてくれ)、
せめてコメント付けてくれんか
めっさ読み辛い
0571569
2005/09/02(金) 17:25:41ありえないインデックス値が入ってるような・・・
生成されたコードブックの検証はしたのだろうか
とりあえず、以下について言葉で説明してくれ
・ソース中の配列indexの意味と使われ方
・コードブックに無いベクトルに対しての処理 (ソース中で何をやってるか)
なんとなく、この辺が癌になってる気がする
0572デフォルトの名無しさん
2005/09/02(金) 18:10:11>>570
すみません。
かなり急いでいたため、こうなってしまいました。
>>571
indexについてですが、コードブック中のRGBをあらわしています
コードブックに無いベクトルは一番近い値をコードブックから探してきています。
>生成されたコードブックの検証はしたのだろうか
gcc ----.c
./a.out 処理したいファイル名 コードブック名
でコードブックが現れます。
確認したところおそらくはコードブックは問題ないと思います。
0573デフォルトの名無しさん
2005/09/02(金) 18:15:01読み込まれるRGBをR,G,B別々に考えて、コードブック中のRGBとの差をそれぞれ求めて
その値が一番小さなコードブック中のベクトルの番号で置き換えています。
0574デフォルトの名無しさん
2005/09/02(金) 18:23:57Rに255がはいっちゃってて
直してるつもりでも直らなかったです
0575デフォルトの名無しさん
2005/09/02(金) 18:48:50getval()はαBGRの順で読んでるみたいなので
その順序を直せばOK
0576デフォルトの名無しさん
2005/09/02(金) 19:03:20ありがとうございます
やってみましたがだめでした
ファイルの中身を十進法で見てみると
A B C 255 となっていて 255を一番前にもっていきたくって (255 A B C)
シフトなどを使ってみたのですが自分ではできませんでした。
0577554
2005/09/02(金) 20:38:02ループに影響すると思ってたんだよ。
けど、>>556 の
>++iって書かんといかん
ていう間違いもだめだろ。
あと、>>551 のソースの問題点分かったよ。
そもそもみんな正しい処理を分かってないから、
それぞれどういう目的でそういうコーディングしてるか書かないと、
間違いだと言う判断ができない。
0578デフォルトの名無しさん
2005/09/02(金) 20:49:39RGBαであらわされた画像データを読み込みます
次にRGBαをひとつのベクトルとします。
で、出現頻度の高いRGBαをコードブックに書き出し、出現頻度の高い順に256個
選びました。
次に符号化するために、画像データを読みこんで もし同じ値がコードブックにあれば
その番号をふってやります。なかったら一番近いベクトルを選びます
選び方として それぞれのR、G,Bを引いてから足し合わせその数の一番少ないベクトルが
一番近いベクトルとみなされ、その番号をふってやります
複合化はその逆で、番号を見て、番号のベクトルをふってやります
αは0か255だったので最初省きました。RGBが値を持てば255それ以外は0です。
メモリの関係から省きました。
ですので複合化するときにαを足し加えたつもりです。
で、リトルエディアンだから逆に処理したりしたつもりだったのですが
頭がこんがらがってきて、結果を見てみるとαの位置が逆になったりしていました
わかりづらいとはおもいますがよろしくお願いいたします
0579デフォルトの名無しさん
2005/09/02(金) 20:59:58質問とは関係なくて悪いんだけど、せっかくベクトルで処理してるなら
内積を使って一番近いベクトルを探した方がいいんじゃまいか?
0580デフォルトの名無しさん
2005/09/02(金) 21:02:10最終的な出力データの形式は?
1)入力と同じRGBα形式:32bit
2)コードブック(RGBα:32bit)*256+インデックス値(8bit*画素数)
※コードブックサイズが256のとき
3)その他
0581デフォルトの名無しさん
2005/09/02(金) 21:12:51私のプログラムのやり方があっているかはわかりません。
そっちのほうがいいのかもよくわからないのです。
>>580
最終的な出力データ形式は
本来ならば符号化したデータ (256のコードブックを使っているのならば読み込ませたデータRGBα
の1/4)と、複合化したデータ(コードブックを参照して、複合化するRGBαで)と、コードブックを出力したいのですが
私の作ったプログラムですと符号化したデータはでていません。複合化したデータは出したつもりです。
1)は複合化したものと考えられますよね?
2)は符号化したものとコードブックということですよね?
0582デフォルトの名無しさん
2005/09/02(金) 21:16:190583580
2005/09/02(金) 21:28:47ちゃんと解釈してくれたようなので安心
最終的には量子化圧縮したものを出したいけど
今はまだやってないってことだね。
>実際処理させたいファイルをアップしたほうがいいでしょうか
結果を照合できるからアップした方がいいと思う
0584デフォルトの名無しさん
2005/09/02(金) 21:43:02ありがとうございます
最終的には上に上げた符号化、複合化、コードブックをだしたいのですが
最悪でも複合化したものを出してソフトを使って表示させたいです。
自分のプログラムで表示させると明らかにおかしい画像になりました。
897にあげておきました
よろしくおねがいいたします
0585デフォルトの名無しさん
2005/09/02(金) 22:58:29元データにやたら0x00が含まれてる件について
0586デフォルトの名無しさん
2005/09/02(金) 23:06:48それについては正しいです
0ボクセルが多いのが特徴のデータですので
0587デフォルトの名無しさん
2005/09/03(土) 00:10:53・プログラムの起動法(引数の説明やね)
・プログラムが読み書きするファイルの説明
どういうファイル形式かわからないので、
・元データの形式
・コードブック、符号データの形式(複数あるなら、それぞれ)
説明いれとくと、元データの形式だけど、4バイトYUVだったら、マイナスの表現を2の補数でしてるか、
下駄を履かせて最小値を0にしてるか。(これはユークリッド距離を求めるのに必要)
3バイトYUVだったらバイトの並びと、ビットの配置が必要になる。
入力データがRGBでYUVに変換するんだったら、変換式が必要ね。
コードブックは予想がつくんだけど、念のため。
符号データに関してはバイトをまたがるビット列になるので、その配置がわからんとどうしようもない。
0588デフォルトの名無しさん
2005/09/03(土) 00:50:13プログラムの起動方はどうのような形でもかまいません。
元データの形式はαRGBなのですが、私の環境ではBGRαそれぞれ1バイトで
計4バイトです。
YUVにしてベクトル量子化もしたいのですがまずはRGBでやりたいとおもっております
0589デフォルトの名無しさん
2005/09/03(土) 00:52:020590デフォルトの名無しさん
2005/09/03(土) 00:54:32int main(void)
{
int i;
for(i =0; i < 10; i++){
printf("**********\n" + i)
}
}
このiがどういう作用をしているか教えてください。
0591デフォルトの名無しさん
2005/09/03(土) 00:56:28すみません。わかりました。
できれば符号化と複合化のプログラムを分けてもらいたいです
起動方法は、
./a.out ベクトル量子化したいファイル そのファイルのコードブック 符号化されたデータ
./a.out 符号化されたデータ コードブック 複合化されたデータ
でお願いいたします。
複合化と符号化わけるのがだめというのであれば
./a.out ベクトル量子化したいファイル そのファイルのコードブック 符号化データ 複合化データ
でお願いいたします
0592デフォルトの名無しさん
2005/09/03(土) 01:03:36#include <stdio.h>
int main(void)
{
static char a[10] = {'*','*','*','*','*','*','*','*','*','\n'};
int i;
for(i =0; i < 10; i++)
{
printf(a + i) ;
}
return 0;
}
これと等価だと思えばいい。
0593デフォルトの名無しさん
2005/09/03(土) 01:08:19RGBだけ対象で、コードの種類は256個限定?>591
0594デフォルトの名無しさん
2005/09/03(土) 01:09:350595569
2005/09/03(土) 01:13:31添削するのめんどいので組みなおしてみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/898.txt
とりあえず動作確認はしたが、結果が正しいかどうかまではわからん。
少なくとも、コードブックはちゃんと作れているみたい。
以下補足
・ヒストグラムを構造体のリンクリスト(単方向)にすることでサイズ軽減&高速化
・アルファチャンネルの補正はしていない
・RGBαのバイトオーダーはenumで指定
・ユークリッド距離の計算は適当
・使い方
% [実行ファイル名] [画像ファイル]
出力されるファイル
- histgram.txt: ヒストグラム
- codebook.raw: コードブック
- encode.raw: 符号化データ
- decoderaw: 復号化データ
疲れたのでもう寝ます。あとは任せたノシ
0596デフォルトの名無しさん
2005/09/03(土) 01:14:44RGBだけ対象で問題ありませんが、複合化するときにRGBがすべて0ならαも0
そうでなれけば255をいれるようにしなくてはなりません。
コードの種類は256限定ではなく512、1024もつくれるようにしたいです。
0597デフォルトの名無しさん
2005/09/03(土) 01:16:15ありがとうございます
確認してみます
本当にありがとうございます
0598デフォルトの名無しさん
2005/09/03(土) 01:16:38直す気力が無いのでこのまま寝ます。
0599デフォルトの名無しさん
2005/09/03(土) 01:20:27/tmp/cc666b8D.o: In function `get_color_diff':
/tmp/cc666b8D.o(.text+0x408): undefined reference to
`sqrt'
collect2: ld returned 1 exit status
というメッセージがでてきました
どうしたらよいでしょうか?
0600デフォルトの名無しさん
2005/09/03(土) 01:20:30それだと落ちますが。つーか、スレ違いなんだからレスすんなと。
0602デフォルトの名無しさん
2005/09/03(土) 01:23:48*じゃなくて文字でやってみると効果がわかりやすいかもしれません。
文字じゃなくても違う配列に格納するものを変えてみるとか。
0603デフォルトの名無しさん
2005/09/03(土) 01:24:01ビットの並びを定義しましょう。
0604デフォルトの名無しさん
2005/09/03(土) 01:24:09すいません
数学関数?ですね ありがとうございます
大変助かります
0605デフォルトの名無しさん
2005/09/03(土) 01:30:52ありがとうございます。
ツールを使って画像を見ましたが、私のプログラムに比べて断然よくなておりました
少し木になったのですがエンコードサイズがデコードサイズと同じというのは圧縮という面では
少し違ってる?のかなと感じました。コードブックサイズは256ですので本来ならば
ちょうど1/4になると思いました。
本当にありがとうございます
匿名掲示板ですが本当にありがとうございます
連絡先聞いて御礼したいくらいです。ありがとうございます
0606デフォルトの名無しさん
2005/09/03(土) 01:31:47ビットの並びの定義というのはどういったものなんでしょうか?
無知ですみません。
0607デフォルトの名無しさん
2005/09/03(土) 01:49:51コード列(10進数) 1 3 7 15 31 63 127 255 511
0608デフォルトの名無しさん
2005/09/03(土) 01:57:35>605で終わってるのだから。
0609デフォルトの名無しさん
2005/09/03(土) 02:12:54複合データファイルはバイナリでRGBαそれぞれ一バイトのバイト列になってほしいです
これで答えになっているでしょうか?
0610デフォルトの名無しさん
2005/09/03(土) 02:28:04#define CODEBOOK_SIZE 256
の256を1024などにすればいいとおもうのですが
これを例えば画像の存在しうるベクトル数と同じ数(10000など)にすればまったく同じ画像に
再生されるはずなのですが、明らかに同じ画像に再生されませんでした。
同じベクトルがあればそのインデックスを振り当てるというふうにプログラム内部でなっているのに
色々してもらって本当に感謝しています。
もしよかったらどこを変えたらいいのか教えていただけないでしょうか
0611595
2005/09/03(土) 02:40:27いや、連絡先は勘弁してくれ・・・
コードブックサイズは256*4バイト。
エンコードサイズは画素数*1バイトで、データ部だけ見れば1/4。
データ中にコードブックを持たせると
その分だけサイズが大きくなるが、画像データが大きくなればなるほど
データ中のコードブックサイズの比率が小さくなる。
コードブックをシステム標準パレットみたく、外部固定にできれば
データにコードブックを付ける必要がなくなり、完全に1/4になるね
0612デフォルトの名無しさん
2005/09/03(土) 02:45:17なるほど。ありがとうございます。
610について少々お知恵を拝借させていただけませんか。
0613デフォルトの名無しさん
2005/09/03(土) 03:03:21>>595 のプログラムを512,1024にも対応するだけで終わり?
0614デフォルトの名無しさん
2005/09/03(土) 03:13:30ありがとうございます。
595さんのを512、1024にも対応させたいです。できれば512などのサイズは
あとで簡単に変えられるようにもしできればしていただきたいです。
あと最初にアップした問題にも書いてあるように、
RGBαをYUVα(それぞれ1バイト)にしてベクトル量子化を施すというのと
RGBαをYUVα(Yを8ビット、U,Vを2ビットずつ、αを4ビット、計2バイト)にして
ベクトル量子化をするのをしたいです。
YUVαそれぞれ1バイトできるとはおもうのですが後者(計2バイト)のは少し難しそうです。
これについてもコードブックサイズを256、512、1024などを作りたいです。
長々とすみません
0615595
2005/09/03(土) 03:33:28あー・・・
えっと、今のプログラムだとコードブックのインデックスの範囲が
8bit(0〜255)固定になってるので、define以外にそこも直さないとダメ。
ソースで言うと変数enc_data、enc_data_ptr、あとはfwrite()の第二引数。
fwrite()は各要素ごとに出力するようにしないと対応できないか。
修正方針としては
・ソース内部ではenc_dataの要素を16 or 32bitにする(それを参照するポインタの型も)。
・コマンドライン引数でコードブックサイズを取得し、cb_sizeに格納
文字列の判別は"256"、"512"、"1024"を直接比較でいいんじゃないかと。
・データ出力時に、コードブックサイズに応じて、各インデックス値を
8bit/16bitのいずれかで出力
こんなとこかな。
漏れがあったら誰か指摘よろ。
あと、俺のはエンコード/デコードでプログラム分かれてないんだけど、いいのかな?
>>595をベースにするのは構わんけど、ちゃんと中身を理解してな。
0616デフォルトの名無しさん
2005/09/03(土) 03:37:21ありがとうございます
正直先輩のソースは難しくて理解するのは大変な時間がかかりそうです
提出期限がもう終わってますがなんとかしたいとおもいます
ありがとうございます
0617デフォルトの名無しさん
2005/09/03(土) 03:47:28>あと、俺のはエンコード/デコードでプログラム分かれてないんだけど、いいのかな?
欲を言うと分かれているほうがいいです
0618デフォルトの名無しさん
2005/09/03(土) 03:53:13新しく作り直してください。
細かいことを聴かれても答えません。アナタが作ってください。
気に入らなかったらまた作ってもらいます。
0619595
2005/09/03(土) 04:03:14え、ちょ、おまwwww
って、俺はやらんぞ。>>617か他の暇人よろ。
あと、
つ [後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です]
作った後の仕様変更は結構コストかかるのよ。バグの温床にもなるし。
だから>>613みたいに事前に確認を取るわけ。
0620デフォルトの名無しさん
2005/09/03(土) 04:12:04400行のソースだけれど・・・元のプログラムの理解と修正コード作成で何時間ぐらいかかった?
0621595
2005/09/03(土) 04:36:34乙あり。
(>>569の1時間くらい前から>>595までの時間)−休憩等 = 7時間くらい
以下内訳
・解読 : 2時間
・添削→マンドクサ : 1時間
・組みなおし : 4時間
解読とコード作成はほぼ同時進行でやってたから正確じゃないかも。
0622デフォルトの名無しさん
2005/09/03(土) 04:56:47でも、やっぱ時間かかるよな。ホント、おつかれ。
0623デフォルトの名無しさん
2005/09/03(土) 09:36:28本当にありがとうございました。
がんばってみます
0624デフォルトの名無しさん
2005/09/03(土) 15:17:15ありがとうございまいた。
0625デフォルトの名無しさん
2005/09/03(土) 16:40:09上位256ベクトルを見て〜 といっていましたが一番多いベクトルは0です。
ですが今回は0を除いて上位256にしてみたいのですがどうしたらいいのでしょうか?
付け加えるようですみません。
もしくは下位256にする方法でもかまいません
どうかよろしくお願いいたします
0626デフォルトの名無しさん
2005/09/03(土) 16:55:05申し訳ございません
0627デフォルトの名無しさん
2005/09/03(土) 17:23:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/899.c
0628デフォルトの名無しさん
2005/09/03(土) 17:31:22ライブラリの指定は最後にしないと駄目だよ。
0629デフォルトの名無しさん
2005/09/03(土) 19:54:23[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/900.txt
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2005年8月31日17:00まで] 過ぎても提出できます。
[5] その他の制限: 何度も申し訳ありません。ベクトル量子化を依頼したものです
0630デフォルトの名無しさん
2005/09/03(土) 20:42:44符号化データを
[位置][RGBα][位置][RGBα]・・・としたいのはわかったけど
それだと0がほとんど無い画像を符号化したときに
サイズが2倍になるわけだが、>>629はそこまで考えてる?
あと、データの持ち方として、
struct ENCODE_DATA{
unsigned int index;
unsigned int voxel;
}
みたいな構造体で配列を作って、この構造体のサイズを使って
処理させたほうがすっきりしてわかりやすいと思う。
量子化するときは、構造体のvoxelメンバにアクセスさせるようにすれば、
わざわざデータを分割しなくてもいいんじゃないかな
と。思うわけだが、まあ参考程度に。今から直すのめんどいだろうし。
0631デフォルトの名無しさん
2005/09/03(土) 20:56:39[位置][RGBα][位置][RGBα]・・・
わかっていただいてありがとうございます
このような例を入れたほうがわかりやすいですね。参考になります
で、これは0が多いものい対して行っております。
0がほとんどなければサイズが二倍になるのはわかっております
今、インデックス情報とRGBαを合成させようとおもっておりますがどうもセグメンテーション違反が
でて苦戦しております
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/901.txt
これは ./a.out インデックス情報のみのでーた ボクセルのみのでーた 合体させたデータ
にしているつもりです
どうしてもわかりません・
0632デフォルトの名無しさん
2005/09/03(土) 21:10:55アウトバッファのメモリ確保の値を倍することで解決いたしました
ですが、インデックス情報とボクセルを合体させたものを複合化したいのですが
どうしても複合化できません。サイズが逆に小さくなってしまう・・・
0633デフォルトの名無しさん
2005/09/03(土) 21:42:24595さんのソースで実行させてみると近いベクトルをとってきてほしいのに
明らかに違うものをとってきてしまうという上体になっています
ユークリッド距離のところは適当とおっしゃられていたのでそこらへんが
原因かなと考えておりますが、
0634デフォルトの名無しさん
2005/09/03(土) 22:15:37>>595のソース自体は問題ないような気がする。
0635デフォルトの名無しさん
2005/09/03(土) 22:22:53無い場合は一番近いベクトルを選ぶところを、一番近いものではなく
コードブックで一番上にあるベクトルにおきかえているようなきがします
(画像ツールで見た結果)
624でいったのは、コードブックサイズを増やせば完全に復元されるといういみで
例えばコードブックサイズが256なら一致する256ボクセル以外は0であらわされていました。
(0がコードブックで一番多い代表ベクトル)
なのでおそらくコードブックの中のベクトルで一致しなかったら
コードブックの一番上のベクトルに置き換えられているようです
どうやって直せばいいのでしょうか・・・やってはいるんですがどうも595さんのが
私には難しすぎて。・・・
0636デフォルトの名無しさん
2005/09/03(土) 23:45:35情報系の学科?
これ、宿題じゃなくて、ゼミの課題?
0637デフォルトの名無しさん
2005/09/04(日) 00:13:39関数の中に関数って書けるんですね。勉強になります。
0638デフォルトの名無しさん
2005/09/04(日) 00:18:38関数内での関数定義は規格に無い。一部の処理系の拡張機能。
そしてgccのいくつかのバージョンはこの拡張にバグがある。
基本的には使うな。
0639デフォルトの名無しさん
2005/09/04(日) 00:29:56位置の値が取る範囲は何?
0640デフォルトの名無しさん
2005/09/04(日) 01:11:26・位置がとりうる範囲を確認する
・位置を表すのに必要なバイト数を求める(=nバイトとする)
・1バイト出力する捨てプログラムを書く
・nバイト出力する捨てプログラムを書く
・nバイトとボクセルだかベクトル量子化データだかを組で出力するプログラムを書く
・1バイト入力する捨てプログラムを書く
・nバイト入力する捨てプログラムを書く
・nバイトとボクセルだかベクトル量子化データだかを組で入力するプログラムを書く
0641595 ◆AOMdbQiVo.
2005/09/04(日) 02:50:48距離の比較のところにバグがあったorz
595.c 344行目
----------------
/* 一致するノードが見つからない場合、最も近いものを探す */
if(!found){
double min_dist = 0;
int min_index = 0;
/*ユークリッド距離算出*/
min_dist = get_color_diff(color, codebook[0]);
/*** ↓がi=iになってて、ループの中に入ってなかった。ごめん ***/
for(i = 1; i< cb_size; i++){
/*ユークリッド距離算出*/
double tmp_dist = get_color_diff(color, codebook[i]);
if(min_dist > tmp_dist){/* 最短距離 */
min_dist = tmp_dist;
min_index = i;
}
}
*enc_data_ptr = (UINT8)min_index;
enc_data_ptr++;
}
----------------
0642デフォルトの名無しさん
2005/09/04(日) 05:03:00[2] 問題文(含コード&リンク):ログファイルに現在の日付、時間を出力したい。
現在の年・月・日・時・分・秒・ミリ秒を求め、ファイルに出力せよ
[3] 環境
[3.1] OS: HP-UX
[3.2] コンパイラ名とバージョン: gcc、バージョンはちょっと分からないです
[3.3] 言語: C
[4] 期限: 9月5日12:00まで
[5] その他の制限: 特になしです
2005/09/04/05:01:30:40 yyyy/mm/dd/hh:mm:ss:msms (ms:ミリ秒)
上記のようなフォーマットで出力したいとおもっています。
gettimeofday()関数をつかってミリ秒の取得はできたのですが
%dや%fなどの書式指定子で表示できないのです。
どうにかして表示したいので、知恵をお貸しください。
0643デフォルトの名無しさん
2005/09/04(日) 05:19:080644デフォルトの名無しさん
2005/09/04(日) 05:27:29ミリ秒で取得するから時、分、秒、ミリ秒は計算するんでしょ?
あと、日付と時間はそれぞれ取得すると思うけど。
0645デフォルトの名無しさん
2005/09/04(日) 05:47:160646デフォルトの名無しさん
2005/09/04(日) 05:54:590647デフォルトの名無しさん
2005/09/04(日) 06:07:02[2] 問題文(含コード&リンク):
問題1
memsetのような関数を高速化する方法のひとつに、バイト単位ではな
くワード単位で書き込みを実行する手法がある。このほうがハードウェ
アに合うだろうし、ループのオーバーヘッドも1/4ないし1/8に減少
する可能性がある。これの問題点は、ターゲットがワード境界上にな
い場合や長さがワードサイズの倍数でない場合に、さまざまな末端処
理を実行しなければならなくなる点だ。この最適化を実行するmemset
を記述せよ。その性能を、既存のライブラリバージョンや単純なバイ
ト単位でのループと比較せよ。
問題2
memsetのテスト機構を作成せよ。
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 特になしです
[5] その他の制限: 特になしです
0648デフォルトの名無しさん
2005/09/04(日) 08:35:380649デフォルトの名無しさん
2005/09/04(日) 08:51:510650デフォルトの名無しさん
2005/09/04(日) 11:47:19こんな感じでいいの?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/902.c
0651650
2005/09/04(日) 12:11:14やはり処理系提供の関数は速いな。
memset 120
my_memset 230
my_memset_simple_loop 921
0652デフォルトの名無しさん
2005/09/04(日) 12:21:43solarisでやってみた。たぶんHPも同じだと思うけど。
こんなんか?間違ってたらごめん
#include <stdio.h>
#include <sys/time.h>
int main(){
struct timeval time;
struct tm *t;
gettimeofday(&time, NULL);
t = localtime(&time.tv_sec);
printf("%04d/%02d/%02d/%02d:%02d:%02d:%02d\n",
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec, time.tv_usec/10000);
return 0;
}
0653デフォルトの名無しさん
2005/09/04(日) 12:23:26アドバイスありがとうございます
>>641
ありがとうございます
早速試してみました。
前のソースでは一致するものはそのままそのベクトルということだったのですが
今回のソースでは、一致するものすらまともにでませんでした。
i = 1に変えただけでなぜそうなるのかよくわかりません・・。
0654デフォルトの名無しさん
2005/09/04(日) 13:04:00[2] 0が入力されるまで正整数を読み込み、最大値、(最後の0を除いた)最小値、
全入力数値の平均(最後の0を含まない)を出力するプログラムを作る
[3] 環境
OS: Windows,言語: C
[4] 期限:2005年9月7日
[5] その他の制限:for文を習ったので、とりあえず自力で以下のような
プログラムを作ったのですが、うまくいかないのでこれを直していただきたい
と思っています。面倒でしょうがどうぞよろしくお願いします!
#include<stdio.h>
main()
{
int a[1000],i,j,sum=0,n=0;
for(i=1,a[0]=-1;a[i-1]!=0;i++){
n=n+1;
max=0,min=9999;
for(j=o;j<=i-1;j++){
if(max<a[j]){
max=a[j];
}
printf(“max=%d\n,a[j]);
if(min>a[j]){
min=a[j];
}
printf(“min=%d\n,a[j]);
sum=sum+a[i];
sum*1.00/(n-1);
pfintf(“ave=%d\n,sum”);
}
}
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:130755デフォルトの名無しさん
2005/09/06(火) 20:04:44確認したら\nだった。
0756デフォルトの名無しさん
2005/09/06(火) 20:06:23LFか。ならstdioやiostreamのテキストモードでの行読みはつかえん
ということだな。
0757デフォルトの名無しさん
2005/09/06(火) 21:53:48#include <stdio.h> #include <malloc.h> #include <string.h>
struct MJlist {
char name [20]; int homerun;
struct MJlist *pointer;
};
int main (void){
struct MJlist *hd,*p1,*p2; int sum =0;
p2=(struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(p2->name,"ICHIRO");
p2->homerun=10;
p2->pointer=NULL;
p1=(struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(p1->name,"MATUI");
p1->homerun=15;
p1->pointer=NULL;
hd->pointer=p1;
p1->pointer=p2;
hd=(struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(hd->name,"Nomo");
hd->homerun=5;
hd->pointer=NULL;
}
0758デフォルトの名無しさん
2005/09/06(火) 21:55:400759デフォルトの名無しさん
2005/09/06(火) 21:58:180760デフォルトの名無しさん
2005/09/06(火) 22:06:07サンプルは動かないわ/仕様は曖昧だわで
回答者がいないほうに一票
0761デフォルトの名無しさん
2005/09/06(火) 22:11:550762デフォルトの名無しさん
2005/09/06(火) 22:12:06このままで名前もホームランの本数も入力できて何人分も追加できるポログラムに
なっているよ。
だからそのまま提出すれば大丈夫でしょう。
もちろんポインターも使ってるし。
0763デフォルトの名無しさん
2005/09/06(火) 22:17:190764デフォルトの名無しさん
2005/09/06(火) 22:19:190765デフォルトの名無しさん
2005/09/06(火) 22:25:12キーボードの付いているパソコンを用意して欲しい。
入力を for で回したいならつぎのようにすればいいかな?
char* nyuryoku[]={"入力 "," 入力 "," 入力","力 入"};
int i;
for(i=0;i<100;i++){
printf("%s\n",nyuryoku[i%4]);
}
0766デフォルトの名無しさん
2005/09/06(火) 22:31:150767デフォルトの名無しさん
2005/09/06(火) 22:32:12どんなんでもいいので教えてください
0768デフォルトの名無しさん
2005/09/06(火) 22:32:350769デフォルトの名無しさん
2005/09/06(火) 22:35:410770デフォルトの名無しさん
2005/09/06(火) 22:44:25#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct MJlist {
char name [20];
int homerun;
struct MJlist *pointer;
};
int main (void) {
struct MJlist *head = NULL, *tail = NULL, *temp;
char name[256]; int homer;
for (; ; ) {
printf("batter?:"); scanf("%255s", name); if (!strcmp(name, "end")) break;
printf("homer?:"); scanf("%d", &homer);
temp = (struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(temp->name, name);
temp->homerun = homer; temp->pointer = NULL;
if (head != NULL) tail->pointer = temp; else head = temp;
tail = temp;
}
temp = head;
while (temp != NULL) {
printf("batter:%s, homer:%d\n", temp->name, temp->homerun);
temp = temp->pointer;
}
while (head != NULL) {
temp = head; head = head->pointer;
free(temp);
}
return 0;
}
0771デフォルトの名無しさん
2005/09/06(火) 22:53:43ありがとうございます(;´д`)
0772デフォルトの名無しさん
2005/09/06(火) 23:34:210773デフォルトの名無しさん
2005/09/06(火) 23:41:200774デフォルトの名無しさん
2005/09/06(火) 23:51:310775デフォルトの名無しさん
2005/09/06(火) 23:53:22それでいい
負数も単体では真
以下チラシの裏
だからGetMessageの戻り値チェックは0以外かじゃなくて0以上かにしろと…(-1が返ってくるとry
0776デフォルトの名無しさん
2005/09/07(水) 00:01:37サンクス。今までずっと0以下がfalseだと勘違いしてた。
まあ、if()に値を直接入れたりはしないようにしてたけど。
0777デフォルトの名無しさん
2005/09/07(水) 00:11:15そいつぁいい心がけだ。
0778デフォルトの名無しさん
2005/09/07(水) 00:46:10そーでもない
値が0か0以外かで保障される場合、むしろ直接使ったほうがいい。
0779デフォルトの名無しさん
2005/09/07(水) 01:17:24...;
}
0780デフォルトの名無しさん
2005/09/07(水) 09:38:47特に779
0781779
2005/09/07(水) 10:31:28適当な関数なら何でもよかった。
0782デフォルトの名無しさん
2005/09/07(水) 13:16:54[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): 構造体を作る。
(名前と年齢を入力する関数・名前と年齢を表示する関数を作る)
[3] 環境
[3.1] OS: Windows/Linux/等々
環境とかよくわかりませんがとりあえずWindowsです。
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
これちょっとわかりません、すいません・・・・
[3.3] 言語: C/C++/どちらでも可 のいずれか
C言語でお願いします。
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
2005年9月7日(水)今日の5時まで
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々
当方C言語の初心者でいちお構造体習ったのですがさっぱりで・・・
先ほど問題を出されあせっちゃってます(;´Д`)
よろしくお願いします・・・・
0783デフォルトの名無しさん
2005/09/07(水) 13:28:07入出力関数だけ作ればいいのか?
(main関数等はいらんのか?)
0784デフォルトの名無しさん
2005/09/07(水) 13:33:28struct data
{
char name[256];
int age;
};
void input_data(struct data * p)
{
char * pos, buf[64];
printf("Name: ");
fgets(p->name, sizeof(p->name), stdin);
pos = strrchr(p->name, '\n');
if (pos != NULL) * pos = '\0';
printf("Age: ");
fgets(buf, sizeof(buf), stdin);
p->age = atoi(buf);
}
void output_data(struct data * p)
{
printf("Name: %s\nAge: %d\n", p->name, p->age);
}
0786782
2005/09/07(水) 13:53:35当方がなにぶん初心者の者で
サルでもわかるようなプログラミングですと
幸いです(´Д`)
・・・・サルに失礼かも_| ̄|〇
0787デフォルトの名無しさん
2005/09/07(水) 14:05:20#include<stdio.h>
#include<string.h>
struct data
{
char name[256];
int age;
};
void input_data(struct data * p)
{
printf("Name: ");
scanf("%s", p->name);
printf("Age: ");
scanf("%d", &p->age);
}
void output_data(struct data * p)
{
printf("Name: %s\n", p->name);
printf("Age: %d\n", p->age);
}
int main()
{
struct data d;
input_data(&d);
output_data(&d);
return 0;
}
0788787
2005/09/07(水) 14:07:260790デフォルトの名無しさん
2005/09/07(水) 19:26:43非マナー非マナー非マナー非マナー非マナー非マナー
非マナー非マナー非マナー非マナー非マナー非マナー
ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
非マナー非マナー非マナー非マナー非マナー非マナー
非マナー非マナー非マナー非マナー非マナー非マナー
非マナー非マナー非マナー非マナー非マナー非マナー
ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
非マナー非マナー非マナー非マナー非マナー非マナー
非マナー非マナー非マナー非マナー非マナー非マナー
非マナー非マナー非マナー非マナー非マナー非マナー
0791デフォルトの名無しさん
2005/09/07(水) 20:00:550792デフォルトの名無しさん
2005/09/07(水) 20:15:400793こんにちわん
2005/09/07(水) 21:20:29[2] 問題文:
和暦の年号を西暦に変換するプログラムを作成せよ。
ヒント(西暦=明治:m+1867、大正:t+1911、昭和:s+1925、平成:h+1988)
また、列挙体(enum)を用いた方法でも作成せよ。年号を入力してください。
例 昭和45年 → s 45
h 12 と入力してENTERすると結果は
西暦2000年です
と表示されるもの。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: borland c++
[3.3] 言語: C++
[4] 期限: [2005年09月07日24:00まで]
[5] その他の制限: 無し
お願いします。
0794デフォルトの名無しさん
2005/09/07(水) 21:23:050795デフォルトの名無しさん
2005/09/07(水) 21:25:270796こんにちわん
2005/09/07(水) 21:31:510797デフォルトの名無しさん
2005/09/07(水) 21:34:00なんかこれとほぼ同じ問題を数スレ前でみた気がするんだが・・・
作ったコードはそのまま廃棄処分した希ガス
普通にgetcharで読み込んで、switchで昭和なのか平成なのか(ryを判定して
加算すりゃいいんじゃねーの?
0798デフォルトの名無しさん
2005/09/07(水) 21:35:00[2] 問題文(含コード&リンク): マインスイーパーを作れ
[3] 環境
[3.1] OS: Windows
[3.2] 環境: Visual studio.net 2003
[3.3] 言語: C
[4] 期限: 一週間
お願いしますorz
0799デフォルトの名無しさん
2005/09/07(水) 21:35:10超手抜き
#include<stdio.h>
#include<string.h>
enum{m=1867,t=1911,s=1925,h=1988,};
int array[]={m,t,s,h};
char str[]="mtsh";
int main(){
char ch,*p;int year;
if(scanf("%c%d",&ch,&year)==2 && (p=strchr(str,ch))!=NULL)
printf("西暦%d年です\n",array[p-str]+year);
else printf("入力が正しくありません\n");
}
0800こんにちわん
2005/09/07(水) 21:36:05わかりやすく教えて頂けませんか??
0801こんにちわん
2005/09/07(水) 21:38:400802デフォルトの名無しさん
2005/09/07(水) 21:39:48google 七行プログラミング マインスイーパー
0803デフォルトの名無しさん
2005/09/07(水) 21:40:51#include <iostream>
int main()
{
char ch;
int Year;
std::cin >> ch >> Year;
switch (ch)
{
case 'm':
Year += 1867;
break;
case 't':
Year += 1911;
break;
case 's':
Year += 1925;
break;
case 'h':
Year += 1988;
break;
default:
std::cerr << "年号が正しくありません" << std::endl;
return 1;
}
std::cout << "西暦" << Year << "年です" << std::endl;
return 0;
}
0804デフォルトの名無しさん
2005/09/07(水) 21:42:53志村ー、C言語C言語
0805デフォルトの名無しさん
2005/09/07(水) 21:45:33??
0806デフォルトの名無しさん
2005/09/07(水) 21:47:07志村ー、>>793、>>793
0807デフォルトの名無しさん
2005/09/07(水) 21:47:550808デフォルトの名無しさん
2005/09/07(水) 21:48:160809デフォルトの名無しさん
2005/09/07(水) 21:53:07に一票
0810デフォルトの名無しさん
2005/09/07(水) 22:15:221バイト動くで良いんだッけ?
0811デフォルトの名無しさん
2005/09/07(水) 22:19:24>>1のテンプレに従え
0812デフォルトの名無しさん
2005/09/07(水) 22:24:59コンパイルエラー
0813デフォルトの名無しさん
2005/09/08(木) 11:50:450814デフォルトの名無しさん
2005/09/08(木) 14:40:44[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/906.txt
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限: [2005年9月9日17:00まで] 過ぎても提出できます。
[5] その他の制限:
ある画像でコードブックを生成して、次の画像に対してもそのコードブックを使って
符号化・復号化を行うようにしたいです。
どうかよろしくお願いいたします。
0815デフォルトの名無しさん
2005/09/08(木) 15:01:12[2] 問題文(含コード&リンク):
Todo管理のためのアプリケーションを作成する。
先に入力された予定から順に格納されていき、
先に入力した予定から、
実行しだい削除されていく⇒文字列を格納する循環キューを
管理するキュークラスを作成
入力可能な予定の数は、50個
初期化関数はコンストラクタを活用
コンストラクタは仮引数付(キューの名前を渡してやる)
キューのメモリ割り当ては動的に行われるように
(デストラクタでのメモリの解放もする)
(C++の利点を生かしたやり方で)
ToDo一覧を表示する関数を定義⇒キュークラスから生成された
オブジェクトを引数とする関数
ToDo一覧のなかから、n番目とm番目の予定を入れ替える関数を定義
複数のToDo一覧を合成する仕組みを用意する
合成したToDo一覧の個数が限界を超えていたらエラーメッセージを表示して、
無記入のToDo一覧を返す
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:よくわかりませんがVisual C++です
[3.3] 言語: C++
[4] 期限: [2005年9月9日午後12:00まで]
[5] その他の制限:とくにないと思います。「
よろしくお願いします。
0816デフォルトの名無しさん
2005/09/08(木) 15:35:10一日では(俺には)無理だ。手の早い人が気が向いたらやってくれるかも知れないけど。
0817デフォルトの名無しさん
2005/09/08(木) 15:40:17問題がC++らしいかといわれると、謎。
0818815
2005/09/08(木) 15:50:02レスありがとうございます。
さっき出た課題なんです…できないorz
多少条件満たしてなくても形できてればおkらしいのですがおれには…orz
0819デフォルトの名無しさん
2005/09/08(木) 15:56:250820デフォルトの名無しさん
2005/09/08(木) 15:58:180821デフォルトの名無しさん
2005/09/08(木) 16:24:08つまり昼から始まる
http://jjy.nict.go.jp/QandA/FAQ/12am-or-0pm-J.html
午前と午後を定義している法律は、明治五年に出された 太政官布告三百三十七号(資料1)以外には見当たらない。
昼の12時については午前12時のみで、午後零時は表に載っていない。
0822デフォルトの名無しさん
2005/09/08(木) 16:31:379月9日正午までって書いとけば間違いないね。
0823デフォルトの名無しさん
2005/09/08(木) 16:33:30「事故から1時間後は何時だ
午前12だろ。夜じゃないだろ。
深夜0時かそうか。それは午前か?午後か?
そうか。午前か。午前なら早朝だな。夜じゃないじゃないかうそつき目。
オマエはいつになったら本当のことを言うんだ?泥棒や労。
うそつきだからオマエは泥棒なんだよ逮捕してもいいんだよ
昼でも早朝でもいいが、日が昇ってる時間なんだから暗いわけないだろ
北九州市の小倉南署
映画の撮影のためと称してやくざがらみでなんかやってた。
この事故は車にGPS仕掛けられて追跡されブレーキ細工され、
信号無視の車をよけられずに起きたんだが、
このときの担当警察官はその当たりや集団の一員。
つーか部落の一員。泥棒部落の出身。まちがいない。
0824デフォルトの名無しさん
2005/09/08(木) 17:11:120825デフォルトの名無しさん
2005/09/08(木) 17:47:49(社会科のセンセが間違ってたのをツッコミ入れたことがあるが、無視された)
0826デフォルトの名無しさん
2005/09/08(木) 18:39:010827デフォルトの名無しさん
2005/09/08(木) 18:47:430828デフォルトの名無しさん
2005/09/08(木) 20:11:080829デフォルトの名無しさん
2005/09/08(木) 20:22:50一日1時間やるとして・・・10日ほどお待ち願えますかね?
0830デフォルトの名無しさん
2005/09/08(木) 20:51:18そうですか・・・
自分ではできなくて・・・・
0831デフォルトの名無しさん
2005/09/08(木) 21:01:33今日はもう風呂入って寝るので、やるとしたら明日からですが。
0832デフォルトの名無しさん
2005/09/08(木) 21:24:48ありがとうございます。
提出まで待てます。過ぎてもなんとかします。
失礼ですが内容は理解していただけたでしょうか?
意見の食い違いがあると面倒ですので
0833デフォルトの名無しさん
2005/09/08(木) 21:30:52申し訳ございません。
0834デフォルトの名無しさん
2005/09/08(木) 21:31:59つミ[ ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/908.txt ]
時間取れないので、あとのメンテは>>814か他の人に任せる。
あと、レスつけるときは番号の前に>か>>ををつけてくれ。
そうすれば専用ブラウザで見てる人が助かる。
0835デフォルトの名無しさん
2005/09/08(木) 21:42:49ありがとうございます。
/* ベクトル値を各要素に分解 */
void get_rgba_from_color(
COLOR_t color,
int *r, int *g, int *b, int *a
)
{
*a = (color >> ((3 - DST_CHANNEL_A) << 3)) & 0xFF;
*b = (color >> ((3 - DST_CHANNEL_B) << 3)) & 0xFF;
*g = (color >> ((3 - DST_CHANNEL_G) << 3)) & 0xFF;
*r = (color >> ((3 - DST_CHANNEL_R) << 3)) & 0xFF;
}
の部分なんですが、なぜ私のソースをいじったのでしょうか?
この部分は私が595さんのを変えた部分で
595さんのままですとコードブックで一致しないベクトルを選ぶときに
それぞれのベクトルになっていませんでした。bが一致したものを
順に選んでいくことになっていました。
0836デフォルトの名無しさん
2005/09/08(木) 21:48:520837デフォルトの名無しさん
2005/09/08(木) 21:57:36>>836
申し訳ございません。
えらそうにするつもりはありませんでした。
すいませんでした
0838デフォルトの名無しさん
2005/09/08(木) 22:02:16きめ細かいコメント文までありがとうございます
0839デフォルトの名無しさん
2005/09/08(木) 22:02:3310日くれるのだね。 んで、もう答えでてるけどご依頼は?
0840834
2005/09/08(木) 22:04:18>>814のソースだと、シフトさせる幅を直に数値で書いてるため、
バイトオーダーを変更したときにRGBαが正しく抽出されなくなる。
>>595のソースだとバグがあって
RRRRGGGGBBBBAAAA からRを抽出しようとしたとき、
1111000000000000 のマスク(AND演算)をかけてるため、
結果は0xR000になってしまう。
>>835の処理だと
RRRRGGGGBBBBAAAA を右にビットシフトさせて
000000000000RRRR にしてから
0000000000001111 のマスクをかけるようにしてるので
結果は0x000Rとなる
あと、>>835のソースはバイトオーダーいじってるので、
テストするときは自分の環境に戻してやってくれ。
0841デフォルトの名無しさん
2005/09/08(木) 22:09:12ありがとうございます。
今の状況としては834さんに色々助けていただいております。
839さんには感謝いたします。できれば今後も助けていただきたいです
>>840
ありがとうございます
バイトオーダーというのはRGBαがそれぞれ一バイト計四バイトの場合ではなくって
計2バイトの場合でも対応できるようにしたということでしょうか?
0842デフォルトの名無しさん
2005/09/08(木) 22:15:33>>841 できれば今後も
後から問題に付け足しするのはやめましょう。
0843デフォルトの名無しさん
2005/09/08(木) 22:16:31お聞きしたいのですが
1、いただいたソースでは、まずコンパイルして実行してひとつコードブックを作成すれば
今後、実行するときにそのコードブック名を入れれば、コードブックを新しく作成せずに
入力したコードブックを見て符号復号を行うと考えてもよろしいのでしょうか?
2、これは読み込む画像によりますが、今回の場合は814のソースで問題なかったので
いただいたソースの入力出力バイトオーダーのところを814と同じにすればよろしいという
ことでしょうか?
よろしくお願いたします
0845デフォルトの名無しさん
2005/09/08(木) 22:19:13ありがとうございます
ないとはいえませんが例としてだしました。
バイトオーダーの意味がわからなくてたとえとしてお出ししました。
バイトのならびということでしょうか?
EGBαの順番など
0846デフォルトの名無しさん
2005/09/08(木) 22:20:15申し訳ございません。
課題の性質上、付け加えるような形になってすいません。
0847デフォルトの名無しさん
2005/09/08(木) 22:23:01目標があるはずですけれど・・・どこがゴールですか?
お見受けするところ、卒業研究とかゼミだと思うんですけど。
普通の授業ではないですよね?
0848デフォルトの名無しさん
2005/09/08(木) 22:23:531.よろしいです。
ファイルが読めなかった&コードブックサイズが小さい場合にのみ
コードブックを作るようにしてる。
2.読み込む画像に合わせればOK,だと思う。
>>845
>バイトのならびということでしょうか?
>EGBαの順番など
その通り。 RGBαとか、αBGRとか。
0849デフォルトの名無しさん
2005/09/08(木) 22:24:22普通の授業ではないです。
いわゆるゼミ形式?と考えらられます。まだ研究室に入ってないのでわかりませんが
授業スタイルとしては、発表をして問題点を挙げて解決するといったものです
0850デフォルトの名無しさん
2005/09/08(木) 22:26:10ありがとうございます
ということは私がお願いした要素はほとんど終わったと考えてもよろしいのでしょうか?
私はソースを改良してコードブックを新たに作らずにということを考えいましたので
0851デフォルトの名無しさん
2005/09/08(木) 22:30:54授業の目標。あるいはアナタのこの授業での目標はなんですか?
0852デフォルトの名無しさん
2005/09/08(木) 22:30:58私の幼稚な文章からどのような課題かを読み取ってプログラムを作ることの出来る
みなさんのレベルの高さに前から正直驚いておりました。
情報工学を専攻なさっていた方たちが多いのでしょうか?
0853デフォルトの名無しさん
2005/09/08(木) 22:33:40そうしないといつまでたっても先に進めません。
0854デフォルトの名無しさん
2005/09/08(木) 22:35:48作るコードのレベルは、プログラムができない私がいうのもなんですがそれほど高くないと
考えております。(間違ってたらすみません)
授業のもくひょうとしては、先生が勝手にいってるのは普通の授業じゃでできないことするぞ
ということです。例えば画像の圧縮をしようか!ということではなく
画像を用いて何をしてもいいということです。
ですので私が勝手に作った目標としては、(圧縮?を目標に)三次元画像のコードブックを使って
似た画像ならそのコードブックを使って違うならまたCBを作り直す。
画像を読み込みツールが判断できるようなツールを作りたいと考えております。
こういったことでよろしいでしょうか?
0855デフォルトの名無しさん
2005/09/08(木) 22:38:50どうしてもプログラミングが苦手で、みなさんに助けを求めた次第です。
個人的な事情ですがこの単位に命が半分くらいかかってると考えております。
勉強するのが一番というのはわかっております。みなさんには本当にご迷惑おかけします
0856デフォルトの名無しさん
2005/09/08(木) 22:38:54たぶんできてるとは思うけど、あまりテストしてないのでバグがあるかも。
というわけで、あとは任せたノシ
>>852
ちなみに俺は情報工学専攻だった。MやDには行かず、B止まりだけど。
>>854
普通の授業じゃつまらないからね。目標達成できるようにがんばってくれ。
でも、>>853の言う通り、もうちょっとCの勉強が必要。
0857デフォルトの名無しさん
2005/09/08(木) 22:39:09>853 ・・・K&Rはまとまってる思いますけれど、難しくないですかい・・・?
0858デフォルトの名無しさん
2005/09/08(木) 22:46:00ありがとうございました。
修士に行っても通用しそうな方ですね。知り合いに修士の方がいて質問しにいったのですが
私の説明では理解していただけなかったです。
>>857
それなのにすごいですね
独学ですか
0859デフォルトの名無しさん
2005/09/08(木) 22:50:380860デフォルトの名無しさん
2005/09/08(木) 22:53:48どうせ後々困る事になるだろうけどさ
0861デフォルトの名無しさん
2005/09/08(木) 22:54:43おっしゃるとおりです。大学辞める状況まで追い込まれています。
確かにおっしゃるとおりで言い訳しようもありません・・・。
0862デフォルトの名無しさん
2005/09/08(木) 22:57:47そんなに人付き合いが下手だと、生きているのが間違いだと思う。
どうしようもないよ。
0863デフォルトの名無しさん
2005/09/08(木) 22:58:420864デフォルトの名無しさん
2005/09/08(木) 22:59:44生きているのが間違いって言うのは言い過ぎ。
0865デフォルトの名無しさん
2005/09/08(木) 22:59:46834さんのソースでは、コードブックを作らなくてもよいということですが、
CBの中身は595さんの形からかわっていないのでしょうか?
変わっていなかった場合、そのCBからあるRGBαのインデックス番号を
読み取ってそのインデックス番号に符号化することはできるのでしょうか?
0866デフォルトの名無しさん
2005/09/08(木) 23:01:160867デフォルトの名無しさん
2005/09/08(木) 23:01:250868デフォルトの名無しさん
2005/09/08(木) 23:02:010869デフォルトの名無しさん
2005/09/08(木) 23:03:490870デフォルトの名無しさん
2005/09/08(木) 23:04:33教授によっちゃ、お情けで単位くれることもあるだろうし
0871デフォルトの名無しさん
2005/09/08(木) 23:04:58すいません。
ソース見てみたのですがうまくいっているように感じました
失礼いたしました
0872デフォルトの名無しさん
2005/09/08(木) 23:05:430873デフォルトの名無しさん
2005/09/08(木) 23:07:29そのとおりかもしれません。
色々なことも重なりこれ以上は留年できません。
詳しい説明は割愛します。
>>870
教授にプログラミングのことをさすがに聞けません。
さっきいったような符号化復号化の考えは自分で考えてみました。
(あんまり意味ないねといった感じでしたが)
0874デフォルトの名無しさん
2005/09/08(木) 23:12:410875デフォルトの名無しさん
2005/09/08(木) 23:14:410876デフォルトの名無しさん
2005/09/08(木) 23:16:040877デフォルトの名無しさん
2005/09/08(木) 23:26:26> 考えております。(間違ってたらすみません)
間違えています。
高い低い以前に、自分ができる範囲のものにしましょう。
0878デフォルトの名無しさん
2005/09/08(木) 23:28:250879デフォルトの名無しさん
2005/09/08(木) 23:35:17はい、
>>875
すいません
>>877
すいません。自分ができるレベルでやると確実に単位をとれそうになかったのです
すいません
>>878
> 教授に質問される→自分で作ってないし理解してないから答えられない→単位ヤラネ
そのとおりになるとおもいます。人に教えてもらってもいいという考え方の人ですが、
そのぶん成績のつけ方はシビアなかたでらっしゃいます。
0880デフォルトの名無しさん
2005/09/08(木) 23:47:391)勉強する。Cの本なんて3日で読破できる。それ以上かかるならマジであきらめる。
2)クラスメイトを作る。クラスメイトと同レベルでいいし、相談までいかなくても、雑談で流れくらい読める。
3)センセに相談する。
4)ちゃんと単位を取るために時間を使う。
5)人に尋ねるときの方法を学ぶ。
6)自分の行動が人からどう思われるか意識する。
7)死ぬわけじゃないので、単位をあきらめて、別の道を探す。
ここの人に↑にあげたことを代わりにやってくれと言ってるよ、あんた。
0881デフォルトの名無しさん
2005/09/08(木) 23:55:19おっしゃるとおりです。
もうここで相談するのはご迷惑でしょうか?すいません・・・
0882デフォルトの名無しさん
2005/09/08(木) 23:57:15だがな
あんたは無意味に喧嘩売ってるんだよ
0883デフォルトの名無しさん
2005/09/09(金) 00:00:11勉強してから質問しろということですよね?
すいません・・・。もうここには宿題を投げてはいけませんか?
0884デフォルトの名無しさん
2005/09/09(金) 00:03:00�@
int **f_memo(int **array){
//メモリ確保
array = (int **)malloc(sizeof(int) * (4));
//メモリ確保失敗
if(array == NULL){
printf("メモリの領域確保に失敗しました。\n");
free(array);
}
return array;
}
�A
void main(void){
int **array;
array = f_memo(array);
free (array);
if(array == NULL){
printf("メモリを開放しました。\n");
}
}
�@から確保したメモリを�Aで受け取って開放したいのですが上手くいきません。
ポインタが良くわからないので解説をお願いします。
[3] Windows2000
[4] 期限: [無期限]
0885デフォルトの名無しさん
2005/09/09(金) 00:08:22> 勉強してから質問しろということですよね?
そうです。特に日本語と、相手への配慮を勉強してください。
> すいません・・・。もうここには宿題を投げてはいけませんか?
はい。ここに投げてはいけません。
>>884
>>1 のテンプレにしたがってください。
(freeではarrayの値は変わりません。解説終わり)
0886デフォルトの名無しさん
2005/09/09(金) 00:12:39つーか、普通にcalloc使えばいいじゃまいか
0887デフォルトの名無しさん
2005/09/09(金) 00:14:00でメモリ確保が失敗したときにfree(array)をやってはいけません。
arrayはNULLなため、悪ければシステム全体がクラッシュします。
0888884
2005/09/09(金) 00:35:09NULLなのに開放しても意味ありませんでした。
>>886
書き漏らしてしまいましたがmalloc使用の縛りがあったのでこうなりました。
>>885
arrayはポインタでアドレスを指定してるだけだからfreeで開放できないのでしょうか。
0889デフォルトの名無しさん
2005/09/09(金) 00:35:34free(NULL)は安全じゃなかったっけ?
まぁ元のソースではあきらかに不要だが。
0890デフォルトの名無しさん
2005/09/09(金) 00:59:23NULLの場合は無視されるっぽいな
0891デフォルトの名無しさん
2005/09/09(金) 01:01:15別に投げてもいいんだけど、なんというか
「理想は高いけど、自分では何もせずに完全に他人任せ」
みたいに受け取られる箇所があるので、もう少し応対に気をつけてな。
あと、人に教えてもらって物作るの構わんし、参考になる部分も多いだろうけど、
ちゃんと内容を理解してないと困るのは自分だってことを肝に銘じておくように。
数日後か数ヶ月後になるかわからないけど、必ずしっぺ返しが来るよ。
とはいっても、俺も人の事をとやかく言える立場じゃないんだけどね。
まあ、とにかくがんばれ。
0893782
2005/09/09(金) 09:45:357日に宿題お願いしたものですが
同じ宿題に新たに条件をつけられまして・・・
お願いします・・・!
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): 構造体を作る。
(名前と年齢を入力する関数・名前と年齢を表示する関数を作る)
新たに加えられた条件
・scanfは使わない。
・関数を作る(名前・年齢を入れる関数(?))
・年齢は年齢と思われる妥当な数値が入っていなかったらエラーを返す。
(500歳やら文字が入ってたらエラー出力)
[3] 環境
[3.1] OS: Windows/Linux/等々
環境とかよくわかりませんがとりあえずWindowsです。
[3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
これちょっとわかりません、すいません・・・・
[3.3] 言語: C/C++/どちらでも可 のいずれか
C言語でお願いします。
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
2005年9月9日(金)今日の12時まで
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々
当方C言語の初心者でいちお構造体習ったのですがさっぱりで・・・
よろしくお願いします・・・・
0894デフォルトの名無しさん
2005/09/09(金) 10:15:52年齢の不正は見つけますが、文字が入っていたりするところまでチェックしていません。
そこのところは自分で追加してください。
0895デフォルトの名無しさん
2005/09/09(金) 10:47:400896782
2005/09/09(金) 10:51:33ありがとうございます。
コンパイルしたところ
cfe: Warning 513: sample3.c, line 35: 未知の制御文字 \0307 は無視されました。
// 与えられた年齢が異常であれば (-1) を返す。
cfe: Error: sample3.c, line 37: 構文エラーです。
if(prof.age<0 || prof.age>150) return (-1) ;
このようなエラーがでてしまうのですが・・・(´Д`)
0897デフォルトの名無しさん
2005/09/09(金) 10:59:4035行目を削除してコンパイル
0898デフォルトの名無しさん
2005/09/09(金) 11:00:27もしかしてgccは単一行コメントを許可していないのかもしれません。
そのコメントを/* */でくくっても駄目ですか?VCでは通りましたが。
0899デフォルトの名無しさん
2005/09/09(金) 11:08:10EOFが置換されてる、コメントが機能してないんじゃね
0900デフォルトの名無しさん
2005/09/09(金) 11:09:380901782
2005/09/09(金) 11:13:56ありがとうございます。
度々すみませんが、
実行したらありえない数値(年齢)を入力すると
ちゃんと『年齢がありえません』と出るのですが
普通の年齢を入れると出力されたときに千桁になってしますのですが・・・
例→23歳と入力 出力→2320と出る。
自分で調べてみましたがちょっとわからず・・・。
0902デフォルトの名無しさん
2005/09/09(金) 11:17:170903デフォルトの名無しさん
2005/09/09(金) 11:21:110905デフォルトの名無しさん
2005/09/09(金) 11:33:300906デフォルトの名無しさん
2005/09/09(金) 11:39:110907907
2005/09/09(金) 11:44:50[2] 問題文(含コード&リンク):
必ずポインタを用いること。
aとbの値を入力した後に、ポインタpを介して、aの値をbにコピー
するプログラムを作成せよ。その時、a,p,*p,bの値を表示せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: borland c++
[3.3] 言語: C++
[4] 期限: [2005年09月08日12:00まで]
[5] その他の制限: 無し
急いでいます^^;お願いします。
0908907
2005/09/09(金) 11:45:410909782
2005/09/09(金) 11:46:22ってゆうかあせってやってたんですが
提出は3時くらいまででイイっぽい。。。勝手だな教授。
どっちにしろ謎を解明せねば(`・ω・´)
0910デフォルトの名無しさん
2005/09/09(金) 12:17:28#include <iostream>
int main()
{
int a, b, * p;
std::cout << "a = "; std::cin >> a;
std::cout << "b = "; std::cin >> b;
b = * p = a;
std::cout << "a = " << a << std::endl;
std::cout << "p = " << p << std::endl;
std::cout << "* p = " << * p << std::endl;
std::cout << "b = " << b << std::endl;
return 0;
}
bにはなんのために入力するんだ?
0911デフォルトの名無しさん
2005/09/09(金) 12:41:18先生側にしてみれば、せめて授業をまじめに聞いてくれてれば、
なんてことない宿題だろうからなあ……
条件追加にしても、特に難しくしたつもりはない、とんでもない
書き方した奴や迷ってるやつに指針を出した程度のことだから…
それを人だよりにしたあげく、勝手だな、なんてテラカワイソス………
0912デフォルトの名無しさん
2005/09/09(金) 12:53:21なぜ、エラー?
0913デフォルトの名無しさん
2005/09/09(金) 13:16:43#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
int a, b;
int* p = &b;
cout << "a = ", cin >> a;
cout << "b = ", cin >> b;
cout << "a == " << a << endl;
cout << "b == " << b << endl;
cout << "p == " << p << endl;
cout << "*p == " << *p << endl << endl;
cout << "Assign value which a was converted into to *p." << endl;
*p = a;
cout << "a == " << a << endl;
cout << "b == " << b << endl;
cout << "p == " << p << endl;
cout << "*p == " << *p << endl;
}
0914デフォルトの名無しさん
2005/09/09(金) 14:18:17ありがとうございます。
>>834さんのをコンパイルしたのですがエラーが出ました
834さんはテストしてくれたいたようですので環境の違いからでしょうか?
0915デフォルトの名無しさん
2005/09/09(金) 14:24:54明らかにエラーになる箇所があって、
506行目に
int write_data(
が抜けてると思われ。
0916デフォルトの名無しさん
2005/09/09(金) 14:35:100917デフォルトの名無しさん
2005/09/09(金) 14:45:290918デフォルトの名無しさん
2005/09/09(金) 14:55:460919デフォルトの名無しさん
2005/09/09(金) 14:59:41というので出来た隔離スレ
0920デフォルトの名無しさん
2005/09/09(金) 14:59:59どうなおせばいいんでしょう?
c:356: parse error before `*'
c:359: `tmp_hist' undeclared (first use
in this function)
c:359: (Each undeclared identifier is
reported only once
.c:359: for each function it appears in.)
などがエーら分です
0921デフォルトの名無しさん
2005/09/09(金) 15:08:000922デフォルトの名無しさん
2005/09/09(金) 15:12:500923デフォルトの名無しさん
2005/09/09(金) 15:31:51そのソースには致命的なミスが存在しています。
まず、コードブロックの初めのところでないにもかかわらず変数を宣言しています。
0924デフォルトの名無しさん
2005/09/09(金) 15:38:54一応のところエラーは出ないようになりました。
どうしてこんなスパゲティコードを書くのかは良く分かりませんが。
0925デフォルトの名無しさん
2005/09/09(金) 15:42:110926デフォルトの名無しさん
2005/09/09(金) 16:19:07釣り師としては上等なほうだな。
0927834
2005/09/09(金) 17:15:59あー・・・ごめん、コピペミスorz
>>915の指摘が正解
(intをBOOLEANにtypedefしてるのに、置換し忘れてるのはナイショ
>>924
いろいろ仕様追加していくうちにスパゲッティになってる罠。
最初から読んでくと流れが分かると思う。
0928デフォルトの名無しさん
2005/09/09(金) 18:37:08今まで自分ができうる限りの努力をいたしてまいりましたができませんでした・・・。
0929デフォルトの名無しさん
2005/09/09(金) 18:40:41ありがとうございます
>>924
ありがとうございます
さっそく試してみます
>>925
すいませんこれ以上ご迷惑おかけできません
>>927
ありがとうございます。
コンパイル通ったらこれでコードブックを一度作ってしまえば今後作らないでも
そのCBを利用できるということですか?
0930デフォルトの名無しさん
2005/09/09(金) 18:57:580931834
2005/09/09(金) 18:59:31試してみればわかる。
コードブックが同一のものかどうかは以下の操作で検証可能。
1) 画像1に対し、プログラム実行 → コードブックA作成
2) コードブックAを別名(コードブックA')でコピー
3) 画像2に対し、プログラム実行(コードブックA使用)
4) コードブックAとコードブックA'をdiff等で比較
以上、がんがれ
0932デフォルトの名無しさん
2005/09/09(金) 19:27:43ありがとうございます
うまくいきました
>>931
前にもいっていた834さんが変えたところですが
/* ベクトル値を各要素に分解 */
void get_rgba_from_color(
COLOR_t color,
int *r, int *g, int *b, int *a
)
{
*a = (color >> ((3 - DST_CHANNEL_A) << 3)) & 0xFF;
*b = (color >> ((3 - DST_CHANNEL_B) << 3)) & 0xFF;
*g = (color >> ((3 - DST_CHANNEL_G) << 3)) & 0xFF;
*r = (color >> ((3 - DST_CHANNEL_R) << 3)) & 0xFF;
}
このままですとおかしなことになり(近いベクトルを選ぶ際、それぞれを対等に扱ってない
のである特定の色が重視されてしまう)
元に戻しました。
ありがとうございました
0933デフォルトの名無しさん
2005/09/09(金) 21:08:54みなさん本当にありがとうございました。
0934デフォルトの名無しさん
2005/09/10(土) 01:32:570935デフォルトの名無しさん
2005/09/10(土) 12:07:450936デフォルトの名無しさん
2005/09/10(土) 12:34:34回答者は2〜3人だと思うんだけどさ。他の人はスルーすればよろし。
0937デフォルトの名無しさん
2005/09/10(土) 14:21:48本人に自覚が無いようなのでたちが悪い
0938デフォルトの名無しさん
2005/09/10(土) 14:22:30( ´,_ゝ`)プッ
0939デフォルトの名無しさん
2005/09/10(土) 14:42:39本人が「これ以上ご迷惑おかけできません」って言ってるんだから、もう来ないでしょ。
0940デフォルトの名無しさん
2005/09/10(土) 16:18:40と考えていいんだよな、という回答側のため息に過ぎないと見るのだが、
それらを揚げ足とりと言ったり、プなどとは、何様のつもりでなんだろか?
0941デフォルトの名無しさん
2005/09/10(土) 16:23:22はいはいワロスワロス
0942940
2005/09/10(土) 17:08:49940 は 934とはまったくの他人。勝手に巻き込むのは嫌なので念のため。終了
0943名無しさん@そうだ選挙に行こう
2005/09/10(土) 17:25:300944名無しさん@そうだ選挙に行こう
2005/09/10(土) 17:27:05同意はするが、>941みたいなのは構うだけ無駄。スルーしなされ。
スルーできないのも低脳の証拠みたいなものですぜ。
#って、漏れもだな。
0945名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:38:330946名無しさん@そうだ選挙に行こう
2005/09/10(土) 20:08:23擁護されるとは思ってなかった。
0947名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:15:34ttp://pc8.2ch.net/test/read.cgi/tech/1126357741/
0948名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:22:550949名無しさん@そうだ選挙に行こう
2005/09/10(土) 22:24:370950名無しさん@そうだ選挙に行こう
2005/09/10(土) 23:47:020951名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:03:04とりあえず埋め。
0952名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:09:17[2] 問題文(含コード&リンク): 下記に記載
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語でお願いします。
[4] 期限: [2005年09月11日17:00ぐらいまで]
[5] その他の制限: C言語2ヶ月ぐらい勉強、下記に記載
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/912.txt
0953名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:16:24で、何を片付けさせたいの?
0954名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:33:33問題文が浮き上がるんでしょうか?
0955名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:41:12IQ200以上じゃないと見えないらしいよ
0956名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:42:210957名無しさん@そうだ選挙に行こう
2005/09/11(日) 10:47:130958デフォルトの名無しさん
2005/09/11(日) 10:50:51ほらよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/913.txt
わかる範囲でやっといた。VCないからBCCでやった。
0960名無しさん@そうだ選挙に行こう
2005/09/11(日) 11:11:35コーラ噴いたw
0961名無しさん@そうだ選挙に行こう
2005/09/11(日) 11:42:12おまえ神w
0962名無しさん@そうだ選挙に行こう
2005/09/11(日) 11:55:38> ・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
> ・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
あと、
・ファイルを読み書きする問題の場合は、その中身についても説明してください。
・最低限、解いてもらう方に理解してもらえる文章を書けるように努力しましょう。
・「ぬるぽ」と言われたら「ガッ」で返すのがお約束でした。
・ちゃんと選挙に行きましょう。白紙投票でも立派な意思表示です。
0963952
2005/09/11(日) 12:50:39コメント文に$3とか$4とか$5の書いてある変数にあわせて出力する。
あとお約束を知らなくてすみません。今度は返します!!
これでわかりますか?
0964名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:52:41ところで今日の昼飯何食った?
0965名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:54:23で、何を片付けさせたいの?
0966名無しさん@そうだ選挙に行こう
2005/09/11(日) 12:57:34(いや、仕事上しょうがないときもあるが・・・)
まあ・・・あれだ。情報をきちんとくれなかったら答えようがない。
0967名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:00:29煽りじゃなくってさっぱり分からん
もう時間ないんだろ?もちついて何すればいいのか教えてくれ
課題の問題文丸ごとコピペの方がいいかもな
0968名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:08:19>>963
とりあえずいくつか質問
1) このプログラムは何をするプログラム?
2) 最終的にprintfの羅列に合わせて結果を出力するようにすればOK?
3) $3とか$4とかの内容はどうやって取得or計算する?
4) 中でCSVファイルを読み込むみたいだけど、その内容は?
5) C言語なのに構造体メンバにCString(C++クラス)が入っててもOK?
つか、>>967の言う通り問題をそのまま貼った方が早いかも。
0969名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:32:47> [1] 授業単元: プログラミング宿題
って…
0970名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:42:09なんとなく、このまま17時まで進展無しに流れていきそうな予感。
0971名無しさん@そうだ選挙に行こう
2005/09/11(日) 13:58:47�@グローバル変数minny[10]の内容を確認し、
データが格納されていない箇所を探します。
初期値0のままの箇所が空きとみなします。
�A空き領域が無い場合は-1(異常終了)を復帰します。
�B空き領域があった場合、minny[]の空き領域に
パラメータの文字を格納し、0(正常終了)を復帰します。
※グローバル変数minnyは{0,0,0,0,0,0,0,0,0,0}です。
[3] 環境
[3.1] OS: Windows/
[3.2] コンパイラ名とバージョン: c machine 2.0
[3.3] 言語: C
[4] 期限:2005/9/12
[5] その他の制限: hello作ったあとに出された課題です。
よろしくお願いします。
0972名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:01:19物凄く簡単な気がするんだが……
自力でやってみた?
と思ったらHelloの直後かよ(;´Д`)
0973名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:07:48やっぱりとても初歩なんですねorz
答えを頂ける方が現れるまでは自力でやってみます。
0974名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:08:460 って数字の 0 なの? 文字の 0 なの?
あと、そのコンパイラ初めて見るけどどんなやつ?
0975名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:10:470976名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:15:04説明不足でした。0は数字です。
c machineは勧められて使っているので、どんな特徴があるのかはわかりません。
実行結果が別のウィンドウで表示されるのが少し便利に思います。
0977名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:15:58#include <stdio.h>
#define MAX 10
int minny[MAX];
int micky(char ch);
int main(void)
{
if (micky('A')) {
printf("異常終了\n");
}
else {
printf("正常終了\n");
}
return 0;
}
int micky(char ch)
{
int i;
for (i = 0; i < MAX; i++) {
if (!minny[i]) {
minny[i] = ch;
return 0;
}
}
return -1;
}
0978名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:17:22そのまま答えを書いても面白くないので穴埋めで
static int minny[10] = {0,0,0,0,0,0,0,0,0,0};
static const int minny_size = sizeof(minny)/sizeof(int); /* minnyのサイズ */
int find_minny(int param)
{
int i; /* ループのカウンタ */
int ret = -1; /* 結果。異常終了の値を入れておく */;
for([ -- (1) -- ]) /* i=0からminny_sizeまで1ずつ増加*/ )
{
if([ -- (2) -- ]) /* minnyのi番目が0なら */
{
[ -- (3) -- ]; /* minnyのi番目に引数paramを代入 */
ret = 0; /* 変数retに正常終了の値をセット */
[ -- (4) -- ]; /* ループを抜ける */
}
}
[ -- (5) -- ]; /* 結果を返す */
}
0979978
2005/09/11(日) 14:19:25あと、コメントの後ろのゴミはスルーでよろ・・・orz
0980名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:22:06>�B空き領域があった場合、minny[]の空き領域に
>パラメータの文字を格納し、0(正常終了)を復帰します。
って書いてるから
0981名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:25:21本当にありがとうございます。参考にさせていただきます。
完成したら報告します!
0982名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:28:56#define MAX 10
static char minny[MAX] = {0}
のほうがよくね?
0983名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:29:430984名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:32:01グローバル変数って定義したときにデフォで値は0だから
明示的に0で初期化する意味あるの?
処理系に依存するの?
0985名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:33:16ありがとうございます。
書き方も考え方も全然わかっていないので勉強になります。。
0986名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:36:250987名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:39:580988名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:48:02宿題ならここ(・・・でいいのか?)
趣味で作りたいなら、自分のOS&開発環境を考慮した上で該当スレへ
0989名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:56:21こいつのいってる’数字’は
おそらく’数’なんだろうけど(ry
0990987
2005/09/11(日) 14:56:28[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: BCC
[3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限: なんのゲームでもいいです。
簡単なプログラムで出来れば迷路を作りたいのですが。
キャラを動かして迷路から脱出するというゲームを、たのんます。
0991名無しさん@そうだ選挙に行こう
2005/09/11(日) 14:57:340992名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:00:55を書いていないのが怪しいな。
いずれにしてもBCC和姦ねえから俺パス
0993デフォルトの名無しさん
2005/09/11(日) 15:01:050994987
2005/09/11(日) 15:01:12時間があれば頑張れるんですが、なにせ今日中に作らないと
やばいんですよ
ダメもとで頼んでみました
0995名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:03:150996987
2005/09/11(日) 15:04:42無恥なおいらではむりだす
0997名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:04:49そろそろ1000か。
0998名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:05:00>>990
何のゲームでもいいと言われても困るので
迷路なら迷路でちゃんと仕様をまとめてくれ。
そのうち暇な奴が作るかもしれん。
# 俺は休日出勤中なのでそんな余裕は無いが
0999名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:10:581000名無しさん@そうだ選挙に行こう
2005/09/11(日) 15:11:22( ,i::::::::::::i ./⌒\
〉ノ:::::::::::| | ○゜ i ) )
/;/:::::::::::」/.〉 /
___.i;;.i::::::::::::i/ ..: .', /
./ ヾ .|;;i:::::::::::/.. ..;;〉.」
.__ .\|;.i:::::::::/ / ...;;/
_ノ\i_) i:::::::/ ...;;/ //
 ̄ .|; i:::::/ / ..;;/
__.|;_i::/ ...;;/
___/ .....;;/
.|;; i ...;;イ
ノ;; ,.‐ ;;-.;i
/;;; /' '' ;;;X
|;; ;i;;.. 〜 ;;| はいはいぺにすぺにす
X〜 ;i;;; ;;,. ;;;/
ヽ;;__\_;;/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。