検索結果 19 件

by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 並列処理プログラムについて
返信数: 5
閲覧数: 801

Re: 並列処理プログラムについて

返信が遅くなってしまい申し訳ありません。
softya(ソフト屋) さんが書きました:pthread_create関数がOSにスレッドを生成を依頼して、OSが作り出すスレッドの実行先としてthread_func関数へのポインタが使われます。つまりOSから呼び出されます。
この質問を見ていると、そもそもプロセスとかスレッドが理解できていないのでは?と思いますが如何でしょう。
そうですね。まずはプログラムからではなく、プロセスやスレッドをきちんと理解した上でのプログラムですね。
次に質問する際は、そこをはっきりと理解した上で質問させていただきます。
ここで一度解決とさせていただきます。

回答したいただいた皆さんありがとうございました。
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 並列処理プログラムについて
返信数: 5
閲覧数: 801

Re: 並列処理プログラムについて

h2so5さん、softya(ソフト屋)さん回答していただきありがとうございます。
h2so5 さんが書きました:スレッドの切り替えはOSやライブラリ側が勝手にやってます。
pthread_createはスレッドを生成しているだけです。
この場合スレッド関数であるthread_funcはどの時点で実行されているのでしょうか。
関数を呼び出しているわけではなく、pthread_create関数の引数に thread_func関数へのポインタを渡しているわけですよね?
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 並列処理プログラムについて
返信数: 5
閲覧数: 801

並列処理プログラムについて

現在、並列処理について学ぼうと思い、「マルチコアCPUのための並列プログラミング」という本を基に勉強しています。 そこで #include<stdio.h> #include<pthread.h> #define THREAD_NUM 2 #define DATA_NUM 10 typedef struct _thread_arg{ int thread_no; int *data; }thread_arg_t; void *thread_func(void *arg) { thread_arg_t *targ = (thread_arg_t *)arg; // 構造体型定義 int i; f...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 簡単なロシアンルーレット
返信数: 3
閲覧数: 1337

Re: 簡単なロシアンルーレット

初心者ながら私も気付いた点を指摘させていただきます。 gan = rand() % 6 + 1; srand((unsigned)time(NULL)); これだと同じ乱数列になるような。 異なる乱数列が欲しいのなら srand((unsigned)time(NULL)); gan = rand() % 6 + 1; だと思うのですが。 また、ganという変数はリボルバーの何発目に弾が入っているのか、という値だと思うので、 一度ロシアンルーレットに挑戦するたびに用意した変数(ここではhensuuとする)をカウントアップして if(gan == hensuu)   printf("GAME OV...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: ソートアルゴリズムの可視化
返信数: 6
閲覧数: 1265

Re: ソートアルゴリズムの可視化

可視化する=動きを画面に出す ということで、まずは数字の流れを把握する必要があります。 また、ソートの過程を見せるためには、たとえばソートと描画を交互に行う必要があります。 ただ交互に行うだけでは処理が速すぎて人の目には何をやっているのかが分からないので、少なくとも描画の間隔は人がきちんと見れるくらい開けておかなくてはなりません。 そのためにはタイマー処理をする必要があります。 つまり、ちょっとソート→その時の数列を何かしらの表現方法で画面に描画→少し待つ→ちょっとソート→その時の数列を何かしらの表現方法で画面に描画→少し待つ→という感じで繰り返してやれば、ソートアルゴリズムを可視化させるこ...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: ソートアルゴリズムの可視化
返信数: 6
閲覧数: 1265

Re: ソートアルゴリズムの可視化

C言語でWin32 APIを使えば表示はできると思います。 動画にするなら、C言語+libpngで画像を書き出し、ffmpegでつなげて動画にするという方法があります。 みけCATさん、情報ありがとうございます。 一応、ネットで調べてみたんですが http://www.kumei.ne.jp/c_lang/sdk/sdk_23.htm http://okwave.jp/qa/q7796780.html このくらいしか出て来ず。 もっとこういうのから勉強すればいいよって分かるサイトなど教えていただけないでしょうか。 簡単なバブルソートからでも実現しようと思ったんですが、画面に描画してアニメーシ...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: ソートアルゴリズムの可視化
返信数: 6
閲覧数: 1265

ソートアルゴリズムの可視化

こんばんは。
今日、下のような動画を発見しました。
[nico]http://www.nicovideo.jp/watch/sm20076984[/nico]

このようなソートアルゴリズムを可視化するプログラムを書いてみたい、と思ったのですが、
どのような環境が必要でしょうか?開発言語としてはC言語がいいです。

今現在、C言語プログラムを書くときの環境は
OS : windows 7 64bit
コンパイラ : bcc5.5.1
となっています。
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体の宣言法について
返信数: 9
閲覧数: 811

Re: 構造体の宣言法について

へにっくす さんが書きました:5行目の/* tree_node_t(= struct node)を指すポインタ */にツッコミ
・struct nodeでなくstruct tree_node。
・ポインタが10個、とまで書くべきですね。
struct node ではなく struct tree_node ですね。書き間違えてしまいました。
おっしゃる通り、ポインタが10個あるということもちゃんと書くべきでしたね。

かなり分かってきたので、ひとまずこれで解決とさせていただきます。
質問に答えていただいた、ISLeさん、みけCATさん、へにっくすさん、ありがとうございました。
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体の宣言法について
返信数: 9
閲覧数: 811

Re: 構造体の宣言法について

出典が示されていないので、これは引用ではなくて無断転載ですね。 失礼しました。URLを記載した文に編集させていただきました。 またプログラムも示していただきありがとうございます。 typedefで定義された型は、単に読み替えが行われるだけです。 新しい型が生成されるわけではありません。 なるほど。絡まっていた糸が解けた気がします。 つまり typedef struct tree_node tree_node_t と書いてあるなら、tree_node_t = struct tree_node と考えていいのですよね。 ポインタの理解が不十分かと思います。 後者のchildrenは、tree_n...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体の宣言法について
返信数: 9
閲覧数: 811

Re: 構造体の宣言法について

同様に、構造体のポインタを宣言するための「前方宣言」と呼ばれるテクニックもあります。 教えていただきありがとうございます。 前方宣言について知らなかったため、調べてみたところ次のような文を見つけました。 *** http://p.booklog.jp/book/74354/page/1868230 から引用*** 構造体型の中に、同じ構造体型のメンバを持たせたい時は 「不完全型の前方宣言」をしておきます。 struct ListItem; /* 構造体型 (不完全型) の前方宣言。*/ struct ListItem /* 構造体型の定義。*/ { int value; ListItem*...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体の宣言法について
返信数: 9
閲覧数: 811

構造体の宣言法について

こんにちは。いつもお世話になっています。 下のようなコードにおいて、構造のイメージがつかめません。 typedef struct tree_node tree_node_t; struct tree_node { int value; tree_node_t *children[10]; }; typedef struct tree tree_t; struct tree { tree_node_t *root; int count; }; とりあえず現段階での理解状況を述べます。 typedef struct tree_node tree_node_t; ここで、tree_nodeという型 ...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体メンバへの格納法
返信数: 12
閲覧数: 1190

Re: 構造体メンバへの格納法

それはコンソールに最後の300行しか表示されていないのでは? ファイルにリダイレクトされましたか? xxx.exe > out.txt ってやつです。 VC++だとプロジェクトのプロパティでデバッグの引数に「> out.txt」と書いて下さい。 ファイルに出力して試してみたところ、無事、全データを出力していることを確認できました。 コンソール上で表示する行数には制限等があるんですかね。。。 とりあえずは問題が解決いたしましたので、一旦は解決とさせていただきます。 まだまだ先はあるので、つまずき次第また質問させていただきます。 質問に答えていただきありがとうございました。 特に丁寧に説明してい...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体メンバへの格納法
返信数: 12
閲覧数: 1190

Re: 構造体メンバへの格納法

はじめまして。 参考になりそうなコードを書いてみました。 よろしければお使いください。 ありがとうございます。ぜひ参考にさせていただきます。 fscanfは入力エラーの場合でも戻り値でEOFを返しますので、EOFで終了と判定するのは本来間違いです。 エラーでもファイルの終端でもEOFを返すのなら、ファイル終端とエラーを区別できればいいのでは、と考え while( p = getmemory(), fscanf(fp, "%d %d %lf %lf", p->id, p->sub_a, p->sub_b, p->sub_c) != EOF){ old->next = p; old = p; }...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体メンバへの格納法
返信数: 12
閲覧数: 1190

Re: 構造体メンバへの格納法

まず、 int id[N]; int sub_a[N]; double sub_b[N], sub_c[N]; は配列にするのが意味不明です。 fscnafならポインタを渡せば良いので、 int id;で宣言して&演算子( &(p->id) )で良いはずですが。 なるほど、私がfscanfの仕組みを理解せずに使っていたことが良く分かりました。ありがとうございます。 それと リダイレクトでファイル出力してみましたが入力しただけファイルに出力されているようです。 入力でエラーが有った場合は、その限りではありません。 つまり、何らかのエラーがあるため、本来入力したい分のデータ数が入力できていないと...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体メンバへの格納法
返信数: 12
閲覧数: 1190

Re: 構造体メンバへの格納法

まだまだ改善の余地は大いにあると思いますが、ファイルからの数値を読むことができました。 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 10 typedef struct node_tag{ int id[N]; int sub_a[N]; double sub_b[N], sub_c[N]; struct node_tag *next; }node; /* エラー表示用 */ void error(char *str) { printf("%s", str); exit(1); } /* メモリ確保関数 */...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体メンバへの格納法
返信数: 12
閲覧数: 1190

Re: 構造体メンバへの格納法

softya(ソフト屋) さんが書きました:あれ? 読み込み元はテキストファイルなのでしょうか?
はい、テキストファイルを想定しています。
データ数が仮に10000あったとすると、配列でその分を確保するのは困難かなーと思い、リスト構造をうまく使ってできないものかと考えたわけです。
しかし、この辺がまだはっきり理解できていないので、
データ数がこのように多い場合、どのようにして格納していけばよいのか、ご教授いただけないでしょうか。
オフトピック
実は今悩んでいるこの問題は、過去にこの掲示板で課題丸投げされたもので、
自分の練習がてら興味本位で解こうと思ってみたら、初っ端から躓いてしまったというわけです。
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: 構造体メンバへの格納法
返信数: 12
閲覧数: 1190

構造体メンバへの格納法

こんにちは。またお世話になります。 typedef struct node_tag{ int a; double b; struct node_tag *next; }node; 例えば上のような構造体を宣言し、ファイルからデータを読み込み格納したい場合どのようにすればよいですか? 構造体で配列を宣言し、格納する方法はネットにもあったのですが、ポインタの場合はどうすればいのわからず・・・。 とりあえず下のように書いてみたのですが。 node *p; FILE *fp; fp = fopen("filename.txt", "r"); fscanf(fp, "%d %f", &p->a, &p-...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: テストの点数から順位を求める問題
返信数: 2
閲覧数: 3981

Re: テストの点数から順位を求める問題

rank[MAX] = 1; の行が怪しいです。 配列の定義範囲外の領域を 破壊しています。 なるほど、確かにそうですね。気づきませんでした。 101個目の配列に1を格納しなければならないので、MAXを102とし、二つ目のfor文を配列100番目からループするようにしたところ 無事表示できました。 #include<stdio.h> #define MAX 102 int main(void) { int a[] = {56, 25, 55, 61, 67, 76, 88, 100, 99, 86, 52}; int i, len, rank[MAX]={0}; printf("%d %d\...
by kopi
6年前
フォーラム: C言語何でも質問掲示板
トピック: テストの点数から順位を求める問題
返信数: 2
閲覧数: 3981

テストの点数から順位を求める問題

こんにちは。 この前C言語を始めたのですが、教えてほしいことがあります。 テストの点数のデータがあったとき、for文の2重ループを使った比較法では、n^2回比較が行われてしまいます。 そこで、その繰り返し回数を減らしたアルゴリズムの問題が教科書に載っていたのですが、そこでわからない点があります。 考え方は教科書の文章をそのまま転載します。 ****転載***** 点数の範囲を0~100としたとき、その点数の範囲を添え字にする。 rank[0]~rank[100]の配列ともう一つ余分なrank[101]という配列を用意し内容を0クリアしておく。 まず各得点ごとに対応する添え字の配列の内容を+1す...

詳細検索ページへ移動する