C/C++の宿題を片づけます 49代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん

あなたが解けない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
2デフォルトの名無しさん:2005/08/10(水) 17:12:05
3デフォルトの名無しさん:2005/08/10(水) 17:12:56
4デフォルトの名無しさん:2005/08/10(水) 17:13:40
5デフォルトの名無しさん:2005/08/10(水) 17:14:21
6デフォルトの名無しさん:2005/08/10(水) 17:31:22
ぬるぽ
7デフォルトの名無しさん:2005/08/10(水) 17:32:53
8デフォルトの名無しさん:2005/08/10(水) 17:37:00
VIPに汚染されたスレなんか誰がいくか
9デフォルトの名無しさん: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] その他の制限: なし
10デフォルトの名無しさん:2005/08/11(木) 12:02:31
(x1,y1),(x2,y2)に外接する「円」でおk?
11デフォルトの名無しさん:2005/08/11(木) 12:05:05
>>10
箱の中に入ってる楕円の中か外かというイメージです
12デフォルトの名無しさん:2005/08/11(木) 12:06:23
楕円じゃ、2点だと特定できないもんねぇ。
つーか、(x1, y1) - (x2, y2)の線分も楕円がつぶれた形と言えるし。
そうか、全ての点は内側に成らない可能性があるから判定の必要ないじゃん(ぉぃ
13デフォルトの名無しさん:2005/08/11(木) 12:09:11
(x1, y1)
(x1, y2)
(x2, y2)
(x2, y1)
の4点に外接する楕円ってこと?
14デフォルトの名無しさん:2005/08/11(木) 12:14:12
>>13
あーは子の中に入ってる楕円ってそういう意味かなるほど。
>>9
問題文をもっとわかりやすくかけよ
15デフォルトの名無しさん:2005/08/11(木) 12:16:46
申し訳ないです
16デフォルトの名無しさん:2005/08/11(木) 12:34:06
楕円の焦点が斜めにあるときも考慮するのか?と考えた瞬間思考をとめた俺ガイル
なんかうまい方法あるのかな??期待してます。
17デフォルトの名無しさん: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);
}
18デフォルトの名無しさん:2005/08/11(木) 12:38:37
さすがに斜めは無しです・・・
19デフォルトの名無しさん:2005/08/11(木) 12:39:45
>>17
おお!ありがとうございます!!!
20デフォルトの名無しさん:2005/08/11(木) 12:40:53
>>11
箱の中なら内接じゃないのか?
21デフォルトの名無しさん:2005/08/11(木) 15:19:57
a
22お願いします。:2005/08/11(木) 15:23:12
[1]初心C++
[2] 問題文:後で。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:NET2003
 [3.3] 言語: C++
[4] 期限:5時間くらい
[5] その他の制限:Array,Struct,Class,Function,Strings(Pointer無し)
23デフォルトの名無しさん:2005/08/11(木) 15:27:00
なにこいつ。問題文を用意してから纏めて書けよな。
24デフォルトの名無しさん:2005/08/11(木) 15:28:08
制限が意味不明・・・
25デフォルトの名無しさん:2005/08/11(木) 15:34:19
時間がどんどん過ぎてゆくww
5時間くらいっていつまでだwwww
26お願いします。:2005/08/11(木) 15:36:46
まず、Data Fileを見つける(下の英文)。そこには、
Phrasesとその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
27お願いします。: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に変える。
28デフォルトの名無しさん:2005/08/11(木) 15:44:29
酷い英語だ。
29お願いします。:2005/08/11(木) 15:47:26
英語のを日本語に訳したんですけど
30デフォルトの名無しさん:2005/08/11(木) 15:49:24
なんか、ところどころ変な英語混ぜてルー大柴みたいな文章だな。
31デフォルトの名無しさん:2005/08/11(木) 15:57:36
ワロタw
つか酷い英語だと思ったら全部目的語を抜いてるのかよ。
"do you know my name is"ってなにかと思った。
私の名前が存在していることを知っていますかってなんじゃw
で、制限についてもうちょっとまともな説明は無いのか?
32デフォルトの名無しさん:2005/08/11(木) 16:13:54
要は人工無脳か。
33お願いします。:2005/08/11(木) 16:22:12
I hope someone is working for me,,,,
34デフォルトの名無しさん:2005/08/11(木) 17:27:17
But anybody don't do it....
35デフォルトの名無しさん:2005/08/11(木) 18:24:07
[2] 問題文:
int 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] 期限: [無期限]
36デフォルトの名無しさん:2005/08/11(木) 18:28:50
>>35
グローバルスコープとmain()関数内スコープを持つ二つのaがあることは判るかな?
同様にグローバル変数とf()関数内ローカル変数の二つのbがあるわけだ。
cは唯一グローバルにしかないからこれが一番判りやすかろう。
cの出力の結果を踏まえて、aとbについても考えてみれば判るんでないかな?
3735:2005/08/11(木) 18:42:54
>>36
ありがとうございました。
とても解りやすい説明ですね。
モヤモヤが晴れてすっきりしました。
38お願いします。:2005/08/11(木) 23:28:58
>>26お願いします
39お願いします。:2005/08/11(木) 23:30:53
>>26お願いします
40デフォルトの名無しさん:2005/08/11(木) 23:57:35
制限が糞過ぎてやる気にならん。
== つかうなってなんだよ。
std::map つかわせろよ。
41お願いします。: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");
42デフォルトの名無しさん:2005/08/12(金) 00:30:18
return 0;
}

string reply(string input)
{
int p1, p2

p1=input.find("hello")

ここまでやってつまってます。。。
43デフォルトの名無しさん:2005/08/12(金) 00:45:43
ああすばらしきかなstringの値渡し。
マジセンスねぇ
44デフォルトの名無しさん:2005/08/12(金) 00:50:11
データファイルを読み込む先が
std::vector<std::pair<std::vector<std::string>, std::string> >になりそうだけど、いい?
45デフォルトの名無しさん:2005/08/12(金) 00:58:38
>>41
一応動作するはず。
#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);
    }
}
46>>45 の続き:2005/08/12(金) 00:59:19
std::string random_response() {
    int 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;
    }
}
47予言:2005/08/12(金) 01:00:27


次に>>22は、「vector は習ってないので使わないでできないでしょうか」と、言う。


4845:2005/08/12(金) 01:00:35
後はまぁ頑張って。
49デフォルトの名無しさん:2005/08/12(金) 02:10:10
vecto(ry
50デフォルトの名無しさん:2005/08/12(金) 02:40:43
[2] 10進数で最大64桁の正の整数を、同じく10進数で最大32桁の正の整数で割り、小数点第一位を四捨五入して答えを表示するプログラムを作成せよ。
[3] 環境
 [3.1] OS: RedHat Linux
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: Cのみ
[4] [2005年08月15日07:30まで]
[5] その他の制限: 標準でインストールされないライブラリは使用不可


5141:2005/08/12(金) 04:55:13
#include <iostream>
#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;
52デフォルトの名無しさん:2005/08/12(金) 04:57:08
do{
getline(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]);
53デフォルトの名無しさん:2005/08/12(金) 04:57:43
if(p1>=0)
{

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;
}
5441:2005/08/12(金) 04:58:15
kokomade dekimasitaga umaku ikimasen teiseionegaisimasu
55デフォルトの名無しさん:2005/08/12(金) 07:36:03
>>52の4行目のfor文の終了条件が俺には見えないが・・・文字列長でいいんでないの?

あと>>52の7〜9行目みたいなのは、とりあえず大枠が完成するまで
コメントアウトしといてもいいと思う。。’I’を使わなくていいデータもあるから。。

以上C++は触ったこともない俺より。。データ型とか関数とかよくわかってないから
そのへんは他の方にtouch!!

んで>>45-46さんが書いてくれてるから見ときな。。
56前スレの606、875です:2005/08/13(土) 23:06:08
すみません前スレより参りました。
前スレの>>985のコードを組み込んだのですが、強制終了してしまいます。
私の組み込み方が悪いのかも知れませんので、前スレ985のコードを取り込んだ
すべてのコードをロダにUPしていただけませんでしょうか。お力添えよろしくお願いいたします。
57デフォルトの名無しさん:2005/08/13(土) 23:27:36
人に頼む方法もあるが、自分から情報を出すという手もある。
・自分で手を入れたソース
・出てくるエラー
・強制終了の手順
をアップしてみたら?
58前スレの606、875です:2005/08/14(日) 00:01:15
>>57
はい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/821.c
これが元のコードです。
このコードに前スレ985の関数を追加し、mainのwhileの前で呼んでも、
登録の時、ファイルを開く時にほとんどの場合、強制終了してしまいます。
59デフォルトの名無しさん:2005/08/14(日) 00:30:30
いや・・だから・・・
・問題文(条件やら前提やら全部)
・あなたが修正を加えたソース
・操作手順(データファイル作って、次に読み込ませるところまで)
・データファイルの内容
・もしコンパイル時にエラーが出るならそのエラー
をUP。
答えられる人でも情報が小出しだと、面倒で答えたくなくなるから。
聴く人も丁寧にやらなくちゃ・・・ね?
60デフォルトの名無しさん:2005/08/14(日) 00:33:37
>>56
ちゃんと動いたぞ。Linuxだけど。細かくは見てない。
61前スレの606、875です :2005/08/14(日) 02:05:07
>>59
すみません。何度も同じ問題を貼るのはよくないのかな。。と思いましたので・・・。
では、機能追加の分も付け加えてもう一度貼らせていただきます。

問題文
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していただけるとありがたいのですが・・・。
よろしくお願いいたします。
62デフォルトの名無しさん:2005/08/14(日) 02:39:05
>>61
で、前スレ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);
    }
}
63デフォルトの名無しさん:2005/08/14(日) 12:18:11
[2] 問題文(含コード&リンク):ファイル内容を16進表記で表示するコマンドを作成せよ。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: C
[4] 期限: 2005年08月15日まで
[5] その他の制限: %xは使用してはいけない
64デフォルトの名無しさん:2005/08/14(日) 13:25:28
>>63

#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;
}
65デフォルトの名無しさん:2005/08/14(日) 13:44:29
>>64
ありがとうございます!
66デフォルトの名無しさん:2005/08/14(日) 16:39:48
%xがダメなら%Xを使えばいいじゃない。
67デフォルトの名無しさん:2005/08/14(日) 16:41:41
おまえ、クビ。
68デフォルトの名無しさん:2005/08/14(日) 16:49:53
王妃様に向かってなんてことを
69デフォルトの名無しさん: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を定義せよ。

お願いします。
70デフォルトの名無しさん:2005/08/14(日) 17:06:59
>>69
>>1のテンプレ読もうか
71デフォルトの名無しさん:2005/08/14(日) 18:12:38
[2] 問題文(リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/859.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: C
[4] 期限: 2005年08月16日まで
[5] その他の制限:問題文に記載

72デフォルトの名無しさん:2005/08/14(日) 21:04:51
>>71 初心者なので間違ってたらごめんなさい(><)
char *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;
}
73デフォルトの名無しさん:2005/08/14(日) 21:13:37
>>71
#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;
}
74デフォルトの名無しさん:2005/08/14(日) 21:20:31
>>69
大きいノードすべてを表示するのか、それとも1つだけでよいのか
75デフォルトの名無しさん:2005/08/14(日) 21:37:17
>>74
すいません。
大きいノード全てを表示します。
76デフォルトの名無しさん:2005/08/14(日) 21:48:19
void printLargerForTree(struct TreeNode* data,int n)
{
  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);
}
77デフォルトの名無しさん:2005/08/15(月) 00:35:52
>71
元の文字列が250文字あって、たとえば50文字を挿入するとかってヤヴァくね?
78デフォルトの名無しさん:2005/08/15(月) 00:40:18
>>77
宿題だし。それに、それを呼び出し元が管理するか呼び出し先が
管理するかはポリシーの問題。
7977:2005/08/15(月) 00:46:05
>78
でも挿入位置のチェックだけは呼ばれた側でやるの?おかしくね?
80デフォルトの名無しさん:2005/08/15(月) 00:50:01
与えられた引数でできることはするポリシーなんだよ、うぜーな
81デフォルトの名無しさん:2005/08/15(月) 00:56:50
>80
でも与えられたポインタがNULLかどうかはチェックしない、と
82デフォルトの名無しさん:2005/08/15(月) 00:59:41
>>77は自分でコード出さない割に必死だな
83デフォルトの名無しさん:2005/08/15(月) 01:07:55
テストケースからプログラム作ることで、そこら辺の曖昧さを明確にせざるをえない
84デフォルトの名無しさん:2005/08/15(月) 01:08:14
str系のNULLチェックしないのはスタンダードポリシーだ
85デフォルトの名無しさん:2005/08/15(月) 01:15:02
たとえば、
strcpy()の受け側の文字列が十分に大きくない場合 (つまり、プログラマが間抜けか不精で、
コピーする前にサイズをチェックすることを怠った場合)、何が起こるかわからない。
固定長文字列を溢れさせるのはクラッカーが好むテクニックである。
86デフォルトの名無しさん:2005/08/15(月) 10:12:49
じゃあ、どうすればいいの?(;´Д`)
87デフォルトの名無しさん:2005/08/15(月) 10:27:53
課題出してる人だってわかって書いてるだろ
ただの宿題なんだろうし。
88デフォルトの名無しさん:2005/08/15(月) 14:24:17
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/861.txt
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc 2.9
 [3.3] 言語: C言語
[4] 期限: 2005年8月19日 07:30まで
[5] その他の制限:特になし
おながいします
89デフォルトの名無しさん:2005/08/15(月) 15:35:58
>88
すまん、簡単すぎて食指が動かん。

んー・・?
たぶん>>71と同一人物だろうが、前の奴らに礼くらいしたらどうだ?
90デフォルトの名無しさん:2005/08/15(月) 16:19:50
高専だか何だか知らないが、
こんな簡単なものも自分で解けなくて、本当に卒業出来るのだろうか。
91デフォルトの名無しさん:2005/08/15(月) 16:56:49
仕事を回されたとき自分じゃできず、周囲に迷惑をかけるぱたーん?
92デフォルトの名無しさん:2005/08/15(月) 17:02:03
>>88
初心者なんで間違っていたらごめんなさい

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/862.txt
93デフォルトの名無しさん:2005/08/15(月) 17:05:44
>92
君は?
9492!=88:2005/08/15(月) 17:13:01
このスレでCを勉強してるものです
95デフォルトの名無しさん:2005/08/15(月) 17:19:11
>94
ワロス
問題文よく嫁w
96デフォルトの名無しさん:2005/08/15(月) 17:45:24
97デフォルトの名無しさん:2005/08/15(月) 18:02:11
>96
>(男:'M' 女:'F')

とあるが'M','F'以外の入力もおけ
かつ'M'以外なら女にしてもおけ?
98デフォルトの名無しさん:2005/08/15(月) 18:04:35
>>88
#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;
}
99デフォルトの名無しさん:2005/08/15(月) 18:07:11
>98
>97
100デフォルトの名無しさん:2005/08/15(月) 18:25:04
>98
%c
101デフォルトの名無しさん:2005/08/15(月) 18:28:46
>>100
改行が残ってバッファをクリアしたりするのメンドイ。
102デフォルトの名無しさん:2005/08/15(月) 18:34:35
>101
なるへそ

(もれだったらgetchar()かな)
103デフォルトの名無しさん:2005/08/15(月) 18:34:36
スペース空ければ
104デフォルトの名無しさん:2005/08/15(月) 18:36:38
100以下の場合を考えなさいに見えた。orz
#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;}
105デフォルトの名無しさん:2005/08/15(月) 18:44:37
>printf("ホモお断り。\n"); break;

end入力以外でかってに終了するのはいくない
106デフォルトの名無しさん:2005/08/15(月) 19:01:39
まじっすかorz
107デフォルトの名無しさん:2005/08/15(月) 19:05:25
問題に書かれていないことならどうなっても問題ないと思うけど?
例え format c: とか rm /* とか動いてもw
108デフォルトの名無しさん:2005/08/15(月) 19:06:49
エラーメッセージ吐いて終了してるから問題ないべ。
109デフォルトの名無しさん:2005/08/15(月) 19:22:24
つまらん宿題だと思ったが、対話型データ入力の例外処理をどう扱うかが主題だったら深いかもしれないねコレ。
11096:2005/08/15(月) 20:20:25
>>97
性別として男と女しか認めないのはあまりに保守的で時代遅れだと思った。
それから、「さん」は性別にかかわりなく使える一般的な敬称だと思ってそうした。
反省はしていない。
111デフォルトの名無しさん:2005/08/15(月) 22:48:34
>>97
実用的には、「男」「女」以外に「不明」が必要だな。
112デフォルトの名無しさん:2005/08/15(月) 22:55:11
不明はともかく
未回答とかはありかも(webのアンケートとか)
113デフォルトの名無しさん:2005/08/15(月) 23:16:51
そーいや、アホがラジオボタンじゃなくてチェックボックスでつくってたな。
未回答、男、女、男女の4通りの答えがあった。

てか、燃料くれよ。
114デフォルトの名無しさん:2005/08/15(月) 23:23:32
>>113
理にかなってるだろそれは。
まあ欲を言えば、チェックボタンを押す順番も取得したいところだが。
115デフォルトの名無しさん:2005/08/16(火) 00:44:41
>>88
構造体の再利用は考えないでいいのか? 
一人目以降のデータを上書きだと実用的じゃないよな?
116デフォルトの名無しさん:2005/08/16(火) 00:57:56
>>115
宿題ごときに実用もクソもないと思われ。
このレベルの問題で再利用もクソもないと思われ。
こんなデータを上書きされても別に誰も困らないと思われ。
117デフォルトの名無しさん:2005/08/16(火) 01:03:24
というか、常に上書きするのだったら構造体みたいなのじゃなくて単独変数でいいやん
118デフォルトの名無しさん:2005/08/16(火) 01:04:24
だよね〜
119デフォルトの名無しさん:2005/08/16(火) 01:34:01
>>88 やってみました。添削キボンヌ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/864.txt
12088:2005/08/16(火) 01:35:24
あぁぁぁ、いきなりヘンなとこ見つけた……
121デフォルトの名無しさん:2005/08/16(火) 01:37:11
え?今更上書きバージョン?
12288:2005/08/16(火) 01:41:03
ダメ? なら直してくるよ。
12388:2005/08/16(火) 01:46:40
急いで直してみました。どうでしょう?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/865.txt
124デフォルトの名無しさん:2005/08/16(火) 01:52:58
これらが未使用変数ですよ
char NAMAE[100];
char SEX;
double SHINTYOU;
double TAIJYUU;
12588:2005/08/16(火) 01:54:38
あぁぁあ、ゴメン。
それさっき気付いたんですけど、また更新前のを送ってしまいました。orz
126デフォルトの名無しさん:2005/08/16(火) 02:05:28
>>125
おまえ今日から2軍な。
127デフォルトの名無しさん:2005/08/16(火) 02:39:51
つか玉拾い&玉磨き
128デフォルトの名無しさん:2005/08/16(火) 02:51:50
それって肉便器の事?
129デフォルトの名無しさん:2005/08/16(火) 05:22:27
88氏のを改良し入力可能な人数を(メモリの許す限り)無限にしてみました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/866.c
汎用の動的配列構造体はいろんな場面で使えると思います
あと、大きな改良ポイントはユーザー(もしくはテストベクタ)からの入力データを
どのように正規化するかかな
130デフォルトの名無しさん:2005/08/16(火) 07:15:42
取り敢えず88はあんまり関係無いという事は分かった。
131119:2005/08/16(火) 09:30:29
ナチュラルに間違えていたんだけど、88 ≠ 119 です。
マジゴメン。吊ってくる。ってか、>>129の解読が出来ない… orz
132129:2005/08/16(火) 09:50:13
おれも間違えた.. 88ってのは宿題出してきた奴だった。こんなの提出しないだろうなぁ
866.cの修正点として2点
1)PERSON_INIT_NUMを0に設定するとセグフォがでるのを修正
2)引数なしで起動なら標準入力からで、コマンドラインからファイル名を入力したら
それを読み込むように変更しました.要望があればうpします

あとは、気が向いたら読み込んだデータをsqliteを使って保存するように変更してみますか
133デフォルトの名無しさん:2005/08/16(火) 22:40:34
>>88
kumikoさんがあり得ないほど太っている件
134デフォルトの名無しさん:2005/08/16(火) 22:50:03
>>88
体重と平均体重が一緒の場合はどうすればいい?
135デフォルトの名無しさん:2005/08/17(水) 01:34:12
#include<stdio.h>

double 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になるんですが、どうしてでしょうか?
136デフォルトの名無しさん:2005/08/17(水) 01:36:26
>>135
0.00になるだけまし
a, bが不定なのに参照している
未定義動作。ハードディスクをフォーマットされてな
137デフォルトの名無しさん:2005/08/17(水) 01:39:18
そんなプログラムを動かすなら、パソコンが壊れたときの責任は免責させてください。
138デフォルトの名無しさん:2005/08/17(水) 01:41:52
>>137日本語変だよ
139デフォルトの名無しさん:2005/08/17(水) 01:42:45
>>136
自分でa,bを自分で入力して面積をだしたいと思ったのです
140デフォルトの名無しさん:2005/08/17(水) 01:43:53
「自分で」使いすぎちまった
141デフォルトの名無しさん:2005/08/17(水) 01:46:02
>>139 だから何なんだ?w

1. 自分でa,bを自分で入力して
2. 面積をだしたい

その順序で組めよ
なぜa, bが不定なのか考えたのか?
142デフォルトの名無しさん:2005/08/17(水) 01:58:41
>>141
お、できた  順序か

サンクスです
143デフォルトの名無しさん:2005/08/17(水) 02:01:53
プログラミング言語を数学的に解釈していると思われる。
cは関数mensekiで定義される・・・とかかんがえてるんじゃなかろーか。

この手の説明をキチンとするには、プログラミングの代入ってどんなんとか、
関数は定義と呼び出しがあるんだとか、順番だとか、副作用だとか。のーみそがおかしくなる。
144デフォルトの名無しさん:2005/08/17(水) 02:07:11
>>143
>cは関数mensekiで定義される
なんかそんな感じです。
本見ながらやってるんだけど
面積を求める関数を作れみたいな問題でした
145デフォルトの名無しさん:2005/08/17(水) 02:17:36
>>144
プログラムでは数学で混用されている(という認識はないかもしれないが)
3種類のイコールが区別される。3種類のイコールとは、恒等(==)、代入(=)、
定義(関数の定義によって行う)。
146デフォルトの名無しさん:2005/08/17(水) 02:39:07
エディタでプログラムを書いてセーブする
→ソースファイルが出来る
ソースファイルをコンパイルする
→実行ファイルが出来る
実行ファイルを実行する
→メモリにプログラムが読み込まれ、下準備した後main()から実行される。

メモリにはコード領域、スタック、ヒープがある。
ソースコードにはコード領域とヒープ領域の一部を書く。

実行時にはコード領域の内容を順次実行する。

なんか、上手な説明がないかなぁ。
147デフォルトの名無しさん:2005/08/17(水) 11:53:46
そこまでディープに説明したらフォンノイマン型コンピューターの
仕組みとか解説する勢いだな。
148デフォルトの名無しさん:2005/08/17(水) 15:39:49
・main関数の上から順に実行される
・自動変数は最初はゴミが入っているので代入して綺麗にしないといけない
・変数は演算、代入で値が変わる
で、最後に
これらを踏まえた上でアルゴリズムを組みましょう

最初のうちはこんなもんでいいんじゃない?
149デフォルトの名無しさん:2005/08/18(木) 19:09:39
やっぱりスレタイにぼるじょあが入ってないと人が寄ってこないな
150デフォルトの名無しさん:2005/08/18(木) 19:23:05
いや、普通に夏休みだからだろ。
151デフォルトの名無しさん:2005/08/18(木) 19:39:20
>>149
頭悪いな。
152デフォルトの名無しさん:2005/08/18(木) 22:18:48
夏だな。

他のスレでは別の意味で使うが(^^;;
153デフォルトの名無しさん:2005/08/19(金) 23:28:15
ftpやnslookpuコマンドで使われているような
簡易シェルを作れと言われているんですが、
こんな感じですか? 問題点があったら教えてください。

int main()
{

  char buffer[0x100];

  for(;;)
  {
    printf(">");

    if( gets(buf)==NULL)
    {
      break;
    }

    printf("入力されたコマンドは%sです\n",buffer);
  }

  return 0;
}
154デフォルトの名無しさん:2005/08/19(金) 23:31:45
>>153
gets 関数は境界チェックが無くて危険なので fgets 推奨。
あとは特に問題はないと思う。
155129:2005/08/20(土) 00:33:51
特に問題ないというか・・・
まだ他人に評価してもらうほどのものじゃないぞ・・・
printf(">");のあとにfflush(stdout);するのがいいんじゃないか

気をつけるべき点は>>154が言ってるようにユーザからの入力部分だな
バッファオーバーフローの話はいつまでたってもなくならんね
readline()使うとか。。プラットフォームに依存しちゃうか
156デフォルトの名無しさん:2005/08/20(土) 00:35:26
あ、アンカーミス 155≠129です スマソ
157デフォルトの名無しさん:2005/08/20(土) 09:57:50
[1] 授業単元:知識工学
[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
158デフォルトの名無しさん:2005/08/20(土) 10:18:42
>>157
どういう細線化のアルゴリズムを採用したか。
どういう結果になるつもりか。
実際にはどういう結果になったか。

これらの情報があるとヒントが出せると思う。
159デフォルトの名無しさん:2005/08/20(土) 11:41:19
>>155
fflushは必要ない
getsの段階でflushされる
160デフォルトの名無しさん: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");
}
}
}
161デフォルトの名無しさん:2005/08/20(土) 13:44:08
>>160
case L'あ':
162デフォルトの名無しさん:2005/08/20(土) 14:57:51
>>161
ああああ!Lが抜けてたのか!
申し訳ない。orz
無事解決しました。ありがとうございました。
163デフォルトの名無しさん:2005/08/20(土) 16:11:26
ところで>>160を作っていてふと思ったのですが、>>160のようにあ〜おだけでなく
ひらがな全てをアルファベットに直す場合はどうするのでしょう?
地道に全てのひらがなに対応したswitchを用意するものなんですか?
164デフォルトの名無しさん:2005/08/20(土) 17:34:34
変換テーブルでも使え。
165デフォルトの名無しさん:2005/08/20(土) 17:49:16
変換テーブルですか。調べてみます。
166デフォルトの名無しさん:2005/08/22(月) 00:09:47
うう。夏が終わる。
がむばってlisp組みます。はい。
167デフォルトの名無しさん:2005/08/22(月) 00:19:07
いきなり何を言い出すんだ
168デフォルトの名無しさん:2005/08/22(月) 00:38:02
夏休みの宿題に言語を作れって言われてた奴とちゃう?
169デフォルトの名無しさん:2005/08/22(月) 00:40:46
前スレで報告済みでありますが、夏休みの宿題を出されたのであります。
とりあえず、アトムとconsセルをどーやって表現するか決めるであります。
170デフォルトの名無しさん:2005/08/22(月) 00:46:49
なんでもいいから言語を作れって宿題だけど、言語として空集合というのは
どうでしょうか?
するとそれをコンパイルするコンパイラは次のような仕様になるはずです。
1. 入力が空ならなにも出力せずに正常終了。
2. 入力になにかあったら"Syntax Error" を出力して終了。
これなら Hello World に毛の生えたようなプログラムでコンパイラが作れるはずです。
171デフォルトの名無しさん:2005/08/22(月) 00:53:26
しかし問題はそれをプログラミング言語として認めてもらえるかが問題。
最低限、何らかの制御構造があるべきだと思う。
172デフォルトの名無しさん:2005/08/22(月) 00:58:00
ごめん、再度書きます。
[1] 授業単元: 夏休みの宿題
[2] 問題文(含コード&リンク):
コンパイラまたはインタプリタを設計/実装せよ。以下の機能をつけること。
変数、式、配列、関数定義/呼び出し、組み込み関数、制御構造
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): MinGW
 [3.3] 言語:C
[4] 期限:9月1日まで
[5] その他の制限:文法はひととおり
173デフォルトの名無しさん:2005/08/22(月) 00:59:58
PostScriptインタープリタ書いてみるとかw
174デフォルトの名無しさん:2005/08/22(月) 01:08:50
うーん。そこまでばっちり書いてあると逃げようがないね。
Smalltalk なんか制御構造無いっていえばないのに。
まあ式は代入だけで演算子なしでおっけーだろうけど。
組み込み関数は +1 と =0? と出力命令位でいいのかな?
マシン語みたいに配列は一個固定、1 byte だけ入れられるにして、
変数も一個だけ
制御構造は変数が0の時だけ次の命令を実行しないと、goto文でも付けておけば
いいかな?
関数定義はめんどくさいね。スタック作らないとだめなのかな?
175デフォルトの名無しさん:2005/08/22(月) 02:03:59
一番簡単なPascalインタープリタでも作れば?
p-code吐くソースならどこにでも転がってる希ガス。
176デフォルトの名無しさん:2005/08/22(月) 02:17:35
オリジナルでいいなら、Lisp風が一番簡単なんじゃない。
177デフォルトの名無しさん:2005/08/22(月) 13:48:34
0から100まで乱数で発生したデータファイルがあって、そのデータを整理したいです。

元のデータ
30
9
88
78
89
13
90
54
10

整理されたもの

0〜9     1個
10〜19   2個
20〜29   0個
   :
   :


お願いします
178デフォルトの名無しさん:2005/08/22(月) 14:08:28
>>177
エクスプローラーでファイル名順に並べ替えてやれば、
0、100、一ケタ台を除けば全部固まってるだろ。
それを矩形でまとめて選択してフォルダに放り込む。

もしかしてプログラムで整理?
179デフォルトの名無しさん:2005/08/22(月) 14:10:19
データファイル内にデータが入ってるんでない?
180デフォルトの名無しさん:2005/08/22(月) 14:11:31
>>177
とりあえず書いた
テンプレに従ってないので勝手に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;
}
181デフォルトの名無しさん:2005/08/22(月) 14:18:34
//0から99まででいいのかな?
#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);
}
182181:2005/08/22(月) 14:19:44
かぶったゴメン・・・
183デフォルトの名無しさん:2005/08/22(月) 14:30:43
つ qsort()
184デフォルトの名無しさん:2005/08/22(月) 14:32:09
>>180
0から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;
}
と表記して行の追加、削除をしやすくしたほうがいい。
行丸ごとコメントアウトしたり追加、削除したときに中括弧の対応が変わる。
185デフォルトの名無しさん:2005/08/22(月) 14:33:00
>>183
意味ないよ
186180:2005/08/22(月) 14:41:36
>>184
手元のK&Rには初期化子が少ない場合には0で埋められるって書いてあるが
まぁどっちにしろ100の存在忘れてた・・・
187デフォルトの名無しさん:2005/08/22(月) 14:46:11
>>184
>これだと配列の最初だけしか初期化されないでしょ。
が意味わかんないし、
>>181は1行目に0〜99って書いてんだろ。。
しかもここは中括弧とかのお話するところじゃないのよボーヤ
188デフォルトの名無しさん:2005/08/22(月) 14:53:06
この場合sizeof(count)ってsizeof(int)と同じじゃない?
sizeofで配列のサイズなんか取れたっけ?
189180:2005/08/22(月) 14:57:05
>>188
sizeof(配列名)の場合は配列全体のサイズじゃなかったっけ?
sizeof(配列名)/sizeof(配列名[0])で個数求めるとか、何処かで見た希ガス
190デフォルトの名無しさん:2005/08/22(月) 15:05:42
>>186
>初期化子が少ない場合には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のサイズを確認するときくらい
191188:2005/08/22(月) 15:06:48
ああ、スマン。調べてみたら出来るっぽいね。なんか勘違いしてたっぽい
192デフォルトの名無しさん:2005/08/22(月) 15:10:11
>fgetsはバッファのサイズなんかチェックしてくれないぞ。
>fgetsはバッファのサイズなんかチェックしてくれないぞ。
>fgetsはバッファのサイズなんかチェックしてくれないぞ。
>fgetsはバッファのサイズなんかチェックしてくれないぞ。
>fgetsはバッファのサイズなんかチェックしてくれないぞ。
193デフォルトの名無しさん:2005/08/22(月) 15:10:59
>>190
バグはオマエの脳内だけにしてくれよ。
194デフォルトの名無しさん:2005/08/22(月) 15:12:03
夏廚多すぎ
あんびりばぼーなスレになってるw
195181:2005/08/22(月) 15:17:48
>>190
なんかスレが汚れてきててすごくいやなんだが、
とりあえず自分の見解を(多分また荒れるから今日はもう来ないぞw)

もし0〜100なんだったら
>0〜9     1個
>10〜19   2個
>20〜29   0個
>   :
>   :
という仕様の設定があいまいになるよな。100はドコに入るんだって。
あなた様は100は特別だ、ということでans[11]にしたいようだが、
そんなことは喪前の脳内で決まったことであってそれこそ書いてないぞ。
あと知ったかブリはやめとけyo
196デフォルトの名無しさん:2005/08/22(月) 15:18:08
いつもニヤニヤしながら見てるよw
197デフォルトの名無しさん:2005/08/22(月) 15:19:12
>>192
sizeof(buf) でサイズ指定してあったな。
確か割り当ては3バイトだな。
1、0、0、・・・NULLは入らないから、ま、いっか。

>関数は、入力文字列の読み込み時に、数値の一部として認識できない文字が現れた時点で停止します。
>この文字は、文字列の終わりを示す NULL ('\0' または L'\0') の場合もあります。

ふんふん。100として認識だな。どこを終端と認識してるんだろ。
bufの外には文字入れてないから問題ないだろうな。

さて次の文字だ。
¥r¥n
ん?改行コードを読み込めなかったか。
これは、0だな。
0〜9としてカウントすれば問題なし。


てことですか?
198デフォルトの名無しさん:2005/08/22(月) 15:19:46
>>177
テンプレ書いてないんで勝手に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;
}
199デフォルトの名無しさん:2005/08/22(月) 15:24:59
>>197
下のほうに書いてあることはよくわからんが・・・
上のほうに書いてあるのはおかしいぞ?
参考:http://www.bohyoh.com/CandCPP/C/Library/fgets.html
200デフォルトの名無しさん:2005/08/22(月) 15:30:04
>>195
>そんなことは喪前の脳内で決まったことであってそれこそ書いてないぞ。
書いてないことを都合のいいように定義するのは問題ない。

>>198 も 
>テンプレ書いてないんで勝手にC++ってことにした。
って書いてる。

でも、はっきり書いてあることを勝手に変えた場合、
それが及ぼす影響はすべて変えたやつにある。
責任とれよってことだ。

>>199
文字列はNULLで終わる。
だから文字を読み取った後にNULLを追加してくれる。
しかし、バッファの最大値まで文字で埋まった場合はNULLを入れる場所がない。

だからMSのIEもアドレスが長すぎるとバグってた。
201デフォルトの名無しさん:2005/08/22(月) 15:31:12
>それが及ぼす影響はすべて変えたやつにある。

それが及ぼす影響はすべて変えたやつに 責任が ある。
202デフォルトの名無しさん:2005/08/22(月) 15:34:49
>しかし、バッファの最大値まで文字で埋まった場合
203デフォルトの名無しさん:2005/08/22(月) 15:35:09
1 + 1/r^2 + 1/r^2 +・・・・+1/r^n
rとnを聞いて
と求めるプログラム
を頼みます
204デフォルトの名無しさん:2005/08/22(月) 15:37:44
>>202
はいはい。
ごめんなさいね。
バッファの最後までって書けばよかったね。

>>203
計算誤差はどう計算しますか?
ちなみに漏れは作れません。
205デフォルトの名無しさん:2005/08/22(月) 15:38:58
>バッファの最後までって書けばよかったね。
・・・orz
206デフォルトの名無しさん:2005/08/22(月) 15:39:38
>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
>計算誤差はどう計算しますか?
207デフォルトの名無しさん:2005/08/22(月) 15:42:27
>>203
1 + 1/r + 1/r^2 + … 1/r^n じゃないの?
208デフォルトの名無しさん:2005/08/22(月) 15:42:31
桁あふれる?それがわかんないと。。
ってかマルチじゃねぇ?
209デフォルトの名無しさん:2005/08/22(月) 15:42:35
>>206
nが大きいとあふれるし、少数以下の桁数が少ないと誤差が大きくなるから
そこを考えて計算しないといけないでしょ?
210デフォルトの名無しさん:2005/08/22(月) 15:43:23
>>209
計算誤差を計算してもその計算において計算誤差が出ます
211209:2005/08/22(月) 15:46:57
あ、プログラム作ってからその問題を解決していきましょうってことかな?

>>210
だから、誤差を小さくするよう努力するとか、
プログラムがどこまで正常動作するかを計算してそれを仕様とするとか、
そういうことなんじゃないかと思ったんですが。

カレンダーにしたって何年から何年まで正しく動作するとかあるでしょ。
212デフォルトの名無しさん :2005/08/22(月) 15:49:02
誤差は適当でいいだす
数字あふれてもかまいません
213デフォルトの名無しさん:2005/08/22(月) 15:50:13
>>203
とりあえず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;
}
214デフォルトの名無しさん :2005/08/22(月) 15:52:44
cで書いてくれるのが
ベストです(・ω・)
215デフォルトの名無しさん:2005/08/22(月) 15:58:57
>>214
だからCで書いてんじゃん
216デフォルトの名無しさん:2005/08/22(月) 16:02:33
>>203
日本語がおかしいな。大丈夫か?

#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;
}
217デフォルトの名無しさん:2005/08/22(月) 16:06:52
>>216
>>203は1/r^nまで足してるからfor(e=0; e<=n; e++)じゃないかな
218216:2005/08/22(月) 16:16:17
>>217
そうだった・・・指摘ありがトン

あと、>>203
>>216の結果は 1/r も含まれてるので、
入れたくなかったら自分で考えてループ調整してくれ。
219デフォルトの名無しさん:2005/08/22(月) 16:20:18
218さんありがとう

1 + x/1! + x^2/2! + x^3/3! +・・・・+x^r/r!
をとくプログラム
xとrをきくかたち
教えてください(>Д<)

220デフォルトの名無しさん:2005/08/22(月) 16:34:26
// x をきくかたち
printf( "? x = " );
scanf( "%d", &x );

// r をきくかたち
printf( "? r = " );
scanf( "%d", &r );
221177:2005/08/22(月) 16:36:58
皆さん素早い解答ありがとうございます。
書いていただいたことを参考にしてやってみます。
222216:2005/08/22(月) 16:47:23
>>219
計算結果が合ってるかどうかは自分で確かめて。

#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;
}
223213:2005/08/22(月) 16:50:56
>>219
#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;
}
224216:2005/08/22(月) 16:57:54
ちなみに、
>>216を簡単にすると>>213になる。
>>222>>223も同様。

どちらも結果は同じハズ
225213:2005/08/22(月) 17:05:59
>>203の3項目じゃなくて2項目だった
226219:2005/08/22(月) 17:17:24
皆さんありがとう!!!!
227216:2005/08/22(月) 17:48:43
ほんと今更だが、
質問する香具師はちゃんとテンプレ書けよな。
228ぼるじょあ ◆yBEncckFOU :2005/08/22(月) 20:23:14
(・3・)エェー 俺も日本語ならわかるYO!
229165:2005/08/23(火) 19:41:24
>>164
お陰様でstd::mapなんて便利なものがあることを知り、
平仮名文章→ローマ字プログラム作れました。ありがとう。
230デフォルトの名無しさん:2005/08/23(火) 22:18:51
lisp組んでます。
・・・とりあえず、空白とコメントを読み飛ばす処理を書きました。
次はトークン一つ取ってくるところです。
でも課題は山済み。
・データ型の内部表現
・式の構造解析
・プリミティブな関数
・値の放棄のタイミング決定

あう゛。終わんない。
231デフォルトの名無しさん:2005/08/23(火) 22:23:09
つ Boost.Spirit
232デフォルトの名無しさん:2005/08/23(火) 22:32:35
>>231
豪華すぎ。
yaccで充分というか、あんなの自前でやるべき。
それこそlispの醍醐味というもんだろ。
233デフォルトの名無しさん: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];
悩む。
234デフォルトの名無しさん:2005/08/24(水) 17:50:13
[1] 授業単元:C言語基礎
[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] その他の制限: 特に無し
よろしくおねがいします。
235デフォルトの名無しさん:2005/08/24(水) 18:10:11
>>234
実行例見ると12と33が出現回数同じだけど、
そういうときってどうするの?
テキトーでいいの?
236234:2005/08/24(水) 18:30:50
条件1に、最頻値が複数ある場合は、最も大きい値のデータを表示対象とする。とあるので
33が出るようにお願いします。わかりにくくて申し訳ないです。
237デフォルトの名無しさん:2005/08/24(水) 18:40:56
>>234
>>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;
}
238234:2005/08/24(水) 19:17:52
>>273さん
ありがとうございました。
num = num > 0 ? num < 20 ? num : 20 : 1;
の部分は学校では習っていなかったので、ここだけ
if(num > 0 && num <= 20){〜条件に合致すれば入力処理へ進む〜
}else{合致しなければおしまい
 といった形にいじらせてもらいました。では失礼します。
239234:2005/08/24(水) 19:18:52
訂正、>>237さんでした・・・orz
240デフォルトの名無しさん:2005/08/25(木) 00:14:28
いんたぷりたorこんぱいらの男です。
もぉあきらめました。ご意見をくださったかた、心があたたかくなりました。
ご好意に添えないことが残念です。

友人にみせてもらって共同で作ったことにさせてもらいます・・・。
友人も出来てないみたいですが。なんとかやってくれるでしょう。
241デフォルトの名無しさん:2005/08/25(木) 02:56:28
しかし最近の高専ってレベル高いのな。
高校生とは言え宿題でコンパイラは辛いだろ。
俺だって一月でCコンパイラ作ってこい言われたらキツいぞ。
242デフォルトの名無しさん:2005/08/25(木) 03:01:36
>>241
ネットに転がってるのが前提なんじゃない?
専門学校でCASLアセンブラ作れって課題は出てたが、漏れはさっぱり分からなかった。
243デフォルトの名無しさん:2005/08/25(木) 10:36:14
yaccで逆ポーランド記法のインタプリタを作らされたことならあるぞ。
244デフォルトの名無しさん:2005/08/25(木) 22:01:23
>>243
激しく無駄だな。ワロス。
245デフォルトの名無しさん:2005/08/26(金) 00:38:48
RPNなんて7行プログラミングの管轄だろw
246デフォルトの名無しさん:2005/08/26(金) 03:29:03
7行か……#includeを書かないのが美学?
247デフォルトの名無しさん: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] その他の制限:特になし
どうかお願いします。
248デフォルトの名無しさん:2005/08/26(金) 14:49:08
#include <stdio.h>

int 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];
}
249デフォルトの名無しさん:2005/08/26(金) 16:48:05
>>247が↑のMax()とMin()の中身を理解できてるか心配。
250≠248:2005/08/26(金) 17:03:55
>>249
んじゃ、判りやすいように簡易版を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]);
}
251デフォルトの名無しさん:2005/08/26(金) 17:10:29
いけずなおまいらが大好きです
252デフォルトの名無しさん:2005/08/26(金) 17:16:25
>>251
これならどう?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];
}
253デフォルトの名無しさん:2005/08/26(金) 17:29:29
>>247のに挑戦してたんだけど、なるだけ汎用的な
Max(int*),Min(int*)に仕上げようと思って
渡された配列の要素数を計算しようとしたのですが
sizeof(src)/sizeof(src[0])でうまく出なかったので
何でなのかと弄ってたら、srcは関数内ではあくまで配列の
先頭へのポインタでしかないからsizeof(src)してもダメなのは
当然だという所までは気づいたんですが、こういう場合
要素数はどうやって求めればいいんでしょう?
やっぱり配列を扱える方で計算した上で引数として渡すしかないんでしょうか?

srcはmain()のローカル変数として宣言してます
254デフォルトの名無しさん:2005/08/26(金) 17:39:05
int Max(valarray<int> &src) {
 return valarray.max();
};

int Min(valarray<int> &src) {
 return valarray.min();
};
255デフォルトの名無しさん:2005/08/26(金) 17:44:05
>>253
引数で渡すしかない。
C++だといろいろと回避法はあるけど。
256デフォルトの名無しさん:2005/08/26(金) 17:45:20
>>255
やっぱりそうですか・・・どうもです
257253ではない:2005/08/26(金) 18:16:24
汎用的にするならこうなるのかな
int 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;
}
258デフォルトの名無しさん:2005/08/26(金) 22:14:18
[1] 授業単元:
[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の数値を扱う再にオーバーフローが起きてしまいます。
その部分の解決方法についておねがいします。
259デフォルトの名無しさん:2005/08/26(金) 22:26:49
>>258
自分が作ったソースを晒しなぁ。
260デフォルトの名無しさん:2005/08/26(金) 22:29:12
>>257
俺も汎用的にしてみた。
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;
}
261デフォルトの名無しさん:2005/08/26(金) 22:34:25
>>260
無駄にそこまでこるならC++でテンプレート使えばいいじゃない。
262258:2005/08/26(金) 22:39:42
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/875.txt

もともと32桁16進→10進という課題だったため、前半部分で16→2にしています。
作りかけでいろいろ無駄がありますが目をつぶってください。
263デフォルトの名無しさん:2005/08/26(金) 23:00:28
>>262
403 forbidden
264デフォルトの名無しさん:2005/08/26(金) 23:15:34
>>262
要は途中でunsined longなりの最大値超えるからでしょ?
適当な要素数のint型配列つかって10進数を表して
そいつを表示する部分と、乗算する部分作った方がいい希ガス

とりあえず自分で作ろうと思ってた奴の表示と乗算の部分だけ完成させたから
参考にでもしてくれ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/876.txt
265デフォルトの名無しさん:2005/08/27(土) 00:33:47
>>262
いろいろ目をつぶったら何も見えなくなった。
って後半(2->10)も何もないじゃないかあ〜!
(後、結果の保持or出力の形式の条件(有無さえ)が不明だなあ。
128桁の2進数値の保持に 128bit以上の整数型が必要になるのは理解済み?)
266デフォルトの名無しさん:2005/08/27(土) 01:55:38
そのあたりは理解しています。
数値ではなく、文字として処理して計算?という案はあるのですが
加算処理をどう表現していいのかがわからず、です。

計算結果はそのまま 123456798456132・・・というふうに表示し、プログラム終了です。
267デフォルトの名無しさん:2005/08/27(土) 02:17:58
>>266
文字として処理っていうのは筆算での掛け算をするってことか?
268258:2005/08/27(土) 02:37:59
桁数が大きくなると、普通に数値として計算ができなくなるので
数字の足し算を文字と文字の組み合わせで表現すればいいのでは?と考えてました。
1と1が組み合わさるときは2、1と2が組み合わさるときは3・・・とパターンを決めて計算を表現するということです。
うまく説明できない・・・
とりあえず、普通の足し算を行うのはあきらめる気でいました。
269デフォルトの名無しさん:2005/08/27(土) 02:40:10
>>266
> 数値ではなく、文字として処理して計算?という案
10進数の数値に対して 1桁に1バイト割り当て&その値空間が '0' 〜 '9' ってことか?
270258:2005/08/27(土) 02:48:51
>>269
まさにそのとおりです。


と、ここまで書いておいて別の方法に気がつきました。
大きな数を4桁ずつとかに区切り、配列に格納したモノ同士を足していくほうが
繰り上がりの問題も含めて単純に解決できそうです。
今まで考えでは1桁ずつ計算していましたが、こちらのほうが楽かつ簡単な気がします。

考えがまとまらずにフラフラしてしまって申し訳ありません。
なかなかうまく進まず焦ってしまっています。
一旦自分で考え直してもう一度質問すべきことを練り直します。
271デフォルトの名無しさん:2005/08/27(土) 03:13:40
[1] 授業単元: プログラミング演習
[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乗の場合があるわけでターミナルに上のように表すのはどうかと思うので
エクセルなどでヒストグラムを作れるようにすること。といわれました。どうかよろしくお願いいたします。

272デフォルトの名無しさん:2005/08/27(土) 04:00:59
いちおう確認させてもらう。

習ったデータ構造は?(2分探索木、ハッシュ、mallocする形の二次元配列)
習ったバイナリファイルを読み込む方法は?
出力はアスタリスクの横棒とエクセルファイル、どちらを作ればいいの?
273デフォルトの名無しさん:2005/08/27(土) 04:28:11
>>271
普通にバイナリモードで開いて、freadでunsigned longの変数に
放り込めばよくないか?
274デフォルトの名無しさん:2005/08/27(土) 04:41:58
俺の教科書だと、
unsigned long x;
x = (getchar() & 0xff) << 24;
x |= (getchar() & 0xff) << 16;
x |= (getchar() & 0xff) << 8;
x |= (getchar() & 0xff);
ってなっとる(爆) これもなんだかな・・・だが。

unsigned longが64ビットじゃない処理系って、俺は知らんけど、
fread(&x, 4, fp)とかだと、処理系依存じゃねぇか?
275デフォルトの名無しさん:2005/08/27(土) 04:44:47
>>272
習ったデータ構造についてですが、正直授業についていけなくてわかりません。
出力についてですが、0〜2の32乗の値のそれぞれの出現頻度をグラフ化したいわけで、
アスタリスクの横棒ですとターミナルに表示するのは非常に困難だと思いますし、
もし可能であれば、出力されるファイルをエクセル形式のファイルにして、それを
エクセルで開いて、縦軸に0〜2の32乗それぞれの出現頻度が、
開いたエクセルファイルに10進法で書かれていれば、それらから
グラフを作りたいなと考えております。
他の方法としても、ターミナルに一度に0〜2の32乗の出現頻度を表示することはできないので
100づつくらい、出現頻度を表示させておいて、それをエクセルに少しずつこぴぺしていこうと
考えております。私の発想ではこのくらいのことしかおもいつかないのですが
もっといい方法があったらそちらでプログラムを組んでいただけると助かります。
私の説明不足なために理解に苦しまれるところがたくさんあるとは思います。すみません。

276デフォルトの名無しさん:2005/08/27(土) 04:50:07
エクセルも64K行しか作れないわけだが。
277デフォルトの名無しさん:2005/08/27(土) 04:51:57
>>273
私がやってみた方法は、
#define BIG 2の32乗
hisutoguramu[BIG]という配列を用意いたしました。配列を初期化して
そして
hisutoguramu[in_data[i]]=hisutoguramu[in_data] + 1 ;
in_data[i]というのは元ファイルを4バイトずつ読み込んでいるものでiは
元ファイルのサイズ/4までしかループさせない
というふうにしてプリントfで表示させる方法をしてみようとしたのですが
できませんでした。セグメンテーション違反もでまして、無理でした。
278デフォルトの名無しさん:2005/08/27(土) 04:53:11
>>276
それは知りませんでした。
何かいい方法で、0〜2の32乗を横軸とし、縦軸を出現頻度としたグラフは作成できないのでしょうか?
279デフォルトの名無しさん:2005/08/27(土) 04:57:08
>>278
試しに、2の32乗がどんな値か計算して味噌。
できれば、それを表示するためにどれだけのメモリが必要になるかも。

#こいつの頭は大丈夫なんだろうかと不安になる恭子の頃。
280デフォルトの名無しさん:2005/08/27(土) 04:58:09
>>278
そもそも2^32もの行(列)数をグラフ化できるソフトなんてあるのか?
281デフォルトの名無しさん:2005/08/27(土) 05:06:06
>>279
4、294、967、296ですね・・・。
四十億ですね・・・。
無知ですみませんでした。
あとエクセルで確認したところ65536までしか縦軸がありませんでした

口頭で聞いた問題でしたので、271ような課題を出す先生はいらっしゃらないと思ったほうが
いいのでしょうか?

テンプレに書かれているように、問題文を途中で帰るのは失礼だとは思いますが、
少し変えさせてもらってもよろしいでしょうか?
282デフォルトの名無しさん:2005/08/27(土) 05:07:45
Linuxならgnuplot用のデータ吐けばいいんでないか?
283デフォルトの名無しさん:2005/08/27(土) 05:26:22
>281
変えるのならどうぞ。

>271ような課題を出す先生はいらっしゃらないと思ったほうが いいのでしょうか?
宿題としては、難儀です。32ビットだとデータ構造とかファイルサイズとか気にするんで。
限界に近いところでプログラムを組むことを経験させる・・・という意図ならありです。

なにか別の作業の一環でやってるなら、全データを扱うっていうのはヘンかな・・
出現数が上位のものをリストアップする・・・とか。ある範囲で区切るとかするんじゃないかな。

モトのデータが何で、どういう目的で使いたいのかが分かると、やりやすいな。
284デフォルトの名無しさん:2005/08/27(土) 06:11:08
271です。先生、TAの雰囲気から察するに難しい課題ではないと思いますので
お言葉に甘えて問題を変えさせていただきます。

[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であらわされることとなります。
問題文を変え、言葉が足りないところも多数ありますがどうぞよろしくお願いいたします。   
285デフォルトの名無しさん:2005/08/27(土) 06:16:31
>>283
>モトのデータが何で、どういう目的で使いたいのかが分かると、やりやすいな。
画像のRGBのようなヒストグラムだと思っていただければいいと思います。
RGBにもう一つの要素が増えたと思っていただければなと思います。
286デフォルトの名無しさん:2005/08/27(土) 06:20:50
・・・あー。そりゃ、R面G面B面α面ごとにヒストグラム作るべきだわ。
287デフォルトの名無しさん:2005/08/27(土) 06:44:11
$ ./a.out inputfile >outputfile

#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;
}
288デフォルトの名無しさん:2005/08/27(土) 06:49:42
すまん。planeじゃハズいわ。plainな。
289デフォルトの名無しさん:2005/08/27(土) 08:28:28
>>286
それぞれの要素ごとに作るべきでしたか。

>>287
レス遅れて申し訳ありません。
さっそくためにしてみます。

ありがとうございます。
290デフォルトの名無しさん:2005/08/27(土) 08:51:07
>>287
ありがとうございます。
適当なバイナリを作って確認したところそのとおりになりました。
直接会ってお礼をいいたいところですが、本当にありがとうございます。
本当に助かりました。ありがとうございます。
291デフォルトの名無しさん:2005/08/27(土) 23:14:58
>直接会ってお礼をいいたいところですが、
ちょっと引いたぞ
292デフォルトの名無しさん:2005/08/28(日) 02:31:36
290です。何度も申し訳ございません。
[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のように出力させていただければ自分でエクセルを使ってヒストグラムを求めたいと考えております。
どうぞよろしくお願いいたします。   
293デフォルトの名無しさん:2005/08/28(日) 02:56:37
バイナリをテキストに変換してくれって言ってるんですか?
例)
R1,G1,B1,
R2,G2,B2,
.......
294デフォルトの名無しさん:2005/08/28(日) 03:12:24
>292
1)出力形式プリーズ
>287の例だと
・1行1レコードのテキストファイル。
・1レコードに含まれるフィールドはコンマで区切られる。
・フィールドは順に、値,Rの頻度,Gの頻度,Bの頻度,αの頻度。

0,1,0,100
1,2,1,40
...
255,100,0,0
というふうに書く。
2)メンドイからバイナリをどっかにおくと、いいかも。
295デフォルトの名無しさん:2005/08/28(日) 03:12:51
>>293
はい。

RGB値   出現頻度
0         9
1      25
2 0        
3         109 
・ ・
・         ・

2の24乗    13

出現頻度が0の場合は表示しないようにすればなんとか収まると思うのでよろしくお願いします。
表示しないでおくと下のようになります

RGB値   出現頻度
0         9
1      25      
3         109
・         ・

2の24乗    13
296デフォルトの名無しさん:2005/08/28(日) 03:14:08
RGB値の値の計算式をR,G,Bを使ってあらわすこと>295
297デフォルトの名無しさん: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

298デフォルトの名無しさん:2005/08/28(日) 03:20:03
>>294
287のような出力形式でいいですがもっといい方法があるならそちらを使ってもらって
下さると助かります。グラフにするときに便利な出力にしたいと考えております。
287の場合は最大Xが255だったのであの出力形式をエクセルにこぴぺして作れましたが
今回の場合は2の24乗になるのでなにか上手な方法があったらとおもっております。

>2)メンドイからバイナリをどっかにおくと、いいかも。
どういう意味でしょうか?無知ですみません。

みなさん深夜にありがとうございます。
299デフォルトの名無しさん:2005/08/28(日) 03:20:37
なんか・・・出現数に応じたデータ圧縮かなぁ。とか思いつつ、生暖かく見ている。
300デフォルトの名無しさん:2005/08/28(日) 03:22:42
2の24乗!!???
そんなに....
301デフォルトの名無しさん:2005/08/28(日) 03:23:39
>>296
無知ですみません。それはどのような意味でしょうか?
302デフォルトの名無しさん:2005/08/28(日) 03:28:08
>>299
あ・・・確かにそのとおりです。正直驚きました。なぜかというとTAではないドクターに知り合いがいて
少し相談したんですが彼もそういってました。このあとなにかしらの符号化?につなげていくのではと

>>300
やはり多くてグラフ化できないですかね?
それなら出現頻度が0の場合は消していけばなんとかならないですかね・・・
303デフォルトの名無しさん:2005/08/28(日) 03:30:35
>>302
絶対にそれぞれの値の棒グラフを作らねばならないのか?
度数分布表とかではなく?
304デフォルトの名無しさん:2005/08/28(日) 03:33:19
>>303
ヒストグラムを作ってということだったので特に指定はありませんでした。
私が勝手に判断して値の棒グラフと考えました。
度数分布表というのはよくわからないのでぐぐってきますがそれでいけそうでしたら
それでやってもらえると助かります

みなさんありがとうございます。
305デフォルトの名無しさん:2005/08/28(日) 03:36:30
>>303
2の16乗で区分すると2の8乗の階級ができます。RGBで考えたときにRGが同じで
Bが違っても同じになるというのはこの課題ではだめだと思います。
306デフォルトの名無しさん:2005/08/28(日) 03:37:41
>301
R成分,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
という組み合わせは見たことがあるので、そのうちのどれか知りたかった。
(ここではべき乗を^で表した)
307デフォルトの名無しさん:2005/08/28(日) 03:46:35
>>306
無知ですみません。
RGBαRGBα・・・・で構成されているファイルをαを無視して、
RGBをワンセット(1ピクセル?)で考えて
どのようなRGBが出現頻度が高いのかを知りたいと考えております。

回答になってたでしょうか?本当にすいません。
308デフォルトの名無しさん:2005/08/28(日) 03:51:18
#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;
}
309デフォルトの名無しさん:2005/08/28(日) 04:02:19
>>308
ありがとうございます
動作実験をしてみたいと思います
310デフォルトの名無しさん:2005/08/28(日) 04:13:51
#include <stdio.h>
#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;
}
311310:2005/08/28(日) 04:20:19
げ、最後のr, g, b, i[r][g][b]は
r+1, g+1, b+1, data[r][g][b]と読み替えてください。できたらこれも実験してもらえたら嬉しいです。
312デフォルトの名無しさん:2005/08/28(日) 04:22:55
0〜255だと256個必要だな。>310
313310:2005/08/28(日) 04:25:01
Unicode識別子は無効だって....error
314310:2005/08/28(日) 04:27:12
僕のは、試さないでください....。orz
315デフォルトの名無しさん:2005/08/28(日) 04:44:17
#include <stdio.h>
#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>はタブ文字に置換してください、何度も荒らしみたいにごめんなさい。コンパイル通ったのが大変嬉しくて... */
316デフォルトの名無しさん:2005/08/28(日) 04:50:16
みなさんありがとうございます。
RGBαのαは無視してと今までいっていたのですができればRGBαをまとまりと
考えて出現頻度を求めていただけないでしょうか?わがままいってもうしわけありません
317デフォルトの名無しさん:2005/08/28(日) 04:56:34
作るのがあほらしくなったのでパス。>316
318デフォルトの名無しさん:2005/08/28(日) 05:01:53
うむ。完全にバカにしとるな。
319デフォルトの名無しさん:2005/08/28(日) 05:02:14
>>308
ありがとうございます。
動作を確認いたしました。

>return (long) r << 16 | (long) g << 8 | b;
この動作でαを除外したのですか?
無知ですみません
320デフォルトの名無しさん:2005/08/28(日) 05:03:44
>>317
>>318
すいません・・・。
上の方で4バイトずつのヒストグラムは難しいといわれたので自分で勝手に3バイトとしました。
それならなんとかなるのかなとおもったためです
すいませんでした。
321デフォルトの名無しさん:2005/08/28(日) 05:10:18
>>310
ありがとうございました。
322デフォルトの名無しさん:2005/08/28(日) 05:35:57
入力ファイルがメモリのサイズを越えないのであれば、四バイトの索引と
頻度のペアを作っていけば数えられるよ。
ただ、ヒストグラムの横軸をどうするのか?
出題ミスのような気がするから、まずやるべきは先生に問題を確認することなんだけど
なぁ……
323デフォルトの名無しさん:2005/08/28(日) 06:00:57
>>322
char、short、longと、配列サイズを変更して集計するとか。
324デフォルトの名無しさん:2005/08/28(日) 06:03:04
>>322
ありがとうございます。
308の if (count[i]) /* 全要素を出力するにはこの行を削除 */
で 削除して全要素を出力したのですが出力できなかったところを考えると
2の24畳でさえだめだったのですから2の32乗は無理そうですね。
ですので出現したものだけのヒストグラムを作ろうかなと考えております(出題ミスでないと考えた場合)
325デフォルトの名無しさん:2005/08/28(日) 06:09:16
この人わかってない。
326デフォルトの名無しさん:2005/08/28(日) 06:17:09
つか線形リストなり、ハッシュなりで実装すりゃええやん
どーいうデータが想定されてんのか知らんけどさ
どーせ頻度0の要素がほとんどだろ?
327デフォルトの名無しさん:2005/08/28(日) 06:22:58
固定長配列でO(n^2)なアルゴリズム。
328デフォルトの名無しさん:2005/08/28(日) 06:28:03
>>325
すいません・・・

>>326
TAが配布したデータでは
(要素数は2の24乗がある中使われていた要素は10000ちょっとでした)でした。

>>327
わかりません・・・。
329デフォルトの名無しさん:2005/08/28(日) 06:32:13
>>317
>>318
いいわけさせていただくと αの要素を調べていたら0か255でしたので
(RGBすべてが0だった場合αも0、RGBが何かしらの値を盛っていたらαは常に255だった)
のでαを省いたものといいました。
しかし、これでは他のデータですと汎用性がないというっことが考えられます
ですので後でRGBαをワンセットと考えて〜といってしまいました

みなさんにはいろいろしてもらっていたのに大変失礼なことをしてしまいました
本当にごめんなさい
330デフォルトの名無しさん:2005/08/28(日) 06:35:45
この後にデータ圧縮が控えているわけだが、データ構造はどうしたらよいか?
331デフォルトの名無しさん:2005/08/28(日) 06:40:23
オマエら朝から暇だな。

>>329
TAが配布したデータをupせよ。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
332デフォルトの名無しさん:2005/08/28(日) 06:50:18
>>330
データ圧縮は上でも推測されてたようにあるかもしれませんが、
ヒストグラムをつくってから考えたいと思います。
ためしにZIPで圧縮したら1.2Mが60kになったので関係ありそうな気がしますね・・・
>>331
TAから公開してはいけないとは言われいないデータなのですが、あまりにちゃんに慣れてない
ので怖いのでアップするのは勘弁してもらえないでしょうか?
333デフォルトの名無しさん:2005/08/28(日) 06:52:16
あと気づいたことが会って
TAからはRGBαという構成といわれたんですが
どうも調べるうちにαBGRになっているような気がします。
一般論として環境によってはデータが逆さまになることがあるとか
きいたことがあるようなないような・・・
334デフォルトの名無しさん:2005/08/28(日) 06:55:50
>>333
x86系はリトルエンディアン
335デフォルトの名無しさん:2005/08/28(日) 06:58:20
>>334
ありがとうございます
確かそのような名前でなにかあったことを記憶しております
336デフォルトの名無しさん:2005/08/28(日) 06:59:27
・・・人の話を聴かんやつだな。
そういうチェックもしたいからupしろというてる。
・・・てか、人を信用しようよ・・・。
337デフォルトの名無しさん:2005/08/28(日) 07:02:35
不満に思うなら答えないでいいじゃないか
338デフォルトの名無しさん:2005/08/28(日) 07:06:21
うむ。そのとおりだ。
339デフォルトの名無しさん:2005/08/28(日) 07:13:15
>>336
すいません。TAが所属している研究室は画像研究をしてる研究室で
受講しているだけの一学生に大切なデータを渡すとは思えないのですが、
なにか問題になるといやですのでアップは勘弁してください。
いろいろしていただいているのに沢山しつれないことをして申し訳ありません・・・。
340デフォルトの名無しさん:2005/08/28(日) 07:15:36
>>332
ハッシュはよくわからないけど、データが少ないんなら2分木とかで存在する値だけ読んでいくとか。
デフォルメしてかまわないんなら・・・普通に配列でいいか。

テキストファイルなら圧縮率高いですよ。
特に0が多い場合。
341デフォルトの名無しさん:2005/08/28(日) 07:22:54
うん。気張らなくていいと思う。
だらだら配列を線形探索。
342デフォルトの名無しさん:2005/08/28(日) 08:02:51
リトルエディアンの場合 RGBαでなくってあるαBGRになっていると思うのですが、
したの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;
}
343デフォルトの名無しさん:2005/08/28(日) 08:05:22
342を少し訂正いたします
>BGRをワンセットと考えて出現頻度を出すにはどうしたらいいのでしょうか?
をBGRαをワンセットとして出現頻度を出すにはどうしたらいのでしょううか?
に訂正させてください。BGRでも出現頻度がでるのならお願いします
344デフォルトの名無しさん:2005/08/28(日) 08:08:13
方法:そんなプログラムは捨てる
345デフォルトの名無しさん:2005/08/28(日) 08:35:00
針の先ほども自分で考える気は無いんだとさ。
346デフォルトの名無しさん:2005/08/28(日) 08:40:52
#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 << 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;
}

ほらよ
347デフォルトの名無しさん:2005/08/28(日) 08:45:30
スマソ 346だけど普通に違ってるわこれ
348デフォルトの名無しさん:2005/08/28(日) 08:58:59
俺もよくなるが、なぜ書いた後になってすぐ気づくんだろう。
349315:2005/08/28(日) 09:00:45
ども、起きぬけの>>315です。なんだか壮絶なことになっているようですね。
350デフォルトの名無しさん:2005/08/28(日) 09:03:49
return (long) r << 16 | (long) g << 8 | b;
これをいじればαBGからRGBになりそうなのですが、バスエラーが出たりと
よくわからなかったです。どうか教えていただけないでしょうか?
リトルエディアンのことを言い忘れていてすみません
351315:2005/08/28(日) 09:05:58
リトルエンディアンでもそれぞれ1バイト長で確保しているならRGBalphaの並びではないんですか?
とにかくデータがalpha,R,G,Bの並びなのかどっちなのかはっきりさせる必要がありそうです。
352デフォルトの名無しさん:2005/08/28(日) 09:08:33
>>351
逆になってるっぽいって言ってるからRGBAlphaの1B*4で1セットじゃねーの
肝心のデータうpしてくれりゃそれで解決するんだがな
353デフォルトの名無しさん:2005/08/28(日) 09:18:13
私なりに調べてみたのですが、リトルエディアンだとバイナリダンプすると順序が逆になってでてくるそうです
データ自身はRGBαなのですがαBGRというふうに出て来るそうです
354デフォルトの名無しさん:2005/08/28(日) 09:28:27
352さんのいってらっしゃるので正しいかと思います
355315:2005/08/28(日) 09:32:41
普通にメモリとって記録していったら....
17179869184Byte つまり、16777216MB、16384GBもメモリをとられることになるんですけど.....。
頻度はそれぞれunsigned char型に収まりきらないものでしょうか。
356デフォルトの名無しさん:2005/08/28(日) 09:33:11
(意訳)データをupするのが正しいかと思います
357デフォルトの名無しさん:2005/08/28(日) 09:35:32
そもそも要素数が半端じゃないな。
358デフォルトの名無しさん:2005/08/28(日) 09:36:28
まあ、今日は暇だから付き合いますけど。
359デフォルトの名無しさん:2005/08/28(日) 09:39:16
#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) 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?
360デフォルトの名無しさん:2005/08/28(日) 09:44:43
>>355
とりあえず値の範囲でも調べたら?
何通りあるかとか。
361デフォルトの名無しさん:2005/08/28(日) 09:46:08
みなさんありがとうございます

>頻度はそれぞれunsigned char型に収まりきらないものでしょうか。
データのサイズによるのですが 2の24乗必要と考えもらえると助かります
362デフォルトの名無しさん:2005/08/28(日) 09:52:35
私の勝手な考えなのですが308さんのプログラムでほとんど問題なく、ただ、308さんのだと
αBGのワンセットでの出現頻度になっているので
BGR(RGB)のワンセットでの出現頻度が出るようになればなと考えております
363デフォルトの名無しさん:2005/08/28(日) 09:55:01
バイナリデータのファイルサイズは?なんかとんでもないでかさに思えてきたんだが。それをテキストデータに変換してエクセルで開くなんて逝ったら。。。
364デフォルトの名無しさん:2005/08/28(日) 09:57:55
ファイルサイズは96*96*96*4で3538944バイトです。
三次元画像らしいので
365デフォルトの名無しさん:2005/08/28(日) 10:05:18
362に追加で、データがαBGRというふうになっているので先頭のαを無視してBGRワンセットの
出現頻度をということです。
最初はRGBαというふうに説明していたために混乱させて申し訳ありません。
308さんのプログラムだとαBGとなってしまうのは私が最初にRGBαとなっているといったためです。
実際はαBGRです。リトルエディアンだからだそうです
366デフォルトの名無しさん:2005/08/28(日) 10:05:49
LinuxだっけWindowsだっけ?
367デフォルトの名無しさん:2005/08/28(日) 10:08:23
一度情報を整理してみよう。
・入力データのフォーマット
・出力データのフォーマット
を書いてね。
368デフォルトの名無しさん:2005/08/28(日) 10:19:18
>>366
リナックスです

>>367
入力データのフォーマットはバイナリでRGBαそれぞれ1バイトで計4バイトが何度も記述されている
構成になっています。ただ、私の環境だとこのRGBαバイナリでーたを見てみると
αBGRという風に見えます。(ターミナルでコマンドで中身を見た場合)

出力データのフォーマットは下のような感じにしていただきたいです、
タブでもいいですし、、であけてもいいです。
ただし、出現回数が0の場合は記述しなくてもいいです。できればソースのある箇所をいじれば出現回数
が0でも記述するようにしてもらえると助かります。

RGB値   出現回数
  1        4
  2        5
   ・        ・
   ・        ・
369デフォルトの名無しさん:2005/08/28(日) 10:25:51
出力書式の質問。
αをあとから付け足すとかしない?
370デフォルトの名無しさん:2005/08/28(日) 10:37:09
>>369
arufaの値は調べていくとわかったのですが0か255でした。
本来ならばαを含めてRGBαをワンセットとした出現頻度をもとめたいのですが 
0か255なら別にいらないのではと思い、RGBと書きました。
αをいれることでプログラムが動かなくなるようでしたらαなんていらないですが
もしもRGBαでワンセットの出現頻度がわかるのでしたらそうしていただきたいです。
αが0のときはRGBもそれぞれ0でした。なのであるRGB値が出現していたらアルファは255っとなります
少しわかりづらいかもしれません。すいません
371デフォルトの名無しさん:2005/08/28(日) 10:54:22
ポイントだけ。

1)
>>308
getval()のなかのif (..) return EOF;が4つあるけれど、それの順番を変更すればよろしい。
2)
αがRGBの値から求められるのなら、αは無視してよろしい。

以上。
372デフォルトの名無しさん:2005/08/28(日) 10:59:10
>>371
ありがとうございます
やってみます
373デフォルトの名無しさん:2005/08/28(日) 12:28:23
>>371
#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を単純に逆転させるだけでいのでしょうか?
374デフォルトの名無しさん:2005/08/28(日) 12:52:24
いまさらなんですが入力ファイルを十進法で表現したファイルをアップしたほうがいいでしょうか?
375デフォルトの名無しさん:2005/08/28(日) 12:56:21
>>374
出力だけ有っても無意味
入力とそれに対応する出力のセットか、片方だけなら入力
376デフォルトの名無しさん:2005/08/28(日) 13:02:46
>>375
入力ファイルをテキストに十進法で出力しました。
そして RGBαそれぞれが0の場合がほとんどでしたのでプログラムを組んでこれを消しました。
その結果を出力したテキストが下のようなものになります

(αBGRの順)
255 212 71 102 255 212 81 121 255 191 82 115 255 198 106 132 ・・・・・・・・

自分なりにずっといろいろやったり考えたりしてたのですが、
このテキストで、(α)BGRをワンセットと考えたR出現頻度を求めることもできるかなとおもって
アップしたほうがいいかをお聞きしました。
377デフォルトの名無しさん:2005/08/28(日) 13:09:52
バイナリをそのままあげなさい。
データを処理した後のものを出されても仕方ない。
378デフォルトの名無しさん:2005/08/28(日) 13:21:42
言葉で伝えられないなら全部丸投げしろ。

それぞれ0ってなんだ? 全部0じゃないのか?
へんてこな日本語を文脈で判断して、わけの分からない
加工データでよく分からない出力を出せといわれても無理だ。
379デフォルトの名無しさん:2005/08/28(日) 13:24:49
お。>>271からだから。100レス超えた。単一の話題だけ・・・だよな?
380デフォルトの名無しさん:2005/08/28(日) 13:26:59
>>377
>>378
すみません・・・。できるところは自分でやろうと思って変な方向になりました・・・。
877にアップしました。TAの方のメールを待っていましてが配布してもかまわんよとのことだったので
アップしました。

どうかお願いいたします。
381デフォルトの名無しさん:2005/08/28(日) 13:28:03
>>378
全部0ですといいたかったです
382デフォルトの名無しさん:2005/08/28(日) 13:29:10
>380 出力形式の確認もしたか?
383デフォルトの名無しさん:2005/08/28(日) 13:32:12
>>382
出力形式というのは?
384デフォルトの名無しさん:2005/08/28(日) 13:34:15
話にならん。
385デフォルトの名無しさん:2005/08/28(日) 13:37:22
>>384
無知ですみません

添付可能ファイル : TEXT, LHA, ZIP
なのにlzhであげるなということでしょうか?
386デフォルトの名無しさん:2005/08/28(日) 13:39:41
>>384
やっとわかりました

出力形式というよりも最終的な目的がヒストグラムを作ることですので
エクセルに簡単にこぴぺできる形がいいかと思います
他にいい方法があったら教えてくださると助かります
387デフォルトの名無しさん:2005/08/28(日) 13:42:44
確認していないのだな?
388デフォルトの名無しさん:2005/08/28(日) 13:45:01
>>387
はい、というのもヒスグラムをつくってこいとのことでどういう風に作るかも課題の一つだと
私は考えておりました。
エクセルでは65k程度しか軸がないのでそれ以上のヒストグラムはつくれません
ですが出現しないRGBαを除けば10k程度に収まります
こういうのを試してるのではないかと思っております
389デフォルトの名無しさん:2005/08/28(日) 13:54:17
ヒストグラムのつくりかたもTAに確認すべし。
390デフォルトの名無しさん:2005/08/28(日) 13:54:58
>>388
普通に考えてバイナリモードでの読み込み処理ができるかどうかをみる課題だろ
それに出現しないのを除外してもいいのなら、そんなヒストグラムに何の意味があるよ?

PhotoshopとかにあるRGBそれぞれを別々にグラフ化して重ね合わせるんじゃないのか?
391デフォルトの名無しさん:2005/08/28(日) 13:55:49
最近のターミナルアダプターは高機能なんだな。
392デフォルトの名無しさん:2005/08/28(日) 14:01:27
清涼剤をありがとう>391
393デフォルトの名無しさん:2005/08/28(日) 14:03:46
>>389
返事がすぐには来ないと思いますが聞いてみます。

>>390
上のほうにでているようにRGBα別々のヒストグラムを作りましたが
確認したところ 別々ではなく RGBαをワンセットとしてヒストグラムを とのことでした
394デフォルトの名無しさん:2005/08/28(日) 14:28:25
なんかファイルの先頭にテキストがいくつか混ざってるのは俺だけ?
395デフォルトの名無しさん:2005/08/28(日) 14:33:28
>>394
> なんかファイルの先頭にテキストがいくつか混ざってるのは俺だけ?
すいません。消すのを忘れていました
消したものをあげたほうがいいでしょうか?
96*96*96*4バイトが正確なデータです
396デフォルトの名無しさん:2005/08/28(日) 14:45:49
ヘッダだろ
397デフォルトの名無しさん:2005/08/28(日) 14:47:06
>>395
消すのを忘れたってことは、喪前が勝手に入れたのか?
398デフォルトの名無しさん:2005/08/28(日) 14:52:54
AVSっていうデータの可視化ツール用のファイルみたいだな。
Cで組むんじゃなくて、このツールの使い方を学習させたいんじゃなかろーか。
399デフォルトの名無しさん:2005/08/28(日) 14:57:38
なんだか思い切りそんな感じがしてきた。
400デフォルトの名無しさん:2005/08/28(日) 14:58:32
>>397
いえ
ですがRGBαそれぞれのヒストグラムを作っていたとき
αの値がおかしかったのでヘッダを消したら0か255になったので消すのはむしろいいことのようです
(メールで確認済み)
401デフォルトの名無しさん:2005/08/28(日) 15:00:39
>>398
私のヘッダを見てツールがあるのを発見したのでメールでTAにたずねたところ
別にAVSじゃなくってもいいんだけどたまたまそのファイルで演習してるだけ
とのことでした
402デフォルトの名無しさん:2005/08/28(日) 15:02:06
> カラーマップを設定するデータのヒストグラムを表示することも可能です。
ttp://www.nagano.fujitsu.com/services/avs/Announce/express51.html
わらた。
403デフォルトの名無しさん:2005/08/28(日) 15:03:21
どうも課題自体が、適当に出された課題のような気がするな
BMPとかならまだしも、わざわざAVSとやらのデータをCで扱わせる意味が分からん
それに3バイトを1セットと見てのヒストグラムを作るなんて
必要となるメモリを考えても何させたいのか分からないし
404デフォルトの名無しさん:2005/08/28(日) 15:06:00
まあ、Cで書くにしろ、RGB値の出現数はもうクリアしてるから・・・終了だろ?
405デフォルトの名無しさん:2005/08/28(日) 15:06:23
特徴を踏まえて符号化するためじゃないかい?
4バイトを1セットとみてヒストグラムを作らせ、ベクトル量子化させるとかだめかな?
406デフォルトの名無しさん:2005/08/28(日) 15:07:03
そのまえに質問者さんは前提としてCは使えるんですよね?
また、バイナリエディタで開いたんだけど、ヘッダ部分は最後の 0C 0Cまで削除してしまっていいんですよね。
407デフォルトの名無しさん:2005/08/28(日) 15:08:18

あの上の方にも書きましたが308のどこを変えればαBGをワンセットとからBGRにできるのでしょうか?
408デフォルトの名無しさん:2005/08/28(日) 15:09:59
>>406
私はイーマックスで開いて96*96*96*4バイトになるまで削除しました

プログラムはほとんど使えません すいませn
409デフォルトの名無しさん:2005/08/28(日) 15:10:26
>>407
freadで4バイトまとめて読み込みゃ、RGBAlphaの並びになるから
0xFF辺りでマスクしろ
410デフォルトの名無しさん:2005/08/28(日) 15:10:44
>>308のgetval()のなかのif (..) return EOF;が4つある。その順番を変更すればよい。
411デフォルトの名無しさん:2005/08/28(日) 15:12:43
一つのネタで200スレ行くか楽しみだったりする。
412デフォルトの名無しさん:2005/08/28(日) 15:13:16
>>409
私の環境ですと、リトルエディアンが原因でαBGRとなっているので308さんのだとαBGになります
409さんのおっしゃることはボクでもできるかもしれませんが、
そのあとの出現頻度のカウントが全然わかりません。ごめんなさい
413デフォルトの名無しさん:2005/08/28(日) 15:13:30
まちがい、レスか。こんなん200スレも立ったら死ぬ。
414デフォルトの名無しさん:2005/08/28(日) 15:14:05
>>410
#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;
ここは変更させなくてもよろしいのでしょうか?
何度もすいません
415デフォルトの名無しさん:2005/08/28(日) 15:23:50
>>414
long getval(FILE *fp)
{
unsigned long temp;
if (fread(&temp, 4, 1, fp) != 1)
return EOF;
return (long)temp >> 8;
}
こうでいいんじゃねーのか?脳内コンパイラだからエラー出たら適当に修正してくれ
416デフォルトの名無しさん:2005/08/28(日) 15:30:56
unixなら sys/net.h をインクルードして
htonl つかったらいいんジャマイカ。
417デフォルトの名無しさん:2005/08/28(日) 15:34:26
>>415
ありがとうございます。これを308と合体させてみてコンパイルは通ったのですが
セグメンテーションエラーがでました。
414はどこが違うんでしょうか?読み込む順番をおっしゃられるようにかえて
r g b というならびになっていると素人目には見えるのですがだめなんでしょうか・・・
確認したいのですが出現頻度をどうやって確認したらいいのかもわかりません。
0の出現頻度はあからさまなのでわかるのですが。
418デフォルトの名無しさん:2005/08/28(日) 15:39:25
>>416
それについて調べてみます
ありがとうございます
419デフォルトの名無しさん:2005/08/28(日) 15:43:32
>>416
net/if.h な
420デフォルトの名無しさん:2005/08/28(日) 15:44:24
414のようにして バイナリファイルの中身を見て いくつか値を計算して確かめたのですが
同じ値があり、おそらく正しいと思われます

みなさんありがとうございます。
421デフォルトの名無しさん:2005/08/28(日) 15:46:47
>>416
すいません、わかりませんでした
422デフォルトの名無しさん: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

というエラーが出ます
解決方法をどうかご教授ください。。。
423デフォルトの名無しさん:2005/08/28(日) 16:42:20
>>422
char sep[] = ","
424デフォルトの名無しさん:2005/08/28(日) 16:44:04
>>422
main内でchar sepとして定義されてるが、肝心の関数の方は
char*を引数として取るから、呼び出しの時にsepじゃなくて
&sepにすりゃいいんじゃまいか?
425デフォルトの名無しさん:2005/08/28(日) 16:46:17
>if(strcmp(r_string,NULL) == 0)

こんなんいらん。

if(r_string == NULL)

でいい、ってか、意味わかってかいてるか?
426デフォルトの名無しさん:2005/08/28(日) 16:49:04
>>423
ありがとうございます。無事コンパイルできました。

が、セグメンーション違反になってしまいうまくいきません。
どこが悪いかご指摘いただけないでしょうか。
427デフォルトの名無しさん:2005/08/28(日) 16:49:13
まず、16行目の
strcmp(r_string,NULL)
が間違っています。str(cmp)に渡すのは有効なポインタでなければならず、
NULLを渡せばアドレスはゼロを指しているためコンパイルを通ったとしてもクラッシュします、ヌル文字列でなければなりません。
したがってstrcmp(r_string, "")としなければなりません。ただ、>>425さんの言うようにこの文は
if(!r_string)で片付けたほうがいいと思います。
428デフォルトの名無しさん:2005/08/28(日) 16:50:57
>>425
はい、意味は分かっています。
教授がこうしたほうがよいと言っていまして
このようにしたんです。
429デフォルトの名無しさん:2005/08/28(日) 16:53:50
>>427
>str(cmp)に渡すのは有効なポインタでなければならず、
>NULLを渡せばアドレスはゼロを指しているためコンパイルを通ったとしてもクラッシュします、ヌル文字列でなければなりません。

ありがとうございます、自分の勉強不足でした。
無事、プログラムを動かすことができました
答えてくださった皆様ありがとうございました。
430デフォルトの名無しさん:2005/08/28(日) 16:54:46
>>428
なんでこうした方がいいの?
431デフォルトの名無しさん: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;
}
432デフォルトの名無しさん:2005/08/28(日) 16:57:35
>>430
「見た目が分かりやすいから
慣れないうちはこう書いたほうがいい」とのことです。
433デフォルトの名無しさん:2005/08/28(日) 17:00:24
前の質問者はもう行ったみたいだね。
434デフォルトの名無しさん:2005/08/28(日) 17:19:11
前の質問者のビルドして、自分で作ってみたけど30分もたってんのに
まだ動いてるヨ。あと数時間かかるのかな.....。俺のルーチン遅。
435デフォルトの名無しさん:2005/08/28(日) 20:58:37
strtok()を使わないといかんのか?
436デフォルトの名無しさん:2005/08/28(日) 21:00:33
あんまり使いたくない関数だな。
437デフォルトの名無しさん:2005/08/28(日) 22:06:18
>434 わろた。
なお、こんなことすると(longが32ビットの環境では)ループが終わらんので注意
unsigned long i;
for (i = 0; i < 0xffffffffUL; i++) {
  /* 処理 */
}
438デフォルトの名無しさん:2005/08/28(日) 22:34:46
>>437
終わらないって言うのは、2^32回ループするのが現実的な時間じゃ無理ってこと?
それともほんとに無限ループになる?

ちょっと気になったんで・・・
439デフォルトの名無しさん:2005/08/28(日) 22:44:35
unsigned long i;
for (i = 0; i < 0xfffffffUL - 1; i++) {
  /* 処理 */
}
と比較してみたら? >438
440デフォルトの名無しさん:2005/08/28(日) 22:44:54
unsigned char i;
for(i=0;i<=0xff;i++){
func();
}
とかだと、
i=0からはじまって、
i=0xfeのときi<=0xffは真か偽か?
i=0xffのときi<=0xffは真か偽か?
unsigned char な値が0xffのとき0x01を足すと次の値は何か?
441デフォルトの名無しさん:2005/08/28(日) 22:45:34
>>437 は普通に終わったよ。
442デフォルトの名無しさん:2005/08/28(日) 22:46:37
追加で
unsigned char i;
for(i=0xff;i>=0;i--){
}
もバグの原因となるので要注意
443デフォルトの名無しさん:2005/08/28(日) 22:47:05
>>440
なんで終了条件が <= になってんの?
そんなこと誰も言ってないよ?
444デフォルトの名無しさん:2005/08/28(日) 22:53:11
>>437がアフォなだけ
終了
445ぼるじょあ ◆yBEncckFOU :2005/08/28(日) 23:49:47
(・3・)アルェ〜 ここは僕が降臨する所なのかYO!
446デフォルトの名無しさん:2005/08/29(月) 01:50:45
まあ、今週からお客さん増えるから、ぼちぼちな。
447デフォルトの名無しさん: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地帯 *//

よろしくお願いいたします。
448デフォルトの名無しさん:2005/08/29(月) 03:10:51
エラーメッセージは?
449デフォルトの名無しさん:2005/08/29(月) 03:11:07
スラッシュが一つ多いとかでないことを祈る。
つか、テンプレ読もうな。
450デフォルトの名無しさん:2005/08/29(月) 03:12:39
ぱっと見宣言に間違いはないっぽい。
つーかテンプレ使えよ
451デフォルトの名無しさん:2005/08/29(月) 03:15:37
やっぱ、スラッシュか?
てゆーか、テンプレにしたがえよ。
452デフォルトの名無しさん:2005/08/29(月) 03:15:57
ソースコード全部とエラーメッセージ。あと、コンパイル方法。
1レスに収まらないなら、>>1のアップローダ。
453デフォルトの名無しさん: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] その他の制限: なし
454デフォルトの名無しさん:2005/08/29(月) 17:49:59
マリオは自分では座標値を持ってなくて、
MAPを上書きするのか・・・マンドクサ

関係ないが、make_world()という名前にちょっと反応した俺ガイル
455454:2005/08/29(月) 18:00:16
すまん、ソースちゃんと読んでなかった。
>>454は無かったことにしてくれw
456デフォルトの名無しさん:2005/08/29(月) 18:24:08
本当にこういう丸投げする奴らに感謝って言う感情があるのかな。
ちょっと書き換えればいい話だったりするときとか。考えもしていないんじゃないかって思う。
457デフォルトの名無しさん:2005/08/29(月) 18:26:42
「問題を出して暇つぶしさせてやってる」とか思ってそうなやつもいるしな
458デフォルトの名無しさん:2005/08/29(月) 19:34:12
面白い問題だすねぇ・・・w
459デフォルトの名無しさん:2005/08/29(月) 19:40:33
>>457
その通りだろ。違うのか?
460デフォルトの名無しさん:2005/08/29(月) 20:31:21
print_world()のface_directionは一回も使われてないんだけど。
構造体まで教えているであろうコードなのにswitch使えるところで使ってないでif-else使ってるし。
何なの?
461デフォルトの名無しさん:2005/08/29(月) 20:35:32
関数定義の最初の{を行頭に書かないスタイルだしな。
あまりCに慣れてないのでわなかろおか
462デフォルトの名無しさん:2005/08/29(月) 22:42:47
一応ソース書き直しましたが、行ったり来たり行ったり来たりするだけで
一向に前に進む気配がありません。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/884.txt
一応、うpしておきます。マリオの動きや判断する関数はいじってないからこれで動くはずだと思ったんですが。
はあ.....。質問者の人はいったいいずこへ。
463デフォルトの名無しさん:2005/08/29(月) 22:59:58
>>453
とりあえずやってみた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/886.txt

・・・けど、元のソースを思いっきり改造してしまったw
というわけで、動くには動くけど、参考にはならんと思う。

あと、元のプログラム、探索処理にバグあるような気がする。
行き止まりにぶつかった時の挙動がものすごく怪しい。
面倒なので見てないが、decide_action()あたりを見直す必要があるかと。

464462:2005/08/29(月) 23:12:06
いやなバグを作ってしまっていました...。
これで一応動きます。
なんだか (i, j) ではなく (j, i) のような感じになっているようですね。転置行列みたいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/887.txt
465447:2005/08/30(火) 00:51:16
すいません。自己解決いたしました。
お騒がせいたしました。
466デフォルトの名無しさん:2005/08/30(火) 02:35:51
>>465
自己解決野郎は後を立たないな。テンプレを使わずにあほな質問して「お騒がせ」することより、
どう解決したかも書かないで勝手に自己解決することが一番失礼だぞ。
467デフォルトの名無しさん:2005/08/30(火) 03:47:29
>>466
自己解決というと、ちょうどオナニーしてスッキリしたようなものか。
本人は気持ちいいかもしれんが、他の人がイライラする。
468デフォルトの名無しさん:2005/08/30(火) 14:18:14
>>467
質問者がおにゃのこならそれでもOK
469デフォルトの名無しさん:2005/08/30(火) 16:35:31
[1] 授業単元:C言語
[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
お願いします。
470デフォルトの名無しさん:2005/08/30(火) 16:36:40
sage忘れました、ごめん
471デフォルトの名無しさん:2005/08/30(火) 17:47:18
>>469
ほんとに何もわからないの?

今の時期にコレやってるという事は
4月からCを勉強してるんだろうけど
それで全然わからない、ってのはマズイよ?

宿題丸投げするのもいいけど、
最低限、作ってもらったプログラムを
自分で理解するくらいのことはしような。
わからない部分は質問してくれれば答えるからさ。

というわけで、
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/888.txt
472デフォルトの名無しさん:2005/08/30(火) 18:10:37
そういうツッコミは問題がハチャメチャだったり、
確認を取ったときに応答がヘンだったときに使うとよろしい>471

473デフォルトの名無しさん:2005/08/30(火) 18:11:10
あ゛。答えつきか。すまん。
474デフォルトの名無しさん:2005/08/30(火) 18:21:16
ここまでソース作って出さないのももったいないので一応うpしておきます。
というより、大学の授業にはきちんと出たほうがいいです。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/889.txt
475デフォルトの名無しさん:2005/08/30(火) 18:55:35
絶対こいつらソースそのまま提出だろうな。
476デフォルトの名無しさん:2005/08/30(火) 19:02:30
いいんじゃない?<ソースそのまま

てか、uploader使うのがイヤンなんで、プログラム圧縮装置を作成中。
いや、単に改行減らすだけなんだがね。
動くけど、「なんじゃこりゃー」なソースになるだろうと。
(どうせ、indentで綺麗にできるし)
477デフォルトの名無しさん:2005/08/30(火) 19:04:55
>>476
逆に無駄なコードをたくさん入れるのもいいかもね。
それか、思いっきりトリッキーなコーディングをするとか。
アセンブラで組むのもアリかも。
478デフォルトの名無しさん:2005/08/30(火) 19:27:40
ユーザー定義の識別子をl(エル)と1(イチ)の連続にするってのはどおだ?
識別子にID振って、lをイチ、1をゼロとする2進法で命名するとか。
479デフォルトの名無しさん:2005/08/30(火) 19:31:20
>>478
さらにソースを画像でうpすれば完璧だね
480デフォルトの名無しさん:2005/08/30(火) 19:49:00
>>475
だから、一箇所だけ一目でわかる罠を仕掛けるのさ
481デフォルトの名無しさん:2005/08/30(火) 19:55:04
しっかりと授業に出てて、よく考えて自分なりにソースを作ってみてそれでもわからないというのでなければいいけど、
いや、授業出ていればわかるだろみたいな子にはそれくらい必要かも。
482デフォルトの名無しさん:2005/08/30(火) 19:55:56
「なければ」じゃなくて「あれば」だった...。
483デフォルトの名無しさん:2005/08/30(火) 19:58:14
>>469で出てる課題+αの物体を、ちょっと前に統計学の試験用に作った俺ガイル
ってかあれが出来ないって、授業全く出てないorどうしようもないほど
プログラミングに向いてないかのどっちかだろ
484デフォルトの名無しさん:2005/08/30(火) 20:05:10
290です。何度も申し訳ございません。
[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] その他の制限:

問題文ではなく口頭で言われたので、言葉足らずのところがあると思いますが、
よろしくお願いいたします。

485デフォルトの名無しさん:2005/08/30(火) 20:12:07
自分でまずはソース書いて見れ。
486デフォルトの名無しさん: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などは習いましたが行単位の書き込みはまだです。
487デフォルトの名無しさん:2005/08/30(火) 20:28:16
>>486
ソース書いてる暇無いのでヒントだけ

FILEについて習ったなら知ってるとは思うが
・行単位の読み込み: fgets
・行単位の書き込み: fputs
・EOFの判定: feof
これらを使っちゃいけないというなら
fgetcで改行コード(\n)を調べないといけないな。
488デフォルトの名無しさん:2005/08/30(火) 21:11:32
>>486
fgetsでファイルを一行ずつ読みながらtempファイルに全部書いていって、
そのtempファイルから一行ずつ読んで書き込んでいって、
指定した行になったら指定した文字列を書き込んで、またtempファイル
から続きを読んで書けばいい。
489デフォルトの名無しさん:2005/08/30(火) 21:46:39
>>486
一行のデータを保持する線形リスト作るという手間の掛かる方法が思いついた
490デフォルトの名無しさん:2005/08/30(火) 22:00:49
>>487
>>488
出来ました。ヒント有難う御座いました。
tempファイルを削除するとか処理が大変なのでtempの変数を作ってやりました。
ファイルが重いほど保存が遅くなりそうです。
491デフォルトの名無しさん: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
492デフォルトの名無しさん:2005/08/31(水) 00:51:09
問1

先頭4バイトが1レコードのデータ長。5バイト目からはデータがデータ長分データが存在する。
さらにレコードを識別するためにデータの後に2バイトのPAD(00 00)が付与される。以下にサンプル
データを示す。

00 0A 01 02 03 04 05 06 07 08 09 10 00 00
00 0B ....

特定のバイト列 0xFABACDEEFAがレコードに存在するか調べるにはどのようにすればいいのか
実際にプログラムを作成し考えてみよ。

これってどうすれば高速に実現できますか?

493デフォルトの名無しさん:2005/08/31(水) 00:51:46
先頭2バイトの間違えでしたすいません
494デフォルトの名無しさん:2005/08/31(水) 00:53:31
>>492
先ずは動くものを作り、その振る舞いを見ながらリファクタリングを行なう。
495デフォルトの名無しさん:2005/08/31(水) 00:56:02
>>491
ヒストグラムをグラフィックでということなら、グラフィックはCには標準で
用意されていないので、答えようがない。もっと具体的に、このような環境で
動けばよい、と指定すればレスが付くだろうけど。
496491:2005/08/31(水) 01:03:33
>>495
レスありがとうございます。
ヒストグラムは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
497デフォルトの名無しさん:2005/08/31(水) 01:06:14
>>491
向こうにも質問が出てるから、こっちでいいから纏めて回答してくれ。
データは4列固定か?
ヒストグラムは4本作るって事でいいのか?
「実際のグラフはGnuPlotに描かせるからそのためのデータを出力する」ということでいいのか?
498デフォルトの名無しさん:2005/08/31(水) 01:10:08
>>496
34
45
67
100って各列の数字を足した数?
499491:2005/08/31(水) 01:13:55
>>497
34.17847854の小数点8桁の値です。
データは4列固定です。
ヒストグラムも4本でオッケーです。

>「実際のグラフはGnuPlotに描かせるからそのためのデータを出力する」ということでいいのか?
はい、この通りです!

拙い説明なのに、ここまで理解して頂いてありがたいです。。。
500491:2005/08/31(水) 01:16:09
>>498
1の値が34個
2の値が45個



あるという意味です。
分かりにくくてすいません
501デフォルトの名無しさん:2005/08/31(水) 01:25:38
>>500
こんな感じ?
#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;
}
502デフォルトの名無しさん:2005/08/31(水) 01:32:28
聞くほうも聞くほうなら、回答する方も回答する方だな。
503491:2005/08/31(水) 01:33:29
>>501
大変ありがとうございますm(_ _)m
大学でしかデータ処理が出来ないので、結果がすぐに出せないのが残念ですが
明日中に必ず報告します。
504デフォルトの名無しさん:2005/08/31(水) 01:33:37
>>502
どっか変?
505491:2005/08/31(水) 01:35:03
プログラム見ても構造体とか習っていないので、
何書いてあるかサッパリですね(^^;)
506デフォルトの名無しさん:2005/08/31(水) 01:36:20
構造体なんて一つも使ってないけど。
507デフォルトの名無しさん:2005/08/31(水) 01:37:05
一つ使ってたか。FILE
508デフォルトの名無しさん:2005/08/31(水) 02:51:56
>>504
使用の遣り取りしてたの読んでないの?
#いや、読んでいてその程度しか理解できてないなら私の言うべきことは何もないから。
509デフォルトの名無しさん:2005/08/31(水) 02:56:15
む、使用ではない。仕様だ……
510デフォルトの名無しさん:2005/08/31(水) 03:00:25
うん。適当にしか読んでない。
511デフォルトの名無しさん:2005/08/31(水) 04:03:29
>492
力任せの方法とかKMP法とかBM法とか
文字列のサーチあたりでぐぐれ。
俺ならソース持ってきて、整形しなおして提出する。
512デフォルトの名無しさん:2005/08/31(水) 20:23:37
しかし、質問投げっぱなしで
回答が出てもレスしないってのは失礼だよな。
近いところだと>>453とか>>469とか。
まあ、こっちも適当にやってるわけだが。

やっぱり次からは回答に何かしら小細工しておいた方がいいかな?
513デフォルトの名無しさん:2005/08/31(水) 20:26:20
まあ、そういうのには小細工は必要だと思うよ。
514デフォルトの名無しさん:2005/08/31(水) 20:35:41
484をお願いします。
515デフォルトの名無しさん:2005/08/31(水) 20:42:24
だからソースを書けよ。プログラミング演習でCのソースが書けなくてどうすんの?
516デフォルトの名無しさん:2005/08/31(水) 20:49:17
まあまあ。落ち着いてスルー。
517453:2005/08/31(水) 22:48:13
おかげさまで完成させることができました。
ありがとうございました。

なお、決して投げっぱなしにしているわけではないので、悪しからず。
518デフォルトの名無しさん:2005/08/31(水) 22:58:16
>>514 = >>484
前にRGBαのヒストグラムを取るプログラムを作ったよな?
まずはアレを修正して、自分なりに作ったものを上げてくれ。
まともに動かなくてもいいから。
そしたら、そのソースを元にこっちで修正するなり、
ヒントを出したりするからさ。
519デフォルトの名無しさん:2005/08/31(水) 23:07:15
たぶん>>484はコンパイルが精一杯だと思うんだけど。
520デフォルトの名無しさん:2005/09/01(木) 00:58:03
まあ、アレだ。

・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
521デフォルトの名無しさん:2005/09/01(木) 08:54:46
484です
自分でやってみたうえでそのソースをアップしようと思います

すいませんでした
522デフォルトの名無しさん:2005/09/01(木) 09:01:38
なんかよくわからんが添削なんて誰もしたくないと思うぞ
523デフォルトの名無しさん:2005/09/01(木) 09:04:03
まあ、ものは試しだよ。
524デフォルトの名無しさん:2005/09/01(木) 10:25:55
俺、どーしょーもないプログラムみると(マジで)吐き気がするんだが・・・
525デフォルトの名無しさん:2005/09/01(木) 10:28:09
>>524
毎日自分の書いたプログラム見て吐いてるのが
大変だな
526デフォルトの名無しさん:2005/09/01(木) 10:39:03
あー。それもやるな。<自分のコードに吐き気
寝ぼけてデバッグしたのなんか、そうだ。
527デフォルトの名無しさん:2005/09/01(木) 10:51:24
嫌味を華麗にかわされてちょっと悲しい漏れが去りますよ
528デフォルトの名無しさん:2005/09/01(木) 22:04:57
赤黒木を実装せよってな問題が出たんですが、
ノードの削除がよくわからず死んでます。
・・・ノードに削除フラグつけるだけじゃダメでしょーか。
529デフォルトの名無しさん:2005/09/01(木) 22:21:30
530デフォルトの名無しさん:2005/09/01(木) 22:34:16
[1] 授業単元: アルゴリズムII
[2] 問題文(含コード&リンク):
赤黒木を実装せよ
[3] 環境
 [3.1] OS: SunOS
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2005年09月08日08:00
[5] その他の制限:
531デフォルトの名無しさん:2005/09/01(木) 22:37:24
>>530
せめて自分がどこまでやって、どこのコーディングで詰まってるのかぐらい
ソースだしたらどうよ?
532デフォルトの名無しさん:2005/09/01(木) 22:42:32
流れを見て、添削より丸投げのほうがいいのかなと。
ソース出したほうがいいのしょうか?
533デフォルトの名無しさん:2005/09/02(金) 00:15:47
独学で詰まってしまったので教えてください。
[問題]
木星の衛星
Io 5 1.1763 //衛星名、光度、周期
Europe 6 3.5512 //衛星名、光度、周期
Ganymede 5 7.1454 //衛星名、光度、周期
Callisto 6 16.6890 //衛星名、光度、周期
を構造体にいれ、周期をキーにソートして下さい。
また、データのスワップに別のインデックスを使用して
ソートはインデックスを使って行います。
534デフォルトの名無しさん:2005/09/02(金) 00:24:23
typedef struct satelite {
char *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 ;
}

535デフォルトの名無しさん:2005/09/02(金) 00:26:58
>>533
別に構造体の配列作って、周期を基準にして大小返す関数作って
qsort()使えば済む話の気がしないでもないが
536534:2005/09/02(金) 00:29:08
display(jupiter);

return 0;
}

void display(sturct jupiter)
{
int i;
for(i = 0; i < 4; ++i){
printf("%10s %3d %8.4f\n" );
}
}
537デフォルトの名無しさん:2005/09/02(金) 00:34:16
ソートはバブルソートをしなくてはいけないのです。
534は普通に周期をキーにバブルソートをしたものです。
これに構造体indexを使い、index内の添え字をソートして
その指す値がsatelliteになるようです。
index[1] の指す値がsatellite[0]であるといった内容です。
538デフォルトの名無しさん:2005/09/02(金) 00:40:45
あー……出したもんは動くのか?
539デフォルトの名無しさん:2005/09/02(金) 00:43:34
なんかお前のなかで型名と変数名が
ごっちゃになってるような印象を受ける
540デフォルトの名無しさん:2005/09/02(金) 00:47:45
出したものは動きます。

>>539
確かにごっちゃになっているかもしれません。
良かったらご教授ください。
541デフォルトの名無しさん:2005/09/02(金) 00:49:34
上のコード内だと
satellite が型名で jupiter が変数名だと思って書いています。
main関数内でjupiterを宣言した時にメモリに領域が確保されていると
思っているのですが、間違っていますか?
542デフォルトの名無しさん:2005/09/02(金) 00:58:32
釣りは別のところでな。>541
foo.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: 警告: フォーマットへの引数が少なすぎます
543デフォルトの名無しさん:2005/09/02(金) 01:02:15
すいません、本当に釣りでは無いんです。
まだ始めたばかりで悩んでいます。
VC++でビルドしたら実行出来たので、実行できると思っていました。
544デフォルトの名無しさん:2005/09/02(金) 01:02:56
ちなみにdisplay関数はmainの上で宣言してます。
545デフォルトの名無しさん:2005/09/02(金) 01:05:13
546デフォルトの名無しさん:2005/09/02(金) 01:07:14
>>543
じゃあその実行できたコードをそのまま晒せ
547デフォルトの名無しさん:2005/09/02(金) 01:22:32
とりあえず>>537のに従って書いてみた
gcc -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];
}
548547(続き):2005/09/02(金) 01:23:23
/* bubble sort */
for (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;
}

書いててなんでこんな無駄なことしてるんだろうと思った
549デフォルトの名無しさん:2005/09/02(金) 01:26:07
マジで無駄だな
つか、データがこんなに少なくて固定なら
あらかじめソートしとけばいいじゃん
550デフォルトの名無しさん:2005/09/02(金) 01:30:53
>>549
まぁそう怒らず、元のデータみてみれ
綺麗にソートされてるから('A`)

ってか本当に何がしたいんだ?
551デフォルトの名無しさん: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] その他の制限:

552デフォルトの名無しさん:2005/09/02(金) 01:49:55
最長不倒関数ってコトバが頭によぎった。
553デフォルトの名無しさん:2005/09/02(金) 02:03:09
俺は添削はパス。
添削好きな>531の出番ですよ。
554デフォルトの名無しさん:2005/09/02(金) 03:36:15
typedef
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なんて関係ないし。
555デフォルトの名無しさん:2005/09/02(金) 03:44:26
おお、感動した。ついでに>551のながったらしいmainも切ってくれ。
俺は理解できんかった。
556デフォルトの名無しさん:2005/09/02(金) 03:55:30
>>554
C++行ったら++iって書かんといかんようになるんだから別にいいじゃん。
557デフォルトの名無しさん:2005/09/02(金) 04:07:57
>>556
4 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
558デフォルトの名無しさん:2005/09/02(金) 04:13:29
>>557
素朴な疑問なんだが、>556に対して>557でなにを指摘したいんだ?
C++では何故前置にしなくてはいけないか理解できないなら黙ってた方が可愛げがあるってもんだよ。
559デフォルトの名無しさん:2005/09/02(金) 04:19:04
C++では前置++より後置++の方がコストがかかることが多いので、
前置でも後置でも良い場合は前置にする習慣があります。

という答えなら何点もらえますか?
560デフォルトの名無しさん:2005/09/02(金) 04:37:24
初級C言語Q&A

不定と未定義
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html

C言語の自習・学習
http://www.brs.kyushu-u.ac.jp/~hamada/CLang/CLangtitle.htm
561554:2005/09/02(金) 05:29:40
>>551
カウンタがいっぱいでよく分かりませんでした。
ところどころにコメント入れてもらえれば読みやすいと思います。
自作関数呼び出し、ループとコメントを抽出してフローチャートになるくらいに。

>>558
C++で後置きのサンプルです。
なぜとか愚問です。シビアな判断が必要なものは避ければいいんです。
562デフォルトの名無しさん:2005/09/02(金) 05:52:43
組み込み型でのインクリメントなんだし、どっちでも同じじゃねーか
563デフォルトの名無しさん:2005/09/02(金) 05:55:10
まあ将来的にC++を使うつもりがあるなら、
どちらでもいい場合には前置を使う癖をつけておいてもいいと思うけどね。
564デフォルトの名無しさん:2005/09/02(金) 06:34:24
ここは宿題スレ。
565デフォルトの名無しさん:2005/09/02(金) 11:39:15
宿題すれだからこそ、前置インクリメントに文句言う方が蛸。
566デフォルトの名無しさん:2005/09/02(金) 13:26:56
551です
私はどこを直せばいいのでしょうか?
よろしくお願いいたします
567デフォルトの名無しさん:2005/09/02(金) 16:35:29
>>566
568デフォルトの名無しさん:2005/09/02(金) 16:53:02
デバッグスレに行けば?
569デフォルトの名無しさん:2005/09/02(金) 17:01:19
>>566
ベクトル量子化なんてやったことないけど、
とりあえずソース眺めてる。

以下、コーディング上修正すべき点
・ファイル開いたらちゃんと閉じろ
・メモリ確保したらちゃんと解放しろ
・使わない変数や処理を入れるな。
・main関数長すぎ。もうちょっと機能別に分割しろ。
・ちゃんとコメントつけろ。何やってるのかわからん

暇があったら添削したソース上げるわ。
570デフォルトの名無しさん:2005/09/02(金) 17:14:40
>>566
機能ごとの関数分けはまぁいいとして(できればしてくれ)、
せめてコメント付けてくれんか

めっさ読み辛い
571569:2005/09/02(金) 17:25:41
テストデータ作って動かしてみたが、
ありえないインデックス値が入ってるような・・・
生成されたコードブックの検証はしたのだろうか

とりあえず、以下について言葉で説明してくれ
・ソース中の配列indexの意味と使われ方
・コードブックに無いベクトルに対しての処理 (ソース中で何をやってるか)
なんとなく、この辺が癌になってる気がする
572デフォルトの名無しさん:2005/09/02(金) 18:10:11
>>569
>>570
すみません。
かなり急いでいたため、こうなってしまいました。

>>571
indexについてですが、コードブック中のRGBをあらわしています
コードブックに無いベクトルは一番近い値をコードブックから探してきています。

>生成されたコードブックの検証はしたのだろうか
gcc ----.c
./a.out 処理したいファイル名 コードブック名
でコードブックが現れます。
確認したところおそらくはコードブックは問題ないと思います。
573デフォルトの名無しさん:2005/09/02(金) 18:15:01
コードブックに無いベクトルについては
読み込まれるRGBをR,G,B別々に考えて、コードブック中のRGBとの差をそれぞれ求めて
その値が一番小さなコードブック中のベクトルの番号で置き換えています。
574デフォルトの名無しさん:2005/09/02(金) 18:23:57
自分のプログラムだとαに255を入れているつもりが
Rに255がはいっちゃってて
直してるつもりでも直らなかったです
575デフォルトの名無しさん:2005/09/02(金) 18:48:50
>>574
getval()はαBGRの順で読んでるみたいなので
その順序を直せばOK
576デフォルトの名無しさん:2005/09/02(金) 19:03:20
>>575
ありがとうございます
やってみましたがだめでした
ファイルの中身を十進法で見てみると
A B C 255 となっていて 255を一番前にもっていきたくって (255 A B C)
シフトなどを使ってみたのですが自分ではできませんでした。
577554:2005/09/02(金) 20:38:02
悪かったよ。
ループに影響すると思ってたんだよ。

けど、>>556
>++iって書かんといかん
ていう間違いもだめだろ。

あと、>>551 のソースの問題点分かったよ。
そもそもみんな正しい処理を分かってないから、
それぞれどういう目的でそういうコーディングしてるか書かないと、
間違いだと言う判断ができない。
578デフォルトの名無しさん:2005/09/02(金) 20:49:39
>>577
RGBαであらわされた画像データを読み込みます
次にRGBαをひとつのベクトルとします。
で、出現頻度の高いRGBαをコードブックに書き出し、出現頻度の高い順に256個
選びました。
次に符号化するために、画像データを読みこんで もし同じ値がコードブックにあれば
その番号をふってやります。なかったら一番近いベクトルを選びます
選び方として それぞれのR、G,Bを引いてから足し合わせその数の一番少ないベクトルが
一番近いベクトルとみなされ、その番号をふってやります
複合化はその逆で、番号を見て、番号のベクトルをふってやります

αは0か255だったので最初省きました。RGBが値を持てば255それ以外は0です。
メモリの関係から省きました。
ですので複合化するときにαを足し加えたつもりです。
で、リトルエディアンだから逆に処理したりしたつもりだったのですが
頭がこんがらがってきて、結果を見てみるとαの位置が逆になったりしていました
わかりづらいとはおもいますがよろしくお願いいたします
579デフォルトの名無しさん:2005/09/02(金) 20:59:58
>>578
質問とは関係なくて悪いんだけど、せっかくベクトルで処理してるなら
内積を使って一番近いベクトルを探した方がいいんじゃまいか?
580デフォルトの名無しさん:2005/09/02(金) 21:02:10
>>578
最終的な出力データの形式は?

1)入力と同じRGBα形式:32bit

2)コードブック(RGBα:32bit)*256+インデックス値(8bit*画素数)
 ※コードブックサイズが256のとき

3)その他
581デフォルトの名無しさん:2005/09/02(金) 21:12:51
>>579
私のプログラムのやり方があっているかはわかりません。
そっちのほうがいいのかもよくわからないのです。
>>580
最終的な出力データ形式は
本来ならば符号化したデータ (256のコードブックを使っているのならば読み込ませたデータRGBα
の1/4)と、複合化したデータ(コードブックを参照して、複合化するRGBαで)と、コードブックを出力したいのですが
私の作ったプログラムですと符号化したデータはでていません。複合化したデータは出したつもりです。

1)は複合化したものと考えられますよね?
2)は符号化したものとコードブックということですよね?
582デフォルトの名無しさん:2005/09/02(金) 21:16:19
実際処理させたいファイルをアップしたほうがいいでしょうか?
583580:2005/09/02(金) 21:28:47
質問の仕方がちょっと曖昧だったけど
ちゃんと解釈してくれたようなので安心

最終的には量子化圧縮したものを出したいけど
今はまだやってないってことだね。

>実際処理させたいファイルをアップしたほうがいいでしょうか
結果を照合できるからアップした方がいいと思う
584デフォルトの名無しさん:2005/09/02(金) 21:43:02
>>583
ありがとうございます
最終的には上に上げた符号化、複合化、コードブックをだしたいのですが
最悪でも複合化したものを出してソフトを使って表示させたいです。
自分のプログラムで表示させると明らかにおかしい画像になりました。

897にあげておきました
よろしくおねがいいたします
585デフォルトの名無しさん:2005/09/02(金) 22:58:29
>>584
元データにやたら0x00が含まれてる件について
586デフォルトの名無しさん:2005/09/02(金) 23:06:48
>>585
それについては正しいです
0ボクセルが多いのが特徴のデータですので
587デフォルトの名無しさん:2005/09/03(土) 00:10:53
どういう動作を求めているかわからないので
・プログラムの起動法(引数の説明やね)
・プログラムが読み書きするファイルの説明

どういうファイル形式かわからないので、
・元データの形式
・コードブック、符号データの形式(複数あるなら、それぞれ)

説明いれとくと、元データの形式だけど、4バイトYUVだったら、マイナスの表現を2の補数でしてるか、
下駄を履かせて最小値を0にしてるか。(これはユークリッド距離を求めるのに必要)
3バイトYUVだったらバイトの並びと、ビットの配置が必要になる。
入力データがRGBでYUVに変換するんだったら、変換式が必要ね。

コードブックは予想がつくんだけど、念のため。

符号データに関してはバイトをまたがるビット列になるので、その配置がわからんとどうしようもない。
588デフォルトの名無しさん:2005/09/03(土) 00:50:13
>>587
プログラムの起動方はどうのような形でもかまいません。
元データの形式はαRGBなのですが、私の環境ではBGRαそれぞれ1バイトで
計4バイトです。
YUVにしてベクトル量子化もしたいのですがまずはRGBでやりたいとおもっております
589デフォルトの名無しさん:2005/09/03(土) 00:52:02
いや。こちらが決めると「やっぱ直して」って言われるから、あなたが決めて。
590デフォルトの名無しさん:2005/09/03(土) 00:54:32
#include <stdio.h>

int main(void)
{
int i;
for(i =0; i < 10; i++){
printf("**********\n" + i)
}
}
このiがどういう作用をしているか教えてください。
591デフォルトの名無しさん:2005/09/03(土) 00:56:28
>>589
すみません。わかりました。
できれば符号化と複合化のプログラムを分けてもらいたいです
起動方法は、
./a.out  ベクトル量子化したいファイル  そのファイルのコードブック 符号化されたデータ
./a.out 符号化されたデータ  コードブック 複合化されたデータ
でお願いいたします。
複合化と符号化わけるのがだめというのであれば
./a.out ベクトル量子化したいファイル  そのファイルのコードブック 符号化データ 複合化データ
でお願いいたします
  
592デフォルトの名無しさん:2005/09/03(土) 01:03:36
>>590
#include <stdio.h>
int main(void)
{
static char a[10] = {'*','*','*','*','*','*','*','*','*','\n'};
int i;
for(i =0; i < 10; i++)
{
       printf(a + i) ;
}

return 0;
}
これと等価だと思えばいい。
593デフォルトの名無しさん:2005/09/03(土) 01:08:19
>590 あ、>591上手な説明だ。

RGBだけ対象で、コードの種類は256個限定?>591
594デフォルトの名無しさん:2005/09/03(土) 01:09:35
リンクミスった。寝よう。
595569:2005/09/03(土) 01:13:31
>>551
添削するのめんどいので組みなおしてみた。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/898.txt

とりあえず動作確認はしたが、結果が正しいかどうかまではわからん。
少なくとも、コードブックはちゃんと作れているみたい。

以下補足
・ヒストグラムを構造体のリンクリスト(単方向)にすることでサイズ軽減&高速化
・アルファチャンネルの補正はしていない
・RGBαのバイトオーダーはenumで指定
・ユークリッド距離の計算は適当
・使い方
  % [実行ファイル名] [画像ファイル]
  出力されるファイル
     - histgram.txt: ヒストグラム
     - codebook.raw: コードブック
     - encode.raw: 符号化データ
     - decoderaw: 復号化データ

疲れたのでもう寝ます。あとは任せたノシ
596デフォルトの名無しさん:2005/09/03(土) 01:14:44
>>593
RGBだけ対象で問題ありませんが、複合化するときにRGBがすべて0ならαも0
そうでなれけば255をいれるようにしなくてはなりません。
コードの種類は256限定ではなく512、1024もつくれるようにしたいです。
597デフォルトの名無しさん:2005/09/03(土) 01:16:15
>>595
ありがとうございます
確認してみます
本当にありがとうございます
598デフォルトの名無しさん:2005/09/03(土) 01:16:38
って、コマンド仕様出てたのね・・・
直す気力が無いのでこのまま寝ます。
599デフォルトの名無しさん:2005/09/03(土) 01:20:27
595をgccでコンパイルしようとすると
/tmp/cc666b8D.o: In function `get_color_diff':
/tmp/cc666b8D.o(.text+0x408): undefined reference to
`sqrt'
collect2: ld returned 1 exit status
というメッセージがでてきました
どうしたらよいでしょうか?
600デフォルトの名無しさん:2005/09/03(土) 01:20:30
>>592
それだと落ちますが。つーか、スレ違いなんだからレスすんなと。
601595:2005/09/03(土) 01:22:54
>>599
中で<math.h>をインクルードしてるので
% gcc -lm xxx.c でOK
602デフォルトの名無しさん:2005/09/03(土) 01:23:48
>>590
*じゃなくて文字でやってみると効果がわかりやすいかもしれません。
文字じゃなくても違う配列に格納するものを変えてみるとか。
603デフォルトの名無しさん:2005/09/03(土) 01:24:01
>596 コードの種類は256限定ではなく512、1024もつくれるようにしたいです。

ビットの並びを定義しましょう。
604デフォルトの名無しさん:2005/09/03(土) 01:24:09
>>601
すいません
数学関数?ですね ありがとうございます
大変助かります
605デフォルトの名無しさん:2005/09/03(土) 01:30:52
>>595
ありがとうございます。
ツールを使って画像を見ましたが、私のプログラムに比べて断然よくなておりました
少し木になったのですがエンコードサイズがデコードサイズと同じというのは圧縮という面では
少し違ってる?のかなと感じました。コードブックサイズは256ですので本来ならば
ちょうど1/4になると思いました。

本当にありがとうございます
匿名掲示板ですが本当にありがとうございます
連絡先聞いて御礼したいくらいです。ありがとうございます
606デフォルトの名無しさん:2005/09/03(土) 01:31:47
>>603
ビットの並びの定義というのはどういったものなんでしょうか?
無知ですみません。
607デフォルトの名無しさん:2005/09/03(土) 01:49:51
コードの数が512のとき、次コード列があったら、復号データファイルはどんなバイト列になって欲しいですか?
コード列(10進数) 1 3 7 15 31 63 127 255 511
608デフォルトの名無しさん:2005/09/03(土) 01:57:35
>607 もういいじゃん。
>605で終わってるのだから。
609デフォルトの名無しさん:2005/09/03(土) 02:12:54
>>607
複合データファイルはバイナリでRGBαそれぞれ一バイトのバイト列になってほしいです
これで答えになっているでしょうか?
610デフォルトの名無しさん:2005/09/03(土) 02:28:04
コードブックのサイズを変えたい場合は単純に
#define CODEBOOK_SIZE 256
の256を1024などにすればいいとおもうのですが

これを例えば画像の存在しうるベクトル数と同じ数(10000など)にすればまったく同じ画像に
再生されるはずなのですが、明らかに同じ画像に再生されませんでした。
同じベクトルがあればそのインデックスを振り当てるというふうにプログラム内部でなっているのに



色々してもらって本当に感謝しています。
もしよかったらどこを変えたらいいのか教えていただけないでしょうか
611595:2005/09/03(土) 02:40:27
>>605
いや、連絡先は勘弁してくれ・・・

コードブックサイズは256*4バイト。
エンコードサイズは画素数*1バイトで、データ部だけ見れば1/4。

データ中にコードブックを持たせると
その分だけサイズが大きくなるが、画像データが大きくなればなるほど
データ中のコードブックサイズの比率が小さくなる。

コードブックをシステム標準パレットみたく、外部固定にできれば
データにコードブックを付ける必要がなくなり、完全に1/4になるね
612デフォルトの名無しさん:2005/09/03(土) 02:45:17
>>611
なるほど。ありがとうございます。
610について少々お知恵を拝借させていただけませんか。
613デフォルトの名無しさん:2005/09/03(土) 03:03:21
あー。あとで修正するのが嫌なので、先に聞いておこう。
>>595 のプログラムを512,1024にも対応するだけで終わり?
614デフォルトの名無しさん:2005/09/03(土) 03:13:30
>>613
ありがとうございます。
595さんのを512、1024にも対応させたいです。できれば512などのサイズは
あとで簡単に変えられるようにもしできればしていただきたいです。
あと最初にアップした問題にも書いてあるように、
RGBαをYUVα(それぞれ1バイト)にしてベクトル量子化を施すというのと
RGBαをYUVα(Yを8ビット、U,Vを2ビットずつ、αを4ビット、計2バイト)にして
ベクトル量子化をするのをしたいです。
YUVαそれぞれ1バイトできるとはおもうのですが後者(計2バイト)のは少し難しそうです。
これについてもコードブックサイズを256、512、1024などを作りたいです。
長々とすみません
615595:2005/09/03(土) 03:33:28
>>610
あー・・・
えっと、今のプログラムだとコードブックのインデックスの範囲が
8bit(0〜255)固定になってるので、define以外にそこも直さないとダメ。

ソースで言うと変数enc_data、enc_data_ptr、あとはfwrite()の第二引数。
fwrite()は各要素ごとに出力するようにしないと対応できないか。

修正方針としては
・ソース内部ではenc_dataの要素を16 or 32bitにする(それを参照するポインタの型も)。

・コマンドライン引数でコードブックサイズを取得し、cb_sizeに格納
 文字列の判別は"256"、"512"、"1024"を直接比較でいいんじゃないかと。

・データ出力時に、コードブックサイズに応じて、各インデックス値を
 8bit/16bitのいずれかで出力

こんなとこかな。
漏れがあったら誰か指摘よろ。

あと、俺のはエンコード/デコードでプログラム分かれてないんだけど、いいのかな?
>>595をベースにするのは構わんけど、ちゃんと中身を理解してな。
616デフォルトの名無しさん:2005/09/03(土) 03:37:21
>>615
ありがとうございます
正直先輩のソースは難しくて理解するのは大変な時間がかかりそうです
提出期限がもう終わってますがなんとかしたいとおもいます
ありがとうございます
617デフォルトの名無しさん:2005/09/03(土) 03:47:28
>>615
>あと、俺のはエンコード/デコードでプログラム分かれてないんだけど、いいのかな?
欲を言うと分かれているほうがいいです
618デフォルトの名無しさん:2005/09/03(土) 03:53:13
意訳:
新しく作り直してください。
細かいことを聴かれても答えません。アナタが作ってください。
気に入らなかったらまた作ってもらいます。
619595:2005/09/03(土) 04:03:14
>>618
え、ちょ、おまwwww
って、俺はやらんぞ。>>617か他の暇人よろ。
あと、
つ [後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です]
作った後の仕様変更は結構コストかかるのよ。バグの温床にもなるし。
だから>>613みたいに事前に確認を取るわけ。
620デフォルトの名無しさん:2005/09/03(土) 04:12:04
>619 乙
400行のソースだけれど・・・元のプログラムの理解と修正コード作成で何時間ぐらいかかった?
621595:2005/09/03(土) 04:36:34
>>620
乙あり。

(>>569の1時間くらい前から>>595までの時間)−休憩等 = 7時間くらい
以下内訳
・解読        : 2時間
・添削→マンドクサ  : 1時間
・組みなおし    : 4時間

解読とコード作成はほぼ同時進行でやってたから正確じゃないかも。
622デフォルトの名無しさん:2005/09/03(土) 04:56:47
1時間100行か。早いな<組みなおし
でも、やっぱ時間かかるよな。ホント、おつかれ。
623デフォルトの名無しさん:2005/09/03(土) 09:36:28
わがままいってもすみませんでした。
本当にありがとうございました。
がんばってみます
624デフォルトの名無しさん:2005/09/03(土) 15:17:15
いろいろ直してコードブックサイズを例えば10000にしたらほとんど復元されました
ありがとうございまいた。
625デフォルトの名無しさん:2005/09/03(土) 16:40:09
何度も申し訳ありません。
上位256ベクトルを見て〜 といっていましたが一番多いベクトルは0です。
ですが今回は0を除いて上位256にしてみたいのですがどうしたらいいのでしょうか?
付け加えるようですみません。
もしくは下位256にする方法でもかまいません
どうかよろしくお願いいたします

626デフォルトの名無しさん:2005/09/03(土) 16:55:05
すいません625は大変失礼なことでした

申し訳ございません
627デフォルトの名無しさん:2005/09/03(土) 17:23:24
628デフォルトの名無しさん:2005/09/03(土) 17:31:22
>>601
ライブラリの指定は最後にしないと駄目だよ。
629デフォルトの名無しさん:2005/09/03(土) 19:54:23
[1] 授業単元: プログラミング演習
[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] その他の制限: 何度も申し訳ありません。ベクトル量子化を依頼したものです



630デフォルトの名無しさん:2005/09/03(土) 20:42:44
>>629
符号化データを
[位置][RGBα][位置][RGBα]・・・としたいのはわかったけど

それだと0がほとんど無い画像を符号化したときに
サイズが2倍になるわけだが、>>629はそこまで考えてる?

あと、データの持ち方として、
struct ENCODE_DATA{
 unsigned int index;
 unsigned int voxel;
}
みたいな構造体で配列を作って、この構造体のサイズを使って
処理させたほうがすっきりしてわかりやすいと思う。
量子化するときは、構造体のvoxelメンバにアクセスさせるようにすれば、
わざわざデータを分割しなくてもいいんじゃないかな

と。思うわけだが、まあ参考程度に。今から直すのめんどいだろうし。
631デフォルトの名無しさん:2005/09/03(土) 20:56:39
>>630
[位置][RGBα][位置][RGBα]・・・
わかっていただいてありがとうございます
このような例を入れたほうがわかりやすいですね。参考になります

で、これは0が多いものい対して行っております。
0がほとんどなければサイズが二倍になるのはわかっております

今、インデックス情報とRGBαを合成させようとおもっておりますがどうもセグメンテーション違反が
でて苦戦しております
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/901.txt
これは ./a.out インデックス情報のみのでーた ボクセルのみのでーた 合体させたデータ
にしているつもりです
どうしてもわかりません・
632デフォルトの名無しさん:2005/09/03(土) 21:10:55
セグメンテーション違反の原因がわかりました
アウトバッファのメモリ確保の値を倍することで解決いたしました

ですが、インデックス情報とボクセルを合体させたものを複合化したいのですが
どうしても複合化できません。サイズが逆に小さくなってしまう・・・
633デフォルトの名無しさん:2005/09/03(土) 21:42:24
すみません、合体させるところもメモリの問題でした

595さんのソースで実行させてみると近いベクトルをとってきてほしいのに
明らかに違うものをとってきてしまうという上体になっています
ユークリッド距離のところは適当とおっしゃられていたのでそこらへんが
原因かなと考えておりますが、
634デフォルトの名無しさん:2005/09/03(土) 22:15:37
>>624でちゃんと動いてるってなら
>>595のソース自体は問題ないような気がする。
635デフォルトの名無しさん:2005/09/03(土) 22:22:53
どうも、一致しているベクトルだったらそれに置き換わるんですが
無い場合は一番近いベクトルを選ぶところを、一番近いものではなく
コードブックで一番上にあるベクトルにおきかえているようなきがします
(画像ツールで見た結果)

624でいったのは、コードブックサイズを増やせば完全に復元されるといういみで
例えばコードブックサイズが256なら一致する256ボクセル以外は0であらわされていました。
(0がコードブックで一番多い代表ベクトル)

なのでおそらくコードブックの中のベクトルで一致しなかったら
コードブックの一番上のベクトルに置き換えられているようです
どうやって直せばいいのでしょうか・・・やってはいるんですがどうも595さんのが
私には難しすぎて。・・・
636デフォルトの名無しさん:2005/09/03(土) 23:45:35
基本的なこと:C言語って学校で習った?
情報系の学科?
これ、宿題じゃなくて、ゼミの課題?
637デフォルトの名無しさん:2005/09/04(日) 00:13:39
>>627 ありがとうございます。
関数の中に関数って書けるんですね。勉強になります。
638デフォルトの名無しさん:2005/09/04(日) 00:18:38
>>637
関数内での関数定義は規格に無い。一部の処理系の拡張機能。
そしてgccのいくつかのバージョンはこの拡張にバグがある。
基本的には使うな。
639デフォルトの名無しさん:2005/09/04(日) 00:29:56
>629 起きてる?
位置の値が取る範囲は何?
640デフォルトの名無しさん:2005/09/04(日) 01:11:26
ふむ。寝てるようなので、方針。

・位置がとりうる範囲を確認する
・位置を表すのに必要なバイト数を求める(=nバイトとする)

・1バイト出力する捨てプログラムを書く
・nバイト出力する捨てプログラムを書く
・nバイトとボクセルだかベクトル量子化データだかを組で出力するプログラムを書く

・1バイト入力する捨てプログラムを書く
・nバイト入力する捨てプログラムを書く
・nバイトとボクセルだかベクトル量子化データだかを組で入力するプログラムを書く
641595 ◆AOMdbQiVo. :2005/09/04(日) 02:50:48
>>635
距離の比較のところにバグがあった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++;
  }
----------------
642デフォルトの名無しさん:2005/09/04(日) 05:03:00
[1] 授業単元:c言語中級
[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などの書式指定子で表示できないのです。
どうにかして表示したいので、知恵をお貸しください。
643デフォルトの名無しさん:2005/09/04(日) 05:19:08
ソースと実行結果は?
644デフォルトの名無しさん:2005/09/04(日) 05:27:29
>>642
ミリ秒で取得するから時、分、秒、ミリ秒は計算するんでしょ?
あと、日付と時間はそれぞれ取得すると思うけど。
645デフォルトの名無しさん:2005/09/04(日) 05:47:16
手取り足取り教えてもらえるところはここですか?
646デフォルトの名無しさん:2005/09/04(日) 05:54:59
宿題を晒したら暇人が勝手に答えるスレです。
647デフォルトの名無しさん:2005/09/04(日) 06:07:02
1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
問題1
memsetのような関数を高速化する方法のひとつに、バイト単位ではな
くワード単位で書き込みを実行する手法がある。このほうがハードウェ
アに合うだろうし、ループのオーバーヘッドも1/4ないし1/8に減少
する可能性がある。これの問題点は、ターゲットがワード境界上にな
い場合や長さがワードサイズの倍数でない場合に、さまざまな末端処
理を実行しなければならなくなる点だ。この最適化を実行するmemset
を記述せよ。その性能を、既存のライブラリバージョンや単純なバイ
ト単位でのループと比較せよ。
問題2
memsetのテスト機構を作成せよ。
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 特になしです
[5] その他の制限: 特になしです
648デフォルトの名無しさん:2005/09/04(日) 08:35:38
ベンダーが用意する関数が、そのような単純な最適化もされてないと思い込む根拠はなんなのだろう……
649デフォルトの名無しさん:2005/09/04(日) 08:51:51
ベンダーが用意する関数が、そのような単純な最適化もされてないとは書かれてないが?
650デフォルトの名無しさん:2005/09/04(日) 11:47:19
651650:2005/09/04(日) 12:11:14
ついでに自分の環境での計測結果(gcc -O3)
やはり処理系提供の関数は速いな。

memset 120
my_memset 230
my_memset_simple_loop 921
652デフォルトの名無しさん:2005/09/04(日) 12:21:43
>>642
solarisでやってみた。たぶん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;
}
653デフォルトの名無しさん:2005/09/04(日) 12:23:26
>>640
アドバイスありがとうございます

>>641
ありがとうございます
早速試してみました。
前のソースでは一致するものはそのままそのベクトルということだったのですが
今回のソースでは、一致するものすらまともにでませんでした。

i = 1に変えただけでなぜそうなるのかよくわかりません・・。
654デフォルトの名無しさん:2005/09/04(日) 13:04:00
[1] C言語プログラミング入門
[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”);
}
}
655デフォルトの名無しさん:2005/09/04(日) 13:43:15
まあpfintfなんて関数ないしいったいどこで読み込んでんだかわからんし。
つーか添削しないとまずいの?
1からのほうが楽。
656627:2005/09/04(日) 14:00:02
>>637
>>638
そのまま提出すると先生がモニョルかもね
ttp://oku.edu.mie-u.ac.jp/~okumura/pukiwiki/?cmd=read&page=2005-04-29&word=%B4%D8%BF%F4

ネストした関数を外に出すのは簡単だ。引数が増えるけど
バグがあるのは知らんかった
657デフォルトの名無しさん: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;
}
658657:2005/09/04(日) 14:03:36
誰宛か書き忘れてた >>654宛ね
659デフォルトの名無しさん:2005/09/04(日) 14:13:38
>>654
#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);
}
660デフォルトの名無しさん:2005/09/04(日) 14:14:10
正整数って書いてあったからunsignedで書いてみんとす
#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;
}
661デフォルトの名無しさん:2005/09/04(日) 14:15:48
>>654
#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;
}
662デフォルトの名無しさん:2005/09/04(日) 14:56:40
文字列を入力して偶数番目の要素と奇数番目の要素を別の配列に格納し、
文字列として表示。

・・お願いします。
663デフォルトの名無しさん:2005/09/04(日) 15:07:38
>>662
文字配列3つ用意
添え字も i, j, k で用意する

scanf で入力受付
i, j, k を初期化
入力文字列を'\0'まで1文字ずつチェック
 添え字を2でMODをとると0か1になるんで条件分岐
 if で奇数
 else で偶数
 それぞれ1文字ずつ配列に入れていく
 
ループを抜けたら j, k の位置に'\0' を入れる。
printf でそれぞれを表示
664デフォルトの名無しさん:2005/09/04(日) 15:15:28
>>662 めんどいから手抜きで
#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]);
}
665デフォルトの名無しさん:2005/09/04(日) 15:15:29
#include <stdio.h>
main(){
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 );
}
666642:2005/09/04(日) 15:19:25
>>652
お返事遅くなってしまい申し訳ないです。
提示していただいたプログラムで大丈夫です。
ありがとうございました。
667662:2005/09/04(日) 15:36:03
助言してくれた皆様ありがとうございました。
668デフォルトの名無しさん:2005/09/04(日) 15:49:37
助言ではなく丸n(ry
669デフォルトの名無しさん:2005/09/04(日) 17:10:06
>>667
みんなゼロ番目から数えているから気をつけてね
670デフォルトの名無しさん:2005/09/04(日) 22:40:41
>655
失礼しました…あまりにもめちゃくちゃすぎましたね。
for(i=1,a[0]=-1;a[i-1]!=0;i++){

for(j=o;j<=i-1;j++){
の部分を授業でやったので、それを使いたかったんです。
>657,658,659,660,661
ありがとうございました!とても助かりました。
671デフォルトの名無しさん:2005/09/04(日) 23:03:08
>>670
個人の好みによるけど、a[0]=-1みたいなループ制御以外のを
ループの初期化式に入れるとわかりにくくなるから
面倒でも分けた方がいいんじゃまいかと思う
672デフォルトの名無しさん:2005/09/05(月) 03:32:47
[1] 授業単元: プログラム演習
[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] その他の制限:

どうしてもコンパイルが通りません
お願いいたします。





673デフォルトの名無しさん:2005/09/05(月) 03:38:14
>>672
いきなりfprintf?
674673:2005/09/05(月) 03:41:22
あー。
こういう使い方知らんかった。
675デフォルトの名無しさん:2005/09/05(月) 03:58:53
>>672
#include <stdint.h>
#include <stdlib.h>
676デフォルトの名無しさん:2005/09/05(月) 04:09:29
>>672
最後の行のケツ。全角スペース入っとる。
677デフォルトの名無しさん:2005/09/05(月) 04:14:01
>>675
>>676
ありがとうございます。
678デフォルトの名無しさん:2005/09/05(月) 04:19:47
[1] 授業単元: プログラム演習
[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に変換しているコードのつもりなのですが
実際の値を見てみるとそうなっていないようです
なぜかどうしてもわかりません。よろしくお願いします


679デフォルトの名無しさん:2005/09/05(月) 04:37:42
>>678
uint32_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;
}
680デフォルトの名無しさん:2005/09/05(月) 05:14:29
ここは添削スレですか?
681デフォルトの名無しさん:2005/09/05(月) 15:30:57
添削つまらん。丸投げしてくれ。
682デフォルトの名無しさん:2005/09/05(月) 15:51:25
以前○投げしたら怒られたので出来る限りしたあとでと思って投稿いたしました
ごめんなさい
683デフォルトの名無しさん:2005/09/05(月) 15:52:58
以前課題をやっていただいたものです
もし595さんがよければフリーメールでいいので連絡先を教えていただけませんか?
684デフォルトの名無しさん:2005/09/05(月) 17:16:23
わかりました。
そちらのメールアドレスに送りますので、
学校のメールアドレスかプロバイダのメールアドレスを書いてください。
685595 ◆AOMdbQiVo. :2005/09/05(月) 17:20:28
>>683
すまんが、さすがに2chでそれはできない。
たまーにここや他のスレに見てるから、わからんことがあったら聞いておくれ。
名無しの回答者の中に俺が混ざってるかもしれん。

あと、>>683がこれから先、もっと難しいことをやるなら
画像処理スレの方で聞いた方が、ここよりも良い回答が得られるかもしれない。
(俺は画像処理は専門外なので、これ以上のことは答えられん)
そうはいっても、もうちょっと質問の仕方とC言語の勉強が必要だけどな。
ま、とにかく、がんばってくれ

あとは名無しに戻るよノシ
686デフォルトの名無しさん:2005/09/05(月) 17:21:29
>>684
こらこらw本当に書きそうだからやめれw
687デフォルトの名無しさん:2005/09/05(月) 17:27:37
良心の人だなぁ・・・
char usage[] = {数値列};
system(usage);
の人とはえらい違いだ。
688デフォルトの名無しさん:2005/09/05(月) 18:54:53
下駄を履かせてないのに-128するんはヘンだな。

それから浮動小数点演算してるんだから、誤差は出るつもりでいないとな。
上限や下限に収まらないときもあるだろう。

とヒントをくらいは出しておこう。
689デフォルトの名無しさん:2005/09/05(月) 21:05:25
なんか活気がないなと思う今日このごろ。
大学って10月からでしたっけか?
690デフォルトの名無しさん:2005/09/05(月) 21:22:34
国立系なら10月から後期課程のハズ
691デフォルトの名無しさん:2005/09/05(月) 21:59:53
後期課程?
692デフォルトの名無しさん:2005/09/05(月) 22:10:31
昔は知らないけど最近は春休みと夏休みを境目に前期と後期の二学期制になってる
冬休みもあったような気がするけど学期は変わらないかな
693デフォルトの名無しさん:2005/09/05(月) 22:22:16
>>692
それは知ってるけど後期課程とは言わないんじゃないのか?
ドクターじゃあるまいし。
694デフォルトの名無しさん:2005/09/05(月) 23:10:21
ああ、なるほど。課程って言ったらおかしいか。
俺が行ってた大学はSpring SemesterとFall Semesterって言ってた。
他は知らない。
695デフォルトの名無しさん:2005/09/06(火) 10:27:11
>>685
そうですか・・・残念です。画像処理のアイデアも求められているのは授業の課題内容から
わかりますね。


この授業の課題は大変難しくて有名で、私にも色々事情があって本当に死のうかと考えた時期も
ありました。課題でないくらいで大げさなとおもわれるかもしれませんが、理由は省きますが
本当に欝になって死ぬことばっかり考えてた3週間でした。
ここのみなさんには課題をやっていただいたりして大変助かりました。
私が死ななかったのはみなさんのおかげであるという部分がかなりあります。
ありがとうございました。
696デフォルトの名無しさん:2005/09/06(火) 10:36:58
授業か・・・ゼミではないのか?
697デフォルトの名無しさん:2005/09/06(火) 10:42:21
>>695
不快な事を書くな
698デフォルトの名無しさん:2005/09/06(火) 10:53:51
厨排除のため、うそ宿題でも作るか?
プログラミング言語C(通称K&R)の問題とかそれらしく書こうか。
699デフォルトの名無しさん:2005/09/06(火) 11:02:11
暇人だな、このスレを保守するという手段が目的化してるお前も十分に厨
700デフォルトの名無しさん:2005/09/06(火) 11:02:11
>>679
返事が送れてすみません。ありがとうございました
701デフォルトの名無しさん:2005/09/06(火) 11:26:04
うんうん。698と699は厨だね。
以後スルーで。
702デフォルトの名無しさん:2005/09/06(火) 11:36:54
はじめましてよろしくお願いします。
CSV形式のファイルの読み込みをしたいんですけど、ちょっとわからず、
知恵を貸していただけたら幸いかと思います。
#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
703702:2005/09/06(火) 11:38:58
訂正
lpsaName→/*ファイル名*/
MAINTEREC→/*ファイル内容*/
704702:2005/09/06(火) 11:45:36

==ファイル中身==   っていう感じでファイルがあります。
 123,0.123(一行)
  ・ ,  ・
  ・ ,  ・
  ・ ,  ・
  ・ ,  ・
==========
 整数 | 少数
  ↓    ↓
 整数   実数
  ↓    ↓
Rec.nWave Rec.dValve
705デフォルトの名無しさん:2005/09/06(火) 11:52:37
うむむ。全角か・・・。
706デフォルトの名無しさん:2005/09/06(火) 11:54:01
707702:2005/09/06(火) 11:56:03
ああっ半角です。。それとも全角で書いたのがまずかったですか?
>>705
708デフォルトの名無しさん:2005/09/06(火) 12:04:00
>>707
ファイルの中身として全角数字出したわけだから全角解析しろってことだろ?
709702:2005/09/06(火) 12:17:17
いやいやすみません半角でいいです・・・・
ごめんなさい・・・
>>708
710デフォルトの名無しさん:2005/09/06(火) 12:25:32
作ったのが無駄になったじゃねえか
むかつく
711702:2005/09/06(火) 12:30:51
ホントすみません・・・ごめんなさい・・・
>>710
712702:2005/09/06(火) 12:59:51
すみません誰か・・流れだけでもいいので教えていただけませんでしょうか?
713702:2005/09/06(火) 13:22:06
>>710
作ったところまで教えていただけませんか?
714デフォルトの名無しさん:2005/09/06(火) 13:33:25
まあ、>>1読め。
715デフォルトの名無しさん:2005/09/06(火) 14:03:07
>>712
1) ファイルを開く
2) while(ファイルから1行取得→string、EOFまで)
  {
 3)  ・stringからカンマの前後で部分文字列切り出し
 4)  ・前後のスペース除去
 5)  ・文字列→数値変換
 6)  ・それぞれの値を構造体?のメンバに保存
 7)  ・構造体?をvectorにpush_back
}
8) ファイルを閉じる

あと、質問するときは>>1をちゃんと読んで、テンプレをちゃんと埋めること。
716デフォルトの名無しさん:2005/09/06(火) 14:09:19
>>712は日本語がなんかおかしいし留学生とかじゃねーの?
多分>>1を読んでも意味がよくわからなかったんだよ
717702:2005/09/06(火) 14:10:15
>>714,715
すみません、焦っていて周りが見えなくなっていました。。。ごめんなさい!
718702:2005/09/06(火) 14:14:38
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク): >>702 
[3] 環境
 [3.1] OS: win2000
 [3.2] コンパイラ名とバージョン: VC++6.0
 [3.3] 言語: C
[4] 期限:9月6日16時30分ぐらいまで
[5] その他の制限: 半角でお願いします
719デフォルトの名無しさん:2005/09/06(火) 14:16:55
あと2時間かw
>>702の一番下の格納配列 objって何を格納したいの?
720702:2005/09/06(火) 14:28:16
配列オブジェクトへ追加する

vecRec.push_back(Rec);→追加
721702:2005/09/06(火) 14:30:01
>>715
stringってC言語なんですか?
722デフォルトの名無しさん:2005/09/06(火) 14:37:32
ソースコード直に書いてたらなんか変な操作したのか消えて一つ前の自分の書き込みが表示された。
最近多くて困る。@JaneStyle
723デフォルトの名無しさん:2005/09/06(火) 14:38:15
>>718
> MAINTEREC Rec;
> 整数(int)なら→Rec.nWave 浮動小数点(double)なら→Rec.dValve
これが意味分からない。MAINTERECの定義と、CSVの内容の書式を教えてくれ。
こういうことでいいのか?しかもstd::vectorってCじゃないし。

CSV = LINEが1つ以上
LINE = DATA ' ' DATA '\n'
DATA = INT | DOUBLE
724デフォルトの名無しさん:2005/09/06(火) 14:40:37
>>721
格納先変数でそ
725デフォルトの名無しさん:2005/09/06(火) 14:41:28
>>722
Ctrl+Zで案でゅ
726デフォルトの名無しさん:2005/09/06(火) 14:51:15
>>725
色々今試してみたらSHIFT+BackSpaceで再現出来た
727702:2005/09/06(火) 15:09:24
あっホントだ・・・std::vector C++だ・・・
とりあえずもらった資料にはこれぐらいしか書いてないっす。。。
もう一度書きます。
bool LoadMaintenanceFile(LPCTSTR lpsaName/*ファイル名*/,std||vectar<MAINTEREC>/*ファイル内容*/&vecRec)

MAINTEREC Rec;       ※数字以外はエラー
----------------       一つ目は必ず整数
整数→Rec.nWave        2つ目は浮動小数点(ではない場合もある)
実数→Rec.dValve        格納配列ojb
vecRec.push_back(Rec);→追加
728デフォルトの名無しさん:2005/09/06(火) 15:12:19
>std||vectar
これだけの量で間違いすぎ
729702:2005/09/06(火) 15:14:52
>>728
何を間違ってるの?
730デフォルトの名無しさん:2005/09/06(火) 15:21:02
std::vector
std||vectar
間違い探し
731715:2005/09/06(火) 15:26:18
>>721
stringはstd:stringのつもりで書いた。ちなみにC++。
別にcharの配列でもいいんだけどね。
732702:2005/09/06(火) 15:26:23
::でしたか!すみません!
733702:2005/09/06(火) 15:58:43
すみませんC言語って言ってたんですけどC++でお願いできませんでしょうか
[1] 授業単元: プログラム演習
[2] 問題文(含コード&リンク): >>702 
[3] 環境
 [3.1] OS: win2000
 [3.2] コンパイラ名とバージョン: VC++6.0
 [3.3] 言語: C++
[4] 期限:9月6日18時00分ぐらいまで
[5] その他の制限: 半角でお願いします
734デフォルトの名無しさん:2005/09/06(火) 16:01:00
期限が延びてるw
735デフォルトの名無しさん:2005/09/06(火) 16:05:18
もしかしてMAINTERECは構造体じゃなくて共用体か?
736デフォルトの名無しさん:2005/09/06(火) 16:06:28
ああ、勘違い。そんなわけないな。
737デフォルトの名無しさん:2005/09/06(火) 16:08:29
てっかfscanfで簡単に読み込めるが
738デフォルトの名無しさん:2005/09/06(火) 16:09:46
>>727
だとしたら、その仕様を書いた人間の頭が悪い。書き直させろ。
739702:2005/09/06(火) 16:22:16
流れは>>715の参考に
1) ファイルを開く
2) ファイルから1行取得し、EOFまで
  {
 3)  ・数字なら処理を!数字でなかったらエラー
 4)  ・文字列を数値に変換
 5)  ・整数と実数にわける
 6)  ・整数ならRec.nWaveに保存してリストの末尾に追加するpush_back(Rec.nWave)
 7)  ・実数ならRec.dValveに保存してリストの末尾に追加するpush_back(Rec.dValve)
}
8) ファイルを閉じる
740デフォルトの名無しさん:2005/09/06(火) 16:26:28
二つ目は整数でも実数でもRec.dValveに入れるんじゃないのか。
741デフォルトの名無しさん:2005/09/06(火) 16:47:27
>>739
だから、問題の仕様自体が曖昧に過ぎるから、皆書くにかけないんだよ。
聞く限りでは内容はかなり簡単そうなんだから。もしそれだけしか仕様が
与えられないのであれば、誰も書けない。
742702:2005/09/06(火) 16:55:59
ちょっとまとめてから出直してきます。みなさんいろいろすみません・・・・
743デフォルトの名無しさん:2005/09/06(火) 16:58:19
CSV読み込み PHP ソース

fgetcsv
http://php.s3.to/man/function.fgetcsv.html
744デフォルトの名無しさん:2005/09/06(火) 17:01:29
CSVってカンマ区切り、タブ区切り、固定長などがある。
カンマ区切りの場合、文字をダブルコーテーションで区切ると、中のカンマは文字扱い。

まずは扱えるCSVファイルの仕様を確定すること。

漢字が有る場合、漢字の一部をカンマと判断する場合があるので、
1バイト文字と2バイト文字は、それぞれ適切に扱う必要がある。
745715:2005/09/06(火) 17:04:24
>>702
期待した通りの物かどうか知らんが、とりあえず上げとく
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/905.txt
それなりに動くとこまでは確認した (↑のままじゃ動かないけど
746デフォルトの名無しさん:2005/09/06(火) 17:05:03
MS Officeだとcsvはカンマ区切りでタブ区切りはテキストだな
747デフォルトの名無しさん:2005/09/06(火) 17:08:32
CSV(Comma Separated Values)
ふつう、タブでも固定でも無い
748744:2005/09/06(火) 17:13:09
そっすか。
749デフォルトの名無しさん:2005/09/06(火) 17:21:43
tsv(TabSeparatedValues)とも言うなぁ。
750デフォルトの名無しさん:2005/09/06(火) 17:25:01
>>745
サンクスです!
751デフォルトの名無しさん:2005/09/06(火) 17:38:13
今回の場合は関係ないけど、
文字の中にカンマが入ってる場合(ダブルクォートで囲む)とか、
さらにその中にダブルクォートが入ってる場合(エスケープするんだっけ?)とか、
ちゃんとしたものを実装しようとすると頭が痛くなる罠
752デフォルトの名無しさん:2005/09/06(火) 17:51:09
>>702
マルチポストしてないで早く仕様出せ。
753デフォルトの名無しさん:2005/09/06(火) 19:34:34
>>751
literalなダブルクォートは二つ重ねて""で書く
イヤらしいのは改行含むカラムがある場合(エクセルはそーゆーのも出力するはず。
CRだかLFだか忘れたが)
754デフォルトの名無しさん:2005/09/06(火) 19:40:13
妄想ですね。
755デフォルトの名無しさん:2005/09/06(火) 20:04:44
>>753
確認したら\nだった。
756デフォルトの名無しさん:2005/09/06(火) 20:06:23
>>755
LFか。ならstdioやiostreamのテキストモードでの行読みはつかえん
ということだな。
757デフォルトの名無しさん: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;
}

758デフォルトの名無しさん:2005/09/06(火) 21:55:40
ポログラムってなんだよ
759デフォルトの名無しさん :2005/09/06(火) 21:58:18
プログラムです。提出明日であせってました
760デフォルトの名無しさん:2005/09/06(火) 22:06:07
おそらく連結リストにして欲しいのだろうけど。
サンプルは動かないわ/仕様は曖昧だわで
回答者がいないほうに一票
761デフォルトの名無しさん:2005/09/06(火) 22:11:55
いい加減なソース付ける暇があるなら、テンプレに従えよ
762デフォルトの名無しさん:2005/09/06(火) 22:12:06
>>757
このままで名前もホームランの本数も入力できて何人分も追加できるポログラムに
なっているよ。
だからそのまま提出すれば大丈夫でしょう。
もちろんポインターも使ってるし。
763デフォルトの名無しさん :2005/09/06(火) 22:17:19
名前もホームランの本数も入力できて何人分も追加はキーボードであと入力でfor かなんかでまわしてほしいんですが(´Д⊂)
764デフォルトの名無しさん :2005/09/06(火) 22:19:19
はぼ書き換えなるとおもいます
765デフォルトの名無しさん:2005/09/06(火) 22:25:12
うーん。ポログラムってキーボード使わないの?だと、完全にお手上げだ。
キーボードの付いているパソコンを用意して欲しい。
入力を for で回したいならつぎのようにすればいいかな?
char* nyuryoku[]={"入力  "," 入力 ","  入力","力  入"};
int i;
for(i=0;i<100;i++){
printf("%s\n",nyuryoku[i%4]);
}
766デフォルトの名無しさん:2005/09/06(火) 22:31:15
何そのギャグ。
767デフォルトの名無しさん :2005/09/06(火) 22:32:12
ポインターをつっかて名前もホームランの本数も入力できて何人分も追加できれば
どんなんでもいいので教えてください
768デフォルトの名無しさん:2005/09/06(火) 22:32:35
しつこい
769デフォルトの名無しさん :2005/09/06(火) 22:35:41
じゃあ。解いてくださいよ!!!
770デフォルトの名無しさん:2005/09/06(火) 22:44:25
>>757 batterにendと入力すれば入力終了。正しいかは保障しない。
#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;
}
771デフォルトの名無しさん :2005/09/06(火) 22:53:43
770san
ありがとうございます(;´д`)
772デフォルトの名無しさん:2005/09/06(火) 23:34:21
なんか釣ってるのかまともな宿題なのかわからんなw
773デフォルトの名無しさん:2005/09/06(火) 23:41:20
if(!(0))はtrueでif(!(2))とかif(!(-3))はfalseになるんだっけ?
774デフォルトの名無しさん:2005/09/06(火) 23:51:31
そう
775デフォルトの名無しさん:2005/09/06(火) 23:53:22
>>773
それでいい
負数も単体では真




以下チラシの裏
だからGetMessageの戻り値チェックは0以外かじゃなくて0以上かにしろと…(-1が返ってくるとry
776デフォルトの名無しさん:2005/09/07(水) 00:01:37
>>774-775
サンクス。今までずっと0以下がfalseだと勘違いしてた。
まあ、if()に値を直接入れたりはしないようにしてたけど。
777デフォルトの名無しさん:2005/09/07(水) 00:11:15
>>776
そいつぁいい心がけだ。
778デフォルトの名無しさん:2005/09/07(水) 00:46:10
>>777
そーでもない
値が0か0以外かで保障される場合、むしろ直接使ったほうがいい。
779デフォルトの名無しさん:2005/09/07(水) 01:17:24
if (!!GetMessage(...)) {
...;
}
780デフォルトの名無しさん:2005/09/07(水) 09:38:47
GetMessage()の話だろ、きみら>>778-779分かってる?
特に779
781779:2005/09/07(水) 10:31:28
GetMessage()がどんな関数かなんて知らない。
適当な関数なら何でもよかった。
782デフォルトの名無しさん: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言語の初心者でいちお構造体習ったのですがさっぱりで・・・
 先ほど問題を出されあせっちゃってます(;´Д`)
 よろしくお願いします・・・・
783デフォルトの名無しさん:2005/09/07(水) 13:28:07
>>782
入出力関数だけ作ればいいのか?
(main関数等はいらんのか?)
784デフォルトの名無しさん:2005/09/07(水) 13:33:28
>>782
struct 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);
}
785782:2005/09/07(水) 13:49:41
>>783
メイン関数いります・・・!
>>784
あああありがとうございます。。。!!
786782:2005/09/07(水) 13:53:35
何度も書き込み申し訳ないです。。。
当方がなにぶん初心者の者で
サルでもわかるようなプログラミングですと
幸いです(´Д`)
・・・・サルに失礼かも_| ̄|〇
787デフォルトの名無しさん:2005/09/07(水) 14:05:20
>>784を初心者っぽく(危険な)コードに書き換えてみた

#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;
}
788787:2005/09/07(水) 14:07:26
#include<string.h>はもういらんかったか
789782:2005/09/07(水) 15:38:57
>>787.788
ありがとうございます!!!
助かりました。。。
自分でも作れるように頑張ります(`・ω・´)
790デフォルトの名無しさん:2005/09/07(水) 19:26:43
  非マナー非マナー非マナー非マナー非マナー非マナー
  非マナー非マナー非マナー非マナー非マナー非マナー
 非マナー非マナー非マナー非マナー非マナー非マナー
  ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
   ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
   ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
  非マナー非マナー非マナー非マナー非マナー非マナー
  非マナー非マナー非マナー非マナー非マナー非マナー
 非マナー非マナー非マナー非マナー非マナー非マナー
  ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
   ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
   ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
  非マナー非マナー非マナー非マナー非マナー非マナー
  非マナー非マナー非マナー非マナー非マナー非マナー
 非マナー非マナー非マナー非マナー非マナー非マナー
791デフォルトの名無しさん:2005/09/07(水) 20:00:55
まあ、明らかに>>1を読んでない質問はスルーするように徹底すればいいんだろうけど。
792デフォルトの名無しさん:2005/09/07(水) 20:15:40
解答側も読んでなかったりして。
793こんにちわん:2005/09/07(水) 21:20:29
[1] 授業単元: プログラミング言語
[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] その他の制限: 無し

お願いします。
794デフォルトの名無しさん:2005/09/07(水) 21:23:05
年と月と日が入力されないと正確な変換はできないが。
795デフォルトの名無しさん:2005/09/07(水) 21:25:27
鋭いけど。そういう仕様ということでw
796こんにちわん:2005/09/07(水) 21:31:51
そういう仕様でお願いします。ご迷惑おかけしてすみません^^;;
797デフォルトの名無しさん:2005/09/07(水) 21:34:00
>>793
なんかこれとほぼ同じ問題を数スレ前でみた気がするんだが・・・
作ったコードはそのまま廃棄処分した希ガス

普通にgetcharで読み込んで、switchで昭和なのか平成なのか(ryを判定して
加算すりゃいいんじゃねーの?
798デフォルトの名無しさん:2005/09/07(水) 21:35:00
[1] 授業単元: プログラム
[2] 問題文(含コード&リンク): マインスイーパーを作れ
[3] 環境
 [3.1] OS: Windows
 [3.2] 環境: Visual studio.net 2003
 [3.3] 言語: C
[4] 期限: 一週間

お願いしますorz
799デフォルトの名無しさん:2005/09/07(水) 21:35:10
>>793
超手抜き
#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");
}
800こんにちわん:2005/09/07(水) 21:36:05
全然わからないです・・^^;;
わかりやすく教えて頂けませんか??
801こんにちわん:2005/09/07(水) 21:38:40
ありがとうございました!!!!!!!!!!!!
802デフォルトの名無しさん:2005/09/07(水) 21:39:48
>>798
google 七行プログラミング マインスイーパー
803デフォルトの名無しさん: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;
}
804デフォルトの名無しさん:2005/09/07(水) 21:42:53
>>803
志村ー、C言語C言語
805デフォルトの名無しさん:2005/09/07(水) 21:45:33
>>804
??
806デフォルトの名無しさん:2005/09/07(水) 21:47:07
>>804
志村ー、>>793>>793
807デフォルトの名無しさん:2005/09/07(水) 21:47:55
C++はダメなんだろ
808デフォルトの名無しさん:2005/09/07(水) 21:48:16
なにか問題でも?
809デフォルトの名無しさん:2005/09/07(水) 21:53:07
出題者の意図は「元号の種別をenumにしろ」であろうから、及第点が貰えない
に一票
810デフォルトの名無しさん:2005/09/07(水) 22:15:22
voidのポインタに1足したらどうなるんだっけ?
1バイト動くで良いんだッけ?
811デフォルトの名無しさん:2005/09/07(水) 22:19:24
>>810
>>1のテンプレに従え
812デフォルトの名無しさん:2005/09/07(水) 22:24:59
>>810
コンパイルエラー
813デフォルトの名無しさん:2005/09/08(木) 11:50:45
片付けてやる。>>1のテンプレに従い宿題を書くのぢゃ。
814デフォルトの名無しさん:2005/09/08(木) 14:40:44
[1] 授業単元: プログラミング演習
[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] その他の制限:
ある画像でコードブックを生成して、次の画像に対してもそのコードブックを使って
符号化・復号化を行うようにしたいです。
どうかよろしくお願いいたします。
815デフォルトの名無しさん:2005/09/08(木) 15:01:12
[1] 授業単元:C言語研究
[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] その他の制限:とくにないと思います。「


よろしくお願いします。
816デフォルトの名無しさん:2005/09/08(木) 15:35:10
>>815
一日では(俺には)無理だ。手の早い人が気が向いたらやってくれるかも知れないけど。
817デフォルトの名無しさん:2005/09/08(木) 15:40:17
C++らしい・・・stringとvectorか・・・題意満たしてないな・・。
問題がC++らしいかといわれると、謎。
818815:2005/09/08(木) 15:50:02
>>816
レスありがとうございます。
さっき出た課題なんです…できないorz
多少条件満たしてなくても形できてればおkらしいのですがおれには…orz
819デフォルトの名無しさん:2005/09/08(木) 15:56:25
午後12:00って夜だっけ、昼だっけ?
820デフォルトの名無しさん:2005/09/08(木) 15:58:18
一日は午前12:00から始まる
821デフォルトの名無しさん:2005/09/08(木) 16:24:08
>>820
つまり昼から始まる

http://jjy.nict.go.jp/QandA/FAQ/12am-or-0pm-J.html
午前と午後を定義している法律は、明治五年に出された 太政官布告三百三十七号(資料1)以外には見当たらない。
昼の12時については午前12時のみで、午後零時は表に載っていない。
822デフォルトの名無しさん:2005/09/08(木) 16:31:37
正午の瞬間には午前も午後もないが、正午から0.1秒でも経過したら午後。
9月9日正午までって書いとけば間違いないね。
823デフォルトの名無しさん:2005/09/08(木) 16:33:30
事故で警察に呼ばれたとき、
「事故から1時間後は何時だ
午前12だろ。夜じゃないだろ。
深夜0時かそうか。それは午前か?午後か?
そうか。午前か。午前なら早朝だな。夜じゃないじゃないかうそつき目。
オマエはいつになったら本当のことを言うんだ?泥棒や労。
うそつきだからオマエは泥棒なんだよ逮捕してもいいんだよ
昼でも早朝でもいいが、日が昇ってる時間なんだから暗いわけないだろ

北九州市の小倉南署
映画の撮影のためと称してやくざがらみでなんかやってた。

この事故は車にGPS仕掛けられて追跡されブレーキ細工され、
信号無視の車をよけられずに起きたんだが、
このときの担当警察官はその当たりや集団の一員。
つーか部落の一員。泥棒部落の出身。まちがいない。
824デフォルトの名無しさん:2005/09/08(木) 17:11:12
へー
825デフォルトの名無しさん:2005/09/08(木) 17:47:49
なんかあれだな。紀元0年とかゆーそーゆーカンチガイだな。
(社会科のセンセが間違ってたのをツッコミ入れたことがあるが、無視された)
826デフォルトの名無しさん:2005/09/08(木) 18:39:01
宿題に突っ込み入れるスレはここですか?
827デフォルトの名無しさん:2005/09/08(木) 18:47:43
そうです。
828デフォルトの名無しさん:2005/09/08(木) 20:11:08
どなたか814もお願いいたします
829デフォルトの名無しさん:2005/09/08(木) 20:22:50
>828 えーっと・・・10時間くらいかかりそうなのですが・・・
一日1時間やるとして・・・10日ほどお待ち願えますかね?
830デフォルトの名無しさん:2005/09/08(木) 20:51:18
>>829
そうですか・・・
自分ではできなくて・・・・
831デフォルトの名無しさん:2005/09/08(木) 21:01:33
やってもいいんですけれど、待てますか、待てませんか?
今日はもう風呂入って寝るので、やるとしたら明日からですが。
832デフォルトの名無しさん:2005/09/08(木) 21:24:48
>>831
ありがとうございます。
提出まで待てます。過ぎてもなんとかします。

失礼ですが内容は理解していただけたでしょうか?
意見の食い違いがあると面倒ですので
833デフォルトの名無しさん:2005/09/08(木) 21:30:52
えらそうな文章になっていました
申し訳ございません。
834デフォルトの名無しさん:2005/09/08(木) 21:31:59
>>814
つミ[ ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/908.txt ]
時間取れないので、あとのメンテは>>814か他の人に任せる。

あと、レスつけるときは番号の前に>か>>ををつけてくれ。
そうすれば専用ブラウザで見てる人が助かる。
835デフォルトの名無しさん:2005/09/08(木) 21:42:49
>>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;
}

の部分なんですが、なぜ私のソースをいじったのでしょうか?
この部分は私が595さんのを変えた部分で
595さんのままですとコードブックで一致しないベクトルを選ぶときに
それぞれのベクトルになっていませんでした。bが一致したものを
順に選んでいくことになっていました。
836デフォルトの名無しさん:2005/09/08(木) 21:48:52
すげーむかつく
837デフォルトの名無しさん:2005/09/08(木) 21:57:36

>>836
申し訳ございません。
えらそうにするつもりはありませんでした。
すいませんでした
838デフォルトの名無しさん:2005/09/08(木) 22:02:16
>>834
きめ細かいコメント文までありがとうございます
839デフォルトの名無しさん:2005/09/08(木) 22:02:33
ほい。風呂から戻ってきたよん。
10日くれるのだね。 んで、もう答えでてるけどご依頼は?
840834:2005/09/08(木) 22:04:18
>>835

>>814のソースだと、シフトさせる幅を直に数値で書いてるため、
バイトオーダーを変更したときにRGBαが正しく抽出されなくなる。

>>595のソースだとバグがあって
  RRRRGGGGBBBBAAAA  からRを抽出しようとしたとき、
  1111000000000000  のマスク(AND演算)をかけてるため、
結果は0xR000になってしまう。

>>835の処理だと
  RRRRGGGGBBBBAAAA  を右にビットシフトさせて
  000000000000RRRR  にしてから
  0000000000001111  のマスクをかけるようにしてるので
結果は0x000Rとなる

あと、>>835のソースはバイトオーダーいじってるので、
テストするときは自分の環境に戻してやってくれ。
841デフォルトの名無しさん:2005/09/08(木) 22:09:12
>>839
ありがとうございます。
今の状況としては834さんに色々助けていただいております。
839さんには感謝いたします。できれば今後も助けていただきたいです

>>840
ありがとうございます
バイトオーダーというのはRGBαがそれぞれ一バイト計四バイトの場合ではなくって
計2バイトの場合でも対応できるようにしたということでしょうか?

842デフォルトの名無しさん:2005/09/08(木) 22:15:33
>>595

>>841 できれば今後も
後から問題に付け足しするのはやめましょう。
843デフォルトの名無しさん:2005/09/08(木) 22:16:31
>>840
お聞きしたいのですが
1、いただいたソースでは、まずコンパイルして実行してひとつコードブックを作成すれば
今後、実行するときにそのコードブック名を入れれば、コードブックを新しく作成せずに
入力したコードブックを見て符号復号を行うと考えてもよろしいのでしょうか?

2、これは読み込む画像によりますが、今回の場合は814のソースで問題なかったので
いただいたソースの入力出力バイトオーダーのところを814と同じにすればよろしいという
ことでしょうか?

よろしくお願いたします
844834:2005/09/08(木) 22:18:03
>>841
計2バイト?の場合があるの?
1ボクセル4バイト固定だと想定して組んでたんだけど
845デフォルトの名無しさん:2005/09/08(木) 22:19:13
>>844
ありがとうございます
ないとはいえませんが例としてだしました。
バイトオーダーの意味がわからなくてたとえとしてお出ししました。

バイトのならびということでしょうか?
EGBαの順番など
846デフォルトの名無しさん:2005/09/08(木) 22:20:15
>>842
申し訳ございません。
課題の性質上、付け加えるような形になってすいません。
847デフォルトの名無しさん:2005/09/08(木) 22:23:01
で、実際はどんな課題なのですか?
目標があるはずですけれど・・・どこがゴールですか?
お見受けするところ、卒業研究とかゼミだと思うんですけど。
普通の授業ではないですよね?
848デフォルトの名無しさん:2005/09/08(木) 22:23:53
>>843
1.よろしいです。
  ファイルが読めなかった&コードブックサイズが小さい場合にのみ
  コードブックを作るようにしてる。

2.読み込む画像に合わせればOK,だと思う。

>>845
>バイトのならびということでしょうか?
>EGBαの順番など
その通り。 RGBαとか、αBGRとか。
849デフォルトの名無しさん:2005/09/08(木) 22:24:22
>>847
普通の授業ではないです。
いわゆるゼミ形式?と考えらられます。まだ研究室に入ってないのでわかりませんが
授業スタイルとしては、発表をして問題点を挙げて解決するといったものです
850デフォルトの名無しさん:2005/09/08(木) 22:26:10
>>848
ありがとうございます
ということは私がお願いした要素はほとんど終わったと考えてもよろしいのでしょうか?
私はソースを改良してコードブックを新たに作らずにということを考えいましたので
851デフォルトの名無しさん:2005/09/08(木) 22:30:54
作るコードがどのレベルを想定しているかを知りたいのですが。
授業の目標。あるいはアナタのこの授業での目標はなんですか?
852デフォルトの名無しさん:2005/09/08(木) 22:30:58
これは私の勝手な感想です。

私の幼稚な文章からどのような課題かを読み取ってプログラムを作ることの出来る
みなさんのレベルの高さに前から正直驚いておりました。
情報工学を専攻なさっていた方たちが多いのでしょうか?
853デフォルトの名無しさん:2005/09/08(木) 22:33:40
とにかく、K&Rもしくは他のしっかりとした説明のある書籍をご覧になることをお勧めします。
そうしないといつまでたっても先に進めません。
854デフォルトの名無しさん:2005/09/08(木) 22:35:48
>>851
作るコードのレベルは、プログラムができない私がいうのもなんですがそれほど高くないと
考えております。(間違ってたらすみません)

授業のもくひょうとしては、先生が勝手にいってるのは普通の授業じゃでできないことするぞ
ということです。例えば画像の圧縮をしようか!ということではなく
画像を用いて何をしてもいいということです。

ですので私が勝手に作った目標としては、(圧縮?を目標に)三次元画像のコードブックを使って
似た画像ならそのコードブックを使って違うならまたCBを作り直す。
画像を読み込みツールが判断できるようなツールを作りたいと考えております。

こういったことでよろしいでしょうか?
855デフォルトの名無しさん:2005/09/08(木) 22:38:50
>>853
どうしてもプログラミングが苦手で、みなさんに助けを求めた次第です。
個人的な事情ですがこの単位に命が半分くらいかかってると考えております。
勉強するのが一番というのはわかっております。みなさんには本当にご迷惑おかけします
856デフォルトの名無しさん:2005/09/08(木) 22:38:54
>>850
たぶんできてるとは思うけど、あまりテストしてないのでバグがあるかも。
というわけで、あとは任せたノシ

>>852
ちなみに俺は情報工学専攻だった。MやDには行かず、B止まりだけど。

>>854
普通の授業じゃつまらないからね。目標達成できるようにがんばってくれ。
でも、>>853の言う通り、もうちょっとCの勉強が必要。
857デフォルトの名無しさん:2005/09/08(木) 22:39:09
>852 うんにゃ。大学ではそんなん習ってない。高校でもならってない。小中はいわずもがな。
>853 ・・・K&Rはまとまってる思いますけれど、難しくないですかい・・・?
858デフォルトの名無しさん:2005/09/08(木) 22:46:00
>>856
ありがとうございました。
修士に行っても通用しそうな方ですね。知り合いに修士の方がいて質問しにいったのですが
私の説明では理解していただけなかったです。

>>857
それなのにすごいですね
独学ですか
859デフォルトの名無しさん:2005/09/08(木) 22:50:38
ご依頼はないようなので、寝るッス。 ノシ
860デフォルトの名無しさん:2005/09/08(木) 22:53:48
自力で単位取れないなら辞めてしまえ
どうせ後々困る事になるだろうけどさ
861デフォルトの名無しさん:2005/09/08(木) 22:54:43
>>860
おっしゃるとおりです。大学辞める状況まで追い込まれています。
確かにおっしゃるとおりで言い訳しようもありません・・・。
862デフォルトの名無しさん:2005/09/08(木) 22:57:47
プログラミングが苦手とかそいういう話じゃないと思う。
そんなに人付き合いが下手だと、生きているのが間違いだと思う。
どうしようもないよ。
863デフォルトの名無しさん:2005/09/08(木) 22:58:42
またーり汁
864デフォルトの名無しさん:2005/09/08(木) 22:59:44
>>862
生きているのが間違いって言うのは言い過ぎ。
865デフォルトの名無しさん:2005/09/08(木) 22:59:46
>>834

834さんのソースでは、コードブックを作らなくてもよいということですが、
CBの中身は595さんの形からかわっていないのでしょうか?
変わっていなかった場合、そのCBからあるRGBαのインデックス番号を
読み取ってそのインデックス番号に符号化することはできるのでしょうか?
866デフォルトの名無しさん:2005/09/08(木) 23:01:16
一番むかつくのは、向上心の無さだな
867デフォルトの名無しさん:2005/09/08(木) 23:01:25
留年しておりまして、周りに深くきけるような人がいないのは事実です。
868デフォルトの名無しさん:2005/09/08(木) 23:02:01
あちゃー
869デフォルトの名無しさん:2005/09/08(木) 23:03:49
もう一年留年するくらい、どうってことないじゃん?
870デフォルトの名無しさん:2005/09/08(木) 23:04:33
しかし……、ここで熱心に聞くより、教授に熱心に聞きにいった方が良かったんじゃないか?
教授によっちゃ、お情けで単位くれることもあるだろうし
871デフォルトの名無しさん:2005/09/08(木) 23:04:58
>>865

すいません。
ソース見てみたのですがうまくいっているように感じました
失礼いたしました
872デフォルトの名無しさん:2005/09/08(木) 23:05:43
教     授     に     き     け
873デフォルトの名無しさん:2005/09/08(木) 23:07:29
>>869
そのとおりかもしれません。
色々なことも重なりこれ以上は留年できません。
詳しい説明は割愛します。

>>870
教授にプログラミングのことをさすがに聞けません。
さっきいったような符号化復号化の考えは自分で考えてみました。
(あんまり意味ないねといった感じでしたが)
874デフォルトの名無しさん:2005/09/08(木) 23:12:41
情報工学化?
875デフォルトの名無しさん:2005/09/08(木) 23:14:41
ここはチャットルームですか?
876デフォルトの名無しさん:2005/09/08(木) 23:16:04
たぶん、そう。
877デフォルトの名無しさん:2005/09/08(木) 23:26:26
> 作るコードのレベルは、プログラムができない私がいうのもなんですがそれほど高くないと
> 考えております。(間違ってたらすみません)

間違えています。
高い低い以前に、自分ができる範囲のものにしましょう。
878デフォルトの名無しさん:2005/09/08(木) 23:28:25
教授に質問される→自分で作ってないし理解してないから答えられない→単位ヤラネ
879デフォルトの名無しさん:2005/09/08(木) 23:35:17
>>874
はい、
>>875
すいません
>>877
すいません。自分ができるレベルでやると確実に単位をとれそうになかったのです
すいません

>>878
> 教授に質問される→自分で作ってないし理解してないから答えられない→単位ヤラネ
そのとおりになるとおもいます。人に教えてもらってもいいという考え方の人ですが、
そのぶん成績のつけ方はシビアなかたでらっしゃいます。
880デフォルトの名無しさん:2005/09/08(木) 23:47:39
面倒くさがらずに正攻法を。
1)勉強する。Cの本なんて3日で読破できる。それ以上かかるならマジであきらめる。
2)クラスメイトを作る。クラスメイトと同レベルでいいし、相談までいかなくても、雑談で流れくらい読める。
3)センセに相談する。
4)ちゃんと単位を取るために時間を使う。
5)人に尋ねるときの方法を学ぶ。
6)自分の行動が人からどう思われるか意識する。
7)死ぬわけじゃないので、単位をあきらめて、別の道を探す。

ここの人に↑にあげたことを代わりにやってくれと言ってるよ、あんた。
881デフォルトの名無しさん:2005/09/08(木) 23:55:19
>>880
おっしゃるとおりです。


もうここで相談するのはご迷惑でしょうか?すいません・・・
882デフォルトの名無しさん:2005/09/08(木) 23:57:15
相談するのは問題無い
だがな
あんたは無意味に喧嘩売ってるんだよ
883デフォルトの名無しさん:2005/09/09(金) 00:00:11
>>882
勉強してから質問しろということですよね?

すいません・・・。もうここには宿題を投げてはいけませんか?
884デフォルトの名無しさん:2005/09/09(金) 00:03:00
[2]
@
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] 期限: [無期限]
885デフォルトの名無しさん:2005/09/09(金) 00:08:22
>>883
> 勉強してから質問しろということですよね?
そうです。特に日本語と、相手への配慮を勉強してください。

> すいません・・・。もうここには宿題を投げてはいけませんか?
はい。ここに投げてはいけません。

>>884
>>1 のテンプレにしたがってください。
(freeではarrayの値は変わりません。解説終わり)
886デフォルトの名無しさん:2005/09/09(金) 00:12:39
>>884
つーか、普通にcalloc使えばいいじゃまいか
887デフォルトの名無しさん:2005/09/09(金) 00:14:00
f_memo () ;
でメモリ確保が失敗したときにfree(array)をやってはいけません。
arrayはNULLなため、悪ければシステム全体がクラッシュします。
888884:2005/09/09(金) 00:35:09
>>887
NULLなのに開放しても意味ありませんでした。

>>886
書き漏らしてしまいましたがmalloc使用の縛りがあったのでこうなりました。

>>885
arrayはポインタでアドレスを指定してるだけだからfreeで開放できないのでしょうか。
889デフォルトの名無しさん:2005/09/09(金) 00:35:34
>>887
free(NULL)は安全じゃなかったっけ?
まぁ元のソースではあきらかに不要だが。
890デフォルトの名無しさん:2005/09/09(金) 00:59:23
>>889
NULLの場合は無視されるっぽいな
891デフォルトの名無しさん:2005/09/09(金) 01:01:15
>>883
別に投げてもいいんだけど、なんというか
「理想は高いけど、自分では何もせずに完全に他人任せ」
みたいに受け取られる箇所があるので、もう少し応対に気をつけてな。

あと、人に教えてもらって物作るの構わんし、参考になる部分も多いだろうけど、
ちゃんと内容を理解してないと困るのは自分だってことを肝に銘じておくように。
数日後か数ヶ月後になるかわからないけど、必ずしっぺ返しが来るよ。

とはいっても、俺も人の事をとやかく言える立場じゃないんだけどね。
まあ、とにかくがんばれ。
892883:2005/09/09(金) 06:18:15
>>891
何も言ってないのと同じですね。脳タリンですか?あなたは。
893782:2005/09/09(金) 09:45:35
おはようございまつ。
7日に宿題お願いしたものですが
同じ宿題に新たに条件をつけられまして・・・
お願いします・・・!
[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言語の初心者でいちお構造体習ったのですがさっぱりで・・・
 よろしくお願いします・・・・
894デフォルトの名無しさん:2005/09/09(金) 10:15:52
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/910.txt
年齢の不正は見つけますが、文字が入っていたりするところまでチェックしていません。
そこのところは自分で追加してください。
895デフォルトの名無しさん:2005/09/09(金) 10:47:40
氏んで欲しいです。
896782:2005/09/09(金) 10:51:33
>>894
ありがとうございます。
コンパイルしたところ
cfe: Warning 513: sample3.c, line 35: 未知の制御文字 \0307 は無視されました。
// 与えられた年齢が異常であれば (-1) を返す。
cfe: Error: sample3.c, line 37: 構文エラーです。
if(prof.age<0 || prof.age>150) return (-1) ;
このようなエラーがでてしまうのですが・・・(´Д`)
897デフォルトの名無しさん:2005/09/09(金) 10:59:40
コピペではエラーでかなったので打ち込みミスと思う。
35行目を削除してコンパイル
898デフォルトの名無しさん:2005/09/09(金) 11:00:27
未知の制御文字列?
もしかしてgccは単一行コメントを許可していないのかもしれません。
そのコメントを/* */でくくっても駄目ですか?VCでは通りましたが。
899デフォルトの名無しさん:2005/09/09(金) 11:08:10
> (-1)
EOFが置換されてる、コメントが機能してないんじゃね
900デフォルトの名無しさん:2005/09/09(金) 11:09:38
そんな気がしてきた。
901782:2005/09/09(金) 11:13:56
コメントを/**/でかこったらコンパイル通りました!
ありがとうございます。
度々すみませんが、
実行したらありえない数値(年齢)を入力すると
ちゃんと『年齢がありえません』と出るのですが
普通の年齢を入れると出力されたときに千桁になってしますのですが・・・
例→23歳と入力  出力→2320と出る。

自分で調べてみましたがちょっとわからず・・・。

902デフォルトの名無しさん:2005/09/09(金) 11:17:17
そこまで作ったソースをうpしたほうがいいと思います。そうすれば添削もしやすいです。
903デフォルトの名無しさん:2005/09/09(金) 11:21:11
もう時間が無いんだからいざとなったらコピペで提出!添削はその後。
904782:2005/09/09(金) 11:23:45
>>902
>>894さんが作ってくださったプログラミングです。
905デフォルトの名無しさん:2005/09/09(金) 11:33:30
コピペでは再現できず。
906デフォルトの名無しさん:2005/09/09(金) 11:39:11
まさか全角で入力してないよな…
907907:2005/09/09(金) 11:44:50
[1] 授業単元:プログラミング演習
[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] その他の制限: 無し

急いでいます^^;お願いします。

908907:2005/09/09(金) 11:45:41
提出期限9/912:00でした。すみません。
909782:2005/09/09(金) 11:46:22
全角では打ってないんですが・・・
ってゆうかあせってやってたんですが
提出は3時くらいまででイイっぽい。。。勝手だな教授。
どっちにしろ謎を解明せねば(`・ω・´)
910デフォルトの名無しさん:2005/09/09(金) 12:17:28
>>907
#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にはなんのために入力するんだ?
911デフォルトの名無しさん:2005/09/09(金) 12:41:18
>>909 に限らず想うに…
先生側にしてみれば、せめて授業をまじめに聞いてくれてれば、
なんてことない宿題だろうからなあ……
条件追加にしても、特に難しくしたつもりはない、とんでもない
書き方した奴や迷ってるやつに指針を出した程度のことだから…
それを人だよりにしたあげく、勝手だな、なんてテラカワイソス………
912デフォルトの名無しさん:2005/09/09(金) 12:53:21
コピペで普通に実行できましたが、しかもgccで。
なぜ、エラー?
913デフォルトの名無しさん:2005/09/09(金) 13:16:43
>>907
#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;
}
914デフォルトの名無しさん:2005/09/09(金) 14:18:17
>>891
ありがとうございます。

>>834さんのをコンパイルしたのですがエラーが出ました
834さんはテストしてくれたいたようですので環境の違いからでしょうか?


915デフォルトの名無しさん:2005/09/09(金) 14:24:54
>>914
明らかにエラーになる箇所があって、
506行目に
int write_data(
が抜けてると思われ。
916デフォルトの名無しさん:2005/09/09(金) 14:35:10
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
917デフォルトの名無しさん:2005/09/09(金) 14:45:29
オマエら・・・こいつを落第させるのも人の道だと思うが・・・。
918デフォルトの名無しさん:2005/09/09(金) 14:55:46
この世から宿題をやる気を奪って堕落させ、既得権益を守ろうというのがこのスレの趣旨です。
919デフォルトの名無しさん:2005/09/09(金) 14:59:41
そもそも、宿題丸投げウザイ
というので出来た隔離スレ
920デフォルトの名無しさん:2005/09/09(金) 14:59:59
>>915
どうなおせばいいんでしょう?

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.)

などがエーら分です
921デフォルトの名無しさん:2005/09/09(金) 15:08:00
エーら分 ワロタ
922デフォルトの名無しさん:2005/09/09(金) 15:12:50
>>917 ナカーマ( ・∀・)人(・∀・ )
923デフォルトの名無しさん:2005/09/09(金) 15:31:51
>>920
そのソースには致命的なミスが存在しています。
まず、コードブロックの初めのところでないにもかかわらず変数を宣言しています。
924デフォルトの名無しさん:2005/09/09(金) 15:38:54
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/911.txt
一応のところエラーは出ないようになりました。
どうしてこんなスパゲティコードを書くのかは良く分かりませんが。
925デフォルトの名無しさん:2005/09/09(金) 15:42:11
面白いね。まとめページ作ってくれると、流れが分かるので、手伝えるかも>920
926デフォルトの名無しさん:2005/09/09(金) 16:19:07
んー・・・・最初は>>271かな。
釣り師としては上等なほうだな。
927834:2005/09/09(金) 17:15:59
>>914
あー・・・ごめん、コピペミスorz
>>915の指摘が正解
(intをBOOLEANにtypedefしてるのに、置換し忘れてるのはナイショ

>>924
いろいろ仕様追加していくうちにスパゲッティになってる罠。
最初から読んでくと流れが分かると思う。
928デフォルトの名無しさん:2005/09/09(金) 18:37:08
914です。
今まで自分ができうる限りの努力をいたしてまいりましたができませんでした・・・。
929デフォルトの名無しさん:2005/09/09(金) 18:40:41
>>923
ありがとうございます

>>924
ありがとうございます
さっそく試してみます

>>925
すいませんこれ以上ご迷惑おかけできません

>>927
ありがとうございます。
コンパイル通ったらこれでコードブックを一度作ってしまえば今後作らないでも
そのCBを利用できるということですか?
930デフォルトの名無しさん:2005/09/09(金) 18:57:58
少しも考えようとする頭は無いようだ
931834:2005/09/09(金) 18:59:31
>>929
試してみればわかる。

コードブックが同一のものかどうかは以下の操作で検証可能。

1) 画像1に対し、プログラム実行 → コードブックA作成
2) コードブックAを別名(コードブックA')でコピー
3) 画像2に対し、プログラム実行(コードブックA使用)
4) コードブックAとコードブックA'をdiff等で比較

以上、がんがれ
932デフォルトの名無しさん:2005/09/09(金) 19:27:43
>>924
ありがとうございます
うまくいきました

>>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;
}

このままですとおかしなことになり(近いベクトルを選ぶ際、それぞれを対等に扱ってない
のである特定の色が重視されてしまう)
元に戻しました。

ありがとうございました
933デフォルトの名無しさん:2005/09/09(金) 21:08:54
YCrCb変換についてやってみようと思います。
みなさん本当にありがとうございました。
934デフォルトの名無しさん:2005/09/10(土) 01:32:57
「ました」ってことで、過去になってるな。さようなら。
935デフォルトの名無しさん:2005/09/10(土) 12:07:45
どうでもいい所に目をつけて揚げ足を取る>>934
936デフォルトの名無しさん:2005/09/10(土) 12:34:34
なんか荒れてるね。
回答者は2〜3人だと思うんだけどさ。他の人はスルーすればよろし。
937デフォルトの名無しさん:2005/09/10(土) 14:21:48
今回荒らしてるのは質問者だろ
本人に自覚が無いようなのでたちが悪い
938デフォルトの名無しさん:2005/09/10(土) 14:22:30
>>937
( ´,_ゝ`)プッ
939デフォルトの名無しさん:2005/09/10(土) 14:42:39
はちゃめちゃな質問方法は、意図してやってるって(^^;;
本人が「これ以上ご迷惑おかけできません」って言ってるんだから、もう来ないでしょ。
940デフォルトの名無しさん:2005/09/10(土) 16:18:40
つか、>>934 は、やれやれ過去形だからようやっとお終い、
と考えていいんだよな、という回答側のため息に過ぎないと見るのだが、
それらを揚げ足とりと言ったり、プなどとは、何様のつもりでなんだろか?

941デフォルトの名無しさん:2005/09/10(土) 16:23:22
>>934=>>940
はいはいワロスワロス
942940:2005/09/10(土) 17:08:49
ああ、やっぱり低脳の考えることなんてそんなもんか… 理で書けないし。
940 は 934とはまったくの他人。勝手に巻き込むのは嫌なので念のため。終了
943名無しさん@そうだ選挙に行こう:2005/09/10(土) 17:25:30
一々荒らしに釣られてレスしてる馬鹿が何を偉そうに
944名無しさん@そうだ選挙に行こう:2005/09/10(土) 17:27:05
>>940
同意はするが、>941みたいなのは構うだけ無駄。スルーしなされ。
スルーできないのも低脳の証拠みたいなものですぜ。
#って、漏れもだな。
945名無しさん@そうだ選挙に行こう:2005/09/10(土) 19:38:33
文末に「漏れもだな」とか書くなら最初から書くなよ
946名無しさん@そうだ選挙に行こう:2005/09/10(土) 20:08:23
>>940 意図を汲み取ってくれてありがとよ。
擁護されるとは思ってなかった。
947名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:15:34
948名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:22:55
>947 乙、いいタイミングだ。
949名無しさん@そうだ選挙に行こう:2005/09/10(土) 22:24:37
んん?タイミングを計ったつもりは無いんだが。
950名無しさん@そうだ選挙に行こう
まだだ。まだ終わらんよ。