トップページ⇒tech
1001コメント370KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2005/08/10(水) 17:10:47

あなたが解けないC/C++の宿題を片づけます
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
―――――――――――――――――――――――――――――――

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows/Linux/等々
 [3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
 [3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

【前スレ】
48代目: http://pc8.2ch.net/test/read.cgi/tech/1121471445/

【歴代スレは>>2-13】
0002デフォルトの名無しさん2005/08/10(水) 17:12:05
47代目: http://pc8.2ch.net/test/read.cgi/tech/1120522752/
46代目: http://pc8.2ch.net/test/read.cgi/tech/1119514274/
45代目: http://pc8.2ch.net/test/read.cgi/tech/1118165596/
0003デフォルトの名無しさん2005/08/10(水) 17:12:56
44代目: http://pc8.2ch.net/test/read.cgi/tech/1116914132/
43代目: http://pc8.2ch.net/test/read.cgi/tech/1115794784/
42代目: http://pc8.2ch.net/test/read.cgi/tech/1113811213/
41代目: http://pc8.2ch.net/test/read.cgi/tech/1109542053/
40代目: http://pc5.2ch.net/test/read.cgi/tech/1107625122/
39代目: http://pc5.2ch.net/test/read.cgi/tech/1106650397/
38代目: http://pc5.2ch.net/test/read.cgi/tech/1105541524/
37代目: http://pc5.2ch.net/test/read.cgi/tech/1103913840/
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
0004デフォルトの名無しさん2005/08/10(水) 17:13:40
29代目: http://pc5.2ch.net/test/read.cgi/tech/1090765027/
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
0005デフォルトの名無しさん2005/08/10(水) 17:14:21
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
09代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
08代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
07代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
06代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
05代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
04代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
03代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
02代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
01代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
0006デフォルトの名無しさん2005/08/10(水) 17:31:22
ぬるぽ
0007デフォルトの名無しさん2005/08/10(水) 17:32:53
次すれ
http://pc8.2ch.net/test/read.cgi/tech/1122705615/
じゃねの?
0008デフォルトの名無しさん2005/08/10(水) 17:37:00
VIPに汚染されたスレなんか誰がいくか
0009デフォルトの名無しさん2005/08/11(木) 11:07:53
【質問テンプレ】
[2] 問題文(含コード&リンク): x1,y1,x2,y2に外接する楕円があり
点x,yがその円の内側か外側かの判定をする関数を作れ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: ANSI C
 [3.3] 言語: C
[4] 期限: 9月1日まで
[5] その他の制限: なし
0010デフォルトの名無しさん2005/08/11(木) 12:02:31
(x1,y1),(x2,y2)に外接する「円」でおk?
0011デフォルトの名無しさん2005/08/11(木) 12:05:05
>>10
箱の中に入ってる楕円の中か外かというイメージです
0012デフォルトの名無しさん2005/08/11(木) 12:06:23
楕円じゃ、2点だと特定できないもんねぇ。
つーか、(x1, y1) - (x2, y2)の線分も楕円がつぶれた形と言えるし。
そうか、全ての点は内側に成らない可能性があるから判定の必要ないじゃん(ぉぃ
0013デフォルトの名無しさん2005/08/11(木) 12:09:11
(x1, y1)
(x1, y2)
(x2, y2)
(x2, y1)
の4点に外接する楕円ってこと?
0014デフォルトの名無しさん2005/08/11(木) 12:14:12
>>13
あーは子の中に入ってる楕円ってそういう意味かなるほど。
>>9
問題文をもっとわかりやすくかけよ
0015デフォルトの名無しさん2005/08/11(木) 12:16:46
申し訳ないです
0016デフォルトの名無しさん2005/08/11(木) 12:34:06
楕円の焦点が斜めにあるときも考慮するのか?と考えた瞬間思考をとめた俺ガイル
なんかうまい方法あるのかな??期待してます。
0017デフォルトの名無しさん2005/08/11(木) 12:37:54
斜めの楕円とかあり得るの?あり得るならまた問題文の不備だ罠。

>>9
ま、斜めを考慮しないなら

/* 外側なら正、楕円上ならゼロ、内側なら負を返す */
int wrt_ellipse(double x1, double y1, double x2, double y2, double x, double y)
{
double x0, y0, a, b, d;
x0 = (x1 + x2) / 2.0; y0 = (y1 + y2) / 2.0; a = (x2 - x1) / 2; b = (y2 - y1) / 2;
d = (x - x0) * (x - x0) / (a * a) + (y - y0) * (y - y0) / (b * b);
return d == 1.0 ? 0 : (d > 1.0 ? 1 : -1);
}
0018デフォルトの名無しさん2005/08/11(木) 12:38:37
さすがに斜めは無しです・・・
0019デフォルトの名無しさん2005/08/11(木) 12:39:45
>>17
おお!ありがとうございます!!!
0020デフォルトの名無しさん2005/08/11(木) 12:40:53
>>11
箱の中なら内接じゃないのか?
0021デフォルトの名無しさん2005/08/11(木) 15:19:57
a
0022お願いします。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無し)
0023デフォルトの名無しさん2005/08/11(木) 15:27:00
なにこいつ。問題文を用意してから纏めて書けよな。
0024デフォルトの名無しさん2005/08/11(木) 15:28:08
制限が意味不明・・・
0025デフォルトの名無しさん2005/08/11(木) 15:34:19
時間がどんどん過ぎてゆくww
5時間くらいっていつまでだwwww
0026お願いします。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
0027お願いします。2005/08/11(木) 15:37:49

例えば、ユーザーがhelloと入れたらコンピューターはhello to you tooと応える
ファイルのデータをプログラム内のArrayにロードして、ユーザーのInputにパターンがあるか
探す。(find関数を使って)もしあれば、応える。Structとかも使ってよい。
==は使ってはいけない。

もし”my name is mud" や"do you know my name is" のInputなら
"thank you for telling me your name." と返す。

プログラムはランダムに選ばれる3つのDefaultResponsesも含んでなければいけない。
もし、適切なResponseがChatbotにないときにこの内の一つを返す。

ユーザーがbyeと入れたら、プログラム終了。

ユーザーInputを"I"以外全てLowercaseに変える。
0028デフォルトの名無しさん2005/08/11(木) 15:44:29
酷い英語だ。
0029お願いします。2005/08/11(木) 15:47:26
英語のを日本語に訳したんですけど
0030デフォルトの名無しさん2005/08/11(木) 15:49:24
なんか、ところどころ変な英語混ぜてルー大柴みたいな文章だな。
0031デフォルトの名無しさん2005/08/11(木) 15:57:36
ワロタw
つか酷い英語だと思ったら全部目的語を抜いてるのかよ。
"do you know my name is"ってなにかと思った。
私の名前が存在していることを知っていますかってなんじゃw
で、制限についてもうちょっとまともな説明は無いのか?
0032デフォルトの名無しさん2005/08/11(木) 16:13:54
要は人工無脳か。
0033お願いします。2005/08/11(木) 16:22:12
I hope someone is working for me,,,,
0034デフォルトの名無しさん2005/08/11(木) 17:27:17
But anybody don't do it....
0035デフォルトの名無しさん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] 期限: [無期限]
0036デフォルトの名無しさん2005/08/11(木) 18:28:50
>>35
グローバルスコープとmain()関数内スコープを持つ二つのaがあることは判るかな?
同様にグローバル変数とf()関数内ローカル変数の二つのbがあるわけだ。
cは唯一グローバルにしかないからこれが一番判りやすかろう。
cの出力の結果を踏まえて、aとbについても考えてみれば判るんでないかな?
0037352005/08/11(木) 18:42:54
>>36
ありがとうございました。
とても解りやすい説明ですね。
モヤモヤが晴れてすっきりしました。
0038お願いします。2005/08/11(木) 23:28:58
>>26お願いします
0039お願いします。2005/08/11(木) 23:30:53
>>26お願いします
0040デフォルトの名無しさん2005/08/11(木) 23:57:35
制限が糞過ぎてやる気にならん。
== つかうなってなんだよ。
std::map つかわせろよ。
0041お願いします。2005/08/12(金) 00:27:29
お願いしますよ〜
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

string reply(string input)

int main()
{
string chat[100000];

ifstream file;
file.open("chatbot.txt");

for(int i=0; ; i++)file>>chat[i];

string input=" ", output=" ";

cout<<"Hello! Talk to me"<<endl;

do{
getline(cin, input);
output=reply(input);

}while(input!="bye");
0042デフォルトの名無しさん2005/08/12(金) 00:30:18
return 0;
}

string reply(string input)
{
int p1, p2

p1=input.find("hello")

ここまでやってつまってます。。。
0043デフォルトの名無しさん2005/08/12(金) 00:45:43
ああすばらしきかなstringの値渡し。
マジセンスねぇ
0044デフォルトの名無しさん2005/08/12(金) 00:50:11
データファイルを読み込む先が
std::vector<std::pair<std::vector<std::string>, std::string> >になりそうだけど、いい?
0045デフォルトの名無しさん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);
    }
}
0046>>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;
    }
}
0047予言2005/08/12(金) 01:00:27


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


0048452005/08/12(金) 01:00:35
後はまぁ頑張って。
0049デフォルトの名無しさん2005/08/12(金) 02:10:10
vecto(ry
0050デフォルトの名無しさん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] その他の制限: 標準でインストールされないライブラリは使用不可


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

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

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

んで>>45-46さんが書いてくれてるから見ときな。。
0056前スレの606、875です2005/08/13(土) 23:06:08
すみません前スレより参りました。
前スレの>>985のコードを組み込んだのですが、強制終了してしまいます。
私の組み込み方が悪いのかも知れませんので、前スレ985のコードを取り込んだ
すべてのコードをロダにUPしていただけませんでしょうか。お力添えよろしくお願いいたします。
0057デフォルトの名無しさん2005/08/13(土) 23:27:36
人に頼む方法もあるが、自分から情報を出すという手もある。
・自分で手を入れたソース
・出てくるエラー
・強制終了の手順
をアップしてみたら?
0058前スレの606、875です2005/08/14(日) 00:01:15
>>57
はい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/821.c
これが元のコードです。
このコードに前スレ985の関数を追加し、mainのwhileの前で呼んでも、
登録の時、ファイルを開く時にほとんどの場合、強制終了してしまいます。
0059デフォルトの名無しさん2005/08/14(日) 00:30:30
いや・・だから・・・
・問題文(条件やら前提やら全部)
・あなたが修正を加えたソース
・操作手順(データファイル作って、次に読み込ませるところまで)
・データファイルの内容
・もしコンパイル時にエラーが出るならそのエラー
をUP。
答えられる人でも情報が小出しだと、面倒で答えたくなくなるから。
聴く人も丁寧にやらなくちゃ・・・ね?
0060デフォルトの名無しさん2005/08/14(日) 00:33:37
>>56
ちゃんと動いたぞ。Linuxだけど。細かくは見てない。
0061前スレの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していただけるとありがたいのですが・・・。
よろしくお願いいたします。
0062デフォルトの名無しさん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);
    }
}
0063デフォルトの名無しさん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は使用してはいけない
0064デフォルトの名無しさん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;
}
0065デフォルトの名無しさん2005/08/14(日) 13:44:29
>>64
ありがとうございます!
0066デフォルトの名無しさん2005/08/14(日) 16:39:48
%xがダメなら%Xを使えばいいじゃない。
0067デフォルトの名無しさん2005/08/14(日) 16:41:41
おまえ、クビ。
0068デフォルトの名無しさん2005/08/14(日) 16:49:53
王妃様に向かってなんてことを
0069デフォルトの名無しさん2005/08/14(日) 16:59:26
整数のデータを線形リストに格納しているとする。リストは次のように
定義され、空はマクロNULLで表す。

struct TreeNode{
int value;
struct TreeNode* left;
struct TreeNode* right;
};

二分木と正の整数nを受け取り、nよりも大きな値を持つ要素の位置と
値を出力する、次のような名前と型を持つC言語の関数を定義せよ。

void printLargerForTree(struct TreeNode* data,int n);

ただし二分木中のノードの位置は次のような数で表現することにする。

・ルートノードの位置は0で表現される。
・あるノードの位置がxで表されるとき、そのleft側の子ノードの位置は2x+1
そのright側の子ノードの位置は2x+2で表される。

この関数を定義するにあたって、printLargerForTreeの引数を一つ増やした
補助的な関数
void printLargerForTreeAux(struct TreeNode* data,int n,int pos);
を再帰的に定義し、この関数を利用してvoid printLargerForTreeを定義せよ。

お願いします。
0070デフォルトの名無しさん2005/08/14(日) 17:06:59
>>69
>>1のテンプレ読もうか
0071デフォルトの名無しさん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] その他の制限:問題文に記載

0072デフォルトの名無しさん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;
}
0073デフォルトの名無しさん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;
}
0074デフォルトの名無しさん2005/08/14(日) 21:20:31
>>69
大きいノードすべてを表示するのか、それとも1つだけでよいのか
0075デフォルトの名無しさん2005/08/14(日) 21:37:17
>>74
すいません。
大きいノード全てを表示します。
0076デフォルトの名無しさん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);
}
0077デフォルトの名無しさん2005/08/15(月) 00:35:52
>71
元の文字列が250文字あって、たとえば50文字を挿入するとかってヤヴァくね?
0078デフォルトの名無しさん2005/08/15(月) 00:40:18
>>77
宿題だし。それに、それを呼び出し元が管理するか呼び出し先が
管理するかはポリシーの問題。
0079772005/08/15(月) 00:46:05
>78
でも挿入位置のチェックだけは呼ばれた側でやるの?おかしくね?
0080デフォルトの名無しさん2005/08/15(月) 00:50:01
与えられた引数でできることはするポリシーなんだよ、うぜーな
0081デフォルトの名無しさん2005/08/15(月) 00:56:50
>80
でも与えられたポインタがNULLかどうかはチェックしない、と
0082デフォルトの名無しさん2005/08/15(月) 00:59:41
>>77は自分でコード出さない割に必死だな
0083デフォルトの名無しさん2005/08/15(月) 01:07:55
テストケースからプログラム作ることで、そこら辺の曖昧さを明確にせざるをえない
0084デフォルトの名無しさん2005/08/15(月) 01:08:14
str系のNULLチェックしないのはスタンダードポリシーだ
0085デフォルトの名無しさん2005/08/15(月) 01:15:02
たとえば、
strcpy()の受け側の文字列が十分に大きくない場合 (つまり、プログラマが間抜けか不精で、
コピーする前にサイズをチェックすることを怠った場合)、何が起こるかわからない。
固定長文字列を溢れさせるのはクラッカーが好むテクニックである。
0086デフォルトの名無しさん2005/08/15(月) 10:12:49
じゃあ、どうすればいいの?(;´Д`)
0087デフォルトの名無しさん2005/08/15(月) 10:27:53
課題出してる人だってわかって書いてるだろ
ただの宿題なんだろうし。
0088デフォルトの名無しさん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] その他の制限:特になし
おながいします
0089デフォルトの名無しさん2005/08/15(月) 15:35:58
>88
すまん、簡単すぎて食指が動かん。

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

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

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

(もれだったらgetchar()かな)
0103デフォルトの名無しさん2005/08/15(月) 18:34:36
スペース空ければ
0104デフォルトの名無しさん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;}
0105デフォルトの名無しさん2005/08/15(月) 18:44:37
>printf("ホモお断り。\n"); break;

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

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

あとは、気が向いたら読み込んだデータをsqliteを使って保存するように変更してみますか
0133デフォルトの名無しさん2005/08/16(火) 22:40:34
>>88
kumikoさんがあり得ないほど太っている件
0134デフォルトの名無しさん2005/08/16(火) 22:50:03
>>88
体重と平均体重が一緒の場合はどうすればいい?
0135デフォルトの名無しさん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になるんですが、どうしてでしょうか?
0136デフォルトの名無しさん2005/08/17(水) 01:36:26
>>135
0.00になるだけまし
a, bが不定なのに参照している
未定義動作。ハードディスクをフォーマットされてな
0137デフォルトの名無しさん2005/08/17(水) 01:39:18
そんなプログラムを動かすなら、パソコンが壊れたときの責任は免責させてください。
0138デフォルトの名無しさん2005/08/17(水) 01:41:52
>>137日本語変だよ
0139デフォルトの名無しさん2005/08/17(水) 01:42:45
>>136
自分でa,bを自分で入力して面積をだしたいと思ったのです
0140デフォルトの名無しさん2005/08/17(水) 01:43:53
「自分で」使いすぎちまった
0141デフォルトの名無しさん2005/08/17(水) 01:46:02
>>139 だから何なんだ?w

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

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

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

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

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

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

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

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

他のスレでは別の意味で使うが(^^;;
0153デフォルトの名無しさん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;
}
0154デフォルトの名無しさん2005/08/19(金) 23:31:45
>>153
gets 関数は境界チェックが無くて危険なので fgets 推奨。
あとは特に問題はないと思う。
01551292005/08/20(土) 00:33:51
特に問題ないというか・・・
まだ他人に評価してもらうほどのものじゃないぞ・・・
printf(">");のあとにfflush(stdout);するのがいいんじゃないか

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

これらの情報があるとヒントが出せると思う。
0159デフォルトの名無しさん2005/08/20(土) 11:41:19
>>155
fflushは必要ない
getsの段階でflushされる
0160デフォルトの名無しさん2005/08/20(土) 13:36:53
文字の配列に平仮名を格納して一文字ずつ取り出し、
あ〜おはアルファベットに直し、それ以外は 'N' を表示するプログラムを作れ、という問題で
とりあえず 'あ' だけ処理してみようと以下のルーチンを作成してみたのですが 'N' しか表示されません。
どうすれば正しく表示されるのでしょうかorz

#include <windows.h>
#include <stdio.h>

void main() {
WCHAR* temp = L"あいうえおかきくけこ";

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


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

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

もし0〜100なんだったら
>0〜9     1個
>10〜19   2個
>20〜29   0個
>   :
>   :
という仕様の設定があいまいになるよな。100はドコに入るんだって。
あなた様は100は特別だ、ということでans[11]にしたいようだが、
そんなことは喪前の脳内で決まったことであってそれこそ書いてないぞ。
あと知ったかブリはやめとけyo
0196デフォルトの名無しさん2005/08/22(月) 15:18:08
いつもニヤニヤしながら見てるよw
0197デフォルトの名無しさん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としてカウントすれば問題なし。


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

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

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

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

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

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

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

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

カレンダーにしたって何年から何年まで正しく動作するとかあるでしょ。
0212デフォルトの名無しさん 2005/08/22(月) 15:49:02
誤差は適当でいいだす
数字あふれてもかまいません
0213デフォルトの名無しさん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;
}
0214デフォルトの名無しさん 2005/08/22(月) 15:52:44
cで書いてくれるのが
ベストです(・ω・)
0215デフォルトの名無しさん2005/08/22(月) 15:58:57
>>214
だからCで書いてんじゃん
0216デフォルトの名無しさん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;
}
0217デフォルトの名無しさん2005/08/22(月) 16:06:52
>>216
>>203は1/r^nまで足してるからfor(e=0; e<=n; e++)じゃないかな
02182162005/08/22(月) 16:16:17
>>217
そうだった・・・指摘ありがトン

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

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

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

// r をきくかたち
printf( "? r = " );
scanf( "%d", &r );
02211772005/08/22(月) 16:36:58
皆さん素早い解答ありがとうございます。
書いていただいたことを参考にしてやってみます。
02222162005/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;
}
02232132005/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;
}
02242162005/08/22(月) 16:57:54
ちなみに、
>>216を簡単にすると>>213になる。
>>222 → >>223も同様。

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

あう゛。終わんない。
0231デフォルトの名無しさん2005/08/23(火) 22:23:09
つ Boost.Spirit
0232デフォルトの名無しさん2005/08/23(火) 22:32:35
>>231
豪華すぎ。
yaccで充分というか、あんなの自前でやるべき。
それこそlispの醍醐味というもんだろ。
0233デフォルトの名無しさん2005/08/23(火) 23:56:52
トークン切り出しはそっちのけで、内部データ構造の案。
最初はどーしよーもないんで、数、シンボル、リスト、関数型のみ扱うことにします。

#define TYPE_INT 0x00000000UL
#define TYPE_SYM 0x10000000UL
#define TYPE_LST 0x20000000UL
#define TYPE_FNC 0x30000000UL
typedef unsigned long Value;
struct Symbol { char *name; Value value; }; /* てかこれだけじゃletが扱えん・・・ */
struct Symbol symbol[1000];
struct Cell { Value car, cdr; }; /* たぶん、これだけじゃゴミ集めできん */
struct Cell list[1000];
悩む。
0234デフォルトの名無しさん2005/08/24(水) 17:50:13
[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] その他の制限: 特に無し
よろしくおねがいします。
0235デフォルトの名無しさん2005/08/24(水) 18:10:11
>>234
実行例見ると12と33が出現回数同じだけど、
そういうときってどうするの?
テキトーでいいの?
02362342005/08/24(水) 18:30:50
条件1に、最頻値が複数ある場合は、最も大きい値のデータを表示対象とする。とあるので
33が出るようにお願いします。わかりにくくて申し訳ないです。
0237デフォルトの名無しさん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;
}
02382342005/08/24(水) 19:17:52
>>273さん
ありがとうございました。
num = num > 0 ? num < 20 ? num : 20 : 1;
の部分は学校では習っていなかったので、ここだけ
if(num > 0 && num <= 20){〜条件に合致すれば入力処理へ進む〜
}else{合致しなければおしまい
 といった形にいじらせてもらいました。では失礼します。
02392342005/08/24(水) 19:18:52
訂正、>>237さんでした・・・orz
0240デフォルトの名無しさん2005/08/25(木) 00:14:28
いんたぷりたorこんぱいらの男です。
もぉあきらめました。ご意見をくださったかた、心があたたかくなりました。
ご好意に添えないことが残念です。

友人にみせてもらって共同で作ったことにさせてもらいます・・・。
友人も出来てないみたいですが。なんとかやってくれるでしょう。
0241デフォルトの名無しさん2005/08/25(木) 02:56:28
しかし最近の高専ってレベル高いのな。
高校生とは言え宿題でコンパイラは辛いだろ。
俺だって一月でCコンパイラ作ってこい言われたらキツいぞ。
0242デフォルトの名無しさん2005/08/25(木) 03:01:36
>>241
ネットに転がってるのが前提なんじゃない?
専門学校でCASLアセンブラ作れって課題は出てたが、漏れはさっぱり分からなかった。
0243デフォルトの名無しさん2005/08/25(木) 10:36:14
yaccで逆ポーランド記法のインタプリタを作らされたことならあるぞ。
0244デフォルトの名無しさん2005/08/25(木) 22:01:23
>>243
激しく無駄だな。ワロス。
0245デフォルトの名無しさん2005/08/26(金) 00:38:48
RPNなんて7行プログラミングの管轄だろw
0246デフォルトの名無しさん2005/08/26(金) 03:29:03
7行か……#includeを書かないのが美学?
0247デフォルトの名無しさん2005/08/26(金) 14:16:05
【質問テンプレ】
[1] 授業単元:C言語�T
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/874.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] BCC
 [3.3] 言語: C/C++/どちらでも可
[4] 期限: [2005年09月3日まで]
[5] その他の制限:特になし
どうかお願いします。
0248デフォルトの名無しさん2005/08/26(金) 14:49: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];
}
0249デフォルトの名無しさん2005/08/26(金) 16:48:05
>>247が↑のMax()とMin()の中身を理解できてるか心配。
0250≠2482005/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]);
}
0251デフォルトの名無しさん2005/08/26(金) 17:10:29
いけずなおまいらが大好きです
0252デフォルトの名無しさん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];
}
0253デフォルトの名無しさん2005/08/26(金) 17:29:29
>>247のに挑戦してたんだけど、なるだけ汎用的な
Max(int*),Min(int*)に仕上げようと思って
渡された配列の要素数を計算しようとしたのですが
sizeof(src)/sizeof(src[0])でうまく出なかったので
何でなのかと弄ってたら、srcは関数内ではあくまで配列の
先頭へのポインタでしかないからsizeof(src)してもダメなのは
当然だという所までは気づいたんですが、こういう場合
要素数はどうやって求めればいいんでしょう?
やっぱり配列を扱える方で計算した上で引数として渡すしかないんでしょうか?

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

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

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

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

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


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

考えがまとまらずにフラフラしてしまって申し訳ありません。
なかなかうまく進まず焦ってしまっています。
一旦自分で考え直してもう一度質問すべきことを練り直します。
0271デフォルトの名無しさん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乗の場合があるわけでターミナルに上のように表すのはどうかと思うので
エクセルなどでヒストグラムを作れるようにすること。といわれました。どうかよろしくお願いいたします。

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

習ったデータ構造は?(2分探索木、ハッシュ、mallocする形の二次元配列)
習ったバイナリファイルを読み込む方法は?
出力はアスタリスクの横棒とエクセルファイル、どちらを作ればいいの?
0273デフォルトの名無しさん2005/08/27(土) 04:28:11
>>271
普通にバイナリモードで開いて、freadでunsigned longの変数に
放り込めばよくないか?
0274デフォルトの名無しさん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)とかだと、処理系依存じゃねぇか?
0275デフォルトの名無しさん2005/08/27(土) 04:44:47
>>272
習ったデータ構造についてですが、正直授業についていけなくてわかりません。
出力についてですが、0〜2の32乗の値のそれぞれの出現頻度をグラフ化したいわけで、
アスタリスクの横棒ですとターミナルに表示するのは非常に困難だと思いますし、
もし可能であれば、出力されるファイルをエクセル形式のファイルにして、それを
エクセルで開いて、縦軸に0〜2の32乗それぞれの出現頻度が、
開いたエクセルファイルに10進法で書かれていれば、それらから
グラフを作りたいなと考えております。
他の方法としても、ターミナルに一度に0〜2の32乗の出現頻度を表示することはできないので
100づつくらい、出現頻度を表示させておいて、それをエクセルに少しずつこぴぺしていこうと
考えております。私の発想ではこのくらいのことしかおもいつかないのですが
もっといい方法があったらそちらでプログラムを組んでいただけると助かります。
私の説明不足なために理解に苦しまれるところがたくさんあるとは思います。すみません。

0276デフォルトの名無しさん2005/08/27(土) 04:50:07
エクセルも64K行しか作れないわけだが。
0277デフォルトの名無しさん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で表示させる方法をしてみようとしたのですが
できませんでした。セグメンテーション違反もでまして、無理でした。
0278デフォルトの名無しさん2005/08/27(土) 04:53:11
>>276
それは知りませんでした。
何かいい方法で、0〜2の32乗を横軸とし、縦軸を出現頻度としたグラフは作成できないのでしょうか?
0279デフォルトの名無しさん2005/08/27(土) 04:57:08
>>278
試しに、2の32乗がどんな値か計算して味噌。
できれば、それを表示するためにどれだけのメモリが必要になるかも。

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

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

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

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

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

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

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

ありがとうございます。
0290デフォルトの名無しさん2005/08/27(土) 08:51:07
>>287
ありがとうございます。
適当なバイナリを作って確認したところそのとおりになりました。
直接会ってお礼をいいたいところですが、本当にありがとうございます。
本当に助かりました。ありがとうございます。
0291デフォルトの名無しさん2005/08/27(土) 23:14:58
>直接会ってお礼をいいたいところですが、
ちょっと引いたぞ
0292デフォルトの名無しさん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のように出力させていただければ自分でエクセルを使ってヒストグラムを求めたいと考えております。
どうぞよろしくお願いいたします。   
0293デフォルトの名無しさん2005/08/28(日) 02:56:37
バイナリをテキストに変換してくれって言ってるんですか?
例)
R1,G1,B1,
R2,G2,B2,
.......
0294デフォルトの名無しさん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)メンドイからバイナリをどっかにおくと、いいかも。
0295デフォルトの名無しさん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
0296デフォルトの名無しさん2005/08/28(日) 03:14:08
RGB値の値の計算式をR,G,Bを使ってあらわすこと>295
0297デフォルトの名無しさん2005/08/28(日) 03:16:38
すみません ずれてました

>>293


RGB値   出現頻度
0         9
1       25
2 0        
3         109 
・ ・
・         ・
・
2の24乗    13

出現頻度が0の場合は表示しないようにすればなんとか収まると思うのでよろしくお願いします。
上のようにしてもプログラムできるというなら上のようなバージョン(出現頻度が0でも表示する)と
下のバージョン(出現頻度が0の場合は表示させない)二つしてもらえると助かります。
表示しないでおくと下のようになります。

RGB値   出現頻度
0         9
1       25      
3         109
・         ・
・
2の24乗    13

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

以上。
0372デフォルトの名無しさん2005/08/28(日) 10:59:10
>>371
ありがとうございます
やってみます
0373デフォルトの名無しさん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を単純に逆転させるだけでいのでしょうか?
0374デフォルトの名無しさん2005/08/28(日) 12:52:24
いまさらなんですが入力ファイルを十進法で表現したファイルをアップしたほうがいいでしょうか?
0375デフォルトの名無しさん2005/08/28(日) 12:56:21
>>374
出力だけ有っても無意味
入力とそれに対応する出力のセットか、片方だけなら入力
0376デフォルトの名無しさん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出現頻度を求めることもできるかなとおもって
アップしたほうがいいかをお聞きしました。
0377デフォルトの名無しさん2005/08/28(日) 13:09:52
バイナリをそのままあげなさい。
データを処理した後のものを出されても仕方ない。
0378デフォルトの名無しさん2005/08/28(日) 13:21:42
言葉で伝えられないなら全部丸投げしろ。

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

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

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

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

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

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

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

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

みなさんありがとうございます。
0421デフォルトの名無しさん2005/08/28(日) 15:46:47
>>416
すいません、わかりませんでした
0422デフォルトの名無しさん2005/08/28(日) 16:38:19
セパレータで区切られた文字列の中から
指定したカラム数の文字列を取り出す関数を作れ
ex) str[] = "abc,def,ghi"
   sep = ','           →    defがとれる
   column_num = 2

という問題があり
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/880.txt
のように作ってみたのですが、コンパイルの際に

cc -o token_cut token_cut.c
token_cut.c: In function `main':
token_cut.c:28: warning: passing arg 2 of `token_cut' makes pointer from integer without a cast

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

こんなんいらん。

if(r_string == NULL)

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

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

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

ちょっと気になったんで・・・
0439デフォルトの名無しさん2005/08/28(日) 22:44:35
unsigned long i;
for (i = 0; i < 0xfffffffUL - 1; i++) {
  /* 処理 */
}
と比較してみたら? >438
0440デフォルトの名無しさん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を足すと次の値は何か?
0441デフォルトの名無しさん2005/08/28(日) 22:45:34
>>437 は普通に終わったよ。
0442デフォルトの名無しさん2005/08/28(日) 22:46:37
追加で
unsigned char i;
for(i=0xff;i>=0;i--){
}
もバグの原因となるので要注意
0443デフォルトの名無しさん2005/08/28(日) 22:47:05
>>440
なんで終了条件が <= になってんの?
そんなこと誰も言ってないよ?
0444デフォルトの名無しさん2005/08/28(日) 22:53:11
>>437がアフォなだけ
終了
0445ぼるじょあ ◆yBEncckFOU 2005/08/28(日) 23:49:47
(・3・)アルェ〜 ここは僕が降臨する所なのかYO!
0446デフォルトの名無しさん2005/08/29(月) 01:50:45
まあ、今週からお客さん増えるから、ぼちぼちな。
0447デフォルトの名無しさん2005/08/29(月) 03:06:30
二次元配列の課題を解いているのですが二次元配列の終わりの部分でエラーになってしまいます。
どこが悪いのでしょうか?

int price[7][7]={{600,800,1000,1200,1400,1600,1700}, /* 県内 */
{700,900,1100,1300,1500,1700,1800}, /* 第1地帯 */
{800,1000,1200,1400,1600,1800,2000}, /* 第2地帯 */
{900,1100,1300,1500,1700,1900,2100}, /* 第3地帯 */
{1000,1200,1400,1600,1800,2000,2200}, /* 第4地帯 */
{1100,1300,1500,1700,1900,2100,2300}, /* 第5地帯 */
{1200,1400,1600,1800,2000,2200,2400}}; /* 第6地帯 *//

よろしくお願いいたします。
0448デフォルトの名無しさん2005/08/29(月) 03:10:51
エラーメッセージは?
0449デフォルトの名無しさん2005/08/29(月) 03:11:07
スラッシュが一つ多いとかでないことを祈る。
つか、テンプレ読もうな。
0450デフォルトの名無しさん2005/08/29(月) 03:12:39
ぱっと見宣言に間違いはないっぽい。
つーかテンプレ使えよ
0451デフォルトの名無しさん2005/08/29(月) 03:15:37
やっぱ、スラッシュか?
てゆーか、テンプレにしたがえよ。
0452デフォルトの名無しさん2005/08/29(月) 03:15:57
ソースコード全部とエラーメッセージ。あと、コンパイル方法。
1レスに収まらないなら、>>1のアップローダ。
0453デフォルトの名無しさん2005/08/29(月) 16:29:39
よろしくお願いいたします。

[1] 授業単元: 人工知能
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/883.txt

このプログラム(↑)を変更し、12×12の世界で、
開始地点(左上)と目的地点(右下)と障害物を設計して、
各セルにランダムに点数を配置し、移動の度に点数を獲得し、
目的地点に達した時に獲得点数の合計を出力するSマリオのプログラムを作成せよ。

(プログラムは8×8の世界で壁にそって右にぐるぐる回るか、障害物をぐるぐるまわる
Sマリオのプログラムです。実行可能です。)

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語: C
[4] 期限: [2005年8月31日まで]
[5] その他の制限: なし
0454デフォルトの名無しさん2005/08/29(月) 17:49:59
マリオは自分では座標値を持ってなくて、
MAPを上書きするのか・・・マンドクサ

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

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

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

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

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

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

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

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

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

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

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

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

0485デフォルトの名無しさん2005/08/30(火) 20:12:07
自分でまずはソース書いて見れ。
0486デフォルトの名無しさん2005/08/30(火) 20:14:57
【質問テンプレ】
[1] C言語学習
[2] 指定した行に書き込みを出来る関数を作れ
[3] 環境
 [3.1] OS: Windows
 [3.2] VC++6.0 Pro
 [3.3] 言語: C/C++/どちらでも可 のいずれか
[4] 無期限
[5] 標準ライブラリ可

関数名 filesave(書き込む行「int型か数値」,書き込む文字列);
にて製作する事です。
FILEやfprintfなどは習いましたが行単位の書き込みはまだです。
0487デフォルトの名無しさん2005/08/30(火) 20:28:16
>>486
ソース書いてる暇無いのでヒントだけ

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

  2 3 4 5
  1 5 2 7
  3 9 4 6
  ・
  ・
  ・

の様な各列がスペースで区切られた約40000行のデータファイルがあります。
(*ファイルの1列、2列目はスペースがある)
このデータファイルを読み込んで、各列ごとのヒストグラムを出力(printfで)したいのです。
どのようなCプログラムを作ればいいのでしょうか?
初心者なので具体例を提示していただければありがたいのですがm(__)m
0492デフォルトの名無しさん2005/08/31(水) 00:51:09
問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がレコードに存在するか調べるにはどのようにすればいいのか
実際にプログラムを作成し考えてみよ。

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

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

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

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

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

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

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

すいませんでした
0522デフォルトの名無しさん2005/09/01(木) 09:01:38
なんかよくわからんが添削なんて誰もしたくないと思うぞ
0523デフォルトの名無しさん2005/09/01(木) 09:04:03
まあ、ものは試しだよ。
0524デフォルトの名無しさん2005/09/01(木) 10:25:55
俺、どーしょーもないプログラムみると(マジで)吐き気がするんだが・・・
0525デフォルトの名無しさん2005/09/01(木) 10:28:09
>>524
毎日自分の書いたプログラム見て吐いてるのが
大変だな
0526デフォルトの名無しさん2005/09/01(木) 10:39:03
あー。それもやるな。<自分のコードに吐き気
寝ぼけてデバッグしたのなんか、そうだ。
0527デフォルトの名無しさん2005/09/01(木) 10:51:24
嫌味を華麗にかわされてちょっと悲しい漏れが去りますよ
0528デフォルトの名無しさん2005/09/01(木) 22:04:57
赤黒木を実装せよってな問題が出たんですが、
ノードの削除がよくわからず死んでます。
・・・ノードに削除フラグつけるだけじゃダメでしょーか。
0529デフォルトの名無しさん2005/09/01(木) 22:21:30
>>528
>>1
0530デフォルトの名無しさん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] その他の制限:
0531デフォルトの名無しさん2005/09/01(木) 22:37:24
>>530
せめて自分がどこまでやって、どこのコーディングで詰まってるのかぐらい
ソースだしたらどうよ?
0532デフォルトの名無しさん2005/09/01(木) 22:42:32
流れを見て、添削より丸投げのほうがいいのかなと。
ソース出したほうがいいのしょうか?
0533デフォルトの名無しさん2005/09/02(金) 00:15:47
独学で詰まってしまったので教えてください。
[問題]
木星の衛星
Io 5 1.1763 //衛星名、光度、周期
Europe 6 3.5512 //衛星名、光度、周期
Ganymede 5 7.1454 //衛星名、光度、周期
Callisto 6 16.6890 //衛星名、光度、周期
を構造体にいれ、周期をキーにソートして下さい。
また、データのスワップに別のインデックスを使用して
ソートはインデックスを使って行います。
0534デフォルトの名無しさん2005/09/02(金) 00:24: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 ;
}

0535デフォルトの名無しさん2005/09/02(金) 00:26:58
>>533
別に構造体の配列作って、周期を基準にして大小返す関数作って
qsort()使えば済む話の気がしないでもないが
05365342005/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" );
}
}
0537デフォルトの名無しさん2005/09/02(金) 00:34:16
ソートはバブルソートをしなくてはいけないのです。
534は普通に周期をキーにバブルソートをしたものです。
これに構造体indexを使い、index内の添え字をソートして
その指す値がsatelliteになるようです。
index[1] の指す値がsatellite[0]であるといった内容です。
0538デフォルトの名無しさん2005/09/02(金) 00:40:45
あー……出したもんは動くのか?
0539デフォルトの名無しさん2005/09/02(金) 00:43:34
なんかお前のなかで型名と変数名が
ごっちゃになってるような印象を受ける
0540デフォルトの名無しさん2005/09/02(金) 00:47:45
出したものは動きます。

>>539
確かにごっちゃになっているかもしれません。
良かったらご教授ください。
0541デフォルトの名無しさん2005/09/02(金) 00:49:34
上のコード内だと
satellite が型名で jupiter が変数名だと思って書いています。
main関数内でjupiterを宣言した時にメモリに領域が確保されていると
思っているのですが、間違っていますか?
0542デフォルトの名無しさん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: 警告: フォーマットへの引数が少なすぎます
0543デフォルトの名無しさん2005/09/02(金) 01:02:15
すいません、本当に釣りでは無いんです。
まだ始めたばかりで悩んでいます。
VC++でビルドしたら実行出来たので、実行できると思っていました。
0544デフォルトの名無しさん2005/09/02(金) 01:02:56
ちなみにdisplay関数はmainの上で宣言してます。
0545デフォルトの名無しさん2005/09/02(金) 01:05:13
>>533
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/894.c
0546デフォルトの名無しさん2005/09/02(金) 01:07:14
>>543
じゃあその実行できたコードをそのまま晒せ
0547デフォルトの名無しさん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];
}
0548547(続き)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;
}

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

ってか本当に何がしたいんだ?
0551デフォルトの名無しさん2005/09/02(金) 01:43:34
おっしゃられたとおり、自分でできるところまでやってみました。
ですが、結果がどうもおかしくなります。(0で構成されるボクセルがが多すぎる)
添削お願いいたします。

[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/895.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: [2005年8月31日17:00まで] 過ぎても提出できます。
[5] その他の制限:

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

という答えなら何点もらえますか?
0560デフォルトの名無しさん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
05615542005/09/02(金) 05:29:40
>>551
カウンタがいっぱいでよく分かりませんでした。
ところどころにコメント入れてもらえれば読みやすいと思います。
自作関数呼び出し、ループとコメントを抽出してフローチャートになるくらいに。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int main(void)
{
int i;
for(i =0; i < 10; i++){
printf("**********\n" + i)
}
}
このiがどういう作用をしているか教えてください。
0591デフォルトの名無しさん2005/09/03(土) 00:56:28
>>589
すみません。わかりました。
できれば符号化と複合化のプログラムを分けてもらいたいです
起動方法は、
./a.out  ベクトル量子化したいファイル  そのファイルのコードブック 符号化されたデータ
./a.out 符号化されたデータ  コードブック 複合化されたデータ
でお願いいたします。
複合化と符号化わけるのがだめというのであれば
./a.out ベクトル量子化したいファイル  そのファイルのコードブック 符号化データ 複合化データ
でお願いいたします
  
0592デフォルトの名無しさん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;
}
これと等価だと思えばいい。
0593デフォルトの名無しさん2005/09/03(土) 01:08:19
>590 あ、>591上手な説明だ。

RGBだけ対象で、コードの種類は256個限定?>591
0594デフォルトの名無しさん2005/09/03(土) 01:09:35
リンクミスった。寝よう。
05955692005/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: 復号化データ

疲れたのでもう寝ます。あとは任せたノシ
0596デフォルトの名無しさん2005/09/03(土) 01:14:44
>>593
RGBだけ対象で問題ありませんが、複合化するときにRGBがすべて0ならαも0
そうでなれけば255をいれるようにしなくてはなりません。
コードの種類は256限定ではなく512、1024もつくれるようにしたいです。
0597デフォルトの名無しさん2005/09/03(土) 01:16:15
>>595
ありがとうございます
確認してみます
本当にありがとうございます
0598デフォルトの名無しさん2005/09/03(土) 01:16:38
って、コマンド仕様出てたのね・・・
直す気力が無いのでこのまま寝ます。
0599デフォルトの名無しさん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
というメッセージがでてきました
どうしたらよいでしょうか?
0600デフォルトの名無しさん2005/09/03(土) 01:20:30
>>592
それだと落ちますが。つーか、スレ違いなんだからレスすんなと。
06015952005/09/03(土) 01:22:54
>>599
中で<math.h>をインクルードしてるので
% gcc -lm xxx.c でOK
0602デフォルトの名無しさん2005/09/03(土) 01:23:48
>>590
*じゃなくて文字でやってみると効果がわかりやすいかもしれません。
文字じゃなくても違う配列に格納するものを変えてみるとか。
0603デフォルトの名無しさん2005/09/03(土) 01:24:01
>596 コードの種類は256限定ではなく512、1024もつくれるようにしたいです。

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

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

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



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

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

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

コードブックをシステム標準パレットみたく、外部固定にできれば
データにコードブックを付ける必要がなくなり、完全に1/4になるね
0612デフォルトの名無しさん2005/09/03(土) 02:45:17
>>611
なるほど。ありがとうございます。
610について少々お知恵を拝借させていただけませんか。
0613デフォルトの名無しさん2005/09/03(土) 03:03:21
あー。あとで修正するのが嫌なので、先に聞いておこう。
>>595 のプログラムを512,1024にも対応するだけで終わり?
0614デフォルトの名無しさん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などを作りたいです。
長々とすみません
06155952005/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をベースにするのは構わんけど、ちゃんと中身を理解してな。
0616デフォルトの名無しさん2005/09/03(土) 03:37:21
>>615
ありがとうございます
正直先輩のソースは難しくて理解するのは大変な時間がかかりそうです
提出期限がもう終わってますがなんとかしたいとおもいます
ありがとうございます
0617デフォルトの名無しさん2005/09/03(土) 03:47:28
>>615
>あと、俺のはエンコード/デコードでプログラム分かれてないんだけど、いいのかな?
欲を言うと分かれているほうがいいです
0618デフォルトの名無しさん2005/09/03(土) 03:53:13
意訳:
新しく作り直してください。
細かいことを聴かれても答えません。アナタが作ってください。
気に入らなかったらまた作ってもらいます。
06195952005/09/03(土) 04:03:14
>>618
え、ちょ、おまwwww
って、俺はやらんぞ。>>617か他の暇人よろ。
あと、
つ [後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です]
作った後の仕様変更は結構コストかかるのよ。バグの温床にもなるし。
だから>>613みたいに事前に確認を取るわけ。
0620デフォルトの名無しさん2005/09/03(土) 04:12:04
>619 乙
400行のソースだけれど・・・元のプログラムの理解と修正コード作成で何時間ぐらいかかった?
06215952005/09/03(土) 04:36:34
>>620
乙あり。

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

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

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

申し訳ございません
0627デフォルトの名無しさん2005/09/03(土) 17:23:24
>>530
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/899.c
0628デフォルトの名無しさん2005/09/03(土) 17:31:22
>>601
ライブラリの指定は最後にしないと駄目だよ。
0629デフォルトの名無しさん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] その他の制限: 何度も申し訳ありません。ベクトル量子化を依頼したものです



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

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

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

と。思うわけだが、まあ参考程度に。今から直すのめんどいだろうし。
0631デフォルトの名無しさん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 インデックス情報のみのでーた ボクセルのみのでーた 合体させたデータ
にしているつもりです
どうしてもわかりません・
0632デフォルトの名無しさん2005/09/03(土) 21:10:55
セグメンテーション違反の原因がわかりました
アウトバッファのメモリ確保の値を倍することで解決いたしました

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

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

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

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

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

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

・1バイト入力する捨てプログラムを書く
・nバイト入力する捨てプログラムを書く
・nバイトとボクセルだかベクトル量子化データだかを組で入力するプログラムを書く
0641595 ◆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++;
  }
----------------
0642デフォルトの名無しさん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などの書式指定子で表示できないのです。
どうにかして表示したいので、知恵をお貸しください。
0643デフォルトの名無しさん2005/09/04(日) 05:19:08
ソースと実行結果は?
0644デフォルトの名無しさん2005/09/04(日) 05:27:29
>>642
ミリ秒で取得するから時、分、秒、ミリ秒は計算するんでしょ?
あと、日付と時間はそれぞれ取得すると思うけど。
0645デフォルトの名無しさん2005/09/04(日) 05:47:16
手取り足取り教えてもらえるところはここですか?
0646デフォルトの名無しさん2005/09/04(日) 05:54:59
宿題を晒したら暇人が勝手に答えるスレです。
0647デフォルトの名無しさん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] その他の制限: 特になしです
0648デフォルトの名無しさん2005/09/04(日) 08:35:38
ベンダーが用意する関数が、そのような単純な最適化もされてないと思い込む根拠はなんなのだろう……
0649デフォルトの名無しさん2005/09/04(日) 08:51:51
ベンダーが用意する関数が、そのような単純な最適化もされてないとは書かれてないが?
0650デフォルトの名無しさん2005/09/04(日) 11:47:19
>>647
こんな感じでいいの?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/902.c
06516502005/09/04(日) 12:11:14
ついでに自分の環境での計測結果(gcc -O3)
やはり処理系提供の関数は速いな。

memset 120
my_memset 230
my_memset_simple_loop 921
0652デフォルトの名無しさん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;
}
0653デフォルトの名無しさん2005/09/04(日) 12:23:26
>>640
アドバイスありがとうございます

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

i = 1に変えただけでなぜそうなるのかよくわかりません・・。
0654デフォルトの名無しさん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”);
}
}
0655デフォルトの名無しさん2005/09/04(日) 13:43:15
まあpfintfなんて関数ないしいったいどこで読み込んでんだかわからんし。
つーか添削しないとまずいの?
1からのほうが楽。
06566272005/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

ネストした関数を外に出すのは簡単だ。引数が増えるけど
バグがあるのは知らんかった
0657デフォルトの名無しさん2005/09/04(日) 14:02:10
元ソースを読んだが何をしたいのか理解できないので思いっきり書き直し。
たぶんこんな感じ?

#include<stdio.h>
int main()
{
    int value,n=0,sum=0,min=9999,max=0;
    for( ; scanf("%d", &value ) == 1 && value > 0 ; ++n , sum+=value){
        if(max < value) max = value;
        if(min > value) min = value;
    }
    if(n)printf("min=%d\nmax=%d\nave=%g\n" , min , max , sum*1.00/n );
    return 0;
}
06586572005/09/04(日) 14:03:36
誰宛か書き忘れてた >>654宛ね
0659デフォルトの名無しさん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);
}
0660デフォルトの名無しさん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;
}
0661デフォルトの名無しさん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;
}
0662デフォルトの名無しさん2005/09/04(日) 14:56:40
文字列を入力して偶数番目の要素と奇数番目の要素を別の配列に格納し、
文字列として表示。

・・お願いします。
0663デフォルトの名無しさん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 でそれぞれを表示
0664デフォルトの名無しさん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]);
}
0665デフォルトの名無しさん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 );
}
06666422005/09/04(日) 15:19:25
>>652
お返事遅くなってしまい申し訳ないです。
提示していただいたプログラムで大丈夫です。
ありがとうございました。
06676622005/09/04(日) 15:36:03
助言してくれた皆様ありがとうございました。
0668デフォルトの名無しさん2005/09/04(日) 15:49:37
助言ではなく丸n(ry
0669デフォルトの名無しさん2005/09/04(日) 17:10:06
>>667
みんなゼロ番目から数えているから気をつけてね
0670デフォルトの名無しさん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
ありがとうございました!とても助かりました。
0671デフォルトの名無しさん2005/09/04(日) 23:03:08
>>670
個人の好みによるけど、a[0]=-1みたいなループ制御以外のを
ループの初期化式に入れるとわかりにくくなるから
面倒でも分けた方がいいんじゃまいかと思う
0672デフォルトの名無しさん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] その他の制限:

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





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


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

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

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

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

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


この授業の課題は大変難しくて有名で、私にも色々事情があって本当に死のうかと考えた時期も
ありました。課題でないくらいで大げさなとおもわれるかもしれませんが、理由は省きますが
本当に欝になって死ぬことばっかり考えてた3週間でした。
ここのみなさんには課題をやっていただいたりして大変助かりました。
私が死ななかったのはみなさんのおかげであるという部分がかなりあります。
ありがとうございました。
0696デフォルトの名無しさん2005/09/06(火) 10:36:58
授業か・・・ゼミではないのか?
0697デフォルトの名無しさん2005/09/06(火) 10:42:21
>>695
不快な事を書くな
0698デフォルトの名無しさん2005/09/06(火) 10:53:51
厨排除のため、うそ宿題でも作るか?
プログラミング言語C(通称K&R)の問題とかそれらしく書こうか。
0699デフォルトの名無しさん2005/09/06(火) 11:02:11
暇人だな、このスレを保守するという手段が目的化してるお前も十分に厨
0700デフォルトの名無しさん2005/09/06(火) 11:02:11
>>679
返事が送れてすみません。ありがとうございました
0701デフォルトの名無しさん2005/09/06(火) 11:26:04
うんうん。698と699は厨だね。
以後スルーで。
0702デフォルトの名無しさん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
07037022005/09/06(火) 11:38:58
訂正
lpsaName→/*ファイル名*/
MAINTEREC→/*ファイル内容*/
07047022005/09/06(火) 11:45:36
例
==ファイル中身==   っていう感じでファイルがあります。
 123,0.123(一行)
  ・ ,  ・
  ・ ,  ・
  ・ ,  ・
  ・ ,  ・
==========
 整数 | 少数
  ↓    ↓
 整数   実数
  ↓    ↓
Rec.nWave Rec.dValve
0705デフォルトの名無しさん2005/09/06(火) 11:52:37
うむむ。全角か・・・。
0706デフォルトの名無しさん2005/09/06(火) 11:54:01
ttp://cm.bell-labs.com/cm/cs/tpop/csvgetlinec++.c
07077022005/09/06(火) 11:56:03
ああっ半角です。。それとも全角で書いたのがまずかったですか?
>>705
0708デフォルトの名無しさん2005/09/06(火) 12:04:00
>>707
ファイルの中身として全角数字出したわけだから全角解析しろってことだろ?
07097022005/09/06(火) 12:17:17
いやいやすみません半角でいいです・・・・
ごめんなさい・・・
>>708
0710デフォルトの名無しさん2005/09/06(火) 12:25:32
作ったのが無駄になったじゃねえか
むかつく
07117022005/09/06(火) 12:30:51
ホントすみません・・・ごめんなさい・・・
>>710
07127022005/09/06(火) 12:59:51
すみません誰か・・流れだけでもいいので教えていただけませんでしょうか?
07137022005/09/06(火) 13:22:06
>>710
作ったところまで教えていただけませんか?
0714デフォルトの名無しさん2005/09/06(火) 13:33:25
まあ、>>1読め。
0715デフォルトの名無しさん2005/09/06(火) 14:03:07
>>712
1) ファイルを開く
2) while(ファイルから1行取得→string、EOFまで)
  {
 3)  ・stringからカンマの前後で部分文字列切り出し
 4)  ・前後のスペース除去
 5)  ・文字列→数値変換
 6)  ・それぞれの値を構造体?のメンバに保存
 7)  ・構造体?をvectorにpush_back
}
8) ファイルを閉じる

あと、質問するときは>>1をちゃんと読んで、テンプレをちゃんと埋めること。
0716デフォルトの名無しさん2005/09/06(火) 14:09:19
>>712は日本語がなんかおかしいし留学生とかじゃねーの?
多分>>1を読んでも意味がよくわからなかったんだよ
07177022005/09/06(火) 14:10:15
>>714,715
すみません、焦っていて周りが見えなくなっていました。。。ごめんなさい!
07187022005/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] その他の制限: 半角でお願いします
0719デフォルトの名無しさん2005/09/06(火) 14:16:55
あと2時間かw
>>702の一番下の格納配列 objって何を格納したいの?
07207022005/09/06(火) 14:28:16
配列オブジェクトへ追加する

vecRec.push_back(Rec);→追加
07217022005/09/06(火) 14:30:01
>>715
stringってC言語なんですか?
0722デフォルトの名無しさん2005/09/06(火) 14:37:32
ソースコード直に書いてたらなんか変な操作したのか消えて一つ前の自分の書き込みが表示された。
最近多くて困る。@JaneStyle
0723デフォルトの名無しさん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
0724デフォルトの名無しさん2005/09/06(火) 14:40:37
>>721
格納先変数でそ
0725デフォルトの名無しさん2005/09/06(火) 14:41:28
>>722
Ctrl+Zで案でゅ
0726デフォルトの名無しさん2005/09/06(火) 14:51:15
>>725
色々今試してみたらSHIFT+BackSpaceで再現出来た
07277022005/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);→追加
0728デフォルトの名無しさん2005/09/06(火) 15:12:19
>std||vectar
これだけの量で間違いすぎ
07297022005/09/06(火) 15:14:52
>>728
何を間違ってるの?
0730デフォルトの名無しさん2005/09/06(火) 15:21:02
std::vector
std||vectar
間違い探し
07317152005/09/06(火) 15:26:18
>>721
stringはstd:stringのつもりで書いた。ちなみにC++。
別にcharの配列でもいいんだけどね。
07327022005/09/06(火) 15:26:23
::でしたか!すみません!
07337022005/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] その他の制限: 半角でお願いします
0734デフォルトの名無しさん2005/09/06(火) 16:01:00
期限が延びてるw
0735デフォルトの名無しさん2005/09/06(火) 16:05:18
もしかしてMAINTERECは構造体じゃなくて共用体か?
0736デフォルトの名無しさん2005/09/06(火) 16:06:28
ああ、勘違い。そんなわけないな。
0737デフォルトの名無しさん2005/09/06(火) 16:08:29
てっかfscanfで簡単に読み込めるが
0738デフォルトの名無しさん2005/09/06(火) 16:09:46
>>727
だとしたら、その仕様を書いた人間の頭が悪い。書き直させろ。
07397022005/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) ファイルを閉じる
0740デフォルトの名無しさん2005/09/06(火) 16:26:28
二つ目は整数でも実数でもRec.dValveに入れるんじゃないのか。
0741デフォルトの名無しさん2005/09/06(火) 16:47:27
>>739
だから、問題の仕様自体が曖昧に過ぎるから、皆書くにかけないんだよ。
聞く限りでは内容はかなり簡単そうなんだから。もしそれだけしか仕様が
与えられないのであれば、誰も書けない。
07427022005/09/06(火) 16:55:59
ちょっとまとめてから出直してきます。みなさんいろいろすみません・・・・
0743デフォルトの名無しさん2005/09/06(火) 16:58:19
CSV読み込み PHP ソース

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

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

漢字が有る場合、漢字の一部をカンマと判断する場合があるので、
1バイト文字と2バイト文字は、それぞれ適切に扱う必要がある。
07457152005/09/06(火) 17:04:24
>>702
期待した通りの物かどうか知らんが、とりあえず上げとく
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/905.txt
それなりに動くとこまでは確認した (↑のままじゃ動かないけど
0746デフォルトの名無しさん2005/09/06(火) 17:05:03
MS Officeだとcsvはカンマ区切りでタブ区切りはテキストだな
0747デフォルトの名無しさん2005/09/06(火) 17:08:32
CSV(Comma Separated Values)
ふつう、タブでも固定でも無い
07487442005/09/06(火) 17:13:09
そっすか。
0749デフォルトの名無しさん2005/09/06(火) 17:21:43
tsv(TabSeparatedValues)とも言うなぁ。
0750デフォルトの名無しさん2005/09/06(火) 17:25:01
>>745
サンクスです!
0751デフォルトの名無しさん2005/09/06(火) 17:38:13
今回の場合は関係ないけど、
文字の中にカンマが入ってる場合(ダブルクォートで囲む)とか、
さらにその中にダブルクォートが入ってる場合(エスケープするんだっけ?)とか、
ちゃんとしたものを実装しようとすると頭が痛くなる罠
0752デフォルトの名無しさん2005/09/06(火) 17:51:09
>>702
マルチポストしてないで早く仕様出せ。
0753デフォルトの名無しさん2005/09/06(火) 19:34:34
>>751
literalなダブルクォートは二つ重ねて""で書く
イヤらしいのは改行含むカラムがある場合(エクセルはそーゆーのも出力するはず。
CRだかLFだか忘れたが)
0754デフォルトの名無しさん2005/09/06(火) 19:40:13
妄想ですね。
0755デフォルトの名無しさん2005/09/06(火) 20:04:44
>>753
確認したら\nだった。
0756デフォルトの名無しさん2005/09/06(火) 20:06:23
>>755
LFか。ならstdioやiostreamのテキストモードでの行読みはつかえん
ということだな。
0757デフォルトの名無しさん2005/09/06(火) 21:53:48
下のポログラムを参考にして名前もホームランの本数も入力できて何人分も追加できるポログラムを教えてください。ポインター使用でお願いします。
#include <stdio.h> #include <malloc.h> #include <string.h>
struct MJlist {
char name [20]; int homerun;
struct MJlist *pointer;
};
int main (void){
struct MJlist *hd,*p1,*p2; int sum =0;
p2=(struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(p2->name,"ICHIRO");
p2->homerun=10;
p2->pointer=NULL;
p1=(struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(p1->name,"MATUI");
p1->homerun=15;
p1->pointer=NULL;
hd->pointer=p1;
p1->pointer=p2;
hd=(struct MJlist*)malloc(sizeof(struct MJlist));
strcpy(hd->name,"Nomo");
hd->homerun=5;
hd->pointer=NULL;
}

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




以下チラシの裏
だからGetMessageの戻り値チェックは0以外かじゃなくて0以上かにしろと…(-1が返ってくるとry
0776デフォルトの名無しさん2005/09/07(水) 00:01:37
>>774-775
サンクス。今までずっと0以下がfalseだと勘違いしてた。
まあ、if()に値を直接入れたりはしないようにしてたけど。
0777デフォルトの名無しさん2005/09/07(水) 00:11:15
>>776
そいつぁいい心がけだ。
0778デフォルトの名無しさん2005/09/07(水) 00:46:10
>>777
そーでもない
値が0か0以外かで保障される場合、むしろ直接使ったほうがいい。
0779デフォルトの名無しさん2005/09/07(水) 01:17:24
if (!!GetMessage(...)) {
...;
}
0780デフォルトの名無しさん2005/09/07(水) 09:38:47
GetMessage()の話だろ、きみら>>778-779分かってる?
特に779
07817792005/09/07(水) 10:31:28
GetMessage()がどんな関数かなんて知らない。
適当な関数なら何でもよかった。
0782デフォルトの名無しさん2005/09/07(水) 13:16:54
すみません、宿題お願いしまつ・・・!
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): 構造体を作る。
              (名前と年齢を入力する関数・名前と年齢を表示する関数を作る)
[3] 環境
 [3.1] OS: Windows/Linux/等々
 環境とかよくわかりませんがとりあえずWindowsです。
 [3.2] コンパイラ名とバージョン: gcc 2.9 VC 6.0等
 これちょっとわかりません、すいません・・・・
 [3.3] 言語: C/C++/どちらでも可 のいずれか
 C言語でお願いします。
[4] 期限: [yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか (「できるだけ早く」は不可)
 2005年9月7日(水)今日の5時まで
[5] その他の制限: どこまで習っているか、標準ライブラリは使ってはいけない等々
 当方C言語の初心者でいちお構造体習ったのですがさっぱりで・・・
 先ほど問題を出されあせっちゃってます(;´Д`)
 よろしくお願いします・・・・
0783デフォルトの名無しさん2005/09/07(水) 13:28:07
>>782
入出力関数だけ作ればいいのか?
(main関数等はいらんのか?)
0784デフォルトの名無しさん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);
}
07857822005/09/07(水) 13:49:41
>>783
メイン関数いります・・・!
>>784
あああありがとうございます。。。!!
07867822005/09/07(水) 13:53:35
何度も書き込み申し訳ないです。。。
当方がなにぶん初心者の者で
サルでもわかるようなプログラミングですと
幸いです(´Д`)
・・・・サルに失礼かも_| ̄|〇
0787デフォルトの名無しさん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;
}
07887872005/09/07(水) 14:07:26
#include<string.h>はもういらんかったか
07897822005/09/07(水) 15:38:57
>>787.788
ありがとうございます!!!
助かりました。。。
自分でも作れるように頑張ります(`・ω・´)
0790デフォルトの名無しさん2005/09/07(水) 19:26:43
  非マナー非マナー非マナー非マナー非マナー非マナー
  非マナー非マナー非マナー非マナー非マナー非マナー
 非マナー非マナー非マナー非マナー非マナー非マナー
  ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
   ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
   ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
  非マナー非マナー非マナー非マナー非マナー非マナー
  非マナー非マナー非マナー非マナー非マナー非マナー
 非マナー非マナー非マナー非マナー非マナー非マナー
  ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
   ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
   ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非ーナマ非
  非マナー非マナー非マナー非マナー非マナー非マナー
  非マナー非マナー非マナー非マナー非マナー非マナー
 非マナー非マナー非マナー非マナー非マナー非マナー
0791デフォルトの名無しさん2005/09/07(水) 20:00:55
まあ、明らかに>>1を読んでない質問はスルーするように徹底すればいいんだろうけど。
0792デフォルトの名無しさん2005/09/07(水) 20:15:40
解答側も読んでなかったりして。
0793こんにちわん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] その他の制限: 無し

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

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

お願いしますorz
0799デフォルトの名無しさん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");
}
0800こんにちわん2005/09/07(水) 21:36:05
全然わからないです・・^^;;
わかりやすく教えて頂けませんか??
0801こんにちわん2005/09/07(水) 21:38:40
ありがとうございました!!!!!!!!!!!!
0802デフォルトの名無しさん2005/09/07(水) 21:39:48
>>798
google 七行プログラミング マインスイーパー
0803デフォルトの名無しさん2005/09/07(水) 21:40:51
遅かった
#include <iostream>
int main()
{
    char ch;
    int Year;
    std::cin >> ch >> Year;
    switch (ch)
    {
    case 'm':
        Year += 1867;
        break;
    case 't':
        Year += 1911;
        break;
    case 's':
        Year += 1925;
        break;
    case 'h':
        Year += 1988;
        break;
    default:
        std::cerr << "年号が正しくありません" << std::endl;
        return 1;
    }
    std::cout << "西暦" << Year << "年です" << std::endl;
    return 0;
}
0804デフォルトの名無しさん2005/09/07(水) 21:42:53
>>803
志村ー、C言語C言語
0805デフォルトの名無しさん2005/09/07(水) 21:45:33
>>804
??
0806デフォルトの名無しさん2005/09/07(水) 21:47:07
>>804
志村ー、>>793、>>793
0807デフォルトの名無しさん2005/09/07(水) 21:47:55
C++はダメなんだろ
0808デフォルトの名無しさん2005/09/07(水) 21:48:16
なにか問題でも?
0809デフォルトの名無しさん2005/09/07(水) 21:53:07
出題者の意図は「元号の種別をenumにしろ」であろうから、及第点が貰えない
に一票
0810デフォルトの名無しさん2005/09/07(水) 22:15:22
voidのポインタに1足したらどうなるんだっけ?
1バイト動くで良いんだッけ?
0811デフォルトの名無しさん2005/09/07(水) 22:19:24
>>810
>>1のテンプレに従え
0812デフォルトの名無しさん2005/09/07(水) 22:24:59
>>810
コンパイルエラー
0813デフォルトの名無しさん2005/09/08(木) 11:50:45
片付けてやる。>>1のテンプレに従い宿題を書くのぢゃ。
0814デフォルトの名無しさん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] その他の制限:
ある画像でコードブックを生成して、次の画像に対してもそのコードブックを使って
符号化・復号化を行うようにしたいです。
どうかよろしくお願いいたします。
0815デフォルトの名無しさん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] その他の制限:とくにないと思います。「


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

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

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

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

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

あと、レスつけるときは番号の前に>か>>ををつけてくれ。
そうすれば専用ブラウザで見てる人が助かる。
0835デフォルトの名無しさん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が一致したものを
順に選んでいくことになっていました。
0836デフォルトの名無しさん2005/09/08(木) 21:48:52
すげーむかつく
0837デフォルトの名無しさん2005/09/08(木) 21:57:36

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

とはいっても、俺も人の事をとやかく言える立場じゃないんだけどね。
まあ、とにかくがんばれ。
08928832005/09/09(金) 06:18:15
>>891
何も言ってないのと同じですね。脳タリンですか?あなたは。
08937822005/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言語の初心者でいちお構造体習ったのですがさっぱりで・・・
 よろしくお願いします・・・・
0894デフォルトの名無しさん2005/09/09(金) 10:15:52
つ ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/910.txt
年齢の不正は見つけますが、文字が入っていたりするところまでチェックしていません。
そこのところは自分で追加してください。
0895デフォルトの名無しさん2005/09/09(金) 10:47:40
氏んで欲しいです。
08967822005/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) ;
このようなエラーがでてしまうのですが・・・(´Д`)
0897デフォルトの名無しさん2005/09/09(金) 10:59:40
コピペではエラーでかなったので打ち込みミスと思う。
35行目を削除してコンパイル
0898デフォルトの名無しさん2005/09/09(金) 11:00:27
未知の制御文字列?
もしかしてgccは単一行コメントを許可していないのかもしれません。
そのコメントを/* */でくくっても駄目ですか?VCでは通りましたが。
0899デフォルトの名無しさん2005/09/09(金) 11:08:10
> (-1)
EOFが置換されてる、コメントが機能してないんじゃね
0900デフォルトの名無しさん2005/09/09(金) 11:09:38
そんな気がしてきた。
09017822005/09/09(金) 11:13:56
コメントを/**/でかこったらコンパイル通りました!
ありがとうございます。
度々すみませんが、
実行したらありえない数値(年齢)を入力すると
ちゃんと『年齢がありえません』と出るのですが
普通の年齢を入れると出力されたときに千桁になってしますのですが・・・
例→23歳と入力  出力→2320と出る。

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

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

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

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

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


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

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

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

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

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

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

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

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

以上、がんがれ
0932デフォルトの名無しさん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;
}

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

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

0941デフォルトの名無しさん2005/09/10(土) 16:23:22
>>934=>>940
はいはいワロスワロス
09429402005/09/10(土) 17:08:49
ああ、やっぱり低脳の考えることなんてそんなもんか… 理で書けないし。
940 は 934とはまったくの他人。勝手に巻き込むのは嫌なので念のため。終了
0943名無しさん@そうだ選挙に行こう2005/09/10(土) 17:25:30
一々荒らしに釣られてレスしてる馬鹿が何を偉そうに
0944名無しさん@そうだ選挙に行こう2005/09/10(土) 17:27:05
>>940
同意はするが、>941みたいなのは構うだけ無駄。スルーしなされ。
スルーできないのも低脳の証拠みたいなものですぜ。
#って、漏れもだな。
0945名無しさん@そうだ選挙に行こう2005/09/10(土) 19:38:33
文末に「漏れもだな」とか書くなら最初から書くなよ
0946名無しさん@そうだ選挙に行こう2005/09/10(土) 20:08:23
>>940 意図を汲み取ってくれてありがとよ。
擁護されるとは思ってなかった。
0947名無しさん@そうだ選挙に行こう2005/09/10(土) 22:15:34
C/C++宿題50代目
ttp://pc8.2ch.net/test/read.cgi/tech/1126357741/
0948名無しさん@そうだ選挙に行こう2005/09/10(土) 22:22:55
>947 乙、いいタイミングだ。
0949名無しさん@そうだ選挙に行こう2005/09/10(土) 22:24:37
んん?タイミングを計ったつもりは無いんだが。
0950名無しさん@そうだ選挙に行こう2005/09/10(土) 23:47:02
まだだ。まだ終わらんよ。
0951名無しさん@そうだ選挙に行こう2005/09/11(日) 10:03:04
ちょっと見ないうちに次スレ立ってるね。
とりあえず埋め。
0952名無しさん@そうだ選挙に行こう2005/09/11(日) 10:09:17
[1] 授業単元: プログラミング宿題
[2] 問題文(含コード&リンク): 下記に記載
[3] 環境
 [3.1] OS: Windows2000
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語でお願いします。
[4] 期限: [2005年09月11日17:00ぐらいまで]
[5] その他の制限: C言語2ヶ月ぐらい勉強、下記に記載

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/912.txt
0953名無しさん@そうだ選挙に行こう2005/09/11(日) 10:16:24
>>952
で、何を片付けさせたいの?
0954名無しさん@そうだ選挙に行こう2005/09/11(日) 10:33:33
僕には問題文が見えないのですが、ブラックライトでもあてると、
問題文が浮き上がるんでしょうか?
0955名無しさん@そうだ選挙に行こう2005/09/11(日) 10:41:12
>>954
IQ200以上じゃないと見えないらしいよ
0956名無しさん@そうだ選挙に行こう2005/09/11(日) 10:42:21
みごとな攻撃だな、タケちゃんマン
0957名無しさん@そうだ選挙に行こう2005/09/11(日) 10:47:13
>[4] 期限: [2005年09月11日17:00ぐらいまで]
0958デフォルトの名無しさん2005/09/11(日) 10:50:51
>>954
ほらよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/913.txt

わかる範囲でやっといた。VCないからBCCでやった。
09599582005/09/11(日) 10:51:39
アンカーミスった
×>>954
○>>952
0960名無しさん@そうだ選挙に行こう2005/09/11(日) 11:11:35
>>958
コーラ噴いたw
0961名無しさん@そうだ選挙に行こう2005/09/11(日) 11:42:12
>>958
おまえ神w
0962名無しさん@そうだ選挙に行こう2005/09/11(日) 11:55:38
>>952

> ・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
> ・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
あと、
・ファイルを読み書きする問題の場合は、その中身についても説明してください。
・最低限、解いてもらう方に理解してもらえる文章を書けるように努力しましょう。
・「ぬるぽ」と言われたら「ガッ」で返すのがお約束でした。
・ちゃんと選挙に行きましょう。白紙投票でも立派な意思表示です。
09639522005/09/11(日) 12:50:39
みなさんすみません、構造体の変数の中にはなんかしら値がはいり(可変)、
コメント文に$3とか$4とか$5の書いてある変数にあわせて出力する。
あとお約束を知らなくてすみません。今度は返します!!
これでわかりますか?
0964名無しさん@そうだ選挙に行こう2005/09/11(日) 12:52:41
>>963
ところで今日の昼飯何食った?
0965名無しさん@そうだ選挙に行こう2005/09/11(日) 12:54:23
>>963
で、何を片付けさせたいの?
0966名無しさん@そうだ選挙に行こう2005/09/11(日) 12:57:34
エスパーを期待されてもなー(^^;;
(いや、仕事上しょうがないときもあるが・・・)

まあ・・・あれだ。情報をきちんとくれなかったら答えようがない。
0967名無しさん@そうだ選挙に行こう2005/09/11(日) 13:00:29
>>963
煽りじゃなくってさっぱり分からん

もう時間ないんだろ?もちついて何すればいいのか教えてくれ
課題の問題文丸ごとコピペの方がいいかもな
0968名無しさん@そうだ選挙に行こう2005/09/11(日) 13:08:19
はぁ・・・俺はESP対策班ではないのだが。

>>963
とりあえずいくつか質問
1) このプログラムは何をするプログラム?
2) 最終的にprintfの羅列に合わせて結果を出力するようにすればOK?
3) $3とか$4とかの内容はどうやって取得or計算する?
4) 中でCSVファイルを読み込むみたいだけど、その内容は?
5) C言語なのに構造体メンバにCString(C++クラス)が入っててもOK?

つか、>>967の言う通り問題をそのまま貼った方が早いかも。
0969名無しさん@そうだ選挙に行こう2005/09/11(日) 13:32:47
>>952
>  [1] 授業単元: プログラミング宿題
って…
0970名無しさん@そうだ選挙に行こう2005/09/11(日) 13:42:09
返事がない。ただの屍のようだ・・・。
なんとなく、このまま17時まで進展無しに流れていきそうな予感。
0971名無しさん@そうだ選挙に行こう2005/09/11(日) 13:58:47
[2] 問題文 以下の機能の関数mickyを作成
�@グローバル変数minny[10]の内容を確認し、
データが格納されていない箇所を探します。
初期値0のままの箇所が空きとみなします。
�A空き領域が無い場合は-1(異常終了)を復帰します。
�B空き領域があった場合、minny[]の空き領域に
パラメータの文字を格納し、0(正常終了)を復帰します。
※グローバル変数minnyは{0,0,0,0,0,0,0,0,0,0}です。
[3] 環境
 [3.1] OS: Windows/
 [3.2] コンパイラ名とバージョン: c machine 2.0
 [3.3] 言語: C
[4] 期限:2005/9/12
[5] その他の制限: hello作ったあとに出された課題です。
         よろしくお願いします。
0972名無しさん@そうだ選挙に行こう2005/09/11(日) 14:01:19
>>971
物凄く簡単な気がするんだが……
自力でやってみた?

と思ったらHelloの直後かよ(;´Д`)
0973名無しさん@そうだ選挙に行こう2005/09/11(日) 14:07:48
>>972
やっぱりとても初歩なんですねorz
答えを頂ける方が現れるまでは自力でやってみます。
0974名無しさん@そうだ選挙に行こう2005/09/11(日) 14:08:46
>>971
0 って数字の 0 なの? 文字の 0 なの?
あと、そのコンパイラ初めて見るけどどんなやつ?
0975名無しさん@そうだ選挙に行こう2005/09/11(日) 14:10:47
C Machineはもう公開終了なわけだが
0976名無しさん@そうだ選挙に行こう2005/09/11(日) 14:15:04
>>974
説明不足でした。0は数字です。
c machineは勧められて使っているので、どんな特徴があるのかはわかりません。
実行結果が別のウィンドウで表示されるのが少し便利に思います。
0977名無しさん@そうだ選挙に行こう2005/09/11(日) 14:15:58
>>971
#include <stdio.h>
#define MAX 10
int minny[MAX];
int micky(char ch);
int main(void)
{
if (micky('A')) {
printf("異常終了\n");
}
else {
printf("正常終了\n");
}
return 0;
}
int micky(char ch)
{
int i;
for (i = 0; i < MAX; i++) {
if (!minny[i]) {
minny[i] = ch;
return 0;
}
}
return -1;
}
0978名無しさん@そうだ選挙に行こう2005/09/11(日) 14:17:22
>>971
そのまま答えを書いても面白くないので穴埋めで

static int minny[10] = {0,0,0,0,0,0,0,0,0,0};
static const int minny_size = sizeof(minny)/sizeof(int); /* minnyのサイズ */

int find_minny(int param)
{
 int i;         /* ループのカウンタ */
 int ret = -1;    /* 結果。異常終了の値を入れておく */;
 for([ -- (1) -- ])  /* i=0からminny_sizeまで1ずつ増加*/ )
 {
  if([ -- (2) -- ])  /* minnyのi番目が0なら */
  {
   [ -- (3) -- ];   /* minnyのi番目に引数paramを代入 */
   ret = 0;      /* 変数retに正常終了の値をセット */
   [ -- (4) -- ];   /* ループを抜ける */
  }
 }
 [ -- (5) -- ];     /* 結果を返す */
}

09799782005/09/11(日) 14:19:25
あ、関数名はmickyだったか。そこは適当に直してくれ。
あと、コメントの後ろのゴミはスルーでよろ・・・orz
0980名無しさん@そうだ選挙に行こう2005/09/11(日) 14:22:06
minnyってchar型の配列かと思った

>�B空き領域があった場合、minny[]の空き領域に
>パラメータの文字を格納し、0(正常終了)を復帰します。

って書いてるから
0981名無しさん@そうだ選挙に行こう2005/09/11(日) 14:25:21
>>978-979
本当にありがとうございます。参考にさせていただきます。
完成したら報告します!
0982名無しさん@そうだ選挙に行こう2005/09/11(日) 14:28:56
もう逝ってしまったかもしれんが


#define MAX 10
static char minny[MAX] = {0}

のほうがよくね?
0983名無しさん@そうだ選挙に行こう2005/09/11(日) 14:29:43
セミコロン忘れたorz
0984名無しさん@そうだ選挙に行こう2005/09/11(日) 14:32:01
グローバル変数にstatic付ける意味ってあるの?
グローバル変数って定義したときにデフォで値は0だから
明示的に0で初期化する意味あるの?
処理系に依存するの?
0985名無しさん@そうだ選挙に行こう2005/09/11(日) 14:33:16
>>982
ありがとうございます。
書き方も考え方も全然わかっていないので勉強になります。。
0986名無しさん@そうだ選挙に行こう2005/09/11(日) 14:36:25
>984 言語スレへ
0987名無しさん@そうだ選挙に行こう2005/09/11(日) 14:39:58
ウィンドウズプログラミングで迷路ゲームを作りたいんですが教えてください
0988名無しさん@そうだ選挙に行こう2005/09/11(日) 14:48:02
>>987
宿題ならここ(・・・でいいのか?)
趣味で作りたいなら、自分のOS&開発環境を考慮した上で該当スレへ
0989名無しさん@そうだ選挙に行こう2005/09/11(日) 14:56:21
>>976
こいつのいってる’数字’は
おそらく’数’なんだろうけど(ry
09909872005/09/11(日) 14:56:28
[2] windowsプログラミングでゲームを作る
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C++
[4] 期限: 今日中
[5] その他の制限: なんのゲームでもいいです。
             簡単なプログラムで出来れば迷路を作りたいのですが。
             キャラを動かして迷路から脱出するというゲームを、たのんます。
0991名無しさん@そうだ選挙に行こう2005/09/11(日) 14:57:34
ほんとにそんな宿題が・・・?ゲー専じゃあるまいし
0992名無しさん@そうだ選挙に行こう2005/09/11(日) 15:00:55
[1] 授業単元:
を書いていないのが怪しいな。
いずれにしてもBCC和姦ねえから俺パス
0993デフォルトの名無しさん2005/09/11(日) 15:01:05
まあそろそろこのスレも終了だし、スルーしとけば消えていくんじゃない?
09949872005/09/11(日) 15:01:12
高専生なのですがなにか
時間があれば頑張れるんですが、なにせ今日中に作らないと
やばいんですよ
ダメもとで頼んでみました
0995名無しさん@そうだ選挙に行こう2005/09/11(日) 15:03:15
今日中ならあと9時間弱。朝までならもっと時間ある。がんばれ。
09969872005/09/11(日) 15:04:42
そそ。んなぁ〜パパぁ〜
無恥なおいらではむりだす
0997名無しさん@そうだ選挙に行こう2005/09/11(日) 15:04:49
>>994 人が困ってるのを助けるスレではないので。状況を訴えられても反感を買うのでご注意。

そろそろ1000か。
0998名無しさん@そうだ選挙に行こう2005/09/11(日) 15:05:00
CUIで作ったとしても、今日中は無理だろ・・・
>>990
何のゲームでもいいと言われても困るので
迷路なら迷路でちゃんと仕様をまとめてくれ。
そのうち暇な奴が作るかもしれん。
# 俺は休日出勤中なのでそんな余裕は無いが
0999名無しさん@そうだ選挙に行こう2005/09/11(日) 15:10:58
999
1000名無しさん@そうだ選挙に行こう2005/09/11(日) 15:11:22
      /⌒'\
      ( ,i::::::::::::i  ./⌒\
       〉ノ:::::::::::|  | ○゜ i ) )
      /;/:::::::::::」/.〉   /
  ___.i;;.i::::::::::::i/ ..: .',  /
./ ヾ  .|;;i:::::::::::/..   ..;;〉.」
.__ .\|;.i:::::::::/ /  ...;;/
  _ノ\i_) i:::::::/   ...;;/ //
 ̄    .|; i:::::/ /  ..;;/
  __.|;_i::/   ...;;/
  ___/  .....;;/
     .|;; i  ...;;イ
     ノ;; ,.‐ ;;-.;i
   /;;; /' ''   ;;;X
   |;;  ;i;;.. 〜  ;;| はいはいぺにすぺにす
   X〜 ;i;;; ;;,. ;;;/
    ヽ;;__\_;;/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。