回答数
気になる
-
C# リフレクションについて
お世話になっております。 C#のリフレクションについて質問です。 現在あるジェネリック型クラスからプロパティを取得する仕組みを構築しております。 ジェネリック型クラスは元々普通のクラス構造を持っており、以下のような内容です。 ------------------ class A { public List<XX> obj1 { get; set; }; // XXはクラス型 public List<ZZ> obj2 { get; set; }; // ZZはクラス型 } ------------------ このデータを渡された側は、ジェネリック型のためクラスの構造は不明。 その為、以下のように「class A」とそのプロパティの内容を特定しました。 ------------------ var type = typeof(T); List<PropertyInfo> infos = type.GetProperties().ToList(); ------------------ ただ、ここからが問題となっており、「class A」の「obj1」「obj2」プロパティのクラス構造を解析しようとして、同様に上記infosに対して「type.GetProperties().ToList();」を実行してみたところ、元々infosが「PropertyInfo」型なので、そちらのメンバが取得されてしまいます。 説明がややこしくて申し訳ありませんが、このような状況下で「obj1」「obj2」のクラス構造を解析することは可能でしょうか? お手数ですが、よろしくお願いいたします。
質問日時: 2021/02/03 18:51 質問者: sakruaw
ベストアンサー
2
0
-
iPadでのC#で作成したWebページのアクセスについて
Windows2016、IIS、開発言語(C#)で、あるWebシステムを構築しています。 このWebシステムにユーザからiPadでアクセスできるようにできないかという問い合わせを受けています。(ブラウザはSafariの前提)。 当該システムはiPadでの利用は考慮しておりませんが可能でしょうか。(データ参照・更新を実施しています。)また、Webページへのデータ入力、描画等も問題なく可能でしょうか。なんとなく参照は可能なだと思いますが、データ入力、描画がプログラムを修正しないとうまくいかないような気がしています。 お手数ですが回答を頂ければと思います。
質問日時: 2021/02/03 00:43 質問者: aikibon
ベストアンサー
3
0
-
SqlServerのトランザクションについて。 SqlServerのデータを取得・更新・追加するGU
SqlServerのトランザクションについて。 SqlServerのデータを取得・更新・追加するGUIアプリをc#で作成しています。※このアプリを使用ユーザーは不特定多数。 データを取得し更新する操作があります。取得の際に取得行をロック(UPDLOCK)しています。 この時のアプリ操作として、取得ボタン押下〜更新ボタン押下までの処理について質問です。 現状は、以下のような処理にしています。 1、取得ボタン押下の際の処理でトランザクションを開始。 2、(ユーザーにて編集作業)←この間、トランザクションはコミットせず保持したまま 3、更新ボタン押下でトランザクションをコミット 質問①:この処理は一般的に正しいやり方でしょうか。問題なくやりたいこと(ロックはうまく機能し他ユーザーから対象レコードを閲覧できないこと)はできています。 質問②:SqlCommandのトランザクションタイムアウトは規定が1分となっているようですが、1分経ってもトランザクションは保持されたままになっています。自動でロールバックしないのはなぜでしょうか。 少し長くなりましたが、よろしくお願い致します。
質問日時: 2021/02/02 21:40 質問者: monapiii
ベストアンサー
3
1
-
配列とポインタについて、 abcをポインタで指定して [a(ポインタで指定されたアドレス1)][b(
配列とポインタについて、 abcをポインタで指定して [a(ポインタで指定されたアドレス1)][b(アドレス2)][c(アドレス3)]とポインタで指定されたアドレスを先頭に配列にabcが入るのでしょうか? ポインタpがアドレスを振り、 そのアドレスの振られた配列(アドレス)から文字列の文字が一文字ずつ入るという理解は正しいですか?
質問日時: 2021/02/01 23:10 質問者: captain06
ベストアンサー
2
1
-
ベストアンサー
2
1
-
GDBの書き方
GDBに詳しい方、教えてください。 gdb8.2.1(gccは8.3.0を使っています。)を使っているのですが、以下のアセンブルコードのデバッグで、以前の32ビットのヴァージョンでの表示の書き方ができなくなっている様なのですが、64ビットのヴァージョンでは以下の(1)〜(3)は、どの様に書いたら良いのでしょうか? (1)(gdb) x/w &num 変数numのアドレス値の内容を表示するのですが、 「Can't take address of "num" which isn't an lvalue.」 となってしまいます。 (2) (gdb) print num 変数numの内容を表示($1 = 6)するのですが、 $1 = num となってしまいます。 (3) (gdb) print/c (char[6])string 配列stringの要素を6つのchar型と仮定して表示するのですが、 Invalid cast. となってしまいます。 (アセンブルコード) .file "examgdb.s" .data num: .long 0x6 string: .ascii "abcdef" iarray: .word 0x1234, 0x5678, 0x9abc, 0xdef0, 0x1234, 0xffff .text .globl main main: movl $0, %esi looptop: movb string(%esi), %al movw iarray( , %esi , 2 ), %dx incl %esi cmpl num, %esi jb looptop endloop: ret
質問日時: 2021/02/01 20:12 質問者: tmiyoshi
ベストアンサー
2
0
-
#include <stdio.h> #include <string.h> int main(vo
#include <stdio.h> #include <string.h> int main(void){ char str[] = "str == NULL ? \"(NULL)\" : str"; char *p, *q; int ch; p = str; for(;;){ for(q=p; !(*q=='?' || *q==':' || *q==0); q++) ; ch = *q; *q = 0; printf("|%s|\n", p); if(ch==0) break; p = q+1; } } のプログラマの細部にわたるポインタや文字列、アドレスなどわけがわからなくなってきました。 なぜアドレスを++するのに*q++ではなく、 q++なのか、p = q+1;は文字列の何を+しているのか、混乱しています。 どうか図を使って解説して頂けないでしょうか?
質問日時: 2021/02/01 12:59 質問者: captain06
ベストアンサー
9
0
-
プリプロセッサの使い方
プリプロセッサの使い方での確認なのですが、 #define A #if defined(A) 処理(1) #else 処理(2) #endif と書いた場合、Aに何も定義していないので、処理(2)が実行されると言う理解で良いですか? また、 #ifdef A #else #endif と書いた場合と何が違うのですか?
質問日時: 2021/02/01 11:23 質問者: tmiyoshi
ベストアンサー
5
0
-
char my_str2(const char* s1, const char* s2)//ここで入
char my_str2(const char* s1, const char* s2)//ここで入力した文字列と用意された文字列を引数として扱う。 { const size_t a = strlen(s2); //無限ループする。 for (;;) { //関数memcmpの返り値が0の時は一致した時なので、==0とする。 if (memcmp(s1, s2, a) == 0) return 1;//入力した文字列にい指定された文字列が入っていた場合は1を返すように設定した。 //入力した文字列が最後の文字まで到達した場合は一致する文字列がないということなので0を返すようにした。 else if (*s1 == '\0') return 0;//入っていなかった //文字列が一致した場合でも一致する文字列がない場合でも入力した文字列の一文字分の文字コードのバイト数?が繰り上がるようにした。 else ++s1; } } において、なぜconst size_t a = strlen(s2); for (;;) { if (memcmp(s1, s2, a) == 0) を加える必要があるのですか? なんのために、s2のバイト数をもとめaに代入して、if (memcmp(s1, s2, a) == 0)の形にしたのかわかりません。
質問日時: 2021/01/31 22:25 質問者: captain06
ベストアンサー
3
1
-
#include <stdio.h> #include <string.h> void main(v
#include <stdio.h> #include <string.h> void main(void){ char str[] = "str == NULL ? \"(NULL)\" : str"; char *p; p = strtok(str, "?:"); while(p) { printf("|%s|\n", p); p = strtok(NULL, "?:"); } } 以上のプログラムをもっと簡単に長くなってもいいので書き換えられないでしょうか? またこのプログラムは何をするプログラムですか?
質問日時: 2021/01/31 13:20 質問者: captain06
ベストアンサー
3
1
-
C言語 巡回セールスマン問題 2-opt法
タイトルにあるプログラムを書いたときに,予期せぬ結果になってしまうので, どこがどのように違うのか,どうすればよいのかを教えていただきたいです. 申し訳ないのですが見ていただけたら嬉しいです. コンパイルでエラーはでません. 文字数が足りないので,求める結果と現在の結果は補足に載せます. 以下,ソースコード #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 5 /* 都市の数 */ /* 都市の座標構造体 */ struct City{ int x, y; }; /* 問題情報構造体 */ struct TSP { struct City city[N]; /* 都市の位置 */ int currentOrder[N]; int changedOrder[N]; /* 巡回順 */ float currentCost; float changedCost; /* 総移動距離 */ }; /* 関数の宣言 */ void ReadData(struct TSP *tsp); void ShowData(struct TSP *tsp); void TwoOpt(const int currentOrder[N], int changedOrder[N], int x1, int x2); float CalcDistance(struct City a, struct City b); void currentOrder(struct TSP *tsp); void CalcCost(struct TSP *tsp); int UpdateOrder(struct TSP *tsp, int x1, int x2); void ShowCost(struct TSP *tsp); /* * メイン関数 */ int main() { struct TSP tsp; ReadData(&tsp); ShowData(&tsp); currentOrder(&tsp); ShowCost(&tsp); return 0; } /* * 都市座標データ読み込み */ void ReadData(struct TSP *tsp) { /* ファイルオープン */ FILE* fp = fopen("cities05.csv", "r"); if (fp == NULL) { printf("Can't open data file.\n"); } /* データ読み込み */ int i; for (i = 0; i < N; i++) { fscanf(fp, "%d,%d\n", &tsp->city[i].x, &tsp->city[i].y); } fclose(fp); } /* * 都市座標データ表示 */ void ShowData(struct TSP *tsp) { int i; /* データ表示 */ printf("Cities location:\n"); for (i = 0; i < N; i ++) { printf("C%-2d : %4d,%4d\n", i + 1, tsp->city[i].x, tsp->city[i].y); } } /* * 2-opt関数 */ void TwoOpt(const int currentOrder[N], int changedOrder[N], int x1, int x2) { int i = 0; while(1){ if(currentOrder[x1+i] == currentOrder[x2-i]){ changedOrder[x1+i] = currentOrder[x1+i]; break; } else{ changedOrder[x2-i] = currentOrder[x1+i]; changedOrder[x1+i] = currentOrder[x2-i]; i++; } } for(i = 1; i<=x1; i++){ changedOrder[x1-i] = currentOrder[x1-i]; } for(i = 1; i<=N-x2-1; i++){ changedOrder[x2+i] = currentOrder[x2+i]; } } /* *現在の巡回順 */ void currentOrder(struct TSP *tsp) { int currentOrder[N]; int i; for (i = 0; i < N; i++) { currentOrder[i] = i; } } /* * 総移動距離を計算する */ void CalcCost(struct TSP *tsp) { int i; tsp->currentCost = 0; for (i = 0; i < N; i++) { if(i == N-1){ tsp->currentCost += CalcDistance(tsp->city[tsp->currentOrder[i]], tsp->city[tsp->currentOrder[0]]); } else{ tsp->currentCost += CalcDistance(tsp->city[tsp->currentOrder[i]], tsp->city[tsp->currentOrder[i+1]]); } } tsp->changedCost = 0; for (i = 0; i < N; i++) { if(i == N-1){ tsp->changedCost += CalcDistance(tsp->city[tsp->changedOrder[i]], tsp->city[tsp->changedOrder[0]]); } else{ tsp->changedCost += CalcDistance(tsp->city[tsp->changedOrder[i]], tsp->city[tsp->changedOrder[i+1]]); } } } /* * 2都市間の距離を計算 * 引数:struct City a : 都市1 * 引数:struct City b : 都市2 * 戻り値:距離 */ float CalcDistance(struct City a, struct City b) { float distance; distance += sqrt(pow((a.x - b.x), 2) + pow((a.y - b.y), 2)); return distance; } /* * 巡回順と総移動距離を表示 */ void ShowCost(struct TSP *tsp) { int i; int x1, x2; int currentOrder[N], changedOrder[N]; /* x1, x2 のキーボード入力 */ printf("Please enter x1 and x2\n"); printf("x1 = "); scanf("%d", &x1); printf("x2 = "); scanf("%d", &x2); printf("Current order: "); for (i = 0; i < N; i ++) { printf("C%-2d> ", currentOrder[i] + 1); } printf("C%-2d Current cost = %7.1f\n", currentOrder[0] + 1, tsp->currentCost); TwoOpt(currentOrder, changedOrder, x1, x2); printf("Changed order: "); for(i = 0; i < N; i ++) { printf("C%-2d> ", changedOrder[i] + 1); } printf("C%-2d Changed cost = %7.1f\n", changedOrder[0] + 1, tsp->changedCost); }
質問日時: 2021/01/31 13:10 質問者: shiomiso
解決済
5
0
-
#pragma warning(disable: 4996) #include <stdio.h>/
#pragma warning(disable: 4996) #include <stdio.h>// puts, printf #include <string.h>// strcpy, strtok int main() { const char* str = "abc:123\n,tdef:45,ghi:678."; char buf[1024], * p; strcpy(buf, str); puts("-- \"\\n\"--"); p = strtok(buf, "\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, "\n"); } strcpy(buf, str); puts("-- \"\t\"--"); p = strtok(buf, "\t"); while (p) { printf("[%s]\n", p); p = strtok(NULL, "\t"); } strcpy(buf, str); puts("-- \",\"--"); p = strtok(buf, ","); while (p) { printf("[%s]\n", p); p = strtok(NULL, ","); } strcpy(buf, str); puts("-- \",\\t\\n\"--"); p = strtok(buf, ",\t\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, ",."); } } について、なぜ 二つ目の出力は/tがないのに [abc:123] [,tdef:45,ghi:678.] ではなく、 [abc:123 ,tdef:45,ghi:678.] なのですか? もう一つ、三つ目の出力はなぜ [abc:123] [tdef:45] [ghi:678] ではなく [abc:123 ] [tdef:45] [ghi:678.] なのでしょうか? どうかわかりやすく教えてください。
質問日時: 2021/01/30 06:12 質問者: captain06
ベストアンサー
2
0
-
解決済
1
0
-
#pragma warning(disable: 4996) #include <stdio.h>/
#pragma warning(disable: 4996) #include <stdio.h>// puts, printf #include <string.h>// strcpy, strtok int main() { const char* str = "abc:123\n,tdef:45,ghi:678."; char buf[1024], * p; strcpy(buf, str); puts("-- \"\\n\"--"); p = strtok(buf, "\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, "\n"); } strcpy(buf, str); puts("-- \"\t\"--"); p = strtok(buf, "\t"); while (p) { printf("[%s]\n", p); p = strtok(NULL, "\t"); } strcpy(buf, str); puts("-- \",\"--"); p = strtok(buf, ","); while (p) { printf("[%s]\n", p); p = strtok(NULL, ","); } strcpy(buf, str); puts("-- \",\\t\\n\"--"); p = strtok(buf, ",\t\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, ",."); } } に関して、 strcpy(buf, str); puts("-- \"\\n\"--"); p = strtok(buf, "\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, "\n"); } strcpy(buf, str); puts("-- \"\t\"--"); p = strtok(buf, "\t"); while (p) { printf("[%s]\n", p); p = strtok(NULL, "\t"); } strcpy(buf, str); puts("-- \",\"--"); p = strtok(buf, ","); while (p) { printf("[%s]\n", p); p = strtok(NULL, ","); } strcpy(buf, str); puts("-- \",\\t\\n\"--"); p = strtok(buf, ",\t\n"); while (p) { printf("[%s]\n", p); p = strtok(NULL, ",."); } が -- "\n"-- [abc:123] [,tdef:45,ghi:678.] -- ""-- [abc:123 ,tdef:45,ghi:678.] -- ","-- [abc:123 ] [tdef:45] [ghi:678.] -- ",\t\n"-- [abc:123] [tdef:45] [ghi:678] となる過程の処理と理由がさっぱりわかりません。 どうかわかりやすく教えて頂けないでしょうか。 どの変数に何が代入され、どのように値が移動するかを詳しく知りたいです。
質問日時: 2021/01/29 06:52 質問者: captain06
ベストアンサー
2
1
-
Cプログラム 関数化
ポインタ勉強中です。 これを関数にしたいのですが ファイルからaとa2を読み込んで その値をmainでまた別の関数に入れようと考えています。 #include <stdio.h> int main(){ int i, j; unsigned char a[16]= { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}; unsigned char a2[16]= { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}; unsigned char b[4][4], a3[4][4], c[4][4];//配列格納用 /* インプット */ for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ b[i][j]=a[i+(j*4)]; printf(" %02x",b[i][j]); } printf("\n"); } printf("\n"); for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ key1_1[i][j] = a2[i+(j*4)]; printf(" %02x",a2[i][j]); } printf("\n"); } printf("\n"); for(i = 0; i < 4; i++){ for(j = 0; j < 4; j++){ c[i][j] = (b[i][j] ^ a3[i][j]); } } } このような感じにしたいです。 int main(){ int i,j; unsinged char bin1[16]={0}; unsinged char bin2[16]={0}; ファイル読み込み 省略 kansuu(bin1,bin2,hoge); for(i=0,i<4;i++){ for(j=0,j<4;j++){ printf("%02x",hoge[i][j]); } } void kansuu(unsigned char a,unsigned char b,unsigned char c){ 3つ用意してa,bを入れるとcが返ってくるような もしくはそのほかいい方法があれば教えていただけるとありがたいです。
質問日時: 2021/01/28 20:14 質問者: jenseits
ベストアンサー
3
0
-
Cプログラムについて
以下の記述は半径を実数値で入力して、円の面積を計算し表示するプログラムを関数を多用して作成しているところである。リストに書かれた指針(/* */に書かれた内容)に沿って口内に正しい字句を記入せよ。 #include <stdio.h> /*「半径を入力してください」というメッセージだけを画面に表示する関数のプロトタイプ宣言:関数名はmessageとする*/ void message(void); /*実数値の半径をキーボードから読み込み、その値を戻り値として返す事だけをする関数のプロトタイプ宣言:関数名はhankeiとする*/ double hankei(void); /*半径を引数として受け取り、円の面積を計算してその結果を戻り値として返す事だけをする関数のプロトタイプ宣言:関数名はmensekiとする*/ double menseki(double r); /*円の面積を引数として受け取り、その値を「面積は○○です。」とだけ画面に表示する関数のプロトタイプ宣言:関数名はhyoujiとする*/ void hyouji(double s); /*メイン関数の定義*/ int main(void){ double r; double s; message (); r=hankei (); s=menseki (r); hyouji (s); return(0); } /*メイン関数定義終了*/ /*関数messageの本体定義*/ void message(void){ puts("半径を入力してください"); return(0); } /*関数hankeiの本体定義*/ double hankei(void){ double r; scanf("%lf",&r); return(r); } /*関数mensekiの本体定義*/ double menseki(double r){ return(r*r*3.14); } /*関数hyoujiの本体定義*/ void hyouji(double s){ printf("面積は%lfです\n",s); return(); } で合ってますか? おかしい箇所があればご指摘お願いします。
質問日時: 2021/01/28 12:51 質問者: あんぱーーー。
解決済
3
0
-
プログラミングC++のmapについて
現在C++の勉強をしております、初心者です。 独習C++という本を元に勉強しておりまして、そのテキストに記載のプログラムをそのまま一度書き写したところエラーが出てしまいました。 テキスト通りに入力したため理由が全くわかりません。 エラーの内容としては、下記のプログラムのメイン文内で「コンストラクタ”name::name”のインスタンスが引数リストと一致しません」「コンストラクタ”phonenum::phonenum”のインスタンスが引数リストと一致しません」 というものです。 visual studio 2019で作成しています。 どなたかわかる方どこを直せば良いのか、どういう理由なのかを教えてください。よろしくお願いします。 #include <iostream> #include <map> #include <cstring> using namespace std; class name { char str[20]; public: name() { strcpy(str, ""); } name(char* s) { strcpy(str, s); } char* get() { return str; } }; bool operator<(name a, name b) { return strcmp(a.get(), b.get()) < 0; } class phonenum { char str[30]; public: phonenum() { strcpy(str, ""); } phonenum(char* s) { strcpy(str, s); } char* get() { return str; } }; int main() { map<name, phonenum> m; m.insert(pair<name, phonenum>(name("joe"), phonenum("342")));//ここでエラー m.insert(pair<name, phonenum>(name("tom"), phonenum("123")));//同様のエラー m.insert(pair<name, phonenum>(name("jesse"), phonenum("456")));//同様のエラー m.insert(pair<name, phonenum>(name("mike"), phonenum("987")));//同様のエラー char str[80]; cout << "名前を入力:"; cin >> str; map<name, phonenum>::iterator p; p = m.find(name(str)); if (p != m.end()) cout << "電話番号:" << p->second.get() << endl; else cout << "名前がマップにありません\n"; return 0; }
質問日時: 2021/01/28 11:26 質問者: 風情
ベストアンサー
1
0
-
Cプログラムについて
以下の文を実行した後のa,b,c,d,eの最終値はいくらになるか。 int a=8; int b=12; int c,d,e; c=a++; d=++b; e=d-c+(a--); aの最終値は8 bの最終値は13 cの最終値は8 dの最終値は13 eの最終値は14 で合ってますか?
質問日時: 2021/01/28 11:12 質問者: nanase...
解決済
1
0
-
画像において、 なぜwhile(buffer[i]==input[i]と書けないのでしょうか? in
画像において、 なぜwhile(buffer[i]==input[i]と書けないのでしょうか? input[i]の中身を*pに変換しないとbuffer[i]に代入できないのでしょうか?
質問日時: 2021/01/28 11:11 質問者: captain06
ベストアンサー
7
1
-
Cプログラム
int型の変数n1の値が15であるとする。 このとき以下の文を実行した後のn1の値を答えよ。 #include <stdio.h> int main(void) { int n1 = 15; printf("%d\n", n1+=10); printf("%d\n", n1-=20); printf("%d\n", n1*=4); printf("%d\n", n1/=10); printf("%d\n", n1%=6); return(0); } 25 5 20 2 2 で大丈夫ですか? n1*=4の箇所が60にならないのはなぜですか?
質問日時: 2021/01/27 23:11 質問者: nanase...
解決済
4
0
-
Cプログラムについて
int型の変数n1,n2,n3,n4の値がそれぞれ15,15,20,30であるとする。 このとき以下の各式を評価した値を答えよ。 (1)n1==n2 1 (2)n1==n3 0 (3)n1!=n2 0 (4)n1!=n4 1 (5)n1>=n2 1 (6)n1>n2 0 (7)n2<=n3 1 (8)n2<n4 1 (9)n1%5==0 1 (10)n1/5!=3 0 (11)n1?n2:n3 15 (12)n1!=n2?5:3 3 (13)(n1==n2)&&0 0 (14)(n3==n4)||0 0 で合ってますか? 違っていればご指摘お願いします。
質問日時: 2021/01/27 17:41 質問者: あんぱーーー。
解決済
3
0
-
Cプログラムについて
要素数が8である配列aの全要素を逆順に並び替え、その結果を表示するプログラムをfor文を用いて作成せよ。 #include <stdio.h> int main(void){ int i; int temp; int a[8]={57,28,45,62,18,36,82,77}; for(i=0;i<8;i++){ temp=a[i]; a[i]=a[7-i]; a[7-i]=temp; } for(i=o;i<8;i++) printf("a[%d]=%d",i,a[i]); retrun(0); } で合ってますか? 違っていればご指摘お願いします。
質問日時: 2021/01/27 11:34 質問者: あんぱーーー。
解決済
3
0
-
Cプログラムについて
初期化された配列aの要素の中で7を探し7が見つかればそのたびに「7があったよ」と表示するプログラムを作成せよ。 #include <stdio.h> int main(void){ int a[5]={9,8,7,6,7}; int i; for(i=0;i<5;i++){ if(a[i]==7) printf("7があったよ\n");} return(0); } で合ってますか? 違っていればご指摘お願いします。
質問日時: 2021/01/27 10:28 質問者: あんぱーーー。
解決済
3
0
-
解決済
1
0
-
c++で陽的オイラー法の書き方について質問です。 例えば2体問題のように加速度が位置に依るような場合
c++で陽的オイラー法の書き方について質問です。 例えば2体問題のように加速度が位置に依るような場合, x=x+v(x)*dt; v(x)=v(x)+a(x)*dt; のように書いてしまうと代入された後のxがvのほうに代入されてしまうと思います。どのようにすれば解決できますか?一応画像のように書いてはみたのですが…
質問日時: 2021/01/24 03:14 質問者: みんとてぃー
ベストアンサー
2
0
-
初期条件x(t=0)=0.001、パラメータτ=1.0で 成長方程式を2次ルンゲクッタ法で解くプログ
初期条件x(t=0)=0.001、パラメータτ=1.0で 成長方程式を2次ルンゲクッタ法で解くプログラムを作りたいのですが、わかりません。 わかる方教えてください。 また、パラメータαは10/256.0です。
質問日時: 2021/01/24 02:02 質問者: アユニでぃー
解決済
1
0
-
ブラケットの外の記述について
Linuxカーネルの記述の中で、関数定義で、下記の__acquires(rq->lock)のように ブラケット{}の外側に命令を書いた場合、どう言った扱いになるのでしょうか? static inline runqueue_t *task_rq_lock(task_t *p, unsigned long *flags) __acquires(rq->lock) { struct runqueue *rq; repeat_lock_task: local_irq_save(*flags); rq = task_rq(p); spin_lock(&rq->lock); if (unlikely(rq != task_rq(p))) { spin_unlock_irqrestore(&rq->lock, *flags); goto repeat_lock_task; } return rq; }
質問日時: 2021/01/23 22:57 質問者: tmiyoshi
ベストアンサー
2
0
-
5×5の転置行列を求めるC言語のプログラミングの問題なのですが、変な値が出力されて困っています。どこ
5×5の転置行列を求めるC言語のプログラミングの問題なのですが、変な値が出力されて困っています。どこがおかしいですかね? #include <stdio.h> int main(void){ int n[4][4],m[4][4]; int a,b; printf("5×5行列を入力してください。\n"); for (a = 0; a <5; a++){ for(b = 0; b <5; b++){ scanf("%d", &n[a][b]); m[b][a] = n[a][b]; printf("%d", m[a][b]); } printf("\n"); } return 0; }
質問日時: 2021/01/23 22:57 質問者: たなまたなやら
ベストアンサー
6
1
-
整数のべき数のプログラムについて
以下のようなプログラムを組んでいます。a^4+b^4+c^4+d^4=(n^4+(n+1)^4+(n+2)^4+(n+3)^4)^4=(e)^4となるような数の組み合わせを探すものです。実行はするのですが、答えがデタラメです。エラーではじくのでも実行しないのでもなく、直感的にわかるような間違った数値をかえしてきます。何が問題でしょうか。 #include <stdio.h> #include <math.h> #include <stdlib.h> unsigned long pow4(unsigned long a,int e) { return (a*a*a*a); } int main() { int i, j, k,z,m; int ctr = 0; unsigned long long int beki, sigma,temp; FILE *file; file = fopen("bekijyo_4.txt", "w"); for (i = 1; i < 200; i++) { for (j = i + 1; j < 300; j++) { for (k = j + 1; k < 400; k++) { for (m = k + 1;m < 500;m++){ beki = pow4(i, 4) + pow4(j, 4) + pow4(k, 4) + pow4(m,4); for(z = 1;z < 500; z++){ sigma = pow4((z-1), 4) + pow4(z, 4) + pow4((z + 1),4) + pow4((z + 2), 4); temp = pow4(sigma, 4); if (beki == temp) { if (ctr == 0){ printf("ready-----go!\n"); } ctr++; printf("(%d ,%d ,%d,%d)=(%d ,%d ,%d, %d)=(%d) \n", i, j, k,m,(z - 1), z, (z + 1),(z + 2), sigma); fprintf(file, "(%d ,%d ,%d ,%d)=(%d ,%d ,%d ,%d)=(%d) \n", i, j, k, m ,(z - 1), z, (z + 1),(z + 2), sigma); } if (beki < temp) break; } } } } } fclose(file); printf("finish!"); return 0; } 実行結果 (a,b,c,d)=(n,n+1,n+2,n+3)=(e) (4 ,164 ,240 ,402)=(0 ,1 ,2 ,3)=(98) (18 ,48 ,80 ,304)=(191 ,192 ,193 ,194)=(1198807058) (24 ,264 ,336 ,414)=(28 ,29 ,30 ,31)=(3055458) (26 ,132 ,200 ,472)=(191 ,192 ,193 ,194)=(1198807058) (28 ,60 ,296 ,494)=(1 ,2 ,3 ,4)=(354) (32 ,176 ,312 ,482)=(32 ,33 ,34 ,35)=(5071458) (36 ,164 ,230 ,268)=(0 ,1 ,2 ,3)=(98) (44 ,176 ,208 ,470)=(0 ,1 ,2 ,3)=(98) (48 ,190 ,196 ,276)=(191 ,192 ,193 ,194)=(1198807058) (64 ,84 ,160 ,214)=(1 ,2 ,3 ,4)=(354) (64 ,146 ,180 ,492)=(32 ,33 ,34 ,35)=(5071458) (72 ,108 ,244 ,258)=(26 ,27 ,28 ,29)=(2310354) (76 ,110 ,236 ,456)=(4 ,5 ,6 ,7)=(4578) (120 ,208 ,230 ,428)=(30 ,31 ,32 ,33)=(3968018) (140 ,190 ,284 ,496)=(191 ,192 ,193 ,194)=(1198807058) (152 ,226 ,352 ,424)=(4 ,5 ,6 ,7)=(4578) よろしくお願いします。
質問日時: 2021/01/23 22:05 質問者: 哲っちゃん
ベストアンサー
8
0
-
Visual Studio Codeについて
初心者です。パイソンをVisual Studio Codeで動かそうと思っていろいろやってみて Visual Studio Codeの黒い画面で 1 print("こんにちわ") とかいて ユーチューブ動画サイトの先生に従って 右の上の実行ボタン (△を横にしたやつ) 押せば 2 こんにちわ と出るはずなんですが その右側上に動画サイトでは△を横にした のが□□(画面が分割)、・・・ とある左側にあるのだが自分のにはないが どうしてか 何かダウンロードできてゐなかったのでしょうかご教授ください。
質問日時: 2021/01/23 18:47 質問者: norakurotodoroki
ベストアンサー
3
0
-
ベストアンサー
2
1
-
C言語に関する質問です フィボナッチ数列を表示するプログラムを作りましたが、これだと第n項しか表示さ
C言語に関する質問です フィボナッチ数列を表示するプログラムを作りましたが、これだと第n項しか表示されないので第0項から第n項まで表示されるようにしたいです。 どのようにすればよいでしょうか、どなたか教えてください!! #include <stdio.h> int fibo(int n){ if(n == 0) return 0; if(n == 1) return 1; if(n >= 2) return fibo(n - 2) + fibo(n - 1); } int main(void){ int n; int fn; printf("n = "); scanf("%d", &n); fn = fibo(n); printf("F_n = %d\n", fn); return 0; }
質問日時: 2021/01/22 14:44 質問者: kanamiーss
ベストアンサー
2
0
-
C言語について質問です。読み取った文字を関数を使って置き換え、それをファイル出力したいのですが、a[
C言語について質問です。読み取った文字を関数を使って置き換え、それをファイル出力したいのですが、a[10] = change(s)でエラーが出てしまいます。戻り値を設定すれば良いのですがどのように設定すればいいのか分かりません。分かる方お願いします。(pritfでターミナルには置き換えた後の文字は表示できたのですが、そこからどうやってファイル出力に移すのか分かりません) #include <stdio.h> #include <stdlib.h> void tenji(char*); int main(void) { FILE *fin; // 読み込み用 FILE *fout; // 書き込み用 char s[5]; char a[10]; int i; // 読み込み if((fin = fopen("report3.txt", "r")) == NULL){ printf("Cannot open the file.\n"); exit(1); } // 書き込み if((fout = fopen("rreport3.txt", "w")) == NULL){ printf("Cannot open the file.\n"); exit(1); } // ファイルの読み込み while(fscanf(fin, "%s", &s) != EOF){ printf("data = %s\n", s); } a[10] = change(s); fprintf(fout, "%s\n", s); //ファイル文字の出力 fprintf(fout,"%s",a); //置き換えた後の出力 // ファイルを閉じる fclose(fout); fclose(fin); return 0; } void change(char *x){ int i; char judge1[] = "O"; char judge2[] = "X"; for ( i = 0; i < 4; i++){ if ("%d",x[i] == 97){ printf("%s%s\n",judge1,judge2); } if ("%d",x[i] == 98){ printf("%s%s\n",judge1,judge2); } if ("%d",x[i] == 99){ printf("%s%s\n",judge2,judge2); } } }
質問日時: 2021/01/22 01:19 質問者: あるまげ
解決済
3
0
-
C言語について質問です。読み取った文字を関数を使って置き換え、それをファイル出力したいのですが、a[
C言語について質問です。読み取った文字を関数を使って置き換え、それをファイル出力したいのですが、a[10] = change(s)でエラーが出てしまいます。戻り値を設定すれば良いのですがどのように設定すればいいのか分かりません。分かる方お願いします。 (長くなるのでコードの前半は省略させていただきます。) char s [5]; char a [10]; // ファイルの読み込み while(fscanf(fin, "%s", &s) != EOF){ printf("data = %s\n", s); } a[10] = change(s); fprintf(fout, "%s\n", s); //ファイル文字の出力 fprintf(fout,"%s",a); //置き換えた後の出力 // ファイルを閉じる fclose(fout); fclose(fin); return 0; } void change(char *x){ int i; char judge1[] = "O"; char judge2[] = "X"; for ( i = 0; i < 4; i++){ if ("%d",x[i] == 97){ printf("%s%s\n",judge1,judge2); } if ("%d",x[i] == 98){ printf("%s%s\n",judge1,judge2); } if ("%d",x[i] == 99){ printf("%s%s\n",judge2,judge2); } } return ; }
質問日時: 2021/01/22 00:58 質問者: あるまげ
解決済
3
0
-
このプログラムは、Pythonのjanomeを利用してます。またこのプログラムは、URLを入力すると
このプログラムは、Pythonのjanomeを利用してます。またこのプログラムは、URLを入力すると、品詞の個数、比率がわかるプログラムです。 「やりたいこと」 URLを3つ打ち込んで、3つの品詞の比率の平均値を求めるプログラムが知りたいです。URL1、URL2、URL3など増やすのは分かりますが、URLを増やすことによって、変更しなければならないとこがあると思います。そこが知りたいです import urllib.request from janome.analyzer import Analyzer from janome.charfilter import * from janome.tokenizer import Tokenizer class MainTextCharFilter(CharFilter): def __init__(self, start, end): self.start = start self.end = end def apply(self, text): return text.split(self.start)[1].split(self.end)[0] while True: print("URLを入力してください") url = input('') html = '' with urllib.request.urlopen(url) as response: html = response.read().decode('shift_jis') char_filters = [UnicodeNormalizeCharFilter(), MainTextCharFilter('<div class="main_text">', '<div class="bibliographical_information">'), RegexReplaceCharFilter('<rp>\(.*?\)</rp>', ''), RegexReplaceCharFilter('<.*?>', '')] tokenizer = Tokenizer() analyzer = Analyzer(char_filters, tokenizer) meishi=0 josi=0 kigou=0 doushi=0 jodousi=0 fukusi=0 settousi=0 keiyousi=0 renntaisi=0 setuzokusi=0 kandousi=0 fira=0 for token in analyzer.analyze(html): if token.part_of_speech.split(',')[0] == "名詞": meishi=meishi+1 elif token.part_of_speech.split(',')[0] =="助詞": josi =josi+1 elif token.part_of_speech.split(',')[0] =="記号": kigou=kigou+1 elif token.part_of_speech.split(',')[0] =="動詞": doushi=doushi+1 elif token.part_of_speech.split(',')[0] =="助動詞": jodousi=jodousi+1 elif token.part_of_speech.split(',')[0] =="副詞": fukusi=fukusi+1 elif token.part_of_speech.split(',')[0] =="接頭詞": settousi=settousi+1 elif token.part_of_speech.split(',')[0] =="形容詞": keiyousi=keiyousi+1 elif token.part_of_speech.split(',')[0] =="連体詞": renntaisi=renntaisi+1 elif token.part_of_speech.split(',')[0] =="接続詞": setuzokusi=setuzokusi+1 elif token.part_of_speech.split(',')[0] =="感動詞": kandousi=kandousi+1 elif token.part_of_speech.split(',')[0] =="フィラー": fira=fira+1 tango_kosuu=meishi+josi+kigou+doushi+jodousi+fukusi+settousi+keiyousi+renntaisi+setuzokusi+kandousi+fira a={"名詞":meishi,"助詞":josi,"記号":kigou,"動詞":doushi,"助動詞":jodousi,"副詞":fukusi, "接頭詞":settousi,"形容詞":keiyousi,"連体詞":renntaisi,"接続詞":setuzokusi,"感動詞":kandousi,"フィラー":fira} for k,v in sorted(a.items(),key=lambda x:x[1],reverse=True): print(k,v) for k,v in sorted(a.items(),key=lambda x:x[1],reverse=True): print(k,'の比率',round((v/tango_kosuu)*100,3),"%") 実行結果 助詞 61080 名詞 58433 動詞 28900 記号 25630 助動詞 19815 副詞 6576 形容詞 3600 連体詞 2145 接頭詞 1519 接続詞 1398 感動詞 740 フィラー 226 助詞 の比率 29.077 % 名詞 の比率 27.817 % 動詞 の比率 13.758 % 記号 の比率 12.201 % 助動詞 の比率 9.433 % 副詞 の比率 3.131 % 形容詞 の比率 1.714 % 連体詞 の比率 1.021 % 接頭詞 の比率 0.723 % 接続詞 の比率 0.666 % 感動詞 の比率 0.352 % フィラー の比率 0.108 %
質問日時: 2021/01/21 21:35 質問者: Qじろー42287456
解決済
1
0
-
C言語について質問です。
下のコードに平均を昇順に並び替える関数を組み込みたいのですがどのようにプログラムを組めばよいかわかりません。誰かわかる方いらっしゃいましたら教えて下さい。 /*成績管理システム*/ #include<stdio.h> #include<string.h> #include<math.h> #define NAME_LEN 128 #define NUM_LEN 64 #define NUMBER 5 /*学生を表す構造体*/ typedef struct{ char name[NAME_LEN]; //名前 char number[NUM_LEN]; //学籍番号 double math; //数学の得点 double eng; //英語の得点 double phy; //物理の得点 }Student; /*x,yで指す学生の入れ替え*/ void swap_Student(Student *x,Student *y) { Student temp = *x; *x = *y; *y = temp; } /*3教科それぞれの平均点を求める*/ void sum_Student(Student a[],int n,double *ave1,double *ave2,double *ave3) { int i=0; double sum1=0; double sum2=0; double sum3=0; for(i=0;i<n;i++){ sum1 += a[i].math; sum2 += a[i].eng; sum3 += a[i].phy; } *ave1 = sum1/n; *ave2 = sum2/n; *ave3 = sum3/n; } /*ファイルの読み込み*/ int out_file(Student a[]) { FILE *fp; int i = 0; if((fp = fopen("File1","r")) == NULL) printf("\aファイルをオープンできません\n"); else{ while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)==5){ printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy); i++; } fclose(fp); } return i; } int main(void) { int a; int flag=0; int i=0; int cnt=0; double ave1; double ave2; double ave3; Student human[40]; do{ printf("ファイル読み込み:1 終了:0 :"); scanf("%d",&flag); if(flag==1) out_file(human); }while(flag!=0); printf("平均点を表示しますか? はい:1 いいえ:2 :"); scanf("%d",&a); if(a==1){ sum_Student(human,cnt,&ave1,&ave2,&ave3); printf("数学の平均点は%3.1lfです。",ave1); printf("英語の平均点は%3.1lfです。",ave2); printf("物理の平均点は%3.1lfです。",ave3); } return 0; }
質問日時: 2021/01/21 02:16 質問者: nomorethan
ベストアンサー
1
0
-
離散フーリエ変換のプログラムで,思うような結果が得られません...
離散フーリエ変換のプログラムをC言語で書きました. 周波数スペクトルを得るときに,grは-3と3(Hz)で8,giは-1と1(Hz)でそれぞれ16,-16,そのほかの周波数では0の値を取るようにしたいのですが,そのようになりません. どうすればそんな結果を得ることができるか教えていただきたいです. よろしくお願いします。 以下,プログラム #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int n, N = 32, k; double t, *g, *r_data, *i_data, *s_data, gr, gi; g = (double*)malloc(sizeof(double)*N); r_data = (double*)malloc(sizeof(double)*N); i_data = (double*)malloc(sizeof(double)*N); s_data = (double*)malloc(sizeof(double)*N); /*入力データ*/ for(n = 0; n < N; n++){ t = (double) (n * 3) / 32; g[n] = sin(2 * (M_PI) * t) + 0.5 * cos(6 * (M_PI) * t); printf("g[%d] = %lf\n", n, g[n]); } /*離散フーリエ変換と周波数スペクトル*/ for ( k = -(N/2); k < (N/2); k++ ){ gr = 0; gi = 0; for(n = 0; n < N; n++){ gr = gr + g[n] * cos(2 * (M_PI) * k * n / N); gi = gi - g[n] * sin(2 * (M_PI) * k * n / N); } r_data[k] = gr; i_data[k] = gi; s_data[k] = sqrt(r_data[k] * r_data[k] + i_data[k] * i_data[k]); } /*結果の表示*/ for(k = -(N/2); k < (N/2); k++){ printf("gr[%d] = %lf, gi[%d] = %lf\n", k, r_data[k], k, i_data[k]); } for (k = -(N/2); k < (N/2); k++) { printf("gs[%d] = %lf\n", k, s_data[k]); } free(g); free(r_data); free(i_data); free(s_data); return 0; }
質問日時: 2021/01/19 15:00 質問者: shiomiso
ベストアンサー
5
0
-
エラーについて質問です。
subscripted value is neither array nor pointer nor vector と言うエラーが出てしまいました。 ソースコードは下記の通りです。 #include <stdio.h> #define STUD 100 #define CORS 3 typedef struct Body { char name[32]; int age; double height; double weight; }Body; //構造体定義の宣言 //参考:【B4】おまけ課題 3~9行目 int print_bodydata(const Body* pData); int input_bodydata(Body* pData); FILE* open_file(char mode[]); //関数のプロトタイプ宣言 //参考:【B4】おまけ課題 11~13行目 int main(void) { int i,rc=0,cnt=0; Body Data[2]; FILE* fp; //変数の宣言 //参考:【B4】おまけ課題 17~19行目 int menu; int Sum_a[1]={0}; while(1){ printf("\n=== 操作メニュー ===\n"); printf("1:ファイル読み込み\n"); printf("2:全データ表示\n"); printf("3:新データ入力\n"); printf("4:ファイル書き出し\n"); printf("1~4以外:終了\n\n"); printf("操作No の入力:"); scanf("%d",&menu); printf("\n"); switch(menu){ case 1: printf("\n=== ファイル読み込み ===\n"); fp=open_file("r"); if(fp==NULL) return -1; for(i=0;i<100;i++){ rc=fscanf(fp,"%s\t%d\t%lf\t%lf\r\n", Data[i].name, &Data[i].age, &Data[i].height, &Data[i].weight); if(rc==EOF) break; } cnt=i; printf("%d件のデータをファイルから読み込みました\n",cnt); fclose(fp); //ファイルを開き 構造体配列に読み込む //参考:【B4】おまけ課題 22~32行目 break; case 2: printf("\n=== 全データ表示 ===\n"); printf("\n名前\t年齢\t身長\t 体重\n"); for(i=0;i<cnt;i++) print_bodydata(&Data[i]); //構造体配列の内容を一件1行として画面に表示 //データ件数と、それぞれの項目についての前件の平均値を表示 //参考:【B4】おまけ課題 34~36行目 printf("%d件のデータをファイルから読み込みました\n",cnt); for(rc=0;rc<CORS;rc++) { Sum_a[rc] = Sum_a[rc] + Data[cnt][rc]; } printf("\n【平均】\n"); printf("%.1f才\t", (float)Sum_a[rc]/STUD); break; case 3: printf("\n=== 新データ入力 ===\n"); if(cnt==100){ printf("最大件数のため、データ入力できません\n\n"); return -1; } input_bodydata(&Data[cnt]); print_bodydata(&Data[cnt]); cnt++; //構造体配列に新データを追加する //参考:【B4】おまけ課題 38~46行目 break; case 4: printf("\n=== ファイル書き出し ===\n"); fp=open_file("w"); if(fp==NULL) return -1; for(i=0;i<cnt;i++){ fprintf(fp,"%s\t%d\t%f\t%f\r\n", Data[i].name, Data[i].age, Data[i].height, Data[i].weight); } printf("%d件のデータをファイルへ書き出しました\n", cnt); fclose(fp); //printf("ファイルを閉じました\n"); //構造体配列の内容をファイルに書き出す //参考:【B4】おまけ課題 48~56行目 break; default: //プログラム終了 return 0; } } return 0; } FILE* open_file(char mode[]) { FILE* fp; char filename[32]; printf("\nファイル名を指定:"); scanf("%s",filename); fp=fopen(filename, mode); if(fp==NULL){ printf("ファイルを開けませんでした\n"); return NULL; } //printf("ファイルを開きました\n"); return fp; } int print_bodydata(const Body* pData) { printf("%s\t", pData->name); printf("%d才\t", pData->age); printf("%.1fcm\t", pData->height); printf("%7.1fkg\n", pData->weight); return 0; } int input_bodydata(Body* pData) { printf("名前:"); scanf("%s", pData->name); printf("年齢:"); scanf("%d", &pData->age); printf("身長:"); scanf("%lf", &pData->height); printf("体重:"); scanf("%lf", &pData->weight); printf("\n"); return 0; } エラー文は Sum_a[rc] = Sum_a[rc] + Data[cnt][rc]; のところで出てしまっています。 ご指摘お願いします。
質問日時: 2021/01/19 12:10 質問者: qopp
解決済
2
0
-
C言語について質問です。
http://psa2.kuciv.kyoto-u.ac.jp/staff/susaki/c/struct1.html の課題4の*の部分について平均や成績を求める関数とそれらを出力する関数をつくって求める方法が知りたいので誰かわかる方いらっしゃいましたらお願いします。また、平均点の高い順にソートする関数やこれらをファイル(scoare.txt)に書き込むプログラムの関数についても教えていただくと幸いです。
質問日時: 2021/01/18 11:40 質問者: nomorethan
ベストアンサー
3
1
-
C言語エラーについて
以下のようなプログラムを作ったのですが、 c:\mingw\include\string.h:90:40: note: expected 'const char *' but argument is of type 'int' 90 | _CRTIMP __cdecl __MINGW_NOTHROW char *strstr (const char *, const char *) __MINGW_ATTRIB_PURE; というエラーが出てきます。エラーの意味を教えてください。 #include <stdio.h> #include <string.h> int main(void) { FILE *fp = fopen("file.txt", "r"); if (fp == NULL) { perror("ファイルの読み込みに失敗\n"); return 1; } char ch[2001]; fscanf(fp, "%2000s", ch); fclose(fp); printf("▼=====テキストファイルの内容=====▼\n%s\n", ch); printf("\nパターンを入力してください。*a,t,g,cのみ\n"); char str[2001]; scanf("%2000s", str); char *k ; if (k != strstr(str,(int)'*') ){ int count1 = 0, count2 = -1; for (char *p = ch; p = strstr(p, str); p++){ count1++; count2 = ( p - ch ) / sizeof( char ) + 1; printf("%d箇所目 %d番目から\n",count1,count2); } printf("パターン「\"%s\"」は計%d箇所に含まれています。", str, count1); } else{ int number = -1, count= 0, count3 = -1; char* str1; char* str2; str1 = str; str2 = strchr( str, '*' ); *str2 = '\0'; str2 += 2; for (char *q = ch; q = strstr(q, str1); q++){ char *r = ch; for (r+(q-ch); r = strstr(r, str2); r++){ count++; count3 = ( q - ch ) / sizeof( char ) + 1; printf("%d箇所目 %d番目から\n",count,count3); } } printf("パターン「\"%s\"」は計%d箇所に含まれています。", str, count); } return 0; }
質問日時: 2021/01/18 00:09 質問者: miyabiishiko
ベストアンサー
3
0
-
このどこにバグがあるか、教えてください
整数の3乗の関係を求めるプログラムです。パソコンのOSはwin7、32ビット。環境はVisual Studio1998のようです。いずれ、かなり古いバージョンです。プログラムは以下のように単純ですが、計算する数の桁がとても大きくなります。 かなり以前に作ったプログラム(スペックのかなり落ちるバソコンで作った)では、 1^3+6^3+8^3=(0^3+1^3+2^3)^3=9^3、 4^3+24^3+32^3=(1^3+2^3+3^3)^3=36^3、 11^3+66^3+88^3=(2^3+3^3+4^3)^3=99^3、 24^3+144^3+192^3=(3^3+4^3+5^3)^3=216^3 という4つは作り出すことができました。とりあえず10組くらいは探したいと思っています。前回は、マイクロソフトのCもしくはC++だったと思います。今回も、(1^3+6^3+8^3)=(0^3+1^3+2^3)^3=9^3、一組だけは出てくるのですが、二組目以降は出てきません。beki、sigmaの定義かと思って、long int を unsigned long long int にすると、エラーではじかれてしまいます。i、j、k の最大値は、アバウトに決めています。kを10000にすると、明らかなエラーを出します。 よろしくお願いします。(ちなみに、Visual Studio の最新版は、使い方がよくわかりません。) int main() { int i,j,k; long int beki,sigma; FILE *file; file = fopen("bekijyo_3.txt","w"); for (i=1 ; i<300 ; i++ ) { for (j=i+1 ; j<500 ; j++) { for (k=j+1 ; k<2000 ; k++) { beki = pow(i,3) + pow(j,3) + pow(k,3); sigma = pow((i-1),3) + pow(i,3) + pow((i+1),3); if(beki == pow(sigma,3)) { printf("ファイルに書き込みます。\n "); printf("(%d ,%d ,%d)=(%d ,%d ,%d)=(%d) \n",i,j,k,(i-1),i,(i+1),sigma); fprintf(file, "(%d ,%d ,%d)=(%d ,%d ,%d)=(%d) \n",i,j,k,(i-1),i,(i+1),sigma); break; } } } } fclose(file); printf("処理が終了したよ~ん!"); return 0; }
質問日時: 2021/01/17 21:42 質問者: 哲っちゃん
ベストアンサー
4
1
-
誰かこのC言語のソースコードがわかる人至急教えてくださいお願いします
static int a[] = {99,21,10,94,56,3,44,12,51,33,84,81,36,99,11,76,26,99,50,51,69,98,4,83・・・,-999}; データの中から成績上位〇名(任意入力)のデータを表示するプログラムを作成 その際に下の図のように、全データ数及び順位、番号、成績を表示するようにするにはどういったソースコードか教えてください
質問日時: 2021/01/17 13:58 質問者: 烏の戯れ
解決済
2
0
-
C言語、自己参照構造体のプログラムのトレース
参考書の次のプログラムで、どうしても分からないことがあります。 ------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct person { char name[30]; int age; struct person *next; } Person; void getsn(char *ss, int n); // gets()の代替関数 int main(void) { Person dmy = {"", 0, NULL}; // NULLを終端マークにする Person *start = &dmy; // 先頭管理用の構造体を指す Person *wkdtp; // 作業用の構造体を指す Person *ip; // forループ制御用 char name[30], age_ss[10]; // データ入力用 while (1) { /* キーボードからデータを入力する */ printf("名前 = "); getsn(name, 80); if (strcmp(name, "") == 0) break; // 改行だけなら入力の終了 printf("年齢 = "); getsn(age_ss, 80); /* 構造体1個分のメモリを確保する */ wkdtp = (Person *)malloc(sizeof(Person)); if (wkdtp == NULL) { printf("メモリ確保できません。\n"); exit(EXIT_FAILURE); } /* 確保した構造体に名前と年齢を設定する */ strcpy(wkdtp->name, name); wkdtp->age = atoi(age_ss); /* 作成した構造体wkdtpを既存のチェーンにはめ込んでいく */ for (ip = start; ip->next != NULL; ip = ip->next) { if (wkdtp->age < ip->next->age) { wkdtp->next = ip->next; ip->next = wkdtp; break; } } /* 最高齢だったらチェーンの最後につなぐ */ if (ip->next == NULL) { ip->next = wkdtp; wkdtp->next = NULL; } } /* チェーンをたどって構造体の内容を表示する */ for (ip = start->next; ip != NULL; ip = ip->next) printf("%s %d\n", ip->name, ip->age); free(wkdtp); return EXIT_SUCCESS; } void getsn(char *ss, int n) { fgets(ss, n, stdin); if (ss[strlen(ss)-1] == '\n') ss[strlen(ss)-1] = '\0'; } ------------------------- 【実行結果】 ------------------------- 名前 = 田中一郎(キーボードから入力) 年齢 = 20(キーボードから入力) 名前 = 伊藤二郎(キーボードから入力) 年齢 = 40(キーボードから入力) 名前 = 鈴木三郎(キーボードから入力) 年齢 = 10(キーボードから入力) 名前 = 内田四郎(キーボードから入力) 年齢 = 30(キーボードから入力) 名前 = [Enter]のみ入力 鈴木三郎 10 田中一郎 20 内田四郎 30 伊藤二郎 40 ------------------------- これをトレースしていて、ポインタstartの中身がどうしても分からないので、プログラムの所々にprintf()を入れて、start->nextとip->nextを文字列として出力させたら、次のようになりました。 【改変したプログラムの実行結果】 ------------------------- whileループ1回目 名前 = 田中一郎 年齢 = 20 start->next = (null), ip->next = (null) start->next = 田中一郎, ip->next = 田中一郎 whileループ2回目 名前 = 伊藤二郎 年齢 = 40 whileループ2回目中のforループ1回目: start->next = 田中一郎, ip->next = 田中一郎 if文は偽 start->next = 田中一郎, ip->next = (null) start->next = 田中一郎, ip->next = 伊藤二郎 whileループ3回目 名前 = 鈴木三郎 年齢 = 10 whileループ3回目中のforループ1回目: start->next = 田中一郎, ip->next = 田中一郎 if文は真 start->next = 鈴木三郎, ip->next = 鈴木三郎 start->next = 鈴木三郎, ip->next = 鈴木三郎 start->next = 鈴木三郎, ip->next = 鈴木三郎 whileループ4回目 名前 = 内田四郎 年齢 = 30 whileループ4回目中のforループ1回目: start->next = 鈴木三郎, ip->next = 鈴木三郎 if文は偽 whileループ4回目中のforループ2回目: start->next = 鈴木三郎, ip->next = 田中一郎 if文は偽 whileループ4回目中のforループ3回目: start->next = 鈴木三郎, ip->next = 伊藤二郎 if文は真 start->next = 鈴木三郎, ip->next = 内田四郎 start->next = 鈴木三郎, ip->next = 内田四郎 start->next = 鈴木三郎, ip->next = 内田四郎 whileループ5回目 名前 = 鈴木三郎 10 田中一郎 20 内田四郎 30 伊藤二郎 40 ------------------------- これでも、どうしても分からない疑問が残りました。 forループの第1項で、ip=start;が実行されるので、 ip->next = wkdtp; が実行されるとstart->nextも変化することは理解できるのですが、それなのにそれ以降でstart->nextとip->nextが違う変化をするのはなぜでしょうか。プログラムを慎重にトレースしていっても、どうしても分かりません。 forループの第1項でip=start;とされたipとstartが、どうして同じ変化をしたり異なったりするのでしょうか。 どなたか解説をお願い致します。
質問日時: 2021/01/16 18:42 質問者: awa3yee
ベストアンサー
2
0
-
Cプログラム 行列
C言語勉強中です。 行列計算で int i,j,e unsigned short a[4][4]= { {0x00,0x04, 0x08, 0x12}, {0x01 0x05, 0x09, 0x13}, {0x02, 0x06, 0x10, 0x14}, {0x03, 0x07, 0x11, 0x15} }; unsigned short gyouretu[4][4]= { {0x01, 0x02, 0x03, 0x01}, {0x03, 0x03, 0x02, 0x01}, {0x02, 0x02, 0x03, 0x01}, {0x01, 0x01, 0x02, 0x03} }; unsigned short b[4][4][4]; for(i= 0; i < 4; i++){ for(j= 0; j < 4; j++){ for(e= 0; e < 4; e++){ b[i][j][k] = (gyouretu[j][e] & 0x01) * a[e][i] ^ (gyouretu[j][e] & 0x02) * a[e][i] ^ (gyouretu[j][e] & 0x04) * a[e][i] ^ (gyouretu[j][e] & 0x08) * a[e][i]; } } } この処理がどのような処理しているか教えてください。 行列の中身を1から3を判定してaの配列とかけていると思うのですが 入れ子でi,j,k に分けてgyouretu[j][e] の配列と a[e][i]が b[i][j][e]にどのように入るのか、なぜ[j][e] [e][i]なのかわかりません。
質問日時: 2021/01/16 13:47 質問者: jenseits
解決済
3
0
-
解決済
1
0
-
c言語の構造体について質問します
c言語の学習をしています。 学習の上で、マイコン上の液晶上に処理した内容を表示しようと試行錯誤しているのですが、 以下2点教えていただきたいことがあります。 ①malloc関数を使用しないで、メモリ領域を指定することは可能でしょうか? (静的アドレスで指定) 簡単な変数であれば int* a =(int*)0x12345678; のようにしてアドレスを指定可能ですが、 構造体の場合、アドレス位置を指定することはできるのでしょうか? 例えば、以下のような構造体を宣言、するとします。 typedef struct person { char name[10]; char sex; int age; char add[10]; char job[10]; } person; int main(void) { person Test, *p1; //宣言 p1 = &Test; // 実体のアドレス代入 } これだと、Testを宣言した段階で、Test用の領域が確保されます。 これを、指定したアドレス(0x12345678を先頭アドレスとして、使用可能なメモリ領域は確保できているものとします)に展開する方法を知りたいです。 person *p1 =0x12345678; //宣言 とかとすればOKなんでしょうか? ② typedef struct person { char *name; char sex; int age; char *add; char *job; } person; int main(void) { person Test, *p1; //宣言 p1 = &Test; // 実体のアドレス代入 p1->name = "T.Tanaka"; p1->age = 20; p1->add = "Tokyo"; } このようにしている場合、 ・"char *name"等の配列サイズは、コンパイル時に決まるのでしょうか? ・代入処理していない他のメンバ(sex,jobなど)はどのような扱いになるのでしょうか?(Nullが入る?それとも不定?不定だとchar型のポインタサイズはどれくらいになる?) また、上記のような構造体の宣言の場合、 mallocを使用した動的メモリの処理はできないのでしょうか? ("char *name"の部分だと名前文字数が決まらない →配列サイズが決まらないため 入力する文字数が分かっていればそれを加味してmalloc関数を使用すればOKなんでしょうか?) 分かりにくい質問で申し訳ありませんが、 よろしくお願いいたします。
質問日時: 2021/01/14 23:41 質問者: moto80
解決済
3
0
-
次のソースコードで間違っているところを教えて欲しいです。できればタンジェントの波も追加してほしいです
次のソースコードで間違っているところを教えて欲しいです。できればタンジェントの波も追加してほしいです。お願いします。 #include <studio.h> #include<math.h> #include<string.h> #define PI 3.1415 #define amp 30 int main(void) { double x ,y; int p; char s[2*amp+2]; s[2*amp+1]=0; for(x=0;x<=2*PI;x=x+PI/15) { _strset(s,’ ‘); y=sin(x); p=(int)(amp*y+amp+0.5) s[p]=‘*’; printf(“%s”,s); y=cos(x) p=(int)(amp*y+amp+0.5) s[p]=‘+’; printf(“%s¥n”,s) } }
質問日時: 2021/01/14 16:22 質問者: こう1200
解決済
3
0
-
次のようなソースを書いたんですが余計な*が出てきてしまいます。どこが間違っているか教えていただきたい
次のようなソースを書いたんですが余計な*が出てきてしまいます。どこが間違っているか教えていただきたいです。 サインカーブとコサインカーブを同時に縦向きに出力したいです。
質問日時: 2021/01/14 12:28 質問者: こう1200
ベストアンサー
1
2
-
c++でサインカーブ、コサインカーブ、タンジェントカーブを表示するプログラムを教えてください。お願い
c++でサインカーブ、コサインカーブ、タンジェントカーブを表示するプログラムを教えてください。お願いします。 ・0〜2Πの範囲でxがΠ/15ずつ変化 ・y=0を中心に両側に30文字ずつ変化 ・sinx→* cosx→+ tanx→# このソースを基にしてください。 #include <stdio.h> #include <math.h> #include <string.h> #define PI 3.1415 #define amp 10 int main(void) { double x, y; int p; char s[2 * amp + 2]; s[2 * amp + 1] = 0; for (x = 0; x <= 2 * PI; x = x + PI / 10) { _strset(s, ' '); y = sin(x); p = (int)(amp * y + amp + 0.5); s[p] = '*'; printf("%s\n", s); } }
質問日時: 2021/01/14 10:58 質問者: こう1200
ベストアンサー
1
0
-
Atom上でc言語を用いてgnuplotを起動させたいです.助けてください!
実行するとgnuplotは、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」と表示されてしまいます。 プログラムは画像のようなものです. コマンドプロンプト上で,gnuplotと打つと起動して,そのうえでグラフも描けました.つまりパスも通っています. 絶対パスで指定しても同じ文言が出てきます. なにか解決策がある方があれば教えていただけますでしょうか。よろしくお願いします!
質問日時: 2021/01/13 13:46 質問者: 学生n
解決済
5
0
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
【C言語・C++・C#】に関するコラム/記事
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語
-
C言語の関数のextern宣言
-
【C言語】全角文字の配列を、全角の...
-
C#でログファイルにファイルパスが...
-
int16_t の _t は何?
-
DLLファイルの逆コンパイラについて...
-
C#でTreeViewのCheckBoxのサイズ変更
-
gccを行ってもexeファイルが生成さ...
-
3×3のラテン方陣をつくるプログラム...
-
大量のデータを読み込んで表示する...
-
visual studio 2022でのC#プログラ...
-
C言語について。
-
終端記号、非終端記号とは
-
C言語関数違いについて。
-
C言語 関数、変数の宣言について
-
C言語について(初心者)
-
あってる
-
C# で 数式文字列処理を処理する方法
-
C言語のことです。写真(見にくくて...
-
逆コンパイルと逆アセンブルの違い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
DLLファイルの逆コンパイラについて...
-
Windows Formアプリからコンソール...
-
大量のデータを読み込んで表示する...
-
C言語の関数のextern宣言
-
VisualStudioでC++クラスを追加する...
-
【C言語】全角文字の配列を、全角の...
-
VisualStudio2022でC言語プログラム...
-
C++でデスクトップGUIアプリ開発の...
-
gccを行ってもexeファイルが生成さ...
-
C#でTreeViewのCheckBoxのサイズ変更
-
C#でログファイルにファイルパスが...
-
プログラマー達は何故、プログラム...
-
逆コンパイルと逆アセンブルの違い...
-
Notepad++の関数リスト表示の変更方...
-
C言語について。
-
Cのコンパイルでコメントアウトをそ...
-
visual studio 2022でのC#プログラ...
-
コンソールアプリを作成するのにお...
-
C言語 バッファについて。
おすすめ情報