Interest の回答履歴
- 配列変数の各要素を違う変数名で再定義するには
Cプログラム初心者です。よろしくお願いします。 配列dm_dat[1000]の各要素を違う変数名(連続した)DM0からDM999の変数名で再定義したいのですが(グローバル変数として)、#define DM0 dm_dat[0]~#define DM999 dm_dat[999]を実際に入力するのはいやなので、他に簡単にすませる方法はないでしょうか?DM0でなくDM(0)なら#define DM(i) dm_dat[i]とできるのですが・・初心者には難しいです。 どなたか、教えてくださるとありがたいです。
- H8マイコン 音階 メロディーの発生
現在H8マイコンを用いて電子工作をしている者です。今スピーカーから音楽(単音)を奏でようと考えています。周波数の変え方としては割り込みを用いて、以下のようにしています。 /**************************:目覚まし音制御*****************/ void int_imia2 (void) { ITU2.TSR.BIT.IMFA = 0; //割り込みステータスフラグクリア a0-=1; if(a0==0){ nn+=1; if(nn==1)ITU1.GRA=doo; if(nn==3)ITU1.GRA=doo; if(nn==5)ITU1.GRA=doo; if(nn==7)ITU1.GRA=doo; if(nn==9)ITU1.GRA=ra; if(nn==11)ITU1.GRA=si; if(nn==13)ITU1.GRA=doo; if(nn==14)ITU1.GRA=si; if(nn==15)ITU1.GRA=doo; a0=20; } } dooやsiには私自信が出したい周波数となるようなGRAレジスタの値を入れています。そこで、以上のようなプログラムを組んだ際に、例えば if(nn==9)ITU1.GRA=ra; if(nn==11)ITU1.GRA=si; if(nn==13)ITU1.GRA=doo; この部分ではちゃんとラ、シ、ド、と発生しているのですが、一番初めの if(nn==1)ITU1.GRA=doo; if(nn==3)ITU1.GRA=doo; if(nn==5)ITU1.GRA=doo; if(nn==7)ITU1.GRA=doo; この部分では、ドの音がn=7のところまで鳴りっぱなしになってしまっています。本来としては、ド、ド、ド、ドと区切りを入れて欲しいところなのでどうしていいのか困っています。どのように設定すれば、うまく区切りを出して発生させることができるのでしょうか?どなたかいいアイデアがあればお願いします。
- 経路探索の問題
http://www.i.u-tokyo.ac.jp/edu/course/m-i/pdf/2002imim.pdf の、問題3について質問なのですが、 問1は、 (1) 線形リストとして、n回で到達できるセルの情報を与えると、n+1回で到達できる線形リストを返す関数を考える。返すリストの作成方法は、n回で到達できるセルの前後左右を調べて、すでに調べたセルや障害物のセルでなければ、そのセルをn+1回で到達できるセルとしてメモし、返す線形リストに追加する。 (2) int l[M][N];//特定のセルまでの距離をメモする配列。最初にすべて-1をいれておく。障害物には-2を入れておく。 class list{ int i,j; list *next; list(){ next=0; } } //n回で到達できるセルのリストをpl、n+1階で到達できるセルのリストを返すポインタをnlとする。 void getNextCellsList(list *pl,list *nl){ list *tt=pl; list *t; int i,j; nl=0; while(tt){ i=tt->i; j=tt->j; if(i>0&&l[i-1][j]==-1){ l[i-1][j]=l[i][j]+1; t=nl; nl=new list; nl->i=i-1; nl->j=j; nl->next=t; } if(j>0&&l[i][j-1]==-1){ l[i][j-1]=l[i][j]+1; t=nl; nl=new list; nl->i=i; nl->j=j-1; nl->next=t; } if(i<M-1&&l[i+1][j]==-1){ l[i+1][j]=l[i][j]+1; t=nl; nl=new list; nl->i=i+1; nl->j=j; nl->next=t; } if(j<N-1&&l[i][j+1]==-1){ l[i][j+1]=l[i][j]+1; t=nl; nl=new list; nl->i=i; nl->j=j+1; nl->next=t; } tt=tt->next; } } と、したのですが、このgetNextCellsList関数を一回使う時間計算量は、O(n)としていいのでしょうか? また、もしそうなら問2の時間計算量は、 (getNextCellsList関数を一回使う時間計算量)*M*N=O(n)*O(n^2)=O(n^3) 空間計算量は、 (セルまでの距離をメモする配列の数)+(n回で到達できるセルの情報)=O(n^2)+O(n)=O(n^2) となるのでしょうか? あと、この問題の(M,N,D)のオーダーで評価せよというのはどういう意味として捉えればいいのでしょうか?O(n^3)などと書いておくだけで良いのでしょうか? 問3の時間的及び空間的に効率化する方策としてはどのようなものが考えられるのでしょうか?これは、自力では全然ろくな方法が思い付きませんでした。。。 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- glarelance
- 回答数6
- 経路探索の問題
http://www.i.u-tokyo.ac.jp/edu/course/m-i/pdf/2002imim.pdf の、問題3について質問なのですが、 問1は、 (1) 線形リストとして、n回で到達できるセルの情報を与えると、n+1回で到達できる線形リストを返す関数を考える。返すリストの作成方法は、n回で到達できるセルの前後左右を調べて、すでに調べたセルや障害物のセルでなければ、そのセルをn+1回で到達できるセルとしてメモし、返す線形リストに追加する。 (2) int l[M][N];//特定のセルまでの距離をメモする配列。最初にすべて-1をいれておく。障害物には-2を入れておく。 class list{ int i,j; list *next; list(){ next=0; } } //n回で到達できるセルのリストをpl、n+1階で到達できるセルのリストを返すポインタをnlとする。 void getNextCellsList(list *pl,list *nl){ list *tt=pl; list *t; int i,j; nl=0; while(tt){ i=tt->i; j=tt->j; if(i>0&&l[i-1][j]==-1){ l[i-1][j]=l[i][j]+1; t=nl; nl=new list; nl->i=i-1; nl->j=j; nl->next=t; } if(j>0&&l[i][j-1]==-1){ l[i][j-1]=l[i][j]+1; t=nl; nl=new list; nl->i=i; nl->j=j-1; nl->next=t; } if(i<M-1&&l[i+1][j]==-1){ l[i+1][j]=l[i][j]+1; t=nl; nl=new list; nl->i=i+1; nl->j=j; nl->next=t; } if(j<N-1&&l[i][j+1]==-1){ l[i][j+1]=l[i][j]+1; t=nl; nl=new list; nl->i=i; nl->j=j+1; nl->next=t; } tt=tt->next; } } と、したのですが、このgetNextCellsList関数を一回使う時間計算量は、O(n)としていいのでしょうか? また、もしそうなら問2の時間計算量は、 (getNextCellsList関数を一回使う時間計算量)*M*N=O(n)*O(n^2)=O(n^3) 空間計算量は、 (セルまでの距離をメモする配列の数)+(n回で到達できるセルの情報)=O(n^2)+O(n)=O(n^2) となるのでしょうか? あと、この問題の(M,N,D)のオーダーで評価せよというのはどういう意味として捉えればいいのでしょうか?O(n^3)などと書いておくだけで良いのでしょうか? 問3の時間的及び空間的に効率化する方策としてはどのようなものが考えられるのでしょうか?これは、自力では全然ろくな方法が思い付きませんでした。。。 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- glarelance
- 回答数6
- VC++とVC#の違いを教えて下さい
VC++とVC#どちらを勉強したほうが就職に有利でしょうか VC++とVC#何がちがうのでしょうか。 VC++は主に業務系アプリを作成するときに使う言語で VC#は主に制御系アプリを作るときに作成する見たいな 違いも教えて下さい。
- staticの動作について
C++で趣味でゲームを作っているのですが、staticを使ったときのローカル変数の動作について質問があります。 いまいち、ローカル変数の動作が分かっていないのですが、大雑把には、関数が読み出される毎に空いてるメモリを探して、そこを確保する物だと思ってます。 で、staticを用いて宣言すると内容が保持されると言うことは、これは始めに一回だけメモリの確保をして、以降はそれを継続して使っているというものなのでしょうか? だとすると、staticをつかったローカル変数の方が、繰り返しメモリの確保が行われ無い分、処理が早いということでしょうか? いま、ゲーム内では、描画用の関数描画基準座標とサイズを受け渡して入るのですが、どうしても内部で描画終了点と開始点のクリップを計算する必要があり、そのためにどうしても計算した開始点、終了点を保持する変数が必要になっています。 しかし、描画関数はキャラの分と背景描画の分とパーティクルの描画の分と、ゲーム1ループないでも1000回近く(多いときは2000回ぐらい)呼び出されてます。 その度にメモりの確保をされるのはなんか気分が悪いなぁと思ってstaticを何となくつているのですが、実際の所staticを着けたら動作がはやくなるとかと言うことは無いのでしょうか? 宜しくおねがします。
- プログラムを実際に実行したと明確に分かる方法とは
C言語でつくったあるプログラムを、 ”実際に実行した”と明確に分かるようにレポートに書くにはどうしたらいいでしょうか? プログラムをそのままレポートに載せるのはいけないようです。 例として、画面のハードコピーまたは出力ファイルの内容を添付、とあるのですが、 これもまた何を指しているのか分からず、困っています。 因みに情報系の学科に属しているわけでもなく、プログラミングに関する知識もほぼありません。 初歩的すぎる質問を申し訳ないのですが、どなたかご教示いただけますでしょうか。 よろしくお願いします。
- VC++2008 Express MSCOMMのようなもの LAN接続
詳しくなくて質問の仕方もよくわかりませんが VC++を使って、LAN経由でシーケンサなどのデータを読み書きできるようなDLLを作成したいと思います。 (DLLでなくても良いです) VBだとMSCOMMを使用してのサンプルなどあり、 分かるのですが、VC++だとどのようにコンポーネントの設定とか するのでしょうか? 環境は以下です。 VC++2008Express Win32アプリ DLL OS:WindowXP よろしくお願いします。
- 簡易暗号化プログラム(文字入れ換え)
char型の配列を使って、入力されたアルファベットのAはNに、BはOに、CはPに・・・とZまで文字を入れ換えるプログラムを作ろうと思ってるのですが、配列の中の文字を変更するにはどうしたらいいですか? 初心者で分からないことだらけですがよろしくおねがいします
- 27歳ハード系移行
27歳のLAPPプログラマーですが、お給料の良い組込み系に進みたいと思っています。プログラムの種類がまったく別になると思いますし ハード系の業界がまったく分かりません。実務経験がなくても、 教室とかに通えば、就職できるでしょうか? 色々な意見を聞かせてください。
- ベストアンサー
- C・C++・C#
- aiueo_1326
- 回答数2
- プログラムでわからないところがあります。
この文では何を行っているんでしょうか? *mode=(*mode & ~mask[i]) | data[i]; あまりに賢くないので わかりやすい説明いただけないでしょうか。
- ベストアンサー
- C・C++・C#
- arisa_saki
- 回答数1
- c言語 構造体
大学での内容なのですが,『名前,数学の点数,英語の点数,国語の点数を格納できる(メンバに持つ)構造体を宣言し,この構造体の配列を用いて,3人分の情報をキーボードから入力後,各科目の平均点を画面に表示するプログラムを作成せよ.』という問題で,自分なりに作ってみたのですがうまくいきません.どなたか教えていただけませんか? 一応自分で作ったものを下に載せておきます. ================================================================ #include <stdio.h> #include <string.h> struct test { char name[20]; int sugaku; int eigo; int kokugo; }; int main(void) { struct test suzuki; int (suzuki.sugaku), (suzuki.eigo), (suzuki.kokugo); strcpy(suzuki.name, "Suzuki"); printf("氏名:鈴木 一馬\n"); printf("数学:"); scanf("%d", &suzuki.sugaku); printf("英語:"); scanf("%d", &suzuki.eigo); printf("国語:"); scanf("%d", &suzuki.kokugo); struct test tanaka; int tanaka.sugaku, tanaka.eigo, tanaka.kokugo; strcpy(tanaka.name, "Tanaka"); printf("氏名:田中 二郎\n"); printf("数学:"); scanf("%d", &tanaka.sugaku); printf("英語:"); scanf("%d", &tanaka.eigo); printf("国語:"); scanf("%d", &tanaka.kokugo); struct test yamamoto; int yamamoto.sugaku, yamamoto.eigo, yamamoto.kokugo; strcpy(yamamoto.name, "Yamamoto"); printf("氏名:山本 三弘\n"); printf("数学:"); scanf("%d", &yamamoto.sugaku); printf("英語:"); scanf("%d", &yamamoto.eigo); printf("国語:"); scanf("%d", &yamamoto.kokugo); printf("数学の平均点は%dです。\n", ((suzuki.sugaku + tanaka.sugaku + yamamoto.sugaku) / 3.0)); printf("英語の平均点は%dです。\n", ((suzuki.eigo + tanaka.eigo + yamamoto.eigo) / 3.0)); printf("国語の平均点は%dです。\n", ((suzuki.kokugo, + tanaka.kokugo + yamamoto.kokugo) / 3.0)); return (0); } ================================================================
- ベストアンサー
- C・C++・C#
- ryuko_1001
- 回答数4
- 大学の授業で作った暗号化プログラムが動きません。
下記のような暗号化プログラムを作成したのですが動きません。 問題のある場所は36行目(/で囲まれた行)で式の構文エラーと診断されたのですが、どう直せばいいのか分かりません。 どなたかどうすればよいのかお教え下さい。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int anngou (int c, char b[81]) { while (c <= 81) { if(b[c] >= 'a' && b[c] <= 'z') { if(b[c] >= 'a' && b[c] <= 'm') { b[c] = b[c] + 13; } else { b[c] = b[c] - 13; } } else { if(b[c] >= 'A' && b[c] <= 'Z') { if(b[c] >= 'A' && b[c] <= 'M') { b[c] = b[c] + 13; }else{ b[c] = b[c] - 13; } } } } return b[c]; } int main(void) { int a, c; char b[81]; a = c = 0; while (a <= 9) { printf("Input some words: "); fgets(b, 81, stdin); /b[c] = anngou(char b[c]);/ c = 0; while (c <= 81) { printf("%s", b[c]); c++; } printf("\n"); a++; } exit(0); }
- Aki-h8/3052マイコンについて
今Aki-h8/3052マイコンを勉強しているのですが、初心者のためうまくいかず質問をしました。知識がないと思われるような質問をしてしまいますが、よろしくお願いします。 次のようなプログラムを書き込んで、LEDを点滅させたいのですが点滅しません。原因がわからないので、教えていただける方がいたらよろしくお願いします。 #define P5DDR (*(volatile unsigned char*)0xffffc8) #define P5DR (*(volatile unsigned char*)0xffffca) void wait (long loop){ while(loop--); } int main(void){ P5DDR = 0xff; while(1){ P5DR = 0xff; wait(200000); P5DR = 0; wait(200000); } } ポートBを使用した場合うまくいくのですが、ポート5を使用するとうまくいきません。 コンパイラにはGDLを、書き込みにはH8Write Turboを使用しています。
- C言語プログラミング能力認定試験について
C言語プログラミング能力認定試験2級を受けようと思っているものですが、これは就職にどれくらい役に立つのでしょうか?
- C言語 プログラミング 考え方
何行かの文字列(文字数はすべて一緒)を入力してそれらの文字の縦と横を入れ替える作業の方法が思いつきません。 どなたかアドバイスお願いします!
- ベストアンサー
- C・C++・C#
- tomato1414
- 回答数2
- C言語 プログラミング 考え方
何行かの文字列(文字数はすべて一緒)を入力してそれらの文字の縦と横を入れ替える作業の方法が思いつきません。 どなたかアドバイスお願いします!
- ベストアンサー
- C・C++・C#
- tomato1414
- 回答数2
- volatileについて
volatileの意味は分かってるつもりではいるのですが、どういったとき使うのかいまいちわかりません。何かソースの例かURLをよろしくお願いします。