Thảo luận  Góc Lập Trình

jablonec
Cũng là một người hơi hơi mê bên lập trình, mãi sau này mình mới có hướng đi và đang xây dựng nền tảng cho đam mê này mỗi ngày. Để hiểu thêm về lập trình và cần chia sẻ kinh nghiệm của mỗi người về lập trình. Mình lập topic này mong muốn trao đổi và học hỏi kiến thức.
1. Học lập trình có khó không?
2. Học lập trình có cần giỏi toán không?
3. Học lập trình nên bắt đầu từ đâu?
.....
Cảm ơn mọi người đã đọc topic.

21.jpg
 
Sửa lần cuối:
Trả lời

malemkhoang

Rìu Chiến
Ý tưởng sẽ là tách từng chữ số ra, dựa theo phép toán chia dư hoặc chia nguyên.
Ví dụ trong C, 123 % 100 ra 23, 23 % 10 ra 3, lấy được chữ số 3.
Không những tách từng chữ số mà còn phải tách từng cụm 3 chữ số: tỷ, triệu, ngàn, đơn vị...
Dùng cụm 3 chữ số "đơn vị" làm cơ sở để đọc các cụm cao hơn...
Phân biệt: năm, mười lăm, hai mươi lăm (hai nhăm), ba mươi lăm (ba nhăm), bốn mươi lăm (bốn nhăm), năm mươi lăm (năm nhăm)...; mười - mươi; một, mười một, hai mốt (hai mươi mốt), ba mốt (ba mươi mốt)...; linh - lẻ: trăm linh, nghìn lẻ; 0, 00, 000...
Ngoài ra còn phải chuẩn hóa chữ số đầu vào cho đúng khuôn: phân tách hàng nghìn bằng dấu "chấm", thập phân bằng dấu "phẩy".
 

Anhdadenit

Gà con
đừng nghe lời mấy thằng sinh viên kêu học C/ C++ chỉ phù hợp ở DH bạn cần tiết kiệm thời gian để còn áp dụng cái mình học ngay. Tốt nhất là bạn nên học Python đi nhá.
1 link cho bạn tham khảo học lập trình python cho người mới bắt đầu, nghe nói của một ông du học sinh bên Nhật viết.
 
Sửa lần cuối:

tronghieuit

Gà con
Mình là một người đã đi làm hiện tại đang làm AI Engineer và trước đây cũng không phải học CNTT
1. Học lập trình có khó không?
Khó. Lúc bắt đầu là tương đối khó. Mông lung không biết bắt đầu như nào
2. Học lập trình có cần giỏi toán không?
1 số thì yêu cầu tốt về toán 1 số thì không.
3. Học lập trình nên bắt đầu từ đâu?
Nên bắt đầu từ sự yêu thích 1 cái gì đó
 

librec

Rìu Sắt
Mình đang vướng vụ lùm xùm này. Mình đang đọc cuốn Những kỹ thuật nâng cao của C. Sau khi đọc xong có một bài tập về game: "Người treo cổ". Đề bài: Đoán chữ cái bí ẩn trong một từ. Mình đã nhập code và đã hoàn thành bài toán, nhưng đến phần cải tiến trò chơi, thì mình đang vướng vào phần: "Bạn cũng có thể tạo ra chế độ chơi 2 người, người thứ nhất sẽ nhập từ bí ẩn vào cho người thứ 2 đoán". Mình có ý định người chơi thứ nhất nhập vào ký tự và ký tự đó sẽ lưu vào tệp danh mục, sau đó người thứ 2 chạy chương trình và chơi nhưng khi người thứ 2 thực hiện thì vòng lặp lại không thực hiện. Nhờ các cao thủ chỉ giáo.

Tiệp main.c:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

#include "danhmuc.h"

int win(int sokytuBimat[],long dodaiTu);
int kiemtraKytu(char kytu,char tuBimat[], int sokytuBimat[]);
char docKytu();

int main()
{
int choilai=1;
while(choilai)
{
int chedo;
printf(" TRO CHOI NGUOI TREO CO \n");
printf("1. Nguoi choi thu 1 nhap ky tu \n");
printf("2. Nguoi choi thu 2 bat dau choi \n");
scanf("%d",&chedo);
switch(chedo)
{
case 1:

{
char nhapkytu[10];
FILE *danhmuc = NULL;
danhmuc=fopen("danhmuc.txt", "w");
if (danhmuc != NULL)
{
// Sau day ban se nhap ky tu
printf ("Ban nhap ky tu la= ");
scanf ("%s", nhapkytu);
// Va bay gio ghi du lieu vao tap tin
fprintf (danhmuc,"%s",nhapkytu);
fclose(danhmuc);
break;
}
}
case 2:
{
char kytu=0;
char tuBimat[100]={0};
int *sokytuBimat=NULL;
long soluotDoan=10;
long i =0;
long dodaiTu=0;
printf("Chao mung den voi tro choi nguoi treo co!\n\n");

if(!chonTu(tuBimat))
exit(0);
dodaiTu=strlen(tuBimat);
sokytuBimat=malloc(dodaiTu*sizeof(int));
if(sokytuBimat==NULL)
exit(0);
for(i=0;i<dodaiTu;i++)
sokytuBimat=0;
while (soluotDoan>0&&!win(sokytuBimat,dodaiTu))
{
printf("\n\n Ban co %d luot doan de choi", soluotDoan);
printf("\n Tu bi mat la gi?");

for(i=0;i<dodaiTu;i++)
{
if(sokytuBimat)
printf("%c",tuBimat);
else
printf("*");
}
printf("\n Xin moi ban doan mot ky tu: ");
kytu=docKytu();

if(!kiemtraKytu(kytu,tuBimat,sokytuBimat))
{
soluotDoan--;
}
}
if(win(sokytuBimat,dodaiTu))
printf("\n\n Chuc mung ban da chien thang ! Tu bi mat la: %s", tuBimat);
else
printf("\n\n Xin chia buon, ban da thua! \n\n Tu bi mat la: %s", tuBimat);
}
}

printf("\n\nTro choi ket thuc!! \n");
printf("Ban cho muon choi lai khong?\n");
printf("Lua chon 1 de choi lai, lua chon 0 de thoat tro choi\n");
printf("Lua chon cua ban la: ");
scanf("%d",&choilai);
}
return 0;
}
char docKytu()
{
char kytuNhapVao=0;
kytuNhapVao=getchar();
kytuNhapVao=toupper(kytuNhapVao);
while(getchar()!='\n');
return kytuNhapVao;
}
int win(int sokytuBimat[],long dodaiTu)
{
long i=0;
int nguoichoiChienThang=1;
for(i=0;i<dodaiTu;i++)
{
if(sokytuBimat==0)
nguoichoiChienThang=0;
}
return nguoichoiChienThang;
}
int kiemtraKytu(char kytu, char tuBimat[], int sokytuBimat[])
{
long i=0;
int kytuChinhXac=0;
for (i=0;tuBimat!='\0';i++)
{
if(kytu==tuBimat)
{
kytuChinhXac=1;
sokytuBimat=1;
}
}
return kytuChinhXac;
}


Tệp danhmuc.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#include "danhmuc.h"

int chonTu(char*tuDuocChon)
{
FILE *danhmuc=NULL;
int soThuTuCuaTu=0,soThuTuCuaTuDuocChon=0,i=0;
int luuKytu=0;
danhmuc=fopen("danhmuc.txt","r");
if(danhmuc==NULL)
{
printf("\n Khong the mo danh muc tu bi mat");
return 0;
}

do
{
luuKytu=fgetc(danhmuc);
if(luuKytu=='\n')
soThuTuCuaTu++;
}while (luuKytu!=EOF);
soThuTuCuaTuDuocChon=tuNgauNhien(soThuTuCuaTu);
rewind(danhmuc);
while(soThuTuCuaTuDuocChon>0)
{
luuKytu=fgetc(danhmuc);
if(luuKytu=='\n')
soThuTuCuaTuDuocChon--;
}
fgets(tuDuocChon,100,danhmuc);
tuDuocChon[strlen(tuDuocChon)-1]='\0';
fclose(danhmuc);
return 1;
}
int tuNgauNhien(int sothutuLonNhat)
{
srand(time(NULL));
return(rand()%sothutuLonNhat);
}

Tệp danhmuc.h

#ifndef DEF_DANHMUC
#define DEF_DANHMUC

int chonTu(char*tuDuocChon);
int tuNgauNhien(int sothutuLonNhat);

#endif // DANHMUC_H_INCLUDED
Tệp danhmuc.txt
LOVE
MONEY
PROGRAM
FUNCTION
POINTER
LOOP
INSTRUCTION
STRING
VARIABLE
CONSTANT
DEFINE
 

librec

Rìu Sắt
Sau thời gian ngâm cưu rất nhiều, tổng quan chung thì thay đổi bên tập tin main.c.

Main.c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

#include "danhmuc.h"

int win(int sokytuBimat[],long dodaiTu);
int kiemtraKytu(char kytu,char tuBimat[], int sokytuBimat[]);
char docKytu();

int main()
{
int choilai=1;
while(choilai)
{
int chedo;
printf("TRO CHOI NGUOI TREO CO \n");
printf("1. Nguoi choi thu 1 nhap ky tu \n");
printf("2. Nguoi choi thu 2 bat dau choi \n");
printf("Lua chon cua ban la: ");
scanf("%d",&chedo);
while(getchar()!='\n');
switch(chedo)
{
case 1:

{
char nhapkytu1[10];
char nhapkytu2[10];
char nhapkytu3[10];
FILE *danhmuc = NULL;
danhmuc=fopen("danhmuc.txt", "w+");
if (danhmuc != NULL)
{
// Sau day ban se nhap ky tu
printf ("Ban nhap ky tu thu 1 la= \n");
scanf ("%s", nhapkytu1);
fprintf (danhmuc,"%s\n",nhapkytu1);

printf ("Ban nhap ky tu thu 2 la= \n");
scanf ("%s", nhapkytu2);
fprintf (danhmuc,"%s\n",nhapkytu2);

printf ("Ban nhap ky tu thu 3 la= \n");
scanf ("%s", nhapkytu3);
fprintf (danhmuc,"%s\n",nhapkytu3);

fclose(danhmuc);
return 0;
break;
}

}
case 2:
{
char kytu=0;
char tuBimat[100]={0};
int *sokytuBimat=NULL;
long soluotDoan=10;
long i =0;
long dodaiTu=0;
printf("CHAO MUNG DEN VOI TRO CHOI NGUOI TREO CO!\n\n");

if(!chonTu(tuBimat))
exit(0);
dodaiTu=strlen(tuBimat);
sokytuBimat=malloc(dodaiTu*sizeof(int));
if(sokytuBimat==NULL)
exit(0);
for(i=0;i<dodaiTu;i++)
sokytuBimat=0;
while (soluotDoan>0&&!win(sokytuBimat,dodaiTu))
{
printf("\n\n Ban co %d luot doan de choi", soluotDoan);
printf("\n Tu bi mat la gi?");

for(i=0;i<dodaiTu;i++)
{
if(sokytuBimat)
printf("%c",tuBimat);
else
printf("*");
}
printf("\n Xin moi ban doan mot ky tu: ");
kytu=docKytu();

if(!kiemtraKytu(kytu,tuBimat,sokytuBimat))
{
soluotDoan--;
}
}
if(win(sokytuBimat,dodaiTu))
printf("\n\n Chuc mung ban da chien thang ! Tu bi mat la: %s", tuBimat);
else
printf("\n\n Xin chia buon, ban da thua! \n\n Tu bi mat la: %s", tuBimat);
free (sokytuBimat);
}
}
printf("\n\n Tro choi ket thuc!! \n");
printf("Ban cho muon choi lai khong?\n");
printf("Lua chon 1 de choi lai, lua chon 0 de thoat tro choi\n");
printf("Lua chon cua ban la: ");
scanf("%d",&choilai);
}
return 0;
}

char docKytu()
{
char kytuNhapVao=0;
kytuNhapVao=getchar();
kytuNhapVao=toupper(kytuNhapVao);
while(getchar()!='\n');
return kytuNhapVao;
}
int win(int sokytuBimat[],long dodaiTu)
{
long i=0;
int nguoichoiChienThang=1;
for(i=0;i<dodaiTu;i++)
{
if(sokytuBimat==0)
nguoichoiChienThang=0;
}
return nguoichoiChienThang;
}
int kiemtraKytu(char kytu, char tuBimat[], int sokytuBimat[])
{
long i=0;
int kytuChinhXac=0;
for (i=0;tuBimat!='\0';i++)
{
if(kytu==tuBimat)
{
kytuChinhXac=1;
sokytuBimat=1;
}
}
return kytuChinhXac;
}


Để cho 2 người chơi, mình đã cài chế độ người thứ nhất nhập ký tự vào tập tin danhmuc.txt, sau đó người thứ nhất kết thúc và người thứ 2 bắt đầu đoán. Mình sử dụng hàm switch(chedo).
code:
case 1:

{
char nhapkytu1[10];
char nhapkytu2[10];
char nhapkytu3[10];
FILE *danhmuc = NULL;
danhmuc=fopen("danhmuc.txt", "w+");
if (danhmuc != NULL)
{
// Sau day ban se nhap ky tu
printf ("Ban nhap ky tu thu 1 la= \n");
scanf ("%s", nhapkytu1);
fprintf (danhmuc,"%s\n",nhapkytu1);

printf ("Ban nhap ky tu thu 2 la= \n");
scanf ("%s", nhapkytu2);
fprintf (danhmuc,"%s\n",nhapkytu2);

printf ("Ban nhap ky tu thu 3 la= \n");
scanf ("%s", nhapkytu3);
fprintf (danhmuc,"%s\n",nhapkytu3);

fclose(danhmuc);
return 0;
break;
}

}
 

jablonec

Rìu Chiến Chấm
Đọc topic này cũng thấy hay.

 

tungtx

Gà con
Mình học ngành Hóa học, đang làm nghiên cứu về mảng Nano-toxicology. Mình dùng R và Rstudio để xây dựng các mô hình dự đoán Nano-toxicology, dùng R cũng phải code khá nhiều.
Gốc của mình là ngành Hóa nên lúc dùng R và Rstudio mình phải học từ con số 0. Muốn làm việc gì động tới R/Rstudio là đều phải tra Google, Stackoverflow. Dần dần mình cũng xây dựng được mô hình và tạo ra web-app cho người khác dùng mô hình của mình.
Mình nghĩ học lập trình không quá khó nếu bạn có công việc cụ thể cần phải giải quyết, chịu khó tìm tòi là dần dần sẽ được việc thôi. Những bạn có nền tảng về khoa học máy tính, khoa học dữ liệu và đặc biệt là giỏi toán thì sẽ có ưu thế cực kì lớn so với những người không có nền tảng như mình.

Mình thấy Python cũng có rất nhiều người quan tâm, nếu được mong các bạn chia sẻ tài liệu hay kinh nghiệm học và dùng Python cơ bản.
 

statistics

Moderator
Thành viên BQT
Mời các bạn đón đọc.
 

jablonec

Rìu Chiến Chấm
Mời các bạn đón đọc.
Hi vọng Mod @statistics và mình sẽ có những bài viết làm cho box này thêm phong phú và đa dạng.
 

sam146

Búa Gỗ
1. Học lập trình có khó không?
- Để kiếm sống thì dễ. Nếu mục tiêu cao đương nhiên khó.
2. Học lập trình có cần giỏi toán không?
- Trung bình hay khá là được rồi. Phần lớn các vấn đề trong công việc thực tế đều giải quyết được bằng các công cụ hay thư viện có sẵn.
3. Học lập trình nên bắt đầu từ đâu?
- Lập trình là 1 trong nhiều công cụ để giải quyết vấn đề. Bạn muốn làm gì? Nếu làm web có thể bắt đầu với JavaScript. Ngôn ngữ dễ học, có nhiều việc làm hiện nay.
 
1. Học lập trình có khó không?
- Chắc cũng ko khó lắm đâu. Mình không phải là dân IT nhưng vẫn đang tự học được đây
2. Học lập trình có cần giỏi toán không?
-Thật ra không cần lắm đâu. Tuy nhiên, có một số lĩnh vực cần đến kiến thức toán như machine learning.
3. Học lập trình nên bắt đầu từ đâu?
- Nên bắt đầu từ cái mình muốn giải quyết trong cuộc sống. Hoặc bạn có thể học ngôn ngữ dễ nhất, ví dụ Python.
 

jablonec

Rìu Chiến Chấm
Em đang chạy chương trình đồ họa trong C# thì gặp lỗi này các bác ạ. Search trên mạng hoài mà không sửa được lỗi, bác nào đã gặp trường hợp này chưa cho em xin cách giải quyết được không ạ.
Error: The name 'InitializeComponent' does not exist in the current context

Untitlede695eb0b4264195e.png
 

jablonec

Rìu Chiến Chấm
Em đang chạy chương trình đồ họa trong C# thì gặp lỗi này các bác ạ. Search trên mạng hoài mà không sửa được lỗi, bác nào đã gặp trường hợp này chưa cho em xin cách giải quyết được không ạ.
Error: The name 'InitializeComponent' does not exist in the current context

Untitlede695eb0b4264195e.png
Mấy hôm nay mình đang ngâm cứu đồ họa đa phương tiện và in ấn trong C#. Gặp bài Xoay chữ trong C# mà gặp phải lỗi trên. Mặc dù đã mò trên các mặt trận, lên các diễn đàn lập trình để hỏi nhưng vẫn phải mò mẫm. Cách làm:
Tạo một form và kích vào form sẽ xuất hiện code và thêm code vào:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Drawing.Drawing2D;
using System.Drawing.Text;

using System.Threading.Tasks;
using System.Windows.Forms;

namespace XoayChu
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void DrawRotatedTextAt(Graphics gr, float angle, string txt, int x, int y, Font the_font, Brush the_brush)
{
// Lưu lại trạng thái đồ họa gốc.
GraphicsState state = gr.Save();

gr.ResetTransform();

// Thực hiện xoay chữ.
gr.RotateTransform(angle); //angle là góc xoay

// Di chuyển tới vị trí mong muốn.
gr.TranslateTransform(x, y, MatrixOrder.Append);

// Vẽ chuỗi ký tự gốc.
gr.DrawString(txt, the_font, the_brush, 0, 0);

// Phục hồi trạng thái đồ họa gốc.
gr.Restore(state);
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

using (Font the_font = new Font("Comic Sans MS", 20))
{
const int dx = 40;
int x = 40, y = 250;
DrawRotatedTextAt(e.Graphics, -70, "cuocsong6so", x, y, the_font, Brushes.Red);
x += dx;
DrawRotatedTextAt(e.Graphics, -90, "cuocsong6so", x, y, the_font, Brushes.Red);
x += dx;
DrawRotatedTextAt(e.Graphics, -30, "cuocsong6so", x, y, the_font, Brushes.Red);
}
}
}
}
Riêng phần private void Form1_Paint(object sender, PaintEventArgs e) ban đầu nó là: private void Form1_Load(object sender, EventArgs e).

Khi chạy báo lỗi vào bên Form1.Desiginer.cs sửa lại đoạn sau thành: this.Paint +=this.Form1_Paint;

Kết quả:

Untitled4e17b5dba5c51cc2.png
 

jablonec

Rìu Chiến Chấm
Bài toán về Liệt kê danh sách các font chữ được cài đặt vào máy tính.
Tạo một font có nút button (Get Font), một listBox. Code chương trình:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Drawing.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GetInstalledFonts
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), new Font(listBox1.Items[e.Index].ToString(), 20), Brushes.Black, e.Bounds);

}

private void btn_getfont_Click(object sender, EventArgs e)
{
listBox1.ItemHeight = 30;

using (InstalledFontCollection col = new InstalledFontCollection())
{
foreach (FontFamily fa in col.Families)
{

listBox1.Items.Add(fa.Name);
}
listBox1.DrawMode = DrawMode.OwnerDrawFixed;
}
}
}
}
Khi chạy sẽ báo lỗi: private void listBox1_DrawItem(object sender, DrawItemEventArgs e) vào bên Form1.Desiginer.cs sửa lại đoạn sau thành: this.listBox1.DrawItem +=this.listBox1_DrawItem;

Kết quả:


Animation.gif

 

dammage

Rìu Chiến
Bài toán về Liệt kê danh sách các font chữ được cài đặt vào máy tính.
Tạo một font có nút button (Get Font), một listBox. Code chương trình:


Khi chạy sẽ báo lỗi: private void listBox1_DrawItem(object sender, DrawItemEventArgs e) vào bên Form1.Desiginer.cs sửa lại đoạn sau thành: this.listBox1.DrawItem +=this.listBox1_DrawItem;

Kết quả:


Animation.gif

chúc mừng bạn, tự sửa lỗi sẽ làm tăng kinh nghiệm và tiến bộ nhanh hơn
 

librec

Rìu Sắt
Thực hiện hit testing trong Shape. Các bạn mở chương trình visua studio, tạo một Form với tên hit testing, sau đó bên propertice chọn các mục Paint và Mouse move. Sau đó chèn code vào:

Untitled33d120190a56054b.png

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace HitTesting
{
public partial class HitTesting : Form
{
public HitTesting()
{
InitializeComponent();
}
// (Bỏ qua phần mã designer.)
// Định nghĩa các shape sẽ được sử dụng.
private GraphicsPath path;
private Rectangle rectangle;
// Định nghĩa các cờ để theo vết con trỏ chuột.
private bool inPath = false;
private bool inRectangle = false;
// Định nghĩa các bút vẽ.
Brush highlightBrush = Brushes.HotPink;
Brush defaultBrush = Brushes.LightBlue;

private void HitTesting_Load(object sender, EventArgs e)
{
// Tạo các shape.
path = new GraphicsPath();
path.AddEllipse(10, 10, 100, 60);
path.AddCurve(new Point[] {new Point(50, 50), new Point(10,33), new Point(80,43)});
path.AddLine(50, 120, 250, 80);
path.AddLine(120, 40, 110, 50);
path.CloseFigure();
rectangle = new Rectangle(100, 170, 220, 120);
}

private void HitTesting_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
// Vẽ shape dựa trên phần chọn hiện tại.
if (inPath)
{
g.FillPath(highlightBrush, path);
g.FillRectangle(defaultBrush, rectangle);
}
else if (inRectangle)
{
g.FillRectangle(highlightBrush, rectangle);
g.FillPath(defaultBrush, path);
}
else
{
g.FillPath(defaultBrush, path);
g.FillRectangle(defaultBrush, rectangle);
}
g.DrawPath(Pens.Black, path);
g.DrawRectangle(Pens.Black, rectangle);
}

private void HitTesting_MouseMove(object sender, MouseEventArgs e)
{
Graphics g = this.CreateGraphics();
// Thực hiện "hit testing" với hình chữ nhật.
if (rectangle.Contains(e.X, e.Y)) {
if (!inRectangle) {
inRectangle = true;
// Đổi màu nền hình chữ nhật.
g.FillRectangle(highlightBrush, rectangle);
g.DrawRectangle(Pens.Black, rectangle);
}
}else if (inRectangle) {
inRectangle = false;
// Phục hồi hình chữ nhật.
g.FillRectangle(defaultBrush, rectangle);
g.DrawRectangle(Pens.Black, rectangle);
}
// Thực hiện "hit testing" với path.
if (path.IsVisible(e.X, e.Y)) {
if (!inPath) {
inPath = true;
// Đổi màu nền path.
g.FillPath(highlightBrush, path);
g.DrawPath(Pens.Black, path);
}
}else if (inPath) {
inPath = false;
// Phục hồi path.
g.FillPath(defaultBrush, path);
g.DrawPath(Pens.Black, path);
}
g.Dispose();
}
}
}
Kết quả:

Animation.gif
 

NgoHungCuong


Junior Moderator
Thành viên BQT
giờ học lập trình mà học C/C++ là dở rồi. Nên học php hay golang ấy bác, dạo này tuyển nhiều vãi
Chả nhẽ code cho vi điều khiển dùng PHP với golang?
Tùy mục tiêu mà học cái gì cho phù hợp chứ bạn.
Mình viết code cho vi điều khiển đây. C vẫn là ổn nhất cho vi điều khiển.