Jump to content


Photo

ช่วย test การดักคำ ไม่สุภาพ ใน c program อันนี้ หน่อยครับ


  • Please log in to reply
12 ความเห็นในกระทู้นี้

#1 ทรงธรรม

ทรงธรรม

    ต่อให้ต้องเรียนจนแก่ ก็จะเรียนต่อไป คนเราพัฒนาได้ทุกคน

  • Members
  • PipPipPip
  • 2,157 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 10:24

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char line[100]; /* buffer for input data */
char four[][4] = {"damn","fuck","mofo","cock","arse"};
char polite[][4] = {"mali","love","like","well","kind"};
char temp[2000]; /* char array for store data */
char out[2000]; /* char array after change word */
FILE *in_file; /* file to read */
FILE *out_file; /* file to write */
void checkFour();
void readfile();
void clearT();
void concatT();
void checkAndChange();
int strcompare();
int main(int argc, char *argv[])
{
	printf("Enter file to read name\n");
	fgets(line, sizeof(line), stdin);
	line[strlen(line)-1] = '\0';
	in_file = fopen(line,"r");
	printf("Enter file to save name\n");
	fgets(line, sizeof(line), stdin);
	line[strlen(line)-1] = '\0';
	out_file = fopen(line,"w");
	readfile(temp,in_file);
	printf("%s\n",temp);
	checkFour(temp,out);
	printf("%s\n",out);
	fputs(out,out_file);
	fclose(in_file);
	fclose(out_file);
	return 0;
}
void checkFour(char *tem,char *out){
	char ch; /* temporary char */
	int length = strlen(tem);
	int i; /* control for loop */
	char word[20]; /* temporary word for check four */
	clearT(word);
	char *word_ptr = &word[0];
	int cfour = 0; /* count word for four letter */
	char other[2]; /* char array for delimeter */
	char *out_ptr = &out[0];
	for(i = 0; i < length; ++i){
		ch = *tem;
		if(ch!=' '&&ch!='\n'&&ch!='\r'&&ch!='.'
			&&ch!='('&&ch!=')'&&ch!=','&&ch!='"'
			&&ch!=':'){
			*word_ptr = ch;
			++cfour;
			++word_ptr;
		}else{
			if(cfour > 4 || cfour < 4){
				concatT(&out_ptr,word);
			}else{ /* check it with four array */
				checkAndChange(word);
				concatT(&out_ptr,word);
			}
			cfour = 0;
			other[0] = ch;
			other[1] = '\0';
			concatT(&out_ptr,other);
			clearT(word);
			word_ptr = &word[0];
		}
		++tem;
	}
}
void readfile(char *str,FILE *in_file){
	char ch; /* temporary char */
	while(1){
		ch = fgetc(in_file);
		if(ch == EOF)
			break;
		*str = ch;
		++str;
	}
}	
void clearT(char *word){
	int i; /* control for loop */
	for( i = 0; i < 20; ++i){
		*word = '\0';
		++word;
	}
}
void concatT(char **out,char *word){
	int length = strlen(word);
	int i; /* control for loop */
	for( i = 0; i < length; ++i){
		*(*out) = *word;
		++(*out); ++word;
	}
	
}
void checkAndChange(char *word){
	int i,j; /* control for outer and inner loop */
	char ch[4]; /* temporary char */
	char ch2[4]; /* temporary copy of word */
	strcpy(ch2,word); /* copy it avoid test for another position */
	printf("%s  ",word);
	for( i = 0; i < 5; ++i){
		for( j = 0; j < 4; ++j){
			ch[j] = four[i][j];
		}
		if(strcompare(ch2,ch)==0){/* change it with polite word */
			for( j = 0; j < 4; ++j){
				*word = polite[i][j];
				++word;
			}
			break;
		}
	}
}
int strcompare(char *ch,char *ch2){
	int i;
	int total = 0; /* total of different value */
	int diff = 7; /* if has different character make sure to show its diff */
	for( i= 0; i < 4; ++i){
		total += (*ch - *ch2) * diff;
		++ch; ++ch2; 
		diff *= diff;
	}
	if(total==0){
		return 0;
	}else{
		return -1;
	}
}

จาก code อันนี้ จะเห็นว่า ผมต้อง override strcmp ใหม่

 

เพราะ ใช้ ของที่มีมา มันไม่ตรวจว่า เท่ากัน ผมแปลกใจ มาก ๆ เลย

 

ไม่รู้ เพราะ ตัวอักษร ใน code กับ ใน file มันต่างกัน อย่างไร

 

แต่ เปลี่ยนแล้ว มันก็ดีขึ้น แต่ยังไม่แน่ใจ ทั้งหมด

 

เพราะมันทำได้แค่ เกือบ ๆ เท่านั้น ผมคิดว่า นะ


ขอให้พวกเรา ชาวหลากสี และพันธมิตร จงมีชีวิตรอด จากภาวะเศรษฐกิจตกต่ำ ฝีมือปูนา ไปตลอดรอดฝั่งด้วยครับ

 

PEMDAS ย่อมาจาก ลำดับการคำนวณ Parentheses , Exponentials , Multiply , Divide , Add , Subtract

 

FWGHSO ย่อมาจาก ลำดับการประเมินผลของ query  FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY


#2 guxkung

guxkung

    ผมไม่รู้ ผมแมว

  • Members
  • PipPipPip
  • 1,406 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 13:49

ถ้าเขียน C ใช้ strcmp() จะสะดวกกว่าการเช็คค่า char ทีละตัวแบบวนลูปครับ

ถ้าจะเทียบแบบบังคับความยาวก็ใช้ strncmp() ครับ

strlen() ก็ช่วยได้ครับ

 

แต่ว่าแต่ว่าที่เขียนอยู่นี่จะเอาไปทำอะไรเหรอครับ?


ขรี้ไม่ออก? กรุณานึกถึงยาแก้ท้องผูกตรา ลีถือลูกท้อ

สถาบันกวดวิชาคณิตศาสตร์ชื่อก้องระดับประเทศ แถลงผลคำนวณ 161/2 = 37


#3 ทรงธรรม

ทรงธรรม

    ต่อให้ต้องเรียนจนแก่ ก็จะเรียนต่อไป คนเราพัฒนาได้ทุกคน

  • Members
  • PipPipPip
  • 2,157 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 14:02

ถ้าเขียน C ใช้ strcmp() จะสะดวกกว่าการเช็คค่า char ทีละตัวแบบวนลูปครับ

ถ้าจะเทียบแบบบังคับความยาวก็ใช้ strncmp() ครับ

strlen() ก็ช่วยได้ครับ

 

แต่ว่าแต่ว่าที่เขียนอยู่นี่จะเอาไปทำอะไรเหรอครับ?

อ๋อ กั๊กคุง นะ นี่ผม สุกิต นะ

 

คือ กำลังเรียน c น่ะ ทำการบ้าน ที่ หนังสือ ที่สอน เค้าให้ทำ อะ

 

คือ strcmp น่ะ ผมลองใช้แล้ว แล้ว ใช้ interactive debugger แล้ว

 

ปรากฎว่า มัน test ตรง if(strcmp(ch2,ch)==0) เนี่ย

 

จริง ๆ ผมลองดู value ของ ch2 กับ ch แล้ว มันเป็นตัว "damn" ทั้งคู่ เลย

 

คือ ผม test four letter word น่ะ พวกคำหยาบ

 

คือ จริง ๆ มันเหมือนกันเป๊ะ นะ แล้วผมให้ ขนาด array เป็น 4 ทั้งสองตัว

 

ตัดปัญหา '\0' หรือ ตัวจบ array ไปแล้ว

 

แต่ strcmp มันยังไม่ให้ค่า 0 อยู่ดี ผมจนปัญญา เลย ต้อง override มันใหม่ น่ะครับ

 

แต่ ที่ override ก็ยัง ไม่แน่หรอก ว่าจะ ใช้ได้ผล ตลอด

 

เพราะค่า diff นั่น ผมพยายาม ให้มันเพิ่มขึ้นเรื่อย ๆ ทุกการวนลูป แต่ก็ไม่มีอะไร

 

การันตี ว่า ถ้าเป็นตัวที่ไม่ซ้ำ เช่น "damn" กับ "darn" จะถูกตรวจว่า ไม่ซ้ำ

 

เลยต้องการให้ช่วย test น่ะครับ


ขอให้พวกเรา ชาวหลากสี และพันธมิตร จงมีชีวิตรอด จากภาวะเศรษฐกิจตกต่ำ ฝีมือปูนา ไปตลอดรอดฝั่งด้วยครับ

 

PEMDAS ย่อมาจาก ลำดับการคำนวณ Parentheses , Exponentials , Multiply , Divide , Add , Subtract

 

FWGHSO ย่อมาจาก ลำดับการประเมินผลของ query  FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY


#4 guxkung

guxkung

    ผมไม่รู้ ผมแมว

  • Members
  • PipPipPip
  • 1,406 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 14:10

อันนี้ผมคิดว่าน่าจะติดปัญหาตรงตัวปิดท้ายของ str

ถ้า รันบนวินโดวส์ (หรือ DOS) มันจะมีบางฟังก์ชั่นที่เก็บตัวปิดท้าย str เป็น \r\n แทนที่จะเป็น \n

ถ้าไปอ่าน str มาตรงๆอาจจะได้ตัว \r แถมมา เลยทำให้ strcmp เข้าใจว่า str สองก้อนนั้นไม่เท่ากันครับ

 

ถ้าจะเช็คง่ายๆลองใช้ strlen ออกมาดูก่อนก็ได้ครับว่ามันติดออกมาจริงๆหรือเปล่า


ขรี้ไม่ออก? กรุณานึกถึงยาแก้ท้องผูกตรา ลีถือลูกท้อ

สถาบันกวดวิชาคณิตศาสตร์ชื่อก้องระดับประเทศ แถลงผลคำนวณ 161/2 = 37


#5 ทรงธรรม

ทรงธรรม

    ต่อให้ต้องเรียนจนแก่ ก็จะเรียนต่อไป คนเราพัฒนาได้ทุกคน

  • Members
  • PipPipPip
  • 2,157 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 14:24

อันนี้ผมคิดว่าน่าจะติดปัญหาตรงตัวปิดท้ายของ str

ถ้า รันบนวินโดวส์ (หรือ DOS) มันจะมีบางฟังก์ชั่นที่เก็บตัวปิดท้าย str เป็น \r\n แทนที่จะเป็น \n

ถ้าไปอ่าน str มาตรงๆอาจจะได้ตัว \r แถมมา เลยทำให้ strcmp เข้าใจว่า str สองก้อนนั้นไม่เท่ากันครับ

 

ถ้าจะเช็คง่ายๆลองใช้ strlen ออกมาดูก่อนก็ได้ครับว่ามันติดออกมาจริงๆหรือเปล่า

เป็นอย่าง กั๊กคุง ว่า อะแหละ

 

คือ ตัว word มันเป็น char array ที่รับคำมาตรวจ แล้วถ่ายโอน

 

ให้ char array out ซึ่งจะไป write ลง file อีกที

 

ตัว word ผมให้ ขนาด array เป็น 20 เพราะบางคำ ที่ต้องถ่าย

 

มันเป็นคำที่ยาว ดังนั้น ผมเลยกำหนด มันสั้นไม่ได้

 

คราวนี้ ทุกครั้ง ก่อนที่ผมจะรับค่า เข้ามาที่ word ผมต้องทำการ clear มันก่อน

 

ด้วย function clearT ของผม ซึ่งจะใส่ '\0' ไว้ที่ ทุก index ของ word

 

 

ตอนที่ word รับ four letter มาตรวจสอบ (มีแค่ 4 ตัวอักษร) index ที่ 4 (ก็คือ ตัวที่ 5)

 

มันจะเป็น '\0'

 

ตอนแรก ที่ test ด้วย strcmp ผมใช้ word test กับ char array ที่ดึงมาจาก กลุ่มของคำ

 

หยาบ ที่ผมตั้งไว้ มัน test แล้ว ไม่ให้ค่า 0

 

ผมพยายาม ปรับใหม่ โดยใช้ strcpy กับ word มาที่ char array ชื่อ ch2

 

ที่ผมจำกัด มันไว้ ที่ขนาด 4 ตัวอักษร แล้ว ตามความเห็นผม

 

มันไม่น่า มีส่วนเกิน ที่แตกต่าง ได้แล้ว

 

แต่ ตรวจสอบ ด้วย strcmp มันก็ไม่ให้ ค่า 0 อยู่ดี

 

ผมเหลือบตามอง ไปที่ ค่า value ของมัน มันก็ขึ้น "damn" ทั้งสองตัว

 

แล้วมันไม่เท่ากัน ได้ยังไง ผมก็งง เพราะขนาด ของมัน เป็น 4 ทั้งคู่

 

 

เลยจำต้อง override มันใหม่ โดยสั่งให้มัน test ทีละตัว ไปเลย

 

จบปัญหา ไป อะครับ


ขอให้พวกเรา ชาวหลากสี และพันธมิตร จงมีชีวิตรอด จากภาวะเศรษฐกิจตกต่ำ ฝีมือปูนา ไปตลอดรอดฝั่งด้วยครับ

 

PEMDAS ย่อมาจาก ลำดับการคำนวณ Parentheses , Exponentials , Multiply , Divide , Add , Subtract

 

FWGHSO ย่อมาจาก ลำดับการประเมินผลของ query  FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY


#6 guxkung

guxkung

    ผมไม่รู้ ผมแมว

  • Members
  • PipPipPip
  • 1,406 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 15:35

ถ้า strcpy ไปตัว [4] ก็ยังได้ \r ไปอยู่ดีน่ะแหละครับ คุณสุกิต

แต่ถ้า ไปบังคับเขียนให้ตัว [4] เป็น \0 (หลัง strcpy) ก็น่าจะทำให้ strcmp ได้ 0 แล้วครับ


ขรี้ไม่ออก? กรุณานึกถึงยาแก้ท้องผูกตรา ลีถือลูกท้อ

สถาบันกวดวิชาคณิตศาสตร์ชื่อก้องระดับประเทศ แถลงผลคำนวณ 161/2 = 37


#7 ทรงธรรม

ทรงธรรม

    ต่อให้ต้องเรียนจนแก่ ก็จะเรียนต่อไป คนเราพัฒนาได้ทุกคน

  • Members
  • PipPipPip
  • 2,157 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 15:56

ถ้า strcpy ไปตัว [4] ก็ยังได้ \r ไปอยู่ดีน่ะแหละครับ คุณสุกิต

แต่ถ้า ไปบังคับเขียนให้ตัว [4] เป็น \0 (หลัง strcpy) ก็น่าจะทำให้ strcmp ได้ 0 แล้วครับ

ผม declare มันแบบนี้นะ กั๊กคุง

 

char ch2[4]; มันน่า จะมี index ได้แค่ 0,1,2,3 ใช่ม่าา

 

ซึ่งมันน่าจะบรรจุ ได้แค่ index 0 'd', index 1 'a', index 2 'm', index 3 'n'

 

แบบนี้อะ มันไม่น่า จะเอา ส่วนเกิน มาได้เลย ใช่ม่าา

 

แล้ว อีกอย่างที่ผม บอกไป ตัว word ที่เป็น ต้นฉบับ มันก็ ได้ตัวนี้นะ

 

ผมอ่านจาก value ของมัน ใน function checkFour ได้ว่า "damn\0\0\0\0\0.....

 

แบบนี้ อะ มันเพราะว่า ผม ได้บรรจุ '\0' ให้มัน ทั้ง 20 ตัว ก่อนให้มันมา รับ ตัวอักษร อะ

 

ดังนั้น ผมเลย ประหลาด ใจไง ว่าทำไม มันถึง strcmp แล้ว ไม่เท่ากับ

 

ตัว ch ที่ผม ไป assign ข้อมูล ให้มัน จาก string array  four ของผม

 

ที่มัน จะประกอบไปด้วย four[0] = "damn",four[1] = "fuck" .......

 

นั่นอะ ch มันไปรับ "damn" มา อันนี้ ผมดู จาก interactive debugger แล้ว อะ


ขอให้พวกเรา ชาวหลากสี และพันธมิตร จงมีชีวิตรอด จากภาวะเศรษฐกิจตกต่ำ ฝีมือปูนา ไปตลอดรอดฝั่งด้วยครับ

 

PEMDAS ย่อมาจาก ลำดับการคำนวณ Parentheses , Exponentials , Multiply , Divide , Add , Subtract

 

FWGHSO ย่อมาจาก ลำดับการประเมินผลของ query  FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY


#8 guxkung

guxkung

    ผมไม่รู้ ผมแมว

  • Members
  • PipPipPip
  • 1,406 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 18:59

ใช้ interactive debugger เช็ค strlen ดูสิครับ
ถ้า strlen ไม่ตรงกัน ก็นั่นแหละ พวก terminate character บางทีก็มีปัญหาไม่เหมือนกัน
เพราะถ้าเหมือนกันยังไงก็ต้องออกมาเป็น 0 ครับ โปรแกรมมันหลีกไม่ได้อยู่แล้ว

ขรี้ไม่ออก? กรุณานึกถึงยาแก้ท้องผูกตรา ลีถือลูกท้อ

สถาบันกวดวิชาคณิตศาสตร์ชื่อก้องระดับประเทศ แถลงผลคำนวณ 161/2 = 37


#9 CockRoachKiller

CockRoachKiller

    ขาประจำ

  • Members
  • PipPipPip
  • 442 posts

ตอบ 19 กันยายน พ.ศ. 2556 - 23:45

strcmp never fail.  Your method might.  However, I have to admire you on creating your own version when you found a problem. 

 

With a quick glance, '\n' '\r\ should not be the problem.  Anyway, I think you misunderstand something about C.

 

for char data[4]   you can correctly store only 3 character + one \0 not 4 char.

 

So, code like

char ch[4]; /* temporary char */
char ch2[4]; /* temporary copy of word */

strcpy(ch2,word); /* copy it avoid test for another position */

 

With a "word" size of 4 the strcpy will corrupt your stack.  It might put \0 on ch[0] or somewhere else which will cause trouble later.   No surprise that your strcmp will fail. 

 

Try to change it to [5], should solve the problem.

 

My advice are, 

*if you target is not micro controller,  no need to get cheap on space.   char ch[4] or char ch[1024] make no different in today computer.  They run at should the same speed.

** you should polish your program.   Make it shorter, run faster or easier to read always help you improve your coding.  More unnecessary code, more bugs.

 

The obvious example is that you don't need that  ch and ch2 at all.  You create that unnecessary and that unnecessary bite you.  


Edited by CockRoachKiller, 19 กันยายน พ.ศ. 2556 - 23:46.

Please know your place by do not comment my post that you can not comprehend.

#10 guxkung

guxkung

    ผมไม่รู้ ผมแมว

  • Members
  • PipPipPip
  • 1,406 posts

ตอบ 20 กันยายน พ.ศ. 2556 - 09:05

strcmp never fail.  Your method might.  However, I have to admire you on creating your own version when you found a problem. 
 
With a quick glance, '\n' '\r\ should not be the problem.  Anyway, I think you misunderstand something about C.
 
for char data[4]   you can correctly store only 3 character + one \0 not 4 char.
 
With a "word" size of 4 the strcpy will corrupt your stack.  It might put \0 on ch[0] or somewhere else which will cause trouble later.   No surprise that your strcmp will fail. 
 
Try to change it to [5], should solve the problem.

ลืมประเด็นตัวสุดท้ายเป็น \0 แล้วใส่เกินความจุไปซะสนิท
จขกท เรียนรู้ด้วยตัวเองก็คงมีปัญหาเรื่องพวกนี้บ้างก็แก้ๆกันไปนะครับ

ขรี้ไม่ออก? กรุณานึกถึงยาแก้ท้องผูกตรา ลีถือลูกท้อ

สถาบันกวดวิชาคณิตศาสตร์ชื่อก้องระดับประเทศ แถลงผลคำนวณ 161/2 = 37


#11 CockRoachKiller

CockRoachKiller

    ขาประจำ

  • Members
  • PipPipPip
  • 442 posts

ตอบ 20 กันยายน พ.ศ. 2556 - 10:57

I just run your program and it confirms my quick glance speculation.  My Visual Studio detected that problem appear at ch2[] right away while running the program.  Furthermore, I found that you can not use standard strcmp() because you incorrectly declare all your C Strings.

 

These are also wrong beside ch[4] and ch2[4] that I have notified.

 

char four[][4] = {"damn","fuck","mofo","cock","arse"};
char polite[][4] = {"mali","love","like","well","kind"};

 

The problem with that there is not enough space to contain \0.   Unfortunately, your \0 of "damn" will be overridden by "fuck" and so on.   Eventually, in memory four[0] - > "damnfuckmofocockarse" not "damn".  Your version of strcmp work by the fact the you hard code 4 in that function.  Without that hardcode, your code will fail the same way as standard strcmp fail.   Because when you think you are checking any word against "damn" , you actually compare it with "damnfuckmofocockarse" instead. 

 

The correct way is

char *four[] = {"damn","fuck","mofo","cock","arse"};
char *polite[] = {"mali","love","like","well","kind"};

C string is compact and efficient.  However, the schematic is obscured.  Zero byte at the end confuse most beginners.  This is one of the many reasons why C is hated by most programmers.  I never recommend any beginner to start with C. 

 

If you decare it correctly.  The checkAndChange() could be simple as this

 

void checkAndChange(char *word){
    int i; /* control for outer and inner loop */
    for( i = 0; i < 5; ++i){
        if(strcmp(four[i],word)==0){/* change it with polite word */
            strcpy(word,polite[i]);
            break;
        }
    }
}
 

 

If you like to improve it further, here are my advices.

 

1) remove hardcode 5 from the program. 

2) replace concatT with standard strcat()

3) support any size of bad word and case insinsitive

4) read list of bad word from file

5) find a way to make it at least 2 time running

 

 

In case you intend to pursue my advice, this man will make you test your program much quicker.  At the development stage, you should avoid manual input.  When the program is good enough, then you can play with UI later.

 

int main(int argc, char *argv[])
{
    checkFour("yes no ok cocacola damn fuck mofo cock arse cockroachkiller",out);
    printf("%s\n",out);
    return 0;
}
 

 

Have fun..


Please know your place by do not comment my post that you can not comprehend.

#12 guxkung

guxkung

    ผมไม่รู้ ผมแมว

  • Members
  • PipPipPip
  • 1,406 posts

ตอบ 20 กันยายน พ.ศ. 2556 - 12:35

ส่วนตัวผมคิดว่า จะเรียนพวกนี้ ถ้าไม่ได้จะเอาไปเขียนโปรแกรมเน้น performance มากๆ

อยากให้ไปลองหัดใช้ python จะดีกว่าครับ

 

มีอะไรให้ใช้งานได้ง่ายๆ กว่าจะต้องมาลง Low-level แบบ string processing พวกนี้บ่อยๆแบบ C
 


ขรี้ไม่ออก? กรุณานึกถึงยาแก้ท้องผูกตรา ลีถือลูกท้อ

สถาบันกวดวิชาคณิตศาสตร์ชื่อก้องระดับประเทศ แถลงผลคำนวณ 161/2 = 37


#13 ทรงธรรม

ทรงธรรม

    ต่อให้ต้องเรียนจนแก่ ก็จะเรียนต่อไป คนเราพัฒนาได้ทุกคน

  • Members
  • PipPipPip
  • 2,157 posts

ตอบ 20 กันยายน พ.ศ. 2556 - 13:53

ส่วนตัวผมคิดว่า จะเรียนพวกนี้ ถ้าไม่ได้จะเอาไปเขียนโปรแกรมเน้น performance มากๆ

อยากให้ไปลองหัดใช้ python จะดีกว่าครับ

 

มีอะไรให้ใช้งานได้ง่ายๆ กว่าจะต้องมาลง Low-level แบบ string processing พวกนี้บ่อยๆแบบ C
 

อ๋อ สาเหตุ ที่เรียน ก็เพื่อให้ มีความรู้ พื้นฐาน เยอะ ๆ อะครับ

 

กั๊กคุง คือ ตอนนี้ ผมเรียน java ตรงเบสิค ก็เกือบครบแล้ว

 

และก็เรียน SQL ตรงเบสิค จบไปเล่มหนึ่งแล้ว

 

ตอนนี้ ที่ผมเขียนโปรแกรม ใช้งาน ทำบัญชี ของผมเอง ที่บริษัท

 

โดยใช้ java ผสม กับ SQL ทำเป็น บัญชี ที่รับข้อมูล

 

จาก excell ที่ผมทำงานทุกวัน มาแปลง เป็นข้อมูล ลง database

 

ด้วยความช่วยเหลือ จากคุณ เคนอิจิ ในการให้คำแนะนำ

 

มันก็ พอใช้งานได้นะ มันสามารถ นำเข้าข้อมูล ทางบัญชี

 

แล้วก็ ออกแยกประเภท (แต่เรียก ทีเดียวหลายบัญชี ยังไม่ได้ ติดขัด นิดหน่อย)

 

กับ ออกงบทดลอง แล้ว ก็พวก ลูกหนี้ เจ้าหนี้ รายตัว ได้บ้างแล้ว

 

 

คือ มันใช้งาน ได้จริง แล้ว ระดับหนึ่งล่ะ

 

แต่ที่ผม อยากเรียน C ด้วย เพราะ ความตั้งใจ แต่เดิม

 

ของผม คือ ผมอยาก เขียน เกม animation ขึ้นมา

 

เล่นเอง ส่วนตัว เป็นความฝัน นิดหน่อย มันอาจดูเพ้อเจ้อ อะนะ

 

แต่ ผม ก็อยากทำจริง ๆ เพราะผม ประทับใจ เกม

 

chrono trigger ที่ผมเคยเล่น มาก ๆ ผมชอบ style RPG

 

ก็เลย ตั้งใจ จะเรียนเขียนโปรแกรม นี่แหละ

 

แต่ก็รู้ว่า การทำ พวก graphic มันยากมาก เพราะมันต้องรู้

 

เกี่ยวกับ สูตรคณิตศาสตร์ ค่อนข้างเยอะ

 

ตัวผมเอง ก็เรียน เลข ม.4 - ม.6 มาบ้างแล้ว (ได้ คุณ GOP ช่วยสอน ต้องขอบคุณมากเลย)

 

เรียน ทางอินเตอร์เนต e-book นี่แหละ (ผมจบ พาณิชย์ เลยไม่ได้เรียน)

 

ก็ยอมรับ ว่ายากมาก โดยเฉพาะ ตรีโกณมิติ

 

 

แต่ผม ก็จะพยายามเรียนนะ คือ ช่วงหลังนี่

 

พยายาม เรียน พื้นฐาน ให้เยอะ ๆ เวลา จะไปส่วน ยาก ๆ

 

จริง ๆ มันจะได้ ไม่ติดขัด มากอะ

 

นี่ว่า เดี๋ยวจะอ่าน C อีกเล่มหนึ่ง เพื่อให้รู้ เยอะ ๆ

 

ผมอ่าน java นี่ มาสองที่แล้ว ที่ tutorial ของ sun

 

กับ หนังสือ ที่คุณเคนอิจิ ส่งมาใ้ห้

 

 

ก็ทั้งหมด ตั้งใจ จะให้ ตัวเอง สามารถ ไปในจุดที่ยาก ขึ้นได้

 

นี่ว่า ถ้าอ่าน C จบ ผมจะเริ่ม อ่านพวก การทำ computer graphic

 

ที่ผม ไป download มาเป็น สิบเล่ม ได้แล้วมั้ง

 

มาเริ่มเรียน แล้วเริ่ม หัด เขียน พวก graphic ตั้งแต่ เส้นตรง

 

สี่เหลี่ยมกันเลยอะ

 

 

ก็หวังว่า สักวันหนึ่ง จะทำเกม ได้จริง ๆ

 

แต่ก็ไม่รีบ หรอก อีกสิบปี ก็ได้ ค่อย ๆ เรียน

 

แบบ แก่แล้ว หัวมันช้า จริง ๆ ไม่ค่อยเข้าหัว

 

เหมือนแต่ก่อน เลย

 

 

มาเริ่มช้า ก็แบบนี้ ล่ะ

 

แต่ไม่ได้คิด ถึงเรื่องเงิน หรอก จริง ๆ

 

ทุกวันนี้ ก็ใช้เงินประหยัด อยู่แล้ว

 

เงินเดือน เจ้านาย ก็พยายามใช้ให้มัน พอ อะนะ

 

 

คือ อยากจะเรียน เพื่อทำเกม ให้สำเร็จ ตามความฝัน จริง ๆ อะ

 

มันคงดีมาก ๆ เลย


ขอให้พวกเรา ชาวหลากสี และพันธมิตร จงมีชีวิตรอด จากภาวะเศรษฐกิจตกต่ำ ฝีมือปูนา ไปตลอดรอดฝั่งด้วยครับ

 

PEMDAS ย่อมาจาก ลำดับการคำนวณ Parentheses , Exponentials , Multiply , Divide , Add , Subtract

 

FWGHSO ย่อมาจาก ลำดับการประเมินผลของ query  FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY





ผู้ใช้ 1 ท่านกำลังอ่านกระทู้นี้

สมาชิก 0 ท่าน, ผู้เยี่ยมชมทั่วไป 1 ท่าน และไม่เปิดเผยตัวตน 0 ท่าน