似たような問題ですが

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
けいすけ

似たような問題ですが

#1

投稿記事 by けいすけ » 18年前

四角形をx方向に30、y方向に60移動させるプログラムを作成しました。
文法的に間違っているところがあればご指摘いただきたいと思って投稿しました。
よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MS 200
void move(unsigned char *,int,int);
main()
{
	char fi[50];
	int i,j;
	FILE *fp;
	unsigned short header[13]={0x4d42,54490,1,0,0,26,0,12,0,MS,MS,1,24};
	unsigned char *bmp;
	bmp=(unsigned char *)malloc(MS*MS*3);
	for(i=0;i<MS*MS;i++)
	{
		bmp[i*3+0]=0;
		bmp[i*3+1]=0;
		bmp[i*3+2]=0;
	}
	for(i=75;i<=124;i++)
	{
		for(j=75;j<=124;j++)
		{
			bmp[(i*MS+j)*3+0]=0;
			bmp[(i*MS+j)*3+1]=255;
			bmp[(i*MS+j)*3+2]=255;
		}
	}
	move(bmp,30,60);
	printf("Input file name : ");
	scanf("%s",fi);
	if((fp=fopen(fi,"wb"))==NULL)
	{ 
		printf(stderr,"Error : file open[%s].\n",fi);
		exit(1);
	}
	fwrite(header,2,13,fp);
	fwrite(bmp,1,200*200*3,fp);
	fclose(fp);
	return 0;
}
void move(unsigned char *b,int x0,int y0)
{
	int i,j,x,y;
	unsigned char *a;
	a=(unsigned char *)malloc(MS*MS*3);
	for(i=0;i<MS*MS;i++)
	{
		a[i*3+0]=0;
		a[i*3+1]=0;
		a[i*3+2]=0;
	}
	for(i=0;i<MS;i++)
	{
		y=i-y0;
		if(0<y0 && y0<MS)
		{
			for(j=0;j<MS;j++)
			{
				x=j-x0;
				if(0<x0 && x0<MS)
				{
					a[(i*MS+j)*3+0]=b[(y*MS+x)*3+0];
					a[(i*MS+j)*3+1]=b[(y*MS+x)*3+1];
					a[(i*MS+j)*3+2]=b[(y*MS+x)*3+2];
				}
			}
		}
	}
	for(i=0;i<MS*MS*3;i++)
	{
		b=a;
	}
	free(a);
}

Justy

Re:似たような問題ですが

#2

投稿記事 by Justy » 18年前

文法的に間違っているところがあればご指摘いただきたい
 あからさまな文法的な間違いはコンパイラが指摘してくるでしょうから除くと、
・ mainの引数が (void)でない
 くらいでしょう(C++なら特に問題なし)。


 余談ですがロジック的にはいろいろ気になるところはあります。

・ 二重の for分内で何やら範囲チェックをしているが、意味を成していません。
・ y方向に移動するはずが、-y方向に移動しようとしています。

けいすけ

Re:似たような問題ですが

#3

投稿記事 by けいすけ » 18年前

mainの引数がvoidではないとはどういう意味でしょうか?

なぜだかうまくこのプログラムが動いてくれないのです><

Justy

Re:似たような問題ですが

#4

投稿記事 by Justy » 18年前

mainの引数がvoidではないとはどういう意味でしょうか?
 メイン関数を main() と書いてますよね?
 C言語では [color=#d0d0ff" face="arial">int main(void)[/color] か [color=#d0d0ff" face="arial">int main(int , char*[/url])[/color] のどちらかが標準で、[color=#d0d0ff" face="aria[/url]main()[/color] のように空の仮引数は「引数は不明」という意味になります。


なぜだかうまくこのプログラムが動いてくれないのです
 とりあえずコンパイルエラーと上記の「ロジック的に気になるところ」の2点を見てみてはどうでしょうか。

けいすけ

Re:似たような問題ですが

#5

投稿記事 by けいすけ » 18年前

問題

けいすけ

Re:似たような問題ですが

#6

投稿記事 by けいすけ » 18年前

ヒント1

けいすけ

Re:似たような問題ですが

#7

投稿記事 by けいすけ » 18年前

ヒント2

けいすけ

Re:似たような問題ですが

#8

投稿記事 by けいすけ » 18年前

これと一緒に作ったつもりなのですが、なぜか動いてくれません泣

このヒントが間違っているのでしょうか・・・?

あと、コンパイラとは何なのでしょうか?組み立てる装置みたいなものでしょうか?

再度アドバイス頂けたらうれしいです。よろしくお願いいたします。

Justy

Re:似たような問題ですが

#9

投稿記事 by Justy » 18年前

なぜだかうまくこのプログラムが動いてくれないのです
 上記のプログラムを実行するためにコンパイル・リンクをしますよね?
 これが成功しない、という意味でしょうか。

 でしたら、printfの使い方が間違っている箇所があります。
(というかこれhttp://www.play21.jp/board/formz.cgi?ac ... =3002#2932にも指摘したはずです)


二重の for分内で何やら範囲チェックをしているが、意味を成していません
 ヒントは合っています。書かれたプログラムがヒントと一致していません。
 印を付けましたので、そこを重点的にチェックしてみて下さい。


y方向に移動するはずが、-y方向に移動しようとしています
 これは撤回します。
 てっきり +y方向は下な座標系と思っていましたが、+y方向が上向きならプログラムは合っています。


# ヒント通りじゃないと減点だったりするんですか?

閉鎖

“C言語何でも質問掲示板” へ戻る