|
Name: レイトレース ..ぴよぴよ(83ポイント)
Date: 2006/11/30(木) 15:02
No:2181
|
|
Title: 行・列数可変の行列計算について
|
|
二次元配列の分野?だと思うんですけど k行m列行列A と m行n列行列B を定義し、それらの要素をキーボードから入力し,C = A×B を計算するプログラムを作ってるんですけど授業であまり触れなかったためわかりません(1次元もあまりわかってないので・・・)
できればご指導お願いします。
83ポイント を手に入れた。
|
|
|
|
Name: box ..初心者(6,838ポイント)
Date: 2006/11/30(木) 15:23
No:2183
|
|
Title: Re:質問
|
|
サンプルです。
#include <stdio.h>
#define K (3)
#define M (4)
#define N (2)
int main(void)
{
int a[K][M], b[M][N], c[K][N];
int i, j, k;
/* 行列Aの要素を入力 */
printf("%d行%d列の行列Aの要素を入力します\n", K, M);
for (i = 0; i < K; i++) {
for (j = 0; j < M; j++) {
printf("%d行%d列:", i+1, j+1);
scanf("%d", &a[i][j]);
}
}
/* 行列Bの要素を入力 */
printf("%d行%d列の行列Bの要素を入力します\n", M, N);
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
printf("%d行%d列:", i+1, j+1), scanf("%d", &b[i][j]);
/* C = A * Bの計算 */
for (i = 0; i < K; i++)
for (j = 0; j < N; j++)
for (c[i][j] = 0, k = 0; k < M; k++)
c[i][j] += a[i][k] * b[k][j];
/* 答えの出力 */
putchar('\n');
for (i = 0; i < K; i++) {
for (j = 0; j < M; j++)
printf("%5d", a[i][j]);
putchar('\n');
}
puts("と");
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++)
printf("%5d", b[i][j]);
putchar('\n');
}
puts("の積は");
for (i = 0; i < K; i++) {
for (j = 0; j < N; j++)
printf("%5d", c[i][j]);
putchar('\n');
}
return 0;
}
430ポイント を落としてしまった。
|
|
|
|
|
Name: レイトレース ..ぴよぴよ(164ポイント)
Date: 2006/11/30(木) 15:36
No:2185
|
|
Title: Re:質問
|
|
サンプルありがとうございます。
k、m、nは可変にする必要があるみたいです。その場合はdefineで定義できないんですよね?どうしたらいいですか?
あと,k≠m,m≠n,k≠n,k≧2,m≧2,n≧2 を満たす任意の値を設定していいみたいです。
81ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(8,714ポイント)
Date: 2006/11/30(木) 16:47
No:2186
|
|
Title: Re:質問
|
|
行数・列数を可変(実行時に与える)にした場合のサンプルです。
固定バージョンと最も異なるのは、各行列用の領域を実行時に
動的に確保する点です。
また、ついでですので、機能ごとに別々の関数にしてみました。
#include <stdio.h>
#include <stdlib.h>
void set_number_of_row_and_column(int *u, int *v, int *w);
int **allocate_area_of_array(int row, int col);
void input_data_of_array(char *name, int **a, int row, int col);
void multiple_arrays(int **c, int **a, int **b, int u, int v, int w);
void print_answer(int **c, int **a, int **b, int u, int v, int w);
void free_area_of_array(int **a, int row);
int main(void)
{
int **a, **b, **c;
int k, m, n;
/* 行列A, Bの行数・列数を入力 */
set_number_of_row_and_column(&k, &m, &n);
/* 行列A, B, Cの領域を動的に確保 */
a = allocate_area_of_array(k, m);
b = allocate_area_of_array(m, n);
c = allocate_area_of_array(k, n);
/* 行列A, Bの要素を入力 */
input_data_of_array("A", a, k, m);
input_data_of_array("B", b, m, n);
/* C = A * Bの計算 */
multiple_arrays(c, a, b, k, m, n);
/* 答えの出力 */
print_answer(c, a, b, k, m, n);
/* 動的に確保した領域の開放 */
free_area_of_array(a, k);
free_area_of_array(b, m);
free_area_of_array(c, k);
return 0;
}
void set_number_of_row_and_column(int *u, int *v, int *w)
{
do {
printf("行列Aの行数:"), scanf("%d", u);
} while (*u < 2);
do {
printf("行列Aの列数(行列Bの行数):"), scanf("%d", v);
} while (*v < 2 || *u == *v);
do {
printf("行列Bの列数:"), scanf("%d", w);
} while (*w < 2 || *u == *w || *v == *w);
}
int **allocate_area_of_array(int row, int col)
{
int **a, i;
a = (int **) malloc(sizeof(int *) * row);
if (a == NULL)
fprintf(stderr, "out of memory\n"), exit(1);
for (i = 0; i < row; i++) {
a[i] = (int *) malloc(sizeof(int) * col);
if (a[i] == NULL)
fprintf(stderr, "out of memory\n"), exit(1);
}
return a;
}
void input_data_of_array(char *name, int **a, int row, int col)
{
int i, j;
printf("\n行列%s(%d行%d列)の要素を入力します\n", name, row, col);
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
printf("%d行%d列:", i+1, j+1), scanf("%d", &a[i][j]);
}
void multiple_arrays(int **c, int **a, int **b, int u, int v, int w)
{
int i, j, k;
for (i = 0; i < u; i++)
for (j = 0; j < w; j++)
for (c[i][j] = 0, k = 0; k < v; k++)
c[i][j] += a[i][k] * b[k][j];
}
void print_answer(int **c, int **a, int **b, int u, int v, int w)
{
int i, j;
putchar('\n');
for (i = 0; i < u; i++) {
for (j = 0; j < v; j++)
printf("%5d", a[i][j]);
putchar('\n');
}
puts("と");
for (i = 0; i < v; i++) {
for (j = 0; j < w; j++)
printf("%5d", b[i][j]);
putchar('\n');
}
puts("の積は");
for (i = 0; i < u; i++) {
for (j = 0; j < w; j++)
printf("%10d", c[i][j]);
putchar('\n');
}
}
void free_area_of_array(int **a, int row)
{
int i;
for (i = 0; i < row; i++)
free(a[i]);
free(a);
}
2倍のポイントを手に入れた! 1,860ポイント を手に入れた。
|
|
|
|
|
Name: レイトレース ..ぴよぴよ(258ポイント)
Date: 2006/12/02(土) 11:33
No:2228
| 解決!
|
Title: Re:質問
|
|
問題文をよく読んでなかったみたいで・・・可変じゃなくて任意に設定して良かったみたいです。すいません。。。でも、可変のプログラムも今後のことを考えるととても参考になったと思います。ありがとうございましたm(_ _)m
94ポイント を手に入れた。
|
|
|
|
Name: 初心者 ..入門者(3,228ポイント)
Date: 2006/12/01(金) 22:50
No:2206
|
|
Title: 入力数値から文字への変換
|
|
来年プログラミングの講義を受講しようかまよっています。 先生から自主課題として 1〜20の数字をいれると「あ」から「と」に変換するという課題をだされたのですが、先輩方の教科書をよみながらやってもまったくお手上げです どうか教えてください
82ポイント を手に入れた。
|
|
|
|
Name: box ..初心者(8,681ポイント)
Date: 2006/12/01(金) 23:13
No:2208
|
|
Title: Re:変換
|
|
サンプルです。
#include <stdio.h>
int main(void)
{
char str[] = "あいうえおかきくけこさしすせそたちつてと";
int n;
do {
printf("1から20までの整数を入力してください:");
scanf("%d", &n);
} while (n < 1 || 20 < n);
printf("%c%c\n", str[2*n-2], str[2*n-1]);
return 0;
}
112ポイント を手に入れた。
|
|
|
|
|
Name: 初心者 ..入門者(3,292ポイント)
Date: 2006/12/02(土) 00:17
No:2212
|
|
Title: Re:変換
|
|
ありがとうございます。月曜日の朝一番に学校のCAD室にいってためしてみます
2倍のポイントを手に入れた! 64ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(98,427ポイント)
Date: 2006/12/02(土) 05:25
No:2226
|
|
Title: Re:変換
|
|
こんにちは。管理人です。
今日は忙しくて遅くなってしまいました。
ごめんなさい。
えぇと、今回の問題を解く方法は、主に2種類考えられます。
・文字コードは2バイトずつ、連続でならんでいるので、「あ」の文字コードの2バイト次が「い」であることを用いて、「と」まで表示する方法
・boxさんが回答していらっしゃる、初めから文字列に格納してから、表示する方法。
前者は半角だと有効なんですが、全角だと微妙に複雑になってしまうんで、参考程度にお読みください。今回はboxさんの方法がいいと思います。
まず、文字コードについて考えて見ます。
全ての文字は整数の文字コードで管理されています。
例えば
char st = 'a';
と代入するとstには整数の97が格納されます(環境によって変化します)。
この97が何の文字であるかを管理する数字で、bは98、cは99です。
連続しているんですね。
全角文字は半角文字と違って、2バイトつまり配列要素2つ分で1つの文字を表しています。
これをコンパイルしてみてください。
#include <stdio.h>
void main(){
unsigned char s[3]="あ";
printf("%d %d %d",s[0],s[1],s[2]);
}
文字型で格納した文字コードは%cとすると、それに対応した文字が表示され、%dで表示すると文字コードが表示されます。
今回の場合、
unsigned char s[3]="あ";
と宣言、代入すると、
s[0]には130が、
s[1]には160が格納されています。
s[2]は'\0'ですね。
「い」を格納すると
s[0]には130が、
s[1]には162が格納されています。
「う」を格納すると
s[0]には130が、
s[1]には164が格納されています。
s[0]の値は変化せず、s[1]の値が2つおきに変化していますね。
この順番にあいうえおで並んでいるんです。
また、2つの変数にわけて、格納した文字はこのように表示できることを理解しておいてください。
#include <stdio.h>
void main(){
char s[3]="あ";
char ch1,ch2;
ch1=s[0];
ch2=s[1];
printf("%c%c",ch1,ch2);
}
これを実行すると「あ」になります。
では、「う」を表示するには?
s[1]の値に4たせばいいですから、
#include <stdio.h>
void main(){
char s[3]="あ";
char ch1,ch2;
ch1=s[0];
ch2=s[1]+4;
printf("%c%c",ch1,ch2);
}
これで結果は「う」になります。では、「お」を表示するには?
「あ、い、う、え、お」で「あ」より4つ右にありますから
2*4で8個文字コードをシフトさせたらいいわけですから
#include <stdio.h>
void main(){
char s[3]="あ";
char ch1,ch2;
ch1=s[0];
ch2=s[1]+8;
printf("%c%c",ch1,ch2);
}
これで結果は「お」になります。
つまり「2」が入力されたらそれを2倍してs[1]に加えてやることで「う」となり、
「4」が入力されたらそれを2倍してs[1]に加えてやることで「お」となるわけです。
ただし、文字コードは単純に2バイトずつならんでいるわけではないんです。
文字コードの並びはこのプログラムで確認できます。
#include <stdio.h>
void main(){
int i;
unsigned char s[]="あ";
for(i=0;i<40;i++){
printf("[%c%c] は文字コードs[0]=%dとs[1]=%dで出来ている。\n"
,s[0],s[1]+i,s[0],s[1]+i);
}
}
実行結果
[あ] は文字コードs[0]= 130 とs[1]= 160 で出来ている。
[ぃ] は文字コードs[0]= 130 とs[1]= 161 で出来ている。
[い] は文字コードs[0]= 130 とs[1]= 162 で出来ている。
[ぅ] は文字コードs[0]= 130 とs[1]= 163 で出来ている。
[う] は文字コードs[0]= 130 とs[1]= 164 で出来ている。
[ぇ] は文字コードs[0]= 130 とs[1]= 165 で出来ている。
[え] は文字コードs[0]= 130 とs[1]= 166 で出来ている。
[ぉ] は文字コードs[0]= 130 とs[1]= 167 で出来ている。
[お] は文字コードs[0]= 130 とs[1]= 168 で出来ている。
[か] は文字コードs[0]= 130 とs[1]= 169 で出来ている。
[が] は文字コードs[0]= 130 とs[1]= 170 で出来ている。
[き] は文字コードs[0]= 130 とs[1]= 171 で出来ている。
[ぎ] は文字コードs[0]= 130 とs[1]= 172 で出来ている。
[く] は文字コードs[0]= 130 とs[1]= 173 で出来ている。
[ぐ] は文字コードs[0]= 130 とs[1]= 174 で出来ている。
[け] は文字コードs[0]= 130 とs[1]= 175 で出来ている。
[げ] は文字コードs[0]= 130 とs[1]= 176 で出来ている。
[こ] は文字コードs[0]= 130 とs[1]= 177 で出来ている。
[ご] は文字コードs[0]= 130 とs[1]= 178 で出来ている。
[さ] は文字コードs[0]= 130 とs[1]= 179 で出来ている。
[ざ] は文字コードs[0]= 130 とs[1]= 180 で出来ている。
「か」から変化しているので、単純に2ずつで計算出来ないんですね。
条件分岐させてやるか、あらかじめ、値を配列に格納しておくか、方法は様々ですが、
文字コードでも出来るという方法ご紹介しました。
あまり有効ではないですが、せっかく紹介したのでサンプルかいときます。
#include <stdio.h>
#include <stdlib.h>
void main(){
int n;
char s[3]="あ";
while(1){
printf("Input(1〜20) -> ");
scanf("%d",&n);
if(n>0 && n<=5)
printf("%c%c\n",s[0],s[1]+2*(n-1));
else if(n>5 && n<=20)
printf("%c%c\n",s[0],s[1]+2*(n-1)-1);
else
exit (9);
}
}
実行結果
Input(1〜20) -> 1
あ
Input(1〜20) -> 2
い
Input(1〜20) -> 3
う
Input(1〜20) -> 4
え
Input(1〜20) -> 5
お
Input(1〜20) -> 6
か
Input(1〜20) -> 7
き
もしわからなかったらまた聞いてくださいね。
2倍のポイントを手に入れた! 2,696ポイント を手に入れた。
|
|
|
|
Name: けいすけ ..ぴよぴよ(106ポイント)
Date: 2006/12/01(金) 06:00
No:2199
|
|
Title: 楕円が描けない
|
|
学校の課題で青い背景に赤い楕円を書くプログラムを書いているのですが上手くかけません。模試よろしければ原因を指摘していただければうれしいです。よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#define MS 200
main()
{
char fi[50];
int i,j,x,y,a,b;
FILE *fp;
unsigned short header[13]={0x4d42,54490,1,0,0,26,0,12,0,200,200,1,24};
unsigned char bmp[MS][MS][3];
for(i=0;i<=MS-1;i++)
{
for(j=0;j<=MS-1;j++)
{
bmp[i][j][0]=255;
bmp[i][j][1]=0;
bmp[i][j][2]=0;
}
}
printf("Input a minor axis : ");
scanf("%s",fi);
a=atoi(fi);
printf("Input a major axis : ");
scanf("%s",fi);
b=atoi(fi);
for(i=0;i<=MS-1;i++)
{
y=i-MS/2;
for(j=0;j<=MS-1;j++)
{
x=j-MS/2;
if((x*x)/(a*a)+(y*y)/(b*b)<=1)
{
bmp[i][j][0]=0;
bmp[i][j][1]=0;
bmp[i][j][2]=255;
}
}
}
printf("Input file name : ");
scanf("%s",fi);
if((fp=fopen(fi,"wb"))==NULL)
{
fprintf(stderr,"Error : file open[%s].\n",fi);
exit(1);
}
fwrite(header,2,13,fp);
fwrite(bmp,1,200*200*3,fp);
fclose(fp);
}
106ポイント を手に入れた。
|
|
|
|
Name: Justy ..プログラマー(28,762ポイント)
Date: 2006/12/01(金) 08:25
No:2200
|
|
Title: Re:楕円が描けない
|
|
ずばり原因は (x*x)/((a*a)+(y*y))/(b*b)<=1 のところで計算の精度が足りないことにあります。
変数xと yは int型の整数値で宣言していますが、これを double型か float型にすると問題は解決するのではないでしょうか。
140ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(94,807ポイント)
Date: 2006/12/01(金) 08:50
No:2201
|
|
Title: Re:楕円が描けない
|
|
けいすけさん、おはようございます。
原因はずばりJustyさんの言ってらっしゃるとおりだと思います。
それに
scanf("%s",fi);
こう書いていらっしゃいますが、わざわざ文字列で取り込む必要はあるんでしょうか?
文字列で読み取って、int型にわざわざ変換していらっしゃいますが、最初からdouble型で読み取ってはいけないのでしょうか?
それにfiという変数を用意する必要も無いように思います。
一応fi変数は残しておきましたが、正しく書き直してみました。
青い字の部分を見てください。
#include <stdio.h>
#include <stdlib.h>
#define MS 200.0f
main()
{
int i,j;
double x,y,a,b;
char fi[50];
FILE *fp;
unsigned short header[13]={0x4d42,54490,1,0,0,26,0,12,0,200,200,1,24};
unsigned char bmp[(int)MS][(int)MS][3];
for(i=0;i<=(int)MS-1;i++)
{
for(j=0;j<=(int)MS-1;j++)
{
bmp[i][j][0]=255;
bmp[i][j][1]=0;
bmp[i][j][2]=0;
}
}
printf("Input a minor axis : ");
scanf("%lf",&a);
printf("Input a major axis : ");
scanf("%lf",&b);
for(i=0;i<=(int)MS-1;i++)
{
y=(double)i-MS/2.0f;
for(j=0;j<=(int)MS-1;j++)
{
x=(double)j-MS/2.0f;
if((x*x)/(a*a)+(y*y)/(b*b)<=1.0f)
{
bmp[i][j][0]=0;
bmp[i][j][1]=0;
bmp[i][j][2]=255;
}
}
}
printf("Input file name : ");
scanf("%s",fi);
if((fp=fopen(fi,"wb"))==NULL)
{
fprintf(stderr,"Error : file open[%s].\n",fi);
exit(1);
}
fwrite(header,2,13,fp);
fwrite(bmp,1,200*200*3,fp);
fclose(fp);
}
273ポイント を手に入れた。
|
|
|
|
|
Name: けいすけ ..ぴよぴよ(157ポイント)
Date: 2006/12/01(金) 22:24
No:2204
|
|
Title: Re:楕円が描けない
|
|
ありがとうございました。
文字列で取り込んでいるのはずばり「今回文字列を習ったから」です。練習させる意図だと思います^^;
51ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(29,434ポイント)
Date: 2006/12/02(土) 04:57
No:2222
|
|
Title: Re:楕円が描けない
|
|
どうでもいい話ですが、atoiは数値に変換できない文字列だった場合、どこからもエラーを検知することができないいんですよ。
だから確実に数値であることをプログラマー自身が保証してあげる必要があるので、結構使いどころがないんですよね。
scanfなら戻り値である程度エラーチェックできるんですが・・・。
92ポイント を手に入れた。
|
|
|
|
Name: mai ..ぴよぴよ(165ポイント)
Date: 2006/12/01(金) 21:34
No:2203
|
|
Title: 過去に出た数字を除外する方法
|
|
はじめまして大学1年生で経済系の学部に在籍しています。 大学の講義の[C言語」という時間の課題として {1〜10までの乱数を10個発生させて表示させる。ただし、1度出た数字は除外する。} という課題を出されたのですが、教科書を見ながら解いても 同じ数字が重複して表示されてしまうプログラムになってしまいどうしていいかわかりません。教えていただけませんでしょうか
165ポイント を手に入れた。
|
|
|
|
Name: mai ..ぴよぴよ(220ポイント)
Date: 2006/12/01(金) 22:30
No:2205
|
|
Title: Re:大学生です
|
|
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
int i , n;
srand((unsigned)time(NULL));
printf(0〜10:\n");
for (i=1; i<=10;i++)
printf("%d",rand());
としてみたのですが重複してしまいます
55ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(8,569ポイント)
Date: 2006/12/01(金) 23:04
No:2207
|
|
Title: Re:大学生です
|
|
サンプルです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM (10)
int main(void)
{
int num[NUM] = { 0 }, n, i, j;
srand((unsigned int) time(NULL));
for (i = 0; i < NUM; i++) {
n = rand() % NUM + 1;
for (j = 0; j < i; j++)
if (n == num[j])
break;
if (j == i)
num[j] = n, printf("%d ", n);
else
i--;
}
putchar('\n');
return 0;
}
145ポイント を落としてしまった。
|
|
|
|
|
Name: mai ..ぴよぴよ(286ポイント)
Date: 2006/12/01(金) 23:27
No:2209
|
|
Title: Re:大学生です
|
|
丁寧な解答ありがとうございます。 さっそくコンパイルして確かめてみます。
2倍のポイントを手に入れた! 66ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(29,437ポイント)
Date: 2006/12/01(金) 23:32
No:2210
|
|
Title: Re:大学生です
|
|
> 重複してしまいます
なるほど。と言いたいところなのですが、提示されたこのプログラムでは重複も何もそれ以前の問題で、10個の乱数こそ出力していますが、それぞれの乱数は1〜10になっていません。
printf("%d\n",rand());
とprintfの引数に \nを加えてみると、どううまくいっていないのかが確認できると思います。
さて、重複分を取り除くにはどうしたらいいか、ですが。
単純解として2通りあるのですが、片方は boxさんが書かれているので、もう1つの方法を説明します。
まず10個の乱数ということなので int型の10の要素を持つ配列を作成し、その中に順番に1〜10の値を入れます。
配列のi番目にi+1が入れるようにすれば、配列0〜9の中に1〜10の数値が入れることができ、これで数値が1から順番に並んだ数列が出来ます。
次に、連続したこの数列をシャッフルします。
片っ端から配列内の値をランダムに交換していきます。
これで、1〜10の数値がランダムに入った数列が出来上がります。
あとは表示するだけです。
まとめると
int i;
// 10個の重複しない数列を作成
int used_value[10];
for(i=0; i<10; ++i)
used_value[i] = i+1;
// シャッフルして10個の乱数を発生
srand((unsigned int) time(NULL));
for(i=0; i<10; ++i)
{
int n = rand() % 10; // 交換対象の数値のインデックス
int t = used_value[i];
used_value[i] = used_value[n];
used_value[n] = t;
}
// 表示
for(i=0; i<10; ++i)
printf("%d ", used_value[i]);
printf("\n");
となります。
675ポイント を手に入れた。
|
|
|
|
|
Name: mai ..ぴよぴよ(527ポイント)
Date: 2006/12/02(土) 00:01
No:2211
|
|
Title: Re:大学生です
|
|
Justy さんへ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int i;
int used_value[10];
for(i=0; i<10; ++i)
used_value[i] = i+1;
srand((unsigned int) time(NULL));
for(i=0; i<10; ++i)
{
int n = rand() % 10;
int t = used_value[i];
used_value[i] = used_value[n];
used_value[n] = t;
}
for(i=0; i<10; ++i)
printf("%d ", used_value[i]);
printf("\n");
というかたちで作成しコンパイルしてみればよろしいのでしょうか
241ポイント を手に入れた。
|
|
|
|
|
Name: mai ..ぴよぴよ(701ポイント)
Date: 2006/12/02(土) 00:43
No:2214
|
|
Title: Re:大学生です
|
|
Justy さんへ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM (10)
int main(void)
{
int i;
int used_value[10];
for(i=0; i<10; ++i)
used_value[i] = i+1;
srand((unsigned int) time(NULL));
for(i=0; i<10; ++i)
{
int n = rand() % 10;
int t = used_value[i];
used_value[i] = used_value[n];
used_value[n] = t;
}
for(i=0; i<10; ++i)
printf("%d ", used_value[i]);
printf("\n");
という感じでしょうか
174ポイント を手に入れた。
|
|
|
|
|
Name: mai ..ぴよぴよ(914ポイント)
Date: 2006/12/02(土) 01:12
No:2216
| 解決!
|
Title: Re:大学生です
|
|
Justy さんへ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM (10)
int main(void)
{
int i;
int used_value[10];
for(i=0; i<10; ++i)
used_value[i] = i+1;
srand((unsigned int) time(NULL));
for(i=0; i<10; ++i)
{
int n = rand() % 10;
int t = used_value[i];
used_value[i] = used_value[n];
used_value[n] = t;
}
for(i=0; i<10; ++i)
printf("%d ", used_value[i]);
printf("\n");
return 0;
}
でためしてみます 細かく何回もお聞きしてしまいごめんなさい ありがとうございました。<!--14-->
213ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(95,874ポイント)
Date: 2006/12/02(土) 04:31
No:2220
|
|
Title: Re:大学生です
|
|
こんにちは。
管理人です。
お返事遅くなってすみません。ちょっと忙しかったもので(_ _|||)
まず、基本を理解してから考えてみてはいかがでしょうか?
もしよかったら、こちらの問題をみてください。
問題1:
1〜10の乱数を1回表示しなさい。
回答1:
1〜10の乱数を表示するにはどうしたらいいでしょうか?
rand()という関数を呼んだらどういう数字が帰ってくるかご存知でしょうか?
詳しい数字は覚えなくていいです。約3万の範囲で、数字が帰ってきます(詳しくは0〜32767までのどれかの数字が帰ってきます)。
つまりrandだけ書くと、0〜32767までの数字のどれかになります。
では、この値を1〜10にするにはどうしたらいいでしょうか?
「答えは10で割ったあまりをだす」です。
12を10で割ったあまりは2
2006を10で割ったあまりは6
つまり、10で割ったあまりはあらゆる数を0〜9までの数に変換します。
今回は1〜10の値がほしいので、
rand() % 10 ←(rand() を10で割ったあまり)
に1を足せばいいのですから、
rand() % 10 + 1
となります。こうすることで、1〜10までの乱数が生成出来ます。
つまり、問題1の回答はこうなります。
<pre>#include <stdio.h>
#include <stdlib.h>
void main(){
printf("%d", rand() % 10 + 1);
}<pre>
わかりますか?
では、
実際に
「1〜10までの乱数を10個発生させて表示させる。ただし、1度出た数字は除外する」
をといてみます。
まず、考え方です。
乱数を格納する配列を要素10個で宣言する。
int ram[10];
そして、
ram[i]に1〜10の値を代入します。
for文で、その時点までに格納した配列に入っている数字と同じかどうか判定します。
iを現在の配列要素番号とすると
for(j=0;j<i;j++)
if(ram[i]==ram[j])
break;
このように書くことで、ram[i]と現在のi番目までに格納した値が比較でき、
最後までif文にはいらなければ、今まで出てきてない値だということです。
jは最後までいくとiと同じ値になりますから、
ループを抜けた時、jがiと同じ値なら出力し、次の値へ処理をうつせばいいですね。
こうして10個表示してみましょう。
#include <stdio.h>
#include <stdlib.h>
void main(){
int i=0,j,ram[10];
while(i<10){
ram[i]=rand()%10+1;
for(j=0;j<i;j++)
if(ram[i]==ram[j])
break;
if(i==j){
printf("%d\n",ram[i]);
i++;
}
}
}
プログラムの意味がわからなければ、また聞いてください。
ちなみに私の乱数は初期化していませんから、いつも同じ値が出ます。
885ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(93,345ポイント)
Date: 2006/11/30(木) 03:00
No:2166
|
|
Title: 久しぶりにずっこけました…(雑談板)
|
|
今日いつものようにバイクでマンションの前を曲がろうと、足を付いた瞬間、つるっとしたコンクリートの上に
ライターが捨ててあって、丁度うまい具合にその上に足をついてしまって、
「つるっ!」
「ガッシャーン!!」
とこけてしまいました・・。
ガソリンがドクドク・・・。
オイルがドクドク・・・。
割れたサイドミラーとつけたばかりのフロントスクリーンの破片が散乱・・。
もうこけたバイクを前に・・意気阻喪・・。
私はバイクこけたり事故ったりした瞬間ってものすごい意気消沈してしまって力が全くでなくなってしまうんですけど
これって私だけですか??
ものすごいあの瞬間脱力するというか、意気消沈するというか・・。
こけたバイク起こすのがめちゃめちゃ大変です。
「あぁ・・こけたぁ・・」心にグサグサグサ〜!って感じで何かが突き刺さってきます。
大型購入しようと検討中ですけど、ZZR1100とか買うと、重さが250キロ位あるので(今のバイクが乾燥168キロ位)、とても起こせないんじゃ・・と不安です。
とにかく言いたいのは・・・。
「誰やねんこんなとこにライターほった奴は〜!!(怒」
116ポイント を手に入れた。
|
|
|
|
Name: ナガタ ..入門者(3,785ポイント)
Date: 2006/11/30(木) 07:18
No:2167
|
|
Title: Re:久しぶりにずっこけました…(雑談板)
|
|
大丈夫ですか?ケガないですか?
乗ってるときにこけたことはないですけど,駐輪してて倒されてるときはへこみます↓
36ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(93,545ポイント)
Date: 2006/11/30(木) 08:07
No:2168
|
|
Title: Re:久しぶりにずっこけました…(雑談板)
|
|
自分の体を下敷きにしてでもバイクを助けようとしたけど、無理でした^^;
修理費>自分の足
治療費が同じ位かかったりしてw
駐輪して倒されてることあるんですか?!
そ、それは陰険な・・。
・・ってこの前大学にとめてたら、ガソリンチューブが切断されててガソリンパクられてました!
こぼれてなかったから、ガソリン盗んだってことでしょう・・。
その時3リットル位しかはいってなかったのになんて奴だ!
知らずに乗ってて途中でガス欠して、1km位200キロ近い鉄の塊を押していくはめになりました・・。
陸橋を渡らないとガソスタがなかったんで、バイパスの陸橋を押して上がる時、マジで死にそうでした(T_T)
200ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,912ポイント)
Date: 2006/11/30(木) 09:35
No:2169
|
|
Title: Re:久しぶりにずっこけました…(雑談板)
|
|
>駐輪して倒されてることあるんですか?!
ありますよ.周りの自転車やらバイクがほとんど倒されてました.
本当にやめてほしい.
>ガソリンチューブが切断されて
ガソリンのためにそこまでやる人いるんですね.
友達でプラグコードとられた人いますけどね.たぶんイタズラで.
127ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(93,695ポイント)
Date: 2006/11/30(木) 17:39
No:2188
|
|
Title: Re:久しぶりにずっこけました…(雑談板)
|
|
私はチャリを出す時、ドミノ倒しにチャリを倒してしまったことありますが、バイクまではこけませんよね・・。
ガソリン盗むのとか、まだしも意味はわかりますけど、
ただたんに自分の何の利益も無いいたずらする人の心理がよくわかりません・・。
しかし3リットルのガソリンって3百円位ですよね・・。
わざわざそこまでするなよ。。と思います;
93ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,988ポイント)
Date: 2006/11/30(木) 18:48
No:2189
|
|
Title: Re:久しぶりにずっこけました…(雑談板)
|
|
>わざわざそこまでするなよ
本当にそうですね.その人お金がそれほどなかったのかなー?
だったら歩けよって感じですけど.
58ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(28,622ポイント)
Date: 2006/11/30(木) 19:32
No:2191
|
|
Title: Re:久しぶりにずっこけました…(雑談板)
|
|
バイクはこけるとほんと何かしらの部品が壊れますよね。
自動車なら多少ぶつけても壊れないのに。
でも無事で何よりです。
>>しかし3リットルのガソリンって3百円位ですよね・・。
>わざわざそこまでするなよ。。と思います;
お金というよりか、単純にガス欠でどうにもならなくて、つい・・・とか。
2倍のポイントを手に入れた! 334ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(94,534ポイント)
Date: 2006/12/01(金) 03:03
No:2198
|
|
Title: Re:久しぶりにずっこけました…(雑談板)
|
|
ありがとうございます。
バイクは立ちゴケ=修理になってしまいますからねぇ・・。
最低限でとどめたとしても、カウルに傷は絶対入ってしまう…。
カウルなんか新品まともにかってたら何万するか;
R−1とかだと10万以上するのでは??
バイクに2つしか車輪が無い以上一生たちゴケとは付き合っていかないといけないでしょうね^^;
>、単純にガス欠でどうにもならなくて
ガソリンのチューブはカウルに隠れているんで、すぐには届かなくてカウルを少しどかす必要があるんですが、
カウルのねじがはずしてありました。
準備周到な感じがします・・。
その前に気づけよ!みたいな(T T)
219ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(91,871ポイント)
Date: 2006/11/29(水) 02:10
No:2153
|
|
Title: 面白い数学のお話(雑談板)
|
|
↑クリックで画像が拡大↑
ウェブで面白い記事を見つけました。
数学が得意な人の中では常識問題なのかもしれませんが、私は知りませんでした。
画像を見てください。
(携帯で見ている人の為に。画像は[D][K][3][7]という4枚のカードです。)
4枚のカードは、両面に文字の書いてあるカードです。
カードの片面 にはアルファベット1文字、もう片方には数字1文字が書いてあります。 これらのカードに関して次のルールがあります。
ルール:片面の文字がDであるカードの反対側には3が書かれている。
ルールが正しいかどうか確かめるために、ひっくりかえして 裏面を調べる必要のあるカードはどれでしょうか?
さぁ、読んだ方、お答えをどうぞ!
(ここまで読んだ方は必ずお答えください!調べるのはナシです。ちなみに私は間違いました^^;)
投稿は黒いフォントでお願いします。やり方判らない方はそのままで結構です。
343ポイント を手に入れた。
|
|
|
|
Name: ま〜く ..ぴよぴよ(62ポイント)
Date: 2006/11/29(水) 04:41
No:2156
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
あは!おもしろそうですね
何気に初投稿させていただきます^^
普通に考えると、Dと3ですかねぇ〜
あーでも、ルールが Dの裏には3 だけど 3の裏がDとは書いてないのでDだけか・・・
もし Dの裏が3 3の裏がD というルールなら
全部みる必要も有りそうだし・・・ムズイですね><
62ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(93,210ポイント)
Date: 2006/11/29(水) 04:53
No:2157
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
お〜!ま〜くさん、日記に引き続き投稿ありがとうございます^^
↓以下選択してお読みください。↓
ですよね〜!実際、そう思いますよねw
私もまんまとひっかかりました^^;
これは高校の時ならった「必要条件・十分条件」の話なんですよ。
Dのカードは「Dの裏は必ず3じゃないといけない」ので調べる必要があります。
Kのカードの裏が仮に3であったとしても「Dの裏は3で無ければならない」が「3の裏はDである必要は無い」という事ですから、調べる必要は無いですね。
お答えの「3」ですが、先ほどの「3の裏はDである必要は無い」という事から調べる必要はありません。
(
>3の裏がDとは書いてないのでDだけか・・
めちゃいい線いってましたよ!
)
次に「7」ですが、「Dの裏は3でなければならない」つまり「7の裏がDであってはいけない」ということですから調べる必要があります。
ちょっと意外じゃなかったですか?!
いや、素直な回答のほうが話題がもててうれしいです^^
詳しい回答はこちらお読みください♪
わかりやすい例題で説明してあります。
h ttp://www.sky.sannet.ne.jp/mikeneko/psychology/cognitive10.htm
303ポイント を手に入れた。
|
|
|
|
|
Name: ま〜く ..ぴよぴよ(154ポイント)
Date: 2006/11/29(水) 07:13
No:2158
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
なるほど!ふむふむ。
こーいう問題は面白ですし、プログラミングの糧になりますね〜
適当に書いたコードでも動くには動くけど、効率の面から見るとダメダメなパターンがありますからね〜
そうそう、全然今回と関係ないかもしれませんが、ぼくがすごいなーって思うコードの1つに立っているビットの数を数えるというコードがあります。
92ポイント を手に入れた。
|
|
|
|
|
Name: ま〜く ..ぴよぴよ(443ポイント)
Date: 2006/11/29(水) 09:05
No:2160
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
>ビット & 0x01
>で1になったものを数えたらいいんですよね?
そうです^^
そうなんですが、例えばlongの場合4バイトつまり32ビットあるじゃないですか。
上のように数えるとすると、
int count = 0;
long x = 12345678;
if (x & 1)
count++;
if (x & 2)
count++;
if (x & 4)
count++;
... と32個のif文で判定しなくちゃいけませんよね。
まー書くとしたらfor文で
for (int i = 0; i < 32; i++)
{
if (x % (1 << i))
count++;
}
なんでしょうけど、同じですよね。(実際は展開したほうが早いけど)
ところが世の中頭がいい人がいてこれを
x = (x & 0x55555555) + (x >> 1 & 0x55555555);
x = (x & 0x33333333) + (x >> 2 & 0x33333333);
x = (x & 0x0f0f0f0f) + (x >> 4 & 0x0f0f0f0f);
x = (x & 0x00ff00ff) + (x >> 8 & 0x00ff00ff);
count = (x & 0x0000ffff) + (x >>16 & 0x0000ffff);
と呪文のようなビット演算をするだけで数えられるのを考えたんですね〜
289ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(93,008ポイント)
Date: 2006/11/29(水) 11:56
No:2161
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
おお!
>x = (x & 0x55555555) + (x >> 1 & 0x55555555);
>x = (x & 0x33333333) + (x >> 2 & 0x33333333);
>x = (x & 0x0f0f0f0f) + (x >> 4 & 0x0f0f0f0f);
>x = (x & 0x00ff00ff) + (x >> 8 & 0x00ff00ff);
>count = (x & 0x0000ffff) + (x >>16 & 0x0000ffff);
そんな手が!
知りませんでした^^;
というか普段ビット演算しないので、0x55555555は2進数で何になるかだいたい想像できても0x33333333とかピンと来ませんでした(_ _|||)
やっぱプログラムってどれだけ文法覚えるかじゃないですね〜。
自分の知識の中で、どう工夫するかが一番大事なんじゃないでしょうか?(もちろん新たな勉強も大事ですけど)
こう考えると科学って段階を追って成長するものなんだな〜って思いますよ(´ェ`)ネー。
303ポイント を落としてしまった。
|
|
|
|
|
Name: さくら ..ぴよぴよ(76ポイント)
Date: 2006/11/29(水) 12:37
No:2162
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
ここだったんだ、dixqさん^^
すごい、びっくりしちゃっいました♪
mixiから辿ってきました☆
日記にも書いてありましたね!
答えは・・。
「●」と「■」!
というか授業でやったので答え知ってる!^^;
こういう問題ってすき〜♪おもしろいね^^
76ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(93,128ポイント)
Date: 2006/11/29(水) 12:43
No:2163
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
お〜さくらさん、こんにちは^^
dixqこと管理人です^^
>「●」と「■」!
何の問題かと思いました^^;
授業でやったのか〜!最近の授業は進んでるな〜w
私の時には「囚人のジレンマ」がいいとこでしたヨ・・。
こういう面白い問題知ってたらドシドシ投稿を!
120ポイント を手に入れた。
|
|
|
|
|
Name: louise ..入門者(2,759ポイント)
Date: 2006/11/30(木) 01:35
No:2164
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
こんなようなの高校の頃やったなぁ〜。
管理人さんみくしやってみえたんですねw
そこで少し気になったのですが、
日記に書いてみえたC言語教育ソフトってどうなりました??
個人的にCは大の苦手なので、こういう系を実は探していたので、気になりましたので板違いなので非常に申し訳ないのですがコメントさせていただきました。
110ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(93,229ポイント)
Date: 2006/11/30(木) 02:37
No:2165
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
loiseさん、こんにちは^^
mixiはやってるというより暇つぶしに時々日記書いてる位ですかね〜?
何気に宣伝に使ったりしています^^;
日記に書いてた教育ソフトですが、構造体バージョンとかポインタバージョンとか色々作ってたんですが、
完成したのはクイックソートだけです;
クイックソートは予定では、第10章になってたんですが、
全章作る自信が無いので単発にしました^^;
全ての章を作ることはちょっと出来ないですが・・。
どういう分野ご希望ですか?
構造体とか、ポインタとか、構造化アルゴリズムとか、線形リストとか色々ちょい難しい分野ありますよね。
板違いとか、何も関係ないんで気軽に書いてください^^
101ポイント を手に入れた。
|
|
|
|
|
Name: louise ..入門者(2,887ポイント)
Date: 2006/12/01(金) 00:59
No:2195
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
管理人さんおはこんばんちわ!
希望はポインターと構造体です。
ポインターよく意味が分からないけど、とりあえずコンパイルできなかったり0とかになっちゃったら*を適当につければいいかな。
程度の理解なので…。
次の授業から構造体をやるらしいので構造体も希望です。
もしよろしければやらせてください!
128ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(94,315ポイント)
Date: 2006/12/01(金) 02:59
No:2197
|
|
Title: Re:面白い数学のお話(雑談板)
|
|
louiseさん、こんばんは。
>ポインターよく意味が分からないけど、とりあえずコンパイルできなかったり0とかになっちゃったら*を適当につければいいかな。
かなり危険な対策ですね^^;
わかりました。完成する時期はいえませんけど、少しづつ作っていきます^^;
ポインタっていうのは、案外難しいと思いすぎていて、見えてない場合が多いと思います。
例えば、
int a;
とaを宣言した時。&aと書くと、そのアドレスを示します。
関数へ値を渡す時、このアドレス(&a)をわたし、受け取るほうはポインタ*aで受け取れば、その関数の中は*aを使用することが出来ます。
一度、このサンプルを実行してみてください。
よく判ると思います。
#include <stdio.h>
void point(int *a){
printf("point-%d\n",*a);
*a=3;
}
void main(){
int a=2;
point(&a);
printf("main-%d\n",a);
}
377ポイント を手に入れた。
|
|
|
|
Name: 困ったさん ..ぴよぴよ(176ポイント)
Date: 2006/11/30(木) 11:17
No:2170
|
|
Title: 質問です
|
|
任意の数字を10個入力しそれを小さい順にソートして表示するプログラムをつくっているのですがセグメントエラーとでてしまいます。。。どこが悪いんでしょうか?
ちなみにプログラムはこんな感じです。
#include<stdio.h>
int main(void){
double data[10];
int n,temp,j,k;
n=10;
printf("数を10個入力\n",n);
for(j=0; j < n; j++)
{
scanf("%d",&data[j]);
}
for(j = 0; j < n-1; j++)
{
for(k = j + 1; k < n; j++)
{
if(data[j] < data[k])
{
temp = data[j];
data[j] = data[k];
data[k] = temp;
}
}
}
printf("結果\n");
for(j = 0; j < n; j++){
printf("%d\n",data[j]);
}
return 0;
}
176ポイント を手に入れた。
|
|
|
|
Name: box ..初心者(6,999ポイント)
Date: 2006/11/30(木) 11:44
No:2171
|
|
Title: Re:質問です
|
|
> for(k = j + 1; k < n; j++)
最後はk++です。
> if(data[j] < data[k])
小さい順にソートするのでしたら、不等号が逆ではないでしょうか?
data[j]>data[k]のときに、入れ替える必要があるはずです。
> double data[10];
> scanf("%d",&data[j]);
変数dataの型と、入力時の書式文字列とが
食い違っています。
> printf("数を10個入力\n",n);
どっちつかずの文になっています。
10個と明記しているなら ,n は不要です。
,n を付けたいなら %d個 と書きます。
82ポイント を手に入れた。
|
|
|
|
|
Name: 困ったさん ..ぴよぴよ(243ポイント)
Date: 2006/11/30(木) 11:54
No:2172
|
|
Title: 無題
|
|
ありがとうございます。いろいろ間違ってたんですね。。。
double data[10];
scanf("%d",&data[j]);
のところなんですけど、data[10]はdouble型で指定しなくちゃいけないみたいで。。。どうすればいいですか?
67ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(7,203ポイント)
Date: 2006/11/30(木) 12:34
No:2174
|
|
Title: Re:無題
|
|
> のところなんですけど、data[10]はdouble型で指定しなくちゃいけないみたいで。。。どうすればいいですか?
dataをdouble型にしたときの例です。
#include<stdio.h>
int main(void)
{
double data[10], temp;
int n, j, k;
n = 10;
printf("数を%d個入力\n", n);
for (j = 0; j < n; j++) {
printf("%d個目:", j + 1);
scanf("%lf", &data[j]);
}
for (j = 0; j < n - 1; j++) {
for (k = j + 1; k < n; k++) {
if (data[j] > data[k]) {
temp = data[j];
data[j] = data[k];
data[k] = temp;
}
}
}
printf("結果\n");
for (j = 0; j < n; j++) {
printf("%f\n", data[j]);
}
return 0;
}
204ポイント を手に入れた。
|
|
|
|
|
Name: 困ったさん ..ぴよぴよ(245ポイント)
Date: 2006/11/30(木) 14:25
No:2175
|
|
Title: 無題
|
|
このプログラムだと「0.○○」みたいな小数点が0と表示されてしまうんですけどdouble型だとそういうものなんですか?
できるなら表示したいんですけど。。。
2ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(7,244ポイント)
Date: 2006/11/30(木) 14:40
No:2176
|
|
Title: Re:無題
|
|
> 0と表示されてしまうんですけどdouble型だとそういうものなんですか?
> できるなら表示したいんですけど。。。
おっしゃっている意味がよくわかりません。
後ろの文は「できるなら表示『したくない』」と
書きたかったのですか?
41ポイント を手に入れた。
|
|
|
|
|
Name: 困ったさん ..ぴよぴよ(288ポイント)
Date: 2006/11/30(木) 14:44
No:2178
|
|
Title: 無題
|
|
例えば0.56って入力したらそのまま0.56って出力されるようにしたいんですけど。今だと0.00000とかになっちゃって。。。
43ポイント を手に入れた。
|
|
|
|
|
Name: 困ったさん ..ぴよぴよ(323ポイント)
Date: 2006/11/30(木) 14:47
No:2179
| 解決!
|
Title: 無題
|
|
すいません。tempをdoubleで書いてなかったみたいで・・・書き直したらできました。
35ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(7,268ポイント)
Date: 2006/11/30(木) 14:50
No:2180
|
|
Title: Re:無題
|
|
> tempをdoubleで書いてなかった
提示したサンプルを手で打ち込むのでなく、
コピー&ペーストすれば手っ取り早いです。
24ポイント を手に入れた。
|
|
|
|
Name: リン ..ぴよぴよ(103ポイント)
Date: 2006/11/29(水) 03:03
No:2154
|
|
Title: 宿題が出来ません・・誰か助けてください。
|
|
大学生なんですが、最近プログラムの授業で何をやってるのかさっぱりわかりません。
わからないので、授業が億劫です。
宿題がたまっているのですが出来そうな気がせず、途方にくれています。
丸投げはいけないといわれても、最初からわからないので聞こうにも聞けません。
ネットも信用できませんし、身近に親身になって教えてくれる人もいません。
どうしたらいいでしょう。
103ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(92,907ポイント)
Date: 2006/11/29(水) 03:27
No:2155
|
|
Title: Re:宿題が出来ません・・誰か助けてください。
|
|
こんばんは^^ 管理人です。
かなりしょげてらっしゃいますね^^;
授業が難しくて、授業もわからないし、宿題も出てるのにやらなきゃいけなくてもわからない・・いったいどうすれば・・。
みたいな状態におしつぶされそうになっている心境、伝わってきますよ。
プログラミングって難しいですよ。だって、大学生になって初めて習うことですから。
社会や理科、国語や数学みたいに小学校から教えてもらってきた事ではありません。大学生になって初めて習う科目ですから、
勉強の方法もわからないし、初めて習う科目に抵抗を覚えるのも無理ありません。
現に私もプログラムは大の苦手でした!(今も得意とはいえませんが^^;)
私がプログラムに興味を持ち始めたのはつい最近の事です。
それは学校の授業がきっかけでした。
OpenGLっていうライブラリを使用してソフトウェアロボットを作ったんです。
それまでは、プログラムといえば味気ないコンソール画面にprintfで出力した値を見て終わり。
という繰り返しだったんで、「何がおもしろいんだ・・」と落胆していました。
しかしソフトウェアロボットを作った時、3D表示機能を使って3Dでロボットを表現したんです。
そのロボットは手を動かし、足を動かし、歩き、私が言った言葉に応答してしゃべりもします。
視覚的に表現できることというのは本当に私のやる気を引き出してくれました。
「言葉で応答するにはこんなアルゴリズムだと面白い」
「言葉で入力する時は、こうするほうが応用が効く」
「作った自分も予想できないような会話をさせよう」
と、もっと質の高いロボットへ、もっと質の高いロボットへ。
授業が終わってもずっと真っ暗になるまで学校のパソコン質にこもって作り続けました。
そのソフトは無事完成し、スライドで紹介しました。
色々作っていると、教授から「大学のオープンキャンパスでそれを出してくれないか」とまで言われました。
自分で作ることの楽しさ、完成品が人に認められる喜び。
私にプログラムの醍醐味を教えてくれました。
それ以来、DXライブラリとよばれるライブラリを使用することで、簡単に2Dプログラムが書けることがわかり、
一人でも家にこもってプログラムばかり書くようになりました。
(毎日テニスにボーリング、ビリヤードばかりやってた日はどこにやら・・。)
視覚的、聴覚的にプログラムで表現できることは、コンソールしか使えなかった時と比べ物にならないほど楽しい事でした。
「作ったものを見てもらうこと」も作る活力の源になっていると思います。
苦労して完成したアプリを友人、兄弟、ウェブ上の知り合い、そしてHPなどで実際に使ってもらって感想を聞くことも大きな私の活力になっています。
料理でもそうですよね?一人で毎日暮らしてたら、夕食気合入れて作るぞ!って気にならないですよね。
食べてくれる誰かがいるから、おいしい料理を作ろうって思いません?
ただの認められたがり屋だといわれたらそうかもしれませんが、そういうことって無いですか?
リンさんは、まだプログラムのおもしろさを実感されてらっしゃらないんだと思います。
まさに入学当時の私です。人の宿題うつしてたような奴でした。
しかし、私もこんなに変われました。
まず、「勉強しよう」じゃなくて、「プログラムの面白さを実感」してください。
今どの辺までプログラムをされていらっしゃるか教えていただけたらもっと詳しく言えると思います。
作ってみておもしろいプログラムってあるんですよ。
私が初めて作ったおもしろいゲームはジャンケンでした。コインを投げて表か裏、どちらかを当てるゲームも作りました。
私が初めて作ったゲームはこんな感じです。
#include <stdio.h>
void main(){
int a;
printf("コイン表が出るでしょうか?裏が出るでしょうか?\n入力キー 1:表 2:裏\n");
scanf("%d",&a);
if(a==1)
printf("正解です!!");
if(a==2)
printf("外れです…。");
}
何をしているかわかりますか?
そうただの条件分岐文です。しかし立派なゲームです☆
実行結果が見えてるので知らない人でも1回しか遊べませんけどねw
作って楽しいプログラム。そういうのを自分で考えて作ってみると結構おもしろいです♪。
プログラムを「勉強」とおもわないでください。「趣味」だと思ってください。
宿題がわからなければ、ここで聞いてください。
何か授業でつまづいたらここで、聞いてください。
一つ一つ解決し、授業にもついていけるようになり、プログラムの面白さを実感し、「趣味」になりましょう☆
>身近に親身になって教えてくれる人もいません。
それなら私が親身になって出来るだけの範囲でお教えします。
私もまだまだ駆け出しです。一緒にがんばっていきましょう!^^
1,036ポイント を手に入れた。
|
|
|
|
Name: ゆうた ..ぴよぴよ(189ポイント)
Date: 2006/11/26(日) 10:43
No:2057
|
|
Title: 質問です
|
|
はじめまして。学校の課題で詰まってしまったので、質問させてください。私は学校でc言語を習っていて、今はレベル6くらいです。
あるプログラムを作っていて、その際に「//iphlpapi.lib」 をリンクする必要があるのですが、どのような設定をすればよいのかがわかりません。どのようにすればリンクが出来るのでしょうか?今までライブラリを明示的にリンクしたことはないので見当がつきません。
環境は、OSはXP、コンパイラはBorland C++ Compiler 5.5です。どなたか、ご存知でしたらご回答お願いします。
189ポイント を手に入れた。
|
|
|
|
Name: ゆうた ..ぴよぴよ(321ポイント)
Date: 2006/11/28(火) 17:45
No:2139
|
|
Title: 度々すいません!
|
|
回答ありがとうございます!遅くなってしまってすいません。
教えて頂いたとおり実行したのですが、上手くいかないのです。
確認させていただきたいのですが、ソースファイル(.c)と同じフォルダにライブラリファイル(.lib)をおいて、教えていただいたソースを書込み、コンパイルすれば良いのですよね?
どこか違う点がありましたら、教えていただけると助かります・・・!
132ポイント を手に入れた。
|
|
|
|
|
Name: ゆうた ..ぴよぴよ(371ポイント)
Date: 2006/11/28(火) 23:36
No:2150
| 解決!
|
Title: 出来ました!
|
|
無事できました、原因はただのスペルミスでした;
本当にすいません!!ありがとうございました!
50ポイント を手に入れた。
|
|
|
|
Name: いと ..ぴよぴよ(23ポイント)
Date: 2006/11/28(火) 14:38
No:2125
|
|
Title: フェボナッチ数列を表示する
|
|
・・方法がわかりません。
どうやったらいいんでしょうか?
23ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(90,109ポイント)
Date: 2006/11/28(火) 14:43
No:2126
|
|
Title: Re:フェボナッチ数列を表示する
|
|
いとさん、こんにちは^^
最初に細かいことを言いますけど、フェボナッチではなく、「フィボナッチ」では^^;
フェボナッチでも検索ヒットするから、発音の問題なのかな・・?
いとさんがどの程度で躓いてらっしゃるのかわかりませんが
フィボナッチ数列の並び方はご存知ですか?
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144・・・。
という並びです。
つまり「前の前」の値と「前」の値が「現在」の値になっているんです。
一般式で書くと余計難しく感じると思うので、はぶきます。
ループ文を使う方法と再帰を使う方法があると思いますが
再帰は使ったことがないと少し難しく思うかもしれません。
ループを使う場合は
うまいこと
「前の前」の値と「前」の値を足し合わせて値を作ることを考えて見ましょう。
もしまだわからないようでしたらまた聞いてくださいね。
251ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(90,243ポイント)
Date: 2006/11/28(火) 15:32
No:2128
|
|
Title: Re:フェボナッチ数列を表示する
|
|
今やってみて初めて知ったのですが、フィボナッチって46項までしか計算出来ないんですね。
int型の範囲を超えてしまうので。
それから再帰で計算すると40項あたりから急激に表示がゆっくりになっています。
再帰は無駄な計算が多いので、計算量が膨大になっているのでしょう。
遅いパソコンでは46項まで再帰では計算出来ないかもしれません。(ずっと待ってたらいつか出来ますけど)
95ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(6,400ポイント)
Date: 2006/11/28(火) 15:48
No:2129
|
|
Title: Re:フェボナッチ数列を表示する
|
|
以前に求めた数列の値を配列に保存しておいて、
その値を使って計算していくと速いです。
#include <stdio.h>
void fib(unsigned int *f, int n);
int main(void)
{
int i;
unsigned int f[47];
for (i = 0; i < 47; i++)
fib(f, i), printf("%u ", f[i]);
putchar('\n');
return 0;
}
void fib(unsigned int *f, int n)
{
if (n <= 1)
f[n] = 1;
else
f[n] = f[n-1] + f[n-2];
}
133ポイント を手に入れた。
|
|
|
|
|
Name: いと ..ぴよぴよ(44ポイント)
Date: 2006/11/28(火) 16:06
No:2130
|
|
Title: Re:フェボナッチ数列を表示する
|
|
解決できました。ありがとうございました。
21ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(90,487ポイント)
Date: 2006/11/28(火) 16:20
No:2131
|
|
Title: Re:フェボナッチ数列を表示する
|
|
↑クリックで画像が拡大↑
すみません、回答かいてて自分で疑問になりました(_ _|||)
以下のようなプログラムで、計算時間を測定しているのですが、
実行するたびに計算時間がかわるんですけど、これなんでなのでしょう;
28回目が0秒になったり29回目が0秒になったり、2回とも0秒になったり・・。
実行結果を添付しているのでそちらで確認してください。
使用したプログラムはこちらです。
実行環境はXPです。
#include <stdio.h>
#include <time.h>
int fib(int n){
return n == 0 || n == 1 ? n : fib(n - 1) + fib(n - 2);
}
int main(void) {
int i;
clock_t start;
for (i = 1; i <= 44; i++) {
start = clock();
printf("%2d : %9d", i, fib(i));
printf(" : %2d-%2dの計算時間 %2.3f秒\n",i-1,i,(double)(clock()-start)/CLOCKS_PER_SEC);
}
return 0;
}
244ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(6,463ポイント)
Date: 2006/11/28(火) 16:31
No:2133
|
|
Title: Re:フェボナッチ数列を表示する
|
|
>実行するたびに計算時間がかわるんですけど、これなんでなのでしょう;
こちらでの環境で動かしても、同じような結果を得ます。
そもそも、clock関数の精度がどこまで高いのか、
ということがあります。
興味深かったのは、ある項以降の計算にかかった時間を
小数第2位で四捨五入し、さらに10倍した値が
フィボナッチ数列を構成していることです。
(前略)
33 : 3524578 : 32-33の計算時間 0.078秒
34 : 5702887 : 33-34の計算時間 0.110秒
35 : 9227465 : 34-35の計算時間 0.203秒
36 : 14930352 : 35-36の計算時間 0.312秒
37 : 24157817 : 36-37の計算時間 0.485秒
38 : 39088169 : 37-38の計算時間 0.812秒
39 : 63245986 : 38-39の計算時間 1.297秒
40 : 102334155 : 39-40の計算時間 2.109秒
41 : 165580141 : 40-41の計算時間 3.407秒
42 : 267914296 : 41-42の計算時間 5.515秒
43 : 433494437 : 42-43の計算時間 8.922秒
44 : 701408733 : 43-44の計算時間 14.438秒
63ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(90,505ポイント)
Date: 2006/11/28(火) 16:36
No:2134
|
|
Title: Re:フェボナッチ数列を表示する
|
|
そうなんですかぁ・・。
0.01秒も誤差が出るってかなりキツイ誤差ですね。
そんなにも誤差って出るものなんですか。
マイクロ秒計算して確かめようかと思いましたけど、マイクロ秒の計算って面倒ですね;
windowsだと・・。
再帰を使わないループの計算方法も書いておきました。
再帰は漸化式の一般式がそのまま使えるので一見楽ですが、
計算にかなり無駄がありますね。
boxさんの方法でかなり無駄が削減できましたけど。
#include <stdio.h>
int main(){
int n[3]={1,0,0},b,i;
for(i=1 ; i <= 46 ; i ++){
n[2]=n[0]+n[1];
printf("%2.d : %10.d\n",i,n[2]);
n[0]=n[1] , n[1]=n[2];
}
return 0;
}
この方法だと再帰よりかなり速いと思います。
>興味深かったのは、ある項以降の計算にかかった時間を
ホントですね。
計算する回数もフィボナッチ数列の数字だけ計算量が増えるからでしょうね。
18ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(91,139ポイント)
Date: 2006/11/28(火) 18:18
No:2140
|
|
Title: Re:フェボナッチ数列を表示する
|
|
計算時間計ってみました。
こんな結果になりました、計算量と計算時間はほぼぴったり重なります(当然ですが)。
フィボナッチ数列の一般式は
a_(n) = a_(n-1) + a(n-2)
であるのに対して、計算時間は
a_(n) = a_(n-1) + a(n-2) + 1
になっています。
まぁ当然と言えば当然ですが・・。
結果は画像参照
#include <stdio.h>
#include <time.h>
#include <windows.h>
LONGLONG a=0;
LONGLONG fib(LONGLONG n){
a++;
return n==0 || n == 1 ? n : fib(n - 1) + fib(n - 2);
}
int main(void) {
int i,time[46];
clock_t start;
printf("項 Fibonacci 計算時間 計算量\n");
for (i = 1; i <= 55; i++) {
start = clock();
a=0;
printf("%2d %9I64d", i, fib(i));
time[i-1]=(clock()-start);
printf(" %6.3f秒 %I64d\n",(double)time[i-1]/CLOCKS_PER_SEC,a);
}
return 0;
}
301ポイント を手に入れた。
|
|
|
|
Name: バグ ..中級者(13,830ポイント)
Date: 2006/11/27(月) 11:34
No:2106
|
|
Title: DxLibのキーボード及びマウス入力について
|
|
char Buf[256] = { '\0' , };
GetHitKeyStateAll( Buf );
if( Buf[KEY_INPUT_LEFT] == 1 )
{
Piece.X--;
}
else if( Buf[KEY_INPUT_RIGHT] == 1 )
{
Piece.X++;
}
こんな感じで、キーボード入力用の関数を作ったのですが、キーボードでの入力を認識してくれません。どうしてなんでしょう?(^_^;)
キーボード入力がこんな調子なので、マウス入力にしてしまおうと思い、下記のような関数も作ったんですよ。こちらはきちんと動いたのですが、4〜5回操作するとwindowのタイトル部に『応答がない』と表示されてプログラムが強制ストップされてしまいます。なんとか解決方法はないものでしょうか?m(_ _)m
int Mouse = GetMouseInput();
if( Mouse & MOUSE_INPUT_LEFT && PieceJudge( 1 ) )
{
Piece.X--;
}
else if( Mouse & MOUSE_INPUT_RIGHT && PieceJudge( 2 ) )
{
Piece.X++;
}
378ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(88,765ポイント)
Date: 2006/11/27(月) 11:56
No:2108
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
これはループですか?
ループしている場合は ProcessMessage() を使用する必要があります。この関数はWindows環境でのソフトプログラムに付きまとう メッセージループ処理を肩代わりしてくれる関数です。
宣言のとこヌル文字で初期化する必要はあるんでしょうか??
132ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(89,030ポイント)
Date: 2006/11/27(月) 12:06
No:2109
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
私の環境ではうまくいきました。
こんな感じですが。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE
hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
char Buf[256] = {0,};
ChangeWindowMode( TRUE );
if(DxLib_Init()==-1)return -1;
SetDrawScreen( DX_SCREEN_BACK );
while(ProcessMessage()==0 && Buf[KEY_INPUT_ESCAPE]==0){
ClsDrawScreen();
GetHitKeyStateAll( Buf );
if( Buf[KEY_INPUT_LEFT] == 1 )
printfDx("左");
else if( Buf[KEY_INPUT_RIGHT] == 1 )
printfDx("右");
ScreenFlip();
}
DxLib_End();
return 0;
}
265ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(89,264ポイント)
Date: 2006/11/27(月) 12:10
No:2110
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
ループじゃないとしたら、
GetHitKeyStateAll( Buf );
で取得する状態はその時の一瞬ですから、
その瞬間にキーボードが押されていないのかもしれません。
ループを使用せずに
GetHitKeyStateAll( Buf );
を使うことはあまり無いのでは?と思いますが、
>4〜5回操作するとwindowのタイトル部に『応答がない』と表示されて・・・
という症状から見ても、ループさせているのにProcessMessage()関数を呼んでいないときにおこる症状と似ているので
これじゃないかと思います。
書き方は上記サンプルのように書けばいいと思いますよ。
234ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(89,375ポイント)
Date: 2006/11/27(月) 12:22
No:2112
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
char Buf[256] = { '\0' , };
という初期化だと、
\0,0,0,0,0,0,0,0,0,,,,,,
という初期化になりますよね??
最初のBuf[0]だけヌル文字になって後は全部0に。
Bufには0か1しかはいらないので、
4バイトのintより1バイトのcharを使おうという事でchar型になっているんじゃないかと勝手に想像していますが違うんでしょうかね?
\0によって何か有効な効果があるのでしたら教えてくださいm(_ _)m
219ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..中級者(14,139ポイント)
Date: 2006/11/27(月) 12:22
No:2113
| 解決!
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
返事、ありがとうございます(^-^)
まだ組み込めてないのですが、先にお礼を…
>>宣言のとこヌル文字で初期化する必要はあるんでしょうか??
これはクセです(^_^;)
以前に配列の初期化忘れでヒドイ目にあったので(苦笑)
>>GetHitKeyStateAll( Buf );
>>で取得する状態はその時の一瞬ですから、
>>その瞬間にキーボードが押されていないのかもしれません。
>>ループを使用せずに
>>GetHitKeyStateAll( Buf );
>>を使うことはあまり無いのでは?と思いますが、
メイン処理ループ内で、あるクラスのメンバ関数として、キー入力を呼び出しているので、確かにループ内での処理になりますね。管理人さんのいう対処で直ったとしても、少し気になるのが…ずっとキーボードを押しっぱなしにしておいても、全く反応が無かったんですよね。ループが早すぎて、キー入力を認識出来ていないだけならばWAITを入れればいいので、問題無いのですが…。
なんにせよ、組み込んでみて、また報告させてもらいます。ありがとうございました(^-^)
309ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(89,584ポイント)
Date: 2006/11/27(月) 12:30
No:2114
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
なるほど。そういうことだったんですね。
Bufには0か1しかはいらないので一応0で初期化したほうがベターかもしれません^^
ループの条件が0ですし(ESCAPEだから関係ないですけど)。
ループが早すぎて感知しないってことあるんですかね??
しかし私も1回しか処理が行われないようにしたら感知しませんでした・・。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE
hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
char Buf[256] = {};
ChangeWindowMode( TRUE );
if(DxLib_Init()==-1)return -1;
SetDrawScreen( DX_SCREEN_BACK );
// while(ProcessMessage()==0 && Buf[KEY_INPUT_ESCAPE]==0)
{
WaitKey();/*挿入*/
ClsDrawScreen();
GetHitKeyStateAll( Buf );
if( Buf[KEY_INPUT_LEFT] == 1 )
printfDx("左");
else if( Buf[KEY_INPUT_RIGHT] == 1 )
printfDx("右");
ScreenFlip();
WaitKey();/*挿入*/
}
DxLib_End();
return 0;
}
画面には何も出ません。
う〜ん、、どうしてだろう・・。
209ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..中級者(14,332ポイント)
Date: 2006/11/27(月) 12:43
No:2118
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
とりあえず、ProcessMessage()関数を組み込んだら、やりたい処理をする事はできました。ありがとうございました(^-^)
おそらくですが、MFCをやっているとメッセージという概念が至る所に出てきます。キーボード入力もマウス操作も全てはメッセージという形で処理されます。
ですから、『キーが入力されましたよ!』というメッセージをProcessMessage()関数で飛ばしているのではないでしょうか?
ですから、GetHitKeyStateAll()関数のバッファに値は格納されていても、メッセージを感知していないので、キー入力がされたと認識されていない…と。こういった理由ではないかと推測されます(^_^;)
193ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..中級者(14,429ポイント)
Date: 2006/11/27(月) 13:39
No:2119
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
やはり、メッセージを飛ばす関数のようです。下記のように変更してみたら普通に動きましたよ(^_^;)
char Buf[256] = { 0 , };
GetHitKeyStateAll( Buf );
if( Buf[KEY_INPUT_LEFT] == 1 )
{
Piece.X--;
}
else if( Buf[KEY_INPUT_RIGHT] == 1 )
{
Piece.X++;
}
ProcessMessage();
}
97ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..中級者(14,544ポイント)
Date: 2006/11/27(月) 18:05
No:2121
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
あぁ、確かに、メッセージという考え方はWINDOWSプログラム特有のものなので、SDKやMFCを触った事がないと理解しづらいかもしれませんね…正直、私もあまり理解できてないんですけどね(;^_^A
猫でも〜辺りに説明してあったはずなので、詳しい事はそちらを参考にしてくださいm(__)m
とりあえず、DxLibを利用する場合に限っては、おまじない的なものとして考えていても支障は無さそうですから、あまり気にしないでもいいかと思いますよ。
115ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..中級者(13,440ポイント)
Date: 2006/11/27(月) 20:20
No:2123
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
> やはり、メッセージを飛ばす関数のようです。
ProcessMessage関数の中身を見てみましたところ、メッセージを飛ばす
というのは正確ではないです。
ProcessMessage関数は処理によっては、メッセージを飛ばし、処理によってはメッセージを
取得するといったところなので、本家のリファレンスに書いてある「メッセージを処理する」と
言うのが一番適切だと思います。
ちなみに、キーの場合はメッセージを取得しています。
なので、ProcessMessage関数はGetHitKeyStateAll関数の前に呼ぶのが適切といえるでしょう。
バグさんの書き方ですと、一フレーム遅れてキーの処理をしてしまっていると思います。
また、昔のDXライブラリのソースですと、キーの取得はProcessMesssage関数を呼んだそのときに
押されているキー状態を取得していましたが、現在ではメッセージキューにたまっているキーを
取得しているようです。
これは、タイピングゲームなどの、1/60秒より速い速度でキーを取得する際に起こる
キーの取りこぼしのための対策だと思われます。
318ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..中級者(14,589ポイント)
Date: 2006/11/27(月) 20:50
No:2124
|
|
Title: Re:DxLibのキーボード及びマウス入力について
|
|
フォローありがとうございますm(__)m
やはり、よく分かってないのに語るのはよくなかったですね(;^_^A
また、変な事を言っていたら、ご指摘くださいm(__)m
45ポイント を手に入れた。
|
|
|
|
|
Name: yuka ..ぴよぴよ(17ポイント)
Date: 2006/11/26(日) 09:56
No:2055
|
|
Title: Re:雑談板
|
|
こんにちは!
前に卒研のことで相談したyukaです。(^^)
写真見ました〜!!すんごいキレイですね♪
紅葉とかあんまり興味なかったんですけど、見に行きたくなりました。
コタツが欲しい今日この頃です。w
17ポイント を手に入れた。
|
|
|
|
|
Name: ダッシュ ..入門者(2,900ポイント)
Date: 2006/11/26(日) 16:37
No:2058
|
|
Title: Re:雑談板
|
|
お久しぶりです。ダッシュです。(なんか最近来るたびに「お久しぶりです」かいてる気がします・・・)
京都か〜〜いいですね〜〜〜。僕もお正月に大阪に行こうと思ってるんで、京都回るのもいいかな?と考えてたとこです。(でも、寒いだろうな・・・)
74ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(85,782ポイント)
Date: 2006/11/26(日) 17:52
No:2063
|
|
Title: Re:雑談板
|
|
>yukaさん
お久しぶりですね^^
卒研進んでますか?
私の方は、、、ほんとに卒業できるかなみたいな調子です^^;
紅葉はいいですよ〜♪
寺には興味はないんですがw風景が好きです^^
>コタツが欲しい今日この頃です。w
寒さにまけて温風ヒーターを購入してしまいました。寒い時にあったかい空気に触れられると幸せですw
>ダッシュさん
おぉ、ホント久しぶりですね^^
調子はいかがですか?
大阪ですか、私たち田舎人からみるとホント都会にみえますよw
難波や梅田なんて歩いても歩いても店がなくなることがないですしね^^;
受験シーズン突入ですね!頑張ってください☆
249ポイント を手に入れた。
|
|
|
|
|
Name: ダッシュ ..入門者(3,336ポイント)
Date: 2006/11/26(日) 19:02
No:2073
|
|
Title: Re:雑談板
|
|
うう、今はテスト期間なのです。。。(泣)少し現実逃避してきちゃいました。
大阪では趣味の古本屋巡りでもしようかと思ってます。(去年行った時も古本屋回ったんですが、その時とても楽しかったので。)京都の方は・・・オススメスポットあります?
受験に関してですが、放課後残って図書室で6時くらいまで友達と粘ってます。受験シーズンなので僕ら以外全員3年生なんですが、なんだか緊張感をもらえていいですね。それに自分たちにはまだ1年あるんだと思うと余計にやる気がします。
ホント、ここのサイト見つけたときは夏休みの終わって学校が始まったくらいで、夏休みの間、考えてた計画が全然進まなかったせいもあり勉強とかに無気力だったのですが、管理人さんの励ましで色々と計画も進むようになりました。最近だいぶ軌道に乗ってきて、いい感じです。(勉強とゲーム制作ですが、最近勉強におされ気味です。何とかせねば。。。)だからこのままうまく行けば、「このサイトとの出会いは自分の運命を変えた」ともいえるかもしれないな。と最近たまに考えます。
436ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(86,599ポイント)
Date: 2006/11/26(日) 19:17
No:2076
|
|
Title: Re:雑談板
|
|
テスト期間ですかぁ、大変ですね><;
私は大学最後の試験が2月にあるので頑張らなくては・・。
古本巡りですかぁ、高校の時は私もよくやってました^^
マンガを読まなくなってからパタっと古本屋にいくことがなくなってしまいましたが・・。
京都でお勧めですかぁ、どういう関係で選ぶかですけど、
清水の長い坂を上がりながらお土産みるのは好きですね^^
買い物関係なら四条にいくと楽しいですが、店なら大阪の方がおおいんで、わざわざいくことはないと思います。
寺以外で京都の名物といえば、後は京都タワーでしょうか?
夜にあがったら京都の夜景が一望できて最高です☆
しかし構造上てっぺんはゆらゆらゆれるんでかなり怖かったです;
受験シーズンは私もよく図書室いってましたよぉ。
自分より勉強できる奴と一緒に勉強してました。
「マジで!お前そんなむずい問題できんのか?!勉強してんだな〜俺もやらねぇと・・。」
みたいな感じで、やる気がでます^^
集中力無い奴といっしょに勉強すると勉強になりませんでしたw
私が2年の時は授業が終わるとまっしぐらにテニスコートに走っていってましたから勉強のべの字も考えていませんでした^^;
受験への雰囲気がつかめてきてよかったですね^^
一番いいのは「実感を早くつかむこと」です。
受験って具体的にどうなるのかわからない・・。
受験の日程による違いってなんなの?
国立と私立の違いって結局なに?
実際今のレベルでどれくらいの大学がねらえるの?
など、ふわふわした疑問がいくつもある状態では、具体的な目標がたたず、勉強の計画もなかなかたちません。
しかし、自分の希望する大学に一度いってみること、
模試を受けて、自分のレベルを把握すること、
受験についてわからないことがあれば徹底的に調べること
で、しっかり受験ってことが実感できるようになります。
やる気もでますし、実際の目標がたてやすくなるので^^
第一希望に合格するといいですね☆頑張ってください♪
694ポイント を手に入れた。
|
|
|
|
|
Name: ダッシュ ..入門者(3,684ポイント)
Date: 2006/11/26(日) 20:58
No:2087
|
|
Title: Re:雑談板
|
|
流石は管理人さん!もうご存知でしたか。それにしても最後のおっとっとは最高でした。(笑)
300回って・・・。なんかどっちが悪だか分からなくなりますね・・・。(まあ、悪いのは確実に業者ですけど)
そろそろおベンキョに戻ります。お邪魔しました〜ノシ
106ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(87,212ポイント)
Date: 2006/11/27(月) 03:17
No:2100
|
|
Title: Re:雑談板
|
|
他トピの投稿とかぶるんですが、
この掲示板・HPのリンク元調べると質問サイトから
お越しになってらっしゃる方が多いようです。
全く同じ質問がされてることがよくあります。
しかしここの掲示板で回答してくださるかたは皆いい人ばかりですが、他の質問サイトの回答ってひどいものですね・・。
お名前は特に言いませんが、あきらかに自分で書いたソースを提示しているのに
「学校の宿題なら自分でやれ」
とか、ひどいものでは
「投稿の削除依頼出しました」
とか回答に書いてありました。
私も似たようなことは何度か、昔、言われましたけど
何であぁなんでしょうね。
そりゃ
http://oshiete1.goo.ne.jp/qa149536.html
こういうのはエグイですが・・。
丸投げっていうんですかね、
お願いしますともなんとも書いてないただ問題文が書いてあるだけっていうのはさすがに・・と私も思いますが。。
ここは一応C言語質問サイトですが、紹介では「宿題を教えてくれるサイト」となっているようです^^;
プログラミング上級者になると初心の頃を忘れてしまうんでしょうかね?
あの、どうしても理解できず、回答が欲しい時のあの心境を・・。
私が行う回答を提示して解説する方法は賛否両論あると思いますが、
やはりヒントをあたえようと、そこにたどり着けずに苦労しているわけですから、
先に答えを提示して、解法を理解したほうがいいように思うんです。
解法を理解したうえで、類題を解いたほうがちまちまヒント出されるよりずっと習得は早いように思います。
とりあえず宿題を完成させたいだけの人間にとっては答えがもらえたらそれでいいんでしょうけど、
そういう人間はそれまでですよね。
そういう人間がいるから純粋な質問ですら、ウェブ上では
・人の宿題を無償でやってやりたくない
・楽しようとするな
って心が働くんでしょうね。
人間って自分が苦労して手に入れたものと同じものを人に楽して手に入れて欲しくないという
なんとも惨めな心理が働きますね・・。
口では「答えを教えたんじゃ、その人の力にならない」といいますが、
本当は「そいつに楽して宿題を完成させたくない・難しい問題を自分が体験した位の苦労無しで解いて欲しくない」って心理なんでしょうね。
みんながみんなを助け合えば、お互いが助かると思うのに。
私は私が丁寧に回答する事で、質問者が回答する立場になった時、その人に同じように気持ちを込めて回答するようになってくれるんじゃないかと願っています。
そしてその人が回答者になったとき・・
と、よい循環がめぐって欲しいと思っています。
私の知識はまだまだ貧弱なので、回答できる立場としてかなり怪しいですが、役に立てたらうれしいです。
こんなやり取りでお互いに信頼できるような和がひろがっていけば素敵だなと思います。
・・・とだらだらとふと思った奇麗事を独り言として書いてみましたm(_ _)m
1,021ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..プログラマー(27,593ポイント)
Date: 2006/11/27(月) 05:50
No:2101
|
|
Title: Re:雑談板
|
|
>全く同じ質問がされてることがよくあります
あー、よくみかけますね。
あっちこっちで。
>「投稿の削除依頼出しました」
時々、回答者側のあまりにもひどい暴言に驚くことがありますね。
反対に質問者側のあまりにひどさに開いた口がふさがらないことも・・・。
削除云々はあからさまな丸投げだと、掲示板の規定に違反してると見なされて消されても仕方がないかと。
>こういうのはエグイですが・・。
これは酷い(w
というか、質問じゃないし・・・。
>プログラミング上級者になると初心の頃を忘れてしまうんでしょうかね?
私はまだ中級者ですが、忘れているつもりはありません。
当時私の場合周りに訊ける人がいませんでした。周りでだれもプログラミングなんてやってなくて。
だから判らないことができると、かなり苦戦していました。
インターネットがあるかないか、という時代でしたからネットに頼ることもできず、自分と自分の周りにある書籍だけを便りに、問題を分解して1つ1つ進めながらやるしかありませんでした。
その経験があったので今は壁にぶつかったとき、どう問題を分解し、どう対処すればいいのかは自分なりに判った気がしています。
多分ですが、私と同年代、或いはそれ以上のだと大体似たり寄ったりな状況であったこと人も多く、その初心の頃を忘れていないからこそ容易に質問する姿勢に疑問を持つのかもしれません。
>そういう人間がいるから純粋な質問ですら、ウェブ上では〜って心が働くんでしょうね
宿題丸ごと投げて判らないところも書いてない場合は、そういう面はあると思います。
>人間って自分が苦労して手に〜って心理なんでしょうね
うーん、そういう面が全くないかと言われれば否定はできませんが、むしろ「何が判らないか判らないからまともに答えたくない」気持ちの方が強かったりします。
多くのケースで問題なのは質問者側が設問を書いて、どこがわからないのかを書かないことにあるのではないでしょうか。
大抵、日本語的に意味不明だったり、丸投げだったり、「考えましたがわかりませんでした」、とか。
何が判らないかを書いてくれれば答えようもあるのですが、何が判らないか判らない or ひょっとしたら全部判らないとなると、一体どこから説明して良いのやら回答者側も判らないので結局「学校の宿題なら自分でやれ」 となってしまうのではないでしょうか。
逆にきちんと判らないところを書いていたりするものは、きちんと回答が返ってきているものが多いように見受けられますが、どうでしょう。
>みんながみんなを助け合えば、お互いが助かると思うのに。
たしかにそうなんですよ。
教える為には人の何倍もの知識量がないとまともに教えることができないので、教える側のスキルも上がりますからお互いにとってメリットになります。
ただ訊く側としては、何でも訊いて解決する癖がつかないようにする必要はあると思います。
自分で考え、調べ、あらゆる方法を試し、それでもダメだったら訊く、くらいの心構えでいて欲しいです。
プログラミングって結構「経験・・・自分の中の引き出し」が命な面があると思います(プログラミングだけの話ではないですが)。
だからそういう意味では、本当にプログラムを学びたい人にはもっと失敗を重ねて苦労して欲しいと思います。
人に訊くこと自体は悪くないのですが、容易に人に訊いて解決してしまうことに癖が付いてしまったプログラマーが同僚にいたとしたら、私はそんな人とは関わり合いになりたくないです(w
>私は私が丁寧に回答する事で、質問者が回答する立場になった時、
>その人に同じように気持ちを込めて回答するようになってくれるんじゃないかと願っています。
この姿勢は素晴らしいと思います。
是非見習いと思います。
1,110ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(88,554ポイント)
Date: 2006/11/27(月) 06:57
No:2102
|
|
Title: Re:雑談板
|
|
いや〜あまりにもひどい回答ばかり眺めていたんで一人でぶつくさ文句いってしましました^^
たたかれているものは、確かに質問者にも落ち度がある場合が多いですね。
それに、自分で問題を打開する力、これは重要な事ですよね。
私はまだ入門者レベルなので、えらそうな事はいえませんが、
自分も人に聞ける状況ではなく、ネットでも親切に答えてくれる人にもであえなかったので質問もせず、
一人でひたすら本を読んだりして解決しました。
まただいたい問題にぶつかった時の検索のかけ方もわかってきました。
判らなかった時、ひたすら色んなキーワード検索にかけて、有効なかけかたが判っていったんだと思います。
googleってものすごく使いかた簡単なようで、実はいくらでも応用が必要になりますよね。
そうしているうちに自分にあったサイトを発見できたりして。
人に紹介されたものより、自分で自分にあったものを見つけるほうがよっぽどしっくり来ますしね。
プログラムってホント「わからないこと」を数えだしたらキリがないですよね。
Justyさんくらいのスキルの持ち主でも業務を行っていてわからない事にぶつかったってことはあるのでしょうから
今の入門者から今後「判らないこと」がいくつあるだろうか想像すると半端な量じゃないと思います。
そんな問題にぶつかった時、自分で解決する力こそがそれも含めたSEとしてのスキルになるんでしょうね。
>多くのケースで問題なのは質問者側が設問を書いて、どこがわからないのかを書かないことにあるのではないでしょうか。
そうですよね。
「よくわからないので教えてください」といわれても、
どこから教えたらいいのか、どこまで知っているのかわからないと教えようがないですものね。
また、このような言い方では意気込みも感じられないので教えるほうとしてもだるくなってしまいますよね。
>教える為には人の何倍もの知識量がないとまともに教えることができないので、
ギリギリの状態で教えてるふりすると知ったか状態になりますもんねw
>教える側のスキルも上がりますからお互いにとってメリットになります。
それは何度も経験あります。
例えば文字コードという言葉は知っていても、全角文字の2バイト目はあいうえお順に表示すると
文字コードの数字は2ずつ増えているということ初めて知りましたし
例
unsigned char st[7]="あいう";
for(i=0;i<6;i++)
printf("%d\n",st[i]);
実行結果
130
160
130
162
130
164
a->cにシフトするなら文字コードに2たせばいいですけど、
全角になるとわかりませんでした。
これなら
あ->うにシフトしたいなら文字コードの2バイト目に4足せばいいんだとわかりますね。
そこから「なぜ2バイトずつ・・つまり間隔に1バイトあいているんだ?」と疑問になり、調べてみると間にあった文字は
「ぁぃぅぇぉ」でした。じゃ、小さくできない「かきくけこ」だとどうなるんだ?と思って調べてみると「がぎぐげご」でした。
こんな風に文字コード並んでるんですね。
回答を書いている間に自分の知識になっていることよくありました。
>是非見習いと思います。
いえいえ、私はJustyさんのスキルを見習い目標にしますw
1,342ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(88,607ポイント)
Date: 2006/11/27(月) 06:57
No:2103
|
|
Title: Re:雑談板
|
|
しかし遅くまで(早く?!)起きてらっしゃいますね・・って自分もか!
(((8時起きだし、どうしよう(泣)
ところで、特殊な文字みかけますけど、
☜
☤
☧
☢
♫
☠ฺ
☃
こんな文字に加えて
(╬☉д⊙)
( ´^ิu^ิ`)
(。♋ฺ‸♋ฺ。)
(☄ฺ◣д◢)☄ฺワシャー
こんな顔文字がかけたりして。
これらに使われている文字コードって何なんでしょう。
何の文字コードにしたら表示できるかどうやって調べたらいいんでしょうか?
3バイトで表示している文字コードってあるんでしょうかね?
53ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..中級者(13,452ポイント)
Date: 2006/11/27(月) 10:29
No:2105
|
|
Title: Re:雑談板
|
|
多分、そのあたりの変わった文字は環境に依存している部分もあるんじゃないでしょうか?
27ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(28,288ポイント)
Date: 2006/11/27(月) 11:34
No:2107
|
|
Title: Re:雑談板
|
|
>しかし遅くまで(早く?!)起きてらっしゃいますね
今日は実は会社お休みです(w
抱えていたプロジェクトが全て終結したので。
>まただいたい問題にぶつかった時の検索のかけ方もわかってきました
これは今や欠かせないですよね。
プログラムだけにかかわらず、大抵の問題がこれで解決しますから。
>そんな問題にぶつかった時、自分で解決する力こそがそれも含めたSEとしてのスキルになるんでしょうね。
SEとしてというか、社会人としてというか(w
だからといって判らないことを抱え込んだまま放置してしまうのもよくないので、自力解決は無理 or 時間がかかりすぎて予定オーバーする、と判った段階で訊くことも重要だったりします。
>このような言い方では意気込みも感じられないので教えるほうとしてもだるくなってしまいますよね。
つくづく思うのは訊く側のスキル(特に日本語)も必要なんだな、と。
書き方1つで返ってくる回答も真摯なものになったり、適当になったりしますから。
>これらに使われている文字コードって何なんでしょう
UNICODEですね。
ATOKだと文字パレットから調べられますが、それ以外だと「プログラム」→「アクセサリ」→「システムツール」の「文字コード表」ツールで調べられます。
>3バイトで表示している文字コードってあるんでしょうかね
UTF-8だと日本語のひらがな・漢字文字は軒並み3バイトだった気が。
>文字が☧になって表示できてない奴がある
フォントが Verdanaだから、でしょうか。
695ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(89,156ポイント)
Date: 2006/11/27(月) 12:15
No:2111
|
|
Title: Re:雑談板
|
|
なるほど、あまり使用しないアクセサリにもこんな機能が!
なめてかかりそうなアクセサリですが、
結構ペイントと電卓を愛用してたりします^^;
フォトショは起動が重いんで、ささっと済ませたい時鬱陶しいんですよね・・。
やはり3バイトってあるんですね。
そういえば携帯の顔文字もうったら残りバイト数かなり減るけど、バイト数高いのかな?
うぅ、寝てないから学校で寝てしまいそう・・zzZ
108ポイント を落としてしまった。
|
|
|
|
Name: 新米 ..ぴよぴよ(85ポイント)
Date: 2006/11/26(日) 18:35
No:2068
|
|
Title: 教えてください。
|
|
ある単語Wの後ろにくる可能性のある単語は10個(W[10])あって、その10個の単語それぞれの後ろにくる可能性のある単語がまた10個ずつ(W [10][10])あって、またそれらら100個の単語それぞれの後ろにくる可能性のある単語が10個ずつというふうに(n-1)回繰り返されたときに、単語Wから始まってN個以下の単語からなる全ての文を出力するにはループをどのように回せばいいでしょうか?
よろしくお願いします。
85ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(85,737ポイント)
Date: 2006/11/26(日) 18:45
No:2070
|
|
Title: Re:教えてください。
|
|
Wの後ろに来る可能性のある単語という意味がよくわかりません。
単語というからには文字列のように思えますが。
Wの後ろに何が来る可能性があるんですか?
私が想像するに、
w[0]=a;
w[1]=b;
w[2]=c;
w[3]=d;
w[4]=e;
w[5]=f;
・・・・・・
とあれば、
wantとwestがあるので、w[0]とw[4]がしぼられる、という感じですか?
26あるアルファベットから10個を選ぶのは乱数によるものですか?
132ポイント を手に入れた。
|
|
|
|
|
Name: 新米 ..ぴよぴよ(121ポイント)
Date: 2006/11/26(日) 19:08
No:2074
|
|
Title: 補足
|
|
Wは日本語の単語です。
例:「いま東京にいる」としたら
Wが「いま」
W1が「東京」
という感じです。
36ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(26,133ポイント)
Date: 2006/11/26(日) 19:46
No:2083
|
|
Title: Re:補足
|
|
多分WというのはC言語的ななにかではなく、抽象的な意味での「単語」を意味しているのでしょう。
だから W[10][10]というのは単純に 10個の単語の次にそれぞれ 10個ずつつながる可能性のある単語があるという意味で、質問者は組み合わせ 10 x (10+1)の全てを出力するループはどういう構造になるかを訊いているのだと思われます。
データ構造がわからないので、適当に推測しますが、再帰構造のループになると思います。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Word
{
char word[32]; // 単語
struct Word *next[10]; // 次にくる可能性のある単語リスト
} Word;
void DispWord(int n, int max_n, const char *curr_word, const Word *word)
{
int i;
char *w;
if(n == max_n) return;
if(!strlen(word->word)) return;
w = (char *)malloc(strlen(curr_word) + strlen(word->word) + 2);
sprintf(w, "%s %s", curr_word, word->word);
printf("%s\n", w);
for(i=0; i<10; ++i)
{
if(word->next[i])
DispWord(n+1, max_n, w, word->next[i]);
}
free(w);
}
int main()
{
Word w;
..... // wにデータセットする
DispWord(0, 10, "", &w);
return 0;
}
んー。即興で組んだんで何のデバッグもしてませんし保証もできませんが、雰囲気的にはこんな感じになるかと。
402ポイント を手に入れた。
|
|
|
|
|
Name: 新米 ..ぴよぴよ(243ポイント)
Date: 2006/11/26(日) 22:04
No:2093
| 解決!
|
Title: ありがとうございました
|
|
まず、質問の説明がよくなくてすいませんでした。
Justyさん、よくも理解しで、丁寧にプログラムまで書いてくださって、どうもありがとうございます。
今後もよろしくお願いします。
管理人さん、次からは質問文をわかりやすく書くように頑張ります。
どうもありがとうございました。
122ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(26,483ポイント)
Date: 2006/11/27(月) 01:07
No:2098
|
|
Title: Re:ありがとうございました
|
|
>Justyさんと私では賢さに天と地の開きがあるので
いやいや、そんなことはないです、ないです。
たまたま別のところで同じ出題を見かけて、そのときは理解できなかったのですが、改めて見て、Wがどうのという部分を無視して読んだら意図が見えてきた、というだけの話です。
105ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(88,233ポイント)
Date: 2006/11/27(月) 02:55
No:2099
|
|
Title: Re:ありがとうございました
|
|
この掲示板・HPのリンク元調べると質問サイトから
お越しになってらっしゃる方が多いようですね。
教えてGooとか見ていると、同じ方がいつもここを紹介してくださってるみたいです^^;
以前丁寧に回答させてもらった方のようですが、私のような無知人でもこうやって人に貢献することが出来たらうれしい限りです。
151ポイント を手に入れた。
|
|
|
|
Name: ten ..ぴよぴよ(54ポイント)
Date: 2006/11/26(日) 18:37
No:2069
|
|
Title: 並び替え
|
|
次のようなプログラムを作れ。 1.数値を次々に読み込んで配列に1番目から順に格納する。 2.配列に格納されている数値を逆の順番に並べ換える (最後に読み込んだ数値が配列の1番目に入る)。 3.その配列の内容を1番目から順番に画面に出力する。読み込み、逆転、出力の部分はそれぞれ関数にすること。
という課題をやっています。下のように作ってみたんですが
上手くいかなくて・・・
何処が悪いか教えて下さい。
#include <stdio.h>
#define MAX 100
void reve(int *, int *);
void read(int *, int *);
void write(int *,int *);
int main ()
{
int x[MAX];
int n=0;
read(&n, x);
reve(&n, x);
write(&n, x);
return;
}
void read(int *n, int x[])
{
while(scanf("%d", &x[*n]) == 1 ) {
*n += 1;
}
return;
}
void reve(int *n, int x[])
{
int i, j, y;
for(i = 0, j = *n-1; i <j; i++, j--) {
y = x[j];
x[j] = x[i];
x[i] = y;
}
return;
}
void write(int *n, int x)
{
int i;
for(i = *n; i >= 0; i--) {
printf("x[%d] = %d\n", i, x[i]);
}
return;
}
54ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(85,823ポイント)
Date: 2006/11/26(日) 18:53
No:2071
|
|
Title: Re:並び替え
|
|
こんにちは。管理人です。
おしいですね。
int mainの部分、main関数は値を返すべきですから
return 0;
と最後に書く必要があります。
後、main関数からwrite関数へ値を渡す時、配列を渡しているのに、受け取りは変数単体になっています。
int x[]
として受け取らなければなりません。
86ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(85,905ポイント)
Date: 2006/11/26(日) 18:57
No:2072
|
|
Title: Re:並び替え
|
|
終了条件ですが
while(scanf("%d", &x[*n]) == 1 ) {
ではなく
while(scanf("%d", &x[*n]) != EOF ) {
と書いたほうがよりよいかもしれません。
LinuxですとCtrl + D WindowsですとCtrl + ZでEOFになります。
82ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(6,267ポイント)
Date: 2006/11/26(日) 21:00
No:2088
|
|
Title: Re:並び替え
|
|
こんな感じでしょうか。
データを読み込むときは、定義した配列のサイズを超えないように
しないといけません。
また、変数nの内容が変わるのはread関数の中だけです。
reve関数とwrite関数には、変数nのアドレスを渡す
必要は特にありません。
変数のアドレスを渡すということは、関数の中で変数の内容が書き換わる
可能性がある、ということです。
#include <stdio.h>
#define MAX (100)
void read(int *, int *);
void reve(int, int *);
void write(int, int *);
int main (void)
{
int x[MAX];
int n = 0;
read(&n, x);
reve(n, x);
write(n, x);
return 0;
}
void read(int *n, int *x)
{
while (*n < MAX && scanf("%d", &x[*n]) != EOF)
(*n)++;
}
void reve(int n, int *x)
{
int i, j, y;
for (i = 0, j = n - 1; i < j; i++, j--) {
y = x[j];
x[j] = x[i];
x[i] = y;
}
}
void write(int n, int *x)
{
int i;
for (i = 0; i < n; i++)
printf("x[%d] = %d\n", i, x[i]);
}
373ポイント を手に入れた。
|
|
|
|
Name: Atentsu ..ぴよぴよ(3ポイント)
Date: 2006/11/26(日) 17:14
No:2059
|
|
Title: ファイルの読み込みについての質問です。
|
|
はじめまして。
ここをみてちょっとかじったことのあるCを
もう一度はじめてみたAtentsuです。
現在とりあえず簡単なRPGもの(マップ移動、戦闘のみ)
の製作をしているのですが、
キャラクターのステータスや、敵キャラクターのステータス、マップデータを外のファイル(txtなど)から読み取れるようにしたいのです。
基礎的な質問かとおもいますが、お教えいただけるとうれしいです。よろしくおねがいします。
3ポイント を手に入れた。
|
|
|
|
Name: Atentsu ..ぴよぴよ(126ポイント)
Date: 2006/11/26(日) 17:59
No:2064
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
返信ありがとうございます。
リンク先参考にさせていただきます。
説明不足申し訳ありません。
データを他のcppファイルにあらかじめ書いておき、
char[0].name = "Player1"
それをメインとなるファイル「main.cpp」で読み込む方法を知りたいです。
マップの配列データについても同様に、
他のファイルにあらかじめ記載しておき、
それをマップの絵画の際に読み込む、という形をとりたいです。
123ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(85,318ポイント)
Date: 2006/11/26(日) 18:26
No:2065
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
http://dixq.net/board/program/dat.txt
このファイルをコンパイルするフォルダと同じフォルダにいれてください。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE *fp;
char str[10][100];
int count=0,read,n=0;
fp = fopen("dat.txt", "r");
if (fp == NULL){
printf("dat.txt を開けませんでした。\n");
return 1;
}
while ((read = fgetc(fp)) != EOF){
if(read==','){
str[n][count]='\0';
n++;
count=0;
}
else{
str[n][count] = (char)read;
count++;
}
}
for(int i=0;i<n;i++)
printf("%s\n",str[i]);
fclose(fp);
}
一度これを実行してみてください。
txtファイルには、
今のキャラのレベル12、今のキャラのHP103、今のキャラのMP87が
12,103,87,
このように書かれています。
このファイルからキャラのデータを読み込む方法で、
「,」を区切りとしてデータをわけています。
これで文字列が取り込めましたが、これはあくまで「文字列」であって「数値」ではありません。
これをint型に変換する必要があります。
こういうことがしたいのでしょうか?
464ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(85,515ポイント)
Date: 2006/11/26(日) 18:30
No:2066
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
注釈は以下の通りです
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE *fp;//ファイルポインタ
char str[10][100];//データを格納するための配列
int count=0,read,n=0;//要素数をカウントするcount,nは2次の配列要素
fp = fopen("dat.txt", "r");//読み取り形式でファイルを開く
if (fp == NULL){//ひらけなかったらNULLポインタが入るので、終了
printf("dat.txt を開けませんでした。\n");
return 1;
}
while ((read = fgetc(fp)) != EOF){//ファイルを終わりまで1文字ずつ読み取る
if(read==','){//読み取った文字が「,」ならそれまでに読み取った文字を1つの文字列とする。
str[n][count]='\0';
n++;
count=0;
}
else{//「,」以外なら普通にstrに文字を格納する
str[n][count] = (char)read;
count++;
}
}
for(int i=0;i<n;i++)//読み取ったデータ表示
printf("%s\n",str[i]);
fclose(fp);//閉じる
}
197ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(85,605ポイント)
Date: 2006/11/26(日) 18:33
No:2067
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
宣言した[10][100]は#defineで定義したほうがよいでしょう。
定義を使うと非常に読みにくくなるので省略しました。
10の部分がデータの入る個数
100の部分が1つのでーたに入る文字の個数。(数値なら普通100個もいりません)。10000なら5+1個必要です。
90ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(25,731ポイント)
Date: 2006/11/26(日) 19:11
No:2075
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
>外のファイル(txtなど)から読み取れるようにしたいのです
と
>データを他のcppファイルにあらかじめ書いておき、
とありますが、txtを読み込むのか、cppファイルに書いてある変数を main.cppで使いたいのかどちらでしょうか?
前者であれば管理人さんの書かれている通りです。
がりがりと自前で読み込んで解析する必要があります。楽にやりたいなら構文解析ライブラリとか使ってみるのもいいと思います。
本格的にデータを管理したいなら xmlとかの使用も検討した方がいいかもしれません
後者であれば、単純に externを使用すればいいのではないでしょうか。
data.cppで
int aaa[5000];
とあったら main.cppで
extern int aaa[5000];
とすれば、main.cppでも配列 aaaを使用できます。
11ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(87,840ポイント)
Date: 2006/11/26(日) 19:40
No:2081
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
マップデータの取得は2種類の方法があると思います。
1、ヘッダフィイルを作成し、インクルードして使う方法
2、分割コンパイルによって、他のファイルで宣言した変数をextern によって使用する方法。
まず、1から。
これはmap.hというファイルを作り、そこに
以下のように書きます。
main.cppでこのファイルをインクルードすると、
グローバル変数としてこれが使えます。
処理を構造化したい時や、特定の関数でしかこの変数を使わない時は、この方法はお勧めしません。
変数を全てグローバル変数にしている状態です。
例では、mapという変数に、マップデータをいれているところです。
----------map.h---------
int map[10][10]={
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,0,1,1,1,1,1,1},
{1,1,1,0,0,1,1,1,1,1},
{1,1,1,0,0,0,1,1,1,1},
{1,1,1,0,0,0,0,1,1,1},
{1,1,1,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,1},
{1,0,0,1,1,1,1,1,1,1}
};
---------main.cpp------------
#include "map.h"
#include <stdio.h>
int main(){
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
printf("%d,",map[i][j]);
printf("\n");
}
return 0;
}
次は分割コンパイルによって変数を使用する方法で、
map.cppに先ほどを同じデータを宣言します。
main.cppファイル内では、
自分が使用したい関数のなかでextern宣言します。
extern宣言は以下のようにかき、具体的な代入は宣言と同時にできません。
map.cpp内ですでにおこなっていますからね。
-----------map.cpp-------------
int map[10][10]={
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,0,1,1,1,1,1,1},
{1,1,1,0,0,1,1,1,1,1},
{1,1,1,0,0,0,1,1,1,1},
{1,1,1,0,0,0,0,1,1,1},
{1,1,1,0,0,0,0,0,1,1},
{1,1,0,0,0,0,0,0,0,1},
{1,0,0,1,1,1,1,1,1,1}
};
-------------main.cpp--------------
#include <stdio.h>
int main(){
extern int map[10][10];
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
printf("%d,",map[i][j]);
printf("\n");
}
return 0;
}
これで解決できたでしょうか?
1,067ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(26,254ポイント)
Date: 2006/11/26(日) 20:14
No:2085
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
>extern宣言は以下のようにかき、具体的な代入は宣言と同時にできません。
実はマクロを駆使するとできたりします。
グローバル変数自体が嫌われる昨今、今では使われることのなくなった古典的なテクニックですが、添付ソースのようにやるとちょっーと見た目が変ですが可能です。
121ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(26,378ポイント)
Date: 2006/11/26(日) 21:04
No:2089
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
>2箇所で初期化する必要ってあるんですか?
data_init()ではgCharaParam変数の初期化を。
data.hでは Counter / ProjectName の初期化をしています。
マクロが2つあるので、その2つのサンプルの為に初期化が分かれています。
124ポイント を手に入れた。
|
|
|
|
|
Name: Atentsu ..ぴよぴよ(483ポイント)
Date: 2006/11/26(日) 21:49
No:2091
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
すみません、私用ででかけておりました。
管理人様、Justy様、丁寧なご回答ありがとうございます。
本題の方ですが、マップに関しては、ほぼ不変的なのでexternを利用する、分割コンパイルが自分の想像していたもののようなので、
そちらの方法でやってみようかと思います。
キャラクターの情報の処理ですが、
成長によって書き換えなどをおこないたいので
Name1,Lv,Hp,Mp,…
Name2,Lv,Hp,Mp,…
というテキストデータを読み込む形にしたいと思います。
ただ、はじめにご返答していただいた方法ですと
改行の際に(改行コードが残るのでしょうか?)不備があるようです。
今から先ほどのサイトを参考にちと考えてきます。
にしても皆さんすごいですね。尊敬します。
357ポイント を手に入れた。
|
|
|
|
|
Name: Atentsu ..ぴよぴよ(519ポイント)
Date: 2006/11/26(日) 21:53
No:2092
| 解決!
|
Title: Re:ファイルの読み込みについての質問です。
|
|
思いのほか簡単に解決できました。
丁寧なご教授、ありがとうございますた。
36ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(88,044ポイント)
Date: 2006/11/26(日) 22:56
No:2095
|
|
Title: Re:ファイルの読み込みについての質問です。
|
|
解決できたようでよかったです。
改行コードが入った時は次の行から取ってくる必要があります。
1行読み込みを行うfgetsなども使ってみたり色々方法があると思います。
すでに解決されたようですので、よいかと思いますが。
プログラムってホントに回答は1種類じゃないですから、工夫次第で世界で一つのものになると思いますよ。
頑張ってくださいね。
117ポイント を手に入れた。
|
|
|
|
Name: 初心者マン ..ぴよぴよ(0ポイント)
Date: 2006/11/25(土) 15:08
No:1990
|
|
Title: 質問です!
|
|
こんいちは。このサイトみてゲーム作ろうかとおもったんですが、DXライブラリを入手したのですがサイトの様に女の子の画像が出ません。
(Borlandの方は、Borlandのプロジェクトファイルをお開きください。)
・・・と言うところもどこだかわかりません。BorlandはDLしてインストしました。初歩的なことですいませんが答えていただくと助かります。よろしくおねがいします!
103ポイント を落としてしまった。
|
|
|
|
Name: 初心者マン ..ぴよぴよ(29ポイント)
Date: 2006/11/26(日) 10:33
No:2056
|
|
Title: Re:質問です!
|
|
さっそく返事ありがとうございます!このサイト見てみます!また質問等ありましたらここに書かせていただきますのでよろしくおねがいします!
29ポイント を手に入れた。
|
|
|
|
Name: doop ..ぴよぴよ(121ポイント)
Date: 2006/11/25(土) 19:15
No:1998
|
|
Title: DXライブラリでななめ移動。
|
|
始めまして。
DXライブラリを使ってゲーム制作中で
クォータービュー仕様にしたいのですが
キー操作を「ななめ移動のみ」にしたいのです。
左&上キーを押すとX-2,Y-1のようなプログラムを組みましたが
そうすると左&上&右キーを押すと上のみ実行されます。
なるべく簡略化されたキー操作プログラムにしたいのですが
思いつきません。どうすればいいんでしょうか?
121ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(79,937ポイント)
Date: 2006/11/25(土) 19:50
No:2000
|
|
Title: Re:DXライブラリでななめ移動。
|
|
こんにちは。doopさん。
ソースコードがわかりませんが、つまり左入力によって減らされたXと右入力によって増やされたXがうちけしあって、Y成分しか作用しなくなったということでしょうか?
斜めにしか動かしたくないのに、鉛直方向にすすんでしまうということですね。
では、同時に押された時、どのように動かしたいのでしょうか?
130ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(80,045ポイント)
Date: 2006/11/25(土) 19:52
No:2001
|
|
Title: Re:DXライブラリでななめ移動。
|
|
キャラの動きは
if(左キー入力)
{
X-2,Y-1
}
else if(上キー入力)
{
X-2,Y+1
}
else if(右キー入力)
{
X+2,Y+1
}
else if(下キー入力)
{
X+2,Y-1
}
こんな感じでかけば、よいかと思いますが・・、
108ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(80,240ポイント)
Date: 2006/11/25(土) 19:54
No:2002
|
|
Title: Re:DXライブラリでななめ移動。
|
|
こうすることで、
左&上&右が同時に入力されても左キー入力としか判断しません。
上&右なら上キー入力とだけ判断します。
そうじゃなくて、同時に押した場合、その中間の方向にすすむようにしたいんでしょうか?
・・でもそれなら最初の鉛直方向の問題になってしまいますね。
そうなるとキャラの歩く方向を少し変えてみる必要があります。
ちょっと上のアルゴリズムで問題があるかどうか教えてください。
195ポイント を手に入れた。
|
|
|
|
|
Name: doop ..ぴよぴよ(166ポイント)
Date: 2006/11/25(土) 21:01
No:2003
| 解決!
|
Title: Re:DXライブラリでななめ移動。
|
|
ソースを書き込んでなく回答を困らせ、すみません。
その上、分かりやすい回答ありがとうございます。
if文を組み合わせてななめ移動のみにすることができました。
45ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(79,627ポイント)
Date: 2006/11/25(土) 21:02
No:2004
|
|
Title: Re:DXライブラリでななめ移動。
|
|
解決できてよかったです。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow ){
int x=320,y=240,white,blue;
char KeyBuf[256]={};
ChangeWindowMode(TRUE) ;
if( DxLib_Init() == -1 ) return -1 ;
white=GetColor(255,255,255);
blue=GetColor(0,0,255);
while(ProcessMessage()==0 && KeyBuf[KEY_INPUT_ESCAPE]==0){
GetHitKeyStateAll( KeyBuf ) ;
ClsDrawScreen() ;
for(int i=-480*2 ; i<640 ; i+=60)
DrawLine(i,0,i+480*2,480,blue);
for(int i=0 ; i<640+480*2 ; i+=60)
DrawLine(i,0,i-480*2,480,blue);
if(KeyBuf[KEY_INPUT_LEFT]==1){
x-=2 , y+=1;
}
else if(KeyBuf[KEY_INPUT_UP]==1){
x-=2 , y-=1;
}
else if(KeyBuf[KEY_INPUT_RIGHT]==1){
x+=2 , y-=1;
}
else if(KeyBuf[KEY_INPUT_DOWN]==1){
x+=2 , y+=1;
}
DrawCircle(x,y,10,white);
ScreenFlip() ;
}
DxLib_End() ; //DXライブラリの終了処理
return 0;
}
こんな感じですよね?
こういう視点は作ったこと無いんですけど、面白いですね。
頑張ってください^^
613ポイント を落としてしまった。
|
|
|
|
|
Name: doop ..かけだし(1,714ポイント)
Date: 2006/11/25(土) 22:39
No:2008
|
|
Title: Re:DXライブラリでななめ移動。
|
|
ttp://dixq.net/g/#22を参考にして
ななめ移動にアニメをつけてみたのですが
左上または右下に移動する時のアニメーションが
かなり早くなるのですが何ででしょうか?
#include "DxLib.h" //DXLib使用宣言
#define PLAYER_SIZE_X 78 //プレイヤーのXサイズを78にする
#define PLAYER_SIZE_Y 94 //プレイヤーのYサイズを94にする
#define PLAYER_SIZE_X_HALF PLAYER_SIZE_X/2 //プレイヤーサイズの半分
#define PLAYER_SIZE_Y_HALF PLAYER_SIZE_Y/2 //プレイヤーサイズの半分
#define PC_SPEED_X 2 //プレイヤー横移動速度
#define PC_SPEED_Y 1 //プレイヤー縦移動速度
//WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE
hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{//main関数始まり
ChangeWindowMode( TRUE );//ウィンドウモード
SetGraphMode( 640 , 480 , 16 );//画面モードの設定
//(DXLibの初期化)エラー時の終了
if(DxLib_Init()==-1)return -1;
SetDrawScreen( DX_SCREEN_BACK ); //作業画面に設定
//ローカル変数の宣言
int PC_x = 320; //PC_walkのX座標
int PC_y = 224; //PC_walkのY座標
char Key[256]; //キー状態を入れる変数
int PC_Graph ; //PCの画像を入れる変数
int muki=0; //向きを示す。0左上/1左下/2右上/3右下/
int walking_flag=0; //歩いているか示す。0停止中/1歩行中/
//横4縦4つずつ分けた内の16個をPC_walkに格納する
int PC_walk[16]; //PC(左上)歩きハンドル,[ ]は配列要素数
LoadDivGraph( "player_walk.bmp" , 16 , 4 , 4 ,
PLAYER_SIZE_X , PLAYER_SIZE_Y , PC_walk ) ;
//メインループ--------------------------------------------------------
while(ProcessMessage()==0)
{
ClsDrawScreen(); //作業画面をクリアにする
GetHitKeyStateAll( Key ); // すべてのキーの状態を得る
//PCの向き
if(PC_x%32==0 && PC_y%32==0){//(10)座標が32で割り切れたら入力可能
walking_flag = 1, //歩くフラグを立てる。
PC_Graph=PC_walk[muki*4];
//左上に進む/左下に進む
if( Key[ KEY_INPUT_LEFT ] == 1 ) //左キー入力(01)内
{//(0)
if( Key[ KEY_INPUT_UP ] == 1 ) //上キー入力(02)内
{muki=0;}//左上向き
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下キー入力(04)内
{muki=1;}//左下向き
}//(0)
else
//右上に進む/右下に進む
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右キー入力(01)内
{//(3)
if( Key[ KEY_INPUT_UP ] == 1 ) //上キー入力(02)内
{muki=2;}//右上向き
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下キー入力(04)内
{muki=3;}//右下向き
;}//(3)
else walking_flag = 0; //止まるフラグを立てる。
}//(10)
//PCの歩行
if(walking_flag==1)
{//(20)歩くフラグが立っていたら
if(muki==0) //左上向き
PC_x-=PC_SPEED_X , PC_y-=PC_SPEED_Y;
else if(muki==1)//左下向き
PC_x-=PC_SPEED_X , PC_y+=PC_SPEED_Y;
else if(muki==2)//右上向き
PC_x+=PC_SPEED_X , PC_y-=PC_SPEED_Y;
else if(muki==3)//右下向き
PC_x+=PC_SPEED_X , PC_y+=PC_SPEED_Y;
}//(20)
{//(30)
if((PC_x+PC_y)%32>= 0 && (PC_x+PC_y)%32< 8)
PC_Graph=PC_walk[muki*4];
else if((PC_x+PC_y)%32>= 8 && (PC_x+PC_y)%32<16)
PC_Graph=PC_walk[muki*4+1];
else if((PC_x+PC_y)%32>=16 && (PC_x+PC_y)%32<24)
PC_Graph=PC_walk[muki*4+2];
else if((PC_x+PC_y)%32>=24 && (PC_x+PC_y)%32<32)
PC_Graph=PC_walk[muki*4+3];
else
PC_Graph=PC_walk[muki*4];
}//(30)
//グラフィックの描画----------------------------------------------
DrawGraph( PC_x-PLAYER_SIZE_X_HALF ,
PC_y-PLAYER_SIZE_Y_HALF , PC_Graph , TRUE ) ;//PCの描画
ScreenFlip(); //作業画面をモニターに表示する
if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了
//ESCキーが押されたらループから抜ける
if(CheckHitKey(KEY_INPUT_ESCAPE)==1)break;
}
DxLib_End(); //DXLibの終了
return 0; //通常終了
}//main関数終わり
1,548ポイント を手に入れた。
|
|
|
|
|
Name: doop ..入門者(3,210ポイント)
Date: 2006/11/25(土) 23:30
No:2015
|
|
Title: Re:DXライブラリでななめ移動。
|
|
player_walk.bmpはプレイヤーの画像です。
説明しにくいので添付しました。添付したのはpng形式になってます。
#include "DxLib.h" //DXLib使用宣言
//定数
#define PLAYER_SIZE_X 78 //プレイヤーのXサイズを78にする
#define PLAYER_SIZE_Y 94 //プレイヤーのYサイズを94にする
#define PLAYER_SIZE_X_HALF PLAYER_SIZE_X/2 //プレイヤーサイズの半分
#define PLAYER_SIZE_Y_HALF PLAYER_SIZE_Y/2 //プレイヤーサイズの半分
#define PC_SPEED_X 2 //プレイヤー横移動速度
#define PC_SPEED_Y 1 //プレイヤー縦移動速度
//WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE
hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{//main関数始まり
//ウィンドウモード
ChangeWindowMode( TRUE );
//画面モードの設定(640×480の16ビットカラー)
SetGraphMode( 640 , 480 , 16 );
//(DXLibの初期化)エラー時の終了
if(DxLib_Init()==-1)return -1;
// 描画先をバックバッファにする
SetDrawScreen( DX_SCREEN_BACK ); //作業画面に設定
//透過色を設定
if(SetTransColor(0, 0, 0) == -1) //黒の原色
{return false;}
//ローカル変数の宣言
int PC_x = 320; //PC_walkのX座標
int PC_y = 224; //PC_walkのY座標
char Key[256]; //キー状態を入れる変数
int PC_Graph ; //PCの画像を入れる変数
int muki=0; //向きを示す。0左上/1左下/2右上/3右下/
int walking_flag=0; //歩いているか示す。0停止中/1歩行中/
//横4縦4つずつ分けた内の16個をPC_walkに格納する
int PC_walk[16]; //PC(左上)歩きハンドル,[ ]は配列要素数
LoadDivGraph( "player_walk.bmp" , 16 , 4 , 4 ,
PLAYER_SIZE_X , PLAYER_SIZE_Y , PC_walk ) ;
//メインループ-----------------------------------------------------------------
while(ProcessMessage()==0)
{
ClsDrawScreen(); //作業画面をクリアにする
GetHitKeyStateAll( Key ); // すべてのキーの状態を得る
//PCの向き-------------------------------------------------
if(PC_x%32==0 && PC_y%32==0){//(10)座標が32で割り切れたら入力可能
walking_flag = 1, //歩くフラグを立てる。
PC_Graph=PC_walk[muki*4];
//左上に進む/左下に進む
if( Key[ KEY_INPUT_LEFT ] == 1 ) //左キー入力(01)内
{//(0)
if( Key[ KEY_INPUT_UP ] == 1 ) //上キー入力(02)内
{muki=0;}//左上向き
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下キー入力(04)内
{muki=1;}//左下向き
}//(0)
else
//右上に進む/右下に進む
if( Key[ KEY_INPUT_RIGHT ] == 1 ) //右キー入力(01)内
{//(3)
if( Key[ KEY_INPUT_UP ] == 1 ) //上キー入力(02)内
{muki=2;}//右上向き
else if( Key[ KEY_INPUT_DOWN ] == 1 ) //下キー入力(04)内
{muki=3;}//右下向き
;}//(3)
else walking_flag = 0; //止まるフラグを立てる。
}//(10)
//PCの歩行
if(walking_flag==1)
{//(20)歩くフラグが立っていたら
if(muki==0) //左上向き
PC_x-=PC_SPEED_X , PC_y-=PC_SPEED_Y;
else if(muki==1)//左下向き
PC_x-=PC_SPEED_X , PC_y+=PC_SPEED_Y;
else if(muki==2)//右上向き
PC_x+=PC_SPEED_X , PC_y-=PC_SPEED_Y;
else if(muki==3)//右下向き
PC_x+=PC_SPEED_X , PC_y+=PC_SPEED_Y;
}//(20)
{//(30)
if((PC_x+PC_y)%32>= 0 && (PC_x+PC_y)%32< 8) // 0~ 7なら描画するのは画像1
PC_Graph=PC_walk[muki*4]; //画像は4列あるからスマートに書ける。
else if((PC_x+PC_y)%32>= 8 && (PC_x+PC_y)%32<16)// 8~15なら描画するのは画像2
PC_Graph=PC_walk[muki*4+1];
else if((PC_x+PC_y)%32>=16 && (PC_x+PC_y)%32<24)//16~23なら描画するのは画像3
PC_Graph=PC_walk[muki*4+2];
else if((PC_x+PC_y)%32>=24 && (PC_x+PC_y)%32<32)//24~31なら描画するのは画像0
PC_Graph=PC_walk[muki*4+3];
else
PC_Graph=PC_walk[muki*4]; //歩いてないなら描画するのは画像1
}//(30)
//グラフィックの描画-----------------------------------------------------------
DrawGraph( PC_x-PLAYER_SIZE_X_HALF ,
PC_y-PLAYER_SIZE_Y_HALF , PC_Graph , TRUE ) ;//PCの描画
ScreenFlip(); //作業画面をモニターに表示する
if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了
//ESCキーが押されたらループから抜ける
if(CheckHitKey(KEY_INPUT_ESCAPE)==1)break;
}//-----------------------------------------------------------------------------
DxLib_End(); //DXLibの終了
return 0; //通常終了
}//main関数終わり
1,496ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(80,502ポイント)
Date: 2006/11/25(土) 23:39
No:2018
|
|
Title: Re:DXライブラリでななめ移動。
|
|
if((PC_x+PC_y)%32>= 0 && (PC_x+PC_y)%32< 8)
ここです。
私は十字の方向にしか進まないと思ったので、両者を足し合わせています。
つまりxが増減しているときにはyは0。
yが増減している時にはxは0ですから、両者をたしあわせても、
結局どちらかの値に等しくなります。
しかし今回は同時に両方の値を増減させているので、この条件文ではいけません。
うまく、32カウントの間に4種類の動作がはいるようにしましょう。
158ポイント を手に入れた。
|
|
|
|
|
Name: doop ..入門者(3,305ポイント)
Date: 2006/11/26(日) 00:57
No:2044
| 解決!
|
Title: Re:DXライブラリでななめ移動。
|
|
なるほど!
常にX,Yともに動いているわけですから
if((PC_y)%32>= 0 && (PC_y)%32< 8)
PC_Graph=PC_walk[muki*4];
yのみにしてみたら上手く動きました。
おかげで意外に簡単にできました。
有り難うございました。
95ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(84,492ポイント)
Date: 2006/11/26(日) 01:44
No:2049
|
|
Title: Re:DXライブラリでななめ移動。
|
|
そうですね。Yは1ずつ動いているので、この条件文なら問題ないと思います。
ただゲームプログラミングの館のサンプルプログラムはとにかく「わかりやすく」に重点を置いたもので、
無駄な処理をしようが、重複しようが、とにかくわかりやすく書こうとして書いたものです。
ですから詳しくなってから同じサンプルを考えたらなんとも無駄な処理をしていることが多いので、
ある程度理解したら自分なりにスマートなプログラムになるようにしたほうがよいかと思います。
複雑なループ、複雑な再帰、深いネスト・・
これらを繰り返せばいくらでもスマートになりますが、
相手になかなか伝わりにくくなりますからね。
解決なさったようでよかったです。
これからもDXライブラリを楽しんでくださいね☆(作ったわけでもない人間がいうのもなんですが・・)
258ポイント を手に入れた。
|
|
|
|
Name: 宿題で困ってます。 ..入門者(3,716ポイント)
Date: 2006/11/25(土) 11:19
No:1986
|
|
Title: 文字列についての質問なんですが。
|
|
文字列の処理というのは、どうも苦手でだめです。
シェルのようなことができるプログラムをしたいと思っているんですが。
printf("% "); /*シェルっぽさをだすためです*/
gets(ss);
に対して、
abc | def
と打ち込んだときに
s1=abc
s2=def
という風に二つの文字の配列にわけたいのですが、どのようにすればいいでしょうか?(ss, s1, s2はchar型ということで)
できれば
abcd | efgh
s1=abcd
s2=efgh
のように空白の数に関係なく,対応できるようにしたいのですが。
よろしくお願いします。
2倍のポイントを手に入れた! 374ポイント を手に入れた。
|
|
|
|
Name: box ..初心者(5,628ポイント)
Date: 2006/11/25(土) 12:23
No:1987
|
|
Title: Re:文字列についての質問なんですが。
|
|
strtok関数について調べてみると、
よい結果を得るかもしれません。
28ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(25,742ポイント)
Date: 2006/11/25(土) 19:21
No:1999
|
|
Title: Re:文字列についての質問なんですが。
|
|
標準Cでやろうとするなら、boxさんの書かれているとおり strtokを使って処理を薦めていくのがいいと思います。
ただ、シェルと同じような動作をさせたいのなら、空白の問題は分けて考えた方がいいでしょう。
なぜなら空白処理は単純に空白を見つけたら、区切るというのではうまくいかないからです。
例えば、シェルでは
mkdir 'a b'
とか
mkdir "a b"
のように "や 'で囲った中の空白は1つのまとまりと見なすように処理しなければなりません。
なので、最初に '|'で区切った後、それぞれの文字列に対して先頭のスペースを読み飛ばしてあげるといいでしょう。
// スペースやタブを読み飛ばす関数
const char *SkipSpace(const char *p)
{
if(p)
{
while(*p == ' ' || *p == '\t')
++p;
}
return p;
}
int main(void)
{
printf("> %s\n", SkipSpace(" aaa"));
printf("> %s\n", SkipSpace(" bbb"));
return 0;
}
342ポイント を手に入れた。
|
|
|
|
Name: * ..ぴよぴよ(142ポイント)
Date: 2006/11/24(金) 18:17
No:1976
|
|
Title: DXライブラリでウインドウモードに変更できない
|
|
初めまして。
最近ゲームプログラミングの館を知って、
この度DXライブラリを導入させて頂きました。
そこで色々テストをしていたのですが、
どうもウインドウモードに変更すると毎回エラーが起きるようで、
プログラムが実行されません。
フルスクリーンモードだとエラーは起きません。
できればウインドウモードでプログラムを動作させたいのですが、
どうすればいいでしょうか?
コンパイラはBorlandC++です。よろしくお願いします。
142ポイント を手に入れた。
|
|
|
|
Name: Justy ..プログラマー(25,391ポイント)
Date: 2006/11/25(土) 00:15
No:1977
|
|
Title: Re:DXライブラリでウインドウモードに変更できない
|
|
正直これだけでの情報ではさっぱりわかりません。
・ ボーランドC++コンパイラ(BCC)のバージョンは?
・ 使用している DxLibは BCC用?
・ どんなコードを実行している?
・ エラーとは具体的に何?
せめてこれだけ情報がないと、判断が難しいです。
可能性が高そうなのは DxLibが BCC用ではないのではないか、ってことくらいです。
2倍のポイントを手に入れた! 184ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(79,186ポイント)
Date: 2006/11/25(土) 00:40
No:1978
|
|
Title: Re:DXライブラリでウインドウモードに変更できない
|
|
こんにちは。*さん。
えぇと、質問内容ですが、回答に関して、せめてエラーメッセージだけでも教えていただけないでしょうか。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
こちらを実行しても、表示できませんか?
どのようにメッセージが表示されるでしょうか。
209ポイント を手に入れた。
|
|
|
|
|
Name: * ..ぴよぴよ(432ポイント)
Date: 2006/11/25(土) 00:48
No:1980
|
|
Title: Re:DXライブラリでウインドウモードに変更できない
|
|
BorlandC++のバージョンは5.5で、
ライブラリはちゃんとBorlandC++用をダウンロードしました。
ソースコードは以下です。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
WaitKey() ; // キーの入力待ち(『WaitKey』を使用)
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了
このウインドウモードに変更する部分で何らかのエラーが起きているようで、
実行してもウインドウが表示されずにプログラムが終了してしまいます。
290ポイント を手に入れた。
|
|
|
|
|
Name: * ..ぴよぴよ(463ポイント)
Date: 2006/11/25(土) 00:50
No:1981
|
|
Title: Re:DXライブラリでウインドウモードに変更できない
|
|
すいません、少しかぶってしまいました。
エラーメッセージが表示されるというわけではなく、
ライブラリの初期化に失敗してプログラムが終了してしまうようです。
伝え方が悪くて申し訳ございません。
31ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(25,400ポイント)
Date: 2006/11/25(土) 01:45
No:1982
|
|
Title: Re:DXライブラリでウインドウモードに変更できない
|
|
なるほどなるほど。状況は大体判りました。
プロジェクトと同じディレクトリがどこかに "Log.txt"というファイルはありませんか?
もしあったらエディターで開いてみてください。
DxLibの処理がどこまで進んでいるかが書かれています。
その最後の数行を教えてもらえれば、何が問題なのかがわかると思います。
9ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(80,276ポイント)
Date: 2006/11/25(土) 02:58
No:1983
|
|
Title: Re:DXライブラリでウインドウモードに変更できない
|
|
遅くなってすみません。
一つだけ確認させてください。
実行した時にマウスか、キーボード何かおされていませんか?
何かおされていたら終了する関数を最後に書いてあるので、何かおしていると、そのまま終了してしまいます。
そうでない場合、
初期化に失敗するということは、初期化する前にウィンドウ表示に変更する関数を呼んでいるせいかもしれません。
ここのとこを
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化
いれかえて
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
こんな感じで、初期化を先にしてみてください。
そうすることで、解決できるかもしれません。
ウィンドウモードに変更する関数を後に書くと、一度全画面表示になってからウィンドウに切り替わるので少々時間が(3〜5秒程度)かかると思います。
試してみてください。
それでもだめでしたら、本家で聞いてみたほうがいいかもしれません。
DXライブラリを作成した方のHPはこちらで、
http://homepage2.nifty.com/natupaji/DxLib/
対応も親切です。
ただお忙しいようで、回答が4,5日後になることもよくありますので、これからの参考程度に。
2倍のポイントを手に入れた! 1,020ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(80,338ポイント)
Date: 2006/11/25(土) 03:01
No:1984
|
|
Title: Re:DXライブラリでウインドウモードに変更できない
|
|
ゲームプログラミングの館はまだ作ったばかりで、私の環境でうまくいくソースしか載っていません。
ですので、他の環境でうまくいかない処理の書き方があれば、教えていただけたら光栄です。
上記の変更でどのようになったか、また教えてください^^
62ポイント を手に入れた。
|
|
|
|
|
Name: * ..ぴよぴよ(662ポイント)
Date: 2006/11/25(土) 09:51
No:1985
| 解決!
|
Title: Re:DXライブラリでウインドウモードに変更できない
|
|
Log.txt…そういえばあったなーと思って開いてみました。
0:DXライブラリは24ビットカラーモードに対応していません
こんな簡単なことだったんですね。
画面のプロパティで24ビットから16ビットに変更すると、
正常に動作しました。
どうもありがとうございました。
ちなみに初期化を先にしてウインドウモードに変更すると、
一瞬ウインドウが表示されましたが、
プログラムに何か処理が書いてあっても何もせず終了しました。
199ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(78,738ポイント)
Date: 2006/11/23(木) 06:15
No:1969
|
|
Title: 管理人の独り言
|
|
最近バイトを頑張ってたので、前からずっと欲しかったムービーカメラを買いました!!
http://www.sanyo-dsc.com/products/lineup/dmx_c6/index.html
動画が好きな私には、デジカメ買うのはちょっと・・。
しかしビデオカメラを買うには高いし形も好きじゃない・・。
そんな私にぴったりのムービーカメラ!
まだ商品は到着してないのですが、ずっと欲しかった商品を注文して楽しみに待ってるところです♪
商品が届いたらバイクにそなえつけて、あちこち撮りまくってやる!
しかしどうやったらバイクにくっつくんだろ・・。
サスペンションとかにくくりつけたら振動で映像がガタガタになってしまいそう・・。それならいっそのことヘルメットにくくりつけるか!
う〜ん、どうしたら一番いいんでしょうねぇ。風対策もしないと風切る音でうるさくなってしまいそう・・。
。.:*・゜☆.。.:*・゜☆.。.:*・゜☆.。.:*
ちょっと前からおこずかいになればと思って始めたパソコン販売。
よく考えたらヤフオクで売るだけでもこれも立派な商売?
って事は確定申告しないといけないのかな?
消費税は年間売り上げが1000万以上になったらしないといけないみたいだけど。
ヤフオクで出品している人は日本中何十万人何百万人いると思うけど、みんな確定申告しているとは思えないし・・
いったいどの辺から義務付けられるんでしょう。
・・と最近疑問に思いました。
どうなんでしょうねぇ?
568ポイント を手に入れた。
|
|
|
|
Name: 太陽に吠えろ ..ぴよぴよ(170ポイント)
Date: 2006/11/23(木) 06:30
No:1970
|
|
Title: Re:管理人の独り言
|
|
ものすごいご無沙汰です。
管理人さん、見つけましたぞ。mixiで!
C言語関係のコミュから偶然に。最初管理人さんのとこだと思いませんでしたわ(汗)
すばらしいホームページになっていらっしゃいますな。
掲示板もとても見やすいし、黒が基調になっている!
ゲームプログラムの館拝見しましたが、すごいボリュームですな!
アクセスも1日千近くにまで増えてらっしゃいますし。
これからも頑張ってください。
突然で失礼しました。
170ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(79,102ポイント)
Date: 2006/11/23(木) 06:41
No:1971
|
|
Title: Re:管理人の独り言
|
|
お〜〜〜!!!
太陽に吠えろさん!お久しぶりです^^
相変わらずASAGATA生活スタイルはお変わりない様で^^;
私は最近ASAGATAスタイルになっているので体がだるくてしかたがないです・・。
それとmixiのページはわざとまぎらわしくしてありますので気になさいませんようf^^;
>掲示板もとても見やすいし、黒が基調になっている!
掲示板今のにしたの結構前です^^;
プログラムのソースとか投稿することが多いんで、前みたいな掲示板だとずっと下に記事が下りてしまって
みにくくなってたんですよ。
ですから現在のようなトピ型にしました^^
ゲームプログラミングの館、見ていただいたんですね☆
ありがとうございます。サボリガチですが、これからも頑張ります^^;
>アクセスも1日千近くにまで増えてらっしゃいますし。
一番多い時で1600って時あったんですよ。少ない時は700~800位でしょうか?
この波の差はなんなんでしょう(?_?)
教えてgooなんか眺めていると、時々、ここのサイトが紹介されてるんで、そういう記事を見るとうれしいです♪
でも、記事に「丸投げするならこういうサイトにしてください」って書いてあり、ここが紹介されていました。
別にそういうサイトじゃないんだけどな^^;
ちょっと複雑な気分です;
そういう風にアクセスの多い場所にリンクが張られた日にアクセスが増えてるんでしょうかね〜??
太陽に吠えろさんも、また気軽にきてくださいね〜^^
364ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..中級者(9,252ポイント)
Date: 2006/11/23(木) 18:48
No:1973
|
|
Title: Re:管理人の独り言
|
|
おぉ、このビデオカメラすごいっすねぇ
600万画素もあるんですかぁ!!
バイクに装着するのは難しそうですねぇ。
落としたら大変ですね^^
30ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(78,977ポイント)
Date: 2006/11/24(金) 00:39
No:1974
|
|
Title: Re:管理人の独り言
|
|
1200万画素のカメラもあったんですけど、最近すごいですね。
一千万超えるとか・・。
モニタが1200*1000だから120万画素あったらそれ以上表示できないし、結局実際は120万画素以上いらないんですよね^^;
そして今日商品が届きました!
色々とったムービーでもアップロードしようかと思います^^
125ポイント を落としてしまった。
|
|
|
|
|
Name: ぽん太 ..中級者(9,304ポイント)
Date: 2006/11/24(金) 15:42
No:1975
|
|
Title: Re:管理人の独り言
|
|
おめでとうございます〜!!
電化製品ってなんかわくわくしますよね^^
ぜひぜひムービーおねがいいたします☆
期待してますね(^○^)
52ポイント を手に入れた。
|
|
|
|
Name: ぽん太 ..中級者(9,162ポイント)
Date: 2006/11/22(水) 20:40
No:1962
|
|
Title: 無題
|
|
デスクトップのアイコンを消したいときはどうしたらいいですか??削除をするとショートカットだけ消せるものもあるようなのですが先日、誤ってペイントを消失してしまいました・・・(TT)
62ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(77,737ポイント)
Date: 2006/11/22(水) 23:11
No:1966
|
|
Title: Re:無題
|
|
消したい時はどうしたらいいかという質問ですか??
誤って消してしまいました・・という記述から、復活させたいのかとも取れますが^^;
デスクトップのアイコンを消す時は、選択してデリート押せば消せます。
ショートカットのみを消さずに、パソコンから完全に消したい時は、コントロールパネルから「プログラムの追加と削除」へ行き、そのソフトを削除してください。
誤って消してしまったショートカットは右クリックで戻せます。
スタート>全てのプログラム>アクセサリ>ペイント
でペイントを選択中右クリックで「送る」>「デスクトップ」とすればデスクトップにアイコンが表示されますよ。
何のアイコンでも同じ方法で、右クリックからショートカットが作れます。
>デスクトップのアイコンを消したいときはどうしたらいいですか??
単に消す時は普通にデリートで消せますけど、それじゃだめなんですか?
303ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..中級者(9,222ポイント)
Date: 2006/11/23(木) 18:45
No:1972
| 解決!
|
Title: Re:無題
|
|
ありがとうございますぅ!
解決しましたぁ☆
ペイントが消えたんでひやひやしました^^;
30ポイント を手に入れた。
|
|
|
|
Name: シュガ ..ぴよぴよ(66ポイント)
Date: 2006/11/21(火) 23:13
No:1945
|
|
Title: C言語を中心に、ゲームプログラミングを進めたいのですが
|
|
初めまして。
今、学校の課題研究としてゲーム作成支援言語、
及びその言語を使用するエディタの開発を進めています。
まぁ、言語の開発とはいっても、大したものではなく、
「なでしこ」や「HSP」のような感じのものなのですが…。
現在、コンパイラを実装したエディタ部分の製作と、
主にRPGの作成に使われるプログラミングの勉強をしています。
私はプログラミングの勉強中なのですが、
参考書を買おうにも、
どれもVisualStudio.NETの必要な環境であったり、
複雑なようでなかなか決められません。
C言語、且つゲーム(RPG、落ちモノ等)のプログラミングの参考書でいいものはないでしょうか?
サンプルソースが載っているようなやつがいいのですが…。
残り、2ヶ月も無いので、非常に焦っています…(・ω・`)
66ポイント を手に入れた。
|
|
|
|
Name: バグ ..中級者(13,367ポイント)
Date: 2006/11/22(水) 00:19
No:1946
|
|
Title: Re:C言語を中心に、ゲームプログラミングを進めたいのですが
|
|
落ち物ならば、私が作ったカラードロップでよければ、このサイトでソース付きの状態でダウンロードできますよ(^-^)
私自身が初心者なので、基本的な事しかしていないので、分かりやすいのではないかと思われます(苦笑)
55ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..プログラマー(25,207ポイント)
Date: 2006/11/22(水) 02:26
No:1948
|
|
Title: Re:C言語を中心に、ゲームプログラミングを進めたいのですが
|
|
言語を使用するエディタの開発ですか。
それはまた結構大変ですね。
※ シナリオエディタとか、イベントエディタなら判りますが、言語用のエディタってどんな機能を持っているんでしょうか?
>C言語、且つゲーム(RPG、落ちモノ等)のプログラミングの参考書でいいものはないでしょうか?
とりあえずここはチェックしてみるといいでしょう。
ttp://www.c3.club.kyutech.ac.jp/~sukiyaki/index.php
書籍だと今はいろいろ出ています。いいものかどうかは判りませんが。
Amazon.co.jp: ロールプレイングゲームプログラミング
ttp://www.amazon.co.jp/gp/product/4797316802/
Amazon.co.jp: 3DRPGプログラミング
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797330465/
Amazon.co.jp: 猫でもわかるゲームプログラミング
ttp://www.amazon.co.jp/gp/product/4797333332/
Amazon.co.jp: ゲームエンジンプログラミング GAME DEVELOPER
ttp://www.amazon.co.jp/gp/product/4797331976/
Amazon.co.jp: シューティングゲーム プログラミング
ttp://www.amazon.co.jp/gp/product/4797337214/
Amazon.co.jp: シューティングゲームアルゴリズムマニアックス
ttp://www.amazon.co.jp/gp/product/4797327316/
Amazon.co.jp: ゲームのアルゴリズム 思考ルーチンと物理シミュレーション
ttp://www.amazon.co.jp/gp/product/4797335955/
Amazon.co.jp: アドベンチャーゲームプログラミング: 本: 坂本 千尋
ttp://www.amazon.co.jp/gp/product/4797320273/
Amazon.co.jp: はじめての3Dゲーム開発
ttp://www.amazon.co.jp/gp/product/4777511111/
401ポイント を手に入れた。
|
|
|
|
|
Name: シュガ ..ぴよぴよ(387ポイント)
Date: 2006/11/22(水) 22:54
No:1965
|
|
Title: Re:C言語を中心に、ゲームプログラミングを進めたいのですが
|
|
色々言葉や説明が足りなくて申し訳ありません(・ω・`)
エディタとはいっても凄い手の込んだものではなく、
ただコンパイラを搭載したメモ帳のような感じなのです。
ちなみに、学校の環境(VisualStudio.NET)でエディタ部分の作成してします。
そんでもって、エディタで使用するコンパイラはボーランドです。
ゲームプログラムはあくまで、エディタを作る際の参考といいますか…。
言語を作る、とはいっても簡単に、関数のようなイメージであります。
あまり、言語と呼ぶには相応しくないですが…。
その為の参考資料、言語の元になる部分として、ゲームプログラミングもしないと駄目じゃないか、となったので。
親切なアドバイス、ありがとうございます。
早速参考資料のほう探してみますね。
また来ます(笑
321ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(78,170ポイント)
Date: 2006/11/22(水) 23:21
No:1967
|
|
Title: Re:C言語を中心に、ゲームプログラミングを進めたいのですが
|
|
ということは、言語を作るというよりライブラリを作成されるということでしょうか?
ゲームプログラムを作ってみるとなると、C言語では何かのライブラリを使用することになると思うのですが・・。
ご自分でその関数を作ってしまう場合をのぞいて、Direct系やOpenGLなどを使うことになるんじゃないでしょうか?
コンソール画面で作るんならstdio.hだけでも出来るかもしれませんが、そこまで本格的なものでしたらそうではないと思いますし。
行おうとしていることがいまいちつかめないのですが、
私の考える限りでは、DirectやOpenGLなどのライブラリを使用すればゲームプログラムに必要な環境はそろいます。
書籍の紹介は上記でされているので、それ以外で。
2Dプログラムでいいから、ささっと作りたいというのでしたら、当サイトのゲームプログラミングの館でも紹介しているDXライブラリを使用されたりしてみてはいかがでしょうか。
私はいつも我流で作っているのでプロのゲームプログラムは存じないのですが、仕様書作りから始めるとかなり時間がかかると思います。
もし、小規模なものを一人で簡単なものだけ作るというのでしたらゲームプログラミングの館を元に、ご自分でアレンジしてみてはと思います。
433ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..中級者(13,425ポイント)
Date: 2006/11/22(水) 23:54
No:1968
|
|
Title: Re:C言語を中心に、ゲームプログラミングを進めたいのですが
|
|
ようするに、VS.NETを利用して、総合開発環境を作りたい、そのコンパイラはBCCを使用します…という事ではないですか?
言語開発というよりは、ライブラリ作成っぽいように感じますね(^-^)
58ポイント を手に入れた。
|
|
|
|
Name: ぽん太 ..初心者(8,951ポイント)
Date: 2006/11/22(水) 15:49
No:1954
|
|
Title: 無題
|
|
師匠、ご無沙汰ですm(__)m
ちょっと聞きたいことがあります。
Windows用LaTeX2εが欲しいんですが
フリーソフトありますか?
Vectorとか見たんですけど英語のやつでよくわかんなくて^^;
93ポイント を手に入れた。
|
|
|
|
Name: ぽん太 ..中級者(9,100ポイント)
Date: 2006/11/22(水) 19:37
No:1960
|
|
Title: Re:無題
|
|
師匠、わざわざすみません〜m(__)m
助かりますぅ!
ナガタさん、例のサイトからダウンロードしてみました!
Ghostscript
Ghostgum
dviout
の3つがインストールされた模様です!
大初心者なんで全然わからないのですがtexファイルからdviファイルを生成するにはどうしたらよいのですか??学校ではplatexコマンドを用いているのですが。
149ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..中級者(9,192ポイント)
Date: 2006/11/22(水) 20:47
No:1964
| 解決!
|
Title: Re:無題
|
|
できましたーー;;
ありがとうございますぅ〜〜;;
愛用させてもらいます☆
30ポイント を手に入れた。
|
|
|
|
Name: MIMU ..ぴよぴよ(124ポイント)
Date: 2006/11/22(水) 15:57
No:1955
|
|
Title: 実行の画面で計算し終わりません
|
|
誤差関数(BOXMULLER)を含め、さらにfor文で回すと計算し終わりません。
ビルトはできます。
51回、回したいのに、38回までしか計算できず、いつまでも
press any key to continue
の文が出てきません。
誤差関数を含めないと、ちゃんと計算してくれます。
この1文が出てこないことの共通の問題点て、何かあるんでしょうか?
124ポイント を手に入れた。
|
|
|
|
Name: keichan ..入門者(4,763ポイント)
Date: 2006/11/22(水) 16:12
No:1956
|
|
Title: Re:実行の画面で計算し終わりません
|
|
可能性1:
39回目以降の誤差関数内での処理が膨大で処理が帰ってきていない。
可能性2:
呼び出し元のコードでおかしなことをしている
可能であれば、呼び出し元の該当ソースコードと誤差関数のコードを載せれば具体的なアドバイスが出来るかもしれません。
99ポイント を手に入れた。
|
|
|
|
Name: 美香 ..ぴよぴよ(268ポイント)
Date: 2006/11/22(水) 00:37
No:1947
|
|
Title: 課題で困っています。助けてください。
|
|
2分木を「深さ優先探索」する。以下のプログラムを完成させなさい。
関数dfs( )で、訪問した頂点の値を表示する。
-------------------ここから--------------------
#include
typedef struct {
int key;
int left;
int right;
} BT;
int main( void )
{
BT a[ 7 ] = {
{ 10, 1 , 2 },
{ 20, 3 , 4 },
{ 30, 5 , 6 },
{ 40, -1 , -1 },
{ 50, -1 , -1 },
{ 60, -1 , -1 },
{ 70, -1 , -1 }
};
dfs(a, 0);
}
int dfs(
printf("
268ポイント を手に入れた。
|
|
|
|
Name: box ..初心者(5,600ポイント)
Date: 2006/11/22(水) 05:11
No:1950
|
|
Title: Re:課題で困っています。助けてください。
|
|
二分木は再帰的なデータ構造です。
構造体定義の例は、こんな感じです。
typedef struct _binary {
int key;
struct _binary *left;
struct _binary *right;
} binary;
で、今回は10〜70のデータを二分木に登録するのですか?
データが昇順にソートしてあると、右側の子だけに
データを登録することになります。これでは普通の
線形リストと何ら変わりませんね。
データがソートされてなくてバラバラな方が、
いかにも「二分木を使っているぞ」という雰囲気を
味わえると思いますが…。
235ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(77,282ポイント)
Date: 2006/11/22(水) 05:51
No:1953
|
|
Title: Re:課題で困っています。助けてください。
|
|
2分木の格納と表示はこんな感じで出来ます。
構造体はboxさんのおっしゃったように
typedef struct _binary { // 2分木のデータ構造
int key; // 節(データ)
struct _binary *left; // 根=root 左の枝の節の番地
struct _binary *right; // 右の枝の節の番地
}binary_t;
binary_t root = {0, &root, &root}; // 最初の節の番地
こんな感じです。
tree_insert()で登録、
tree_print()で表示
を行っています。
#include <stdio.h>
#include <stdlib.h>
typedef struct _binary { // 2分木のデータ構造
int key; // 節(データ)
struct _binary *left; // 根=root 左の枝の節の番地
struct _binary *right; // 右の枝の節の番地
}binary_t;
binary_t root = {0, &root, &root}; // 最初の節の番地
int tree_insert(int num) // 2分木構造に格納する
{
binary_t *pp, *newn;
pp = &root; // ルートの番地を格納
if(pp->left == &root || pp->right == &root){ // 最初のデータ格納
pp->key = num;//渡された値をkeyに
pp->left = NULL;
pp->right = NULL;
return(1);
}
// 領域確保(新しい節を作成)
if((newn = (binary_t *)malloc(sizeof(binary_t))) == NULL){
printf("領域を確保できません\n");
exit(1);
}
while(pp->key != num){ // 枝をたどって節を探す
if(num < pp->key){
if(pp->left == NULL){
pp->left = newn;
break;
}
pp = pp->left; // 次の節を探す
}else{
if(pp->right == NULL){
pp->right = newn;
break;
}
pp = pp->right; // 次の節を探す
}
}
if(pp->key == num){ // 登録済み
free(newn); // 領域開放
return(0);
}
newn->key = num; // 新しい節にデータを登録
newn->left = NULL;
newn->right = NULL;
return(1);
}
void tree_print(binary_t *p)
{
static int depth = 0;
if(p->right != NULL){
++depth;
tree_print(p->right);
--depth;
}
printf("%*c%d\n", 5 * depth, ' ', p->key);
if(p->left != NULL){
++depth;
tree_print(p->left);
--depth;
}
}
void main(void)
{
int i, n, ndata[] = { 5, 6, 4, 2, 1, 2, 9, 0, 3 };
n=sizeof(ndata)/sizeof(ndata[0]);
for(i = 0; i < n; ++i){
tree_insert(ndata[i]);
}
tree_print(&root);
}
この辺を参考にされたらと思います。
http://www005.upp.so-net.ne.jp/h-masuda/cl/CAlgo/btree01.html
1,027ポイント を手に入れた。
|
|
|
|
Name: 霰 ..ぴよぴよ(233ポイント)
Date: 2006/11/21(火) 21:50
No:1941
|
|
Title: 課題で困ってます
|
|
学校で
要素数10の整数型1次元配列mに整数値を代入し、その平均値を求めて表示するプログラムを作成してみましょう。ただし、配列の中身は、scanfを用いて、外部から入力させるものとします。
という課題が出されました。
#include <stdio.h>
int main()
{
int i;
int m[10];
for(i=0;i<10;i++){
printf("m[%d]=%d\n",i,m[i]);
scanf("%d",&m[i]);
}
sum+=m[i];
ave=sum/i;
printf("それらの平均は%dです\n",ave);
return 0;
}
私的にやってみたのですが、答えがうまく出せません。どなたか間違いを指摘してください。おねがいします。
233ポイント を手に入れた。
|
|
|
|
Name: box ..初心者(5,343ポイント)
Date: 2006/11/21(火) 22:01
No:1942
|
|
Title: Re:課題で困ってます
|
|
合計を格納するsumと、平均値を格納するaveの宣言がありません。
sumはint型でかまいません。必ず、ゼロに初期化しておいてください。
aveは小数点以下を含む場合がありますので、double型にしてください。
aveを出力するprintf中の書式文字列は、%dではなく%fにしてください。
また、forループの中のprintfは、
printf("%d個目の値=", i + 1);
あたりにしておくとよいでしょう。m[i]への入力前にその値を
出力することには意味がありません。中身は一般的にゴミですので。
2倍のポイントを手に入れた! 144ポイント を手に入れた。
|
|
|
|
|
Name: box ..初心者(5,365ポイント)
Date: 2006/11/21(火) 22:08
No:1943
|
|
Title: Re:課題で困ってます
|
|
肝心な点が抜けていました。
sumに足し込むところはforループの中に入れてください。
また、aveの計算時は、
ave = (double) sum / i;
のように、右辺の計算をdouble型で行なってください。
そうしないと、sum / i の小数点以下の値を切り捨てた結果が
aveに入ってしまいます。
以上をふまえたサンプルです。
↓
#include <stdio.h>
int main(void)
{
int i, m[10], sum;
double ave;
for (sum = i = 0; i < 10; i++) {
printf("%d個目の値=", i + 1);
scanf("%d", &m[i]);
sum += m[i];
}
ave = (double) sum / i;
printf("それらの平均は%fです\n", ave);
return 0;
}
22ポイント を手に入れた。
|
|
|
|
|
Name: 霰 ..ぴよぴよ(291ポイント)
Date: 2006/11/21(火) 22:38
No:1944
| 解決!
|
Title: Re:課題で困ってます
|
|
脱初心者さん素早いご返事ありがとうございます。さっそく指摘どおりやってみるとできました。馬鹿な私ですがこれからもお願いします
58ポイント を手に入れた。
|
|
|
|
Name: 課題で困っています。 ..ぴよぴよ(85ポイント)
Date: 2006/11/19(日) 09:21
No:1929
|
|
Title: 成績処理プログラム
|
|
・キーボードから n (1 <= n <= 50) 人分の得点(整数)を入力する.
・得点は0点以上100点以下とし,範囲外なら再入力させる.
・全員分入力が完了したら,平均点を求め,小数点以下1桁で表示する.
・各個人について,得点,平均点との差,および判定を表示する.
・判定は,80点以上を優,80点未満70点以上を良,
70点未満60点以上を可,60点未満を不可とする.
85ポイント を手に入れた。
|
|
|
|
Name: 通りすがり ..ぴよぴよ(386ポイント)
Date: 2006/11/19(日) 09:48
No:1930
|
|
Title: Re:成績処理プログラム
|
|
#include <stdio.h>
int InputData(int *list)
{
int i;
char temp[16];
puts(" Dataを入力(\"-1\"で終了)");
for(i = 0; i < 50; i ++){
printf(" Data %2d : ", i + 1);
fgets(temp, 16, stdin);
sscanf(temp, "%d", &list[i]);
if(list[i] == -1) break;
else if(list[i] < -1 || 100 < list[i]){
puts(" 再入力");
i --;
continue;
}
}
return i;
}
float Sum(int *list, int listnum)
{
float sum = 0;
int i;
for(i = 0; i < listnum; i ++){
sum += list[i];
}
return sum;
}
int Judge(int data)
{
return ((data >= 60) + (data >= 70) + (data >= 80));
}
void PrintData(int *list, int listnum)
{
char *mark[] = {"不可", " 可 ", " 良 ", " 優 ",};
float average;
int i;
average = Sum(list, listnum) / listnum;
printf("\n 平均 : %.1f\n", average);
for(i = 0; i < listnum; i ++){
printf(" %2d %3d %5.1f", i + 1, list[i], list[i] - average);
printf(" %s\n", mark[Judge(list[i])]);
}
return;
}
int main(void)
{
int list[50] = {0,};
int listnum;
if(!(listnum = InputData(list))){
puts("Dataがありません");
return 0;
}
PrintData(list, listnum);
return 0;
}
386ポイント を手に入れた。
|
|
|
|
|
Name: たつにい [URL] ..ぴよぴよ(294ポイント)
Date: 2006/11/19(日) 10:21
No:1931
|
|
Title: Re:成績処理プログラム
|
|
はじめまして、初めてココに書き込むたつにいと申します〜
ええっと、課題って事なので答えのソースを丸々書いたりはしませんが、ソースの流れを書いてみます。
準備する変数は・・・
人数nを格納する変数、
平均点計算用変数、
平均点格納用変数、
人数分の得点を格納する配列(人数の上限が50人なので50個の配列)です。
配列のかわりにポインタ変数を一つ作って人数を元にmallokでメモリ確保するのも勿論良いです(freeを忘れると悲惨ですが…)
>・キーボードから n (1 <= n <= 50) 人分の得点(整数)を入力する.
>・得点は0点以上100点以下とし,範囲外なら再入力させる.
ココはそれぞれループを作り、scanfでデータを受け取り、if分岐で範囲チェックをして、trueならbreak、falseなら再入力でいけますね。
余談ですが、scanfは整数以外の数値も受け取りますが、型が違えばインプットエラーを起こしますので、こんなふうに関数化すると親切なプログラムになります。
↓ScanData(整数の入力を受け取る関数)
http://www1.dnet.gr.jp/~hakka17/dat/ScanData.txt
>・全員分入力が完了したら,平均点を求め,小数点以下1桁で表示する.
小数点を使うなら変数の型はfloatかdoubleですね(floatで十分です)
ただ、今回は小数点以下1桁だけなので整数変数を計算時に10倍にして、表示時に十分の一にするという荒業でもOKです(小数点計算は処理が重いので、ゲームプログラムでの高速化でよく使われる手法です)
平均は人数分ループして計算用変数に各個人の点数を足していき、全部足し終えたら、その人数分で割れば良いだけですよ(計算用変数のゼロクリアを忘れずにね)
平均点の表示はfloat型を使ったのなら普通にprintfで小数点第一位まで表示すればOK、荒業を使ったなら型キャストするなりの工夫が必要です(まぁ、コレくらいの計算プログラムなら荒業を使うまでも無いですので、難しそうなら普通にfloatで行きましょう)
>・各個人について,得点,平均点との差,および判定を表示する.
ココは結果を表示するだけなので難なく出来るでしょう。
>・判定は,80点以上を優,80点未満70点以上を良,
70点未満60点以上を可,60点未満を不可とする.
if、else if、if、else if………
って感じで条件式を付けていってそれぞれprintfで「優」「良」「可」「不可」って表示しましょう。
勿論人数分ループしてですよ。
以上です。
駄文ながら失礼しました。
お役に立てたなら幸いです。
294ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..中級者(13,312ポイント)
Date: 2006/11/19(日) 15:30
No:1932
|
|
Title: Re:成績処理プログラム
|
|
以前ここの掲示板で、非常に良く似た質問に答えたような気がします(;^_^A
まだ、過去ログに残っているかもしれませんよ(^-^)
47ポイント を手に入れた。
|
|
|
|
|
Name: なぎ ..初心者(8,604ポイント)
Date: 2006/11/20(月) 16:57
No:1935
|
|
Title: 細かな情報です>Re:成績処理プログラム
|
|
質問への直接的な回答ではありませんが。
・パソコンレベル以上のCで、浮動小数点を使う際は、double がおすすめです。flaot を使う必要はほとんどありません。
これは、
1)Cの標準関数のうち、浮動小数点を扱うものの引数・返値は(float ではなく)double である。
2)小数点を伴った定数リテラル(0.1 とか 10.0 とか)の型は(float ではなく) double である。
3)可変引数関数(printf() など)に float が渡されるとき、暗黙のうちに、double に変換される(だから、printf() の書式して文字列に、"%lf" はない。scanf() は、ポインタ経由なので、double の場合は、"%lf")
4)おまけ。現在のプロセッサにおける浮動小数点の標準データ長は、double。そのため、float の計算は double より、速くはならない。
こんなところでしょうか。
・既に回答にあるように、いきなり scanf() ではなく、gets/fgets で1行を丸ごと読み込んで、sscanf() で必要な型に置き換えるのは、よく使われる手法です。
これは、scanf() で、指定した型と入力した型が異なった場合などエラーリカバリができないケースが多いので、これに対応したものです。あと、gets() に対して、fgest() は、最大入力文字数が指定できるので、より安全です。
ただ、この場合だと、sscanf() の返値をチェックする必要があります。入力が(数値を仮定しているにもかかわらず)も時だったりした場合に、sscanf() に失敗して、たまたま変数に残っているゴミが、それらしい値になってしまっていることがあります。
sscaf()(scanf() も)の返値は、正しく変換できたデータの数を返すので、数値を仮定しているにもかかわらず、入力が aa とかだと、返値=0(変換に失敗した)となります。
・複数の条件を if と else の組み合わせで調べる場合には、
if()
{ .... }
else if()
{ .... }
else if()
{ .... }
else if()
{ .... }
else
{ .... }
という記述を使うと、見かけ上 if() のネストを少なくすることができます。(else のあとに、if() しかない場合限定)
直接の情報ではありませんが。
857ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..上級者(24,806ポイント)
Date: 2006/11/20(月) 23:47
No:1940
|
|
Title: Re:float vs double
|
|
実際のところ、floatと doubleどちらを使ったらいいのかは環境と状況に依存します。
例えばレジスタ上での演算のみを考えたとき、最近のインテル系とか PowerPC系とかなら doubleの方がいいのかもしれませんが、MIPS系などの一部の単精度浮動小数レジスタしかない CPUでは floatの計算は普通に出来ますが、doubleの計算は double型演算ライブラリを使ってソフトウェアで計算しますので、激重になります。
うっかり数値に .fを付け忘れたりすると余計な変換が入って大変な事になります。
(大抵そういう場合、float=double=4byteになるコンパイラオプションがあったりしますが)
x87 + Windowsの組み合わせでも大量のメモリアクセスを伴う場合は、doubleではなく floatが使われます。
DirectXなんかでプログラム組んでいると doubleはあまり使いません。座標とか行列とかは全部 floatです(メモリ消費量とキャッシュミス回数が増えるからだと思います)。
今回のケースで言うなら・・・正直どっちでもいいと思いますが、printfの時に double型への変換が入ることを考えると doubleの方がいいかもしれません。
427ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(73,817ポイント)
Date: 2006/11/19(日) 01:24
No:1856
|
|
Title: 雑談板
|
|
SAWという映画、プロフィールでも絶賛していていましたが、
私の大好きな映画で、1も2もこれでもかという位見ました。
で、今日はSAW3の公開日です。
待ち望んでいた私は雨の中迷いもなく劇場に行って見ました。
・・・が、
かなり期待はずれでした。
1の時はR指定なかったのに、今回は15歳未満は閲覧不可。
・・う〜ん、映画の内容がえぐくなったのかな。
あの路線のままいってほしいが・・。
など考えていましたが、やはりかなりエグイ内容になっていました。
この映画はホラーに分類されると思いますが、1の時はホラーというよりサスペンス要素が強い映画でした。
ものすごく綿密に作られれた脚本。
いたるところに隠れている伏線。
最後にびっくりさせられる結末。
そして、殺人シーンなどのえぐいシーンは描画を最小限にとどめつつもこれ以上ない恐怖を与えるシーンを描いていました。
体にナイフを突き刺すシーンも直接はうつさないようになっていながら、恐怖シーンを演出していました。
しかし3は全然違いいました。
頭蓋骨を電動ドリルで穴を開けるシーンもありありとうつっていて、頭蓋骨を切断すると脳味噌がありありと映し出されるシーンがかなり長い時間ありました。
足の骨を自ら砕いて逃げるシーンも最初から最後まで隠すことなく描写されていましたし、
きっとこういうの強くない人は途中で気分が悪くなったと思います。
路線がすっかり変わってしまっていました。
「いかにエグイ殺人マシーンを作るか」「いかにグロテスクに人を殺すシーンを描くか」がテーマになっていました。
1の時のような緊迫した、はりつめた恐怖サスペンスという雰囲気はすっかりなくなってしまい、
期待していただけにすっかり落胆しました・・。
これだったらデスノートの法が100倍よかったです。
デスノート、漫画よんだことないんですけど、面白いですね。
今度2回目見に行こうかと思っている位です。
皆さんは映画ご覧になりますか?
27ポイント を手に入れた。
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(73,843ポイント)
Date: 2006/11/19(日) 03:41
No:1859
|
|
Title: Re:雑談板
|
|
ぽん太さん、パタっといらっしゃらなくなりましたけど、元気でやっていらっしゃいますか?^^;
ダッシュさんも最近いらっしゃいませんね・・・。
お友達と目標のゲーム作成頑張っていらっしゃるのでしょうか?
バグさん、お仕事めちゃお忙しそうですね、お体に気をつけて頑張ってください☆
26ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(7,625ポイント)
Date: 2006/11/19(日) 03:50
No:1860
|
|
Title: Re:雑談板
|
|
SAW見たんですかぁ!!
ボキも見たいです;;
たしかにサスペンス要素が薄くなったのは残念ですがグロテスクさがUPしたのはボキにはうれしいですねぇ
元気ですよぉ!
カキコミしてないだけでちょくちょく来てますよ^^
特にゲームプログラミングの館にはお世話になってますぅ☆
たまりにたまった課題でもう大変です><
一日中パソコンやってます(TT)
ただでさえ目が悪いのにもっと悪くなってしまう・・・
173ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(73,961ポイント)
Date: 2006/11/19(日) 03:58
No:1861
|
|
Title: Re:雑談板
|
|
お〜、元気でやっていらっしゃいましたか、よかったです^^
私は趣味がホラーよりサスペンス系なので、ちょっとSAW3の内容にはがっかり・・。
そういう点ではデスノートは◎でした☆
たまった課題ですか・・、私も人事だとは思っていられない;
目が悪くですか・・、そういえば、今度免許取り行く時はめがね無しじゃとおらないだろうなぁ・・。
118ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(7,692ポイント)
Date: 2006/11/19(日) 04:07
No:1862
|
|
Title: Re:雑談板
|
|
ボキは遠視で乱視です。
ずっと眼鏡かけてたんですが高校くらいからかけてません。
でもなぜか視力検査はAで、免許もすんなり通ってしまいました^^
今夜も冷えますねぇ。
SAWとかってライムで見れますか??
67ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(7,758ポイント)
Date: 2006/11/19(日) 04:26
No:1864
|
|
Title: Re:雑談板
|
|
ライムワイヤーです。
ダウンロードに時間がかかってしまって・・
もうじき光に変える予定です。やっぱADSLはだめですね;;
66ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(74,147ポイント)
Date: 2006/11/19(日) 04:30
No:1865
|
|
Title: Re:雑談板
|
|
あ、ライムワイヤーですか。
映画一本はダウンロード時間かかりますねぇ。
映画はパソコンで見ないタイプ?なのでダウンロードしたことがないです。
やっぱ大画面でみなきゃ・・・みたいな。
一人暮らしのくせに先日32インチワイド買ったんでそれで見ています♪
ヤフオクで買えば1万5千円で32インチかえるんだから電気屋いってられないですよね。
古いテレビが2万5千円で売れた^^;
私はADSLの時が実質1.5Mbps位。光に変えて2.0Mbps位です・・。
実際ほとんどかわりませんでした・・何がいけないんでしょう。
マンションタイプだとしかたないのかな??
162ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(7,815ポイント)
Date: 2006/11/19(日) 04:38
No:1866
|
|
Title: Re:雑談板
|
|
あ、そうなんですかぁ。
そんなに変わらないんですね。
32インチワイドが1万5千円?!
すごいですねぇ〜
ヤフオクってそんなに安いんですかぁ
知りませんでした・・・
話変わるんですけど院の試験って夏ごろに受けたんですか??
57ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(74,263ポイント)
Date: 2006/11/19(日) 04:50
No:1868
|
|
Title: Re:雑談板
|
|
32インチ中古ですけどね、そういうの気にしないんで^^
院試験は、夏と春前にありますね。
春前に受けるようにはしないほうがいいですよ^^;
落ちたらシュウカツもしてないのにどないすんねん・・みたいな緊迫感に襲われます^^;
>ナガタさん
お〜お久しぶりです^^
>ぽん太さん、
そういえば、ナガタさんも院生ですよ^^
ナガタさん、SAW1,2が・・?!
116ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,095ポイント)
Date: 2006/11/19(日) 04:50
No:1869
|
|
Title: Re:雑談板
|
|
管理人さん,お久しぶりです☆
SAWは1,2両方見てたから3見たかったんですけど,とてもグロテスクなんですね.
46ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,146ポイント)
Date: 2006/11/19(日) 04:57
No:1872
|
|
Title: Re:雑談板
|
|
ぽん太さんはじめまして.
今院2年ですよ.
もうすぐ5時ですね.お腹がすいてきました.
35ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,184ポイント)
Date: 2006/11/19(日) 05:04
No:1874
|
|
Title: Re:雑談板
|
|
財布の中に350円しか入ってないんですよね↓
ATMのあるコンビニまでぶっ飛ばして来ようか迷い中(TдT)
38ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(74,440ポイント)
Date: 2006/11/19(日) 05:07
No:1875
|
|
Title: Re:雑談板
|
|
パソコンのオファーが・・イソイソ。
大金が右から左・・左から右へすごい速さで流れていく・・。
明細書かかにゃ・・千円位おっことしても全然わからないや;
大金がながれているだけで儲けがポンポンでているわけではありませんが(ノ_ _)ノドテッ
SAW3グロいですよぉ。
なんか内容もちょっと薄かった気がします。
期待しすぎたかな?
私は2回目の夜食すませたので大丈夫w
177ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(7,930ポイント)
Date: 2006/11/19(日) 05:09
No:1876
|
|
Title: Re:雑談板
|
|
それはきついですねぇ
ボキも金欠で苦しいですが実家暮らしなので適当に菓子
でも貪り食っときます^^
49ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,010ポイント)
Date: 2006/11/19(日) 05:12
No:1877
|
|
Title: Re:雑談板
|
|
SAWのダウンロードを開始したんですが30Kbpsくらいで
9時間くらいかかってしまいます;;
師匠、忙しそうですねぇ
なんでそんなに人気あるんですかぁ??
80ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,304ポイント)
Date: 2006/11/19(日) 05:17
No:1878
|
|
Title: Re:雑談板
|
|
こういうときは実家ぐらしがいいなーって思います.
実家なら空腹を満たしてくれるものぐらいありますからね.
今の部屋食べるもの何にもない…(*´д`)
我慢の限界.ちょっとぶっ飛ばしてきます.
>内容もちょっと薄かった気がします。
そうなんですかー↓でも見たいなー
120ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(74,580ポイント)
Date: 2006/11/19(日) 05:24
No:1880
|
|
Title: Re:雑談板
|
|
人気の秘密は品質のよさと絶対的な信頼です(嘘)
30ですかぁ。まぁまぁじゃないですか?
こっちが早くてもむこうがおそかったらどうしようもないですしね;
ナガタさんもバイク乗りでしたっけ?
実家だと「どっか探したらなにかあるだろう」とか「冷蔵庫に何かはいてないかな〜?」って事ありますが、
一人暮らしだとそういうのないんですよねぇ・・・。
無いときはほんとになにもない。
冷蔵庫なにはいってるも何も自分がかったものしかはいってないわけだからあける楽しみないんですよねぇ・・。
かといって買った覚えのないものが入っていても怖いですがw
140ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(7,933ポイント)
Date: 2006/11/19(日) 05:30
No:1881
|
|
Title: Re:雑談板
|
|
一人暮らし始めた友人が半年後に激ヤセしてました^^
やっぱ実家だと何かと食べちゃいます。。
ナガタさんバイクなんでしょうかぁ
どうしても「ナガタ」という文字を見るとプロレスラーのナガタを
想像してしまう・・・
95ポイント を落としてしまった。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(74,736ポイント)
Date: 2006/11/19(日) 05:33
No:1882
|
|
Title: Re:雑談板
|
|
実家に帰った時
「プリンかアイスでもないかな〜?」
と思って冷蔵庫をあける瞬間。あれがすきです。
一人暮らしだと普段気にしないものもかわないといけないですしね。
洗剤とか、米とか・・。
特に米高いんで買うのいやですねぇ。
洗剤もボディーソープやめて石鹸にしようかとか庶民的なことなやみます^^;
すみません・・K-1は見るんですがプロレスはしr・・
156ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,031ポイント)
Date: 2006/11/19(日) 05:36
No:1883
|
|
Title: Re:雑談板
|
|
ボディソープっていつごろから使ってますかねぇ
まだ生まれてきた頃にはなかったような・・
何プッシュします?
ボキは3プッシュです。
銭湯とかは20プッシュですが・・・
98ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,446ポイント)
Date: 2006/11/19(日) 05:41
No:1884
|
|
Title: Re:雑談板
|
|
コンビニのATMって店によって取り扱い時間外があるんですね.
銀行のカードが取引できませんって言われました.郵便局のカードが使えたからおろせたんですけどね.
>プロレスラーのナガタを
知ってますよ.高校の時よくプロレス見てましたw
おれのバイクはHONDAのFTRっていうバイクです.
流行に流されて買ってしまいました.
142ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(74,807ポイント)
Date: 2006/11/19(日) 05:41
No:1885
|
|
Title: Re:雑談板
|
|
>銭湯とかは20プッシュですが・・・
やりますやりますw
ボディーソープってやったら出さないとあわ立たなくないですか?
あれを見ると石鹸の方が経済的だと・・。
私はタオルで体洗うのが嫌いで、名前なんていうんでしょう?
硬い素材のザラザラした表面の布のタオルで洗ってます。
あれだと泡立ちが少しマシ。
それでも3プッシュします。
なんかもったいないですよね。
高3まで石鹸でした。
大学はいってからですね〜。贅沢にボディーソープは。
銭湯のリンスはきしむから嫌い(*´・д・)(・д・`*)ネー
71ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,104ポイント)
Date: 2006/11/19(日) 05:47
No:1887
|
|
Title: Re:雑談板
|
|
おかえりなさいまし〜
肉まんでも買いましたか?^^
ザラザラしたタオル使ってます
我家では伝統的に泡(あぶく)タオルと呼ばれています。
73ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,450ポイント)
Date: 2006/11/19(日) 05:47
No:1888
|
|
Title: Re:雑談板
|
|
250ですよー.実際には223なんですけどねw
街中で乗るには楽ですね.長距離には向かないですけど.
コンビニのATMなら24時間だと思ったんですけど,朝の8時までは取引できませんって言われたから24時間じゃないのかな?
でも,違う店だと夜の12時過ぎても下ろせたんだけどなー?
4ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,474ポイント)
Date: 2006/11/19(日) 05:49
No:1889
|
|
Title: Re:雑談板
|
|
おでん食べたかったんですけど,袋の中でぐちゅぐちゃになりそうだったんで断念しました.
24ポイント を手に入れた。
|
|
|
|
|
Name: ナガタ ..入門者(3,598ポイント)
Date: 2006/11/19(日) 06:03
No:1894
|
|
Title: Re:雑談板
|
|
一人暮らしに夜中のコンビニは必須ですよw
>買った覚えの無い食べ物が冷蔵庫に
いつ買ったのか忘れてしまった食べ物も怖いですよw
2倍のポイントを手に入れた! 124ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,249ポイント)
Date: 2006/11/19(日) 06:05
No:1896
|
|
Title: Re:雑談板
|
|
ですねぇ
あんなのでは洗えませんね
コツは最初に洗面器に浸しておいてその上に
3ないしは3.5プッシュして、さらに少しだけ洗面器に
浸してすかさず擦りまくると足を洗う頃まで泡がもちますよ^^
ちなみに洗う順 @首→A左腕→B左脇腹→C右腕→D右脇腹
→E胸→F腹→G急所→H左脚→I右脚→Jでん部→K顔
です。
気分によってなぜか順序が変わります。例えばB→Gとか
たぶん流れで下に向かってしまうんだと思います。不思議です。
それと体と顔はダブルで泡つけといてまとめてシャワーで流します。高校くらいからずっとこのパターンです。
頭も顔も体も一気にやるとたまに目に泡が入ったりしますし、
その間に体が乾いてボディに泡が付きにくくなります。
そしてたまにゴキちゃんに遭遇したとき対処が遅れます。
104ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,277ポイント)
Date: 2006/11/19(日) 06:08
No:1897
|
|
Title: Re:雑談板
|
|
おっと一番大事な背中を忘れていたー><
ちなみに背中はFの次です。
冷蔵庫に何が入ってたんですか????
28ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(75,348ポイント)
Date: 2006/11/19(日) 06:10
No:1898
|
|
Title: Re:雑談板
|
|
体洗う順番も歯磨く順番も、かみ洗う順番も全部自然にきまってきますよねぇ。
私は小さい時から何故か体を拭くとき「下からふく」んですよねぇ。
下からふくと、拭いた後上から水がしたたってくるので、上から拭いた方がいいのはわかってるんですが、
くせなんですよねぇ。
歯磨くのも、順番決まってます・・不思議ですね。
134ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,326ポイント)
Date: 2006/11/19(日) 06:11
No:1899
|
|
Title: Re:雑談板
|
|
ボキは湯船には入っておりませぬ。
なんだかめんどくさくて・・
寒いんですがそれもまた一興です^^
それに風呂での死亡事故も怖いですし
49ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(75,497ポイント)
Date: 2006/11/19(日) 06:56
No:1913
|
|
Title: Re:雑談板
|
|
↑クリックで拡大します↑
添付は、普通に画像とかアップロードできます。
アップロードできる拡張子は
GIF JPEG PNG
TEXT LHA ZIP PDF MIDI
WORD EXCEL RM RAM
MPEG MP3 POWERPOINT
です。
実行ファイルでも拡張子変更したらアップロードできるんじゃないかな?
104ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,567ポイント)
Date: 2006/11/19(日) 06:57
No:1915
|
|
Title: Re:雑談板
|
|
多機能ですねぇ^^
今日マウスを買いにいこうと思うんですが相場ってどのくらい
ですかね??
ワイヤレスを買いたいです
54ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(75,646ポイント)
Date: 2006/11/19(日) 06:58
No:1916
|
|
Title: Re:雑談板
|
|
さぁ、ピンきりですよぉ。
マウスはとなりにおいてあるのは150円ですが、
今使っているマウスは1万円です。
トラックボールの無線のやつです。
今は光学式よりレーザー式の方が感度がよくて評判のようですよ。
どれくらいいいやつを買うかですけど、6千円位もっていったら結構いいのが買えるんじゃないですか?
149ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,574ポイント)
Date: 2006/11/19(日) 07:01
No:1917
|
|
Title: Re:雑談板
|
|
今パッドで頑張ってるんですけどたまに変な動きをするんです。
それって静電気がからんでますか?
レーザーってなんですか???????
60ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(75,776ポイント)
Date: 2006/11/19(日) 07:05
No:1918
|
|
Title: Re:雑談板
|
|
あぁ、めっちゃ安い光学式使うとそうなりますよね^^;
それパソコン買った時についてきたやつじゃないですか?
今は光学式のもっと精度いいやつでレーザー式っていうのがあるみたいです。
私はねっからのトラックボール派なんて興味ないんですけど。
でもトラックボールじゃ作業できないときあるんで、
パソコンに2つマウスささってます。
130ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,740ポイント)
Date: 2006/11/19(日) 07:08
No:1920
|
|
Title: Re:雑談板
|
|
マウスがひとつもないので指で頑張ってます^^;
さすがにやりにくいので買おうかなぁって思いました!
近くにコジマがオープンしたそうです☆
2つもささってるんですか?
ボキのはUSB2つしかないです・・・
2倍のポイントを手に入れた! 166ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,799ポイント)
Date: 2006/11/19(日) 07:12
No:1922
|
|
Title: Re:雑談板
|
|
ホントはボキもデスクトップがよかったんですけど
学校の推薦で紹介されていたやつを買ってしまいました・・
はめられました・・・
59ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(75,894ポイント)
Date: 2006/11/19(日) 07:14
No:1923
|
|
Title: Re:雑談板
|
|
一番安く作れば・・
デュアルCPU搭載でも
CPU1.5万、
ケース0.5万、
マザー1万、
メモリ0.5万
ドライブ0.4万
HDD0.5万
・・で4.5万位でかなりいいパソコン作れますよ。
グラボ乗せても
5.5万位?
モニタがいるんで、モニタが1万位かな。
もしお金が出来たら考えてみては☆
78ポイント を手に入れた。
|
|
|
|
|
Name: ぽん太 ..初心者(8,831ポイント)
Date: 2006/11/19(日) 07:19
No:1925
|
|
Title: Re:雑談板
|
|
そんなに安くできるんですかぁー
お金があればなぁ・・;;
楽して稼げる方法ないですかねー^^
32ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(75,990ポイント)
Date: 2006/11/20(月) 19:01
No:1939
|
|
Title: Re:雑談板
|
|
おぉ、レーザー買ったんですね^^
レーザーだとけばけばした面でマウス使ったりしてもちゃんと認識するとか♪
ワイヤレスいいですよね!
配線が気になる配置にパソコンがある場合、
めっちゃうっとうしいですからね^^;
私は両サイドにマウスおいて二刀流という意味のわからないことしていますw
((夕食の材料買出しにいってきます☆
84ポイント を手に入れた。
|
|
|
|
Name: Justy ..上級者(23,396ポイント)
Date: 2006/11/19(日) 00:19
No:1845
|
|
Title: <off> 騙されやすいコード
|
|
最近、とても衝撃を受けたコードがあります。
こんなコードです。
int i, a = 0;
for(i=0; i<10; ++i); // さて 最後に表示される aの値は????/
++a;
printf("a = %d\n", a);
自分ではC言語はある程度判っているつもりでしたが、これには騙されました。私の知り合いの何人かにも見てもらいましたが、皆同様に騙されました。
奥が深いです。
皆さんは最後の printfで表示される aの値は幾つになると思いますか?
230ポイント を手に入れた。
|
|
|
|
Name: Justy ..上級者(23,901ポイント)
Date: 2006/11/19(日) 00:42
No:1849
|
|
Title: Re:<off> 騙されやすいコード
|
|
>for文の後ろに;があるから
ループは行われないのでは??
それだけなら私だってそうそう騙されません。
このコードは2つのトラップがあって、1つは判りやすい forの後ろの ;。
これを見つけて喜んで終わってしまうと、2つ目に気付かないままということに。
実際にコンパイルしてみると、どうなっているのかよくわかると思います。
161ポイント を手に入れた。
|
|
|
|
|
Name: Justy ..上級者(24,049ポイント)
Date: 2006/11/19(日) 00:56
No:1853
|
|
Title: Re:<off> 騙されやすいコード
|
|
同じく選択してお読み下さい。
そうです。??/は \に変化します。行末に \がつくということは・・・ということです。
三連文字(トライグラフ)ってやつです。
昔C言語を覚えていたとき教科書にはちらっと出てきていたことは覚えているのですが、実際には全くと言っていいほど使いませんから・・・。
148ポイント を手に入れた。
|
|
|
|
|
Name: 管理人 [URL] ..比類無きプログラマー(73,709ポイント)
Date: 2006/11/19(日) 01:01
No:1854
|
|
Title: Re:<off> 騙されやすいコード
|
|
以下選択してお読みください。
>??/は \に変化します。
それすら知りませんでした・・。
検索しようにもどういうキーワードを検索かけたらよいかわからず・・。
そういえば、googleで記号を検索しようとしてもうまくいきません。
「C言語 ??/」とかって検索しても前者しかうまく対象になってくれません。
「??/」も対象にするにはどうしたらいいんでしょう?
??/が\に変化するとは意外でした。
\nに\がつくから改行コードは改行コードの機能を果たさなくなるということですか?エスケープシーケンスみたいな。
190ポイント を手に入れた。
|
|
|
|
|
Name: GPGA ..中級者(13,122ポイント)
Date: 2006/11/19(日) 02:18
No:1857
|
|
Title: Re:<off> 騙されやすいコード
|
|
こんばんは。
私のいた学校の先生の話ですが
当時PSのゲームを作成していて、夜とあるバグが出たそうです。
普通にCのコードを見てもまったくわからなかったので
アセブラコードを解析して、ひたすら追ったところ
コメント部分にエラーが存在していたことを、徹夜で発見したそうで、朝ソニーにそのことでクレームを言ったそうです。
そしたら、ソニーのサポートの人が、「それは、マニュアルに書いてありますよ」と言ったらしく、後でマニュアルを見たらコメント内に記述してはいけない、文字一覧が存在して唖然としたらしいです。
まあ、今回の文字と同じ文字だったかは知りませんが、C言語ではまだまだいろいろあるって事ですね。
236ポイント を落としてしまった。
|
|
|
|
|
Name: Justy ..上級者(24,379ポイント)
Date: 2006/11/19(日) 02:45
No:1858
|
|
Title: Re:<off> 騙されやすいコード
|
|
@管理人さん
>\nに\がつくから改行コードは改行コードの機能を果たさなくなるということですか?
ええ、次の行とくっつきます。
マクロ定義が複数行に渡った場合に \をよく使うことはあります。
>C言語内で「?」を2回以上書くのはやめたほうがいいんですね。
ですね。どうしても使いたいときは二バイト文字に。
@GPGAさん
>コメント部分にエラーが存在していたことを、徹夜で発見したそうで、朝ソニーにそのことでクレームを言ったそうです。
あー、ありましたね。perlとか gccとかで。
シフトJISの全角文字に未対応のコンパイラだとそういうことがおきます。
実は昔私もやられました。コメントの最後に「表」とかあると次の行もコメントになってしまって・・・。
0x5c問題とか言われていましたが、日本語のShift-JISでしかおきないので英語圏の開発者は気付きにくかったのでしょうね。
330ポイント を手に入れた。
|
|
|
|
|
Name: なぎ ..初心者(8,788ポイント)
Date: 2006/11/20(月) 18:09
No:1936
|
|
Title: ご参考までにトライグラフ>Re:<off> 騙されやすいコード
|
|
なぎ、出遅れましたが……トライグラフなど、忘却の彼方でした。
ご参考までに、手元の資料によると
??= -> #
??( -> [
??/ -> \
??) -> ]
??' -> ^
??< -> {
??! -> |
??> -> }
>>- -> ~
です。日本の JIS だと、¥と\ の差程度なので、あまり、なんだこれは? なんですが、
http://ja.wikipedia.org/wiki/ISO646
の「各国版」あたりを見ると、C言語で多用する上記の記号が、とんでもない文字に割りあたっているケースがあることがおわかりいただけると思います。
これへの対処として、考えられたのですが……わかりにくさという点では、どっちもどっちかと。
184ポイント を手に入れた。
|
|
|
|
|